@opengsd/gsd-pi 1.3.0 → 1.4.0-dev.5fc22c6f

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 (1115) hide show
  1. package/README.md +11 -11
  2. package/dist/cli.js +32 -4
  3. package/dist/headless-answers.js +1 -1
  4. package/dist/headless-context.js +0 -1
  5. package/dist/headless-ui.d.ts +1 -1
  6. package/dist/headless-ui.js +1 -1
  7. package/dist/headless.js +1 -1
  8. package/dist/help-text.js +29 -0
  9. package/dist/hermes-integration-install.d.ts +17 -0
  10. package/dist/hermes-integration-install.js +199 -0
  11. package/dist/jiti-workspace-aliases.d.ts +11 -2
  12. package/dist/jiti-workspace-aliases.js +19 -3
  13. package/dist/onboarding.js +11 -0
  14. package/dist/read-cli.d.ts +23 -0
  15. package/dist/read-cli.js +90 -0
  16. package/dist/resource-loader.d.ts +3 -3
  17. package/dist/resource-loader.js +4 -13
  18. package/dist/resources/.managed-resources-content-hash +1 -1
  19. package/dist/resources/GSD-WORKFLOW.md +35 -40
  20. package/dist/resources/extensions/claude-code-cli/index.js +7 -1
  21. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  22. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +145 -72
  23. package/dist/resources/extensions/cursor-cli/index.js +16 -0
  24. package/dist/resources/extensions/cursor-cli/models.js +63 -0
  25. package/dist/resources/extensions/cursor-cli/package.json +11 -0
  26. package/dist/resources/extensions/cursor-cli/readiness.js +128 -0
  27. package/dist/resources/extensions/cursor-cli/stream-adapter.js +353 -0
  28. package/dist/resources/extensions/google-cli/stream-adapter.js +82 -15
  29. package/dist/resources/extensions/gsd/activity-log.js +4 -1
  30. package/dist/resources/extensions/gsd/artifact-verification.js +431 -0
  31. package/dist/resources/extensions/gsd/auto/dispatch-history.js +6 -1
  32. package/dist/resources/extensions/gsd/auto/loop.js +67 -2
  33. package/dist/resources/extensions/gsd/auto/orchestrator.js +28 -10
  34. package/dist/resources/extensions/gsd/auto/session.js +11 -0
  35. package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
  36. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
  37. package/dist/resources/extensions/gsd/auto-artifact-paths.js +108 -19
  38. package/dist/resources/extensions/gsd/auto-budget.js +5 -1
  39. package/dist/resources/extensions/gsd/auto-dispatch.js +77 -32
  40. package/dist/resources/extensions/gsd/auto-model-selection.js +43 -22
  41. package/dist/resources/extensions/gsd/auto-post-unit.js +28 -22
  42. package/dist/resources/extensions/gsd/auto-prompts.js +144 -45
  43. package/dist/resources/extensions/gsd/auto-recovery.js +14 -483
  44. package/dist/resources/extensions/gsd/auto-runtime-state.js +17 -5
  45. package/dist/resources/extensions/gsd/auto-start.js +60 -33
  46. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +7 -3
  47. package/dist/resources/extensions/gsd/auto-verification.js +10 -4
  48. package/dist/resources/extensions/gsd/auto-worktree.js +155 -102
  49. package/dist/resources/extensions/gsd/auto.js +53 -15
  50. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +141 -65
  51. package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +39 -0
  52. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +14 -5
  53. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -0
  54. package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
  55. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +23 -1
  56. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +227 -28
  57. package/dist/resources/extensions/gsd/bootstrap/system-context.js +190 -43
  58. package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +104 -10
  59. package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
  60. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +87 -17
  61. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +95 -5
  62. package/dist/resources/extensions/gsd/codebase-generator.js +160 -25
  63. package/dist/resources/extensions/gsd/commands/catalog.js +6 -0
  64. package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
  65. package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
  66. package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
  67. package/dist/resources/extensions/gsd/commands/handlers/auto.js +1 -1
  68. package/dist/resources/extensions/gsd/commands/handlers/core.js +70 -4
  69. package/dist/resources/extensions/gsd/commands/handlers/ops.js +225 -1
  70. package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
  71. package/dist/resources/extensions/gsd/commands-context.js +19 -1
  72. package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
  73. package/dist/resources/extensions/gsd/commands-handlers.js +67 -1
  74. package/dist/resources/extensions/gsd/commands-maintenance.js +79 -2
  75. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +176 -13
  76. package/dist/resources/extensions/gsd/commands-usage.js +1 -1
  77. package/dist/resources/extensions/gsd/commands-verdict.js +17 -11
  78. package/dist/resources/extensions/gsd/commands-worktree.js +23 -12
  79. package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
  80. package/dist/resources/extensions/gsd/compat/index.js +3 -0
  81. package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
  82. package/dist/resources/extensions/gsd/config-overlay.js +2 -2
  83. package/dist/resources/extensions/gsd/consent-question.js +12 -0
  84. package/dist/resources/extensions/gsd/consent-verdict.js +10 -0
  85. package/dist/resources/extensions/gsd/dashboard-overlay.js +71 -6
  86. package/dist/resources/extensions/gsd/db/engine.js +31 -1
  87. package/dist/resources/extensions/gsd/db/queries.js +153 -0
  88. package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
  89. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +34 -0
  90. package/dist/resources/extensions/gsd/db-workspace.js +68 -4
  91. package/dist/resources/extensions/gsd/delegation-policy.js +1 -1
  92. package/dist/resources/extensions/gsd/discussion-handoff.js +17 -8
  93. package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -4
  94. package/dist/resources/extensions/gsd/doctor-engine-checks.js +227 -5
  95. package/dist/resources/extensions/gsd/doctor-git-checks.js +25 -3
  96. package/dist/resources/extensions/gsd/doctor-providers.js +130 -18
  97. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +5 -15
  98. package/dist/resources/extensions/gsd/doctor.js +121 -10
  99. package/dist/resources/extensions/gsd/error-classifier.js +13 -1
  100. package/dist/resources/extensions/gsd/escalation.js +11 -4
  101. package/dist/resources/extensions/gsd/exec-sandbox.js +59 -13
  102. package/dist/resources/extensions/gsd/export-html.js +10 -3
  103. package/dist/resources/extensions/gsd/export.js +73 -0
  104. package/dist/resources/extensions/gsd/file-lock.js +1 -1
  105. package/dist/resources/extensions/gsd/flat-phase-migration.js +272 -0
  106. package/dist/resources/extensions/gsd/forensics.js +4 -33
  107. package/dist/resources/extensions/gsd/git-service.js +72 -16
  108. package/dist/resources/extensions/gsd/gitignore.js +10 -3
  109. package/dist/resources/extensions/gsd/guidance.js +8 -7
  110. package/dist/resources/extensions/gsd/guided-flow-queue.js +66 -5
  111. package/dist/resources/extensions/gsd/guided-flow.js +50 -7
  112. package/dist/resources/extensions/gsd/health-widget.js +55 -29
  113. package/dist/resources/extensions/gsd/json-persistence.js +20 -0
  114. package/dist/resources/extensions/gsd/key-manager.js +1 -0
  115. package/dist/resources/extensions/gsd/knowledge-backfill.js +18 -11
  116. package/dist/resources/extensions/gsd/layout-policy.js +77 -0
  117. package/dist/resources/extensions/gsd/markdown-renderer.js +420 -129
  118. package/dist/resources/extensions/gsd/mcp-filter.js +44 -10
  119. package/dist/resources/extensions/gsd/md-importer.js +153 -51
  120. package/dist/resources/extensions/gsd/memory-backfill.js +28 -21
  121. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +44 -21
  122. package/dist/resources/extensions/gsd/metrics.js +22 -14
  123. package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
  124. package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
  125. package/dist/resources/extensions/gsd/migrate-external.js +70 -8
  126. package/dist/resources/extensions/gsd/migration-auto-check.js +27 -14
  127. package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
  128. package/dist/resources/extensions/gsd/milestone-closeout.js +12 -2
  129. package/dist/resources/extensions/gsd/milestone-ids.js +79 -18
  130. package/dist/resources/extensions/gsd/milestone-implementation-evidence.js +26 -20
  131. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +8 -0
  132. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +7 -4
  133. package/dist/resources/extensions/gsd/model-router.js +79 -20
  134. package/dist/resources/extensions/gsd/notification-store.js +22 -29
  135. package/dist/resources/extensions/gsd/notifications.js +36 -7
  136. package/dist/resources/extensions/gsd/observability-validator.js +12 -4
  137. package/dist/resources/extensions/gsd/orphan-stash-audit.js +92 -16
  138. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +133 -35
  139. package/dist/resources/extensions/gsd/parsers-legacy.js +40 -14
  140. package/dist/resources/extensions/gsd/paths.js +356 -44
  141. package/dist/resources/extensions/gsd/planning-depth.js +2 -1
  142. package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
  143. package/dist/resources/extensions/gsd/preferences-diagnostics.js +24 -1
  144. package/dist/resources/extensions/gsd/preferences-models.js +25 -11
  145. package/dist/resources/extensions/gsd/preferences-validation.js +25 -2
  146. package/dist/resources/extensions/gsd/preferences.js +91 -15
  147. package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  148. package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  149. package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  150. package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  151. package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
  152. package/dist/resources/extensions/gsd/prompts/code-review.md +39 -0
  153. package/dist/resources/extensions/gsd/prompts/complete-slice.md +21 -16
  154. package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  155. package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
  156. package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  157. package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
  158. package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
  159. package/dist/resources/extensions/gsd/prompts/health.md +37 -0
  160. package/dist/resources/extensions/gsd/prompts/import.md +30 -0
  161. package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
  162. package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  163. package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
  164. package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  165. package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  166. package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  167. package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
  168. package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
  169. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
  170. package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  171. package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  172. package/dist/resources/extensions/gsd/prompts/plan-slice.md +5 -3
  173. package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
  174. package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
  175. package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
  176. package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  177. package/dist/resources/extensions/gsd/prompts/review.md +27 -0
  178. package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  179. package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
  180. package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
  181. package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  182. package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
  183. package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
  184. package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
  185. package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
  186. package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  187. package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
  188. package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  189. package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  190. package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
  191. package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
  192. package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
  193. package/dist/resources/extensions/gsd/queue-order.js +3 -2
  194. package/dist/resources/extensions/gsd/quick.js +45 -2
  195. package/dist/resources/extensions/gsd/recovery-classification.js +8 -0
  196. package/dist/resources/extensions/gsd/redact-secrets.js +37 -0
  197. package/dist/resources/extensions/gsd/repository-registry.js +6 -1
  198. package/dist/resources/extensions/gsd/roadmap-slices.js +1 -1
  199. package/dist/resources/extensions/gsd/root-write-leak-guard.js +7 -1
  200. package/dist/resources/extensions/gsd/safe-fs.js +23 -2
  201. package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
  202. package/dist/resources/extensions/gsd/safety/destructive-guard.js +8 -1
  203. package/dist/resources/extensions/gsd/safety/evidence-collector.js +16 -1
  204. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +43 -1
  205. package/dist/resources/extensions/gsd/safety/file-change-validator.js +5 -2
  206. package/dist/resources/extensions/gsd/service-tier.js +2 -1
  207. package/dist/resources/extensions/gsd/session-forensics.js +11 -1
  208. package/dist/resources/extensions/gsd/session-lock.js +7 -6
  209. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +10 -9
  210. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +52 -0
  211. package/dist/resources/extensions/gsd/state/derive/cache.js +28 -0
  212. package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
  213. package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
  214. package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
  215. package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
  216. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +38 -4
  217. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
  218. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
  219. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
  220. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
  221. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
  222. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +138 -19
  223. package/dist/resources/extensions/gsd/state-reconciliation/index.js +84 -26
  224. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +34 -18
  225. package/dist/resources/extensions/gsd/state.js +13 -581
  226. package/dist/resources/extensions/gsd/sync-lock.js +11 -18
  227. package/dist/resources/extensions/gsd/tool-surface-readiness.js +205 -16
  228. package/dist/resources/extensions/gsd/tools/complete-milestone.js +8 -4
  229. package/dist/resources/extensions/gsd/tools/complete-slice.js +14 -4
  230. package/dist/resources/extensions/gsd/tools/complete-task.js +58 -15
  231. package/dist/resources/extensions/gsd/tools/exec-tool.js +7 -2
  232. package/dist/resources/extensions/gsd/tools/plan-slice.js +60 -47
  233. package/dist/resources/extensions/gsd/tools/plan-task.js +115 -9
  234. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +9 -3
  235. package/dist/resources/extensions/gsd/tools/validate-milestone.js +8 -3
  236. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +84 -5
  237. package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
  238. package/dist/resources/extensions/gsd/undo.js +51 -15
  239. package/dist/resources/extensions/gsd/unit-context-composer.js +23 -7
  240. package/dist/resources/extensions/gsd/unit-context-manifest.js +5 -4
  241. package/dist/resources/extensions/gsd/unit-registry.js +63 -9
  242. package/dist/resources/extensions/gsd/unit-runtime.js +21 -0
  243. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +91 -5
  244. package/dist/resources/extensions/gsd/validation-block-guard.js +54 -4
  245. package/dist/resources/extensions/gsd/verification-gate.js +7 -0
  246. package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
  247. package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
  248. package/dist/resources/extensions/gsd/workflow-manifest.js +126 -13
  249. package/dist/resources/extensions/gsd/workflow-mcp.js +9 -1
  250. package/dist/resources/extensions/gsd/workflow-projections.js +44 -18
  251. package/dist/resources/extensions/gsd/workspace-git-preflight.js +30 -1
  252. package/dist/resources/extensions/gsd/workspace.js +26 -8
  253. package/dist/resources/extensions/gsd/worktree-command.js +6 -6
  254. package/dist/resources/extensions/gsd/worktree-health.js +6 -3
  255. package/dist/resources/extensions/gsd/worktree-manager.js +155 -20
  256. package/dist/resources/extensions/gsd/worktree-safety.js +20 -11
  257. package/dist/resources/extensions/mcp-client/manager.js +3 -3
  258. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  259. package/dist/update-check.js +15 -4
  260. package/dist/web/standalone/.next/BUILD_ID +1 -1
  261. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  262. package/dist/web/standalone/.next/build-manifest.json +4 -4
  263. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  264. package/dist/web/standalone/.next/react-loadable-manifest.json +9 -9
  265. package/dist/web/standalone/.next/required-server-files.json +3 -3
  266. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  267. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  268. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  269. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  270. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  271. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  272. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  273. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  274. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  275. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  276. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  277. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  278. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  279. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  280. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  281. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  282. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  283. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  284. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  285. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  286. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  287. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  288. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  289. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  290. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  291. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  292. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  293. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  294. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  295. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  296. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  297. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  298. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  299. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  300. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  301. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  302. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  303. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  304. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  305. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  306. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  307. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  308. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  309. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  310. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  311. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  312. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  313. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  314. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  315. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  316. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  317. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  318. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  319. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  320. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  321. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  322. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  323. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  324. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
  325. package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
  326. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  327. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  328. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  329. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  330. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  331. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  332. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  333. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  334. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  335. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  336. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  337. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  338. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  339. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  340. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  341. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  342. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  343. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  344. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  345. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  346. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  347. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  348. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  349. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  350. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  351. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  352. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  353. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  354. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  355. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  356. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  357. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  358. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  359. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  360. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  361. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  362. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  363. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  364. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  365. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  366. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  367. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  368. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  369. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  370. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  371. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  372. package/dist/web/standalone/.next/server/app/index.html +1 -1
  373. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  374. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  375. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  376. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  377. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  378. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  379. package/dist/web/standalone/.next/server/app/page.js +2 -2
  380. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  381. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  382. package/dist/web/standalone/.next/server/chunks/1128.js +1 -1
  383. package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
  384. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  385. package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
  386. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  387. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  388. package/dist/web/standalone/.next/server/middleware.js +3 -3
  389. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  390. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  391. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  392. package/dist/web/standalone/.next/static/chunks/{2659.b7b129ee6a769448.js → 2659.58e950899a9bb82f.js} +1 -1
  393. package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
  394. package/dist/web/standalone/.next/static/chunks/{3616.3c60753b8ffcbd2e.js → 3616.61a2af74bb8833c8.js} +1 -1
  395. package/dist/web/standalone/.next/static/chunks/{4283.e4873b058df143a1.js → 4283.d0d9e0a955e441cb.js} +2 -2
  396. package/dist/web/standalone/.next/static/chunks/{5826.a46ecdd1cfe8dabc.js → 5826.5421d66c72b9f34e.js} +1 -1
  397. package/dist/web/standalone/.next/static/chunks/8785.e29b3134cab1d153.js +1 -0
  398. package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
  399. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +1 -0
  400. package/dist/web/standalone/.next/static/chunks/app/{layout-b35cbfff38aaf4cf.js → layout-4ae2d68984392bbf.js} +1 -1
  401. package/dist/web/standalone/.next/static/chunks/app/page-72a856634ad14c10.js +1 -0
  402. package/dist/web/standalone/.next/static/chunks/{main-app-590a74400e35f685.js → main-app-90d1d8d5e5d2dc6b.js} +1 -1
  403. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +1 -0
  404. package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.js +1 -0
  405. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  406. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  407. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  408. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  409. package/dist/web/standalone/server.js +1 -1
  410. package/dist/web-mode.d.ts +3 -1
  411. package/dist/web-mode.js +7 -5
  412. package/dist/wizard.d.ts +8 -0
  413. package/dist/wizard.js +8 -1
  414. package/integrations/hermes/README.md +48 -0
  415. package/integrations/hermes/__init__.py +31 -0
  416. package/integrations/hermes/docs/setup.md +272 -0
  417. package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
  418. package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
  419. package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
  420. package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
  421. package/integrations/hermes/open_gsd_hermes/config.py +59 -0
  422. package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
  423. package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
  424. package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
  425. package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
  426. package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
  427. package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
  428. package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
  429. package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
  430. package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
  431. package/integrations/hermes/open_gsd_hermes/types.py +100 -0
  432. package/integrations/hermes/plugin.yaml +38 -0
  433. package/integrations/hermes/pyproject.toml +32 -0
  434. package/integrations/hermes/scripts/preflight.sh +92 -0
  435. package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
  436. package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
  437. package/integrations/hermes/tests/golden/snapshot.txt +8 -0
  438. package/integrations/hermes/tests/test_binding.py +103 -0
  439. package/integrations/hermes/tests/test_config.py +36 -0
  440. package/integrations/hermes/tests/test_cron.py +34 -0
  441. package/integrations/hermes/tests/test_directory_loader.py +37 -0
  442. package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
  443. package/integrations/hermes/tests/test_memory.py +59 -0
  444. package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
  445. package/integrations/hermes/tests/test_register.py +56 -0
  446. package/integrations/hermes/tests/test_snapshot.py +53 -0
  447. package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
  448. package/package.json +9 -8
  449. package/packages/cloud-mcp-gateway/dist/auth-store.d.ts +1 -0
  450. package/packages/cloud-mcp-gateway/dist/auth-store.d.ts.map +1 -1
  451. package/packages/cloud-mcp-gateway/dist/auth-store.js +21 -1
  452. package/packages/cloud-mcp-gateway/dist/auth-store.js.map +1 -1
  453. package/packages/cloud-mcp-gateway/dist/auth-store.test.js +34 -0
  454. package/packages/cloud-mcp-gateway/dist/auth-store.test.js.map +1 -1
  455. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
  456. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
  457. package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
  458. package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
  459. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
  460. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
  461. package/packages/cloud-mcp-gateway/package.json +2 -2
  462. package/packages/contracts/dist/workflow.d.ts +1 -0
  463. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  464. package/packages/contracts/dist/workflow.js +2 -0
  465. package/packages/contracts/dist/workflow.js.map +1 -1
  466. package/packages/contracts/package.json +1 -1
  467. package/packages/daemon/dist/cloud-runtime.d.ts +2 -0
  468. package/packages/daemon/dist/cloud-runtime.d.ts.map +1 -1
  469. package/packages/daemon/dist/cloud-runtime.js +25 -1
  470. package/packages/daemon/dist/cloud-runtime.js.map +1 -1
  471. package/packages/daemon/dist/cloud-runtime.test.js +51 -0
  472. package/packages/daemon/dist/cloud-runtime.test.js.map +1 -1
  473. package/packages/daemon/dist/message-batcher.d.ts +7 -0
  474. package/packages/daemon/dist/message-batcher.d.ts.map +1 -1
  475. package/packages/daemon/dist/message-batcher.js +13 -0
  476. package/packages/daemon/dist/message-batcher.js.map +1 -1
  477. package/packages/daemon/dist/message-batcher.test.js +48 -0
  478. package/packages/daemon/dist/message-batcher.test.js.map +1 -1
  479. package/packages/daemon/package.json +5 -5
  480. package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
  481. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
  482. package/packages/gsd-agent-core/dist/agent-session.js +3 -0
  483. package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
  484. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +13 -1
  485. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +1 -1
  486. package/packages/gsd-agent-core/dist/compaction/compaction.js +15 -1
  487. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +1 -1
  488. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts +41 -0
  489. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
  490. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
  491. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
  492. package/packages/gsd-agent-core/dist/index.d.ts +2 -0
  493. package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
  494. package/packages/gsd-agent-core/dist/index.js +2 -0
  495. package/packages/gsd-agent-core/dist/index.js.map +1 -1
  496. package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
  497. package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
  498. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
  499. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
  500. package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
  501. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
  502. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
  503. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
  504. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
  505. package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
  506. package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
  507. package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
  508. package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
  509. package/packages/gsd-agent-core/package.json +5 -5
  510. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  511. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  512. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +25 -11
  513. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  514. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
  515. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
  516. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
  517. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
  518. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -24
  519. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  520. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -829
  521. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  522. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts +58 -0
  523. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
  524. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
  525. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
  526. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
  527. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
  528. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
  529. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
  530. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
  531. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
  532. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +259 -0
  533. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
  534. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
  535. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
  536. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
  537. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
  538. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +9 -0
  539. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  540. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +1 -1
  541. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  542. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts +54 -0
  543. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
  544. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
  545. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
  546. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +4 -1
  547. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  548. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +9 -0
  549. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  550. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
  551. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
  552. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
  553. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
  554. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
  555. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
  556. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
  557. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
  558. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +2 -0
  559. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  560. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +24 -6
  561. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +1 -1
  562. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  563. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +18 -0
  564. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  565. package/packages/gsd-agent-modes/package.json +7 -7
  566. package/packages/mcp-server/README.md +11 -1
  567. package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
  568. package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
  569. package/packages/mcp-server/dist/cli-errors.js +12 -0
  570. package/packages/mcp-server/dist/cli-errors.js.map +1 -1
  571. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -1
  572. package/packages/mcp-server/dist/cli-runner.js +33 -0
  573. package/packages/mcp-server/dist/cli-runner.js.map +1 -1
  574. package/packages/mcp-server/dist/cli.d.ts +1 -0
  575. package/packages/mcp-server/dist/cli.d.ts.map +1 -1
  576. package/packages/mcp-server/dist/cli.js +1 -0
  577. package/packages/mcp-server/dist/cli.js.map +1 -1
  578. package/packages/mcp-server/dist/server.d.ts +30 -1
  579. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  580. package/packages/mcp-server/dist/server.js +85 -6
  581. package/packages/mcp-server/dist/server.js.map +1 -1
  582. package/packages/mcp-server/dist/workflow-tools.d.ts +13 -1
  583. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  584. package/packages/mcp-server/dist/workflow-tools.js +35 -21
  585. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  586. package/packages/mcp-server/package.json +21 -5
  587. package/packages/native/package.json +1 -1
  588. package/packages/pi-agent-core/dist/agent-loop.js +3 -2
  589. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  590. package/packages/pi-agent-core/package.json +1 -1
  591. package/packages/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  592. package/packages/pi-ai/dist/env-api-keys.js +3 -0
  593. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  594. package/packages/pi-ai/dist/models.generated.d.ts +46 -0
  595. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  596. package/packages/pi-ai/dist/models.generated.js +38 -0
  597. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  598. package/packages/pi-ai/dist/types.d.ts +2 -2
  599. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  600. package/packages/pi-ai/dist/types.js.map +1 -1
  601. package/packages/pi-ai/package.json +1 -1
  602. package/packages/pi-coding-agent/README.md +3 -2
  603. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  604. package/packages/pi-coding-agent/dist/core/model-resolver.js +1 -0
  605. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  606. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts +9 -0
  607. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
  608. package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
  609. package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
  610. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
  611. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
  612. package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
  613. package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
  614. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
  615. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
  616. package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
  617. package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
  618. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +135 -0
  619. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
  620. package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
  621. package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
  622. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
  623. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  624. package/packages/pi-coding-agent/dist/core/session-manager.js +22 -459
  625. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  626. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
  627. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
  628. package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
  629. package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
  630. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  631. package/packages/pi-coding-agent/dist/theme/theme.js +11 -7
  632. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  633. package/packages/pi-coding-agent/package.json +7 -7
  634. package/packages/pi-tui/package.json +2 -2
  635. package/packages/rpc-client/dist/rpc-client.js +1 -1
  636. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  637. package/packages/rpc-client/package.json +2 -2
  638. package/pkg/dist/theme/theme-schema.d.ts +75 -75
  639. package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
  640. package/pkg/dist/theme/theme-schema.js +1 -1
  641. package/pkg/dist/theme/theme-schema.js.map +1 -1
  642. package/pkg/dist/theme/theme.d.ts.map +1 -1
  643. package/pkg/dist/theme/theme.js +11 -7
  644. package/pkg/dist/theme/theme.js.map +1 -1
  645. package/pkg/package.json +1 -1
  646. package/scripts/link-workspace-packages.cjs +14 -4
  647. package/src/resources/GSD-WORKFLOW.md +35 -40
  648. package/src/resources/extensions/claude-code-cli/index.ts +8 -1
  649. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  650. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +170 -71
  651. package/src/resources/extensions/claude-code-cli/tests/index.test.ts +61 -0
  652. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +421 -10
  653. package/src/resources/extensions/cursor-cli/index.ts +18 -0
  654. package/src/resources/extensions/cursor-cli/models.ts +65 -0
  655. package/src/resources/extensions/cursor-cli/package.json +11 -0
  656. package/src/resources/extensions/cursor-cli/readiness.ts +143 -0
  657. package/src/resources/extensions/cursor-cli/stream-adapter.ts +440 -0
  658. package/src/resources/extensions/cursor-cli/tests/index.test.ts +54 -0
  659. package/src/resources/extensions/cursor-cli/tests/readiness.test.ts +29 -0
  660. package/src/resources/extensions/cursor-cli/tests/stream-adapter.test.ts +166 -0
  661. package/src/resources/extensions/google-cli/stream-adapter.ts +106 -19
  662. package/src/resources/extensions/gsd/activity-log.ts +4 -1
  663. package/src/resources/extensions/gsd/artifact-verification.ts +468 -0
  664. package/src/resources/extensions/gsd/auto/dispatch-history.ts +19 -1
  665. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
  666. package/src/resources/extensions/gsd/auto/loop.ts +69 -2
  667. package/src/resources/extensions/gsd/auto/orchestrator.ts +38 -13
  668. package/src/resources/extensions/gsd/auto/session.ts +14 -0
  669. package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +3 -1
  670. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
  671. package/src/resources/extensions/gsd/auto-artifact-paths.ts +129 -20
  672. package/src/resources/extensions/gsd/auto-budget.ts +12 -1
  673. package/src/resources/extensions/gsd/auto-dispatch.ts +85 -39
  674. package/src/resources/extensions/gsd/auto-model-selection.ts +56 -18
  675. package/src/resources/extensions/gsd/auto-post-unit.ts +37 -23
  676. package/src/resources/extensions/gsd/auto-prompts.ts +153 -45
  677. package/src/resources/extensions/gsd/auto-recovery.ts +21 -484
  678. package/src/resources/extensions/gsd/auto-runtime-state.ts +17 -5
  679. package/src/resources/extensions/gsd/auto-start.ts +67 -37
  680. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +7 -2
  681. package/src/resources/extensions/gsd/auto-verification.ts +10 -8
  682. package/src/resources/extensions/gsd/auto-worktree.ts +98 -26
  683. package/src/resources/extensions/gsd/auto.ts +59 -11
  684. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +164 -71
  685. package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +44 -0
  686. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +14 -5
  687. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -0
  688. package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
  689. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +23 -1
  690. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +263 -28
  691. package/src/resources/extensions/gsd/bootstrap/system-context.ts +219 -46
  692. package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +49 -1
  693. package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +114 -10
  694. package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
  695. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +109 -19
  696. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +109 -4
  697. package/src/resources/extensions/gsd/codebase-generator.ts +183 -25
  698. package/src/resources/extensions/gsd/commands/catalog.ts +6 -0
  699. package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
  700. package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
  701. package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
  702. package/src/resources/extensions/gsd/commands/handlers/auto.ts +1 -1
  703. package/src/resources/extensions/gsd/commands/handlers/core.ts +70 -3
  704. package/src/resources/extensions/gsd/commands/handlers/ops.ts +225 -1
  705. package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
  706. package/src/resources/extensions/gsd/commands-context.ts +18 -1
  707. package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
  708. package/src/resources/extensions/gsd/commands-handlers.ts +76 -1
  709. package/src/resources/extensions/gsd/commands-maintenance.ts +98 -2
  710. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +156 -11
  711. package/src/resources/extensions/gsd/commands-usage.ts +1 -1
  712. package/src/resources/extensions/gsd/commands-verdict.ts +16 -15
  713. package/src/resources/extensions/gsd/commands-worktree.ts +25 -12
  714. package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
  715. package/src/resources/extensions/gsd/compat/index.ts +12 -0
  716. package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
  717. package/src/resources/extensions/gsd/config-overlay.ts +3 -1
  718. package/src/resources/extensions/gsd/consent-question.ts +11 -1
  719. package/src/resources/extensions/gsd/consent-verdict.ts +30 -1
  720. package/src/resources/extensions/gsd/dashboard-overlay.ts +73 -7
  721. package/src/resources/extensions/gsd/db/engine.ts +34 -1
  722. package/src/resources/extensions/gsd/db/queries.ts +197 -0
  723. package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
  724. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +45 -0
  725. package/src/resources/extensions/gsd/db-workspace.ts +76 -3
  726. package/src/resources/extensions/gsd/delegation-policy.ts +1 -1
  727. package/src/resources/extensions/gsd/discussion-handoff.ts +19 -7
  728. package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -4
  729. package/src/resources/extensions/gsd/doctor-engine-checks.ts +275 -5
  730. package/src/resources/extensions/gsd/doctor-git-checks.ts +24 -2
  731. package/src/resources/extensions/gsd/doctor-providers.ts +142 -19
  732. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +5 -15
  733. package/src/resources/extensions/gsd/doctor-types.ts +9 -1
  734. package/src/resources/extensions/gsd/doctor.ts +125 -10
  735. package/src/resources/extensions/gsd/error-classifier.ts +14 -1
  736. package/src/resources/extensions/gsd/escalation.ts +9 -4
  737. package/src/resources/extensions/gsd/exec-sandbox.ts +62 -13
  738. package/src/resources/extensions/gsd/export-html.ts +11 -4
  739. package/src/resources/extensions/gsd/export.ts +88 -1
  740. package/src/resources/extensions/gsd/file-lock.ts +1 -1
  741. package/src/resources/extensions/gsd/flat-phase-migration.ts +325 -0
  742. package/src/resources/extensions/gsd/forensics.ts +4 -34
  743. package/src/resources/extensions/gsd/git-constants.ts +1 -1
  744. package/src/resources/extensions/gsd/git-service.ts +82 -16
  745. package/src/resources/extensions/gsd/gitignore.ts +11 -4
  746. package/src/resources/extensions/gsd/guidance.ts +9 -7
  747. package/src/resources/extensions/gsd/guided-flow-queue.ts +89 -4
  748. package/src/resources/extensions/gsd/guided-flow.ts +56 -8
  749. package/src/resources/extensions/gsd/health-widget.ts +69 -32
  750. package/src/resources/extensions/gsd/json-persistence.ts +20 -0
  751. package/src/resources/extensions/gsd/key-manager.ts +1 -0
  752. package/src/resources/extensions/gsd/knowledge-backfill.ts +16 -10
  753. package/src/resources/extensions/gsd/layout-policy.ts +86 -0
  754. package/src/resources/extensions/gsd/markdown-renderer.ts +434 -119
  755. package/src/resources/extensions/gsd/mcp-filter.ts +59 -10
  756. package/src/resources/extensions/gsd/md-importer.ts +215 -65
  757. package/src/resources/extensions/gsd/memory-backfill.ts +26 -20
  758. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +51 -19
  759. package/src/resources/extensions/gsd/metrics.ts +26 -13
  760. package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
  761. package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
  762. package/src/resources/extensions/gsd/migrate-external.ts +64 -8
  763. package/src/resources/extensions/gsd/migration-auto-check.ts +27 -13
  764. package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
  765. package/src/resources/extensions/gsd/milestone-closeout.ts +13 -2
  766. package/src/resources/extensions/gsd/milestone-ids.ts +78 -19
  767. package/src/resources/extensions/gsd/milestone-implementation-evidence.ts +35 -21
  768. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +8 -0
  769. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +7 -9
  770. package/src/resources/extensions/gsd/model-router.ts +102 -23
  771. package/src/resources/extensions/gsd/notification-store.ts +17 -28
  772. package/src/resources/extensions/gsd/notifications.ts +37 -6
  773. package/src/resources/extensions/gsd/observability-validator.ts +12 -4
  774. package/src/resources/extensions/gsd/orphan-stash-audit.ts +108 -20
  775. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +151 -31
  776. package/src/resources/extensions/gsd/parsers-legacy.ts +42 -15
  777. package/src/resources/extensions/gsd/paths.ts +348 -39
  778. package/src/resources/extensions/gsd/planning-depth.ts +2 -1
  779. package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
  780. package/src/resources/extensions/gsd/preferences-diagnostics.ts +24 -0
  781. package/src/resources/extensions/gsd/preferences-models.ts +28 -9
  782. package/src/resources/extensions/gsd/preferences-validation.ts +28 -2
  783. package/src/resources/extensions/gsd/preferences.ts +116 -14
  784. package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  785. package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  786. package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  787. package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  788. package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
  789. package/src/resources/extensions/gsd/prompts/code-review.md +39 -0
  790. package/src/resources/extensions/gsd/prompts/complete-slice.md +21 -16
  791. package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  792. package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
  793. package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  794. package/src/resources/extensions/gsd/prompts/explore.md +58 -0
  795. package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
  796. package/src/resources/extensions/gsd/prompts/health.md +37 -0
  797. package/src/resources/extensions/gsd/prompts/import.md +30 -0
  798. package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
  799. package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  800. package/src/resources/extensions/gsd/prompts/manager.md +21 -0
  801. package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  802. package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  803. package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  804. package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
  805. package/src/resources/extensions/gsd/prompts/phase.md +22 -0
  806. package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
  807. package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  808. package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  809. package/src/resources/extensions/gsd/prompts/plan-slice.md +5 -3
  810. package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
  811. package/src/resources/extensions/gsd/prompts/progress.md +30 -0
  812. package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
  813. package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  814. package/src/resources/extensions/gsd/prompts/review.md +27 -0
  815. package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  816. package/src/resources/extensions/gsd/prompts/settings.md +24 -0
  817. package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
  818. package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  819. package/src/resources/extensions/gsd/prompts/spike.md +59 -0
  820. package/src/resources/extensions/gsd/prompts/stats.md +43 -0
  821. package/src/resources/extensions/gsd/prompts/surface.md +25 -0
  822. package/src/resources/extensions/gsd/prompts/thread.md +24 -0
  823. package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  824. package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
  825. package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  826. package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  827. package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
  828. package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
  829. package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
  830. package/src/resources/extensions/gsd/queue-order.ts +3 -2
  831. package/src/resources/extensions/gsd/quick.ts +43 -2
  832. package/src/resources/extensions/gsd/recovery-classification.ts +7 -0
  833. package/src/resources/extensions/gsd/redact-secrets.ts +40 -0
  834. package/src/resources/extensions/gsd/repository-registry.ts +7 -1
  835. package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
  836. package/src/resources/extensions/gsd/root-write-leak-guard.ts +13 -1
  837. package/src/resources/extensions/gsd/safe-fs.ts +22 -2
  838. package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
  839. package/src/resources/extensions/gsd/safety/destructive-guard.ts +9 -1
  840. package/src/resources/extensions/gsd/safety/evidence-collector.ts +16 -1
  841. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +45 -1
  842. package/src/resources/extensions/gsd/safety/file-change-validator.ts +8 -2
  843. package/src/resources/extensions/gsd/service-tier.ts +2 -0
  844. package/src/resources/extensions/gsd/session-forensics.ts +11 -1
  845. package/src/resources/extensions/gsd/session-lock.ts +7 -6
  846. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +10 -9
  847. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +52 -0
  848. package/src/resources/extensions/gsd/state/derive/cache.ts +46 -0
  849. package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
  850. package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
  851. package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
  852. package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
  853. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +35 -4
  854. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
  855. package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
  856. package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
  857. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
  858. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
  859. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +176 -30
  860. package/src/resources/extensions/gsd/state-reconciliation/index.ts +86 -27
  861. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +45 -18
  862. package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
  863. package/src/resources/extensions/gsd/state.ts +37 -695
  864. package/src/resources/extensions/gsd/sync-lock.ts +11 -20
  865. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
  866. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
  867. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
  868. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
  869. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
  870. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
  871. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
  872. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
  873. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +4 -3
  874. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +420 -2
  875. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +14 -5
  876. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +104 -0
  877. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +50 -1
  878. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +178 -0
  879. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +15 -12
  880. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +36 -0
  881. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
  882. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +182 -4
  883. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +146 -1
  884. package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +41 -0
  885. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +30 -0
  886. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +41 -0
  887. package/src/resources/extensions/gsd/tests/auto-session-scope.test.ts +4 -4
  888. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +3 -0
  889. package/src/resources/extensions/gsd/tests/auto-timeout-recovery-harness-abort.test.ts +55 -0
  890. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +8 -0
  891. package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
  892. package/src/resources/extensions/gsd/tests/batch-task-query.test.ts +85 -0
  893. package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +29 -0
  894. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +377 -8
  895. package/src/resources/extensions/gsd/tests/commands-context.test.ts +26 -0
  896. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
  897. package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
  898. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
  899. package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +863 -0
  900. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +1 -1
  901. package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +80 -0
  902. package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
  903. package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
  904. package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
  905. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +62 -1
  906. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +28 -0
  907. package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +151 -0
  908. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +18 -7
  909. package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +48 -8
  910. package/src/resources/extensions/gsd/tests/complete-task.test.ts +82 -7
  911. package/src/resources/extensions/gsd/tests/consent-question.test.ts +45 -0
  912. package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +90 -0
  913. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
  914. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +58 -3
  915. package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +51 -0
  916. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
  917. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +49 -5
  918. package/src/resources/extensions/gsd/tests/destructive-guard.test.ts +44 -0
  919. package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
  920. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +20 -1
  921. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +102 -0
  922. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +175 -43
  923. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +26 -1
  924. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -0
  925. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +70 -2
  926. package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
  927. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +245 -1
  928. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +296 -2
  929. package/src/resources/extensions/gsd/tests/doctor-workspace.test.ts +207 -0
  930. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
  931. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
  932. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +38 -0
  933. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +16 -0
  934. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +45 -1
  935. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
  936. package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
  937. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +53 -0
  938. package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
  939. package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
  940. package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
  941. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +40 -0
  942. package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
  943. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +186 -0
  944. package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
  945. package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
  946. package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
  947. package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
  948. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +87 -19
  949. package/src/resources/extensions/gsd/tests/forensics-error-filter.test.ts +88 -0
  950. package/src/resources/extensions/gsd/tests/gate-1b-orphan-discrimination.test.ts +89 -0
  951. package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +4 -0
  952. package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
  953. package/src/resources/extensions/gsd/tests/guidance.test.ts +25 -0
  954. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +42 -0
  955. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +9 -0
  956. package/src/resources/extensions/gsd/tests/health-widget.test.ts +268 -3
  957. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
  958. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
  959. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +130 -3
  960. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
  961. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
  962. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
  963. package/src/resources/extensions/gsd/tests/integration/queue-active-milestone-context-budget.test.ts +93 -0
  964. package/src/resources/extensions/gsd/tests/integration/quick-branch-lifecycle.test.ts +56 -9
  965. package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +4 -2
  966. package/src/resources/extensions/gsd/tests/json-persistence-atomic.test.ts +47 -0
  967. package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +35 -0
  968. package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +386 -0
  969. package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
  970. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
  971. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +336 -82
  972. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
  973. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +78 -0
  974. package/src/resources/extensions/gsd/tests/memory-store.test.ts +48 -0
  975. package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +31 -1
  976. package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
  977. package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +6 -0
  978. package/src/resources/extensions/gsd/tests/metrics.test.ts +1 -0
  979. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +57 -0
  980. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +70 -0
  981. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +7 -2
  982. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +6 -1
  983. package/src/resources/extensions/gsd/tests/model-router.test.ts +204 -7
  984. package/src/resources/extensions/gsd/tests/notification-store.test.ts +23 -0
  985. package/src/resources/extensions/gsd/tests/notifications.test.ts +33 -0
  986. package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
  987. package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +47 -1
  988. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +91 -7
  989. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
  990. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
  991. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +26 -0
  992. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +4 -1
  993. package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +2 -2
  994. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
  995. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
  996. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
  997. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +9 -6
  998. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +27 -0
  999. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +161 -27
  1000. package/src/resources/extensions/gsd/tests/plan-task.test.ts +311 -5
  1001. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +19 -0
  1002. package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
  1003. package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
  1004. package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
  1005. package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
  1006. package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
  1007. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
  1008. package/src/resources/extensions/gsd/tests/post-mutation-hook.test.ts +4 -2
  1009. package/src/resources/extensions/gsd/tests/preferences.test.ts +197 -1
  1010. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +196 -1
  1011. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
  1012. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +58 -0
  1013. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +23 -6
  1014. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +301 -0
  1015. package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +185 -0
  1016. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
  1017. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
  1018. package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +4 -4
  1019. package/src/resources/extensions/gsd/tests/redact-secrets.test.ts +56 -0
  1020. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +166 -4
  1021. package/src/resources/extensions/gsd/tests/register-hooks-flat-phase-migration.test.ts +73 -0
  1022. package/src/resources/extensions/gsd/tests/register-hooks-loop-guard-auto.test.ts +378 -0
  1023. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
  1024. package/src/resources/extensions/gsd/tests/repository-registry.test.ts +41 -2
  1025. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +55 -0
  1026. package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +20 -1
  1027. package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
  1028. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +15 -3
  1029. package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
  1030. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +1 -0
  1031. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
  1032. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +105 -0
  1033. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +329 -57
  1034. package/src/resources/extensions/gsd/tests/status-per-repo.test.ts +94 -0
  1035. package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
  1036. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
  1037. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
  1038. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
  1039. package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
  1040. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +35 -0
  1041. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +271 -0
  1042. package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +32 -3
  1043. package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
  1044. package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
  1045. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +26 -7
  1046. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +23 -0
  1047. package/src/resources/extensions/gsd/tests/undo.test.ts +113 -37
  1048. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +212 -11
  1049. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +66 -18
  1050. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +30 -0
  1051. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +87 -0
  1052. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +162 -1
  1053. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
  1054. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +130 -0
  1055. package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
  1056. package/src/resources/extensions/gsd/tests/validator-scope-parity.test.ts +53 -1
  1057. package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +69 -4
  1058. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +156 -0
  1059. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
  1060. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
  1061. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
  1062. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +96 -15
  1063. package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +134 -0
  1064. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +42 -12
  1065. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
  1066. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +278 -14
  1067. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +151 -2
  1068. package/src/resources/extensions/gsd/tests/workspace.test.ts +18 -4
  1069. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
  1070. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +65 -0
  1071. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +39 -18
  1072. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +31 -1
  1073. package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +32 -0
  1074. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
  1075. package/src/resources/extensions/gsd/tests/write-gate.test.ts +103 -0
  1076. package/src/resources/extensions/gsd/tool-surface-readiness.ts +226 -16
  1077. package/src/resources/extensions/gsd/tools/complete-milestone.ts +7 -9
  1078. package/src/resources/extensions/gsd/tools/complete-slice.ts +14 -11
  1079. package/src/resources/extensions/gsd/tools/complete-task.ts +68 -16
  1080. package/src/resources/extensions/gsd/tools/exec-tool.ts +7 -3
  1081. package/src/resources/extensions/gsd/tools/plan-slice.ts +61 -50
  1082. package/src/resources/extensions/gsd/tools/plan-task.ts +148 -9
  1083. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +9 -10
  1084. package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -13
  1085. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +101 -4
  1086. package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
  1087. package/src/resources/extensions/gsd/undo.ts +55 -15
  1088. package/src/resources/extensions/gsd/unit-context-composer.ts +33 -7
  1089. package/src/resources/extensions/gsd/unit-context-manifest.ts +11 -5
  1090. package/src/resources/extensions/gsd/unit-registry.ts +63 -9
  1091. package/src/resources/extensions/gsd/unit-runtime.ts +42 -0
  1092. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +101 -6
  1093. package/src/resources/extensions/gsd/validation-block-guard.ts +59 -7
  1094. package/src/resources/extensions/gsd/verification-gate.ts +8 -0
  1095. package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
  1096. package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
  1097. package/src/resources/extensions/gsd/workflow-manifest.ts +141 -7
  1098. package/src/resources/extensions/gsd/workflow-mcp.ts +12 -1
  1099. package/src/resources/extensions/gsd/workflow-projections.ts +44 -18
  1100. package/src/resources/extensions/gsd/workspace-git-preflight.ts +31 -0
  1101. package/src/resources/extensions/gsd/workspace.ts +42 -8
  1102. package/src/resources/extensions/gsd/worktree-command.ts +6 -6
  1103. package/src/resources/extensions/gsd/worktree-health.ts +6 -3
  1104. package/src/resources/extensions/gsd/worktree-manager.ts +214 -20
  1105. package/src/resources/extensions/gsd/worktree-safety.ts +31 -11
  1106. package/src/resources/extensions/mcp-client/manager.ts +3 -3
  1107. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +0 -1
  1108. package/dist/web/standalone/.next/static/chunks/796.e0bdc932325d7e03.js +0 -10
  1109. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +0 -1
  1110. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +0 -1
  1111. package/dist/web/standalone/.next/static/chunks/app/page-a48b7c48333b31c8.js +0 -1
  1112. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +0 -1
  1113. package/dist/web/standalone/.next/static/chunks/webpack-f0285ce91d4ec9ef.js +0 -1
  1114. /package/dist/web/standalone/.next/static/{Mh74c-rhxHjKHKoRwd2ij → kIEFsCryyGy6RzifULbJl}/_buildManifest.js +0 -0
  1115. /package/dist/web/standalone/.next/static/{Mh74c-rhxHjKHKoRwd2ij → kIEFsCryyGy6RzifULbJl}/_ssgManifest.js +0 -0
@@ -41,6 +41,7 @@ import {
41
41
  import { extractSection, getManifestStatus, splitFrontmatter, parseFrontmatterMap } from "./files.js";
42
42
  export { inlinePriorMilestoneSummary } from "./files.js";
43
43
  import { collectSecretsFromManifest } from "../get-secrets-from-user.js";
44
+
44
45
  import {
45
46
  gsdRoot,
46
47
  resolveMilestoneFile,
@@ -51,7 +52,10 @@ import {
51
52
  resolveTasksDir,
52
53
  resolveTaskFile,
53
54
  milestonesDir,
55
+ legacyMilestonesDir,
56
+ isLegacyMilestonesLayout,
54
57
  buildTaskFileName,
58
+ canonicalPhaseDirName,
55
59
  } from "./paths.js";
56
60
  import { invalidateAllCaches } from "./cache.js";
57
61
  import { clearActivityLogState } from "./activity-log.js";
@@ -93,8 +97,10 @@ import {
93
97
  getNewBudgetAlertLevel,
94
98
  getBudgetEnforcementAction,
95
99
  getContextPauseAction,
100
+ HARD_CONTEXT_REROOT_THRESHOLD_PERCENT,
96
101
  resolveCompactionThresholdPercent,
97
102
  shouldRerootStepSessionForContext,
103
+ shouldWarnStepSessionForContext,
98
104
  } from "./auto-budget.js";
99
105
  import {
100
106
  markToolStart as _markToolStart,
@@ -697,6 +703,7 @@ export {
697
703
  getContextPauseAction,
698
704
  resolveCompactionThresholdPercent,
699
705
  shouldRerootStepSessionForContext,
706
+ shouldWarnStepSessionForContext,
700
707
  } from "./auto-budget.js";
701
708
 
702
709
  function closeOutSignalInterruptedUnit(currentBasePath: string): void {
@@ -1044,6 +1051,12 @@ export function stopAutoRemote(projectRoot: string): {
1044
1051
  * The normal stop path stays SIGTERM-only so cooperative sessions can clean up;
1045
1052
  * this path is only for the explicit "Force start" action.
1046
1053
  */
1054
+ // Grace window between SIGTERM and SIGKILL so the target can run its cleanup
1055
+ // handler (lock release, DB snapshot flush, worktree teardown). Polled so a
1056
+ // process that exits early is not made to wait the full window.
1057
+ const FORCE_STOP_GRACE_MS = 3000;
1058
+ const FORCE_STOP_POLL_MS = 100;
1059
+
1047
1060
  export function forceStopAutoRemote(projectRoot: string): {
1048
1061
  found: boolean;
1049
1062
  pid?: number;
@@ -1064,6 +1077,13 @@ export function forceStopAutoRemote(projectRoot: string): {
1064
1077
 
1065
1078
  try {
1066
1079
  process.kill(lock.pid, "SIGTERM");
1080
+ // Poll for graceful exit before escalating. Synchronous sleep keeps this
1081
+ // function sync for its callers (Atomics.wait times out with no notify).
1082
+ const deadline = Date.now() + FORCE_STOP_GRACE_MS;
1083
+ while (Date.now() < deadline) {
1084
+ if (!isLockProcessAlive(lock)) break;
1085
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, FORCE_STOP_POLL_MS);
1086
+ }
1067
1087
  if (isLockProcessAlive(lock)) {
1068
1088
  process.kill(lock.pid, "SIGKILL");
1069
1089
  }
@@ -1371,9 +1391,10 @@ export async function rerootCommandSession(
1371
1391
  }
1372
1392
 
1373
1393
  /**
1374
- * After a completed step-mode unit, reclaim context headroom when usage is at
1375
- * or above the compaction threshold. Writes a context-mode snapshot first, then
1376
- * re-roots the visible command session while leaving the NEXT progress surface.
1394
+ * After a completed step-mode unit, warn when usage reaches the configurable
1395
+ * soft context threshold. At the fixed hard boundary, write a context-mode
1396
+ * snapshot and re-root the visible command session while leaving the NEXT
1397
+ * progress surface.
1377
1398
  */
1378
1399
  export async function maybeRerootStepSessionForHighContext(
1379
1400
  ctx: ExtensionContext,
@@ -1388,7 +1409,19 @@ export async function maybeRerootStepSessionForHighContext(
1388
1409
  const prefs = loadEffectiveGSDPreferences(workspaceRoot);
1389
1410
  const compactionThreshold = prefs?.preferences.context_management?.compaction_threshold_percent;
1390
1411
 
1391
- if (!shouldRerootStepSessionForContext(contextPercent, compactionThreshold)) {
1412
+ const shouldWarn = shouldWarnStepSessionForContext(contextPercent, compactionThreshold);
1413
+ const shouldReroot = shouldRerootStepSessionForContext(contextPercent);
1414
+ if (!shouldWarn && !shouldReroot) {
1415
+ return { rerooted: false };
1416
+ }
1417
+
1418
+ const displayPercent = (contextPercent as number).toFixed(1);
1419
+ const thresholdDisplay = resolveCompactionThresholdPercent(compactionThreshold).toFixed(0);
1420
+ if (!shouldReroot) {
1421
+ ctx.ui.notify(
1422
+ `Step complete — context at ${displayPercent}% (soft threshold: ${thresholdDisplay}%). Use /compact when convenient; continuing in this session is still safe.`,
1423
+ "info",
1424
+ );
1392
1425
  return { rerooted: false };
1393
1426
  }
1394
1427
 
@@ -1397,12 +1430,10 @@ export async function maybeRerootStepSessionForHighContext(
1397
1430
  const { writeContextModeCompactionSnapshot } = await import("./context-mode-snapshot.js");
1398
1431
  await writeContextModeCompactionSnapshot(snapshotBase);
1399
1432
 
1400
- const displayPercent = (contextPercent as number).toFixed(1);
1401
- const thresholdDisplay = resolveCompactionThresholdPercent(compactionThreshold).toFixed(0);
1402
1433
  const result = await rerootCommandSession(cmdCtx, workspaceRoot);
1403
1434
  if (result.status === "ok") {
1404
1435
  ctx.ui.notify(
1405
- `Step complete — context at ${displayPercent}% (threshold: ${thresholdDisplay}%). Fresh session ready for /gsd next.`,
1436
+ `Step complete — context at ${displayPercent}% (hard threshold: ${HARD_CONTEXT_REROOT_THRESHOLD_PERCENT}%). Fresh session ready for /gsd next.`,
1406
1437
  "info",
1407
1438
  );
1408
1439
  return { rerooted: true };
@@ -2098,7 +2129,7 @@ export function _selectStopAutoWorktreeExit(args: {
2098
2129
  /**
2099
2130
  * Pause auto-mode without destroying state. Context is preserved.
2100
2131
  * The user can interact with the agent, then `/gsd auto` resumes
2101
- * from disk state. Called when the user presses Escape during auto-mode.
2132
+ * from disk state. Called when the user presses Escape or runs `/gsd pause`.
2102
2133
  */
2103
2134
  export async function pauseAuto(
2104
2135
  ctx?: ExtensionContext,
@@ -2125,6 +2156,7 @@ export async function pauseAuto(
2125
2156
 
2126
2157
  s.active = false;
2127
2158
  s.paused = true;
2159
+ if (options.abortActiveTurn && ctx && !ctx.isIdle()) ctx.abort();
2128
2160
  clearUnitTimeout();
2129
2161
  stopAutoCommandPolling();
2130
2162
 
@@ -2354,6 +2386,7 @@ function buildLoopDeps(pi: ExtensionAPI, ctx: ExtensionContext): LoopDeps {
2354
2386
  ctx.modelRegistry,
2355
2387
  s.basePath || undefined,
2356
2388
  resolveProfileAnchorProvider(ctx.model?.provider, s.autoModeStartModel?.provider),
2389
+ s.autoModeStartModel ? `${s.autoModeStartModel.provider}/${s.autoModeStartModel.id}` : undefined,
2357
2390
  ),
2358
2391
 
2359
2392
  // Pre-dispatch health gate
@@ -2513,7 +2546,7 @@ export async function startAuto(
2513
2546
  // resume paths (#4416). The matching call in auto-start.ts covers the
2514
2547
  // bootstrap-only path; this call ensures the resume path is also protected.
2515
2548
  if (recoverFailedMigration(base)) {
2516
- ctx.ui.notify("Recovered unfinished migration (.gsd.migrating .gsd).", "info");
2549
+ ctx.ui.notify("Recovered unfinished external state migration.", "info");
2517
2550
  }
2518
2551
 
2519
2552
  const unmergedStartMessage = await getUnmergedMilestoneBlockMessageForBase(base, "auto");
@@ -2997,11 +3030,26 @@ export function ensurePreconditions(
2997
3030
  return;
2998
3031
  }
2999
3032
  }
3000
- const newDir = join(milestonesDir(base), mid);
3001
- mkdirSync(join(newDir, "slices"), { recursive: true });
3033
+ // Layout-aware: if the legacy milestones/ dir exists, place the new milestone dir
3034
+ // there (preserves the existing project layout). Otherwise use flat-phase phases/.
3035
+ const legacyBase = legacyMilestonesDir(base);
3036
+ const isLegacyLayout = isLegacyMilestonesLayout(base);
3037
+ const targetBase = isLegacyLayout ? legacyBase : milestonesDir(base);
3038
+ // Flat-phase: look up the milestone title to build the canonical NN-slug dir name
3039
+ // (e.g. "01-foundation") that resolveMilestonePath will later find by prefix.
3040
+ // Legacy layout keeps the raw milestone id (e.g. "M001").
3041
+ const dirName = isLegacyLayout
3042
+ ? mid
3043
+ : canonicalPhaseDirName(mid, getMilestone(mid)?.title);
3044
+ const newDir = join(targetBase, dirName);
3045
+ // Legacy projects use a slices/ subdir; flat-phase uses top-level plan files (no slices/).
3046
+ mkdirSync(isLegacyLayout ? join(newDir, "slices") : newDir, { recursive: true });
3002
3047
  }
3003
3048
 
3004
3049
  if (sid !== undefined) {
3050
+ const isLegacyLayout = isLegacyMilestonesLayout(base);
3051
+ // Flat-phase: tasks are checkboxes in NN-MM-PLAN.md — no slices/ subdir needed.
3052
+ if (!isLegacyLayout) return;
3005
3053
 
3006
3054
  const mDirResolved = resolveMilestonePath(base, mid);
3007
3055
  if (mDirResolved) {
@@ -1,6 +1,8 @@
1
1
  // gsd-pi + src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts - Handles provider and agent-end recovery for GSD auto-mode.
2
2
 
3
3
  import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
4
+ import { mkdirSync, readdirSync, writeFileSync } from "node:fs";
5
+ import { join } from "node:path";
4
6
 
5
7
  import type { AgentEndEvent, ErrorContext } from "../auto/types.js";
6
8
  import { logWarning } from "../workflow-logger.js";
@@ -11,7 +13,7 @@ import {
11
13
  maybeHandleEmptyIntentTurn,
12
14
  resetEmptyTurnCounter,
13
15
  } from "../guided-flow.js";
14
- import { clearPathCache } from "../paths.js";
16
+ import { clearPathCache, gsdRoot } from "../paths.js";
15
17
  import {
16
18
  getAutoDashboardData,
17
19
  getAutoModeStartModel,
@@ -33,7 +35,8 @@ import { shouldIgnoreAgentEndForActiveUnit } from "../auto/unit-runner-events.js
33
35
  import { resolveModelId } from "../auto-model-selection.js";
34
36
  import { resolveProjectRoot } from "../worktree.js";
35
37
  import { clearDiscussionFlowState } from "./write-gate.js";
36
- import { clearGuidedUnitContext } from "../guided-unit-context.js";
38
+ import { scheduleFallbackContinuation } from "./fallback-continuation.js";
39
+ import { clearGuidedUnitContext, getGuidedUnitContext, type GuidedUnitContext } from "../guided-unit-context.js";
37
40
  import { resumeAutoAfterProviderDelay } from "./provider-error-resume.js";
38
41
  import {
39
42
  classifyError,
@@ -115,9 +118,14 @@ export function isUserInitiatedAbortMessage(message: string | undefined | null):
115
118
  export function shouldDeferTransientErrorToCoreRetry(
116
119
  cls: ErrorClass,
117
120
  rawErrorMsg: string,
121
+ deferCheckMsg: string = rawErrorMsg,
118
122
  ): boolean {
119
123
  if (!isTransient(cls) || cls.kind === "rate-limit") return false;
120
- return !/retry failed after \d+ attempts:/i.test(rawErrorMsg);
124
+ // Empty rawErrorMsg means the SDK terminated the session without providing an
125
+ // error string — core is done, not mid-retry. GSD must schedule its own
126
+ // retry rather than silently deferring to a core that has already exited.
127
+ if (!rawErrorMsg) return false;
128
+ return !/retry failed after \d+ attempts:/i.test(deferCheckMsg);
121
129
  }
122
130
 
123
131
  type ProviderModelFallbackParams = {
@@ -154,10 +162,7 @@ async function tryProviderModelFallback(params: ProviderModelFallbackParams): Pr
154
162
  setCurrentUnitModelForRecovery(candidate);
155
163
  setCurrentDispatchedModelId({ provider: candidate.provider, id: candidate.id });
156
164
  switchedNotify(`${candidate.provider}/${candidate.id}`);
157
- pi.sendMessage(
158
- { customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false },
159
- { triggerTurn: true },
160
- );
165
+ scheduleFallbackContinuation(pi);
161
166
  return true;
162
167
  }
163
168
  }
@@ -181,10 +186,7 @@ async function tryProviderModelFallback(params: ProviderModelFallbackParams): Pr
181
186
  setCurrentUnitModelForRecovery(startModel);
182
187
  setCurrentDispatchedModelId({ provider: startModel.provider, id: startModel.id });
183
188
  switchedNotify(`${startModel.provider}/${startModel.id}`);
184
- pi.sendMessage(
185
- { customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false },
186
- { triggerTurn: true },
187
- );
189
+ scheduleFallbackContinuation(pi);
188
190
  return true;
189
191
  }
190
192
  }
@@ -393,6 +395,108 @@ export function suppressTerminalDeletedWorktreeMessageEnd(event: MessageEndLike)
393
395
  return true;
394
396
  }
395
397
 
398
+ function modelLabel(ctx: ExtensionContext): string {
399
+ const provider = ctx.model?.provider;
400
+ const id = ctx.model?.id;
401
+ return provider && id ? `${provider}/${id}` : "unknown model";
402
+ }
403
+
404
+ function isFatalManualGuidedTerminalFailure(lastMsg: unknown): boolean {
405
+ if (!isObjectRecord(lastMsg) || !("stopReason" in lastMsg)) return false;
406
+ if (lastMsg.stopReason === "error") {
407
+ const rawErrorMsg = ("errorMessage" in lastMsg && lastMsg.errorMessage) ? String(lastMsg.errorMessage) : "";
408
+ if (isUserInitiatedAbortMessage(rawErrorMsg)) return false;
409
+ return true;
410
+ }
411
+ if (lastMsg.stopReason !== "aborted") return false;
412
+
413
+ const content = "content" in lastMsg ? lastMsg.content : undefined;
414
+ const hasErrorMessage = "errorMessage" in lastMsg && !!lastMsg.errorMessage;
415
+ return hasErrorMessage || !_hasEmptyAgentEndContent(content);
416
+ }
417
+
418
+ function terminalFailureDetail(lastMsg: unknown): string {
419
+ if (!isObjectRecord(lastMsg)) return "Provider turn ended with an unknown terminal error.";
420
+ const rawErrorMsg = ("errorMessage" in lastMsg && lastMsg.errorMessage) ? String(lastMsg.errorMessage) : "";
421
+ const content = "content" in lastMsg ? lastMsg.content : undefined;
422
+ const displayMsg = resolveAgentEndErrorDisplay(rawErrorMsg, content).replace(/\s+/g, " ").trim();
423
+ if (displayMsg) return displayMsg.length > 300 ? `${displayMsg.slice(0, 300)}...` : displayMsg;
424
+ return lastMsg.stopReason === "aborted"
425
+ ? "Provider turn aborted with error context."
426
+ : "Provider stream ended with stopReason=error.";
427
+ }
428
+
429
+ function nextManualActivitySequence(activityDir: string): string {
430
+ let maxSeq = 0;
431
+ try {
432
+ for (const file of readdirSync(activityDir)) {
433
+ const match = /^(\d+)-/.exec(file);
434
+ if (match) maxSeq = Math.max(maxSeq, Number.parseInt(match[1]!, 10));
435
+ }
436
+ } catch {
437
+ return "001";
438
+ }
439
+ return String(maxSeq + 1).padStart(3, "0");
440
+ }
441
+
442
+ function writeManualGuidedTerminalErrorActivity(
443
+ basePath: string,
444
+ unitType: string,
445
+ model: string,
446
+ detail: string,
447
+ stopReason: unknown,
448
+ ): void {
449
+ const activityDir = join(gsdRoot(basePath), "activity");
450
+ mkdirSync(activityDir, { recursive: true });
451
+ const seq = nextManualActivitySequence(activityDir);
452
+ const safeUnitType = unitType.replace(/[^a-z0-9_.-]+/gi, "-");
453
+ const markerPath = join(activityDir, `${seq}-${safeUnitType}-manual-terminal-provider-error.jsonl`);
454
+ const message = `Manual guided ${unitType} turn ended with provider ${String(stopReason)} on ${model}: ${detail}`;
455
+ writeFileSync(
456
+ markerPath,
457
+ JSON.stringify({
458
+ type: "message",
459
+ message: {
460
+ role: "toolResult",
461
+ toolCallId: "manual-guided-terminal-provider-error",
462
+ toolName: "provider",
463
+ isError: true,
464
+ content: [{ type: "text", text: message }],
465
+ },
466
+ }) + "\n",
467
+ "utf-8",
468
+ );
469
+ }
470
+
471
+ function observeManualDiscussTerminalError(
472
+ ctx: ExtensionContext,
473
+ lastMsg: unknown,
474
+ guidedUnit: GuidedUnitContext | null,
475
+ ): void {
476
+ if (!guidedUnit?.unitType.startsWith("discuss-")) return;
477
+ if (!isFatalManualGuidedTerminalFailure(lastMsg)) return;
478
+
479
+ const model = modelLabel(ctx);
480
+ const detail = terminalFailureDetail(lastMsg);
481
+ ctx.ui.notify(
482
+ `Manual /gsd discuss ${guidedUnit.unitType} ended with a provider error on ${model}: ${detail}`,
483
+ "warning",
484
+ );
485
+
486
+ try {
487
+ writeManualGuidedTerminalErrorActivity(
488
+ guidedUnit.basePath,
489
+ guidedUnit.unitType,
490
+ model,
491
+ detail,
492
+ isObjectRecord(lastMsg) ? lastMsg.stopReason : "unknown",
493
+ );
494
+ } catch (err) {
495
+ const message = err instanceof Error ? err.message : String(err);
496
+ logWarning("bootstrap", `Failed to write manual guided terminal-error activity marker: ${message}`);
497
+ }
498
+ }
499
+
396
500
  async function pauseTransientWithBackoff(
397
501
  cls: ErrorClass,
398
502
  pi: ExtensionAPI,
@@ -442,7 +546,9 @@ export async function handleAgentEnd(
442
546
  // rejected" loop even though the files are on disk.
443
547
  clearPathCache();
444
548
  const basePath = resolveAgentEndBasePath();
445
- clearGuidedUnitContext(basePath);
549
+ const lastMsg = event.messages[event.messages.length - 1];
550
+ const guidedUnit = basePath ? getGuidedUnitContext(basePath) ?? getGuidedUnitContext() : getGuidedUnitContext();
551
+ clearGuidedUnitContext(guidedUnit?.basePath ?? basePath);
446
552
 
447
553
  try {
448
554
  if (await checkDeepProjectSetupAfterTurn(event, ctx, basePath)) {
@@ -471,13 +577,15 @@ export async function handleAgentEnd(
471
577
  // discussions (where isAutoActive may be false) still get recovered.
472
578
  if (maybeHandleEmptyIntentTurn(event, isAutoActive(), basePath)) return;
473
579
 
474
- if (!isAutoActive()) return;
580
+ if (!isAutoActive()) {
581
+ observeManualDiscussTerminalError(ctx, lastMsg, guidedUnit);
582
+ return;
583
+ }
475
584
 
476
585
  if (shouldIgnoreAgentEndForActiveUnit(event)) {
477
586
  return;
478
587
  }
479
588
 
480
- const lastMsg = event.messages[event.messages.length - 1];
481
589
  if (isSessionSwitchInFlight()) {
482
590
  _handleSessionSwitchAgentEnd(lastMsg, resolveAgentEndCancelled);
483
591
  return;
@@ -560,9 +668,9 @@ export async function handleAgentEnd(
560
668
  });
561
669
  return;
562
670
  }
563
- // #3588: When errorMessage is uninformative, extract the real error from
564
- // the assistant message text content for display purposes only.
565
- // Classification still uses rawErrorMsg to avoid false positives from prose.
671
+ // #3588/#956: When errorMessage is uninformative, extract the real error
672
+ // from assistant text. Prefer rawErrorMsg for classification to avoid
673
+ // prose false-positives, but use display text when rawErrorMsg is empty.
566
674
  const displayMsg = resolveAgentEndErrorDisplay(
567
675
  rawErrorMsg,
568
676
  "content" in lastMsg ? lastMsg.content : undefined,
@@ -581,8 +689,8 @@ export async function handleAgentEnd(
581
689
  const errorDetail = displayMsg ? `: ${displayMsg}` : "";
582
690
  const explicitRetryAfterMs = ("retryAfterMs" in lastMsg && typeof lastMsg.retryAfterMs === "number") ? lastMsg.retryAfterMs : undefined;
583
691
 
584
- // ── 1. Classify using rawErrorMsg to avoid prose false-positives ────
585
- const cls = classifyError(rawErrorMsg, explicitRetryAfterMs);
692
+ // ── 1. Classify, preserving non-empty errorMessage precedence ──────
693
+ const cls = classifyError(rawErrorMsg || displayMsg, explicitRetryAfterMs);
586
694
 
587
695
  // ── 1a. Unsupported-model: provider rejected this model for the current
588
696
  // account/plan at request time (#4513). Persist a block so the
@@ -660,11 +768,32 @@ export async function handleAgentEnd(
660
768
  // Core retries transient failures in-session after this handler.
661
769
  // Keep that behavior for non-rate-limit classes to avoid pause/retry races,
662
770
  // but let rate-limit continue into model fallback logic below (#4373).
663
- if (shouldDeferTransientErrorToCoreRetry(cls, rawErrorMsg)) {
771
+ if (shouldDeferTransientErrorToCoreRetry(cls, rawErrorMsg, rawErrorMsg || displayMsg)) {
664
772
  return;
665
773
  }
666
774
 
775
+ // ── Tool-schema overload: the active model repeatedly emitted tool-call
776
+ // arguments that fail schema validation (e.g. a model whose tool-call
777
+ // grammar can't satisfy GSD's schemas). Before hard-pausing, try the
778
+ // unit's configured fallbacks and the auto-mode start model — the model
779
+ // the user actually selected. This lets auto-mode recover by switching
780
+ // back to a schema-capable model instead of aborting outright (#813).
781
+ // Do not persistently block the model: schema-overload is request-shape
782
+ // specific, mirroring the model-error path above.
667
783
  if (cls.kind === "tool-schema") {
784
+ const dash = getAutoDashboardData();
785
+ const switched = await tryProviderModelFallback({
786
+ ctx,
787
+ pi,
788
+ rejectedProvider: ctx.model?.provider,
789
+ rejectedId: ctx.model?.id,
790
+ basePath: dash.basePath,
791
+ unitType: dash.currentUnit?.type,
792
+ switchedNotify: (label) =>
793
+ ctx.ui.notify(`Switched to ${label} after repeated tool schema validation failures.`, "warning"),
794
+ });
795
+ if (switched) return;
796
+
668
797
  await pauseAutoForProviderError(ctx.ui, errorDetail, () => pauseAuto(ctx, pi, {
669
798
  message: `Tool schema error${errorDetail}`,
670
799
  category: "tool-schema",
@@ -732,58 +861,22 @@ export async function handleAgentEnd(
732
861
  // --- Transient errors: try model fallback first, then pause ---
733
862
  // Rate limits are often per-model, so switching models can bypass them.
734
863
  if (cls.kind === "rate-limit" || cls.kind === "network" || cls.kind === "server" || cls.kind === "connection" || cls.kind === "stream") {
735
- // Try model fallback
736
864
  const dash = getAutoDashboardData();
737
- if (dash.currentUnit) {
738
- const modelConfig = resolveModelWithFallbacksForUnit(dash.currentUnit.type);
739
- if (modelConfig && modelConfig.fallbacks.length > 0) {
740
- const availableModels = ctx.modelRegistry.getAvailable();
741
- const nextModelId = getNextFallbackModel(ctx.model?.id, modelConfig);
742
- if (nextModelId) {
743
- retryState.networkRetryCount = 0;
744
- retryState.currentRetryModelId = undefined;
745
- const modelToSet = resolveModelId(nextModelId, availableModels, ctx.model?.provider);
746
- const modelUnavailable = dash.basePath && modelToSet
747
- ? isModelBlocked(dash.basePath, modelToSet.provider, modelToSet.id) ||
748
- isModelTemporarilyUnavailable(dash.basePath, modelToSet.provider, modelToSet.id)
749
- : false;
750
- if (modelToSet && !modelUnavailable) {
751
- const ok = await pi.setModel(modelToSet, { persist: false });
752
- if (ok) {
753
- setCurrentUnitModelForRecovery(modelToSet);
754
- setCurrentDispatchedModelId({ provider: modelToSet.provider, id: modelToSet.id });
755
- ctx.ui.notify(`Model error${errorDetail}. Switched to fallback: ${nextModelId} and resuming.`, "warning");
756
- pi.sendMessage({ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false }, { triggerTurn: true });
757
- return;
758
- }
759
- }
760
- }
761
- }
762
- }
763
-
764
- // Try restoring session model
765
- const sessionModel = getAutoModeStartModel();
766
- if (sessionModel) {
767
- const dash = getAutoDashboardData();
768
- const sessionModelUnavailable = dash.basePath
769
- ? isModelBlocked(dash.basePath, sessionModel.provider, sessionModel.id) ||
770
- isModelTemporarilyUnavailable(dash.basePath, sessionModel.provider, sessionModel.id)
771
- : false;
772
- if (!sessionModelUnavailable && (ctx.model?.id !== sessionModel.id || ctx.model?.provider !== sessionModel.provider)) {
773
- const startModel = ctx.modelRegistry.getAvailable().find((m) => m.provider === sessionModel.provider && m.id === sessionModel.id);
774
- if (startModel) {
775
- const ok = await pi.setModel(startModel, { persist: false });
776
- if (ok) {
777
- setCurrentUnitModelForRecovery(startModel);
778
- setCurrentDispatchedModelId({ provider: startModel.provider, id: startModel.id });
779
- retryState.networkRetryCount = 0;
780
- retryState.currentRetryModelId = undefined;
781
- ctx.ui.notify(`Model error${errorDetail}. Restored session model: ${sessionModel.provider}/${sessionModel.id} and resuming.`, "warning");
782
- pi.sendMessage({ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false }, { triggerTurn: true });
783
- return;
784
- }
785
- }
786
- }
865
+ const switched = await tryProviderModelFallback({
866
+ ctx,
867
+ pi,
868
+ rejectedProvider: ctx.model?.provider,
869
+ rejectedId: ctx.model?.id,
870
+ basePath: dash.basePath,
871
+ unitType: dash.currentUnit?.type,
872
+ switchedNotify: (label) => {
873
+ retryState.networkRetryCount = 0;
874
+ retryState.currentRetryModelId = undefined;
875
+ ctx.ui.notify(`Model error${errorDetail}. Switched to fallback: ${label} and resuming.`, "warning");
876
+ },
877
+ });
878
+ if (switched) {
879
+ return;
787
880
  }
788
881
  }
789
882
 
@@ -0,0 +1,44 @@
1
+ // Project/App: gsd-pi
2
+ // File Purpose: Canonical core session tool surface shared by auto-mode scoping and loop guards.
3
+
4
+ /** Base tools available during auto-mode execution before unit-specific GSD tools are added. */
5
+ export const MINIMAL_AUTO_BASE_TOOL_NAMES = [
6
+ "ask_user_questions",
7
+ "bash",
8
+ "bg_shell",
9
+ "edit",
10
+ "find",
11
+ "glob",
12
+ "grep",
13
+ "fetch_page",
14
+ "search-the-web",
15
+ "ls",
16
+ "read",
17
+ "subagent",
18
+ "write",
19
+ "ToolSearch",
20
+ ] as const;
21
+
22
+ /** Tools excluded from the high per-turn loop-guard cap (strict or orchestration). */
23
+ const NON_REPEATABLE_FROM_MINIMAL_BASE = new Set<string>([
24
+ "ask_user_questions",
25
+ "subagent",
26
+ "ToolSearch",
27
+ ]);
28
+
29
+ /** Additional core tools not in MINIMAL_AUTO_BASE but routinely multi-called per turn. */
30
+ const EXTRA_INHERENTLY_REPEATABLE = [
31
+ "gsd_exec",
32
+ "multi_edit",
33
+ "todo_write",
34
+ "notebook_edit",
35
+ "search_and_read",
36
+ ] as const;
37
+
38
+ /** Core session tools that may be invoked many times per agent turn. */
39
+ export const INHERENTLY_REPEATABLE_TOOL_NAMES = [
40
+ ...MINIMAL_AUTO_BASE_TOOL_NAMES.filter((name) => !NON_REPEATABLE_FROM_MINIMAL_BASE.has(name)),
41
+ ...EXTRA_INHERENTLY_REPEATABLE,
42
+ ] as const;
43
+
44
+ export const INHERENTLY_REPEATABLE_TOOL_SET = new Set<string>(INHERENTLY_REPEATABLE_TOOL_NAMES);
@@ -3,6 +3,7 @@
3
3
  import { Type, StringEnum } from "@gsd/pi-ai";
4
4
  import type { ExtensionAPI } from "@gsd/pi-coding-agent";
5
5
  import { Text } from "@gsd/pi-tui";
6
+ import { SUMMARY_SAVE_CONTENT_MAX_LENGTH } from "@opengsd/contracts";
6
7
 
7
8
  import { loadEffectiveGSDPreferences } from "../preferences.js";
8
9
  import { ensureDbOpen, resolveCtxCwd, resolveWorkflowToolBasePath } from "./dynamic-tools.js";
@@ -392,13 +393,17 @@ export function registerDbTools(pi: ExtensionAPI): void {
392
393
  "Root-level artifact paths are PROJECT.md, PROJECT-DRAFT.md, REQUIREMENTS.md, and REQUIREMENTS-DRAFT.md.",
393
394
  "artifact_type must be one of: SUMMARY, RESEARCH, CONTEXT, ASSESSMENT, CONTEXT-DRAFT, PROJECT, PROJECT-DRAFT, REQUIREMENTS, REQUIREMENTS-DRAFT.",
394
395
  "Use CONTEXT-DRAFT for incremental draft persistence; use CONTEXT for the final milestone context after depth verification.",
396
+ `Keep each content payload under ${SUMMARY_SAVE_CONTENT_MAX_LENGTH} characters; save large context incrementally with CONTEXT-DRAFT/PROJECT-DRAFT/REQUIREMENTS-DRAFT instead of one oversized call.`,
395
397
  ],
396
398
  parameters: Type.Object({
397
399
  milestone_id: Type.Optional(Type.String({ description: "Milestone ID (e.g. M001). Omit only for root-level PROJECT/PROJECT-DRAFT/REQUIREMENTS/REQUIREMENTS-DRAFT artifacts." })),
398
400
  slice_id: Type.Optional(Type.String({ description: "Slice ID (e.g. S01)" })),
399
401
  task_id: Type.Optional(Type.String({ description: "Task ID (e.g. T01)" })),
400
402
  artifact_type: StringEnum(["SUMMARY", "RESEARCH", "CONTEXT", "ASSESSMENT", "CONTEXT-DRAFT", "PROJECT", "PROJECT-DRAFT", "REQUIREMENTS", "REQUIREMENTS-DRAFT"], { description: "Artifact type to save" }),
401
- content: Type.String({ description: "The full markdown content of the artifact" }),
403
+ content: Type.String({
404
+ description: `The full markdown content of the artifact. Maximum ${SUMMARY_SAVE_CONTENT_MAX_LENGTH} characters per save.`,
405
+ maxLength: SUMMARY_SAVE_CONTENT_MAX_LENGTH,
406
+ }),
402
407
  }),
403
408
  execute: summarySaveExecute,
404
409
  renderCall(args: any, theme: any) {
@@ -685,8 +690,9 @@ export function registerDbTools(pi: ExtensionAPI): void {
685
690
  promptSnippet: "Plan a slice via DB write + PLAN render + cache invalidation",
686
691
  promptGuidelines: [
687
692
  "Use gsd_plan_slice for slice planning instead of writing S##-PLAN.md or task PLAN files directly.",
688
- "Keep parameters flat and provide the full slice planning payload, including tasks.",
689
- "The tool validates input, requires an existing parent slice, writes slice/task planning data, renders PLAN.md and task plan files from DB, and clears both state and parse caches after success.",
693
+ "For incremental planning, call gsd_plan_slice with slice metadata only, then call gsd_plan_task once per task.",
694
+ "When tasks is omitted or empty, the tool writes only slice planning metadata and preserves existing tasks.",
695
+ "When tasks is non-empty, the tool validates input, requires an existing parent slice, writes slice/task planning data, renders PLAN.md and task plan files from DB, and clears both state and parse caches after success.",
690
696
  "Use the canonical name gsd_plan_slice; gsd_slice_plan is only an alias.",
691
697
  ],
692
698
  parameters: Type.Object({
@@ -694,7 +700,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
694
700
  milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
695
701
  sliceId: Type.String({ description: "Slice ID (e.g. S01)" }),
696
702
  goal: Type.String({ description: "Slice goal" }),
697
- tasks: Type.Array(Type.Object({
703
+ tasks: Type.Optional(Type.Array(Type.Object({
698
704
  taskId: Type.String({ description: "Task ID (e.g. T01)" }),
699
705
  title: Type.String({ description: "Task title" }),
700
706
  description: Type.String({ description: "Task description / steps block" }),
@@ -704,12 +710,14 @@ export function registerDbTools(pi: ExtensionAPI): void {
704
710
  inputs: Type.Array(Type.String(), { description: "Array<string> of input files or references; pass [\"path\"] or [], never a single string" }),
705
711
  expectedOutput: Type.Array(Type.String(), { description: "Array<string> of files this task creates or overwrites; pass [\"path\"] or [], never prose or a single string" }),
706
712
  observabilityImpact: Type.Optional(Type.String({ description: "Task observability impact" })),
707
- }), { description: "Planned tasks for the slice" }),
713
+ targetRepositories: Type.Optional(Type.Array(Type.String(), { description: "Repository id(s) this task touches (parent workspace); must match a Declared Repository. Omit for single-repo projects." })),
714
+ }), { description: "Optional full task replacement for the slice. Omit for incremental planning, then call gsd_plan_task once per task." })),
708
715
  // ── Enrichment metadata (optional — defaults to empty) ────────────
709
716
  successCriteria: Type.Optional(Type.String({ description: "Slice success criteria block" })),
710
717
  proofLevel: Type.Optional(Type.String({ description: "Slice proof level" })),
711
718
  integrationClosure: Type.Optional(Type.String({ description: "Slice integration closure" })),
712
719
  observabilityImpact: Type.Optional(Type.String({ description: "Slice observability impact" })),
720
+ targetRepositories: Type.Optional(Type.Array(Type.String(), { description: "Slice-wide default repository id(s) (parent workspace); must match a Declared Repository. Omit for single-repo projects." })),
713
721
  // Single-writer v3 audit trail (Stream 2): caller-provided actor identity + causation.
714
722
  actorName: Type.Optional(Type.String({ description: "Caller-provided actor identity for the audit trail (e.g. 'executor-01', 'gsd-orchestrator')" })),
715
723
  triggerReason: Type.Optional(Type.String({ description: "Caller-provided reason this action was triggered (e.g. 'plan-phase complete')" })),
@@ -783,6 +791,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
783
791
  inputs: Type.Array(Type.String(), { description: "Array<string> of input files or references; pass [\"path\"] or [], never a single string" }),
784
792
  expectedOutput: Type.Array(Type.String(), { description: "Array<string> of files this task creates or overwrites; pass [\"path\"] or [], never prose or a single string" }),
785
793
  observabilityImpact: Type.Optional(Type.String({ description: "Task observability impact" })),
794
+ targetRepositories: Type.Optional(Type.Array(Type.String(), { description: "Repository id(s) this task touches (parent workspace); must match a Declared Repository. Omit for single-repo projects." })),
786
795
  // Single-writer v3 audit trail (Stream 2): caller-provided actor identity + causation.
787
796
  actorName: Type.Optional(Type.String({ description: "Caller-provided actor identity for the audit trail (e.g. 'executor-01', 'gsd-orchestrator')" })),
788
797
  triggerReason: Type.Optional(Type.String({ description: "Caller-provided reason this action was triggered (e.g. 'plan-phase complete')" })),
@@ -72,6 +72,7 @@ export function registerExecTools(pi: ExtensionAPI): void {
72
72
  return executeUatExec(params as Parameters<typeof executeUatExec>[0], {
73
73
  baseDir,
74
74
  preferences: await loadContextModePreferences(baseDir),
75
+ signal: _signal,
75
76
  });
76
77
  },
77
78
  });
@@ -119,6 +120,7 @@ export function registerExecTools(pi: ExtensionAPI): void {
119
120
  return executeGsdExec(params as Parameters<typeof executeGsdExec>[0], {
120
121
  baseDir,
121
122
  preferences: await loadContextModePreferences(baseDir),
123
+ signal: _signal,
122
124
  });
123
125
  },
124
126
  });