@opengsd/gsd-pi 1.2.0 → 1.3.0-dev.72e3af2a

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 (1809) hide show
  1. package/README.md +13 -7
  2. package/dist/cli-model-override.d.ts +15 -0
  3. package/dist/cli-model-override.js +21 -0
  4. package/dist/cli-style.d.ts +17 -0
  5. package/dist/cli-style.js +28 -0
  6. package/dist/cli-web-branch.d.ts +2 -0
  7. package/dist/cli-web-branch.js +9 -2
  8. package/dist/cli.js +30 -20
  9. package/dist/headless-context.js +0 -1
  10. package/dist/headless-events.d.ts +20 -3
  11. package/dist/headless-events.js +33 -36
  12. package/dist/headless.js +8 -1
  13. package/dist/help-text.js +34 -0
  14. package/dist/hermes-integration-install.d.ts +17 -0
  15. package/dist/hermes-integration-install.js +199 -0
  16. package/dist/jiti-workspace-aliases.d.ts +11 -2
  17. package/dist/jiti-workspace-aliases.js +19 -3
  18. package/dist/loader.js +6 -4
  19. package/dist/mcp-server.js +2 -1
  20. package/dist/models-resolver.d.ts +3 -13
  21. package/dist/models-resolver.js +3 -22
  22. package/dist/onboarding.js +9 -4
  23. package/dist/provider-migrations.d.ts +23 -0
  24. package/dist/provider-migrations.js +41 -0
  25. package/dist/read-cli.d.ts +23 -0
  26. package/dist/read-cli.js +90 -0
  27. package/dist/register-agent-bundles.d.ts +11 -2
  28. package/dist/register-agent-bundles.js +18 -4
  29. package/dist/resource-loader.d.ts +10 -5
  30. package/dist/resource-loader.js +121 -27
  31. package/dist/resources/.managed-resources-content-hash +1 -1
  32. package/dist/resources/GSD-WORKFLOW.md +27 -26
  33. package/dist/resources/extensions/ask-user-questions.js +81 -25
  34. package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
  35. package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
  36. package/dist/resources/extensions/async-jobs/index.js +65 -0
  37. package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
  38. package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
  39. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
  40. package/dist/resources/extensions/bg-shell/overlay.js +9 -6
  41. package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
  42. package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
  43. package/dist/resources/extensions/bg-shell/utilities.js +5 -2
  44. package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
  45. package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
  46. package/dist/resources/extensions/browser-tools/index.js +69 -12
  47. package/dist/resources/extensions/claude-code-cli/index.js +7 -1
  48. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  49. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +622 -440
  50. package/dist/resources/extensions/claude-code-cli/turn-assembler.js +256 -0
  51. package/dist/resources/extensions/github-sync/templates.js +3 -3
  52. package/dist/resources/extensions/google-cli/stream-adapter.js +98 -16
  53. package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
  54. package/dist/resources/extensions/gsd/artifact-verification.js +427 -0
  55. package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
  56. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
  57. package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
  58. package/dist/resources/extensions/gsd/auto/dispatch-history.js +125 -0
  59. package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
  60. package/dist/resources/extensions/gsd/auto/dispatch.js +365 -0
  61. package/dist/resources/extensions/gsd/auto/finalize.js +347 -0
  62. package/dist/resources/extensions/gsd/auto/loop.js +147 -58
  63. package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
  64. package/dist/resources/extensions/gsd/auto/orchestrator.js +361 -80
  65. package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
  66. package/dist/resources/extensions/gsd/auto/phases.js +17 -2299
  67. package/dist/resources/extensions/gsd/auto/pre-dispatch.js +542 -0
  68. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
  69. package/dist/resources/extensions/gsd/auto/session.js +9 -0
  70. package/dist/resources/extensions/gsd/auto/unit-phase.js +694 -0
  71. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
  72. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
  73. package/dist/resources/extensions/gsd/auto/worktree-safety-phase.js +125 -0
  74. package/dist/resources/extensions/gsd/auto-artifact-paths.js +108 -19
  75. package/dist/resources/extensions/gsd/auto-closeout-messaging.js +90 -0
  76. package/dist/resources/extensions/gsd/auto-dashboard.js +271 -435
  77. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +26 -37
  78. package/dist/resources/extensions/gsd/auto-dispatch.js +122 -89
  79. package/dist/resources/extensions/gsd/auto-model-selection.js +56 -19
  80. package/dist/resources/extensions/gsd/auto-post-unit.js +85 -45
  81. package/dist/resources/extensions/gsd/auto-prompts.js +221 -57
  82. package/dist/resources/extensions/gsd/auto-recovery.js +63 -487
  83. package/dist/resources/extensions/gsd/auto-runtime-state.js +26 -0
  84. package/dist/resources/extensions/gsd/auto-start.js +116 -82
  85. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +3 -3
  86. package/dist/resources/extensions/gsd/auto-timers.js +16 -2
  87. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  88. package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
  89. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +14 -47
  90. package/dist/resources/extensions/gsd/auto-verification.js +34 -38
  91. package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
  92. package/dist/resources/extensions/gsd/auto-worktree.js +230 -467
  93. package/dist/resources/extensions/gsd/auto.js +158 -50
  94. package/dist/resources/extensions/gsd/blocked-models.js +28 -0
  95. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +161 -62
  96. package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +38 -0
  97. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +34 -38
  98. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +74 -50
  99. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +4 -2
  100. package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
  101. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  102. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +42 -1
  103. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +431 -186
  104. package/dist/resources/extensions/gsd/bootstrap/system-context.js +190 -43
  105. package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +68 -10
  106. package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
  107. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +476 -83
  108. package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
  109. package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
  110. package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
  111. package/dist/resources/extensions/gsd/captures.js +5 -15
  112. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +110 -5
  113. package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
  114. package/dist/resources/extensions/gsd/closeout-wizard.js +97 -0
  115. package/dist/resources/extensions/gsd/codebase-generator.js +1 -0
  116. package/dist/resources/extensions/gsd/commands/catalog.js +12 -62
  117. package/dist/resources/extensions/gsd/commands/context.js +16 -2
  118. package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
  119. package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
  120. package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
  121. package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
  122. package/dist/resources/extensions/gsd/commands/handlers/core.js +52 -8
  123. package/dist/resources/extensions/gsd/commands/handlers/ops.js +227 -3
  124. package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
  125. package/dist/resources/extensions/gsd/commands-context.js +19 -1
  126. package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
  127. package/dist/resources/extensions/gsd/commands-handlers.js +133 -4
  128. package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
  129. package/dist/resources/extensions/gsd/commands-maintenance.js +140 -43
  130. package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
  131. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +30 -11
  132. package/dist/resources/extensions/gsd/commands-ship.js +2 -2
  133. package/dist/resources/extensions/gsd/commands-verdict.js +21 -5
  134. package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
  135. package/dist/resources/extensions/gsd/commands-worktree.js +12 -10
  136. package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
  137. package/dist/resources/extensions/gsd/compat/index.js +3 -0
  138. package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
  139. package/dist/resources/extensions/gsd/config-overlay.js +11 -8
  140. package/dist/resources/extensions/gsd/consent-question.js +365 -0
  141. package/dist/resources/extensions/gsd/consent-verdict.js +73 -0
  142. package/dist/resources/extensions/gsd/constants.js +0 -2
  143. package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
  144. package/dist/resources/extensions/gsd/dashboard-overlay.js +71 -6
  145. package/dist/resources/extensions/gsd/db/engine.js +800 -0
  146. package/dist/resources/extensions/gsd/db/queries.js +542 -0
  147. package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
  148. package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
  149. package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
  150. package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
  151. package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
  152. package/dist/resources/extensions/gsd/db/writers/reconcile.js +476 -0
  153. package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
  154. package/dist/resources/extensions/gsd/db-migration-backup.js +51 -8
  155. package/dist/resources/extensions/gsd/db-transaction.js +27 -23
  156. package/dist/resources/extensions/gsd/db-workspace.js +167 -0
  157. package/dist/resources/extensions/gsd/db-writer.js +8 -17
  158. package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
  159. package/dist/resources/extensions/gsd/discussion-handoff.js +222 -0
  160. package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
  161. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  162. package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
  163. package/dist/resources/extensions/gsd/doctor-environment.js +261 -136
  164. package/dist/resources/extensions/gsd/doctor-format.js +9 -6
  165. package/dist/resources/extensions/gsd/doctor-git-checks.js +36 -25
  166. package/dist/resources/extensions/gsd/doctor-providers.js +93 -9
  167. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +34 -40
  168. package/dist/resources/extensions/gsd/doctor.js +43 -15
  169. package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
  170. package/dist/resources/extensions/gsd/error-classifier.js +22 -1
  171. package/dist/resources/extensions/gsd/escalation.js +11 -4
  172. package/dist/resources/extensions/gsd/exec-sandbox.js +75 -19
  173. package/dist/resources/extensions/gsd/export-html.js +10 -3
  174. package/dist/resources/extensions/gsd/export.js +73 -0
  175. package/dist/resources/extensions/gsd/file-lock.js +1 -1
  176. package/dist/resources/extensions/gsd/files.js +33 -19
  177. package/dist/resources/extensions/gsd/flat-phase-migration.js +176 -0
  178. package/dist/resources/extensions/gsd/forensics.js +4 -33
  179. package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
  180. package/dist/resources/extensions/gsd/git-service.js +12 -8
  181. package/dist/resources/extensions/gsd/gitignore.js +9 -2
  182. package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
  183. package/dist/resources/extensions/gsd/gsd-db.js +185 -2054
  184. package/dist/resources/extensions/gsd/guidance.js +158 -0
  185. package/dist/resources/extensions/gsd/guided-flow-queue.js +66 -5
  186. package/dist/resources/extensions/gsd/guided-flow.js +184 -478
  187. package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
  188. package/dist/resources/extensions/gsd/health-widget.js +117 -32
  189. package/dist/resources/extensions/gsd/layout-policy.js +77 -0
  190. package/dist/resources/extensions/gsd/markdown-renderer.js +408 -123
  191. package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
  192. package/dist/resources/extensions/gsd/mcp-filter.js +48 -30
  193. package/dist/resources/extensions/gsd/mcp-tool-name.js +18 -0
  194. package/dist/resources/extensions/gsd/md-importer.js +157 -54
  195. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +45 -22
  196. package/dist/resources/extensions/gsd/memory-relations.js +1 -1
  197. package/dist/resources/extensions/gsd/metrics.js +19 -11
  198. package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
  199. package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
  200. package/dist/resources/extensions/gsd/migrate/safety.js +22 -11
  201. package/dist/resources/extensions/gsd/migrate-external.js +51 -6
  202. package/dist/resources/extensions/gsd/migration-auto-check.js +54 -19
  203. package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
  204. package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
  205. package/dist/resources/extensions/gsd/milestone-closeout.js +108 -29
  206. package/dist/resources/extensions/gsd/milestone-ids.js +79 -18
  207. package/dist/resources/extensions/gsd/milestone-implementation-evidence.js +26 -20
  208. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
  209. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +164 -0
  210. package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
  211. package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
  212. package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
  213. package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
  214. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +60 -0
  215. package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
  216. package/dist/resources/extensions/gsd/model-router.js +82 -20
  217. package/dist/resources/extensions/gsd/native-git-bridge.js +36 -0
  218. package/dist/resources/extensions/gsd/notification-store.js +33 -33
  219. package/dist/resources/extensions/gsd/notifications.js +48 -14
  220. package/dist/resources/extensions/gsd/observability-validator.js +12 -4
  221. package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
  222. package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
  223. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +144 -42
  224. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
  225. package/dist/resources/extensions/gsd/parsers-legacy.js +56 -18
  226. package/dist/resources/extensions/gsd/paths.js +393 -68
  227. package/dist/resources/extensions/gsd/planning-depth.js +2 -1
  228. package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
  229. package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
  230. package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
  231. package/dist/resources/extensions/gsd/preferences-models.js +46 -60
  232. package/dist/resources/extensions/gsd/preferences.js +302 -35
  233. package/dist/resources/extensions/gsd/projection-flush.js +7 -0
  234. package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  235. package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  236. package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  237. package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  238. package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
  239. package/dist/resources/extensions/gsd/prompts/code-review.md +39 -0
  240. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
  241. package/dist/resources/extensions/gsd/prompts/complete-slice.md +25 -15
  242. package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  243. package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
  244. package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  245. package/dist/resources/extensions/gsd/prompts/execute-task.md +9 -2
  246. package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
  247. package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
  248. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  249. package/dist/resources/extensions/gsd/prompts/health.md +37 -0
  250. package/dist/resources/extensions/gsd/prompts/import.md +30 -0
  251. package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
  252. package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  253. package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
  254. package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  255. package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  256. package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  257. package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
  258. package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
  259. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  260. package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  261. package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  262. package/dist/resources/extensions/gsd/prompts/plan-slice.md +3 -2
  263. package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
  264. package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
  265. package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
  266. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
  267. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  268. package/dist/resources/extensions/gsd/prompts/refine-slice.md +3 -2
  269. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  270. package/dist/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  271. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
  272. package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
  273. package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  274. package/dist/resources/extensions/gsd/prompts/review.md +27 -0
  275. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  276. package/dist/resources/extensions/gsd/prompts/run-uat.md +13 -5
  277. package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  278. package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
  279. package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
  280. package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  281. package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
  282. package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
  283. package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
  284. package/dist/resources/extensions/gsd/prompts/system.md +6 -3
  285. package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
  286. package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  287. package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  288. package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
  289. package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  290. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  291. package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  292. package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
  293. package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  294. package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
  295. package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
  296. package/dist/resources/extensions/gsd/provider-error-guidance.js +25 -5
  297. package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
  298. package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
  299. package/dist/resources/extensions/gsd/publication.js +87 -0
  300. package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
  301. package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
  302. package/dist/resources/extensions/gsd/question-transport.js +86 -0
  303. package/dist/resources/extensions/gsd/queue-order.js +3 -2
  304. package/dist/resources/extensions/gsd/quick.js +45 -2
  305. package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
  306. package/dist/resources/extensions/gsd/recovery-classification.js +49 -87
  307. package/dist/resources/extensions/gsd/roadmap-slices.js +34 -6
  308. package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
  309. package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
  310. package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
  311. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +50 -3
  312. package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
  313. package/dist/resources/extensions/gsd/service-tier.js +2 -1
  314. package/dist/resources/extensions/gsd/session-forensics.js +11 -1
  315. package/dist/resources/extensions/gsd/session-lock.js +12 -10
  316. package/dist/resources/extensions/gsd/skill-activation.js +3 -6
  317. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  318. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  319. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
  320. package/dist/resources/extensions/gsd/state/derive/cache.js +28 -0
  321. package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
  322. package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
  323. package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
  324. package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
  325. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +51 -10
  326. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
  327. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
  328. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
  329. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
  330. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
  331. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +138 -19
  332. package/dist/resources/extensions/gsd/state-reconciliation/index.js +84 -26
  333. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +34 -18
  334. package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
  335. package/dist/resources/extensions/gsd/state.js +19 -589
  336. package/dist/resources/extensions/gsd/status-guards.js +56 -8
  337. package/dist/resources/extensions/gsd/stop-notice.js +57 -0
  338. package/dist/resources/extensions/gsd/sync-lock.js +11 -18
  339. package/dist/resources/extensions/gsd/templates/plan.md +7 -0
  340. package/dist/resources/extensions/gsd/templates/project.md +1 -0
  341. package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
  342. package/dist/resources/extensions/gsd/templates/uat.md +5 -1
  343. package/dist/resources/extensions/gsd/tool-contract.js +66 -11
  344. package/dist/resources/extensions/gsd/tool-presentation-plan.js +17 -36
  345. package/dist/resources/extensions/gsd/tool-surface-readiness.js +297 -0
  346. package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
  347. package/dist/resources/extensions/gsd/tools/complete-milestone.js +7 -4
  348. package/dist/resources/extensions/gsd/tools/complete-slice.js +58 -57
  349. package/dist/resources/extensions/gsd/tools/complete-task.js +118 -12
  350. package/dist/resources/extensions/gsd/tools/exec-tool.js +14 -114
  351. package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
  352. package/dist/resources/extensions/gsd/tools/plan-slice.js +13 -9
  353. package/dist/resources/extensions/gsd/tools/plan-task.js +18 -3
  354. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +50 -5
  355. package/dist/resources/extensions/gsd/tools/reopen-milestone.js +13 -31
  356. package/dist/resources/extensions/gsd/tools/reopen-slice.js +16 -35
  357. package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
  358. package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
  359. package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
  360. package/dist/resources/extensions/gsd/tools/validate-milestone.js +21 -79
  361. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +110 -6
  362. package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
  363. package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
  364. package/dist/resources/extensions/gsd/uat-policy.js +57 -25
  365. package/dist/resources/extensions/gsd/uat-run.js +9 -14
  366. package/dist/resources/extensions/gsd/undo.js +16 -16
  367. package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
  368. package/dist/resources/extensions/gsd/unit-context-composer.js +130 -21
  369. package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
  370. package/dist/resources/extensions/gsd/unit-registry.js +419 -0
  371. package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
  372. package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -181
  373. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +91 -5
  374. package/dist/resources/extensions/gsd/validation-block-guard.js +55 -3
  375. package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
  376. package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
  377. package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
  378. package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
  379. package/dist/resources/extensions/gsd/web-app-uat.js +117 -0
  380. package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
  381. package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
  382. package/dist/resources/extensions/gsd/workflow-events.js +6 -18
  383. package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
  384. package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +2 -0
  385. package/dist/resources/extensions/gsd/workflow-mcp-readiness-cache.js +105 -0
  386. package/dist/resources/extensions/gsd/workflow-mcp.js +24 -103
  387. package/dist/resources/extensions/gsd/workflow-projections.js +44 -18
  388. package/dist/resources/extensions/gsd/workflow-reconcile.js +25 -59
  389. package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
  390. package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
  391. package/dist/resources/extensions/gsd/workspace-git-preflight.js +30 -1
  392. package/dist/resources/extensions/gsd/worktree-command.js +6 -6
  393. package/dist/resources/extensions/gsd/worktree-git-recovery.js +293 -0
  394. package/dist/resources/extensions/gsd/worktree-health.js +6 -3
  395. package/dist/resources/extensions/gsd/worktree-lifecycle.js +12 -3
  396. package/dist/resources/extensions/gsd/worktree-manager.js +204 -46
  397. package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
  398. package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
  399. package/dist/resources/extensions/gsd/worktree-root.js +28 -6
  400. package/dist/resources/extensions/gsd/worktree-safety.js +48 -34
  401. package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
  402. package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
  403. package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
  404. package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
  405. package/dist/resources/extensions/gsd/worktree.js +8 -1
  406. package/dist/resources/extensions/mcp-client/manager.js +9 -4
  407. package/dist/resources/extensions/search-the-web/index.js +41 -9
  408. package/dist/resources/extensions/search-the-web/native-search.js +23 -7
  409. package/dist/resources/extensions/shared/browser-contract.js +59 -0
  410. package/dist/resources/extensions/shared/gsd-browser-cli.js +156 -8
  411. package/dist/resources/extensions/shared/interview-ui.js +2 -2
  412. package/dist/resources/extensions/subagent/index.js +20 -15
  413. package/dist/resources/extensions/subagent/worktree-cwd.js +31 -0
  414. package/dist/resources/shared/claude-runtime-floor.js +182 -0
  415. package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
  416. package/dist/resources/shared/package-manager-detection.js +1 -1
  417. package/dist/resources/shared/package.json +3 -0
  418. package/dist/resources/skills/create-skill/SKILL.md +3 -0
  419. package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
  420. package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
  421. package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
  422. package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
  423. package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
  424. package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  425. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  426. package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  427. package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
  428. package/dist/runtime-checks.d.ts +10 -0
  429. package/dist/runtime-checks.js +27 -0
  430. package/dist/tsconfig.extensions.tsbuildinfo +1 -0
  431. package/dist/update-check.d.ts +2 -0
  432. package/dist/update-check.js +39 -5
  433. package/dist/update-cmd.js +40 -3
  434. package/dist/web/standalone/.next/BUILD_ID +1 -1
  435. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  436. package/dist/web/standalone/.next/build-manifest.json +4 -4
  437. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  438. package/dist/web/standalone/.next/react-loadable-manifest.json +9 -9
  439. package/dist/web/standalone/.next/required-server-files.json +3 -3
  440. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  441. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  442. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  443. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  444. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  445. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  446. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  447. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  448. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  449. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  450. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  451. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  452. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  453. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  454. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  455. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  456. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  457. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  458. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  459. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  460. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  461. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  462. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  463. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  464. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  465. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  466. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  467. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  468. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  469. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  470. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  471. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  472. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  473. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  474. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  475. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  476. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  477. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  478. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  479. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  480. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  481. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  482. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  483. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  484. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  485. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  486. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  487. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  488. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  489. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  490. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  491. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  492. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  493. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  494. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  495. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  496. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  497. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  498. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  499. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  500. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  501. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  502. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  503. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  504. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  505. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  506. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  507. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  508. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  509. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  510. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  511. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  512. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  513. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  514. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
  515. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
  516. package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
  517. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  518. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  519. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  520. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  521. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  522. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  523. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  524. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  525. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  526. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  527. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  528. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  529. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  530. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  531. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  532. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  533. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  534. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  535. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  536. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  537. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  538. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  539. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  540. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  541. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  542. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  543. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  544. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  545. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  546. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  547. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  548. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  549. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  550. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  551. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  552. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  553. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  554. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  555. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  556. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  557. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  558. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  559. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  560. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  561. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  562. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  563. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  564. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  565. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  566. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  567. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  568. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  569. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  570. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  571. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  572. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  573. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  574. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  575. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  576. package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  577. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  578. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  579. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  580. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  581. package/dist/web/standalone/.next/server/app/index.html +1 -1
  582. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  583. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  584. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  585. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  586. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  587. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  588. package/dist/web/standalone/.next/server/app/page.js +2 -2
  589. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  590. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  591. package/dist/web/standalone/.next/server/chunks/1128.js +2 -0
  592. package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
  593. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  594. package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
  595. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  596. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  597. package/dist/web/standalone/.next/server/middleware.js +3 -3
  598. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  599. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  600. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  601. package/dist/web/standalone/.next/static/chunks/2659.58e950899a9bb82f.js +1 -0
  602. package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
  603. package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.61a2af74bb8833c8.js} +1 -1
  604. package/dist/web/standalone/.next/static/chunks/4283.d0d9e0a955e441cb.js +2 -0
  605. package/dist/web/standalone/.next/static/chunks/5826.5421d66c72b9f34e.js +1 -0
  606. package/dist/web/standalone/.next/static/chunks/8785.e29b3134cab1d153.js +1 -0
  607. package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
  608. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +1 -0
  609. package/dist/web/standalone/.next/static/chunks/app/{layout-b35cbfff38aaf4cf.js → layout-4ae2d68984392bbf.js} +1 -1
  610. package/dist/web/standalone/.next/static/chunks/app/page-72a856634ad14c10.js +1 -0
  611. package/dist/web/standalone/.next/static/chunks/{main-app-590a74400e35f685.js → main-app-90d1d8d5e5d2dc6b.js} +1 -1
  612. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +1 -0
  613. package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.js +1 -0
  614. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  615. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  616. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  617. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  618. package/dist/web/standalone/node_modules/postcss/lib/container.js +26 -18
  619. package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
  620. package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
  621. package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
  622. package/dist/web/standalone/node_modules/postcss/lib/input.js +54 -29
  623. package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
  624. package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
  625. package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
  626. package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
  627. package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
  628. package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
  629. package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
  630. package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
  631. package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
  632. package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
  633. package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
  634. package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +69 -28
  635. package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
  636. package/dist/web/standalone/node_modules/postcss/package.json +48 -48
  637. package/dist/web/standalone/package.json +1 -1
  638. package/dist/web/standalone/server.js +1 -1
  639. package/dist/web-mode.d.ts +5 -1
  640. package/dist/web-mode.js +27 -13
  641. package/dist/worktree-cli.js +3 -6
  642. package/dist/worktree-status-banner.js +7 -11
  643. package/integrations/hermes/README.md +48 -0
  644. package/integrations/hermes/docs/setup.md +272 -0
  645. package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
  646. package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
  647. package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
  648. package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
  649. package/integrations/hermes/open_gsd_hermes/config.py +59 -0
  650. package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
  651. package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
  652. package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
  653. package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
  654. package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
  655. package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
  656. package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
  657. package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
  658. package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
  659. package/integrations/hermes/open_gsd_hermes/types.py +100 -0
  660. package/integrations/hermes/plugin.yaml +38 -0
  661. package/integrations/hermes/pyproject.toml +32 -0
  662. package/integrations/hermes/scripts/preflight.sh +92 -0
  663. package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
  664. package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
  665. package/integrations/hermes/tests/golden/snapshot.txt +8 -0
  666. package/integrations/hermes/tests/test_binding.py +103 -0
  667. package/integrations/hermes/tests/test_config.py +36 -0
  668. package/integrations/hermes/tests/test_cron.py +34 -0
  669. package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
  670. package/integrations/hermes/tests/test_memory.py +59 -0
  671. package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
  672. package/integrations/hermes/tests/test_register.py +56 -0
  673. package/integrations/hermes/tests/test_snapshot.py +53 -0
  674. package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
  675. package/package.json +19 -14
  676. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
  677. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
  678. package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
  679. package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
  680. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
  681. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
  682. package/packages/cloud-mcp-gateway/package.json +2 -2
  683. package/packages/contracts/dist/rpc.d.ts +1 -0
  684. package/packages/contracts/dist/rpc.d.ts.map +1 -1
  685. package/packages/contracts/dist/rpc.js.map +1 -1
  686. package/packages/contracts/dist/workflow.d.ts +5 -0
  687. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  688. package/packages/contracts/dist/workflow.js +2 -0
  689. package/packages/contracts/dist/workflow.js.map +1 -1
  690. package/packages/contracts/package.json +1 -1
  691. package/packages/daemon/package.json +4 -4
  692. package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
  693. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
  694. package/packages/gsd-agent-core/dist/agent-session.js +3 -0
  695. package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
  696. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts +41 -0
  697. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
  698. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
  699. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
  700. package/packages/gsd-agent-core/dist/index.d.ts +2 -0
  701. package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
  702. package/packages/gsd-agent-core/dist/index.js +2 -0
  703. package/packages/gsd-agent-core/dist/index.js.map +1 -1
  704. package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
  705. package/packages/gsd-agent-core/dist/sdk.js +12 -6
  706. package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
  707. package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
  708. package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
  709. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
  710. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
  711. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
  712. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
  713. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
  714. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
  715. package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
  716. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
  717. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
  718. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
  719. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
  720. package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
  721. package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
  722. package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
  723. package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
  724. package/packages/gsd-agent-core/package.json +5 -5
  725. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +5 -5
  726. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  727. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
  728. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
  729. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
  730. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
  731. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
  732. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  733. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
  734. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  735. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
  736. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
  737. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
  738. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
  739. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
  740. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  741. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
  742. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  743. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
  744. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  745. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
  746. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
  747. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
  748. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
  749. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
  750. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
  751. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
  752. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
  753. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
  754. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
  755. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
  756. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
  757. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
  758. package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
  759. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
  760. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  761. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
  762. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
  763. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  764. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  765. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
  766. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
  767. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -3
  768. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  769. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
  770. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  771. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +18 -0
  772. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  773. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +110 -22
  774. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  775. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +71 -3
  776. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
  777. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +257 -37
  778. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  779. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
  780. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  781. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
  782. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
  783. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
  784. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
  785. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
  786. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
  787. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +6 -24
  788. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  789. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +63 -777
  790. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  791. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts +58 -0
  792. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
  793. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
  794. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
  795. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
  796. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
  797. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
  798. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
  799. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
  800. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
  801. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +258 -0
  802. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
  803. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
  804. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
  805. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
  806. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
  807. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
  808. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
  809. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
  810. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  811. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +13 -1
  812. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  813. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  814. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
  815. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  816. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
  817. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +14 -6
  818. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
  819. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -2
  820. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  821. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
  822. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  823. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +31 -0
  824. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  825. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.d.ts.map +1 -1
  826. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
  827. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
  828. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
  829. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
  830. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
  831. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
  832. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +13 -0
  833. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  834. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +1 -1
  835. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  836. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts +54 -0
  837. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
  838. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
  839. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
  840. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +14 -3
  841. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  842. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +57 -6
  843. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  844. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
  845. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
  846. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
  847. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
  848. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
  849. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js.map +1 -1
  850. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
  851. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
  852. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js.map +1 -1
  853. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
  854. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
  855. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
  856. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
  857. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
  858. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
  859. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
  860. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
  861. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  862. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +24 -1
  863. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  864. package/packages/gsd-agent-modes/package.json +7 -7
  865. package/packages/mcp-server/README.md +23 -4
  866. package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
  867. package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
  868. package/packages/mcp-server/dist/cli-errors.js +12 -0
  869. package/packages/mcp-server/dist/cli-errors.js.map +1 -1
  870. package/packages/mcp-server/dist/cli-runner.d.ts +40 -0
  871. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -0
  872. package/packages/mcp-server/dist/cli-runner.js +170 -0
  873. package/packages/mcp-server/dist/cli-runner.js.map +1 -0
  874. package/packages/mcp-server/dist/cli.d.ts +1 -0
  875. package/packages/mcp-server/dist/cli.d.ts.map +1 -1
  876. package/packages/mcp-server/dist/cli.js +3 -50
  877. package/packages/mcp-server/dist/cli.js.map +1 -1
  878. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
  879. package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
  880. package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
  881. package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
  882. package/packages/mcp-server/dist/pid-registry.d.ts +46 -0
  883. package/packages/mcp-server/dist/pid-registry.d.ts.map +1 -0
  884. package/packages/mcp-server/dist/pid-registry.js +459 -0
  885. package/packages/mcp-server/dist/pid-registry.js.map +1 -0
  886. package/packages/mcp-server/dist/probe-mode.d.ts +4 -0
  887. package/packages/mcp-server/dist/probe-mode.d.ts.map +1 -0
  888. package/packages/mcp-server/dist/probe-mode.js +10 -0
  889. package/packages/mcp-server/dist/probe-mode.js.map +1 -0
  890. package/packages/mcp-server/dist/server.d.ts +40 -1
  891. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  892. package/packages/mcp-server/dist/server.js +97 -6
  893. package/packages/mcp-server/dist/server.js.map +1 -1
  894. package/packages/mcp-server/dist/stdio-watchdog.d.ts +8 -0
  895. package/packages/mcp-server/dist/stdio-watchdog.d.ts.map +1 -0
  896. package/packages/mcp-server/dist/stdio-watchdog.js +40 -0
  897. package/packages/mcp-server/dist/stdio-watchdog.js.map +1 -0
  898. package/packages/mcp-server/dist/workflow-tools.d.ts +62 -1
  899. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  900. package/packages/mcp-server/dist/workflow-tools.js +243 -123
  901. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  902. package/packages/mcp-server/package.json +21 -4
  903. package/packages/native/package.json +1 -1
  904. package/packages/pi-agent-core/dist/agent-loop.js +52 -2
  905. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  906. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
  907. package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  908. package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
  909. package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  910. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  911. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  912. package/packages/pi-agent-core/dist/index.js +3 -0
  913. package/packages/pi-agent-core/dist/index.js.map +1 -1
  914. package/packages/pi-agent-core/package.json +1 -1
  915. package/packages/pi-ai/README.md +1 -0
  916. package/packages/pi-ai/dist/index.d.ts +2 -0
  917. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  918. package/packages/pi-ai/dist/index.js +2 -0
  919. package/packages/pi-ai/dist/index.js.map +1 -1
  920. package/packages/pi-ai/dist/models.generated.d.ts +183 -76
  921. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  922. package/packages/pi-ai/dist/models.generated.js +205 -124
  923. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  924. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  925. package/packages/pi-ai/dist/providers/anthropic.js +12 -7
  926. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  927. package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
  928. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  929. package/packages/pi-ai/dist/providers/google-shared.js +12 -3
  930. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  931. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  932. package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
  933. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  934. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
  935. package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
  936. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
  937. package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
  938. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  939. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
  940. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  941. package/packages/pi-ai/package.json +3 -2
  942. package/packages/pi-coding-agent/README.md +3 -2
  943. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
  944. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  945. package/packages/pi-coding-agent/dist/core/auth-storage.js +19 -13
  946. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  947. package/packages/pi-coding-agent/dist/core/capability-patches.d.ts.map +1 -1
  948. package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
  949. package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
  950. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
  951. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
  952. package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
  953. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  954. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  955. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  956. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
  957. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  958. package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
  959. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  960. package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
  961. package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
  962. package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
  963. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts +9 -0
  964. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
  965. package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
  966. package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
  967. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
  968. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
  969. package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
  970. package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
  971. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
  972. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
  973. package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
  974. package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
  975. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +135 -0
  976. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
  977. package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
  978. package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
  979. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
  980. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  981. package/packages/pi-coding-agent/dist/core/session-manager.js +22 -459
  982. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  983. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  984. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  985. package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
  986. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  987. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
  988. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  989. package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
  990. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  991. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  992. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  993. package/packages/pi-coding-agent/dist/index.js +1 -1
  994. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  995. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
  996. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
  997. package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
  998. package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
  999. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  1000. package/packages/pi-coding-agent/dist/theme/theme.js +56 -24
  1001. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  1002. package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
  1003. package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
  1004. package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
  1005. package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
  1006. package/packages/pi-coding-agent/package.json +8 -8
  1007. package/packages/pi-tui/README.md +15 -0
  1008. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  1009. package/packages/pi-tui/dist/autocomplete.js +6 -1
  1010. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  1011. package/packages/pi-tui/dist/components/input.js +2 -2
  1012. package/packages/pi-tui/dist/components/input.js.map +1 -1
  1013. package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
  1014. package/packages/pi-tui/dist/components/loader.js +1 -0
  1015. package/packages/pi-tui/dist/components/loader.js.map +1 -1
  1016. package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
  1017. package/packages/pi-tui/dist/components/select-list.js +8 -2
  1018. package/packages/pi-tui/dist/components/select-list.js.map +1 -1
  1019. package/packages/pi-tui/dist/index.d.ts +2 -2
  1020. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  1021. package/packages/pi-tui/dist/index.js +2 -2
  1022. package/packages/pi-tui/dist/index.js.map +1 -1
  1023. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  1024. package/packages/pi-tui/dist/keys.js +39 -30
  1025. package/packages/pi-tui/dist/keys.js.map +1 -1
  1026. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  1027. package/packages/pi-tui/dist/stdin-buffer.js +22 -0
  1028. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  1029. package/packages/pi-tui/dist/terminal-image.d.ts +33 -0
  1030. package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
  1031. package/packages/pi-tui/dist/terminal-image.js +54 -2
  1032. package/packages/pi-tui/dist/terminal-image.js.map +1 -1
  1033. package/packages/pi-tui/dist/terminal.d.ts +12 -0
  1034. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  1035. package/packages/pi-tui/dist/terminal.js +70 -25
  1036. package/packages/pi-tui/dist/terminal.js.map +1 -1
  1037. package/packages/pi-tui/dist/tui.d.ts +15 -0
  1038. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  1039. package/packages/pi-tui/dist/tui.js +115 -21
  1040. package/packages/pi-tui/dist/tui.js.map +1 -1
  1041. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  1042. package/packages/pi-tui/dist/utils.js +110 -36
  1043. package/packages/pi-tui/dist/utils.js.map +1 -1
  1044. package/packages/pi-tui/package.json +2 -2
  1045. package/packages/rpc-client/package.json +2 -2
  1046. package/pkg/dist/theme/theme-schema.d.ts +75 -75
  1047. package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
  1048. package/pkg/dist/theme/theme-schema.js +1 -1
  1049. package/pkg/dist/theme/theme-schema.js.map +1 -1
  1050. package/pkg/dist/theme/theme.d.ts.map +1 -1
  1051. package/pkg/dist/theme/theme.js +56 -24
  1052. package/pkg/dist/theme/theme.js.map +1 -1
  1053. package/pkg/package.json +1 -1
  1054. package/scripts/install/deps.js +10 -0
  1055. package/scripts/link-workspace-packages.cjs +7 -40
  1056. package/src/resources/GSD-WORKFLOW.md +27 -26
  1057. package/src/resources/extensions/ask-user-questions.ts +94 -26
  1058. package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
  1059. package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
  1060. package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
  1061. package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
  1062. package/src/resources/extensions/async-jobs/index.ts +79 -0
  1063. package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
  1064. package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
  1065. package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
  1066. package/src/resources/extensions/bg-shell/overlay.ts +9 -5
  1067. package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
  1068. package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
  1069. package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
  1070. package/src/resources/extensions/bg-shell/utilities.ts +5 -2
  1071. package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
  1072. package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
  1073. package/src/resources/extensions/browser-tools/index.ts +71 -13
  1074. package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
  1075. package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +120 -1
  1076. package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
  1077. package/src/resources/extensions/claude-code-cli/index.ts +8 -1
  1078. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  1079. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +744 -495
  1080. package/src/resources/extensions/claude-code-cli/tests/index.test.ts +47 -0
  1081. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1192 -7
  1082. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +324 -0
  1083. package/src/resources/extensions/github-sync/templates.ts +3 -3
  1084. package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
  1085. package/src/resources/extensions/google-cli/stream-adapter.ts +128 -20
  1086. package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
  1087. package/src/resources/extensions/gsd/artifact-verification.ts +464 -0
  1088. package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
  1089. package/src/resources/extensions/gsd/auto/contracts.ts +32 -2
  1090. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
  1091. package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
  1092. package/src/resources/extensions/gsd/auto/dispatch-history.ts +186 -0
  1093. package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
  1094. package/src/resources/extensions/gsd/auto/dispatch.ts +449 -0
  1095. package/src/resources/extensions/gsd/auto/finalize.ts +445 -0
  1096. package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
  1097. package/src/resources/extensions/gsd/auto/loop.ts +158 -63
  1098. package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
  1099. package/src/resources/extensions/gsd/auto/orchestrator.ts +418 -82
  1100. package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
  1101. package/src/resources/extensions/gsd/auto/phases.ts +58 -2981
  1102. package/src/resources/extensions/gsd/auto/pre-dispatch.ts +716 -0
  1103. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
  1104. package/src/resources/extensions/gsd/auto/session.ts +12 -0
  1105. package/src/resources/extensions/gsd/auto/unit-phase.ts +910 -0
  1106. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
  1107. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
  1108. package/src/resources/extensions/gsd/auto/worktree-safety-phase.ts +149 -0
  1109. package/src/resources/extensions/gsd/auto-artifact-paths.ts +129 -20
  1110. package/src/resources/extensions/gsd/auto-closeout-messaging.ts +90 -0
  1111. package/src/resources/extensions/gsd/auto-dashboard.ts +328 -458
  1112. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +33 -50
  1113. package/src/resources/extensions/gsd/auto-dispatch.ts +147 -104
  1114. package/src/resources/extensions/gsd/auto-model-selection.ts +74 -15
  1115. package/src/resources/extensions/gsd/auto-post-unit.ts +107 -46
  1116. package/src/resources/extensions/gsd/auto-prompts.ts +298 -76
  1117. package/src/resources/extensions/gsd/auto-recovery.ts +80 -489
  1118. package/src/resources/extensions/gsd/auto-runtime-state.ts +38 -0
  1119. package/src/resources/extensions/gsd/auto-start.ts +146 -88
  1120. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +3 -2
  1121. package/src/resources/extensions/gsd/auto-timers.ts +16 -2
  1122. package/src/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
  1123. package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
  1124. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +21 -49
  1125. package/src/resources/extensions/gsd/auto-verification.ts +37 -42
  1126. package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
  1127. package/src/resources/extensions/gsd/auto-worktree.ts +180 -407
  1128. package/src/resources/extensions/gsd/auto.ts +220 -54
  1129. package/src/resources/extensions/gsd/blocked-models.ts +49 -0
  1130. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +194 -70
  1131. package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +43 -0
  1132. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +35 -38
  1133. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +93 -49
  1134. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +4 -2
  1135. package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
  1136. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  1137. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +46 -1
  1138. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +506 -202
  1139. package/src/resources/extensions/gsd/bootstrap/system-context.ts +219 -46
  1140. package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +74 -10
  1141. package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
  1142. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +586 -83
  1143. package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
  1144. package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
  1145. package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
  1146. package/src/resources/extensions/gsd/captures.ts +5 -16
  1147. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +132 -6
  1148. package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
  1149. package/src/resources/extensions/gsd/closeout-wizard.ts +111 -0
  1150. package/src/resources/extensions/gsd/codebase-generator.ts +1 -0
  1151. package/src/resources/extensions/gsd/commands/catalog.ts +12 -68
  1152. package/src/resources/extensions/gsd/commands/context.ts +16 -2
  1153. package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
  1154. package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
  1155. package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
  1156. package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
  1157. package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -8
  1158. package/src/resources/extensions/gsd/commands/handlers/ops.ts +230 -3
  1159. package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
  1160. package/src/resources/extensions/gsd/commands-context.ts +18 -1
  1161. package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
  1162. package/src/resources/extensions/gsd/commands-handlers.ts +140 -4
  1163. package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
  1164. package/src/resources/extensions/gsd/commands-maintenance.ts +172 -42
  1165. package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
  1166. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +27 -9
  1167. package/src/resources/extensions/gsd/commands-ship.ts +2 -2
  1168. package/src/resources/extensions/gsd/commands-verdict.ts +22 -4
  1169. package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
  1170. package/src/resources/extensions/gsd/commands-worktree.ts +12 -10
  1171. package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
  1172. package/src/resources/extensions/gsd/compat/index.ts +12 -0
  1173. package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
  1174. package/src/resources/extensions/gsd/config-overlay.ts +24 -9
  1175. package/src/resources/extensions/gsd/consent-question.ts +441 -0
  1176. package/src/resources/extensions/gsd/consent-verdict.ts +115 -0
  1177. package/src/resources/extensions/gsd/constants.ts +0 -3
  1178. package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
  1179. package/src/resources/extensions/gsd/dashboard-overlay.ts +73 -7
  1180. package/src/resources/extensions/gsd/db/engine.ts +855 -0
  1181. package/src/resources/extensions/gsd/db/queries.ts +676 -0
  1182. package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
  1183. package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
  1184. package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
  1185. package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
  1186. package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
  1187. package/src/resources/extensions/gsd/db/writers/reconcile.ts +523 -0
  1188. package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
  1189. package/src/resources/extensions/gsd/db-migration-backup.ts +56 -7
  1190. package/src/resources/extensions/gsd/db-transaction.ts +37 -20
  1191. package/src/resources/extensions/gsd/db-workspace.ts +243 -0
  1192. package/src/resources/extensions/gsd/db-writer.ts +11 -19
  1193. package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
  1194. package/src/resources/extensions/gsd/discussion-handoff.ts +280 -0
  1195. package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
  1196. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  1197. package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
  1198. package/src/resources/extensions/gsd/doctor-environment.ts +272 -155
  1199. package/src/resources/extensions/gsd/doctor-format.ts +12 -7
  1200. package/src/resources/extensions/gsd/doctor-git-checks.ts +33 -25
  1201. package/src/resources/extensions/gsd/doctor-providers.ts +104 -10
  1202. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +34 -42
  1203. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  1204. package/src/resources/extensions/gsd/doctor.ts +45 -12
  1205. package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
  1206. package/src/resources/extensions/gsd/error-classifier.ts +25 -1
  1207. package/src/resources/extensions/gsd/escalation.ts +9 -4
  1208. package/src/resources/extensions/gsd/exec-sandbox.ts +98 -18
  1209. package/src/resources/extensions/gsd/export-html.ts +11 -4
  1210. package/src/resources/extensions/gsd/export.ts +88 -1
  1211. package/src/resources/extensions/gsd/file-lock.ts +1 -1
  1212. package/src/resources/extensions/gsd/files.ts +33 -12
  1213. package/src/resources/extensions/gsd/flat-phase-migration.ts +205 -0
  1214. package/src/resources/extensions/gsd/forensics.ts +4 -34
  1215. package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
  1216. package/src/resources/extensions/gsd/git-constants.ts +1 -1
  1217. package/src/resources/extensions/gsd/git-service.ts +13 -7
  1218. package/src/resources/extensions/gsd/gitignore.ts +10 -3
  1219. package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
  1220. package/src/resources/extensions/gsd/gsd-db.ts +189 -2380
  1221. package/src/resources/extensions/gsd/guidance.ts +217 -0
  1222. package/src/resources/extensions/gsd/guided-flow-queue.ts +89 -4
  1223. package/src/resources/extensions/gsd/guided-flow.ts +250 -590
  1224. package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
  1225. package/src/resources/extensions/gsd/health-widget.ts +133 -32
  1226. package/src/resources/extensions/gsd/layout-policy.ts +86 -0
  1227. package/src/resources/extensions/gsd/markdown-renderer.ts +422 -113
  1228. package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
  1229. package/src/resources/extensions/gsd/mcp-filter.ts +63 -34
  1230. package/src/resources/extensions/gsd/mcp-tool-name.ts +30 -0
  1231. package/src/resources/extensions/gsd/md-importer.ts +218 -68
  1232. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +52 -20
  1233. package/src/resources/extensions/gsd/memory-relations.ts +1 -1
  1234. package/src/resources/extensions/gsd/metrics.ts +23 -10
  1235. package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
  1236. package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
  1237. package/src/resources/extensions/gsd/migrate/safety.ts +20 -9
  1238. package/src/resources/extensions/gsd/migrate-external.ts +49 -6
  1239. package/src/resources/extensions/gsd/migration-auto-check.ts +57 -18
  1240. package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
  1241. package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
  1242. package/src/resources/extensions/gsd/milestone-closeout.ts +133 -29
  1243. package/src/resources/extensions/gsd/milestone-ids.ts +78 -19
  1244. package/src/resources/extensions/gsd/milestone-implementation-evidence.ts +35 -21
  1245. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
  1246. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +232 -0
  1247. package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
  1248. package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
  1249. package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
  1250. package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
  1251. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +78 -0
  1252. package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
  1253. package/src/resources/extensions/gsd/model-router.ts +101 -18
  1254. package/src/resources/extensions/gsd/native-git-bridge.ts +39 -0
  1255. package/src/resources/extensions/gsd/notification-store.ts +43 -31
  1256. package/src/resources/extensions/gsd/notifications.ts +50 -12
  1257. package/src/resources/extensions/gsd/observability-validator.ts +12 -4
  1258. package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
  1259. package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
  1260. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +161 -38
  1261. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
  1262. package/src/resources/extensions/gsd/parsers-legacy.ts +58 -19
  1263. package/src/resources/extensions/gsd/paths.ts +390 -61
  1264. package/src/resources/extensions/gsd/planning-depth.ts +2 -1
  1265. package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
  1266. package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
  1267. package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
  1268. package/src/resources/extensions/gsd/preferences-models.ts +58 -59
  1269. package/src/resources/extensions/gsd/preferences-types.ts +16 -0
  1270. package/src/resources/extensions/gsd/preferences.ts +372 -35
  1271. package/src/resources/extensions/gsd/projection-flush.ts +20 -0
  1272. package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  1273. package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  1274. package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  1275. package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  1276. package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
  1277. package/src/resources/extensions/gsd/prompts/code-review.md +39 -0
  1278. package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
  1279. package/src/resources/extensions/gsd/prompts/complete-slice.md +25 -15
  1280. package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  1281. package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
  1282. package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  1283. package/src/resources/extensions/gsd/prompts/execute-task.md +9 -2
  1284. package/src/resources/extensions/gsd/prompts/explore.md +58 -0
  1285. package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
  1286. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  1287. package/src/resources/extensions/gsd/prompts/health.md +37 -0
  1288. package/src/resources/extensions/gsd/prompts/import.md +30 -0
  1289. package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
  1290. package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  1291. package/src/resources/extensions/gsd/prompts/manager.md +21 -0
  1292. package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  1293. package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  1294. package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  1295. package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
  1296. package/src/resources/extensions/gsd/prompts/phase.md +22 -0
  1297. package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
  1298. package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  1299. package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  1300. package/src/resources/extensions/gsd/prompts/plan-slice.md +3 -2
  1301. package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
  1302. package/src/resources/extensions/gsd/prompts/progress.md +30 -0
  1303. package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
  1304. package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
  1305. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
  1306. package/src/resources/extensions/gsd/prompts/refine-slice.md +3 -2
  1307. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  1308. package/src/resources/extensions/gsd/prompts/research-milestone.md +1 -1
  1309. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
  1310. package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
  1311. package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  1312. package/src/resources/extensions/gsd/prompts/review.md +27 -0
  1313. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  1314. package/src/resources/extensions/gsd/prompts/run-uat.md +13 -5
  1315. package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  1316. package/src/resources/extensions/gsd/prompts/settings.md +24 -0
  1317. package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
  1318. package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  1319. package/src/resources/extensions/gsd/prompts/spike.md +59 -0
  1320. package/src/resources/extensions/gsd/prompts/stats.md +43 -0
  1321. package/src/resources/extensions/gsd/prompts/surface.md +25 -0
  1322. package/src/resources/extensions/gsd/prompts/system.md +6 -3
  1323. package/src/resources/extensions/gsd/prompts/thread.md +24 -0
  1324. package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
  1325. package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  1326. package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
  1327. package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  1328. package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
  1329. package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  1330. package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
  1331. package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
  1332. package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
  1333. package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
  1334. package/src/resources/extensions/gsd/provider-error-guidance.ts +36 -9
  1335. package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
  1336. package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
  1337. package/src/resources/extensions/gsd/publication.ts +122 -0
  1338. package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
  1339. package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
  1340. package/src/resources/extensions/gsd/question-transport.ts +138 -0
  1341. package/src/resources/extensions/gsd/queue-order.ts +3 -2
  1342. package/src/resources/extensions/gsd/quick.ts +43 -2
  1343. package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
  1344. package/src/resources/extensions/gsd/recovery-classification.ts +54 -88
  1345. package/src/resources/extensions/gsd/roadmap-slices.ts +37 -6
  1346. package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
  1347. package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
  1348. package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
  1349. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +52 -3
  1350. package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
  1351. package/src/resources/extensions/gsd/service-tier.ts +2 -0
  1352. package/src/resources/extensions/gsd/session-forensics.ts +11 -1
  1353. package/src/resources/extensions/gsd/session-lock.ts +16 -14
  1354. package/src/resources/extensions/gsd/skill-activation.ts +3 -6
  1355. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  1356. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  1357. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
  1358. package/src/resources/extensions/gsd/state/derive/cache.ts +46 -0
  1359. package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
  1360. package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
  1361. package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
  1362. package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
  1363. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +58 -14
  1364. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
  1365. package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
  1366. package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
  1367. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
  1368. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
  1369. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +176 -30
  1370. package/src/resources/extensions/gsd/state-reconciliation/index.ts +86 -27
  1371. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +45 -18
  1372. package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
  1373. package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
  1374. package/src/resources/extensions/gsd/state.ts +51 -705
  1375. package/src/resources/extensions/gsd/status-guards.ts +59 -8
  1376. package/src/resources/extensions/gsd/stop-notice.ts +75 -0
  1377. package/src/resources/extensions/gsd/sync-lock.ts +11 -20
  1378. package/src/resources/extensions/gsd/templates/plan.md +7 -0
  1379. package/src/resources/extensions/gsd/templates/project.md +1 -0
  1380. package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
  1381. package/src/resources/extensions/gsd/templates/uat.md +5 -1
  1382. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
  1383. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
  1384. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
  1385. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
  1386. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
  1387. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
  1388. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
  1389. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
  1390. package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
  1391. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +1 -1
  1392. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +420 -2
  1393. package/src/resources/extensions/gsd/tests/auto-blocked-remediation-message.test.ts +1 -1
  1394. package/src/resources/extensions/gsd/tests/auto-closeout-messaging.test.ts +71 -0
  1395. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +97 -117
  1396. package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
  1397. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +753 -26
  1398. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +32 -1
  1399. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
  1400. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +25 -2
  1401. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +107 -1
  1402. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +409 -38
  1403. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +1 -1
  1404. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
  1405. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +100 -5
  1406. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
  1407. package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
  1408. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +111 -1
  1409. package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
  1410. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
  1411. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
  1412. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +169 -1
  1413. package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
  1414. package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
  1415. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
  1416. package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
  1417. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
  1418. package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
  1419. package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
  1420. package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
  1421. package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
  1422. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
  1423. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
  1424. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +44 -0
  1425. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +26 -0
  1426. package/src/resources/extensions/gsd/tests/commands-context.test.ts +26 -0
  1427. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
  1428. package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
  1429. package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
  1430. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
  1431. package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +863 -0
  1432. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +47 -9
  1433. package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +80 -0
  1434. package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
  1435. package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
  1436. package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
  1437. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
  1438. package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +82 -0
  1439. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
  1440. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +18 -7
  1441. package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +48 -8
  1442. package/src/resources/extensions/gsd/tests/complete-task.test.ts +223 -12
  1443. package/src/resources/extensions/gsd/tests/consent-question.test.ts +396 -0
  1444. package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
  1445. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
  1446. package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +90 -0
  1447. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
  1448. package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
  1449. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +68 -19
  1450. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +59 -0
  1451. package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
  1452. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +12 -11
  1453. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
  1454. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +111 -5
  1455. package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
  1456. package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
  1457. package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
  1458. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +54 -4
  1459. package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
  1460. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +430 -0
  1461. package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
  1462. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +38 -49
  1463. package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
  1464. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +26 -1
  1465. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +89 -0
  1466. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +15 -0
  1467. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +70 -2
  1468. package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
  1469. package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
  1470. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +113 -4
  1471. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
  1472. package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
  1473. package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
  1474. package/src/resources/extensions/gsd/tests/engine-interfaces-contract.test.ts +117 -91
  1475. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +113 -0
  1476. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
  1477. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
  1478. package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
  1479. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +231 -0
  1480. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +74 -2
  1481. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
  1482. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
  1483. package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
  1484. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +88 -1
  1485. package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
  1486. package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
  1487. package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
  1488. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
  1489. package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
  1490. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
  1491. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
  1492. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +114 -0
  1493. package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
  1494. package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
  1495. package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
  1496. package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
  1497. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -1
  1498. package/src/resources/extensions/gsd/tests/forensics-error-filter.test.ts +88 -0
  1499. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
  1500. package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +154 -1
  1501. package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
  1502. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +46 -0
  1503. package/src/resources/extensions/gsd/tests/guidance.test.ts +173 -0
  1504. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +42 -0
  1505. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +18 -6
  1506. package/src/resources/extensions/gsd/tests/health-widget.test.ts +268 -3
  1507. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
  1508. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +133 -15
  1509. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +89 -59
  1510. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
  1511. package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
  1512. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +122 -3
  1513. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
  1514. package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
  1515. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
  1516. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
  1517. package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +157 -0
  1518. package/src/resources/extensions/gsd/tests/integration/queue-active-milestone-context-budget.test.ts +93 -0
  1519. package/src/resources/extensions/gsd/tests/integration/quick-branch-lifecycle.test.ts +56 -9
  1520. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +217 -0
  1521. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
  1522. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
  1523. package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +386 -0
  1524. package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
  1525. package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
  1526. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
  1527. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +214 -82
  1528. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
  1529. package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
  1530. package/src/resources/extensions/gsd/tests/mcp-readiness-preflight.test.ts +205 -0
  1531. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +6 -5
  1532. package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
  1533. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +78 -0
  1534. package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
  1535. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +213 -1
  1536. package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
  1537. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +125 -4
  1538. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
  1539. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
  1540. package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
  1541. package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +1 -1
  1542. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +97 -0
  1543. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +1 -1
  1544. package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
  1545. package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
  1546. package/src/resources/extensions/gsd/tests/model-router.test.ts +343 -7
  1547. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
  1548. package/src/resources/extensions/gsd/tests/native-merge-regular.test.ts +139 -0
  1549. package/src/resources/extensions/gsd/tests/notification-store.test.ts +55 -0
  1550. package/src/resources/extensions/gsd/tests/notifications.test.ts +97 -9
  1551. package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +179 -0
  1552. package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
  1553. package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
  1554. package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +381 -0
  1555. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
  1556. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
  1557. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +44 -0
  1558. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +2 -2
  1559. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +144 -0
  1560. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +1 -1
  1561. package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
  1562. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
  1563. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
  1564. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
  1565. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
  1566. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +54 -6
  1567. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  1568. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +58 -23
  1569. package/src/resources/extensions/gsd/tests/plan-task.test.ts +4 -4
  1570. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +64 -0
  1571. package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
  1572. package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
  1573. package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
  1574. package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
  1575. package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
  1576. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
  1577. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
  1578. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
  1579. package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
  1580. package/src/resources/extensions/gsd/tests/preferences.test.ts +230 -1
  1581. package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
  1582. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +54 -1
  1583. package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
  1584. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
  1585. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
  1586. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +72 -2
  1587. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
  1588. package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +18 -3
  1589. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +312 -4
  1590. package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
  1591. package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
  1592. package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
  1593. package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +185 -0
  1594. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
  1595. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
  1596. package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
  1597. package/src/resources/extensions/gsd/tests/recovery-classification-illegal-transition.test.ts +30 -0
  1598. package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
  1599. package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
  1600. package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
  1601. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +508 -5
  1602. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
  1603. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
  1604. package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
  1605. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
  1606. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
  1607. package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
  1608. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +58 -2
  1609. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
  1610. package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
  1611. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +148 -0
  1612. package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
  1613. package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
  1614. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +301 -41
  1615. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -17
  1616. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
  1617. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
  1618. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +56 -0
  1619. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +9 -4
  1620. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +346 -58
  1621. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
  1622. package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
  1623. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
  1624. package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
  1625. package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
  1626. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
  1627. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
  1628. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
  1629. package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
  1630. package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
  1631. package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
  1632. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +80 -2
  1633. package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
  1634. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +151 -0
  1635. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
  1636. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
  1637. package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +26 -0
  1638. package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
  1639. package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
  1640. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +348 -0
  1641. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +56 -0
  1642. package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
  1643. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
  1644. package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
  1645. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -6
  1646. package/src/resources/extensions/gsd/tests/undo.test.ts +39 -37
  1647. package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
  1648. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +319 -6
  1649. package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
  1650. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +87 -0
  1651. package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
  1652. package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
  1653. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +72 -1
  1654. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
  1655. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
  1656. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
  1657. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +130 -0
  1658. package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
  1659. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
  1660. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +156 -0
  1661. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
  1662. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
  1663. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +193 -0
  1664. package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
  1665. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
  1666. package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +133 -0
  1667. package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
  1668. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +227 -21
  1669. package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
  1670. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
  1671. package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
  1672. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
  1673. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +339 -48
  1674. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +166 -2
  1675. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
  1676. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
  1677. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
  1678. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +144 -1
  1679. package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
  1680. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
  1681. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  1682. package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
  1683. package/src/resources/extensions/gsd/tests/worktree-safety-phase.test.ts +100 -0
  1684. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +114 -19
  1685. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
  1686. package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +24 -2
  1687. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
  1688. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
  1689. package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
  1690. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
  1691. package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
  1692. package/src/resources/extensions/gsd/tests/write-gate.test.ts +291 -1
  1693. package/src/resources/extensions/gsd/tool-contract.ts +124 -11
  1694. package/src/resources/extensions/gsd/tool-presentation-plan.ts +18 -35
  1695. package/src/resources/extensions/gsd/tool-surface-readiness.ts +393 -0
  1696. package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
  1697. package/src/resources/extensions/gsd/tools/complete-milestone.ts +7 -9
  1698. package/src/resources/extensions/gsd/tools/complete-slice.ts +57 -79
  1699. package/src/resources/extensions/gsd/tools/complete-task.ts +153 -13
  1700. package/src/resources/extensions/gsd/tools/exec-tool.ts +13 -124
  1701. package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
  1702. package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -9
  1703. package/src/resources/extensions/gsd/tools/plan-task.ts +19 -3
  1704. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +54 -12
  1705. package/src/resources/extensions/gsd/tools/reopen-milestone.ts +13 -40
  1706. package/src/resources/extensions/gsd/tools/reopen-slice.ts +16 -44
  1707. package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
  1708. package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
  1709. package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
  1710. package/src/resources/extensions/gsd/tools/validate-milestone.ts +26 -90
  1711. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +123 -5
  1712. package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
  1713. package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
  1714. package/src/resources/extensions/gsd/uat-policy.ts +80 -25
  1715. package/src/resources/extensions/gsd/uat-run.ts +10 -14
  1716. package/src/resources/extensions/gsd/undo.ts +17 -17
  1717. package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
  1718. package/src/resources/extensions/gsd/unit-context-composer.ts +222 -21
  1719. package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
  1720. package/src/resources/extensions/gsd/unit-registry.ts +494 -0
  1721. package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
  1722. package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -191
  1723. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +101 -6
  1724. package/src/resources/extensions/gsd/validation-block-guard.ts +60 -6
  1725. package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
  1726. package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
  1727. package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
  1728. package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
  1729. package/src/resources/extensions/gsd/web-app-uat.ts +144 -0
  1730. package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
  1731. package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
  1732. package/src/resources/extensions/gsd/workflow-events.ts +12 -20
  1733. package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
  1734. package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -0
  1735. package/src/resources/extensions/gsd/workflow-mcp-readiness-cache.ts +150 -0
  1736. package/src/resources/extensions/gsd/workflow-mcp.ts +34 -111
  1737. package/src/resources/extensions/gsd/workflow-projections.ts +44 -18
  1738. package/src/resources/extensions/gsd/workflow-reconcile.ts +32 -65
  1739. package/src/resources/extensions/gsd/workflow-tool-surface.ts +76 -0
  1740. package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
  1741. package/src/resources/extensions/gsd/workspace-git-preflight.ts +31 -0
  1742. package/src/resources/extensions/gsd/worktree-command.ts +6 -6
  1743. package/src/resources/extensions/gsd/worktree-git-recovery.ts +314 -0
  1744. package/src/resources/extensions/gsd/worktree-health.ts +6 -3
  1745. package/src/resources/extensions/gsd/worktree-lifecycle.ts +20 -25
  1746. package/src/resources/extensions/gsd/worktree-manager.ts +215 -45
  1747. package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
  1748. package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
  1749. package/src/resources/extensions/gsd/worktree-root.ts +29 -6
  1750. package/src/resources/extensions/gsd/worktree-safety.ts +73 -48
  1751. package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
  1752. package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
  1753. package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
  1754. package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
  1755. package/src/resources/extensions/gsd/worktree.ts +7 -1
  1756. package/src/resources/extensions/mcp-client/manager.ts +10 -4
  1757. package/src/resources/extensions/search-the-web/index.ts +45 -9
  1758. package/src/resources/extensions/search-the-web/native-search.ts +21 -7
  1759. package/src/resources/extensions/shared/browser-contract.ts +66 -0
  1760. package/src/resources/extensions/shared/gsd-browser-cli.ts +182 -8
  1761. package/src/resources/extensions/shared/interview-ui.ts +15 -2
  1762. package/src/resources/extensions/subagent/index.ts +20 -15
  1763. package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
  1764. package/src/resources/extensions/subagent/worktree-cwd.ts +35 -0
  1765. package/src/resources/shared/claude-runtime-floor.ts +248 -0
  1766. package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
  1767. package/src/resources/shared/package-manager-detection.ts +1 -1
  1768. package/src/resources/shared/package.json +3 -0
  1769. package/src/resources/skills/create-skill/SKILL.md +3 -0
  1770. package/src/resources/skills/create-skill/references/executable-code.md +1 -1
  1771. package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
  1772. package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
  1773. package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
  1774. package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
  1775. package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
  1776. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
  1777. package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
  1778. package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
  1779. package/dist/resources/extensions/gsd/user-input-boundary.js +0 -195
  1780. package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
  1781. package/dist/web/standalone/.next/server/chunks/5047.js +0 -2
  1782. package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
  1783. package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
  1784. package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
  1785. package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
  1786. package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
  1787. package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
  1788. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +0 -1
  1789. package/dist/web/standalone/.next/static/chunks/app/page-a48b7c48333b31c8.js +0 -1
  1790. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +0 -1
  1791. package/dist/web/standalone/.next/static/chunks/webpack-dda80a1ef5587410.js +0 -1
  1792. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +0 -21
  1793. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +0 -1
  1794. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +0 -213
  1795. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +0 -1
  1796. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts +0 -28
  1797. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts.map +0 -1
  1798. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js +0 -249
  1799. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js.map +0 -1
  1800. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts +0 -19
  1801. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts.map +0 -1
  1802. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js +0 -797
  1803. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js.map +0 -1
  1804. package/scripts/ensure-workspace-builds.cjs +0 -129
  1805. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -88
  1806. package/src/resources/extensions/gsd/user-input-boundary.ts +0 -198
  1807. package/src/resources/skills/gsd-browser/SKILL.md +0 -41
  1808. /package/dist/web/standalone/.next/static/{TA5o9SHAnCdK6Umm1MYxb → O7xDYXO0r4zFhIzY1hrWV}/_buildManifest.js +0 -0
  1809. /package/dist/web/standalone/.next/static/{TA5o9SHAnCdK6Umm1MYxb → O7xDYXO0r4zFhIzY1hrWV}/_ssgManifest.js +0 -0
@@ -1,455 +1,50 @@
1
1
  // Project/App: gsd-pi
2
2
  // File Purpose: Interactive TUI chat stream controller.
3
- import { Loader, Markdown, Spacer, Text } from "@gsd/pi-tui";
3
+ import { Loader, Spacer, Text } from "@gsd/pi-tui";
4
4
  import { theme } from "@gsd/pi-coding-agent/theme/theme.js";
5
5
  import { AssistantMessageComponent } from "../components/assistant-message.js";
6
- import { chatTurnFollowsUser, reconcileChatTurnConnections } from "../components/chat-turn-connect.js";
7
- import { ToolExecutionComponent, ToolPhaseSummaryComponent, } from "../components/tool-execution.js";
8
- import { DynamicBorder } from "../components/dynamic-border.js";
6
+ import { reconcileChatTurnConnections } from "../components/chat-turn-connect.js";
7
+ import { ToolExecutionComponent } from "../components/tool-execution.js";
9
8
  import { appKey } from "../components/keybinding-hints.js";
10
- // Tracks the last processed content index to avoid re-scanning all blocks on every message_update
11
- let lastProcessedContentIndex = 0;
12
- // Tracks the previous content[] length so we can detect when an adapter resets
13
- // the assistant content array for a new provider sub-turn within one lifecycle.
14
- let lastContentLength = 0;
15
- let renderedSegments = [];
16
- // When providers reuse one assistant lifecycle across internal sub-turns,
17
- // a content[] shrink resets renderedSegments. Keep the displaced segments so
18
- // claude-code MCP pruning can remove stale provisional text later.
19
- let orphanedSegments = [];
20
- // Invocation matching only reconciles IDs reported by different event streams.
21
- // Same-source identical invocations are separate concurrent tool calls.
22
- const toolRegistrationSources = new WeakMap();
23
- const PROVISIONAL_PRE_TOOL_ACTIONS = "check|inspect|look(?:\\s+into)?|read|open|search|grep|scan|run|verify|test|trace|review|investigate|reproduce|use|gather|find|pull|query|take a look|update|patch|edit|change|modify|write|create|add|remove|apply";
24
- const FIRST_PERSON_PROVISIONAL_PRE_TOOL_RE = new RegExp(`^(?:i(?:'ll| will)|i(?:'m| am) going to|let me|i need to)\\s+(?:${PROVISIONAL_PRE_TOOL_ACTIONS})\\b`, "i");
25
- const GERUND_PROVISIONAL_PRE_TOOL_RE = /^(?:checking|inspecting|reading|searching|running|verifying|testing|tracing|reviewing|investigating|scanning|updating|patching|editing|writing|creating|applying)\b/i;
26
- function findPendingToolByInvocation(pendingTools, toolName, args, source) {
27
- let fallback;
28
- for (const component of pendingTools.values()) {
29
- if (!component.isInFlight())
30
- continue;
31
- if (!component.matchesInvocation(toolName, args))
32
- continue;
33
- const sources = toolRegistrationSources.get(component);
34
- if (!sources?.has(source)) {
35
- return component;
36
- }
37
- if (sources.size > 1 && !fallback)
38
- fallback = component;
39
- }
40
- return fallback;
41
- }
42
- function registerPendingToolComponent(host, toolCallId, toolName, args, source, createComponent) {
43
- const existing = host.pendingTools.get(toolCallId);
44
- if (existing) {
45
- return { component: existing, created: false };
46
- }
47
- const matched = findPendingToolByInvocation(host.pendingTools, toolName, args, source);
48
- if (matched) {
49
- host.pendingTools.set(toolCallId, matched);
50
- toolRegistrationSources.get(matched)?.add(source);
51
- return { component: matched, created: false };
52
- }
53
- const component = createComponent();
54
- component.setExpanded(host.toolOutputExpanded);
55
- host.chatContainer.addChild(component);
56
- markFirstVisibleAssistantOutput(host, "tool", { toolName, source });
57
- host.pendingTools.set(toolCallId, component);
58
- toolRegistrationSources.set(component, new Set([source]));
59
- return { component, created: true };
60
- }
9
+ import { markFirstVisibleAssistantOutput, markTuiLatency } from "./chat-controller-latency.js";
10
+ import { findLatestPinnableCandidates, findLatestPinnableText, tearDownPinnedZone, updatePinnedMessageZone, } from "./chat-pinned-zone.js";
11
+ import { hasAssistantToolBlocks, hasVisibleAssistantContent, isProvisionalPreToolProse, isRedundantDiscussRestatement, priorAssistantTextFromSession, shouldSuppressEntireAssistantMessage, textInvitesUserReply, } from "./chat-handoff-filter.js";
12
+ import { registerPendingToolComponent, replaceCompactToolRowsWithPhaseSummary, } from "./chat-tool-rollup.js";
13
+ import { applySubTurnContentShrink, rebuildSegmentsOnMessageEnd, runSegmentWalker, scanNewContentBlocks, } from "./chat-segment-walker.js";
14
+ export { findLatestPinnableCandidates, findLatestPinnableText, isProvisionalPreToolProse, isRedundantDiscussRestatement, priorAssistantTextFromSession, textInvitesUserReply, };
61
15
  function startLoadingAnimation(host) {
62
16
  if (host.pendingWorkingMessage === null) {
63
17
  host.loadingAnimation = undefined;
64
18
  host.statusContainer.clear();
19
+ startActivityIndicator(host);
65
20
  return;
66
21
  }
67
22
  host.loadingAnimation = new Loader(host.ui, (spinner) => theme.fg("accent", spinner), (text) => theme.fg("muted", text), host.defaultWorkingMessage);
68
23
  host.statusContainer.addChild(host.loadingAnimation);
69
24
  if (host.pendingWorkingMessage !== undefined) {
70
25
  if (host.pendingWorkingMessage) {
71
- host.loadingAnimation.setMessage(host.pendingWorkingMessage);
26
+ host.loadingAnimation?.setMessage?.(host.pendingWorkingMessage);
72
27
  }
73
28
  host.pendingWorkingMessage = undefined;
74
29
  }
75
30
  }
76
- function markTuiLatency(host, phase, data) {
77
- host.session?.markTurnLatency?.(phase, data);
78
- }
79
- function markFirstVisibleAssistantOutput(host, kind, data) {
80
- host.session?.markFirstVisibleTurnLatency?.(kind, data);
81
- }
82
- function getVisibleTextLikeBlockType(block, hideThinkingBlock = false) {
83
- if (block?.type === "text" && typeof block.text === "string" && block.text.trim().length > 0)
84
- return "text";
85
- if (hideThinkingBlock)
86
- return undefined;
87
- if (block?.type === "thinking" && typeof block.thinking === "string" && block.thinking.trim().length > 0)
88
- return "thinking";
89
- return undefined;
90
- }
91
- /** True when assistant prose is handing off to the user (question or explicit invite). */
92
- export function textInvitesUserReply(text) {
93
- const trimmed = text.trim();
94
- if (!trimmed)
95
- return false;
96
- if (/\?(?:\s|$)/m.test(trimmed))
97
- return true;
98
- return /\b(?:what do you want|what's on your mind|let me know|tell me what|help me understand)\b/i.test(trimmed);
99
- }
100
- const DISCUSS_RESTATE_RE = /\b(?:what do you want|what should we|before i can write|context file|placeholder name|need to understand what|what(?:'s| is) (?:on your mind|the next)|help me understand what you want)\b/i;
101
- /**
102
- * Claude Code can emit a second text sub-turn that restates the same milestone
103
- * discuss ask. Drop it when the prior sub-turn already invited a user reply.
104
- */
105
- export function isRedundantDiscussRestatement(priorText, newText) {
106
- const prior = priorText.trim();
107
- const next = newText.trim();
108
- if (!prior || !next)
109
- return false;
110
- if (!textInvitesUserReply(prior))
111
- return false;
112
- if (!DISCUSS_RESTATE_RE.test(next))
113
- return false;
114
- if (next.length > prior.length * 1.1)
115
- return false;
116
- return next.length <= prior.length || next.length < 900;
117
- }
118
- function getTextFromContentBlocks(blocks, startIndex, endIndex) {
119
- const parts = [];
120
- for (let i = startIndex; i <= endIndex && i < blocks.length; i++) {
121
- const block = blocks[i];
122
- if (block?.type === "text" && typeof block.text === "string" && block.text.trim()) {
123
- parts.push(block.text.trim());
124
- }
125
- }
126
- return parts.join("\n\n");
127
- }
128
- function filterRedundantDiscussTextRuns(desired, blocks) {
129
- const textRuns = desired.filter((seg) => seg.kind === "text-run" && seg.contentType === "text");
130
- if (textRuns.length < 2)
131
- return desired;
132
- const skipStarts = new Set();
133
- let lastKeptText;
134
- for (const seg of textRuns) {
135
- const text = getTextFromContentBlocks(blocks, seg.startIndex, seg.endIndex);
136
- if (lastKeptText && isRedundantDiscussRestatement(lastKeptText, text)) {
137
- skipStarts.add(seg.startIndex);
138
- }
139
- else {
140
- lastKeptText = text;
141
- }
142
- }
143
- return desired.filter((seg) => !(seg.kind === "text-run" && seg.contentType === "text" && skipStarts.has(seg.startIndex)));
144
- }
145
- function extractAssistantText(msg) {
146
- if (!msg)
147
- return "";
148
- const content = msg.content;
149
- if (typeof content === "string")
150
- return content;
151
- if (!Array.isArray(content))
152
- return "";
153
- const parts = [];
154
- for (const block of content) {
155
- if (!block || typeof block !== "object")
156
- continue;
157
- if (block.type === "text" && typeof block.text === "string") {
158
- parts.push(block.text);
159
- }
160
- }
161
- return parts.join("\n");
162
- }
163
- function latestPriorUserFacingText(orphaned, rendered) {
164
- const runs = [...orphaned, ...rendered].filter((seg) => seg.kind === "text-run" && seg.contentType === "text");
165
- return runs.at(-1)?.cachedText;
31
+ /** Compact activity pulse used when extensions suppress the default working loader. */
32
+ export function startActivityIndicator(host, message) {
33
+ stopActivityIndicator(host);
34
+ const phase = message?.trim() ||
35
+ host.gsdProgressState?.phase ||
36
+ host.defaultWorkingMessage;
37
+ host.activityLoader = new Loader(host.ui, (spinner) => theme.fg("accent", spinner), (text) => theme.fg("muted", text), phase);
38
+ host.statusContainer.addChild(host.activityLoader);
39
+ host.ui.requestRender();
166
40
  }
167
- /**
168
- * Walk session history backward for the previous assistant prose block, skipping
169
- * toolResult rows. Used when Claude Code emits a second assistant message
170
- * (new timestamp) after tools in the same prompt.
171
- */
172
- export function priorAssistantTextFromSession(messages, opts) {
173
- let assistantFromEnd = 0;
174
- for (let i = messages.length - 1; i >= 0; i--) {
175
- const message = messages[i];
176
- if (!message)
177
- continue;
178
- if (message.role === "user")
179
- return undefined;
180
- if (message.role === "toolResult")
181
- continue;
182
- if (message.role === "assistant") {
183
- const text = extractAssistantText(message).trim();
184
- if (!text)
185
- continue;
186
- if (opts?.skipLastAssistant) {
187
- assistantFromEnd += 1;
188
- if (assistantFromEnd === 1)
189
- continue;
190
- }
191
- return text;
192
- }
193
- }
194
- return undefined;
195
- }
196
- function shouldSuppressRedundantHandoffText(sessionMessages, currentText, orphaned, rendered) {
197
- const next = currentText.trim();
198
- if (!next)
199
- return false;
200
- const priorInline = latestPriorUserFacingText(orphaned, rendered);
201
- if (priorInline && isRedundantDiscussRestatement(priorInline, next)) {
202
- return true;
203
- }
204
- const last = sessionMessages[sessionMessages.length - 1];
205
- const skipLastAssistant = last?.role === "assistant" && extractAssistantText(last).trim() === next;
206
- const priorSession = priorAssistantTextFromSession(sessionMessages, { skipLastAssistant });
207
- return !!(priorSession && isRedundantDiscussRestatement(priorSession, next));
208
- }
209
- function buildDesiredSegments(blocks, options = {}) {
210
- const desired = [];
211
- let runStart = -1;
212
- let runEnd = -1;
213
- let runType;
214
- const closeRun = () => {
215
- if (runStart !== -1 && runType) {
216
- desired.push({ kind: "text-run", startIndex: runStart, endIndex: runEnd, contentType: runType });
217
- runStart = -1;
218
- runEnd = -1;
219
- runType = undefined;
220
- }
221
- };
222
- for (let i = 0; i < blocks.length; i++) {
223
- const block = blocks[i];
224
- const blockType = getVisibleTextLikeBlockType(block, options.hideThinkingBlock);
225
- const isInvisibleTextLike = blockType === undefined && (block?.type === "text" || block?.type === "thinking");
226
- const isTool = block?.type === "toolCall" || block?.type === "serverToolUse";
227
- if (blockType) {
228
- if (options.shouldSkipTextBlock?.(block, i)) {
229
- closeRun();
230
- continue;
231
- }
232
- if (runStart === -1) {
233
- runStart = i;
234
- runEnd = i;
235
- runType = blockType;
236
- }
237
- else if (runType !== blockType) {
238
- closeRun();
239
- runStart = i;
240
- runEnd = i;
241
- runType = blockType;
242
- }
243
- else {
244
- runEnd = i;
245
- }
246
- }
247
- else {
248
- if (isInvisibleTextLike)
249
- continue;
250
- closeRun();
251
- if (isTool) {
252
- desired.push({ kind: "tool", contentIndex: i, toolId: block.id });
253
- }
254
- }
255
- }
256
- closeRun();
257
- return desired;
258
- }
259
- function isToolUseBlock(block) {
260
- return block?.type === "toolCall" || block?.type === "serverToolUse";
261
- }
262
- function isMcpToolBlock(block) {
263
- if (!isToolUseBlock(block))
264
- return false;
265
- const toolName = typeof block?.name === "string" ? block.name : "";
266
- return typeof block?.mcpServer === "string" || toolName.startsWith("mcp__");
267
- }
268
- function hasPostToolText(blocks, firstToolIdx) {
269
- if (firstToolIdx < 0)
270
- return false;
271
- return blocks.some((b, idx) => (idx > firstToolIdx
272
- && b?.type === "text"
273
- && typeof b?.text === "string"
274
- && b.text.trim().length > 0));
275
- }
276
- function normalizeProvisionalText(text) {
277
- return text
278
- .trim()
279
- .replace(/[’`]/g, "'")
280
- .replace(/\s+/g, " ");
281
- }
282
- export function isProvisionalPreToolProse(text) {
283
- const normalized = normalizeProvisionalText(text);
284
- if (!normalized)
285
- return false;
286
- if (textInvitesUserReply(normalized))
287
- return false;
288
- if (/\?\s*$/.test(normalized))
289
- return false;
290
- return FIRST_PERSON_PROVISIONAL_PRE_TOOL_RE.test(normalized)
291
- || GERUND_PROVISIONAL_PRE_TOOL_RE.test(normalized);
292
- }
293
- function getProvisionalPreToolPrunePlan(message) {
294
- const blocks = message.content;
295
- const firstToolIdx = blocks.findIndex(isToolUseBlock);
296
- return {
297
- firstToolIdx,
298
- shouldPrune: message.provider === "claude-code"
299
- && firstToolIdx >= 0
300
- && blocks.some(isMcpToolBlock)
301
- && hasPostToolText(blocks, firstToolIdx),
302
- };
303
- }
304
- function buildDesiredSegmentsForMessage(message, options = {}) {
305
- const { shouldPrune, firstToolIdx } = getProvisionalPreToolPrunePlan(message);
306
- return buildDesiredSegments(message.content, {
307
- hideThinkingBlock: options.hideThinkingBlock,
308
- shouldSkipTextBlock: (block, index) => {
309
- if (!shouldPrune || firstToolIdx < 0 || index >= firstToolIdx)
310
- return false;
311
- if (getVisibleTextLikeBlockType(block, options.hideThinkingBlock) !== "text")
312
- return false;
313
- const textValue = typeof block?.text === "string" ? block.text : "";
314
- return isProvisionalPreToolProse(textValue);
315
- },
316
- });
317
- }
318
- function hasVisibleAssistantContent(message, hideThinkingBlock = false) {
319
- return message.content.some((c) => getVisibleTextLikeBlockType(c, hideThinkingBlock) !== undefined);
320
- }
321
- function hasAssistantToolBlocks(message) {
322
- return message.content.some((c) => c.type === "toolCall" || c.type === "serverToolUse");
323
- }
324
- // Pinnable text candidates: non-empty text blocks that appear strictly before
325
- // the most recent tool call, returned newest-first. Text blocks after the last
326
- // tool call are still streaming live into the chat container.
327
- export function findLatestPinnableCandidates(contentBlocks) {
328
- let lastToolIdx = -1;
329
- for (let i = contentBlocks.length - 1; i >= 0; i--) {
330
- const c = contentBlocks[i];
331
- if (c?.type === "toolCall" || c?.type === "serverToolUse") {
332
- lastToolIdx = i;
333
- break;
334
- }
335
- }
336
- const out = [];
337
- for (let i = lastToolIdx - 1; i >= 0; i--) {
338
- const c = contentBlocks[i];
339
- if (c?.type === "text" && typeof c.text === "string" && c.text.trim()) {
340
- out.push({ text: c.text.trim(), contentIndex: i });
341
- }
342
- }
343
- return out;
344
- }
345
- export function findLatestPinnableText(contentBlocks) {
346
- return findLatestPinnableCandidates(contentBlocks)[0]?.text ?? "";
347
- }
348
- // Sum rendered line counts of segments that appear strictly after the given
349
- // content-block index. Used to decide whether a pinnable text block has
350
- // scrolled out of the viewport and therefore warrants mirroring.
351
- function rowsRenderedAfterContentIndex(contentIndex, width) {
352
- let rows = 0;
353
- for (const seg of renderedSegments) {
354
- try {
355
- if (seg.kind === "text-run" && seg.startIndex > contentIndex) {
356
- rows += seg.component.render(width).length;
357
- }
358
- else if (seg.kind === "tool" && seg.contentIndex > contentIndex) {
359
- rows += seg.component.render(width).length;
360
- }
361
- }
362
- catch {
363
- // Defensive: a component that throws during measurement shouldn't
364
- // destabilize pinned-zone logic. Skip it.
365
- }
366
- }
367
- return rows;
368
- }
369
- // Tracks the latest assistant text for the pinned message zone
370
- let lastPinnedText = "";
371
- // Whether any tool execution has been added in this assistant turn (triggers pinned display)
372
- let hasToolsInTurn = false;
373
- // Reference to the pinned border so we can toggle its label between working/idle
374
- let pinnedBorder;
375
- // Reference to the pinned markdown component below the border
376
- let pinnedTextComponent;
377
- function mergeToolPhases(phases) {
378
- const merged = [];
379
- for (const phase of phases) {
380
- const previous = merged[merged.length - 1];
381
- if (previous?.label === phase.label) {
382
- previous.count += phase.count;
383
- previous.durationMs += phase.durationMs;
384
- previous.targets = mergeTargets(previous.targets, phase.targets);
385
- if (previous.actionLabel !== phase.actionLabel) {
386
- previous.actionLabel = undefined;
387
- }
388
- }
389
- else {
390
- merged.push({ ...phase, targets: phase.targets ? [...phase.targets] : undefined });
391
- }
392
- }
393
- return merged;
394
- }
395
- function mergeTargets(existing, incoming) {
396
- if (!existing && !incoming)
397
- return undefined;
398
- const seen = new Set();
399
- const merged = [];
400
- for (const target of [...(existing ?? []), ...(incoming ?? [])]) {
401
- if (!target || seen.has(target))
402
- continue;
403
- seen.add(target);
404
- merged.push(target);
405
- }
406
- return merged;
407
- }
408
- function replaceCompactToolRowsWithPhaseSummary(host) {
409
- let changed = false;
410
- const nextRenderedSegments = [];
411
- let rollupRun = [];
412
- const flushRollupRun = () => {
413
- const actionCount = rollupRun.reduce((total, item) => total + item.phases.reduce((sum, phase) => sum + phase.count, 0), 0);
414
- if (actionCount < 2) {
415
- nextRenderedSegments.push(...rollupRun.map((item) => item.seg));
416
- rollupRun = [];
417
- return;
418
- }
419
- const firstIndex = Math.max(0, host.chatContainer.children.indexOf(rollupRun[0].seg.component));
420
- const phases = mergeToolPhases(rollupRun.flatMap((item) => item.phases));
421
- const summary = new ToolPhaseSummaryComponent(phases);
422
- for (const { seg } of rollupRun) {
423
- host.chatContainer.removeChild(seg.component);
424
- }
425
- host.chatContainer.addChild(summary);
426
- const summaryIndex = host.chatContainer.children.indexOf(summary);
427
- if (summaryIndex !== -1 && summaryIndex !== firstIndex) {
428
- host.chatContainer.children.splice(summaryIndex, 1);
429
- host.chatContainer.children.splice(firstIndex, 0, summary);
430
- host.chatContainer._prevRender = null;
431
- }
432
- changed = true;
433
- nextRenderedSegments.push({ kind: "tool-summary", component: summary, phases });
434
- rollupRun = [];
435
- };
436
- for (const seg of renderedSegments) {
437
- const phase = seg.kind === "tool" ? seg.component.getRollupPhase() : null;
438
- if (seg.kind === "tool" && phase) {
439
- rollupRun.push({ seg, phases: [phase] });
440
- continue;
441
- }
442
- if (seg.kind === "tool-summary") {
443
- rollupRun.push({ seg, phases: seg.component.getPhases() });
444
- continue;
445
- }
446
- flushRollupRun();
447
- nextRenderedSegments.push(seg);
448
- }
449
- flushRollupRun();
450
- if (changed) {
451
- renderedSegments = nextRenderedSegments;
452
- host.ui.requestRender();
41
+ export function stopActivityIndicator(host) {
42
+ if (!host.activityLoader)
43
+ return;
44
+ host.activityLoader.stop();
45
+ host.activityLoader = undefined;
46
+ if (!host.loadingAnimation && !host.autoCompactionLoader && !host.retryLoader) {
47
+ host.statusContainer.clear();
453
48
  }
454
49
  }
455
50
  export async function handleAgentEvent(host, event) {
@@ -458,19 +53,11 @@ export async function handleAgentEvent(host, event) {
458
53
  }
459
54
  host.footer.invalidate();
460
55
  const timestampFormat = host.settingsManager.getTimestampFormat();
56
+ const rs = host.streamingRenderState;
461
57
  // Reset content index tracker and pinned state when a new assistant message starts
462
58
  if (event.type === "message_start" && event.message.role === "assistant") {
463
- lastProcessedContentIndex = 0;
464
- lastContentLength = 0;
465
- lastPinnedText = "";
466
- hasToolsInTurn = false;
467
- renderedSegments = [];
468
- orphanedSegments = [];
469
- if (pinnedBorder)
470
- pinnedBorder.stopSpinner();
471
- pinnedBorder = undefined;
472
- pinnedTextComponent = undefined;
473
- host.pinnedMessageContainer.clear();
59
+ rs.resetForNewAssistantMessage();
60
+ tearDownPinnedZone(host);
474
61
  }
475
62
  switch (event.type) {
476
63
  case "session_state_changed":
@@ -482,16 +69,8 @@ export async function handleAgentEvent(host, event) {
482
69
  host.streamingMessage = undefined;
483
70
  host.pendingTools.clear();
484
71
  host.pendingMessagesContainer.clear();
485
- host.pinnedMessageContainer.clear();
486
- lastPinnedText = "";
487
- hasToolsInTurn = false;
488
- renderedSegments = [];
489
- orphanedSegments = [];
490
- lastContentLength = 0;
491
- if (pinnedBorder)
492
- pinnedBorder.stopSpinner();
493
- pinnedBorder = undefined;
494
- pinnedTextComponent = undefined;
72
+ tearDownPinnedZone(host);
73
+ rs.resetForSessionChange();
495
74
  host.compactionQueuedMessages = [];
496
75
  host.rebuildChatFromMessages();
497
76
  host.updatePendingMessagesDisplay();
@@ -525,6 +104,7 @@ export async function handleAgentEvent(host, event) {
525
104
  if (host.loadingAnimation) {
526
105
  host.loadingAnimation.stop();
527
106
  }
107
+ stopActivityIndicator(host);
528
108
  host.statusContainer.clear();
529
109
  startLoadingAnimation(host);
530
110
  markTuiLatency(host, "tui.loader_visible");
@@ -564,7 +144,10 @@ export async function handleAgentEvent(host, event) {
564
144
  externalToolResult = {
565
145
  toolCallId: tc.id,
566
146
  content: ext.content ?? [{ type: "text", text: "" }],
567
- details: ext.details ?? {},
147
+ // Preserve undefined when MCP omits structuredContent — an empty
148
+ // object is truthy and makes ask_user_questions renderResult show
149
+ // "Cancelled" despite a successful text payload (#cc-elicitation).
150
+ details: ext.details,
568
151
  isError: ext.isError ?? false,
569
152
  };
570
153
  }
@@ -577,7 +160,7 @@ export async function handleAgentEvent(host, event) {
577
160
  externalToolResult = {
578
161
  toolCallId: block.id,
579
162
  content: ext.content ?? [{ type: "text", text: "" }],
580
- details: ext.details ?? {},
163
+ details: ext.details,
581
164
  isError: ext.isError ?? false,
582
165
  };
583
166
  }
@@ -587,52 +170,12 @@ export async function handleAgentEvent(host, event) {
587
170
  // lifecycle while internally spanning multiple provider sub-turns.
588
171
  // When a new sub-turn starts, content[] length shrinks back to 0/1.
589
172
  // The scan loop needs its index reset, AND the segment walker's
590
- // renderedSegments map must be cleared so existing text-run
173
+ // rs.renderedSegments map must be cleared so existing text-run
591
174
  // components don't get overwritten in place with new sub-turn
592
175
  // content (#4144 regression). Prior sub-turn children stay in
593
176
  // chatContainer as frozen history; new segments append after them.
594
- if (contentBlocks.length < lastContentLength) {
595
- // Accumulate across successive shrinks — overwriting would drop
596
- // segments displaced by an earlier shrink, leaving them stranded
597
- // in chatContainer once the prune pass finally runs.
598
- orphanedSegments = [...orphanedSegments, ...renderedSegments];
599
- renderedSegments = [];
600
- lastPinnedText = "";
601
- lastProcessedContentIndex = 0;
602
- }
603
- else if (lastProcessedContentIndex >= contentBlocks.length) {
604
- lastProcessedContentIndex = 0;
605
- }
606
- lastContentLength = contentBlocks.length;
607
- for (let i = lastProcessedContentIndex; i < contentBlocks.length; i++) {
608
- const content = contentBlocks[i];
609
- if (content.type === "toolCall") {
610
- const { component } = registerPendingToolComponent(host, content.id, content.name, content.arguments, "content", () => new ToolExecutionComponent(content.name, content.arguments, { showImages: host.settingsManager.getShowImages() }, host.getRegisteredToolDefinition(content.name), host.ui));
611
- component.updateArgs(content.arguments);
612
- }
613
- else if (content.type === "serverToolUse") {
614
- registerPendingToolComponent(host, content.id, content.name, content.input ?? {}, "content", () => new ToolExecutionComponent(content.name, content.input ?? {}, { showImages: host.settingsManager.getShowImages() }, undefined, host.ui));
615
- }
616
- else if (content.type === "webSearchResult") {
617
- const component = host.pendingTools.get(content.toolUseId);
618
- if (component) {
619
- if (process.env.PI_OFFLINE === "1") {
620
- component.updateResult({
621
- content: [{ type: "text", text: "Web search disabled (offline mode)" }],
622
- isError: false,
623
- });
624
- }
625
- else {
626
- const searchContent = content.content;
627
- const isError = searchContent && typeof searchContent === "object" && "type" in searchContent && searchContent.type === "web_search_tool_result_error";
628
- component.updateResult({
629
- content: [{ type: "text", text: host.formatWebSearchResult(searchContent) }],
630
- isError: !!isError,
631
- });
632
- }
633
- }
634
- }
635
- }
177
+ applySubTurnContentShrink(rs, contentBlocks);
178
+ scanNewContentBlocks(host, rs, contentBlocks);
636
179
  // When the stream adapter signals a completed tool call with an
637
180
  // external result (from Claude Code SDK), update the pending
638
181
  // ToolExecutionComponent immediately so output is visible in
@@ -648,195 +191,19 @@ export async function handleAgentEvent(host, event) {
648
191
  replaceCompactToolRowsWithPhaseSummary(host);
649
192
  }
650
193
  }
651
- // Segment walker: render content blocks in stream order, append-only.
652
- // Build desired segment plan from content[].
653
- {
654
- const blocks = host.streamingMessage.content;
655
- // Only prune provisional pre-tool prose after post-tool prose exists,
656
- // so MCP tool-only windows do not blank the assistant content.
657
- const { shouldPrune: shouldPruneProvisionalPreToolProse } = getProvisionalPreToolPrunePlan(host.streamingMessage);
658
- let desired = buildDesiredSegmentsForMessage(host.streamingMessage, {
659
- hideThinkingBlock: host.hideThinkingBlock,
660
- });
661
- desired = filterRedundantDiscussTextRuns(desired, blocks);
662
- // Claude Code MCP can emit provisional pre-tool prose that gets
663
- // superseded by post-tool output. Prune stale text-run segments so
664
- // the final assistant output remains below tool output.
665
- if (shouldPruneProvisionalPreToolProse) {
666
- if (orphanedSegments.length > 0) {
667
- const remainingOrphans = [];
668
- for (const orphan of orphanedSegments) {
669
- if (orphan.kind === "text-run"
670
- && orphan.contentType === "text"
671
- && isProvisionalPreToolProse(orphan.cachedText ?? "")) {
672
- host.chatContainer.removeChild(orphan.component);
673
- if (host.streamingComponent === orphan.component) {
674
- host.streamingComponent = undefined;
675
- }
676
- continue;
677
- }
678
- remainingOrphans.push(orphan);
679
- }
680
- orphanedSegments = remainingOrphans;
681
- }
682
- const desiredTextKeys = new Set(desired
683
- .filter((seg) => seg.kind === "text-run")
684
- .map((seg) => `${seg.contentType}:${seg.startIndex}`));
685
- const desiredToolIndices = new Set(desired
686
- .filter((seg) => seg.kind === "tool")
687
- .map((seg) => seg.contentIndex));
688
- const nextRendered = [];
689
- for (const seg of renderedSegments) {
690
- if (seg.kind === "text-run"
691
- && seg.contentType === "text"
692
- && !desiredTextKeys.has(`${seg.contentType}:${seg.startIndex}`)) {
693
- host.chatContainer.removeChild(seg.component);
694
- if (host.streamingComponent === seg.component) {
695
- host.streamingComponent = undefined;
696
- }
697
- continue;
698
- }
699
- if (seg.kind === "tool" && !desiredToolIndices.has(seg.contentIndex)) {
700
- continue;
701
- }
702
- nextRendered.push(seg);
703
- }
704
- renderedSegments = nextRendered;
705
- }
706
- // Append any newly needed segments (never reorder existing ones).
707
- for (const seg of desired) {
708
- if (seg.kind === "tool") {
709
- // Tool segments are already handled above via pendingTools; just
710
- // register them in renderedSegments if not yet tracked.
711
- const existing = renderedSegments.find((s) => s.kind === "tool" && s.contentIndex === seg.contentIndex);
712
- if (!existing) {
713
- const comp = host.pendingTools.get(seg.toolId);
714
- if (comp) {
715
- renderedSegments.push({ kind: "tool", contentIndex: seg.contentIndex, component: comp });
716
- }
717
- }
718
- }
719
- else {
720
- // text-run segment
721
- const existing = renderedSegments.find((s) => s.kind === "text-run" && s.startIndex === seg.startIndex && s.contentType === seg.contentType);
722
- if (!existing) {
723
- const segmentText = getTextFromContentBlocks(blocks, seg.startIndex, seg.endIndex);
724
- if (shouldSuppressRedundantHandoffText(host.session.messages, segmentText, orphanedSegments, renderedSegments)) {
725
- continue;
726
- }
727
- const connectedToUser = renderedSegments.filter((s) => s.kind === "text-run").length === 0 &&
728
- orphanedSegments.filter((s) => s.kind === "text-run").length === 0 &&
729
- chatTurnFollowsUser(host.chatContainer.children);
730
- const comp = new AssistantMessageComponent(undefined, host.hideThinkingBlock, host.getMarkdownThemeWithSettings(), timestampFormat, { startIndex: seg.startIndex, endIndex: seg.endIndex }, connectedToUser);
731
- host.chatContainer.addChild(comp);
732
- markFirstVisibleAssistantOutput(host, seg.contentType, {
733
- contentIndex: seg.startIndex,
734
- });
735
- renderedSegments.push({
736
- kind: "text-run",
737
- startIndex: seg.startIndex,
738
- endIndex: seg.endIndex,
739
- contentType: seg.contentType,
740
- component: comp,
741
- cachedText: segmentText,
742
- });
743
- host.streamingComponent = comp;
744
- reconcileChatTurnConnections(host.chatContainer.children);
745
- }
746
- }
747
- }
748
- // Update all trailing text-run segments with the latest message so
749
- // streaming text grows in place.
750
- for (const seg of renderedSegments) {
751
- if (seg.kind === "text-run") {
752
- // Find corresponding desired segment to get current endIndex
753
- const d = desired.find((ds) => ds.kind === "text-run" && ds.startIndex === seg.startIndex && ds.contentType === seg.contentType);
754
- if (d && d.kind === "text-run" && d.endIndex !== seg.endIndex) {
755
- seg.endIndex = d.endIndex;
756
- seg.component.setRange({ startIndex: seg.startIndex, endIndex: seg.endIndex });
757
- }
758
- seg.cachedText = getTextFromContentBlocks(blocks, seg.startIndex, seg.endIndex);
759
- seg.component.updateContent(host.streamingMessage);
760
- }
761
- }
762
- // Keep streamingComponent pointing at the last text-run for message_end compatibility.
763
- const lastTextSeg = [...renderedSegments].reverse().find((s) => s.kind === "text-run");
764
- if (lastTextSeg && lastTextSeg.kind === "text-run") {
765
- host.streamingComponent = lastTextSeg.component;
766
- }
767
- }
194
+ runSegmentWalker(host, rs, timestampFormat);
768
195
  // Update index: fully processed blocks won't need re-scanning.
769
196
  // Keep the last block's index (it may still be accumulating data),
770
197
  // so we re-check it next time but skip all earlier ones.
771
198
  if (contentBlocks.length > 0) {
772
- lastProcessedContentIndex = Math.max(0, contentBlocks.length - 1);
199
+ rs.lastProcessedContentIndex = Math.max(0, contentBlocks.length - 1);
773
200
  }
774
201
  // Pinned message: mirror the latest assistant text above the editor
775
202
  // when tool executions push it out of the viewport.
776
- const hasTools = contentBlocks.some((c) => c.type === "toolCall" || c.type === "serverToolUse");
777
- if (hasTools)
778
- hasToolsInTurn = true;
779
- if (hasToolsInTurn) {
780
- const candidates = findLatestPinnableCandidates(contentBlocks);
781
- const termRows = host.ui.terminal.rows;
782
- const termCols = host.ui.terminal.columns;
783
- const pinnedMax = Math.max(3, Math.floor(termRows * 0.4));
784
- // Reserve rows for pinned zone + its border + editor + footer chrome.
785
- // Anything below this row budget is still in the viewport.
786
- const offscreenThreshold = Math.max(1, termRows - pinnedMax - 8);
787
- // Walk candidates newest→oldest; pick the first whose following
788
- // segments have pushed enough rows to scroll it off-screen.
789
- let picked;
790
- for (const c of candidates) {
791
- if (rowsRenderedAfterContentIndex(c.contentIndex, termCols) >= offscreenThreshold) {
792
- picked = c;
793
- break;
794
- }
795
- }
796
- if (picked) {
797
- if (picked.text !== lastPinnedText) {
798
- lastPinnedText = picked.text;
799
- if (!pinnedBorder) {
800
- // First time: create border + text component
801
- host.pinnedMessageContainer.clear();
802
- pinnedBorder = new DynamicBorder((str) => theme.fg("dim", str), "Working · Latest Output");
803
- pinnedBorder.startSpinner(host.ui, (str) => theme.fg("accent", str));
804
- host.pinnedMessageContainer.addChild(pinnedBorder);
805
- pinnedTextComponent = new Markdown(picked.text, 1, 0, host.getMarkdownThemeWithSettings());
806
- // Cap pinned content to ~40% of terminal height so tall output
807
- // doesn't exceed the viewport and cause render flashing.
808
- pinnedTextComponent.maxLines = pinnedMax;
809
- host.pinnedMessageContainer.addChild(pinnedTextComponent);
810
- // Hide the separate status loader — the pinned zone replaces it
811
- if (host.loadingAnimation) {
812
- host.loadingAnimation.stop();
813
- host.loadingAnimation = undefined;
814
- }
815
- host.statusContainer.clear();
816
- }
817
- else {
818
- // Update existing markdown component in-place
819
- pinnedTextComponent?.setText(picked.text);
820
- // Refresh maxLines in case terminal was resized
821
- if (pinnedTextComponent) {
822
- pinnedTextComponent.maxLines = pinnedMax;
823
- }
824
- }
825
- }
826
- }
827
- else if (pinnedBorder) {
828
- // Every candidate is still visible in the chat scrollback —
829
- // tear down the pinned zone so we don't duplicate on-screen text.
830
- pinnedBorder.stopSpinner();
831
- pinnedBorder = undefined;
832
- pinnedTextComponent = undefined;
833
- host.pinnedMessageContainer.clear();
834
- lastPinnedText = "";
835
- if (!host.loadingAnimation) {
836
- host.statusContainer.clear();
837
- startLoadingAnimation(host);
838
- }
839
- }
203
+ const { toreDownPinnedZone } = updatePinnedMessageZone(host, rs, contentBlocks);
204
+ if (toreDownPinnedZone && !host.loadingAnimation) {
205
+ host.statusContainer.clear();
206
+ startLoadingAnimation(host);
840
207
  }
841
208
  host.ui.requestRender();
842
209
  }
@@ -857,86 +224,14 @@ export async function handleAgentEvent(host, event) {
857
224
  const shouldRenderAssistant = hasVisibleAssistantContent(host.streamingMessage, host.hideThinkingBlock) ||
858
225
  ((host.streamingMessage.stopReason === "aborted" || host.streamingMessage.stopReason === "error") &&
859
226
  !hasAssistantToolBlocks(host.streamingMessage));
860
- const suppressRedundantHandoff = shouldSuppressRedundantHandoffText(host.session.messages, extractAssistantText(host.streamingMessage), orphanedSegments, []);
227
+ const suppressRedundantHandoff = shouldSuppressEntireAssistantMessage(host.streamingMessage, host.session.messages, rs.orphanedSegments);
861
228
  // The final message_end payload can contain additional text/thinking
862
229
  // blocks that never arrived via message_update (e.g. SDK result
863
230
  // aggregation). Rebuild this in-flight turn from final content so
864
231
  // ranges/components don't keep stale partial indices.
865
- if (renderedSegments.length > 0) {
866
- const finalBlocks = host.streamingMessage.content;
867
- const desired = filterRedundantDiscussTextRuns(buildDesiredSegmentsForMessage(host.streamingMessage, {
868
- hideThinkingBlock: host.hideThinkingBlock,
869
- }), finalBlocks);
870
- const toolComponentsById = new Map();
871
- for (const [toolId, component] of host.pendingTools.entries()) {
872
- toolComponentsById.set(toolId, component);
873
- }
874
- for (const seg of renderedSegments) {
875
- host.chatContainer.removeChild(seg.component);
876
- if (seg.kind === "tool") {
877
- const priorBlocks = host.streamingMessage.content;
878
- const priorBlock = priorBlocks[seg.contentIndex];
879
- if (priorBlock?.id && !toolComponentsById.has(priorBlock.id)) {
880
- toolComponentsById.set(priorBlock.id, seg.component);
881
- }
882
- }
883
- }
884
- renderedSegments = [];
885
- host.streamingComponent = undefined;
886
- for (const seg of desired) {
887
- if (seg.kind === "tool") {
888
- const finalBlock = finalBlocks[seg.contentIndex];
889
- let component = toolComponentsById.get(seg.toolId);
890
- if (!component && finalBlock?.id) {
891
- component = host.pendingTools.get(finalBlock.id);
892
- }
893
- if (!component && finalBlock?.type === "toolCall") {
894
- component = new ToolExecutionComponent(finalBlock.name, finalBlock.arguments, { showImages: host.settingsManager.getShowImages() }, host.getRegisteredToolDefinition(finalBlock.name), host.ui);
895
- component.setExpanded(host.toolOutputExpanded);
896
- host.pendingTools.set(finalBlock.id, component);
897
- toolComponentsById.set(finalBlock.id, component);
898
- }
899
- else if (!component && finalBlock?.type === "serverToolUse") {
900
- component = new ToolExecutionComponent(finalBlock.name, finalBlock.input ?? {}, { showImages: host.settingsManager.getShowImages() }, undefined, host.ui);
901
- component.setExpanded(host.toolOutputExpanded);
902
- host.pendingTools.set(finalBlock.id, component);
903
- toolComponentsById.set(finalBlock.id, component);
904
- }
905
- if (component) {
906
- host.chatContainer.addChild(component);
907
- renderedSegments.push({ kind: "tool", contentIndex: seg.contentIndex, component });
908
- }
909
- continue;
910
- }
911
- const connectedToUser = renderedSegments.filter((s) => s.kind === "text-run").length === 0 &&
912
- chatTurnFollowsUser(host.chatContainer.children);
913
- const comp = new AssistantMessageComponent(undefined, host.hideThinkingBlock, host.getMarkdownThemeWithSettings(), timestampFormat, { startIndex: seg.startIndex, endIndex: seg.endIndex }, connectedToUser);
914
- comp.updateContent(host.streamingMessage);
915
- const segmentText = getTextFromContentBlocks(finalBlocks, seg.startIndex, seg.endIndex);
916
- if (suppressRedundantHandoff ||
917
- shouldSuppressRedundantHandoffText(host.session.messages, segmentText, orphanedSegments, renderedSegments)) {
918
- continue;
919
- }
920
- host.chatContainer.addChild(comp);
921
- markFirstVisibleAssistantOutput(host, seg.contentType, {
922
- contentIndex: seg.startIndex,
923
- source: "message_end_rebuild",
924
- });
925
- renderedSegments.push({
926
- kind: "text-run",
927
- startIndex: seg.startIndex,
928
- endIndex: seg.endIndex,
929
- contentType: seg.contentType,
930
- component: comp,
931
- cachedText: segmentText,
932
- });
933
- host.streamingComponent = comp;
934
- }
935
- reconcileChatTurnConnections(host.chatContainer.children);
936
- }
232
+ rebuildSegmentsOnMessageEnd(host, rs, timestampFormat);
937
233
  if (!host.streamingComponent && shouldRenderAssistant && !suppressRedundantHandoff) {
938
- const connectedToUser = chatTurnFollowsUser(host.chatContainer.children);
939
- host.streamingComponent = new AssistantMessageComponent(undefined, host.hideThinkingBlock, host.getMarkdownThemeWithSettings(), timestampFormat, undefined, connectedToUser);
234
+ host.streamingComponent = new AssistantMessageComponent(undefined, host.hideThinkingBlock, host.getMarkdownThemeWithSettings(), timestampFormat, undefined);
940
235
  host.chatContainer.addChild(host.streamingComponent);
941
236
  markFirstVisibleAssistantOutput(host, "message_end_only");
942
237
  reconcileChatTurnConnections(host.chatContainer.children);
@@ -967,19 +262,11 @@ export async function handleAgentEvent(host, event) {
967
262
  }
968
263
  host.streamingComponent = undefined;
969
264
  host.streamingMessage = undefined;
970
- renderedSegments = [];
971
- orphanedSegments = [];
972
- lastContentLength = 0;
265
+ rs.resetStreamingSegments();
973
266
  // Clear pinned output once the message is finalized in the chat
974
267
  // container — prevents duplicate display when the agent continues
975
268
  // (e.g. form elicitation) after the assistant message ends.
976
- if (pinnedBorder)
977
- pinnedBorder.stopSpinner();
978
- host.pinnedMessageContainer.clear();
979
- lastPinnedText = "";
980
- hasToolsInTurn = false;
981
- pinnedBorder = undefined;
982
- pinnedTextComponent = undefined;
269
+ tearDownPinnedZone(host, { realignViewport: true });
983
270
  host.footer.invalidate();
984
271
  }
985
272
  host.ui.requestRender();
@@ -987,7 +274,7 @@ export async function handleAgentEvent(host, event) {
987
274
  case "tool_execution_start": {
988
275
  const { component, created } = registerPendingToolComponent(host, event.toolCallId, event.toolName, event.args, "standalone", () => new ToolExecutionComponent(event.toolName, event.args, { showImages: host.settingsManager.getShowImages() }, host.getRegisteredToolDefinition(event.toolName), host.ui));
989
276
  if (created) {
990
- renderedSegments.push({ kind: "tool", contentIndex: Number.MAX_SAFE_INTEGER, component });
277
+ rs.renderedSegments.push({ kind: "tool", contentIndex: Number.MAX_SAFE_INTEGER, component });
991
278
  }
992
279
  host.ui.requestRender();
993
280
  break;
@@ -1004,6 +291,13 @@ export async function handleAgentEvent(host, event) {
1004
291
  const component = host.pendingTools.get(event.toolCallId);
1005
292
  if (component) {
1006
293
  component.updateResult({ ...event.result, isError: event.isError });
294
+ // NOTE: the component is intentionally left in host.pendingTools.
295
+ // The message_end rebuild path relies on finding already-completed
296
+ // components there to re-attach them; removing it here makes the
297
+ // rebuild synthesize a fresh empty component that a turn-abort would
298
+ // then mark errored. The real protection against downgrading a
299
+ // finished tool lives in ToolExecutionComponent.completeWithError,
300
+ // which no-ops on an already-successful result.
1007
301
  replaceCompactToolRowsWithPhaseSummary(host);
1008
302
  host.ui.requestRender();
1009
303
  }
@@ -1015,6 +309,7 @@ export async function handleAgentEvent(host, event) {
1015
309
  host.loadingAnimation = undefined;
1016
310
  host.statusContainer.clear();
1017
311
  }
312
+ stopActivityIndicator(host);
1018
313
  if (host.streamingComponent && host.streamingMessage) {
1019
314
  host.streamingComponent.setShowMetadata(true);
1020
315
  host.streamingComponent.updateContent(host.streamingMessage);
@@ -1025,20 +320,11 @@ export async function handleAgentEvent(host, event) {
1025
320
  replaceCompactToolRowsWithPhaseSummary(host);
1026
321
  host.streamingComponent = undefined;
1027
322
  host.streamingMessage = undefined;
1028
- renderedSegments = [];
1029
- orphanedSegments = [];
1030
- lastContentLength = 0;
323
+ rs.resetForSessionChange();
1031
324
  host.pendingTools.clear();
1032
325
  // Pinned output is only useful while work is actively streaming.
1033
326
  // Keep chat history as the single source after completion.
1034
- if (pinnedBorder) {
1035
- pinnedBorder.stopSpinner();
1036
- }
1037
- host.pinnedMessageContainer.clear();
1038
- lastPinnedText = "";
1039
- hasToolsInTurn = false;
1040
- pinnedBorder = undefined;
1041
- pinnedTextComponent = undefined;
327
+ tearDownPinnedZone(host, { realignViewport: true });
1042
328
  await host.checkShutdownRequested();
1043
329
  host.ui.requestRender();
1044
330
  break;