mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-03-16 21:53:07 +00:00
Changes from fix/bug-fixes-1rc
This commit is contained in:
@@ -179,11 +179,18 @@ export function AgentOutputModal({
|
|||||||
enabled: open && !!resolvedProjectPath,
|
enabled: open && !!resolvedProjectPath,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Fetch feature data to access the server-side accumulated summary
|
// Fetch feature data to access the server-side accumulated summary.
|
||||||
|
// Also used to show fresh description/status instead of potentially stale props
|
||||||
|
// (e.g. when opening via deep link from a notification click).
|
||||||
const { data: feature, refetch: refetchFeature } = useFeature(resolvedProjectPath, featureId, {
|
const { data: feature, refetch: refetchFeature } = useFeature(resolvedProjectPath, featureId, {
|
||||||
enabled: open && !!resolvedProjectPath && !isBacklogPlan,
|
enabled: open && !!resolvedProjectPath && !isBacklogPlan,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Prefer fresh data from server over potentially stale props passed at open time.
|
||||||
|
const resolvedDescription = feature?.description ?? featureDescription;
|
||||||
|
const resolvedStatus = feature?.status ?? featureStatus;
|
||||||
|
const resolvedBranchName = feature?.branchName ?? branchName;
|
||||||
|
|
||||||
// Reset streamed content when modal opens or featureId changes
|
// Reset streamed content when modal opens or featureId changes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (open) {
|
if (open) {
|
||||||
@@ -519,7 +526,7 @@ export function AgentOutputModal({
|
|||||||
<DialogHeader className="shrink-0">
|
<DialogHeader className="shrink-0">
|
||||||
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2 pr-10">
|
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2 pr-10">
|
||||||
<DialogTitle className="flex items-center gap-2">
|
<DialogTitle className="flex items-center gap-2">
|
||||||
{featureStatus !== 'verified' && featureStatus !== 'waiting_approval' && (
|
{resolvedStatus !== 'verified' && resolvedStatus !== 'waiting_approval' && (
|
||||||
<Spinner size="md" />
|
<Spinner size="md" />
|
||||||
)}
|
)}
|
||||||
Agent Output
|
Agent Output
|
||||||
@@ -581,7 +588,7 @@ export function AgentOutputModal({
|
|||||||
className="mt-1 max-h-24 overflow-y-auto wrap-break-word"
|
className="mt-1 max-h-24 overflow-y-auto wrap-break-word"
|
||||||
data-testid="agent-output-description"
|
data-testid="agent-output-description"
|
||||||
>
|
>
|
||||||
{featureDescription}
|
{resolvedDescription}
|
||||||
</DialogDescription>
|
</DialogDescription>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
|
|
||||||
@@ -601,7 +608,7 @@ export function AgentOutputModal({
|
|||||||
{resolvedProjectPath ? (
|
{resolvedProjectPath ? (
|
||||||
<GitDiffPanel
|
<GitDiffPanel
|
||||||
projectPath={resolvedProjectPath}
|
projectPath={resolvedProjectPath}
|
||||||
featureId={branchName || featureId}
|
featureId={resolvedBranchName || featureId}
|
||||||
compact={false}
|
compact={false}
|
||||||
useWorktrees={useWorktrees}
|
useWorktrees={useWorktrees}
|
||||||
className="border-0 rounded-lg"
|
className="border-0 rounded-lg"
|
||||||
|
|||||||
@@ -595,8 +595,8 @@ function RootLayoutContent() {
|
|||||||
'[FAST_HYDRATE] Background reconcile: cache updated (store untouched)'
|
'[FAST_HYDRATE] Background reconcile: cache updated (store untouched)'
|
||||||
);
|
);
|
||||||
|
|
||||||
// Selectively reconcile event hooks from server.
|
// Selectively reconcile event hooks and ntfy endpoints from server.
|
||||||
// Unlike projects/theme, eventHooks aren't rendered on the main view,
|
// Unlike projects/theme, these aren't rendered on the main view,
|
||||||
// so updating them won't cause a visible re-render flash.
|
// so updating them won't cause a visible re-render flash.
|
||||||
const serverHooks = (finalSettings as GlobalSettings).eventHooks ?? [];
|
const serverHooks = (finalSettings as GlobalSettings).eventHooks ?? [];
|
||||||
const currentHooks = useAppStore.getState().eventHooks;
|
const currentHooks = useAppStore.getState().eventHooks;
|
||||||
@@ -609,6 +609,19 @@ function RootLayoutContent() {
|
|||||||
);
|
);
|
||||||
useAppStore.setState({ eventHooks: serverHooks });
|
useAppStore.setState({ eventHooks: serverHooks });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reconcile ntfy endpoints from server (same rationale as eventHooks)
|
||||||
|
const serverEndpoints = (finalSettings as GlobalSettings).ntfyEndpoints ?? [];
|
||||||
|
const currentEndpoints = useAppStore.getState().ntfyEndpoints;
|
||||||
|
if (
|
||||||
|
JSON.stringify(serverEndpoints) !== JSON.stringify(currentEndpoints) &&
|
||||||
|
serverEndpoints.length > 0
|
||||||
|
) {
|
||||||
|
logger.info(
|
||||||
|
`[FAST_HYDRATE] Reconciling ntfyEndpoints from server (server=${serverEndpoints.length}, store=${currentEndpoints.length})`
|
||||||
|
);
|
||||||
|
useAppStore.setState({ ntfyEndpoints: serverEndpoints });
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.debug('[FAST_HYDRATE] Failed to update cache:', e);
|
logger.debug('[FAST_HYDRATE] Failed to update cache:', e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ test.describe('Feature Deep Link', () => {
|
|||||||
let projectPath: string;
|
let projectPath: string;
|
||||||
let projectName: string;
|
let projectName: string;
|
||||||
|
|
||||||
test.beforeEach(async ({}, testInfo) => {
|
test.beforeEach(async (_fixtures, testInfo) => {
|
||||||
projectName = `test-project-${testInfo.workerIndex}-${Date.now()}`;
|
projectName = `test-project-${testInfo.workerIndex}-${Date.now()}`;
|
||||||
projectPath = path.join(TEST_TEMP_DIR, projectName);
|
projectPath = path.join(TEST_TEMP_DIR, projectName);
|
||||||
fs.mkdirSync(projectPath, { recursive: true });
|
fs.mkdirSync(projectPath, { recursive: true });
|
||||||
|
|||||||
8
package-lock.json
generated
8
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "automaker",
|
"name": "automaker",
|
||||||
"version": "0.15.0",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "automaker",
|
"name": "automaker",
|
||||||
"version": "0.15.0",
|
"version": "1.0.0",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
},
|
},
|
||||||
"apps/server": {
|
"apps/server": {
|
||||||
"name": "@automaker/server",
|
"name": "@automaker/server",
|
||||||
"version": "0.15.0",
|
"version": "1.0.0",
|
||||||
"license": "SEE LICENSE IN LICENSE",
|
"license": "SEE LICENSE IN LICENSE",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@anthropic-ai/claude-agent-sdk": "0.2.32",
|
"@anthropic-ai/claude-agent-sdk": "0.2.32",
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
},
|
},
|
||||||
"apps/ui": {
|
"apps/ui": {
|
||||||
"name": "@automaker/ui",
|
"name": "@automaker/ui",
|
||||||
"version": "0.15.0",
|
"version": "1.0.0",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "SEE LICENSE IN LICENSE",
|
"license": "SEE LICENSE IN LICENSE",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
Reference in New Issue
Block a user