gsd-pi 2.33.1-dev.29a8268 → 2.33.1-dev.b1c6556

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 (761) hide show
  1. package/dist/cli.js +16 -0
  2. package/dist/resource-loader.d.ts +2 -0
  3. package/dist/resource-loader.js +39 -4
  4. package/dist/resources/extensions/ask-user-questions.js +217 -0
  5. package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
  6. package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
  7. package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
  8. package/dist/resources/extensions/async-jobs/index.js +119 -0
  9. package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
  10. package/dist/resources/extensions/aws-auth/index.js +138 -0
  11. package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
  12. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
  13. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
  14. package/dist/resources/extensions/bg-shell/index.js +41 -0
  15. package/dist/resources/extensions/bg-shell/interaction.js +160 -0
  16. package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
  17. package/dist/resources/extensions/bg-shell/overlay.js +378 -0
  18. package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
  19. package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
  20. package/dist/resources/extensions/bg-shell/types.js +96 -0
  21. package/dist/resources/extensions/bg-shell/utilities.js +50 -0
  22. package/dist/resources/extensions/browser-tools/capture.js +179 -0
  23. package/dist/resources/extensions/browser-tools/core.js +899 -0
  24. package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
  25. package/dist/resources/extensions/browser-tools/index.js +123 -0
  26. package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
  27. package/dist/resources/extensions/browser-tools/refs.js +254 -0
  28. package/dist/resources/extensions/browser-tools/settle.js +173 -0
  29. package/dist/resources/extensions/browser-tools/state.js +126 -0
  30. package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
  31. package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
  32. package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
  33. package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
  34. package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
  35. package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
  36. package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
  37. package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
  38. package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
  39. package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
  40. package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
  41. package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
  42. package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
  43. package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
  44. package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
  45. package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
  46. package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
  47. package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
  48. package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
  49. package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
  50. package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
  51. package/dist/resources/extensions/browser-tools/utils.js +490 -0
  52. package/dist/resources/extensions/context7/index.js +337 -0
  53. package/dist/resources/extensions/get-secrets-from-user.js +492 -0
  54. package/dist/resources/extensions/google-search/index.js +373 -0
  55. package/dist/resources/extensions/gsd/activity-log.js +146 -0
  56. package/dist/resources/extensions/gsd/atomic-write.js +38 -0
  57. package/dist/resources/extensions/gsd/auto/session.js +187 -0
  58. package/dist/resources/extensions/gsd/auto-budget.js +30 -0
  59. package/dist/resources/extensions/gsd/{auto-constants.ts → auto-constants.js} +0 -1
  60. package/dist/resources/extensions/gsd/auto-dashboard.js +509 -0
  61. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +180 -0
  62. package/dist/resources/extensions/gsd/auto-dispatch.js +382 -0
  63. package/dist/resources/extensions/gsd/auto-idempotency.js +106 -0
  64. package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
  65. package/dist/resources/extensions/gsd/auto-observability.js +54 -0
  66. package/dist/resources/extensions/gsd/auto-post-unit.js +495 -0
  67. package/dist/resources/extensions/gsd/auto-prompts.js +1121 -0
  68. package/dist/resources/extensions/gsd/auto-recovery.js +550 -0
  69. package/dist/resources/extensions/gsd/auto-start.js +405 -0
  70. package/dist/resources/extensions/gsd/auto-stuck-detection.js +165 -0
  71. package/dist/resources/extensions/gsd/{auto-supervisor.ts → auto-supervisor.js} +25 -33
  72. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
  73. package/dist/resources/extensions/gsd/auto-timers.js +181 -0
  74. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  75. package/dist/resources/extensions/gsd/auto-unit-closeout.js +30 -0
  76. package/dist/resources/extensions/gsd/auto-verification.js +209 -0
  77. package/dist/resources/extensions/gsd/auto-worktree.js +665 -0
  78. package/dist/resources/extensions/gsd/auto.js +1495 -0
  79. package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
  80. package/dist/resources/extensions/gsd/captures.js +348 -0
  81. package/dist/resources/extensions/gsd/claude-import.js +540 -0
  82. package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
  83. package/dist/resources/extensions/gsd/commands-bootstrap.js +223 -0
  84. package/dist/resources/extensions/gsd/commands-config.js +89 -0
  85. package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
  86. package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
  87. package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
  88. package/dist/resources/extensions/gsd/commands-logs.js +468 -0
  89. package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
  90. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
  91. package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
  92. package/dist/resources/extensions/gsd/commands.js +1024 -0
  93. package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
  94. package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
  95. package/dist/resources/extensions/gsd/context-budget.js +187 -0
  96. package/dist/resources/extensions/gsd/context-store.js +165 -0
  97. package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
  98. package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
  99. package/dist/resources/extensions/gsd/db-writer.js +298 -0
  100. package/dist/resources/extensions/gsd/debug-logger.js +161 -0
  101. package/dist/resources/extensions/gsd/detection.js +373 -0
  102. package/dist/resources/extensions/gsd/diff-context.js +168 -0
  103. package/dist/resources/extensions/gsd/dispatch-guard.js +76 -0
  104. package/dist/resources/extensions/gsd/doctor-checks.js +563 -0
  105. package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
  106. package/dist/resources/extensions/gsd/doctor-format.js +71 -0
  107. package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
  108. package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
  109. package/dist/resources/extensions/gsd/doctor-types.js +12 -0
  110. package/dist/resources/extensions/gsd/doctor.js +672 -0
  111. package/dist/resources/extensions/gsd/error-utils.js +6 -0
  112. package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
  113. package/dist/resources/extensions/gsd/exit-command.js +11 -0
  114. package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
  115. package/dist/resources/extensions/gsd/export.js +268 -0
  116. package/dist/resources/extensions/gsd/file-watcher.js +76 -0
  117. package/dist/resources/extensions/gsd/files.js +937 -0
  118. package/dist/resources/extensions/gsd/forensics.js +511 -0
  119. package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
  120. package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
  121. package/dist/resources/extensions/gsd/git-service.js +460 -0
  122. package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
  123. package/dist/resources/extensions/gsd/gsd-db.js +590 -0
  124. package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
  125. package/dist/resources/extensions/gsd/guided-flow.js +1158 -0
  126. package/dist/resources/extensions/gsd/health-widget.js +141 -0
  127. package/dist/resources/extensions/gsd/history.js +118 -0
  128. package/dist/resources/extensions/gsd/index.js +1250 -0
  129. package/dist/resources/extensions/gsd/init-wizard.js +479 -0
  130. package/dist/resources/extensions/gsd/json-persistence.js +62 -0
  131. package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
  132. package/dist/resources/extensions/gsd/key-manager.js +829 -0
  133. package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
  134. package/dist/resources/extensions/gsd/md-importer.js +440 -0
  135. package/dist/resources/extensions/gsd/mechanical-completion.js +351 -0
  136. package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
  137. package/dist/resources/extensions/gsd/memory-store.js +351 -0
  138. package/dist/resources/extensions/gsd/metrics.js +377 -0
  139. package/dist/resources/extensions/gsd/migrate/command.js +157 -0
  140. package/dist/resources/extensions/gsd/migrate/index.js +7 -0
  141. package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
  142. package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
  143. package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
  144. package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
  145. package/dist/resources/extensions/gsd/migrate/types.js +4 -0
  146. package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
  147. package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
  148. package/dist/resources/extensions/gsd/migrate-external.js +130 -0
  149. package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
  150. package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
  151. package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
  152. package/dist/resources/extensions/gsd/model-router.js +187 -0
  153. package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
  154. package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
  155. package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
  156. package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
  157. package/dist/resources/extensions/gsd/notifications.js +58 -0
  158. package/dist/resources/extensions/gsd/observability-validator.js +398 -0
  159. package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
  160. package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
  161. package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
  162. package/dist/resources/extensions/gsd/paths.js +414 -0
  163. package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
  164. package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
  165. package/dist/resources/extensions/gsd/preferences-models.js +294 -0
  166. package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
  167. package/dist/resources/extensions/gsd/preferences-types.js +73 -0
  168. package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
  169. package/dist/resources/extensions/gsd/preferences.js +325 -0
  170. package/dist/resources/extensions/gsd/progress-score.js +197 -0
  171. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
  172. package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
  173. package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
  174. package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
  175. package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
  176. package/dist/resources/extensions/gsd/queue-order.js +178 -0
  177. package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
  178. package/dist/resources/extensions/gsd/quick.js +230 -0
  179. package/dist/resources/extensions/gsd/repo-identity.js +187 -0
  180. package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
  181. package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
  182. package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
  183. package/dist/resources/extensions/gsd/routing-history.js +210 -0
  184. package/dist/resources/extensions/gsd/safe-fs.js +52 -0
  185. package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
  186. package/dist/resources/extensions/gsd/session-forensics.js +427 -0
  187. package/dist/resources/extensions/gsd/session-lock.js +397 -0
  188. package/dist/resources/extensions/gsd/session-status-io.js +134 -0
  189. package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
  190. package/dist/resources/extensions/gsd/skill-health.js +324 -0
  191. package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
  192. package/dist/resources/extensions/gsd/state.js +653 -0
  193. package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
  194. package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
  195. package/dist/resources/extensions/gsd/token-counter.js +54 -0
  196. package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
  197. package/dist/resources/extensions/gsd/triage-ui.js +125 -0
  198. package/dist/resources/extensions/gsd/types.js +4 -0
  199. package/dist/resources/extensions/gsd/undo.js +210 -0
  200. package/dist/resources/extensions/gsd/unit-id.js +7 -0
  201. package/dist/resources/extensions/gsd/unit-runtime.js +130 -0
  202. package/dist/resources/extensions/gsd/validate-directory.js +143 -0
  203. package/dist/resources/extensions/gsd/verification-evidence.js +123 -0
  204. package/dist/resources/extensions/gsd/verification-gate.js +543 -0
  205. package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
  206. package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
  207. package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
  208. package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
  209. package/dist/resources/extensions/gsd/workspace-index.js +139 -0
  210. package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
  211. package/dist/resources/extensions/gsd/worktree-command.js +676 -0
  212. package/dist/resources/extensions/gsd/worktree-manager.js +359 -0
  213. package/dist/resources/extensions/gsd/worktree.js +236 -0
  214. package/dist/resources/extensions/mac-tools/index.js +768 -0
  215. package/dist/resources/extensions/mcp-client/index.js +363 -0
  216. package/dist/resources/extensions/package.json +3 -0
  217. package/dist/resources/extensions/remote-questions/config.js +70 -0
  218. package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
  219. package/dist/resources/extensions/remote-questions/format.js +234 -0
  220. package/dist/resources/extensions/remote-questions/http-client.js +43 -0
  221. package/dist/resources/extensions/remote-questions/manager.js +156 -0
  222. package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
  223. package/dist/resources/extensions/remote-questions/notify.js +89 -0
  224. package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
  225. package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
  226. package/dist/resources/extensions/remote-questions/status.js +25 -0
  227. package/dist/resources/extensions/remote-questions/store.js +70 -0
  228. package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
  229. package/dist/resources/extensions/remote-questions/types.js +5 -0
  230. package/dist/resources/extensions/search-the-web/cache.js +74 -0
  231. package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
  232. package/dist/resources/extensions/search-the-web/format.js +161 -0
  233. package/dist/resources/extensions/search-the-web/http.js +178 -0
  234. package/dist/resources/extensions/search-the-web/index.js +41 -0
  235. package/dist/resources/extensions/search-the-web/native-search.js +166 -0
  236. package/dist/resources/extensions/search-the-web/provider.js +143 -0
  237. package/dist/resources/extensions/search-the-web/tavily.js +82 -0
  238. package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
  239. package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
  240. package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
  241. package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
  242. package/dist/resources/extensions/shared/confirm-ui.js +96 -0
  243. package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
  244. package/dist/resources/extensions/shared/frontmatter.js +109 -0
  245. package/dist/resources/extensions/shared/interview-ui.js +569 -0
  246. package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
  247. package/dist/resources/extensions/shared/next-action-ui.js +168 -0
  248. package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
  249. package/dist/resources/extensions/shared/sanitize.js +17 -0
  250. package/dist/resources/extensions/shared/terminal.js +21 -0
  251. package/dist/resources/extensions/shared/ui.js +245 -0
  252. package/dist/resources/extensions/shared/wizard-ui.js +478 -0
  253. package/dist/resources/extensions/slash-commands/audit.js +72 -0
  254. package/dist/resources/extensions/slash-commands/clear.js +8 -0
  255. package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
  256. package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
  257. package/dist/resources/extensions/slash-commands/index.js +10 -0
  258. package/dist/resources/extensions/subagent/agents.js +103 -0
  259. package/dist/resources/extensions/subagent/index.js +905 -0
  260. package/dist/resources/extensions/subagent/isolation.js +384 -0
  261. package/dist/resources/extensions/subagent/worker-registry.js +73 -0
  262. package/dist/resources/extensions/ttsr/index.js +144 -0
  263. package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
  264. package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
  265. package/dist/resources/extensions/universal-config/discovery.js +94 -0
  266. package/dist/resources/extensions/universal-config/format.js +178 -0
  267. package/dist/resources/extensions/universal-config/index.js +99 -0
  268. package/dist/resources/extensions/universal-config/scanners.js +574 -0
  269. package/dist/resources/extensions/universal-config/tools.js +57 -0
  270. package/dist/resources/extensions/universal-config/types.js +8 -0
  271. package/dist/resources/extensions/voice/index.js +247 -0
  272. package/dist/startup-timings.d.ts +2 -0
  273. package/dist/startup-timings.js +22 -0
  274. package/package.json +1 -1
  275. package/packages/pi-ai/dist/models.generated.d.ts +5498 -3645
  276. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  277. package/packages/pi-ai/dist/models.generated.js +2595 -742
  278. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  279. package/packages/pi-ai/src/models.generated.ts +2852 -999
  280. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  281. package/packages/pi-coding-agent/dist/core/agent-session.js +9 -0
  282. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  283. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  284. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  285. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  286. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  287. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
  288. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
  290. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  291. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  292. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  293. package/packages/pi-coding-agent/dist/index.js +1 -1
  294. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  295. package/packages/pi-coding-agent/src/core/agent-session.ts +9 -0
  296. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
  297. package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
  298. package/packages/pi-coding-agent/src/index.ts +1 -0
  299. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  300. package/packages/pi-tui/dist/utils.js +32 -2
  301. package/packages/pi-tui/dist/utils.js.map +1 -1
  302. package/packages/pi-tui/src/utils.ts +28 -2
  303. package/src/resources/extensions/bg-shell/index.ts +41 -46
  304. package/src/resources/extensions/browser-tools/index.ts +156 -67
  305. package/src/resources/extensions/gsd/auto-start.ts +22 -10
  306. package/src/resources/extensions/gsd/auto-verification.ts +20 -2
  307. package/src/resources/extensions/gsd/auto-worktree.ts +74 -2
  308. package/src/resources/extensions/gsd/auto.ts +11 -0
  309. package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
  310. package/src/resources/extensions/gsd/commands.ts +39 -31
  311. package/src/resources/extensions/gsd/git-service.ts +7 -0
  312. package/src/resources/extensions/gsd/guided-flow.ts +22 -11
  313. package/src/resources/extensions/gsd/index.ts +93 -32
  314. package/src/resources/extensions/gsd/quick.ts +52 -3
  315. package/src/resources/extensions/gsd/repo-identity.ts +56 -22
  316. package/src/resources/extensions/gsd/session-lock.ts +17 -0
  317. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
  318. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +1 -4
  319. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
  320. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
  321. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
  322. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +65 -0
  323. package/src/resources/extensions/gsd/types.ts +4 -0
  324. package/src/resources/extensions/gsd/verification-evidence.ts +1 -1
  325. package/src/resources/extensions/gsd/verification-gate.ts +23 -2
  326. package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
  327. package/src/resources/extensions/gsd/worktree-command.ts +17 -11
  328. package/src/resources/extensions/package.json +3 -0
  329. package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
  330. package/src/resources/extensions/search-the-web/index.ts +35 -52
  331. package/src/resources/extensions/search-the-web/tavily.ts +1 -1
  332. package/dist/resources/extensions/ask-user-questions.ts +0 -290
  333. package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
  334. package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
  335. package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
  336. package/dist/resources/extensions/async-jobs/index.ts +0 -141
  337. package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
  338. package/dist/resources/extensions/aws-auth/index.ts +0 -144
  339. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
  340. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
  341. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
  342. package/dist/resources/extensions/bg-shell/index.ts +0 -59
  343. package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
  344. package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
  345. package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
  346. package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
  347. package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
  348. package/dist/resources/extensions/bg-shell/types.ts +0 -303
  349. package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
  350. package/dist/resources/extensions/browser-tools/capture.ts +0 -199
  351. package/dist/resources/extensions/browser-tools/core.ts +0 -1196
  352. package/dist/resources/extensions/browser-tools/index.ts +0 -71
  353. package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
  354. package/dist/resources/extensions/browser-tools/refs.ts +0 -264
  355. package/dist/resources/extensions/browser-tools/settle.ts +0 -197
  356. package/dist/resources/extensions/browser-tools/state.ts +0 -408
  357. package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
  358. package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
  359. package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
  360. package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
  361. package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
  362. package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
  363. package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
  364. package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
  365. package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
  366. package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
  367. package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
  368. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
  369. package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
  370. package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
  371. package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
  372. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
  373. package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
  374. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
  375. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
  376. package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
  377. package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
  378. package/dist/resources/extensions/browser-tools/utils.ts +0 -660
  379. package/dist/resources/extensions/context7/index.ts +0 -428
  380. package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
  381. package/dist/resources/extensions/google-search/index.ts +0 -466
  382. package/dist/resources/extensions/gsd/activity-log.ts +0 -162
  383. package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
  384. package/dist/resources/extensions/gsd/auto/session.ts +0 -236
  385. package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
  386. package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
  387. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
  388. package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
  389. package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
  390. package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
  391. package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
  392. package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
  393. package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
  394. package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
  395. package/dist/resources/extensions/gsd/auto-start.ts +0 -483
  396. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  397. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
  398. package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
  399. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
  400. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
  401. package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
  402. package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
  403. package/dist/resources/extensions/gsd/auto.ts +0 -1834
  404. package/dist/resources/extensions/gsd/captures.ts +0 -427
  405. package/dist/resources/extensions/gsd/claude-import.ts +0 -656
  406. package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
  407. package/dist/resources/extensions/gsd/commands-config.ts +0 -102
  408. package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
  409. package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
  410. package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
  411. package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
  412. package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
  413. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
  414. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
  415. package/dist/resources/extensions/gsd/commands.ts +0 -1149
  416. package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
  417. package/dist/resources/extensions/gsd/context-budget.ts +0 -266
  418. package/dist/resources/extensions/gsd/context-store.ts +0 -195
  419. package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
  420. package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
  421. package/dist/resources/extensions/gsd/db-writer.ts +0 -360
  422. package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
  423. package/dist/resources/extensions/gsd/detection.ts +0 -470
  424. package/dist/resources/extensions/gsd/diff-context.ts +0 -214
  425. package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
  426. package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
  427. package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
  428. package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
  429. package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
  430. package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
  431. package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
  432. package/dist/resources/extensions/gsd/doctor.ts +0 -722
  433. package/dist/resources/extensions/gsd/error-utils.ts +0 -6
  434. package/dist/resources/extensions/gsd/exit-command.ts +0 -18
  435. package/dist/resources/extensions/gsd/export.ts +0 -317
  436. package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
  437. package/dist/resources/extensions/gsd/files.ts +0 -1058
  438. package/dist/resources/extensions/gsd/forensics.ts +0 -629
  439. package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
  440. package/dist/resources/extensions/gsd/git-service.ts +0 -586
  441. package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
  442. package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
  443. package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
  444. package/dist/resources/extensions/gsd/health-widget.ts +0 -167
  445. package/dist/resources/extensions/gsd/history.ts +0 -143
  446. package/dist/resources/extensions/gsd/index.ts +0 -1401
  447. package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
  448. package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
  449. package/dist/resources/extensions/gsd/key-manager.ts +0 -996
  450. package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
  451. package/dist/resources/extensions/gsd/md-importer.ts +0 -527
  452. package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
  453. package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
  454. package/dist/resources/extensions/gsd/memory-store.ts +0 -441
  455. package/dist/resources/extensions/gsd/metrics.ts +0 -532
  456. package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
  457. package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
  458. package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
  459. package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
  460. package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
  461. package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
  462. package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
  463. package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
  464. package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
  465. package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
  466. package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
  467. package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
  468. package/dist/resources/extensions/gsd/model-router.ts +0 -256
  469. package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
  470. package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
  471. package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
  472. package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
  473. package/dist/resources/extensions/gsd/notifications.ts +0 -87
  474. package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
  475. package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
  476. package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
  477. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
  478. package/dist/resources/extensions/gsd/paths.ts +0 -449
  479. package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
  480. package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
  481. package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
  482. package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
  483. package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
  484. package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
  485. package/dist/resources/extensions/gsd/preferences.ts +0 -416
  486. package/dist/resources/extensions/gsd/progress-score.ts +0 -273
  487. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
  488. package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
  489. package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
  490. package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
  491. package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
  492. package/dist/resources/extensions/gsd/queue-order.ts +0 -230
  493. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
  494. package/dist/resources/extensions/gsd/quick.ts +0 -212
  495. package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
  496. package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
  497. package/dist/resources/extensions/gsd/routing-history.ts +0 -286
  498. package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
  499. package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
  500. package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
  501. package/dist/resources/extensions/gsd/session-lock.ts +0 -426
  502. package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
  503. package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
  504. package/dist/resources/extensions/gsd/skill-health.ts +0 -417
  505. package/dist/resources/extensions/gsd/state.ts +0 -727
  506. package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
  507. package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
  508. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
  509. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
  510. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
  511. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
  512. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
  513. package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  514. package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
  515. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
  516. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
  517. package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  518. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
  519. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
  520. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  521. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
  522. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
  523. package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
  524. package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
  525. package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
  526. package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
  527. package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
  528. package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
  529. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
  530. package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
  531. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
  532. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
  533. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  534. package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
  535. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
  536. package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
  537. package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
  538. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
  539. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
  540. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
  541. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
  542. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
  543. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
  544. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
  545. package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
  546. package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
  547. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
  548. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
  549. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
  550. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  551. package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
  552. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
  553. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
  554. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
  555. package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
  556. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
  557. package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
  558. package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
  559. package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
  560. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
  561. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
  562. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
  563. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
  564. package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
  565. package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1181
  566. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
  567. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
  568. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
  569. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
  570. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
  571. package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
  572. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
  573. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
  574. package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
  575. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
  576. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
  577. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
  578. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
  579. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
  580. package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  581. package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
  582. package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
  583. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
  584. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  585. package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
  586. package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
  587. package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
  588. package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
  589. package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
  590. package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
  591. package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
  592. package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
  593. package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
  594. package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
  595. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
  596. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
  597. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
  598. package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
  599. package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
  600. package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
  601. package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
  602. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
  603. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
  604. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
  605. package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
  606. package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
  607. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
  608. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
  609. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
  610. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
  611. package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
  612. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
  613. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
  614. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
  615. package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
  616. package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
  617. package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
  618. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
  619. package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
  620. package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
  621. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
  622. package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
  623. package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  624. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
  625. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
  626. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  627. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
  628. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
  629. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
  630. package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
  631. package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
  632. package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
  633. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
  634. package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
  635. package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
  636. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
  637. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
  638. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
  639. package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
  640. package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
  641. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
  642. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
  643. package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
  644. package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
  645. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  646. package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
  647. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
  648. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
  649. package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
  650. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
  651. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
  652. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
  653. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  654. package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
  655. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
  656. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  657. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
  658. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
  659. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
  660. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
  661. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
  662. package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
  663. package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
  664. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
  665. package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
  666. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
  667. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
  668. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
  669. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
  670. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
  671. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
  672. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
  673. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
  674. package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
  675. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
  676. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
  677. package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
  678. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
  679. package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
  680. package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
  681. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
  682. package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
  683. package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
  684. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
  685. package/dist/resources/extensions/gsd/token-counter.ts +0 -65
  686. package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
  687. package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
  688. package/dist/resources/extensions/gsd/types.ts +0 -425
  689. package/dist/resources/extensions/gsd/undo.ts +0 -223
  690. package/dist/resources/extensions/gsd/unit-id.ts +0 -14
  691. package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
  692. package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
  693. package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
  694. package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
  695. package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
  696. package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
  697. package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
  698. package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
  699. package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
  700. package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
  701. package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
  702. package/dist/resources/extensions/gsd/worktree.ts +0 -257
  703. package/dist/resources/extensions/mac-tools/index.ts +0 -852
  704. package/dist/resources/extensions/mcp-client/index.ts +0 -459
  705. package/dist/resources/extensions/remote-questions/config.ts +0 -83
  706. package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
  707. package/dist/resources/extensions/remote-questions/format.ts +0 -315
  708. package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
  709. package/dist/resources/extensions/remote-questions/manager.ts +0 -184
  710. package/dist/resources/extensions/remote-questions/notify.ts +0 -90
  711. package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
  712. package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
  713. package/dist/resources/extensions/remote-questions/status.ts +0 -31
  714. package/dist/resources/extensions/remote-questions/store.ts +0 -81
  715. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
  716. package/dist/resources/extensions/remote-questions/types.ts +0 -102
  717. package/dist/resources/extensions/search-the-web/cache.ts +0 -78
  718. package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
  719. package/dist/resources/extensions/search-the-web/format.ts +0 -258
  720. package/dist/resources/extensions/search-the-web/http.ts +0 -238
  721. package/dist/resources/extensions/search-the-web/index.ts +0 -65
  722. package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
  723. package/dist/resources/extensions/search-the-web/provider.ts +0 -148
  724. package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
  725. package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
  726. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
  727. package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
  728. package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
  729. package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
  730. package/dist/resources/extensions/shared/frontmatter.ts +0 -117
  731. package/dist/resources/extensions/shared/interview-ui.ts +0 -613
  732. package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
  733. package/dist/resources/extensions/shared/sanitize.ts +0 -19
  734. package/dist/resources/extensions/shared/terminal.ts +0 -23
  735. package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
  736. package/dist/resources/extensions/shared/ui.ts +0 -400
  737. package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
  738. package/dist/resources/extensions/slash-commands/audit.ts +0 -88
  739. package/dist/resources/extensions/slash-commands/clear.ts +0 -10
  740. package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
  741. package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
  742. package/dist/resources/extensions/slash-commands/index.ts +0 -12
  743. package/dist/resources/extensions/subagent/agents.ts +0 -126
  744. package/dist/resources/extensions/subagent/index.ts +0 -1121
  745. package/dist/resources/extensions/subagent/isolation.ts +0 -501
  746. package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
  747. package/dist/resources/extensions/ttsr/index.ts +0 -168
  748. package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
  749. package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
  750. package/dist/resources/extensions/universal-config/discovery.ts +0 -104
  751. package/dist/resources/extensions/universal-config/format.ts +0 -191
  752. package/dist/resources/extensions/universal-config/index.ts +0 -120
  753. package/dist/resources/extensions/universal-config/scanners.ts +0 -642
  754. package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
  755. package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
  756. package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
  757. package/dist/resources/extensions/universal-config/tools.ts +0 -60
  758. package/dist/resources/extensions/universal-config/types.ts +0 -135
  759. package/dist/resources/extensions/voice/index.ts +0 -272
  760. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
  761. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
@@ -1,219 +0,0 @@
1
- // Tests for unique milestone ID exports from T01/S01 — covers the S01→S02 boundary contract.
2
- //
3
- // Sections:
4
- // (a) MILESTONE_ID_RE: regex matching/rejection
5
- // (b) extractMilestoneSeq: old/new/invalid → number
6
- // (c) parseMilestoneId: old/new/invalid → structured result
7
- // (d) milestoneIdSort: ordering of mixed arrays
8
- // (e) generateMilestoneSuffix: format, length, uniqueness
9
- // (f) nextMilestoneId: uniqueEnabled true/false, mixed arrays
10
- // (g) maxMilestoneNum: empty, old, new, mixed, non-matching
11
- // (h) Preferences round-trip: validate, merge behavior via renderPreferencesForSystemPrompt
12
-
13
- import {
14
- MILESTONE_ID_RE,
15
- extractMilestoneSeq,
16
- parseMilestoneId,
17
- milestoneIdSort,
18
- generateMilestoneSuffix,
19
- nextMilestoneId,
20
- maxMilestoneNum,
21
- } from '../guided-flow.ts';
22
-
23
- import { renderPreferencesForSystemPrompt } from '../preferences.ts';
24
- import type { GSDPreferences } from '../preferences.ts';
25
- import { createTestContext } from './test-helpers.ts';
26
-
27
-
28
- const { assertEq, assertTrue, assertMatch, report } = createTestContext();
29
- // ─── Tests ─────────────────────────────────────────────────────────────────
30
-
31
- async function main(): Promise<void> {
32
- console.log('unique-milestone-ids tests');
33
-
34
- // (a) MILESTONE_ID_RE
35
- {
36
- console.log(' (a) MILESTONE_ID_RE');
37
- // Should match
38
- assertTrue(MILESTONE_ID_RE.test('M001'), 'matches M001');
39
- assertTrue(MILESTONE_ID_RE.test('M999'), 'matches M999');
40
- assertTrue(MILESTONE_ID_RE.test('M001-abc123'), 'matches M001-abc123');
41
- assertTrue(MILESTONE_ID_RE.test('M042-z9a8b7'), 'matches M042-z9a8b7');
42
-
43
- // Should reject
44
- assertTrue(!MILESTONE_ID_RE.test('M1'), 'rejects M1 (too few digits)');
45
- assertTrue(!MILESTONE_ID_RE.test('M0001'), 'rejects M0001 (too many digits)');
46
- assertTrue(!MILESTONE_ID_RE.test('M001-ABCDEF'), 'rejects M001-ABCDEF (uppercase prefix)');
47
- assertTrue(!MILESTONE_ID_RE.test('M001-short'), 'rejects M001-short (5-char prefix)');
48
- assertTrue(!MILESTONE_ID_RE.test('M001-toolong1'), 'rejects M001-toolong1 (>6-char prefix)');
49
- assertTrue(!MILESTONE_ID_RE.test('IM001'), 'rejects IM001 (prefix before M)');
50
- assertTrue(!MILESTONE_ID_RE.test(''), 'rejects empty string');
51
- assertTrue(!MILESTONE_ID_RE.test('M001extra'), 'rejects M001extra (trailing chars)');
52
- assertTrue(!MILESTONE_ID_RE.test('notes'), 'rejects non-milestone string');
53
- }
54
-
55
- // (b) extractMilestoneSeq
56
- {
57
- console.log(' (b) extractMilestoneSeq');
58
- // Old format
59
- assertEq(extractMilestoneSeq('M001'), 1, 'M001 → 1');
60
- assertEq(extractMilestoneSeq('M042'), 42, 'M042 → 42');
61
- assertEq(extractMilestoneSeq('M999'), 999, 'M999 → 999');
62
-
63
- // Unique format
64
- assertEq(extractMilestoneSeq('M001-abc123'), 1, 'M001-abc123 → 1');
65
- assertEq(extractMilestoneSeq('M042-z9a8b7'), 42, 'M042-z9a8b7 → 42');
66
-
67
- // Invalid → 0
68
- assertEq(extractMilestoneSeq(''), 0, 'empty → 0');
69
- assertEq(extractMilestoneSeq('notes'), 0, 'notes → 0');
70
- assertEq(extractMilestoneSeq('M1'), 0, 'M1 → 0');
71
- assertEq(extractMilestoneSeq('.DS_Store'), 0, '.DS_Store → 0');
72
- assertEq(extractMilestoneSeq('M-ABC-001'), 0, 'M-ABC-001 (old format) → 0');
73
- }
74
-
75
- // (c) parseMilestoneId
76
- {
77
- console.log(' (c) parseMilestoneId');
78
- // Old format — no suffix
79
- assertEq(parseMilestoneId('M001'), { num: 1 }, 'M001 → { num: 1 }');
80
- assertEq(parseMilestoneId('M042'), { num: 42 }, 'M042 → { num: 42 }');
81
-
82
- // Unique format — with suffix
83
- assertEq(parseMilestoneId('M001-abc123'), { suffix: 'abc123', num: 1 }, 'M001-abc123 → { suffix, num }');
84
- assertEq(parseMilestoneId('M042-z9a8b7'), { suffix: 'z9a8b7', num: 42 }, 'M042-z9a8b7 → { suffix, num }');
85
-
86
- // Invalid → { num: 0 }
87
- assertEq(parseMilestoneId(''), { num: 0 }, 'empty → { num: 0 }');
88
- assertEq(parseMilestoneId('notes'), { num: 0 }, 'notes → { num: 0 }');
89
- assertEq(parseMilestoneId('M001-ABCDEF'), { num: 0 }, 'uppercase suffix → { num: 0 }');
90
- assertEq(parseMilestoneId('M1'), { num: 0 }, 'M1 → { num: 0 }');
91
- }
92
-
93
- // (d) milestoneIdSort
94
- {
95
- console.log(' (d) milestoneIdSort');
96
- const mixed = ['M003-abc123', 'M001', 'M002-z9a8b7'];
97
- const sorted = [...mixed].sort(milestoneIdSort);
98
- assertEq(sorted, ['M001', 'M002-z9a8b7', 'M003-abc123'], 'sorts mixed IDs by sequence number');
99
-
100
- // All old format
101
- const oldOnly = ['M003', 'M001', 'M002'];
102
- assertEq([...oldOnly].sort(milestoneIdSort), ['M001', 'M002', 'M003'], 'sorts old-format IDs');
103
-
104
- // Invalid entries sort to front (seq 0)
105
- const withInvalid = ['M002', 'notes', 'M001'];
106
- assertEq([...withInvalid].sort(milestoneIdSort), ['notes', 'M001', 'M002'], 'invalid entries (seq 0) sort first');
107
- }
108
-
109
- // (e) generateMilestoneSuffix
110
- {
111
- console.log(' (e) generateMilestoneSuffix');
112
- const suffix1 = generateMilestoneSuffix();
113
- assertEq(suffix1.length, 6, 'suffix length is 6');
114
- assertMatch(suffix1, /^[a-z0-9]{6}$/, 'suffix matches [a-z0-9]{6}');
115
-
116
- const suffix2 = generateMilestoneSuffix();
117
- assertEq(suffix2.length, 6, 'second suffix length is 6');
118
- assertMatch(suffix2, /^[a-z0-9]{6}$/, 'second suffix matches [a-z0-9]{6}');
119
-
120
- // Two calls should produce different results (36^6 = ~2.2B possibilities)
121
- assertTrue(suffix1 !== suffix2, 'two calls produce different suffixes');
122
- }
123
-
124
- // (f) nextMilestoneId
125
- {
126
- console.log(' (f) nextMilestoneId');
127
- // uniqueEnabled=false (default) → old format
128
- assertEq(nextMilestoneId([]), 'M001', 'empty + uniqueEnabled=false → M001');
129
- assertEq(nextMilestoneId(['M001', 'M002']), 'M003', 'sequential + uniqueEnabled=false → M003');
130
- assertEq(nextMilestoneId(['M001', 'M002'], false), 'M003', 'explicit false → M003');
131
-
132
- // uniqueEnabled=true → unique format
133
- const newId = nextMilestoneId([], true);
134
- assertMatch(newId, MILESTONE_ID_RE, 'uniqueEnabled=true produces valid ID');
135
- assertTrue(newId.startsWith('M001-'), 'uniqueEnabled=true starts with M001-');
136
- assertMatch(newId, /^M001-[a-z0-9]{6}$/, 'empty + uniqueEnabled=true → M001-{rand6}');
137
-
138
- // Mixed array with uniqueEnabled=true
139
- const mixedIds = ['M001', 'M003-abc123', 'M002'];
140
- const nextNew = nextMilestoneId(mixedIds, true);
141
- assertMatch(nextNew, MILESTONE_ID_RE, 'mixed array + uniqueEnabled=true → valid ID');
142
- assertMatch(nextNew, /^M004-[a-z0-9]{6}$/, 'mixed array max=3 → M004-{rand6}');
143
-
144
- // Mixed array with uniqueEnabled=false
145
- assertEq(nextMilestoneId(mixedIds, false), 'M004', 'mixed array + uniqueEnabled=false → M004');
146
-
147
- // Correct sequential number from mixed arrays
148
- const mixedIds2 = ['M005-xyz999', 'M002'];
149
- assertEq(nextMilestoneId(mixedIds2, false), 'M006', 'mixed max=5 → M006');
150
- const nextNew2 = nextMilestoneId(mixedIds2, true);
151
- assertMatch(nextNew2, /^M006-[a-z0-9]{6}$/, 'mixed max=5 + unique → M006-{rand6}');
152
- }
153
-
154
- // (g) maxMilestoneNum
155
- {
156
- console.log(' (g) maxMilestoneNum');
157
- // Empty
158
- assertEq(maxMilestoneNum([]), 0, 'empty → 0');
159
-
160
- // Old format only
161
- assertEq(maxMilestoneNum(['M001', 'M002', 'M003']), 3, 'old format only → 3');
162
-
163
- // Unique format only — must not return NaN
164
- assertEq(maxMilestoneNum(['M001-abc123', 'M002-def456']), 2, 'unique format only → 2');
165
- assertTrue(!Number.isNaN(maxMilestoneNum(['M001-abc123'])), 'unique format does not return NaN');
166
-
167
- // Mixed formats
168
- assertEq(maxMilestoneNum(['M001', 'M003-abc123', 'M002']), 3, 'mixed → 3');
169
-
170
- // Non-matching entries ignored
171
- assertEq(maxMilestoneNum(['M001', 'notes', '.DS_Store', 'M003']), 3, 'non-matching ignored → 3');
172
- assertEq(maxMilestoneNum(['notes', '.DS_Store']), 0, 'all non-matching → 0');
173
- }
174
-
175
- // (h) Preferences round-trip via renderPreferencesForSystemPrompt
176
- {
177
- console.log(' (h) Preferences round-trip');
178
-
179
- // validate { unique_milestone_ids: true } → field preserved (no validation error)
180
- const prefsTrue: GSDPreferences = { unique_milestone_ids: true };
181
- const renderedTrue = renderPreferencesForSystemPrompt(prefsTrue);
182
- assertTrue(!renderedTrue.includes('some preference values were ignored'), 'unique_milestone_ids: true validates without error');
183
-
184
- // validate { unique_milestone_ids: undefined } → field absent (no error)
185
- const prefsUndefined: GSDPreferences = {};
186
- const renderedUndefined = renderPreferencesForSystemPrompt(prefsUndefined);
187
- assertTrue(!renderedUndefined.includes('some preference values were ignored'), 'undefined unique_milestone_ids validates without error');
188
-
189
- // validate { unique_milestone_ids: false } → also valid
190
- const prefsFalse: GSDPreferences = { unique_milestone_ids: false };
191
- const renderedFalse = renderPreferencesForSystemPrompt(prefsFalse);
192
- assertTrue(!renderedFalse.includes('some preference values were ignored'), 'unique_milestone_ids: false validates without error');
193
-
194
- // validate coercion: truthy non-boolean → coerced to boolean (no crash)
195
- const prefsCoerced: GSDPreferences = { unique_milestone_ids: 1 as unknown as boolean };
196
- const renderedCoerced = renderPreferencesForSystemPrompt(prefsCoerced);
197
- assertTrue(!renderedCoerced.includes('some preference values were ignored'), 'truthy non-boolean coerces without validation error');
198
-
199
- // GSDPreferences interface accepts the field (compile-time check — if this compiles, it works)
200
- const prefs: GSDPreferences = { unique_milestone_ids: true, version: 1 };
201
- assertTrue(prefs.unique_milestone_ids === true, 'GSDPreferences interface accepts unique_milestone_ids');
202
- }
203
-
204
- report();
205
- }
206
-
207
- // When run via vitest, wrap in test(); when run via tsx, call directly.
208
- const isVitest = typeof globalThis !== 'undefined' && (globalThis as any).__vitest_worker__?.config?.defines != null && 'vitest' in (globalThis as any).__vitest_worker__.config.defines || process.env.VITEST;
209
- if (isVitest) {
210
- const { test } = await import('node:test');
211
- test('unique-milestone-ids: all ID primitives handle both formats', async () => {
212
- await main();
213
- });
214
- } else {
215
- main().catch((error) => {
216
- console.error(error);
217
- process.exit(1);
218
- });
219
- }
@@ -1,258 +0,0 @@
1
- import { mkdtempSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { tmpdir } from "node:os";
4
- import {
5
- clearUnitRuntimeRecord,
6
- formatExecuteTaskRecoveryStatus,
7
- inspectExecuteTaskDurability,
8
- readUnitRuntimeRecord,
9
- writeUnitRuntimeRecord,
10
- } from "../unit-runtime.ts";
11
- import { clearPathCache } from '../paths.ts';
12
- import { createTestContext } from './test-helpers.ts';
13
-
14
- const { assertEq, assertTrue, report } = createTestContext();
15
- const base = mkdtempSync(join(tmpdir(), "gsd-unit-runtime-test-"));
16
- const tasksDir = join(base, ".gsd", "milestones", "M100", "slices", "S02", "tasks");
17
- mkdirSync(tasksDir, { recursive: true });
18
- writeFileSync(join(base, ".gsd", "STATE.md"), "## Next Action\nExecute T09 for S02: do the thing\n", "utf-8");
19
- writeFileSync(
20
- join(base, ".gsd", "milestones", "M100", "slices", "S02", "S02-PLAN.md"),
21
- "# S02: Test Slice\n\n## Tasks\n\n- [ ] **T09: Do the thing** `est:10m`\n Description.\n",
22
- "utf-8",
23
- );
24
-
25
- console.log("\n=== runtime record write/read/update ===");
26
- {
27
- const first = writeUnitRuntimeRecord(base, "execute-task", "M100/S02/T09", 1000, { phase: "dispatched" });
28
- assertEq(first.phase, "dispatched", "initial phase");
29
- const second = writeUnitRuntimeRecord(base, "execute-task", "M100/S02/T09", 1000, { phase: "wrapup-warning-sent", wrapupWarningSent: true });
30
- assertEq(second.wrapupWarningSent, true, "warning persisted");
31
- const loaded = readUnitRuntimeRecord(base, "execute-task", "M100/S02/T09");
32
- assertTrue(loaded !== null, "record readable");
33
- assertEq(loaded!.phase, "wrapup-warning-sent", "updated phase readable");
34
- }
35
-
36
- console.log("\n=== execute-task durability inspection ===");
37
- {
38
- let status = await inspectExecuteTaskDurability(base, "M100/S02/T09");
39
- assertTrue(status !== null, "status exists");
40
- assertEq(status!.summaryExists, false, "summary initially missing");
41
- assertEq(status!.taskChecked, false, "task initially unchecked");
42
- assertEq(status!.nextActionAdvanced, false, "next action initially stale");
43
- assertTrue(/summary missing/i.test(formatExecuteTaskRecoveryStatus(status!)), "diagnostic mentions summary");
44
-
45
- writeFileSync(join(tasksDir, "T09-SUMMARY.md"), "# done\n", "utf-8");
46
- writeFileSync(
47
- join(base, ".gsd", "milestones", "M100", "slices", "S02", "S02-PLAN.md"),
48
- "# S02: Test Slice\n\n## Tasks\n\n- [x] **T09: Do the thing** `est:10m`\n Description.\n",
49
- "utf-8",
50
- );
51
- writeFileSync(join(base, ".gsd", "STATE.md"), "## Next Action\nExecute T10 for S02: next thing\n", "utf-8");
52
- clearPathCache();
53
-
54
- status = await inspectExecuteTaskDurability(base, "M100/S02/T09");
55
- assertEq(status!.summaryExists, true, "summary found after write");
56
- assertEq(status!.taskChecked, true, "task checked after update");
57
- assertEq(status!.nextActionAdvanced, true, "next action advanced after update");
58
- assertEq(formatExecuteTaskRecoveryStatus(status!), "all durable task artifacts present", "clean diagnostic when complete");
59
- }
60
-
61
- console.log("\n=== runtime record cleanup ===");
62
- {
63
- clearUnitRuntimeRecord(base, "execute-task", "M100/S02/T09");
64
- const loaded = readUnitRuntimeRecord(base, "execute-task", "M100/S02/T09");
65
- assertEq(loaded, null, "record removed");
66
- }
67
-
68
- console.log("\n=== hook unit type sanitization (slash in unitType) ===");
69
- {
70
- // Hook units have unitType like "hook/code-review" with a slash
71
- // This should NOT create a subdirectory - the slash must be sanitized
72
- const hookRecord = writeUnitRuntimeRecord(base, "hook/code-review", "M100/S02/T10", 2000, { phase: "dispatched" });
73
- assertEq(hookRecord.unitType, "hook/code-review", "unitType preserved in record");
74
- assertEq(hookRecord.unitId, "M100/S02/T10", "unitId preserved in record");
75
-
76
- const loaded = readUnitRuntimeRecord(base, "hook/code-review", "M100/S02/T10");
77
- assertTrue(loaded !== null, "hook record readable");
78
- assertEq(loaded!.phase, "dispatched", "hook phase correct");
79
-
80
- // Verify the file is in the units dir, not in a subdirectory
81
- const unitsDir = join(base, ".gsd", "runtime", "units");
82
- const files = readdirSync(unitsDir);
83
- const hookFile = files.find((f: string) => f.includes("hook-code-review"));
84
- assertTrue(hookFile !== undefined, "hook file exists with sanitized name");
85
- assertTrue(!files.some((f: string) => f === "hook"), "no 'hook' subdirectory created");
86
-
87
- clearUnitRuntimeRecord(base, "hook/code-review", "M100/S02/T10");
88
- const cleared = readUnitRuntimeRecord(base, "hook/code-review", "M100/S02/T10");
89
- assertEq(cleared, null, "hook record removed");
90
- }
91
-
92
- // ─── Must-have durability integration tests ───────────────────────────────
93
-
94
- // Create a separate temp base for must-have tests to avoid interference
95
- const mhBase = mkdtempSync(join(tmpdir(), "gsd-unit-runtime-mh-test-"));
96
-
97
- console.log("\n=== must-haves: all mentioned in summary ===");
98
- {
99
- const tasksDir2 = join(mhBase, ".gsd", "milestones", "M200", "slices", "S01", "tasks");
100
- mkdirSync(tasksDir2, { recursive: true });
101
-
102
- // Slice plan with T01 checked
103
- writeFileSync(
104
- join(mhBase, ".gsd", "milestones", "M200", "slices", "S01", "S01-PLAN.md"),
105
- "# S01: Test\n\n## Tasks\n\n- [x] **T01: Build parser** `est:10m`\n Build the parser.\n",
106
- "utf-8",
107
- );
108
- // Task plan with must-haves containing backtick code tokens
109
- writeFileSync(
110
- join(tasksDir2, "T01-PLAN.md"),
111
- "# T01: Build parser\n\n## Must-Haves\n\n- [ ] `parseWidget` function is exported\n- [ ] `formatWidget` handles edge cases\n- [ ] All existing tests pass\n\n## Steps\n\n1. Do stuff\n",
112
- "utf-8",
113
- );
114
- // Summary that mentions all must-haves
115
- writeFileSync(
116
- join(tasksDir2, "T01-SUMMARY.md"),
117
- "# T01: Build parser\n\nAdded parseWidget function and formatWidget with edge case handling. All existing tests pass without regression.\n",
118
- "utf-8",
119
- );
120
- // STATE.md with next action advanced past T01
121
- writeFileSync(join(mhBase, ".gsd", "STATE.md"), "## Next Action\nExecute T02 for S01: next thing\n", "utf-8");
122
-
123
- const status = await inspectExecuteTaskDurability(mhBase, "M200/S01/T01");
124
- assertTrue(status !== null, "mh-all: status exists");
125
- assertEq(status!.mustHaveCount, 3, "mh-all: mustHaveCount is 3");
126
- assertEq(status!.mustHavesMentionedInSummary, 3, "mh-all: all 3 must-haves mentioned");
127
- assertEq(status!.summaryExists, true, "mh-all: summary exists");
128
- assertEq(status!.taskChecked, true, "mh-all: task checked");
129
- const diag = formatExecuteTaskRecoveryStatus(status!);
130
- assertEq(diag, "all durable task artifacts present", "mh-all: diagnostic is clean when all must-haves met");
131
- }
132
-
133
- console.log("\n=== must-haves: partially mentioned in summary ===");
134
- {
135
- const tasksDir3 = join(mhBase, ".gsd", "milestones", "M200", "slices", "S02", "tasks");
136
- mkdirSync(tasksDir3, { recursive: true });
137
-
138
- writeFileSync(
139
- join(mhBase, ".gsd", "milestones", "M200", "slices", "S02", "S02-PLAN.md"),
140
- "# S02: Test\n\n## Tasks\n\n- [x] **T01: Build thing** `est:10m`\n Build.\n",
141
- "utf-8",
142
- );
143
- // Task plan with 3 must-haves, summary will only mention 1
144
- writeFileSync(
145
- join(tasksDir3, "T01-PLAN.md"),
146
- "# T01: Build thing\n\n## Must-Haves\n\n- [ ] `computeScore` function is exported\n- [ ] `validateInput` rejects invalid data\n- [ ] `renderOutput` handles empty arrays\n\n## Steps\n\n1. Do stuff\n",
147
- "utf-8",
148
- );
149
- // Summary only mentions computeScore
150
- writeFileSync(
151
- join(tasksDir3, "T01-SUMMARY.md"),
152
- "# T01: Build thing\n\nAdded computeScore function with full test coverage.\n",
153
- "utf-8",
154
- );
155
- writeFileSync(join(mhBase, ".gsd", "STATE.md"), "## Next Action\nExecute T02 for S02: next thing\n", "utf-8");
156
-
157
- clearPathCache();
158
- const status = await inspectExecuteTaskDurability(mhBase, "M200/S02/T01");
159
- assertTrue(status !== null, "mh-partial: status exists");
160
- assertEq(status!.mustHaveCount, 3, "mh-partial: mustHaveCount is 3");
161
- assertEq(status!.mustHavesMentionedInSummary, 1, "mh-partial: only 1 must-have mentioned");
162
- const diag = formatExecuteTaskRecoveryStatus(status!);
163
- assertTrue(diag.includes("must-have gap"), "mh-partial: diagnostic includes 'must-have gap'");
164
- assertTrue(diag.includes("1 of 3"), "mh-partial: diagnostic includes '1 of 3'");
165
- }
166
-
167
- console.log("\n=== must-haves: no task plan file ===");
168
- {
169
- const tasksDir4 = join(mhBase, ".gsd", "milestones", "M200", "slices", "S03", "tasks");
170
- mkdirSync(tasksDir4, { recursive: true });
171
-
172
- writeFileSync(
173
- join(mhBase, ".gsd", "milestones", "M200", "slices", "S03", "S03-PLAN.md"),
174
- "# S03: Test\n\n## Tasks\n\n- [x] **T01: Quick fix** `est:5m`\n Fix.\n",
175
- "utf-8",
176
- );
177
- // No T01-PLAN.md — only summary
178
- writeFileSync(
179
- join(tasksDir4, "T01-SUMMARY.md"),
180
- "# T01: Quick fix\n\nFixed the thing.\n",
181
- "utf-8",
182
- );
183
- writeFileSync(join(mhBase, ".gsd", "STATE.md"), "## Next Action\nExecute T02 for S03: next thing\n", "utf-8");
184
-
185
- clearPathCache();
186
- const status = await inspectExecuteTaskDurability(mhBase, "M200/S03/T01");
187
- assertTrue(status !== null, "mh-noplan: status exists");
188
- assertEq(status!.mustHaveCount, 0, "mh-noplan: mustHaveCount is 0 when no task plan");
189
- assertEq(status!.mustHavesMentionedInSummary, 0, "mh-noplan: mustHavesMentionedInSummary is 0");
190
- }
191
-
192
- console.log("\n=== must-haves: present but no summary file ===");
193
- {
194
- const tasksDir5 = join(mhBase, ".gsd", "milestones", "M200", "slices", "S04", "tasks");
195
- mkdirSync(tasksDir5, { recursive: true });
196
-
197
- writeFileSync(
198
- join(mhBase, ".gsd", "milestones", "M200", "slices", "S04", "S04-PLAN.md"),
199
- "# S04: Test\n\n## Tasks\n\n- [ ] **T01: Build parser** `est:10m`\n Build.\n",
200
- "utf-8",
201
- );
202
- // Task plan with must-haves but NO summary file
203
- writeFileSync(
204
- join(tasksDir5, "T01-PLAN.md"),
205
- "# T01: Build parser\n\n## Must-Haves\n\n- [ ] `parseData` function exported\n- [ ] Error handling covers edge cases\n\n## Steps\n\n1. Do stuff\n",
206
- "utf-8",
207
- );
208
- writeFileSync(join(mhBase, ".gsd", "STATE.md"), "## Next Action\nExecute T01 for S04: build parser\n", "utf-8");
209
-
210
- clearPathCache();
211
- const status = await inspectExecuteTaskDurability(mhBase, "M200/S04/T01");
212
- assertTrue(status !== null, "mh-nosummary: status exists");
213
- assertEq(status!.mustHaveCount, 2, "mh-nosummary: mustHaveCount is 2");
214
- assertEq(status!.mustHavesMentionedInSummary, 0, "mh-nosummary: mustHavesMentionedInSummary is 0 with no summary");
215
- assertEq(status!.summaryExists, false, "mh-nosummary: summary doesn't exist");
216
- }
217
-
218
- console.log("\n=== must-haves: substring matching (no backtick tokens) ===");
219
- {
220
- const tasksDir6 = join(mhBase, ".gsd", "milestones", "M200", "slices", "S05", "tasks");
221
- mkdirSync(tasksDir6, { recursive: true });
222
-
223
- writeFileSync(
224
- join(mhBase, ".gsd", "milestones", "M200", "slices", "S05", "S05-PLAN.md"),
225
- "# S05: Test\n\n## Tasks\n\n- [x] **T01: Add diagnostics** `est:10m`\n Add.\n",
226
- "utf-8",
227
- );
228
- // Must-haves with no backtick tokens — falls back to substring matching
229
- writeFileSync(
230
- join(tasksDir6, "T01-PLAN.md"),
231
- "# T01: Add diagnostics\n\n## Must-Haves\n\n- [ ] Heuristic matching prioritizes backtick-enclosed code tokens\n- [ ] Recovery diagnostic string shows gap count\n- [ ] All assertions pass\n\n## Steps\n\n1. Do stuff\n",
232
- "utf-8",
233
- );
234
- // Summary mentions "heuristic" and "diagnostic" but not "assertions"
235
- writeFileSync(
236
- join(tasksDir6, "T01-SUMMARY.md"),
237
- "# T01: Add diagnostics\n\nImplemented heuristic matching for must-have items. Recovery diagnostic string now includes gap counts.\n",
238
- "utf-8",
239
- );
240
- writeFileSync(join(mhBase, ".gsd", "STATE.md"), "## Next Action\nExecute T02 for S05: next thing\n", "utf-8");
241
-
242
- clearPathCache();
243
- const status = await inspectExecuteTaskDurability(mhBase, "M200/S05/T01");
244
- assertTrue(status !== null, "mh-substr: status exists");
245
- assertEq(status!.mustHaveCount, 3, "mh-substr: mustHaveCount is 3");
246
- // "heuristic" appears in summary for item 1, "diagnostic" for item 2,
247
- // "assertions" appears in summary? No — let's check
248
- // Item 3: "All assertions pass" — words: "assertions", "pass" (<4 chars excluded)
249
- // summary doesn't contain "assertions" → not matched
250
- assertEq(status!.mustHavesMentionedInSummary, 2, "mh-substr: 2 of 3 matched via substring");
251
- const diag = formatExecuteTaskRecoveryStatus(status!);
252
- assertTrue(diag.includes("must-have gap"), "mh-substr: diagnostic includes gap info");
253
- assertTrue(diag.includes("2 of 3"), "mh-substr: diagnostic includes '2 of 3'");
254
- }
255
-
256
- rmSync(mhBase, { recursive: true, force: true });
257
- rmSync(base, { recursive: true, force: true });
258
- report();
@@ -1,67 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
-
4
- import { registerGSDCommand } from "../commands.ts";
5
-
6
- function createMockPi() {
7
- const commands = new Map<string, any>();
8
- return {
9
- registerCommand(name: string, options: any) {
10
- commands.set(name, options);
11
- },
12
- registerTool() {},
13
- registerShortcut() {},
14
- on() {},
15
- sendMessage() {},
16
- commands,
17
- };
18
- }
19
-
20
- function createMockCtx() {
21
- const notifications: { message: string; level: string }[] = [];
22
- return {
23
- notifications,
24
- ui: {
25
- notify(message: string, level: string) {
26
- notifications.push({ message, level });
27
- },
28
- custom: async () => {},
29
- },
30
- shutdown: async () => {},
31
- };
32
- }
33
-
34
- test("/gsd update appears in subcommand completions", () => {
35
- const pi = createMockPi();
36
- registerGSDCommand(pi as any);
37
-
38
- const gsd = pi.commands.get("gsd");
39
- assert.ok(gsd, "registerGSDCommand should register /gsd");
40
-
41
- const completions = gsd.getArgumentCompletions("update");
42
- const updateEntry = completions.find((c: any) => c.value === "update");
43
- assert.ok(updateEntry, "update should appear in completions");
44
- assert.equal(updateEntry.label, "update");
45
- });
46
-
47
- test("/gsd update appears in help description", () => {
48
- const pi = createMockPi();
49
- registerGSDCommand(pi as any);
50
-
51
- const gsd = pi.commands.get("gsd");
52
- assert.ok(gsd?.description?.includes("update"), "description should mention update");
53
- });
54
-
55
- test("/gsd update is listed in completions with correct description", () => {
56
- const pi = createMockPi();
57
- registerGSDCommand(pi as any);
58
-
59
- const gsd = pi.commands.get("gsd");
60
- const completions = gsd.getArgumentCompletions("");
61
- const updateEntry = completions.find((c: any) => c.value === "update");
62
- assert.ok(updateEntry, "update should appear in full completion list");
63
- assert.ok(
64
- updateEntry.description.toLowerCase().includes("update"),
65
- "completion description should mention updating",
66
- );
67
- });