gsd-pi 2.33.1 → 2.34.0-dev.6769913

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 (1061) hide show
  1. package/dist/bundled-resource-path.d.ts +8 -0
  2. package/dist/bundled-resource-path.js +14 -0
  3. package/dist/cli.js +16 -0
  4. package/dist/headless-query.js +6 -6
  5. package/dist/resource-loader.d.ts +2 -0
  6. package/dist/resource-loader.js +39 -4
  7. package/dist/resources/extensions/ask-user-questions.js +217 -0
  8. package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
  9. package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
  10. package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
  11. package/dist/resources/extensions/async-jobs/index.js +119 -0
  12. package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
  13. package/dist/resources/extensions/aws-auth/index.js +138 -0
  14. package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
  15. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
  16. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
  17. package/dist/resources/extensions/bg-shell/index.js +41 -0
  18. package/dist/resources/extensions/bg-shell/interaction.js +160 -0
  19. package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
  20. package/dist/resources/extensions/bg-shell/overlay.js +378 -0
  21. package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
  22. package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
  23. package/dist/resources/extensions/bg-shell/types.js +96 -0
  24. package/dist/resources/extensions/bg-shell/utilities.js +50 -0
  25. package/dist/resources/extensions/browser-tools/capture.js +179 -0
  26. package/dist/resources/extensions/browser-tools/core.js +899 -0
  27. package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
  28. package/dist/resources/extensions/browser-tools/index.js +123 -0
  29. package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
  30. package/dist/resources/extensions/browser-tools/refs.js +254 -0
  31. package/dist/resources/extensions/browser-tools/settle.js +173 -0
  32. package/dist/resources/extensions/browser-tools/state.js +126 -0
  33. package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
  34. package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
  35. package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
  36. package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
  37. package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
  38. package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
  39. package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
  40. package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
  41. package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
  42. package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
  43. package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
  44. package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
  45. package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
  46. package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
  47. package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
  48. package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
  49. package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
  50. package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
  51. package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
  52. package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
  53. package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
  54. package/dist/resources/extensions/browser-tools/utils.js +490 -0
  55. package/dist/resources/extensions/context7/index.js +337 -0
  56. package/dist/resources/extensions/get-secrets-from-user.js +492 -0
  57. package/dist/resources/extensions/google-search/index.js +373 -0
  58. package/dist/resources/extensions/gsd/activity-log.js +146 -0
  59. package/dist/resources/extensions/gsd/atomic-write.js +38 -0
  60. package/dist/resources/extensions/gsd/auto/session.js +182 -0
  61. package/dist/resources/extensions/gsd/auto-budget.js +30 -0
  62. package/dist/resources/extensions/gsd/auto-dashboard.js +429 -0
  63. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +185 -0
  64. package/dist/resources/extensions/gsd/auto-dispatch.js +353 -0
  65. package/dist/resources/extensions/gsd/auto-loop.js +956 -0
  66. package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
  67. package/dist/resources/extensions/gsd/auto-observability.js +56 -0
  68. package/dist/resources/extensions/gsd/auto-post-unit.js +385 -0
  69. package/dist/resources/extensions/gsd/auto-prompts.js +1153 -0
  70. package/dist/resources/extensions/gsd/auto-recovery.js +512 -0
  71. package/dist/resources/extensions/gsd/auto-start.js +414 -0
  72. package/dist/resources/extensions/gsd/auto-supervisor.js +47 -0
  73. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
  74. package/dist/resources/extensions/gsd/auto-timers.js +180 -0
  75. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  76. package/dist/resources/extensions/gsd/auto-unit-closeout.js +30 -0
  77. package/dist/resources/extensions/gsd/auto-verification.js +171 -0
  78. package/dist/resources/extensions/gsd/auto-worktree-sync.js +167 -0
  79. package/dist/resources/extensions/gsd/auto-worktree.js +830 -0
  80. package/dist/resources/extensions/gsd/auto.js +765 -0
  81. package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
  82. package/dist/resources/extensions/gsd/captures.js +354 -0
  83. package/dist/resources/extensions/gsd/changelog.js +162 -0
  84. package/dist/resources/extensions/gsd/claude-import.js +540 -0
  85. package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
  86. package/dist/resources/extensions/gsd/commands-bootstrap.js +224 -0
  87. package/dist/resources/extensions/gsd/commands-config.js +89 -0
  88. package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
  89. package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
  90. package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
  91. package/dist/resources/extensions/gsd/commands-logs.js +468 -0
  92. package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
  93. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
  94. package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
  95. package/dist/resources/extensions/gsd/commands.js +1031 -0
  96. package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
  97. package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
  98. package/dist/resources/extensions/gsd/context-budget.js +187 -0
  99. package/dist/resources/extensions/gsd/context-store.js +165 -0
  100. package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
  101. package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
  102. package/dist/resources/extensions/gsd/db-writer.js +298 -0
  103. package/dist/resources/extensions/gsd/debug-logger.js +161 -0
  104. package/dist/resources/extensions/gsd/detection.js +373 -0
  105. package/dist/resources/extensions/gsd/diff-context.js +168 -0
  106. package/dist/resources/extensions/gsd/dispatch-guard.js +75 -0
  107. package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  108. package/dist/resources/extensions/gsd/doctor-checks.js +562 -0
  109. package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
  110. package/dist/resources/extensions/gsd/doctor-format.js +71 -0
  111. package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
  112. package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
  113. package/dist/resources/extensions/gsd/doctor-types.js +12 -0
  114. package/dist/resources/extensions/gsd/doctor.js +672 -0
  115. package/dist/resources/extensions/gsd/error-utils.js +6 -0
  116. package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
  117. package/dist/resources/extensions/gsd/exit-command.js +11 -0
  118. package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
  119. package/dist/resources/extensions/gsd/export.js +268 -0
  120. package/dist/resources/extensions/gsd/file-watcher.js +76 -0
  121. package/dist/resources/extensions/gsd/files.js +937 -0
  122. package/dist/resources/extensions/gsd/forensics.js +511 -0
  123. package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
  124. package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
  125. package/dist/resources/extensions/gsd/git-service.js +460 -0
  126. package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
  127. package/dist/resources/extensions/gsd/gsd-db.js +735 -0
  128. package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
  129. package/dist/resources/extensions/gsd/guided-flow.js +1158 -0
  130. package/dist/resources/extensions/gsd/health-widget.js +141 -0
  131. package/dist/resources/extensions/gsd/history.js +118 -0
  132. package/dist/resources/extensions/gsd/index.js +1114 -0
  133. package/dist/resources/extensions/gsd/init-wizard.js +479 -0
  134. package/dist/resources/extensions/gsd/json-persistence.js +62 -0
  135. package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
  136. package/dist/resources/extensions/gsd/key-manager.js +829 -0
  137. package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
  138. package/dist/resources/extensions/gsd/md-importer.js +440 -0
  139. package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
  140. package/dist/resources/extensions/gsd/memory-store.js +351 -0
  141. package/dist/resources/extensions/gsd/metrics.js +377 -0
  142. package/dist/resources/extensions/gsd/migrate/command.js +157 -0
  143. package/dist/resources/extensions/gsd/migrate/index.js +7 -0
  144. package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
  145. package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
  146. package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
  147. package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
  148. package/dist/resources/extensions/gsd/migrate/types.js +4 -0
  149. package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
  150. package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
  151. package/dist/resources/extensions/gsd/migrate-external.js +130 -0
  152. package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
  153. package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
  154. package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
  155. package/dist/resources/extensions/gsd/model-router.js +187 -0
  156. package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
  157. package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
  158. package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
  159. package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
  160. package/dist/resources/extensions/gsd/notifications.js +58 -0
  161. package/dist/resources/extensions/gsd/observability-validator.js +398 -0
  162. package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
  163. package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
  164. package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
  165. package/dist/resources/extensions/gsd/paths.js +414 -0
  166. package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
  167. package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
  168. package/dist/resources/extensions/gsd/preferences-models.js +294 -0
  169. package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
  170. package/dist/resources/extensions/gsd/preferences-types.js +73 -0
  171. package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
  172. package/dist/resources/extensions/gsd/preferences.js +325 -0
  173. package/dist/resources/extensions/gsd/progress-score.js +102 -0
  174. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
  175. package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
  176. package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
  177. package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
  178. package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
  179. package/dist/resources/extensions/gsd/queue-order.js +178 -0
  180. package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
  181. package/dist/resources/extensions/gsd/quick.js +206 -0
  182. package/dist/resources/extensions/gsd/repo-identity.js +187 -0
  183. package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
  184. package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
  185. package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
  186. package/dist/resources/extensions/gsd/routing-history.js +210 -0
  187. package/dist/resources/extensions/gsd/safe-fs.js +52 -0
  188. package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
  189. package/dist/resources/extensions/gsd/session-forensics.js +427 -0
  190. package/dist/resources/extensions/gsd/session-lock.js +397 -0
  191. package/dist/resources/extensions/gsd/session-status-io.js +134 -0
  192. package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
  193. package/dist/resources/extensions/gsd/skill-health.js +324 -0
  194. package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
  195. package/dist/resources/extensions/gsd/state.js +653 -0
  196. package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
  197. package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
  198. package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
  199. package/dist/resources/extensions/gsd/token-counter.js +54 -0
  200. package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
  201. package/dist/resources/extensions/gsd/triage-ui.js +125 -0
  202. package/dist/resources/extensions/gsd/types.js +4 -0
  203. package/dist/resources/extensions/gsd/undo.js +205 -0
  204. package/dist/resources/extensions/gsd/unit-id.js +7 -0
  205. package/dist/resources/extensions/gsd/unit-runtime.js +131 -0
  206. package/dist/resources/extensions/gsd/validate-directory.js +143 -0
  207. package/dist/resources/extensions/gsd/verification-evidence.js +122 -0
  208. package/dist/resources/extensions/gsd/verification-gate.js +514 -0
  209. package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
  210. package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
  211. package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
  212. package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
  213. package/dist/resources/extensions/gsd/workspace-index.js +139 -0
  214. package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
  215. package/dist/resources/extensions/gsd/worktree-command.js +682 -0
  216. package/dist/resources/extensions/gsd/worktree-manager.js +358 -0
  217. package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
  218. package/dist/resources/extensions/gsd/worktree.js +199 -0
  219. package/dist/resources/extensions/mac-tools/index.js +768 -0
  220. package/dist/resources/extensions/mcp-client/index.js +364 -0
  221. package/dist/resources/extensions/package.json +3 -0
  222. package/dist/resources/extensions/remote-questions/config.js +70 -0
  223. package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
  224. package/dist/resources/extensions/remote-questions/format.js +234 -0
  225. package/dist/resources/extensions/remote-questions/http-client.js +43 -0
  226. package/dist/resources/extensions/remote-questions/manager.js +156 -0
  227. package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
  228. package/dist/resources/extensions/remote-questions/notify.js +89 -0
  229. package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
  230. package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
  231. package/dist/resources/extensions/remote-questions/status.js +25 -0
  232. package/dist/resources/extensions/remote-questions/store.js +70 -0
  233. package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
  234. package/dist/resources/extensions/remote-questions/types.js +5 -0
  235. package/dist/resources/extensions/search-the-web/cache.js +74 -0
  236. package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
  237. package/dist/resources/extensions/search-the-web/format.js +161 -0
  238. package/dist/resources/extensions/search-the-web/http.js +178 -0
  239. package/dist/resources/extensions/search-the-web/index.js +41 -0
  240. package/dist/resources/extensions/search-the-web/native-search.js +166 -0
  241. package/dist/resources/extensions/search-the-web/provider.js +143 -0
  242. package/dist/resources/extensions/search-the-web/tavily.js +82 -0
  243. package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
  244. package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
  245. package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
  246. package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
  247. package/dist/resources/extensions/shared/confirm-ui.js +96 -0
  248. package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
  249. package/dist/resources/extensions/shared/frontmatter.js +109 -0
  250. package/dist/resources/extensions/shared/interview-ui.js +569 -0
  251. package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
  252. package/dist/resources/extensions/shared/next-action-ui.js +168 -0
  253. package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
  254. package/dist/resources/extensions/shared/sanitize.js +17 -0
  255. package/dist/resources/extensions/shared/terminal.js +21 -0
  256. package/dist/resources/extensions/shared/ui.js +245 -0
  257. package/dist/resources/extensions/shared/wizard-ui.js +478 -0
  258. package/dist/resources/extensions/slash-commands/audit.js +72 -0
  259. package/dist/resources/extensions/slash-commands/clear.js +8 -0
  260. package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
  261. package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
  262. package/dist/resources/extensions/slash-commands/index.js +10 -0
  263. package/dist/resources/extensions/subagent/agents.js +103 -0
  264. package/dist/resources/extensions/subagent/index.js +905 -0
  265. package/dist/resources/extensions/subagent/isolation.js +384 -0
  266. package/dist/resources/extensions/subagent/worker-registry.js +73 -0
  267. package/dist/resources/extensions/ttsr/index.js +144 -0
  268. package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
  269. package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
  270. package/dist/resources/extensions/universal-config/discovery.js +94 -0
  271. package/dist/resources/extensions/universal-config/format.js +178 -0
  272. package/dist/resources/extensions/universal-config/index.js +99 -0
  273. package/dist/resources/extensions/universal-config/scanners.js +574 -0
  274. package/dist/resources/extensions/universal-config/tools.js +57 -0
  275. package/dist/resources/extensions/universal-config/types.js +8 -0
  276. package/dist/resources/extensions/voice/index.js +247 -0
  277. package/dist/startup-timings.d.ts +2 -0
  278. package/dist/startup-timings.js +22 -0
  279. package/dist/tool-bootstrap.js +59 -11
  280. package/dist/worktree-cli.js +7 -7
  281. package/package.json +1 -1
  282. package/packages/native/dist/native.d.ts +0 -2
  283. package/packages/native/dist/native.js +0 -2
  284. package/packages/native/src/native.ts +0 -3
  285. package/packages/pi-agent-core/dist/agent-loop.d.ts +14 -0
  286. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  287. package/packages/pi-agent-core/dist/agent-loop.js +24 -27
  288. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  289. package/packages/pi-agent-core/dist/agent.d.ts +1 -0
  290. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  291. package/packages/pi-agent-core/dist/agent.js +11 -22
  292. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  293. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  294. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  295. package/packages/pi-agent-core/dist/proxy.js +1 -1
  296. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  297. package/packages/pi-agent-core/src/agent-loop.ts +30 -27
  298. package/packages/pi-agent-core/src/agent.ts +12 -23
  299. package/packages/pi-agent-core/src/proxy.ts +1 -1
  300. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  301. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  302. package/packages/pi-ai/dist/api-registry.js +0 -10
  303. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  304. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  305. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  306. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  307. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  308. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  309. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  310. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  311. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  312. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  313. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  314. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  315. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  316. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  317. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  318. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  319. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  320. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  321. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  322. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  323. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  324. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  325. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  326. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  327. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  328. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  329. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  330. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  331. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  332. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  333. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  334. package/packages/pi-ai/dist/utils/validation.js +0 -14
  335. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  336. package/packages/pi-ai/src/api-registry.ts +0 -12
  337. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  338. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  339. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  340. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  341. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  342. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  343. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  344. package/packages/pi-ai/src/utils/validation.ts +0 -15
  345. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  346. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  347. package/packages/pi-coding-agent/dist/config.js +4 -8
  348. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  349. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +4 -0
  350. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  351. package/packages/pi-coding-agent/dist/core/agent-session.js +24 -5
  352. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  353. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  354. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  355. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  356. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  357. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  358. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  359. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  360. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  361. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
  362. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  363. package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
  364. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  365. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -5
  366. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  367. package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
  368. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  369. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  370. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  371. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  372. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  373. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  374. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  375. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  376. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  377. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +0 -2
  378. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  379. package/packages/pi-coding-agent/dist/core/lsp/config.js +0 -7
  380. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  381. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  382. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  383. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  384. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  385. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  386. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  387. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +1 -1
  388. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  389. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  390. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  391. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  392. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  393. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  394. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  395. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  396. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  397. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  398. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  399. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  400. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  401. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  402. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  403. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  404. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  405. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  406. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  407. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  408. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  409. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -4
  410. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  411. package/packages/pi-coding-agent/dist/core/session-manager.js +2 -4
  412. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  413. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +8 -12
  414. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  415. package/packages/pi-coding-agent/dist/core/settings-manager.js +78 -168
  416. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  417. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  418. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  419. package/packages/pi-coding-agent/dist/index.js +1 -1
  420. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  421. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  422. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  423. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  424. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  425. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  426. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  427. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  428. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  429. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  430. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  431. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  432. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  433. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  434. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  435. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  436. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  437. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
  438. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  439. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
  440. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  441. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
  442. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  443. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
  444. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
  445. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  446. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  447. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  448. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  449. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  450. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  451. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  452. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  453. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  454. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  455. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  456. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  457. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  458. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  459. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  460. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  461. package/packages/pi-coding-agent/package.json +1 -1
  462. package/packages/pi-coding-agent/src/config.ts +5 -10
  463. package/packages/pi-coding-agent/src/core/agent-session.ts +26 -5
  464. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  465. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
  466. package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
  467. package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -13
  468. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  469. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  470. package/packages/pi-coding-agent/src/core/lsp/config.ts +0 -11
  471. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  472. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +1 -1
  473. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  474. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  475. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  476. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  477. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  478. package/packages/pi-coding-agent/src/core/session-manager.ts +2 -4
  479. package/packages/pi-coding-agent/src/core/settings-manager.ts +87 -166
  480. package/packages/pi-coding-agent/src/index.ts +1 -0
  481. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  482. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  483. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  484. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  485. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
  486. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
  487. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  488. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  489. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  490. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  491. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  492. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  493. package/packages/pi-tui/dist/components/editor.js +1 -1
  494. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  495. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  496. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  497. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  498. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  499. package/packages/pi-tui/dist/tui.d.ts +0 -22
  500. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  501. package/packages/pi-tui/dist/tui.js +6 -272
  502. package/packages/pi-tui/dist/tui.js.map +1 -1
  503. package/packages/pi-tui/dist/utils.d.ts +0 -7
  504. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  505. package/packages/pi-tui/dist/utils.js +0 -44
  506. package/packages/pi-tui/dist/utils.js.map +1 -1
  507. package/packages/pi-tui/src/components/editor.ts +1 -1
  508. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  509. package/packages/pi-tui/src/tui.ts +11 -312
  510. package/packages/pi-tui/src/utils.ts +0 -43
  511. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  512. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  513. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  514. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  515. package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
  516. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  517. package/pkg/dist/modes/interactive/theme/theme.js +6 -23
  518. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  519. package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
  520. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  521. package/pkg/dist/modes/interactive/theme/themes.js +175 -0
  522. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
  523. package/pkg/package.json +1 -1
  524. package/src/resources/extensions/bg-shell/index.ts +41 -46
  525. package/src/resources/extensions/browser-tools/index.ts +156 -67
  526. package/src/resources/extensions/gsd/auto/session.ts +47 -30
  527. package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
  528. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
  529. package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
  530. package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
  531. package/src/resources/extensions/gsd/auto-observability.ts +4 -2
  532. package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
  533. package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
  534. package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
  535. package/src/resources/extensions/gsd/auto-start.ts +440 -354
  536. package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
  537. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
  538. package/src/resources/extensions/gsd/auto-timers.ts +3 -4
  539. package/src/resources/extensions/gsd/auto-verification.ts +76 -72
  540. package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
  541. package/src/resources/extensions/gsd/auto-worktree.ts +453 -133
  542. package/src/resources/extensions/gsd/auto.ts +516 -1189
  543. package/src/resources/extensions/gsd/captures.ts +10 -4
  544. package/src/resources/extensions/gsd/changelog.ts +213 -0
  545. package/src/resources/extensions/gsd/commands-bootstrap.ts +253 -0
  546. package/src/resources/extensions/gsd/commands.ts +48 -32
  547. package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
  548. package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  549. package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
  550. package/src/resources/extensions/gsd/git-service.ts +32 -12
  551. package/src/resources/extensions/gsd/gitignore.ts +4 -2
  552. package/src/resources/extensions/gsd/gsd-db.ts +375 -180
  553. package/src/resources/extensions/gsd/guided-flow.ts +22 -11
  554. package/src/resources/extensions/gsd/index.ts +76 -163
  555. package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
  556. package/src/resources/extensions/gsd/progress-score.ts +65 -200
  557. package/src/resources/extensions/gsd/quick.ts +121 -76
  558. package/src/resources/extensions/gsd/repo-identity.ts +56 -22
  559. package/src/resources/extensions/gsd/session-lock.ts +17 -0
  560. package/src/resources/extensions/gsd/templates/preferences.md +1 -0
  561. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
  562. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
  563. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  564. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
  565. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
  566. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
  567. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
  568. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
  569. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
  570. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
  571. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
  572. package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
  573. package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
  574. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
  575. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
  576. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
  577. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
  578. package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
  579. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
  580. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
  581. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
  582. package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
  583. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
  584. package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
  585. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
  586. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -136
  587. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  588. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  589. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
  590. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
  591. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
  592. package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
  593. package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
  594. package/src/resources/extensions/gsd/types.ts +90 -77
  595. package/src/resources/extensions/gsd/undo.ts +42 -46
  596. package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
  597. package/src/resources/extensions/gsd/verification-evidence.ts +0 -2
  598. package/src/resources/extensions/gsd/verification-gate.ts +4 -16
  599. package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
  600. package/src/resources/extensions/gsd/worktree-command.ts +29 -11
  601. package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
  602. package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
  603. package/src/resources/extensions/gsd/worktree.ts +7 -44
  604. package/src/resources/extensions/mcp-client/index.ts +2 -1
  605. package/src/resources/extensions/package.json +3 -0
  606. package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
  607. package/src/resources/extensions/search-the-web/index.ts +35 -52
  608. package/src/resources/extensions/search-the-web/tavily.ts +1 -1
  609. package/dist/resources/extensions/ask-user-questions.ts +0 -290
  610. package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
  611. package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
  612. package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
  613. package/dist/resources/extensions/async-jobs/index.ts +0 -141
  614. package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
  615. package/dist/resources/extensions/aws-auth/index.ts +0 -144
  616. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
  617. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
  618. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
  619. package/dist/resources/extensions/bg-shell/index.ts +0 -59
  620. package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
  621. package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
  622. package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
  623. package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
  624. package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
  625. package/dist/resources/extensions/bg-shell/types.ts +0 -303
  626. package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
  627. package/dist/resources/extensions/browser-tools/capture.ts +0 -199
  628. package/dist/resources/extensions/browser-tools/core.ts +0 -1196
  629. package/dist/resources/extensions/browser-tools/index.ts +0 -71
  630. package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
  631. package/dist/resources/extensions/browser-tools/refs.ts +0 -264
  632. package/dist/resources/extensions/browser-tools/settle.ts +0 -197
  633. package/dist/resources/extensions/browser-tools/state.ts +0 -408
  634. package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
  635. package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
  636. package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
  637. package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
  638. package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
  639. package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
  640. package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
  641. package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
  642. package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
  643. package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
  644. package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
  645. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
  646. package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
  647. package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
  648. package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
  649. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
  650. package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
  651. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
  652. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
  653. package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
  654. package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
  655. package/dist/resources/extensions/browser-tools/utils.ts +0 -660
  656. package/dist/resources/extensions/context7/index.ts +0 -428
  657. package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
  658. package/dist/resources/extensions/google-search/index.ts +0 -466
  659. package/dist/resources/extensions/gsd/activity-log.ts +0 -162
  660. package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
  661. package/dist/resources/extensions/gsd/auto/session.ts +0 -236
  662. package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
  663. package/dist/resources/extensions/gsd/auto-constants.ts +0 -6
  664. package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
  665. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
  666. package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
  667. package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
  668. package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
  669. package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
  670. package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
  671. package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
  672. package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
  673. package/dist/resources/extensions/gsd/auto-start.ts +0 -483
  674. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  675. package/dist/resources/extensions/gsd/auto-supervisor.ts +0 -61
  676. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
  677. package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
  678. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
  679. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
  680. package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
  681. package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
  682. package/dist/resources/extensions/gsd/auto.ts +0 -1834
  683. package/dist/resources/extensions/gsd/captures.ts +0 -427
  684. package/dist/resources/extensions/gsd/claude-import.ts +0 -656
  685. package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
  686. package/dist/resources/extensions/gsd/commands-config.ts +0 -102
  687. package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
  688. package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
  689. package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
  690. package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
  691. package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
  692. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
  693. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
  694. package/dist/resources/extensions/gsd/commands.ts +0 -1149
  695. package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
  696. package/dist/resources/extensions/gsd/context-budget.ts +0 -266
  697. package/dist/resources/extensions/gsd/context-store.ts +0 -195
  698. package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
  699. package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
  700. package/dist/resources/extensions/gsd/db-writer.ts +0 -360
  701. package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
  702. package/dist/resources/extensions/gsd/detection.ts +0 -470
  703. package/dist/resources/extensions/gsd/diff-context.ts +0 -214
  704. package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
  705. package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
  706. package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
  707. package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
  708. package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
  709. package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
  710. package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
  711. package/dist/resources/extensions/gsd/doctor.ts +0 -722
  712. package/dist/resources/extensions/gsd/error-utils.ts +0 -6
  713. package/dist/resources/extensions/gsd/exit-command.ts +0 -18
  714. package/dist/resources/extensions/gsd/export.ts +0 -317
  715. package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
  716. package/dist/resources/extensions/gsd/files.ts +0 -1058
  717. package/dist/resources/extensions/gsd/forensics.ts +0 -629
  718. package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
  719. package/dist/resources/extensions/gsd/git-service.ts +0 -580
  720. package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
  721. package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
  722. package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
  723. package/dist/resources/extensions/gsd/health-widget.ts +0 -167
  724. package/dist/resources/extensions/gsd/history.ts +0 -143
  725. package/dist/resources/extensions/gsd/index.ts +0 -1390
  726. package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
  727. package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
  728. package/dist/resources/extensions/gsd/key-manager.ts +0 -996
  729. package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
  730. package/dist/resources/extensions/gsd/md-importer.ts +0 -527
  731. package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
  732. package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
  733. package/dist/resources/extensions/gsd/memory-store.ts +0 -441
  734. package/dist/resources/extensions/gsd/metrics.ts +0 -532
  735. package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
  736. package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
  737. package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
  738. package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
  739. package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
  740. package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
  741. package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
  742. package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
  743. package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
  744. package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
  745. package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
  746. package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
  747. package/dist/resources/extensions/gsd/model-router.ts +0 -256
  748. package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
  749. package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
  750. package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
  751. package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
  752. package/dist/resources/extensions/gsd/notifications.ts +0 -87
  753. package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
  754. package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
  755. package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
  756. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
  757. package/dist/resources/extensions/gsd/paths.ts +0 -449
  758. package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
  759. package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
  760. package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
  761. package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
  762. package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
  763. package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
  764. package/dist/resources/extensions/gsd/preferences.ts +0 -416
  765. package/dist/resources/extensions/gsd/progress-score.ts +0 -273
  766. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
  767. package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
  768. package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
  769. package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
  770. package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
  771. package/dist/resources/extensions/gsd/queue-order.ts +0 -230
  772. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
  773. package/dist/resources/extensions/gsd/quick.ts +0 -212
  774. package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
  775. package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
  776. package/dist/resources/extensions/gsd/routing-history.ts +0 -286
  777. package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
  778. package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
  779. package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
  780. package/dist/resources/extensions/gsd/session-lock.ts +0 -426
  781. package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
  782. package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
  783. package/dist/resources/extensions/gsd/skill-health.ts +0 -417
  784. package/dist/resources/extensions/gsd/state.ts +0 -727
  785. package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
  786. package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
  787. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
  788. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
  789. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
  790. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
  791. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
  792. package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  793. package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
  794. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
  795. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
  796. package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  797. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
  798. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
  799. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  800. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
  801. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
  802. package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
  803. package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
  804. package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
  805. package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
  806. package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
  807. package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
  808. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
  809. package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
  810. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
  811. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
  812. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  813. package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
  814. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
  815. package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
  816. package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
  817. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
  818. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
  819. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
  820. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
  821. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
  822. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
  823. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
  824. package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
  825. package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
  826. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
  827. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
  828. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
  829. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  830. package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
  831. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
  832. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
  833. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
  834. package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
  835. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
  836. package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
  837. package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
  838. package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
  839. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
  840. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
  841. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
  842. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
  843. package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
  844. package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
  845. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
  846. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
  847. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
  848. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
  849. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
  850. package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
  851. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
  852. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
  853. package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
  854. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
  855. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
  856. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
  857. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
  858. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
  859. package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  860. package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
  861. package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
  862. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
  863. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  864. package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
  865. package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
  866. package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
  867. package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
  868. package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
  869. package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
  870. package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
  871. package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
  872. package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
  873. package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
  874. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
  875. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
  876. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
  877. package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
  878. package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
  879. package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
  880. package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
  881. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
  882. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
  883. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
  884. package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
  885. package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
  886. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
  887. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
  888. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
  889. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
  890. package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
  891. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
  892. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
  893. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
  894. package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
  895. package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
  896. package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
  897. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
  898. package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
  899. package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
  900. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
  901. package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
  902. package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  903. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
  904. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
  905. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  906. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
  907. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
  908. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
  909. package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
  910. package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
  911. package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
  912. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
  913. package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
  914. package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
  915. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
  916. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
  917. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
  918. package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
  919. package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
  920. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
  921. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
  922. package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
  923. package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
  924. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  925. package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
  926. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
  927. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
  928. package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
  929. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
  930. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
  931. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
  932. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  933. package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
  934. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
  935. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  936. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
  937. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
  938. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
  939. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
  940. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
  941. package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
  942. package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
  943. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
  944. package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
  945. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
  946. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
  947. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
  948. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
  949. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
  950. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
  951. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
  952. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
  953. package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
  954. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
  955. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
  956. package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
  957. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
  958. package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
  959. package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
  960. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
  961. package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
  962. package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
  963. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
  964. package/dist/resources/extensions/gsd/token-counter.ts +0 -65
  965. package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
  966. package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
  967. package/dist/resources/extensions/gsd/types.ts +0 -425
  968. package/dist/resources/extensions/gsd/undo.ts +0 -223
  969. package/dist/resources/extensions/gsd/unit-id.ts +0 -14
  970. package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
  971. package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
  972. package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
  973. package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
  974. package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
  975. package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
  976. package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
  977. package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
  978. package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
  979. package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
  980. package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
  981. package/dist/resources/extensions/gsd/worktree.ts +0 -257
  982. package/dist/resources/extensions/mac-tools/index.ts +0 -852
  983. package/dist/resources/extensions/mcp-client/index.ts +0 -459
  984. package/dist/resources/extensions/remote-questions/config.ts +0 -83
  985. package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
  986. package/dist/resources/extensions/remote-questions/format.ts +0 -315
  987. package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
  988. package/dist/resources/extensions/remote-questions/manager.ts +0 -184
  989. package/dist/resources/extensions/remote-questions/notify.ts +0 -90
  990. package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
  991. package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
  992. package/dist/resources/extensions/remote-questions/status.ts +0 -31
  993. package/dist/resources/extensions/remote-questions/store.ts +0 -81
  994. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
  995. package/dist/resources/extensions/remote-questions/types.ts +0 -102
  996. package/dist/resources/extensions/search-the-web/cache.ts +0 -78
  997. package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
  998. package/dist/resources/extensions/search-the-web/format.ts +0 -258
  999. package/dist/resources/extensions/search-the-web/http.ts +0 -238
  1000. package/dist/resources/extensions/search-the-web/index.ts +0 -65
  1001. package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
  1002. package/dist/resources/extensions/search-the-web/provider.ts +0 -148
  1003. package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
  1004. package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
  1005. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
  1006. package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
  1007. package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
  1008. package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
  1009. package/dist/resources/extensions/shared/frontmatter.ts +0 -117
  1010. package/dist/resources/extensions/shared/interview-ui.ts +0 -613
  1011. package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
  1012. package/dist/resources/extensions/shared/sanitize.ts +0 -19
  1013. package/dist/resources/extensions/shared/terminal.ts +0 -23
  1014. package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
  1015. package/dist/resources/extensions/shared/ui.ts +0 -400
  1016. package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
  1017. package/dist/resources/extensions/slash-commands/audit.ts +0 -88
  1018. package/dist/resources/extensions/slash-commands/clear.ts +0 -10
  1019. package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
  1020. package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
  1021. package/dist/resources/extensions/slash-commands/index.ts +0 -12
  1022. package/dist/resources/extensions/subagent/agents.ts +0 -126
  1023. package/dist/resources/extensions/subagent/index.ts +0 -1121
  1024. package/dist/resources/extensions/subagent/isolation.ts +0 -501
  1025. package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
  1026. package/dist/resources/extensions/ttsr/index.ts +0 -168
  1027. package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
  1028. package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
  1029. package/dist/resources/extensions/universal-config/discovery.ts +0 -104
  1030. package/dist/resources/extensions/universal-config/format.ts +0 -191
  1031. package/dist/resources/extensions/universal-config/index.ts +0 -120
  1032. package/dist/resources/extensions/universal-config/scanners.ts +0 -642
  1033. package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
  1034. package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
  1035. package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
  1036. package/dist/resources/extensions/universal-config/tools.ts +0 -60
  1037. package/dist/resources/extensions/universal-config/types.ts +0 -135
  1038. package/dist/resources/extensions/voice/index.ts +0 -272
  1039. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
  1040. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
  1041. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  1042. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  1043. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
  1044. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
  1045. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
  1046. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
  1047. package/pkg/dist/modes/interactive/theme/dark.json +0 -85
  1048. package/pkg/dist/modes/interactive/theme/light.json +0 -84
  1049. package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
  1050. package/src/resources/extensions/gsd/auto-constants.ts +0 -6
  1051. package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
  1052. package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  1053. package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
  1054. package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  1055. package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  1056. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  1057. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  1058. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  1059. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  1060. package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  1061. package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
@@ -1,1171 +0,0 @@
1
- // View renderers for the GSD workflow visualizer overlay.
2
-
3
- import type { Theme } from "@gsd/pi-coding-agent";
4
- import { truncateToWidth, visibleWidth } from "@gsd/pi-tui";
5
- import type { VisualizerData, VisualizerMilestone, SliceVerification, VisualizerSliceActivity, VisualizerStats, VisualizerSliceRef } from "./visualizer-data.js";
6
- import { formatCost, formatTokenCount, classifyUnitPhase } from "./metrics.js";
7
- import { formatDuration, padRight, joinColumns, sparkline, STATUS_GLYPH, STATUS_COLOR } from "../shared/mod.js";
8
-
9
- function formatCompletionDate(input: string): string {
10
- if (!input) return "unknown";
11
- const parsed = new Date(input);
12
- if (Number.isNaN(parsed.getTime())) return input;
13
- return parsed.toLocaleDateString("en-US", { month: "short", day: "numeric" });
14
- }
15
-
16
- function sliceLabel(slice: VisualizerSliceRef): string {
17
- return `${slice.milestoneId}/${slice.sliceId}`;
18
- }
19
-
20
- function renderFeatureStats(data: VisualizerData, th: Theme, width: number): string[] {
21
- const stats = data.stats;
22
- const lines: string[] = [];
23
- lines.push(th.fg("accent", th.bold("Feature Snapshot")));
24
- lines.push("");
25
-
26
- const missingLabel = `Missing slices: ${th.fg("warning", String(stats.missingCount))}`;
27
- lines.push(truncateToWidth(` ${missingLabel}`, width));
28
- if (stats.missingSlices.length > 0) {
29
- for (const slice of stats.missingSlices) {
30
- const row = ` ${th.fg("dim", sliceLabel(slice))} ${slice.title}`;
31
- lines.push(truncateToWidth(row, width));
32
- }
33
- const remaining = stats.missingCount - stats.missingSlices.length;
34
- if (remaining > 0) {
35
- lines.push(truncateToWidth(` ... and ${remaining} more`, width));
36
- }
37
- }
38
-
39
- lines.push("");
40
- const updatedLabel = `Updated (last 7 days): ${th.fg("accent", String(stats.updatedCount))}`;
41
- lines.push(truncateToWidth(` ${updatedLabel}`, width));
42
- if (stats.updatedSlices.length > 0) {
43
- for (const slice of stats.updatedSlices) {
44
- const when = formatCompletionDate(slice.completedAt);
45
- const row = ` ${th.fg("text", sliceLabel(slice))} ${th.fg("dim", when)} ${slice.title}`;
46
- lines.push(truncateToWidth(row, width));
47
- }
48
- }
49
-
50
- lines.push("");
51
- lines.push(truncateToWidth(` Recent completions: ${th.fg("success", String(stats.recentEntries.length))}`, width));
52
- for (const entry of stats.recentEntries) {
53
- const when = formatCompletionDate(entry.completedAt);
54
- const row = ` ${th.fg("text", entry.sliceId)} — ${entry.oneLiner || entry.title} ${th.fg("dim", when)}`;
55
- lines.push(truncateToWidth(row, width));
56
- }
57
-
58
- lines.push("");
59
- return lines;
60
- }
61
-
62
- function renderDiscussionStatus(data: VisualizerData, th: Theme, width: number): string[] {
63
- const states = data.discussion;
64
- if (states.length === 0) return [];
65
-
66
- const counts = {
67
- discussed: 0,
68
- draft: 0,
69
- undiscussed: 0,
70
- };
71
- for (const state of states) counts[state.state]++;
72
-
73
- const lines: string[] = [];
74
- lines.push(th.fg("accent", th.bold("Discussion Status")));
75
- lines.push("");
76
- const summary = ` Discussed: ${th.fg("success", String(counts.discussed))} Draft: ${th.fg("warning", String(counts.draft))} Pending: ${th.fg("dim", String(counts.undiscussed))}`;
77
- lines.push(truncateToWidth(summary, width));
78
- lines.push("");
79
-
80
- for (const state of states) {
81
- const badge =
82
- state.state === "discussed"
83
- ? th.fg("success", "Discussed")
84
- : state.state === "draft"
85
- ? th.fg("warning", "Draft")
86
- : th.fg("dim", "Pending");
87
- const when = state.lastUpdated ? ` ${th.fg("dim", formatCompletionDate(state.lastUpdated))}` : "";
88
- const row = ` ${th.fg("text", state.milestoneId)} ${badge} ${state.title}${when}`;
89
- lines.push(truncateToWidth(row, width));
90
- }
91
-
92
- lines.push("");
93
- return lines;
94
- }
95
-
96
- function findVerification(data: VisualizerData, milestoneId: string, sliceId: string): SliceVerification | undefined {
97
- return data.sliceVerifications.find(v => v.milestoneId === milestoneId && v.sliceId === sliceId);
98
- }
99
-
100
- // ─── Progress View ───────────────────────────────────────────────────────────
101
-
102
- export interface ProgressFilter {
103
- text: string;
104
- field: "all" | "status" | "risk" | "keyword";
105
- }
106
-
107
- export function renderProgressView(
108
- data: VisualizerData,
109
- th: Theme,
110
- width: number,
111
- filter?: ProgressFilter,
112
- collapsed?: Set<string>,
113
- ): string[] {
114
- const lines: string[] = [];
115
-
116
- // Risk Heatmap
117
- lines.push(...renderRiskHeatmap(data, th, width));
118
- if (data.milestones.length > 0) lines.push("");
119
-
120
- // Filter indicator
121
- if (filter && filter.text) {
122
- lines.push(th.fg("accent", `Filter (${filter.field}): ${filter.text}`));
123
- lines.push("");
124
- }
125
-
126
- lines.push(...renderFeatureStats(data, th, width));
127
- lines.push(...renderDiscussionStatus(data, th, width));
128
-
129
- for (const ms of data.milestones) {
130
- // Apply filter to milestones
131
- if (filter && filter.text) {
132
- const matchesMs = matchesFilter(ms, filter);
133
- if (!matchesMs) continue;
134
- }
135
-
136
- // Milestone header line
137
- const msStatus = ms.status === "complete" ? "done" : ms.status === "active" ? "active" : ms.status === "parked" ? "paused" : "pending";
138
- const statusGlyph = th.fg(STATUS_COLOR[msStatus], STATUS_GLYPH[msStatus]);
139
- const statusLabel = th.fg(STATUS_COLOR[msStatus], ms.status);
140
-
141
- const collapseIndicator = collapsed?.has(ms.id) ? "[+] " : "";
142
- const msLeft = `${collapseIndicator}${ms.id}: ${ms.title}`;
143
- const msRight = `${statusGlyph} ${statusLabel}`;
144
- lines.push(joinColumns(msLeft, msRight, width));
145
-
146
- // If collapsed, skip rendering slices/tasks
147
- if (collapsed?.has(ms.id)) continue;
148
-
149
- if (ms.slices.length === 0 && ms.dependsOn.length > 0) {
150
- lines.push(th.fg("dim", ` (depends on ${ms.dependsOn.join(", ")})`));
151
- continue;
152
- }
153
-
154
- if (ms.status === "pending" && ms.dependsOn.length > 0) {
155
- lines.push(th.fg("dim", ` (depends on ${ms.dependsOn.join(", ")})`));
156
- continue;
157
- }
158
-
159
- for (const sl of ms.slices) {
160
- // Apply filter to slices
161
- if (filter && filter.text) {
162
- if (!matchesSliceFilter(sl, filter)) continue;
163
- }
164
-
165
- // Slice line
166
- const slStatus = sl.done ? "done" : sl.active ? "active" : "pending";
167
- const slGlyph = th.fg(STATUS_COLOR[slStatus], STATUS_GLYPH[slStatus]);
168
- const riskColor =
169
- sl.risk === "high"
170
- ? "warning"
171
- : sl.risk === "medium"
172
- ? "text"
173
- : "dim";
174
- const riskBadge = th.fg(riskColor, sl.risk);
175
-
176
- // Verification badge
177
- const ver = findVerification(data, ms.id, sl.id);
178
- let verBadge = "";
179
- if (ver) {
180
- if (ver.verificationResult === "passed") {
181
- verBadge = " " + th.fg("success", "\u2713");
182
- } else if (ver.verificationResult === "failed") {
183
- verBadge = " " + th.fg("error", "\u2717");
184
- } else if (ver.verificationResult === "untested" || ver.verificationResult === "") {
185
- verBadge = " " + th.fg("dim", "?");
186
- }
187
- if (ver.blockerDiscovered) {
188
- verBadge += " " + th.fg("warning", "\u26a0");
189
- }
190
- }
191
-
192
- const slLeft = ` ${slGlyph} ${sl.id}: ${sl.title}${verBadge}`;
193
- lines.push(joinColumns(slLeft, riskBadge, width));
194
-
195
- // Show tasks for active slice
196
- if (sl.active && sl.tasks.length > 0) {
197
- for (const task of sl.tasks) {
198
- const tStatus = task.done ? "done" : task.active ? "active" : "pending";
199
- const tGlyph = th.fg(STATUS_COLOR[tStatus], STATUS_GLYPH[tStatus]);
200
- const estimateStr = task.estimate ? th.fg("dim", ` (${task.estimate})`) : "";
201
- lines.push(` ${tGlyph} ${task.id}: ${task.title}${estimateStr}`);
202
- }
203
- }
204
- }
205
- }
206
-
207
- return lines;
208
- }
209
-
210
- function matchesFilter(ms: VisualizerMilestone, filter: ProgressFilter): boolean {
211
- const text = filter.text.toLowerCase();
212
- if (filter.field === "status") {
213
- return ms.status.includes(text);
214
- }
215
- if (filter.field === "risk") {
216
- return ms.slices.some(s => s.risk.toLowerCase().includes(text));
217
- }
218
- // "all" or "keyword"
219
- if (ms.id.toLowerCase().includes(text)) return true;
220
- if (ms.title.toLowerCase().includes(text)) return true;
221
- if (ms.status.includes(text)) return true;
222
- return ms.slices.some(s => matchesSliceFilter(s, filter));
223
- }
224
-
225
- function matchesSliceFilter(sl: { id: string; title: string; risk: string }, filter: ProgressFilter): boolean {
226
- const text = filter.text.toLowerCase();
227
- if (filter.field === "status") return true; // slices don't have named status
228
- if (filter.field === "risk") return sl.risk.toLowerCase().includes(text);
229
- return sl.id.toLowerCase().includes(text) ||
230
- sl.title.toLowerCase().includes(text) ||
231
- sl.risk.toLowerCase().includes(text);
232
- }
233
-
234
- // ─── Risk Heatmap ────────────────────────────────────────────────────────────
235
-
236
- function renderRiskHeatmap(data: VisualizerData, th: Theme, width: number): string[] {
237
- const allSlices = data.milestones.flatMap(m => m.slices);
238
- if (allSlices.length === 0) return [];
239
-
240
- const lines: string[] = [];
241
- lines.push(th.fg("accent", th.bold("Risk Heatmap")));
242
- lines.push("");
243
-
244
- for (const ms of data.milestones) {
245
- if (ms.slices.length === 0) continue;
246
- const blocks = ms.slices.map(s => {
247
- const color = s.risk === "high" ? "error" : s.risk === "medium" ? "warning" : "success";
248
- return th.fg(color, "\u2588\u2588");
249
- });
250
- const row = ` ${padRight(ms.id, 6)} ${blocks.join(" ")}`;
251
- lines.push(truncateToWidth(row, width));
252
- }
253
-
254
- lines.push("");
255
- lines.push(
256
- ` ${th.fg("success", "\u2588\u2588")} low ${th.fg("warning", "\u2588\u2588")} med ${th.fg("error", "\u2588\u2588")} high`,
257
- );
258
-
259
- // Summary counts
260
- let low = 0, med = 0, high = 0;
261
- let highNotStarted = 0;
262
- for (const sl of allSlices) {
263
- if (sl.risk === "high") {
264
- high++;
265
- if (!sl.done && !sl.active) highNotStarted++;
266
- } else if (sl.risk === "medium") {
267
- med++;
268
- } else {
269
- low++;
270
- }
271
- }
272
-
273
- let summary = ` Risk: ${low} low, ${med} med, ${high} high`;
274
- if (highNotStarted > 0) {
275
- summary += ` | ${th.fg("error", `${highNotStarted} high-risk not started`)}`;
276
- }
277
- lines.push(summary);
278
-
279
- return lines;
280
- }
281
-
282
- // ─── Dependencies View ───────────────────────────────────────────────────────
283
-
284
- export function renderDepsView(
285
- data: VisualizerData,
286
- th: Theme,
287
- width: number,
288
- ): string[] {
289
- const lines: string[] = [];
290
-
291
- // Milestone Dependencies
292
- lines.push(th.fg("accent", th.bold("Milestone Dependencies")));
293
- lines.push("");
294
-
295
- const msDeps = data.milestones.filter((ms) => ms.dependsOn.length > 0);
296
- if (msDeps.length === 0) {
297
- lines.push(th.fg("dim", " No milestone dependencies."));
298
- } else {
299
- for (const ms of msDeps) {
300
- for (const dep of ms.dependsOn) {
301
- lines.push(
302
- ` ${th.fg("text", dep)} ${th.fg("accent", "\u2500\u2500\u25ba")} ${th.fg("text", ms.id)}`,
303
- );
304
- }
305
- }
306
- }
307
-
308
- lines.push("");
309
-
310
- // Slice Dependencies (active milestone)
311
- lines.push(th.fg("accent", th.bold("Slice Dependencies (active milestone)")));
312
- lines.push("");
313
-
314
- const activeMs = data.milestones.find((ms) => ms.status === "active");
315
- if (!activeMs) {
316
- lines.push(th.fg("dim", " No active milestone."));
317
- } else {
318
- const slDeps = activeMs.slices.filter((sl) => sl.depends.length > 0);
319
- if (slDeps.length === 0) {
320
- lines.push(th.fg("dim", " No slice dependencies."));
321
- } else {
322
- for (const sl of slDeps) {
323
- for (const dep of sl.depends) {
324
- lines.push(
325
- ` ${th.fg("text", dep)} ${th.fg("accent", "\u2500\u2500\u25ba")} ${th.fg("text", sl.id)}`,
326
- );
327
- }
328
- }
329
- }
330
- }
331
-
332
- lines.push("");
333
-
334
- // Critical Path section
335
- lines.push(...renderCriticalPath(data, th, width));
336
-
337
- // Data Flow section from slice verifications
338
- lines.push("");
339
- lines.push(...renderDataFlow(data, th));
340
-
341
- return lines;
342
- }
343
-
344
- // ─── Data Flow ───────────────────────────────────────────────────────────────
345
-
346
- function renderDataFlow(data: VisualizerData, th: Theme): string[] {
347
- const lines: string[] = [];
348
- const versWithProvides = data.sliceVerifications.filter(v => v.provides.length > 0);
349
- const versWithRequires = data.sliceVerifications.filter(v => v.requires.length > 0);
350
-
351
- if (versWithProvides.length === 0 && versWithRequires.length === 0) return lines;
352
-
353
- lines.push(th.fg("accent", th.bold("Data Flow")));
354
- lines.push("");
355
-
356
- for (const v of versWithProvides) {
357
- for (const artifact of v.provides) {
358
- lines.push(` ${th.fg("text", v.sliceId)} ${th.fg("accent", "\u2500\u2500\u25ba")} ${th.fg("dim", `[${artifact}]`)}`);
359
- }
360
- }
361
-
362
- for (const v of versWithRequires) {
363
- for (const req of v.requires) {
364
- lines.push(` ${th.fg("dim", `[${req.provides}]`)} ${th.fg("accent", "\u25c4\u2500\u2500")} ${th.fg("text", req.slice)}`);
365
- }
366
- }
367
-
368
- return lines;
369
- }
370
-
371
- // ─── Critical Path ───────────────────────────────────────────────────────────
372
-
373
- function renderCriticalPath(data: VisualizerData, th: Theme, _width: number): string[] {
374
- const lines: string[] = [];
375
- const cp = data.criticalPath;
376
-
377
- lines.push(th.fg("accent", th.bold("Critical Path")));
378
- lines.push("");
379
-
380
- if (cp.milestonePath.length === 0) {
381
- lines.push(th.fg("dim", " No critical path data."));
382
- return lines;
383
- }
384
-
385
- // Milestone chain
386
- const chain = cp.milestonePath.map(id => {
387
- const badge = th.fg("error", "[CRITICAL]");
388
- return `${id} ${badge}`;
389
- }).join(` ${th.fg("accent", "\u2500\u2500\u25ba")} `);
390
- lines.push(` ${chain}`);
391
- lines.push("");
392
-
393
- // Non-critical milestones with slack
394
- for (const ms of data.milestones) {
395
- if (cp.milestonePath.includes(ms.id)) continue;
396
- const slack = cp.milestoneSlack.get(ms.id) ?? 0;
397
- lines.push(th.fg("dim", ` ${ms.id} (slack: ${slack})`));
398
- }
399
-
400
- // Slice-level critical path
401
- if (cp.slicePath.length > 0) {
402
- lines.push("");
403
- lines.push(th.fg("accent", th.bold("Slice Critical Path")));
404
- lines.push("");
405
-
406
- const sliceChain = cp.slicePath.join(` ${th.fg("accent", "\u2500\u2500\u25ba")} `);
407
- lines.push(` ${sliceChain}`);
408
-
409
- // Bottleneck warnings
410
- const activeMs = data.milestones.find(m => m.status === "active");
411
- if (activeMs) {
412
- for (const sid of cp.slicePath) {
413
- const sl = activeMs.slices.find(s => s.id === sid);
414
- if (sl && !sl.done && !sl.active) {
415
- lines.push(th.fg("warning", ` \u26a0 ${sid}: critical but not yet started`));
416
- }
417
- }
418
- }
419
- }
420
-
421
- return lines;
422
- }
423
-
424
- // ─── Metrics View ────────────────────────────────────────────────────────────
425
-
426
- export function renderMetricsView(
427
- data: VisualizerData,
428
- th: Theme,
429
- width: number,
430
- ): string[] {
431
- const lines: string[] = [];
432
-
433
- if (data.totals === null) {
434
- lines.push(th.fg("dim", "No metrics data available."));
435
- return lines;
436
- }
437
-
438
- const totals = data.totals;
439
-
440
- // Summary line
441
- lines.push(
442
- th.fg("accent", th.bold("Summary")),
443
- );
444
- lines.push(
445
- ` Cost: ${th.fg("text", formatCost(totals.cost))} ` +
446
- `Tokens: ${th.fg("text", formatTokenCount(totals.tokens.total))} ` +
447
- `Units: ${th.fg("text", String(totals.units))}`,
448
- );
449
- lines.push(
450
- ` Tools: ${th.fg("text", String(totals.toolCalls))} ` +
451
- `Messages: ${th.fg("text", String(totals.assistantMessages))} sent / ${th.fg("text", String(totals.userMessages))} received`,
452
- );
453
- lines.push("");
454
-
455
- const barWidth = Math.max(10, width - 40);
456
-
457
- // By Phase
458
- if (data.byPhase.length > 0) {
459
- lines.push(th.fg("accent", th.bold("By Phase")));
460
- lines.push("");
461
-
462
- const maxPhaseCost = Math.max(...data.byPhase.map((p) => p.cost));
463
-
464
- for (const phase of data.byPhase) {
465
- const pct = totals.cost > 0 ? (phase.cost / totals.cost) * 100 : 0;
466
- const fillLen =
467
- maxPhaseCost > 0
468
- ? Math.round((phase.cost / maxPhaseCost) * barWidth)
469
- : 0;
470
- const bar =
471
- th.fg("accent", "\u2588".repeat(fillLen)) +
472
- th.fg("dim", "\u2591".repeat(barWidth - fillLen));
473
- const label = padRight(phase.phase, 14);
474
- const costStr = formatCost(phase.cost);
475
- const pctStr = `${pct.toFixed(1)}%`;
476
- const tokenStr = formatTokenCount(phase.tokens.total);
477
- lines.push(` ${label} ${bar} ${costStr} ${pctStr} ${tokenStr}`);
478
- }
479
-
480
- lines.push("");
481
- }
482
-
483
- // By Model
484
- if (data.byModel.length > 0) {
485
- lines.push(th.fg("accent", th.bold("By Model")));
486
- lines.push("");
487
-
488
- const maxModelCost = Math.max(...data.byModel.map((m) => m.cost));
489
-
490
- for (const model of data.byModel) {
491
- const pct = totals.cost > 0 ? (model.cost / totals.cost) * 100 : 0;
492
- const fillLen =
493
- maxModelCost > 0
494
- ? Math.round((model.cost / maxModelCost) * barWidth)
495
- : 0;
496
- const bar =
497
- th.fg("accent", "\u2588".repeat(fillLen)) +
498
- th.fg("dim", "\u2591".repeat(barWidth - fillLen));
499
- const label = padRight(model.model, 20);
500
- const costStr = formatCost(model.cost);
501
- const pctStr = `${pct.toFixed(1)}%`;
502
- lines.push(` ${label} ${bar} ${costStr} ${pctStr}`);
503
- }
504
-
505
- lines.push("");
506
- }
507
-
508
- // By Tier
509
- if (data.byTier.length > 0) {
510
- lines.push(th.fg("accent", th.bold("By Tier")));
511
- lines.push("");
512
-
513
- const maxTierCost = Math.max(...data.byTier.map((t) => t.cost));
514
-
515
- for (const tier of data.byTier) {
516
- const pct = totals.cost > 0 ? (tier.cost / totals.cost) * 100 : 0;
517
- const fillLen =
518
- maxTierCost > 0
519
- ? Math.round((tier.cost / maxTierCost) * barWidth)
520
- : 0;
521
- const bar =
522
- th.fg("accent", "\u2588".repeat(fillLen)) +
523
- th.fg("dim", "\u2591".repeat(barWidth - fillLen));
524
- const label = padRight(tier.tier, 12);
525
- const costStr = formatCost(tier.cost);
526
- const pctStr = `${pct.toFixed(1)}%`;
527
- const unitsStr = `${tier.units} units`;
528
- lines.push(` ${label} ${bar} ${costStr} ${pctStr} ${unitsStr}`);
529
- }
530
-
531
- if (data.tierSavingsLine) {
532
- lines.push(` ${th.fg("success", data.tierSavingsLine)}`);
533
- }
534
-
535
- lines.push("");
536
- }
537
-
538
- // Cost Projections
539
- lines.push(...renderCostProjections(data, th, width));
540
-
541
- return lines;
542
- }
543
-
544
- // ─── Cost Projections ────────────────────────────────────────────────────────
545
-
546
- function renderCostProjections(data: VisualizerData, th: Theme, _width: number): string[] {
547
- const lines: string[] = [];
548
-
549
- if (!data.totals || data.bySlice.length === 0) return lines;
550
-
551
- lines.push(th.fg("accent", th.bold("Projections")));
552
- lines.push("");
553
-
554
- // Average cost per slice
555
- const sliceLevelEntries = data.bySlice.filter(s => s.sliceId.includes("/"));
556
- if (sliceLevelEntries.length < 2) {
557
- lines.push(th.fg("dim", " Insufficient data for projections (need 2+ completed slices)."));
558
- return lines;
559
- }
560
-
561
- const totalSliceCost = sliceLevelEntries.reduce((sum, s) => sum + s.cost, 0);
562
- const avgCostPerSlice = totalSliceCost / sliceLevelEntries.length;
563
- const projectedRemaining = avgCostPerSlice * data.remainingSliceCount;
564
-
565
- lines.push(` Avg cost/slice: ${th.fg("text", formatCost(avgCostPerSlice))}`);
566
- lines.push(
567
- ` Projected remaining: ${th.fg("text", formatCost(projectedRemaining))} ` +
568
- `(${formatCost(avgCostPerSlice)}/slice \u00d7 ${data.remainingSliceCount} remaining)`,
569
- );
570
-
571
- // Burn rate
572
- if (data.totals.duration > 0) {
573
- const costPerHour = data.totals.cost / (data.totals.duration / 3_600_000);
574
- lines.push(` Burn rate: ${th.fg("text", formatCost(costPerHour) + "/hr")}`);
575
- }
576
-
577
- // Sparkline of per-slice costs
578
- const sliceCosts = sliceLevelEntries.map(s => s.cost);
579
- if (sliceCosts.length > 0) {
580
- const spark = sparkline(sliceCosts);
581
- lines.push(` Cost trend: ${spark}`);
582
- }
583
-
584
- // Budget warning: projected total > 2x current spend
585
- const projectedTotal = data.totals.cost + projectedRemaining;
586
- if (projectedTotal > 2 * data.totals.cost && data.remainingSliceCount > 0) {
587
- lines.push(th.fg("warning", ` \u26a0 Projected total ${formatCost(projectedTotal)} exceeds 2\u00d7 current spend`));
588
- }
589
-
590
- return lines;
591
- }
592
-
593
- // ─── Timeline View (Gantt) ──────────────────────────────────────────────────
594
-
595
- export function renderTimelineView(
596
- data: VisualizerData,
597
- th: Theme,
598
- width: number,
599
- ): string[] {
600
- const lines: string[] = [];
601
-
602
- if (data.units.length === 0) {
603
- lines.push(th.fg("dim", "No execution history."));
604
- return lines;
605
- }
606
-
607
- // Gantt mode for wide terminals, list mode for narrow
608
- if (width >= 90) {
609
- return renderGanttView(data, th, width);
610
- }
611
-
612
- return renderTimelineList(data, th, width);
613
- }
614
-
615
- function shortenModel(model: string): string {
616
- return model.replace(/^claude-/, "").slice(0, 12);
617
- }
618
-
619
- function renderTimelineList(data: VisualizerData, th: Theme, width: number): string[] {
620
- const lines: string[] = [];
621
-
622
- // Show up to 20 most recent (units are sorted by startedAt asc, show most recent)
623
- const recent = data.units.slice(-20).reverse();
624
-
625
- const maxDuration = Math.max(
626
- ...recent.map((u) => u.finishedAt - u.startedAt),
627
- );
628
- const timeBarWidth = Math.max(4, Math.min(12, width - 60));
629
-
630
- for (const unit of recent) {
631
- const dt = new Date(unit.startedAt);
632
- const hh = String(dt.getHours()).padStart(2, "0");
633
- const mm = String(dt.getMinutes()).padStart(2, "0");
634
- const time = `${hh}:${mm}`;
635
-
636
- const duration = unit.finishedAt - unit.startedAt;
637
- const unitStatus = unit.finishedAt > 0 ? "done" : "active";
638
- const glyph = th.fg(STATUS_COLOR[unitStatus], STATUS_GLYPH[unitStatus]);
639
-
640
- const typeLabel = padRight(unit.type, 16);
641
- const idLabel = padRight(unit.id, 14);
642
-
643
- const fillLen =
644
- maxDuration > 0
645
- ? Math.round((duration / maxDuration) * timeBarWidth)
646
- : 0;
647
- const bar =
648
- th.fg("accent", "\u2588".repeat(fillLen)) +
649
- th.fg("dim", "\u2591".repeat(timeBarWidth - fillLen));
650
-
651
- const durStr = formatDuration(duration);
652
- const costStr = formatCost(unit.cost);
653
-
654
- // Tier and model info
655
- const tierLabel = unit.tier ? th.fg("dim", `[${unit.tier}]`) : "";
656
- const modelLabel = th.fg("dim", shortenModel(unit.model));
657
- const tierModelPart = [tierLabel, modelLabel].filter(Boolean).join(" ");
658
-
659
- const line = ` ${time} ${glyph} ${typeLabel} ${tierModelPart} ${idLabel} ${bar} ${durStr} ${costStr}`;
660
- lines.push(truncateToWidth(line, width));
661
- }
662
-
663
- return lines;
664
- }
665
-
666
- function renderGanttView(data: VisualizerData, th: Theme, width: number): string[] {
667
- const lines: string[] = [];
668
- const recent = data.units.slice(-20);
669
- if (recent.length === 0) return lines;
670
-
671
- const finishedUnits = recent.filter(u => u.finishedAt > 0);
672
- if (finishedUnits.length === 0) return renderTimelineList(data, th, width);
673
-
674
- const minStart = Math.min(...recent.map(u => u.startedAt));
675
- const maxEnd = Math.max(...recent.map(u => u.finishedAt > 0 ? u.finishedAt : Date.now()));
676
- const totalSpan = maxEnd - minStart;
677
- if (totalSpan <= 0) return renderTimelineList(data, th, width);
678
-
679
- const gutterWidth = 20;
680
- const barArea = Math.max(10, width - gutterWidth - 25);
681
-
682
- // Time axis labels
683
- const startLabel = formatTimeLabel(minStart);
684
- const endLabel = formatTimeLabel(maxEnd);
685
- lines.push(
686
- `${" ".repeat(gutterWidth)} ${th.fg("dim", startLabel)}` +
687
- `${" ".repeat(Math.max(1, barArea - startLabel.length - endLabel.length))}` +
688
- `${th.fg("dim", endLabel)}`,
689
- );
690
-
691
- // Phase tracking for separators
692
- let lastPhase = "";
693
-
694
- for (const unit of recent) {
695
- const phase = classifyUnitPhase(unit.type);
696
- if (phase !== lastPhase && lastPhase !== "") {
697
- lines.push(th.fg("dim", " " + "\u2500".repeat(width - 4)));
698
- }
699
- lastPhase = phase;
700
-
701
- const end = unit.finishedAt > 0 ? unit.finishedAt : Date.now();
702
- const startPos = Math.round(((unit.startedAt - minStart) / totalSpan) * barArea);
703
- const endPos = Math.round(((end - minStart) / totalSpan) * barArea);
704
- const barLen = Math.max(1, endPos - startPos);
705
-
706
- const phaseColor =
707
- phase === "research" ? "dim" :
708
- phase === "planning" ? "accent" :
709
- phase === "execution" ? "success" :
710
- "warning";
711
-
712
- const barStr =
713
- " ".repeat(startPos) +
714
- th.fg(phaseColor, "\u2588".repeat(barLen)) +
715
- " ".repeat(Math.max(0, barArea - startPos - barLen));
716
-
717
- const tierTag = unit.tier ? `[${unit.tier[0]}]` : "";
718
- const gutter = padRight(
719
- truncateToWidth(`${unit.type.slice(0, 8)} ${unit.id}${tierTag}`, gutterWidth - 1),
720
- gutterWidth,
721
- );
722
-
723
- const duration = end - unit.startedAt;
724
- const durStr = formatDuration(duration);
725
- const costStr = formatCost(unit.cost);
726
-
727
- lines.push(truncateToWidth(`${gutter}${barStr} ${durStr} ${costStr}`, width));
728
- }
729
-
730
- return lines;
731
- }
732
-
733
- function formatTimeLabel(ts: number): string {
734
- const dt = new Date(ts);
735
- return `${String(dt.getHours()).padStart(2, "0")}:${String(dt.getMinutes()).padStart(2, "0")}`;
736
- }
737
-
738
- // ─── Agent View ──────────────────────────────────────────────────────────────
739
-
740
- export function renderAgentView(
741
- data: VisualizerData,
742
- th: Theme,
743
- width: number,
744
- ): string[] {
745
- const lines: string[] = [];
746
- const activity = data.agentActivity;
747
-
748
- if (!activity) {
749
- lines.push(th.fg("dim", "No agent activity data."));
750
- return lines;
751
- }
752
-
753
- // Status line
754
- const agentStatus = activity.active ? "active" : "pending";
755
- const statusDot = th.fg(STATUS_COLOR[agentStatus], STATUS_GLYPH[agentStatus]);
756
- const statusText = activity.active ? "ACTIVE" : "IDLE";
757
- const elapsedStr = activity.active ? formatDuration(activity.elapsed) : "\u2014";
758
-
759
- lines.push(
760
- joinColumns(
761
- `Status: ${statusDot} ${statusText}`,
762
- `Elapsed: ${elapsedStr}`,
763
- width,
764
- ),
765
- );
766
-
767
- if (activity.currentUnit) {
768
- lines.push(`Current: ${th.fg("accent", `${activity.currentUnit.type} ${activity.currentUnit.id}`)}`);
769
- } else {
770
- lines.push(th.fg("dim", "Not in auto mode"));
771
- }
772
-
773
- lines.push("");
774
-
775
- // Progress bar
776
- const completed = activity.completedUnits;
777
- const total = Math.max(completed, activity.totalSlices);
778
- if (total > 0) {
779
- const pct = Math.min(1, completed / total);
780
- const barW = Math.max(10, Math.min(30, width - 30));
781
- const fillLen = Math.round(pct * barW);
782
- const bar =
783
- th.fg("accent", "\u2588".repeat(fillLen)) +
784
- th.fg("dim", "\u2591".repeat(barW - fillLen));
785
- lines.push(`Progress ${bar} ${completed}/${total} slices`);
786
- }
787
-
788
- // Rate and session stats
789
- const rateStr = activity.completionRate > 0
790
- ? `${activity.completionRate.toFixed(1)} units/hr`
791
- : "\u2014";
792
- lines.push(
793
- `Rate: ${th.fg("text", rateStr)} ` +
794
- `Session: ${th.fg("text", formatCost(activity.sessionCost))} ` +
795
- `${th.fg("text", formatTokenCount(activity.sessionTokens))} tokens`,
796
- );
797
-
798
- lines.push("");
799
-
800
- // Budget pressure
801
- const health = data.health;
802
- const truncColor = health.truncationRate < 10 ? "success" : health.truncationRate < 30 ? "warning" : "error";
803
- const contColor = health.continueHereRate < 10 ? "success" : health.continueHereRate < 30 ? "warning" : "error";
804
- lines.push(th.fg("accent", th.bold("Pressure")));
805
- lines.push(` Truncation rate: ${th.fg(truncColor, `${health.truncationRate.toFixed(1)}%`)}`);
806
- lines.push(` Continue-here rate: ${th.fg(contColor, `${health.continueHereRate.toFixed(1)}%`)}`);
807
-
808
- // Pending captures
809
- if (data.captures.pendingCount > 0) {
810
- lines.push(` Pending captures: ${th.fg("warning", String(data.captures.pendingCount))}`);
811
- }
812
-
813
- lines.push("");
814
-
815
- // Recent completed units (last 5)
816
- const recentUnits = data.units.filter(u => u.finishedAt > 0).slice(-5).reverse();
817
- if (recentUnits.length > 0) {
818
- lines.push(th.fg("accent", th.bold("Recent (last 5):")));
819
- for (const u of recentUnits) {
820
- const dt = new Date(u.startedAt);
821
- const hh = String(dt.getHours()).padStart(2, "0");
822
- const mm = String(dt.getMinutes()).padStart(2, "0");
823
- const dur = formatDuration(u.finishedAt - u.startedAt);
824
- const cost = formatCost(u.cost);
825
- const typeLabel = padRight(u.type, 16);
826
- lines.push(
827
- truncateToWidth(
828
- ` ${hh}:${mm} ${th.fg(STATUS_COLOR.done, STATUS_GLYPH.done)} ${typeLabel} ${padRight(u.id, 16)} ${dur} ${cost}`,
829
- width,
830
- ),
831
- );
832
- }
833
- } else {
834
- lines.push(th.fg("dim", "No completed units yet."));
835
- }
836
-
837
- return lines;
838
- }
839
-
840
- // ─── Changelog View ──────────────────────────────────────────────────────────
841
-
842
- export function renderChangelogView(
843
- data: VisualizerData,
844
- th: Theme,
845
- width: number,
846
- ): string[] {
847
- const lines: string[] = [];
848
- const changelog = data.changelog;
849
-
850
- if (changelog.entries.length === 0) {
851
- lines.push(th.fg("dim", "No completed slices yet."));
852
- return lines;
853
- }
854
-
855
- lines.push(th.fg("accent", th.bold("Changes")));
856
- lines.push("");
857
-
858
- for (const entry of changelog.entries) {
859
- const header = `${entry.milestoneId}/${entry.sliceId}: ${entry.title}`;
860
- lines.push(th.fg("success", header));
861
-
862
- if (entry.oneLiner) {
863
- lines.push(` "${th.fg("text", entry.oneLiner)}"`);
864
- }
865
-
866
- if (entry.filesModified.length > 0) {
867
- lines.push(" Files:");
868
- for (const f of entry.filesModified) {
869
- lines.push(
870
- truncateToWidth(
871
- ` ${th.fg(STATUS_COLOR.done, STATUS_GLYPH.done)} ${f.path} \u2014 ${f.description}`,
872
- width,
873
- ),
874
- );
875
- }
876
- }
877
-
878
- // Decisions and patterns from slice verification
879
- const ver = findVerification(data, entry.milestoneId, entry.sliceId);
880
- if (ver) {
881
- if (ver.keyDecisions.length > 0) {
882
- lines.push(" Decisions:");
883
- for (const d of ver.keyDecisions) {
884
- lines.push(` - ${d}`);
885
- }
886
- }
887
- if (ver.patternsEstablished.length > 0) {
888
- lines.push(" Patterns:");
889
- for (const p of ver.patternsEstablished) {
890
- lines.push(` - ${p}`);
891
- }
892
- }
893
- }
894
-
895
- if (entry.completedAt) {
896
- lines.push(th.fg("dim", ` Completed: ${entry.completedAt}`));
897
- }
898
-
899
- lines.push("");
900
- }
901
-
902
- return lines;
903
- }
904
-
905
- // ─── Export View ─────────────────────────────────────────────────────────────
906
-
907
- export function renderExportView(
908
- _data: VisualizerData,
909
- th: Theme,
910
- _width: number,
911
- lastExportPath?: string,
912
- ): string[] {
913
- const lines: string[] = [];
914
-
915
- lines.push(th.fg("accent", th.bold("Export Options")));
916
- lines.push("");
917
- lines.push(` ${th.fg("accent", "[m]")} Markdown report \u2014 full project summary with tables`);
918
- lines.push(` ${th.fg("accent", "[j]")} JSON report \u2014 machine-readable project data`);
919
- lines.push(` ${th.fg("accent", "[s]")} Snapshot \u2014 current view as plain text`);
920
-
921
- if (lastExportPath) {
922
- lines.push("");
923
- lines.push(th.fg("dim", `Last export: ${lastExportPath}`));
924
- }
925
-
926
- return lines;
927
- }
928
-
929
- // ─── Knowledge View ──────────────────────────────────────────────────────────
930
-
931
- export function renderKnowledgeView(
932
- data: VisualizerData,
933
- th: Theme,
934
- width: number,
935
- ): string[] {
936
- const lines: string[] = [];
937
- const knowledge = data.knowledge;
938
-
939
- if (!knowledge.exists) {
940
- lines.push(th.fg("dim", "No KNOWLEDGE.md found"));
941
- return lines;
942
- }
943
-
944
- if (knowledge.rules.length === 0 && knowledge.patterns.length === 0 && knowledge.lessons.length === 0) {
945
- lines.push(th.fg("dim", "KNOWLEDGE.md exists but is empty"));
946
- return lines;
947
- }
948
-
949
- // Rules section
950
- if (knowledge.rules.length > 0) {
951
- lines.push(th.fg("accent", th.bold("Rules")));
952
- lines.push("");
953
- for (const rule of knowledge.rules) {
954
- lines.push(truncateToWidth(
955
- ` ${th.fg("accent", rule.id)} ${th.fg("dim", `[${rule.scope}]`)} ${rule.content}`,
956
- width,
957
- ));
958
- }
959
- lines.push("");
960
- }
961
-
962
- // Patterns section
963
- if (knowledge.patterns.length > 0) {
964
- lines.push(th.fg("accent", th.bold("Patterns")));
965
- lines.push("");
966
- for (const pattern of knowledge.patterns) {
967
- lines.push(truncateToWidth(
968
- ` ${th.fg("accent", pattern.id)} ${pattern.content}`,
969
- width,
970
- ));
971
- }
972
- lines.push("");
973
- }
974
-
975
- // Lessons section
976
- if (knowledge.lessons.length > 0) {
977
- lines.push(th.fg("accent", th.bold("Lessons Learned")));
978
- lines.push("");
979
- for (const lesson of knowledge.lessons) {
980
- lines.push(truncateToWidth(
981
- ` ${th.fg("accent", lesson.id)} ${lesson.content}`,
982
- width,
983
- ));
984
- }
985
- lines.push("");
986
- }
987
-
988
- return lines;
989
- }
990
-
991
- // ─── Captures View ───────────────────────────────────────────────────────────
992
-
993
- export function renderCapturesView(
994
- data: VisualizerData,
995
- th: Theme,
996
- width: number,
997
- ): string[] {
998
- const lines: string[] = [];
999
- const captures = data.captures;
1000
-
1001
- // Summary line
1002
- const resolved = captures.entries.filter(e => e.status === "resolved").length;
1003
- lines.push(
1004
- `${th.fg("text", String(captures.totalCount))} total \u00b7 ` +
1005
- `${th.fg("warning", String(captures.pendingCount))} pending \u00b7 ` +
1006
- `${th.fg("dim", String(resolved))} resolved`,
1007
- );
1008
- lines.push("");
1009
-
1010
- if (captures.entries.length === 0) {
1011
- lines.push(th.fg("dim", "No captures recorded."));
1012
- return lines;
1013
- }
1014
-
1015
- // Group by status: pending first, then triaged, then resolved
1016
- const statusOrder: Record<string, number> = { pending: 0, triaged: 1, resolved: 2 };
1017
- const sorted = [...captures.entries].sort((a, b) =>
1018
- (statusOrder[a.status] ?? 3) - (statusOrder[b.status] ?? 3),
1019
- );
1020
-
1021
- for (const entry of sorted) {
1022
- const statusColor =
1023
- entry.status === "pending" ? "warning" :
1024
- entry.status === "triaged" ? "accent" :
1025
- "dim";
1026
-
1027
- const classColor =
1028
- entry.classification === "inject" ? "warning" :
1029
- entry.classification === "quick-task" ? "accent" :
1030
- entry.classification === "replan" ? "error" :
1031
- entry.classification === "defer" ? "text" :
1032
- "dim";
1033
-
1034
- const classBadge = entry.classification
1035
- ? th.fg(classColor, `(${entry.classification})`)
1036
- : "";
1037
-
1038
- const statusBadge = th.fg(statusColor, `[${entry.status}]`);
1039
- const textPreview = truncateToWidth(entry.text, Math.max(20, width - 50));
1040
-
1041
- lines.push(` ${th.fg("accent", entry.id)} ${statusBadge} ${textPreview} ${classBadge}`);
1042
- if (entry.timestamp) {
1043
- lines.push(` ${th.fg("dim", entry.timestamp)}`);
1044
- }
1045
- }
1046
-
1047
- return lines;
1048
- }
1049
-
1050
- // ─── Health View ─────────────────────────────────────────────────────────────
1051
-
1052
- export function renderHealthView(
1053
- data: VisualizerData,
1054
- th: Theme,
1055
- width: number,
1056
- ): string[] {
1057
- const lines: string[] = [];
1058
- const health = data.health;
1059
-
1060
- // Budget section
1061
- lines.push(th.fg("accent", th.bold("Budget")));
1062
- lines.push("");
1063
- if (health.budgetCeiling !== undefined) {
1064
- const currentSpend = data.totals?.cost ?? 0;
1065
- const pct = health.budgetCeiling > 0 ? Math.min(1, currentSpend / health.budgetCeiling) : 0;
1066
- const barW = Math.max(10, Math.min(30, width - 40));
1067
- const fillLen = Math.round(pct * barW);
1068
- const budgetColor = pct < 0.7 ? "success" : pct < 0.9 ? "warning" : "error";
1069
- const bar =
1070
- th.fg(budgetColor, "\u2588".repeat(fillLen)) +
1071
- th.fg("dim", "\u2591".repeat(barW - fillLen));
1072
- lines.push(` Ceiling: ${th.fg("text", formatCost(health.budgetCeiling))}`);
1073
- lines.push(` Spend: ${bar} ${formatCost(currentSpend)} (${(pct * 100).toFixed(1)}%)`);
1074
- } else {
1075
- lines.push(th.fg("dim", " No budget ceiling set"));
1076
- }
1077
- lines.push(` Token profile: ${th.fg("text", health.tokenProfile)}`);
1078
- lines.push("");
1079
-
1080
- // Pressure section
1081
- lines.push(th.fg("accent", th.bold("Pressure")));
1082
- lines.push("");
1083
- const truncColor = health.truncationRate < 10 ? "success" : health.truncationRate < 30 ? "warning" : "error";
1084
- const contColor = health.continueHereRate < 10 ? "success" : health.continueHereRate < 30 ? "warning" : "error";
1085
- const pressBarW = Math.max(10, Math.min(20, width - 50));
1086
-
1087
- const truncFill = Math.round((Math.min(health.truncationRate, 100) / 100) * pressBarW);
1088
- const truncBar = th.fg(truncColor, "\u2588".repeat(truncFill)) + th.fg("dim", "\u2591".repeat(pressBarW - truncFill));
1089
- lines.push(` Truncation: ${truncBar} ${health.truncationRate.toFixed(1)}%`);
1090
-
1091
- const contFill = Math.round((Math.min(health.continueHereRate, 100) / 100) * pressBarW);
1092
- const contBar = th.fg(contColor, "\u2588".repeat(contFill)) + th.fg("dim", "\u2591".repeat(pressBarW - contFill));
1093
- lines.push(` Continue-here: ${contBar} ${health.continueHereRate.toFixed(1)}%`);
1094
- lines.push("");
1095
-
1096
- // Routing section
1097
- if (health.tierBreakdown.length > 0) {
1098
- lines.push(th.fg("accent", th.bold("Routing")));
1099
- lines.push("");
1100
- for (const tier of health.tierBreakdown) {
1101
- const downTag = tier.downgraded > 0 ? th.fg("warning", ` (${tier.downgraded} downgraded)`) : "";
1102
- lines.push(` ${padRight(tier.tier, 12)} ${tier.units} units ${formatCost(tier.cost)}${downTag}`);
1103
- }
1104
- if (health.tierSavingsLine) {
1105
- lines.push(` ${th.fg("success", health.tierSavingsLine)}`);
1106
- }
1107
- lines.push("");
1108
- }
1109
-
1110
- // Session section
1111
- lines.push(th.fg("accent", th.bold("Session")));
1112
- lines.push("");
1113
- lines.push(` Tool calls: ${th.fg("text", String(health.toolCalls))}`);
1114
- lines.push(` Messages: ${th.fg("text", String(health.assistantMessages))} sent / ${th.fg("text", String(health.userMessages))} received`);
1115
-
1116
- // Environment section — issues only (from doctor-environment.ts, #1221)
1117
- if (health.environmentIssues?.length > 0) {
1118
- lines.push("");
1119
- lines.push(th.fg("accent", th.bold("Environment")));
1120
- lines.push("");
1121
- for (const r of health.environmentIssues) {
1122
- const icon = r.status === "error" ? th.fg("error", "✗") : th.fg("warning", "⚠");
1123
- lines.push(` ${icon} ${th.fg("text", r.message)}`);
1124
- if (r.detail) lines.push(` ${th.fg("dim", r.detail)}`);
1125
- }
1126
- }
1127
-
1128
- // Providers section
1129
- if (health.providers?.length > 0) {
1130
- lines.push("");
1131
- lines.push(th.fg("accent", th.bold("Providers")));
1132
- lines.push("");
1133
- const categoryOrder = ["llm", "remote", "search", "tool"];
1134
- const categoryLabels: Record<string, string> = { llm: "LLM", remote: "Notifications", search: "Search", tool: "Tools" };
1135
- const grouped = new Map<string, typeof health.providers>();
1136
- for (const p of health.providers) {
1137
- const cat = p.category;
1138
- if (!grouped.has(cat)) grouped.set(cat, []);
1139
- grouped.get(cat)!.push(p);
1140
- }
1141
- for (const cat of categoryOrder) {
1142
- const items = grouped.get(cat);
1143
- if (!items || items.length === 0) continue;
1144
- lines.push(` ${th.fg("dim", categoryLabels[cat] ?? cat)}`);
1145
- for (const p of items) {
1146
- const icon = p.ok ? th.fg("success", "✓") : th.fg("error", "✗");
1147
- const msg = p.ok ? th.fg("dim", p.message) : th.fg("text", p.message);
1148
- lines.push(` ${icon} ${msg}`);
1149
- }
1150
- }
1151
- }
1152
-
1153
- // Skills section
1154
- if (health.skillSummary?.total > 0) {
1155
- lines.push("");
1156
- lines.push(th.fg("accent", th.bold("Skills")));
1157
- lines.push("");
1158
- const { total, warningCount, criticalCount, topIssue } = health.skillSummary;
1159
- const issueColor = criticalCount > 0 ? "error" : warningCount > 0 ? "warning" : "success";
1160
- const issueTag = criticalCount > 0
1161
- ? `${criticalCount} critical`
1162
- : warningCount > 0
1163
- ? `${warningCount} warning${warningCount > 1 ? "s" : ""}`
1164
- : "all healthy";
1165
- lines.push(` ${th.fg("text", String(total))} skills tracked · ${th.fg(issueColor, issueTag)}`);
1166
- if (topIssue) lines.push(` ${th.fg("warning", "⚠")} ${th.fg("dim", topIssue)}`);
1167
- lines.push(` ${th.fg("dim", "→ /gsd skill-health for full report")}`);
1168
- }
1169
-
1170
- return lines;
1171
- }