@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.
Files changed (255) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +1 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +7 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/config.test.d.ts +2 -0
  9. package/dist/config.test.d.ts.map +1 -0
  10. package/dist/config.test.js +29 -0
  11. package/dist/config.test.js.map +1 -0
  12. package/dist/core/goal-controller.d.ts +27 -6
  13. package/dist/core/goal-controller.d.ts.map +1 -1
  14. package/dist/core/goal-controller.js +246 -141
  15. package/dist/core/goal-controller.js.map +1 -1
  16. package/dist/core/goal-controller.test.js +210 -79
  17. package/dist/core/goal-controller.test.js.map +1 -1
  18. package/dist/core/goal-engine.d.ts +61 -0
  19. package/dist/core/goal-engine.d.ts.map +1 -0
  20. package/dist/core/goal-engine.js +123 -0
  21. package/dist/core/goal-engine.js.map +1 -0
  22. package/dist/core/goal-engine.test.d.ts +2 -0
  23. package/dist/core/goal-engine.test.d.ts.map +1 -0
  24. package/dist/core/goal-engine.test.js +295 -0
  25. package/dist/core/goal-engine.test.js.map +1 -0
  26. package/dist/core/goal-integration.d.ts +80 -0
  27. package/dist/core/goal-integration.d.ts.map +1 -0
  28. package/dist/core/goal-integration.js +296 -0
  29. package/dist/core/goal-integration.js.map +1 -0
  30. package/dist/core/goal-integration.test.d.ts +2 -0
  31. package/dist/core/goal-integration.test.d.ts.map +1 -0
  32. package/dist/core/goal-integration.test.js +369 -0
  33. package/dist/core/goal-integration.test.js.map +1 -0
  34. package/dist/core/goal-prerequisites.test.js +37 -1
  35. package/dist/core/goal-prerequisites.test.js.map +1 -1
  36. package/dist/core/goal-store.d.ts +80 -1
  37. package/dist/core/goal-store.d.ts.map +1 -1
  38. package/dist/core/goal-store.js +232 -65
  39. package/dist/core/goal-store.js.map +1 -1
  40. package/dist/core/goal-store.test.js +111 -2
  41. package/dist/core/goal-store.test.js.map +1 -1
  42. package/dist/core/goal-worker.d.ts.map +1 -1
  43. package/dist/core/goal-worker.js +55 -4
  44. package/dist/core/goal-worker.js.map +1 -1
  45. package/dist/core/goal-worker.test.js +75 -6
  46. package/dist/core/goal-worker.test.js.map +1 -1
  47. package/dist/core/goal-worktree.d.ts +55 -1
  48. package/dist/core/goal-worktree.d.ts.map +1 -1
  49. package/dist/core/goal-worktree.js +164 -1
  50. package/dist/core/goal-worktree.js.map +1 -1
  51. package/dist/core/goal-worktree.test.js +226 -4
  52. package/dist/core/goal-worktree.test.js.map +1 -1
  53. package/dist/core/ideal-review.d.ts +20 -0
  54. package/dist/core/ideal-review.d.ts.map +1 -0
  55. package/dist/core/ideal-review.js +55 -0
  56. package/dist/core/ideal-review.js.map +1 -0
  57. package/dist/core/ideal-review.test.d.ts +2 -0
  58. package/dist/core/ideal-review.test.d.ts.map +1 -0
  59. package/dist/core/ideal-review.test.js +59 -0
  60. package/dist/core/ideal-review.test.js.map +1 -0
  61. package/dist/core/settings-manager.d.ts +1 -0
  62. package/dist/core/settings-manager.d.ts.map +1 -1
  63. package/dist/core/settings-manager.js +2 -0
  64. package/dist/core/settings-manager.js.map +1 -1
  65. package/dist/system-prompt.d.ts.map +1 -1
  66. package/dist/system-prompt.js +9 -6
  67. package/dist/system-prompt.js.map +1 -1
  68. package/dist/system-prompt.test.js +1 -1
  69. package/dist/system-prompt.test.js.map +1 -1
  70. package/dist/tools/edit-diff.d.ts +17 -4
  71. package/dist/tools/edit-diff.d.ts.map +1 -1
  72. package/dist/tools/edit-diff.js +78 -16
  73. package/dist/tools/edit-diff.js.map +1 -1
  74. package/dist/tools/edit-diff.test.js +31 -1
  75. package/dist/tools/edit-diff.test.js.map +1 -1
  76. package/dist/tools/edit-robustness.test.d.ts +2 -0
  77. package/dist/tools/edit-robustness.test.d.ts.map +1 -0
  78. package/dist/tools/edit-robustness.test.js +415 -0
  79. package/dist/tools/edit-robustness.test.js.map +1 -0
  80. package/dist/tools/edit.d.ts.map +1 -1
  81. package/dist/tools/edit.js +15 -16
  82. package/dist/tools/edit.js.map +1 -1
  83. package/dist/tools/edit.test.js +23 -12
  84. package/dist/tools/edit.test.js.map +1 -1
  85. package/dist/tools/goals.d.ts +9 -1
  86. package/dist/tools/goals.d.ts.map +1 -1
  87. package/dist/tools/goals.js +78 -25
  88. package/dist/tools/goals.js.map +1 -1
  89. package/dist/tools/goals.test.js +142 -11
  90. package/dist/tools/goals.test.js.map +1 -1
  91. package/dist/tools/html-extract.d.ts +58 -0
  92. package/dist/tools/html-extract.d.ts.map +1 -0
  93. package/dist/tools/html-extract.js +130 -0
  94. package/dist/tools/html-extract.js.map +1 -0
  95. package/dist/tools/html-extract.test.d.ts +2 -0
  96. package/dist/tools/html-extract.test.d.ts.map +1 -0
  97. package/dist/tools/html-extract.test.js +60 -0
  98. package/dist/tools/html-extract.test.js.map +1 -0
  99. package/dist/tools/pdf-extract.d.ts +18 -0
  100. package/dist/tools/pdf-extract.d.ts.map +1 -0
  101. package/dist/tools/pdf-extract.js +43 -0
  102. package/dist/tools/pdf-extract.js.map +1 -0
  103. package/dist/tools/pdf-extract.test.d.ts +2 -0
  104. package/dist/tools/pdf-extract.test.d.ts.map +1 -0
  105. package/dist/tools/pdf-extract.test.js +15 -0
  106. package/dist/tools/pdf-extract.test.js.map +1 -0
  107. package/dist/tools/prompt-hints.d.ts.map +1 -1
  108. package/dist/tools/prompt-hints.js +2 -1
  109. package/dist/tools/prompt-hints.js.map +1 -1
  110. package/dist/tools/web-fetch.d.ts +16 -1
  111. package/dist/tools/web-fetch.d.ts.map +1 -1
  112. package/dist/tools/web-fetch.js +357 -45
  113. package/dist/tools/web-fetch.js.map +1 -1
  114. package/dist/tools/web-fetch.test.js +263 -2
  115. package/dist/tools/web-fetch.test.js.map +1 -1
  116. package/dist/tools/web-search.d.ts +14 -0
  117. package/dist/tools/web-search.d.ts.map +1 -1
  118. package/dist/tools/web-search.js +321 -35
  119. package/dist/tools/web-search.js.map +1 -1
  120. package/dist/tools/web-search.test.js +144 -1
  121. package/dist/tools/web-search.test.js.map +1 -1
  122. package/dist/ui/App.d.ts +11 -1
  123. package/dist/ui/App.d.ts.map +1 -1
  124. package/dist/ui/App.js +132 -17
  125. package/dist/ui/App.js.map +1 -1
  126. package/dist/ui/app-items.d.ts +14 -1
  127. package/dist/ui/app-items.d.ts.map +1 -1
  128. package/dist/ui/app-items.js +2 -0
  129. package/dist/ui/app-items.js.map +1 -1
  130. package/dist/ui/components/ChatLayout.d.ts +8 -1
  131. package/dist/ui/components/ChatLayout.d.ts.map +1 -1
  132. package/dist/ui/components/ChatLayout.js +4 -1
  133. package/dist/ui/components/ChatLayout.js.map +1 -1
  134. package/dist/ui/components/ChatScreen.d.ts +14 -1
  135. package/dist/ui/components/ChatScreen.d.ts.map +1 -1
  136. package/dist/ui/components/ChatScreen.js +3 -2
  137. package/dist/ui/components/ChatScreen.js.map +1 -1
  138. package/dist/ui/components/IdealHookMessage.d.ts +12 -0
  139. package/dist/ui/components/IdealHookMessage.d.ts.map +1 -0
  140. package/dist/ui/components/IdealHookMessage.js +24 -0
  141. package/dist/ui/components/IdealHookMessage.js.map +1 -0
  142. package/dist/ui/components/InputArea.d.ts +13 -1
  143. package/dist/ui/components/InputArea.d.ts.map +1 -1
  144. package/dist/ui/components/InputArea.js +96 -12
  145. package/dist/ui/components/InputArea.js.map +1 -1
  146. package/dist/ui/components/TranscriptViewport.d.ts +34 -0
  147. package/dist/ui/components/TranscriptViewport.d.ts.map +1 -0
  148. package/dist/ui/components/TranscriptViewport.js +45 -0
  149. package/dist/ui/components/TranscriptViewport.js.map +1 -0
  150. package/dist/ui/footer-jump-regression.test.d.ts +2 -0
  151. package/dist/ui/footer-jump-regression.test.d.ts.map +1 -0
  152. package/dist/ui/footer-jump-regression.test.js +167 -0
  153. package/dist/ui/footer-jump-regression.test.js.map +1 -0
  154. package/dist/ui/goal-events.d.ts +1 -1
  155. package/dist/ui/goal-events.d.ts.map +1 -1
  156. package/dist/ui/goal-events.js +2 -2
  157. package/dist/ui/goal-events.js.map +1 -1
  158. package/dist/ui/goal-events.test.js +2 -2
  159. package/dist/ui/goal-events.test.js.map +1 -1
  160. package/dist/ui/goal-lifecycle-orchestration.test.js +13 -97
  161. package/dist/ui/goal-lifecycle-orchestration.test.js.map +1 -1
  162. package/dist/ui/goal-progress.d.ts.map +1 -1
  163. package/dist/ui/goal-progress.js +0 -1
  164. package/dist/ui/goal-progress.js.map +1 -1
  165. package/dist/ui/goal-run-helpers.d.ts +0 -4
  166. package/dist/ui/goal-run-helpers.d.ts.map +1 -1
  167. package/dist/ui/goal-run-helpers.js +2 -21
  168. package/dist/ui/goal-run-helpers.js.map +1 -1
  169. package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
  170. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  171. package/dist/ui/hooks/useAgentLoop.js +45 -1
  172. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  173. package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +8 -0
  174. package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -1
  175. package/dist/ui/hooks/useChatLayoutMeasurements.js +2 -0
  176. package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -1
  177. package/dist/ui/hooks/useGoalOrchestration.d.ts +2 -1
  178. package/dist/ui/hooks/useGoalOrchestration.d.ts.map +1 -1
  179. package/dist/ui/hooks/useGoalOrchestration.js +198 -80
  180. package/dist/ui/hooks/useGoalOrchestration.js.map +1 -1
  181. package/dist/ui/hooks/useTerminalSize.d.ts +8 -1
  182. package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
  183. package/dist/ui/hooks/useTerminalSize.js +12 -2
  184. package/dist/ui/hooks/useTerminalSize.js.map +1 -1
  185. package/dist/ui/hooks/useTranscriptHistory.d.ts +1 -1
  186. package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -1
  187. package/dist/ui/hooks/useTranscriptHistory.js +23 -9
  188. package/dist/ui/hooks/useTranscriptHistory.js.map +1 -1
  189. package/dist/ui/hooks/useTranscriptHistory.test.d.ts +2 -0
  190. package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +1 -0
  191. package/dist/ui/hooks/useTranscriptHistory.test.js +61 -0
  192. package/dist/ui/hooks/useTranscriptHistory.test.js.map +1 -0
  193. package/dist/ui/hooks/useTranscriptScroll.d.ts +30 -0
  194. package/dist/ui/hooks/useTranscriptScroll.d.ts.map +1 -0
  195. package/dist/ui/hooks/useTranscriptScroll.js +44 -0
  196. package/dist/ui/hooks/useTranscriptScroll.js.map +1 -0
  197. package/dist/ui/hooks/useTranscriptScroll.test.d.ts +2 -0
  198. package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +1 -0
  199. package/dist/ui/hooks/useTranscriptScroll.test.js +119 -0
  200. package/dist/ui/hooks/useTranscriptScroll.test.js.map +1 -0
  201. package/dist/ui/live-area-clamp.test.js +11 -2
  202. package/dist/ui/live-area-clamp.test.js.map +1 -1
  203. package/dist/ui/render.d.ts +11 -0
  204. package/dist/ui/render.d.ts.map +1 -1
  205. package/dist/ui/render.js +71 -7
  206. package/dist/ui/render.js.map +1 -1
  207. package/dist/ui/stores/transcript-scroll-store.d.ts +27 -0
  208. package/dist/ui/stores/transcript-scroll-store.d.ts.map +1 -0
  209. package/dist/ui/stores/transcript-scroll-store.js +73 -0
  210. package/dist/ui/stores/transcript-scroll-store.js.map +1 -0
  211. package/dist/ui/stores/transcript-scroll-store.test.d.ts +2 -0
  212. package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +1 -0
  213. package/dist/ui/stores/transcript-scroll-store.test.js +73 -0
  214. package/dist/ui/stores/transcript-scroll-store.test.js.map +1 -0
  215. package/dist/ui/terminal-history.d.ts.map +1 -1
  216. package/dist/ui/terminal-history.js +8 -0
  217. package/dist/ui/terminal-history.js.map +1 -1
  218. package/dist/ui/testing/screen-recorder.d.ts +29 -0
  219. package/dist/ui/testing/screen-recorder.d.ts.map +1 -0
  220. package/dist/ui/testing/screen-recorder.js +179 -0
  221. package/dist/ui/testing/screen-recorder.js.map +1 -0
  222. package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
  223. package/dist/ui/transcript/TranscriptRenderer.js +4 -1
  224. package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
  225. package/dist/ui/transcript/spacing.d.ts +3 -2
  226. package/dist/ui/transcript/spacing.d.ts.map +1 -1
  227. package/dist/ui/transcript/spacing.js +8 -0
  228. package/dist/ui/transcript/spacing.js.map +1 -1
  229. package/dist/ui/transcript/spacing.test.js +31 -0
  230. package/dist/ui/transcript/spacing.test.js.map +1 -1
  231. package/dist/ui/transcript/transcript-lines.d.ts +32 -0
  232. package/dist/ui/transcript/transcript-lines.d.ts.map +1 -0
  233. package/dist/ui/transcript/transcript-lines.js +82 -0
  234. package/dist/ui/transcript/transcript-lines.js.map +1 -0
  235. package/dist/ui/transcript/transcript-lines.test.d.ts +2 -0
  236. package/dist/ui/transcript/transcript-lines.test.d.ts.map +1 -0
  237. package/dist/ui/transcript/transcript-lines.test.js +76 -0
  238. package/dist/ui/transcript/transcript-lines.test.js.map +1 -0
  239. package/dist/ui/transcript-viewport-pinning.test.d.ts +2 -0
  240. package/dist/ui/transcript-viewport-pinning.test.d.ts.map +1 -0
  241. package/dist/ui/transcript-viewport-pinning.test.js +148 -0
  242. package/dist/ui/transcript-viewport-pinning.test.js.map +1 -0
  243. package/dist/ui/tui-history-parity.test.js +8 -0
  244. package/dist/ui/tui-history-parity.test.js.map +1 -1
  245. package/dist/ui/tui-simulation.test.d.ts +2 -0
  246. package/dist/ui/tui-simulation.test.d.ts.map +1 -0
  247. package/dist/ui/tui-simulation.test.js +138 -0
  248. package/dist/ui/tui-simulation.test.js.map +1 -0
  249. package/dist/ui/tui-terminal-recorder.test.d.ts +2 -0
  250. package/dist/ui/tui-terminal-recorder.test.d.ts.map +1 -0
  251. package/dist/ui/tui-terminal-recorder.test.js +134 -0
  252. package/dist/ui/tui-terminal-recorder.test.js.map +1 -0
  253. package/dist/utils/format.js +7 -0
  254. package/dist/utils/format.js.map +1 -1
  255. 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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"}
@@ -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
- mergeStrategy: task.mergeStrategy ?? next.mergeStrategy,
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 isTaskMergeStrategy(value) {
104
- return (value === "parallel_candidate" ||
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
- ...(isTaskMergeStrategy(value.mergeStrategy) ? { mergeStrategy: value.mergeStrategy } : {}),
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: Array.isArray(value.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, async () => {
410
- await mkdir(dir, { recursive: true });
411
- const goalsPath = join(dir, "goals.json");
412
- const existingRuns = await readGoalRunsFile(normalizedCwd);
413
- const omittedActive = omittedActiveGoalRuns(existingRuns, runs);
414
- if (omittedActive.length > 0) {
415
- const timestamp = nowIso();
416
- const rejectedIds = new Set(omittedActive.map((run) => run.id));
417
- const repairedRuns = existingRuns.map((run) => rejectedIds.has(run.id)
418
- ? {
419
- ...run,
420
- evidence: [
421
- ...run.evidence,
422
- createGoalEvidence({
423
- kind: "summary",
424
- label: "Goal store write rejected",
425
- content: "Rejected an attempted Goal overwrite that omitted active work; preserving existing durable state.",
426
- createdAt: timestamp,
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
- ...(input.mergeStrategy ? { mergeStrategy: input.mergeStrategy } : {}),
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 enqueueWrite(async () => {
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
- if (repairedRunIds.length > 0)
734
- await writeGoalRunsFile(cwd, nextRuns);
735
- return { runs: sortNewestFirst(nextRuns), repairedRunIds, evidenceCount };
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 enqueueWrite(async () => {
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
- await writeGoalRunsFile(cwd, nextRuns);
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 enqueueWrite(async () => {
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
- await writeGoalRunsFile(writeCwd, nextRuns);
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 enqueueWrite(async () => {
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
- await writeGoalRunsFile(writeCwd, nextRuns);
867
- return updated;
971
+ return { runs: nextRuns, result: updated };
868
972
  });
869
973
  }
870
- export function isBlockingGoalPrerequisite(item) {
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
  }