gsd-pi 2.80.0-dev.8b3a59f5c → 2.80.0-dev.a947d025c

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 (714) hide show
  1. package/README.md +35 -59
  2. package/dist/claude-cli-check.d.ts +30 -0
  3. package/dist/claude-cli-check.js +18 -7
  4. package/dist/cli.js +0 -19
  5. package/dist/headless-query.d.ts +10 -0
  6. package/dist/headless-query.js +6 -4
  7. package/dist/loader-entrypoint.d.ts +8 -0
  8. package/dist/loader-entrypoint.js +27 -0
  9. package/dist/loader.js +2 -11
  10. package/dist/mcp-server.d.ts +1 -0
  11. package/dist/mcp-server.js +6 -3
  12. package/dist/resources/.managed-resources-content-hash +1 -1
  13. package/dist/resources/GSD-WORKFLOW.md +2 -2
  14. package/dist/resources/extensions/claude-code-cli/readiness.js +18 -7
  15. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +40 -3
  16. package/dist/resources/extensions/github-sync/sync.js +4 -1
  17. package/dist/resources/extensions/gsd/auto/contracts.js +2 -0
  18. package/dist/resources/extensions/gsd/auto/loop.js +103 -9
  19. package/dist/resources/extensions/gsd/auto/orchestrator.js +48 -4
  20. package/dist/resources/extensions/gsd/auto/phases.js +311 -154
  21. package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
  22. package/dist/resources/extensions/gsd/auto/run-unit.js +22 -30
  23. package/dist/resources/extensions/gsd/auto/session.js +9 -1
  24. package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +33 -1
  26. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +9 -1
  27. package/dist/resources/extensions/gsd/auto-dashboard.js +18 -0
  28. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
  29. package/dist/resources/extensions/gsd/auto-dispatch.js +26 -0
  30. package/dist/resources/extensions/gsd/auto-post-unit.js +122 -88
  31. package/dist/resources/extensions/gsd/auto-prompts.js +214 -17
  32. package/dist/resources/extensions/gsd/auto-recovery.js +43 -1
  33. package/dist/resources/extensions/gsd/auto-start.js +254 -17
  34. package/dist/resources/extensions/gsd/auto-supervisor.js +8 -1
  35. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +2 -2
  36. package/dist/resources/extensions/gsd/auto-worktree.js +229 -336
  37. package/dist/resources/extensions/gsd/auto.js +273 -87
  38. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +122 -11
  39. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +44 -37
  40. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -10
  41. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +30 -20
  42. package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +4 -1
  43. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +6 -4
  44. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +5 -3
  45. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +1 -1
  46. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +330 -54
  47. package/dist/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.js +4 -0
  48. package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
  49. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +19 -2
  50. package/dist/resources/extensions/gsd/clean-root-preflight.js +65 -9
  51. package/dist/resources/extensions/gsd/commands/dispatcher.js +5 -0
  52. package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
  53. package/dist/resources/extensions/gsd/commands-config.js +1 -1
  54. package/dist/resources/extensions/gsd/commands-eval-review.js +2 -2
  55. package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
  56. package/dist/resources/extensions/gsd/context-budget.js +37 -2
  57. package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
  58. package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
  59. package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
  60. package/dist/resources/extensions/gsd/db-base-schema.js +4 -2
  61. package/dist/resources/extensions/gsd/db-migration-steps.js +6 -0
  62. package/dist/resources/extensions/gsd/detection.js +106 -0
  63. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
  64. package/dist/resources/extensions/gsd/git-service.js +73 -5
  65. package/dist/resources/extensions/gsd/gsd-db.js +46 -13
  66. package/dist/resources/extensions/gsd/guided-flow.js +149 -48
  67. package/dist/resources/extensions/gsd/health-widget.js +3 -0
  68. package/dist/resources/extensions/gsd/init-wizard.js +4 -1
  69. package/dist/resources/extensions/gsd/memory-store.js +69 -12
  70. package/dist/resources/extensions/gsd/migrate/command.js +40 -1
  71. package/dist/resources/extensions/gsd/migration-auto-check.js +87 -0
  72. package/dist/resources/extensions/gsd/native-git-bridge.js +32 -8
  73. package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
  74. package/dist/resources/extensions/gsd/parallel-orchestrator.js +13 -3
  75. package/dist/resources/extensions/gsd/planning-path-scope.js +26 -0
  76. package/dist/resources/extensions/gsd/pre-execution-checks.js +22 -0
  77. package/dist/resources/extensions/gsd/prompt-loader.js +28 -2
  78. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +27 -23
  79. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  80. package/dist/resources/extensions/gsd/prompts/execute-task.md +4 -2
  81. package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
  82. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  83. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  84. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
  85. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  86. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
  87. package/dist/resources/extensions/gsd/quick.js +34 -2
  88. package/dist/resources/extensions/gsd/recovery-classification.js +94 -0
  89. package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
  90. package/dist/resources/extensions/gsd/slice-cadence.js +45 -2
  91. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +15 -9
  92. package/dist/resources/extensions/gsd/state-reconciliation.js +27 -0
  93. package/dist/resources/extensions/gsd/tool-contract.js +50 -0
  94. package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -7
  95. package/dist/resources/extensions/gsd/tools/complete-task.js +1 -1
  96. package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +15 -0
  97. package/dist/resources/extensions/gsd/tools/exec-search-tool.js +5 -0
  98. package/dist/resources/extensions/gsd/tools/exec-tool.js +3 -15
  99. package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -0
  100. package/dist/resources/extensions/gsd/tools/plan-slice.js +9 -0
  101. package/dist/resources/extensions/gsd/tools/plan-task.js +9 -0
  102. package/dist/resources/extensions/gsd/tools/resume-tool.js +5 -0
  103. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +1 -1
  104. package/dist/resources/extensions/gsd/unit-context-composer.js +12 -3
  105. package/dist/resources/extensions/gsd/unit-runtime.js +22 -0
  106. package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
  107. package/dist/resources/extensions/gsd/worktree-lifecycle.js +958 -0
  108. package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
  109. package/dist/resources/extensions/gsd/worktree-safety.js +119 -0
  110. package/dist/resources/extensions/gsd/worktree-state-projection.js +317 -0
  111. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
  112. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  113. package/dist/web/standalone/.next/BUILD_ID +1 -1
  114. package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
  115. package/dist/web/standalone/.next/build-manifest.json +3 -3
  116. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  117. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  118. package/dist/web/standalone/.next/required-server-files.json +1 -1
  119. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  121. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  125. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  128. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  130. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  131. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  132. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  133. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/index.html +1 -1
  138. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  139. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  140. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  141. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
  146. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/middleware.js +3 -3
  149. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  150. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  151. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  152. package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +10 -0
  153. package/dist/web/standalone/.next/static/chunks/app/{page-fab3ebb85b006001.js → page-752f1e2ebdaa3e45.js} +1 -1
  154. package/dist/web/standalone/.next/static/chunks/{webpack-0481f1221120a7c6.js → webpack-de742b64187e13fe.js} +1 -1
  155. package/dist/web/standalone/server.js +1 -1
  156. package/dist/welcome-screen.d.ts +2 -0
  157. package/dist/welcome-screen.js +9 -7
  158. package/package.json +6 -4
  159. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  160. package/packages/mcp-server/dist/workflow-tools.js +22 -17
  161. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  162. package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
  163. package/packages/mcp-server/src/workflow-tools.ts +30 -16
  164. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  165. package/packages/native/tsconfig.tsbuildinfo +1 -1
  166. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  167. package/packages/pi-agent-core/dist/agent-loop.js +4 -1
  168. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  169. package/packages/pi-agent-core/dist/agent.d.ts +9 -2
  170. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  171. package/packages/pi-agent-core/dist/agent.js +43 -11
  172. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  173. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  174. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  175. package/packages/pi-agent-core/dist/index.js +2 -0
  176. package/packages/pi-agent-core/dist/index.js.map +1 -1
  177. package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
  178. package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
  179. package/packages/pi-agent-core/dist/token-audit.js +221 -0
  180. package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
  181. package/packages/pi-agent-core/dist/types.d.ts +31 -0
  182. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  183. package/packages/pi-agent-core/dist/types.js.map +1 -1
  184. package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
  185. package/packages/pi-agent-core/src/agent-loop.ts +4 -1
  186. package/packages/pi-agent-core/src/agent.ts +52 -11
  187. package/packages/pi-agent-core/src/index.ts +2 -0
  188. package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
  189. package/packages/pi-agent-core/src/token-audit.ts +287 -0
  190. package/packages/pi-agent-core/src/types.ts +26 -10
  191. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  192. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +35 -13
  193. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  194. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +21 -11
  195. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -1
  196. package/packages/pi-ai/dist/providers/anthropic.d.ts +7 -0
  197. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  198. package/packages/pi-ai/dist/providers/anthropic.js +9 -7
  199. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  200. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +23 -14
  201. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -1
  202. package/packages/pi-ai/dist/types.d.ts +2 -0
  203. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  204. package/packages/pi-ai/dist/types.js.map +1 -1
  205. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +48 -21
  206. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
  207. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +22 -21
  208. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -1
  209. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +22 -21
  210. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -1
  211. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +39 -25
  212. package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -22
  213. package/packages/pi-ai/src/providers/anthropic.ts +22 -9
  214. package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +34 -21
  215. package/packages/pi-ai/src/types.ts +3 -0
  216. package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +56 -22
  217. package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +24 -28
  218. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +24 -28
  219. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  220. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +36 -1
  221. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
  222. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +30 -1
  223. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
  224. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +21 -2
  225. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  226. package/packages/pi-coding-agent/dist/core/agent-session.js +94 -16
  227. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  228. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +35 -1
  229. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  230. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +11 -0
  231. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  232. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +9 -0
  233. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  234. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts +2 -0
  235. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts.map +1 -0
  236. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js +103 -0
  237. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js.map +1 -0
  238. package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
  239. package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
  240. package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
  241. package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
  242. package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
  243. package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
  244. package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
  245. package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
  246. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  247. package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
  248. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  249. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -0
  250. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  251. package/packages/pi-coding-agent/dist/core/extensions/runner.js +20 -7
  252. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  253. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +102 -3
  254. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
  255. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +60 -4
  256. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  257. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +2 -0
  259. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
  260. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
  261. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
  262. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
  263. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
  264. package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
  265. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  266. package/packages/pi-coding-agent/dist/core/sdk.js +81 -4
  267. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  268. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +20 -0
  269. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  270. package/packages/pi-coding-agent/dist/core/settings-manager.js +25 -0
  271. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  272. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
  273. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
  275. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  276. package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
  277. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +22 -56
  279. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
  280. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +1 -0
  281. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/tools/bash.js +3 -1
  283. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/tools/edit.d.ts +2 -0
  285. package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/tools/edit.js +12 -1
  287. package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/tools/find.d.ts +2 -0
  289. package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/tools/find.js +14 -6
  291. package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/tools/grep.d.ts +2 -0
  293. package/packages/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/tools/grep.js +12 -3
  295. package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  296. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +2 -0
  297. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -1
  299. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -1
  301. package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
  303. package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/tools/ls.d.ts +2 -0
  305. package/packages/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/tools/ls.js +10 -3
  307. package/packages/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/tools/read.d.ts +2 -0
  309. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  310. package/packages/pi-coding-agent/dist/core/tools/read.js +3 -1
  311. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +7 -62
  313. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts +2 -0
  315. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts.map +1 -0
  316. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +115 -0
  317. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -0
  318. package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts +19 -0
  319. package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts.map +1 -0
  320. package/packages/pi-coding-agent/dist/core/tools/tool-target.js +20 -0
  321. package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -0
  322. package/packages/pi-coding-agent/dist/core/tools/write.d.ts +4 -0
  323. package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  324. package/packages/pi-coding-agent/dist/core/tools/write.js +9 -1
  325. package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  326. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +6 -4
  327. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
  328. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +114 -22
  329. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  330. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +2 -2
  331. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
  332. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  333. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  334. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  335. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +2 -1
  336. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  337. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +32 -7
  338. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  339. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +6 -0
  340. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  341. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +177 -19
  342. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  343. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  344. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +33 -6
  345. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  346. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +71 -0
  347. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  348. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
  349. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  350. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +25 -3
  351. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  352. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  353. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +36 -27
  354. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  355. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +21 -0
  356. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
  357. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
  358. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  359. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts +2 -0
  360. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts.map +1 -0
  361. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js +28 -0
  362. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
  363. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
  364. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
  365. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
  366. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +40 -1
  367. package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +40 -1
  368. package/packages/pi-coding-agent/src/core/agent-session.ts +102 -16
  369. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +41 -1
  370. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +18 -0
  371. package/packages/pi-coding-agent/src/core/compaction-threshold.test.ts +121 -0
  372. package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
  373. package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
  374. package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
  375. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +113 -3
  376. package/packages/pi-coding-agent/src/core/extensions/runner.ts +24 -6
  377. package/packages/pi-coding-agent/src/core/extensions/types.ts +63 -2
  378. package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
  379. package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
  380. package/packages/pi-coding-agent/src/core/sdk.ts +92 -4
  381. package/packages/pi-coding-agent/src/core/settings-manager.ts +39 -1
  382. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
  383. package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
  384. package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +22 -66
  385. package/packages/pi-coding-agent/src/core/tools/bash.ts +4 -1
  386. package/packages/pi-coding-agent/src/core/tools/edit.ts +13 -1
  387. package/packages/pi-coding-agent/src/core/tools/find.ts +15 -6
  388. package/packages/pi-coding-agent/src/core/tools/grep.ts +13 -3
  389. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +4 -1
  390. package/packages/pi-coding-agent/src/core/tools/index.ts +8 -0
  391. package/packages/pi-coding-agent/src/core/tools/ls.ts +11 -3
  392. package/packages/pi-coding-agent/src/core/tools/read.ts +4 -1
  393. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +11 -72
  394. package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +127 -0
  395. package/packages/pi-coding-agent/src/core/tools/tool-target.ts +48 -0
  396. package/packages/pi-coding-agent/src/core/tools/write.ts +14 -2
  397. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +7 -5
  398. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +144 -22
  399. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +2 -2
  400. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +1 -0
  401. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +2 -1
  402. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +41 -10
  403. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +208 -19
  404. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +75 -0
  405. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +41 -8
  406. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +27 -3
  407. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +36 -27
  408. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +25 -0
  409. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
  410. package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +31 -0
  411. package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +3 -2
  412. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  413. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  414. package/packages/pi-tui/dist/tui.js +18 -8
  415. package/packages/pi-tui/dist/tui.js.map +1 -1
  416. package/packages/pi-tui/src/tui.ts +20 -8
  417. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  418. package/packages/rpc-client/README.md +7 -0
  419. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  420. package/pkg/dist/modes/interactive/theme/themes.js +36 -27
  421. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  422. package/src/resources/GSD-WORKFLOW.md +2 -2
  423. package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
  424. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +42 -3
  425. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +67 -0
  426. package/src/resources/extensions/github-sync/sync.ts +8 -1
  427. package/src/resources/extensions/github-sync/tests/sync-source.test.ts +6 -18
  428. package/src/resources/extensions/gsd/auto/contracts.ts +19 -2
  429. package/src/resources/extensions/gsd/auto/loop-deps.ts +11 -11
  430. package/src/resources/extensions/gsd/auto/loop.ts +134 -16
  431. package/src/resources/extensions/gsd/auto/orchestrator.ts +52 -4
  432. package/src/resources/extensions/gsd/auto/phases.ts +427 -220
  433. package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
  434. package/src/resources/extensions/gsd/auto/run-unit.ts +28 -30
  435. package/src/resources/extensions/gsd/auto/session.ts +9 -1
  436. package/src/resources/extensions/gsd/auto/types.ts +3 -0
  437. package/src/resources/extensions/gsd/auto/unit-runner-events.ts +15 -0
  438. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +63 -1
  439. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +14 -1
  440. package/src/resources/extensions/gsd/auto-dashboard.ts +20 -0
  441. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
  442. package/src/resources/extensions/gsd/auto-dispatch.ts +33 -0
  443. package/src/resources/extensions/gsd/auto-post-unit.ts +134 -90
  444. package/src/resources/extensions/gsd/auto-prompts.ts +228 -16
  445. package/src/resources/extensions/gsd/auto-recovery.ts +54 -0
  446. package/src/resources/extensions/gsd/auto-start.ts +326 -25
  447. package/src/resources/extensions/gsd/auto-supervisor.ts +7 -0
  448. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +2 -2
  449. package/src/resources/extensions/gsd/auto-worktree.ts +259 -360
  450. package/src/resources/extensions/gsd/auto.ts +336 -89
  451. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +147 -11
  452. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +45 -37
  453. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +36 -10
  454. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +32 -19
  455. package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +5 -1
  456. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +7 -4
  457. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +6 -3
  458. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +1 -1
  459. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +379 -54
  460. package/src/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.ts +4 -0
  461. package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
  462. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +19 -2
  463. package/src/resources/extensions/gsd/clean-root-preflight.ts +72 -9
  464. package/src/resources/extensions/gsd/commands/dispatcher.ts +6 -0
  465. package/src/resources/extensions/gsd/commands/handlers/ops.ts +4 -2
  466. package/src/resources/extensions/gsd/commands-config.ts +1 -1
  467. package/src/resources/extensions/gsd/commands-eval-review.ts +2 -2
  468. package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
  469. package/src/resources/extensions/gsd/context-budget.ts +44 -2
  470. package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
  471. package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
  472. package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
  473. package/src/resources/extensions/gsd/db-base-schema.ts +4 -2
  474. package/src/resources/extensions/gsd/db-migration-steps.ts +8 -0
  475. package/src/resources/extensions/gsd/detection.ts +128 -0
  476. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
  477. package/src/resources/extensions/gsd/git-service.ts +87 -10
  478. package/src/resources/extensions/gsd/gsd-db.ts +50 -13
  479. package/src/resources/extensions/gsd/guided-flow.ts +175 -55
  480. package/src/resources/extensions/gsd/health-widget.ts +3 -0
  481. package/src/resources/extensions/gsd/init-wizard.ts +5 -1
  482. package/src/resources/extensions/gsd/memory-store.ts +77 -12
  483. package/src/resources/extensions/gsd/migrate/command.ts +47 -1
  484. package/src/resources/extensions/gsd/migration-auto-check.ts +129 -0
  485. package/src/resources/extensions/gsd/native-git-bridge.ts +39 -6
  486. package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
  487. package/src/resources/extensions/gsd/parallel-orchestrator.ts +13 -3
  488. package/src/resources/extensions/gsd/planning-path-scope.ts +35 -0
  489. package/src/resources/extensions/gsd/pre-execution-checks.ts +23 -0
  490. package/src/resources/extensions/gsd/preferences-types.ts +1 -1
  491. package/src/resources/extensions/gsd/prompt-loader.ts +27 -2
  492. package/src/resources/extensions/gsd/prompts/complete-milestone.md +27 -23
  493. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  494. package/src/resources/extensions/gsd/prompts/execute-task.md +4 -2
  495. package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
  496. package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  497. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  498. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
  499. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  500. package/src/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
  501. package/src/resources/extensions/gsd/quick.ts +37 -2
  502. package/src/resources/extensions/gsd/recovery-classification.ts +122 -0
  503. package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
  504. package/src/resources/extensions/gsd/slice-cadence.ts +49 -2
  505. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +23 -9
  506. package/src/resources/extensions/gsd/state-reconciliation.ts +57 -0
  507. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +59 -89
  508. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +47 -172
  509. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +0 -35
  510. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +35 -9
  511. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +544 -41
  512. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +80 -59
  513. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +119 -2
  514. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +3 -47
  515. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +76 -18
  516. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +175 -11
  517. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +54 -95
  518. package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +67 -26
  519. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +14 -1
  520. package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +32 -30
  521. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +32 -128
  522. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +20 -54
  523. package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +20 -30
  524. package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +17 -29
  525. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +142 -0
  526. package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +21 -39
  527. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +15 -24
  528. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +44 -29
  529. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +39 -51
  530. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +159 -213
  531. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +15 -32
  532. package/src/resources/extensions/gsd/tests/browser-teardown.test.ts +0 -41
  533. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
  534. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +34 -27
  535. package/src/resources/extensions/gsd/tests/cmux.test.ts +51 -53
  536. package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +39 -61
  537. package/src/resources/extensions/gsd/tests/commands-config.test.ts +26 -19
  538. package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +14 -1
  539. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
  540. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +140 -0
  541. package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
  542. package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +29 -33
  543. package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +45 -108
  544. package/src/resources/extensions/gsd/tests/context-budget.test.ts +10 -1
  545. package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
  546. package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +90 -31
  547. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
  548. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +18 -10
  549. package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +138 -0
  550. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +4 -68
  551. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +6 -11
  552. package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +14 -65
  553. package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
  554. package/src/resources/extensions/gsd/tests/discuss-tool-scoping.test.ts +44 -37
  555. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +58 -40
  556. package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +25 -15
  557. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
  558. package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +35 -17
  559. package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +16 -21
  560. package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +15 -82
  561. package/src/resources/extensions/gsd/tests/exec-history.test.ts +15 -0
  562. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +65 -0
  563. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +5 -2
  564. package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
  565. package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +151 -0
  566. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -20
  567. package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +18 -26
  568. package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
  569. package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +9 -12
  570. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +40 -0
  571. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +4 -2
  572. package/src/resources/extensions/gsd/tests/integration/git-locale.test.ts +31 -20
  573. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +66 -0
  574. package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +0 -47
  575. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +60 -202
  576. package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +13 -56
  577. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +248 -10
  578. package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
  579. package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
  580. package/src/resources/extensions/gsd/tests/lazy-pi-tui-import.test.ts +44 -6
  581. package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
  582. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +21 -35
  583. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +37 -7
  584. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
  585. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
  586. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +267 -0
  587. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +88 -98
  588. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +70 -278
  589. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
  590. package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +37 -30
  591. package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +32 -28
  592. package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +44 -9
  593. package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +144 -0
  594. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
  595. package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
  596. package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +24 -37
  597. package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +9 -24
  598. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +95 -75
  599. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +50 -0
  600. package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
  601. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +36 -22
  602. package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +36 -30
  603. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
  604. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +74 -4
  605. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +20 -22
  606. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +130 -32
  607. package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +18 -36
  608. package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +35 -73
  609. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +76 -138
  610. package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +230 -0
  611. package/src/resources/extensions/gsd/tests/prompt-path-audit.test.ts +40 -0
  612. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +70 -106
  613. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +59 -161
  614. package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +33 -29
  615. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +22 -196
  616. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +23 -93
  617. package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
  618. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +50 -79
  619. package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +27 -13
  620. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +151 -251
  621. package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +41 -29
  622. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +58 -69
  623. package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +32 -164
  624. package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -0
  625. package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +57 -41
  626. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +91 -0
  627. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +29 -0
  628. package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +156 -0
  629. package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +96 -0
  630. package/src/resources/extensions/gsd/tests/session-model-override.test.ts +14 -9
  631. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +77 -0
  632. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +222 -0
  633. package/src/resources/extensions/gsd/tests/show-config-command.test.ts +44 -42
  634. package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
  635. package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +56 -24
  636. package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +51 -11
  637. package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +23 -0
  638. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +66 -50
  639. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +68 -107
  640. package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +115 -42
  641. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +21 -59
  642. package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +25 -116
  643. package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +21 -57
  644. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +29 -76
  645. package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +33 -24
  646. package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +39 -30
  647. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
  648. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +101 -2
  649. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -4
  650. package/src/resources/extensions/gsd/tests/status-db-open.test.ts +35 -40
  651. package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +48 -46
  652. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +14 -102
  653. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +78 -232
  654. package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +32 -35
  655. package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +112 -0
  656. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +7 -9
  657. package/src/resources/extensions/gsd/tests/token-profile.test.ts +84 -309
  658. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +291 -0
  659. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +134 -341
  660. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +210 -0
  661. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +136 -4
  662. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +8 -25
  663. package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +80 -1
  664. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +37 -0
  665. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -99
  666. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +43 -36
  667. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -444
  668. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +142 -0
  669. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +44 -189
  670. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -57
  671. package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
  672. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +3 -0
  673. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +32 -1
  674. package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +21 -44
  675. package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +27 -26
  676. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +38 -6
  677. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +50 -31
  678. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +434 -0
  679. package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -18
  680. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +7 -0
  681. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +9 -2
  682. package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +22 -19
  683. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +66 -0
  684. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +373 -76
  685. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +327 -0
  686. package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +120 -0
  687. package/src/resources/extensions/gsd/tests/write-gate.test.ts +40 -1
  688. package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -13
  689. package/src/resources/extensions/gsd/tool-contract.ts +82 -0
  690. package/src/resources/extensions/gsd/tools/complete-milestone.ts +14 -15
  691. package/src/resources/extensions/gsd/tools/complete-task.ts +1 -1
  692. package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +25 -0
  693. package/src/resources/extensions/gsd/tools/exec-search-tool.ts +7 -7
  694. package/src/resources/extensions/gsd/tools/exec-tool.ts +4 -23
  695. package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -0
  696. package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -0
  697. package/src/resources/extensions/gsd/tools/plan-task.ts +10 -0
  698. package/src/resources/extensions/gsd/tools/resume-tool.ts +7 -7
  699. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +1 -1
  700. package/src/resources/extensions/gsd/unit-context-composer.ts +19 -4
  701. package/src/resources/extensions/gsd/unit-runtime.ts +25 -0
  702. package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
  703. package/src/resources/extensions/gsd/worktree-lifecycle.ts +1255 -0
  704. package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
  705. package/src/resources/extensions/gsd/worktree-safety.ts +282 -0
  706. package/src/resources/extensions/gsd/worktree-state-projection.ts +404 -0
  707. package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +86 -40
  708. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
  709. package/dist/resources/extensions/gsd/worktree-resolver.js +0 -733
  710. package/dist/web/standalone/.next/static/chunks/8336.631939fb583761fa.js +0 -10
  711. package/src/resources/extensions/gsd/tests/sync-layer-scope.test.ts +0 -434
  712. package/src/resources/extensions/gsd/worktree-resolver.ts +0 -909
  713. /package/dist/web/standalone/.next/static/{k-MDjzPMF62Rg1-FR437h → 8G7Lc96dfT0V6VXh6O6Ka}/_buildManifest.js +0 -0
  714. /package/dist/web/standalone/.next/static/{k-MDjzPMF62Rg1-FR437h → 8G7Lc96dfT0V6VXh6O6Ka}/_ssgManifest.js +0 -0
@@ -3,6 +3,9 @@ import assert from "node:assert/strict";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { resolve } from "node:path";
5
5
 
6
+ import { _withDetachedAutoKeepaliveForTest } from "../auto.ts";
7
+ import { _scheduleAutoStartAfterIdleForTest } from "../guided-flow.ts";
8
+
6
9
  const gsdDir = resolve(import.meta.dirname, "..");
7
10
 
8
11
  function readGsdFile(relativePath: string): string {
@@ -94,6 +97,23 @@ test("auto bootstrap validates blocked directories before touching .gsd migratio
94
97
  );
95
98
  });
96
99
 
100
+ test("fresh start registers the auto worker before bootstrap enters worktree flow (#5405)", () => {
101
+ const autoSrc = readGsdFile("auto.ts");
102
+ const startAutoIdx = autoSrc.indexOf("export async function startAuto(");
103
+ const startAutoBody = autoSrc.slice(startAutoIdx);
104
+
105
+ const preBootstrapRegisterIdx = startAutoBody.indexOf("registerAutoWorkerForSession(s, base);");
106
+ const bootstrapCallIdx = startAutoBody.indexOf("const ready = await bootstrapAutoSession(");
107
+
108
+ assert.ok(startAutoIdx > -1, "startAuto should exist");
109
+ assert.ok(preBootstrapRegisterIdx > -1, "startAuto should register worker before bootstrap");
110
+ assert.ok(bootstrapCallIdx > -1, "startAuto should call bootstrapAutoSession");
111
+ assert.ok(
112
+ preBootstrapRegisterIdx < bootstrapCallIdx,
113
+ "worker registration must happen before bootstrap so enterMilestone can claim milestone leases on first entry",
114
+ );
115
+ });
116
+
97
117
  test("startAutoDetached reports failures asynchronously (#3733)", () => {
98
118
  const autoSrc = readGsdFile("auto.ts");
99
119
 
@@ -102,8 +122,8 @@ test("startAutoDetached reports failures asynchronously (#3733)", () => {
102
122
  "auto.ts should export startAutoDetached",
103
123
  );
104
124
  assert.ok(
105
- autoSrc.includes("void startAuto(ctx, pi, base, verboseMode, options).catch"),
106
- "startAutoDetached should launch startAuto without awaiting it",
125
+ autoSrc.includes("void withDetachedAutoKeepalive(startAuto(ctx, pi, base, verboseMode, options)).catch"),
126
+ "startAutoDetached should launch startAuto without awaiting it and keep the process alive",
107
127
  );
108
128
  assert.ok(
109
129
  autoSrc.includes("ctx.ui.notify(`Auto-start failed: ${message}`, \"error\")"),
@@ -111,6 +131,48 @@ test("startAutoDetached reports failures asynchronously (#3733)", () => {
111
131
  );
112
132
  });
113
133
 
134
+ test("detached auto-start keeps a ref'ed handle until the run settles", async () => {
135
+ const originalSetInterval = globalThis.setInterval;
136
+ const originalClearInterval = globalThis.clearInterval;
137
+ let intervalCreated = false;
138
+ let intervalCleared = false;
139
+ let createdHandle: NodeJS.Timeout | undefined;
140
+ let resolveRun!: () => void;
141
+ const run = new Promise<void>((resolve) => {
142
+ resolveRun = resolve;
143
+ });
144
+
145
+ globalThis.setInterval = ((handler: TimerHandler, timeout?: number, ...args: unknown[]) => {
146
+ intervalCreated = true;
147
+ assert.equal(timeout, 30_000);
148
+ void handler;
149
+ void args;
150
+ createdHandle = originalSetInterval(() => {}, 1_000_000);
151
+ assert.equal(createdHandle.hasRef(), true, "detached auto keepalive must be ref'ed");
152
+ return createdHandle;
153
+ }) as unknown as typeof setInterval;
154
+
155
+ globalThis.clearInterval = ((handle?: NodeJS.Timeout | number | string) => {
156
+ if (handle === createdHandle) intervalCleared = true;
157
+ return originalClearInterval(handle);
158
+ }) as unknown as typeof clearInterval;
159
+
160
+ try {
161
+ const heldRun = _withDetachedAutoKeepaliveForTest(run);
162
+ assert.equal(intervalCreated, true, "keepalive interval should start immediately");
163
+ assert.equal(intervalCleared, false, "keepalive should remain active while auto-mode is running");
164
+
165
+ resolveRun();
166
+ await heldRun;
167
+
168
+ assert.equal(intervalCleared, true, "keepalive interval should clear when auto-mode settles");
169
+ } finally {
170
+ if (createdHandle) originalClearInterval(createdHandle);
171
+ globalThis.setInterval = originalSetInterval;
172
+ globalThis.clearInterval = originalClearInterval;
173
+ }
174
+ });
175
+
114
176
  test("detached auto-start preserves milestone lock across pause/stop cleanup (#3733)", () => {
115
177
  const autoSrc = readGsdFile("auto.ts");
116
178
  const sessionSrc = readGsdFile("auto/session.ts");
@@ -141,3 +203,40 @@ test("detached auto-start preserves milestone lock across pause/stop cleanup (#3
141
203
  "AutoSession should track the detached milestone lock explicitly",
142
204
  );
143
205
  });
206
+
207
+ test("discussion auto-start waits for the current command context to become idle", async () => {
208
+ let releaseIdle!: () => void;
209
+ const idle = new Promise<void>((resolveIdle) => {
210
+ releaseIdle = resolveIdle;
211
+ });
212
+ const launches: unknown[][] = [];
213
+ const ctx = {
214
+ waitForIdle: () => idle,
215
+ ui: {
216
+ notify: () => {},
217
+ },
218
+ } as any;
219
+
220
+ _scheduleAutoStartAfterIdleForTest(
221
+ ctx,
222
+ {} as any,
223
+ "/tmp/gsd-auto-start-idle-test",
224
+ false,
225
+ { step: true },
226
+ (...args: unknown[]) => {
227
+ launches.push(args);
228
+ },
229
+ );
230
+
231
+ await Promise.resolve();
232
+ assert.equal(launches.length, 0, "auto-start must not launch before waitForIdle resolves");
233
+
234
+ releaseIdle();
235
+ await Promise.resolve();
236
+ assert.equal(launches.length, 0, "auto-start should defer launch to the next timer turn");
237
+
238
+ await new Promise((resolveTimer) => setTimeout(resolveTimer, 0));
239
+ assert.equal(launches.length, 1);
240
+ assert.equal(launches[0][2], "/tmp/gsd-auto-start-idle-test");
241
+ assert.deepEqual(launches[0][4], { step: true });
242
+ });
@@ -276,6 +276,7 @@ describe("#2945 Bug 3: mergeAndExit must teardown worktree after successful merg
276
276
  gitService: {} as unknown,
277
277
  } as unknown as AutoSession;
278
278
 
279
+ const { WorktreeStateProjection } = await import("../worktree-state-projection.ts");
279
280
  const mockDeps = {
280
281
  isInAutoWorktree: () => true,
281
282
  shouldUseWorktreeIsolation: () => true,
@@ -291,6 +292,7 @@ describe("#2945 Bug 3: mergeAndExit must teardown worktree after successful merg
291
292
  getAutoWorktreePath: () => null,
292
293
  autoCommitCurrentBranch: () => {},
293
294
  getCurrentBranch: () => "main",
295
+ checkoutBranch: () => {},
294
296
  autoWorktreeBranch: () => "gsd/M001",
295
297
  resolveMilestoneFile: () => "/mock/roadmap.md",
296
298
  readFileSync: () => "# Roadmap content",
@@ -299,15 +301,15 @@ describe("#2945 Bug 3: mergeAndExit must teardown worktree after successful merg
299
301
  invalidateAllCaches: () => {},
300
302
  captureIntegrationBranch: () => {},
301
303
  enterBranchModeForMilestone: () => {},
304
+ worktreeProjection: new WorktreeStateProjection(),
302
305
  };
303
306
 
304
- // Import and create resolver
305
307
  // We test the behavior contract: after a successful merge, teardown must be called
306
- const { WorktreeResolver } = await import("../worktree-resolver.ts");
307
- const resolver = new WorktreeResolver(mockSession, mockDeps);
308
+ const { WorktreeLifecycle } = await import("../worktree-lifecycle.ts");
309
+ const lifecycle = new WorktreeLifecycle(mockSession, mockDeps as never);
308
310
 
309
311
  const ctx = { notify: () => {} };
310
- resolver.mergeAndExit("M001", ctx);
312
+ lifecycle.exitMilestone("M001", { merge: true }, ctx);
311
313
 
312
314
  assert.ok(
313
315
  teardownCalled,
@@ -1,47 +1,42 @@
1
1
  /**
2
- * Regression test for #3691 — /gsd status opens DB before deriveState
3
- *
4
- * In cold sessions the DB was not opened before deriveState, causing
5
- * status to fall back to filesystem-only state. The fix adds an
6
- * ensureDbOpen() call before deriveState in handleStatus.
7
- *
8
- * Also verifies that quick.ts checks getIsolationMode before branching.
2
+ * Regression tests for status/quick behavior.
9
3
  */
10
4
 
11
- import { describe, test } from 'node:test';
12
- import assert from 'node:assert/strict';
13
- import { readFileSync } from 'node:fs';
14
- import { fileURLToPath } from 'node:url';
15
- import { dirname, join } from 'node:path';
16
-
17
- const __filename = fileURLToPath(import.meta.url);
18
- const __dirname = dirname(__filename);
19
-
20
- const coreSrc = readFileSync(
21
- join(__dirname, '..', 'commands', 'handlers', 'core.ts'),
22
- 'utf-8',
23
- );
24
- const quickSrc = readFileSync(
25
- join(__dirname, '..', 'quick.ts'),
26
- 'utf-8',
27
- );
28
-
29
- describe('status opens DB before deriveState (#3691)', () => {
30
- test('handleStatus calls ensureDbOpen before deriveState', () => {
31
- const ensureIdx = coreSrc.indexOf('ensureDbOpen');
32
- const deriveIdx = coreSrc.indexOf('deriveState(basePath)');
33
- assert.ok(ensureIdx > -1, 'ensureDbOpen call should exist in core.ts');
34
- assert.ok(deriveIdx > -1, 'deriveState(basePath) call should exist in core.ts');
35
- assert.ok(
36
- ensureIdx < deriveIdx,
37
- 'ensureDbOpen must appear before deriveState so DB is ready',
38
- );
5
+ import { describe, test } from "node:test";
6
+ import assert from "node:assert/strict";
7
+
8
+ import { handleCoreCommand } from "../commands/handlers/core.ts";
9
+ import { buildQuickCommitInstruction } from "../quick.ts";
10
+
11
+ describe("status opens DB before deriveState (#3691)", () => {
12
+ test("core handler routes status command", async () => {
13
+ const notifications: Array<{ message: string; level: string }> = [];
14
+ const ctx = {
15
+ ui: {
16
+ custom: async () => undefined,
17
+ notify: (message: string, level: string) => {
18
+ notifications.push({ message, level });
19
+ },
20
+ },
21
+ };
22
+
23
+ const handled = await handleCoreCommand("status", ctx as any);
24
+
25
+ assert.equal(handled, true);
26
+ assert.ok(notifications.length >= 0);
39
27
  });
40
28
 
41
- test('quick.ts checks getIsolationMode before branching', () => {
42
- assert.match(quickSrc, /getIsolationMode\(\)/,
43
- 'quick.ts should call getIsolationMode()');
44
- assert.match(quickSrc, /getIsolationMode\(\)\s*!==\s*"none"/,
45
- 'quick.ts should compare isolation mode against "none"');
29
+ test("quick task commit instructions handle external .gsd roots without staging quick files", () => {
30
+ const instruction = buildQuickCommitInstruction("/project", "/external/.gsd");
31
+
32
+ assert.match(instruction, /do not stage or commit `\.gsd\/quick\/\.\.\.`/);
33
+ assert.match(instruction, /nothing in the project repo to commit/);
34
+ });
35
+
36
+ test("quick task commit instructions include normal commit guidance for in-project .gsd roots", () => {
37
+ const instruction = buildQuickCommitInstruction("/project", "/project/.gsd");
38
+
39
+ assert.doesNotMatch(instruction, /nothing in the project repo to commit/);
40
+ assert.match(instruction, /Commit your changes atomically/);
46
41
  });
47
42
  });
@@ -1,5 +1,7 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Stop-auto worktree exit strategy regression tests.
1
3
  /**
2
- * stop-auto-merge-back.test.ts — Regression test for #2317.
4
+ * stop-auto-merge-back.test.ts — Regression test for #5576.
3
5
  *
4
6
  * When auto-mode stops after a milestone is complete, stopAuto should trigger
5
7
  * merge-back (mergeAndExit) instead of just exiting the worktree with
@@ -9,59 +11,59 @@
9
11
 
10
12
  import test from "node:test";
11
13
  import assert from "node:assert/strict";
12
- import { readFileSync } from "node:fs";
13
- import { join } from "node:path";
14
+ import { _selectStopAutoWorktreeExit } from "../auto.ts";
14
15
 
15
- // ─── Source analysis: stopAuto calls mergeAndExit for complete milestones ────
16
-
17
- const autoSrcPath = join(import.meta.dirname, "..", "auto.ts");
18
- const autoSrc = readFileSync(autoSrcPath, "utf-8");
19
-
20
- test("#2317: stopAuto should check milestone completion status before choosing exit strategy", () => {
21
- // stopAuto Step 4 should NOT unconditionally call exitMilestone(preserveBranch: true).
22
- // It should check if the milestone is complete and call mergeAndExit instead.
23
-
24
- // Find the Step 4 section
25
- const step4Idx = autoSrc.indexOf("Step 4: Auto-worktree exit");
26
- assert.ok(step4Idx !== -1, "Step 4 comment exists in stopAuto");
27
-
28
- // Extract a reasonable window around Step 4 (up to Step 5)
29
- const step5Idx = autoSrc.indexOf("Step 5:", step4Idx);
30
- const step4Block = autoSrc.slice(step4Idx, step5Idx);
31
-
32
- // The fix: Step 4 should call mergeAndExit when milestone is complete
33
- assert.ok(
34
- step4Block.includes("mergeAndExit"),
35
- "Step 4 should call mergeAndExit for completed milestones",
16
+ test("#5576: stopAuto should check milestone completion status before choosing exit strategy", () => {
17
+ assert.equal(
18
+ _selectStopAutoWorktreeExit({
19
+ currentMilestoneId: "M001",
20
+ milestoneComplete: true,
21
+ milestoneMergedInPhases: false,
22
+ }),
23
+ "merge",
36
24
  );
37
25
  });
38
26
 
39
- test("#2317: stopAuto should detect milestone completion via SUMMARY file or DB", () => {
40
- const step4Idx = autoSrc.indexOf("Step 4: Auto-worktree exit");
41
- const step5Idx = autoSrc.indexOf("Step 5:", step4Idx);
42
- const step4Block = autoSrc.slice(step4Idx, step5Idx);
43
-
44
- // Should check completion status — either via SUMMARY file, DB getMilestone, or phase
45
- const checksCompletion =
46
- step4Block.includes("SUMMARY") ||
47
- step4Block.includes("getMilestone") ||
48
- step4Block.includes("complete") ||
49
- step4Block.includes("isMilestoneComplete");
27
+ test("#5576: stopAuto still preserves branch for incomplete milestones", () => {
28
+ assert.equal(
29
+ _selectStopAutoWorktreeExit({
30
+ currentMilestoneId: "M001",
31
+ milestoneComplete: false,
32
+ milestoneMergedInPhases: false,
33
+ }),
34
+ "preserve",
35
+ );
36
+ });
50
37
 
51
- assert.ok(
52
- checksCompletion,
53
- "Step 4 should check if milestone is complete before deciding exit strategy",
38
+ test("#5576: stopAuto does not merge a milestone already merged in phases", () => {
39
+ assert.equal(
40
+ _selectStopAutoWorktreeExit({
41
+ currentMilestoneId: "M001",
42
+ milestoneComplete: true,
43
+ milestoneMergedInPhases: true,
44
+ }),
45
+ "none",
54
46
  );
55
47
  });
56
48
 
57
- test("#2317: stopAuto still preserves branch for incomplete milestones", () => {
58
- const step4Idx = autoSrc.indexOf("Step 4: Auto-worktree exit");
59
- const step5Idx = autoSrc.indexOf("Step 5:", step4Idx);
60
- const step4Block = autoSrc.slice(step4Idx, step5Idx);
49
+ test("#5576: stopAuto skips worktree teardown when no milestone is active", () => {
50
+ assert.equal(
51
+ _selectStopAutoWorktreeExit({
52
+ currentMilestoneId: null,
53
+ milestoneComplete: true,
54
+ milestoneMergedInPhases: false,
55
+ }),
56
+ "none",
57
+ );
58
+ });
61
59
 
62
- // preserveBranch should still be used as fallback for non-complete milestones
63
- assert.ok(
64
- step4Block.includes("preserveBranch"),
65
- "Step 4 should still preserve branch for incomplete milestones (fallback path)",
60
+ test("#5576: stopAuto returns none when phases are already merged even if milestone is not flagged complete", () => {
61
+ assert.equal(
62
+ _selectStopAutoWorktreeExit({
63
+ currentMilestoneId: "M001",
64
+ milestoneComplete: false,
65
+ milestoneMergedInPhases: true,
66
+ }),
67
+ "none",
66
68
  );
67
69
  });
@@ -1,106 +1,18 @@
1
- /**
2
- * stop-auto-race-null-unit.test.ts — Regression test for #2939.
3
- *
4
- * When the user stops auto-mode while a unit is executing, stopAuto()
5
- * calls s.reset() which sets s.currentUnit = null. The resumed
6
- * runUnitPhase() then hits s.currentUnit.startedAt on the closeout
7
- * line and throws a TypeError.
8
- *
9
- * The fix adds null guards (matching the existing pattern at lines 136
10
- * and 344) so that closeout and subsequent accesses are skipped when
11
- * s.currentUnit has been nulled by a concurrent stopAuto().
12
- */
1
+ // GSD-2 — stopAuto race current-unit guard regression tests.
13
2
 
14
- import { readFileSync } from "node:fs";
15
- import { join } from "node:path";
16
- import { createTestContext, extractSourceRegion } from "./test-helpers.ts";
3
+ import test from "node:test";
4
+ import assert from "node:assert/strict";
17
5
 
18
- const { assertTrue, report } = createTestContext();
6
+ import { _resolveCurrentUnitStartedAtForTest } from "../auto/phases.ts";
19
7
 
20
- const phasesPath = join(import.meta.dirname, "..", "auto", "phases.ts");
21
- const phasesSrc = readFileSync(phasesPath, "utf-8");
8
+ test("unit started-at resolver tolerates stopAuto clearing currentUnit", () => {
9
+ assert.equal(_resolveCurrentUnitStartedAtForTest(null), undefined);
10
+ assert.equal(_resolveCurrentUnitStartedAtForTest(undefined), undefined);
11
+ });
22
12
 
23
- console.log("\n=== #2939: stopAuto race null guard on s.currentUnit in closeout ===");
24
-
25
- // ── Test 1: closeoutUnit call is guarded by if (s.currentUnit) ──────────
26
- // The closeout block starting around the "Immediate unit closeout" comment
27
- // must be wrapped in an `if (s.currentUnit)` guard, matching the pattern
28
- // already used at lines 136 and 344.
29
-
30
- const closeoutComment = "Immediate unit closeout";
31
- const closeoutIdx = phasesSrc.indexOf(closeoutComment);
32
- assertTrue(
33
- closeoutIdx > 0,
34
- "phases.ts contains the 'Immediate unit closeout' comment block",
35
- );
36
-
37
- // Extract the region from the closeout comment to the next section comment
38
- const closeoutRegion = extractSourceRegion(phasesSrc, closeoutComment);
39
- assertTrue(
40
- closeoutRegion.includes("if (s.currentUnit)"),
41
- "closeoutUnit call is guarded by `if (s.currentUnit)` check (#2939)",
42
- );
43
-
44
- // ── Test 2: zero-tool-call guard uses s.currentUnit?.startedAt ──────────
45
- // The zero-tool-call section accesses s.currentUnit!.startedAt (non-null
46
- // assertion) which will throw if currentUnit is null.
47
-
48
- const zeroToolComment = "Zero tool-call guard";
49
- const zeroToolIdx = phasesSrc.indexOf(zeroToolComment);
50
- assertTrue(
51
- zeroToolIdx > 0,
52
- "phases.ts contains the 'Zero tool-call guard' comment block",
53
- );
54
-
55
- const zeroToolRegion = extractSourceRegion(phasesSrc, zeroToolComment);
56
-
57
- // The non-null assertion `s.currentUnit!.startedAt` must be replaced with
58
- // optional chaining `s.currentUnit?.startedAt`
59
- assertTrue(
60
- !zeroToolRegion.includes("s.currentUnit!.startedAt"),
61
- "zero-tool-call guard no longer uses non-null assertion on s.currentUnit (#2939)",
62
- );
63
-
64
- // ── Test 3: return value uses optional chaining for startedAt ───────────
65
- // The final return at the end of runUnitPhase uses s.currentUnit.startedAt
66
- // which will throw if currentUnit was nulled. It must use optional chaining.
67
-
68
- // Find the last return statement in runUnitPhase that references startedAt.
69
- // There are two: one inside the zero-tool-call block and one at the end.
70
- // Both must use s.currentUnit?.startedAt
71
-
72
- // Count unguarded s.currentUnit.startedAt (without optional chaining)
73
- // after the "Immediate unit closeout" comment. All of them should use
74
- // optional chaining or be inside a guard.
75
- const afterCloseout = phasesSrc.slice(closeoutIdx);
76
-
77
- // Count s.currentUnit!.startedAt (non-null assertion — always unsafe)
78
- const nonNullPattern = /s\.currentUnit!\.startedAt/g;
79
- const nonNullAfterCloseout = [...afterCloseout.matchAll(nonNullPattern)];
80
- assertTrue(
81
- nonNullAfterCloseout.length === 0,
82
- `no non-null assertions s.currentUnit!.startedAt after closeout comment (found ${nonNullAfterCloseout.length}, expected 0) (#2939)`,
83
- );
84
-
85
- // Count bare s.currentUnit.startedAt that are NOT inside an if (s.currentUnit) guard.
86
- // The closeout block itself uses s.currentUnit.startedAt inside a guard — that's fine.
87
- // But any usage outside a guard block (e.g. in a return statement) must use optional chaining.
88
- // We check that all return statements use optional chaining.
89
- const returnWithBareAccess = /return\s*\{[^}]*s\.currentUnit\.startedAt/g;
90
- const bareReturnCount = [...afterCloseout.matchAll(returnWithBareAccess)].length;
91
- assertTrue(
92
- bareReturnCount === 0,
93
- `no return statements use bare s.currentUnit.startedAt (found ${bareReturnCount}, expected 0) (#2939)`,
94
- );
95
-
96
- // ── Test 4: the return at end of runUnitPhase uses optional chaining ────
97
- // The final `return { action: "next", data: { unitStartedAt: s.currentUnit?.startedAt } }`
98
- // must use optional chaining.
99
-
100
- const finalReturnPattern = /unitStartedAt:\s*s\.currentUnit\?\.startedAt/;
101
- assertTrue(
102
- finalReturnPattern.test(afterCloseout),
103
- "final return uses s.currentUnit?.startedAt with optional chaining (#2939)",
104
- );
105
-
106
- report();
13
+ test("unit started-at resolver preserves the active unit timestamp", () => {
14
+ assert.equal(
15
+ _resolveCurrentUnitStartedAtForTest({ startedAt: 12345 }),
16
+ 12345,
17
+ );
18
+ });