@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
@@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
2
  import fs from "node:fs/promises";
3
3
  import os from "node:os";
4
4
  import path from "node:path";
5
- import { checkGoalWorktreeIntegration, createGoalWorkerWorktree, goalWorktreeRoot, sanitizeWorktreeToken, } from "./goal-worktree.js";
5
+ import { checkGoalWorktreeIntegration, checkpointGoalWorkingTree, commitGoalWorkerCandidate, createGoalWorkerWorktree, goalWorktreeRoot, isGitWorktreeViable, removeGoalRunWorktrees, sanitizeWorktreeToken, } from "./goal-worktree.js";
6
6
  function goalRun(overrides = {}) {
7
7
  return {
8
8
  id: "goal-a",
@@ -124,6 +124,228 @@ describe("goal worktree helpers", () => {
124
124
  commandRunner: runner,
125
125
  })).rejects.toThrow("Goal workers need a clean working tree");
126
126
  });
127
+ it("checkpoint is a no-op on a clean working tree", async () => {
128
+ const calls = [];
129
+ const runner = {
130
+ execFile: vi.fn(async (_file, args) => {
131
+ calls.push(args);
132
+ return { stdout: "", stderr: "" };
133
+ }),
134
+ };
135
+ const result = await checkpointGoalWorkingTree({
136
+ projectPath: "/repo/main",
137
+ message: "goal(g): checkpoint",
138
+ commandRunner: runner,
139
+ });
140
+ expect(result).toEqual({ committed: false, status: "" });
141
+ expect(calls).toEqual([["status", "--porcelain"]]);
142
+ });
143
+ it("checkpoint commits a dirty working tree and returns sha and files", async () => {
144
+ const calls = [];
145
+ const runner = {
146
+ execFile: vi.fn(async (_file, args) => {
147
+ calls.push(args);
148
+ if (args[0] === "status")
149
+ return { stdout: " M src/b.ts\n?? src/a.ts\n", stderr: "" };
150
+ if (args[0] === "rev-parse")
151
+ return { stdout: "checkpoint-sha\n", stderr: "" };
152
+ return { stdout: "", stderr: "" };
153
+ }),
154
+ };
155
+ const result = await checkpointGoalWorkingTree({
156
+ projectPath: "/repo/main",
157
+ message: "goal(g): checkpoint uncommitted work before worker w1",
158
+ commandRunner: runner,
159
+ });
160
+ expect(result).toEqual({
161
+ committed: true,
162
+ sha: "checkpoint-sha",
163
+ status: " M src/b.ts\n?? src/a.ts",
164
+ files: ["src/a.ts", "src/b.ts"],
165
+ });
166
+ expect(calls).toEqual([
167
+ ["status", "--porcelain"],
168
+ ["add", "-A"],
169
+ ["commit", "-m", "goal(g): checkpoint uncommitted work before worker w1"],
170
+ ["rev-parse", "HEAD"],
171
+ ]);
172
+ });
173
+ it("detects git worktree viability (work tree + resolvable HEAD)", async () => {
174
+ const viable = {
175
+ execFile: vi.fn(async (_file, args) => args[1] === "--is-inside-work-tree"
176
+ ? { stdout: "true\n", stderr: "" }
177
+ : { stdout: "sha\n", stderr: "" }),
178
+ };
179
+ const notWorkTree = {
180
+ execFile: vi.fn(async () => ({ stdout: "false\n", stderr: "" })),
181
+ };
182
+ const gitMissing = {
183
+ execFile: vi.fn(async () => {
184
+ throw new Error("spawn git ENOENT");
185
+ }),
186
+ };
187
+ const noCommits = {
188
+ execFile: vi.fn(async (_file, args) => {
189
+ if (args[1] === "--is-inside-work-tree")
190
+ return { stdout: "true\n", stderr: "" };
191
+ throw new Error("fatal: needed a single revision");
192
+ }),
193
+ };
194
+ expect(await isGitWorktreeViable("/repo", viable)).toBe(true);
195
+ expect(await isGitWorktreeViable("/repo", notWorkTree)).toBe(false);
196
+ expect(await isGitWorktreeViable("/repo", gitMissing)).toBe(false);
197
+ expect(await isGitWorktreeViable("/repo", noCommits)).toBe(false);
198
+ });
199
+ it("retries the checkpoint commit with a fallback identity when none is configured", async () => {
200
+ const calls = [];
201
+ const runner = {
202
+ execFile: vi.fn(async (_file, args) => {
203
+ calls.push(args);
204
+ if (args[0] === "status")
205
+ return { stdout: " M a.ts\n", stderr: "" };
206
+ if (args[0] === "config")
207
+ throw new Error("unset"); // no user.email/name
208
+ if (args.includes("commit") && !args.includes("-c")) {
209
+ throw new Error("Please tell me who you are");
210
+ }
211
+ if (args.includes("commit"))
212
+ return { stdout: "", stderr: "" };
213
+ if (args[0] === "rev-parse")
214
+ return { stdout: "sha\n", stderr: "" };
215
+ return { stdout: "", stderr: "" };
216
+ }),
217
+ };
218
+ const result = await checkpointGoalWorkingTree({
219
+ projectPath: "/repo",
220
+ message: "goal(g): checkpoint",
221
+ commandRunner: runner,
222
+ });
223
+ expect(result.committed).toBe(true);
224
+ const retried = calls.find((args) => args.includes("-c") && args.includes("commit"));
225
+ expect(retried).toBeDefined();
226
+ expect(retried?.join(" ")).toContain("user.email=goal@ggcoder.local");
227
+ });
228
+ it("commits a dirty worktree into a typed candidate packet", async () => {
229
+ const runner = {
230
+ execFile: vi.fn(async (_file, args) => {
231
+ if (args[0] === "status")
232
+ return { stdout: " M src/core/a.ts\n", stderr: "" };
233
+ if (args[0] === "rev-parse")
234
+ return { stdout: "candidate-sha\n", stderr: "" };
235
+ if (args[0] === "diff")
236
+ return { stdout: "src/core/a.ts\n", stderr: "" };
237
+ return { stdout: "", stderr: "" };
238
+ }),
239
+ };
240
+ const candidate = await commitGoalWorkerCandidate({
241
+ worktreePath: "/wt",
242
+ branchName: "goal/g/task",
243
+ baseRef: "base-sha",
244
+ message: "goal(g): candidate task",
245
+ commandRunner: runner,
246
+ });
247
+ expect(candidate).toEqual({
248
+ baseRef: "base-sha",
249
+ headSha: "candidate-sha",
250
+ branchName: "goal/g/task",
251
+ changedFiles: ["src/core/a.ts"],
252
+ committed: true,
253
+ });
254
+ });
255
+ it("returns no candidate when a worker produced no changes", async () => {
256
+ const runner = {
257
+ execFile: vi.fn(async (_file, args) => {
258
+ if (args[0] === "status")
259
+ return { stdout: "", stderr: "" };
260
+ if (args[0] === "rev-parse")
261
+ return { stdout: "base-sha\n", stderr: "" };
262
+ return { stdout: "", stderr: "" };
263
+ }),
264
+ };
265
+ const candidate = await commitGoalWorkerCandidate({
266
+ worktreePath: "/wt",
267
+ branchName: "goal/g/task",
268
+ baseRef: "base-sha",
269
+ message: "goal(g): candidate task",
270
+ commandRunner: runner,
271
+ });
272
+ expect(candidate).toBeUndefined();
273
+ });
274
+ it("removes a completed run's worktrees, branches, and prunes", async () => {
275
+ const calls = [];
276
+ const runner = {
277
+ execFile: vi.fn(async (_file, args) => {
278
+ calls.push(args);
279
+ return { stdout: "", stderr: "" };
280
+ }),
281
+ };
282
+ const result = await removeGoalRunWorktrees("/main", goalRun({
283
+ tasks: [
284
+ {
285
+ id: "task-a",
286
+ title: "A",
287
+ prompt: "x",
288
+ status: "done",
289
+ attempts: 1,
290
+ worktree: {
291
+ baseRef: "b",
292
+ branchName: "goal/a/task-a",
293
+ path: "/wt-a",
294
+ status: "created",
295
+ },
296
+ },
297
+ {
298
+ id: "task-b",
299
+ title: "B",
300
+ prompt: "x",
301
+ status: "done",
302
+ attempts: 1,
303
+ worktree: {
304
+ baseRef: "b",
305
+ branchName: "goal/a/task-b",
306
+ path: "/wt-b",
307
+ status: "created",
308
+ },
309
+ },
310
+ { id: "task-c", title: "C", prompt: "x", status: "done", attempts: 1 },
311
+ ],
312
+ }), runner);
313
+ expect(result.removedPaths).toEqual(["/wt-a", "/wt-b"]);
314
+ expect(result.removedBranches).toEqual(["goal/a/task-a", "goal/a/task-b"]);
315
+ expect(calls).toContainEqual(["worktree", "remove", "--force", "/wt-a"]);
316
+ expect(calls).toContainEqual(["branch", "-D", "goal/a/task-b"]);
317
+ expect(calls).toContainEqual(["worktree", "prune"]);
318
+ });
319
+ it("tolerates already-removed worktrees during cleanup", async () => {
320
+ const runner = {
321
+ execFile: vi.fn(async (_file, args) => {
322
+ if (args[0] === "worktree" && args[1] === "remove")
323
+ throw new Error("not a working tree");
324
+ if (args[0] === "branch")
325
+ throw new Error("branch not found");
326
+ return { stdout: "", stderr: "" };
327
+ }),
328
+ };
329
+ const result = await removeGoalRunWorktrees("/main", goalRun({
330
+ tasks: [
331
+ {
332
+ id: "task-a",
333
+ title: "A",
334
+ prompt: "x",
335
+ status: "done",
336
+ attempts: 1,
337
+ worktree: {
338
+ baseRef: "b",
339
+ branchName: "goal/a/task-a",
340
+ path: "/wt-a",
341
+ status: "created",
342
+ },
343
+ },
344
+ ],
345
+ }), runner);
346
+ expect(result.removedPaths).toEqual([]);
347
+ expect(result.removedBranches).toEqual([]);
348
+ });
127
349
  it("passes integration check when completed worker worktrees are clean", async () => {
128
350
  const result = await checkGoalWorktreeIntegration("/tmp/project", goalRun({
129
351
  tasks: [
@@ -159,7 +381,7 @@ describe("goal worktree helpers", () => {
159
381
  status: "done",
160
382
  attempts: 1,
161
383
  workerId: "worker-a",
162
- mergeStrategy: "after_dependencies",
384
+ integration: "candidate",
163
385
  worktree: {
164
386
  baseRef: "base",
165
387
  branchName: "goal/a/task-a-worker-a",
@@ -185,7 +407,7 @@ describe("goal worktree helpers", () => {
185
407
  });
186
408
  expect(result.summary).toContain("stranded in isolated worktrees");
187
409
  });
188
- it("ignores pending tasks and manual merge candidates during integration check", async () => {
410
+ it("ignores pending tasks and manual integration candidates during integration check", async () => {
189
411
  const result = await checkGoalWorktreeIntegration("/tmp/project", goalRun({
190
412
  tasks: [
191
413
  {
@@ -194,7 +416,7 @@ describe("goal worktree helpers", () => {
194
416
  prompt: "Do work",
195
417
  status: "done",
196
418
  attempts: 1,
197
- mergeStrategy: "manual",
419
+ integration: "manual",
198
420
  worktree: {
199
421
  baseRef: "base",
200
422
  branchName: "goal/a/manual",
@@ -1 +1 @@
1
- {"version":3,"file":"goal-worktree.test.js","sourceRoot":"","sources":["../../src/core/goal-worktree.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goal-worktree.test.js","sourceRoot":"","sources":["../../src/core/goal-worktree.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Message } from "@kenkaiiii/gg-ai";
2
+ export interface IdealReviewStats {
3
+ changedLines: number;
4
+ toolCalls: number;
5
+ toolFailures: number;
6
+ turns: number;
7
+ writeCalls: number;
8
+ editCalls: number;
9
+ bashCalls: number;
10
+ }
11
+ export interface IdealReviewDecision {
12
+ shouldReview: boolean;
13
+ score: number;
14
+ reasons: string[];
15
+ }
16
+ export declare const IDEAL_REVIEW_PROMPT: string;
17
+ export declare function evaluateIdealReview(stats: IdealReviewStats): IdealReviewDecision;
18
+ export declare function buildIdealReviewMessage(reasons: readonly string[]): Message;
19
+ export declare function shouldCountAsRiskyTool(toolName: string): boolean;
20
+ //# sourceMappingURL=ideal-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ideal-review.d.ts","sourceRoot":"","sources":["../../src/core/ideal-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,eAAO,MAAM,mBAAmB,QAM6C,CAAC;AAI9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,CAyChF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAM3E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE"}
@@ -0,0 +1,55 @@
1
+ export const IDEAL_REVIEW_PROMPT = "Ideal? Review the actual work against the user's request before the final response. " +
2
+ "Is it simple, focused, correct, and aligned? Did you over-edit, leave TODOs, miss an obvious " +
3
+ "case the request called for, or introduce risk? Judge this by reading the code you changed \u2014 " +
4
+ "do NOT run builds, typechecks, linters, or test suites now; that happens at commit time via " +
5
+ "/commit. If anything is wrong, fix it now. If everything is good, respond with the final " +
6
+ "answer only; do not mention this ideal review unless it changed the work.";
7
+ const RISKY_TOOL_NAMES = new Set(["bash", "write", "edit"]);
8
+ export function evaluateIdealReview(stats) {
9
+ const reasons = [];
10
+ let score = 0;
11
+ if (stats.changedLines >= 120) {
12
+ score += 2;
13
+ reasons.push(`${stats.changedLines} changed lines`);
14
+ }
15
+ else if (stats.changedLines >= 60) {
16
+ score += 1;
17
+ reasons.push(`${stats.changedLines} changed lines`);
18
+ }
19
+ if (stats.toolCalls >= 8) {
20
+ score += 1;
21
+ reasons.push(`${stats.toolCalls} tool calls`);
22
+ }
23
+ if (stats.writeCalls + stats.editCalls >= 4) {
24
+ score += 2;
25
+ reasons.push(`${stats.writeCalls + stats.editCalls} file mutation calls`);
26
+ }
27
+ else if (stats.writeCalls + stats.editCalls >= 2) {
28
+ score += 1;
29
+ reasons.push(`${stats.writeCalls + stats.editCalls} file mutation calls`);
30
+ }
31
+ if (stats.bashCalls > 0 && stats.writeCalls + stats.editCalls > 0) {
32
+ score += 1;
33
+ reasons.push("shell command plus file mutation");
34
+ }
35
+ if (stats.toolFailures > 0) {
36
+ score += 2;
37
+ reasons.push(`${stats.toolFailures} failed tool calls`);
38
+ }
39
+ if (stats.turns >= 6) {
40
+ score += 1;
41
+ reasons.push(`${stats.turns} agent turns`);
42
+ }
43
+ return { shouldReview: score >= 4, score, reasons };
44
+ }
45
+ export function buildIdealReviewMessage(reasons) {
46
+ const reasonText = reasons.length > 0 ? ` Triggered because: ${reasons.join(", ")}.` : "";
47
+ return {
48
+ role: "user",
49
+ content: `${IDEAL_REVIEW_PROMPT}${reasonText}`,
50
+ };
51
+ }
52
+ export function shouldCountAsRiskyTool(toolName) {
53
+ return RISKY_TOOL_NAMES.has(toolName);
54
+ }
55
+ //# sourceMappingURL=ideal-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ideal-review.js","sourceRoot":"","sources":["../../src/core/ideal-review.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,mBAAmB,GAC9B,sFAAsF;IACtF,+FAA+F;IAC/F,oGAAoG;IACpG,8FAA8F;IAC9F,2FAA2F;IAC3F,2EAA2E,CAAC;AAE9E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,KAAuB;IACzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,gBAAgB,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,gBAAgB,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QAC5C,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,sBAAsB,CAAC,CAAC;IAC5E,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACnD,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,sBAAsB,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAClE,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,oBAAoB,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAA0B;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,GAAG,mBAAmB,GAAG,UAAU,EAAE;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ideal-review.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ideal-review.test.d.ts","sourceRoot":"","sources":["../../src/core/ideal-review.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { buildIdealReviewMessage, evaluateIdealReview } from "./ideal-review.js";
3
+ describe("evaluateIdealReview", () => {
4
+ it("skips tiny text-only changes", () => {
5
+ const decision = evaluateIdealReview({
6
+ changedLines: 2,
7
+ toolCalls: 2,
8
+ toolFailures: 0,
9
+ turns: 1,
10
+ writeCalls: 0,
11
+ editCalls: 1,
12
+ bashCalls: 0,
13
+ });
14
+ expect(decision.shouldReview).toBe(false);
15
+ expect(decision.score).toBeLessThan(4);
16
+ });
17
+ it("triggers for broad file mutation work before final response", () => {
18
+ const decision = evaluateIdealReview({
19
+ changedLines: 135,
20
+ toolCalls: 9,
21
+ toolFailures: 0,
22
+ turns: 3,
23
+ writeCalls: 1,
24
+ editCalls: 3,
25
+ bashCalls: 1,
26
+ });
27
+ expect(decision.shouldReview).toBe(true);
28
+ expect(decision.reasons).toContain("135 changed lines");
29
+ expect(decision.reasons).toContain("4 file mutation calls");
30
+ });
31
+ it("triggers for failed tool recovery even with smaller diffs", () => {
32
+ const decision = evaluateIdealReview({
33
+ changedLines: 42,
34
+ toolCalls: 8,
35
+ toolFailures: 1,
36
+ turns: 2,
37
+ writeCalls: 0,
38
+ editCalls: 2,
39
+ bashCalls: 1,
40
+ });
41
+ expect(decision.shouldReview).toBe(true);
42
+ });
43
+ });
44
+ describe("buildIdealReviewMessage", () => {
45
+ it("asks the model to review and fix before the final answer", () => {
46
+ const message = buildIdealReviewMessage(["120 changed lines"]);
47
+ expect(message.role).toBe("user");
48
+ expect(message.content).toContain("Ideal?");
49
+ expect(message.content).toContain("before the final response");
50
+ expect(message.content).toContain("fix it now");
51
+ expect(message.content).toContain("120 changed lines");
52
+ });
53
+ it("defers builds/typechecks/tests to commit time instead of running them now", () => {
54
+ const message = buildIdealReviewMessage([]);
55
+ expect(message.content).toContain("do NOT run builds, typechecks, linters, or test suites now");
56
+ expect(message.content).toContain("/commit");
57
+ });
58
+ });
59
+ //# sourceMappingURL=ideal-review.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ideal-review.test.js","sourceRoot":"","sources":["../../src/core/ideal-review.test.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ declare const SettingsSchema: z.ZodObject<{
33
33
  auto: "auto";
34
34
  }>>;
35
35
  showTokenUsage: z.ZodDefault<z.ZodBoolean>;
36
+ idealReviewEnabled: z.ZodDefault<z.ZodBoolean>;
36
37
  enabledTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
37
38
  }, z.core.$strip>;
38
39
  export type Settings = z.infer<typeof SettingsSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiClB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,QAQ9B,CAAC;AAIF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,CAAC,EAAE,MAAM;IAIvB,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAazB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI5C,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,MAAM,IAAI,QAAQ;CAGnB"}
1
+ {"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkClB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,QAS9B,CAAC;AAIF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,CAAC,EAAE,MAAM;IAIvB,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAazB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI5C,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,MAAM,IAAI,QAAQ;CAGnB"}
@@ -34,6 +34,7 @@ const SettingsSchema = z.object({
34
34
  ])
35
35
  .default("auto"),
36
36
  showTokenUsage: z.boolean().default(true),
37
+ idealReviewEnabled: z.boolean().default(true),
37
38
  enabledTools: z.array(z.string()).optional(),
38
39
  });
39
40
  export const DEFAULT_SETTINGS = {
@@ -44,6 +45,7 @@ export const DEFAULT_SETTINGS = {
44
45
  thinkingEnabled: false,
45
46
  theme: "auto",
46
47
  showTokenUsage: true,
48
+ idealReviewEnabled: true,
47
49
  };
48
50
  // ── Settings Manager ───────────────────────────────────────
49
51
  export class SettingsManager {
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAuMjD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,KAAK,EAAE,EAChB,QAAQ,CAAC,EAAE,OAAO,EAClB,gBAAgB,CAAC,EAAE,MAAM,EACzB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,EAC7B,eAAe,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,EACjC,QAAQ,GAAE,QAAgB,EAC1B,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0MjD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,KAAK,EAAE,EAChB,QAAQ,CAAC,EAAE,OAAO,EAClB,gBAAgB,CAAC,EAAE,MAAM,EACzB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,EAC7B,eAAe,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,EACjC,QAAQ,GAAE,QAAgB,EAC1B,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
@@ -68,18 +68,21 @@ function renderGoalPlannerSection() {
68
68
  }
69
69
  function renderGoalSetupSection() {
70
70
  return (`## Goal Setup Mode (ACTIVE)\n\n` +
71
- `You are setting up a durable Goal run only. Ordered protocol: clarify if the objective is absent or too vague; model the intended experience; identify every supplied Goal reference (URLs/repos/screenshots/documents) and make each non-prompt reference explicit in success criteria, worker task prompts, evidence paths, verifier metadata, or blockers; imagine goal-specific failures; choose the required senses/signals; run only cheap local prerequisite checks; create/update the durable run with \`goals create\`; add \`goals task\` entries and evidence/harness/verifier plans; make each evidence-plan label/command/path match the proof workers or verifier will record; record setup evidence when useful; give a short final response; then stop.\n\n` +
72
- `Allowed tools: read/search/list tools, cheap foreground non-mutating bash checks, and \`goals\` metadata actions. Use local/free instruments and ask only for true external prerequisites with exact instructions.\n\n` +
73
- `Goal Worktree Isolation Contract: define implementation worker tasks as isolated candidate worktree tasks, not edits to be trusted directly in the user's main checkout. Each task prompt must require a candidate packet: base SHA, branch/worktree path, changed files, diffstat, patch path, verifier command/result, evidence paths, and risk notes. If a task truly cannot use isolation, set merge_strategy=manual and record the blocker/risk explicitly.\n\n` +
74
- `Goal Task DAG Contract: classify tasks as parallel candidates or dependent sequence steps before creating them. Record dependency metadata in the typed goals task fields depends_on, parallel_group, expected_changed_scope, and merge_strategy (and mirror it in prompts when useful) so the coordinator can decide what can start together and what must wait.\n\n` +
71
+ `You are setting up a durable Goal run only. Ordered protocol: clarify only if the objective is unintelligible; model the intended experience; identify every supplied Goal reference and make each non-prompt reference explicit in success criteria, worker task prompts, evidence paths, verifier metadata, or blockers; imagine goal-specific failures; choose the required senses/signals; run only cheap local prerequisite checks; create/update the durable run with \`goals create\`; add \`goals task\` entries and evidence/harness/verifier plans; make each evidence-plan label/command/path match the proof workers or verifier will record; record setup evidence when useful; give a short final response; then stop.\n\n` +
72
+ `Allowed tools: read/search/list tools, cheap foreground non-mutating bash checks, and \`goals\` metadata actions.\n\n` +
73
+ `Bias to action, not interrogation: discover what you can instead of asking; when the objective is workable but under-specified, still create the run now with best-judgment provisional criteria and an evidence plan from the failure modes you found, recording only genuinely-unknowable inputs (acceptance bar, compliance) as external prerequisites instead of withholding it.\n\n` +
74
+ `Prerequisite Kind Contract: tag every prerequisite as kind=local or kind=external. A prerequisite the agent can install, configure, or check locally is local (workers resolve it unattended) set kind=local and prefer a check_command. Reserve kind=external for genuinely user-supplied inputs that cannot be produced locally (paid credentials, secrets, approvals, physical devices); only unmet external prerequisites stop the Goal for a human.\n\n` +
75
+ `Goal Worktree Isolation Contract: define implementation worker tasks as isolated candidate worktree tasks, not edits to be trusted directly in the user's main checkout. Each task prompt must require a candidate packet: base SHA, branch/worktree path, changed files, diffstat, patch path, verifier command/result, evidence paths, and risk notes. If a task truly cannot use isolation, set integration=manual and record the blocker/risk explicitly.\n\n` +
76
+ `Goal Task DAG Contract: classify task ordering with depends_on and parallel_group before creating tasks. Record integration metadata in the typed goals task fields expected_changed_scope and integration so the coordinator can decide what can start together and what must be integrated manually. Keep expected_changed_scope accurate and tight: clean, in-scope, non-overlapping candidate tasks are integrated into main deterministically without an LLM apply step.\n\n` +
75
77
  `Forbidden: \`edit\`, \`write\`, \`subagent\`, verifier execution, background processes, \`goals resume\`, and implementation/refactor/file generation outside Goal state. Workers are the only actors that implement project changes.`);
76
78
  }
77
79
  function renderGoalCoordinatorSection() {
78
80
  return (`## Goal Coordinator Mode (ACTIVE)\n\n` +
79
- `You are coordinating synthetic Goal events, not implementing. Ordered protocol: call \`goals status\` for the current run first before choosing any next action; inspect durable state; persist evidence, decisions, task status, blockers, or verifier definitions; add the next Goal worker task or verifier only when needed; let workers use targeted checks while they build/fix/reconcile; pause/block on repeated failures or missing prerequisites; keep responses concise and action-oriented.\n\n` +
81
+ `You are coordinating synthetic Goal events, not implementing. Ordered protocol: call \`goals status\` for the current run first before choosing any next action; inspect durable state; persist evidence, decisions, task status, blockers, or verifier definitions; add the next Goal worker task or verifier only when needed; let workers use targeted checks while they build/fix/reconcile; keep responses concise and action-oriented.\n\n` +
82
+ `Autonomy Contract: \`/goal\` finishes unattended with two exits — \`passed\` or \`failed\` + diagnosis. Prefer auto-resolution and bounded re-strategy over stopping; on repeated no-progress failures try a different approach. Only true human blockers stop the run (unmet external prerequisites, agent-flagged blocked evidence).\n\n` +
80
83
  `Completion rule: call \`goals complete\` only when the configured verifier has run as the final pre-audit gate after all non-audit worker/evidence changes, verifier evidence satisfies the original success criteria, evidence plan, and mandatory Goal references, and a final completion audit has compared the actual durable files/logs/results against the latest verifier pass and references. If proof is missing before the final verifier, reconcile the same Goal run first by recording matching evidence or updating that evidence-plan item to ready; do not create a new Goal to finish old bookkeeping. If verifier evidence passed but an evidence-plan item or reference is still unmatched, the read-only final audit may reconcile matching durable proof to ready before recording \`goals audit\`; if proof is missing, it must create/resume a fix task instead of passing. If any non-audit worker changes files or durable proof after a verifier pass, rerun the configured verifier before final audit. Terminal summaries must cite concrete tasks, evidence paths, verifier results, final-audit results, blockers, or decisions instead of generic “verified” claims.\n\n` +
81
84
  `Goal Worktree Isolation Contract: implementation workers are launched in isolated git worktrees from the current clean integration checkpoint. Inspect candidate packets first, not raw directories. Reject failed, stale, risky, or overlapping candidates; compare changed files and diffstats; integrate survivors one at a time in the main/integration checkout; verify after merge; commit or otherwise cleanly checkpoint accepted integration changes before launching dependent implementation workers; and never complete from worker-worktree verifier results alone.\n\n` +
82
- `Goal Task DAG Contract: use recorded depends_on, parallel_group, expected_changed_scope, and merge_strategy metadata to start independent tasks in parallel, wait only on true dependencies, and unlock dependent tasks against the updated integration base after accepted candidates are merged and verified. Prefer zero-dependency batches when scopes do not overlap.\n\n` +
85
+ `Goal Task DAG Contract: use recorded depends_on, parallel_group, expected_changed_scope, and integration metadata to start independent tasks in parallel, wait only on true dependencies, and unlock dependent tasks against the updated integration base after accepted candidates are merged and verified. Prefer zero-dependency batches when scopes do not overlap.\n\n` +
83
86
  `Forbidden: direct project implementation, \`edit\`, \`write\`, \`bash\`, \`subagent\`, and background processes. Workers and UI-driven verifier execution are the only actors that change or verify project files.`);
84
87
  }
85
88
  async function renderApprovedPlanSection(approvedPlanPath, goalMode) {
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -174,7 +174,7 @@ describe("buildSystemPrompt", () => {
174
174
  expect(prompt).toContain("depends_on");
175
175
  expect(prompt).toContain("parallel_group");
176
176
  expect(prompt).toContain("expected_changed_scope");
177
- expect(prompt).toContain("merge_strategy");
177
+ expect(prompt).toContain("integration");
178
178
  expect(prompt).not.toContain("## Approved Plan");
179
179
  expect(prompt).not.toContain("## Plan Mode (ACTIVE)");
180
180
  expect(prompt).not.toContain("Restricted: bash, edit, write except .gg/plans/");