gsd-pi 2.33.1 → 2.34.0-dev.0150ae9

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 (1048) 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/claude-import.js +540 -0
  84. package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
  85. package/dist/resources/extensions/gsd/commands-bootstrap.js +223 -0
  86. package/dist/resources/extensions/gsd/commands-config.js +89 -0
  87. package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
  88. package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
  89. package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
  90. package/dist/resources/extensions/gsd/commands-logs.js +468 -0
  91. package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
  92. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
  93. package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
  94. package/dist/resources/extensions/gsd/commands.js +1024 -0
  95. package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
  96. package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
  97. package/dist/resources/extensions/gsd/context-budget.js +187 -0
  98. package/dist/resources/extensions/gsd/context-store.js +165 -0
  99. package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
  100. package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
  101. package/dist/resources/extensions/gsd/db-writer.js +298 -0
  102. package/dist/resources/extensions/gsd/debug-logger.js +161 -0
  103. package/dist/resources/extensions/gsd/detection.js +373 -0
  104. package/dist/resources/extensions/gsd/diff-context.js +168 -0
  105. package/dist/resources/extensions/gsd/dispatch-guard.js +75 -0
  106. package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  107. package/dist/resources/extensions/gsd/doctor-checks.js +562 -0
  108. package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
  109. package/dist/resources/extensions/gsd/doctor-format.js +71 -0
  110. package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
  111. package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
  112. package/dist/resources/extensions/gsd/doctor-types.js +12 -0
  113. package/dist/resources/extensions/gsd/doctor.js +672 -0
  114. package/dist/resources/extensions/gsd/error-utils.js +6 -0
  115. package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
  116. package/dist/resources/extensions/gsd/exit-command.js +11 -0
  117. package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
  118. package/dist/resources/extensions/gsd/export.js +268 -0
  119. package/dist/resources/extensions/gsd/file-watcher.js +76 -0
  120. package/dist/resources/extensions/gsd/files.js +937 -0
  121. package/dist/resources/extensions/gsd/forensics.js +511 -0
  122. package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
  123. package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
  124. package/dist/resources/extensions/gsd/git-service.js +460 -0
  125. package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
  126. package/dist/resources/extensions/gsd/gsd-db.js +735 -0
  127. package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
  128. package/dist/resources/extensions/gsd/guided-flow.js +1158 -0
  129. package/dist/resources/extensions/gsd/health-widget.js +141 -0
  130. package/dist/resources/extensions/gsd/history.js +118 -0
  131. package/dist/resources/extensions/gsd/index.js +1114 -0
  132. package/dist/resources/extensions/gsd/init-wizard.js +479 -0
  133. package/dist/resources/extensions/gsd/json-persistence.js +62 -0
  134. package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
  135. package/dist/resources/extensions/gsd/key-manager.js +829 -0
  136. package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
  137. package/dist/resources/extensions/gsd/md-importer.js +440 -0
  138. package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
  139. package/dist/resources/extensions/gsd/memory-store.js +351 -0
  140. package/dist/resources/extensions/gsd/metrics.js +377 -0
  141. package/dist/resources/extensions/gsd/migrate/command.js +157 -0
  142. package/dist/resources/extensions/gsd/migrate/index.js +7 -0
  143. package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
  144. package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
  145. package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
  146. package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
  147. package/dist/resources/extensions/gsd/migrate/types.js +4 -0
  148. package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
  149. package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
  150. package/dist/resources/extensions/gsd/migrate-external.js +130 -0
  151. package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
  152. package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
  153. package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
  154. package/dist/resources/extensions/gsd/model-router.js +187 -0
  155. package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
  156. package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
  157. package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
  158. package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
  159. package/dist/resources/extensions/gsd/notifications.js +58 -0
  160. package/dist/resources/extensions/gsd/observability-validator.js +398 -0
  161. package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
  162. package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
  163. package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
  164. package/dist/resources/extensions/gsd/paths.js +414 -0
  165. package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
  166. package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
  167. package/dist/resources/extensions/gsd/preferences-models.js +294 -0
  168. package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
  169. package/dist/resources/extensions/gsd/preferences-types.js +73 -0
  170. package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
  171. package/dist/resources/extensions/gsd/preferences.js +325 -0
  172. package/dist/resources/extensions/gsd/progress-score.js +102 -0
  173. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
  174. package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
  175. package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
  176. package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
  177. package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
  178. package/dist/resources/extensions/gsd/queue-order.js +178 -0
  179. package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
  180. package/dist/resources/extensions/gsd/quick.js +206 -0
  181. package/dist/resources/extensions/gsd/repo-identity.js +187 -0
  182. package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
  183. package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
  184. package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
  185. package/dist/resources/extensions/gsd/routing-history.js +210 -0
  186. package/dist/resources/extensions/gsd/safe-fs.js +52 -0
  187. package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
  188. package/dist/resources/extensions/gsd/session-forensics.js +427 -0
  189. package/dist/resources/extensions/gsd/session-lock.js +397 -0
  190. package/dist/resources/extensions/gsd/session-status-io.js +134 -0
  191. package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
  192. package/dist/resources/extensions/gsd/skill-health.js +324 -0
  193. package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
  194. package/dist/resources/extensions/gsd/state.js +653 -0
  195. package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
  196. package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
  197. package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
  198. package/dist/resources/extensions/gsd/token-counter.js +54 -0
  199. package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
  200. package/dist/resources/extensions/gsd/triage-ui.js +125 -0
  201. package/dist/resources/extensions/gsd/types.js +4 -0
  202. package/dist/resources/extensions/gsd/undo.js +205 -0
  203. package/dist/resources/extensions/gsd/unit-id.js +7 -0
  204. package/dist/resources/extensions/gsd/unit-runtime.js +131 -0
  205. package/dist/resources/extensions/gsd/validate-directory.js +143 -0
  206. package/dist/resources/extensions/gsd/verification-evidence.js +122 -0
  207. package/dist/resources/extensions/gsd/verification-gate.js +514 -0
  208. package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
  209. package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
  210. package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
  211. package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
  212. package/dist/resources/extensions/gsd/workspace-index.js +139 -0
  213. package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
  214. package/dist/resources/extensions/gsd/worktree-command.js +682 -0
  215. package/dist/resources/extensions/gsd/worktree-manager.js +358 -0
  216. package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
  217. package/dist/resources/extensions/gsd/worktree.js +199 -0
  218. package/dist/resources/extensions/mac-tools/index.js +768 -0
  219. package/dist/resources/extensions/mcp-client/index.js +364 -0
  220. package/dist/resources/extensions/package.json +3 -0
  221. package/dist/resources/extensions/remote-questions/config.js +70 -0
  222. package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
  223. package/dist/resources/extensions/remote-questions/format.js +234 -0
  224. package/dist/resources/extensions/remote-questions/http-client.js +43 -0
  225. package/dist/resources/extensions/remote-questions/manager.js +156 -0
  226. package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
  227. package/dist/resources/extensions/remote-questions/notify.js +89 -0
  228. package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
  229. package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
  230. package/dist/resources/extensions/remote-questions/status.js +25 -0
  231. package/dist/resources/extensions/remote-questions/store.js +70 -0
  232. package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
  233. package/dist/resources/extensions/remote-questions/types.js +5 -0
  234. package/dist/resources/extensions/search-the-web/cache.js +74 -0
  235. package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
  236. package/dist/resources/extensions/search-the-web/format.js +161 -0
  237. package/dist/resources/extensions/search-the-web/http.js +178 -0
  238. package/dist/resources/extensions/search-the-web/index.js +41 -0
  239. package/dist/resources/extensions/search-the-web/native-search.js +166 -0
  240. package/dist/resources/extensions/search-the-web/provider.js +143 -0
  241. package/dist/resources/extensions/search-the-web/tavily.js +82 -0
  242. package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
  243. package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
  244. package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
  245. package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
  246. package/dist/resources/extensions/shared/confirm-ui.js +96 -0
  247. package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
  248. package/dist/resources/extensions/shared/frontmatter.js +109 -0
  249. package/dist/resources/extensions/shared/interview-ui.js +569 -0
  250. package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
  251. package/dist/resources/extensions/shared/next-action-ui.js +168 -0
  252. package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
  253. package/dist/resources/extensions/shared/sanitize.js +17 -0
  254. package/dist/resources/extensions/shared/terminal.js +21 -0
  255. package/dist/resources/extensions/shared/ui.js +245 -0
  256. package/dist/resources/extensions/shared/wizard-ui.js +478 -0
  257. package/dist/resources/extensions/slash-commands/audit.js +72 -0
  258. package/dist/resources/extensions/slash-commands/clear.js +8 -0
  259. package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
  260. package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
  261. package/dist/resources/extensions/slash-commands/index.js +10 -0
  262. package/dist/resources/extensions/subagent/agents.js +103 -0
  263. package/dist/resources/extensions/subagent/index.js +905 -0
  264. package/dist/resources/extensions/subagent/isolation.js +384 -0
  265. package/dist/resources/extensions/subagent/worker-registry.js +73 -0
  266. package/dist/resources/extensions/ttsr/index.js +144 -0
  267. package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
  268. package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
  269. package/dist/resources/extensions/universal-config/discovery.js +94 -0
  270. package/dist/resources/extensions/universal-config/format.js +178 -0
  271. package/dist/resources/extensions/universal-config/index.js +99 -0
  272. package/dist/resources/extensions/universal-config/scanners.js +574 -0
  273. package/dist/resources/extensions/universal-config/tools.js +57 -0
  274. package/dist/resources/extensions/universal-config/types.js +8 -0
  275. package/dist/resources/extensions/voice/index.js +247 -0
  276. package/dist/startup-timings.d.ts +2 -0
  277. package/dist/startup-timings.js +22 -0
  278. package/dist/tool-bootstrap.js +59 -11
  279. package/dist/worktree-cli.js +7 -7
  280. package/package.json +1 -1
  281. package/packages/native/dist/native.d.ts +0 -2
  282. package/packages/native/dist/native.js +0 -2
  283. package/packages/native/src/native.ts +0 -3
  284. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  285. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  286. package/packages/pi-agent-core/dist/proxy.js +1 -1
  287. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  288. package/packages/pi-agent-core/src/proxy.ts +1 -1
  289. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  290. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  291. package/packages/pi-ai/dist/api-registry.js +0 -10
  292. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  293. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  294. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  295. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  296. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  297. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  298. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  299. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  300. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  301. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  302. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  303. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  304. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  305. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  306. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  307. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  308. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  309. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  310. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  311. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  312. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  313. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  314. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  315. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  316. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  317. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  318. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  319. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  320. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  321. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  322. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  323. package/packages/pi-ai/dist/utils/validation.js +0 -14
  324. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  325. package/packages/pi-ai/src/api-registry.ts +0 -12
  326. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  327. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  328. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  329. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  330. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  331. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  332. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  333. package/packages/pi-ai/src/utils/validation.ts +0 -15
  334. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  335. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  336. package/packages/pi-coding-agent/dist/config.js +4 -8
  337. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  338. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  339. package/packages/pi-coding-agent/dist/core/agent-session.js +9 -0
  340. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  341. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  342. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  343. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  344. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  345. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  346. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  347. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  348. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  349. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
  350. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  351. package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
  352. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  353. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -5
  354. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  355. package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
  356. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  357. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  358. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  359. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  360. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  361. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  362. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  363. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  364. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  365. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +0 -2
  366. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  367. package/packages/pi-coding-agent/dist/core/lsp/config.js +0 -7
  368. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  369. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  370. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  371. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  372. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  373. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  374. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  375. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +1 -1
  376. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  377. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  378. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  379. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  380. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  381. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  382. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  383. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  384. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  385. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  386. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  387. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  388. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  389. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  390. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  391. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  392. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  393. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  394. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  395. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  396. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  397. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -4
  398. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  399. package/packages/pi-coding-agent/dist/core/session-manager.js +2 -4
  400. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  401. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +0 -12
  402. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  403. package/packages/pi-coding-agent/dist/core/settings-manager.js +2 -2
  404. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  405. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  406. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  407. package/packages/pi-coding-agent/dist/index.js +1 -1
  408. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  409. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  410. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  411. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  412. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  413. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  414. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  415. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  416. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  417. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  418. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  419. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  420. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  421. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  422. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  423. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  424. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  425. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
  426. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  427. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
  428. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  429. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
  430. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  431. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
  432. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
  433. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  434. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  435. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  436. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  437. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  438. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  439. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  440. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  441. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  442. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  443. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  444. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  445. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  446. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  447. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  448. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  449. package/packages/pi-coding-agent/package.json +1 -1
  450. package/packages/pi-coding-agent/src/config.ts +5 -10
  451. package/packages/pi-coding-agent/src/core/agent-session.ts +9 -0
  452. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  453. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
  454. package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
  455. package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -13
  456. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  457. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  458. package/packages/pi-coding-agent/src/core/lsp/config.ts +0 -11
  459. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  460. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +1 -1
  461. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  462. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  463. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  464. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  465. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  466. package/packages/pi-coding-agent/src/core/session-manager.ts +2 -4
  467. package/packages/pi-coding-agent/src/core/settings-manager.ts +2 -2
  468. package/packages/pi-coding-agent/src/index.ts +1 -0
  469. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  470. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  471. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  472. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  473. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
  474. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
  475. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  476. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  477. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  478. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  479. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  480. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  481. package/packages/pi-tui/dist/components/editor.js +1 -1
  482. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  483. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  484. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  485. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  486. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  487. package/packages/pi-tui/dist/tui.d.ts +0 -22
  488. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  489. package/packages/pi-tui/dist/tui.js +6 -272
  490. package/packages/pi-tui/dist/tui.js.map +1 -1
  491. package/packages/pi-tui/dist/utils.d.ts +0 -7
  492. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  493. package/packages/pi-tui/dist/utils.js +0 -44
  494. package/packages/pi-tui/dist/utils.js.map +1 -1
  495. package/packages/pi-tui/src/components/editor.ts +1 -1
  496. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  497. package/packages/pi-tui/src/tui.ts +11 -312
  498. package/packages/pi-tui/src/utils.ts +0 -43
  499. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  500. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  501. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  502. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  503. package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
  504. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  505. package/pkg/dist/modes/interactive/theme/theme.js +6 -23
  506. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  507. package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
  508. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  509. package/pkg/dist/modes/interactive/theme/themes.js +175 -0
  510. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
  511. package/pkg/package.json +1 -1
  512. package/src/resources/extensions/bg-shell/index.ts +41 -46
  513. package/src/resources/extensions/browser-tools/index.ts +156 -67
  514. package/src/resources/extensions/gsd/auto/session.ts +47 -30
  515. package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
  516. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
  517. package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
  518. package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
  519. package/src/resources/extensions/gsd/auto-observability.ts +4 -2
  520. package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
  521. package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
  522. package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
  523. package/src/resources/extensions/gsd/auto-start.ts +440 -354
  524. package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
  525. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
  526. package/src/resources/extensions/gsd/auto-timers.ts +3 -4
  527. package/src/resources/extensions/gsd/auto-verification.ts +76 -72
  528. package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
  529. package/src/resources/extensions/gsd/auto-worktree.ts +453 -133
  530. package/src/resources/extensions/gsd/auto.ts +516 -1189
  531. package/src/resources/extensions/gsd/captures.ts +10 -4
  532. package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
  533. package/src/resources/extensions/gsd/commands.ts +39 -31
  534. package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
  535. package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  536. package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
  537. package/src/resources/extensions/gsd/git-service.ts +32 -12
  538. package/src/resources/extensions/gsd/gitignore.ts +4 -2
  539. package/src/resources/extensions/gsd/gsd-db.ts +375 -180
  540. package/src/resources/extensions/gsd/guided-flow.ts +22 -11
  541. package/src/resources/extensions/gsd/index.ts +76 -163
  542. package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
  543. package/src/resources/extensions/gsd/progress-score.ts +65 -200
  544. package/src/resources/extensions/gsd/quick.ts +121 -76
  545. package/src/resources/extensions/gsd/repo-identity.ts +56 -22
  546. package/src/resources/extensions/gsd/session-lock.ts +17 -0
  547. package/src/resources/extensions/gsd/templates/preferences.md +1 -0
  548. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
  549. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
  550. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  551. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
  552. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
  553. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
  554. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
  555. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
  556. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
  557. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
  558. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
  559. package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
  560. package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
  561. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
  562. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
  563. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
  564. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
  565. package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
  566. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
  567. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
  568. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
  569. package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
  570. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
  571. package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
  572. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
  573. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -136
  574. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  575. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  576. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
  577. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
  578. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
  579. package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
  580. package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
  581. package/src/resources/extensions/gsd/types.ts +90 -77
  582. package/src/resources/extensions/gsd/undo.ts +42 -46
  583. package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
  584. package/src/resources/extensions/gsd/verification-evidence.ts +0 -2
  585. package/src/resources/extensions/gsd/verification-gate.ts +4 -16
  586. package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
  587. package/src/resources/extensions/gsd/worktree-command.ts +29 -11
  588. package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
  589. package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
  590. package/src/resources/extensions/gsd/worktree.ts +7 -44
  591. package/src/resources/extensions/mcp-client/index.ts +2 -1
  592. package/src/resources/extensions/package.json +3 -0
  593. package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
  594. package/src/resources/extensions/search-the-web/index.ts +35 -52
  595. package/src/resources/extensions/search-the-web/tavily.ts +1 -1
  596. package/dist/resources/extensions/ask-user-questions.ts +0 -290
  597. package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
  598. package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
  599. package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
  600. package/dist/resources/extensions/async-jobs/index.ts +0 -141
  601. package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
  602. package/dist/resources/extensions/aws-auth/index.ts +0 -144
  603. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
  604. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
  605. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
  606. package/dist/resources/extensions/bg-shell/index.ts +0 -59
  607. package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
  608. package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
  609. package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
  610. package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
  611. package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
  612. package/dist/resources/extensions/bg-shell/types.ts +0 -303
  613. package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
  614. package/dist/resources/extensions/browser-tools/capture.ts +0 -199
  615. package/dist/resources/extensions/browser-tools/core.ts +0 -1196
  616. package/dist/resources/extensions/browser-tools/index.ts +0 -71
  617. package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
  618. package/dist/resources/extensions/browser-tools/refs.ts +0 -264
  619. package/dist/resources/extensions/browser-tools/settle.ts +0 -197
  620. package/dist/resources/extensions/browser-tools/state.ts +0 -408
  621. package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
  622. package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
  623. package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
  624. package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
  625. package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
  626. package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
  627. package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
  628. package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
  629. package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
  630. package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
  631. package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
  632. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
  633. package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
  634. package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
  635. package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
  636. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
  637. package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
  638. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
  639. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
  640. package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
  641. package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
  642. package/dist/resources/extensions/browser-tools/utils.ts +0 -660
  643. package/dist/resources/extensions/context7/index.ts +0 -428
  644. package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
  645. package/dist/resources/extensions/google-search/index.ts +0 -466
  646. package/dist/resources/extensions/gsd/activity-log.ts +0 -162
  647. package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
  648. package/dist/resources/extensions/gsd/auto/session.ts +0 -236
  649. package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
  650. package/dist/resources/extensions/gsd/auto-constants.ts +0 -6
  651. package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
  652. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
  653. package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
  654. package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
  655. package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
  656. package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
  657. package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
  658. package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
  659. package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
  660. package/dist/resources/extensions/gsd/auto-start.ts +0 -483
  661. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  662. package/dist/resources/extensions/gsd/auto-supervisor.ts +0 -61
  663. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
  664. package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
  665. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
  666. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
  667. package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
  668. package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
  669. package/dist/resources/extensions/gsd/auto.ts +0 -1834
  670. package/dist/resources/extensions/gsd/captures.ts +0 -427
  671. package/dist/resources/extensions/gsd/claude-import.ts +0 -656
  672. package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
  673. package/dist/resources/extensions/gsd/commands-config.ts +0 -102
  674. package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
  675. package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
  676. package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
  677. package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
  678. package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
  679. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
  680. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
  681. package/dist/resources/extensions/gsd/commands.ts +0 -1149
  682. package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
  683. package/dist/resources/extensions/gsd/context-budget.ts +0 -266
  684. package/dist/resources/extensions/gsd/context-store.ts +0 -195
  685. package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
  686. package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
  687. package/dist/resources/extensions/gsd/db-writer.ts +0 -360
  688. package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
  689. package/dist/resources/extensions/gsd/detection.ts +0 -470
  690. package/dist/resources/extensions/gsd/diff-context.ts +0 -214
  691. package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
  692. package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
  693. package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
  694. package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
  695. package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
  696. package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
  697. package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
  698. package/dist/resources/extensions/gsd/doctor.ts +0 -722
  699. package/dist/resources/extensions/gsd/error-utils.ts +0 -6
  700. package/dist/resources/extensions/gsd/exit-command.ts +0 -18
  701. package/dist/resources/extensions/gsd/export.ts +0 -317
  702. package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
  703. package/dist/resources/extensions/gsd/files.ts +0 -1058
  704. package/dist/resources/extensions/gsd/forensics.ts +0 -629
  705. package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
  706. package/dist/resources/extensions/gsd/git-service.ts +0 -580
  707. package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
  708. package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
  709. package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
  710. package/dist/resources/extensions/gsd/health-widget.ts +0 -167
  711. package/dist/resources/extensions/gsd/history.ts +0 -143
  712. package/dist/resources/extensions/gsd/index.ts +0 -1390
  713. package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
  714. package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
  715. package/dist/resources/extensions/gsd/key-manager.ts +0 -996
  716. package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
  717. package/dist/resources/extensions/gsd/md-importer.ts +0 -527
  718. package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
  719. package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
  720. package/dist/resources/extensions/gsd/memory-store.ts +0 -441
  721. package/dist/resources/extensions/gsd/metrics.ts +0 -532
  722. package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
  723. package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
  724. package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
  725. package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
  726. package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
  727. package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
  728. package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
  729. package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
  730. package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
  731. package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
  732. package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
  733. package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
  734. package/dist/resources/extensions/gsd/model-router.ts +0 -256
  735. package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
  736. package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
  737. package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
  738. package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
  739. package/dist/resources/extensions/gsd/notifications.ts +0 -87
  740. package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
  741. package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
  742. package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
  743. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
  744. package/dist/resources/extensions/gsd/paths.ts +0 -449
  745. package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
  746. package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
  747. package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
  748. package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
  749. package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
  750. package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
  751. package/dist/resources/extensions/gsd/preferences.ts +0 -416
  752. package/dist/resources/extensions/gsd/progress-score.ts +0 -273
  753. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
  754. package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
  755. package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
  756. package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
  757. package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
  758. package/dist/resources/extensions/gsd/queue-order.ts +0 -230
  759. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
  760. package/dist/resources/extensions/gsd/quick.ts +0 -212
  761. package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
  762. package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
  763. package/dist/resources/extensions/gsd/routing-history.ts +0 -286
  764. package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
  765. package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
  766. package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
  767. package/dist/resources/extensions/gsd/session-lock.ts +0 -426
  768. package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
  769. package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
  770. package/dist/resources/extensions/gsd/skill-health.ts +0 -417
  771. package/dist/resources/extensions/gsd/state.ts +0 -727
  772. package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
  773. package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
  774. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
  775. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
  776. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
  777. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
  778. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
  779. package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  780. package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
  781. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
  782. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
  783. package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  784. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
  785. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
  786. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  787. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
  788. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
  789. package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
  790. package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
  791. package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
  792. package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
  793. package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
  794. package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
  795. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
  796. package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
  797. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
  798. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
  799. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  800. package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
  801. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
  802. package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
  803. package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
  804. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
  805. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
  806. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
  807. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
  808. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
  809. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
  810. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
  811. package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
  812. package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
  813. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
  814. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
  815. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
  816. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  817. package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
  818. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
  819. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
  820. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
  821. package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
  822. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
  823. package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
  824. package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
  825. package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
  826. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
  827. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
  828. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
  829. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
  830. package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
  831. package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
  832. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
  833. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
  834. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
  835. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
  836. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
  837. package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
  838. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
  839. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
  840. package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
  841. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
  842. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
  843. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
  844. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
  845. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
  846. package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  847. package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
  848. package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
  849. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
  850. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  851. package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
  852. package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
  853. package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
  854. package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
  855. package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
  856. package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
  857. package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
  858. package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
  859. package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
  860. package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
  861. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
  862. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
  863. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
  864. package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
  865. package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
  866. package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
  867. package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
  868. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
  869. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
  870. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
  871. package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
  872. package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
  873. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
  874. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
  875. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
  876. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
  877. package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
  878. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
  879. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
  880. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
  881. package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
  882. package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
  883. package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
  884. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
  885. package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
  886. package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
  887. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
  888. package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
  889. package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  890. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
  891. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
  892. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  893. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
  894. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
  895. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
  896. package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
  897. package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
  898. package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
  899. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
  900. package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
  901. package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
  902. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
  903. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
  904. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
  905. package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
  906. package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
  907. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
  908. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
  909. package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
  910. package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
  911. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  912. package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
  913. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
  914. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
  915. package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
  916. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
  917. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
  918. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
  919. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  920. package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
  921. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
  922. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  923. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
  924. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
  925. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
  926. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
  927. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
  928. package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
  929. package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
  930. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
  931. package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
  932. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
  933. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
  934. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
  935. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
  936. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
  937. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
  938. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
  939. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
  940. package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
  941. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
  942. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
  943. package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
  944. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
  945. package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
  946. package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
  947. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
  948. package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
  949. package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
  950. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
  951. package/dist/resources/extensions/gsd/token-counter.ts +0 -65
  952. package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
  953. package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
  954. package/dist/resources/extensions/gsd/types.ts +0 -425
  955. package/dist/resources/extensions/gsd/undo.ts +0 -223
  956. package/dist/resources/extensions/gsd/unit-id.ts +0 -14
  957. package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
  958. package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
  959. package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
  960. package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
  961. package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
  962. package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
  963. package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
  964. package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
  965. package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
  966. package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
  967. package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
  968. package/dist/resources/extensions/gsd/worktree.ts +0 -257
  969. package/dist/resources/extensions/mac-tools/index.ts +0 -852
  970. package/dist/resources/extensions/mcp-client/index.ts +0 -459
  971. package/dist/resources/extensions/remote-questions/config.ts +0 -83
  972. package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
  973. package/dist/resources/extensions/remote-questions/format.ts +0 -315
  974. package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
  975. package/dist/resources/extensions/remote-questions/manager.ts +0 -184
  976. package/dist/resources/extensions/remote-questions/notify.ts +0 -90
  977. package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
  978. package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
  979. package/dist/resources/extensions/remote-questions/status.ts +0 -31
  980. package/dist/resources/extensions/remote-questions/store.ts +0 -81
  981. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
  982. package/dist/resources/extensions/remote-questions/types.ts +0 -102
  983. package/dist/resources/extensions/search-the-web/cache.ts +0 -78
  984. package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
  985. package/dist/resources/extensions/search-the-web/format.ts +0 -258
  986. package/dist/resources/extensions/search-the-web/http.ts +0 -238
  987. package/dist/resources/extensions/search-the-web/index.ts +0 -65
  988. package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
  989. package/dist/resources/extensions/search-the-web/provider.ts +0 -148
  990. package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
  991. package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
  992. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
  993. package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
  994. package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
  995. package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
  996. package/dist/resources/extensions/shared/frontmatter.ts +0 -117
  997. package/dist/resources/extensions/shared/interview-ui.ts +0 -613
  998. package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
  999. package/dist/resources/extensions/shared/sanitize.ts +0 -19
  1000. package/dist/resources/extensions/shared/terminal.ts +0 -23
  1001. package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
  1002. package/dist/resources/extensions/shared/ui.ts +0 -400
  1003. package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
  1004. package/dist/resources/extensions/slash-commands/audit.ts +0 -88
  1005. package/dist/resources/extensions/slash-commands/clear.ts +0 -10
  1006. package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
  1007. package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
  1008. package/dist/resources/extensions/slash-commands/index.ts +0 -12
  1009. package/dist/resources/extensions/subagent/agents.ts +0 -126
  1010. package/dist/resources/extensions/subagent/index.ts +0 -1121
  1011. package/dist/resources/extensions/subagent/isolation.ts +0 -501
  1012. package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
  1013. package/dist/resources/extensions/ttsr/index.ts +0 -168
  1014. package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
  1015. package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
  1016. package/dist/resources/extensions/universal-config/discovery.ts +0 -104
  1017. package/dist/resources/extensions/universal-config/format.ts +0 -191
  1018. package/dist/resources/extensions/universal-config/index.ts +0 -120
  1019. package/dist/resources/extensions/universal-config/scanners.ts +0 -642
  1020. package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
  1021. package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
  1022. package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
  1023. package/dist/resources/extensions/universal-config/tools.ts +0 -60
  1024. package/dist/resources/extensions/universal-config/types.ts +0 -135
  1025. package/dist/resources/extensions/voice/index.ts +0 -272
  1026. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
  1027. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
  1028. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  1029. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  1030. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
  1031. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
  1032. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
  1033. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
  1034. package/pkg/dist/modes/interactive/theme/dark.json +0 -85
  1035. package/pkg/dist/modes/interactive/theme/light.json +0 -84
  1036. package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
  1037. package/src/resources/extensions/gsd/auto-constants.ts +0 -6
  1038. package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
  1039. package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  1040. package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
  1041. package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  1042. package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  1043. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  1044. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  1045. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  1046. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  1047. package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  1048. package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
@@ -1,1172 +0,0 @@
1
- import { mkdtempSync, mkdirSync, writeFileSync, rmSync, existsSync } from "node:fs";
2
- import { join, dirname } from "node:path";
3
- import { tmpdir } from "node:os";
4
- import { execSync } from "node:child_process";
5
-
6
- import {
7
- inferCommitType,
8
- buildTaskCommitMessage,
9
- GitServiceImpl,
10
- RUNTIME_EXCLUSION_PATHS,
11
- VALID_BRANCH_NAME,
12
- runGit,
13
- readIntegrationBranch,
14
- writeIntegrationBranch,
15
- type GitPreferences,
16
- type CommitOptions,
17
- type PreMergeCheckResult,
18
- type TaskCommitContext,
19
- } from "../git-service.ts";
20
- import { createTestContext } from './test-helpers.ts';
21
-
22
- const { assertEq, assertTrue, report } = createTestContext();
23
- function run(command: string, cwd: string): string {
24
- return execSync(command, { cwd, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }).trim();
25
- }
26
-
27
- async function main(): Promise<void> {
28
- // ─── inferCommitType ───────────────────────────────────────────────────
29
-
30
- console.log("\n=== inferCommitType ===");
31
-
32
- assertEq(
33
- inferCommitType("Implement user authentication"),
34
- "feat",
35
- "generic feature title → feat"
36
- );
37
-
38
- assertEq(
39
- inferCommitType("Add dashboard page"),
40
- "feat",
41
- "add-style title → feat"
42
- );
43
-
44
- assertEq(
45
- inferCommitType("Fix login redirect bug"),
46
- "fix",
47
- "title with 'fix' → fix"
48
- );
49
-
50
- assertEq(
51
- inferCommitType("Bug in session handling"),
52
- "fix",
53
- "title with 'bug' → fix"
54
- );
55
-
56
- assertEq(
57
- inferCommitType("Hotfix for production crash"),
58
- "fix",
59
- "title with 'hotfix' → fix"
60
- );
61
-
62
- assertEq(
63
- inferCommitType("Patch memory leak"),
64
- "fix",
65
- "title with 'patch' → fix"
66
- );
67
-
68
- assertEq(
69
- inferCommitType("Refactor state management"),
70
- "refactor",
71
- "title with 'refactor' → refactor"
72
- );
73
-
74
- assertEq(
75
- inferCommitType("Restructure project layout"),
76
- "refactor",
77
- "title with 'restructure' → refactor"
78
- );
79
-
80
- assertEq(
81
- inferCommitType("Reorganize module imports"),
82
- "refactor",
83
- "title with 'reorganize' → refactor"
84
- );
85
-
86
- assertEq(
87
- inferCommitType("Update API documentation"),
88
- "docs",
89
- "title with 'documentation' → docs"
90
- );
91
-
92
- assertEq(
93
- inferCommitType("Add doc for setup guide"),
94
- "docs",
95
- "title with 'doc' → docs"
96
- );
97
-
98
- assertEq(
99
- inferCommitType("Add unit tests for auth"),
100
- "test",
101
- "title with 'tests' → test"
102
- );
103
-
104
- assertEq(
105
- inferCommitType("Testing infrastructure setup"),
106
- "test",
107
- "title with 'testing' → test"
108
- );
109
-
110
- assertEq(
111
- inferCommitType("Chore: update dependencies"),
112
- "chore",
113
- "title with 'chore' → chore"
114
- );
115
-
116
- assertEq(
117
- inferCommitType("Cleanup unused imports"),
118
- "chore",
119
- "title with 'cleanup' → chore"
120
- );
121
-
122
- assertEq(
123
- inferCommitType("Clean up stale branches"),
124
- "chore",
125
- "title with 'clean up' → chore"
126
- );
127
-
128
- assertEq(
129
- inferCommitType("Archive old milestones"),
130
- "chore",
131
- "title with 'archive' → chore"
132
- );
133
-
134
- assertEq(
135
- inferCommitType("Remove deprecated endpoints"),
136
- "chore",
137
- "title with 'remove' → chore"
138
- );
139
-
140
- assertEq(
141
- inferCommitType("Delete temp files"),
142
- "chore",
143
- "title with 'delete' → chore"
144
- );
145
-
146
- // Mixed keywords — first match wins
147
- assertEq(
148
- inferCommitType("Fix and refactor the login module"),
149
- "fix",
150
- "mixed keywords → first match wins (fix before refactor)"
151
- );
152
-
153
- assertEq(
154
- inferCommitType("Refactor test utilities"),
155
- "refactor",
156
- "mixed keywords → first match wins (refactor before test)"
157
- );
158
-
159
- // Unknown / unrecognized title → feat
160
- assertEq(
161
- inferCommitType("Build the new pipeline"),
162
- "feat",
163
- "unrecognized title → feat"
164
- );
165
-
166
- assertEq(
167
- inferCommitType(""),
168
- "feat",
169
- "empty title → feat"
170
- );
171
-
172
- // Word boundary: "testify" should NOT match "test"
173
- assertEq(
174
- inferCommitType("Testify integration"),
175
- "feat",
176
- "'testify' does not match 'test' — word boundary prevents partial match"
177
- );
178
-
179
- // "documentary" should NOT match "doc" (word boundary)
180
- assertEq(
181
- inferCommitType("Documentary style UI"),
182
- "feat",
183
- "'documentary' does not match 'doc' — word boundary prevents partial match"
184
- );
185
-
186
- // "prefix" should NOT match "fix" (word boundary)
187
- assertEq(
188
- inferCommitType("Add prefix to all IDs"),
189
- "feat",
190
- "'prefix' does not match 'fix' — word boundary prevents partial match"
191
- );
192
-
193
- // ─── inferCommitType with oneLiner ──────────────────────────────────────
194
-
195
- console.log("\n=== inferCommitType with oneLiner ===");
196
-
197
- assertEq(
198
- inferCommitType("implement dashboard", "Fixed rendering bug in sidebar"),
199
- "fix",
200
- "one-liner with 'fixed' overrides generic title → fix"
201
- );
202
-
203
- assertEq(
204
- inferCommitType("add search", "Optimized query performance with caching"),
205
- "perf",
206
- "one-liner with 'performance' and 'caching' → perf"
207
- );
208
-
209
- // ─── buildTaskCommitMessage ─────────────────────────────────────────────
210
-
211
- console.log("\n=== buildTaskCommitMessage ===");
212
-
213
- {
214
- const msg = buildTaskCommitMessage({
215
- taskId: "S01/T02",
216
- taskTitle: "implement user authentication",
217
- oneLiner: "Added JWT-based auth with refresh token rotation",
218
- keyFiles: ["src/auth.ts", "src/middleware/jwt.ts"],
219
- });
220
- assertTrue(msg.startsWith("feat(S01/T02):"), "message starts with type(scope)");
221
- assertTrue(msg.includes("JWT-based auth"), "message includes one-liner content");
222
- assertTrue(msg.includes("- src/auth.ts"), "message body includes key files");
223
- assertTrue(msg.includes("- src/middleware/jwt.ts"), "message body includes second key file");
224
- }
225
-
226
- {
227
- const msg = buildTaskCommitMessage({
228
- taskId: "S02/T01",
229
- taskTitle: "fix login redirect bug",
230
- });
231
- assertTrue(msg.startsWith("fix(S02/T01):"), "infers fix type from title");
232
- assertTrue(msg.includes("fix login redirect bug"), "uses task title when no one-liner");
233
- assertTrue(!msg.includes("\n"), "no body when no key files");
234
- }
235
-
236
- {
237
- const msg = buildTaskCommitMessage({
238
- taskId: "S01/T03",
239
- taskTitle: "add tests",
240
- oneLiner: "Unit tests for auth module with coverage",
241
- });
242
- assertTrue(msg.startsWith("test(S01/T03):"), "infers test type");
243
- }
244
-
245
- // ─── RUNTIME_EXCLUSION_PATHS ───────────────────────────────────────────
246
-
247
- console.log("\n=== RUNTIME_EXCLUSION_PATHS ===");
248
-
249
- assertEq(
250
- RUNTIME_EXCLUSION_PATHS.length,
251
- 9,
252
- "exactly 9 runtime exclusion paths"
253
- );
254
-
255
- const expectedPaths = [
256
- ".gsd/activity/",
257
- ".gsd/runtime/",
258
- ".gsd/worktrees/",
259
- ".gsd/auto.lock",
260
- ".gsd/metrics.json",
261
- ".gsd/completed-units.json",
262
- ".gsd/STATE.md",
263
- ".gsd/gsd.db",
264
- ".gsd/DISCUSSION-MANIFEST.json",
265
- ];
266
-
267
- assertEq(
268
- [...RUNTIME_EXCLUSION_PATHS],
269
- expectedPaths,
270
- "paths match expected set in order"
271
- );
272
-
273
- assertTrue(
274
- RUNTIME_EXCLUSION_PATHS.includes(".gsd/activity/"),
275
- "includes .gsd/activity/"
276
- );
277
- assertTrue(
278
- RUNTIME_EXCLUSION_PATHS.includes(".gsd/STATE.md"),
279
- "includes .gsd/STATE.md"
280
- );
281
-
282
- // ─── runGit ────────────────────────────────────────────────────────────
283
-
284
- console.log("\n=== runGit ===");
285
-
286
- const tempDir = mkdtempSync(join(tmpdir(), "gsd-git-service-test-"));
287
- run("git init -b main", tempDir);
288
- run('git config user.name "Pi Test"', tempDir);
289
- run('git config user.email "pi@example.com"', tempDir);
290
-
291
- // runGit should work on a valid repo
292
- const branch = runGit(tempDir, ["branch", "--show-current"]);
293
- assertEq(branch, "main", "runGit returns current branch");
294
-
295
- // runGit allowFailure returns empty string on failure
296
- const result = runGit(tempDir, ["log", "--oneline"], { allowFailure: true });
297
- assertEq(result, "", "runGit allowFailure returns empty on error (no commits yet)");
298
-
299
- // runGit throws on failure without allowFailure
300
- let threw = false;
301
- try {
302
- runGit(tempDir, ["log", "--oneline"]);
303
- } catch (e) {
304
- threw = true;
305
- assertTrue(
306
- (e as Error).message.includes("git log --oneline failed"),
307
- "error message includes command and path"
308
- );
309
- }
310
- assertTrue(threw, "runGit throws without allowFailure on error");
311
-
312
- // ─── Type exports compile check ────────────────────────────────────────
313
-
314
- console.log("\n=== Type exports ===");
315
-
316
- // These are compile-time checks — if we got here, the types import fine
317
- const _prefs: GitPreferences = { auto_push: true, remote: "origin" };
318
- const _opts: CommitOptions = { message: "test" };
319
- assertTrue(true, "GitPreferences type exported and usable");
320
- assertTrue(true, "CommitOptions type exported and usable");
321
-
322
- // Cleanup T01 temp dir
323
- rmSync(tempDir, { recursive: true, force: true });
324
-
325
- // ─── Helper: create file with intermediate dirs ────────────────────────
326
-
327
- function createFile(base: string, relativePath: string, content: string = "x"): void {
328
- const full = join(base, relativePath);
329
- mkdirSync(dirname(full), { recursive: true });
330
- writeFileSync(full, content, "utf-8");
331
- }
332
-
333
- function initTempRepo(): string {
334
- const dir = mkdtempSync(join(tmpdir(), "gsd-git-t02-"));
335
- run("git init -b main", dir);
336
- run('git config user.name "Pi Test"', dir);
337
- run('git config user.email "pi@example.com"', dir);
338
- // Need an initial commit so HEAD exists
339
- createFile(dir, ".gitkeep", "");
340
- run("git add -A", dir);
341
- run('git commit -m "init"', dir);
342
- return dir;
343
- }
344
-
345
- // ─── GitServiceImpl: smart staging ─────────────────────────────────────
346
-
347
- console.log("\n=== GitServiceImpl: smart staging ===");
348
-
349
- {
350
- const repo = initTempRepo();
351
- const svc = new GitServiceImpl(repo);
352
-
353
- // Create runtime files (should be excluded from staging)
354
- createFile(repo, ".gsd/activity/log.jsonl", "log data");
355
- createFile(repo, ".gsd/runtime/state.json", '{"state":true}');
356
- createFile(repo, ".gsd/STATE.md", "# State");
357
- createFile(repo, ".gsd/auto.lock", "lock");
358
- createFile(repo, ".gsd/metrics.json", "{}");
359
- createFile(repo, ".gsd/worktrees/wt/file.txt", "wt data");
360
-
361
- // Create a real file (should be staged)
362
- createFile(repo, "src/code.ts", 'console.log("hello");');
363
-
364
- const result = svc.commit({ message: "test: smart staging" });
365
-
366
- assertEq(result, "test: smart staging", "commit returns the commit message");
367
-
368
- // Verify only src/code.ts is in the commit
369
- const showStat = run("git show --stat --format= HEAD", repo);
370
- assertTrue(showStat.includes("src/code.ts"), "src/code.ts is in the commit");
371
- assertTrue(!showStat.includes(".gsd/activity"), ".gsd/activity/ excluded from commit");
372
- assertTrue(!showStat.includes(".gsd/runtime"), ".gsd/runtime/ excluded from commit");
373
- assertTrue(!showStat.includes("STATE.md"), ".gsd/STATE.md excluded from commit");
374
- assertTrue(!showStat.includes("auto.lock"), ".gsd/auto.lock excluded from commit");
375
- assertTrue(!showStat.includes("metrics.json"), ".gsd/metrics.json excluded from commit");
376
- assertTrue(!showStat.includes(".gsd/worktrees"), ".gsd/worktrees/ excluded from commit");
377
-
378
- // Verify runtime files are still untracked
379
- // git status --short may collapse to "?? .gsd/" or show individual files
380
- // Use --untracked-files=all to force individual listing
381
- const statusOut = run("git status --short --untracked-files=all", repo);
382
- assertTrue(statusOut.includes(".gsd/activity/"), "activity still untracked after commit");
383
- assertTrue(statusOut.includes(".gsd/runtime/"), "runtime still untracked after commit");
384
- assertTrue(statusOut.includes(".gsd/STATE.md"), "STATE.md still untracked after commit");
385
-
386
- rmSync(repo, { recursive: true, force: true });
387
- }
388
-
389
- // ─── GitServiceImpl: smart staging excludes tracked runtime files ──────
390
-
391
- console.log("\n=== GitServiceImpl: smart staging excludes tracked runtime files ===");
392
-
393
- {
394
- // Reproduces the real bug: .gsd/ runtime files that are already tracked
395
- // (in the git index) must be excluded from staging even when .gsd/ is
396
- // in .gitignore. The old pathspec-exclude approach failed silently in
397
- // this case and fell back to `git add -A`, staging everything.
398
- //
399
- // The fix has three layers:
400
- // 1. Auto-cleanup: git rm --cached removes tracked runtime files from index
401
- // 2. Stage-then-unstage: git add -A + git reset HEAD replaces pathspec excludes
402
- // 3. Pre-checkout discard: git checkout -- .gsd/ clears dirty runtime files
403
-
404
- const repo = initTempRepo();
405
- const svc = new GitServiceImpl(repo);
406
-
407
- // Simulate a repo where .gsd/ files were previously force-added
408
- createFile(repo, ".gsd/metrics.json", '{"version":1}');
409
- createFile(repo, ".gsd/completed-units.json", '["unit1"]');
410
- createFile(repo, ".gsd/activity/log.jsonl", '{"ts":1}');
411
- createFile(repo, "src/real.ts", "real code");
412
- // Force-add .gsd/ files to simulate historical tracking
413
- runGit(repo, ["add", "-f", ".gsd/metrics.json", ".gsd/completed-units.json", ".gsd/activity/log.jsonl", "src/real.ts"]);
414
- runGit(repo, ["commit", "-F", "-"], { input: "init with tracked runtime files" });
415
-
416
- // Add .gitignore with .gsd/ (matches real-world setup from ensureGitignore)
417
- createFile(repo, ".gitignore", ".gsd/\n");
418
- runGit(repo, ["add", ".gitignore"]);
419
- runGit(repo, ["commit", "-F", "-"], { input: "add gitignore" });
420
-
421
- // Verify runtime files are tracked (precondition)
422
- const tracked = run("git ls-files .gsd/", repo);
423
- assertTrue(tracked.includes("metrics.json"), "precondition: metrics.json tracked");
424
- assertTrue(tracked.includes("completed-units.json"), "precondition: completed-units.json tracked");
425
- assertTrue(tracked.includes("activity/log.jsonl"), "precondition: activity log tracked");
426
-
427
- // Now modify both runtime and real files
428
- createFile(repo, ".gsd/metrics.json", '{"version":2}');
429
- createFile(repo, ".gsd/completed-units.json", '["unit1","unit2"]');
430
- createFile(repo, ".gsd/activity/log.jsonl", '{"ts":2}');
431
- createFile(repo, "src/real.ts", "updated code");
432
-
433
- // autoCommit should commit real.ts. The first call also runs auto-cleanup
434
- // which removes runtime files from the index via a dedicated commit.
435
- const msg = svc.autoCommit("execute-task", "M001/S01/T01");
436
- assertTrue(msg !== null, "autoCommit produces a commit");
437
-
438
- const show = run("git show --stat HEAD", repo);
439
- assertTrue(show.includes("src/real.ts"), "real files are committed");
440
-
441
- // After the commit, runtime files must no longer be in the git index.
442
- // They remain on disk but are untracked (protected by .gitignore).
443
- const trackedAfter = run("git ls-files .gsd/", repo);
444
- assertEq(trackedAfter, "", "no .gsd/ runtime files remain in the index");
445
-
446
- // Verify a second autoCommit with changed runtime files does NOT stage them
447
- createFile(repo, ".gsd/metrics.json", '{"version":3}');
448
- createFile(repo, ".gsd/completed-units.json", '["unit1","unit2","unit3"]');
449
- createFile(repo, "src/real.ts", "third version");
450
-
451
- const msg2 = svc.autoCommit("execute-task", "M001/S01/T02");
452
- assertTrue(msg2 !== null, "second autoCommit produces a commit");
453
-
454
- const show2 = run("git show --stat HEAD", repo);
455
- assertTrue(show2.includes("src/real.ts"), "real files committed in second commit");
456
- assertTrue(!show2.includes("metrics"), "metrics.json not in second commit");
457
- assertTrue(!show2.includes("completed-units"), "completed-units.json not in second commit");
458
- assertTrue(!show2.includes("activity"), "activity not in second commit");
459
-
460
- rmSync(repo, { recursive: true, force: true });
461
- }
462
-
463
- // ─── GitServiceImpl: autoCommit on clean repo ──────────────────────────
464
-
465
- console.log("\n=== GitServiceImpl: autoCommit ===");
466
-
467
- {
468
- const repo = initTempRepo();
469
- const svc = new GitServiceImpl(repo);
470
-
471
- // Clean repo — autoCommit should return null
472
- const cleanResult = svc.autoCommit("task", "T01");
473
- assertEq(cleanResult, null, "autoCommit on clean repo returns null");
474
-
475
- rmSync(repo, { recursive: true, force: true });
476
- }
477
-
478
- // ─── GitServiceImpl: autoCommit on dirty repo ──────────────────────────
479
-
480
- console.log("\n=== GitServiceImpl: autoCommit on dirty repo ===");
481
-
482
- {
483
- const repo = initTempRepo();
484
- const svc = new GitServiceImpl(repo);
485
-
486
- createFile(repo, "src/new-feature.ts", "export const x = 1;");
487
-
488
- // Without task context, autoCommit uses generic chore message
489
- const msg = svc.autoCommit("task", "T01");
490
- assertEq(msg, "chore(T01): auto-commit after task", "autoCommit returns generic format without task context");
491
-
492
- const log = run("git log --oneline -1", repo);
493
- assertTrue(log.includes("chore(T01): auto-commit after task"), "generic commit message is in git log");
494
-
495
- // With task context, autoCommit uses meaningful message
496
- createFile(repo, "src/auth.ts", "export function login() {}");
497
- const msg2 = svc.autoCommit("task", "S01/T02", [], {
498
- taskId: "S01/T02",
499
- taskTitle: "implement user authentication endpoint",
500
- oneLiner: "Added JWT-based auth with refresh token rotation",
501
- keyFiles: ["src/auth.ts"],
502
- });
503
- assertTrue(msg2 !== null, "autoCommit with task context returns a message");
504
- assertTrue(msg2!.startsWith("feat(S01/T02):"), "meaningful commit uses feat type and scope");
505
- assertTrue(msg2!.includes("JWT-based auth"), "meaningful commit includes one-liner content");
506
-
507
- rmSync(repo, { recursive: true, force: true });
508
- }
509
-
510
- // ─── GitServiceImpl: empty-after-staging guard ─────────────────────────
511
-
512
- console.log("\n=== GitServiceImpl: empty-after-staging guard ===");
513
-
514
- {
515
- const repo = initTempRepo();
516
- const svc = new GitServiceImpl(repo);
517
-
518
- // Create only runtime files
519
- createFile(repo, ".gsd/activity/x.jsonl", "data");
520
-
521
- const result = svc.autoCommit("task", "T02");
522
- assertEq(result, null, "autoCommit returns null when only runtime files are dirty");
523
-
524
- // Verify no new commit was created (should still be at init commit)
525
- const logCount = run("git rev-list --count HEAD", repo);
526
- assertEq(logCount, "1", "no new commit created when only runtime files changed");
527
-
528
- rmSync(repo, { recursive: true, force: true });
529
- }
530
-
531
- // ─── GitServiceImpl: autoCommit with extraExclusions ───────────────────
532
-
533
- console.log("\n=== GitServiceImpl: autoCommit with extraExclusions ===");
534
-
535
- {
536
- const repo = initTempRepo();
537
- const svc = new GitServiceImpl(repo);
538
-
539
- // Create both a .gsd/ planning file and a regular source file
540
- createFile(repo, ".gsd/milestones/M001/M001-ROADMAP.md", "- [x] S01");
541
- createFile(repo, "src/feature.ts", "export const y = 2;");
542
-
543
- // Auto-commit with .gsd/ excluded (simulates pre-switch)
544
- const msg = svc.autoCommit("pre-switch", "main", [".gsd/"]);
545
- assertEq(msg, "chore(main): auto-commit after pre-switch", "pre-switch autoCommit with .gsd/ exclusion commits");
546
-
547
- // Verify .gsd/ file was NOT committed
548
- const show = run("git show --stat HEAD", repo);
549
- assertTrue(!show.includes("ROADMAP"), ".gsd/ files excluded from pre-switch auto-commit");
550
- assertTrue(show.includes("feature.ts"), "non-.gsd/ files included in pre-switch auto-commit");
551
-
552
- rmSync(repo, { recursive: true, force: true });
553
- }
554
-
555
- // ─── GitServiceImpl: autoCommit extraExclusions — only .gsd/ dirty ────
556
-
557
- console.log("\n=== GitServiceImpl: autoCommit extraExclusions — only .gsd/ dirty ===");
558
-
559
- {
560
- const repo = initTempRepo();
561
- const svc = new GitServiceImpl(repo);
562
-
563
- // Create only .gsd/ planning files
564
- createFile(repo, ".gsd/milestones/M001/M001-ROADMAP.md", "- [x] S01");
565
- createFile(repo, ".gsd/STATE.md", "state content");
566
-
567
- // Auto-commit with .gsd/ excluded — nothing else to commit
568
- const result = svc.autoCommit("pre-switch", "main", [".gsd/"]);
569
- assertEq(result, null, "autoCommit returns null when only .gsd/ files are dirty and excluded");
570
-
571
- rmSync(repo, { recursive: true, force: true });
572
- }
573
-
574
- // ─── GitServiceImpl: commit returns null when nothing staged ───────────
575
-
576
- console.log("\n=== GitServiceImpl: commit empty ===");
577
-
578
- {
579
- const repo = initTempRepo();
580
- const svc = new GitServiceImpl(repo);
581
-
582
- // Nothing dirty, commit should return null
583
- const result = svc.commit({ message: "should not commit" });
584
- assertEq(result, null, "commit returns null when nothing to stage");
585
-
586
- rmSync(repo, { recursive: true, force: true });
587
- }
588
-
589
- // ─── Helper: create repo for branch tests ────────────────────────────
590
-
591
- function initBranchTestRepo(): string {
592
- const dir = mkdtempSync(join(tmpdir(), "gsd-git-t03-"));
593
- run("git init -b main", dir);
594
- run('git config user.name "Pi Test"', dir);
595
- run('git config user.email "pi@example.com"', dir);
596
- createFile(dir, ".gitkeep", "");
597
- run("git add -A", dir);
598
- run('git commit -m "init"', dir);
599
- return dir;
600
- }
601
-
602
- // ─── getCurrentBranch ────────────────────────────────────────────────
603
-
604
- console.log("\n=== Branch queries ===");
605
-
606
- {
607
- const repo = initBranchTestRepo();
608
- const svc = new GitServiceImpl(repo);
609
-
610
- assertEq(svc.getCurrentBranch(), "main", "getCurrentBranch returns main on main branch");
611
-
612
- run("git checkout -b gsd/M001/S01", repo);
613
- assertEq(svc.getCurrentBranch(), "gsd/M001/S01", "getCurrentBranch returns slice branch name");
614
-
615
- run("git checkout -b feature/foo", repo);
616
- assertEq(svc.getCurrentBranch(), "feature/foo", "getCurrentBranch returns feature branch name");
617
-
618
- rmSync(repo, { recursive: true, force: true });
619
- }
620
-
621
- // ─── getMainBranch ────────────────────────────────────────────────────
622
-
623
- console.log("\n=== getMainBranch ===");
624
-
625
- {
626
- const repo = initBranchTestRepo();
627
- const svc = new GitServiceImpl(repo);
628
-
629
- // Basic case: repo has "main" branch
630
- assertEq(svc.getMainBranch(), "main", "getMainBranch returns main when main exists");
631
-
632
- rmSync(repo, { recursive: true, force: true });
633
- }
634
-
635
- {
636
- // master-only repo
637
- const repo = mkdtempSync(join(tmpdir(), "gsd-git-t03-master-"));
638
- run("git init -b master", repo);
639
- run('git config user.name "Pi Test"', repo);
640
- run('git config user.email "pi@example.com"', repo);
641
- createFile(repo, ".gitkeep", "");
642
- run("git add -A", repo);
643
- run('git commit -m "init"', repo);
644
-
645
- const svc = new GitServiceImpl(repo);
646
- assertEq(svc.getMainBranch(), "master", "getMainBranch returns master when only master exists");
647
-
648
- rmSync(repo, { recursive: true, force: true });
649
- }
650
-
651
- // ═══════════════════════════════════════════════════════════════════════
652
- // S05: Enhanced features — snapshots, pre-merge checks
653
- // ═══════════════════════════════════════════════════════════════════════
654
-
655
- // ─── createSnapshot: prefs enabled ─────────────────────────────────────
656
-
657
- console.log("\n=== createSnapshot: enabled ===");
658
-
659
- {
660
- const repo = initBranchTestRepo();
661
- const svc = new GitServiceImpl(repo, { snapshots: true });
662
-
663
- // Create a branch with a commit
664
- run("git checkout -b gsd/M001/S01", repo);
665
- createFile(repo, "src/snap.ts", "snapshot me");
666
- svc.commit({ message: "snapshot test commit" });
667
-
668
- // Create snapshot ref for this branch
669
- svc.createSnapshot("gsd/M001/S01");
670
-
671
- // Verify ref exists under refs/gsd/snapshots/
672
- const refs = run("git for-each-ref refs/gsd/snapshots/", repo);
673
- assertTrue(refs.includes("refs/gsd/snapshots/gsd/M001/S01/"), "snapshot ref created under refs/gsd/snapshots/");
674
-
675
- rmSync(repo, { recursive: true, force: true });
676
- }
677
-
678
- // ─── createSnapshot: prefs disabled ────────────────────────────────────
679
-
680
- console.log("\n=== createSnapshot: disabled ===");
681
-
682
- {
683
- const repo = initBranchTestRepo();
684
- const svc = new GitServiceImpl(repo, { snapshots: false });
685
-
686
- run("git checkout -b gsd/M001/S01", repo);
687
- createFile(repo, "src/no-snap.ts", "no snapshot");
688
- svc.commit({ message: "no snapshot commit" });
689
-
690
- // createSnapshot should be a no-op when disabled
691
- svc.createSnapshot("gsd/M001/S01");
692
-
693
- const refs = run("git for-each-ref refs/gsd/snapshots/", repo);
694
- assertEq(refs, "", "no snapshot ref created when prefs.snapshots is false");
695
-
696
- rmSync(repo, { recursive: true, force: true });
697
- }
698
-
699
- // ─── runPreMergeCheck: pass ────────────────────────────────────────────
700
-
701
- console.log("\n=== runPreMergeCheck: pass ===");
702
-
703
- {
704
- const repo = initBranchTestRepo();
705
- // Create package.json with passing test script
706
- createFile(repo, "package.json", JSON.stringify({
707
- name: "test-pass",
708
- scripts: { test: 'node -e "process.exit(0)"' },
709
- }));
710
- run("git add -A", repo);
711
- run('git commit -m "add package.json"', repo);
712
-
713
- const svc = new GitServiceImpl(repo, { pre_merge_check: true });
714
- const result: PreMergeCheckResult = svc.runPreMergeCheck();
715
-
716
- assertEq(result.passed, true, "runPreMergeCheck returns passed:true when tests pass");
717
- assertTrue(!result.skipped, "runPreMergeCheck is not skipped when enabled");
718
-
719
- rmSync(repo, { recursive: true, force: true });
720
- }
721
-
722
- // ─── runPreMergeCheck: fail ────────────────────────────────────────────
723
-
724
- console.log("\n=== runPreMergeCheck: fail ===");
725
-
726
- {
727
- const repo = initBranchTestRepo();
728
- // Create package.json with failing test script
729
- createFile(repo, "package.json", JSON.stringify({
730
- name: "test-fail",
731
- scripts: { test: 'node -e "process.exit(1)"' },
732
- }));
733
- run("git add -A", repo);
734
- run('git commit -m "add failing package.json"', repo);
735
-
736
- const svc = new GitServiceImpl(repo, { pre_merge_check: true });
737
- const result: PreMergeCheckResult = svc.runPreMergeCheck();
738
-
739
- assertEq(result.passed, false, "runPreMergeCheck returns passed:false when tests fail");
740
- assertTrue(!result.skipped, "runPreMergeCheck is not skipped when enabled");
741
-
742
- rmSync(repo, { recursive: true, force: true });
743
- }
744
-
745
- // ─── runPreMergeCheck: disabled ────────────────────────────────────────
746
-
747
- console.log("\n=== runPreMergeCheck: disabled ===");
748
-
749
- {
750
- const repo = initBranchTestRepo();
751
- createFile(repo, "package.json", JSON.stringify({
752
- name: "test-disabled",
753
- scripts: { test: 'node -e "process.exit(1)"' },
754
- }));
755
- run("git add -A", repo);
756
- run('git commit -m "add package.json"', repo);
757
-
758
- const svc = new GitServiceImpl(repo, { pre_merge_check: false });
759
- const result: PreMergeCheckResult = svc.runPreMergeCheck();
760
-
761
- assertEq(result.skipped, true, "runPreMergeCheck skipped when pre_merge_check is false");
762
- assertEq(result.passed, true, "runPreMergeCheck returns passed:true when skipped (no block)");
763
-
764
- rmSync(repo, { recursive: true, force: true });
765
- }
766
-
767
- // ─── runPreMergeCheck: custom command ──────────────────────────────────
768
-
769
- console.log("\n=== runPreMergeCheck: custom command ===");
770
-
771
- {
772
- const repo = initBranchTestRepo();
773
- // Custom command string overrides auto-detection
774
- const svc = new GitServiceImpl(repo, { pre_merge_check: 'node -e "process.exit(0)"' });
775
- const result: PreMergeCheckResult = svc.runPreMergeCheck();
776
-
777
- assertEq(result.passed, true, "runPreMergeCheck passes with custom command that exits 0");
778
- assertTrue(!result.skipped, "custom command is not skipped");
779
-
780
- rmSync(repo, { recursive: true, force: true });
781
- }
782
-
783
- // ─── VALID_BRANCH_NAME regex ──────────────────────────────────────────
784
-
785
- console.log("\n=== VALID_BRANCH_NAME regex ===");
786
-
787
- {
788
- // Valid branch names
789
- assertTrue(VALID_BRANCH_NAME.test("main"), "VALID_BRANCH_NAME accepts 'main'");
790
- assertTrue(VALID_BRANCH_NAME.test("master"), "VALID_BRANCH_NAME accepts 'master'");
791
- assertTrue(VALID_BRANCH_NAME.test("develop"), "VALID_BRANCH_NAME accepts 'develop'");
792
- assertTrue(VALID_BRANCH_NAME.test("feature/foo"), "VALID_BRANCH_NAME accepts 'feature/foo'");
793
- assertTrue(VALID_BRANCH_NAME.test("release-1.0"), "VALID_BRANCH_NAME accepts 'release-1.0'");
794
- assertTrue(VALID_BRANCH_NAME.test("my_branch"), "VALID_BRANCH_NAME accepts 'my_branch'");
795
- assertTrue(VALID_BRANCH_NAME.test("v2.0.1"), "VALID_BRANCH_NAME accepts 'v2.0.1'");
796
-
797
- // Invalid / injection attempts
798
- assertTrue(!VALID_BRANCH_NAME.test("main; rm -rf /"), "VALID_BRANCH_NAME rejects shell injection");
799
- assertTrue(!VALID_BRANCH_NAME.test("main && echo pwned"), "VALID_BRANCH_NAME rejects && injection");
800
- assertTrue(!VALID_BRANCH_NAME.test(""), "VALID_BRANCH_NAME rejects empty string");
801
- assertTrue(!VALID_BRANCH_NAME.test("branch name"), "VALID_BRANCH_NAME rejects spaces");
802
- assertTrue(!VALID_BRANCH_NAME.test("branch`cmd`"), "VALID_BRANCH_NAME rejects backticks");
803
- assertTrue(!VALID_BRANCH_NAME.test("branch$(cmd)"), "VALID_BRANCH_NAME rejects $() subshell");
804
- }
805
-
806
- // ─── getMainBranch: configured main_branch preference ──────────────────
807
-
808
- console.log("\n=== getMainBranch: configured main_branch ===");
809
-
810
- {
811
- const repo = initBranchTestRepo();
812
- const svc = new GitServiceImpl(repo, { main_branch: "trunk" });
813
-
814
- assertEq(svc.getMainBranch(), "trunk", "getMainBranch returns configured main_branch preference");
815
-
816
- rmSync(repo, { recursive: true, force: true });
817
- }
818
-
819
- // ─── getMainBranch: falls back to auto-detection when not set ──────────
820
-
821
- console.log("\n=== getMainBranch: fallback to auto-detection ===");
822
-
823
- {
824
- const repo = initBranchTestRepo();
825
- const svc = new GitServiceImpl(repo, {});
826
-
827
- assertEq(svc.getMainBranch(), "main", "getMainBranch falls back to auto-detection when main_branch not set");
828
-
829
- rmSync(repo, { recursive: true, force: true });
830
- }
831
-
832
- // ─── getMainBranch: ignores invalid branch names ───────────────────────
833
-
834
- console.log("\n=== getMainBranch: ignores invalid branch name ===");
835
-
836
- {
837
- const repo = initBranchTestRepo();
838
- const svc = new GitServiceImpl(repo, { main_branch: "main; rm -rf /" });
839
-
840
- assertEq(svc.getMainBranch(), "main", "getMainBranch ignores invalid branch name and falls back to auto-detection");
841
-
842
- rmSync(repo, { recursive: true, force: true });
843
- }
844
-
845
- // ─── PreMergeCheckResult type export compile check ─────────────────────
846
-
847
- console.log("\n=== PreMergeCheckResult type export ===");
848
-
849
- {
850
- const _checkResult: PreMergeCheckResult = { passed: true, skipped: false };
851
- assertTrue(true, "PreMergeCheckResult type exported and usable");
852
- }
853
-
854
- // ═══════════════════════════════════════════════════════════════════════
855
- // Integration branch — feature-branch workflow support
856
- // ═══════════════════════════════════════════════════════════════════════
857
-
858
- // ─── writeIntegrationBranch / readIntegrationBranch: round-trip ────────
859
-
860
- console.log("\n=== Integration branch: write and read ===");
861
-
862
- {
863
- const repo = initBranchTestRepo();
864
-
865
- // Initially no integration branch
866
- assertEq(readIntegrationBranch(repo, "M001"), null, "readIntegrationBranch returns null when no metadata");
867
-
868
- // Write integration branch
869
- writeIntegrationBranch(repo, "M001", "f-123-new-thing");
870
- assertEq(readIntegrationBranch(repo, "M001"), "f-123-new-thing", "readIntegrationBranch returns written branch");
871
-
872
- rmSync(repo, { recursive: true, force: true });
873
- }
874
-
875
- // ─── writeIntegrationBranch: updates when branch changes (#300) ──────
876
-
877
- console.log("\n=== Integration branch: updates on branch change ===");
878
-
879
- {
880
- const repo = initBranchTestRepo();
881
-
882
- writeIntegrationBranch(repo, "M001", "f-123-first");
883
- writeIntegrationBranch(repo, "M001", "f-456-second"); // updates to new branch (#300)
884
-
885
- assertEq(readIntegrationBranch(repo, "M001"), "f-456-second", "second write updates integration branch to new value");
886
-
887
- rmSync(repo, { recursive: true, force: true });
888
- }
889
-
890
- // ─── writeIntegrationBranch: same branch is idempotent ─────────────────
891
-
892
- console.log("\n=== Integration branch: same branch is idempotent ===");
893
-
894
- {
895
- const repo = initBranchTestRepo();
896
-
897
- writeIntegrationBranch(repo, "M001", "f-123-first");
898
- writeIntegrationBranch(repo, "M001", "f-123-first"); // same branch — no-op
899
-
900
- assertEq(readIntegrationBranch(repo, "M001"), "f-123-first", "same branch write is idempotent");
901
-
902
- rmSync(repo, { recursive: true, force: true });
903
- }
904
-
905
- // ─── writeIntegrationBranch: rejects slice branches ───────────────────
906
-
907
- console.log("\n=== Integration branch: rejects slice branches ===");
908
-
909
- {
910
- const repo = initBranchTestRepo();
911
-
912
- writeIntegrationBranch(repo, "M001", "gsd/M001/S01");
913
- assertEq(readIntegrationBranch(repo, "M001"), null, "slice branches are not recorded as integration branch");
914
-
915
- rmSync(repo, { recursive: true, force: true });
916
- }
917
-
918
- // ─── writeIntegrationBranch: rejects invalid branch names ─────────────
919
-
920
- console.log("\n=== Integration branch: rejects invalid names ===");
921
-
922
- {
923
- const repo = initBranchTestRepo();
924
-
925
- writeIntegrationBranch(repo, "M001", "bad; rm -rf /");
926
- assertEq(readIntegrationBranch(repo, "M001"), null, "invalid branch name is not recorded");
927
-
928
- rmSync(repo, { recursive: true, force: true });
929
- }
930
-
931
- // ─── getMainBranch: uses integration branch when milestone set ────────
932
-
933
- console.log("\n=== getMainBranch: integration branch from milestone metadata ===");
934
-
935
- {
936
- const repo = initBranchTestRepo();
937
-
938
- // Create a feature branch
939
- run("git checkout -b f-123-feature", repo);
940
- run("git checkout main", repo);
941
-
942
- // Write integration branch metadata
943
- writeIntegrationBranch(repo, "M001", "f-123-feature");
944
-
945
- // Without milestone set, getMainBranch returns "main"
946
- const svc = new GitServiceImpl(repo);
947
- assertEq(svc.getMainBranch(), "main", "getMainBranch returns main when no milestone set");
948
-
949
- // With milestone set, getMainBranch returns the integration branch
950
- svc.setMilestoneId("M001");
951
- assertEq(svc.getMainBranch(), "f-123-feature", "getMainBranch returns integration branch when milestone set");
952
-
953
- rmSync(repo, { recursive: true, force: true });
954
- }
955
-
956
- // ─── getMainBranch: main_branch pref still takes priority ─────────────
957
-
958
- console.log("\n=== getMainBranch: main_branch pref overrides integration branch ===");
959
-
960
- {
961
- const repo = initBranchTestRepo();
962
-
963
- run("git checkout -b f-123-feature", repo);
964
- run("git checkout -b trunk", repo);
965
- run("git checkout main", repo);
966
-
967
- writeIntegrationBranch(repo, "M001", "f-123-feature");
968
-
969
- // Explicit preference still wins
970
- const svc = new GitServiceImpl(repo, { main_branch: "trunk" });
971
- svc.setMilestoneId("M001");
972
- assertEq(svc.getMainBranch(), "trunk", "main_branch preference overrides integration branch");
973
-
974
- rmSync(repo, { recursive: true, force: true });
975
- }
976
-
977
- // ─── getMainBranch: falls back when integration branch deleted ────────
978
-
979
- console.log("\n=== getMainBranch: fallback when integration branch deleted ===");
980
-
981
- {
982
- const repo = initBranchTestRepo();
983
-
984
- // Write metadata pointing to a branch that doesn't exist
985
- writeIntegrationBranch(repo, "M001", "deleted-branch");
986
-
987
- const svc = new GitServiceImpl(repo);
988
- svc.setMilestoneId("M001");
989
- assertEq(svc.getMainBranch(), "main", "getMainBranch falls back to main when integration branch no longer exists");
990
-
991
- rmSync(repo, { recursive: true, force: true });
992
- }
993
-
994
- // ─── Per-milestone isolation: different milestones, different targets ──
995
-
996
- console.log("\n=== Integration branch: per-milestone isolation ===");
997
-
998
- {
999
- const repo = initBranchTestRepo();
1000
-
1001
- run("git checkout -b feature-a", repo);
1002
- run("git checkout -b feature-b", repo);
1003
- run("git checkout main", repo);
1004
-
1005
- writeIntegrationBranch(repo, "M001", "feature-a");
1006
- writeIntegrationBranch(repo, "M002", "feature-b");
1007
-
1008
- const svc = new GitServiceImpl(repo);
1009
-
1010
- svc.setMilestoneId("M001");
1011
- assertEq(svc.getMainBranch(), "feature-a", "M001 integration branch is feature-a");
1012
-
1013
- svc.setMilestoneId("M002");
1014
- assertEq(svc.getMainBranch(), "feature-b", "M002 integration branch is feature-b");
1015
-
1016
- svc.setMilestoneId(null);
1017
- assertEq(svc.getMainBranch(), "main", "no milestone set → falls back to main");
1018
-
1019
- rmSync(repo, { recursive: true, force: true });
1020
- }
1021
-
1022
- // ─── Backward compatibility: no metadata → existing behavior ──────────
1023
-
1024
- console.log("\n=== Integration branch: backward compat ===");
1025
-
1026
- {
1027
- const repo = initBranchTestRepo();
1028
- const svc = new GitServiceImpl(repo);
1029
-
1030
- // Set milestone but no metadata file exists
1031
- svc.setMilestoneId("M001");
1032
- assertEq(svc.getMainBranch(), "main", "backward compat: no metadata file → falls back to main");
1033
-
1034
- rmSync(repo, { recursive: true, force: true });
1035
- }
1036
-
1037
- // ─── untrackRuntimeFiles: removes tracked runtime files from index ───
1038
-
1039
- console.log("\n=== untrackRuntimeFiles ===");
1040
-
1041
- {
1042
- const { untrackRuntimeFiles } = await import("../gitignore.ts");
1043
- const repo = mkdtempSync(join(tmpdir(), "gsd-untrack-"));
1044
- run("git init -b main", repo);
1045
- run("git config user.email test@test.com", repo);
1046
- run("git config user.name Test", repo);
1047
-
1048
- // Create and track runtime files (simulates pre-.gitignore state)
1049
- mkdirSync(join(repo, ".gsd", "activity"), { recursive: true });
1050
- mkdirSync(join(repo, ".gsd", "runtime"), { recursive: true });
1051
- writeFileSync(join(repo, ".gsd", "completed-units.json"), '["u1"]');
1052
- writeFileSync(join(repo, ".gsd", "metrics.json"), '{}');
1053
- writeFileSync(join(repo, ".gsd", "STATE.md"), "# State");
1054
- writeFileSync(join(repo, ".gsd", "activity", "log.jsonl"), "{}");
1055
- writeFileSync(join(repo, ".gsd", "runtime", "data.json"), "{}");
1056
- writeFileSync(join(repo, "src.ts"), "code");
1057
- run("git add -A", repo);
1058
- run("git commit -m init", repo);
1059
-
1060
- // Precondition: runtime files are tracked
1061
- const trackedBefore = run("git ls-files .gsd/", repo);
1062
- assertTrue(trackedBefore.includes("completed-units.json"), "untrack: precondition — completed-units tracked");
1063
- assertTrue(trackedBefore.includes("metrics.json"), "untrack: precondition — metrics tracked");
1064
-
1065
- // Run untrackRuntimeFiles
1066
- untrackRuntimeFiles(repo);
1067
-
1068
- // Runtime files should be removed from the index
1069
- const trackedAfter = run("git ls-files .gsd/", repo);
1070
- assertEq(trackedAfter, "", "untrack: all runtime files removed from index");
1071
-
1072
- // Non-runtime files remain tracked
1073
- const srcTracked = run("git ls-files src.ts", repo);
1074
- assertTrue(srcTracked.includes("src.ts"), "untrack: non-runtime files remain tracked");
1075
-
1076
- // Files still exist on disk
1077
- assertTrue(existsSync(join(repo, ".gsd", "completed-units.json")),
1078
- "untrack: completed-units.json still on disk");
1079
- assertTrue(existsSync(join(repo, ".gsd", "metrics.json")),
1080
- "untrack: metrics.json still on disk");
1081
-
1082
- // Idempotent — running again doesn't error
1083
- untrackRuntimeFiles(repo);
1084
- assertTrue(true, "untrack: second call is idempotent (no error)");
1085
-
1086
- rmSync(repo, { recursive: true, force: true });
1087
- }
1088
-
1089
- // ─── smartStage always excludes .gsd/ ──────────────────────────────
1090
-
1091
- console.log("\n=== smartStage always excludes .gsd/ ===");
1092
-
1093
- {
1094
- const repo = mkdtempSync(join(tmpdir(), "gsd-smart-stage-excludes-"));
1095
- run("git init -b main", repo);
1096
- run("git config user.email test@test.com", repo);
1097
- run("git config user.name Test", repo);
1098
- writeFileSync(join(repo, "README.md"), "init");
1099
- run("git add -A && git commit -m init", repo);
1100
-
1101
- // Create .gsd/ planning files + a normal source file
1102
- mkdirSync(join(repo, ".gsd", "milestones", "M001"), { recursive: true });
1103
- writeFileSync(join(repo, ".gsd", "milestones", "M001", "ROADMAP.md"), "# Roadmap");
1104
- writeFileSync(join(repo, ".gsd", "preferences.md"), "---\nversion: 1\n---");
1105
- writeFileSync(join(repo, "src.ts"), "const x = 1;");
1106
-
1107
- // smartStage always excludes .gsd/ — state is managed externally
1108
- const svc = new GitServiceImpl(repo);
1109
- const msg = svc.commit({ message: "test commit" });
1110
- assertTrue(msg !== null, "smartStage: commit succeeds with non-.gsd files");
1111
-
1112
- // .gsd/ files should NOT be in the commit
1113
- const committed = run("git show --name-only HEAD", repo);
1114
- assertTrue(!committed.includes(".gsd/"), "smartStage: .gsd/ files not in commit");
1115
- assertTrue(committed.includes("src.ts"), "smartStage: source files ARE in commit");
1116
-
1117
- rmSync(repo, { recursive: true, force: true });
1118
- }
1119
-
1120
- // ─── writeIntegrationBranch: no commit (metadata in external storage) ──
1121
-
1122
- console.log("\n=== writeIntegrationBranch: no commit ===");
1123
-
1124
- {
1125
- const repo = initBranchTestRepo();
1126
- const commitsBefore = run("git rev-list --count HEAD", repo);
1127
-
1128
- writeIntegrationBranch(repo, "M001", "f-123-new-thing");
1129
-
1130
- // File should still be written to disk
1131
- assertEq(readIntegrationBranch(repo, "M001"), "f-123-new-thing",
1132
- "writeIntegrationBranch: metadata file exists on disk");
1133
-
1134
- // No commit — .gsd/ is managed externally
1135
- const commitsAfter = run("git rev-list --count HEAD", repo);
1136
- assertEq(commitsBefore, commitsAfter,
1137
- "writeIntegrationBranch: no git commit created for integration branch");
1138
-
1139
- rmSync(repo, { recursive: true, force: true });
1140
- }
1141
-
1142
- // ─── ensureGitignore: always adds .gsd to gitignore ──────────────────
1143
-
1144
- console.log("\n=== ensureGitignore: adds .gsd entry ===");
1145
-
1146
- {
1147
- const { ensureGitignore } = await import("../gitignore.ts");
1148
- const repo = mkdtempSync(join(tmpdir(), "gsd-gitignore-external-state-"));
1149
-
1150
- // Should add .gsd to gitignore (external state dir is a symlink)
1151
- const modified = ensureGitignore(repo);
1152
- assertTrue(modified, "ensureGitignore: gitignore was modified");
1153
-
1154
- const { readFileSync } = await import("node:fs");
1155
- const content = readFileSync(join(repo, ".gitignore"), "utf-8");
1156
- const lines = content.split("\n").map(l => l.trim()).filter(l => l && !l.startsWith("#"));
1157
- assertTrue(lines.includes(".gsd"), "ensureGitignore: .gitignore contains .gsd");
1158
-
1159
- // Idempotent — calling again doesn't add duplicates
1160
- const modified2 = ensureGitignore(repo);
1161
- assertTrue(!modified2, "ensureGitignore: second call is idempotent");
1162
-
1163
- rmSync(repo, { recursive: true, force: true });
1164
- }
1165
-
1166
- report();
1167
- }
1168
-
1169
- main().catch((error) => {
1170
- console.error(error);
1171
- process.exit(1);
1172
- });