gsd-pi 2.33.1-dev.235d83a → 2.33.1-dev.29a8268

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 (742) hide show
  1. package/dist/cli.js +0 -16
  2. package/dist/resource-loader.d.ts +0 -2
  3. package/dist/resource-loader.js +3 -36
  4. package/dist/resources/extensions/ask-user-questions.ts +290 -0
  5. package/dist/resources/extensions/async-jobs/async-bash-tool.ts +212 -0
  6. package/dist/resources/extensions/async-jobs/await-tool.ts +103 -0
  7. package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +35 -0
  8. package/dist/resources/extensions/async-jobs/index.ts +141 -0
  9. package/dist/resources/extensions/async-jobs/job-manager.ts +211 -0
  10. package/dist/resources/extensions/aws-auth/index.ts +144 -0
  11. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +219 -0
  12. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +400 -0
  13. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +985 -0
  14. package/dist/resources/extensions/bg-shell/index.ts +59 -0
  15. package/dist/resources/extensions/bg-shell/interaction.ts +198 -0
  16. package/dist/resources/extensions/bg-shell/output-formatter.ts +279 -0
  17. package/dist/resources/extensions/bg-shell/overlay.ts +437 -0
  18. package/dist/resources/extensions/bg-shell/process-manager.ts +464 -0
  19. package/dist/resources/extensions/bg-shell/readiness-detector.ts +126 -0
  20. package/dist/resources/extensions/bg-shell/types.ts +303 -0
  21. package/dist/resources/extensions/bg-shell/utilities.ts +57 -0
  22. package/dist/resources/extensions/browser-tools/capture.ts +199 -0
  23. package/dist/resources/extensions/browser-tools/core.ts +1196 -0
  24. package/dist/resources/extensions/browser-tools/{evaluate-helpers.js → evaluate-helpers.ts} +1 -0
  25. package/dist/resources/extensions/browser-tools/index.ts +71 -0
  26. package/dist/resources/extensions/browser-tools/lifecycle.ts +270 -0
  27. package/dist/resources/extensions/browser-tools/refs.ts +264 -0
  28. package/dist/resources/extensions/browser-tools/settle.ts +197 -0
  29. package/dist/resources/extensions/browser-tools/state.ts +408 -0
  30. package/dist/resources/extensions/browser-tools/tools/action-cache.ts +216 -0
  31. package/dist/resources/extensions/browser-tools/tools/assertions.ts +342 -0
  32. package/dist/resources/extensions/browser-tools/tools/codegen.ts +274 -0
  33. package/dist/resources/extensions/browser-tools/tools/device.ts +183 -0
  34. package/dist/resources/extensions/browser-tools/tools/extract.ts +229 -0
  35. package/dist/resources/extensions/browser-tools/tools/forms.ts +801 -0
  36. package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +221 -0
  37. package/dist/resources/extensions/browser-tools/tools/inspection.ts +492 -0
  38. package/dist/resources/extensions/browser-tools/tools/intent.ts +614 -0
  39. package/dist/resources/extensions/browser-tools/tools/interaction.ts +865 -0
  40. package/dist/resources/extensions/browser-tools/tools/navigation.ts +232 -0
  41. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +244 -0
  42. package/dist/resources/extensions/browser-tools/tools/pages.ts +303 -0
  43. package/dist/resources/extensions/browser-tools/tools/pdf.ts +92 -0
  44. package/dist/resources/extensions/browser-tools/tools/refs.ts +541 -0
  45. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +101 -0
  46. package/dist/resources/extensions/browser-tools/tools/session.ts +400 -0
  47. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +202 -0
  48. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +209 -0
  49. package/dist/resources/extensions/browser-tools/tools/wait.ts +247 -0
  50. package/dist/resources/extensions/browser-tools/tools/zoom.ts +104 -0
  51. package/dist/resources/extensions/browser-tools/utils.ts +660 -0
  52. package/dist/resources/extensions/context7/index.ts +428 -0
  53. package/dist/resources/extensions/get-secrets-from-user.ts +607 -0
  54. package/dist/resources/extensions/google-search/index.ts +466 -0
  55. package/dist/resources/extensions/gsd/activity-log.ts +162 -0
  56. package/dist/resources/extensions/gsd/atomic-write.ts +35 -0
  57. package/dist/resources/extensions/gsd/auto/session.ts +236 -0
  58. package/dist/resources/extensions/gsd/auto-budget.ts +32 -0
  59. package/dist/resources/extensions/gsd/{auto-constants.js → auto-constants.ts} +1 -0
  60. package/dist/resources/extensions/gsd/auto-dashboard.ts +626 -0
  61. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +224 -0
  62. package/dist/resources/extensions/gsd/auto-dispatch.ts +409 -0
  63. package/dist/resources/extensions/gsd/auto-idempotency.ts +151 -0
  64. package/dist/resources/extensions/gsd/auto-model-selection.ts +179 -0
  65. package/dist/resources/extensions/gsd/auto-observability.ts +72 -0
  66. package/dist/resources/extensions/gsd/auto-post-unit.ts +618 -0
  67. package/dist/resources/extensions/gsd/auto-prompts.ts +1273 -0
  68. package/dist/resources/extensions/gsd/auto-recovery.ts +578 -0
  69. package/dist/resources/extensions/gsd/auto-start.ts +483 -0
  70. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +221 -0
  71. package/dist/resources/extensions/gsd/{auto-supervisor.js → auto-supervisor.ts} +33 -25
  72. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +263 -0
  73. package/dist/resources/extensions/gsd/auto-timers.ts +224 -0
  74. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +54 -0
  75. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +48 -0
  76. package/dist/resources/extensions/gsd/auto-verification.ts +229 -0
  77. package/dist/resources/extensions/gsd/auto-worktree.ts +658 -0
  78. package/dist/resources/extensions/gsd/auto.ts +1834 -0
  79. package/dist/resources/extensions/gsd/{cache.js → cache.ts} +7 -5
  80. package/dist/resources/extensions/gsd/captures.ts +427 -0
  81. package/dist/resources/extensions/gsd/claude-import.ts +656 -0
  82. package/dist/resources/extensions/gsd/collision-diagnostics.ts +332 -0
  83. package/dist/resources/extensions/gsd/commands-config.ts +102 -0
  84. package/dist/resources/extensions/gsd/commands-extensions.ts +328 -0
  85. package/dist/resources/extensions/gsd/commands-handlers.ts +395 -0
  86. package/dist/resources/extensions/gsd/commands-inspect.ts +91 -0
  87. package/dist/resources/extensions/gsd/commands-logs.ts +536 -0
  88. package/dist/resources/extensions/gsd/commands-maintenance.ts +206 -0
  89. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +780 -0
  90. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +543 -0
  91. package/dist/resources/extensions/gsd/commands.ts +1149 -0
  92. package/dist/resources/extensions/gsd/complexity-classifier.ts +320 -0
  93. package/dist/resources/extensions/gsd/{constants.js → constants.ts} +6 -0
  94. package/dist/resources/extensions/gsd/context-budget.ts +266 -0
  95. package/dist/resources/extensions/gsd/context-store.ts +195 -0
  96. package/dist/resources/extensions/gsd/crash-recovery.ts +121 -0
  97. package/dist/resources/extensions/gsd/dashboard-overlay.ts +681 -0
  98. package/dist/resources/extensions/gsd/db-writer.ts +360 -0
  99. package/dist/resources/extensions/gsd/debug-logger.ts +178 -0
  100. package/dist/resources/extensions/gsd/detection.ts +470 -0
  101. package/dist/resources/extensions/gsd/diff-context.ts +214 -0
  102. package/dist/resources/extensions/gsd/dispatch-guard.ts +81 -0
  103. package/dist/resources/extensions/gsd/doctor-checks.ts +612 -0
  104. package/dist/resources/extensions/gsd/doctor-environment.ts +497 -0
  105. package/dist/resources/extensions/gsd/doctor-format.ts +78 -0
  106. package/dist/resources/extensions/gsd/doctor-proactive.ts +292 -0
  107. package/dist/resources/extensions/gsd/doctor-providers.ts +343 -0
  108. package/dist/resources/extensions/gsd/doctor-types.ts +87 -0
  109. package/dist/resources/extensions/gsd/doctor.ts +722 -0
  110. package/dist/resources/extensions/gsd/error-utils.ts +6 -0
  111. package/dist/resources/extensions/gsd/{errors.js → errors.ts} +11 -6
  112. package/dist/resources/extensions/gsd/exit-command.ts +18 -0
  113. package/dist/resources/extensions/gsd/{export-html.js → export-html.ts} +614 -482
  114. package/dist/resources/extensions/gsd/export.ts +317 -0
  115. package/dist/resources/extensions/gsd/file-watcher.ts +97 -0
  116. package/dist/resources/extensions/gsd/files.ts +1058 -0
  117. package/dist/resources/extensions/gsd/forensics.ts +629 -0
  118. package/dist/resources/extensions/gsd/{git-constants.js → git-constants.ts} +5 -4
  119. package/dist/resources/extensions/gsd/git-self-heal.ts +127 -0
  120. package/dist/resources/extensions/gsd/git-service.ts +586 -0
  121. package/dist/resources/extensions/gsd/{gitignore.js → gitignore.ts} +125 -98
  122. package/dist/resources/extensions/gsd/gsd-db.ts +685 -0
  123. package/dist/resources/extensions/gsd/guided-flow-queue.ts +440 -0
  124. package/dist/resources/extensions/gsd/guided-flow.ts +1303 -0
  125. package/dist/resources/extensions/gsd/health-widget.ts +167 -0
  126. package/dist/resources/extensions/gsd/history.ts +143 -0
  127. package/dist/resources/extensions/gsd/index.ts +1401 -0
  128. package/dist/resources/extensions/gsd/init-wizard.ts +587 -0
  129. package/dist/resources/extensions/gsd/json-persistence.ts +67 -0
  130. package/dist/resources/extensions/gsd/{jsonl-utils.js → jsonl-utils.ts} +7 -10
  131. package/dist/resources/extensions/gsd/key-manager.ts +996 -0
  132. package/dist/resources/extensions/gsd/marketplace-discovery.ts +508 -0
  133. package/dist/resources/extensions/gsd/md-importer.ts +527 -0
  134. package/dist/resources/extensions/gsd/mechanical-completion.ts +430 -0
  135. package/dist/resources/extensions/gsd/memory-extractor.ts +352 -0
  136. package/dist/resources/extensions/gsd/memory-store.ts +441 -0
  137. package/dist/resources/extensions/gsd/metrics.ts +532 -0
  138. package/dist/resources/extensions/gsd/migrate/command.ts +219 -0
  139. package/dist/resources/extensions/gsd/migrate/index.ts +42 -0
  140. package/dist/resources/extensions/gsd/migrate/parser.ts +323 -0
  141. package/dist/resources/extensions/gsd/migrate/parsers.ts +539 -0
  142. package/dist/resources/extensions/gsd/migrate/preview.ts +48 -0
  143. package/dist/resources/extensions/gsd/migrate/transformer.ts +346 -0
  144. package/dist/resources/extensions/gsd/migrate/types.ts +370 -0
  145. package/dist/resources/extensions/gsd/migrate/validator.ts +55 -0
  146. package/dist/resources/extensions/gsd/migrate/writer.ts +579 -0
  147. package/dist/resources/extensions/gsd/migrate-external.ts +140 -0
  148. package/dist/resources/extensions/gsd/milestone-actions.ts +126 -0
  149. package/dist/resources/extensions/gsd/{milestone-ids.js → milestone-ids.ts} +63 -50
  150. package/dist/resources/extensions/gsd/model-cost-table.ts +65 -0
  151. package/dist/resources/extensions/gsd/model-router.ts +256 -0
  152. package/dist/resources/extensions/gsd/namespaced-registry.ts +467 -0
  153. package/dist/resources/extensions/gsd/namespaced-resolver.ts +307 -0
  154. package/dist/resources/extensions/gsd/native-git-bridge.ts +1041 -0
  155. package/dist/resources/extensions/gsd/native-parser-bridge.ts +267 -0
  156. package/dist/resources/extensions/gsd/notifications.ts +87 -0
  157. package/dist/resources/extensions/gsd/observability-validator.ts +429 -0
  158. package/dist/resources/extensions/gsd/parallel-eligibility.ts +233 -0
  159. package/dist/resources/extensions/gsd/parallel-merge.ts +157 -0
  160. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +826 -0
  161. package/dist/resources/extensions/gsd/paths.ts +449 -0
  162. package/dist/resources/extensions/gsd/plugin-importer.ts +411 -0
  163. package/dist/resources/extensions/gsd/post-unit-hooks.ts +520 -0
  164. package/dist/resources/extensions/gsd/preferences-models.ts +329 -0
  165. package/dist/resources/extensions/gsd/preferences-skills.ts +169 -0
  166. package/dist/resources/extensions/gsd/preferences-types.ts +229 -0
  167. package/dist/resources/extensions/gsd/preferences-validation.ts +590 -0
  168. package/dist/resources/extensions/gsd/preferences.ts +416 -0
  169. package/dist/resources/extensions/gsd/progress-score.ts +273 -0
  170. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +213 -0
  171. package/dist/resources/extensions/gsd/prompt-compressor.ts +508 -0
  172. package/dist/resources/extensions/gsd/prompt-loader.ts +130 -0
  173. package/dist/resources/extensions/gsd/prompt-ordering.ts +200 -0
  174. package/dist/resources/extensions/gsd/provider-error-pause.ts +88 -0
  175. package/dist/resources/extensions/gsd/queue-order.ts +230 -0
  176. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +276 -0
  177. package/dist/resources/extensions/gsd/quick.ts +212 -0
  178. package/dist/resources/extensions/gsd/repo-identity.ts +169 -0
  179. package/dist/resources/extensions/gsd/{reports.js → reports.ts} +241 -146
  180. package/dist/resources/extensions/gsd/{resource-version.js → resource-version.ts} +53 -50
  181. package/dist/resources/extensions/gsd/roadmap-slices.ts +149 -0
  182. package/dist/resources/extensions/gsd/routing-history.ts +286 -0
  183. package/dist/resources/extensions/gsd/safe-fs.ts +47 -0
  184. package/dist/resources/extensions/gsd/semantic-chunker.ts +336 -0
  185. package/dist/resources/extensions/gsd/session-forensics.ts +537 -0
  186. package/dist/resources/extensions/gsd/session-lock.ts +426 -0
  187. package/dist/resources/extensions/gsd/session-status-io.ts +179 -0
  188. package/dist/resources/extensions/gsd/skill-discovery.ts +139 -0
  189. package/dist/resources/extensions/gsd/skill-health.ts +417 -0
  190. package/dist/resources/extensions/gsd/{skill-telemetry.js → skill-telemetry.ts} +74 -58
  191. package/dist/resources/extensions/gsd/state.ts +727 -0
  192. package/dist/resources/extensions/gsd/structured-data-formatter.ts +144 -0
  193. package/dist/resources/extensions/gsd/summary-distiller.ts +258 -0
  194. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +213 -0
  195. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +107 -0
  196. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +200 -0
  197. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +50 -0
  198. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +166 -0
  199. package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +691 -0
  200. package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +186 -0
  201. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +40 -0
  202. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +640 -0
  203. package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +127 -0
  204. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +302 -0
  205. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +257 -0
  206. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +123 -0
  207. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +340 -0
  208. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +167 -0
  209. package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +220 -0
  210. package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +317 -0
  211. package/dist/resources/extensions/gsd/tests/captures.test.ts +438 -0
  212. package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +351 -0
  213. package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +469 -0
  214. package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +705 -0
  215. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  216. package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +209 -0
  217. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +181 -0
  218. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +352 -0
  219. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +193 -0
  220. package/dist/resources/extensions/gsd/tests/context-store.test.ts +462 -0
  221. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +285 -0
  222. package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +134 -0
  223. package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +134 -0
  224. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +346 -0
  225. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +602 -0
  226. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +185 -0
  227. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +405 -0
  228. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +421 -0
  229. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +308 -0
  230. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +788 -0
  231. package/dist/resources/extensions/gsd/tests/detection.test.ts +398 -0
  232. package/dist/resources/extensions/gsd/tests/diff-context.test.ts +136 -0
  233. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +15 -0
  234. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +128 -0
  235. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +132 -0
  236. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +126 -0
  237. package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +314 -0
  238. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +245 -0
  239. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +344 -0
  240. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +278 -0
  241. package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +298 -0
  242. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +302 -0
  243. package/dist/resources/extensions/gsd/tests/doctor.test.ts +652 -0
  244. package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +169 -0
  245. package/dist/resources/extensions/gsd/tests/exit-command.test.ts +50 -0
  246. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +105 -0
  247. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +378 -0
  248. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +144 -0
  249. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +424 -0
  250. package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +131 -0
  251. package/dist/resources/extensions/gsd/tests/git-service.test.ts +1181 -0
  252. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +353 -0
  253. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +125 -0
  254. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +326 -0
  255. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +340 -0
  256. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +162 -0
  257. package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +485 -0
  258. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +32 -0
  259. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +197 -0
  260. package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +534 -0
  261. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +228 -0
  262. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +277 -0
  263. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +523 -0
  264. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +414 -0
  265. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +161 -0
  266. package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +877 -0
  267. package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +283 -0
  268. package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +91 -0
  269. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +410 -0
  270. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +356 -0
  271. package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +180 -0
  272. package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +91 -0
  273. package/dist/resources/extensions/gsd/tests/memory-store.test.ts +345 -0
  274. package/dist/resources/extensions/gsd/tests/metrics.test.ts +253 -0
  275. package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +369 -0
  276. package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +757 -0
  277. package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +635 -0
  278. package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +414 -0
  279. package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +303 -0
  280. package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +398 -0
  281. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +147 -0
  282. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +69 -0
  283. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +157 -0
  284. package/dist/resources/extensions/gsd/tests/model-router.test.ts +167 -0
  285. package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +291 -0
  286. package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +1027 -0
  287. package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +671 -0
  288. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +61 -0
  289. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +23 -0
  290. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +114 -0
  291. package/dist/resources/extensions/gsd/tests/notifications.test.ts +67 -0
  292. package/dist/resources/extensions/gsd/tests/overrides.test.ts +131 -0
  293. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +331 -0
  294. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +298 -0
  295. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +468 -0
  296. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +685 -0
  297. package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +171 -0
  298. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +354 -0
  299. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +276 -0
  300. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +401 -0
  301. package/dist/resources/extensions/gsd/tests/parsers.test.ts +1704 -0
  302. package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +133 -0
  303. package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +363 -0
  304. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +42 -0
  305. package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +481 -0
  306. package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +1383 -0
  307. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +337 -0
  308. package/dist/resources/extensions/gsd/tests/preferences.test.ts +276 -0
  309. package/dist/resources/extensions/gsd/tests/progress-score.test.ts +206 -0
  310. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +464 -0
  311. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +314 -0
  312. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +529 -0
  313. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +385 -0
  314. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +296 -0
  315. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +338 -0
  316. package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +126 -0
  317. package/dist/resources/extensions/gsd/tests/queue-order.test.ts +204 -0
  318. package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +282 -0
  319. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +154 -0
  320. package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +145 -0
  321. package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +281 -0
  322. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +642 -0
  323. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +99 -0
  324. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +538 -0
  325. package/dist/resources/extensions/gsd/tests/requirements.test.ts +106 -0
  326. package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +358 -0
  327. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +66 -0
  328. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +240 -0
  329. package/dist/resources/extensions/gsd/tests/run-uat.test.ts +416 -0
  330. package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +185 -0
  331. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +426 -0
  332. package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +216 -0
  333. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +434 -0
  334. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +126 -0
  335. package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +123 -0
  336. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +142 -0
  337. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +156 -0
  338. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +365 -0
  339. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +323 -0
  340. package/dist/resources/extensions/gsd/tests/test-helpers.ts +61 -0
  341. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +129 -0
  342. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +1272 -0
  343. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +164 -0
  344. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +268 -0
  345. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +366 -0
  346. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +340 -0
  347. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +416 -0
  348. package/dist/resources/extensions/gsd/tests/undo.test.ts +136 -0
  349. package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +219 -0
  350. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +258 -0
  351. package/dist/resources/extensions/gsd/tests/update-command.test.ts +67 -0
  352. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +222 -0
  353. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +375 -0
  354. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +745 -0
  355. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +1208 -0
  356. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +145 -0
  357. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +446 -0
  358. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +237 -0
  359. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +718 -0
  360. package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +148 -0
  361. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +173 -0
  362. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +38 -0
  363. package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +120 -0
  364. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +244 -0
  365. package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +207 -0
  366. package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +141 -0
  367. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +165 -0
  368. package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +206 -0
  369. package/dist/resources/extensions/gsd/tests/worktree.test.ts +171 -0
  370. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +211 -0
  371. package/dist/resources/extensions/gsd/token-counter.ts +65 -0
  372. package/dist/resources/extensions/gsd/triage-resolution.ts +284 -0
  373. package/dist/resources/extensions/gsd/triage-ui.ts +175 -0
  374. package/dist/resources/extensions/gsd/types.ts +425 -0
  375. package/dist/resources/extensions/gsd/undo.ts +223 -0
  376. package/dist/resources/extensions/gsd/unit-id.ts +14 -0
  377. package/dist/resources/extensions/gsd/unit-runtime.ts +192 -0
  378. package/dist/resources/extensions/gsd/validate-directory.ts +164 -0
  379. package/dist/resources/extensions/gsd/verification-evidence.ts +188 -0
  380. package/dist/resources/extensions/gsd/verification-gate.ts +643 -0
  381. package/dist/resources/extensions/gsd/visualizer-data.ts +866 -0
  382. package/dist/resources/extensions/gsd/visualizer-overlay.ts +566 -0
  383. package/dist/resources/extensions/gsd/visualizer-views.ts +1171 -0
  384. package/dist/resources/extensions/gsd/workflow-templates.ts +241 -0
  385. package/dist/resources/extensions/gsd/workspace-index.ts +217 -0
  386. package/dist/resources/extensions/gsd/worktree-command.ts +807 -0
  387. package/dist/resources/extensions/gsd/worktree-manager.ts +449 -0
  388. package/dist/resources/extensions/gsd/worktree.ts +257 -0
  389. package/dist/resources/extensions/mac-tools/index.ts +852 -0
  390. package/dist/resources/extensions/mcp-client/index.ts +459 -0
  391. package/dist/resources/extensions/remote-questions/config.ts +83 -0
  392. package/dist/resources/extensions/remote-questions/discord-adapter.ts +148 -0
  393. package/dist/resources/extensions/remote-questions/format.ts +315 -0
  394. package/dist/resources/extensions/remote-questions/http-client.ts +76 -0
  395. package/dist/resources/extensions/remote-questions/manager.ts +184 -0
  396. package/dist/resources/extensions/remote-questions/{mod.js → mod.ts} +10 -1
  397. package/dist/resources/extensions/remote-questions/notify.ts +90 -0
  398. package/dist/resources/extensions/remote-questions/remote-command.ts +457 -0
  399. package/dist/resources/extensions/remote-questions/slack-adapter.ts +141 -0
  400. package/dist/resources/extensions/remote-questions/status.ts +31 -0
  401. package/dist/resources/extensions/remote-questions/store.ts +81 -0
  402. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +149 -0
  403. package/dist/resources/extensions/remote-questions/types.ts +102 -0
  404. package/dist/resources/extensions/search-the-web/cache.ts +78 -0
  405. package/dist/resources/extensions/search-the-web/command-search-provider.ts +101 -0
  406. package/dist/resources/extensions/search-the-web/format.ts +258 -0
  407. package/dist/resources/extensions/search-the-web/http.ts +238 -0
  408. package/dist/resources/extensions/search-the-web/index.ts +65 -0
  409. package/dist/resources/extensions/search-the-web/native-search.ts +193 -0
  410. package/dist/resources/extensions/search-the-web/provider.ts +148 -0
  411. package/dist/resources/extensions/search-the-web/tavily.ts +116 -0
  412. package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +589 -0
  413. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +608 -0
  414. package/dist/resources/extensions/search-the-web/tool-search.ts +649 -0
  415. package/dist/resources/extensions/search-the-web/url-utils.ts +125 -0
  416. package/dist/resources/extensions/shared/confirm-ui.ts +126 -0
  417. package/dist/resources/extensions/shared/{format-utils.js → format-utils.ts} +91 -85
  418. package/dist/resources/extensions/shared/frontmatter.ts +117 -0
  419. package/dist/resources/extensions/shared/interview-ui.ts +613 -0
  420. package/dist/resources/extensions/shared/{mod.js → mod.ts} +24 -2
  421. package/dist/resources/extensions/shared/next-action-ui.ts +212 -0
  422. package/dist/resources/extensions/shared/{path-display.js → path-display.ts} +3 -2
  423. package/dist/resources/extensions/shared/sanitize.ts +19 -0
  424. package/dist/resources/extensions/shared/terminal.ts +23 -0
  425. package/dist/resources/extensions/shared/tests/format-utils.test.ts +153 -0
  426. package/dist/resources/extensions/shared/ui.ts +400 -0
  427. package/dist/resources/extensions/shared/wizard-ui.ts +551 -0
  428. package/dist/resources/extensions/slash-commands/audit.ts +88 -0
  429. package/dist/resources/extensions/slash-commands/clear.ts +10 -0
  430. package/dist/resources/extensions/slash-commands/create-extension.ts +297 -0
  431. package/dist/resources/extensions/slash-commands/create-slash-command.ts +234 -0
  432. package/dist/resources/extensions/slash-commands/index.ts +12 -0
  433. package/dist/resources/extensions/subagent/agents.ts +126 -0
  434. package/dist/resources/extensions/subagent/index.ts +1121 -0
  435. package/dist/resources/extensions/subagent/isolation.ts +501 -0
  436. package/dist/resources/extensions/subagent/worker-registry.ts +99 -0
  437. package/dist/resources/extensions/ttsr/index.ts +168 -0
  438. package/dist/resources/extensions/ttsr/rule-loader.ts +74 -0
  439. package/dist/resources/extensions/ttsr/ttsr-manager.ts +456 -0
  440. package/dist/resources/extensions/universal-config/discovery.ts +104 -0
  441. package/dist/resources/extensions/universal-config/format.ts +191 -0
  442. package/dist/resources/extensions/universal-config/index.ts +120 -0
  443. package/dist/resources/extensions/universal-config/scanners.ts +642 -0
  444. package/dist/resources/extensions/universal-config/tests/discovery.test.ts +119 -0
  445. package/dist/resources/extensions/universal-config/tests/format.test.ts +127 -0
  446. package/dist/resources/extensions/universal-config/tests/scanners.test.ts +456 -0
  447. package/dist/resources/extensions/universal-config/tools.ts +60 -0
  448. package/dist/resources/extensions/universal-config/types.ts +135 -0
  449. package/dist/resources/extensions/voice/index.ts +272 -0
  450. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +51 -0
  451. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +143 -0
  452. package/package.json +1 -1
  453. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  454. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  455. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  456. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  457. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -1
  458. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  459. package/packages/pi-coding-agent/dist/core/extensions/loader.js +4 -31
  460. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  461. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  462. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  463. package/packages/pi-coding-agent/dist/index.js +1 -1
  464. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  465. package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -1
  466. package/packages/pi-coding-agent/src/core/extensions/loader.ts +4 -35
  467. package/packages/pi-coding-agent/src/index.ts +0 -1
  468. package/src/resources/extensions/bg-shell/index.ts +46 -41
  469. package/src/resources/extensions/browser-tools/index.ts +67 -156
  470. package/src/resources/extensions/gsd/auto-verification.ts +2 -20
  471. package/src/resources/extensions/gsd/auto-worktree.ts +2 -3
  472. package/src/resources/extensions/gsd/commands.ts +31 -39
  473. package/src/resources/extensions/gsd/git-service.ts +0 -7
  474. package/src/resources/extensions/gsd/index.ts +32 -93
  475. package/src/resources/extensions/gsd/quick.ts +3 -52
  476. package/src/resources/extensions/gsd/repo-identity.ts +22 -56
  477. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +4 -1
  478. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +0 -65
  479. package/src/resources/extensions/gsd/types.ts +0 -4
  480. package/src/resources/extensions/gsd/verification-evidence.ts +1 -1
  481. package/src/resources/extensions/gsd/verification-gate.ts +2 -23
  482. package/src/resources/extensions/gsd/worktree-command.ts +11 -17
  483. package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
  484. package/src/resources/extensions/search-the-web/index.ts +52 -35
  485. package/src/resources/extensions/search-the-web/tavily.ts +1 -1
  486. package/dist/resources/extensions/ask-user-questions.js +0 -217
  487. package/dist/resources/extensions/async-jobs/async-bash-tool.js +0 -180
  488. package/dist/resources/extensions/async-jobs/await-tool.js +0 -90
  489. package/dist/resources/extensions/async-jobs/cancel-job-tool.js +0 -28
  490. package/dist/resources/extensions/async-jobs/index.js +0 -119
  491. package/dist/resources/extensions/async-jobs/job-manager.js +0 -159
  492. package/dist/resources/extensions/aws-auth/index.js +0 -138
  493. package/dist/resources/extensions/bg-shell/bg-shell-command.js +0 -182
  494. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +0 -343
  495. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +0 -831
  496. package/dist/resources/extensions/bg-shell/index.js +0 -41
  497. package/dist/resources/extensions/bg-shell/interaction.js +0 -160
  498. package/dist/resources/extensions/bg-shell/output-formatter.js +0 -245
  499. package/dist/resources/extensions/bg-shell/overlay.js +0 -378
  500. package/dist/resources/extensions/bg-shell/process-manager.js +0 -413
  501. package/dist/resources/extensions/bg-shell/readiness-detector.js +0 -109
  502. package/dist/resources/extensions/bg-shell/types.js +0 -96
  503. package/dist/resources/extensions/bg-shell/utilities.js +0 -50
  504. package/dist/resources/extensions/browser-tools/capture.js +0 -179
  505. package/dist/resources/extensions/browser-tools/core.js +0 -899
  506. package/dist/resources/extensions/browser-tools/index.js +0 -123
  507. package/dist/resources/extensions/browser-tools/lifecycle.js +0 -222
  508. package/dist/resources/extensions/browser-tools/refs.js +0 -254
  509. package/dist/resources/extensions/browser-tools/settle.js +0 -173
  510. package/dist/resources/extensions/browser-tools/state.js +0 -126
  511. package/dist/resources/extensions/browser-tools/tools/action-cache.js +0 -179
  512. package/dist/resources/extensions/browser-tools/tools/assertions.js +0 -320
  513. package/dist/resources/extensions/browser-tools/tools/codegen.js +0 -242
  514. package/dist/resources/extensions/browser-tools/tools/device.js +0 -162
  515. package/dist/resources/extensions/browser-tools/tools/extract.js +0 -191
  516. package/dist/resources/extensions/browser-tools/tools/forms.js +0 -710
  517. package/dist/resources/extensions/browser-tools/tools/injection-detect.js +0 -178
  518. package/dist/resources/extensions/browser-tools/tools/inspection.js +0 -426
  519. package/dist/resources/extensions/browser-tools/tools/intent.js +0 -556
  520. package/dist/resources/extensions/browser-tools/tools/interaction.js +0 -776
  521. package/dist/resources/extensions/browser-tools/tools/navigation.js +0 -208
  522. package/dist/resources/extensions/browser-tools/tools/network-mock.js +0 -194
  523. package/dist/resources/extensions/browser-tools/tools/pages.js +0 -280
  524. package/dist/resources/extensions/browser-tools/tools/pdf.js +0 -74
  525. package/dist/resources/extensions/browser-tools/tools/refs.js +0 -485
  526. package/dist/resources/extensions/browser-tools/tools/screenshot.js +0 -87
  527. package/dist/resources/extensions/browser-tools/tools/session.js +0 -375
  528. package/dist/resources/extensions/browser-tools/tools/state-persistence.js +0 -180
  529. package/dist/resources/extensions/browser-tools/tools/visual-diff.js +0 -174
  530. package/dist/resources/extensions/browser-tools/tools/wait.js +0 -201
  531. package/dist/resources/extensions/browser-tools/tools/zoom.js +0 -90
  532. package/dist/resources/extensions/browser-tools/utils.js +0 -490
  533. package/dist/resources/extensions/context7/index.js +0 -337
  534. package/dist/resources/extensions/get-secrets-from-user.js +0 -492
  535. package/dist/resources/extensions/google-search/index.js +0 -373
  536. package/dist/resources/extensions/gsd/activity-log.js +0 -146
  537. package/dist/resources/extensions/gsd/atomic-write.js +0 -38
  538. package/dist/resources/extensions/gsd/auto/session.js +0 -187
  539. package/dist/resources/extensions/gsd/auto-budget.js +0 -30
  540. package/dist/resources/extensions/gsd/auto-dashboard.js +0 -509
  541. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +0 -180
  542. package/dist/resources/extensions/gsd/auto-dispatch.js +0 -382
  543. package/dist/resources/extensions/gsd/auto-idempotency.js +0 -106
  544. package/dist/resources/extensions/gsd/auto-model-selection.js +0 -133
  545. package/dist/resources/extensions/gsd/auto-observability.js +0 -54
  546. package/dist/resources/extensions/gsd/auto-post-unit.js +0 -495
  547. package/dist/resources/extensions/gsd/auto-prompts.js +0 -1121
  548. package/dist/resources/extensions/gsd/auto-recovery.js +0 -550
  549. package/dist/resources/extensions/gsd/auto-start.js +0 -393
  550. package/dist/resources/extensions/gsd/auto-stuck-detection.js +0 -165
  551. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +0 -183
  552. package/dist/resources/extensions/gsd/auto-timers.js +0 -181
  553. package/dist/resources/extensions/gsd/auto-tool-tracking.js +0 -50
  554. package/dist/resources/extensions/gsd/auto-unit-closeout.js +0 -30
  555. package/dist/resources/extensions/gsd/auto-verification.js +0 -209
  556. package/dist/resources/extensions/gsd/auto-worktree.js +0 -594
  557. package/dist/resources/extensions/gsd/auto.js +0 -1485
  558. package/dist/resources/extensions/gsd/captures.js +0 -348
  559. package/dist/resources/extensions/gsd/claude-import.js +0 -540
  560. package/dist/resources/extensions/gsd/collision-diagnostics.js +0 -226
  561. package/dist/resources/extensions/gsd/commands-bootstrap.js +0 -223
  562. package/dist/resources/extensions/gsd/commands-config.js +0 -89
  563. package/dist/resources/extensions/gsd/commands-extensions.js +0 -259
  564. package/dist/resources/extensions/gsd/commands-handlers.js +0 -310
  565. package/dist/resources/extensions/gsd/commands-inspect.js +0 -70
  566. package/dist/resources/extensions/gsd/commands-logs.js +0 -468
  567. package/dist/resources/extensions/gsd/commands-maintenance.js +0 -185
  568. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +0 -660
  569. package/dist/resources/extensions/gsd/commands-workflow-templates.js +0 -408
  570. package/dist/resources/extensions/gsd/commands.js +0 -1024
  571. package/dist/resources/extensions/gsd/complexity-classifier.js +0 -257
  572. package/dist/resources/extensions/gsd/context-budget.js +0 -187
  573. package/dist/resources/extensions/gsd/context-store.js +0 -165
  574. package/dist/resources/extensions/gsd/crash-recovery.js +0 -110
  575. package/dist/resources/extensions/gsd/dashboard-overlay.js +0 -562
  576. package/dist/resources/extensions/gsd/db-writer.js +0 -298
  577. package/dist/resources/extensions/gsd/debug-logger.js +0 -161
  578. package/dist/resources/extensions/gsd/detection.js +0 -373
  579. package/dist/resources/extensions/gsd/diff-context.js +0 -168
  580. package/dist/resources/extensions/gsd/dispatch-guard.js +0 -76
  581. package/dist/resources/extensions/gsd/doctor-checks.js +0 -563
  582. package/dist/resources/extensions/gsd/doctor-environment.js +0 -429
  583. package/dist/resources/extensions/gsd/doctor-format.js +0 -71
  584. package/dist/resources/extensions/gsd/doctor-proactive.js +0 -239
  585. package/dist/resources/extensions/gsd/doctor-providers.js +0 -292
  586. package/dist/resources/extensions/gsd/doctor-types.js +0 -12
  587. package/dist/resources/extensions/gsd/doctor.js +0 -672
  588. package/dist/resources/extensions/gsd/error-utils.js +0 -6
  589. package/dist/resources/extensions/gsd/exit-command.js +0 -11
  590. package/dist/resources/extensions/gsd/export.js +0 -268
  591. package/dist/resources/extensions/gsd/file-watcher.js +0 -76
  592. package/dist/resources/extensions/gsd/files.js +0 -937
  593. package/dist/resources/extensions/gsd/forensics.js +0 -511
  594. package/dist/resources/extensions/gsd/git-self-heal.js +0 -113
  595. package/dist/resources/extensions/gsd/git-service.js +0 -460
  596. package/dist/resources/extensions/gsd/gsd-db.js +0 -590
  597. package/dist/resources/extensions/gsd/guided-flow-queue.js +0 -366
  598. package/dist/resources/extensions/gsd/guided-flow.js +0 -1149
  599. package/dist/resources/extensions/gsd/health-widget.js +0 -141
  600. package/dist/resources/extensions/gsd/history.js +0 -118
  601. package/dist/resources/extensions/gsd/index.js +0 -1250
  602. package/dist/resources/extensions/gsd/init-wizard.js +0 -479
  603. package/dist/resources/extensions/gsd/json-persistence.js +0 -62
  604. package/dist/resources/extensions/gsd/key-manager.js +0 -829
  605. package/dist/resources/extensions/gsd/marketplace-discovery.js +0 -356
  606. package/dist/resources/extensions/gsd/md-importer.js +0 -440
  607. package/dist/resources/extensions/gsd/mechanical-completion.js +0 -351
  608. package/dist/resources/extensions/gsd/memory-extractor.js +0 -295
  609. package/dist/resources/extensions/gsd/memory-store.js +0 -351
  610. package/dist/resources/extensions/gsd/metrics.js +0 -377
  611. package/dist/resources/extensions/gsd/migrate/command.js +0 -157
  612. package/dist/resources/extensions/gsd/migrate/index.js +0 -7
  613. package/dist/resources/extensions/gsd/migrate/parser.js +0 -268
  614. package/dist/resources/extensions/gsd/migrate/parsers.js +0 -477
  615. package/dist/resources/extensions/gsd/migrate/preview.js +0 -47
  616. package/dist/resources/extensions/gsd/migrate/transformer.js +0 -278
  617. package/dist/resources/extensions/gsd/migrate/types.js +0 -4
  618. package/dist/resources/extensions/gsd/migrate/validator.js +0 -41
  619. package/dist/resources/extensions/gsd/migrate/writer.js +0 -477
  620. package/dist/resources/extensions/gsd/migrate-external.js +0 -130
  621. package/dist/resources/extensions/gsd/milestone-actions.js +0 -111
  622. package/dist/resources/extensions/gsd/model-cost-table.js +0 -48
  623. package/dist/resources/extensions/gsd/model-router.js +0 -187
  624. package/dist/resources/extensions/gsd/namespaced-registry.js +0 -322
  625. package/dist/resources/extensions/gsd/namespaced-resolver.js +0 -176
  626. package/dist/resources/extensions/gsd/native-git-bridge.js +0 -842
  627. package/dist/resources/extensions/gsd/native-parser-bridge.js +0 -156
  628. package/dist/resources/extensions/gsd/notifications.js +0 -58
  629. package/dist/resources/extensions/gsd/observability-validator.js +0 -398
  630. package/dist/resources/extensions/gsd/parallel-eligibility.js +0 -182
  631. package/dist/resources/extensions/gsd/parallel-merge.js +0 -121
  632. package/dist/resources/extensions/gsd/parallel-orchestrator.js +0 -687
  633. package/dist/resources/extensions/gsd/paths.js +0 -414
  634. package/dist/resources/extensions/gsd/plugin-importer.js +0 -254
  635. package/dist/resources/extensions/gsd/post-unit-hooks.js +0 -433
  636. package/dist/resources/extensions/gsd/preferences-models.js +0 -294
  637. package/dist/resources/extensions/gsd/preferences-skills.js +0 -154
  638. package/dist/resources/extensions/gsd/preferences-types.js +0 -73
  639. package/dist/resources/extensions/gsd/preferences-validation.js +0 -607
  640. package/dist/resources/extensions/gsd/preferences.js +0 -325
  641. package/dist/resources/extensions/gsd/progress-score.js +0 -197
  642. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +0 -150
  643. package/dist/resources/extensions/gsd/prompt-compressor.js +0 -393
  644. package/dist/resources/extensions/gsd/prompt-loader.js +0 -119
  645. package/dist/resources/extensions/gsd/prompt-ordering.js +0 -170
  646. package/dist/resources/extensions/gsd/provider-error-pause.js +0 -60
  647. package/dist/resources/extensions/gsd/queue-order.js +0 -178
  648. package/dist/resources/extensions/gsd/queue-reorder-ui.js +0 -234
  649. package/dist/resources/extensions/gsd/quick.js +0 -230
  650. package/dist/resources/extensions/gsd/repo-identity.js +0 -187
  651. package/dist/resources/extensions/gsd/roadmap-slices.js +0 -130
  652. package/dist/resources/extensions/gsd/routing-history.js +0 -210
  653. package/dist/resources/extensions/gsd/safe-fs.js +0 -52
  654. package/dist/resources/extensions/gsd/semantic-chunker.js +0 -254
  655. package/dist/resources/extensions/gsd/session-forensics.js +0 -427
  656. package/dist/resources/extensions/gsd/session-lock.js +0 -376
  657. package/dist/resources/extensions/gsd/session-status-io.js +0 -134
  658. package/dist/resources/extensions/gsd/skill-discovery.js +0 -121
  659. package/dist/resources/extensions/gsd/skill-health.js +0 -324
  660. package/dist/resources/extensions/gsd/state.js +0 -653
  661. package/dist/resources/extensions/gsd/structured-data-formatter.js +0 -97
  662. package/dist/resources/extensions/gsd/summary-distiller.js +0 -212
  663. package/dist/resources/extensions/gsd/token-counter.js +0 -54
  664. package/dist/resources/extensions/gsd/triage-resolution.js +0 -217
  665. package/dist/resources/extensions/gsd/triage-ui.js +0 -125
  666. package/dist/resources/extensions/gsd/types.js +0 -4
  667. package/dist/resources/extensions/gsd/undo.js +0 -210
  668. package/dist/resources/extensions/gsd/unit-id.js +0 -7
  669. package/dist/resources/extensions/gsd/unit-runtime.js +0 -130
  670. package/dist/resources/extensions/gsd/validate-directory.js +0 -143
  671. package/dist/resources/extensions/gsd/verification-evidence.js +0 -123
  672. package/dist/resources/extensions/gsd/verification-gate.js +0 -543
  673. package/dist/resources/extensions/gsd/visualizer-data.js +0 -612
  674. package/dist/resources/extensions/gsd/visualizer-overlay.js +0 -501
  675. package/dist/resources/extensions/gsd/visualizer-views.js +0 -893
  676. package/dist/resources/extensions/gsd/workflow-templates.js +0 -188
  677. package/dist/resources/extensions/gsd/workspace-index.js +0 -139
  678. package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +0 -40
  679. package/dist/resources/extensions/gsd/worktree-command.js +0 -676
  680. package/dist/resources/extensions/gsd/worktree-manager.js +0 -359
  681. package/dist/resources/extensions/gsd/worktree.js +0 -236
  682. package/dist/resources/extensions/mac-tools/index.js +0 -768
  683. package/dist/resources/extensions/mcp-client/index.js +0 -363
  684. package/dist/resources/extensions/package.json +0 -3
  685. package/dist/resources/extensions/remote-questions/config.js +0 -70
  686. package/dist/resources/extensions/remote-questions/discord-adapter.js +0 -134
  687. package/dist/resources/extensions/remote-questions/format.js +0 -234
  688. package/dist/resources/extensions/remote-questions/http-client.js +0 -43
  689. package/dist/resources/extensions/remote-questions/manager.js +0 -156
  690. package/dist/resources/extensions/remote-questions/notify.js +0 -89
  691. package/dist/resources/extensions/remote-questions/remote-command.js +0 -453
  692. package/dist/resources/extensions/remote-questions/slack-adapter.js +0 -123
  693. package/dist/resources/extensions/remote-questions/status.js +0 -25
  694. package/dist/resources/extensions/remote-questions/store.js +0 -70
  695. package/dist/resources/extensions/remote-questions/telegram-adapter.js +0 -123
  696. package/dist/resources/extensions/remote-questions/types.js +0 -5
  697. package/dist/resources/extensions/search-the-web/cache.js +0 -74
  698. package/dist/resources/extensions/search-the-web/command-search-provider.js +0 -79
  699. package/dist/resources/extensions/search-the-web/format.js +0 -161
  700. package/dist/resources/extensions/search-the-web/http.js +0 -178
  701. package/dist/resources/extensions/search-the-web/index.js +0 -41
  702. package/dist/resources/extensions/search-the-web/native-search.js +0 -166
  703. package/dist/resources/extensions/search-the-web/provider.js +0 -143
  704. package/dist/resources/extensions/search-the-web/tavily.js +0 -82
  705. package/dist/resources/extensions/search-the-web/tool-fetch-page.js +0 -452
  706. package/dist/resources/extensions/search-the-web/tool-llm-context.js +0 -455
  707. package/dist/resources/extensions/search-the-web/tool-search.js +0 -482
  708. package/dist/resources/extensions/search-the-web/url-utils.js +0 -121
  709. package/dist/resources/extensions/shared/confirm-ui.js +0 -96
  710. package/dist/resources/extensions/shared/frontmatter.js +0 -109
  711. package/dist/resources/extensions/shared/interview-ui.js +0 -569
  712. package/dist/resources/extensions/shared/next-action-ui.js +0 -168
  713. package/dist/resources/extensions/shared/sanitize.js +0 -17
  714. package/dist/resources/extensions/shared/terminal.js +0 -21
  715. package/dist/resources/extensions/shared/ui.js +0 -245
  716. package/dist/resources/extensions/shared/wizard-ui.js +0 -478
  717. package/dist/resources/extensions/slash-commands/audit.js +0 -72
  718. package/dist/resources/extensions/slash-commands/clear.js +0 -8
  719. package/dist/resources/extensions/slash-commands/create-extension.js +0 -264
  720. package/dist/resources/extensions/slash-commands/create-slash-command.js +0 -208
  721. package/dist/resources/extensions/slash-commands/index.js +0 -10
  722. package/dist/resources/extensions/subagent/agents.js +0 -103
  723. package/dist/resources/extensions/subagent/index.js +0 -905
  724. package/dist/resources/extensions/subagent/isolation.js +0 -384
  725. package/dist/resources/extensions/subagent/worker-registry.js +0 -73
  726. package/dist/resources/extensions/ttsr/index.js +0 -144
  727. package/dist/resources/extensions/ttsr/rule-loader.js +0 -70
  728. package/dist/resources/extensions/ttsr/ttsr-manager.js +0 -380
  729. package/dist/resources/extensions/universal-config/discovery.js +0 -94
  730. package/dist/resources/extensions/universal-config/format.js +0 -178
  731. package/dist/resources/extensions/universal-config/index.js +0 -99
  732. package/dist/resources/extensions/universal-config/scanners.js +0 -574
  733. package/dist/resources/extensions/universal-config/tools.js +0 -57
  734. package/dist/resources/extensions/universal-config/types.js +0 -8
  735. package/dist/resources/extensions/voice/index.js +0 -247
  736. package/dist/startup-timings.d.ts +0 -2
  737. package/dist/startup-timings.js +0 -22
  738. package/src/resources/extensions/gsd/commands-bootstrap.ts +0 -252
  739. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +0 -281
  740. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +0 -71
  741. package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +0 -46
  742. package/src/resources/extensions/package.json +0 -3
@@ -0,0 +1,228 @@
1
+ // Integration Edge Case Tests
2
+ //
3
+ // Three scenarios that only had per-module coverage before:
4
+ // 1. Empty project — no markdown files → migration finds nothing → queries return empty
5
+ // 2. Partial migration — DECISIONS.md exists but no REQUIREMENTS.md → no crash
6
+ // 3. Fallback mode — _resetProvider → queries degrade → re-open restores
7
+ //
8
+ // Uses real module imports (no mocks), file-backed DBs, temp directories.
9
+
10
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { tmpdir } from 'node:os';
13
+
14
+ import { openDatabase, closeDatabase, isDbAvailable, _resetProvider } from '../gsd-db.ts';
15
+ import { migrateFromMarkdown } from '../md-importer.ts';
16
+ import {
17
+ queryDecisions,
18
+ queryRequirements,
19
+ formatDecisionsForPrompt,
20
+ formatRequirementsForPrompt,
21
+ } from '../context-store.ts';
22
+ import { createTestContext } from './test-helpers.ts';
23
+
24
+ const { assertEq, assertTrue, report } = createTestContext();
25
+
26
+ // ─── Fixture Helper ────────────────────────────────────────────────────────
27
+
28
+ function generateDecisionsMarkdown(count: number): string {
29
+ const lines: string[] = [
30
+ '# Decisions Register',
31
+ '',
32
+ '<!-- Append-only. Never edit or remove existing rows. -->',
33
+ '',
34
+ '| # | When | Scope | Decision | Choice | Rationale | Revisable? |',
35
+ '|---|------|-------|----------|--------|-----------|------------|',
36
+ ];
37
+
38
+ for (let i = 1; i <= count; i++) {
39
+ const id = `D${String(i).padStart(3, '0')}`;
40
+ const milestone = i <= 3 ? 'M001' : 'M002';
41
+ lines.push(`| ${id} | ${milestone}/S01 | testing | decision ${i} text | choice ${i} | rationale ${i} | yes |`);
42
+ }
43
+
44
+ return lines.join('\n');
45
+ }
46
+
47
+ // ═══════════════════════════════════════════════════════════════════════════
48
+ // Edge Case 1: Empty Project
49
+ // ═══════════════════════════════════════════════════════════════════════════
50
+
51
+ console.log('\n=== integration-edge: empty project ===');
52
+ {
53
+ const base = mkdtempSync(join(tmpdir(), 'gsd-int-edge-empty-'));
54
+ const gsdDir = join(base, '.gsd');
55
+ mkdirSync(gsdDir, { recursive: true });
56
+
57
+ const dbPath = join(gsdDir, 'test-edge-empty.db');
58
+
59
+ try {
60
+ // Open DB first so migrateFromMarkdown doesn't auto-create at default path
61
+ openDatabase(dbPath);
62
+ assertTrue(isDbAvailable(), 'empty: DB available after open');
63
+
64
+ // Migrate with no markdown files on disk
65
+ const result = migrateFromMarkdown(base);
66
+
67
+ assertEq(result.decisions, 0, 'empty: 0 decisions imported');
68
+ assertEq(result.requirements, 0, 'empty: 0 requirements imported');
69
+ assertEq(result.artifacts, 0, 'empty: 0 artifacts imported');
70
+
71
+ // Query decisions → empty array
72
+ const decisions = queryDecisions();
73
+ assertEq(decisions.length, 0, 'empty: queryDecisions returns empty array');
74
+
75
+ // Query requirements → empty array
76
+ const requirements = queryRequirements();
77
+ assertEq(requirements.length, 0, 'empty: queryRequirements returns empty array');
78
+
79
+ // Query with scope filters → still empty, no crash
80
+ const scopedDecisions = queryDecisions({ milestoneId: 'M001' });
81
+ assertEq(scopedDecisions.length, 0, 'empty: scoped queryDecisions returns empty');
82
+
83
+ const scopedRequirements = queryRequirements({ sliceId: 'S01' });
84
+ assertEq(scopedRequirements.length, 0, 'empty: scoped queryRequirements returns empty');
85
+
86
+ // Format empty results → empty strings
87
+ const formattedD = formatDecisionsForPrompt([]);
88
+ const formattedR = formatRequirementsForPrompt([]);
89
+ assertEq(formattedD, '', 'empty: formatDecisionsForPrompt returns empty string');
90
+ assertEq(formattedR, '', 'empty: formatRequirementsForPrompt returns empty string');
91
+
92
+ // Format with actual empty query results
93
+ const formattedD2 = formatDecisionsForPrompt(decisions);
94
+ const formattedR2 = formatRequirementsForPrompt(requirements);
95
+ assertEq(formattedD2, '', 'empty: format of empty query decisions is empty string');
96
+ assertEq(formattedR2, '', 'empty: format of empty query requirements is empty string');
97
+
98
+ closeDatabase();
99
+ } finally {
100
+ closeDatabase();
101
+ rmSync(base, { recursive: true, force: true });
102
+ }
103
+ }
104
+
105
+ // ═══════════════════════════════════════════════════════════════════════════
106
+ // Edge Case 2: Partial Migration (decisions only, no requirements)
107
+ // ═══════════════════════════════════════════════════════════════════════════
108
+
109
+ console.log('\n=== integration-edge: partial migration ===');
110
+ {
111
+ const base = mkdtempSync(join(tmpdir(), 'gsd-int-edge-partial-'));
112
+ const gsdDir = join(base, '.gsd');
113
+ mkdirSync(gsdDir, { recursive: true });
114
+
115
+ // Write DECISIONS.md but NOT REQUIREMENTS.md
116
+ const decisionsMarkdown = generateDecisionsMarkdown(6);
117
+ writeFileSync(join(gsdDir, 'DECISIONS.md'), decisionsMarkdown);
118
+
119
+ const dbPath = join(gsdDir, 'test-edge-partial.db');
120
+
121
+ try {
122
+ openDatabase(dbPath);
123
+ assertTrue(isDbAvailable(), 'partial: DB available after open');
124
+
125
+ const result = migrateFromMarkdown(base);
126
+
127
+ // Decisions imported, requirements skipped gracefully
128
+ assertTrue(result.decisions === 6, `partial: imported ${result.decisions} decisions, expected 6`);
129
+ assertEq(result.requirements, 0, 'partial: 0 requirements imported (no file)');
130
+
131
+ // Decisions queryable
132
+ const decisions = queryDecisions();
133
+ assertTrue(decisions.length === 6, `partial: queryDecisions returns 6 (got ${decisions.length})`);
134
+
135
+ const m001Decisions = queryDecisions({ milestoneId: 'M001' });
136
+ assertTrue(m001Decisions.length > 0, 'partial: M001 decisions non-empty');
137
+ assertTrue(m001Decisions.length < decisions.length, 'partial: M001 scope filters correctly');
138
+
139
+ // Requirements return empty — no crash
140
+ const requirements = queryRequirements();
141
+ assertEq(requirements.length, 0, 'partial: queryRequirements returns empty');
142
+
143
+ const scopedReqs = queryRequirements({ sliceId: 'S01' });
144
+ assertEq(scopedReqs.length, 0, 'partial: scoped queryRequirements returns empty');
145
+
146
+ // Format works on partial data
147
+ const formattedD = formatDecisionsForPrompt(m001Decisions);
148
+ assertTrue(formattedD.length > 0, 'partial: formatted decisions non-empty');
149
+
150
+ const formattedR = formatRequirementsForPrompt(requirements);
151
+ assertEq(formattedR, '', 'partial: formatted empty requirements is empty string');
152
+
153
+ closeDatabase();
154
+ } finally {
155
+ closeDatabase();
156
+ rmSync(base, { recursive: true, force: true });
157
+ }
158
+ }
159
+
160
+ // ═══════════════════════════════════════════════════════════════════════════
161
+ // Edge Case 3: Fallback Mode (_resetProvider)
162
+ // ═══════════════════════════════════════════════════════════════════════════
163
+
164
+ console.log('\n=== integration-edge: fallback mode ===');
165
+ {
166
+ const base = mkdtempSync(join(tmpdir(), 'gsd-int-edge-fallback-'));
167
+ const gsdDir = join(base, '.gsd');
168
+ mkdirSync(gsdDir, { recursive: true });
169
+
170
+ const decisionsMarkdown = generateDecisionsMarkdown(4);
171
+ writeFileSync(join(gsdDir, 'DECISIONS.md'), decisionsMarkdown);
172
+
173
+ const dbPath = join(gsdDir, 'test-edge-fallback.db');
174
+
175
+ try {
176
+ // Step 1: Open DB normally and verify it works
177
+ openDatabase(dbPath);
178
+ assertTrue(isDbAvailable(), 'fallback: DB available after open');
179
+
180
+ migrateFromMarkdown(base);
181
+ const before = queryDecisions();
182
+ assertTrue(before.length === 4, `fallback: 4 decisions before reset (got ${before.length})`);
183
+
184
+ // Step 2: Close and reset provider → DB unavailable
185
+ closeDatabase();
186
+ _resetProvider();
187
+ assertTrue(!isDbAvailable(), 'fallback: DB unavailable after _resetProvider');
188
+
189
+ // Step 3: Queries degrade gracefully (return empty, don't throw)
190
+ const degradedDecisions = queryDecisions();
191
+ assertEq(degradedDecisions.length, 0, 'fallback: queryDecisions returns empty when unavailable');
192
+
193
+ const degradedRequirements = queryRequirements();
194
+ assertEq(degradedRequirements.length, 0, 'fallback: queryRequirements returns empty when unavailable');
195
+
196
+ const degradedScopedD = queryDecisions({ milestoneId: 'M001' });
197
+ assertEq(degradedScopedD.length, 0, 'fallback: scoped queryDecisions returns empty when unavailable');
198
+
199
+ const degradedScopedR = queryRequirements({ sliceId: 'S01' });
200
+ assertEq(degradedScopedR.length, 0, 'fallback: scoped queryRequirements returns empty when unavailable');
201
+
202
+ // Format functions work on empty arrays (no crash)
203
+ const formattedD = formatDecisionsForPrompt(degradedDecisions);
204
+ assertEq(formattedD, '', 'fallback: format degraded decisions is empty');
205
+
206
+ const formattedR = formatRequirementsForPrompt(degradedRequirements);
207
+ assertEq(formattedR, '', 'fallback: format degraded requirements is empty');
208
+
209
+ // Step 4: Re-open DB → restores availability
210
+ openDatabase(dbPath);
211
+ assertTrue(isDbAvailable(), 'fallback: DB available after re-open');
212
+
213
+ // Data should be there from the file-backed DB (persisted by first open)
214
+ // But rows may need re-import since the DB was freshly opened from the file
215
+ migrateFromMarkdown(base);
216
+ const restored = queryDecisions();
217
+ assertTrue(restored.length === 4, `fallback: 4 decisions after re-open (got ${restored.length})`);
218
+
219
+ closeDatabase();
220
+ } finally {
221
+ closeDatabase();
222
+ rmSync(base, { recursive: true, force: true });
223
+ }
224
+ }
225
+
226
+ // ─── Report ────────────────────────────────────────────────────────────────
227
+
228
+ report();
@@ -0,0 +1,277 @@
1
+ // Integration Lifecycle Test
2
+ //
3
+ // Proves full M001 subsystem composition end-to-end:
4
+ // realistic markdown on disk → migrateFromMarkdown → scoped DB queries →
5
+ // formatted prompt output → token savings validation → re-import after changes →
6
+ // structured tool write-back → DB consistency verification.
7
+ //
8
+ // Crosses ≥4 module boundaries: gsd-db, md-importer, context-store, db-writer.
9
+ // Uses file-backed DB (not :memory:) for WAL fidelity.
10
+
11
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync, readFileSync, appendFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { tmpdir } from 'node:os';
14
+
15
+ import { openDatabase, closeDatabase, isDbAvailable, _getAdapter } from '../gsd-db.ts';
16
+ import { migrateFromMarkdown, parseDecisionsTable } from '../md-importer.ts';
17
+ import {
18
+ queryDecisions,
19
+ queryRequirements,
20
+ formatDecisionsForPrompt,
21
+ formatRequirementsForPrompt,
22
+ } from '../context-store.ts';
23
+ import { saveDecisionToDb, generateDecisionsMd } from '../db-writer.ts';
24
+ import { createTestContext } from './test-helpers.ts';
25
+
26
+ const { assertEq, assertTrue, assertMatch, report } = createTestContext();
27
+
28
+ // ─── Fixture Generators (duplicated from token-savings.test.ts — file-scoped) ──
29
+
30
+ function generateDecisionsMarkdown(count: number, milestones: string[]): string {
31
+ const lines: string[] = [
32
+ '# Decisions Register',
33
+ '',
34
+ '<!-- Append-only. Never edit or remove existing rows. -->',
35
+ '',
36
+ '| # | When | Scope | Decision | Choice | Rationale | Revisable? |',
37
+ '|---|------|-------|----------|--------|-----------|------------|',
38
+ ];
39
+
40
+ for (let i = 1; i <= count; i++) {
41
+ const id = `D${String(i).padStart(3, '0')}`;
42
+ const milestone = milestones[(i - 1) % milestones.length];
43
+ const sliceNum = ((i - 1) % 5) + 1;
44
+ const when = `${milestone}/S${String(sliceNum).padStart(2, '0')}`;
45
+ const scope = ['architecture', 'testing', 'observability', 'security', 'performance'][(i - 1) % 5];
46
+ const decision = `${scope} decision ${i}: implement ${scope}-level ${['caching', 'validation', 'retry logic', 'circuit breaker', 'rate limiting'][(i - 1) % 5]} for the ${['API layer', 'data pipeline', 'auth subsystem', 'notification service', 'background workers'][(i - 1) % 5]}`;
47
+ const choice = `Use ${['SQLite', 'Redis', 'in-memory cache', 'exponential backoff', 'token bucket'][(i - 1) % 5]} with ${['WAL mode', 'cluster mode', 'LRU eviction', 'jitter', 'sliding window'][(i - 1) % 5]}`;
48
+ const rationale = `${['Built-in Node.js support eliminates external dependency', 'Sub-millisecond latency meets P99 requirement', 'Memory-efficient with bounded growth prevents OOM', 'Prevents thundering herd during recovery', 'Protects downstream services from burst traffic'][(i - 1) % 5]}. Aligns with ${scope} principles for ${milestone}.`;
49
+ const revisable = i % 3 === 0 ? 'no' : 'yes';
50
+
51
+ lines.push(`| ${id} | ${when} | ${scope} | ${decision} | ${choice} | ${rationale} | ${revisable} |`);
52
+ }
53
+
54
+ return lines.join('\n');
55
+ }
56
+
57
+ function milestone_shorthand(index: number): string {
58
+ return ['alpha', 'beta', 'GA'][index] ?? 'alpha';
59
+ }
60
+
61
+ function generateRequirementsMarkdown(count: number, sliceAssignments: { milestone: string; slice: string }[]): string {
62
+ const lines: string[] = [
63
+ '# Requirements',
64
+ '',
65
+ '## Active',
66
+ '',
67
+ ];
68
+
69
+ for (let i = 1; i <= count; i++) {
70
+ const id = `R${String(i).padStart(3, '0')}`;
71
+ const assignment = sliceAssignments[(i - 1) % sliceAssignments.length];
72
+ const reqClass = ['functional', 'non-functional', 'constraint', 'functional', 'non-functional'][(i - 1) % 5];
73
+ const description = `${['Response latency', 'Data consistency', 'Error recovery', 'Access control', 'Audit logging', 'Cache invalidation', 'Schema migration'][(i - 1) % 7]} requirement for ${assignment.milestone}/${assignment.slice}`;
74
+ const why = `Critical for ${['user experience', 'data integrity', 'system reliability', 'security compliance', 'regulatory requirements', 'operational visibility', 'deployment safety'][(i - 1) % 7]}. Without this, the system would ${['degrade under load', 'lose data during failures', 'fail to recover from crashes', 'expose unauthorized data', 'violate compliance mandates', 'have stale data issues', 'break during schema changes'][(i - 1) % 7]}.`;
75
+ const source = `Architecture review ${milestone_shorthand((i - 1) % 3)}, stakeholder feedback round ${((i - 1) % 4) + 1}`;
76
+ const primaryOwner = assignment.slice;
77
+ const supportingSlices = sliceAssignments
78
+ .filter(a => a.slice !== assignment.slice && a.milestone === assignment.milestone)
79
+ .map(a => a.slice)
80
+ .slice(0, 2)
81
+ .join(', ');
82
+ const validation = `${['Automated test suite covers all edge cases', 'Load test confirms P99 < 200ms under 1000 RPS', 'Chaos test proves recovery within 30s', 'Penetration test shows no unauthorized access paths', 'Audit log review confirms complete event capture', 'Integration test validates cache consistency', 'Migration test verifies zero-downtime upgrade'][(i - 1) % 7]}.`;
83
+ const notes = `Tracked in JIRA-${100 + i}. See ADR-${((i - 1) % 5) + 1} for background.`;
84
+
85
+ lines.push(`### ${id} — ${description}`);
86
+ lines.push('');
87
+ lines.push(`- Class: ${reqClass}`);
88
+ lines.push(`- Status: active`);
89
+ lines.push(`- Why it matters: ${why}`);
90
+ lines.push(`- Source: ${source}`);
91
+ lines.push(`- Primary owning slice: ${primaryOwner}`);
92
+ if (supportingSlices) {
93
+ lines.push(`- Supporting slices: ${supportingSlices}`);
94
+ }
95
+ lines.push(`- Validation: ${validation}`);
96
+ lines.push(`- Notes: ${notes}`);
97
+ lines.push('');
98
+ }
99
+
100
+ return lines.join('\n');
101
+ }
102
+
103
+ // ─── Fixture Constants ─────────────────────────────────────────────────────
104
+
105
+ const MILESTONES = ['M001', 'M002'];
106
+ const SLICE_ASSIGNMENTS = [
107
+ { milestone: 'M001', slice: 'S01' },
108
+ { milestone: 'M001', slice: 'S02' },
109
+ { milestone: 'M001', slice: 'S03' },
110
+ { milestone: 'M002', slice: 'S04' },
111
+ { milestone: 'M002', slice: 'S05' },
112
+ ];
113
+ const DECISIONS_COUNT = 14;
114
+ const REQUIREMENTS_COUNT = 12;
115
+
116
+ const ROADMAP_CONTENT = `# M001: Test Milestone\n\n**Vision:** Integration test milestone.\n\n## Slices\n\n- [ ] **S01: First Slice** \`risk:low\` \`depends:[]\`\n > After this: Done.\n`;
117
+
118
+ // ═══════════════════════════════════════════════════════════════════════════
119
+ // Full Lifecycle Integration Test
120
+ // ═══════════════════════════════════════════════════════════════════════════
121
+
122
+ async function main(): Promise<void> {
123
+
124
+ console.log('\n=== integration-lifecycle: full pipeline ===');
125
+ {
126
+ // ── Step 1: Set up temp dir with realistic .gsd/ structure ──────────
127
+ const base = mkdtempSync(join(tmpdir(), 'gsd-int-lifecycle-'));
128
+ const gsdDir = join(base, '.gsd');
129
+ mkdirSync(gsdDir, { recursive: true });
130
+ mkdirSync(join(gsdDir, 'milestones', 'M001'), { recursive: true });
131
+ mkdirSync(join(gsdDir, 'milestones', 'M002'), { recursive: true });
132
+
133
+ const decisionsMarkdown = generateDecisionsMarkdown(DECISIONS_COUNT, MILESTONES);
134
+ const requirementsMarkdown = generateRequirementsMarkdown(REQUIREMENTS_COUNT, SLICE_ASSIGNMENTS);
135
+
136
+ writeFileSync(join(gsdDir, 'DECISIONS.md'), decisionsMarkdown);
137
+ writeFileSync(join(gsdDir, 'REQUIREMENTS.md'), requirementsMarkdown);
138
+ writeFileSync(join(gsdDir, 'milestones', 'M001', 'M001-ROADMAP.md'), ROADMAP_CONTENT);
139
+
140
+ const dbPath = join(gsdDir, 'test-lifecycle.db');
141
+
142
+ try {
143
+ // ── Step 2: Open file-backed DB + migrateFromMarkdown ──────────────
144
+ openDatabase(dbPath);
145
+ assertTrue(isDbAvailable(), 'lifecycle: DB is available after open');
146
+
147
+ const result = migrateFromMarkdown(base);
148
+
149
+ assertTrue(result.decisions === DECISIONS_COUNT, `lifecycle: imported ${result.decisions} decisions, expected ${DECISIONS_COUNT}`);
150
+ assertTrue(result.requirements === REQUIREMENTS_COUNT, `lifecycle: imported ${result.requirements} requirements, expected ${REQUIREMENTS_COUNT}`);
151
+ assertTrue(result.artifacts >= 1, `lifecycle: imported at least 1 artifact (got ${result.artifacts})`);
152
+
153
+ // Verify file-backed DB uses WAL
154
+ const adapter = _getAdapter()!;
155
+ const mode = adapter.prepare('PRAGMA journal_mode').get();
156
+ assertEq(mode?.['journal_mode'], 'wal', 'lifecycle: file-backed DB uses WAL mode');
157
+
158
+ // ── Step 3: Scoped queries — decisions by milestone ────────────────
159
+ const allDecisions = queryDecisions();
160
+ const m001Decisions = queryDecisions({ milestoneId: 'M001' });
161
+ const m002Decisions = queryDecisions({ milestoneId: 'M002' });
162
+
163
+ assertTrue(allDecisions.length === DECISIONS_COUNT, `lifecycle: all decisions count = ${DECISIONS_COUNT} (got ${allDecisions.length})`);
164
+ assertTrue(m001Decisions.length > 0, 'lifecycle: M001 decisions non-empty');
165
+ assertTrue(m002Decisions.length > 0, 'lifecycle: M002 decisions non-empty');
166
+ assertTrue(m001Decisions.length < allDecisions.length, 'lifecycle: M001 filtered count < total count');
167
+ assertTrue(m002Decisions.length < allDecisions.length, 'lifecycle: M002 filtered count < total count');
168
+ assertEq(m001Decisions.length + m002Decisions.length, allDecisions.length, 'lifecycle: M001 + M002 = total decisions');
169
+
170
+ // Verify scoping correctness
171
+ for (const d of m001Decisions) {
172
+ assertTrue(d.when_context.includes('M001'), `lifecycle: M001 decision ${d.id} has M001 in when_context`);
173
+ }
174
+ for (const d of m002Decisions) {
175
+ assertTrue(d.when_context.includes('M002'), `lifecycle: M002 decision ${d.id} has M002 in when_context`);
176
+ }
177
+
178
+ // ── Step 4: Scoped queries — requirements by slice ─────────────────
179
+ const allRequirements = queryRequirements();
180
+ const s01Requirements = queryRequirements({ sliceId: 'S01' });
181
+ const s04Requirements = queryRequirements({ sliceId: 'S04' });
182
+
183
+ assertTrue(allRequirements.length === REQUIREMENTS_COUNT, `lifecycle: all requirements count = ${REQUIREMENTS_COUNT} (got ${allRequirements.length})`);
184
+ assertTrue(s01Requirements.length > 0, 'lifecycle: S01 requirements non-empty');
185
+ assertTrue(s04Requirements.length > 0, 'lifecycle: S04 requirements non-empty');
186
+ assertTrue(s01Requirements.length < allRequirements.length, 'lifecycle: S01 filtered count < total count');
187
+
188
+ // ── Step 5: Format + token savings validation ──────────────────────
189
+ const formattedDecisions = formatDecisionsForPrompt(m001Decisions);
190
+ const formattedRequirements = formatRequirementsForPrompt(s01Requirements);
191
+
192
+ assertTrue(formattedDecisions.length > 0, 'lifecycle: formatted M001 decisions non-empty');
193
+ assertTrue(formattedRequirements.length > 0, 'lifecycle: formatted S01 requirements non-empty');
194
+ assertMatch(formattedDecisions, /\| D/, 'lifecycle: formatted decisions contains decision rows');
195
+ assertMatch(formattedRequirements, /### R\d+/, 'lifecycle: formatted requirements has headings');
196
+
197
+ // Token savings: scoped output vs full file content
198
+ const fullDecisionsContent = readFileSync(join(gsdDir, 'DECISIONS.md'), 'utf-8');
199
+ const fullRequirementsContent = readFileSync(join(gsdDir, 'REQUIREMENTS.md'), 'utf-8');
200
+ const dbScopedTotal = formattedDecisions.length + formattedRequirements.length;
201
+ const fullTotal = fullDecisionsContent.length + fullRequirementsContent.length;
202
+ const savingsPercent = ((fullTotal - dbScopedTotal) / fullTotal) * 100;
203
+
204
+ console.log(` Token savings: ${savingsPercent.toFixed(1)}% (scoped: ${dbScopedTotal}, full: ${fullTotal})`);
205
+
206
+ assertTrue(dbScopedTotal > 0, 'lifecycle: scoped content non-empty');
207
+ assertTrue(dbScopedTotal < fullTotal, 'lifecycle: scoped content smaller than full content');
208
+ assertTrue(savingsPercent >= 30, `lifecycle: savings ≥30% (actual: ${savingsPercent.toFixed(1)}%)`);
209
+
210
+ // ── Step 6: Simulate content change → re-import ────────────────────
211
+ const newDecisionRow = `| D${DECISIONS_COUNT + 1} | M001/S01 | testing | new decision added after initial import | choice X | rationale Y | yes |`;
212
+ appendFileSync(join(gsdDir, 'DECISIONS.md'), '\n' + newDecisionRow + '\n');
213
+
214
+ const result2 = migrateFromMarkdown(base);
215
+ assertTrue(result2.decisions === DECISIONS_COUNT + 1, `lifecycle: re-import got ${result2.decisions} decisions, expected ${DECISIONS_COUNT + 1}`);
216
+
217
+ const afterReimport = queryDecisions();
218
+ assertTrue(afterReimport.length === DECISIONS_COUNT + 1, `lifecycle: DB has ${DECISIONS_COUNT + 1} decisions after re-import (got ${afterReimport.length})`);
219
+
220
+ // Verify the new decision is queryable
221
+ const newM001 = queryDecisions({ milestoneId: 'M001' });
222
+ const foundNew = newM001.some(d => d.id === `D${DECISIONS_COUNT + 1}`);
223
+ assertTrue(foundNew, `lifecycle: newly imported D${DECISIONS_COUNT + 1} found in M001 scope`);
224
+
225
+ // ── Step 7: saveDecisionToDb write-back + round-trip ───────────────
226
+ const saved = await saveDecisionToDb(
227
+ {
228
+ scope: 'M001/S01',
229
+ decision: 'integration test write-back decision',
230
+ choice: 'option Z',
231
+ rationale: 'proves round-trip fidelity',
232
+ when_context: 'M001/S01',
233
+ },
234
+ base,
235
+ );
236
+
237
+ assertTrue(typeof saved.id === 'string', 'lifecycle: saveDecisionToDb returned an id');
238
+ assertMatch(saved.id, /^D\d+$/, 'lifecycle: saved ID matches D### pattern');
239
+
240
+ // Query back from DB
241
+ const allAfterSave = queryDecisions();
242
+ const savedDecision = allAfterSave.find(d => d.id === saved.id);
243
+ assertTrue(savedDecision !== null && savedDecision !== undefined, `lifecycle: saved decision ${saved.id} found in DB`);
244
+ assertEq(savedDecision?.decision, 'integration test write-back decision', 'lifecycle: saved decision text matches');
245
+ assertEq(savedDecision?.choice, 'option Z', 'lifecycle: saved choice matches');
246
+
247
+ // Verify DECISIONS.md was regenerated with the new decision
248
+ const regeneratedMd = readFileSync(join(gsdDir, 'DECISIONS.md'), 'utf-8');
249
+ assertTrue(regeneratedMd.includes(saved.id), `lifecycle: regenerated DECISIONS.md contains ${saved.id}`);
250
+ assertTrue(regeneratedMd.includes('integration test write-back decision'), 'lifecycle: regenerated md contains write-back text');
251
+
252
+ // Round-trip: parse regenerated markdown back → verify field fidelity
253
+ const reparsed = parseDecisionsTable(regeneratedMd);
254
+ const reparsedSaved = reparsed.find(d => d.id === saved.id);
255
+ assertTrue(reparsedSaved !== undefined, `lifecycle: reparsed markdown contains ${saved.id}`);
256
+ assertEq(reparsedSaved?.choice, 'option Z', 'lifecycle: round-trip choice preserved');
257
+ assertEq(reparsedSaved?.rationale, 'proves round-trip fidelity', 'lifecycle: round-trip rationale preserved');
258
+
259
+ // ── Step 8: DB consistency — total count sanity ─────────────────────
260
+ const finalCount = queryDecisions().length;
261
+ // Original 14 + 1 re-import + 1 saveDecisionToDb = 16
262
+ assertTrue(finalCount === DECISIONS_COUNT + 2, `lifecycle: final DB count = ${DECISIONS_COUNT + 2} (got ${finalCount})`);
263
+
264
+ closeDatabase();
265
+ } finally {
266
+ closeDatabase();
267
+ rmSync(base, { recursive: true, force: true });
268
+ }
269
+ }
270
+
271
+ report();
272
+ }
273
+
274
+ main().catch((error) => {
275
+ console.error(error);
276
+ process.exit(1);
277
+ });