@opengsd/gsd-pi 1.2.0-dev.955e4da0 → 1.2.0-dev.a6376d75

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 (726) hide show
  1. package/dist/cli-model-override.d.ts +15 -0
  2. package/dist/cli-model-override.js +21 -0
  3. package/dist/cli-style.d.ts +17 -0
  4. package/dist/cli-style.js +28 -0
  5. package/dist/cli.js +2 -19
  6. package/dist/headless-events.d.ts +4 -2
  7. package/dist/headless-events.js +14 -34
  8. package/dist/loader.js +6 -4
  9. package/dist/mcp-server.js +2 -1
  10. package/dist/models-resolver.d.ts +3 -13
  11. package/dist/models-resolver.js +3 -22
  12. package/dist/register-agent-bundles.d.ts +11 -2
  13. package/dist/register-agent-bundles.js +18 -4
  14. package/dist/resource-loader.d.ts +10 -5
  15. package/dist/resource-loader.js +123 -20
  16. package/dist/resources/.managed-resources-content-hash +1 -1
  17. package/dist/resources/GSD-WORKFLOW.md +5 -4
  18. package/dist/resources/extensions/ask-user-questions.js +3 -2
  19. package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
  20. package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
  21. package/dist/resources/extensions/async-jobs/index.js +65 -0
  22. package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
  23. package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
  24. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
  25. package/dist/resources/extensions/bg-shell/overlay.js +9 -6
  26. package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
  27. package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
  28. package/dist/resources/extensions/bg-shell/utilities.js +3 -0
  29. package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
  30. package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
  31. package/dist/resources/extensions/browser-tools/index.js +69 -12
  32. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +456 -198
  33. package/dist/resources/extensions/claude-code-cli/turn-assembler.js +33 -1
  34. package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
  35. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
  36. package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
  37. package/dist/resources/extensions/gsd/auto/dispatch-history.js +120 -0
  38. package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
  39. package/dist/resources/extensions/gsd/auto/dispatch.js +365 -0
  40. package/dist/resources/extensions/gsd/auto/finalize.js +347 -0
  41. package/dist/resources/extensions/gsd/auto/loop.js +7 -1
  42. package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
  43. package/dist/resources/extensions/gsd/auto/orchestrator.js +174 -69
  44. package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
  45. package/dist/resources/extensions/gsd/auto/phases.js +17 -2329
  46. package/dist/resources/extensions/gsd/auto/pre-dispatch.js +534 -0
  47. package/dist/resources/extensions/gsd/auto/session.js +3 -0
  48. package/dist/resources/extensions/gsd/auto/unit-phase.js +694 -0
  49. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
  50. package/dist/resources/extensions/gsd/auto/worktree-safety-phase.js +125 -0
  51. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +11 -34
  52. package/dist/resources/extensions/gsd/auto-dispatch.js +50 -58
  53. package/dist/resources/extensions/gsd/auto-model-selection.js +36 -13
  54. package/dist/resources/extensions/gsd/auto-post-unit.js +35 -8
  55. package/dist/resources/extensions/gsd/auto-prompts.js +81 -19
  56. package/dist/resources/extensions/gsd/auto-start.js +41 -18
  57. package/dist/resources/extensions/gsd/auto-tool-tracking.js +18 -0
  58. package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
  59. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +12 -20
  60. package/dist/resources/extensions/gsd/auto-verification.js +23 -30
  61. package/dist/resources/extensions/gsd/auto-worktree.js +45 -92
  62. package/dist/resources/extensions/gsd/auto.js +56 -15
  63. package/dist/resources/extensions/gsd/blocked-models.js +28 -0
  64. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +29 -8
  65. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +60 -13
  66. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
  67. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
  68. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +212 -48
  69. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +303 -77
  70. package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
  71. package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
  72. package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
  73. package/dist/resources/extensions/gsd/captures.js +4 -6
  74. package/dist/resources/extensions/gsd/closeout-wizard.js +92 -0
  75. package/dist/resources/extensions/gsd/commands/context.js +16 -2
  76. package/dist/resources/extensions/gsd/commands-handlers.js +46 -3
  77. package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
  78. package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
  79. package/dist/resources/extensions/gsd/consent-question.js +353 -0
  80. package/dist/resources/extensions/gsd/consent-verdict.js +63 -0
  81. package/dist/resources/extensions/gsd/constants.js +0 -2
  82. package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
  83. package/dist/resources/extensions/gsd/db/queries.js +56 -0
  84. package/dist/resources/extensions/gsd/db-writer.js +8 -17
  85. package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
  86. package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
  87. package/dist/resources/extensions/gsd/doctor-environment.js +258 -131
  88. package/dist/resources/extensions/gsd/doctor-format.js +9 -6
  89. package/dist/resources/extensions/gsd/doctor-git-checks.js +2 -18
  90. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +13 -15
  91. package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
  92. package/dist/resources/extensions/gsd/error-classifier.js +9 -0
  93. package/dist/resources/extensions/gsd/exec-sandbox.js +30 -10
  94. package/dist/resources/extensions/gsd/files.js +33 -19
  95. package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
  96. package/dist/resources/extensions/gsd/gsd-db.js +2 -1
  97. package/dist/resources/extensions/gsd/guidance.js +158 -0
  98. package/dist/resources/extensions/gsd/guided-flow.js +110 -6
  99. package/dist/resources/extensions/gsd/health-widget.js +87 -28
  100. package/dist/resources/extensions/gsd/markdown-renderer.js +10 -0
  101. package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
  102. package/dist/resources/extensions/gsd/mcp-filter.js +2 -19
  103. package/dist/resources/extensions/gsd/mcp-tool-name.js +5 -13
  104. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
  105. package/dist/resources/extensions/gsd/migrate/safety.js +4 -1
  106. package/dist/resources/extensions/gsd/milestone-closeout.js +85 -24
  107. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +2 -2
  108. package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
  109. package/dist/resources/extensions/gsd/milestone-settlement.js +2 -2
  110. package/dist/resources/extensions/gsd/notification-store.js +11 -4
  111. package/dist/resources/extensions/gsd/notifications.js +12 -7
  112. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +6 -4
  113. package/dist/resources/extensions/gsd/parsers-legacy.js +16 -4
  114. package/dist/resources/extensions/gsd/paths.js +27 -0
  115. package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
  116. package/dist/resources/extensions/gsd/preferences-models.js +14 -48
  117. package/dist/resources/extensions/gsd/projection-flush.js +7 -0
  118. package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -4
  119. package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -2
  120. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
  121. package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -2
  122. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
  123. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  124. package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  125. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  126. package/dist/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  127. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
  128. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  129. package/dist/resources/extensions/gsd/prompts/run-uat.md +9 -5
  130. package/dist/resources/extensions/gsd/prompts/system.md +5 -2
  131. package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  132. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  133. package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  134. package/dist/resources/extensions/gsd/provider-error-guidance.js +1 -5
  135. package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
  136. package/dist/resources/extensions/gsd/publication.js +87 -0
  137. package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
  138. package/dist/resources/extensions/gsd/recovery-classification.js +37 -94
  139. package/dist/resources/extensions/gsd/roadmap-slices.js +25 -3
  140. package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
  141. package/dist/resources/extensions/gsd/session-lock.js +1 -1
  142. package/dist/resources/extensions/gsd/skill-activation.js +3 -6
  143. package/dist/resources/extensions/gsd/state.js +12 -22
  144. package/dist/resources/extensions/gsd/stop-notice.js +57 -0
  145. package/dist/resources/extensions/gsd/tool-contract.js +14 -3
  146. package/dist/resources/extensions/gsd/tool-presentation-plan.js +4 -4
  147. package/dist/resources/extensions/gsd/tool-surface-readiness.js +108 -0
  148. package/dist/resources/extensions/gsd/tools/complete-milestone.js +3 -2
  149. package/dist/resources/extensions/gsd/tools/complete-slice.js +22 -12
  150. package/dist/resources/extensions/gsd/tools/complete-task.js +65 -2
  151. package/dist/resources/extensions/gsd/tools/exec-tool.js +9 -7
  152. package/dist/resources/extensions/gsd/tools/plan-slice.js +14 -8
  153. package/dist/resources/extensions/gsd/tools/plan-task.js +2 -2
  154. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +2 -2
  155. package/dist/resources/extensions/gsd/tools/reopen-milestone.js +2 -2
  156. package/dist/resources/extensions/gsd/tools/reopen-slice.js +2 -2
  157. package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
  158. package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
  159. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +67 -2
  160. package/dist/resources/extensions/gsd/uat-policy.js +42 -16
  161. package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
  162. package/dist/resources/extensions/gsd/unit-context-composer.js +74 -1
  163. package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
  164. package/dist/resources/extensions/gsd/unit-registry.js +367 -0
  165. package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -182
  166. package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
  167. package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
  168. package/dist/resources/extensions/gsd/web-app-uat.js +45 -8
  169. package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
  170. package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
  171. package/dist/resources/extensions/gsd/workflow-events.js +6 -18
  172. package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +2 -0
  173. package/dist/resources/extensions/gsd/workflow-mcp-readiness-cache.js +105 -0
  174. package/dist/resources/extensions/gsd/workflow-reconcile.js +21 -56
  175. package/dist/resources/extensions/gsd/workflow-tool-surface.js +1 -1
  176. package/dist/resources/extensions/gsd/worktree-git-recovery.js +15 -9
  177. package/dist/resources/extensions/gsd/worktree-lifecycle.js +3 -2
  178. package/dist/resources/extensions/gsd/worktree-manager.js +7 -1
  179. package/dist/resources/extensions/gsd/worktree-root.js +11 -0
  180. package/dist/resources/extensions/gsd/worktree-safety.js +28 -26
  181. package/dist/resources/extensions/gsd/worktree-session-state.js +4 -5
  182. package/dist/resources/extensions/gsd/worktree.js +8 -1
  183. package/dist/resources/extensions/mcp-client/manager.js +6 -1
  184. package/dist/resources/extensions/search-the-web/native-search.js +5 -3
  185. package/dist/resources/extensions/shared/browser-contract.js +59 -0
  186. package/dist/resources/extensions/shared/gsd-browser-cli.js +116 -6
  187. package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
  188. package/dist/resources/shared/package-manager-detection.js +1 -1
  189. package/dist/resources/shared/package.json +3 -0
  190. package/dist/resources/skills/create-skill/SKILL.md +3 -0
  191. package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
  192. package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
  193. package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
  194. package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
  195. package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
  196. package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  197. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  198. package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  199. package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
  200. package/dist/runtime-checks.d.ts +10 -0
  201. package/dist/runtime-checks.js +27 -0
  202. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  203. package/dist/update-check.d.ts +2 -0
  204. package/dist/update-check.js +24 -1
  205. package/dist/update-cmd.js +20 -3
  206. package/dist/web/standalone/.next/BUILD_ID +1 -1
  207. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  208. package/dist/web/standalone/.next/build-manifest.json +3 -3
  209. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  210. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  211. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  212. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  213. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  214. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  215. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  216. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  217. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  218. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  219. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  220. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  221. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  222. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  223. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  224. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  225. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  226. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  227. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  229. package/dist/web/standalone/.next/server/app/index.html +1 -1
  230. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  231. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  232. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  233. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  234. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  235. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  236. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  237. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  238. package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
  239. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  240. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  241. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  242. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  243. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  244. package/dist/web/standalone/.next/static/chunks/{796.cf859a427a2cb2ac.js → 796.e0bdc932325d7e03.js} +1 -1
  245. package/dist/web/standalone/.next/static/chunks/{webpack-fbea77b5f9953368.js → webpack-f0285ce91d4ec9ef.js} +1 -1
  246. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  247. package/dist/web/standalone/package.json +1 -1
  248. package/dist/worktree-cli.js +3 -6
  249. package/dist/worktree-status-banner.js +7 -15
  250. package/package.json +3 -3
  251. package/packages/cloud-mcp-gateway/package.json +2 -2
  252. package/packages/contracts/dist/rpc.d.ts +1 -0
  253. package/packages/contracts/dist/rpc.d.ts.map +1 -1
  254. package/packages/contracts/dist/rpc.js.map +1 -1
  255. package/packages/contracts/dist/workflow.d.ts +4 -0
  256. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  257. package/packages/contracts/dist/workflow.js.map +1 -1
  258. package/packages/contracts/package.json +1 -1
  259. package/packages/daemon/package.json +4 -4
  260. package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
  261. package/packages/gsd-agent-core/dist/sdk.js +6 -4
  262. package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
  263. package/packages/gsd-agent-core/package.json +5 -5
  264. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  265. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  266. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
  267. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
  268. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +13 -0
  269. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  270. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +55 -6
  271. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  272. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +2 -0
  273. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
  274. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +34 -5
  275. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  276. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  277. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +7 -0
  278. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  279. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  280. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +8 -1
  281. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  282. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
  283. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +11 -1
  284. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
  285. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +1 -0
  286. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  287. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +12 -0
  288. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  289. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
  290. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
  291. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
  292. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
  293. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
  294. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js.map +1 -1
  295. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  296. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -1
  297. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  298. package/packages/gsd-agent-modes/package.json +7 -7
  299. package/packages/mcp-server/README.md +12 -3
  300. package/packages/mcp-server/dist/cli-runner.d.ts +40 -0
  301. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -0
  302. package/packages/mcp-server/dist/cli-runner.js +137 -0
  303. package/packages/mcp-server/dist/cli-runner.js.map +1 -0
  304. package/packages/mcp-server/dist/cli.js +2 -50
  305. package/packages/mcp-server/dist/cli.js.map +1 -1
  306. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
  307. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
  308. package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
  309. package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
  310. package/packages/mcp-server/dist/pid-registry.d.ts +46 -0
  311. package/packages/mcp-server/dist/pid-registry.d.ts.map +1 -0
  312. package/packages/mcp-server/dist/pid-registry.js +452 -0
  313. package/packages/mcp-server/dist/pid-registry.js.map +1 -0
  314. package/packages/mcp-server/dist/probe-mode.d.ts +4 -0
  315. package/packages/mcp-server/dist/probe-mode.d.ts.map +1 -0
  316. package/packages/mcp-server/dist/probe-mode.js +10 -0
  317. package/packages/mcp-server/dist/probe-mode.js.map +1 -0
  318. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  319. package/packages/mcp-server/dist/server.js +4 -0
  320. package/packages/mcp-server/dist/server.js.map +1 -1
  321. package/packages/mcp-server/dist/stdio-watchdog.d.ts +8 -0
  322. package/packages/mcp-server/dist/stdio-watchdog.d.ts.map +1 -0
  323. package/packages/mcp-server/dist/stdio-watchdog.js +40 -0
  324. package/packages/mcp-server/dist/stdio-watchdog.js.map +1 -0
  325. package/packages/mcp-server/dist/workflow-tools.d.ts +26 -18
  326. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  327. package/packages/mcp-server/dist/workflow-tools.js +178 -82
  328. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  329. package/packages/mcp-server/package.json +5 -4
  330. package/packages/native/package.json +1 -1
  331. package/packages/pi-agent-core/dist/agent-loop.js +43 -2
  332. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  333. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
  334. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  335. package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
  336. package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  337. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  338. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  339. package/packages/pi-agent-core/dist/index.js +3 -0
  340. package/packages/pi-agent-core/dist/index.js.map +1 -1
  341. package/packages/pi-agent-core/package.json +1 -1
  342. package/packages/pi-ai/README.md +1 -0
  343. package/packages/pi-ai/dist/image-models.generated.d.ts +2 -2
  344. package/packages/pi-ai/dist/image-models.generated.js +6 -6
  345. package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
  346. package/packages/pi-ai/dist/index.d.ts +2 -0
  347. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  348. package/packages/pi-ai/dist/index.js +2 -0
  349. package/packages/pi-ai/dist/index.js.map +1 -1
  350. package/packages/pi-ai/dist/models.generated.d.ts +35 -125
  351. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  352. package/packages/pi-ai/dist/models.generated.js +46 -120
  353. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  354. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  355. package/packages/pi-ai/dist/providers/anthropic.js +12 -7
  356. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  357. package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
  358. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  359. package/packages/pi-ai/dist/providers/google-shared.js +12 -3
  360. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  361. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  362. package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
  363. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  364. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
  365. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
  366. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
  367. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
  368. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  369. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
  370. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  371. package/packages/pi-ai/package.json +3 -2
  372. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
  373. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  374. package/packages/pi-coding-agent/dist/core/auth-storage.js +19 -13
  375. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  376. package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
  377. package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
  378. package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
  379. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  380. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  381. package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
  382. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  383. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
  384. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  385. package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
  386. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  387. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  388. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  389. package/packages/pi-coding-agent/dist/index.js +1 -1
  390. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  391. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  392. package/packages/pi-coding-agent/dist/theme/theme.js +45 -17
  393. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  394. package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
  395. package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
  396. package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
  397. package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
  398. package/packages/pi-coding-agent/package.json +7 -7
  399. package/packages/pi-tui/dist/index.d.ts +1 -1
  400. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  401. package/packages/pi-tui/dist/index.js +1 -1
  402. package/packages/pi-tui/dist/index.js.map +1 -1
  403. package/packages/pi-tui/dist/terminal-image.d.ts +33 -0
  404. package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
  405. package/packages/pi-tui/dist/terminal-image.js +54 -2
  406. package/packages/pi-tui/dist/terminal-image.js.map +1 -1
  407. package/packages/pi-tui/dist/tui.d.ts +8 -0
  408. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  409. package/packages/pi-tui/dist/tui.js +72 -18
  410. package/packages/pi-tui/dist/tui.js.map +1 -1
  411. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  412. package/packages/pi-tui/dist/utils.js +110 -36
  413. package/packages/pi-tui/dist/utils.js.map +1 -1
  414. package/packages/pi-tui/package.json +2 -2
  415. package/packages/rpc-client/package.json +2 -2
  416. package/pkg/dist/theme/theme.d.ts.map +1 -1
  417. package/pkg/dist/theme/theme.js +45 -17
  418. package/pkg/dist/theme/theme.js.map +1 -1
  419. package/pkg/package.json +1 -1
  420. package/src/resources/GSD-WORKFLOW.md +5 -4
  421. package/src/resources/extensions/ask-user-questions.ts +7 -2
  422. package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
  423. package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
  424. package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
  425. package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
  426. package/src/resources/extensions/async-jobs/index.ts +79 -0
  427. package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
  428. package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
  429. package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
  430. package/src/resources/extensions/bg-shell/overlay.ts +9 -5
  431. package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
  432. package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
  433. package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
  434. package/src/resources/extensions/bg-shell/utilities.ts +3 -0
  435. package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
  436. package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
  437. package/src/resources/extensions/browser-tools/index.ts +71 -13
  438. package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
  439. package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +40 -1
  440. package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
  441. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +537 -202
  442. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +672 -7
  443. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +38 -1
  444. package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
  445. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
  446. package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
  447. package/src/resources/extensions/gsd/auto/dispatch-history.ts +168 -0
  448. package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
  449. package/src/resources/extensions/gsd/auto/dispatch.ts +449 -0
  450. package/src/resources/extensions/gsd/auto/finalize.ts +445 -0
  451. package/src/resources/extensions/gsd/auto/loop.ts +7 -1
  452. package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
  453. package/src/resources/extensions/gsd/auto/orchestrator.ts +193 -71
  454. package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
  455. package/src/resources/extensions/gsd/auto/phases.ts +58 -3022
  456. package/src/resources/extensions/gsd/auto/pre-dispatch.ts +704 -0
  457. package/src/resources/extensions/gsd/auto/session.ts +3 -0
  458. package/src/resources/extensions/gsd/auto/unit-phase.ts +910 -0
  459. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
  460. package/src/resources/extensions/gsd/auto/worktree-safety-phase.ts +149 -0
  461. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +18 -48
  462. package/src/resources/extensions/gsd/auto-dispatch.ts +48 -61
  463. package/src/resources/extensions/gsd/auto-model-selection.ts +41 -12
  464. package/src/resources/extensions/gsd/auto-post-unit.ts +40 -8
  465. package/src/resources/extensions/gsd/auto-prompts.ts +118 -35
  466. package/src/resources/extensions/gsd/auto-start.ts +42 -21
  467. package/src/resources/extensions/gsd/auto-tool-tracking.ts +19 -0
  468. package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
  469. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +14 -21
  470. package/src/resources/extensions/gsd/auto-verification.ts +26 -28
  471. package/src/resources/extensions/gsd/auto-worktree.ts +45 -95
  472. package/src/resources/extensions/gsd/auto.ts +72 -17
  473. package/src/resources/extensions/gsd/blocked-models.ts +49 -0
  474. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +37 -10
  475. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +79 -12
  476. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
  477. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +24 -0
  478. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +251 -47
  479. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +352 -84
  480. package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
  481. package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
  482. package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
  483. package/src/resources/extensions/gsd/captures.ts +4 -6
  484. package/src/resources/extensions/gsd/closeout-wizard.ts +102 -0
  485. package/src/resources/extensions/gsd/commands/context.ts +16 -2
  486. package/src/resources/extensions/gsd/commands-handlers.ts +46 -3
  487. package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
  488. package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
  489. package/src/resources/extensions/gsd/consent-question.ts +431 -0
  490. package/src/resources/extensions/gsd/consent-verdict.ts +86 -0
  491. package/src/resources/extensions/gsd/constants.ts +0 -3
  492. package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
  493. package/src/resources/extensions/gsd/db/queries.ts +66 -0
  494. package/src/resources/extensions/gsd/db-writer.ts +11 -19
  495. package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
  496. package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
  497. package/src/resources/extensions/gsd/doctor-environment.ts +269 -149
  498. package/src/resources/extensions/gsd/doctor-format.ts +12 -7
  499. package/src/resources/extensions/gsd/doctor-git-checks.ts +2 -19
  500. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +13 -15
  501. package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
  502. package/src/resources/extensions/gsd/error-classifier.ts +11 -0
  503. package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
  504. package/src/resources/extensions/gsd/files.ts +33 -12
  505. package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
  506. package/src/resources/extensions/gsd/gsd-db.ts +4 -3
  507. package/src/resources/extensions/gsd/guidance.ts +217 -0
  508. package/src/resources/extensions/gsd/guided-flow.ts +161 -26
  509. package/src/resources/extensions/gsd/health-widget.ts +91 -27
  510. package/src/resources/extensions/gsd/markdown-renderer.ts +11 -0
  511. package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
  512. package/src/resources/extensions/gsd/mcp-filter.ts +2 -23
  513. package/src/resources/extensions/gsd/mcp-tool-name.ts +6 -11
  514. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
  515. package/src/resources/extensions/gsd/migrate/safety.ts +4 -1
  516. package/src/resources/extensions/gsd/milestone-closeout.ts +109 -24
  517. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +2 -2
  518. package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
  519. package/src/resources/extensions/gsd/milestone-settlement.ts +2 -2
  520. package/src/resources/extensions/gsd/notification-store.ts +26 -3
  521. package/src/resources/extensions/gsd/notifications.ts +13 -6
  522. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +6 -4
  523. package/src/resources/extensions/gsd/parsers-legacy.ts +16 -4
  524. package/src/resources/extensions/gsd/paths.ts +33 -0
  525. package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
  526. package/src/resources/extensions/gsd/preferences-models.ts +12 -47
  527. package/src/resources/extensions/gsd/projection-flush.ts +20 -0
  528. package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -4
  529. package/src/resources/extensions/gsd/prompts/execute-task.md +3 -2
  530. package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
  531. package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -2
  532. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
  533. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  534. package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  535. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  536. package/src/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  537. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
  538. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  539. package/src/resources/extensions/gsd/prompts/run-uat.md +9 -5
  540. package/src/resources/extensions/gsd/prompts/system.md +5 -2
  541. package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  542. package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  543. package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  544. package/src/resources/extensions/gsd/provider-error-guidance.ts +4 -9
  545. package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
  546. package/src/resources/extensions/gsd/publication.ts +122 -0
  547. package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
  548. package/src/resources/extensions/gsd/recovery-classification.ts +42 -96
  549. package/src/resources/extensions/gsd/roadmap-slices.ts +28 -3
  550. package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
  551. package/src/resources/extensions/gsd/session-lock.ts +1 -1
  552. package/src/resources/extensions/gsd/skill-activation.ts +3 -6
  553. package/src/resources/extensions/gsd/state.ts +16 -22
  554. package/src/resources/extensions/gsd/stop-notice.ts +75 -0
  555. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +1 -1
  556. package/src/resources/extensions/gsd/tests/auto-blocked-remediation-message.test.ts +1 -1
  557. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +206 -22
  558. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +97 -1
  559. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +273 -37
  560. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +1 -1
  561. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +77 -1
  562. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
  563. package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
  564. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
  565. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +169 -1
  566. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
  567. package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
  568. package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
  569. package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
  570. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
  571. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +22 -0
  572. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +8 -7
  573. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
  574. package/src/resources/extensions/gsd/tests/complete-task.test.ts +141 -5
  575. package/src/resources/extensions/gsd/tests/consent-question.test.ts +351 -0
  576. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
  577. package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
  578. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +12 -11
  579. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +36 -0
  580. package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
  581. package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
  582. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +328 -0
  583. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +2 -1
  584. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +8 -0
  585. package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
  586. package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
  587. package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
  588. package/src/resources/extensions/gsd/tests/engine-interfaces-contract.test.ts +117 -91
  589. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +113 -0
  590. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +193 -0
  591. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +29 -1
  592. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +35 -1
  593. package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +120 -0
  594. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +27 -0
  595. package/src/resources/extensions/gsd/tests/guidance.test.ts +148 -0
  596. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +18 -6
  597. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +53 -11
  598. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +88 -58
  599. package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
  600. package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
  601. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +217 -0
  602. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
  603. package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
  604. package/src/resources/extensions/gsd/tests/mcp-readiness-preflight.test.ts +205 -0
  605. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +6 -5
  606. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +95 -4
  607. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
  608. package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +1 -1
  609. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +92 -0
  610. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +1 -1
  611. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
  612. package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
  613. package/src/resources/extensions/gsd/tests/notifications.test.ts +64 -9
  614. package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +167 -0
  615. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +18 -0
  616. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +2 -2
  617. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +143 -0
  618. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +1 -1
  619. package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
  620. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
  621. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
  622. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
  623. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +10 -2
  624. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
  625. package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
  626. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -4
  627. package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
  628. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +157 -0
  629. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
  630. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
  631. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +27 -2
  632. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -17
  633. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +7 -3
  634. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
  635. package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
  636. package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
  637. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +80 -2
  638. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
  639. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +329 -0
  640. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +33 -0
  641. package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
  642. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -29
  643. package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
  644. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +67 -2
  645. package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
  646. package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
  647. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
  648. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
  649. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +44 -1
  650. package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
  651. package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
  652. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +67 -4
  653. package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
  654. package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
  655. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
  656. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +275 -40
  657. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
  658. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
  659. package/src/resources/extensions/gsd/tests/worktree-safety-phase.test.ts +100 -0
  660. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +72 -0
  661. package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +22 -0
  662. package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
  663. package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
  664. package/src/resources/extensions/gsd/tests/write-gate.test.ts +67 -1
  665. package/src/resources/extensions/gsd/tool-contract.ts +38 -3
  666. package/src/resources/extensions/gsd/tool-presentation-plan.ts +4 -4
  667. package/src/resources/extensions/gsd/tool-surface-readiness.ts +183 -0
  668. package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
  669. package/src/resources/extensions/gsd/tools/complete-slice.ts +22 -12
  670. package/src/resources/extensions/gsd/tools/complete-task.ts +90 -2
  671. package/src/resources/extensions/gsd/tools/exec-tool.ts +8 -7
  672. package/src/resources/extensions/gsd/tools/plan-slice.ts +14 -8
  673. package/src/resources/extensions/gsd/tools/plan-task.ts +2 -2
  674. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +2 -2
  675. package/src/resources/extensions/gsd/tools/reopen-milestone.ts +2 -2
  676. package/src/resources/extensions/gsd/tools/reopen-slice.ts +2 -2
  677. package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
  678. package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
  679. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +81 -2
  680. package/src/resources/extensions/gsd/uat-policy.ts +62 -16
  681. package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
  682. package/src/resources/extensions/gsd/unit-context-composer.ts +111 -1
  683. package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
  684. package/src/resources/extensions/gsd/unit-registry.ts +442 -0
  685. package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -192
  686. package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
  687. package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
  688. package/src/resources/extensions/gsd/web-app-uat.ts +51 -8
  689. package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
  690. package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
  691. package/src/resources/extensions/gsd/workflow-events.ts +12 -20
  692. package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -0
  693. package/src/resources/extensions/gsd/workflow-mcp-readiness-cache.ts +150 -0
  694. package/src/resources/extensions/gsd/workflow-reconcile.ts +29 -62
  695. package/src/resources/extensions/gsd/workflow-tool-surface.ts +4 -1
  696. package/src/resources/extensions/gsd/worktree-git-recovery.ts +15 -9
  697. package/src/resources/extensions/gsd/worktree-lifecycle.ts +3 -8
  698. package/src/resources/extensions/gsd/worktree-manager.ts +6 -1
  699. package/src/resources/extensions/gsd/worktree-root.ts +12 -0
  700. package/src/resources/extensions/gsd/worktree-safety.ts +41 -39
  701. package/src/resources/extensions/gsd/worktree-session-state.ts +3 -5
  702. package/src/resources/extensions/gsd/worktree.ts +7 -1
  703. package/src/resources/extensions/mcp-client/manager.ts +7 -1
  704. package/src/resources/extensions/search-the-web/native-search.ts +5 -3
  705. package/src/resources/extensions/shared/browser-contract.ts +66 -0
  706. package/src/resources/extensions/shared/gsd-browser-cli.ts +141 -6
  707. package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
  708. package/src/resources/shared/package-manager-detection.ts +1 -1
  709. package/src/resources/shared/package.json +3 -0
  710. package/src/resources/skills/create-skill/SKILL.md +3 -0
  711. package/src/resources/skills/create-skill/references/executable-code.md +1 -1
  712. package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
  713. package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
  714. package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
  715. package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
  716. package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  717. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  718. package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  719. package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
  720. package/dist/resources/extensions/gsd/user-input-boundary.js +0 -218
  721. package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
  722. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -173
  723. package/src/resources/extensions/gsd/user-input-boundary.ts +0 -216
  724. package/src/resources/skills/gsd-browser/SKILL.md +0 -41
  725. /package/dist/web/standalone/.next/static/{C24pqUd-aru-l0Dp0gLZP → xyMkEaICFHJoa98VgJyzY}/_buildManifest.js +0 -0
  726. /package/dist/web/standalone/.next/static/{C24pqUd-aru-l0Dp0gLZP → xyMkEaICFHJoa98VgJyzY}/_ssgManifest.js +0 -0
@@ -0,0 +1,15 @@
1
+ import type { ModelRegistry as ModelRegistryInstance } from '@gsd/pi-coding-agent';
2
+ /**
3
+ * Apply the --model CLI flag override to the active session.
4
+ * Searches available models by exact id or provider/id pattern and warns
5
+ * on stderr when the requested model is not found in the registry.
6
+ *
7
+ * The setModel call is intentionally fire-and-forget: provider readiness
8
+ * checks run later in startup so --model does not block session creation.
9
+ */
10
+ export declare function applyModelOverride(session: {
11
+ setModel(model: {
12
+ provider: string;
13
+ id: string;
14
+ }): unknown | Promise<unknown>;
15
+ }, modelRegistry: ModelRegistryInstance, modelFlag: string | undefined): void;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Apply the --model CLI flag override to the active session.
3
+ * Searches available models by exact id or provider/id pattern and warns
4
+ * on stderr when the requested model is not found in the registry.
5
+ *
6
+ * The setModel call is intentionally fire-and-forget: provider readiness
7
+ * checks run later in startup so --model does not block session creation.
8
+ */
9
+ export function applyModelOverride(session, modelRegistry, modelFlag) {
10
+ if (!modelFlag)
11
+ return;
12
+ const available = modelRegistry.getAvailable();
13
+ const match = available.find((m) => m.id === modelFlag) ||
14
+ available.find((m) => `${m.provider}/${m.id}` === modelFlag);
15
+ if (match) {
16
+ void session.setModel(match);
17
+ }
18
+ else {
19
+ process.stderr.write(`[gsd] Warning: Model "${modelFlag}" not found. Using configured default.\n`);
20
+ }
21
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Terminal presentation helpers for CLI-side notices on stderr — warnings,
3
+ * hints, and names. Pairs with the extension-side glyph set in
4
+ * resources/extensions/shared/ui.ts. Adopt incrementally: banner-shaped CLI
5
+ * surfaces (worktree banners today; update checks et al. as they're touched)
6
+ * should render through these instead of ad-hoc chalk.
7
+ */
8
+ /** Dim "[gsd] " line tag that prefixes CLI banner lines. */
9
+ export declare function gsdTag(): string;
10
+ /** A yellow warning fragment. */
11
+ export declare function warn(text: string): string;
12
+ /** A dim "what to do next" hint fragment. */
13
+ export declare function hint(text: string): string;
14
+ /** A cyan user-supplied name (worktree, branch, file). */
15
+ export declare function name(text: string): string;
16
+ /** One banner line: tagged warning followed by a tagged hint line. */
17
+ export declare function bannerLines(warning: string, hintText: string): string;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Terminal presentation helpers for CLI-side notices on stderr — warnings,
3
+ * hints, and names. Pairs with the extension-side glyph set in
4
+ * resources/extensions/shared/ui.ts. Adopt incrementally: banner-shaped CLI
5
+ * surfaces (worktree banners today; update checks et al. as they're touched)
6
+ * should render through these instead of ad-hoc chalk.
7
+ */
8
+ import chalk from 'chalk';
9
+ /** Dim "[gsd] " line tag that prefixes CLI banner lines. */
10
+ export function gsdTag() {
11
+ return chalk.dim('[gsd] ');
12
+ }
13
+ /** A yellow warning fragment. */
14
+ export function warn(text) {
15
+ return chalk.yellow(text);
16
+ }
17
+ /** A dim "what to do next" hint fragment. */
18
+ export function hint(text) {
19
+ return chalk.dim(text);
20
+ }
21
+ /** A cyan user-supplied name (worktree, branch, file). */
22
+ export function name(text) {
23
+ return chalk.cyan(text);
24
+ }
25
+ /** One banner line: tagged warning followed by a tagged hint line. */
26
+ export function bannerLines(warning, hintText) {
27
+ return gsdTag() + warning + '\n' + gsdTag() + hint(hintText) + '\n\n';
28
+ }
package/dist/cli.js CHANGED
@@ -14,6 +14,7 @@ import { printHelp, printSubcommandHelp } from './help-text.js';
14
14
  import { applySecurityOverrides } from './security-overrides.js';
15
15
  import { validateConfiguredModel } from './startup-model-validation.js';
16
16
  import { migrateAnthropicDefaultToClaudeCode } from './provider-migrations.js';
17
+ import { applyModelOverride } from './cli-model-override.js';
17
18
  import { buildHeadlessAutoArgs, parseCliArgs, runWebCliBranch, migrateLegacyFlatSessions, } from './cli-web-branch.js';
18
19
  import { stopWebMode } from './web-mode.js';
19
20
  import { getProjectSessionsDir } from './project-sessions.js';
@@ -122,24 +123,6 @@ async function reapplyValidatedModelOnFallback(session, modelRegistry, settingsM
122
123
  // Provider not ready — leave session on its current model
123
124
  }
124
125
  }
125
- /**
126
- * Apply the --model CLI flag override to the active session.
127
- * Searches available models by exact id or provider/id pattern and warns
128
- * on stderr when the requested model is not found in the registry.
129
- */
130
- function applyModelOverride(session, modelRegistry, modelFlag) {
131
- if (!modelFlag)
132
- return;
133
- const available = modelRegistry.getAvailable();
134
- const match = available.find((m) => m.id === modelFlag) ||
135
- available.find((m) => `${m.provider}/${m.id}` === modelFlag);
136
- if (match) {
137
- void session.setModel(match);
138
- }
139
- else {
140
- process.stderr.write(`[gsd] Warning: Model "${modelFlag}" not found. Using configured default.\n`);
141
- }
142
- }
143
126
  const cliFlags = parseCliArgs(process.argv);
144
127
  const isPrintMode = cliFlags.print || cliFlags.mode !== undefined;
145
128
  // `gsd [subcommand] --help` / `-h` — print help before any subcommand runs.
@@ -524,7 +507,7 @@ const authStorage = AuthStorage.create(authFilePath);
524
507
  markStartup('AuthStorage.create');
525
508
  loadStoredEnvKeys(authStorage);
526
509
  migratePiCredentials(authStorage);
527
- // Resolve models.json path with fallback to ~/.pi/agent/models.json
510
+ // Resolve models.json path
528
511
  const { resolveModelsJsonPath } = await import('./models-resolver.js');
529
512
  const modelsJsonPath = resolveModelsJsonPath();
530
513
  const modelRegistry = ModelRegistry.create(authStorage, modelsJsonPath);
@@ -5,6 +5,10 @@
5
5
  * and classifies commands as quick (single-turn) vs long-running.
6
6
  *
7
7
  * Also defines exit code constants and the status→exit-code mapping function.
8
+ *
9
+ * The stop/pause notice vocabulary itself (prefixes + message classifiers)
10
+ * lives in the Stop Notice module — the same module the emitters format with,
11
+ * so wording stays in lockstep with detection.
8
12
  */
9
13
  export declare const EXIT_SUCCESS = 0;
10
14
  export declare const EXIT_ERROR = 1;
@@ -42,8 +46,6 @@ export declare function mapStatusToExitCode(status: string): number;
42
46
  *
43
47
  * Blocked detection is separate — checked via isBlockedNotification.
44
48
  */
45
- export declare const PAUSED_PREFIXES: string[];
46
- export declare const TERMINAL_PREFIXES: string[];
47
49
  export declare const IDLE_TIMEOUT_MS = 15000;
48
50
  export declare const NEW_MILESTONE_IDLE_TIMEOUT_MS = 120000;
49
51
  export declare function canonicalHeadlessToolName(toolName: string | undefined): string;
@@ -5,7 +5,13 @@
5
5
  * and classifies commands as quick (single-turn) vs long-running.
6
6
  *
7
7
  * Also defines exit code constants and the status→exit-code mapping function.
8
+ *
9
+ * The stop/pause notice vocabulary itself (prefixes + message classifiers)
10
+ * lives in the Stop Notice module — the same module the emitters format with,
11
+ * so wording stays in lockstep with detection.
8
12
  */
13
+ import { isBlockedNoticeMessage, isManualResolutionNotice, isPauseNotice, isTerminalNotice, } from './resources/extensions/gsd/stop-notice.js';
14
+ import { canonicalToolName } from './resources/extensions/gsd/engine-hook-contract.js';
9
15
  // ---------------------------------------------------------------------------
10
16
  // Exit Code Constants
11
17
  // ---------------------------------------------------------------------------
@@ -65,40 +71,19 @@ export function mapStatusToExitCode(status) {
65
71
  *
66
72
  * Blocked detection is separate — checked via isBlockedNotification.
67
73
  */
68
- export const PAUSED_PREFIXES = ['auto-mode paused', 'step-mode paused'];
69
- export const TERMINAL_PREFIXES = [
70
- 'auto-mode stopped',
71
- 'step-mode stopped',
72
- 'auto-mode complete',
73
- 'no active milestone',
74
- 'auto-mode idle',
75
- ];
76
74
  export const IDLE_TIMEOUT_MS = 15_000;
77
75
  // new-milestone is a long-running creative task where the LLM may pause
78
76
  // between tool calls (e.g. after mkdir, before writing files). Use a
79
77
  // longer idle timeout to avoid killing the session prematurely (#808).
80
78
  export const NEW_MILESTONE_IDLE_TIMEOUT_MS = 120_000;
81
79
  const INTERACTIVE_HEADLESS_TOOLS = new Set(['ask_user_questions', 'secure_env_collect']);
80
+ // Delegates to the shared normalizer seam (engine-hook-contract.ts) instead of
81
+ // a hand-rolled parser. Behavior differs from the old parser only on malformed
82
+ // MCP names: `mcp____tool` (empty server) and `mcp__server__` (empty tool) are
83
+ // now returned unchanged rather than partially stripped — neither can match a
84
+ // real tool name, so detection behavior is unaffected.
82
85
  export function canonicalHeadlessToolName(toolName) {
83
- const name = String(toolName ?? '');
84
- if (!name.startsWith('mcp__'))
85
- return name;
86
- const toolSeparator = name.indexOf('__', 'mcp__'.length);
87
- return toolSeparator >= 0 ? name.slice(toolSeparator + 2) : name;
88
- }
89
- function isManualResolutionNotification(message) {
90
- return (message.includes('resolve manually and re-run /gsd auto') ||
91
- message.includes('resolve conflicts manually and run /gsd auto to resume') ||
92
- message.includes('resolve and run /gsd auto to resume'));
93
- }
94
- function isNonBlockingPauseNotification(message) {
95
- return message.includes('idempotent advance: unit already active');
96
- }
97
- function isPauseNotification(message) {
98
- return PAUSED_PREFIXES.some((prefix) => message.startsWith(prefix));
99
- }
100
- function isPauseNotificationRequiringIntervention(message) {
101
- return isPauseNotification(message) && !isNonBlockingPauseNotification(message);
86
+ return canonicalToolName(String(toolName ?? ''));
102
87
  }
103
88
  function getCommandBlockContent(event) {
104
89
  if (event.type !== 'message_start' && event.type !== 'message_end')
@@ -122,20 +107,15 @@ export function isTerminalNotification(event) {
122
107
  if (event.type !== 'extension_ui_request' || event.method !== 'notify')
123
108
  return false;
124
109
  const message = String(event.message ?? '').toLowerCase();
125
- return (TERMINAL_PREFIXES.some((prefix) => message.startsWith(prefix)) ||
126
- isPauseNotification(message) ||
127
- isManualResolutionNotification(message));
110
+ return isTerminalNotice(message) || isPauseNotice(message) || isManualResolutionNotice(message);
128
111
  }
129
112
  export function isBlockedNotification(event) {
130
113
  if (isBlockingCommandBlock(event))
131
114
  return true;
132
115
  if (event.type !== 'extension_ui_request' || event.method !== 'notify')
133
116
  return false;
134
- const message = String(event.message ?? '').toLowerCase();
135
117
  // Recoverable pauses need operator intervention in headless mode.
136
- return (message.includes('blocked:') ||
137
- isPauseNotificationRequiringIntervention(message) ||
138
- isManualResolutionNotification(message));
118
+ return isBlockedNoticeMessage(String(event.message ?? '').toLowerCase());
139
119
  }
140
120
  export function isMilestoneReadyNotification(event) {
141
121
  if (event.type !== 'extension_ui_request' || event.method !== 'notify')
package/dist/loader.js CHANGED
@@ -31,7 +31,7 @@ if (firstArg === '--help' || firstArg === '-h') {
31
31
  // package.json (already parsed above) and verifies git is available.
32
32
  // ---------------------------------------------------------------------------
33
33
  {
34
- const { MIN_NODE_MAJOR, checkNodeVersion, requireGit } = await import('./runtime-checks.js');
34
+ const { MIN_NODE_MAJOR, checkNodeVersion, gitAvailableOnPath } = await import('./runtime-checks.js');
35
35
  const red = '\x1b[31m';
36
36
  const bold = '\x1b[1m';
37
37
  const dim = '\x1b[2m';
@@ -48,8 +48,10 @@ if (firstArg === '--help' || firstArg === '-h') {
48
48
  process.exit(1);
49
49
  }
50
50
  // -- git --
51
- const { execFileSync } = await import('child_process');
52
- const gitOk = requireGit((cmd, args) => execFileSync(cmd, args, { stdio: 'ignore' }));
51
+ // Presence-check git via a $PATH scan rather than spawning `git --version`:
52
+ // the subprocess cost ~15ms on every cold start (~5% of startup CPU) just to
53
+ // confirm git is installed.
54
+ const gitOk = gitAvailableOnPath();
53
55
  if (!gitOk) {
54
56
  process.stderr.write(`\n${red}${bold}Error:${reset} GSD requires git but it was not found on PATH.\n\n` +
55
57
  `${dim}Install git:${reset}\n` +
@@ -230,6 +232,6 @@ if (missingPackages.length > 0) {
230
232
  }
231
233
  // Register GSD agent packages for extension imports before CLI loads.
232
234
  const { registerAgentBundles } = await import('./register-agent-bundles.js');
233
- registerAgentBundles();
235
+ await registerAgentBundles();
234
236
  // Dynamic import defers ESM evaluation — config.js will see PI_PACKAGE_DIR above
235
237
  await import('./cli.js');
@@ -29,6 +29,7 @@ function isPlainObject(value) {
29
29
  // built via a template string so TypeScript's NodeNext resolver treats them as
30
30
  // `any` and skips static checking.
31
31
  const MCP_PKG = '@modelcontextprotocol/sdk';
32
+ import { sanitizeSchemaForMoonshot } from '@gsd/pi-ai';
32
33
  export function mcpSdkSpecifier(subpath) {
33
34
  return `${MCP_PKG}/${subpath}.js`;
34
35
  }
@@ -65,7 +66,7 @@ export async function startMcpServer(options) {
65
66
  tools: tools.map((t) => ({
66
67
  name: t.name,
67
68
  description: t.description,
68
- inputSchema: t.parameters,
69
+ inputSchema: sanitizeSchemaForMoonshot(t.parameters),
69
70
  })),
70
71
  }));
71
72
  // tools/call — execute the requested tool and return content blocks.
@@ -1,20 +1,10 @@
1
1
  /**
2
- * Models.json resolution with fallback to ~/.pi/agent/models.json
2
+ * Models.json resolution for GSD.
3
3
  *
4
- * GSD uses ~/.gsd/agent/models.json, but for a smooth migration/development
5
- * experience, this module provides resolution logic that:
6
- *
7
- * 1. Reads ~/.gsd/agent/models.json if it exists
8
- * 2. Falls back to ~/.pi/agent/models.json if GSD file doesn't exist
9
- * 3. Merges both files if both exist (GSD takes precedence)
4
+ * Uses ~/.gsd/agent/models.json exclusively.
10
5
  */
11
6
  /**
12
- * Resolve the path to models.json with fallback logic.
13
- *
14
- * Priority:
15
- * 1. ~/.gsd/agent/models.json (exists) → return this path
16
- * 2. ~/.pi/agent/models.json (exists) → return this path (fallback)
17
- * 3. Neither exists → return GSD path (will be created)
7
+ * Resolve the path to models.json.
18
8
  *
19
9
  * @returns The path to use for models.json
20
10
  */
@@ -1,35 +1,16 @@
1
1
  /**
2
- * Models.json resolution with fallback to ~/.pi/agent/models.json
2
+ * Models.json resolution for GSD.
3
3
  *
4
- * GSD uses ~/.gsd/agent/models.json, but for a smooth migration/development
5
- * experience, this module provides resolution logic that:
6
- *
7
- * 1. Reads ~/.gsd/agent/models.json if it exists
8
- * 2. Falls back to ~/.pi/agent/models.json if GSD file doesn't exist
9
- * 3. Merges both files if both exist (GSD takes precedence)
4
+ * Uses ~/.gsd/agent/models.json exclusively.
10
5
  */
11
- import { existsSync } from 'node:fs';
12
- import { homedir } from 'node:os';
13
6
  import { join } from 'node:path';
14
7
  import { agentDir } from './app-paths.js';
15
8
  const GSD_MODELS_PATH = join(agentDir, 'models.json');
16
- const PI_MODELS_PATH = join(homedir(), '.pi', 'agent', 'models.json');
17
9
  /**
18
- * Resolve the path to models.json with fallback logic.
19
- *
20
- * Priority:
21
- * 1. ~/.gsd/agent/models.json (exists) → return this path
22
- * 2. ~/.pi/agent/models.json (exists) → return this path (fallback)
23
- * 3. Neither exists → return GSD path (will be created)
10
+ * Resolve the path to models.json.
24
11
  *
25
12
  * @returns The path to use for models.json
26
13
  */
27
14
  export function resolveModelsJsonPath() {
28
- if (existsSync(GSD_MODELS_PATH)) {
29
- return GSD_MODELS_PATH;
30
- }
31
- if (existsSync(PI_MODELS_PATH)) {
32
- return PI_MODELS_PATH;
33
- }
34
15
  return GSD_MODELS_PATH;
35
16
  }
@@ -1,2 +1,11 @@
1
- /** Register GSD agent packages for extension virtual module resolution. */
2
- export declare function registerAgentBundles(): void;
1
+ /**
2
+ * Register GSD agent packages for extension virtual module resolution.
3
+ *
4
+ * The eager `@gsd/agent-core` and `@gsd/agent-modes` barrels are only consumed
5
+ * by the Bun-binary extension loader (which has no filesystem and resolves
6
+ * bundled packages through `virtualModules`). On the Node/dev path the loader
7
+ * resolves those same specifiers by file path via `getAliases()`, so importing
8
+ * the full barrels at startup there is ~400ms of wasted module loading.
9
+ * Load them only when actually needed (Bun), keeping Node startup lean.
10
+ */
11
+ export declare function registerAgentBundles(): Promise<void>;
@@ -1,12 +1,26 @@
1
- import * as agentCore from '@gsd/agent-core';
2
- import * as agentModes from '@gsd/agent-modes';
1
+ import { isBunBinary } from '@gsd/pi-coding-agent/config.js';
3
2
  import { registerExtensionBundledModules } from '@gsd/pi-coding-agent/core/extensions/loader.js';
4
3
  let registered = false;
5
- /** Register GSD agent packages for extension virtual module resolution. */
6
- export function registerAgentBundles() {
4
+ /**
5
+ * Register GSD agent packages for extension virtual module resolution.
6
+ *
7
+ * The eager `@gsd/agent-core` and `@gsd/agent-modes` barrels are only consumed
8
+ * by the Bun-binary extension loader (which has no filesystem and resolves
9
+ * bundled packages through `virtualModules`). On the Node/dev path the loader
10
+ * resolves those same specifiers by file path via `getAliases()`, so importing
11
+ * the full barrels at startup there is ~400ms of wasted module loading.
12
+ * Load them only when actually needed (Bun), keeping Node startup lean.
13
+ */
14
+ export async function registerAgentBundles() {
7
15
  if (registered)
8
16
  return;
9
17
  registered = true;
18
+ if (!isBunBinary)
19
+ return;
20
+ const [agentCore, agentModes] = await Promise.all([
21
+ import('@gsd/agent-core'),
22
+ import('@gsd/agent-modes'),
23
+ ]);
10
24
  registerExtensionBundledModules({
11
25
  '@gsd/agent-core': agentCore,
12
26
  '@gsd/agent-modes': agentModes,
@@ -22,6 +22,9 @@ export declare function readManagedResourceVersion(agentDir: string): string | n
22
22
  * directory (e.g. pre-install verification).
23
23
  */
24
24
  export declare function computeResourceFingerprint(rootDir?: string): string;
25
+ export declare function setGsdBrowserPackageSkillPathForTests(skillPath: string | null | undefined): void;
26
+ export declare function collectGsdBrowserPackageSkillReferences(content: string): string[];
27
+ export declare function hasStaleGsdBrowserPackageSkill(skillsDir: string): boolean;
25
28
  export declare function getNewerManagedResourceVersion(agentDir: string, currentVersion: string): string | null;
26
29
  /**
27
30
  * Syncs a single bundled resource directory into the agent directory.
@@ -49,18 +52,20 @@ export declare function reconcileMergedNodeModules(agentNodeModules: string, hoi
49
52
  /** Build a cache fingerprint from packageRoot + sorted entry names of both directories */
50
53
  export declare function mergedFingerprint(hoisted: string, internal: string): string;
51
54
  /**
52
- * Syncs all bundled resources to agentDir (~/.gsd/agent/) on every launch.
55
+ * Initializes managed resources under agentDir (~/.gsd/agent/).
53
56
  *
54
57
  * - extensions/ → ~/.gsd/agent/extensions/ (overwrite when version changes)
55
58
  * - shared/ → ~/.gsd/agent/shared/ (overwrite when version changes)
56
59
  * - agents/ → ~/.gsd/agent/agents/ (overwrite when version changes)
57
60
  * - skills/ → ~/.gsd/agent/skills/ (overwrite when version changes)
61
+ * - gsd-browser skill → ~/.gsd/agent/skills/gsd-browser/ from @opengsd/gsd-browser
58
62
  * - GSD-WORKFLOW.md → ~/.gsd/agent/GSD-WORKFLOW.md (fallback for env var miss)
59
63
  *
60
- * Skips the copy when the managed-resources.json version matches the current
61
- * GSD version, avoiding ~128ms of synchronous cpSync on every startup.
62
- * After `npm update -g @glittercowboy/gsd`, versions will differ and the
63
- * copy runs once to land the new resources.
64
+ * Skips the full copy only when the managed-resources.json version, content
65
+ * fingerprint, and package-owned gsd-browser skill all match the current
66
+ * install, avoiding ~128ms of synchronous cpSync on steady-state startup.
67
+ * After `npm update -g @opengsd/gsd-pi`, versions will differ and the copy
68
+ * runs once to land the new resources.
64
69
  *
65
70
  * Inspectable: `ls ~/.gsd/agent/extensions/`
66
71
  */
@@ -1,6 +1,7 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { homedir } from 'node:os';
3
3
  import { chmodSync, copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readlinkSync, readdirSync, rmSync, symlinkSync, unlinkSync, writeFileSync } from 'node:fs';
4
+ import { createRequire } from 'node:module';
4
5
  import { basename, dirname, join, relative, resolve } from 'node:path';
5
6
  import { fileURLToPath } from 'node:url';
6
7
  import { compareSemver } from './update-check.js';
@@ -24,6 +25,10 @@ const resourcesDir = resolveBundledResourcesDirFromPackageRoot(packageRoot);
24
25
  const bundledExtensionsDir = join(resourcesDir, 'extensions');
25
26
  const resourceVersionManifestName = 'managed-resources.json';
26
27
  const resourceFingerprintFileName = '.managed-resources-content-hash';
28
+ const gsdBrowserSkillName = 'gsd-browser';
29
+ const requireFromResourceLoader = createRequire(import.meta.url);
30
+ const gsdBrowserSkillReferenceDirs = ['docs', 'scripts', 'gsd-browser-skill'];
31
+ let gsdBrowserPackageSkillPathForTests;
27
32
  export { discoverExtensionEntryPaths } from './extension-discovery.js';
28
33
  export function getExtensionKey(entryPath, extensionsDir) {
29
34
  const relPath = relative(extensionsDir, entryPath);
@@ -153,6 +158,111 @@ function getCurrentResourceFingerprint() {
153
158
  }
154
159
  return computeResourceFingerprint();
155
160
  }
161
+ function resolveGsdBrowserPackageSkillPath() {
162
+ if (gsdBrowserPackageSkillPathForTests !== undefined) {
163
+ return gsdBrowserPackageSkillPathForTests;
164
+ }
165
+ try {
166
+ return requireFromResourceLoader.resolve('@opengsd/gsd-browser/SKILL.md');
167
+ }
168
+ catch {
169
+ return null;
170
+ }
171
+ }
172
+ export function setGsdBrowserPackageSkillPathForTests(skillPath) {
173
+ gsdBrowserPackageSkillPathForTests = skillPath;
174
+ }
175
+ export function collectGsdBrowserPackageSkillReferences(content) {
176
+ const refs = new Set();
177
+ const referencePattern = /`((?:\.\/)?(?:docs|scripts|gsd-browser-skill)\/[^`\s]+)`/g;
178
+ for (const match of content.matchAll(referencePattern)) {
179
+ const ref = normalizeGsdBrowserPackageSkillReference(match[1]);
180
+ if (ref)
181
+ refs.add(ref);
182
+ }
183
+ return [...refs].sort();
184
+ }
185
+ function normalizeGsdBrowserPackageSkillReference(ref) {
186
+ if (!ref)
187
+ return null;
188
+ const normalized = ref
189
+ .replace(/^\.\//, '')
190
+ .replace(/[),.;:]+$/, '');
191
+ if (normalized.includes('..') || normalized.startsWith('/'))
192
+ return null;
193
+ if (!gsdBrowserSkillReferenceDirs.some(dir => normalized === dir || normalized.startsWith(`${dir}/`))) {
194
+ return null;
195
+ }
196
+ return normalized;
197
+ }
198
+ function readGsdBrowserPackageSkillBundle(sourceSkillPath) {
199
+ const skillContent = readFileSync(sourceSkillPath);
200
+ const files = new Map([['SKILL.md', skillContent]]);
201
+ const supportRefs = collectGsdBrowserPackageSkillReferences(skillContent.toString('utf-8'));
202
+ const sourceDir = dirname(sourceSkillPath);
203
+ for (const relPath of supportRefs) {
204
+ const sourcePath = join(sourceDir, relPath);
205
+ if (existsSync(sourcePath)) {
206
+ files.set(relPath, readFileSync(sourcePath));
207
+ }
208
+ }
209
+ return files;
210
+ }
211
+ export function hasStaleGsdBrowserPackageSkill(skillsDir) {
212
+ const targetDir = join(skillsDir, gsdBrowserSkillName);
213
+ const sourceSkillPath = resolveGsdBrowserPackageSkillPath();
214
+ // Package unresolvable. syncGsdBrowserPackageSkill is a no-op in this case
215
+ // (it preserves any existing managed skill), so reporting "stale" here
216
+ // would drive a full resource resync on every launch that the sync cannot
217
+ // actually satisfy. Keep the existing managed skill in place until the
218
+ // package becomes resolvable again or the manifest fingerprint changes.
219
+ if (!sourceSkillPath)
220
+ return false;
221
+ try {
222
+ const sourceDir = dirname(sourceSkillPath);
223
+ const skillContent = readFileSync(sourceSkillPath, 'utf-8');
224
+ for (const [relPath, content] of readGsdBrowserPackageSkillBundle(sourceSkillPath)) {
225
+ const targetPath = join(targetDir, relPath);
226
+ if (!existsSync(targetPath) || !readFileSync(targetPath).equals(content)) {
227
+ return true;
228
+ }
229
+ }
230
+ // Only flag SKILL.md references when sync can actually correct them.
231
+ // The bundle loop above already covers "source has it, target missing".
232
+ // A reference the package itself does not ship (source missing) is only
233
+ // worth a resync if the target still has a stale copy that sync should
234
+ // clean up; missing on both sides is the steady state when upstream
235
+ // omits files referenced from SKILL.md and is not actionable here.
236
+ for (const relPath of collectGsdBrowserPackageSkillReferences(skillContent)) {
237
+ const sourcePath = join(sourceDir, relPath);
238
+ const targetPath = join(targetDir, relPath);
239
+ if (!existsSync(sourcePath) && existsSync(targetPath)) {
240
+ return true;
241
+ }
242
+ }
243
+ return false;
244
+ }
245
+ catch {
246
+ return true;
247
+ }
248
+ }
249
+ function syncGsdBrowserPackageSkill(skillsDir) {
250
+ const targetDir = join(skillsDir, gsdBrowserSkillName);
251
+ const sourceSkillPath = resolveGsdBrowserPackageSkillPath();
252
+ if (!sourceSkillPath)
253
+ return;
254
+ makeTreeWritable(targetDir);
255
+ rmSync(targetDir, { recursive: true, force: true });
256
+ for (const [relPath, content] of readGsdBrowserPackageSkillBundle(sourceSkillPath)) {
257
+ const targetPath = join(targetDir, relPath);
258
+ mkdirSync(dirname(targetPath), { recursive: true });
259
+ writeFileSync(targetPath, content);
260
+ if (relPath.startsWith('scripts/') && relPath.endsWith('.sh')) {
261
+ chmodSync(targetPath, 0o755);
262
+ }
263
+ }
264
+ makeTreeWritable(targetDir);
265
+ }
156
266
  function collectFileEntries(dir, root, out) {
157
267
  if (!existsSync(dir))
158
268
  return;
@@ -557,18 +667,20 @@ function pruneRemovedBundledExtensions(manifest, agentDir) {
557
667
  removeFileIfStale('env-utils.js');
558
668
  }
559
669
  /**
560
- * Syncs all bundled resources to agentDir (~/.gsd/agent/) on every launch.
670
+ * Initializes managed resources under agentDir (~/.gsd/agent/).
561
671
  *
562
672
  * - extensions/ → ~/.gsd/agent/extensions/ (overwrite when version changes)
563
673
  * - shared/ → ~/.gsd/agent/shared/ (overwrite when version changes)
564
674
  * - agents/ → ~/.gsd/agent/agents/ (overwrite when version changes)
565
675
  * - skills/ → ~/.gsd/agent/skills/ (overwrite when version changes)
676
+ * - gsd-browser skill → ~/.gsd/agent/skills/gsd-browser/ from @opengsd/gsd-browser
566
677
  * - GSD-WORKFLOW.md → ~/.gsd/agent/GSD-WORKFLOW.md (fallback for env var miss)
567
678
  *
568
- * Skips the copy when the managed-resources.json version matches the current
569
- * GSD version, avoiding ~128ms of synchronous cpSync on every startup.
570
- * After `npm update -g @glittercowboy/gsd`, versions will differ and the
571
- * copy runs once to land the new resources.
679
+ * Skips the full copy only when the managed-resources.json version, content
680
+ * fingerprint, and package-owned gsd-browser skill all match the current
681
+ * install, avoiding ~128ms of synchronous cpSync on steady-state startup.
682
+ * After `npm update -g @opengsd/gsd-pi`, versions will differ and the copy
683
+ * runs once to land the new resources.
572
684
  *
573
685
  * Inspectable: `ls ~/.gsd/agent/extensions/`
574
686
  */
@@ -603,11 +715,13 @@ export function initResources(agentDir, skillsDir = join(agentDir, 'skills')) {
603
715
  const hasStaleExtensionFiles = hasStaleCompiledExtensionSiblings(extensionsDir, bundledExtensionsDir);
604
716
  const hasMissingSharedFiles = hasMissingBundledResourceFiles(join(agentDir, 'shared'), join(resourcesDir, 'shared'));
605
717
  const hasMissingSkillFiles = hasMissingBundledResourceFiles(skillsDir, join(resourcesDir, 'skills'));
718
+ const hasStaleGsdBrowserSkill = hasStaleGsdBrowserPackageSkill(skillsDir);
606
719
  if (manifest.contentHash &&
607
720
  manifest.contentHash === currentHash &&
608
721
  !hasStaleExtensionFiles &&
609
722
  !hasMissingSharedFiles &&
610
- !hasMissingSkillFiles) {
723
+ !hasMissingSkillFiles &&
724
+ !hasStaleGsdBrowserSkill) {
611
725
  return;
612
726
  }
613
727
  }
@@ -616,6 +730,7 @@ export function initResources(agentDir, skillsDir = join(agentDir, 'skills')) {
616
730
  syncResourceDir(join(resourcesDir, 'shared'), join(agentDir, 'shared'));
617
731
  syncResourceDir(join(resourcesDir, 'agents'), join(agentDir, 'agents'));
618
732
  syncResourceDir(join(resourcesDir, 'skills'), skillsDir);
733
+ syncGsdBrowserPackageSkill(skillsDir);
619
734
  // Sync GSD-WORKFLOW.md to agentDir as a fallback for when GSD_WORKFLOW_PATH
620
735
  // env var is not set (e.g. fork/dev builds, alternative entry points).
621
736
  const workflowSrc = join(resourcesDir, 'GSD-WORKFLOW.md');
@@ -701,9 +816,8 @@ function collectRelativeFiles(rootDir) {
701
816
  return files;
702
817
  }
703
818
  /**
704
- * Constructs a DefaultResourceLoader that loads extensions from both
705
- * ~/.gsd/agent/extensions/ (GSD's default) and ~/.pi/agent/extensions/ (pi's default).
706
- * This allows users to use extensions from either location.
819
+ * Constructs a DefaultResourceLoader that loads extensions from
820
+ * ~/.gsd/agent/extensions/ (GSD's default) only.
707
821
  */
708
822
  // Cache bundled extension keys at module load — avoids re-scanning the extensions
709
823
  // directory in buildResourceLoader() (already scanned by loader.ts for env var).
@@ -718,19 +832,8 @@ export async function buildResourceLoader(agentDir, options = {}) {
718
832
  const { DefaultResourceLoader } = await loadPiCodingAgentModule();
719
833
  const { sortExtensionPaths } = await import('./extension-sort.js');
720
834
  const registry = loadRegistry();
721
- const piAgentDir = join(homedir(), '.pi', 'agent');
722
- const piExtensionsDir = join(piAgentDir, 'extensions');
723
835
  const bundledKeys = getBundledExtensionKeys();
724
- const piExtensionPaths = discoverExtensionEntryPaths(piExtensionsDir)
725
- .filter((entryPath) => !bundledKeys.has(getExtensionKey(entryPath, piExtensionsDir)))
726
- .filter((entryPath) => {
727
- const manifest = readManifestFromEntryPath(entryPath);
728
- if (!manifest)
729
- return true;
730
- return isExtensionEnabled(registry, manifest.id);
731
- });
732
836
  const additionalExtensionPaths = [
733
- ...piExtensionPaths,
734
837
  ...(options.additionalExtensionPaths ?? []),
735
838
  ];
736
839
  return new DefaultResourceLoader({
@@ -1 +1 @@
1
- 749698fd346380ec
1
+ a7c86c0ba8432c63