gsd-pi 2.80.0-dev.fbe7c8c6f → 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 (814) 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/extensions/claude-code-cli/readiness.js +18 -7
  14. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +40 -3
  15. package/dist/resources/extensions/github-sync/sync.js +4 -1
  16. package/dist/resources/extensions/gsd/auto/contracts.js +2 -0
  17. package/dist/resources/extensions/gsd/auto/loop.js +214 -17
  18. package/dist/resources/extensions/gsd/auto/orchestrator.js +48 -4
  19. package/dist/resources/extensions/gsd/auto/phases.js +372 -134
  20. package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
  21. package/dist/resources/extensions/gsd/auto/run-unit.js +88 -33
  22. package/dist/resources/extensions/gsd/auto/session.js +18 -1
  23. package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -0
  24. package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +33 -1
  26. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +9 -1
  27. package/dist/resources/extensions/gsd/auto-dashboard.js +199 -177
  28. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
  29. package/dist/resources/extensions/gsd/auto-dispatch.js +30 -11
  30. package/dist/resources/extensions/gsd/auto-post-unit.js +119 -79
  31. package/dist/resources/extensions/gsd/auto-prompts.js +103 -16
  32. package/dist/resources/extensions/gsd/auto-recovery.js +43 -1
  33. package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
  34. package/dist/resources/extensions/gsd/auto-start.js +251 -16
  35. package/dist/resources/extensions/gsd/auto-supervisor.js +8 -1
  36. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +2 -2
  37. package/dist/resources/extensions/gsd/auto-unit-closeout.js +33 -5
  38. package/dist/resources/extensions/gsd/auto-verification.js +12 -6
  39. package/dist/resources/extensions/gsd/auto-worktree.js +237 -336
  40. package/dist/resources/extensions/gsd/auto.js +493 -129
  41. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +133 -12
  42. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +44 -37
  43. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -10
  44. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +30 -20
  45. package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +4 -1
  46. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +6 -4
  47. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +5 -3
  48. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +1 -1
  49. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +337 -55
  50. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
  51. package/dist/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.js +4 -0
  52. package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
  53. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +19 -2
  54. package/dist/resources/extensions/gsd/clean-root-preflight.js +24 -6
  55. package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +4 -10
  56. package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
  57. package/dist/resources/extensions/gsd/commands-config.js +1 -1
  58. package/dist/resources/extensions/gsd/commands-eval-review.js +2 -2
  59. package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
  60. package/dist/resources/extensions/gsd/context-budget.js +37 -2
  61. package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
  62. package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
  63. package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
  64. package/dist/resources/extensions/gsd/db-base-schema.js +4 -2
  65. package/dist/resources/extensions/gsd/db-migration-steps.js +6 -0
  66. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
  67. package/dist/resources/extensions/gsd/git-service.js +75 -6
  68. package/dist/resources/extensions/gsd/gsd-db.js +46 -13
  69. package/dist/resources/extensions/gsd/guided-flow.js +119 -42
  70. package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
  71. package/dist/resources/extensions/gsd/health-widget.js +6 -9
  72. package/dist/resources/extensions/gsd/init-wizard.js +4 -1
  73. package/dist/resources/extensions/gsd/memory-store.js +69 -12
  74. package/dist/resources/extensions/gsd/migrate/command.js +40 -1
  75. package/dist/resources/extensions/gsd/migration-auto-check.js +87 -0
  76. package/dist/resources/extensions/gsd/native-git-bridge.js +46 -22
  77. package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
  78. package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
  79. package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
  80. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
  81. package/dist/resources/extensions/gsd/parallel-orchestrator.js +13 -3
  82. package/dist/resources/extensions/gsd/planning-path-scope.js +26 -0
  83. package/dist/resources/extensions/gsd/pre-execution-checks.js +22 -0
  84. package/dist/resources/extensions/gsd/prompt-loader.js +28 -2
  85. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +22 -17
  86. package/dist/resources/extensions/gsd/prompts/complete-slice.md +14 -12
  87. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
  88. package/dist/resources/extensions/gsd/prompts/discuss.md +20 -2
  89. package/dist/resources/extensions/gsd/prompts/execute-task.md +4 -2
  90. package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
  91. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  92. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
  93. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  94. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
  95. package/dist/resources/extensions/gsd/quick.js +34 -2
  96. package/dist/resources/extensions/gsd/recovery-classification.js +94 -0
  97. package/dist/resources/extensions/gsd/slice-cadence.js +45 -2
  98. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +15 -9
  99. package/dist/resources/extensions/gsd/state-reconciliation.js +27 -0
  100. package/dist/resources/extensions/gsd/tool-contract.js +50 -0
  101. package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -7
  102. package/dist/resources/extensions/gsd/tools/complete-task.js +1 -1
  103. package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +15 -0
  104. package/dist/resources/extensions/gsd/tools/exec-search-tool.js +5 -0
  105. package/dist/resources/extensions/gsd/tools/exec-tool.js +3 -15
  106. package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -0
  107. package/dist/resources/extensions/gsd/tools/plan-slice.js +9 -0
  108. package/dist/resources/extensions/gsd/tools/plan-task.js +9 -0
  109. package/dist/resources/extensions/gsd/tools/resume-tool.js +5 -0
  110. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +1 -1
  111. package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
  112. package/dist/resources/extensions/gsd/unit-context-composer.js +12 -3
  113. package/dist/resources/extensions/gsd/unit-runtime.js +22 -0
  114. package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
  115. package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
  116. package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
  117. package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
  118. package/dist/resources/extensions/gsd/worktree-lifecycle.js +1364 -0
  119. package/dist/resources/extensions/gsd/worktree-safety.js +119 -0
  120. package/dist/resources/extensions/gsd/worktree-state-projection.js +317 -0
  121. package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
  122. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
  123. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  124. package/dist/web/standalone/.next/BUILD_ID +1 -1
  125. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  126. package/dist/web/standalone/.next/build-manifest.json +3 -3
  127. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  128. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  129. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  131. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  132. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  133. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  140. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  146. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  147. package/dist/web/standalone/.next/server/app/index.html +1 -1
  148. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  149. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  150. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  151. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  152. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  153. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  154. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  156. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  158. package/dist/web/standalone/.next/server/middleware.js +3 -3
  159. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  160. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  161. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  162. package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +10 -0
  163. package/dist/web/standalone/.next/static/chunks/app/{page-fab3ebb85b006001.js → page-752f1e2ebdaa3e45.js} +1 -1
  164. package/dist/web/standalone/.next/static/chunks/{webpack-0481f1221120a7c6.js → webpack-de742b64187e13fe.js} +1 -1
  165. package/dist/welcome-screen.d.ts +2 -7
  166. package/dist/welcome-screen.js +68 -75
  167. package/package.json +3 -3
  168. package/packages/daemon/package.json +2 -2
  169. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  170. package/packages/mcp-server/dist/workflow-tools.js +22 -17
  171. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  172. package/packages/mcp-server/package.json +2 -2
  173. package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
  174. package/packages/mcp-server/src/workflow-tools.ts +30 -16
  175. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  176. package/packages/native/package.json +1 -1
  177. package/packages/native/tsconfig.tsbuildinfo +1 -1
  178. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  179. package/packages/pi-agent-core/dist/agent-loop.js +4 -1
  180. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  181. package/packages/pi-agent-core/dist/agent.d.ts +9 -2
  182. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  183. package/packages/pi-agent-core/dist/agent.js +43 -11
  184. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  185. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  186. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  187. package/packages/pi-agent-core/dist/index.js +2 -0
  188. package/packages/pi-agent-core/dist/index.js.map +1 -1
  189. package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
  190. package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
  191. package/packages/pi-agent-core/dist/token-audit.js +221 -0
  192. package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
  193. package/packages/pi-agent-core/dist/types.d.ts +31 -0
  194. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  195. package/packages/pi-agent-core/dist/types.js.map +1 -1
  196. package/packages/pi-agent-core/package.json +1 -1
  197. package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
  198. package/packages/pi-agent-core/src/agent-loop.ts +4 -1
  199. package/packages/pi-agent-core/src/agent.ts +52 -11
  200. package/packages/pi-agent-core/src/index.ts +2 -0
  201. package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
  202. package/packages/pi-agent-core/src/token-audit.ts +287 -0
  203. package/packages/pi-agent-core/src/types.ts +26 -10
  204. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  205. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +35 -13
  206. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  207. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +21 -11
  208. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -1
  209. package/packages/pi-ai/dist/providers/anthropic.d.ts +7 -0
  210. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  211. package/packages/pi-ai/dist/providers/anthropic.js +9 -7
  212. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  213. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +23 -14
  214. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -1
  215. package/packages/pi-ai/dist/types.d.ts +2 -0
  216. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  217. package/packages/pi-ai/dist/types.js.map +1 -1
  218. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +48 -21
  219. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
  220. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +22 -21
  221. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -1
  222. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +22 -21
  223. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -1
  224. package/packages/pi-ai/package.json +1 -1
  225. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +39 -25
  226. package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -22
  227. package/packages/pi-ai/src/providers/anthropic.ts +22 -9
  228. package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +34 -21
  229. package/packages/pi-ai/src/types.ts +3 -0
  230. package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +56 -22
  231. package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +24 -28
  232. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +24 -28
  233. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  234. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +36 -1
  235. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
  236. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +30 -1
  237. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
  238. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +21 -2
  239. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  240. package/packages/pi-coding-agent/dist/core/agent-session.js +94 -16
  241. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  242. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +6 -2
  243. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +11 -0
  245. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  246. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +9 -0
  247. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  248. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts +2 -0
  249. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts.map +1 -0
  250. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js +103 -0
  251. package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js.map +1 -0
  252. package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
  253. package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
  254. package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
  255. package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
  256. package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
  257. package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
  258. package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
  259. package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
  260. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  261. package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
  262. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  263. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +3 -0
  264. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  265. package/packages/pi-coding-agent/dist/core/extensions/runner.js +6 -6
  266. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +5 -3
  268. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +60 -4
  270. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  272. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +2 -0
  273. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
  275. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
  276. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
  277. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
  278. package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
  279. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  280. package/packages/pi-coding-agent/dist/core/sdk.js +81 -4
  281. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +20 -0
  283. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/settings-manager.js +25 -0
  285. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
  287. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
  289. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
  291. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +22 -56
  293. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +1 -0
  295. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  296. package/packages/pi-coding-agent/dist/core/tools/bash.js +3 -1
  297. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/tools/edit.d.ts +2 -0
  299. package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/tools/edit.js +12 -1
  301. package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/tools/find.d.ts +2 -0
  303. package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/tools/find.js +14 -6
  305. package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/tools/grep.d.ts +2 -0
  307. package/packages/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/tools/grep.js +12 -3
  309. package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  310. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +2 -0
  311. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -1
  313. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -1
  315. package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
  317. package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/core/tools/ls.d.ts +2 -0
  319. package/packages/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  320. package/packages/pi-coding-agent/dist/core/tools/ls.js +10 -3
  321. package/packages/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  322. package/packages/pi-coding-agent/dist/core/tools/read.d.ts +2 -0
  323. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  324. package/packages/pi-coding-agent/dist/core/tools/read.js +3 -1
  325. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  326. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +7 -62
  327. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -1
  328. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts +2 -0
  329. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts.map +1 -0
  330. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +115 -0
  331. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -0
  332. package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts +19 -0
  333. package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts.map +1 -0
  334. package/packages/pi-coding-agent/dist/core/tools/tool-target.js +20 -0
  335. package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -0
  336. package/packages/pi-coding-agent/dist/core/tools/write.d.ts +4 -0
  337. package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  338. package/packages/pi-coding-agent/dist/core/tools/write.js +9 -1
  339. package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  340. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
  341. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
  342. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
  343. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
  344. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +161 -7
  345. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  346. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts +2 -0
  347. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
  348. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
  349. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
  350. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +0 -1
  351. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -1
  352. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +30 -29
  353. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
  354. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +10 -3
  355. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -1
  356. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  357. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +13 -13
  358. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  359. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
  360. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  361. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
  362. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
  363. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +2 -2
  364. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
  365. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
  366. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
  367. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  368. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
  369. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  370. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +25 -1
  371. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  372. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +6 -1
  373. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  374. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +225 -73
  375. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  376. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
  377. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
  378. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
  379. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
  380. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
  381. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
  382. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
  383. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
  384. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
  385. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  386. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
  387. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  388. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  389. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +31 -6
  390. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  391. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +71 -0
  392. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  393. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
  394. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  395. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +25 -3
  396. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  397. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
  398. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
  399. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
  400. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
  401. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  402. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +105 -1
  403. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  404. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  405. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +27 -26
  406. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  407. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +9 -6
  408. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
  409. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
  410. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  411. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts +2 -0
  412. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts.map +1 -0
  413. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js +28 -0
  414. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
  415. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
  416. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
  417. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
  418. package/packages/pi-coding-agent/package.json +1 -1
  419. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +40 -1
  420. package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +40 -1
  421. package/packages/pi-coding-agent/src/core/agent-session.ts +102 -16
  422. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +6 -2
  423. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +18 -0
  424. package/packages/pi-coding-agent/src/core/compaction-threshold.test.ts +121 -0
  425. package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
  426. package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
  427. package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
  428. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +5 -3
  429. package/packages/pi-coding-agent/src/core/extensions/runner.ts +8 -5
  430. package/packages/pi-coding-agent/src/core/extensions/types.ts +63 -2
  431. package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
  432. package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
  433. package/packages/pi-coding-agent/src/core/sdk.ts +92 -4
  434. package/packages/pi-coding-agent/src/core/settings-manager.ts +39 -1
  435. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
  436. package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
  437. package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +22 -66
  438. package/packages/pi-coding-agent/src/core/tools/bash.ts +4 -1
  439. package/packages/pi-coding-agent/src/core/tools/edit.ts +13 -1
  440. package/packages/pi-coding-agent/src/core/tools/find.ts +15 -6
  441. package/packages/pi-coding-agent/src/core/tools/grep.ts +13 -3
  442. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +4 -1
  443. package/packages/pi-coding-agent/src/core/tools/index.ts +8 -0
  444. package/packages/pi-coding-agent/src/core/tools/ls.ts +11 -3
  445. package/packages/pi-coding-agent/src/core/tools/read.ts +4 -1
  446. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +11 -72
  447. package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +127 -0
  448. package/packages/pi-coding-agent/src/core/tools/tool-target.ts +48 -0
  449. package/packages/pi-coding-agent/src/core/tools/write.ts +14 -2
  450. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
  451. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +228 -7
  452. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
  453. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +10 -3
  454. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +43 -42
  455. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -14
  456. package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
  457. package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
  458. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
  459. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -1
  460. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +247 -94
  461. package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
  462. package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
  463. package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
  464. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +75 -0
  465. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +39 -8
  466. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +27 -3
  467. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +23 -0
  468. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +106 -1
  469. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +27 -26
  470. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +9 -6
  471. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
  472. package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +31 -0
  473. package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +3 -2
  474. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  475. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +14 -1
  476. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
  477. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
  478. package/packages/pi-tui/dist/overlay-layout.js +9 -6
  479. package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
  480. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  481. package/packages/pi-tui/dist/tui.js +18 -8
  482. package/packages/pi-tui/dist/tui.js.map +1 -1
  483. package/packages/pi-tui/package.json +1 -1
  484. package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -1
  485. package/packages/pi-tui/src/overlay-layout.ts +10 -7
  486. package/packages/pi-tui/src/tui.ts +20 -8
  487. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  488. package/packages/rpc-client/README.md +7 -0
  489. package/packages/rpc-client/package.json +1 -1
  490. package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
  491. package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
  492. package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
  493. package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
  494. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  495. package/pkg/dist/modes/interactive/theme/theme.js +105 -1
  496. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  497. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  498. package/pkg/dist/modes/interactive/theme/themes.js +27 -26
  499. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  500. package/pkg/package.json +1 -1
  501. package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
  502. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +42 -3
  503. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +67 -0
  504. package/src/resources/extensions/github-sync/sync.ts +8 -1
  505. package/src/resources/extensions/github-sync/tests/sync-source.test.ts +6 -18
  506. package/src/resources/extensions/gsd/auto/contracts.ts +19 -2
  507. package/src/resources/extensions/gsd/auto/loop-deps.ts +19 -16
  508. package/src/resources/extensions/gsd/auto/loop.ts +247 -25
  509. package/src/resources/extensions/gsd/auto/orchestrator.ts +52 -4
  510. package/src/resources/extensions/gsd/auto/phases.ts +512 -202
  511. package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
  512. package/src/resources/extensions/gsd/auto/run-unit.ts +97 -34
  513. package/src/resources/extensions/gsd/auto/session.ts +19 -1
  514. package/src/resources/extensions/gsd/auto/types.ts +3 -0
  515. package/src/resources/extensions/gsd/auto/unit-runner-events.ts +15 -0
  516. package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
  517. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +63 -1
  518. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +14 -1
  519. package/src/resources/extensions/gsd/auto-dashboard.ts +249 -182
  520. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
  521. package/src/resources/extensions/gsd/auto-dispatch.ts +31 -1
  522. package/src/resources/extensions/gsd/auto-post-unit.ts +131 -81
  523. package/src/resources/extensions/gsd/auto-prompts.ts +112 -15
  524. package/src/resources/extensions/gsd/auto-recovery.ts +54 -0
  525. package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
  526. package/src/resources/extensions/gsd/auto-start.ts +321 -21
  527. package/src/resources/extensions/gsd/auto-supervisor.ts +7 -0
  528. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +2 -2
  529. package/src/resources/extensions/gsd/auto-unit-closeout.ts +51 -0
  530. package/src/resources/extensions/gsd/auto-verification.ts +12 -6
  531. package/src/resources/extensions/gsd/auto-worktree.ts +267 -360
  532. package/src/resources/extensions/gsd/auto.ts +578 -126
  533. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +166 -12
  534. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +45 -37
  535. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +36 -10
  536. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +32 -19
  537. package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +5 -1
  538. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +7 -4
  539. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +6 -3
  540. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +1 -1
  541. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +384 -55
  542. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
  543. package/src/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.ts +4 -0
  544. package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
  545. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +19 -2
  546. package/src/resources/extensions/gsd/clean-root-preflight.ts +32 -7
  547. package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +4 -10
  548. package/src/resources/extensions/gsd/commands/handlers/ops.ts +4 -2
  549. package/src/resources/extensions/gsd/commands-config.ts +1 -1
  550. package/src/resources/extensions/gsd/commands-eval-review.ts +2 -2
  551. package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
  552. package/src/resources/extensions/gsd/context-budget.ts +44 -2
  553. package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
  554. package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
  555. package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
  556. package/src/resources/extensions/gsd/db-base-schema.ts +4 -2
  557. package/src/resources/extensions/gsd/db-migration-steps.ts +8 -0
  558. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
  559. package/src/resources/extensions/gsd/git-service.ts +89 -10
  560. package/src/resources/extensions/gsd/gsd-db.ts +50 -13
  561. package/src/resources/extensions/gsd/guided-flow.ts +148 -49
  562. package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
  563. package/src/resources/extensions/gsd/health-widget.ts +8 -9
  564. package/src/resources/extensions/gsd/init-wizard.ts +5 -1
  565. package/src/resources/extensions/gsd/journal.ts +2 -0
  566. package/src/resources/extensions/gsd/memory-store.ts +77 -12
  567. package/src/resources/extensions/gsd/migrate/command.ts +47 -1
  568. package/src/resources/extensions/gsd/migration-auto-check.ts +129 -0
  569. package/src/resources/extensions/gsd/native-git-bridge.ts +53 -19
  570. package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
  571. package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
  572. package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
  573. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
  574. package/src/resources/extensions/gsd/parallel-orchestrator.ts +13 -3
  575. package/src/resources/extensions/gsd/planning-path-scope.ts +35 -0
  576. package/src/resources/extensions/gsd/pre-execution-checks.ts +23 -0
  577. package/src/resources/extensions/gsd/preferences-types.ts +1 -1
  578. package/src/resources/extensions/gsd/prompt-loader.ts +27 -2
  579. package/src/resources/extensions/gsd/prompts/complete-milestone.md +22 -17
  580. package/src/resources/extensions/gsd/prompts/complete-slice.md +14 -12
  581. package/src/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
  582. package/src/resources/extensions/gsd/prompts/discuss.md +20 -2
  583. package/src/resources/extensions/gsd/prompts/execute-task.md +4 -2
  584. package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
  585. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  586. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
  587. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  588. package/src/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
  589. package/src/resources/extensions/gsd/quick.ts +37 -2
  590. package/src/resources/extensions/gsd/recovery-classification.ts +122 -0
  591. package/src/resources/extensions/gsd/slice-cadence.ts +49 -2
  592. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +23 -9
  593. package/src/resources/extensions/gsd/state-reconciliation.ts +57 -0
  594. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +59 -89
  595. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +47 -172
  596. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +0 -35
  597. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +134 -9
  598. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1125 -215
  599. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +80 -59
  600. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +119 -2
  601. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +3 -47
  602. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +363 -18
  603. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +175 -11
  604. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +54 -95
  605. package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +67 -26
  606. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +14 -1
  607. package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +32 -30
  608. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +16 -1
  609. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +32 -128
  610. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +20 -54
  611. package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +20 -30
  612. package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +17 -29
  613. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +160 -0
  614. package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +21 -39
  615. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +15 -24
  616. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +44 -29
  617. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
  618. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +39 -51
  619. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +159 -213
  620. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +15 -32
  621. package/src/resources/extensions/gsd/tests/browser-teardown.test.ts +0 -41
  622. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +15 -6
  623. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +34 -27
  624. package/src/resources/extensions/gsd/tests/cmux.test.ts +51 -53
  625. package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +39 -61
  626. package/src/resources/extensions/gsd/tests/commands-config.test.ts +26 -19
  627. package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +14 -1
  628. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
  629. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +140 -0
  630. package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
  631. package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +29 -33
  632. package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +45 -108
  633. package/src/resources/extensions/gsd/tests/context-budget.test.ts +10 -1
  634. package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
  635. package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +90 -31
  636. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
  637. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +46 -11
  638. package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +138 -0
  639. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +4 -68
  640. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +24 -11
  641. package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +14 -65
  642. package/src/resources/extensions/gsd/tests/discuss-tool-scoping.test.ts +44 -37
  643. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +100 -38
  644. package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +25 -15
  645. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
  646. package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +35 -17
  647. package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +16 -21
  648. package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +15 -82
  649. package/src/resources/extensions/gsd/tests/exec-history.test.ts +15 -0
  650. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +65 -0
  651. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +5 -2
  652. package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
  653. package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +151 -0
  654. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -20
  655. package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +18 -26
  656. package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
  657. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
  658. package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
  659. package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +9 -12
  660. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +40 -0
  661. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +4 -2
  662. package/src/resources/extensions/gsd/tests/integration/git-locale.test.ts +31 -20
  663. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +92 -0
  664. package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +0 -47
  665. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
  666. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +60 -202
  667. package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +13 -56
  668. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +248 -11
  669. package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
  670. package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
  671. package/src/resources/extensions/gsd/tests/lazy-pi-tui-import.test.ts +44 -6
  672. package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
  673. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +21 -35
  674. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +77 -12
  675. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
  676. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
  677. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +267 -0
  678. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +88 -98
  679. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +70 -278
  680. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
  681. package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +37 -30
  682. package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +32 -28
  683. package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
  684. package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
  685. package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -182
  686. package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +144 -0
  687. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
  688. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
  689. package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
  690. package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +24 -37
  691. package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +9 -24
  692. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +95 -75
  693. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +50 -0
  694. package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
  695. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +2 -2
  696. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +36 -22
  697. package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +36 -30
  698. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
  699. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +74 -4
  700. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +20 -22
  701. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +130 -32
  702. package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +18 -36
  703. package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +35 -73
  704. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +76 -138
  705. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -1
  706. package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +230 -0
  707. package/src/resources/extensions/gsd/tests/prompt-path-audit.test.ts +40 -0
  708. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +70 -106
  709. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +59 -161
  710. package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +33 -29
  711. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +22 -196
  712. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +23 -93
  713. package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
  714. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +50 -79
  715. package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +27 -13
  716. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +151 -251
  717. package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +41 -29
  718. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +58 -69
  719. package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +36 -164
  720. package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +57 -41
  721. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +91 -0
  722. package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +156 -0
  723. package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +96 -0
  724. package/src/resources/extensions/gsd/tests/session-model-override.test.ts +14 -9
  725. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +77 -0
  726. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +222 -0
  727. package/src/resources/extensions/gsd/tests/show-config-command.test.ts +44 -42
  728. package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
  729. package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +56 -24
  730. package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +51 -11
  731. package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +23 -0
  732. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +66 -50
  733. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +68 -107
  734. package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +115 -42
  735. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +21 -77
  736. package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +25 -116
  737. package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +21 -57
  738. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +29 -76
  739. package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +33 -24
  740. package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +39 -30
  741. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
  742. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +55 -0
  743. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +65 -56
  744. package/src/resources/extensions/gsd/tests/status-db-open.test.ts +35 -40
  745. package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +48 -46
  746. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +14 -102
  747. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +78 -232
  748. package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +32 -35
  749. package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +112 -0
  750. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +7 -9
  751. package/src/resources/extensions/gsd/tests/token-profile.test.ts +84 -309
  752. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +295 -0
  753. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +134 -341
  754. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +330 -0
  755. package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
  756. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +136 -4
  757. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +8 -25
  758. package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +80 -1
  759. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +37 -0
  760. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -99
  761. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +43 -36
  762. package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
  763. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -444
  764. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +142 -0
  765. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +44 -189
  766. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -57
  767. package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
  768. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +3 -0
  769. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +32 -1
  770. package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +21 -44
  771. package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +27 -26
  772. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +14 -13
  773. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +197 -78
  774. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +888 -0
  775. package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -18
  776. package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +22 -19
  777. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +66 -0
  778. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +327 -0
  779. package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +120 -0
  780. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
  781. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
  782. package/src/resources/extensions/gsd/tests/write-gate.test.ts +40 -1
  783. package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -13
  784. package/src/resources/extensions/gsd/tool-contract.ts +82 -0
  785. package/src/resources/extensions/gsd/tools/complete-milestone.ts +14 -15
  786. package/src/resources/extensions/gsd/tools/complete-task.ts +1 -1
  787. package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +25 -0
  788. package/src/resources/extensions/gsd/tools/exec-search-tool.ts +7 -7
  789. package/src/resources/extensions/gsd/tools/exec-tool.ts +4 -23
  790. package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -0
  791. package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -0
  792. package/src/resources/extensions/gsd/tools/plan-task.ts +10 -0
  793. package/src/resources/extensions/gsd/tools/resume-tool.ts +7 -7
  794. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +1 -1
  795. package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
  796. package/src/resources/extensions/gsd/unit-context-composer.ts +19 -4
  797. package/src/resources/extensions/gsd/unit-runtime.ts +25 -0
  798. package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
  799. package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
  800. package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
  801. package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
  802. package/src/resources/extensions/gsd/worktree-lifecycle.ts +1882 -0
  803. package/src/resources/extensions/gsd/worktree-safety.ts +282 -0
  804. package/src/resources/extensions/gsd/worktree-state-projection.ts +404 -0
  805. package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
  806. package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +86 -40
  807. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
  808. package/dist/resources/extensions/gsd/worktree-resolver.js +0 -733
  809. package/dist/web/standalone/.next/static/chunks/8336.631939fb583761fa.js +0 -10
  810. package/src/resources/extensions/gsd/tests/sync-layer-scope.test.ts +0 -434
  811. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1247
  812. package/src/resources/extensions/gsd/worktree-resolver.ts +0 -909
  813. /package/dist/web/standalone/.next/static/{yTuahMMuJzVnsov5PreWl → F5x9E6H9k_52fjqyql93y}/_buildManifest.js +0 -0
  814. /package/dist/web/standalone/.next/static/{yTuahMMuJzVnsov5PreWl → F5x9E6H9k_52fjqyql93y}/_ssgManifest.js +0 -0
@@ -102,6 +102,7 @@ describe("#4243 — abort() must run before _disconnectFromAgent()", () => {
102
102
  });
103
103
  it("newSession() invokes abort() before _disconnectFromAgent()", async () => {
104
104
  const session = await createSession();
105
+ session.agent.state.isStreaming = true;
105
106
  const order = recordCallOrder(session, ["abort", "_disconnectFromAgent"]);
106
107
  const ok = await session.newSession();
107
108
  assert.equal(ok, true);
@@ -111,6 +112,36 @@ describe("#4243 — abort() must run before _disconnectFromAgent()", () => {
111
112
  assert.ok(disconnectIdx >= 0, `newSession should call _disconnectFromAgent(); order=${order.join(",")}`);
112
113
  assert.ok(abortIdx < disconnectIdx, `abort() must run before _disconnectFromAgent(); order=${order.join(",")}`);
113
114
  });
115
+ it("newSession() waits instead of aborting when the prior turn is idle but not settled", async () => {
116
+ const session = await createSession();
117
+ const order = [];
118
+ let releaseIdle;
119
+ const idle = new Promise((resolve) => {
120
+ releaseIdle = resolve;
121
+ });
122
+ session.agent.state.isStreaming = false;
123
+ session.agent.waitForIdle = () => {
124
+ order.push("waitForIdle");
125
+ return idle;
126
+ };
127
+ session.abort = async () => {
128
+ order.push("abort");
129
+ };
130
+ const originalDisconnect = session._disconnectFromAgent.bind(session);
131
+ session._disconnectFromAgent = () => {
132
+ order.push("_disconnectFromAgent");
133
+ originalDisconnect();
134
+ };
135
+ const pendingNewSession = session.newSession();
136
+ await Promise.resolve();
137
+ assert.deepEqual(order, ["waitForIdle"]);
138
+ assert.equal(order.includes("abort"), false);
139
+ releaseIdle();
140
+ const ok = await pendingNewSession;
141
+ assert.equal(ok, true);
142
+ assert.deepEqual(order, ["waitForIdle", "_disconnectFromAgent"]);
143
+ assert.equal(order.includes("abort"), false);
144
+ });
114
145
  it("newSession() waits instead of aborting while agent_end processing is still streaming", async () => {
115
146
  const session = await createSession();
116
147
  const order = [];
@@ -166,20 +197,23 @@ describe("#4243 — abort() must run before _disconnectFromAgent()", () => {
166
197
  it("abort() marks synthetic agent_end processing while extension handlers run", async () => {
167
198
  const session = await createSession();
168
199
  const observedProcessingStates = [];
200
+ const observedOrigins = [];
169
201
  session.agent.abort = () => { };
170
202
  session.agent.waitForIdle = async () => { };
171
203
  session._extensionRunner = {
172
204
  emit: async (event) => {
173
205
  if (event.type === "agent_end") {
174
206
  observedProcessingStates.push(session._processingAgentEnd);
207
+ observedOrigins.push(event.abortOrigin);
175
208
  }
176
209
  },
177
210
  emitStop: async () => {
178
211
  observedProcessingStates.push(session._processingAgentEnd);
179
212
  },
180
213
  };
181
- await session.abort();
214
+ await session.abort({ origin: "session-transition" });
182
215
  assert.deepEqual(observedProcessingStates, [true, true]);
216
+ assert.deepEqual(observedOrigins, ["session-transition"]);
183
217
  assert.equal(session._processingAgentEnd, false);
184
218
  });
185
219
  it("newSession() during agent_end preserves the previous session for resume", async () => {
@@ -368,6 +402,7 @@ describe("#4243 — abort() must run before _disconnectFromAgent()", () => {
368
402
  await session.newSession();
369
403
  const sessionFile = session.sessionFile;
370
404
  assert.ok(typeof sessionFile === "string" && sessionFile.length > 0, "need a session file to switch to");
405
+ session.agent.state.isStreaming = true;
371
406
  const order = recordCallOrder(session, ["abort", "_disconnectFromAgent"]);
372
407
  const ok = await session.switchSession(sessionFile);
373
408
  assert.equal(ok, true);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-abort-order.test.js","sourceRoot":"","sources":["../../src/core/agent-session-abort-order.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Regression test for #4243 — abort() must be called BEFORE\n// _disconnectFromAgent() inside newSession() and switchSession() so that\n// message_end/agent_end events (and the #4216 finalization code) fire\n// before we unsubscribe from the event bus.\n//\n// Verified behaviourally: we construct a real AgentSession, wrap `abort`\n// and `_disconnectFromAgent` with call-order recording, trigger each\n// session-transition method, and assert the observed call order.\n\nimport assert from \"node:assert/strict\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nasync function createSession(opts: { persistSessions?: boolean } = {}): Promise<AgentSession> {\n\tconst agentDir = join(testDir, \"agent-home\");\n\tconst authStorage = AuthStorage.inMemory({});\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst settingsManager = SettingsManager.inMemory();\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd: testDir,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tnoExtensions: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t});\n\tawait resourceLoader.reload();\n\n\t// switchSession() needs a sessionFile; in-memory manager returns undefined.\n\t// Use file-backed manager when the test needs to resume.\n\tconst sessionManager = opts.persistSessions\n\t\t? SessionManager.create(testDir, join(testDir, \"sessions\"))\n\t\t: SessionManager.inMemory(testDir);\n\n\treturn new AgentSession({\n\t\tagent: new Agent(),\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd: testDir,\n\t\tresourceLoader,\n\t\tmodelRegistry,\n\t});\n}\n\n/**\n * Wrap two methods on the same object so their call order is recorded.\n * Returns the recording array — assertions use index lookups.\n */\nfunction recordCallOrder<O extends object>(\n\ttarget: O,\n\tmethods: Array<keyof O>,\n): string[] {\n\tconst order: string[] = [];\n\tfor (const method of methods) {\n\t\tconst name = String(method);\n\t\tconst original = (target as any)[name] as (...args: unknown[]) => unknown;\n\t\tif (typeof original !== \"function\") {\n\t\t\tthrow new Error(`recordCallOrder: ${name} is not a function on target`);\n\t\t}\n\t\t(target as any)[name] = function (this: O, ...args: unknown[]) {\n\t\t\torder.push(name);\n\t\t\treturn original.apply(this, args);\n\t\t};\n\t}\n\treturn order;\n}\n\nfunction makeAssistantMessage(text: string) {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [{ type: \"text\", text }],\n\t\tusage: {\n\t\t\tinput: 1,\n\t\t\toutput: 1,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 2,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t} as any;\n}\n\nfunction installAgentEndSessionTransition(\n\tsession: AgentSession,\n\ttransition: () => Promise<unknown>,\n): void {\n\t(session as any)._extensionRunner = {\n\t\thasHandlers: () => false,\n\t\temit: async (event: any) => {\n\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\tawait transition();\n\t\t\t}\n\t\t},\n\t\temitStop: async () => {},\n\t};\n}\n\ndescribe(\"#4243 — abort() must run before _disconnectFromAgent()\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"agent-session-abort-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tit(\"newSession() invokes abort() before _disconnectFromAgent()\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order = recordCallOrder(session as any, [\"abort\", \"_disconnectFromAgent\"]);\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tconst abortIdx = order.indexOf(\"abort\");\n\t\tconst disconnectIdx = order.indexOf(\"_disconnectFromAgent\");\n\t\tassert.ok(abortIdx >= 0, `newSession should call abort(); order=${order.join(\",\")}`);\n\t\tassert.ok(\n\t\t\tdisconnectIdx >= 0,\n\t\t\t`newSession should call _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t\tassert.ok(\n\t\t\tabortIdx < disconnectIdx,\n\t\t\t`abort() must run before _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t});\n\n\tit(\"newSession() waits instead of aborting while agent_end processing is still streaming\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = true;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingNewSession = session.newSession();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\n\t\treleaseIdle();\n\t\tconst ok = await pendingNewSession;\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"newSession() waits during agent_end processing even once already idle\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = false;\n\t\t(session as any).agent.waitForIdle = async () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"abort() marks synthetic agent_end processing while extension handlers run\", async () => {\n\t\tconst session = await createSession();\n\t\tconst observedProcessingStates: boolean[] = [];\n\n\t\t(session as any).agent.abort = () => {};\n\t\t(session as any).agent.waitForIdle = async () => {};\n\t\t(session as any)._extensionRunner = {\n\t\t\temit: async (event: any) => {\n\t\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\t\tobservedProcessingStates.push((session as any)._processingAgentEnd);\n\t\t\t\t}\n\t\t\t},\n\t\t\temitStop: async () => {\n\t\t\t\tobservedProcessingStates.push((session as any)._processingAgentEnd);\n\t\t\t},\n\t\t};\n\n\t\tawait session.abort();\n\n\t\tassert.deepEqual(observedProcessingStates, [true, true]);\n\t\tassert.equal((session as any)._processingAgentEnd, false);\n\t});\n\n\tit(\"newSession() during agent_end preserves the previous session for resume\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"persisted prompt\" }],\n\t\t} as any);\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: \"persisted response\" }],\n\t\t\tusage: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 1,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 2,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t} as any);\n\t\tsession.agent.replaceMessages(session.sessionManager.buildSessionContext().messages);\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.waitForIdle = async () => {};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.notEqual(session.sessionFile, previousSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\t(session as any)._processingAgentEnd = false;\n\t\tconst switched = await session.switchSession(previousSessionFile);\n\t\tassert.equal(switched, true);\n\n\t\tconst restoredText = session.messages\n\t\t\t.flatMap((message: any) => message.content ?? [])\n\t\t\t.filter((part: any) => part.type === \"text\")\n\t\t\t.map((part: any) => part.text);\n\t\tassert.deepEqual(restoredText, [\"persisted prompt\", \"persisted response\"]);\n\t});\n\n\tit(\"switchSession() waits instead of aborting while agent_end processing is still streaming\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"switch persisted prompt\" }],\n\t\t} as any);\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: \"switch persisted response\" }],\n\t\t\tusage: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 1,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 2,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t} as any);\n\t\tsession.agent.replaceMessages(session.sessionManager.buildSessionContext().messages);\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tconst activeSessionFile = session.sessionFile;\n\t\tassert.ok(activeSessionFile, \"need an active session file\");\n\t\tassert.notEqual(activeSessionFile, previousSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = true;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingSwitch = session.switchSession(previousSessionFile);\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t\tassert.equal(session.sessionFile, activeSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\treleaseIdle();\n\t\tconst switched = await pendingSwitch;\n\t\tassert.equal(switched, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t\tassert.equal(session.sessionFile, previousSessionFile);\n\n\t\tconst restoredText = session.messages\n\t\t\t.flatMap((message: any) => message.content ?? [])\n\t\t\t.filter((part: any) => part.type === \"text\")\n\t\t\t.map((part: any) => part.text);\n\t\tassert.deepEqual(restoredText, [\"switch persisted prompt\", \"switch persisted response\"]);\n\t});\n\n\tit(\"newSession() during agent_end skips stale post-handlers after the transition starts\", async () => {\n\t\tconst session = await createSession();\n\t\tconst assistantMessage = makeAssistantMessage(\"old response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\t\tinstallAgentEndSessionTransition(session, () => session.newSession());\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 0);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t\tassert.equal((session as any)._sessionSwitchPending, false);\n\t\tassert.equal((session as any)._sessionTransitionStartedDuringAgentEnd, false);\n\t});\n\n\tit(\"switchSession() during agent_end skips stale post-handlers after the transition starts\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.notEqual(session.sessionFile, previousSessionFile);\n\n\t\tconst assistantMessage = makeAssistantMessage(\"old switch response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\t\tinstallAgentEndSessionTransition(session, () => session.switchSession(previousSessionFile));\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(session.sessionFile, previousSessionFile);\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 0);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t\tassert.equal((session as any)._sessionSwitchPending, false);\n\t\tassert.equal((session as any)._sessionTransitionStartedDuringAgentEnd, false);\n\t});\n\n\tit(\"agent_end post-handlers bail while a session switch is pending\", async () => {\n\t\tconst session = await createSession();\n\t\tconst assistantMessage = makeAssistantMessage(\"old pending response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._sessionSwitchPending = true;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 1);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t});\n\n\tit(\"switchSession() invokes abort() before _disconnectFromAgent()\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\t// Seed a session file to switch to (switchSession reads from the session manager).\n\t\tawait session.newSession();\n\t\tconst sessionFile = session.sessionFile;\n\t\tassert.ok(typeof sessionFile === \"string\" && sessionFile.length > 0, \"need a session file to switch to\");\n\n\t\tconst order = recordCallOrder(session as any, [\"abort\", \"_disconnectFromAgent\"]);\n\n\t\tconst ok = await session.switchSession(sessionFile);\n\t\tassert.equal(ok, true);\n\n\t\tconst abortIdx = order.indexOf(\"abort\");\n\t\tconst disconnectIdx = order.indexOf(\"_disconnectFromAgent\");\n\t\tassert.ok(abortIdx >= 0, `switchSession should call abort(); order=${order.join(\",\")}`);\n\t\tassert.ok(\n\t\t\tdisconnectIdx >= 0,\n\t\t\t`switchSession should call _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t\tassert.ok(\n\t\t\tabortIdx < disconnectIdx,\n\t\t\t`abort() must run before _disconnectFromAgent() in switchSession; order=${order.join(\",\")}`,\n\t\t);\n\t});\n});\n"]}
1
+ {"version":3,"file":"agent-session-abort-order.test.js","sourceRoot":"","sources":["../../src/core/agent-session-abort-order.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Regression test for #4243 — abort() must be called BEFORE\n// _disconnectFromAgent() inside newSession() and switchSession() so that\n// message_end/agent_end events (and the #4216 finalization code) fire\n// before we unsubscribe from the event bus.\n//\n// Verified behaviourally: we construct a real AgentSession, wrap `abort`\n// and `_disconnectFromAgent` with call-order recording, trigger each\n// session-transition method, and assert the observed call order.\n\nimport assert from \"node:assert/strict\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nasync function createSession(opts: { persistSessions?: boolean } = {}): Promise<AgentSession> {\n\tconst agentDir = join(testDir, \"agent-home\");\n\tconst authStorage = AuthStorage.inMemory({});\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst settingsManager = SettingsManager.inMemory();\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd: testDir,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tnoExtensions: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t});\n\tawait resourceLoader.reload();\n\n\t// switchSession() needs a sessionFile; in-memory manager returns undefined.\n\t// Use file-backed manager when the test needs to resume.\n\tconst sessionManager = opts.persistSessions\n\t\t? SessionManager.create(testDir, join(testDir, \"sessions\"))\n\t\t: SessionManager.inMemory(testDir);\n\n\treturn new AgentSession({\n\t\tagent: new Agent(),\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd: testDir,\n\t\tresourceLoader,\n\t\tmodelRegistry,\n\t});\n}\n\n/**\n * Wrap two methods on the same object so their call order is recorded.\n * Returns the recording array — assertions use index lookups.\n */\nfunction recordCallOrder<O extends object>(\n\ttarget: O,\n\tmethods: Array<keyof O>,\n): string[] {\n\tconst order: string[] = [];\n\tfor (const method of methods) {\n\t\tconst name = String(method);\n\t\tconst original = (target as any)[name] as (...args: unknown[]) => unknown;\n\t\tif (typeof original !== \"function\") {\n\t\t\tthrow new Error(`recordCallOrder: ${name} is not a function on target`);\n\t\t}\n\t\t(target as any)[name] = function (this: O, ...args: unknown[]) {\n\t\t\torder.push(name);\n\t\t\treturn original.apply(this, args);\n\t\t};\n\t}\n\treturn order;\n}\n\nfunction makeAssistantMessage(text: string) {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [{ type: \"text\", text }],\n\t\tusage: {\n\t\t\tinput: 1,\n\t\t\toutput: 1,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 2,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t} as any;\n}\n\nfunction installAgentEndSessionTransition(\n\tsession: AgentSession,\n\ttransition: () => Promise<unknown>,\n): void {\n\t(session as any)._extensionRunner = {\n\t\thasHandlers: () => false,\n\t\temit: async (event: any) => {\n\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\tawait transition();\n\t\t\t}\n\t\t},\n\t\temitStop: async () => {},\n\t};\n}\n\ndescribe(\"#4243 — abort() must run before _disconnectFromAgent()\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"agent-session-abort-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tit(\"newSession() invokes abort() before _disconnectFromAgent()\", async () => {\n\t\tconst session = await createSession();\n\t\t(session as any).agent.state.isStreaming = true;\n\t\tconst order = recordCallOrder(session as any, [\"abort\", \"_disconnectFromAgent\"]);\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tconst abortIdx = order.indexOf(\"abort\");\n\t\tconst disconnectIdx = order.indexOf(\"_disconnectFromAgent\");\n\t\tassert.ok(abortIdx >= 0, `newSession should call abort(); order=${order.join(\",\")}`);\n\t\tassert.ok(\n\t\t\tdisconnectIdx >= 0,\n\t\t\t`newSession should call _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t\tassert.ok(\n\t\t\tabortIdx < disconnectIdx,\n\t\t\t`abort() must run before _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t});\n\n\tit(\"newSession() waits instead of aborting when the prior turn is idle but not settled\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any).agent.state.isStreaming = false;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingNewSession = session.newSession();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\n\t\treleaseIdle();\n\t\tconst ok = await pendingNewSession;\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"newSession() waits instead of aborting while agent_end processing is still streaming\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = true;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingNewSession = session.newSession();\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\n\t\treleaseIdle();\n\t\tconst ok = await pendingNewSession;\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"newSession() waits during agent_end processing even once already idle\", async () => {\n\t\tconst session = await createSession();\n\t\tconst order: string[] = [];\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = false;\n\t\t(session as any).agent.waitForIdle = async () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t});\n\n\tit(\"abort() marks synthetic agent_end processing while extension handlers run\", async () => {\n\t\tconst session = await createSession();\n\t\tconst observedProcessingStates: boolean[] = [];\n\t\tconst observedOrigins: unknown[] = [];\n\n\t\t(session as any).agent.abort = () => {};\n\t\t(session as any).agent.waitForIdle = async () => {};\n\t\t(session as any)._extensionRunner = {\n\t\t\temit: async (event: any) => {\n\t\t\t\tif (event.type === \"agent_end\") {\n\t\t\t\t\tobservedProcessingStates.push((session as any)._processingAgentEnd);\n\t\t\t\t\tobservedOrigins.push(event.abortOrigin);\n\t\t\t\t}\n\t\t\t},\n\t\t\temitStop: async () => {\n\t\t\t\tobservedProcessingStates.push((session as any)._processingAgentEnd);\n\t\t\t},\n\t\t};\n\n\t\tawait session.abort({ origin: \"session-transition\" });\n\n\t\tassert.deepEqual(observedProcessingStates, [true, true]);\n\t\tassert.deepEqual(observedOrigins, [\"session-transition\"]);\n\t\tassert.equal((session as any)._processingAgentEnd, false);\n\t});\n\n\tit(\"newSession() during agent_end preserves the previous session for resume\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"persisted prompt\" }],\n\t\t} as any);\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: \"persisted response\" }],\n\t\t\tusage: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 1,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 2,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t} as any);\n\t\tsession.agent.replaceMessages(session.sessionManager.buildSessionContext().messages);\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.waitForIdle = async () => {};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.notEqual(session.sessionFile, previousSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\t(session as any)._processingAgentEnd = false;\n\t\tconst switched = await session.switchSession(previousSessionFile);\n\t\tassert.equal(switched, true);\n\n\t\tconst restoredText = session.messages\n\t\t\t.flatMap((message: any) => message.content ?? [])\n\t\t\t.filter((part: any) => part.type === \"text\")\n\t\t\t.map((part: any) => part.text);\n\t\tassert.deepEqual(restoredText, [\"persisted prompt\", \"persisted response\"]);\n\t});\n\n\tit(\"switchSession() waits instead of aborting while agent_end processing is still streaming\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text: \"switch persisted prompt\" }],\n\t\t} as any);\n\t\tsession.sessionManager.appendMessage({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: [{ type: \"text\", text: \"switch persisted response\" }],\n\t\t\tusage: {\n\t\t\t\tinput: 1,\n\t\t\t\toutput: 1,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 2,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t},\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: Date.now(),\n\t\t} as any);\n\t\tsession.agent.replaceMessages(session.sessionManager.buildSessionContext().messages);\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tconst activeSessionFile = session.sessionFile;\n\t\tassert.ok(activeSessionFile, \"need an active session file\");\n\t\tassert.notEqual(activeSessionFile, previousSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\tconst order: string[] = [];\n\t\tlet releaseIdle!: () => void;\n\t\tconst idle = new Promise<void>((resolve) => {\n\t\t\treleaseIdle = resolve;\n\t\t});\n\n\t\t(session as any)._processingAgentEnd = true;\n\t\t(session as any).agent.state.isStreaming = true;\n\t\t(session as any).agent.waitForIdle = () => {\n\t\t\torder.push(\"waitForIdle\");\n\t\t\treturn idle;\n\t\t};\n\t\t(session as any).abort = async () => {\n\t\t\torder.push(\"abort\");\n\t\t};\n\t\tconst originalDisconnect = (session as any)._disconnectFromAgent.bind(session);\n\t\t(session as any)._disconnectFromAgent = () => {\n\t\t\torder.push(\"_disconnectFromAgent\");\n\t\t\toriginalDisconnect();\n\t\t};\n\n\t\tconst pendingSwitch = session.switchSession(previousSessionFile);\n\t\tawait Promise.resolve();\n\t\tassert.deepEqual(order, [\"waitForIdle\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t\tassert.equal(session.sessionFile, activeSessionFile);\n\t\tassert.deepEqual(session.messages, []);\n\n\t\treleaseIdle();\n\t\tconst switched = await pendingSwitch;\n\t\tassert.equal(switched, true);\n\t\tassert.deepEqual(order, [\"waitForIdle\", \"_disconnectFromAgent\"]);\n\t\tassert.equal(order.includes(\"abort\"), false);\n\t\tassert.equal(session.sessionFile, previousSessionFile);\n\n\t\tconst restoredText = session.messages\n\t\t\t.flatMap((message: any) => message.content ?? [])\n\t\t\t.filter((part: any) => part.type === \"text\")\n\t\t\t.map((part: any) => part.text);\n\t\tassert.deepEqual(restoredText, [\"switch persisted prompt\", \"switch persisted response\"]);\n\t});\n\n\tit(\"newSession() during agent_end skips stale post-handlers after the transition starts\", async () => {\n\t\tconst session = await createSession();\n\t\tconst assistantMessage = makeAssistantMessage(\"old response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\t\tinstallAgentEndSessionTransition(session, () => session.newSession());\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 0);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t\tassert.equal((session as any)._sessionSwitchPending, false);\n\t\tassert.equal((session as any)._sessionTransitionStartedDuringAgentEnd, false);\n\t});\n\n\tit(\"switchSession() during agent_end skips stale post-handlers after the transition starts\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\tconst previousSessionFile = session.sessionFile;\n\t\tassert.ok(previousSessionFile, \"need a persisted session file\");\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\t\tassert.notEqual(session.sessionFile, previousSessionFile);\n\n\t\tconst assistantMessage = makeAssistantMessage(\"old switch response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\t\tinstallAgentEndSessionTransition(session, () => session.switchSession(previousSessionFile));\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(session.sessionFile, previousSessionFile);\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 0);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t\tassert.equal((session as any)._sessionSwitchPending, false);\n\t\tassert.equal((session as any)._sessionTransitionStartedDuringAgentEnd, false);\n\t});\n\n\tit(\"agent_end post-handlers bail while a session switch is pending\", async () => {\n\t\tconst session = await createSession();\n\t\tconst assistantMessage = makeAssistantMessage(\"old pending response\");\n\t\tlet compactionChecks = 0;\n\t\tlet listenerAgentEnds = 0;\n\n\t\t(session as any)._lastAssistantMessage = assistantMessage;\n\t\t(session as any)._sessionSwitchPending = true;\n\t\t(session as any)._compactionOrchestrator.checkCompaction = async () => {\n\t\t\tcompactionChecks++;\n\t\t};\n\t\tsession.subscribe((event: any) => {\n\t\t\tif (event.type === \"agent_end\") listenerAgentEnds++;\n\t\t});\n\n\t\tawait (session as any)._processAgentEvent({\n\t\t\ttype: \"agent_end\",\n\t\t\tmessages: [assistantMessage],\n\t\t});\n\n\t\tassert.equal(compactionChecks, 0);\n\t\tassert.equal(listenerAgentEnds, 1);\n\t\tassert.equal((session as any)._lastAssistantMessage, undefined);\n\t});\n\n\tit(\"switchSession() invokes abort() before _disconnectFromAgent()\", async () => {\n\t\tconst session = await createSession({ persistSessions: true });\n\t\t// Seed a session file to switch to (switchSession reads from the session manager).\n\t\tawait session.newSession();\n\t\tconst sessionFile = session.sessionFile;\n\t\tassert.ok(typeof sessionFile === \"string\" && sessionFile.length > 0, \"need a session file to switch to\");\n\n\t\t(session as any).agent.state.isStreaming = true;\n\t\tconst order = recordCallOrder(session as any, [\"abort\", \"_disconnectFromAgent\"]);\n\n\t\tconst ok = await session.switchSession(sessionFile);\n\t\tassert.equal(ok, true);\n\n\t\tconst abortIdx = order.indexOf(\"abort\");\n\t\tconst disconnectIdx = order.indexOf(\"_disconnectFromAgent\");\n\t\tassert.ok(abortIdx >= 0, `switchSession should call abort(); order=${order.join(\",\")}`);\n\t\tassert.ok(\n\t\t\tdisconnectIdx >= 0,\n\t\t\t`switchSession should call _disconnectFromAgent(); order=${order.join(\",\")}`,\n\t\t);\n\t\tassert.ok(\n\t\t\tabortIdx < disconnectIdx,\n\t\t\t`abort() must run before _disconnectFromAgent() in switchSession; order=${order.join(\",\")}`,\n\t\t);\n\t});\n});\n"]}
@@ -1,3 +1,4 @@
1
+ // GSD2 - Agent session workspace-root refresh regression tests
1
2
  // Regression test for #3616: newSession() must restore the full tool set
2
3
  // when cwd is unchanged.
3
4
  //
@@ -22,7 +23,7 @@ import { DefaultResourceLoader } from "./resource-loader.js";
22
23
  import { SessionManager } from "./session-manager.js";
23
24
  import { SettingsManager } from "./settings-manager.js";
24
25
  let testDir;
25
- async function createSession() {
26
+ async function createSession(options = {}) {
26
27
  const agentDir = join(testDir, "agent-home");
27
28
  const authStorage = AuthStorage.inMemory({});
28
29
  const modelRegistry = new ModelRegistry(authStorage, join(agentDir, "models.json"));
@@ -43,6 +44,7 @@ async function createSession() {
43
44
  cwd: testDir,
44
45
  resourceLoader,
45
46
  modelRegistry,
47
+ workspaceRootRef: options.workspaceRootRef,
46
48
  });
47
49
  }
48
50
  describe("#3616 — newSession() restores narrowed tool set when cwd unchanged", () => {
@@ -102,5 +104,32 @@ describe("#3616 — newSession() restores narrowed tool set when cwd unchanged",
102
104
  assert.ok(buildRuntimeCalled, "cwd-changed branch must rebuild the tool runtime");
103
105
  assert.ok(buildRuntimeIncludedAll, "cwd-changed branch must rebuild with includeAllExtensionTools: true");
104
106
  });
107
+ it("uses explicit workspaceRoot option instead of process.cwd() when rebuilding runtime", async () => {
108
+ const session = await createSession();
109
+ const explicitWorkspaceRoot = mkdtempSync(join(testDir, "explicit-workspace-"));
110
+ session._cwd = process.cwd();
111
+ let buildRuntimeCalled = false;
112
+ let capturedBuildOptions;
113
+ const originalBuild = session._buildRuntime.bind(session);
114
+ session._buildRuntime = (options) => {
115
+ buildRuntimeCalled = true;
116
+ capturedBuildOptions = options;
117
+ return originalBuild(options);
118
+ };
119
+ const ok = await session.newSession({ workspaceRoot: explicitWorkspaceRoot });
120
+ assert.equal(ok, true);
121
+ assert.equal(session._cwd, explicitWorkspaceRoot);
122
+ assert.ok(buildRuntimeCalled, "explicit workspace root differing from prior root must rebuild runtime");
123
+ assert.strictEqual(capturedBuildOptions?.includeAllExtensionTools, true, "explicit workspaceRoot rebuild must pass includeAllExtensionTools: true");
124
+ });
125
+ it("updates provider workspace root ref when newSession uses explicit workspaceRoot", async () => {
126
+ const workspaceRootRef = { current: "" };
127
+ const session = await createSession({ workspaceRootRef });
128
+ const explicitWorkspaceRoot = mkdtempSync(join(testDir, "provider-workspace-"));
129
+ assert.equal(workspaceRootRef.current, testDir);
130
+ const ok = await session.newSession({ workspaceRoot: explicitWorkspaceRoot });
131
+ assert.equal(ok, true);
132
+ assert.equal(workspaceRootRef.current, explicitWorkspaceRoot);
133
+ });
105
134
  });
106
135
  //# sourceMappingURL=agent-session-tool-refresh.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-tool-refresh.test.js","sourceRoot":"","sources":["../../src/core/agent-session-tool-refresh.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Regression test for #3616: newSession() must restore the full tool set\n// when cwd is unchanged.\n//\n// The bug: extensions may narrow the active tool list via setActiveTools()\n// during a session. Without a refresh in the else branch of newSession(),\n// the narrowed set persists into the next session — breaking auto-mode\n// subagent sessions that expect a full tool palette.\n//\n// Verified behaviourally: construct an AgentSession, wrap _refreshToolRegistry\n// to record its args, call newSession() with cwd unchanged, and assert that\n// a refresh was requested with includeAllExtensionTools: true.\n\nimport assert from \"node:assert/strict\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nasync function createSession(): Promise<AgentSession> {\n\tconst agentDir = join(testDir, \"agent-home\");\n\tconst authStorage = AuthStorage.inMemory({});\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst settingsManager = SettingsManager.inMemory();\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd: testDir,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tnoExtensions: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t});\n\tawait resourceLoader.reload();\n\n\treturn new AgentSession({\n\t\tagent: new Agent(),\n\t\tsessionManager: SessionManager.inMemory(testDir),\n\t\tsettingsManager,\n\t\tcwd: testDir,\n\t\tresourceLoader,\n\t\tmodelRegistry,\n\t});\n}\n\ndescribe(\"#3616 — newSession() restores narrowed tool set when cwd unchanged\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"agent-session-tool-refresh-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tit(\"calls _refreshToolRegistry with includeAllExtensionTools: true when cwd unchanged\", async () => {\n\t\tconst session = await createSession();\n\t\t// Pin _cwd so newSession()'s `process.cwd()` branch takes the\n\t\t// cwd-unchanged path. The production code compares `this._cwd !==\n\t\t// previousCwd`; we force equality by setting _cwd to current cwd.\n\t\t(session as any)._cwd = process.cwd();\n\n\t\tconst refreshCalls: Array<{ includeAllExtensionTools?: boolean }> = [];\n\t\tconst originalRefresh = (session as any)._refreshToolRegistry.bind(session);\n\t\t(session as any)._refreshToolRegistry = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\trefreshCalls.push(options ?? {});\n\t\t\treturn originalRefresh(options);\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tassert.ok(\n\t\t\trefreshCalls.length > 0,\n\t\t\t\"newSession() should invoke _refreshToolRegistry in the cwd-unchanged branch\",\n\t\t);\n\t\tassert.ok(\n\t\t\trefreshCalls.some((o) => o.includeAllExtensionTools === true),\n\t\t\t`at least one _refreshToolRegistry call must pass includeAllExtensionTools: true; observed=${JSON.stringify(refreshCalls)}`,\n\t\t);\n\t});\n\n\tit(\"agent.reset() does not clear _state.tools (tools persist across reset)\", () => {\n\t\t// Structural invariant protecting #3616: if reset() starts clearing\n\t\t// tools, newSession()'s refresh becomes the only defense against loss.\n\t\t// Assertion is behavioural — seed tools, call reset(), observe survival.\n\t\tconst agent = new Agent();\n\t\tconst tool = {\n\t\t\tname: \"test_tool\",\n\t\t\tdescription: \"x\",\n\t\t\tschema: { type: \"object\", properties: {}, additionalProperties: false } as any,\n\t\t\texecute: async () => ({ content: [] }),\n\t\t};\n\t\t(agent as any)._state.tools = [tool];\n\t\tagent.reset();\n\t\tassert.deepEqual(\n\t\t\t(agent as any)._state.tools,\n\t\t\t[tool],\n\t\t\t\"Agent.reset() must preserve _state.tools\",\n\t\t);\n\t});\n\n\tit(\"takes the cwd-changed branch (rebuilds runtime) when cwd differs\", async () => {\n\t\tconst session = await createSession();\n\t\t// Force the cwd-changed branch: set _cwd to something that won't equal process.cwd().\n\t\t(session as any)._cwd = join(testDir, \"some\", \"other\", \"cwd\");\n\n\t\tlet buildRuntimeCalled = false;\n\t\tlet buildRuntimeIncludedAll = false;\n\t\tconst originalBuild = (session as any)._buildRuntime.bind(session);\n\t\t(session as any)._buildRuntime = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\tbuildRuntimeCalled = true;\n\t\t\tif (options?.includeAllExtensionTools === true) buildRuntimeIncludedAll = true;\n\t\t\treturn originalBuild(options);\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tassert.ok(buildRuntimeCalled, \"cwd-changed branch must rebuild the tool runtime\");\n\t\tassert.ok(\n\t\t\tbuildRuntimeIncludedAll,\n\t\t\t\"cwd-changed branch must rebuild with includeAllExtensionTools: true\",\n\t\t);\n\t});\n});\n"]}
1
+ {"version":3,"file":"agent-session-tool-refresh.test.js","sourceRoot":"","sources":["../../src/core/agent-session-tool-refresh.test.ts"],"names":[],"mappings":"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","sourcesContent":["// GSD2 - Agent session workspace-root refresh regression tests\n// Regression test for #3616: newSession() must restore the full tool set\n// when cwd is unchanged.\n//\n// The bug: extensions may narrow the active tool list via setActiveTools()\n// during a session. Without a refresh in the else branch of newSession(),\n// the narrowed set persists into the next session — breaking auto-mode\n// subagent sessions that expect a full tool palette.\n//\n// Verified behaviourally: construct an AgentSession, wrap _refreshToolRegistry\n// to record its args, call newSession() with cwd unchanged, and assert that\n// a refresh was requested with includeAllExtensionTools: true.\n\nimport assert from \"node:assert/strict\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\n\nimport { Agent } from \"@gsd/pi-agent-core\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\n\nlet testDir: string;\n\nasync function createSession(options: { workspaceRootRef?: { current: string } } = {}): Promise<AgentSession> {\n\tconst agentDir = join(testDir, \"agent-home\");\n\tconst authStorage = AuthStorage.inMemory({});\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst settingsManager = SettingsManager.inMemory();\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\tcwd: testDir,\n\t\tagentDir,\n\t\tsettingsManager,\n\t\tnoExtensions: true,\n\t\tnoPromptTemplates: true,\n\t\tnoThemes: true,\n\t});\n\tawait resourceLoader.reload();\n\n\treturn new AgentSession({\n\t\tagent: new Agent(),\n\t\tsessionManager: SessionManager.inMemory(testDir),\n\t\tsettingsManager,\n\t\tcwd: testDir,\n\t\tresourceLoader,\n\t\tmodelRegistry,\n\t\tworkspaceRootRef: options.workspaceRootRef,\n\t});\n}\n\ndescribe(\"#3616 — newSession() restores narrowed tool set when cwd unchanged\", () => {\n\tbeforeEach(() => {\n\t\ttestDir = mkdtempSync(join(tmpdir(), \"agent-session-tool-refresh-\"));\n\t});\n\n\tafterEach(() => {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t});\n\n\tit(\"calls _refreshToolRegistry with includeAllExtensionTools: true when cwd unchanged\", async () => {\n\t\tconst session = await createSession();\n\t\t// Pin _cwd so newSession()'s `process.cwd()` branch takes the\n\t\t// cwd-unchanged path. The production code compares `this._cwd !==\n\t\t// previousCwd`; we force equality by setting _cwd to current cwd.\n\t\t(session as any)._cwd = process.cwd();\n\n\t\tconst refreshCalls: Array<{ includeAllExtensionTools?: boolean }> = [];\n\t\tconst originalRefresh = (session as any)._refreshToolRegistry.bind(session);\n\t\t(session as any)._refreshToolRegistry = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\trefreshCalls.push(options ?? {});\n\t\t\treturn originalRefresh(options);\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tassert.ok(\n\t\t\trefreshCalls.length > 0,\n\t\t\t\"newSession() should invoke _refreshToolRegistry in the cwd-unchanged branch\",\n\t\t);\n\t\tassert.ok(\n\t\t\trefreshCalls.some((o) => o.includeAllExtensionTools === true),\n\t\t\t`at least one _refreshToolRegistry call must pass includeAllExtensionTools: true; observed=${JSON.stringify(refreshCalls)}`,\n\t\t);\n\t});\n\n\tit(\"agent.reset() does not clear _state.tools (tools persist across reset)\", () => {\n\t\t// Structural invariant protecting #3616: if reset() starts clearing\n\t\t// tools, newSession()'s refresh becomes the only defense against loss.\n\t\t// Assertion is behavioural — seed tools, call reset(), observe survival.\n\t\tconst agent = new Agent();\n\t\tconst tool = {\n\t\t\tname: \"test_tool\",\n\t\t\tdescription: \"x\",\n\t\t\tschema: { type: \"object\", properties: {}, additionalProperties: false } as any,\n\t\t\texecute: async () => ({ content: [] }),\n\t\t};\n\t\t(agent as any)._state.tools = [tool];\n\t\tagent.reset();\n\t\tassert.deepEqual(\n\t\t\t(agent as any)._state.tools,\n\t\t\t[tool],\n\t\t\t\"Agent.reset() must preserve _state.tools\",\n\t\t);\n\t});\n\n\tit(\"takes the cwd-changed branch (rebuilds runtime) when cwd differs\", async () => {\n\t\tconst session = await createSession();\n\t\t// Force the cwd-changed branch: set _cwd to something that won't equal process.cwd().\n\t\t(session as any)._cwd = join(testDir, \"some\", \"other\", \"cwd\");\n\n\t\tlet buildRuntimeCalled = false;\n\t\tlet buildRuntimeIncludedAll = false;\n\t\tconst originalBuild = (session as any)._buildRuntime.bind(session);\n\t\t(session as any)._buildRuntime = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\tbuildRuntimeCalled = true;\n\t\t\tif (options?.includeAllExtensionTools === true) buildRuntimeIncludedAll = true;\n\t\t\treturn originalBuild(options);\n\t\t};\n\n\t\tconst ok = await session.newSession();\n\t\tassert.equal(ok, true);\n\n\t\tassert.ok(buildRuntimeCalled, \"cwd-changed branch must rebuild the tool runtime\");\n\t\tassert.ok(\n\t\t\tbuildRuntimeIncludedAll,\n\t\t\t\"cwd-changed branch must rebuild with includeAllExtensionTools: true\",\n\t\t);\n\t});\n\n\tit(\"uses explicit workspaceRoot option instead of process.cwd() when rebuilding runtime\", async () => {\n\t\tconst session = await createSession();\n\t\tconst explicitWorkspaceRoot = mkdtempSync(join(testDir, \"explicit-workspace-\"));\n\t\t(session as any)._cwd = process.cwd();\n\n\t\tlet buildRuntimeCalled = false;\n\t\tlet capturedBuildOptions: { includeAllExtensionTools?: boolean } | undefined;\n\t\tconst originalBuild = (session as any)._buildRuntime.bind(session);\n\t\t(session as any)._buildRuntime = (options?: { includeAllExtensionTools?: boolean }) => {\n\t\t\tbuildRuntimeCalled = true;\n\t\t\tcapturedBuildOptions = options;\n\t\t\treturn originalBuild(options);\n\t\t};\n\n\t\tconst ok = await session.newSession({ workspaceRoot: explicitWorkspaceRoot });\n\t\tassert.equal(ok, true);\n\t\tassert.equal((session as any)._cwd, explicitWorkspaceRoot);\n\t\tassert.ok(buildRuntimeCalled, \"explicit workspace root differing from prior root must rebuild runtime\");\n\t\tassert.strictEqual(\n\t\t\tcapturedBuildOptions?.includeAllExtensionTools,\n\t\t\ttrue,\n\t\t\t\"explicit workspaceRoot rebuild must pass includeAllExtensionTools: true\",\n\t\t);\n\t});\n\n\tit(\"updates provider workspace root ref when newSession uses explicit workspaceRoot\", async () => {\n\t\tconst workspaceRootRef = { current: \"\" };\n\t\tconst session = await createSession({ workspaceRootRef });\n\t\tconst explicitWorkspaceRoot = mkdtempSync(join(testDir, \"provider-workspace-\"));\n\n\t\tassert.equal(workspaceRootRef.current, testDir);\n\n\t\tconst ok = await session.newSession({ workspaceRoot: explicitWorkspaceRoot });\n\t\tassert.equal(ok, true);\n\t\tassert.equal(workspaceRootRef.current, explicitWorkspaceRoot);\n\t});\n});\n"]}
@@ -12,7 +12,7 @@
12
12
  *
13
13
  * Modes use this class and add their own I/O layer on top.
14
14
  */
15
- import type { Agent, AgentEvent, AgentMessage, AgentState, AgentTool, ThinkingLevel } from "@gsd/pi-agent-core";
15
+ import type { Agent, AgentAbortOrigin, AgentEvent, AgentMessage, AgentState, AgentTool, ThinkingLevel } from "@gsd/pi-agent-core";
16
16
  import type { ImageContent, Model, TextContent } from "@gsd/pi-ai";
17
17
  import { type BashResult } from "./bash-executor.js";
18
18
  import { type CompactionResult } from "./compaction/index.js";
@@ -105,6 +105,10 @@ export interface AgentSessionConfig {
105
105
  extensionRunnerRef?: {
106
106
  current?: ExtensionRunner;
107
107
  };
108
+ /** Mutable ref used by providers to access the current workspace root. */
109
+ workspaceRootRef?: {
110
+ current: string;
111
+ };
108
112
  /** Optional: check if the claude-code CLI provider is ready (installed + authed).
109
113
  * Passed through to RetryHandler for third-party block recovery (#3772). */
110
114
  isClaudeCodeReady?: () => boolean;
@@ -188,6 +192,7 @@ export declare class AgentSession {
188
192
  private _baseToolRegistry;
189
193
  private _cwd;
190
194
  private _extensionRunnerRef?;
195
+ private _workspaceRootRef?;
191
196
  private _initialActiveToolNames?;
192
197
  private _baseToolsOverride?;
193
198
  private _extensionUIContext?;
@@ -201,6 +206,7 @@ export declare class AgentSession {
201
206
  private _toolPromptSnippets;
202
207
  private _toolPromptGuidelines;
203
208
  private _baseSystemPrompt;
209
+ private _visibleSkillNames;
204
210
  constructor(config: AgentSessionConfig);
205
211
  /** Model registry for API key resolution and model discovery */
206
212
  get modelRegistry(): ModelRegistry;
@@ -280,6 +286,15 @@ export declare class AgentSession {
280
286
  * Changes take effect on the next agent turn.
281
287
  */
282
288
  setActiveToolsByName(toolNames: string[]): void;
289
+ /**
290
+ * Set or clear a prompt-only filter for the <available_skills> catalog.
291
+ *
292
+ * This does not unload skills or disable the Skill tool. It only controls
293
+ * which loaded skills are advertised in the system prompt on rebuild.
294
+ */
295
+ setVisibleSkillsByName(skillNames: string[] | undefined): void;
296
+ /** Get the current prompt-only skill catalog filter, if one is active. */
297
+ getVisibleSkillNames(): string[] | undefined;
283
298
  /** Whether compaction or branch summarization is currently running */
284
299
  get isCompacting(): boolean;
285
300
  /**
@@ -421,7 +436,9 @@ export declare class AgentSession {
421
436
  /**
422
437
  * Abort current operation and wait for agent to become idle.
423
438
  */
424
- abort(): Promise<void>;
439
+ abort(options?: {
440
+ origin?: AgentAbortOrigin;
441
+ }): Promise<void>;
425
442
  private _settleCurrentTurnForSessionTransition;
426
443
  /**
427
444
  * Start a new session, optionally with initial messages and parent tracking.
@@ -434,6 +451,8 @@ export declare class AgentSession {
434
451
  newSession(options?: {
435
452
  parentSession?: string;
436
453
  setup?: (sessionManager: SessionManager) => Promise<void>;
454
+ /** Explicit workspace root for the new session/tool runtime. */
455
+ workspaceRoot?: string;
437
456
  /** See ExtensionCommandContext.newSession for docs (#3731). */
438
457
  abortSignal?: AbortSignal;
439
458
  }): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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"}