@kenkaiiii/ggcoder 4.3.230 → 4.3.232
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -1
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +29 -0
- package/dist/config.test.js.map +1 -0
- package/dist/core/goal-controller.d.ts +27 -6
- package/dist/core/goal-controller.d.ts.map +1 -1
- package/dist/core/goal-controller.js +246 -141
- package/dist/core/goal-controller.js.map +1 -1
- package/dist/core/goal-controller.test.js +210 -79
- package/dist/core/goal-controller.test.js.map +1 -1
- package/dist/core/goal-engine.d.ts +61 -0
- package/dist/core/goal-engine.d.ts.map +1 -0
- package/dist/core/goal-engine.js +123 -0
- package/dist/core/goal-engine.js.map +1 -0
- package/dist/core/goal-engine.test.d.ts +2 -0
- package/dist/core/goal-engine.test.d.ts.map +1 -0
- package/dist/core/goal-engine.test.js +295 -0
- package/dist/core/goal-engine.test.js.map +1 -0
- package/dist/core/goal-integration.d.ts +80 -0
- package/dist/core/goal-integration.d.ts.map +1 -0
- package/dist/core/goal-integration.js +296 -0
- package/dist/core/goal-integration.js.map +1 -0
- package/dist/core/goal-integration.test.d.ts +2 -0
- package/dist/core/goal-integration.test.d.ts.map +1 -0
- package/dist/core/goal-integration.test.js +369 -0
- package/dist/core/goal-integration.test.js.map +1 -0
- package/dist/core/goal-prerequisites.test.js +37 -1
- package/dist/core/goal-prerequisites.test.js.map +1 -1
- package/dist/core/goal-store.d.ts +80 -1
- package/dist/core/goal-store.d.ts.map +1 -1
- package/dist/core/goal-store.js +232 -65
- package/dist/core/goal-store.js.map +1 -1
- package/dist/core/goal-store.test.js +111 -2
- package/dist/core/goal-store.test.js.map +1 -1
- package/dist/core/goal-worker.d.ts.map +1 -1
- package/dist/core/goal-worker.js +55 -4
- package/dist/core/goal-worker.js.map +1 -1
- package/dist/core/goal-worker.test.js +75 -6
- package/dist/core/goal-worker.test.js.map +1 -1
- package/dist/core/goal-worktree.d.ts +55 -1
- package/dist/core/goal-worktree.d.ts.map +1 -1
- package/dist/core/goal-worktree.js +164 -1
- package/dist/core/goal-worktree.js.map +1 -1
- package/dist/core/goal-worktree.test.js +226 -4
- package/dist/core/goal-worktree.test.js.map +1 -1
- package/dist/core/ideal-review.d.ts +20 -0
- package/dist/core/ideal-review.d.ts.map +1 -0
- package/dist/core/ideal-review.js +55 -0
- package/dist/core/ideal-review.js.map +1 -0
- package/dist/core/ideal-review.test.d.ts +2 -0
- package/dist/core/ideal-review.test.d.ts.map +1 -0
- package/dist/core/ideal-review.test.js +59 -0
- package/dist/core/ideal-review.test.js.map +1 -0
- package/dist/core/settings-manager.d.ts +1 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +9 -6
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +1 -1
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/edit-diff.d.ts +17 -4
- package/dist/tools/edit-diff.d.ts.map +1 -1
- package/dist/tools/edit-diff.js +78 -16
- package/dist/tools/edit-diff.js.map +1 -1
- package/dist/tools/edit-diff.test.js +31 -1
- package/dist/tools/edit-diff.test.js.map +1 -1
- package/dist/tools/edit-robustness.test.d.ts +2 -0
- package/dist/tools/edit-robustness.test.d.ts.map +1 -0
- package/dist/tools/edit-robustness.test.js +415 -0
- package/dist/tools/edit-robustness.test.js.map +1 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +15 -16
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +23 -12
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/goals.d.ts +9 -1
- package/dist/tools/goals.d.ts.map +1 -1
- package/dist/tools/goals.js +78 -25
- package/dist/tools/goals.js.map +1 -1
- package/dist/tools/goals.test.js +142 -11
- package/dist/tools/goals.test.js.map +1 -1
- package/dist/tools/html-extract.d.ts +58 -0
- package/dist/tools/html-extract.d.ts.map +1 -0
- package/dist/tools/html-extract.js +130 -0
- package/dist/tools/html-extract.js.map +1 -0
- package/dist/tools/html-extract.test.d.ts +2 -0
- package/dist/tools/html-extract.test.d.ts.map +1 -0
- package/dist/tools/html-extract.test.js +60 -0
- package/dist/tools/html-extract.test.js.map +1 -0
- package/dist/tools/pdf-extract.d.ts +18 -0
- package/dist/tools/pdf-extract.d.ts.map +1 -0
- package/dist/tools/pdf-extract.js +43 -0
- package/dist/tools/pdf-extract.js.map +1 -0
- package/dist/tools/pdf-extract.test.d.ts +2 -0
- package/dist/tools/pdf-extract.test.d.ts.map +1 -0
- package/dist/tools/pdf-extract.test.js +15 -0
- package/dist/tools/pdf-extract.test.js.map +1 -0
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +2 -1
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +16 -1
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +357 -45
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +263 -2
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/tools/web-search.d.ts +14 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +321 -35
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/web-search.test.js +144 -1
- package/dist/tools/web-search.test.js.map +1 -1
- package/dist/ui/App.d.ts +11 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +132 -17
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-items.d.ts +14 -1
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js +2 -0
- package/dist/ui/app-items.js.map +1 -1
- package/dist/ui/components/ChatLayout.d.ts +8 -1
- package/dist/ui/components/ChatLayout.d.ts.map +1 -1
- package/dist/ui/components/ChatLayout.js +4 -1
- package/dist/ui/components/ChatLayout.js.map +1 -1
- package/dist/ui/components/ChatScreen.d.ts +14 -1
- package/dist/ui/components/ChatScreen.d.ts.map +1 -1
- package/dist/ui/components/ChatScreen.js +3 -2
- package/dist/ui/components/ChatScreen.js.map +1 -1
- package/dist/ui/components/IdealHookMessage.d.ts +12 -0
- package/dist/ui/components/IdealHookMessage.d.ts.map +1 -0
- package/dist/ui/components/IdealHookMessage.js +24 -0
- package/dist/ui/components/IdealHookMessage.js.map +1 -0
- package/dist/ui/components/InputArea.d.ts +13 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +96 -12
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/TranscriptViewport.d.ts +34 -0
- package/dist/ui/components/TranscriptViewport.d.ts.map +1 -0
- package/dist/ui/components/TranscriptViewport.js +45 -0
- package/dist/ui/components/TranscriptViewport.js.map +1 -0
- package/dist/ui/footer-jump-regression.test.d.ts +2 -0
- package/dist/ui/footer-jump-regression.test.d.ts.map +1 -0
- package/dist/ui/footer-jump-regression.test.js +167 -0
- package/dist/ui/footer-jump-regression.test.js.map +1 -0
- package/dist/ui/goal-events.d.ts +1 -1
- package/dist/ui/goal-events.d.ts.map +1 -1
- package/dist/ui/goal-events.js +2 -2
- package/dist/ui/goal-events.js.map +1 -1
- package/dist/ui/goal-events.test.js +2 -2
- package/dist/ui/goal-events.test.js.map +1 -1
- package/dist/ui/goal-lifecycle-orchestration.test.js +13 -97
- package/dist/ui/goal-lifecycle-orchestration.test.js.map +1 -1
- package/dist/ui/goal-progress.d.ts.map +1 -1
- package/dist/ui/goal-progress.js +0 -1
- package/dist/ui/goal-progress.js.map +1 -1
- package/dist/ui/goal-run-helpers.d.ts +0 -4
- package/dist/ui/goal-run-helpers.d.ts.map +1 -1
- package/dist/ui/goal-run-helpers.js +2 -21
- package/dist/ui/goal-run-helpers.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +45 -1
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +8 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.js +2 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -1
- package/dist/ui/hooks/useGoalOrchestration.d.ts +2 -1
- package/dist/ui/hooks/useGoalOrchestration.d.ts.map +1 -1
- package/dist/ui/hooks/useGoalOrchestration.js +198 -80
- package/dist/ui/hooks/useGoalOrchestration.js.map +1 -1
- package/dist/ui/hooks/useTerminalSize.d.ts +8 -1
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalSize.js +12 -2
- package/dist/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.d.ts +1 -1
- package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.js +23 -9
- package/dist/ui/hooks/useTranscriptHistory.js.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptHistory.test.js +61 -0
- package/dist/ui/hooks/useTranscriptHistory.test.js.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.d.ts +30 -0
- package/dist/ui/hooks/useTranscriptScroll.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.js +44 -0
- package/dist/ui/hooks/useTranscriptScroll.js.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.test.js +119 -0
- package/dist/ui/hooks/useTranscriptScroll.test.js.map +1 -0
- package/dist/ui/live-area-clamp.test.js +11 -2
- package/dist/ui/live-area-clamp.test.js.map +1 -1
- package/dist/ui/render.d.ts +11 -0
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +71 -7
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/stores/transcript-scroll-store.d.ts +27 -0
- package/dist/ui/stores/transcript-scroll-store.d.ts.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.js +73 -0
- package/dist/ui/stores/transcript-scroll-store.js.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.test.d.ts +2 -0
- package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.test.js +73 -0
- package/dist/ui/stores/transcript-scroll-store.test.js.map +1 -0
- package/dist/ui/terminal-history.d.ts.map +1 -1
- package/dist/ui/terminal-history.js +8 -0
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/testing/screen-recorder.d.ts +29 -0
- package/dist/ui/testing/screen-recorder.d.ts.map +1 -0
- package/dist/ui/testing/screen-recorder.js +179 -0
- package/dist/ui/testing/screen-recorder.js.map +1 -0
- package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
- package/dist/ui/transcript/TranscriptRenderer.js +4 -1
- package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
- package/dist/ui/transcript/spacing.d.ts +3 -2
- package/dist/ui/transcript/spacing.d.ts.map +1 -1
- package/dist/ui/transcript/spacing.js +8 -0
- package/dist/ui/transcript/spacing.js.map +1 -1
- package/dist/ui/transcript/spacing.test.js +31 -0
- package/dist/ui/transcript/spacing.test.js.map +1 -1
- package/dist/ui/transcript/transcript-lines.d.ts +32 -0
- package/dist/ui/transcript/transcript-lines.d.ts.map +1 -0
- package/dist/ui/transcript/transcript-lines.js +82 -0
- package/dist/ui/transcript/transcript-lines.js.map +1 -0
- package/dist/ui/transcript/transcript-lines.test.d.ts +2 -0
- package/dist/ui/transcript/transcript-lines.test.d.ts.map +1 -0
- package/dist/ui/transcript/transcript-lines.test.js +76 -0
- package/dist/ui/transcript/transcript-lines.test.js.map +1 -0
- package/dist/ui/transcript-viewport-pinning.test.d.ts +2 -0
- package/dist/ui/transcript-viewport-pinning.test.d.ts.map +1 -0
- package/dist/ui/transcript-viewport-pinning.test.js +148 -0
- package/dist/ui/transcript-viewport-pinning.test.js.map +1 -0
- package/dist/ui/tui-history-parity.test.js +8 -0
- package/dist/ui/tui-history-parity.test.js.map +1 -1
- package/dist/ui/tui-simulation.test.d.ts +2 -0
- package/dist/ui/tui-simulation.test.d.ts.map +1 -0
- package/dist/ui/tui-simulation.test.js +138 -0
- package/dist/ui/tui-simulation.test.js.map +1 -0
- package/dist/ui/tui-terminal-recorder.test.d.ts +2 -0
- package/dist/ui/tui-terminal-recorder.test.d.ts.map +1 -0
- package/dist/ui/tui-terminal-recorder.test.js +134 -0
- package/dist/ui/tui-terminal-recorder.test.js.map +1 -0
- package/dist/utils/format.js +7 -0
- package/dist/utils/format.js.map +1 -1
- package/package.json +12 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal-store.d.ts","sourceRoot":"","sources":["../../src/core/goal-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"goal-store.d.ts","sourceRoot":"","sources":["../../src/core/goal-store.ts"],"names":[],"mappings":"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"}
|
package/dist/core/goal-store.js
CHANGED
|
@@ -3,6 +3,9 @@ import { readFileSync, writeFileSync } from "node:fs";
|
|
|
3
3
|
import { mkdir, open, readdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import { basename, join, resolve } from "node:path";
|
|
6
|
+
export function foldGoalTaskIntegration(value) {
|
|
7
|
+
return value === "manual" ? "manual" : "candidate";
|
|
8
|
+
}
|
|
6
9
|
const GOALS_BASE_ENV = "GG_GOALS_BASE";
|
|
7
10
|
const DEFAULT_PROJECT_DIR_NAME = "projects";
|
|
8
11
|
let writeQueue = Promise.resolve();
|
|
@@ -32,7 +35,7 @@ function mergeGoalTasks(existing, input) {
|
|
|
32
35
|
dependsOn: task.dependsOn ?? next.dependsOn,
|
|
33
36
|
parallelGroup: task.parallelGroup ?? next.parallelGroup,
|
|
34
37
|
expectedChangedScope: task.expectedChangedScope ?? next.expectedChangedScope,
|
|
35
|
-
|
|
38
|
+
integration: task.integration ?? next.integration,
|
|
36
39
|
verification: task.verification ?? next.verification,
|
|
37
40
|
lastSummary: task.lastSummary ?? next.lastSummary,
|
|
38
41
|
};
|
|
@@ -100,15 +103,15 @@ function isTaskStatus(value) {
|
|
|
100
103
|
value === "failed" ||
|
|
101
104
|
value === "blocked");
|
|
102
105
|
}
|
|
103
|
-
function
|
|
104
|
-
return
|
|
105
|
-
value === "after_dependencies" ||
|
|
106
|
-
value === "serial" ||
|
|
107
|
-
value === "manual");
|
|
106
|
+
function isTaskIntegration(value) {
|
|
107
|
+
return value === "candidate" || value === "manual";
|
|
108
108
|
}
|
|
109
109
|
function isPrerequisiteStatus(value) {
|
|
110
110
|
return value === "unknown" || value === "met" || value === "missing";
|
|
111
111
|
}
|
|
112
|
+
function isPrerequisiteKind(value) {
|
|
113
|
+
return value === "local" || value === "external";
|
|
114
|
+
}
|
|
112
115
|
function isEvidenceKind(value) {
|
|
113
116
|
return (value === "log" ||
|
|
114
117
|
value === "command" ||
|
|
@@ -164,6 +167,7 @@ function normalizePrerequisite(value) {
|
|
|
164
167
|
id: typeof value.id === "string" ? value.id : randomUUID(),
|
|
165
168
|
label,
|
|
166
169
|
status: isPrerequisiteStatus(value.status) ? value.status : "unknown",
|
|
170
|
+
...(isPrerequisiteKind(value.kind) ? { kind: value.kind } : {}),
|
|
167
171
|
...(optionalString(value.checkCommand)
|
|
168
172
|
? { checkCommand: optionalString(value.checkCommand) }
|
|
169
173
|
: {}),
|
|
@@ -244,6 +248,22 @@ function normalizeTaskWorktree(value) {
|
|
|
244
248
|
...(optionalString(value.error) ? { error: optionalString(value.error) } : {}),
|
|
245
249
|
};
|
|
246
250
|
}
|
|
251
|
+
function normalizeTaskCandidate(value) {
|
|
252
|
+
if (!isObject(value))
|
|
253
|
+
return undefined;
|
|
254
|
+
const baseRef = optionalString(value.baseRef);
|
|
255
|
+
const headSha = optionalString(value.headSha);
|
|
256
|
+
const branchName = optionalString(value.branchName);
|
|
257
|
+
if (!baseRef || !headSha || !branchName)
|
|
258
|
+
return undefined;
|
|
259
|
+
return {
|
|
260
|
+
baseRef,
|
|
261
|
+
headSha,
|
|
262
|
+
branchName,
|
|
263
|
+
changedFiles: stringArray(value.changedFiles),
|
|
264
|
+
committed: value.committed !== false,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
247
267
|
function normalizeTask(value) {
|
|
248
268
|
if (!isObject(value))
|
|
249
269
|
return null;
|
|
@@ -263,10 +283,17 @@ function normalizeTask(value) {
|
|
|
263
283
|
...(stringArray(value.expectedChangedScope).length > 0
|
|
264
284
|
? { expectedChangedScope: stringArray(value.expectedChangedScope) }
|
|
265
285
|
: {}),
|
|
266
|
-
|
|
286
|
+
integration: foldGoalTaskIntegration(isTaskIntegration(value.integration)
|
|
287
|
+
? value.integration
|
|
288
|
+
: typeof value.mergeStrategy === "string"
|
|
289
|
+
? value.mergeStrategy
|
|
290
|
+
: undefined),
|
|
267
291
|
...(normalizeTaskWorktree(value.worktree)
|
|
268
292
|
? { worktree: normalizeTaskWorktree(value.worktree) }
|
|
269
293
|
: {}),
|
|
294
|
+
...(normalizeTaskCandidate(value.candidate)
|
|
295
|
+
? { candidate: normalizeTaskCandidate(value.candidate) }
|
|
296
|
+
: {}),
|
|
270
297
|
...(normalizeVerification(value.verification)
|
|
271
298
|
? { verification: normalizeVerification(value.verification) }
|
|
272
299
|
: {}),
|
|
@@ -301,6 +328,51 @@ function normalizeVerifier(value) {
|
|
|
301
328
|
: {}),
|
|
302
329
|
};
|
|
303
330
|
}
|
|
331
|
+
function isIntegrationStatus(value) {
|
|
332
|
+
return value === "none" || value === "applied" || value === "committed";
|
|
333
|
+
}
|
|
334
|
+
function normalizeIntegration(value) {
|
|
335
|
+
if (!isObject(value))
|
|
336
|
+
return undefined;
|
|
337
|
+
if (!isIntegrationStatus(value.status))
|
|
338
|
+
return undefined;
|
|
339
|
+
return {
|
|
340
|
+
status: value.status,
|
|
341
|
+
...(optionalString(value.headSha) ? { headSha: optionalString(value.headSha) } : {}),
|
|
342
|
+
...(optionalString(value.baseRef) ? { baseRef: optionalString(value.baseRef) } : {}),
|
|
343
|
+
...(stringArray(value.files).length > 0 ? { files: stringArray(value.files) } : {}),
|
|
344
|
+
updatedAt: typeof value.updatedAt === "string" ? value.updatedAt : nowIso(),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Back-compat shim: infer the typed integration state from legacy evidence
|
|
349
|
+
* labels for runs persisted before {@link GoalIntegrationState} existed. This is
|
|
350
|
+
* the ONLY place label-matching is allowed to survive; it migrates old runs once.
|
|
351
|
+
*/
|
|
352
|
+
function inferIntegrationFromEvidence(evidence) {
|
|
353
|
+
const committed = evidence.find((item) => item.label === "Integrated Goal changes committed");
|
|
354
|
+
const applied = evidence.find((item) => item.label === "Integrated worktree applied to main" ||
|
|
355
|
+
item.label === "Goal decision: apply_integration_to_main");
|
|
356
|
+
if (!committed && !applied)
|
|
357
|
+
return undefined;
|
|
358
|
+
const source = committed ?? applied;
|
|
359
|
+
return {
|
|
360
|
+
status: committed ? "committed" : "applied",
|
|
361
|
+
updatedAt: source.createdAt,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Back-compat shim: infer the most recent non-audit worker completion time from
|
|
366
|
+
* legacy "Worker <id> done/failed" evidence for runs persisted before
|
|
367
|
+
* {@link GoalRun.lastSubstantiveWorkerAt} existed.
|
|
368
|
+
*/
|
|
369
|
+
function inferLastSubstantiveWorkerAt(evidence) {
|
|
370
|
+
const workerEvidence = evidence
|
|
371
|
+
.filter((item) => /^Worker\s+\S+\s+(done|failed)$/.test(item.label))
|
|
372
|
+
.map((item) => item.createdAt)
|
|
373
|
+
.sort((a, b) => b.localeCompare(a));
|
|
374
|
+
return workerEvidence[0];
|
|
375
|
+
}
|
|
304
376
|
function normalizeCompletionAudit(value) {
|
|
305
377
|
if (!isObject(value))
|
|
306
378
|
return undefined;
|
|
@@ -330,6 +402,11 @@ function normalizeRun(value, fallbackProjectPath) {
|
|
|
330
402
|
? value.tasks.map(normalizeTask).filter((item) => !!item)
|
|
331
403
|
: [];
|
|
332
404
|
const computedStatus = deriveRunnableStatus(isRunStatus(value.status) ? value.status : "draft", prerequisites);
|
|
405
|
+
const evidence = Array.isArray(value.evidence)
|
|
406
|
+
? value.evidence.map(normalizeEvidence).filter((item) => !!item)
|
|
407
|
+
: [];
|
|
408
|
+
const integration = normalizeIntegration(value.integration) ?? inferIntegrationFromEvidence(evidence);
|
|
409
|
+
const lastSubstantiveWorkerAt = optionalString(value.lastSubstantiveWorkerAt) ?? inferLastSubstantiveWorkerAt(evidence);
|
|
333
410
|
return {
|
|
334
411
|
id: typeof value.id === "string" ? value.id : randomUUID(),
|
|
335
412
|
title,
|
|
@@ -352,13 +429,13 @@ function normalizeRun(value, fallbackProjectPath) {
|
|
|
352
429
|
? value.references.map(normalizeReference).filter((item) => !!item)
|
|
353
430
|
: [],
|
|
354
431
|
tasks,
|
|
355
|
-
evidence
|
|
356
|
-
? value.evidence.map(normalizeEvidence).filter((item) => !!item)
|
|
357
|
-
: [],
|
|
432
|
+
evidence,
|
|
358
433
|
...(normalizeVerifier(value.verifier) ? { verifier: normalizeVerifier(value.verifier) } : {}),
|
|
359
434
|
...(normalizeCompletionAudit(value.completionAudit)
|
|
360
435
|
? { completionAudit: normalizeCompletionAudit(value.completionAudit) }
|
|
361
436
|
: {}),
|
|
437
|
+
...(integration ? { integration } : {}),
|
|
438
|
+
...(lastSubstantiveWorkerAt ? { lastSubstantiveWorkerAt } : {}),
|
|
362
439
|
blockers: dedupeGoalBlockers(stringArray(value.blockers)),
|
|
363
440
|
...(optionalString(value.activeWorkerId)
|
|
364
441
|
? { activeWorkerId: optionalString(value.activeWorkerId) }
|
|
@@ -403,43 +480,70 @@ function enqueueWrite(fn) {
|
|
|
403
480
|
writeQueue = result.then(() => { }, () => { });
|
|
404
481
|
return result;
|
|
405
482
|
}
|
|
483
|
+
/**
|
|
484
|
+
* Persist runs to disk. MUST be called while holding the goal-store lock (it is
|
|
485
|
+
* not reentrant). Re-reads on-disk state for the omitted-active-run guard, then
|
|
486
|
+
* writes goals.json + meta.json + journals atomically.
|
|
487
|
+
*/
|
|
488
|
+
async function writeGoalRunsFileCore(normalizedCwd, runs) {
|
|
489
|
+
const dir = projectDir(normalizedCwd);
|
|
490
|
+
await mkdir(dir, { recursive: true });
|
|
491
|
+
const goalsPath = join(dir, "goals.json");
|
|
492
|
+
const existingRuns = await readGoalRunsFile(normalizedCwd);
|
|
493
|
+
const omittedActive = omittedActiveGoalRuns(existingRuns, runs);
|
|
494
|
+
if (omittedActive.length > 0) {
|
|
495
|
+
const timestamp = nowIso();
|
|
496
|
+
const rejectedIds = new Set(omittedActive.map((run) => run.id));
|
|
497
|
+
const repairedRuns = existingRuns.map((run) => rejectedIds.has(run.id)
|
|
498
|
+
? {
|
|
499
|
+
...run,
|
|
500
|
+
evidence: [
|
|
501
|
+
...run.evidence,
|
|
502
|
+
createGoalEvidence({
|
|
503
|
+
kind: "summary",
|
|
504
|
+
label: "Goal store write rejected",
|
|
505
|
+
content: "Rejected an attempted Goal overwrite that omitted active work; preserving existing durable state.",
|
|
506
|
+
createdAt: timestamp,
|
|
507
|
+
}),
|
|
508
|
+
],
|
|
509
|
+
updatedAt: timestamp,
|
|
510
|
+
}
|
|
511
|
+
: run);
|
|
512
|
+
await atomicWriteJson(goalsPath, sortNewestFirst(repairedRuns));
|
|
513
|
+
await Promise.all(repairedRuns.map((run) => writeGoalProgressJournalFromRun(normalizedCwd, run)));
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
const sorted = sortNewestFirst([...runs]);
|
|
517
|
+
await atomicWriteJson(goalsPath, sorted);
|
|
518
|
+
await atomicWriteJson(join(dir, "meta.json"), {
|
|
519
|
+
path: normalizedCwd,
|
|
520
|
+
name: basename(normalizedCwd),
|
|
521
|
+
});
|
|
522
|
+
await Promise.all(sorted.map((run) => writeGoalProgressJournalFromRun(normalizedCwd, run)));
|
|
523
|
+
}
|
|
406
524
|
async function writeGoalRunsFile(cwd, runs) {
|
|
407
525
|
const normalizedCwd = normalizeProjectPath(cwd);
|
|
408
526
|
const dir = projectDir(normalizedCwd);
|
|
409
|
-
await withGoalStoreLock(dir,
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
],
|
|
429
|
-
updatedAt: timestamp,
|
|
430
|
-
}
|
|
431
|
-
: run);
|
|
432
|
-
await atomicWriteJson(goalsPath, sortNewestFirst(repairedRuns));
|
|
433
|
-
await Promise.all(repairedRuns.map((run) => writeGoalProgressJournalFromRun(normalizedCwd, run)));
|
|
434
|
-
return;
|
|
435
|
-
}
|
|
436
|
-
const sorted = sortNewestFirst([...runs]);
|
|
437
|
-
await atomicWriteJson(goalsPath, sorted);
|
|
438
|
-
await atomicWriteJson(join(dir, "meta.json"), {
|
|
439
|
-
path: normalizedCwd,
|
|
440
|
-
name: basename(normalizedCwd),
|
|
527
|
+
await withGoalStoreLock(dir, () => writeGoalRunsFileCore(normalizedCwd, runs));
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Cross-process-atomic read-modify-write. Reads the current runs INSIDE the
|
|
531
|
+
* store lock, applies `mutate`, and writes the result before releasing the lock
|
|
532
|
+
* so concurrent processes (the parent orchestrator and worker subprocesses both
|
|
533
|
+
* writing via the goals tool) can never lose each other's field-level updates.
|
|
534
|
+
*/
|
|
535
|
+
async function mutateGoalRunsLocked(cwd, mutate) {
|
|
536
|
+
return enqueueWrite(async () => {
|
|
537
|
+
const normalizedCwd = normalizeProjectPath(cwd);
|
|
538
|
+
const dir = projectDir(normalizedCwd);
|
|
539
|
+
return withGoalStoreLock(dir, async () => {
|
|
540
|
+
const runs = await readGoalRunsFile(normalizedCwd);
|
|
541
|
+
const outcome = await mutate(runs);
|
|
542
|
+
if (outcome.write !== false) {
|
|
543
|
+
await writeGoalRunsFileCore(normalizedCwd, outcome.runs);
|
|
544
|
+
}
|
|
545
|
+
return outcome.result;
|
|
441
546
|
});
|
|
442
|
-
await Promise.all(sorted.map((run) => writeGoalProgressJournalFromRun(normalizedCwd, run)));
|
|
443
547
|
});
|
|
444
548
|
}
|
|
445
549
|
const GOAL_STORE_LOCK_WAIT_MS = 10_000;
|
|
@@ -585,8 +689,9 @@ export function createGoalTask(input) {
|
|
|
585
689
|
...(input.expectedChangedScope && input.expectedChangedScope.length > 0
|
|
586
690
|
? { expectedChangedScope: input.expectedChangedScope }
|
|
587
691
|
: {}),
|
|
588
|
-
|
|
692
|
+
integration: foldGoalTaskIntegration(input.integration ?? input.mergeStrategy),
|
|
589
693
|
...(input.worktree ? { worktree: input.worktree } : {}),
|
|
694
|
+
...(input.candidate ? { candidate: input.candidate } : {}),
|
|
590
695
|
...(input.verification ? { verification: input.verification } : {}),
|
|
591
696
|
...(input.lastSummary ? { lastSummary: input.lastSummary } : {}),
|
|
592
697
|
};
|
|
@@ -623,6 +728,10 @@ export function createGoalRun(cwd, input) {
|
|
|
623
728
|
evidence: input.evidence ?? [],
|
|
624
729
|
...(input.verifier ? { verifier: input.verifier } : {}),
|
|
625
730
|
...(input.completionAudit ? { completionAudit: input.completionAudit } : {}),
|
|
731
|
+
...(input.integration ? { integration: input.integration } : {}),
|
|
732
|
+
...(input.lastSubstantiveWorkerAt
|
|
733
|
+
? { lastSubstantiveWorkerAt: input.lastSubstantiveWorkerAt }
|
|
734
|
+
: {}),
|
|
626
735
|
blockers: dedupeGoalBlockers(input.blockers ?? []),
|
|
627
736
|
...(input.activeWorkerId ? { activeWorkerId: input.activeWorkerId } : {}),
|
|
628
737
|
...(input.continueRequestedAt ? { continueRequestedAt: input.continueRequestedAt } : {}),
|
|
@@ -655,8 +764,7 @@ export function saveGoalRunsSync(cwd, runs) {
|
|
|
655
764
|
writeFileSync(join(projectDir(normalizedCwd), "goals.json"), JSON.stringify(sorted, null, 2) + "\n", "utf-8");
|
|
656
765
|
}
|
|
657
766
|
export async function reconcileActiveGoalRuns(cwd, options = {}) {
|
|
658
|
-
return
|
|
659
|
-
const runs = await loadGoalRuns(cwd);
|
|
767
|
+
return mutateGoalRunsLocked(cwd, (runs) => {
|
|
660
768
|
const timestamp = nowIso();
|
|
661
769
|
const repairedRunIds = [];
|
|
662
770
|
let evidenceCount = 0;
|
|
@@ -730,14 +838,15 @@ export async function reconcileActiveGoalRuns(cwd, options = {}) {
|
|
|
730
838
|
updatedAt: timestamp,
|
|
731
839
|
};
|
|
732
840
|
});
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
841
|
+
return {
|
|
842
|
+
runs: nextRuns,
|
|
843
|
+
write: repairedRunIds.length > 0,
|
|
844
|
+
result: { runs: sortNewestFirst(nextRuns), repairedRunIds, evidenceCount },
|
|
845
|
+
};
|
|
736
846
|
});
|
|
737
847
|
}
|
|
738
848
|
export async function upsertGoalRun(cwd, input) {
|
|
739
|
-
return
|
|
740
|
-
const runs = await loadGoalRuns(cwd);
|
|
849
|
+
return mutateGoalRunsLocked(cwd, (runs) => {
|
|
741
850
|
const existingIndex = input.id ? runs.findIndex((run) => run.id === input.id) : -1;
|
|
742
851
|
const existing = existingIndex >= 0 ? runs[existingIndex] : undefined;
|
|
743
852
|
const merged = existing
|
|
@@ -764,8 +873,7 @@ export async function upsertGoalRun(cwd, input) {
|
|
|
764
873
|
const nextRuns = existingIndex >= 0 ? [...runs] : [merged, ...runs];
|
|
765
874
|
if (existingIndex >= 0)
|
|
766
875
|
nextRuns[existingIndex] = merged;
|
|
767
|
-
|
|
768
|
-
return merged;
|
|
876
|
+
return { runs: nextRuns, result: merged };
|
|
769
877
|
});
|
|
770
878
|
}
|
|
771
879
|
export async function getGoalRun(cwd, id) {
|
|
@@ -810,11 +918,10 @@ export async function appendGoalDecision(cwd, runId, decision) {
|
|
|
810
918
|
export async function appendGoalEvidence(cwd, runId, input) {
|
|
811
919
|
const discovered = await getGoalRun(cwd, runId);
|
|
812
920
|
const writeCwd = discovered?.projectPath ?? cwd;
|
|
813
|
-
return
|
|
814
|
-
const runs = await loadGoalRuns(writeCwd);
|
|
921
|
+
return mutateGoalRunsLocked(writeCwd, (runs) => {
|
|
815
922
|
const index = runs.findIndex((run) => run.id === runId || run.id.startsWith(runId));
|
|
816
923
|
if (index === -1)
|
|
817
|
-
return null;
|
|
924
|
+
return { runs, result: null, write: false };
|
|
818
925
|
const run = runs[index];
|
|
819
926
|
const updated = {
|
|
820
927
|
...run,
|
|
@@ -823,18 +930,16 @@ export async function appendGoalEvidence(cwd, runId, input) {
|
|
|
823
930
|
};
|
|
824
931
|
const nextRuns = [...runs];
|
|
825
932
|
nextRuns[index] = updated;
|
|
826
|
-
|
|
827
|
-
return updated;
|
|
933
|
+
return { runs: nextRuns, result: updated };
|
|
828
934
|
});
|
|
829
935
|
}
|
|
830
936
|
export async function updateGoalTask(cwd, runId, taskId, patch) {
|
|
831
937
|
const discovered = await getGoalRun(cwd, runId);
|
|
832
938
|
const writeCwd = discovered?.projectPath ?? cwd;
|
|
833
|
-
return
|
|
834
|
-
const runs = await loadGoalRuns(writeCwd);
|
|
939
|
+
return mutateGoalRunsLocked(writeCwd, (runs) => {
|
|
835
940
|
const runIndex = runs.findIndex((run) => run.id === runId || run.id.startsWith(runId));
|
|
836
941
|
if (runIndex === -1)
|
|
837
|
-
return null;
|
|
942
|
+
return { runs, result: null, write: false };
|
|
838
943
|
const run = runs[runIndex];
|
|
839
944
|
const taskIndex = run.tasks.findIndex((task) => task.id === taskId || task.id.startsWith(taskId));
|
|
840
945
|
const tasks = [...run.tasks];
|
|
@@ -847,7 +952,7 @@ export async function updateGoalTask(cwd, runId, taskId, patch) {
|
|
|
847
952
|
}));
|
|
848
953
|
}
|
|
849
954
|
else {
|
|
850
|
-
return null;
|
|
955
|
+
return { runs, result: null, write: false };
|
|
851
956
|
}
|
|
852
957
|
}
|
|
853
958
|
else {
|
|
@@ -863,13 +968,75 @@ export async function updateGoalTask(cwd, runId, taskId, patch) {
|
|
|
863
968
|
const updated = { ...run, tasks, updatedAt: nowIso() };
|
|
864
969
|
const nextRuns = [...runs];
|
|
865
970
|
nextRuns[runIndex] = updated;
|
|
866
|
-
|
|
867
|
-
return updated;
|
|
971
|
+
return { runs: nextRuns, result: updated };
|
|
868
972
|
});
|
|
869
973
|
}
|
|
870
|
-
|
|
974
|
+
/**
|
|
975
|
+
* Record the typed integration state from code (git truth), so the controller
|
|
976
|
+
* never has to parse evidence labels to know whether candidates reached main.
|
|
977
|
+
*/
|
|
978
|
+
export async function setGoalIntegrationState(cwd, runId, state) {
|
|
979
|
+
const discovered = await getGoalRun(cwd, runId);
|
|
980
|
+
const writeCwd = discovered?.projectPath ?? cwd;
|
|
981
|
+
return mutateGoalRunsLocked(writeCwd, (runs) => {
|
|
982
|
+
const index = runs.findIndex((run) => run.id === runId || run.id.startsWith(runId));
|
|
983
|
+
if (index === -1)
|
|
984
|
+
return { runs, result: null, write: false };
|
|
985
|
+
const run = runs[index];
|
|
986
|
+
const updated = { ...run, integration: state, updatedAt: nowIso() };
|
|
987
|
+
const nextRuns = [...runs];
|
|
988
|
+
nextRuns[index] = updated;
|
|
989
|
+
return { runs: nextRuns, result: updated };
|
|
990
|
+
});
|
|
991
|
+
}
|
|
992
|
+
/**
|
|
993
|
+
* Stamp the most recent substantive (non-audit, non-integration) worker
|
|
994
|
+
* completion time, driving verifier/audit staleness deterministically.
|
|
995
|
+
*/
|
|
996
|
+
export async function recordGoalSubstantiveWorker(cwd, runId, atIso) {
|
|
997
|
+
const discovered = await getGoalRun(cwd, runId);
|
|
998
|
+
const writeCwd = discovered?.projectPath ?? cwd;
|
|
999
|
+
return mutateGoalRunsLocked(writeCwd, (runs) => {
|
|
1000
|
+
const index = runs.findIndex((run) => run.id === runId || run.id.startsWith(runId));
|
|
1001
|
+
if (index === -1)
|
|
1002
|
+
return { runs, result: null, write: false };
|
|
1003
|
+
const run = runs[index];
|
|
1004
|
+
const updated = { ...run, lastSubstantiveWorkerAt: atIso, updatedAt: nowIso() };
|
|
1005
|
+
const nextRuns = [...runs];
|
|
1006
|
+
nextRuns[index] = updated;
|
|
1007
|
+
return { runs: nextRuns, result: updated };
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
1010
|
+
/**
|
|
1011
|
+
* Infer whether a prerequisite is locally resolvable by the agent or genuinely
|
|
1012
|
+
* external (user-supplied). An explicit `kind` wins; otherwise a runnable
|
|
1013
|
+
* `checkCommand` implies the agent can both check and satisfy it locally.
|
|
1014
|
+
*/
|
|
1015
|
+
export function prerequisiteKind(item) {
|
|
1016
|
+
if (item.kind)
|
|
1017
|
+
return item.kind;
|
|
1018
|
+
return item.checkCommand?.trim() ? "local" : "external";
|
|
1019
|
+
}
|
|
1020
|
+
function isUnmetGoalPrerequisite(item) {
|
|
871
1021
|
return item.status !== "met" || !item.evidence?.trim();
|
|
872
1022
|
}
|
|
1023
|
+
/**
|
|
1024
|
+
* Local unmet prerequisites no longer block the Goal — the controller schedules
|
|
1025
|
+
* a worker task to resolve them. Only unmet **external** prerequisites (true
|
|
1026
|
+
* user-supplied inputs) are blocking.
|
|
1027
|
+
*/
|
|
1028
|
+
export function isBlockingGoalPrerequisite(item) {
|
|
1029
|
+
return isUnmetGoalPrerequisite(item) && prerequisiteKind(item) === "external";
|
|
1030
|
+
}
|
|
1031
|
+
export function isUnmetLocalGoalPrerequisite(item) {
|
|
1032
|
+
return isUnmetGoalPrerequisite(item) && prerequisiteKind(item) === "local";
|
|
1033
|
+
}
|
|
1034
|
+
export function unmetLocalGoalPrerequisites(run) {
|
|
1035
|
+
return run.prerequisites.filter(isUnmetLocalGoalPrerequisite);
|
|
1036
|
+
}
|
|
1037
|
+
export function goalHasUnmetLocalPrerequisites(run) {
|
|
1038
|
+
return run.prerequisites.some(isUnmetLocalGoalPrerequisite);
|
|
1039
|
+
}
|
|
873
1040
|
export function hasBlockingGoalPrerequisites(prerequisites) {
|
|
874
1041
|
return prerequisites.some(isBlockingGoalPrerequisite);
|
|
875
1042
|
}
|