@kenkaiiii/ggcoder 4.3.232 → 4.3.234

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 (348) hide show
  1. package/README.md +1 -2
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +7 -89
  4. package/dist/cli.js.map +1 -1
  5. package/dist/core/agent-session.d.ts.map +1 -1
  6. package/dist/core/agent-session.js +2 -2
  7. package/dist/core/agent-session.js.map +1 -1
  8. package/dist/core/prompt-commands.d.ts.map +1 -1
  9. package/dist/core/prompt-commands.js +8 -16
  10. package/dist/core/prompt-commands.js.map +1 -1
  11. package/dist/core/prompt-commands.test.js +14 -44
  12. package/dist/core/prompt-commands.test.js.map +1 -1
  13. package/dist/core/runtime-mode.d.ts +0 -11
  14. package/dist/core/runtime-mode.d.ts.map +1 -1
  15. package/dist/core/runtime-mode.js +0 -9
  16. package/dist/core/runtime-mode.js.map +1 -1
  17. package/dist/core/session-restore-display.test.js +4 -110
  18. package/dist/core/session-restore-display.test.js.map +1 -1
  19. package/dist/interactive.d.ts.map +1 -1
  20. package/dist/interactive.js +1 -1
  21. package/dist/interactive.js.map +1 -1
  22. package/dist/system-prompt.d.ts +1 -2
  23. package/dist/system-prompt.d.ts.map +1 -1
  24. package/dist/system-prompt.js +11 -58
  25. package/dist/system-prompt.js.map +1 -1
  26. package/dist/system-prompt.test.js +3 -158
  27. package/dist/system-prompt.test.js.map +1 -1
  28. package/dist/tools/bash.d.ts +1 -4
  29. package/dist/tools/bash.d.ts.map +1 -1
  30. package/dist/tools/bash.js +3 -12
  31. package/dist/tools/bash.js.map +1 -1
  32. package/dist/tools/checkpoint-hook.test.js +3 -3
  33. package/dist/tools/checkpoint-hook.test.js.map +1 -1
  34. package/dist/tools/edit.d.ts +1 -4
  35. package/dist/tools/edit.d.ts.map +1 -1
  36. package/dist/tools/edit.js +5 -13
  37. package/dist/tools/edit.js.map +1 -1
  38. package/dist/tools/enter-plan.js +1 -1
  39. package/dist/tools/enter-plan.js.map +1 -1
  40. package/dist/tools/index.d.ts +0 -9
  41. package/dist/tools/index.d.ts.map +1 -1
  42. package/dist/tools/index.js +4 -8
  43. package/dist/tools/index.js.map +1 -1
  44. package/dist/tools/prompt-hints.d.ts.map +1 -1
  45. package/dist/tools/prompt-hints.js +0 -2
  46. package/dist/tools/prompt-hints.js.map +1 -1
  47. package/dist/tools/screenshot.d.ts +1 -1
  48. package/dist/tools/subagent.d.ts +1 -4
  49. package/dist/tools/subagent.d.ts.map +1 -1
  50. package/dist/tools/subagent.js +2 -5
  51. package/dist/tools/subagent.js.map +1 -1
  52. package/dist/tools/write.d.ts +1 -4
  53. package/dist/tools/write.d.ts.map +1 -1
  54. package/dist/tools/write.js +5 -13
  55. package/dist/tools/write.js.map +1 -1
  56. package/dist/ui/App.d.ts +5 -20
  57. package/dist/ui/App.d.ts.map +1 -1
  58. package/dist/ui/App.js +134 -309
  59. package/dist/ui/App.js.map +1 -1
  60. package/dist/ui/app-items.d.ts +23 -25
  61. package/dist/ui/app-items.d.ts.map +1 -1
  62. package/dist/ui/app-items.js +37 -0
  63. package/dist/ui/app-items.js.map +1 -1
  64. package/dist/ui/app-items.test.d.ts +2 -0
  65. package/dist/ui/app-items.test.d.ts.map +1 -0
  66. package/dist/ui/app-items.test.js +38 -0
  67. package/dist/ui/app-items.test.js.map +1 -0
  68. package/dist/ui/app-state-persistence.test.js +14 -318
  69. package/dist/ui/app-state-persistence.test.js.map +1 -1
  70. package/dist/ui/chat-layout-pinning.test.js +74 -4
  71. package/dist/ui/chat-layout-pinning.test.js.map +1 -1
  72. package/dist/ui/components/AssistantMessage.test.js +6 -9
  73. package/dist/ui/components/AssistantMessage.test.js.map +1 -1
  74. package/dist/ui/components/Banner.js +1 -1
  75. package/dist/ui/components/Banner.js.map +1 -1
  76. package/dist/ui/components/ChatFooterPane.d.ts +1 -5
  77. package/dist/ui/components/ChatFooterPane.d.ts.map +1 -1
  78. package/dist/ui/components/ChatFooterPane.js +3 -4
  79. package/dist/ui/components/ChatFooterPane.js.map +1 -1
  80. package/dist/ui/components/ChatInputStack.d.ts +3 -1
  81. package/dist/ui/components/ChatInputStack.d.ts.map +1 -1
  82. package/dist/ui/components/ChatInputStack.js +4 -3
  83. package/dist/ui/components/ChatInputStack.js.map +1 -1
  84. package/dist/ui/components/ChatScreen.d.ts +3 -16
  85. package/dist/ui/components/ChatScreen.d.ts.map +1 -1
  86. package/dist/ui/components/ChatScreen.js +2 -3
  87. package/dist/ui/components/ChatScreen.js.map +1 -1
  88. package/dist/ui/components/Footer.d.ts +3 -8
  89. package/dist/ui/components/Footer.d.ts.map +1 -1
  90. package/dist/ui/components/Footer.js +5 -25
  91. package/dist/ui/components/Footer.js.map +1 -1
  92. package/dist/ui/components/InputArea.d.ts +1 -9
  93. package/dist/ui/components/InputArea.d.ts.map +1 -1
  94. package/dist/ui/components/InputArea.js +2 -44
  95. package/dist/ui/components/InputArea.js.map +1 -1
  96. package/dist/ui/components/LiveToolPanel.d.ts +30 -0
  97. package/dist/ui/components/LiveToolPanel.d.ts.map +1 -0
  98. package/dist/ui/components/LiveToolPanel.js +66 -0
  99. package/dist/ui/components/LiveToolPanel.js.map +1 -0
  100. package/dist/ui/components/ToolExecution.js +0 -2
  101. package/dist/ui/components/ToolExecution.js.map +1 -1
  102. package/dist/ui/components/TranscriptViewport.d.ts +1 -1
  103. package/dist/ui/components/TranscriptViewport.js +1 -1
  104. package/dist/ui/footer-jump-regression.test.js +12 -2
  105. package/dist/ui/footer-jump-regression.test.js.map +1 -1
  106. package/dist/ui/footer-status-layout.test.js +4 -12
  107. package/dist/ui/footer-status-layout.test.js.map +1 -1
  108. package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +3 -4
  109. package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -1
  110. package/dist/ui/hooks/useChatLayoutMeasurements.js +26 -4
  111. package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -1
  112. package/dist/ui/hooks/useModeState.d.ts +4 -19
  113. package/dist/ui/hooks/useModeState.d.ts.map +1 -1
  114. package/dist/ui/hooks/useModeState.js +5 -45
  115. package/dist/ui/hooks/useModeState.js.map +1 -1
  116. package/dist/ui/hooks/usePixelFixFlow.js +2 -2
  117. package/dist/ui/layout-decisions.d.ts +11 -34
  118. package/dist/ui/layout-decisions.d.ts.map +1 -1
  119. package/dist/ui/layout-decisions.js +15 -42
  120. package/dist/ui/layout-decisions.js.map +1 -1
  121. package/dist/ui/live-area-height.d.ts.map +1 -1
  122. package/dist/ui/live-area-height.js +6 -1
  123. package/dist/ui/live-area-height.js.map +1 -1
  124. package/dist/ui/live-frame-height.test.js +26 -1
  125. package/dist/ui/live-frame-height.test.js.map +1 -1
  126. package/dist/ui/plan-overlay.test.js +1 -1
  127. package/dist/ui/plan-overlay.test.js.map +1 -1
  128. package/dist/ui/prompt-routing.d.ts +1 -19
  129. package/dist/ui/prompt-routing.d.ts.map +1 -1
  130. package/dist/ui/prompt-routing.js +1 -79
  131. package/dist/ui/prompt-routing.js.map +1 -1
  132. package/dist/ui/render.d.ts +3 -18
  133. package/dist/ui/render.d.ts.map +1 -1
  134. package/dist/ui/render.js +0 -10
  135. package/dist/ui/render.js.map +1 -1
  136. package/dist/ui/scroll-stabilization.test.js +1 -7
  137. package/dist/ui/scroll-stabilization.test.js.map +1 -1
  138. package/dist/ui/slash-command-images.test.js +11 -86
  139. package/dist/ui/slash-command-images.test.js.map +1 -1
  140. package/dist/ui/streaming-flush-bounce.test.d.ts +2 -0
  141. package/dist/ui/streaming-flush-bounce.test.d.ts.map +1 -0
  142. package/dist/ui/streaming-flush-bounce.test.js +156 -0
  143. package/dist/ui/streaming-flush-bounce.test.js.map +1 -0
  144. package/dist/ui/submit-prompt-command.d.ts +1 -16
  145. package/dist/ui/submit-prompt-command.d.ts.map +1 -1
  146. package/dist/ui/submit-prompt-command.js +4 -54
  147. package/dist/ui/submit-prompt-command.js.map +1 -1
  148. package/dist/ui/submit-slash-commands.d.ts +0 -1
  149. package/dist/ui/submit-slash-commands.d.ts.map +1 -1
  150. package/dist/ui/submit-slash-commands.js +0 -4
  151. package/dist/ui/submit-slash-commands.js.map +1 -1
  152. package/dist/ui/terminal-history-status-renderers.d.ts +0 -1
  153. package/dist/ui/terminal-history-status-renderers.d.ts.map +1 -1
  154. package/dist/ui/terminal-history-status-renderers.js +0 -3
  155. package/dist/ui/terminal-history-status-renderers.js.map +1 -1
  156. package/dist/ui/terminal-history.d.ts.map +1 -1
  157. package/dist/ui/terminal-history.js +11 -56
  158. package/dist/ui/terminal-history.js.map +1 -1
  159. package/dist/ui/terminal-history.test.js +6 -33
  160. package/dist/ui/terminal-history.test.js.map +1 -1
  161. package/dist/ui/tool-line-summary.d.ts +29 -0
  162. package/dist/ui/tool-line-summary.d.ts.map +1 -0
  163. package/dist/ui/tool-line-summary.js +153 -0
  164. package/dist/ui/tool-line-summary.js.map +1 -0
  165. package/dist/ui/transcript/TranscriptRenderer.d.ts +1 -1
  166. package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
  167. package/dist/ui/transcript/TranscriptRenderer.js +18 -12
  168. package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
  169. package/dist/ui/transcript/presentation.d.ts +1 -17
  170. package/dist/ui/transcript/presentation.d.ts.map +1 -1
  171. package/dist/ui/transcript/presentation.js +0 -26
  172. package/dist/ui/transcript/presentation.js.map +1 -1
  173. package/dist/ui/transcript/spacing.d.ts +2 -2
  174. package/dist/ui/transcript/spacing.d.ts.map +1 -1
  175. package/dist/ui/transcript/spacing.js +14 -9
  176. package/dist/ui/transcript/spacing.js.map +1 -1
  177. package/dist/ui/transcript/spacing.test.js +5 -8
  178. package/dist/ui/transcript/spacing.test.js.map +1 -1
  179. package/dist/ui/transcript/tool-presentation.js +1 -1
  180. package/dist/ui/transcript/tool-presentation.js.map +1 -1
  181. package/dist/ui/transcript/transcript-lines.d.ts.map +1 -1
  182. package/dist/ui/transcript/transcript-lines.js +4 -0
  183. package/dist/ui/transcript/transcript-lines.js.map +1 -1
  184. package/dist/ui/tui-history-parity.test.js +0 -47
  185. package/dist/ui/tui-history-parity.test.js.map +1 -1
  186. package/dist/ui/tui-simulation.test.js +2 -1
  187. package/dist/ui/tui-simulation.test.js.map +1 -1
  188. package/package.json +3 -3
  189. package/dist/core/goal-controller.d.ts +0 -82
  190. package/dist/core/goal-controller.d.ts.map +0 -1
  191. package/dist/core/goal-controller.js +0 -838
  192. package/dist/core/goal-controller.js.map +0 -1
  193. package/dist/core/goal-controller.test.d.ts +0 -2
  194. package/dist/core/goal-controller.test.d.ts.map +0 -1
  195. package/dist/core/goal-controller.test.js +0 -1279
  196. package/dist/core/goal-controller.test.js.map +0 -1
  197. package/dist/core/goal-engine.d.ts +0 -61
  198. package/dist/core/goal-engine.d.ts.map +0 -1
  199. package/dist/core/goal-engine.js +0 -123
  200. package/dist/core/goal-engine.js.map +0 -1
  201. package/dist/core/goal-engine.test.d.ts +0 -2
  202. package/dist/core/goal-engine.test.d.ts.map +0 -1
  203. package/dist/core/goal-engine.test.js +0 -295
  204. package/dist/core/goal-engine.test.js.map +0 -1
  205. package/dist/core/goal-integration.d.ts +0 -80
  206. package/dist/core/goal-integration.d.ts.map +0 -1
  207. package/dist/core/goal-integration.js +0 -296
  208. package/dist/core/goal-integration.js.map +0 -1
  209. package/dist/core/goal-integration.test.d.ts +0 -2
  210. package/dist/core/goal-integration.test.d.ts.map +0 -1
  211. package/dist/core/goal-integration.test.js +0 -369
  212. package/dist/core/goal-integration.test.js.map +0 -1
  213. package/dist/core/goal-lifecycle-smoke.test.d.ts +0 -2
  214. package/dist/core/goal-lifecycle-smoke.test.d.ts.map +0 -1
  215. package/dist/core/goal-lifecycle-smoke.test.js +0 -248
  216. package/dist/core/goal-lifecycle-smoke.test.js.map +0 -1
  217. package/dist/core/goal-overhead-harness.d.ts +0 -33
  218. package/dist/core/goal-overhead-harness.d.ts.map +0 -1
  219. package/dist/core/goal-overhead-harness.js +0 -268
  220. package/dist/core/goal-overhead-harness.js.map +0 -1
  221. package/dist/core/goal-prerequisites.d.ts +0 -23
  222. package/dist/core/goal-prerequisites.d.ts.map +0 -1
  223. package/dist/core/goal-prerequisites.js +0 -114
  224. package/dist/core/goal-prerequisites.js.map +0 -1
  225. package/dist/core/goal-prerequisites.test.d.ts +0 -2
  226. package/dist/core/goal-prerequisites.test.d.ts.map +0 -1
  227. package/dist/core/goal-prerequisites.test.js +0 -154
  228. package/dist/core/goal-prerequisites.test.js.map +0 -1
  229. package/dist/core/goal-references.d.ts +0 -14
  230. package/dist/core/goal-references.d.ts.map +0 -1
  231. package/dist/core/goal-references.js +0 -153
  232. package/dist/core/goal-references.js.map +0 -1
  233. package/dist/core/goal-references.test.d.ts +0 -2
  234. package/dist/core/goal-references.test.d.ts.map +0 -1
  235. package/dist/core/goal-references.test.js +0 -77
  236. package/dist/core/goal-references.test.js.map +0 -1
  237. package/dist/core/goal-store.d.ts +0 -289
  238. package/dist/core/goal-store.d.ts.map +0 -1
  239. package/dist/core/goal-store.js +0 -1156
  240. package/dist/core/goal-store.js.map +0 -1
  241. package/dist/core/goal-store.test.d.ts +0 -2
  242. package/dist/core/goal-store.test.d.ts.map +0 -1
  243. package/dist/core/goal-store.test.js +0 -530
  244. package/dist/core/goal-store.test.js.map +0 -1
  245. package/dist/core/goal-verifier.d.ts +0 -17
  246. package/dist/core/goal-verifier.d.ts.map +0 -1
  247. package/dist/core/goal-verifier.js +0 -87
  248. package/dist/core/goal-verifier.js.map +0 -1
  249. package/dist/core/goal-verifier.test.d.ts +0 -2
  250. package/dist/core/goal-verifier.test.d.ts.map +0 -1
  251. package/dist/core/goal-verifier.test.js +0 -131
  252. package/dist/core/goal-verifier.test.js.map +0 -1
  253. package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts +0 -2
  254. package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts.map +0 -1
  255. package/dist/core/goal-worker-dev-server-lifecycle.test.js +0 -68
  256. package/dist/core/goal-worker-dev-server-lifecycle.test.js.map +0 -1
  257. package/dist/core/goal-worker.d.ts +0 -61
  258. package/dist/core/goal-worker.d.ts.map +0 -1
  259. package/dist/core/goal-worker.js +0 -467
  260. package/dist/core/goal-worker.js.map +0 -1
  261. package/dist/core/goal-worker.test.d.ts +0 -2
  262. package/dist/core/goal-worker.test.d.ts.map +0 -1
  263. package/dist/core/goal-worker.test.js +0 -493
  264. package/dist/core/goal-worker.test.js.map +0 -1
  265. package/dist/core/goal-worktree.d.ts +0 -108
  266. package/dist/core/goal-worktree.d.ts.map +0 -1
  267. package/dist/core/goal-worktree.js +0 -300
  268. package/dist/core/goal-worktree.js.map +0 -1
  269. package/dist/core/goal-worktree.test.d.ts +0 -2
  270. package/dist/core/goal-worktree.test.d.ts.map +0 -1
  271. package/dist/core/goal-worktree.test.js +0 -448
  272. package/dist/core/goal-worktree.test.js.map +0 -1
  273. package/dist/tools/goal-mode.test.d.ts +0 -2
  274. package/dist/tools/goal-mode.test.d.ts.map +0 -1
  275. package/dist/tools/goal-mode.test.js +0 -121
  276. package/dist/tools/goal-mode.test.js.map +0 -1
  277. package/dist/tools/goals.d.ts +0 -143
  278. package/dist/tools/goals.d.ts.map +0 -1
  279. package/dist/tools/goals.js +0 -1038
  280. package/dist/tools/goals.js.map +0 -1
  281. package/dist/tools/goals.test.d.ts +0 -2
  282. package/dist/tools/goals.test.d.ts.map +0 -1
  283. package/dist/tools/goals.test.js +0 -1444
  284. package/dist/tools/goals.test.js.map +0 -1
  285. package/dist/ui/components/GoalOverlay.d.ts +0 -83
  286. package/dist/ui/components/GoalOverlay.d.ts.map +0 -1
  287. package/dist/ui/components/GoalOverlay.js +0 -710
  288. package/dist/ui/components/GoalOverlay.js.map +0 -1
  289. package/dist/ui/components/GoalPickerMenu.d.ts +0 -9
  290. package/dist/ui/components/GoalPickerMenu.d.ts.map +0 -1
  291. package/dist/ui/components/GoalPickerMenu.js +0 -37
  292. package/dist/ui/components/GoalPickerMenu.js.map +0 -1
  293. package/dist/ui/components/GoalStatusBar.d.ts +0 -26
  294. package/dist/ui/components/GoalStatusBar.d.ts.map +0 -1
  295. package/dist/ui/components/GoalStatusBar.js +0 -130
  296. package/dist/ui/components/GoalStatusBar.js.map +0 -1
  297. package/dist/ui/components/GoalStatusBar.test.d.ts +0 -2
  298. package/dist/ui/components/GoalStatusBar.test.d.ts.map +0 -1
  299. package/dist/ui/components/GoalStatusBar.test.js +0 -17
  300. package/dist/ui/components/GoalStatusBar.test.js.map +0 -1
  301. package/dist/ui/goal-events.d.ts +0 -125
  302. package/dist/ui/goal-events.d.ts.map +0 -1
  303. package/dist/ui/goal-events.js +0 -407
  304. package/dist/ui/goal-events.js.map +0 -1
  305. package/dist/ui/goal-events.test.d.ts +0 -2
  306. package/dist/ui/goal-events.test.d.ts.map +0 -1
  307. package/dist/ui/goal-events.test.js +0 -416
  308. package/dist/ui/goal-events.test.js.map +0 -1
  309. package/dist/ui/goal-lifecycle-orchestration.test.d.ts +0 -2
  310. package/dist/ui/goal-lifecycle-orchestration.test.d.ts.map +0 -1
  311. package/dist/ui/goal-lifecycle-orchestration.test.js +0 -555
  312. package/dist/ui/goal-lifecycle-orchestration.test.js.map +0 -1
  313. package/dist/ui/goal-overlay.test.d.ts +0 -2
  314. package/dist/ui/goal-overlay.test.d.ts.map +0 -1
  315. package/dist/ui/goal-overlay.test.js +0 -384
  316. package/dist/ui/goal-overlay.test.js.map +0 -1
  317. package/dist/ui/goal-progress.d.ts +0 -31
  318. package/dist/ui/goal-progress.d.ts.map +0 -1
  319. package/dist/ui/goal-progress.js +0 -149
  320. package/dist/ui/goal-progress.js.map +0 -1
  321. package/dist/ui/goal-run-helpers.d.ts +0 -12
  322. package/dist/ui/goal-run-helpers.d.ts.map +0 -1
  323. package/dist/ui/goal-run-helpers.js +0 -42
  324. package/dist/ui/goal-run-helpers.js.map +0 -1
  325. package/dist/ui/goal-status-bar.test.d.ts +0 -2
  326. package/dist/ui/goal-status-bar.test.d.ts.map +0 -1
  327. package/dist/ui/goal-status-bar.test.js +0 -174
  328. package/dist/ui/goal-status-bar.test.js.map +0 -1
  329. package/dist/ui/goal-summary.d.ts +0 -14
  330. package/dist/ui/goal-summary.d.ts.map +0 -1
  331. package/dist/ui/goal-summary.js +0 -194
  332. package/dist/ui/goal-summary.js.map +0 -1
  333. package/dist/ui/hooks/useGoalOrchestration.d.ts +0 -82
  334. package/dist/ui/hooks/useGoalOrchestration.d.ts.map +0 -1
  335. package/dist/ui/hooks/useGoalOrchestration.js +0 -863
  336. package/dist/ui/hooks/useGoalOrchestration.js.map +0 -1
  337. package/dist/ui/hooks/useGoalPickerController.d.ts +0 -22
  338. package/dist/ui/hooks/useGoalPickerController.d.ts.map +0 -1
  339. package/dist/ui/hooks/useGoalPickerController.js +0 -35
  340. package/dist/ui/hooks/useGoalPickerController.js.map +0 -1
  341. package/dist/ui/prompt-routing.test.d.ts +0 -2
  342. package/dist/ui/prompt-routing.test.d.ts.map +0 -1
  343. package/dist/ui/prompt-routing.test.js +0 -48
  344. package/dist/ui/prompt-routing.test.js.map +0 -1
  345. package/dist/ui/transcript/GoalRows.d.ts +0 -10
  346. package/dist/ui/transcript/GoalRows.d.ts.map +0 -1
  347. package/dist/ui/transcript/GoalRows.js +0 -35
  348. package/dist/ui/transcript/GoalRows.js.map +0 -1
@@ -1,448 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
- import fs from "node:fs/promises";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import { checkGoalWorktreeIntegration, checkpointGoalWorkingTree, commitGoalWorkerCandidate, createGoalWorkerWorktree, goalWorktreeRoot, isGitWorktreeViable, removeGoalRunWorktrees, sanitizeWorktreeToken, } from "./goal-worktree.js";
6
- function goalRun(overrides = {}) {
7
- return {
8
- id: "goal-a",
9
- title: "Integrate workers",
10
- goal: "Ensure worker artifacts reach main checkout before verifier.",
11
- status: "ready",
12
- createdAt: "2024-01-01T00:00:00.000Z",
13
- updatedAt: "2024-01-01T00:00:00.000Z",
14
- projectPath: "/tmp/project",
15
- successCriteria: ["Verifier sees worker artifacts"],
16
- prerequisites: [],
17
- harness: [],
18
- evidencePlan: [],
19
- tasks: [],
20
- evidence: [],
21
- blockers: [],
22
- ...overrides,
23
- };
24
- }
25
- function runnerFor(statusByCwd) {
26
- return {
27
- async execFile(_file, args, options) {
28
- expect(args).toEqual(["status", "--porcelain"]);
29
- return { stdout: statusByCwd[options.cwd] ?? "", stderr: "" };
30
- },
31
- };
32
- }
33
- describe("goal worktree helpers", () => {
34
- let tmpDir;
35
- beforeEach(async () => {
36
- tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "goal-worktree-test-"));
37
- });
38
- afterEach(async () => {
39
- await fs.rm(tmpDir, { recursive: true, force: true });
40
- });
41
- it("sanitizes worktree tokens for branch and path names", () => {
42
- expect(sanitizeWorktreeToken("Task: refactor / App?!")).toBe("Task-refactor-App");
43
- expect(sanitizeWorktreeToken("***")).toBe("item");
44
- });
45
- it("places worker worktrees beside the project checkout", () => {
46
- expect(goalWorktreeRoot(path.join("/tmp", "repo"))).toBe(path.join("/tmp", "repo-goal-worktrees"));
47
- });
48
- it("creates a branch worktree from the requested base ref", async () => {
49
- const projectPath = path.join(tmpDir, "main");
50
- const root = path.join(tmpDir, "worktrees");
51
- await fs.mkdir(projectPath, { recursive: true });
52
- const calls = [];
53
- const runner = {
54
- execFile: vi.fn(async (file, args, options) => {
55
- calls.push({ file, args, cwd: options.cwd });
56
- return { stdout: "", stderr: "" };
57
- }),
58
- };
59
- const candidate = await createGoalWorkerWorktree({
60
- projectPath,
61
- goalRunId: "goal-123",
62
- goalTaskId: "task/app split",
63
- workerId: "worker-1",
64
- baseRef: "abc123",
65
- worktreesRoot: root,
66
- commandRunner: runner,
67
- });
68
- expect(candidate).toEqual({
69
- baseRef: "abc123",
70
- branchName: "goal/goal-123/task-app-split-worker-1",
71
- path: path.join(root, "task-app-split-worker-1"),
72
- });
73
- expect(calls).toEqual([
74
- {
75
- file: "git",
76
- args: ["status", "--porcelain"],
77
- cwd: projectPath,
78
- },
79
- {
80
- file: "git",
81
- args: ["worktree", "add", "-b", candidate.branchName, candidate.path, "abc123"],
82
- cwd: projectPath,
83
- },
84
- ]);
85
- });
86
- it("resolves HEAD as the base ref when no explicit base is supplied", async () => {
87
- const projectPath = path.join(tmpDir, "main");
88
- const root = path.join(tmpDir, "worktrees");
89
- await fs.mkdir(projectPath, { recursive: true });
90
- const calls = [];
91
- const runner = {
92
- execFile: vi.fn(async (_file, args) => {
93
- calls.push(args);
94
- return args[0] === "rev-parse"
95
- ? { stdout: "head-sha\n", stderr: "" }
96
- : { stdout: "", stderr: "" };
97
- }),
98
- };
99
- const candidate = await createGoalWorkerWorktree({
100
- projectPath,
101
- goalRunId: "goal",
102
- goalTaskId: "task",
103
- workerId: "worker",
104
- worktreesRoot: root,
105
- commandRunner: runner,
106
- });
107
- expect(candidate.baseRef).toBe("head-sha");
108
- expect(calls[0]).toEqual(["status", "--porcelain"]);
109
- expect(calls[1]).toEqual(["rev-parse", "HEAD"]);
110
- expect(calls[2]?.at(-1)).toBe("head-sha");
111
- });
112
- it("refuses to create worker worktrees from dirty integration checkouts", async () => {
113
- const runner = {
114
- execFile: vi.fn(async (_file, args) => args[0] === "status"
115
- ? { stdout: " M packages/app.ts\n", stderr: "" }
116
- : { stdout: "", stderr: "" }),
117
- };
118
- await expect(createGoalWorkerWorktree({
119
- projectPath: "/repo/main",
120
- goalRunId: "goal",
121
- goalTaskId: "task",
122
- workerId: "worker",
123
- baseRef: "base-sha",
124
- commandRunner: runner,
125
- })).rejects.toThrow("Goal workers need a clean working tree");
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
- });
349
- it("passes integration check when completed worker worktrees are clean", async () => {
350
- const result = await checkGoalWorktreeIntegration("/tmp/project", goalRun({
351
- tasks: [
352
- {
353
- id: "task-a",
354
- title: "Clean candidate",
355
- prompt: "Do work",
356
- status: "done",
357
- attempts: 1,
358
- workerId: "worker-a",
359
- worktree: {
360
- baseRef: "base",
361
- branchName: "goal/a/task-a-worker-a",
362
- path: "/tmp/worktree-a",
363
- status: "created",
364
- },
365
- },
366
- ],
367
- }), runnerFor({ "/tmp/worktree-a": "" }));
368
- expect(result).toEqual({
369
- ok: true,
370
- issues: [],
371
- summary: "All completed Goal worktree tasks are integrated or clean.",
372
- });
373
- });
374
- it("blocks verifier when a completed worker still has unintegrated files", async () => {
375
- const result = await checkGoalWorktreeIntegration("/tmp/project", goalRun({
376
- tasks: [
377
- {
378
- id: "task-a",
379
- title: "Verifier harness",
380
- prompt: "Create verifier",
381
- status: "done",
382
- attempts: 1,
383
- workerId: "worker-a",
384
- integration: "candidate",
385
- worktree: {
386
- baseRef: "base",
387
- branchName: "goal/a/task-a-worker-a",
388
- path: "/tmp/worktree-a",
389
- status: "created",
390
- },
391
- },
392
- ],
393
- }), runnerFor({
394
- "/tmp/worktree-a": "?? packages/ggcoder/scripts/verify-goal-overhead-harness.ts\n M packages/ggcoder/package.json\n",
395
- }));
396
- expect(result.ok).toBe(false);
397
- expect(result.issues).toHaveLength(1);
398
- expect(result.issues[0]).toMatchObject({
399
- taskId: "task-a",
400
- taskTitle: "Verifier harness",
401
- workerId: "worker-a",
402
- worktreePath: "/tmp/worktree-a",
403
- files: [
404
- "packages/ggcoder/package.json",
405
- "packages/ggcoder/scripts/verify-goal-overhead-harness.ts",
406
- ],
407
- });
408
- expect(result.summary).toContain("stranded in isolated worktrees");
409
- });
410
- it("ignores pending tasks and manual integration candidates during integration check", async () => {
411
- const result = await checkGoalWorktreeIntegration("/tmp/project", goalRun({
412
- tasks: [
413
- {
414
- id: "manual-task",
415
- title: "Manual candidate",
416
- prompt: "Do work",
417
- status: "done",
418
- attempts: 1,
419
- integration: "manual",
420
- worktree: {
421
- baseRef: "base",
422
- branchName: "goal/a/manual",
423
- path: "/tmp/manual",
424
- status: "created",
425
- },
426
- },
427
- {
428
- id: "pending-task",
429
- title: "Pending candidate",
430
- prompt: "Do work",
431
- status: "pending",
432
- attempts: 0,
433
- worktree: {
434
- baseRef: "base",
435
- branchName: "goal/a/pending",
436
- path: "/tmp/pending",
437
- status: "created",
438
- },
439
- },
440
- ],
441
- }), runnerFor({
442
- "/tmp/manual": "?? stranded.ts\n",
443
- "/tmp/pending": "?? stranded.ts\n",
444
- }));
445
- expect(result.ok).toBe(true);
446
- });
447
- });
448
- //# sourceMappingURL=goal-worktree.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"goal-worktree.test.js","sourceRoot":"","sources":["../../src/core/goal-worktree.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=goal-mode.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"goal-mode.test.d.ts","sourceRoot":"","sources":["../../src/tools/goal-mode.test.ts"],"names":[],"mappings":""}
@@ -1,121 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
- import fs from "node:fs/promises";
3
- import path from "node:path";
4
- import os from "node:os";
5
- import { ProcessManager } from "../core/process-manager.js";
6
- import { createBashTool } from "./bash.js";
7
- import { createEditTool } from "./edit.js";
8
- import { createGoalsTool } from "./goals.js";
9
- import { createSubAgentTool } from "./subagent.js";
10
- import { createWriteTool } from "./write.js";
11
- function resultToString(result) {
12
- if (typeof result === "string")
13
- return result;
14
- if (result && typeof result === "object" && "content" in result) {
15
- const content = result.content;
16
- if (typeof content === "string")
17
- return content;
18
- }
19
- return String(result);
20
- }
21
- const mockContext = {
22
- signal: new AbortController().signal,
23
- toolCallId: "goal-mode-test",
24
- };
25
- describe("goal mode tool restrictions", () => {
26
- let tmpDir;
27
- const goalModeRef = { current: "off" };
28
- beforeEach(async () => {
29
- tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "goal-mode-test-"));
30
- goalModeRef.current = "off";
31
- });
32
- afterEach(async () => {
33
- await fs.rm(tmpDir, { recursive: true, force: true });
34
- });
35
- for (const mode of ["planner", "setup", "coordinator"]) {
36
- it(`blocks write in Goal ${mode} mode`, async () => {
37
- goalModeRef.current = mode;
38
- const tool = createWriteTool(tmpDir, undefined, undefined, goalModeRef);
39
- const result = resultToString(await tool.execute({ file_path: "created.txt", content: "goal mode" }, mockContext));
40
- expect(result).toContain("restricted in Goal");
41
- expect(result).toContain("Goal metadata");
42
- });
43
- it(`blocks edit in Goal ${mode} mode`, async () => {
44
- goalModeRef.current = mode;
45
- const tool = createEditTool(tmpDir, new Map(), undefined, goalModeRef);
46
- const result = resultToString(await tool.execute({ file_path: "created.txt", edits: [{ old_text: "a", new_text: "b" }] }, mockContext));
47
- expect(result).toContain("restricted in Goal");
48
- expect(result).toContain("Goal metadata");
49
- });
50
- it(`blocks subagent in Goal ${mode} mode`, async () => {
51
- goalModeRef.current = mode;
52
- const tool = createSubAgentTool(tmpDir, [], "anthropic", "claude-sonnet-4-6", goalModeRef);
53
- const result = resultToString(await tool.execute({ task: "Do work" }, mockContext));
54
- expect(result).toContain("restricted in Goal");
55
- expect(result).toContain("Goal task creation");
56
- });
57
- }
58
- it("allows cheap foreground bash in Goal planner mode", async () => {
59
- goalModeRef.current = "planner";
60
- const processManager = new ProcessManager();
61
- const tool = createBashTool(tmpDir, processManager, undefined, goalModeRef);
62
- const result = resultToString(await tool.execute({ command: "echo planner-ok" }, mockContext));
63
- expect(result).toContain("Exit code: 0");
64
- expect(result).toContain("planner-ok");
65
- processManager.shutdownAll();
66
- });
67
- it("allows cheap foreground bash in Goal setup mode", async () => {
68
- goalModeRef.current = "setup";
69
- const processManager = new ProcessManager();
70
- const tool = createBashTool(tmpDir, processManager, undefined, goalModeRef);
71
- const result = resultToString(await tool.execute({ command: "echo setup-ok" }, mockContext));
72
- expect(result).toContain("Exit code: 0");
73
- expect(result).toContain("setup-ok");
74
- processManager.shutdownAll();
75
- });
76
- it("blocks background bash in Goal planner mode", async () => {
77
- goalModeRef.current = "planner";
78
- const processManager = new ProcessManager();
79
- const tool = createBashTool(tmpDir, processManager, undefined, goalModeRef);
80
- const result = resultToString(await tool.execute({ command: "sleep 10", run_in_background: true }, mockContext));
81
- expect(result).toContain("background bash is restricted in Goal planner mode");
82
- processManager.shutdownAll();
83
- });
84
- it("blocks background bash in Goal setup mode", async () => {
85
- goalModeRef.current = "setup";
86
- const processManager = new ProcessManager();
87
- const tool = createBashTool(tmpDir, processManager, undefined, goalModeRef);
88
- const result = resultToString(await tool.execute({ command: "sleep 10", run_in_background: true }, mockContext));
89
- expect(result).toContain("background bash is restricted in Goal setup mode");
90
- processManager.shutdownAll();
91
- });
92
- it("blocks all bash in Goal coordinator mode", async () => {
93
- goalModeRef.current = "coordinator";
94
- const processManager = new ProcessManager();
95
- const tool = createBashTool(tmpDir, processManager, undefined, goalModeRef);
96
- const result = resultToString(await tool.execute({ command: "echo nope" }, mockContext));
97
- expect(result).toContain("bash is restricted in Goal coordinator mode");
98
- processManager.shutdownAll();
99
- });
100
- it("blocks goals in Goal planner mode", async () => {
101
- goalModeRef.current = "planner";
102
- const tool = createGoalsTool(tmpDir, goalModeRef);
103
- const result = resultToString(await tool.execute({ action: "status" }, mockContext));
104
- expect(result).toContain("goals is restricted in Goal planner mode");
105
- expect(result).toContain("GOAL_PLAN");
106
- });
107
- it("keeps goals usable in Goal setup and coordinator modes", async () => {
108
- for (const mode of ["setup", "coordinator"]) {
109
- goalModeRef.current = mode;
110
- const tool = createGoalsTool(tmpDir, goalModeRef);
111
- const result = resultToString(await tool.execute({
112
- action: "create",
113
- title: `Goal mode durable run ${mode}`,
114
- goal: `Prove the goals tool remains usable in ${mode} mode`,
115
- success_criteria: ["Goal run is created"],
116
- }, mockContext));
117
- expect(result).toContain("Goal created");
118
- }
119
- });
120
- });
121
- //# sourceMappingURL=goal-mode.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"goal-mode.test.js","sourceRoot":"","sources":["../../src/tools/goal-mode.test.ts"],"names":[],"mappings":"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"}