gsd-pi 2.80.0 → 2.81.0-dev.3cddbbba2

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 (1345) hide show
  1. package/README.md +47 -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/github-sync/templates.js +90 -74
  18. package/dist/resources/extensions/gsd/auto/contracts.js +2 -0
  19. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
  20. package/dist/resources/extensions/gsd/auto/loop.js +566 -526
  21. package/dist/resources/extensions/gsd/auto/orchestrator.js +48 -4
  22. package/dist/resources/extensions/gsd/auto/phases.js +402 -157
  23. package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
  24. package/dist/resources/extensions/gsd/auto/run-unit.js +105 -46
  25. package/dist/resources/extensions/gsd/auto/session.js +18 -1
  26. package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -0
  27. package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  29. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  30. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  31. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  32. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  33. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  34. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +80 -0
  35. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  36. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  37. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  38. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  39. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  40. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  41. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  42. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  43. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  44. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  45. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  46. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +23 -0
  47. package/dist/resources/extensions/gsd/auto-dashboard.js +248 -187
  48. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
  49. package/dist/resources/extensions/gsd/auto-dispatch.js +40 -11
  50. package/dist/resources/extensions/gsd/auto-post-unit.js +129 -89
  51. package/dist/resources/extensions/gsd/auto-prompts.js +382 -20
  52. package/dist/resources/extensions/gsd/auto-recovery.js +197 -9
  53. package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
  54. package/dist/resources/extensions/gsd/auto-start.js +253 -19
  55. package/dist/resources/extensions/gsd/auto-supervisor.js +8 -1
  56. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +2 -2
  57. package/dist/resources/extensions/gsd/auto-unit-closeout.js +33 -5
  58. package/dist/resources/extensions/gsd/auto-verification.js +14 -17
  59. package/dist/resources/extensions/gsd/auto-worktree.js +324 -374
  60. package/dist/resources/extensions/gsd/auto.js +502 -130
  61. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +147 -12
  62. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +54 -37
  63. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -10
  64. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +30 -20
  65. package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +4 -1
  66. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +6 -4
  67. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +5 -3
  68. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +1 -1
  69. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +356 -58
  70. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
  71. package/dist/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.js +4 -0
  72. package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
  73. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +147 -2
  74. package/dist/resources/extensions/gsd/clean-root-preflight.js +65 -9
  75. package/dist/resources/extensions/gsd/commands/dispatcher.js +5 -0
  76. package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +4 -10
  77. package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
  78. package/dist/resources/extensions/gsd/commands-config.js +1 -1
  79. package/dist/resources/extensions/gsd/commands-eval-review.js +2 -2
  80. package/dist/resources/extensions/gsd/commands-extract-learnings.js +17 -12
  81. package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
  82. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  83. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  84. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  85. package/dist/resources/extensions/gsd/context-budget.js +37 -2
  86. package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
  87. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  88. package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
  89. package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
  90. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  91. package/dist/resources/extensions/gsd/db-base-schema.js +353 -0
  92. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  93. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  94. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  95. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  96. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  97. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  98. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  99. package/dist/resources/extensions/gsd/db-migration-steps.js +416 -0
  100. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  101. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  102. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  103. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  104. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  105. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  106. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  107. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  108. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  109. package/dist/resources/extensions/gsd/detection.js +106 -0
  110. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
  111. package/dist/resources/extensions/gsd/escalation.js +2 -0
  112. package/dist/resources/extensions/gsd/git-service.js +75 -6
  113. package/dist/resources/extensions/gsd/graph.js +9 -3
  114. package/dist/resources/extensions/gsd/gsd-db.js +331 -1535
  115. package/dist/resources/extensions/gsd/guided-flow.js +149 -48
  116. package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
  117. package/dist/resources/extensions/gsd/health-widget.js +6 -9
  118. package/dist/resources/extensions/gsd/init-wizard.js +4 -1
  119. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  120. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  121. package/dist/resources/extensions/gsd/memory-store.js +69 -12
  122. package/dist/resources/extensions/gsd/migrate/command.js +40 -1
  123. package/dist/resources/extensions/gsd/migration-auto-check.js +87 -0
  124. package/dist/resources/extensions/gsd/model-router.js +9 -6
  125. package/dist/resources/extensions/gsd/native-git-bridge.js +46 -22
  126. package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
  127. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  128. package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
  129. package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
  130. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
  131. package/dist/resources/extensions/gsd/parallel-orchestrator.js +13 -3
  132. package/dist/resources/extensions/gsd/planning-path-scope.js +26 -0
  133. package/dist/resources/extensions/gsd/post-execution-checks.js +2 -0
  134. package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
  135. package/dist/resources/extensions/gsd/pre-execution-checks.js +24 -0
  136. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  137. package/dist/resources/extensions/gsd/prompt-loader.js +37 -7
  138. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +41 -35
  139. package/dist/resources/extensions/gsd/prompts/complete-slice.md +25 -34
  140. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +70 -98
  141. package/dist/resources/extensions/gsd/prompts/discuss.md +101 -183
  142. package/dist/resources/extensions/gsd/prompts/execute-task.md +42 -67
  143. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  144. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  145. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  146. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  147. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  148. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  149. package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
  150. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +47 -59
  151. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  152. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  153. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
  154. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  155. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  156. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  157. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  158. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  159. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  160. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  161. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  162. package/dist/resources/extensions/gsd/quick.js +34 -2
  163. package/dist/resources/extensions/gsd/recovery-classification.js +94 -0
  164. package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
  165. package/dist/resources/extensions/gsd/slice-cadence.js +45 -2
  166. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +15 -9
  167. package/dist/resources/extensions/gsd/state-reconciliation.js +27 -0
  168. package/dist/resources/extensions/gsd/state.js +4 -0
  169. package/dist/resources/extensions/gsd/tool-contract.js +50 -0
  170. package/dist/resources/extensions/gsd/tools/complete-milestone.js +20 -16
  171. package/dist/resources/extensions/gsd/tools/complete-task.js +3 -1
  172. package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +15 -0
  173. package/dist/resources/extensions/gsd/tools/exec-search-tool.js +5 -0
  174. package/dist/resources/extensions/gsd/tools/exec-tool.js +3 -15
  175. package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -0
  176. package/dist/resources/extensions/gsd/tools/plan-slice.js +9 -0
  177. package/dist/resources/extensions/gsd/tools/plan-task.js +9 -0
  178. package/dist/resources/extensions/gsd/tools/resume-tool.js +5 -0
  179. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +7 -2
  180. package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
  181. package/dist/resources/extensions/gsd/unit-context-composer.js +12 -3
  182. package/dist/resources/extensions/gsd/unit-runtime.js +22 -0
  183. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  184. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  185. package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
  186. package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
  187. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  188. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  189. package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
  190. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  191. package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
  192. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  193. package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
  194. package/dist/resources/extensions/gsd/worktree-lifecycle.js +1364 -0
  195. package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
  196. package/dist/resources/extensions/gsd/worktree-safety.js +119 -0
  197. package/dist/resources/extensions/gsd/worktree-state-projection.js +317 -0
  198. package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
  199. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
  200. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  201. package/dist/web/standalone/.next/BUILD_ID +1 -1
  202. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  203. package/dist/web/standalone/.next/build-manifest.json +4 -4
  204. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  205. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  206. package/dist/web/standalone/.next/required-server-files.json +4 -4
  207. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  208. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  209. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  210. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  211. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  212. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  213. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  214. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  215. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  216. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  217. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  218. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  219. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  220. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  221. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  222. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  223. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  224. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  225. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  226. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  227. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  229. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  231. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  232. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  233. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  234. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  235. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  236. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  237. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  238. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  240. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  241. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  243. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  244. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  246. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  247. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  248. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  249. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  250. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  251. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  252. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  253. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  254. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  256. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  258. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  259. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  260. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  261. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  262. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  263. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  264. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  265. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  266. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  267. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  268. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  269. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  270. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  271. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  272. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  273. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  274. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  275. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  276. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  277. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  278. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  279. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  280. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  281. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  282. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  283. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  284. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  285. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  286. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  287. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  288. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  289. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  290. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  291. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  292. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  293. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  294. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  295. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  296. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  297. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  298. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  299. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  300. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  301. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  302. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  303. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  304. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  305. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  306. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  307. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  308. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  309. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  310. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  311. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  312. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  313. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  314. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  315. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  316. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  317. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  318. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  319. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  320. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  321. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  322. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  323. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  324. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  325. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  326. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  327. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  328. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  329. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  330. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  331. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  332. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  333. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  334. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  335. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  336. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  337. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  338. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  339. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  340. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  341. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  342. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  343. package/dist/web/standalone/.next/server/app/index.html +1 -1
  344. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  345. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  346. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  347. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  348. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  349. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  350. package/dist/web/standalone/.next/server/app/page.js +2 -2
  351. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  352. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  353. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  354. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  355. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  356. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  357. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  358. package/dist/web/standalone/.next/server/middleware.js +2 -2
  359. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  360. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  361. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  362. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  363. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  364. package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +10 -0
  365. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  366. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  367. package/dist/web/standalone/.next/static/chunks/app/page-752f1e2ebdaa3e45.js +1 -0
  368. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  369. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  370. package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-de742b64187e13fe.js} +1 -1
  371. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  372. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  373. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  374. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  375. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  376. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  377. package/dist/web/standalone/package.json +1 -0
  378. package/dist/web/standalone/server.js +1 -1
  379. package/dist/welcome-screen.d.ts +2 -7
  380. package/dist/welcome-screen.js +68 -75
  381. package/package.json +20 -9
  382. package/packages/contracts/dist/index.d.ts +3 -0
  383. package/packages/contracts/dist/index.d.ts.map +1 -0
  384. package/packages/contracts/dist/index.js +5 -0
  385. package/packages/contracts/dist/index.js.map +1 -0
  386. package/packages/contracts/dist/rpc.d.ts +549 -0
  387. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  388. package/packages/contracts/dist/rpc.js +53 -0
  389. package/packages/contracts/dist/rpc.js.map +1 -0
  390. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  391. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  392. package/packages/contracts/dist/rpc.test.js +47 -0
  393. package/packages/contracts/dist/rpc.test.js.map +1 -0
  394. package/packages/contracts/dist/workflow.d.ts +180 -0
  395. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  396. package/packages/contracts/dist/workflow.js +201 -0
  397. package/packages/contracts/dist/workflow.js.map +1 -0
  398. package/packages/contracts/package.json +39 -0
  399. package/packages/contracts/src/index.ts +5 -0
  400. package/packages/contracts/src/rpc.test.ts +72 -0
  401. package/packages/contracts/src/rpc.ts +286 -0
  402. package/packages/contracts/src/workflow.ts +213 -0
  403. package/packages/contracts/tsconfig.json +25 -0
  404. package/packages/daemon/package.json +3 -2
  405. package/packages/daemon/src/event-bridge.test.ts +2 -1
  406. package/packages/daemon/src/event-bridge.ts +1 -1
  407. package/packages/daemon/src/event-formatter.test.ts +1 -2
  408. package/packages/daemon/src/event-formatter.ts +1 -2
  409. package/packages/daemon/src/session-manager.ts +2 -2
  410. package/packages/daemon/src/types.ts +3 -18
  411. package/packages/mcp-server/dist/server.d.ts +13 -0
  412. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  413. package/packages/mcp-server/dist/server.js +77 -0
  414. package/packages/mcp-server/dist/server.js.map +1 -1
  415. package/packages/mcp-server/dist/session-manager.js +1 -1
  416. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  417. package/packages/mcp-server/dist/types.d.ts +3 -11
  418. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  419. package/packages/mcp-server/dist/types.js.map +1 -1
  420. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  421. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  422. package/packages/mcp-server/dist/workflow-tools.js +24 -57
  423. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  424. package/packages/mcp-server/package.json +3 -2
  425. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  426. package/packages/mcp-server/src/server.ts +99 -1
  427. package/packages/mcp-server/src/session-manager.ts +2 -2
  428. package/packages/mcp-server/src/types.ts +7 -18
  429. package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
  430. package/packages/mcp-server/src/workflow-tools.ts +32 -56
  431. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  432. package/packages/native/package.json +1 -1
  433. package/packages/native/tsconfig.tsbuildinfo +1 -1
  434. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  435. package/packages/pi-agent-core/dist/agent-loop.js +4 -1
  436. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  437. package/packages/pi-agent-core/dist/agent.d.ts +9 -2
  438. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  439. package/packages/pi-agent-core/dist/agent.js +43 -11
  440. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  441. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  442. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  443. package/packages/pi-agent-core/dist/index.js +2 -0
  444. package/packages/pi-agent-core/dist/index.js.map +1 -1
  445. package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
  446. package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
  447. package/packages/pi-agent-core/dist/token-audit.js +221 -0
  448. package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
  449. package/packages/pi-agent-core/dist/types.d.ts +31 -0
  450. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  451. package/packages/pi-agent-core/dist/types.js.map +1 -1
  452. package/packages/pi-agent-core/package.json +1 -1
  453. package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
  454. package/packages/pi-agent-core/src/agent-loop.ts +4 -1
  455. package/packages/pi-agent-core/src/agent.ts +52 -11
  456. package/packages/pi-agent-core/src/index.ts +2 -0
  457. package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
  458. package/packages/pi-agent-core/src/token-audit.ts +287 -0
  459. package/packages/pi-agent-core/src/types.ts +26 -10
  460. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  461. package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
  462. package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
  463. package/packages/pi-ai/dist/models/fake-model.js +27 -0
  464. package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
  465. package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
  466. package/packages/pi-ai/dist/models/index.js +8 -0
  467. package/packages/pi-ai/dist/models/index.js.map +1 -1
  468. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +35 -13
  469. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  470. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +21 -11
  471. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -1
  472. package/packages/pi-ai/dist/providers/anthropic.d.ts +7 -0
  473. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  474. package/packages/pi-ai/dist/providers/anthropic.js +9 -7
  475. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  476. package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
  477. package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
  478. package/packages/pi-ai/dist/providers/fake.js +319 -0
  479. package/packages/pi-ai/dist/providers/fake.js.map +1 -0
  480. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +23 -14
  481. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -1
  482. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  483. package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
  484. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  485. package/packages/pi-ai/dist/types.d.ts +2 -0
  486. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  487. package/packages/pi-ai/dist/types.js.map +1 -1
  488. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +48 -21
  489. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
  490. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +22 -21
  491. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -1
  492. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +22 -21
  493. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -1
  494. package/packages/pi-ai/package.json +1 -1
  495. package/packages/pi-ai/src/models/fake-model.ts +30 -0
  496. package/packages/pi-ai/src/models/index.ts +9 -0
  497. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +39 -25
  498. package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -22
  499. package/packages/pi-ai/src/providers/anthropic.ts +22 -9
  500. package/packages/pi-ai/src/providers/fake.ts +376 -0
  501. package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +34 -21
  502. package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
  503. package/packages/pi-ai/src/types.ts +3 -0
  504. package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +56 -22
  505. package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +24 -28
  506. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +24 -28
  507. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  508. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +36 -1
  509. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
  510. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +30 -1
  511. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
  512. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +21 -2
  513. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  514. package/packages/pi-coding-agent/dist/core/agent-session.js +94 -16
  515. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  516. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +78 -0
  517. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  518. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +11 -0
  519. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  520. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +9 -0
  521. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  522. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts +2 -0
  523. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts.map +1 -0
  524. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js +103 -0
  525. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js.map +1 -0
  526. package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
  527. package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
  528. package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
  529. package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
  530. package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
  531. package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
  532. package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
  533. package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
  534. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  535. package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
  536. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  537. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -0
  538. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  539. package/packages/pi-coding-agent/dist/core/extensions/runner.js +20 -7
  540. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  541. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +102 -3
  542. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
  543. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +60 -4
  544. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  545. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  546. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +2 -0
  547. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
  548. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  549. package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
  550. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  551. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
  552. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
  553. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
  554. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
  555. package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
  556. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  557. package/packages/pi-coding-agent/dist/core/sdk.js +81 -4
  558. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  559. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +24 -0
  560. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  561. package/packages/pi-coding-agent/dist/core/settings-manager.js +33 -0
  562. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  563. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
  564. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  565. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  566. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  567. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  568. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
  569. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  570. package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
  571. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  572. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +22 -56
  573. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
  574. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +1 -0
  575. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  576. package/packages/pi-coding-agent/dist/core/tools/bash.js +3 -1
  577. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  578. package/packages/pi-coding-agent/dist/core/tools/edit.d.ts +2 -0
  579. package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  580. package/packages/pi-coding-agent/dist/core/tools/edit.js +12 -1
  581. package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  582. package/packages/pi-coding-agent/dist/core/tools/find.d.ts +2 -0
  583. package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  584. package/packages/pi-coding-agent/dist/core/tools/find.js +14 -6
  585. package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  586. package/packages/pi-coding-agent/dist/core/tools/grep.d.ts +2 -0
  587. package/packages/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  588. package/packages/pi-coding-agent/dist/core/tools/grep.js +12 -3
  589. package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  590. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +2 -0
  591. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  592. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -1
  593. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  594. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -1
  595. package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
  596. package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
  597. package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  598. package/packages/pi-coding-agent/dist/core/tools/ls.d.ts +2 -0
  599. package/packages/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  600. package/packages/pi-coding-agent/dist/core/tools/ls.js +10 -3
  601. package/packages/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  602. package/packages/pi-coding-agent/dist/core/tools/read.d.ts +2 -0
  603. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  604. package/packages/pi-coding-agent/dist/core/tools/read.js +3 -1
  605. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  606. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +7 -62
  607. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -1
  608. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts +2 -0
  609. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts.map +1 -0
  610. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +115 -0
  611. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -0
  612. package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts +19 -0
  613. package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts.map +1 -0
  614. package/packages/pi-coding-agent/dist/core/tools/tool-target.js +20 -0
  615. package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -0
  616. package/packages/pi-coding-agent/dist/core/tools/write.d.ts +4 -0
  617. package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  618. package/packages/pi-coding-agent/dist/core/tools/write.js +9 -1
  619. package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  620. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
  621. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
  622. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
  623. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
  624. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +6 -4
  625. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
  626. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +225 -18
  627. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  628. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts +2 -0
  629. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
  630. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
  631. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
  632. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +25 -0
  633. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
  634. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +113 -0
  635. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
  636. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
  637. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
  638. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +58 -0
  639. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
  640. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  641. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +13 -13
  642. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  643. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
  644. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  645. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
  646. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
  647. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  648. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +10 -9
  649. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  650. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +2 -2
  651. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
  652. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
  653. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
  654. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  655. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
  656. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  657. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  658. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  659. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
  660. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  661. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +51 -6
  662. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  663. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +21 -0
  664. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  665. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +302 -56
  666. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  667. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
  668. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
  669. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
  670. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
  671. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
  672. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
  673. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
  674. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
  675. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
  676. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  677. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
  678. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  679. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  680. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +86 -2
  681. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  682. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +111 -1
  683. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  684. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
  685. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  686. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
  687. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  688. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  689. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +14 -1
  690. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  691. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +77 -11
  692. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  693. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  694. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
  695. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  696. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
  697. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
  698. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
  699. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
  700. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
  701. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
  702. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
  703. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
  704. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  705. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  706. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
  707. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  708. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  709. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  710. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +123 -2
  711. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  712. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  713. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +39 -29
  714. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  715. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
  716. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
  717. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
  718. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
  719. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
  720. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
  721. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +51 -0
  722. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
  723. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
  724. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  725. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  726. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  727. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  728. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  729. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts +2 -0
  730. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts.map +1 -0
  731. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js +28 -0
  732. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
  733. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
  734. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
  735. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
  736. package/packages/pi-coding-agent/package.json +2 -1
  737. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +40 -1
  738. package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +40 -1
  739. package/packages/pi-coding-agent/src/core/agent-session.ts +102 -16
  740. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +91 -0
  741. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +18 -0
  742. package/packages/pi-coding-agent/src/core/compaction-threshold.test.ts +121 -0
  743. package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
  744. package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
  745. package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
  746. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +113 -3
  747. package/packages/pi-coding-agent/src/core/extensions/runner.ts +24 -6
  748. package/packages/pi-coding-agent/src/core/extensions/types.ts +63 -2
  749. package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
  750. package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
  751. package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
  752. package/packages/pi-coding-agent/src/core/sdk.ts +92 -4
  753. package/packages/pi-coding-agent/src/core/settings-manager.ts +51 -1
  754. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
  755. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  756. package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
  757. package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +22 -66
  758. package/packages/pi-coding-agent/src/core/tools/bash.ts +4 -1
  759. package/packages/pi-coding-agent/src/core/tools/edit.ts +13 -1
  760. package/packages/pi-coding-agent/src/core/tools/find.ts +15 -6
  761. package/packages/pi-coding-agent/src/core/tools/grep.ts +13 -3
  762. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +4 -1
  763. package/packages/pi-coding-agent/src/core/tools/index.ts +8 -0
  764. package/packages/pi-coding-agent/src/core/tools/ls.ts +11 -3
  765. package/packages/pi-coding-agent/src/core/tools/read.ts +4 -1
  766. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +11 -72
  767. package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +127 -0
  768. package/packages/pi-coding-agent/src/core/tools/tool-target.ts +48 -0
  769. package/packages/pi-coding-agent/src/core/tools/write.ts +14 -2
  770. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
  771. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +7 -5
  772. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +325 -20
  773. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
  774. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +66 -0
  775. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +161 -0
  776. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -13
  777. package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
  778. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +10 -9
  779. package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
  780. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
  781. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  782. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +71 -9
  783. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +327 -68
  784. package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
  785. package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
  786. package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
  787. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +118 -1
  788. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +108 -3
  789. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
  790. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
  791. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +101 -11
  792. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
  793. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
  794. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +23 -0
  795. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
  796. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +138 -3
  797. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +39 -29
  798. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +68 -0
  799. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
  800. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
  801. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  802. package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +31 -0
  803. package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +3 -2
  804. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  805. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +14 -1
  806. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
  807. package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
  808. package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
  809. package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
  810. package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
  811. package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
  812. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  813. package/packages/pi-tui/dist/index.d.ts +1 -0
  814. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  815. package/packages/pi-tui/dist/index.js +2 -0
  816. package/packages/pi-tui/dist/index.js.map +1 -1
  817. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
  818. package/packages/pi-tui/dist/overlay-layout.js +9 -6
  819. package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
  820. package/packages/pi-tui/dist/style.d.ts +41 -0
  821. package/packages/pi-tui/dist/style.d.ts.map +1 -0
  822. package/packages/pi-tui/dist/style.js +158 -0
  823. package/packages/pi-tui/dist/style.js.map +1 -0
  824. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  825. package/packages/pi-tui/dist/tui.js +19 -8
  826. package/packages/pi-tui/dist/tui.js.map +1 -1
  827. package/packages/pi-tui/package.json +1 -1
  828. package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -1
  829. package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
  830. package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
  831. package/packages/pi-tui/src/index.ts +9 -0
  832. package/packages/pi-tui/src/overlay-layout.ts +10 -7
  833. package/packages/pi-tui/src/style.ts +225 -0
  834. package/packages/pi-tui/src/tui.ts +21 -8
  835. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  836. package/packages/rpc-client/README.md +10 -3
  837. package/packages/rpc-client/dist/index.d.ts +1 -1
  838. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  839. package/packages/rpc-client/dist/index.js.map +1 -1
  840. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  841. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  842. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  843. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  844. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  845. package/packages/rpc-client/dist/rpc-types.js +3 -11
  846. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  847. package/packages/rpc-client/package.json +4 -1
  848. package/packages/rpc-client/src/index.ts +1 -1
  849. package/packages/rpc-client/src/rpc-client.ts +3 -6
  850. package/packages/rpc-client/src/rpc-types.ts +3 -398
  851. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  852. package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
  853. package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
  854. package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
  855. package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
  856. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  857. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  858. package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
  859. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  860. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  861. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  862. package/pkg/dist/modes/interactive/theme/theme.js +123 -2
  863. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  864. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  865. package/pkg/dist/modes/interactive/theme/themes.js +39 -29
  866. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  867. package/pkg/package.json +1 -1
  868. package/src/resources/GSD-WORKFLOW.md +2 -2
  869. package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
  870. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +42 -3
  871. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +67 -0
  872. package/src/resources/extensions/github-sync/sync.ts +8 -1
  873. package/src/resources/extensions/github-sync/templates.ts +93 -88
  874. package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
  875. package/src/resources/extensions/github-sync/tests/sync-source.test.ts +6 -18
  876. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  877. package/src/resources/extensions/gsd/auto/contracts.ts +19 -2
  878. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  879. package/src/resources/extensions/gsd/auto/loop-deps.ts +20 -16
  880. package/src/resources/extensions/gsd/auto/loop.ts +645 -603
  881. package/src/resources/extensions/gsd/auto/orchestrator.ts +52 -4
  882. package/src/resources/extensions/gsd/auto/phases.ts +546 -222
  883. package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
  884. package/src/resources/extensions/gsd/auto/run-unit.ts +119 -46
  885. package/src/resources/extensions/gsd/auto/session.ts +19 -1
  886. package/src/resources/extensions/gsd/auto/types.ts +3 -0
  887. package/src/resources/extensions/gsd/auto/unit-runner-events.ts +15 -0
  888. package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
  889. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  890. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  891. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  892. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  893. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  894. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  895. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +159 -0
  896. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  897. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  898. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  899. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  900. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  901. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  902. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  903. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  904. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  905. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  906. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  907. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +51 -0
  908. package/src/resources/extensions/gsd/auto-dashboard.ts +304 -184
  909. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
  910. package/src/resources/extensions/gsd/auto-dispatch.ts +48 -1
  911. package/src/resources/extensions/gsd/auto-post-unit.ts +141 -91
  912. package/src/resources/extensions/gsd/auto-prompts.ts +398 -19
  913. package/src/resources/extensions/gsd/auto-recovery.ts +207 -7
  914. package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
  915. package/src/resources/extensions/gsd/auto-start.ts +328 -27
  916. package/src/resources/extensions/gsd/auto-supervisor.ts +7 -0
  917. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +2 -2
  918. package/src/resources/extensions/gsd/auto-unit-closeout.ts +51 -0
  919. package/src/resources/extensions/gsd/auto-verification.ts +17 -7
  920. package/src/resources/extensions/gsd/auto-worktree.ts +352 -396
  921. package/src/resources/extensions/gsd/auto.ts +590 -127
  922. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +181 -12
  923. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +56 -37
  924. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +36 -10
  925. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +32 -19
  926. package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +5 -1
  927. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +7 -4
  928. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +6 -3
  929. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +1 -1
  930. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +411 -58
  931. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
  932. package/src/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.ts +4 -0
  933. package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
  934. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +153 -2
  935. package/src/resources/extensions/gsd/clean-root-preflight.ts +72 -9
  936. package/src/resources/extensions/gsd/commands/dispatcher.ts +6 -0
  937. package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +4 -10
  938. package/src/resources/extensions/gsd/commands/handlers/ops.ts +4 -2
  939. package/src/resources/extensions/gsd/commands-config.ts +1 -1
  940. package/src/resources/extensions/gsd/commands-eval-review.ts +2 -2
  941. package/src/resources/extensions/gsd/commands-extract-learnings.ts +17 -12
  942. package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
  943. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  944. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  945. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  946. package/src/resources/extensions/gsd/context-budget.ts +44 -2
  947. package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
  948. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  949. package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
  950. package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
  951. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  952. package/src/resources/extensions/gsd/db-base-schema.ts +385 -0
  953. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  954. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  955. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  956. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  957. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  958. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  959. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  960. package/src/resources/extensions/gsd/db-migration-steps.ts +459 -0
  961. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  962. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  963. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  964. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  965. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  966. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  967. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  968. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  969. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  970. package/src/resources/extensions/gsd/detection.ts +128 -0
  971. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
  972. package/src/resources/extensions/gsd/escalation.ts +3 -1
  973. package/src/resources/extensions/gsd/git-service.ts +89 -10
  974. package/src/resources/extensions/gsd/graph.ts +12 -5
  975. package/src/resources/extensions/gsd/gsd-db.ts +399 -1677
  976. package/src/resources/extensions/gsd/guided-flow.ts +175 -55
  977. package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
  978. package/src/resources/extensions/gsd/health-widget.ts +8 -9
  979. package/src/resources/extensions/gsd/init-wizard.ts +5 -1
  980. package/src/resources/extensions/gsd/journal.ts +2 -0
  981. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  982. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  983. package/src/resources/extensions/gsd/memory-store.ts +77 -12
  984. package/src/resources/extensions/gsd/migrate/command.ts +47 -1
  985. package/src/resources/extensions/gsd/migration-auto-check.ts +129 -0
  986. package/src/resources/extensions/gsd/model-router.ts +10 -6
  987. package/src/resources/extensions/gsd/native-git-bridge.ts +53 -19
  988. package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
  989. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  990. package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
  991. package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
  992. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
  993. package/src/resources/extensions/gsd/parallel-orchestrator.ts +13 -3
  994. package/src/resources/extensions/gsd/planning-path-scope.ts +35 -0
  995. package/src/resources/extensions/gsd/post-execution-checks.ts +4 -1
  996. package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
  997. package/src/resources/extensions/gsd/pre-execution-checks.ts +27 -1
  998. package/src/resources/extensions/gsd/preferences-types.ts +1 -1
  999. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  1000. package/src/resources/extensions/gsd/prompt-loader.ts +36 -7
  1001. package/src/resources/extensions/gsd/prompts/complete-milestone.md +41 -35
  1002. package/src/resources/extensions/gsd/prompts/complete-slice.md +25 -34
  1003. package/src/resources/extensions/gsd/prompts/discuss-headless.md +70 -98
  1004. package/src/resources/extensions/gsd/prompts/discuss.md +101 -183
  1005. package/src/resources/extensions/gsd/prompts/execute-task.md +42 -67
  1006. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  1007. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  1008. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  1009. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  1010. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  1011. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  1012. package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
  1013. package/src/resources/extensions/gsd/prompts/plan-milestone.md +47 -59
  1014. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  1015. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  1016. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
  1017. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  1018. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  1019. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  1020. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  1021. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  1022. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  1023. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  1024. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  1025. package/src/resources/extensions/gsd/quick.ts +37 -2
  1026. package/src/resources/extensions/gsd/recovery-classification.ts +122 -0
  1027. package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
  1028. package/src/resources/extensions/gsd/slice-cadence.ts +49 -2
  1029. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +23 -9
  1030. package/src/resources/extensions/gsd/state-reconciliation.ts +57 -0
  1031. package/src/resources/extensions/gsd/state.ts +6 -3
  1032. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +59 -89
  1033. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +47 -172
  1034. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +0 -35
  1035. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +7 -1
  1036. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +232 -9
  1037. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1269 -242
  1038. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +80 -59
  1039. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +119 -2
  1040. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +3 -47
  1041. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +363 -18
  1042. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +175 -11
  1043. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +54 -76
  1044. package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +67 -26
  1045. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +184 -2
  1046. package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +32 -30
  1047. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +16 -1
  1048. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +32 -128
  1049. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +20 -54
  1050. package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +20 -30
  1051. package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +17 -29
  1052. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +160 -0
  1053. package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +21 -39
  1054. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +15 -24
  1055. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +44 -29
  1056. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
  1057. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +39 -51
  1058. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +159 -213
  1059. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +15 -32
  1060. package/src/resources/extensions/gsd/tests/browser-teardown.test.ts +0 -41
  1061. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
  1062. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +34 -27
  1063. package/src/resources/extensions/gsd/tests/cmux.test.ts +51 -53
  1064. package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +39 -61
  1065. package/src/resources/extensions/gsd/tests/commands-config.test.ts +26 -19
  1066. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  1067. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +9 -0
  1068. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  1069. package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +14 -1
  1070. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
  1071. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  1072. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +159 -5
  1073. package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
  1074. package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +29 -33
  1075. package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +45 -108
  1076. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  1077. package/src/resources/extensions/gsd/tests/context-budget.test.ts +10 -1
  1078. package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
  1079. package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +90 -31
  1080. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
  1081. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +190 -11
  1082. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  1083. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  1084. package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +138 -0
  1085. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +4 -68
  1086. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  1087. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  1088. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  1089. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  1090. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  1091. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  1092. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  1093. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  1094. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  1095. package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
  1096. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  1097. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  1098. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  1099. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  1100. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  1101. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  1102. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  1103. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  1104. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  1105. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +24 -11
  1106. package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +14 -65
  1107. package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
  1108. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  1109. package/src/resources/extensions/gsd/tests/discuss-tool-scoping.test.ts +44 -37
  1110. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +100 -38
  1111. package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +25 -15
  1112. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
  1113. package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +35 -17
  1114. package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +16 -21
  1115. package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +15 -82
  1116. package/src/resources/extensions/gsd/tests/exec-history.test.ts +15 -0
  1117. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +65 -0
  1118. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +62 -0
  1119. package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
  1120. package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +151 -0
  1121. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
  1122. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
  1123. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
  1124. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
  1125. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -20
  1126. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  1127. package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +18 -26
  1128. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  1129. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -0
  1130. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  1131. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  1132. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  1133. package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
  1134. package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
  1135. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
  1136. package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
  1137. package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +9 -12
  1138. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +77 -0
  1139. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +4 -2
  1140. package/src/resources/extensions/gsd/tests/integration/git-locale.test.ts +31 -20
  1141. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +92 -0
  1142. package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +0 -47
  1143. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
  1144. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  1145. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +60 -202
  1146. package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +13 -56
  1147. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +248 -11
  1148. package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
  1149. package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
  1150. package/src/resources/extensions/gsd/tests/lazy-pi-tui-import.test.ts +44 -6
  1151. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  1152. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  1153. package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
  1154. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +53 -43
  1155. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +77 -12
  1156. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
  1157. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
  1158. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +267 -0
  1159. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +88 -98
  1160. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  1161. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +70 -278
  1162. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
  1163. package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +37 -30
  1164. package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +32 -28
  1165. package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
  1166. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  1167. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  1168. package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
  1169. package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -182
  1170. package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +144 -0
  1171. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
  1172. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
  1173. package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
  1174. package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +24 -37
  1175. package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +9 -24
  1176. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +95 -75
  1177. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  1178. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  1179. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +50 -0
  1180. package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
  1181. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +2 -2
  1182. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +36 -22
  1183. package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
  1184. package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
  1185. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  1186. package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +36 -30
  1187. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
  1188. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +74 -4
  1189. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +20 -22
  1190. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +130 -32
  1191. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  1192. package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +18 -36
  1193. package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +35 -73
  1194. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +76 -138
  1195. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -1
  1196. package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +230 -0
  1197. package/src/resources/extensions/gsd/tests/prompt-path-audit.test.ts +40 -0
  1198. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +70 -91
  1199. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +59 -161
  1200. package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +33 -29
  1201. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +22 -196
  1202. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  1203. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +23 -93
  1204. package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
  1205. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +50 -79
  1206. package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +27 -13
  1207. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +151 -251
  1208. package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +41 -29
  1209. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +58 -69
  1210. package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +36 -164
  1211. package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -0
  1212. package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +57 -41
  1213. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +91 -0
  1214. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +29 -0
  1215. package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +156 -0
  1216. package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +96 -0
  1217. package/src/resources/extensions/gsd/tests/session-model-override.test.ts +14 -9
  1218. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +77 -0
  1219. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +222 -0
  1220. package/src/resources/extensions/gsd/tests/show-config-command.test.ts +44 -42
  1221. package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
  1222. package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +56 -24
  1223. package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +51 -11
  1224. package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +23 -0
  1225. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +66 -50
  1226. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +68 -107
  1227. package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +115 -42
  1228. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +21 -59
  1229. package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +25 -116
  1230. package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +21 -57
  1231. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +29 -76
  1232. package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +33 -24
  1233. package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +39 -30
  1234. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
  1235. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +101 -2
  1236. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +65 -56
  1237. package/src/resources/extensions/gsd/tests/status-db-open.test.ts +35 -40
  1238. package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +48 -46
  1239. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +14 -102
  1240. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +78 -232
  1241. package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +32 -35
  1242. package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +112 -0
  1243. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +7 -9
  1244. package/src/resources/extensions/gsd/tests/token-profile.test.ts +84 -309
  1245. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +295 -0
  1246. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  1247. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +134 -341
  1248. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +330 -0
  1249. package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
  1250. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +140 -8
  1251. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +8 -25
  1252. package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +80 -1
  1253. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +37 -0
  1254. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -99
  1255. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  1256. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +43 -36
  1257. package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
  1258. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -444
  1259. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  1260. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  1261. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  1262. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  1263. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  1264. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  1265. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +300 -0
  1266. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  1267. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  1268. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  1269. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  1270. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +44 -189
  1271. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  1272. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -57
  1273. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  1274. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  1275. package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
  1276. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  1277. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  1278. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  1279. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  1280. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +35 -0
  1281. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  1282. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  1283. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +154 -0
  1284. package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
  1285. package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +21 -44
  1286. package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +27 -26
  1287. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +38 -6
  1288. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +197 -78
  1289. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +888 -0
  1290. package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -18
  1291. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +7 -0
  1292. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +9 -2
  1293. package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +22 -19
  1294. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +66 -0
  1295. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +327 -0
  1296. package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +120 -0
  1297. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
  1298. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
  1299. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
  1300. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
  1301. package/src/resources/extensions/gsd/tests/write-gate.test.ts +40 -1
  1302. package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -13
  1303. package/src/resources/extensions/gsd/tool-contract.ts +82 -0
  1304. package/src/resources/extensions/gsd/tools/complete-milestone.ts +29 -24
  1305. package/src/resources/extensions/gsd/tools/complete-task.ts +5 -2
  1306. package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +25 -0
  1307. package/src/resources/extensions/gsd/tools/exec-search-tool.ts +7 -7
  1308. package/src/resources/extensions/gsd/tools/exec-tool.ts +4 -23
  1309. package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -0
  1310. package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -0
  1311. package/src/resources/extensions/gsd/tools/plan-task.ts +10 -0
  1312. package/src/resources/extensions/gsd/tools/resume-tool.ts +7 -7
  1313. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +7 -2
  1314. package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
  1315. package/src/resources/extensions/gsd/unit-context-composer.ts +19 -4
  1316. package/src/resources/extensions/gsd/unit-runtime.ts +25 -0
  1317. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  1318. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  1319. package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
  1320. package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
  1321. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  1322. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  1323. package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
  1324. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  1325. package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
  1326. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  1327. package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
  1328. package/src/resources/extensions/gsd/worktree-lifecycle.ts +1882 -0
  1329. package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
  1330. package/src/resources/extensions/gsd/worktree-safety.ts +282 -0
  1331. package/src/resources/extensions/gsd/worktree-state-projection.ts +404 -0
  1332. package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
  1333. package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +86 -40
  1334. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
  1335. package/dist/resources/extensions/gsd/worktree-resolver.js +0 -733
  1336. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  1337. package/dist/web/standalone/.next/static/chunks/8336.6f6f30e410419aff.js +0 -10
  1338. package/dist/web/standalone/.next/static/chunks/app/page-ff639266d978f2a0.js +0 -1
  1339. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  1340. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  1341. package/src/resources/extensions/gsd/tests/sync-layer-scope.test.ts +0 -434
  1342. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1247
  1343. package/src/resources/extensions/gsd/worktree-resolver.ts +0 -909
  1344. /package/dist/web/standalone/.next/static/{V-3Ehy4B24f9FCGiLPWIM → F5x9E6H9k_52fjqyql93y}/_buildManifest.js +0 -0
  1345. /package/dist/web/standalone/.next/static/{V-3Ehy4B24f9FCGiLPWIM → F5x9E6H9k_52fjqyql93y}/_ssgManifest.js +0 -0
@@ -1,3 +1,5 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Auto-mode orchestration, session lifecycle, and stop handling.
1
3
  /**
2
4
  * GSD Auto Mode — Fresh Session Per Unit
3
5
  *
@@ -14,6 +16,7 @@ import type {
14
16
  ExtensionAPI,
15
17
  ExtensionContext,
16
18
  ExtensionCommandContext,
19
+ SessionMessageEntry,
17
20
  } from "@gsd/pi-coding-agent";
18
21
 
19
22
  import { deriveState } from "./state.js";
@@ -30,7 +33,7 @@ import {
30
33
  setRuntimeKv,
31
34
  deleteRuntimeKv,
32
35
  } from "./db/runtime-kv.js";
33
- import { getManifestStatus } from "./files.js";
36
+ import { extractSection, getManifestStatus, splitFrontmatter, parseFrontmatterMap } from "./files.js";
34
37
  export { inlinePriorMilestoneSummary } from "./files.js";
35
38
  import { collectSecretsFromManifest } from "../get-secrets-from-user.js";
36
39
  import {
@@ -59,6 +62,7 @@ import {
59
62
  isLockProcessAlive,
60
63
  formatCrashInfo,
61
64
  emitCrashRecoveredUnitEnd,
65
+ emitOpenUnitEndForUnit,
62
66
  } from "./crash-recovery.js";
63
67
  import {
64
68
  acquireSessionLock,
@@ -150,6 +154,7 @@ import {
150
154
  resolveProjectRoot,
151
155
  } from "./worktree.js";
152
156
  import { GitServiceImpl } from "./git-service.js";
157
+ import { nativeCheckoutBranch } from "./native-git-bridge.js";
153
158
  import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
154
159
  import {
155
160
  createAutoWorktree,
@@ -162,8 +167,6 @@ import {
162
167
  mergeMilestoneToMain,
163
168
  autoWorktreeBranch,
164
169
  syncWorktreeStateBack,
165
- syncProjectRootToWorktree,
166
- syncStateToProjectRoot,
167
170
  readResourceVersion,
168
171
  checkResourcesStale,
169
172
  escapeStaleWorktree,
@@ -186,6 +189,8 @@ import { isClosedStatus } from "./status-guards.js";
186
189
  import {
187
190
  type AutoDashboardData,
188
191
  updateProgressWidget as _updateProgressWidget,
192
+ setCompletionProgressWidget,
193
+ setAutoOutcomeWidget,
189
194
  updateSliceProgressCache,
190
195
  clearSliceProgressCache,
191
196
  describeNextUnit as _describeNextUnit,
@@ -199,7 +204,9 @@ import {
199
204
  deregisterSigtermHandler as _deregisterSigtermHandler,
200
205
  detectWorkingTreeActivity,
201
206
  } from "./auto-supervisor.js";
202
- import { isDbAvailable, getMilestone } from "./gsd-db.js";
207
+ import { isDbAvailable, getMilestone, getMilestoneSlices } from "./gsd-db.js";
208
+ import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
209
+ import { writeUnitRuntimeRecord } from "./unit-runtime.js";
203
210
  import { countPendingCaptures } from "./captures.js";
204
211
  import { CMUX_CHANNELS, type CmuxLogLevel } from "../shared/cmux-events.js";
205
212
  import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
@@ -227,21 +234,41 @@ import { bootstrapAutoSession, openProjectDbIfPresent, type BootstrapDeps } from
227
234
  import { initHealthWidget } from "./health-widget.js";
228
235
  import { runLegacyAutoLoop, runUokKernelLoop } from "./auto/loop.js";
229
236
  import { resolveAgentEnd, resolveAgentEndCancelled, _resetPendingResolve, isSessionSwitchInFlight } from "./auto/resolve.js";
230
- import type { LoopDeps } from "./auto/loop-deps.js";
237
+ import type { LoopDeps, StopAutoOptions } from "./auto/loop-deps.js";
231
238
  import type { ErrorContext } from "./auto/types.js";
232
239
  import { runAutoLoopWithUok } from "./uok/kernel.js";
233
240
  import { resolveUokFlags } from "./uok/flags.js";
234
241
  import { validateDirectory } from "./validate-directory.js";
235
242
  import { createAutoOrchestrator } from "./auto/orchestrator.js";
236
243
  import type { AutoOrchestrationModule, AutoOrchestratorDeps } from "./auto/contracts.js";
244
+ import { reconcileBeforeDispatch } from "./state-reconciliation.js";
245
+ import { compileUnitToolContract } from "./tool-contract.js";
246
+ import { createWorktreeSafetyModule } from "./worktree-safety.js";
247
+ import { resolveManifest } from "./unit-context-manifest.js";
248
+ import { classifyFailure } from "./recovery-classification.js";
237
249
  // Slice-level parallelism (#2340)
238
250
  import { getEligibleSlices } from "./slice-parallel-eligibility.js";
239
251
  import { startSliceParallel } from "./slice-parallel-orchestrator.js";
240
252
  import {
241
- WorktreeResolver,
242
- type WorktreeResolverDeps,
243
- } from "./worktree-resolver.js";
253
+ WorktreeLifecycle,
254
+ type WorktreeLifecycleDeps,
255
+ } from "./worktree-lifecycle.js";
256
+ import { WorktreeStateProjection } from "./worktree-state-projection.js";
244
257
  import { reorderForCaching } from "./prompt-ordering.js";
258
+ import { initTokenCounter } from "./token-counter.js";
259
+
260
+ // Warm the tiktoken encoder at extension startup so context-budget computations
261
+ // can use accurate token counts via countTokensSync without paying the load
262
+ // cost mid-prompt-build. Fire-and-forget — failure falls back to the
263
+ // provider-aware char-ratio estimator already used by getCharsPerToken().
264
+ // Catch rejections explicitly: an unhandled rejection at module-import time
265
+ // can destabilize startup before the engine logger is configured.
266
+ void initTokenCounter().catch((err) => {
267
+ logWarning(
268
+ "engine",
269
+ `token counter warm-up failed: ${err instanceof Error ? err.message : String(err)}`,
270
+ );
271
+ });
245
272
 
246
273
  // ─── Session State ─────────────────────────────────────────────────────────
247
274
 
@@ -293,11 +320,15 @@ const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
293
320
  * the DB is unavailable (e.g. fresh project before init) we skip registration
294
321
  * silently rather than blocking session start.
295
322
  */
296
- function registerAutoWorkerForSession(session: AutoSession): void {
323
+ function registerAutoWorkerForSession(
324
+ session: AutoSession,
325
+ projectRootOverride?: string,
326
+ ): void {
297
327
  if (session.workerId) return; // already registered (e.g. resume re-runs)
298
328
  try {
299
329
  const projectRootRealpath = normalizeRealPath(
300
- session.scope?.workspace.projectRoot
330
+ projectRootOverride
331
+ ?? session.scope?.workspace.projectRoot
301
332
  ?? (session.originalBasePath || session.basePath),
302
333
  );
303
334
  session.workerId = registerAutoWorker({ projectRootRealpath });
@@ -332,6 +363,14 @@ function restoreProjectRootEnv(): void {
332
363
  s.projectRootEnvCaptured = false;
333
364
  }
334
365
 
366
+ export function _captureProjectRootEnvForTest(projectRoot: string): void {
367
+ captureProjectRootEnv(projectRoot);
368
+ }
369
+
370
+ export function _restoreProjectRootEnvForTest(): void {
371
+ restoreProjectRootEnv();
372
+ }
373
+
335
374
  function captureMilestoneLockEnv(milestoneId: string | null): void {
336
375
  if (!s.milestoneLockEnvCaptured) {
337
376
  s.hadMilestoneLockEnv = Object.prototype.hasOwnProperty.call(process.env, "GSD_MILESTONE_LOCK");
@@ -420,6 +459,22 @@ export function _synthesizePausedSessionRecoveryForTest(
420
459
  return synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile);
421
460
  }
422
461
 
462
+ // `_resolvePausedResumeBasePathForTest` was retired in ADR-016 phase 2 / B3
463
+ // (#5621). Production callers go through
464
+ // `WorktreeLifecycle.resumeFromPausedSession`; the pure helper for tests is
465
+ // `resolvePausedResumeBasePath` exported from `worktree-lifecycle.ts`.
466
+
467
+ const DETACHED_AUTO_KEEPALIVE_INTERVAL_MS = 30_000;
468
+
469
+ function withDetachedAutoKeepalive<T>(run: Promise<T>): Promise<T> {
470
+ const keepAlive = setInterval(() => {}, DETACHED_AUTO_KEEPALIVE_INTERVAL_MS);
471
+ return run.finally(() => {
472
+ clearInterval(keepAlive);
473
+ });
474
+ }
475
+
476
+ export const _withDetachedAutoKeepaliveForTest = withDetachedAutoKeepalive;
477
+
423
478
  export function startAutoDetached(
424
479
  ctx: ExtensionCommandContext,
425
480
  pi: ExtensionAPI,
@@ -431,7 +486,7 @@ export function startAutoDetached(
431
486
  milestoneLock?: string | null;
432
487
  },
433
488
  ): void {
434
- void startAuto(ctx, pi, base, verboseMode, options).catch((err) => {
489
+ void withDetachedAutoKeepalive(startAuto(ctx, pi, base, verboseMode, options)).catch((err) => {
435
490
  const message = getErrorMessage(err);
436
491
  ctx.ui.notify(`Auto-start failed: ${message}`, "error");
437
492
  logWarning("engine", `auto start error: ${message}`, { file: "auto.ts" });
@@ -490,9 +545,54 @@ export {
490
545
  getBudgetEnforcementAction,
491
546
  } from "./auto-budget.js";
492
547
 
548
+ function closeOutSignalInterruptedUnit(currentBasePath: string): void {
549
+ const currentUnit = s.currentUnit;
550
+ if (!currentUnit) return;
551
+
552
+ const reason = "Auto-mode process received a termination signal";
553
+ const errorContext: ErrorContext = {
554
+ message: reason,
555
+ category: "aborted",
556
+ isTransient: false,
557
+ };
558
+ const basePath = s.basePath || currentBasePath;
559
+
560
+ try {
561
+ emitOpenUnitEndForUnit(basePath, currentUnit.type, currentUnit.id, "cancelled", errorContext);
562
+ } catch (err) {
563
+ logWarning("engine", `signal unit-end cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
564
+ }
565
+
566
+ try {
567
+ writeUnitRuntimeRecord(basePath, currentUnit.type, currentUnit.id, currentUnit.startedAt, {
568
+ phase: "crashed",
569
+ lastProgressAt: Date.now(),
570
+ lastProgressKind: "signal",
571
+ });
572
+ } catch (err) {
573
+ logWarning("engine", `signal runtime cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
574
+ }
575
+
576
+ try {
577
+ if (s.workerId) markLatestActiveForWorkerCanceled(s.workerId, "signal-exit");
578
+ } catch (err) {
579
+ logWarning("engine", `signal dispatch cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
580
+ }
581
+
582
+ try {
583
+ resolveAgentEndCancelled(errorContext);
584
+ } catch (err) {
585
+ logWarning("engine", `signal resolve cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
586
+ }
587
+ }
588
+
493
589
  /** Wrapper: register SIGTERM handler and store reference. */
494
590
  function registerSigtermHandler(currentBasePath: string): void {
495
- s.sigtermHandler = _registerSigtermHandler(currentBasePath, s.sigtermHandler);
591
+ s.sigtermHandler = _registerSigtermHandler(
592
+ currentBasePath,
593
+ s.sigtermHandler,
594
+ () => closeOutSignalInterruptedUnit(currentBasePath),
595
+ );
496
596
  }
497
597
 
498
598
  /** Wrapper: deregister SIGTERM handler and clear reference. */
@@ -566,6 +666,10 @@ export function isAutoActive(): boolean {
566
666
  return s.active;
567
667
  }
568
668
 
669
+ export function isAutoCompletionStopInProgress(): boolean {
670
+ return s.completionStopInProgress;
671
+ }
672
+
569
673
  /** Test-only seam for validating auto-mode guards (#4704). Do not use in production code. */
570
674
  export function _setAutoActiveForTest(active: boolean): void {
571
675
  s.active = active;
@@ -595,6 +699,30 @@ export function isAutoPaused(): boolean {
595
699
  return s.paused;
596
700
  }
597
701
 
702
+ export interface ResumeResourceRefreshDeps {
703
+ env?: NodeJS.ProcessEnv;
704
+ importModule?: (specifier: string) => Promise<any>;
705
+ openProjectDb?: (basePath: string) => Promise<void>;
706
+ }
707
+
708
+ export async function refreshResumeResourcesAndDb(
709
+ basePath: string,
710
+ deps: ResumeResourceRefreshDeps = {},
711
+ ): Promise<void> {
712
+ const env = deps.env ?? process.env;
713
+ const importModule = deps.importModule ?? ((specifier: string) => import(specifier));
714
+ const agentDir = env.GSD_CODING_AGENT_DIR || join(gsdHome(), "agent");
715
+ const pkgRoot = env.GSD_PKG_ROOT;
716
+ const resourceLoaderPath = pkgRoot
717
+ ? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
718
+ : new URL("../../../resource-loader.js", import.meta.url).href;
719
+ const { initResources } = await importModule(resourceLoaderPath);
720
+ initResources(agentDir);
721
+ const { primeCache } = await importModule("./prompt-loader.js");
722
+ primeCache();
723
+ await (deps.openProjectDb ?? openProjectDbIfPresent)(basePath);
724
+ }
725
+
598
726
  export function setActiveEngineId(id: string | null): void {
599
727
  s.activeEngineId = id;
600
728
  }
@@ -802,6 +930,31 @@ function buildSnapshotOpts(
802
930
  };
803
931
  }
804
932
 
933
+ function currentUnitLabel(): string | null {
934
+ if (!s.currentUnit) return null;
935
+ return `${unitVerb(s.currentUnit.type)} ${s.currentUnit.id}`;
936
+ }
937
+
938
+ function setLifecycleOutcome(
939
+ ctx: ExtensionContext | undefined,
940
+ input: {
941
+ status: "paused" | "stopped" | "blocked" | "failed" | "complete" | "waiting" | "step";
942
+ title: string;
943
+ detail?: string | null;
944
+ nextAction: string;
945
+ commands?: string[];
946
+ unitLabel?: string | null;
947
+ },
948
+ ): void {
949
+ if (!ctx?.hasUI) return;
950
+ const { unitLabel: unitLabelOverride, ...rest } = input;
951
+ setAutoOutcomeWidget(ctx, {
952
+ ...rest,
953
+ unitLabel: unitLabelOverride !== undefined ? unitLabelOverride : currentUnitLabel(),
954
+ startedAt: s.autoStartTime,
955
+ });
956
+ }
957
+
805
958
  function handleLostSessionLock(
806
959
  ctx?: ExtensionContext,
807
960
  lockStatus?: SessionLockStatus,
@@ -849,7 +1002,23 @@ function handleLostSessionLock(
849
1002
  * the stale unit state, progress widget, status badge, and restores CWD so
850
1003
  * the dashboard does not show an orphaned timer and the shell is usable.
851
1004
  */
852
- function cleanupAfterLoopExit(ctx: ExtensionContext): void {
1005
+ export async function rerootCommandSession(
1006
+ cmdCtx: Pick<ExtensionCommandContext, "newSession"> | null | undefined,
1007
+ workspaceRoot: string,
1008
+ ): Promise<{ status: "skipped" | "ok" | "cancelled" | "failed"; error?: string }> {
1009
+ if (!cmdCtx || !workspaceRoot) return { status: "skipped" };
1010
+ try {
1011
+ const result = await cmdCtx.newSession({ workspaceRoot });
1012
+ return result.cancelled ? { status: "cancelled" } : { status: "ok" };
1013
+ } catch (err) {
1014
+ return {
1015
+ status: "failed",
1016
+ error: err instanceof Error ? err.message : String(err),
1017
+ };
1018
+ }
1019
+ }
1020
+
1021
+ export async function cleanupAfterLoopExit(ctx: ExtensionContext): Promise<void> {
853
1022
  s.currentUnit = null;
854
1023
  s.active = false;
855
1024
  deactivateGSD();
@@ -873,35 +1042,132 @@ function cleanupAfterLoopExit(ctx: ExtensionContext): void {
873
1042
  // visible so the user still has a resumable auto-mode signal on screen.
874
1043
  if (!s.paused) {
875
1044
  ctx.ui.setStatus("gsd-auto", undefined);
876
- ctx.ui.setWidget("gsd-progress", undefined);
1045
+ if (s.completionStopInProgress) {
1046
+ s.completionStopInProgress = false;
1047
+ }
877
1048
  initHealthWidget(ctx);
878
1049
  }
879
1050
 
880
- // Restore CWD out of worktree back to original project root
1051
+ // ADR-016 phase 3 (#5693): the stop-path basePath restore routes through
1052
+ // `Lifecycle.restoreToProjectRoot()`, the sole owner of `s.basePath`
1053
+ // mutation. The verb assigns `s.basePath` before any throwable work
1054
+ // (rebuildGitService, cache invalidation), so a thrown error still leaves
1055
+ // basePath restored — no fallback assignment needed at the call site.
1056
+ // The chdir stays here because `restoreToProjectRoot` is a pure
1057
+ // session-state mutation.
881
1058
  if (s.originalBasePath) {
882
- s.basePath = s.originalBasePath;
883
1059
  try {
884
- process.chdir(s.basePath);
1060
+ buildLifecycle().restoreToProjectRoot();
1061
+ } catch (err) {
1062
+ logWarning(
1063
+ "engine",
1064
+ `restore project root failed: ${err instanceof Error ? err.message : String(err)}`,
1065
+ { file: "auto.ts" },
1066
+ );
1067
+ }
1068
+ try {
1069
+ process.chdir(s.originalBasePath);
885
1070
  } catch (err) {
886
- /* best-effort */
887
- logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1071
+ logWarning("engine", `basePath restore/chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1072
+ }
1073
+ }
1074
+
1075
+ if (s.originalBasePath && s.cmdCtx) {
1076
+ const result = await rerootCommandSession(s.cmdCtx, s.originalBasePath);
1077
+ if (result.status === "cancelled") {
1078
+ logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.originalBasePath });
1079
+ } else if (result.status === "failed") {
1080
+ logWarning("engine", `post-loop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.originalBasePath });
888
1081
  }
889
1082
  }
890
1083
  }
891
1084
 
1085
+ export function _cleanupAfterLoopExitForTest(ctx: ExtensionContext): Promise<void> {
1086
+ return cleanupAfterLoopExit(ctx);
1087
+ }
1088
+
1089
+ export type AutoWorktreeExitAction = "skip" | "merge" | "preserve";
1090
+
1091
+ interface MilestoneCompletionRollup {
1092
+ milestoneTitle?: string;
1093
+ oneLiner?: string;
1094
+ successCriteriaResults?: string;
1095
+ definitionOfDoneResults?: string;
1096
+ requirementOutcomes?: string;
1097
+ deviations?: string;
1098
+ followUps?: string;
1099
+ keyDecisions?: string[];
1100
+ keyFiles?: string[];
1101
+ lessonsLearned?: string[];
1102
+ }
1103
+
1104
+ function normalizeFrontmatterList(value: unknown): string[] {
1105
+ if (!Array.isArray(value)) return [];
1106
+ return value
1107
+ .map(item => typeof item === "string" ? item.trim() : "")
1108
+ .filter(item => item.length > 0 && item !== "(none)");
1109
+ }
1110
+
1111
+ function firstBoldParagraph(body: string): string | undefined {
1112
+ const match = body.match(/\*\*([^*\n][\s\S]*?)\*\*/);
1113
+ return match?.[1]?.replace(/\s+/g, " ").trim() || undefined;
1114
+ }
1115
+
1116
+ function loadMilestoneCompletionRollup(basePath: string, milestoneId: string | null | undefined): MilestoneCompletionRollup {
1117
+ if (!milestoneId) return {};
1118
+ const summaryPath = resolveMilestoneFile(basePath, milestoneId, "SUMMARY");
1119
+ if (!summaryPath || !existsSync(summaryPath)) return {};
1120
+
1121
+ try {
1122
+ const raw = readFileSync(summaryPath, "utf-8");
1123
+ const [frontmatterLines, body] = splitFrontmatter(raw);
1124
+ const frontmatter = frontmatterLines ? parseFrontmatterMap(frontmatterLines) : {};
1125
+ return {
1126
+ milestoneTitle: typeof frontmatter.title === "string" ? frontmatter.title : undefined,
1127
+ oneLiner: firstBoldParagraph(body),
1128
+ successCriteriaResults: extractSection(body, "Success Criteria Results") ?? undefined,
1129
+ definitionOfDoneResults: extractSection(body, "Definition of Done Results") ?? undefined,
1130
+ requirementOutcomes: extractSection(body, "Requirement Outcomes") ?? undefined,
1131
+ deviations: extractSection(body, "Deviations") ?? undefined,
1132
+ followUps: extractSection(body, "Follow-ups") ?? undefined,
1133
+ keyDecisions: normalizeFrontmatterList(frontmatter.key_decisions),
1134
+ keyFiles: normalizeFrontmatterList(frontmatter.key_files),
1135
+ lessonsLearned: normalizeFrontmatterList(frontmatter.lessons_learned),
1136
+ };
1137
+ } catch (err) {
1138
+ logWarning("dashboard", `completion roll-up summary read failed: ${err instanceof Error ? err.message : String(err)}`);
1139
+ return {};
1140
+ }
1141
+ }
1142
+
1143
+ export function _resolveAutoWorktreeExitActionForTest(
1144
+ currentMilestoneId: string | null | undefined,
1145
+ milestoneMergedInPhases: boolean,
1146
+ milestoneComplete: boolean,
1147
+ ): AutoWorktreeExitAction {
1148
+ const action = _selectStopAutoWorktreeExit({
1149
+ currentMilestoneId: currentMilestoneId ?? null,
1150
+ milestoneComplete,
1151
+ milestoneMergedInPhases,
1152
+ });
1153
+ return action === "none" ? "skip" : action;
1154
+ }
1155
+
892
1156
  export async function stopAuto(
893
1157
  ctx?: ExtensionContext,
894
1158
  pi?: ExtensionAPI,
895
1159
  reason?: string,
1160
+ options: StopAutoOptions = {},
896
1161
  ): Promise<void> {
897
1162
  if (!s.active && !s.paused) return;
898
1163
  const loadedPreferences = loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences;
899
1164
  const reasonSuffix = reason ? ` — ${reason}` : "";
1165
+ const preserveCompletionSurface = Boolean(options.completionWidget);
1166
+ s.completionStopInProgress = preserveCompletionSurface;
900
1167
 
901
- // #4764 — telemetry: record the exit reason and whether the current milestone
902
- // was merged before we entered stopAuto. This is the producer-side signal for
903
- // the #4761 orphan class: milestoneMerged=false + currentMilestoneId present
904
- // is exactly the pattern that strands work.
1168
+ // #4764 — telemetry: record the exit reason, isolation mode, whether an auto
1169
+ // worktree was active, and whether the current milestone was merged before
1170
+ // stopAuto. The unmerged-work warning is only meaningful for real worktrees.
905
1171
  try {
906
1172
  const { emitAutoExit } = await import("./worktree-telemetry.js");
907
1173
  type AutoExitReason =
@@ -926,10 +1192,13 @@ export async function stopAuto(
926
1192
  : rawReason === "stop" || rawReason === "pause"
927
1193
  ? rawReason
928
1194
  : "other";
929
- emitAutoExit(s.originalBasePath || s.basePath, {
1195
+ const telemetryBase = s.originalBasePath || s.basePath;
1196
+ emitAutoExit(telemetryBase, {
930
1197
  reason: normalizedReason,
931
1198
  milestoneId: s.currentMilestoneId ?? undefined,
932
1199
  milestoneMerged: s.milestoneMergedInPhases === true,
1200
+ isolationMode: getIsolationMode(telemetryBase),
1201
+ worktreeActive: isInAutoWorktree(s.basePath),
933
1202
  });
934
1203
  } catch (err) {
935
1204
  logWarning("engine", `auto-exit telemetry failed: ${err instanceof Error ? err.message : String(err)}`);
@@ -957,6 +1226,8 @@ export async function stopAuto(
957
1226
  if (s.workerId) {
958
1227
  markWorkerStopping(s.workerId);
959
1228
  }
1229
+ s.workerId = null;
1230
+ s.milestoneLeaseToken = null;
960
1231
  } catch (e) {
961
1232
  debugLog("stop-cleanup-coordination", { error: e instanceof Error ? e.message : String(e) });
962
1233
  }
@@ -1000,7 +1271,7 @@ export async function stopAuto(
1000
1271
  const notifyCtx = ctx
1001
1272
  ? { notify: ctx.ui.notify.bind(ctx.ui) }
1002
1273
  : { notify: () => {} };
1003
- const resolver = buildResolver();
1274
+ const lifecycle = buildLifecycle();
1004
1275
 
1005
1276
  // Check if the milestone is complete. DB status is the authoritative
1006
1277
  // signal — only a successful gsd_complete_milestone call flips it to
@@ -1038,17 +1309,35 @@ export async function stopAuto(
1038
1309
  logWarning("engine", `milestone summary check failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1039
1310
  }
1040
1311
 
1041
- if (milestoneComplete) {
1312
+ const exitAction = _selectStopAutoWorktreeExit({
1313
+ currentMilestoneId: s.currentMilestoneId,
1314
+ milestoneComplete,
1315
+ milestoneMergedInPhases: s.milestoneMergedInPhases,
1316
+ });
1317
+
1318
+ if (exitAction === "merge") {
1042
1319
  // Milestone is complete — merge worktree branch back to main
1043
- resolver.mergeAndExit(s.currentMilestoneId, notifyCtx);
1044
- } else {
1320
+ const r = lifecycle.exitMilestone(
1321
+ s.currentMilestoneId,
1322
+ { merge: true },
1323
+ notifyCtx,
1324
+ );
1325
+ if (!r.ok && r.cause instanceof Error) throw r.cause;
1326
+ } else if (exitAction === "preserve") {
1045
1327
  // Milestone still in progress — preserve branch for later resumption
1046
- resolver.exitMilestone(s.currentMilestoneId, notifyCtx, {
1047
- preserveBranch: true,
1048
- });
1328
+ const r = lifecycle.exitMilestone(
1329
+ s.currentMilestoneId,
1330
+ { merge: false, preserveBranch: true },
1331
+ notifyCtx,
1332
+ );
1333
+ if (!r.ok && r.cause instanceof Error) throw r.cause;
1049
1334
  }
1050
1335
  }
1051
1336
  } catch (e) {
1337
+ ctx?.ui.notify(
1338
+ `Worktree cleanup failed for ${s.currentMilestoneId ?? "current milestone"}: ${e instanceof Error ? e.message : String(e)}. Resolve the preserved branch/worktree and run /gsd auto to resume.`,
1339
+ "warning",
1340
+ );
1052
1341
  debugLog("stop-cleanup-worktree", { error: e instanceof Error ? e.message : String(e) });
1053
1342
  }
1054
1343
 
@@ -1067,6 +1356,21 @@ export async function stopAuto(
1067
1356
  }
1068
1357
  }
1069
1358
 
1359
+ // Pre-compute completion widget slice counts while the DB is still open.
1360
+ // Step 8 runs after closeDatabase(), so DB-backed slice lookups must happen here.
1361
+ const completionMilestoneId = options.completionWidget?.milestoneId ?? s.currentMilestoneId;
1362
+ let completedSlices: number | null = null;
1363
+ let totalSlices: number | null = null;
1364
+ if (preserveCompletionSurface && options.completionWidget && completionMilestoneId && isDbAvailable()) {
1365
+ try {
1366
+ const slices = getMilestoneSlices(completionMilestoneId);
1367
+ completedSlices = slices.filter(slice => isClosedStatus(slice.status)).length;
1368
+ totalSlices = slices.length;
1369
+ } catch (err) {
1370
+ logWarning("dashboard", `completion slice stats lookup failed: ${err instanceof Error ? err.message : String(err)}`);
1371
+ }
1372
+ }
1373
+
1070
1374
  // ── Step 6: DB cleanup ──
1071
1375
  if (isDbAvailable()) {
1072
1376
  try {
@@ -1079,37 +1383,113 @@ export async function stopAuto(
1079
1383
  }
1080
1384
  }
1081
1385
 
1082
- // ── Step 7: Restore basePath and chdir ──
1083
- try {
1084
- if (s.originalBasePath) {
1085
- s.basePath = s.originalBasePath;
1086
- try {
1087
- process.chdir(s.basePath);
1088
- } catch (err) {
1089
- /* best-effort */
1090
- logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1091
- }
1386
+ // ── Step 7: Restore basePath and chdir (ADR-016 phase 3, #5693) ──
1387
+ // `restoreToProjectRoot` assigns s.basePath before any throwable work;
1388
+ // no fallback assignment is needed at the call site.
1389
+ if (s.originalBasePath) {
1390
+ try {
1391
+ buildLifecycle().restoreToProjectRoot();
1392
+ } catch (e) {
1393
+ debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
1394
+ }
1395
+ try {
1396
+ process.chdir(s.basePath);
1397
+ } catch (err) {
1398
+ /* best-effort */
1399
+ logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1400
+ }
1401
+ }
1402
+
1403
+ // Re-root the active command session/tool runtime after worktree teardown.
1404
+ // mergeAndExit restores process.cwd(), but AgentSession has already captured
1405
+ // its own cwd for tools and system prompt; refresh it before returning to the
1406
+ // user so follow-up commands do not target a removed milestone worktree.
1407
+ if (s.originalBasePath && ctx && s.cmdCtx) {
1408
+ const result = await rerootCommandSession(s.cmdCtx, s.originalBasePath);
1409
+ if (result.status === "cancelled") {
1410
+ logWarning("engine", "post-stop session re-root was cancelled", { file: "auto.ts", basePath: s.originalBasePath });
1411
+ } else if (result.status === "failed") {
1412
+ logWarning("engine", `post-stop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.originalBasePath });
1092
1413
  }
1093
- } catch (e) {
1094
- debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
1095
1414
  }
1096
1415
 
1097
1416
  // ── Step 8: Ledger notification ──
1098
1417
  try {
1099
1418
  const ledger = getLedger();
1419
+ const isAllComplete = reason === "All milestones complete";
1420
+ const isMilestoneComplete = /^Milestone\s+\S+\s+complete$/i.test(reason ?? "");
1421
+ const notificationPrefix = isAllComplete
1422
+ ? "All milestones complete"
1423
+ : isMilestoneComplete
1424
+ ? `${reason}. Auto-mode finished this milestone`
1425
+ : `Auto-mode stopped${reasonSuffix}`;
1100
1426
  if (ledger && ledger.units.length > 0) {
1101
1427
  const totals = getProjectTotals(ledger.units);
1102
1428
  ctx?.ui.notify(
1103
- `Auto-mode stopped${reasonSuffix}. Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${ledger.units.length} units`,
1429
+ `${notificationPrefix}. Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${ledger.units.length} units`,
1104
1430
  "info",
1105
1431
  );
1106
1432
  } else {
1107
- ctx?.ui.notify(`Auto-mode stopped${reasonSuffix}.`, "info");
1433
+ ctx?.ui.notify(`${notificationPrefix}.`, "info");
1108
1434
  }
1109
1435
  } catch (e) {
1110
1436
  debugLog("stop-cleanup-ledger", { error: e instanceof Error ? e.message : String(e) });
1111
1437
  }
1112
1438
 
1439
+ if (preserveCompletionSurface && ctx && options.completionWidget) {
1440
+ const ledger = getLedger();
1441
+ const units = ledger?.units ?? [];
1442
+ const totals = units.length > 0 ? getProjectTotals(units) : null;
1443
+ let totalInput = 0;
1444
+ let totalCacheRead = 0;
1445
+ try {
1446
+ for (const entry of s.cmdCtx?.sessionManager?.getEntries?.() ?? []) {
1447
+ if (entry.type === "message") {
1448
+ const msgEntry = entry as SessionMessageEntry;
1449
+ if (msgEntry.message?.role === "assistant") {
1450
+ const usage = (msgEntry.message as any).usage;
1451
+ if (usage) {
1452
+ totalInput += usage.input || 0;
1453
+ totalCacheRead += usage.cacheRead || 0;
1454
+ }
1455
+ }
1456
+ }
1457
+ }
1458
+ } catch (err) {
1459
+ logWarning("dashboard", `completion stats lookup failed: ${err instanceof Error ? err.message : String(err)}`);
1460
+ }
1461
+ const contextUsage = s.cmdCtx?.getContextUsage?.();
1462
+ const milestoneId = completionMilestoneId;
1463
+ const rollup = loadMilestoneCompletionRollup(s.originalBasePath || s.basePath, milestoneId);
1464
+ setCompletionProgressWidget(ctx, {
1465
+ milestoneId,
1466
+ milestoneTitle: options.completionWidget.milestoneTitle ?? rollup.milestoneTitle,
1467
+ oneLiner: rollup.oneLiner,
1468
+ successCriteriaResults: rollup.successCriteriaResults,
1469
+ definitionOfDoneResults: rollup.definitionOfDoneResults,
1470
+ requirementOutcomes: rollup.requirementOutcomes,
1471
+ deviations: rollup.deviations,
1472
+ followUps: rollup.followUps,
1473
+ keyDecisions: rollup.keyDecisions,
1474
+ keyFiles: rollup.keyFiles,
1475
+ lessonsLearned: rollup.lessonsLearned,
1476
+ reason: reason ?? "Milestone complete",
1477
+ startedAt: s.autoStartTime,
1478
+ totalCost: totals?.cost ?? 0,
1479
+ totalTokens: totals?.tokens.total ?? 0,
1480
+ unitCount: units.length,
1481
+ cacheHitRate: totalCacheRead + totalInput > 0
1482
+ ? (totalCacheRead / (totalCacheRead + totalInput)) * 100
1483
+ : null,
1484
+ contextPercent: contextUsage?.percent ?? null,
1485
+ contextWindow: contextUsage?.contextWindow ?? s.cmdCtx?.model?.contextWindow ?? null,
1486
+ completedSlices,
1487
+ totalSlices,
1488
+ allMilestonesComplete: options.completionWidget.allMilestonesComplete,
1489
+ basePath: s.originalBasePath || s.basePath || null,
1490
+ });
1491
+ }
1492
+
1113
1493
  // ── Step 9: Cmux sidebar / event log ──
1114
1494
  try {
1115
1495
  pi?.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "clear" as const, preferences: loadedPreferences });
@@ -1200,8 +1580,20 @@ export async function stopAuto(
1200
1580
 
1201
1581
  // UI cleanup
1202
1582
  ctx?.ui.setStatus("gsd-auto", undefined);
1203
- ctx?.ui.setWidget("gsd-progress", undefined);
1204
- if (ctx) initHealthWidget(ctx);
1583
+ if (!preserveCompletionSurface) {
1584
+ ctx?.ui.setWidget("gsd-progress", undefined);
1585
+ const status = reason?.startsWith("Blocked:") ? "blocked" : reason?.toLowerCase().includes("fail") ? "failed" : "stopped";
1586
+ setLifecycleOutcome(ctx, {
1587
+ status,
1588
+ title: status === "blocked" ? "Auto-mode blocked" : status === "failed" ? "Auto-mode stopped with an issue" : "Auto-mode stopped",
1589
+ detail: reason ?? "Auto-mode stopped.",
1590
+ nextAction: status === "blocked"
1591
+ ? "Fix the blocker, then run /gsd auto to resume."
1592
+ : "Run /gsd status for the current project state, or /gsd auto to continue.",
1593
+ commands: ["/gsd status for overview", "/gsd auto to run", "/gsd visualize to inspect", "/gsd notifications for history"],
1594
+ });
1595
+ if (ctx) initHealthWidget(ctx);
1596
+ }
1205
1597
  restoreProjectRootEnv();
1206
1598
  restoreMilestoneLockEnv();
1207
1599
 
@@ -1218,10 +1610,21 @@ export async function stopAuto(
1218
1610
  }
1219
1611
 
1220
1612
  // Reset all session state in one call
1221
- s.reset();
1613
+ s.resetAfterStop({ preserveCompletionSurface });
1222
1614
  }
1223
1615
  }
1224
1616
 
1617
+ export type StopAutoWorktreeExitAction = "none" | "merge" | "preserve";
1618
+
1619
+ export function _selectStopAutoWorktreeExit(args: {
1620
+ currentMilestoneId: string | null;
1621
+ milestoneComplete: boolean;
1622
+ milestoneMergedInPhases: boolean;
1623
+ }): StopAutoWorktreeExitAction {
1624
+ if (!args.currentMilestoneId || args.milestoneMergedInPhases) return "none";
1625
+ return args.milestoneComplete ? "merge" : "preserve";
1626
+ }
1627
+
1225
1628
  /**
1226
1629
  * Pause auto-mode without destroying state. Context is preserved.
1227
1630
  * The user can interact with the agent, then `/gsd auto` resumes
@@ -1281,6 +1684,8 @@ export async function pauseAuto(
1281
1684
  logWarning("engine", `paused-session DB write failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1282
1685
  }
1283
1686
 
1687
+ const pausedUnitLabel = currentUnitLabel();
1688
+
1284
1689
  // Close out the current unit so its runtime record doesn't stay at "dispatched"
1285
1690
  if (s.currentUnit && ctx) {
1286
1691
  try {
@@ -1331,8 +1736,16 @@ export async function pauseAuto(
1331
1736
  s.verificationRetryCount.clear();
1332
1737
  ctx?.ui.setStatus("gsd-auto", "paused");
1333
1738
  ctx?.ui.setWidget("gsd-progress", undefined);
1334
- if (ctx) initHealthWidget(ctx);
1335
1739
  const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
1740
+ setLifecycleOutcome(ctx, {
1741
+ status: "paused",
1742
+ title: `${s.stepMode ? "Step" : "Auto"}-mode paused`,
1743
+ detail: _errorContext?.message ?? "Paused by user request.",
1744
+ nextAction: `Type to steer, or run ${resumeCmd} to resume.`,
1745
+ commands: [resumeCmd, "/gsd status for overview", "/gsd notifications for history"],
1746
+ unitLabel: pausedUnitLabel,
1747
+ });
1748
+ if (ctx) initHealthWidget(ctx);
1336
1749
  ctx?.ui.notify(
1337
1750
  `${s.stepMode ? "Step" : "Auto"}-mode paused (Escape). Type to interact, or ${resumeCmd} to resume.`,
1338
1751
  "info",
@@ -1340,43 +1753,43 @@ export async function pauseAuto(
1340
1753
  }
1341
1754
 
1342
1755
  /**
1343
- * Build a WorktreeResolverDeps from auto.ts private scope.
1344
- * Shared by buildResolver() and buildLoopDeps().
1756
+ * Build a WorktreeLifecycle Module wrapping the current session.
1757
+ *
1758
+ * Per ADR-016, the Lifecycle Module is the typed-Interface owner of milestone
1759
+ * entry/exit/merge verbs and calls Projection on lifecycle transitions. The
1760
+ * deps bag is intentionally focused — Lifecycle does not see the wider auto-
1761
+ * mode dependency graph.
1762
+ */
1763
+ /**
1764
+ * Construct a `WorktreeLifecycleDeps` bag without binding to any session.
1765
+ *
1766
+ * Exported so session-less callers (currently `parallel-merge.ts`) can build
1767
+ * the same deps and call `mergeMilestoneStandalone` through the Worktree
1768
+ * Lifecycle Module instead of bypassing it (ADR-016 phase 2 / A2).
1345
1769
  */
1346
- function buildResolverDeps(): WorktreeResolverDeps {
1770
+ export function buildWorktreeLifecycleDeps(): WorktreeLifecycleDeps {
1771
+ // ADR-016 phase 2 / C-track close-out:
1772
+ // C1 (#5624) — fs + git-CLI primitives inlined
1773
+ // C2 (#5625) — worktree-manager helpers inlined
1774
+ // C3 (#5626) — cache + preferences + paths inlined
1775
+ // C4 (#5627) — GitServiceImpl constructor → gitServiceFactory
1776
+ //
1777
+ // Final WorktreeLifecycleDeps shape: 3 fields (gitServiceFactory,
1778
+ // worktreeProjection, mergeMilestoneToMain). Down from 18 at slice-7
1779
+ // closure.
1347
1780
  return {
1348
- isInAutoWorktree,
1349
- shouldUseWorktreeIsolation,
1350
- getIsolationMode,
1781
+ gitServiceFactory: (basePath: string) => {
1782
+ const gitConfig =
1783
+ loadEffectiveGSDPreferences()?.preferences?.git ?? {};
1784
+ return new GitServiceImpl(basePath, gitConfig);
1785
+ },
1786
+ worktreeProjection: new WorktreeStateProjection(),
1351
1787
  mergeMilestoneToMain,
1352
- syncWorktreeStateBack,
1353
- teardownAutoWorktree,
1354
- createAutoWorktree,
1355
- enterAutoWorktree,
1356
- enterBranchModeForMilestone,
1357
- getAutoWorktreePath,
1358
- autoCommitCurrentBranch,
1359
- getCurrentBranch,
1360
- autoWorktreeBranch,
1361
- resolveMilestoneFile,
1362
- readFileSync: (path: string, encoding: string) =>
1363
- readFileSync(path, encoding as BufferEncoding),
1364
- GitServiceImpl:
1365
- GitServiceImpl as unknown as WorktreeResolverDeps["GitServiceImpl"],
1366
- loadEffectiveGSDPreferences:
1367
- loadEffectiveGSDPreferences as unknown as WorktreeResolverDeps["loadEffectiveGSDPreferences"],
1368
- invalidateAllCaches,
1369
- captureIntegrationBranch,
1370
1788
  };
1371
1789
  }
1372
1790
 
1373
- /**
1374
- * Build a WorktreeResolver wrapping the current session.
1375
- * Cheap to construct — it's just a thin wrapper over `s` + deps.
1376
- * Used by stopAuto(), resume path, and buildLoopDeps().
1377
- */
1378
- function buildResolver(): WorktreeResolver {
1379
- return new WorktreeResolver(s, buildResolverDeps());
1791
+ function buildLifecycle(): WorktreeLifecycle {
1792
+ return new WorktreeLifecycle(s, buildWorktreeLifecycleDeps());
1380
1793
  }
1381
1794
 
1382
1795
  /**
@@ -1396,9 +1809,26 @@ export function createWiredAutoOrchestrationModule(
1396
1809
  let seq = 0;
1397
1810
 
1398
1811
  const deps: AutoOrchestratorDeps = {
1812
+ stateReconciliation: {
1813
+ async reconcileBeforeDispatch() {
1814
+ const result = await reconcileBeforeDispatch(dispatchBasePath);
1815
+ if (!result.ok) {
1816
+ return {
1817
+ ok: false,
1818
+ reason: result.reason,
1819
+ stateSnapshot: result.stateSnapshot,
1820
+ };
1821
+ }
1822
+ return {
1823
+ ok: true,
1824
+ reason: result.repaired.join(", "),
1825
+ stateSnapshot: result.stateSnapshot,
1826
+ };
1827
+ },
1828
+ },
1399
1829
  dispatch: {
1400
- async decideNextUnit() {
1401
- const state = await deriveState(dispatchBasePath);
1830
+ async decideNextUnit(input) {
1831
+ const state = input.stateSnapshot;
1402
1832
  const active = state.activeMilestone;
1403
1833
  if (!active) return null;
1404
1834
 
@@ -1422,12 +1852,48 @@ export function createWiredAutoOrchestrationModule(
1422
1852
  },
1423
1853
  recovery: {
1424
1854
  async classifyAndRecover(input) {
1425
- const reason = input.error instanceof Error ? input.error.message : String(input.error ?? "unknown auto error");
1426
- return { action: "escalate" as const, reason };
1855
+ const recovery = classifyFailure(input);
1856
+ return { action: recovery.action, reason: recovery.reason };
1857
+ },
1858
+ },
1859
+ toolContract: {
1860
+ async compileUnitToolContract(unitType) {
1861
+ const result = compileUnitToolContract(unitType);
1862
+ if (!result.ok) return { ok: false, reason: result.detail };
1863
+ return { ok: true, reason: result.contract.validationRules.join(", ") };
1427
1864
  },
1428
1865
  },
1429
1866
  worktree: {
1430
- async prepareForUnit() {},
1867
+ async prepareForUnit(unitType, unitId) {
1868
+ const manifest = resolveManifest(unitType);
1869
+ if (!manifest) {
1870
+ return {
1871
+ ok: false,
1872
+ reason: `No Unit manifest is registered for ${unitType}`,
1873
+ };
1874
+ }
1875
+ const writeScope =
1876
+ manifest.tools.mode === "all" || manifest.tools.mode === "docs"
1877
+ ? "source-writing"
1878
+ : "planning-only";
1879
+ const safety = createWorktreeSafetyModule();
1880
+ const snapshot = await deriveState(dispatchBasePath);
1881
+ const milestoneId = snapshot.activeMilestone?.id ?? null;
1882
+ const expectedBranch = milestoneId ? autoWorktreeBranch(milestoneId) : null;
1883
+ const result = safety.validateUnitRoot({
1884
+ unitType,
1885
+ unitId,
1886
+ writeScope,
1887
+ projectRoot: runtimeBasePath,
1888
+ unitRoot: dispatchBasePath,
1889
+ milestoneId,
1890
+ expectedBranch,
1891
+ });
1892
+ if (!result.ok) {
1893
+ return { ok: false, reason: `${result.kind}: ${result.reason}` };
1894
+ }
1895
+ return { ok: true, reason: result.kind };
1896
+ },
1431
1897
  async syncAfterUnit() {},
1432
1898
  async cleanupOnStop() {},
1433
1899
  },
@@ -1525,6 +1991,7 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
1525
1991
  initRegistry(convertDispatchRules(DISPATCH_RULES));
1526
1992
 
1527
1993
  const cmux = makeCmuxEmitters(pi);
1994
+ const worktreeProjection = new WorktreeStateProjection();
1528
1995
 
1529
1996
  return {
1530
1997
  lockBase,
@@ -1548,8 +2015,8 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
1548
2015
  // Pre-dispatch health gate
1549
2016
  preDispatchHealthGate,
1550
2017
 
1551
- // Worktree sync
1552
- syncProjectRootToWorktree,
2018
+ // Worktree state projection (ADR-016 — single Module Interface)
2019
+ worktreeProjection,
1553
2020
 
1554
2021
  // Resource version guard
1555
2022
  checkResourcesStale,
@@ -1564,7 +2031,6 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
1564
2031
  pruneQueueOrder,
1565
2032
  isInAutoWorktree,
1566
2033
  shouldUseWorktreeIsolation,
1567
- mergeMilestoneToMain,
1568
2034
  teardownAutoWorktree,
1569
2035
  createAutoWorktree,
1570
2036
  captureIntegrationBranch,
@@ -1621,8 +2087,9 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
1621
2087
  // Git
1622
2088
  GitServiceImpl: GitServiceImpl as unknown as LoopDeps["GitServiceImpl"],
1623
2089
 
1624
- // WorktreeResolver
1625
- resolver: buildResolver(),
2090
+ // Worktree Lifecycle Module (ADR-016 — single Module Interface for the
2091
+ // milestone create/enter/exit/merge verbs)
2092
+ lifecycle: buildLifecycle(),
1626
2093
 
1627
2094
  // Post-unit processing
1628
2095
  postUnitPreVerification,
@@ -1883,7 +2350,12 @@ export async function startAuto(
1883
2350
  s.verbose = verboseMode;
1884
2351
  s.stepMode = requestedStepMode;
1885
2352
  s.cmdCtx = ctx;
1886
- s.basePath = base;
2353
+ // ADR-016 phase 2 / B2 (#5620): bootstrap basePath transition before
2354
+ // the resume path consults persisted worktree state. Defensive about
2355
+ // s.originalBasePath — the meta-restore above (line 2003 / 2055) may
2356
+ // have already populated it from paused metadata; the verb preserves
2357
+ // that value.
2358
+ buildLifecycle().adoptSessionRoot(base);
1887
2359
  // ── Resume worktree: if the paused session was inside a milestone worktree,
1888
2360
  // apply that path as the dispatch basePath immediately (#3723).
1889
2361
  // This ensures the dispatch loop runs from the worktree directory even when
@@ -1899,9 +2371,8 @@ export async function startAuto(
1899
2371
  { file: "auto.ts", milestoneId: s.currentMilestoneId ?? "" },
1900
2372
  );
1901
2373
  }
1902
- if (resumeWorktreePath && existsSync(resumeWorktreePath)) {
1903
- s.basePath = resumeWorktreePath;
1904
- }
2374
+ // ADR-016 phase 2 / B3 (#5621): paused-resume worktree-path adoption.
2375
+ buildLifecycle().resumeFromPausedSession(base, resumeWorktreePath);
1905
2376
  // Rebuild scope now that s.basePath reflects the actual worktree (or project root).
1906
2377
  rebuildScope(s.basePath, s.currentMilestoneId);
1907
2378
  // Ensure the workflow-logger audit log is pinned to the project root
@@ -1929,9 +2400,17 @@ export async function startAuto(
1929
2400
  !detectWorktreeName(s.basePath) &&
1930
2401
  !detectWorktreeName(s.originalBasePath)
1931
2402
  ) {
1932
- buildResolver().enterMilestone(s.currentMilestoneId, {
2403
+ const enterResult = buildLifecycle().enterMilestone(s.currentMilestoneId, {
1933
2404
  notify: ctx.ui.notify.bind(ctx.ui),
1934
2405
  });
2406
+ if (!enterResult.ok && enterResult.reason === "lease-conflict") {
2407
+ ctx.ui.notify(
2408
+ `Cannot resume milestone ${s.currentMilestoneId}: lease is held by another worker.`,
2409
+ "error",
2410
+ );
2411
+ await stopAuto(ctx, pi, "lease-conflict during resume");
2412
+ return;
2413
+ }
1935
2414
  // s.basePath may have been updated to a worktree path by enterMilestone.
1936
2415
  rebuildScope(s.basePath, s.currentMilestoneId);
1937
2416
  }
@@ -1953,16 +2432,7 @@ export async function startAuto(
1953
2432
  // tree; deployed extensions live at ~/.gsd/agent/extensions/gsd/ where the
1954
2433
  // relative path resolves to ~/.gsd/agent/resource-loader.js which doesn't exist.
1955
2434
  // Using GSD_PKG_ROOT constructs a correct absolute path in both contexts (#3949).
1956
- const agentDir = process.env.GSD_CODING_AGENT_DIR || join(gsdHome(), "agent");
1957
- const pkgRoot = process.env.GSD_PKG_ROOT;
1958
- const resourceLoaderPath = pkgRoot
1959
- ? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
1960
- : new URL("../../../resource-loader.js", import.meta.url).href;
1961
- const { initResources } = await import(resourceLoaderPath);
1962
- initResources(agentDir);
1963
- // Open the project DB before rebuild/derive so resume uses DB-backed
1964
- // state instead of falling back to stale markdown parsing (#2940).
1965
- await openProjectDbIfPresent(s.basePath);
2435
+ await refreshResumeResourcesAndDb(s.basePath);
1966
2436
  try {
1967
2437
  await rebuildState(s.basePath);
1968
2438
  pi.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "sync" as const, preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, state: await deriveState(s.basePath) });
@@ -2034,7 +2504,7 @@ export async function startAuto(
2034
2504
  runKernelLoop: runUokKernelLoop,
2035
2505
  runLegacyLoop: runLegacyAutoLoop,
2036
2506
  });
2037
- cleanupAfterLoopExit(ctx);
2507
+ await cleanupAfterLoopExit(ctx);
2038
2508
  return;
2039
2509
  }
2040
2510
 
@@ -2043,9 +2513,14 @@ export async function startAuto(
2043
2513
  shouldUseWorktreeIsolation,
2044
2514
  registerSigtermHandler,
2045
2515
  lockBase,
2046
- buildResolver,
2516
+ buildLifecycle,
2047
2517
  };
2048
2518
 
2519
+ // Register the worker before bootstrap enters a milestone worktree.
2520
+ // This ensures enterMilestone can claim a lease and seed dispatch claims
2521
+ // for crash-recovery fidelity (#5405).
2522
+ registerAutoWorkerForSession(s, base);
2523
+
2049
2524
  const ready = await bootstrapAutoSession(
2050
2525
  s,
2051
2526
  ctx,
@@ -2089,7 +2564,7 @@ export async function startAuto(
2089
2564
  runKernelLoop: runUokKernelLoop,
2090
2565
  runLegacyLoop: runLegacyAutoLoop,
2091
2566
  });
2092
- cleanupAfterLoopExit(ctx);
2567
+ await cleanupAfterLoopExit(ctx);
2093
2568
  }
2094
2569
 
2095
2570
  // describeNextUnit is imported from auto-dashboard.ts and re-exported
@@ -2199,7 +2674,12 @@ export async function dispatchHookUnit(
2199
2674
  s.pendingQuickTasks = [];
2200
2675
  }
2201
2676
 
2202
- s.basePath = targetBasePath;
2677
+ // ADR-016 phase 2 / B2 (#5620): hook-trigger basePath transition. Treats
2678
+ // the trigger as a bootstrap variant — if the session is fresh,
2679
+ // `originalBasePath` gets set to `targetBasePath`; if the session was
2680
+ // already active with an established `originalBasePath`, the verb
2681
+ // preserves it.
2682
+ buildLifecycle().adoptSessionRoot(targetBasePath);
2203
2683
  if (!s.orchestration) {
2204
2684
  ensureOrchestrationModule(ctx, pi, s.basePath);
2205
2685
  }
@@ -2213,24 +2693,7 @@ export async function dispatchHookUnit(
2213
2693
  startedAt: hookStartedAt,
2214
2694
  };
2215
2695
 
2216
- // Ensure cwd matches basePath BEFORE newSession() captures it (#1389).
2217
- // newSession() snapshots process.cwd() during construction; chdir-ing
2218
- // afterward leaves the session rooted to whatever cwd was when the call
2219
- // was made. Must be synchronous — no awaits between chdir and newSession.
2220
- try { if (process.cwd() !== s.basePath) process.chdir(s.basePath); } catch (err) {
2221
- const msg = `Failed to chdir before hook newSession (basePath: ${s.basePath}): ${err instanceof Error ? err.message : String(err)}`;
2222
- logWarning("engine", msg, { file: "auto.ts", basePath: s.basePath, error: err instanceof Error ? err.message : String(err) });
2223
- ctx.ui.notify(`${msg}. Cancelling hook dispatch to avoid running in the wrong directory.`, "error");
2224
- if (wasActive) {
2225
- s.basePath = previousBasePath;
2226
- s.currentUnit = previousCurrentUnit;
2227
- } else {
2228
- s.reset();
2229
- }
2230
- return false;
2231
- }
2232
-
2233
- const result = await s.cmdCtx!.newSession();
2696
+ const result = await s.cmdCtx!.newSession({ workspaceRoot: s.basePath });
2234
2697
  if (result.cancelled) {
2235
2698
  await stopAuto(ctx, pi);
2236
2699
  return false;