gsd-pi 2.33.1 → 2.34.0-dev.6769913

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1061) hide show
  1. package/dist/bundled-resource-path.d.ts +8 -0
  2. package/dist/bundled-resource-path.js +14 -0
  3. package/dist/cli.js +16 -0
  4. package/dist/headless-query.js +6 -6
  5. package/dist/resource-loader.d.ts +2 -0
  6. package/dist/resource-loader.js +39 -4
  7. package/dist/resources/extensions/ask-user-questions.js +217 -0
  8. package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
  9. package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
  10. package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
  11. package/dist/resources/extensions/async-jobs/index.js +119 -0
  12. package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
  13. package/dist/resources/extensions/aws-auth/index.js +138 -0
  14. package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
  15. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
  16. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
  17. package/dist/resources/extensions/bg-shell/index.js +41 -0
  18. package/dist/resources/extensions/bg-shell/interaction.js +160 -0
  19. package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
  20. package/dist/resources/extensions/bg-shell/overlay.js +378 -0
  21. package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
  22. package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
  23. package/dist/resources/extensions/bg-shell/types.js +96 -0
  24. package/dist/resources/extensions/bg-shell/utilities.js +50 -0
  25. package/dist/resources/extensions/browser-tools/capture.js +179 -0
  26. package/dist/resources/extensions/browser-tools/core.js +899 -0
  27. package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
  28. package/dist/resources/extensions/browser-tools/index.js +123 -0
  29. package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
  30. package/dist/resources/extensions/browser-tools/refs.js +254 -0
  31. package/dist/resources/extensions/browser-tools/settle.js +173 -0
  32. package/dist/resources/extensions/browser-tools/state.js +126 -0
  33. package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
  34. package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
  35. package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
  36. package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
  37. package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
  38. package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
  39. package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
  40. package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
  41. package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
  42. package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
  43. package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
  44. package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
  45. package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
  46. package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
  47. package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
  48. package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
  49. package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
  50. package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
  51. package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
  52. package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
  53. package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
  54. package/dist/resources/extensions/browser-tools/utils.js +490 -0
  55. package/dist/resources/extensions/context7/index.js +337 -0
  56. package/dist/resources/extensions/get-secrets-from-user.js +492 -0
  57. package/dist/resources/extensions/google-search/index.js +373 -0
  58. package/dist/resources/extensions/gsd/activity-log.js +146 -0
  59. package/dist/resources/extensions/gsd/atomic-write.js +38 -0
  60. package/dist/resources/extensions/gsd/auto/session.js +182 -0
  61. package/dist/resources/extensions/gsd/auto-budget.js +30 -0
  62. package/dist/resources/extensions/gsd/auto-dashboard.js +429 -0
  63. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +185 -0
  64. package/dist/resources/extensions/gsd/auto-dispatch.js +353 -0
  65. package/dist/resources/extensions/gsd/auto-loop.js +956 -0
  66. package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
  67. package/dist/resources/extensions/gsd/auto-observability.js +56 -0
  68. package/dist/resources/extensions/gsd/auto-post-unit.js +385 -0
  69. package/dist/resources/extensions/gsd/auto-prompts.js +1153 -0
  70. package/dist/resources/extensions/gsd/auto-recovery.js +512 -0
  71. package/dist/resources/extensions/gsd/auto-start.js +414 -0
  72. package/dist/resources/extensions/gsd/auto-supervisor.js +47 -0
  73. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
  74. package/dist/resources/extensions/gsd/auto-timers.js +180 -0
  75. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  76. package/dist/resources/extensions/gsd/auto-unit-closeout.js +30 -0
  77. package/dist/resources/extensions/gsd/auto-verification.js +171 -0
  78. package/dist/resources/extensions/gsd/auto-worktree-sync.js +167 -0
  79. package/dist/resources/extensions/gsd/auto-worktree.js +830 -0
  80. package/dist/resources/extensions/gsd/auto.js +765 -0
  81. package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
  82. package/dist/resources/extensions/gsd/captures.js +354 -0
  83. package/dist/resources/extensions/gsd/changelog.js +162 -0
  84. package/dist/resources/extensions/gsd/claude-import.js +540 -0
  85. package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
  86. package/dist/resources/extensions/gsd/commands-bootstrap.js +224 -0
  87. package/dist/resources/extensions/gsd/commands-config.js +89 -0
  88. package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
  89. package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
  90. package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
  91. package/dist/resources/extensions/gsd/commands-logs.js +468 -0
  92. package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
  93. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
  94. package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
  95. package/dist/resources/extensions/gsd/commands.js +1031 -0
  96. package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
  97. package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
  98. package/dist/resources/extensions/gsd/context-budget.js +187 -0
  99. package/dist/resources/extensions/gsd/context-store.js +165 -0
  100. package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
  101. package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
  102. package/dist/resources/extensions/gsd/db-writer.js +298 -0
  103. package/dist/resources/extensions/gsd/debug-logger.js +161 -0
  104. package/dist/resources/extensions/gsd/detection.js +373 -0
  105. package/dist/resources/extensions/gsd/diff-context.js +168 -0
  106. package/dist/resources/extensions/gsd/dispatch-guard.js +75 -0
  107. package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  108. package/dist/resources/extensions/gsd/doctor-checks.js +562 -0
  109. package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
  110. package/dist/resources/extensions/gsd/doctor-format.js +71 -0
  111. package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
  112. package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
  113. package/dist/resources/extensions/gsd/doctor-types.js +12 -0
  114. package/dist/resources/extensions/gsd/doctor.js +672 -0
  115. package/dist/resources/extensions/gsd/error-utils.js +6 -0
  116. package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
  117. package/dist/resources/extensions/gsd/exit-command.js +11 -0
  118. package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
  119. package/dist/resources/extensions/gsd/export.js +268 -0
  120. package/dist/resources/extensions/gsd/file-watcher.js +76 -0
  121. package/dist/resources/extensions/gsd/files.js +937 -0
  122. package/dist/resources/extensions/gsd/forensics.js +511 -0
  123. package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
  124. package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
  125. package/dist/resources/extensions/gsd/git-service.js +460 -0
  126. package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
  127. package/dist/resources/extensions/gsd/gsd-db.js +735 -0
  128. package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
  129. package/dist/resources/extensions/gsd/guided-flow.js +1158 -0
  130. package/dist/resources/extensions/gsd/health-widget.js +141 -0
  131. package/dist/resources/extensions/gsd/history.js +118 -0
  132. package/dist/resources/extensions/gsd/index.js +1114 -0
  133. package/dist/resources/extensions/gsd/init-wizard.js +479 -0
  134. package/dist/resources/extensions/gsd/json-persistence.js +62 -0
  135. package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
  136. package/dist/resources/extensions/gsd/key-manager.js +829 -0
  137. package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
  138. package/dist/resources/extensions/gsd/md-importer.js +440 -0
  139. package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
  140. package/dist/resources/extensions/gsd/memory-store.js +351 -0
  141. package/dist/resources/extensions/gsd/metrics.js +377 -0
  142. package/dist/resources/extensions/gsd/migrate/command.js +157 -0
  143. package/dist/resources/extensions/gsd/migrate/index.js +7 -0
  144. package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
  145. package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
  146. package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
  147. package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
  148. package/dist/resources/extensions/gsd/migrate/types.js +4 -0
  149. package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
  150. package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
  151. package/dist/resources/extensions/gsd/migrate-external.js +130 -0
  152. package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
  153. package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
  154. package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
  155. package/dist/resources/extensions/gsd/model-router.js +187 -0
  156. package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
  157. package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
  158. package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
  159. package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
  160. package/dist/resources/extensions/gsd/notifications.js +58 -0
  161. package/dist/resources/extensions/gsd/observability-validator.js +398 -0
  162. package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
  163. package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
  164. package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
  165. package/dist/resources/extensions/gsd/paths.js +414 -0
  166. package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
  167. package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
  168. package/dist/resources/extensions/gsd/preferences-models.js +294 -0
  169. package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
  170. package/dist/resources/extensions/gsd/preferences-types.js +73 -0
  171. package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
  172. package/dist/resources/extensions/gsd/preferences.js +325 -0
  173. package/dist/resources/extensions/gsd/progress-score.js +102 -0
  174. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
  175. package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
  176. package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
  177. package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
  178. package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
  179. package/dist/resources/extensions/gsd/queue-order.js +178 -0
  180. package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
  181. package/dist/resources/extensions/gsd/quick.js +206 -0
  182. package/dist/resources/extensions/gsd/repo-identity.js +187 -0
  183. package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
  184. package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
  185. package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
  186. package/dist/resources/extensions/gsd/routing-history.js +210 -0
  187. package/dist/resources/extensions/gsd/safe-fs.js +52 -0
  188. package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
  189. package/dist/resources/extensions/gsd/session-forensics.js +427 -0
  190. package/dist/resources/extensions/gsd/session-lock.js +397 -0
  191. package/dist/resources/extensions/gsd/session-status-io.js +134 -0
  192. package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
  193. package/dist/resources/extensions/gsd/skill-health.js +324 -0
  194. package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
  195. package/dist/resources/extensions/gsd/state.js +653 -0
  196. package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
  197. package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
  198. package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
  199. package/dist/resources/extensions/gsd/token-counter.js +54 -0
  200. package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
  201. package/dist/resources/extensions/gsd/triage-ui.js +125 -0
  202. package/dist/resources/extensions/gsd/types.js +4 -0
  203. package/dist/resources/extensions/gsd/undo.js +205 -0
  204. package/dist/resources/extensions/gsd/unit-id.js +7 -0
  205. package/dist/resources/extensions/gsd/unit-runtime.js +131 -0
  206. package/dist/resources/extensions/gsd/validate-directory.js +143 -0
  207. package/dist/resources/extensions/gsd/verification-evidence.js +122 -0
  208. package/dist/resources/extensions/gsd/verification-gate.js +514 -0
  209. package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
  210. package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
  211. package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
  212. package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
  213. package/dist/resources/extensions/gsd/workspace-index.js +139 -0
  214. package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
  215. package/dist/resources/extensions/gsd/worktree-command.js +682 -0
  216. package/dist/resources/extensions/gsd/worktree-manager.js +358 -0
  217. package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
  218. package/dist/resources/extensions/gsd/worktree.js +199 -0
  219. package/dist/resources/extensions/mac-tools/index.js +768 -0
  220. package/dist/resources/extensions/mcp-client/index.js +364 -0
  221. package/dist/resources/extensions/package.json +3 -0
  222. package/dist/resources/extensions/remote-questions/config.js +70 -0
  223. package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
  224. package/dist/resources/extensions/remote-questions/format.js +234 -0
  225. package/dist/resources/extensions/remote-questions/http-client.js +43 -0
  226. package/dist/resources/extensions/remote-questions/manager.js +156 -0
  227. package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
  228. package/dist/resources/extensions/remote-questions/notify.js +89 -0
  229. package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
  230. package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
  231. package/dist/resources/extensions/remote-questions/status.js +25 -0
  232. package/dist/resources/extensions/remote-questions/store.js +70 -0
  233. package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
  234. package/dist/resources/extensions/remote-questions/types.js +5 -0
  235. package/dist/resources/extensions/search-the-web/cache.js +74 -0
  236. package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
  237. package/dist/resources/extensions/search-the-web/format.js +161 -0
  238. package/dist/resources/extensions/search-the-web/http.js +178 -0
  239. package/dist/resources/extensions/search-the-web/index.js +41 -0
  240. package/dist/resources/extensions/search-the-web/native-search.js +166 -0
  241. package/dist/resources/extensions/search-the-web/provider.js +143 -0
  242. package/dist/resources/extensions/search-the-web/tavily.js +82 -0
  243. package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
  244. package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
  245. package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
  246. package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
  247. package/dist/resources/extensions/shared/confirm-ui.js +96 -0
  248. package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
  249. package/dist/resources/extensions/shared/frontmatter.js +109 -0
  250. package/dist/resources/extensions/shared/interview-ui.js +569 -0
  251. package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
  252. package/dist/resources/extensions/shared/next-action-ui.js +168 -0
  253. package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
  254. package/dist/resources/extensions/shared/sanitize.js +17 -0
  255. package/dist/resources/extensions/shared/terminal.js +21 -0
  256. package/dist/resources/extensions/shared/ui.js +245 -0
  257. package/dist/resources/extensions/shared/wizard-ui.js +478 -0
  258. package/dist/resources/extensions/slash-commands/audit.js +72 -0
  259. package/dist/resources/extensions/slash-commands/clear.js +8 -0
  260. package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
  261. package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
  262. package/dist/resources/extensions/slash-commands/index.js +10 -0
  263. package/dist/resources/extensions/subagent/agents.js +103 -0
  264. package/dist/resources/extensions/subagent/index.js +905 -0
  265. package/dist/resources/extensions/subagent/isolation.js +384 -0
  266. package/dist/resources/extensions/subagent/worker-registry.js +73 -0
  267. package/dist/resources/extensions/ttsr/index.js +144 -0
  268. package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
  269. package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
  270. package/dist/resources/extensions/universal-config/discovery.js +94 -0
  271. package/dist/resources/extensions/universal-config/format.js +178 -0
  272. package/dist/resources/extensions/universal-config/index.js +99 -0
  273. package/dist/resources/extensions/universal-config/scanners.js +574 -0
  274. package/dist/resources/extensions/universal-config/tools.js +57 -0
  275. package/dist/resources/extensions/universal-config/types.js +8 -0
  276. package/dist/resources/extensions/voice/index.js +247 -0
  277. package/dist/startup-timings.d.ts +2 -0
  278. package/dist/startup-timings.js +22 -0
  279. package/dist/tool-bootstrap.js +59 -11
  280. package/dist/worktree-cli.js +7 -7
  281. package/package.json +1 -1
  282. package/packages/native/dist/native.d.ts +0 -2
  283. package/packages/native/dist/native.js +0 -2
  284. package/packages/native/src/native.ts +0 -3
  285. package/packages/pi-agent-core/dist/agent-loop.d.ts +14 -0
  286. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  287. package/packages/pi-agent-core/dist/agent-loop.js +24 -27
  288. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  289. package/packages/pi-agent-core/dist/agent.d.ts +1 -0
  290. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  291. package/packages/pi-agent-core/dist/agent.js +11 -22
  292. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  293. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  294. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  295. package/packages/pi-agent-core/dist/proxy.js +1 -1
  296. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  297. package/packages/pi-agent-core/src/agent-loop.ts +30 -27
  298. package/packages/pi-agent-core/src/agent.ts +12 -23
  299. package/packages/pi-agent-core/src/proxy.ts +1 -1
  300. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  301. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  302. package/packages/pi-ai/dist/api-registry.js +0 -10
  303. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  304. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  305. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  306. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  307. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  308. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  309. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  310. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  311. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  312. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  313. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  314. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  315. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  316. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  317. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  318. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  319. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  320. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  321. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  322. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  323. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  324. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  325. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  326. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  327. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  328. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  329. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  330. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  331. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  332. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  333. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  334. package/packages/pi-ai/dist/utils/validation.js +0 -14
  335. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  336. package/packages/pi-ai/src/api-registry.ts +0 -12
  337. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  338. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  339. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  340. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  341. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  342. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  343. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  344. package/packages/pi-ai/src/utils/validation.ts +0 -15
  345. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  346. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  347. package/packages/pi-coding-agent/dist/config.js +4 -8
  348. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  349. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +4 -0
  350. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  351. package/packages/pi-coding-agent/dist/core/agent-session.js +24 -5
  352. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  353. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  354. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  355. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  356. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  357. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  358. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  359. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  360. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  361. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
  362. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  363. package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
  364. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  365. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -5
  366. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  367. package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
  368. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  369. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  370. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  371. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  372. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  373. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  374. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  375. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  376. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  377. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +0 -2
  378. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  379. package/packages/pi-coding-agent/dist/core/lsp/config.js +0 -7
  380. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  381. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  382. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  383. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  384. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  385. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  386. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  387. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +1 -1
  388. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  389. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  390. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  391. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  392. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  393. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  394. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  395. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  396. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  397. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  398. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  399. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  400. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  401. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  402. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  403. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  404. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  405. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  406. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  407. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  408. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  409. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -4
  410. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  411. package/packages/pi-coding-agent/dist/core/session-manager.js +2 -4
  412. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  413. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +8 -12
  414. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  415. package/packages/pi-coding-agent/dist/core/settings-manager.js +78 -168
  416. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  417. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  418. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  419. package/packages/pi-coding-agent/dist/index.js +1 -1
  420. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  421. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  422. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  423. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  424. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  425. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  426. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  427. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  428. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  429. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  430. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  431. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  432. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  433. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  434. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  435. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  436. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  437. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
  438. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  439. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
  440. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  441. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
  442. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  443. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
  444. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
  445. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  446. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  447. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  448. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  449. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  450. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  451. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  452. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  453. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  454. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  455. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  456. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  457. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  458. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  459. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  460. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  461. package/packages/pi-coding-agent/package.json +1 -1
  462. package/packages/pi-coding-agent/src/config.ts +5 -10
  463. package/packages/pi-coding-agent/src/core/agent-session.ts +26 -5
  464. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  465. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
  466. package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
  467. package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -13
  468. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  469. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  470. package/packages/pi-coding-agent/src/core/lsp/config.ts +0 -11
  471. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  472. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +1 -1
  473. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  474. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  475. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  476. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  477. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  478. package/packages/pi-coding-agent/src/core/session-manager.ts +2 -4
  479. package/packages/pi-coding-agent/src/core/settings-manager.ts +87 -166
  480. package/packages/pi-coding-agent/src/index.ts +1 -0
  481. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  482. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  483. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  484. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  485. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
  486. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
  487. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  488. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  489. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  490. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  491. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  492. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  493. package/packages/pi-tui/dist/components/editor.js +1 -1
  494. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  495. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  496. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  497. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  498. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  499. package/packages/pi-tui/dist/tui.d.ts +0 -22
  500. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  501. package/packages/pi-tui/dist/tui.js +6 -272
  502. package/packages/pi-tui/dist/tui.js.map +1 -1
  503. package/packages/pi-tui/dist/utils.d.ts +0 -7
  504. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  505. package/packages/pi-tui/dist/utils.js +0 -44
  506. package/packages/pi-tui/dist/utils.js.map +1 -1
  507. package/packages/pi-tui/src/components/editor.ts +1 -1
  508. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  509. package/packages/pi-tui/src/tui.ts +11 -312
  510. package/packages/pi-tui/src/utils.ts +0 -43
  511. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  512. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  513. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  514. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  515. package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
  516. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  517. package/pkg/dist/modes/interactive/theme/theme.js +6 -23
  518. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  519. package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
  520. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  521. package/pkg/dist/modes/interactive/theme/themes.js +175 -0
  522. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
  523. package/pkg/package.json +1 -1
  524. package/src/resources/extensions/bg-shell/index.ts +41 -46
  525. package/src/resources/extensions/browser-tools/index.ts +156 -67
  526. package/src/resources/extensions/gsd/auto/session.ts +47 -30
  527. package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
  528. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
  529. package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
  530. package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
  531. package/src/resources/extensions/gsd/auto-observability.ts +4 -2
  532. package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
  533. package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
  534. package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
  535. package/src/resources/extensions/gsd/auto-start.ts +440 -354
  536. package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
  537. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
  538. package/src/resources/extensions/gsd/auto-timers.ts +3 -4
  539. package/src/resources/extensions/gsd/auto-verification.ts +76 -72
  540. package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
  541. package/src/resources/extensions/gsd/auto-worktree.ts +453 -133
  542. package/src/resources/extensions/gsd/auto.ts +516 -1189
  543. package/src/resources/extensions/gsd/captures.ts +10 -4
  544. package/src/resources/extensions/gsd/changelog.ts +213 -0
  545. package/src/resources/extensions/gsd/commands-bootstrap.ts +253 -0
  546. package/src/resources/extensions/gsd/commands.ts +48 -32
  547. package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
  548. package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  549. package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
  550. package/src/resources/extensions/gsd/git-service.ts +32 -12
  551. package/src/resources/extensions/gsd/gitignore.ts +4 -2
  552. package/src/resources/extensions/gsd/gsd-db.ts +375 -180
  553. package/src/resources/extensions/gsd/guided-flow.ts +22 -11
  554. package/src/resources/extensions/gsd/index.ts +76 -163
  555. package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
  556. package/src/resources/extensions/gsd/progress-score.ts +65 -200
  557. package/src/resources/extensions/gsd/quick.ts +121 -76
  558. package/src/resources/extensions/gsd/repo-identity.ts +56 -22
  559. package/src/resources/extensions/gsd/session-lock.ts +17 -0
  560. package/src/resources/extensions/gsd/templates/preferences.md +1 -0
  561. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
  562. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
  563. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  564. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
  565. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
  566. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
  567. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
  568. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
  569. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
  570. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
  571. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
  572. package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
  573. package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
  574. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
  575. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
  576. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
  577. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
  578. package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
  579. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
  580. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
  581. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
  582. package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
  583. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
  584. package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
  585. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
  586. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -136
  587. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  588. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  589. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
  590. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
  591. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
  592. package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
  593. package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
  594. package/src/resources/extensions/gsd/types.ts +90 -77
  595. package/src/resources/extensions/gsd/undo.ts +42 -46
  596. package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
  597. package/src/resources/extensions/gsd/verification-evidence.ts +0 -2
  598. package/src/resources/extensions/gsd/verification-gate.ts +4 -16
  599. package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
  600. package/src/resources/extensions/gsd/worktree-command.ts +29 -11
  601. package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
  602. package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
  603. package/src/resources/extensions/gsd/worktree.ts +7 -44
  604. package/src/resources/extensions/mcp-client/index.ts +2 -1
  605. package/src/resources/extensions/package.json +3 -0
  606. package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
  607. package/src/resources/extensions/search-the-web/index.ts +35 -52
  608. package/src/resources/extensions/search-the-web/tavily.ts +1 -1
  609. package/dist/resources/extensions/ask-user-questions.ts +0 -290
  610. package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
  611. package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
  612. package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
  613. package/dist/resources/extensions/async-jobs/index.ts +0 -141
  614. package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
  615. package/dist/resources/extensions/aws-auth/index.ts +0 -144
  616. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
  617. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
  618. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
  619. package/dist/resources/extensions/bg-shell/index.ts +0 -59
  620. package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
  621. package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
  622. package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
  623. package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
  624. package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
  625. package/dist/resources/extensions/bg-shell/types.ts +0 -303
  626. package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
  627. package/dist/resources/extensions/browser-tools/capture.ts +0 -199
  628. package/dist/resources/extensions/browser-tools/core.ts +0 -1196
  629. package/dist/resources/extensions/browser-tools/index.ts +0 -71
  630. package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
  631. package/dist/resources/extensions/browser-tools/refs.ts +0 -264
  632. package/dist/resources/extensions/browser-tools/settle.ts +0 -197
  633. package/dist/resources/extensions/browser-tools/state.ts +0 -408
  634. package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
  635. package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
  636. package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
  637. package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
  638. package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
  639. package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
  640. package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
  641. package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
  642. package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
  643. package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
  644. package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
  645. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
  646. package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
  647. package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
  648. package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
  649. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
  650. package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
  651. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
  652. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
  653. package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
  654. package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
  655. package/dist/resources/extensions/browser-tools/utils.ts +0 -660
  656. package/dist/resources/extensions/context7/index.ts +0 -428
  657. package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
  658. package/dist/resources/extensions/google-search/index.ts +0 -466
  659. package/dist/resources/extensions/gsd/activity-log.ts +0 -162
  660. package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
  661. package/dist/resources/extensions/gsd/auto/session.ts +0 -236
  662. package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
  663. package/dist/resources/extensions/gsd/auto-constants.ts +0 -6
  664. package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
  665. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
  666. package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
  667. package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
  668. package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
  669. package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
  670. package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
  671. package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
  672. package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
  673. package/dist/resources/extensions/gsd/auto-start.ts +0 -483
  674. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  675. package/dist/resources/extensions/gsd/auto-supervisor.ts +0 -61
  676. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
  677. package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
  678. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
  679. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
  680. package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
  681. package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
  682. package/dist/resources/extensions/gsd/auto.ts +0 -1834
  683. package/dist/resources/extensions/gsd/captures.ts +0 -427
  684. package/dist/resources/extensions/gsd/claude-import.ts +0 -656
  685. package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
  686. package/dist/resources/extensions/gsd/commands-config.ts +0 -102
  687. package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
  688. package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
  689. package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
  690. package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
  691. package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
  692. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
  693. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
  694. package/dist/resources/extensions/gsd/commands.ts +0 -1149
  695. package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
  696. package/dist/resources/extensions/gsd/context-budget.ts +0 -266
  697. package/dist/resources/extensions/gsd/context-store.ts +0 -195
  698. package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
  699. package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
  700. package/dist/resources/extensions/gsd/db-writer.ts +0 -360
  701. package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
  702. package/dist/resources/extensions/gsd/detection.ts +0 -470
  703. package/dist/resources/extensions/gsd/diff-context.ts +0 -214
  704. package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
  705. package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
  706. package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
  707. package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
  708. package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
  709. package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
  710. package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
  711. package/dist/resources/extensions/gsd/doctor.ts +0 -722
  712. package/dist/resources/extensions/gsd/error-utils.ts +0 -6
  713. package/dist/resources/extensions/gsd/exit-command.ts +0 -18
  714. package/dist/resources/extensions/gsd/export.ts +0 -317
  715. package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
  716. package/dist/resources/extensions/gsd/files.ts +0 -1058
  717. package/dist/resources/extensions/gsd/forensics.ts +0 -629
  718. package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
  719. package/dist/resources/extensions/gsd/git-service.ts +0 -580
  720. package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
  721. package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
  722. package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
  723. package/dist/resources/extensions/gsd/health-widget.ts +0 -167
  724. package/dist/resources/extensions/gsd/history.ts +0 -143
  725. package/dist/resources/extensions/gsd/index.ts +0 -1390
  726. package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
  727. package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
  728. package/dist/resources/extensions/gsd/key-manager.ts +0 -996
  729. package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
  730. package/dist/resources/extensions/gsd/md-importer.ts +0 -527
  731. package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
  732. package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
  733. package/dist/resources/extensions/gsd/memory-store.ts +0 -441
  734. package/dist/resources/extensions/gsd/metrics.ts +0 -532
  735. package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
  736. package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
  737. package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
  738. package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
  739. package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
  740. package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
  741. package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
  742. package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
  743. package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
  744. package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
  745. package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
  746. package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
  747. package/dist/resources/extensions/gsd/model-router.ts +0 -256
  748. package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
  749. package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
  750. package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
  751. package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
  752. package/dist/resources/extensions/gsd/notifications.ts +0 -87
  753. package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
  754. package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
  755. package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
  756. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
  757. package/dist/resources/extensions/gsd/paths.ts +0 -449
  758. package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
  759. package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
  760. package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
  761. package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
  762. package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
  763. package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
  764. package/dist/resources/extensions/gsd/preferences.ts +0 -416
  765. package/dist/resources/extensions/gsd/progress-score.ts +0 -273
  766. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
  767. package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
  768. package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
  769. package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
  770. package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
  771. package/dist/resources/extensions/gsd/queue-order.ts +0 -230
  772. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
  773. package/dist/resources/extensions/gsd/quick.ts +0 -212
  774. package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
  775. package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
  776. package/dist/resources/extensions/gsd/routing-history.ts +0 -286
  777. package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
  778. package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
  779. package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
  780. package/dist/resources/extensions/gsd/session-lock.ts +0 -426
  781. package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
  782. package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
  783. package/dist/resources/extensions/gsd/skill-health.ts +0 -417
  784. package/dist/resources/extensions/gsd/state.ts +0 -727
  785. package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
  786. package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
  787. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
  788. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
  789. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
  790. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
  791. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
  792. package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  793. package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
  794. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
  795. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
  796. package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  797. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
  798. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
  799. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  800. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
  801. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
  802. package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
  803. package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
  804. package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
  805. package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
  806. package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
  807. package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
  808. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
  809. package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
  810. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
  811. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
  812. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  813. package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
  814. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
  815. package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
  816. package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
  817. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
  818. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
  819. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
  820. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
  821. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
  822. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
  823. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
  824. package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
  825. package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
  826. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
  827. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
  828. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
  829. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  830. package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
  831. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
  832. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
  833. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
  834. package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
  835. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
  836. package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
  837. package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
  838. package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
  839. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
  840. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
  841. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
  842. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
  843. package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
  844. package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
  845. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
  846. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
  847. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
  848. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
  849. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
  850. package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
  851. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
  852. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
  853. package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
  854. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
  855. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
  856. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
  857. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
  858. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
  859. package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  860. package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
  861. package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
  862. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
  863. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  864. package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
  865. package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
  866. package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
  867. package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
  868. package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
  869. package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
  870. package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
  871. package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
  872. package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
  873. package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
  874. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
  875. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
  876. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
  877. package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
  878. package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
  879. package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
  880. package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
  881. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
  882. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
  883. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
  884. package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
  885. package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
  886. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
  887. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
  888. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
  889. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
  890. package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
  891. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
  892. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
  893. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
  894. package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
  895. package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
  896. package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
  897. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
  898. package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
  899. package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
  900. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
  901. package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
  902. package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  903. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
  904. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
  905. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  906. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
  907. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
  908. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
  909. package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
  910. package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
  911. package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
  912. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
  913. package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
  914. package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
  915. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
  916. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
  917. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
  918. package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
  919. package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
  920. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
  921. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
  922. package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
  923. package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
  924. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  925. package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
  926. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
  927. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
  928. package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
  929. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
  930. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
  931. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
  932. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  933. package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
  934. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
  935. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  936. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
  937. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
  938. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
  939. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
  940. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
  941. package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
  942. package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
  943. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
  944. package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
  945. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
  946. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
  947. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
  948. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
  949. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
  950. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
  951. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
  952. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
  953. package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
  954. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
  955. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
  956. package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
  957. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
  958. package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
  959. package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
  960. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
  961. package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
  962. package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
  963. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
  964. package/dist/resources/extensions/gsd/token-counter.ts +0 -65
  965. package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
  966. package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
  967. package/dist/resources/extensions/gsd/types.ts +0 -425
  968. package/dist/resources/extensions/gsd/undo.ts +0 -223
  969. package/dist/resources/extensions/gsd/unit-id.ts +0 -14
  970. package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
  971. package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
  972. package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
  973. package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
  974. package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
  975. package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
  976. package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
  977. package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
  978. package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
  979. package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
  980. package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
  981. package/dist/resources/extensions/gsd/worktree.ts +0 -257
  982. package/dist/resources/extensions/mac-tools/index.ts +0 -852
  983. package/dist/resources/extensions/mcp-client/index.ts +0 -459
  984. package/dist/resources/extensions/remote-questions/config.ts +0 -83
  985. package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
  986. package/dist/resources/extensions/remote-questions/format.ts +0 -315
  987. package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
  988. package/dist/resources/extensions/remote-questions/manager.ts +0 -184
  989. package/dist/resources/extensions/remote-questions/notify.ts +0 -90
  990. package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
  991. package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
  992. package/dist/resources/extensions/remote-questions/status.ts +0 -31
  993. package/dist/resources/extensions/remote-questions/store.ts +0 -81
  994. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
  995. package/dist/resources/extensions/remote-questions/types.ts +0 -102
  996. package/dist/resources/extensions/search-the-web/cache.ts +0 -78
  997. package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
  998. package/dist/resources/extensions/search-the-web/format.ts +0 -258
  999. package/dist/resources/extensions/search-the-web/http.ts +0 -238
  1000. package/dist/resources/extensions/search-the-web/index.ts +0 -65
  1001. package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
  1002. package/dist/resources/extensions/search-the-web/provider.ts +0 -148
  1003. package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
  1004. package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
  1005. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
  1006. package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
  1007. package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
  1008. package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
  1009. package/dist/resources/extensions/shared/frontmatter.ts +0 -117
  1010. package/dist/resources/extensions/shared/interview-ui.ts +0 -613
  1011. package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
  1012. package/dist/resources/extensions/shared/sanitize.ts +0 -19
  1013. package/dist/resources/extensions/shared/terminal.ts +0 -23
  1014. package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
  1015. package/dist/resources/extensions/shared/ui.ts +0 -400
  1016. package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
  1017. package/dist/resources/extensions/slash-commands/audit.ts +0 -88
  1018. package/dist/resources/extensions/slash-commands/clear.ts +0 -10
  1019. package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
  1020. package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
  1021. package/dist/resources/extensions/slash-commands/index.ts +0 -12
  1022. package/dist/resources/extensions/subagent/agents.ts +0 -126
  1023. package/dist/resources/extensions/subagent/index.ts +0 -1121
  1024. package/dist/resources/extensions/subagent/isolation.ts +0 -501
  1025. package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
  1026. package/dist/resources/extensions/ttsr/index.ts +0 -168
  1027. package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
  1028. package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
  1029. package/dist/resources/extensions/universal-config/discovery.ts +0 -104
  1030. package/dist/resources/extensions/universal-config/format.ts +0 -191
  1031. package/dist/resources/extensions/universal-config/index.ts +0 -120
  1032. package/dist/resources/extensions/universal-config/scanners.ts +0 -642
  1033. package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
  1034. package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
  1035. package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
  1036. package/dist/resources/extensions/universal-config/tools.ts +0 -60
  1037. package/dist/resources/extensions/universal-config/types.ts +0 -135
  1038. package/dist/resources/extensions/voice/index.ts +0 -272
  1039. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
  1040. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
  1041. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  1042. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  1043. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
  1044. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
  1045. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
  1046. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
  1047. package/pkg/dist/modes/interactive/theme/dark.json +0 -85
  1048. package/pkg/dist/modes/interactive/theme/light.json +0 -84
  1049. package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
  1050. package/src/resources/extensions/gsd/auto-constants.ts +0 -6
  1051. package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
  1052. package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  1053. package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
  1054. package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  1055. package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  1056. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  1057. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  1058. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  1059. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  1060. package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  1061. package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
@@ -1,1272 +0,0 @@
1
- /**
2
- * Token Optimization Benchmark -- measures actual savings from all modules
3
- * using realistic GSD prompt content.
4
- *
5
- * This test validates that the optimization suite achieves its documented
6
- * savings targets and reports precise metrics.
7
- */
8
-
9
- import { describe, it } from "node:test";
10
- import assert from "node:assert/strict";
11
-
12
- import {
13
- formatDecisionsCompact,
14
- formatRequirementsCompact,
15
- measureSavings,
16
- } from "../structured-data-formatter.js";
17
- import { compressPrompt, compressToTarget } from "../prompt-compressor.js";
18
- import { chunkByRelevance } from "../semantic-chunker.js";
19
- import { distillSummaries } from "../summary-distiller.js";
20
- import {
21
- optimizeForCaching,
22
- section,
23
- estimateCacheSavings,
24
- } from "../prompt-cache-optimizer.js";
25
- import {
26
- estimateTokensForProvider,
27
- getCharsPerToken,
28
- } from "../token-counter.js";
29
- import { computeBudgets } from "../context-budget.js";
30
-
31
- // ---------------------------------------------------------------------------
32
- // Fixture: Decisions (8 entries with 200-400 chars each)
33
- // ---------------------------------------------------------------------------
34
-
35
- function buildDecisions() {
36
- return [
37
- {
38
- id: "D001",
39
- when_context: "M001/S01",
40
- scope: "architecture",
41
- decision:
42
- "Select a database engine for artifact storage that supports embedded operation without requiring a separate server process, while providing ACID guarantees and WAL mode for concurrent reads during background indexing operations",
43
- choice:
44
- "SQLite with WAL mode enabled and PRAGMA journal_mode=WAL; connection pool size of 1 writer + 4 readers to prevent lock contention while maximizing read throughput",
45
- rationale:
46
- "Eliminates external dependency on PostgreSQL or MySQL server, reducing deployment complexity. SQLite WAL mode provides concurrent read access during writes, which is critical for background indexing while the user interacts with the system",
47
- revisable: "no",
48
- },
49
- {
50
- id: "D002",
51
- when_context: "M001/S02",
52
- scope: "testing",
53
- decision:
54
- "Establish the testing framework and assertion library for all unit and integration tests across the project, ensuring compatibility with TypeScript and ESM module resolution",
55
- choice:
56
- "Use node:test as the primary test runner with node:assert/strict for assertions; avoid Jest due to ESM compatibility issues and excessive configuration overhead for TypeScript projects",
57
- rationale:
58
- "Built-in Node.js test runner requires zero external dependencies, supports TypeScript via --experimental-strip-types, and produces TAP output compatible with CI systems. This reduces package install time by ~15 seconds",
59
- revisable: "yes",
60
- },
61
- {
62
- id: "D003",
63
- when_context: "M001/S03",
64
- scope: "observability",
65
- decision:
66
- "Define the observability strategy for tracking token usage, cache hit rates, and prompt compression efficiency across all provider integrations in the dispatch pipeline",
67
- choice:
68
- "Structured JSON logging with JSONL format to stderr; metrics collected in-memory with periodic flush to SQLite metrics table; no external APM dependency required for core functionality",
69
- rationale:
70
- "JSONL format enables easy parsing by external tools (jq, Datadog agent) without coupling the core system to any specific observability vendor. In-memory accumulation prevents I/O bottlenecks during rapid dispatch cycles",
71
- revisable: "yes",
72
- },
73
- {
74
- id: "D004",
75
- when_context: "M001/S04",
76
- scope: "security",
77
- decision:
78
- "Implement access control for environment variable injection into executor prompts, preventing accidental exposure of secrets like API keys, database credentials, and signing tokens",
79
- choice:
80
- "Allowlist-based environment variable filter with pattern matching; only variables matching GSD_*, NODE_ENV, and explicitly configured patterns are passed to executor prompts; all others are redacted",
81
- rationale:
82
- "Allowlist approach is safer than denylist because new environment variables are blocked by default. Pattern matching allows project-specific overrides via preferences without modifying core code",
83
- revisable: "no",
84
- },
85
- {
86
- id: "D005",
87
- when_context: "M002/S01",
88
- scope: "performance",
89
- decision:
90
- "Optimize prompt assembly latency for the dispatch pipeline to ensure sub-100ms total preparation time including context gathering, compression, and template rendering",
91
- choice:
92
- "Lazy evaluation with memoized context sections; compress only when content exceeds budget threshold; cache compiled templates in memory across dispatch cycles within the same session",
93
- rationale:
94
- "Profiling showed that eager compression of all sections added 40ms overhead even when total content was within budget. Lazy evaluation skips unnecessary work in the common case where context fits without compression",
95
- revisable: "yes",
96
- },
97
- {
98
- id: "D006",
99
- when_context: "M002/S02",
100
- scope: "architecture",
101
- decision:
102
- "Design the plugin system architecture to support third-party extensions for custom skill definitions, prompt templates, and model routing rules without modifying core GSD code",
103
- choice:
104
- "File-based plugin discovery with JSON manifest validation; plugins loaded from .gsd/plugins/ directory with sandboxed execution context; no dynamic require() or eval() permitted",
105
- rationale:
106
- "File-based discovery avoids npm registry dependency for plugin distribution. Sandboxed execution prevents plugins from modifying core state or accessing the file system outside their declared scope",
107
- revisable: "yes",
108
- },
109
- {
110
- id: "D007",
111
- when_context: "M002/S03",
112
- scope: "testing",
113
- decision:
114
- "Establish integration test patterns for verifying end-to-end dispatch flows including context gathering, prompt assembly, provider API calls, and response processing",
115
- choice:
116
- "Recorded HTTP fixtures with deterministic replay; test harness intercepts provider API calls and returns pre-recorded responses; fixture files stored alongside test files in tests/fixtures/ directory",
117
- rationale:
118
- "Recorded fixtures eliminate flaky tests caused by network issues or API rate limits. Deterministic replay ensures tests produce identical results across environments and CI runs",
119
- revisable: "yes",
120
- },
121
- {
122
- id: "D008",
123
- when_context: "M002/S04",
124
- scope: "observability",
125
- decision:
126
- "Implement cost tracking and projection for token usage across multiple providers, enabling budget alerts and automated throttling when spending approaches configured limits",
127
- choice:
128
- "Per-request cost calculation using model cost table with provider-specific pricing; rolling 24-hour window for budget tracking; configurable alert thresholds at 50%, 75%, and 90% of daily budget",
129
- rationale:
130
- "Rolling window prevents budget resets at midnight from causing spending spikes. Per-request calculation ensures accurate cost attribution even when switching between models mid-session",
131
- revisable: "no",
132
- },
133
- ];
134
- }
135
-
136
- // ---------------------------------------------------------------------------
137
- // Fixture: Requirements (6 entries with 300-500 chars each)
138
- // ---------------------------------------------------------------------------
139
-
140
- function buildRequirements() {
141
- return [
142
- {
143
- id: "R001",
144
- class: "non-functional",
145
- status: "active",
146
- description:
147
- "Response latency for prompt assembly must remain below 100ms at the 99th percentile under normal operating conditions with up to 200K tokens of context window utilization",
148
- why: "Users experience noticeable delay when prompt assembly exceeds 100ms, compounding with network latency to the provider API. Sub-100ms assembly ensures total round-trip time stays under 2 seconds for interactive workflows",
149
- primary_owner: "S01",
150
- validation:
151
- "Benchmark test measures P99 assembly latency across 1000 iterations with realistic context sizes. Alert triggers if P99 exceeds 80ms to provide early warning before the 100ms threshold is breached",
152
- },
153
- {
154
- id: "R002",
155
- class: "functional",
156
- status: "active",
157
- description:
158
- "Token optimization pipeline must achieve at least 30% character savings on structured data (decisions, requirements) when using compact format versus standard markdown table format",
159
- why: "Context window capacity is the primary constraint for complex multi-task dispatches. A 30% savings on structured data frees approximately 15K characters for additional code context or dependency summaries",
160
- primary_owner: "S02",
161
- validation:
162
- "End-to-end benchmark test with realistic decision and requirement fixtures validates savings percentage. Test fails if any optimization module falls below its documented savings target",
163
- },
164
- {
165
- id: "R003",
166
- class: "constraint",
167
- status: "active",
168
- description:
169
- "All prompt compression transformations must be deterministic: identical input must always produce identical output regardless of execution environment, timing, or system state",
170
- why: "Non-deterministic compression would break prompt caching strategies that rely on prefix stability. Anthropic cache hits require exact prefix matches, so any variation in compressed output wastes cache credits",
171
- primary_owner: "S03",
172
- validation:
173
- "Property-based test generates 500 random inputs and verifies that compressing each input twice produces byte-identical output. Additional test verifies cross-platform consistency",
174
- },
175
- {
176
- id: "R004",
177
- class: "non-functional",
178
- status: "active",
179
- description:
180
- "Semantic chunking must select relevant code sections with at least 80% precision: selected chunks should contain query-relevant content, and the total selected content should be less than 60% of the original",
181
- why: "Including irrelevant code sections wastes context budget and can confuse the executor model with unrelated implementation details. Precision above 80% ensures the context is focused and actionable",
182
- primary_owner: "S04",
183
- validation:
184
- "Benchmark test with annotated code fixtures measures precision and recall of chunk selection. Query terms are chosen to target specific functions, and chunk scores are validated against expected relevance ordering",
185
- },
186
- {
187
- id: "R005",
188
- class: "functional",
189
- status: "active",
190
- description:
191
- "Summary distillation must preserve all structured metadata fields (provides, requires, key_files, key_decisions) while achieving at least 40% size reduction from full SUMMARY.md content",
192
- why: "Dependency summaries are injected into every task dispatch prompt. Reducing their size by 40% while preserving structured fields saves approximately 3-5K characters per dispatch across 3-4 dependency summaries",
193
- primary_owner: "S05",
194
- validation:
195
- "Benchmark test creates realistic SUMMARY.md fixtures with full YAML frontmatter and prose sections. Distilled output is verified to contain all structured fields and meet the 40% savings target",
196
- },
197
- {
198
- id: "R006",
199
- class: "non-functional",
200
- status: "active",
201
- description:
202
- "Cache optimization must achieve at least 60% cacheable prefix ratio by correctly classifying prompt sections as static, semi-static, or dynamic and ordering them for maximum cache hit potential",
203
- why: "Anthropic charges 90% less for cached tokens. A 60% cacheable prefix with 90% cache discount yields approximately 54% cost savings on input tokens, which dominate the total cost for long-context prompts",
204
- primary_owner: "S01",
205
- validation:
206
- "Benchmark test constructs a realistic prompt with system instructions, templates, slice context, and task-specific content. Cache optimizer output is verified to have cacheable prefix above 60% threshold",
207
- },
208
- ];
209
- }
210
-
211
- // ---------------------------------------------------------------------------
212
- // Fixture: Markdown table format for decisions (baseline)
213
- // ---------------------------------------------------------------------------
214
-
215
- function formatDecisionsAsMarkdownTable(
216
- decisions: ReturnType<typeof buildDecisions>,
217
- ): string {
218
- // Simulate a padded markdown table (typical of human-authored or tool-generated tables)
219
- const lines: string[] = [
220
- "# Decisions Register",
221
- "",
222
- "<!-- Append-only. Never edit or remove existing rows. -->",
223
- "",
224
- "| # | When Context | Scope | Decision | Choice | Rationale | Revisable? |",
225
- "|--------|----------------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|",
226
- ];
227
- for (const d of decisions) {
228
- lines.push(
229
- `| ${d.id.padEnd(6)} | ${d.when_context.padEnd(14)} | ${d.scope.padEnd(15)} | ${d.decision.padEnd(160)} | ${d.choice.padEnd(160)} | ${d.rationale.padEnd(160)} | ${d.revisable.padEnd(10)} |`,
230
- );
231
- }
232
- return lines.join("\n");
233
- }
234
-
235
- // ---------------------------------------------------------------------------
236
- // Fixture: Markdown format for requirements (baseline)
237
- // ---------------------------------------------------------------------------
238
-
239
- function formatRequirementsAsMarkdown(
240
- requirements: ReturnType<typeof buildRequirements>,
241
- ): string {
242
- const lines: string[] = ["# Requirements", "", "## Active", ""];
243
- for (const r of requirements) {
244
- lines.push(`### ${r.id} -- ${r.description}`);
245
- lines.push("");
246
- lines.push(`- Class: ${r.class}`);
247
- lines.push(`- Status: ${r.status}`);
248
- lines.push(`- Why it matters: ${r.why}`);
249
- lines.push(`- Primary owning slice: ${r.primary_owner}`);
250
- lines.push(`- Validation: ${r.validation}`);
251
- lines.push("");
252
- }
253
- return lines.join("\n");
254
- }
255
-
256
- // ---------------------------------------------------------------------------
257
- // Fixture: Realistic TypeScript code file (200+ lines, 8+ functions)
258
- // ---------------------------------------------------------------------------
259
-
260
- const SAMPLE_CODE = `import { readFileSync, writeFileSync, existsSync } from "node:fs";
261
- import { join, resolve, dirname } from "node:path";
262
- import { createHash } from "node:crypto";
263
-
264
- // ---- Types ----
265
-
266
- interface Config {
267
- basePath: string;
268
- maxRetries: number;
269
- timeout: number;
270
- logLevel: "debug" | "info" | "warn" | "error";
271
- database: {
272
- host: string;
273
- port: number;
274
- name: string;
275
- poolSize: number;
276
- };
277
- }
278
-
279
- interface User {
280
- id: string;
281
- email: string;
282
- role: "admin" | "editor" | "viewer";
283
- createdAt: Date;
284
- lastLogin: Date | null;
285
- }
286
-
287
- interface AuthToken {
288
- token: string;
289
- userId: string;
290
- expiresAt: Date;
291
- scopes: string[];
292
- }
293
-
294
- interface LogEntry {
295
- timestamp: Date;
296
- level: string;
297
- message: string;
298
- context: Record<string, unknown>;
299
- }
300
-
301
- interface DatabaseConnection {
302
- query(sql: string, params?: unknown[]): Promise<unknown[]>;
303
- execute(sql: string, params?: unknown[]): Promise<{ affectedRows: number }>;
304
- close(): Promise<void>;
305
- }
306
-
307
- // ---- Config Module ----
308
-
309
- export function loadConfig(path: string): Config {
310
- if (!existsSync(path)) {
311
- throw new Error(\`Config file not found: \${path}\`);
312
- }
313
- const raw = readFileSync(path, "utf-8");
314
- const parsed = JSON.parse(raw);
315
- return validateConfig(parsed);
316
- }
317
-
318
- export function validateConfig(config: unknown): Config {
319
- if (typeof config !== "object" || config === null) {
320
- throw new Error("Config must be a non-null object");
321
- }
322
- const c = config as Record<string, unknown>;
323
- if (typeof c.basePath !== "string" || !c.basePath) {
324
- throw new Error("Config.basePath must be a non-empty string");
325
- }
326
- if (typeof c.maxRetries !== "number" || c.maxRetries < 0) {
327
- throw new Error("Config.maxRetries must be a non-negative number");
328
- }
329
- if (typeof c.timeout !== "number" || c.timeout <= 0) {
330
- throw new Error("Config.timeout must be a positive number");
331
- }
332
- return c as unknown as Config;
333
- }
334
-
335
- export function mergeConfigs(base: Config, overrides: Partial<Config>): Config {
336
- return {
337
- ...base,
338
- ...overrides,
339
- database: {
340
- ...base.database,
341
- ...(overrides.database ?? {}),
342
- },
343
- };
344
- }
345
-
346
- // ---- Database Module ----
347
-
348
- export async function connectDatabase(config: Config): Promise<DatabaseConnection> {
349
- const db = config.database;
350
- const connectionString = \`\${db.host}:\${db.port}/\${db.name}\`;
351
- let connected = false;
352
- let attempts = 0;
353
-
354
- while (!connected && attempts < config.maxRetries) {
355
- try {
356
- attempts++;
357
- // Simulated connection logic
358
- connected = true;
359
- } catch (err) {
360
- if (attempts >= config.maxRetries) {
361
- throw new Error(\`Failed to connect to \${connectionString} after \${attempts} attempts\`);
362
- }
363
- await new Promise((resolve) => setTimeout(resolve, 1000 * attempts));
364
- }
365
- }
366
-
367
- return {
368
- async query(sql: string, params?: unknown[]): Promise<unknown[]> {
369
- return [];
370
- },
371
- async execute(sql: string, params?: unknown[]): Promise<{ affectedRows: number }> {
372
- return { affectedRows: 0 };
373
- },
374
- async close(): Promise<void> {
375
- connected = false;
376
- },
377
- };
378
- }
379
-
380
- export async function runMigrations(db: DatabaseConnection, migrationsDir: string): Promise<number> {
381
- const files = existsSync(migrationsDir) ? [] : [];
382
- let applied = 0;
383
- for (const file of files) {
384
- const sql = readFileSync(join(migrationsDir, file), "utf-8");
385
- await db.execute(sql);
386
- applied++;
387
- }
388
- return applied;
389
- }
390
-
391
- // ---- Auth Module ----
392
-
393
- export function hashPassword(password: string, salt: string): string {
394
- return createHash("sha256")
395
- .update(password + salt)
396
- .digest("hex");
397
- }
398
-
399
- export function generateAuthToken(user: User, scopes: string[]): AuthToken {
400
- const token = createHash("sha256")
401
- .update(user.id + Date.now().toString() + Math.random().toString())
402
- .digest("hex");
403
-
404
- return {
405
- token,
406
- userId: user.id,
407
- expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),
408
- scopes,
409
- };
410
- }
411
-
412
- export function validateAuthToken(token: AuthToken): boolean {
413
- if (!token.token || token.token.length < 32) return false;
414
- if (new Date() > token.expiresAt) return false;
415
- if (!token.scopes || token.scopes.length === 0) return false;
416
- return true;
417
- }
418
-
419
- export function checkPermission(user: User, requiredRole: string): boolean {
420
- const roleHierarchy: Record<string, number> = {
421
- viewer: 1,
422
- editor: 2,
423
- admin: 3,
424
- };
425
- const userLevel = roleHierarchy[user.role] ?? 0;
426
- const requiredLevel = roleHierarchy[requiredRole] ?? 999;
427
- return userLevel >= requiredLevel;
428
- }
429
-
430
- // ---- Logging Module ----
431
-
432
- export function createLogger(config: Config) {
433
- const levels: Record<string, number> = {
434
- debug: 0,
435
- info: 1,
436
- warn: 2,
437
- error: 3,
438
- };
439
-
440
- const minLevel = levels[config.logLevel] ?? 1;
441
-
442
- return {
443
- log(level: string, message: string, context: Record<string, unknown> = {}): void {
444
- if ((levels[level] ?? 0) < minLevel) return;
445
- const entry: LogEntry = {
446
- timestamp: new Date(),
447
- level,
448
- message,
449
- context,
450
- };
451
- console.error(JSON.stringify(entry));
452
- },
453
- debug(message: string, context?: Record<string, unknown>): void {
454
- this.log("debug", message, context);
455
- },
456
- info(message: string, context?: Record<string, unknown>): void {
457
- this.log("info", message, context);
458
- },
459
- warn(message: string, context?: Record<string, unknown>): void {
460
- this.log("warn", message, context);
461
- },
462
- error(message: string, context?: Record<string, unknown>): void {
463
- this.log("error", message, context);
464
- },
465
- };
466
- }
467
-
468
- // ---- Formatting Module ----
469
-
470
- export function formatBytes(bytes: number): string {
471
- if (bytes < 1024) return bytes + " B";
472
- if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB";
473
- if (bytes < 1024 * 1024 * 1024) return (bytes / (1024 * 1024)).toFixed(1) + " MB";
474
- return (bytes / (1024 * 1024 * 1024)).toFixed(1) + " GB";
475
- }
476
-
477
- export function formatDuration(ms: number): string {
478
- if (ms < 1000) return ms + "ms";
479
- if (ms < 60_000) return (ms / 1000).toFixed(1) + "s";
480
- const minutes = Math.floor(ms / 60_000);
481
- const seconds = Math.floor((ms % 60_000) / 1000);
482
- return minutes + "m " + seconds + "s";
483
- }
484
-
485
- export function truncateString(str: string, maxLen: number): string {
486
- if (str.length <= maxLen) return str;
487
- return str.slice(0, maxLen - 3) + "...";
488
- }
489
-
490
- // ---- Parsing Module ----
491
-
492
- export function parseKeyValuePairs(input: string): Map<string, string> {
493
- const result = new Map<string, string>();
494
- const lines = input.split("\\n");
495
- for (const line of lines) {
496
- const idx = line.indexOf(":");
497
- if (idx > 0) {
498
- const key = line.slice(0, idx).trim();
499
- const value = line.slice(idx + 1).trim();
500
- if (key && value) {
501
- result.set(key, value);
502
- }
503
- }
504
- }
505
- return result;
506
- }
507
-
508
- export function parseCSVLine(line: string): string[] {
509
- const fields: string[] = [];
510
- let current = "";
511
- let inQuotes = false;
512
- for (const char of line) {
513
- if (char === '"') {
514
- inQuotes = !inQuotes;
515
- } else if (char === "," && !inQuotes) {
516
- fields.push(current.trim());
517
- current = "";
518
- } else {
519
- current += char;
520
- }
521
- }
522
- fields.push(current.trim());
523
- return fields;
524
- }
525
-
526
- // ---- Utility Module ----
527
-
528
- export function deepClone<T>(obj: T): T {
529
- return JSON.parse(JSON.stringify(obj));
530
- }
531
-
532
- export function debounce<T extends (...args: unknown[]) => void>(
533
- fn: T,
534
- delayMs: number,
535
- ): (...args: Parameters<T>) => void {
536
- let timer: ReturnType<typeof setTimeout> | null = null;
537
- return (...args: Parameters<T>) => {
538
- if (timer) clearTimeout(timer);
539
- timer = setTimeout(() => fn(...args), delayMs);
540
- };
541
- }
542
-
543
- export function retry<T>(
544
- fn: () => Promise<T>,
545
- maxAttempts: number,
546
- delayMs: number,
547
- ): Promise<T> {
548
- return new Promise((resolve, reject) => {
549
- let attempts = 0;
550
- const attempt = async () => {
551
- try {
552
- attempts++;
553
- const result = await fn();
554
- resolve(result);
555
- } catch (err) {
556
- if (attempts >= maxAttempts) {
557
- reject(err);
558
- } else {
559
- setTimeout(attempt, delayMs);
560
- }
561
- }
562
- };
563
- attempt();
564
- });
565
- }
566
-
567
- export function groupBy<T>(items: T[], keyFn: (item: T) => string): Map<string, T[]> {
568
- const groups = new Map<string, T[]>();
569
- for (const item of items) {
570
- const key = keyFn(item);
571
- const group = groups.get(key) ?? [];
572
- group.push(item);
573
- groups.set(key, group);
574
- }
575
- return groups;
576
- }
577
- `;
578
-
579
- // ---------------------------------------------------------------------------
580
- // Fixture: Realistic SUMMARY.md contents (4 entries, 800-1200 chars each)
581
- // ---------------------------------------------------------------------------
582
-
583
- function buildSummaries(): string[] {
584
- return [
585
- `---
586
- id: S01
587
- provides:
588
- - database-schema
589
- - migration-engine
590
- - connection-pool
591
- requires: []
592
- key_files:
593
- - src/db/schema.ts
594
- - src/db/migrations/001-init.sql
595
- - src/db/connection.ts
596
- - src/db/pool.ts
597
- key_decisions:
598
- - D001
599
- - D004
600
- patterns_established:
601
- - WAL-mode for all SQLite connections
602
- - Migration files numbered sequentially
603
- - Connection pool with 1 writer + N readers
604
- ---
605
-
606
- # S01: Database Foundation
607
-
608
- This slice establishes the core database infrastructure used by all subsequent slices.
609
- The SQLite database uses WAL mode for concurrent read access during background operations.
610
-
611
- ## Implementation Details
612
-
613
- The schema defines tables for artifacts (decisions, requirements, tasks), metrics,
614
- and session state. Each table includes created_at and updated_at timestamps with
615
- automatic trigger-based updates.
616
-
617
- The migration engine supports forward-only migrations with checksum verification
618
- to detect tampering. Each migration runs in a transaction with automatic rollback
619
- on failure.
620
-
621
- ## Testing Approach
622
-
623
- Integration tests use an in-memory SQLite database to avoid filesystem side effects.
624
- Each test creates a fresh database, applies all migrations, and verifies the schema
625
- matches expected structure.
626
-
627
- ## Performance Characteristics
628
-
629
- Schema initialization takes approximately 5ms on modern hardware. Query latency
630
- for typical operations (insert, select by ID, range scan) is under 1ms. The WAL
631
- checkpoint runs automatically every 1000 pages or when the connection closes.`,
632
-
633
- `---
634
- id: S02
635
- provides:
636
- - prompt-compressor
637
- - token-counter
638
- - context-budget
639
- requires:
640
- - database-schema
641
- key_files:
642
- - src/extensions/gsd/prompt-compressor.ts
643
- - src/extensions/gsd/token-counter.ts
644
- - src/extensions/gsd/context-budget.ts
645
- - src/extensions/gsd/structured-data-formatter.ts
646
- key_decisions:
647
- - D002
648
- - D003
649
- - D005
650
- patterns_established:
651
- - Deterministic compression with no LLM calls
652
- - Three compression levels (light/moderate/aggressive)
653
- - Provider-aware token estimation
654
- ---
655
-
656
- # S02: Token Optimization Pipeline
657
-
658
- This slice implements the complete token optimization pipeline that reduces prompt
659
- size while preserving semantic content. All transformations are deterministic and
660
- require no external API calls.
661
-
662
- ## Compression Strategy
663
-
664
- The pipeline applies transformations in order of increasing aggressiveness:
665
- light (whitespace normalization, comment removal), moderate (phrase abbreviation,
666
- boilerplate removal), and aggressive (emphasis removal, line truncation).
667
-
668
- Code blocks and markdown headings are preserved by default to maintain structural
669
- readability for the LLM executor.
670
-
671
- ## Budget Allocation
672
-
673
- Context budgets are computed proportionally from the executor model's context window.
674
- Summaries receive 15%, inline context receives 40%, and verification sections receive
675
- 10%. The remaining 35% is reserved for the model's response generation.
676
-
677
- ## Token Counting
678
-
679
- Token counts are estimated using provider-specific chars-per-token ratios:
680
- Anthropic at 3.5, OpenAI at 4.0, Google at 4.0. When tiktoken is available,
681
- exact counts replace estimates for OpenAI-compatible models.`,
682
-
683
- `---
684
- id: S03
685
- provides:
686
- - semantic-chunker
687
- - summary-distiller
688
- - cache-optimizer
689
- requires:
690
- - prompt-compressor
691
- - token-counter
692
- key_files:
693
- - src/extensions/gsd/semantic-chunker.ts
694
- - src/extensions/gsd/summary-distiller.ts
695
- - src/extensions/gsd/prompt-cache-optimizer.ts
696
- key_decisions:
697
- - D006
698
- - D007
699
- patterns_established:
700
- - TF-IDF scoring for content relevance
701
- - Progressive field dropping for budget compliance
702
- - Static-first section ordering for cache efficiency
703
- ---
704
-
705
- # S03: Advanced Context Selection
706
-
707
- This slice builds on the token optimization pipeline to provide intelligent content
708
- selection and cache-aware prompt assembly. It includes semantic chunking for code
709
- files, summary distillation for dependency context, and cache-optimized section ordering.
710
-
711
- ## Semantic Chunking
712
-
713
- The chunker splits code files at semantic boundaries (function/class/interface
714
- declarations) and scores each chunk against the task query using TF-IDF relevance.
715
- Only the top-scoring chunks are included in the prompt, typically reducing code
716
- context by 40-60%.
717
-
718
- ## Summary Distillation
719
-
720
- SUMMARY.md files from dependency slices are distilled to their essential structured
721
- data: provides, requires, key_files, and key_decisions. Verbose prose descriptions
722
- are dropped to save context budget. Progressive field dropping ensures output fits
723
- within any budget constraint.
724
-
725
- ## Cache Optimization
726
-
727
- Prompt sections are classified as static (system prompt, templates), semi-static
728
- (slice plan, decisions), or dynamic (task plan, file contents). Sections are reordered
729
- to place static content first, maximizing the cacheable prefix length for both
730
- Anthropic and OpenAI prompt caching strategies.`,
731
-
732
- `---
733
- id: S04
734
- provides:
735
- - dispatch-pipeline
736
- - task-routing
737
- - verification-gate
738
- requires:
739
- - database-schema
740
- - prompt-compressor
741
- - semantic-chunker
742
- - cache-optimizer
743
- key_files:
744
- - src/extensions/gsd/auto-dispatch.ts
745
- - src/extensions/gsd/model-router.ts
746
- - src/extensions/gsd/verification-gate.ts
747
- - src/extensions/gsd/auto-supervisor.ts
748
- key_decisions:
749
- - D008
750
- patterns_established:
751
- - Budget-aware dispatch with automatic compression
752
- - Model routing based on task complexity
753
- - Evidence-based verification before task completion
754
- ---
755
-
756
- # S04: Dispatch Pipeline
757
-
758
- This slice implements the end-to-end dispatch pipeline that takes a task plan,
759
- assembles an optimized prompt, routes it to the appropriate model, and verifies
760
- the executor's output before marking the task complete.
761
-
762
- ## Prompt Assembly
763
-
764
- The dispatch pipeline collects context from multiple sources: decisions and
765
- requirements from the database, dependency summaries from prior slices, code
766
- context from the workspace index, and task-specific instructions from the plan.
767
- All content passes through the optimization pipeline before assembly.
768
-
769
- ## Model Routing
770
-
771
- Tasks are routed to models based on complexity classification: simple tasks go
772
- to smaller/faster models, complex tasks go to larger models with bigger context
773
- windows. The router considers available context budget, estimated token usage,
774
- and historical success rates for each model-task combination.
775
-
776
- ## Verification
777
-
778
- Each completed task passes through a verification gate that checks for evidence
779
- of completion: modified files, passing tests, and explicit verification commands
780
- defined in the task plan. Tasks without sufficient evidence are flagged for
781
- review rather than silently accepted.`,
782
- ];
783
- }
784
-
785
- // ---------------------------------------------------------------------------
786
- // Fixture: Verbose prompt content (5000+ chars) for compression benchmark
787
- // ---------------------------------------------------------------------------
788
-
789
- function buildVerbosePrompt(): string {
790
- return `# Executor Instructions
791
-
792
- <!-- These instructions are generated automatically by the GSD dispatch system. -->
793
- <!-- Version: 2.4.1 -->
794
- <!-- Generated: 2026-03-17T10:00:00Z -->
795
- <!-- Template: executor-v3 -->
796
-
797
- ---
798
-
799
- ## Context and Background
800
-
801
-
802
- In order to complete this task successfully, it is important to note that the system architecture follows a modular design pattern. The following sections describe the relevant context for your work.
803
-
804
- As mentioned previously, the database layer uses SQLite with WAL mode enabled. In addition to the database configuration, you should be aware of the caching strategy that has been implemented.
805
-
806
- Due to the fact that we need to maintain backward compatibility, all API changes must be additive. At this point in time, we do not support breaking changes to the public API surface.
807
-
808
- For the purpose of maintaining consistency, all new code should follow the established patterns documented in the architecture decision records. In the event that you encounter a conflict between patterns, prefer the most recent decision.
809
-
810
- With regard to testing, all new functionality must include unit tests with at least 80% branch coverage. Prior to submitting your changes, run the full test suite to verify no regressions.
811
-
812
- Subsequent to completing the implementation, update the SUMMARY.md file with any new patterns or decisions established during development.
813
-
814
-
815
- ---
816
-
817
-
818
- ## Technical Requirements
819
-
820
- In accordance with the project standards, the implementation must satisfy the following requirements:
821
-
822
- (none)
823
- N/A
824
- (not applicable)
825
- (empty)
826
-
827
- A number of performance constraints apply to this module. In the case of database operations, queries must complete within 10ms at the 95th percentile. On the basis of our load testing results, the system handles approximately 500 concurrent requests.
828
-
829
- In order to ensure proper error handling, all async functions must use try-catch blocks. In the event that an error occurs, it is important to note that the error should be logged before re-throwing.
830
-
831
- The following code patterns should be followed:
832
-
833
- \`\`\`typescript
834
- // Always use strict null checks
835
- interface Result<T> {
836
- data: T | null;
837
- error: string | null;
838
- }
839
-
840
- // Prefer explicit return types
841
- export function processItem(item: unknown): Result<ProcessedItem> {
842
- if (!isValid(item)) {
843
- return { data: null, error: "Invalid item format" };
844
- }
845
- return { data: transform(item), error: null };
846
- }
847
- \`\`\`
848
-
849
- ---
850
-
851
- ## Dependencies
852
-
853
- - **Database module** (src/db/connection.ts): Provides connection pool management
854
- - **Auth module** (src/auth/tokens.ts): Handles token validation and refresh
855
- - **Logger** (src/utils/logger.ts): Structured logging with context propagation
856
- - **Config module** (src/config/loader.ts): Configuration loading and validation
857
-
858
- > Note: The database module is currently being refactored as part of M002/S03.
859
- > Use the stable API surface and avoid internal implementation details.
860
- > In order to avoid breakage, do not import from internal paths.
861
-
862
- ---
863
-
864
- ## Task Plan
865
-
866
- In order to implement the requested changes, you should follow these steps:
867
-
868
- 1. Review the existing implementation in the target files
869
- 2. Implement the changes described in the task description
870
- 3. Write unit tests covering all new code paths
871
- 4. Update documentation if any public APIs change
872
- 5. Run the verification commands listed below
873
-
874
-
875
-
876
- ## Carry-Forward Context
877
-
878
- In order to understand the current state of the codebase, it is important to note that the following decisions were made in prior slices:
879
-
880
- - In the event that a database connection fails, the system should retry with exponential backoff. Due to the fact that connection failures are transient, this approach works well.
881
- - Due to the fact that we use SQLite, all write operations are serialized through a single writer connection. In order to prevent lock contention, the pool is configured with 1 writer and 4 readers.
882
- - As mentioned previously, the token optimization pipeline processes content in three stages: light, moderate, and aggressive compression. In order to preserve semantic meaning, code blocks are excluded from compression.
883
- - For the purpose of maintaining cache efficiency, static prompt sections are always placed before dynamic sections. In the event that sections are reordered, cache hit rates drop significantly.
884
- - At this point in time, the system supports three providers: Anthropic, OpenAI, and Google. In order to add a new provider, implement the ProviderAdapter interface.
885
- - In accordance with the security policy, all environment variables are filtered through an allowlist. For the purpose of preventing accidental exposure, unknown variables are redacted.
886
- - With regard to the plugin system, plugins are loaded from the .gsd/plugins/ directory. Prior to loading, each plugin manifest is validated against the JSON schema.
887
- - Subsequent to task completion, the verification gate checks for evidence of completion. In the case of missing evidence, the task is flagged for review.
888
-
889
- N/A
890
- (none)
891
- (not applicable)
892
- (empty)
893
-
894
- ---
895
-
896
- ## Verification Commands
897
-
898
- \`\`\`bash
899
- npm run test -- --grep "database"
900
- npm run lint
901
- npm run build
902
- \`\`\`
903
-
904
- <!-- End of generated instructions -->
905
- <!-- Do not modify below this line -->`;
906
- }
907
-
908
- // ═══════════════════════════════════════════════════════════════════════════
909
- // Tests
910
- // ═══════════════════════════════════════════════════════════════════════════
911
-
912
- describe("Token Optimization Benchmark", () => {
913
- // -----------------------------------------------------------------------
914
- // Test 1: Structured Data Savings
915
- // -----------------------------------------------------------------------
916
- it("structured data savings benchmark", () => {
917
- const decisions = buildDecisions();
918
- const requirements = buildRequirements();
919
-
920
- const markdownDecisions = formatDecisionsAsMarkdownTable(decisions);
921
- const compactDecisions = formatDecisionsCompact(decisions);
922
-
923
- const decisionSavings = measureSavings(compactDecisions, markdownDecisions);
924
-
925
- console.log(
926
- ` Decisions compact: ${decisionSavings.toFixed(1)}% savings (${markdownDecisions.length} -> ${compactDecisions.length} chars)`,
927
- );
928
- assert.ok(
929
- decisionSavings > 15,
930
- `Decisions savings should be >15%, got ${decisionSavings.toFixed(1)}%`,
931
- );
932
-
933
- const markdownReqs = formatRequirementsAsMarkdown(requirements);
934
- const compactReqs = formatRequirementsCompact(requirements);
935
-
936
- const reqSavings = measureSavings(compactReqs, markdownReqs);
937
-
938
- console.log(
939
- ` Requirements compact: ${reqSavings.toFixed(1)}% savings (${markdownReqs.length} -> ${compactReqs.length} chars)`,
940
- );
941
- assert.ok(
942
- reqSavings > 5,
943
- `Requirements savings should be >5%, got ${reqSavings.toFixed(1)}%`,
944
- );
945
- });
946
-
947
- // -----------------------------------------------------------------------
948
- // Test 2: Prompt Compression
949
- // -----------------------------------------------------------------------
950
- it("prompt compression benchmark", () => {
951
- const verbose = buildVerbosePrompt();
952
-
953
- const light = compressPrompt(verbose, { level: "light" });
954
- console.log(
955
- ` Compression light: ${light.savingsPercent.toFixed(1)}% savings (${light.originalChars} -> ${light.compressedChars} chars, ${light.transformationsApplied} transforms)`,
956
- );
957
- assert.ok(
958
- light.savingsPercent > 5,
959
- `Light compression should save >5%, got ${light.savingsPercent}%`,
960
- );
961
-
962
- const moderate = compressPrompt(verbose, { level: "moderate" });
963
- console.log(
964
- ` Compression moderate: ${moderate.savingsPercent.toFixed(1)}% savings (${moderate.originalChars} -> ${moderate.compressedChars} chars, ${moderate.transformationsApplied} transforms)`,
965
- );
966
- assert.ok(
967
- moderate.savingsPercent > 10,
968
- `Moderate compression should save >10%, got ${moderate.savingsPercent}%`,
969
- );
970
-
971
- const aggressive = compressPrompt(verbose, { level: "aggressive" });
972
- console.log(
973
- ` Compression aggressive: ${aggressive.savingsPercent.toFixed(1)}% savings (${aggressive.originalChars} -> ${aggressive.compressedChars} chars, ${aggressive.transformationsApplied} transforms)`,
974
- );
975
- assert.ok(
976
- aggressive.savingsPercent > 15,
977
- `Aggressive compression should save >15%, got ${aggressive.savingsPercent}%`,
978
- );
979
-
980
- // Verify code blocks are preserved
981
- assert.ok(
982
- aggressive.content.includes("interface Result<T>"),
983
- "Code blocks should be preserved through all compression levels",
984
- );
985
- });
986
-
987
- // -----------------------------------------------------------------------
988
- // Test 3: Semantic Chunking
989
- // -----------------------------------------------------------------------
990
- it("semantic chunking benchmark", () => {
991
- const query = "database connection config validation";
992
- const result = chunkByRelevance(SAMPLE_CODE, query, {
993
- maxChunks: 5,
994
- minScore: 0.05,
995
- });
996
-
997
- console.log(
998
- ` Semantic chunking: ${result.totalChunks} total chunks, ${result.chunks.length} selected, ${result.omittedChunks} omitted`,
999
- );
1000
- console.log(
1001
- ` Chunking savings: ${result.savingsPercent}% of content omitted`,
1002
- );
1003
-
1004
- assert.ok(
1005
- result.totalChunks >= 4,
1006
- `Should produce at least 4 chunks, got ${result.totalChunks}`,
1007
- );
1008
- assert.ok(
1009
- result.savingsPercent > 40,
1010
- `Should omit >40% of content, got ${result.savingsPercent}%`,
1011
- );
1012
-
1013
- // Verify that chunks relevant to the query score higher
1014
- const scores = result.chunks.map((c) => c.score);
1015
- const hasHighScorer = scores.some((s) => s > 0.5);
1016
- assert.ok(hasHighScorer, "At least one chunk should score above 0.5");
1017
-
1018
- // Verify selected content contains query-relevant terms
1019
- const selectedText = result.chunks.map((c) => c.content).join("\n");
1020
- const hasRelevantContent =
1021
- selectedText.includes("Config") ||
1022
- selectedText.includes("config") ||
1023
- selectedText.includes("database") ||
1024
- selectedText.includes("connect") ||
1025
- selectedText.includes("validate");
1026
- assert.ok(
1027
- hasRelevantContent,
1028
- "Selected chunks should contain query-relevant content",
1029
- );
1030
- });
1031
-
1032
- // -----------------------------------------------------------------------
1033
- // Test 4: Summary Distillation
1034
- // -----------------------------------------------------------------------
1035
- it("summary distillation benchmark", () => {
1036
- const summaries = buildSummaries();
1037
- const originalTotalChars = summaries.reduce((s, c) => s + c.length, 0);
1038
-
1039
- // Use a generous budget so we can measure natural distillation savings
1040
- const result = distillSummaries(summaries, 100_000);
1041
-
1042
- console.log(
1043
- ` Summary distillation: ${result.savingsPercent}% savings (${result.originalChars} -> ${result.distilledChars} chars, ${result.summaryCount} summaries)`,
1044
- );
1045
-
1046
- assert.ok(
1047
- result.savingsPercent > 40,
1048
- `Summary distillation should save >40%, got ${result.savingsPercent}%`,
1049
- );
1050
- assert.equal(result.summaryCount, 4, "Should process all 4 summaries");
1051
-
1052
- // Verify key structured fields are preserved
1053
- assert.ok(
1054
- result.content.includes("provides:"),
1055
- "Distilled output should preserve 'provides' field",
1056
- );
1057
- assert.ok(
1058
- result.content.includes("key_files:"),
1059
- "Distilled output should preserve 'key_files' field",
1060
- );
1061
- assert.ok(
1062
- result.content.includes("key_decisions:"),
1063
- "Distilled output should preserve 'key_decisions' field",
1064
- );
1065
-
1066
- // Verify slice IDs are preserved
1067
- assert.ok(result.content.includes("S01"), "Should preserve S01 reference");
1068
- assert.ok(result.content.includes("S02"), "Should preserve S02 reference");
1069
- assert.ok(result.content.includes("S03"), "Should preserve S03 reference");
1070
- assert.ok(result.content.includes("S04"), "Should preserve S04 reference");
1071
- });
1072
-
1073
- // -----------------------------------------------------------------------
1074
- // Test 5: Combined Pipeline
1075
- // -----------------------------------------------------------------------
1076
- it("combined pipeline benchmark", () => {
1077
- const decisions = buildDecisions();
1078
- const requirements = buildRequirements();
1079
- const summaries = buildSummaries();
1080
- const knowledgeFile = SAMPLE_CODE;
1081
- const carryForward = buildVerbosePrompt();
1082
-
1083
- // --- Unoptimized baseline ---
1084
- const unoptDecisions = formatDecisionsAsMarkdownTable(decisions);
1085
- const unoptRequirements = formatRequirementsAsMarkdown(requirements);
1086
- const unoptSummaries = summaries.join("\n\n---\n\n");
1087
- const unoptKnowledge = knowledgeFile;
1088
- const unoptCarry = carryForward;
1089
-
1090
- const unoptimizedTotal =
1091
- unoptDecisions.length +
1092
- unoptRequirements.length +
1093
- unoptSummaries.length +
1094
- unoptKnowledge.length +
1095
- unoptCarry.length;
1096
-
1097
- // --- Optimized pipeline ---
1098
- // 1. Compact format for decisions and requirements
1099
- const optDecisions = formatDecisionsCompact(decisions);
1100
- const optRequirements = formatRequirementsCompact(requirements);
1101
-
1102
- // 2. Distill summaries
1103
- const distilled = distillSummaries(summaries, 100_000);
1104
-
1105
- // 3. Chunk knowledge file
1106
- const chunked = chunkByRelevance(knowledgeFile, "database config validation", {
1107
- maxChunks: 5,
1108
- minScore: 0.05,
1109
- });
1110
- const optKnowledge = chunked.chunks.map((c) => c.content).join("\n\n");
1111
-
1112
- // 4. Compress carry-forward
1113
- const compressed = compressPrompt(carryForward, { level: "moderate" });
1114
-
1115
- const optimizedTotal =
1116
- optDecisions.length +
1117
- optRequirements.length +
1118
- distilled.distilledChars +
1119
- optKnowledge.length +
1120
- compressed.compressedChars;
1121
-
1122
- const totalSavingsPercent =
1123
- ((unoptimizedTotal - optimizedTotal) / unoptimizedTotal) * 100;
1124
-
1125
- console.log(
1126
- ` Combined pipeline: ${totalSavingsPercent.toFixed(1)}% total savings (${unoptimizedTotal} -> ${optimizedTotal} chars)`,
1127
- );
1128
- console.log(
1129
- ` Decisions: ${unoptDecisions.length} -> ${optDecisions.length} chars`,
1130
- );
1131
- console.log(
1132
- ` Requirements: ${unoptRequirements.length} -> ${optRequirements.length} chars`,
1133
- );
1134
- console.log(
1135
- ` Summaries: ${unoptSummaries.length} -> ${distilled.distilledChars} chars`,
1136
- );
1137
- console.log(
1138
- ` Knowledge: ${unoptKnowledge.length} -> ${optKnowledge.length} chars`,
1139
- );
1140
- console.log(
1141
- ` Carry-fwd: ${unoptCarry.length} -> ${compressed.compressedChars} chars`,
1142
- );
1143
-
1144
- assert.ok(
1145
- totalSavingsPercent > 30,
1146
- `Combined pipeline should save >30%, got ${totalSavingsPercent.toFixed(1)}%`,
1147
- );
1148
- });
1149
-
1150
- // -----------------------------------------------------------------------
1151
- // Test 6: Cache Efficiency Analysis
1152
- // -----------------------------------------------------------------------
1153
- it("cache efficiency analysis", () => {
1154
- const sections_input = [
1155
- section(
1156
- "system-prompt",
1157
- "You are a GSD executor agent. Follow the task plan precisely. Report evidence of completion. Do not deviate from the assigned scope. Always verify your work before reporting done.",
1158
- ),
1159
- section(
1160
- "template-executor",
1161
- "## Output Format\n\nProvide your response in the following structure:\n1. Analysis of the task requirements\n2. Implementation plan\n3. Code changes with file paths\n4. Verification evidence\n5. Summary of changes made\n\nDo not include preamble or meta-commentary.",
1162
- ),
1163
- section(
1164
- "slice-plan",
1165
- "## Slice S03: Advanced Context Selection\n\nTasks:\n- T01: Implement semantic chunker with TF-IDF scoring\n- T02: Build summary distiller with progressive dropping\n- T03: Create cache optimizer with section classification\n- T04: Write benchmark tests for all optimization modules\n- T05: Integration test for combined pipeline",
1166
- ),
1167
- section(
1168
- "decisions",
1169
- formatDecisionsCompact(buildDecisions()),
1170
- ),
1171
- section(
1172
- "requirements",
1173
- formatRequirementsCompact(buildRequirements()),
1174
- ),
1175
- section(
1176
- "task-plan",
1177
- "## T04: Write benchmark tests\n\nCreate comprehensive benchmark tests that measure token savings from each optimization module. Include realistic fixture data and conservative assertion targets.\n\nFiles: src/extensions/gsd/tests/token-optimization-benchmark.test.ts\nVerify: npm run test -- --grep benchmark",
1178
- ),
1179
- section(
1180
- "task-context",
1181
- "Current implementation status: all optimization modules are complete and passing unit tests. This task adds end-to-end validation.\n\nRecent changes:\n- prompt-compressor.ts: added aggressive level\n- semantic-chunker.ts: improved boundary detection\n- summary-distiller.ts: added progressive field dropping",
1182
- ),
1183
- ];
1184
-
1185
- const optimized = optimizeForCaching(sections_input);
1186
-
1187
- console.log(
1188
- ` Cache efficiency: ${(optimized.cacheEfficiency * 100).toFixed(1)}% cacheable prefix (${optimized.cacheablePrefixChars} / ${optimized.totalChars} chars)`,
1189
- );
1190
- console.log(
1191
- ` Static sections: ${optimized.sectionCounts.static}, Semi-static: ${optimized.sectionCounts["semi-static"]}, Dynamic: ${optimized.sectionCounts.dynamic}`,
1192
- );
1193
-
1194
- assert.ok(
1195
- optimized.cacheEfficiency > 0.6,
1196
- `Cache efficiency should be >60%, got ${(optimized.cacheEfficiency * 100).toFixed(1)}%`,
1197
- );
1198
-
1199
- const anthropicSavings = estimateCacheSavings(optimized, "anthropic");
1200
- console.log(
1201
- ` Estimated Anthropic savings: ${(anthropicSavings * 100).toFixed(1)}%`,
1202
- );
1203
- assert.ok(
1204
- anthropicSavings > 0.5,
1205
- `Anthropic cache savings should be >50%, got ${(anthropicSavings * 100).toFixed(1)}%`,
1206
- );
1207
-
1208
- const openaiSavings = estimateCacheSavings(optimized, "openai");
1209
- console.log(
1210
- ` Estimated OpenAI savings: ${(openaiSavings * 100).toFixed(1)}%`,
1211
- );
1212
- assert.ok(
1213
- anthropicSavings > openaiSavings,
1214
- "Anthropic savings should exceed OpenAI savings (90% vs 50% discount)",
1215
- );
1216
- });
1217
-
1218
- // -----------------------------------------------------------------------
1219
- // Test 7: Provider-Aware Budget Accuracy
1220
- // -----------------------------------------------------------------------
1221
- it("provider-aware budget accuracy", () => {
1222
- const contextWindow = 200_000;
1223
-
1224
- const anthropicBudget = computeBudgets(contextWindow, "anthropic");
1225
- const openaiBudget = computeBudgets(contextWindow, "openai");
1226
-
1227
- const anthropicCharsPerToken = getCharsPerToken("anthropic");
1228
- const openaiCharsPerToken = getCharsPerToken("openai");
1229
-
1230
- console.log(
1231
- ` Anthropic: ${anthropicCharsPerToken} chars/token, inline budget: ${anthropicBudget.inlineContextBudgetChars} chars`,
1232
- );
1233
- console.log(
1234
- ` OpenAI: ${openaiCharsPerToken} chars/token, inline budget: ${openaiBudget.inlineContextBudgetChars} chars`,
1235
- );
1236
-
1237
- // OpenAI has higher chars-per-token (4.0 vs 3.5), so it gets more chars per budget
1238
- const charsDifference =
1239
- openaiBudget.inlineContextBudgetChars -
1240
- anthropicBudget.inlineContextBudgetChars;
1241
- const percentDifference =
1242
- (charsDifference / anthropicBudget.inlineContextBudgetChars) * 100;
1243
-
1244
- console.log(
1245
- ` OpenAI gets ${percentDifference.toFixed(1)}% more chars per budget unit (${charsDifference} chars difference)`,
1246
- );
1247
-
1248
- // OpenAI should get ~14% more chars (4.0/3.5 = 1.143)
1249
- assert.ok(
1250
- percentDifference > 10,
1251
- `OpenAI should get >10% more chars, got ${percentDifference.toFixed(1)}%`,
1252
- );
1253
- assert.ok(
1254
- percentDifference < 20,
1255
- `Difference should be <20%, got ${percentDifference.toFixed(1)}%`,
1256
- );
1257
-
1258
- // Verify token estimates differ for the same content
1259
- const sampleContent = SAMPLE_CODE;
1260
- const anthropicTokens = estimateTokensForProvider(sampleContent, "anthropic");
1261
- const openaiTokens = estimateTokensForProvider(sampleContent, "openai");
1262
-
1263
- console.log(
1264
- ` Same content (${sampleContent.length} chars): Anthropic estimates ${anthropicTokens} tokens, OpenAI estimates ${openaiTokens} tokens`,
1265
- );
1266
-
1267
- assert.ok(
1268
- anthropicTokens > openaiTokens,
1269
- "Anthropic should estimate more tokens (smaller chars-per-token ratio)",
1270
- );
1271
- });
1272
- });