gsd-pi 2.33.1 → 2.34.0-dev.bbb5216

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 (828) 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 +363 -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/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/agent-session.js +9 -0
  283. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  285. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  287. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
  289. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
  291. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  292. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  293. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  294. package/packages/pi-coding-agent/dist/index.js +1 -1
  295. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  296. package/packages/pi-coding-agent/package.json +1 -1
  297. package/packages/pi-coding-agent/src/core/agent-session.ts +9 -0
  298. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
  299. package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
  300. package/packages/pi-coding-agent/src/index.ts +1 -0
  301. package/pkg/package.json +1 -1
  302. package/src/resources/extensions/bg-shell/index.ts +41 -46
  303. package/src/resources/extensions/browser-tools/index.ts +156 -67
  304. package/src/resources/extensions/gsd/auto/session.ts +47 -30
  305. package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
  306. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
  307. package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
  308. package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
  309. package/src/resources/extensions/gsd/auto-observability.ts +4 -2
  310. package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
  311. package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
  312. package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
  313. package/src/resources/extensions/gsd/auto-start.ts +440 -354
  314. package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
  315. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
  316. package/src/resources/extensions/gsd/auto-timers.ts +3 -4
  317. package/src/resources/extensions/gsd/auto-verification.ts +76 -72
  318. package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
  319. package/src/resources/extensions/gsd/auto-worktree.ts +453 -133
  320. package/src/resources/extensions/gsd/auto.ts +516 -1189
  321. package/src/resources/extensions/gsd/captures.ts +10 -4
  322. package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
  323. package/src/resources/extensions/gsd/commands.ts +39 -31
  324. package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
  325. package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  326. package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
  327. package/src/resources/extensions/gsd/git-service.ts +32 -12
  328. package/src/resources/extensions/gsd/gitignore.ts +4 -2
  329. package/src/resources/extensions/gsd/gsd-db.ts +375 -180
  330. package/src/resources/extensions/gsd/guided-flow.ts +22 -11
  331. package/src/resources/extensions/gsd/index.ts +76 -163
  332. package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
  333. package/src/resources/extensions/gsd/progress-score.ts +65 -200
  334. package/src/resources/extensions/gsd/quick.ts +121 -76
  335. package/src/resources/extensions/gsd/repo-identity.ts +56 -22
  336. package/src/resources/extensions/gsd/session-lock.ts +17 -0
  337. package/src/resources/extensions/gsd/templates/preferences.md +1 -0
  338. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
  339. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
  340. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  341. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
  342. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
  343. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
  344. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
  345. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
  346. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
  347. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
  348. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
  349. package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
  350. package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
  351. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
  352. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
  353. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
  354. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
  355. package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
  356. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
  357. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
  358. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
  359. package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
  360. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
  361. package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
  362. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
  363. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -136
  364. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  365. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  366. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
  367. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
  368. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
  369. package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
  370. package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
  371. package/src/resources/extensions/gsd/types.ts +90 -77
  372. package/src/resources/extensions/gsd/undo.ts +42 -46
  373. package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
  374. package/src/resources/extensions/gsd/verification-evidence.ts +0 -2
  375. package/src/resources/extensions/gsd/verification-gate.ts +4 -16
  376. package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
  377. package/src/resources/extensions/gsd/worktree-command.ts +29 -11
  378. package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
  379. package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
  380. package/src/resources/extensions/gsd/worktree.ts +7 -44
  381. package/src/resources/extensions/package.json +3 -0
  382. package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
  383. package/src/resources/extensions/search-the-web/index.ts +35 -52
  384. package/src/resources/extensions/search-the-web/tavily.ts +1 -1
  385. package/dist/resources/extensions/ask-user-questions.ts +0 -290
  386. package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
  387. package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
  388. package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
  389. package/dist/resources/extensions/async-jobs/index.ts +0 -141
  390. package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
  391. package/dist/resources/extensions/aws-auth/index.ts +0 -144
  392. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
  393. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
  394. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
  395. package/dist/resources/extensions/bg-shell/index.ts +0 -59
  396. package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
  397. package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
  398. package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
  399. package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
  400. package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
  401. package/dist/resources/extensions/bg-shell/types.ts +0 -303
  402. package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
  403. package/dist/resources/extensions/browser-tools/capture.ts +0 -199
  404. package/dist/resources/extensions/browser-tools/core.ts +0 -1196
  405. package/dist/resources/extensions/browser-tools/index.ts +0 -71
  406. package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
  407. package/dist/resources/extensions/browser-tools/refs.ts +0 -264
  408. package/dist/resources/extensions/browser-tools/settle.ts +0 -197
  409. package/dist/resources/extensions/browser-tools/state.ts +0 -408
  410. package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
  411. package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
  412. package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
  413. package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
  414. package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
  415. package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
  416. package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
  417. package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
  418. package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
  419. package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
  420. package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
  421. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
  422. package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
  423. package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
  424. package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
  425. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
  426. package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
  427. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
  428. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
  429. package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
  430. package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
  431. package/dist/resources/extensions/browser-tools/utils.ts +0 -660
  432. package/dist/resources/extensions/context7/index.ts +0 -428
  433. package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
  434. package/dist/resources/extensions/google-search/index.ts +0 -466
  435. package/dist/resources/extensions/gsd/activity-log.ts +0 -162
  436. package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
  437. package/dist/resources/extensions/gsd/auto/session.ts +0 -236
  438. package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
  439. package/dist/resources/extensions/gsd/auto-constants.ts +0 -6
  440. package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
  441. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
  442. package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
  443. package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
  444. package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
  445. package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
  446. package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
  447. package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
  448. package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
  449. package/dist/resources/extensions/gsd/auto-start.ts +0 -483
  450. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  451. package/dist/resources/extensions/gsd/auto-supervisor.ts +0 -61
  452. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
  453. package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
  454. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
  455. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
  456. package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
  457. package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
  458. package/dist/resources/extensions/gsd/auto.ts +0 -1834
  459. package/dist/resources/extensions/gsd/captures.ts +0 -427
  460. package/dist/resources/extensions/gsd/claude-import.ts +0 -656
  461. package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
  462. package/dist/resources/extensions/gsd/commands-config.ts +0 -102
  463. package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
  464. package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
  465. package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
  466. package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
  467. package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
  468. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
  469. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
  470. package/dist/resources/extensions/gsd/commands.ts +0 -1149
  471. package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
  472. package/dist/resources/extensions/gsd/context-budget.ts +0 -266
  473. package/dist/resources/extensions/gsd/context-store.ts +0 -195
  474. package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
  475. package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
  476. package/dist/resources/extensions/gsd/db-writer.ts +0 -360
  477. package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
  478. package/dist/resources/extensions/gsd/detection.ts +0 -470
  479. package/dist/resources/extensions/gsd/diff-context.ts +0 -214
  480. package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
  481. package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
  482. package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
  483. package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
  484. package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
  485. package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
  486. package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
  487. package/dist/resources/extensions/gsd/doctor.ts +0 -722
  488. package/dist/resources/extensions/gsd/error-utils.ts +0 -6
  489. package/dist/resources/extensions/gsd/exit-command.ts +0 -18
  490. package/dist/resources/extensions/gsd/export.ts +0 -317
  491. package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
  492. package/dist/resources/extensions/gsd/files.ts +0 -1058
  493. package/dist/resources/extensions/gsd/forensics.ts +0 -629
  494. package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
  495. package/dist/resources/extensions/gsd/git-service.ts +0 -580
  496. package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
  497. package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
  498. package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
  499. package/dist/resources/extensions/gsd/health-widget.ts +0 -167
  500. package/dist/resources/extensions/gsd/history.ts +0 -143
  501. package/dist/resources/extensions/gsd/index.ts +0 -1390
  502. package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
  503. package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
  504. package/dist/resources/extensions/gsd/key-manager.ts +0 -996
  505. package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
  506. package/dist/resources/extensions/gsd/md-importer.ts +0 -527
  507. package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
  508. package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
  509. package/dist/resources/extensions/gsd/memory-store.ts +0 -441
  510. package/dist/resources/extensions/gsd/metrics.ts +0 -532
  511. package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
  512. package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
  513. package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
  514. package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
  515. package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
  516. package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
  517. package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
  518. package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
  519. package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
  520. package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
  521. package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
  522. package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
  523. package/dist/resources/extensions/gsd/model-router.ts +0 -256
  524. package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
  525. package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
  526. package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
  527. package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
  528. package/dist/resources/extensions/gsd/notifications.ts +0 -87
  529. package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
  530. package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
  531. package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
  532. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
  533. package/dist/resources/extensions/gsd/paths.ts +0 -449
  534. package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
  535. package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
  536. package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
  537. package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
  538. package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
  539. package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
  540. package/dist/resources/extensions/gsd/preferences.ts +0 -416
  541. package/dist/resources/extensions/gsd/progress-score.ts +0 -273
  542. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
  543. package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
  544. package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
  545. package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
  546. package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
  547. package/dist/resources/extensions/gsd/queue-order.ts +0 -230
  548. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
  549. package/dist/resources/extensions/gsd/quick.ts +0 -212
  550. package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
  551. package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
  552. package/dist/resources/extensions/gsd/routing-history.ts +0 -286
  553. package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
  554. package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
  555. package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
  556. package/dist/resources/extensions/gsd/session-lock.ts +0 -426
  557. package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
  558. package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
  559. package/dist/resources/extensions/gsd/skill-health.ts +0 -417
  560. package/dist/resources/extensions/gsd/state.ts +0 -727
  561. package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
  562. package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
  563. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
  564. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
  565. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
  566. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
  567. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
  568. package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  569. package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
  570. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
  571. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
  572. package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  573. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
  574. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
  575. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  576. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
  577. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
  578. package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
  579. package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
  580. package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
  581. package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
  582. package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
  583. package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
  584. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
  585. package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
  586. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
  587. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
  588. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  589. package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
  590. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
  591. package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
  592. package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
  593. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
  594. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
  595. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
  596. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
  597. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
  598. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
  599. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
  600. package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
  601. package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
  602. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
  603. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
  604. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
  605. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  606. package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
  607. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
  608. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
  609. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
  610. package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
  611. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
  612. package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
  613. package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
  614. package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
  615. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
  616. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
  617. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
  618. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
  619. package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
  620. package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
  621. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
  622. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
  623. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
  624. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
  625. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
  626. package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
  627. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
  628. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
  629. package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
  630. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
  631. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
  632. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
  633. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
  634. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
  635. package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  636. package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
  637. package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
  638. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
  639. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  640. package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
  641. package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
  642. package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
  643. package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
  644. package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
  645. package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
  646. package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
  647. package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
  648. package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
  649. package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
  650. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
  651. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
  652. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
  653. package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
  654. package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
  655. package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
  656. package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
  657. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
  658. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
  659. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
  660. package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
  661. package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
  662. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
  663. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
  664. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
  665. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
  666. package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
  667. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
  668. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
  669. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
  670. package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
  671. package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
  672. package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
  673. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
  674. package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
  675. package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
  676. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
  677. package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
  678. package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  679. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
  680. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
  681. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  682. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
  683. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
  684. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
  685. package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
  686. package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
  687. package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
  688. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
  689. package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
  690. package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
  691. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
  692. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
  693. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
  694. package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
  695. package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
  696. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
  697. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
  698. package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
  699. package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
  700. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  701. package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
  702. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
  703. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
  704. package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
  705. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
  706. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
  707. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
  708. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  709. package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
  710. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
  711. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  712. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
  713. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
  714. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
  715. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
  716. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
  717. package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
  718. package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
  719. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
  720. package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
  721. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
  722. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
  723. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
  724. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
  725. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
  726. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
  727. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
  728. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
  729. package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
  730. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
  731. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
  732. package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
  733. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
  734. package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
  735. package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
  736. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
  737. package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
  738. package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
  739. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
  740. package/dist/resources/extensions/gsd/token-counter.ts +0 -65
  741. package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
  742. package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
  743. package/dist/resources/extensions/gsd/types.ts +0 -425
  744. package/dist/resources/extensions/gsd/undo.ts +0 -223
  745. package/dist/resources/extensions/gsd/unit-id.ts +0 -14
  746. package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
  747. package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
  748. package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
  749. package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
  750. package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
  751. package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
  752. package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
  753. package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
  754. package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
  755. package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
  756. package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
  757. package/dist/resources/extensions/gsd/worktree.ts +0 -257
  758. package/dist/resources/extensions/mac-tools/index.ts +0 -852
  759. package/dist/resources/extensions/mcp-client/index.ts +0 -459
  760. package/dist/resources/extensions/remote-questions/config.ts +0 -83
  761. package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
  762. package/dist/resources/extensions/remote-questions/format.ts +0 -315
  763. package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
  764. package/dist/resources/extensions/remote-questions/manager.ts +0 -184
  765. package/dist/resources/extensions/remote-questions/notify.ts +0 -90
  766. package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
  767. package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
  768. package/dist/resources/extensions/remote-questions/status.ts +0 -31
  769. package/dist/resources/extensions/remote-questions/store.ts +0 -81
  770. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
  771. package/dist/resources/extensions/remote-questions/types.ts +0 -102
  772. package/dist/resources/extensions/search-the-web/cache.ts +0 -78
  773. package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
  774. package/dist/resources/extensions/search-the-web/format.ts +0 -258
  775. package/dist/resources/extensions/search-the-web/http.ts +0 -238
  776. package/dist/resources/extensions/search-the-web/index.ts +0 -65
  777. package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
  778. package/dist/resources/extensions/search-the-web/provider.ts +0 -148
  779. package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
  780. package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
  781. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
  782. package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
  783. package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
  784. package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
  785. package/dist/resources/extensions/shared/frontmatter.ts +0 -117
  786. package/dist/resources/extensions/shared/interview-ui.ts +0 -613
  787. package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
  788. package/dist/resources/extensions/shared/sanitize.ts +0 -19
  789. package/dist/resources/extensions/shared/terminal.ts +0 -23
  790. package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
  791. package/dist/resources/extensions/shared/ui.ts +0 -400
  792. package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
  793. package/dist/resources/extensions/slash-commands/audit.ts +0 -88
  794. package/dist/resources/extensions/slash-commands/clear.ts +0 -10
  795. package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
  796. package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
  797. package/dist/resources/extensions/slash-commands/index.ts +0 -12
  798. package/dist/resources/extensions/subagent/agents.ts +0 -126
  799. package/dist/resources/extensions/subagent/index.ts +0 -1121
  800. package/dist/resources/extensions/subagent/isolation.ts +0 -501
  801. package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
  802. package/dist/resources/extensions/ttsr/index.ts +0 -168
  803. package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
  804. package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
  805. package/dist/resources/extensions/universal-config/discovery.ts +0 -104
  806. package/dist/resources/extensions/universal-config/format.ts +0 -191
  807. package/dist/resources/extensions/universal-config/index.ts +0 -120
  808. package/dist/resources/extensions/universal-config/scanners.ts +0 -642
  809. package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
  810. package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
  811. package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
  812. package/dist/resources/extensions/universal-config/tools.ts +0 -60
  813. package/dist/resources/extensions/universal-config/types.ts +0 -135
  814. package/dist/resources/extensions/voice/index.ts +0 -272
  815. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
  816. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
  817. package/src/resources/extensions/gsd/auto-constants.ts +0 -6
  818. package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
  819. package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  820. package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
  821. package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  822. package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  823. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  824. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  825. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  826. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  827. package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  828. package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
@@ -6,24 +6,40 @@
6
6
  * manages create, enter, detect, and teardown for auto-mode worktrees.
7
7
  */
8
8
 
9
- import { existsSync, readFileSync, realpathSync, unlinkSync, statSync, rmSync, readdirSync, cpSync, lstatSync as lstatSyncFn } from "node:fs";
10
- import { isAbsolute, join, sep } from "node:path";
9
+ import {
10
+ existsSync,
11
+ cpSync,
12
+ readFileSync,
13
+ readdirSync,
14
+ mkdirSync,
15
+ realpathSync,
16
+ unlinkSync,
17
+ lstatSync as lstatSyncFn,
18
+ } from "node:fs";
19
+ import { isAbsolute, join } from "node:path";
11
20
  import { GSDError, GSD_IO_ERROR, GSD_GIT_ERROR } from "./errors.js";
21
+ import {
22
+ copyWorktreeDb,
23
+ reconcileWorktreeDb,
24
+ isDbAvailable,
25
+ } from "./gsd-db.js";
26
+ import { atomicWriteSync } from "./atomic-write.js";
12
27
  import { execSync, execFileSync } from "node:child_process";
28
+ import { safeCopy, safeCopyRecursive } from "./safe-fs.js";
29
+ import { gsdRoot } from "./paths.js";
13
30
  import {
14
31
  createWorktree,
15
32
  removeWorktree,
16
33
  worktreePath,
17
34
  } from "./worktree-manager.js";
18
- import { detectWorktreeName, resolveGitHeadPath, nudgeGitBranchCache } from "./worktree.js";
19
- import { ensureGsdSymlink } from "./repo-identity.js";
20
35
  import {
21
- MergeConflictError,
22
- readIntegrationBranch,
23
- } from "./git-service.js";
36
+ detectWorktreeName,
37
+ resolveGitHeadPath,
38
+ nudgeGitBranchCache,
39
+ } from "./worktree.js";
40
+ import { MergeConflictError, readIntegrationBranch } from "./git-service.js";
24
41
  import { parseRoadmap } from "./files.js";
25
42
  import { loadEffectiveGSDPreferences } from "./preferences.js";
26
- import { gsdRoot } from "./paths.js";
27
43
  import {
28
44
  nativeGetCurrentBranch,
29
45
  nativeWorkingTreeStatus,
@@ -38,13 +54,28 @@ import {
38
54
  nativeBranchDelete,
39
55
  nativeBranchExists,
40
56
  } from "./native-git-bridge.js";
41
- import { getErrorMessage } from "./error-utils.js";
42
57
 
43
58
  // ─── Module State ──────────────────────────────────────────────────────────
44
59
 
45
60
  /** Original project root before chdir into auto-worktree. */
46
61
  let originalBase: string | null = null;
47
62
 
63
+ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void {
64
+ const gsdDir = gsdRoot(basePath);
65
+ const transientFiles = [
66
+ join(gsdDir, "STATE.md"),
67
+ join(gsdDir, "auto.lock"),
68
+ join(gsdDir, "milestones", milestoneId, `${milestoneId}-META.json`),
69
+ ];
70
+
71
+ for (const file of transientFiles) {
72
+ try {
73
+ unlinkSync(file);
74
+ } catch {
75
+ /* non-fatal — file may not exist */
76
+ }
77
+ }
78
+ }
48
79
  // ─── Worktree ↔ Main Repo Sync (#1311) ──────────────────────────────────────
49
80
 
50
81
  /**
@@ -61,7 +92,10 @@ let originalBase: string | null = null;
61
92
  * Only adds missing content — never overwrites existing files in the worktree
62
93
  * (the worktree's execution state is authoritative for in-progress work).
63
94
  */
64
- export function syncGsdStateToWorktree(mainBasePath: string, worktreePath_: string): { synced: string[] } {
95
+ export function syncGsdStateToWorktree(
96
+ mainBasePath: string,
97
+ worktreePath_: string,
98
+ ): { synced: string[] } {
65
99
  const mainGsd = gsdRoot(mainBasePath);
66
100
  const wtGsd = gsdRoot(worktreePath_);
67
101
  const synced: string[] = [];
@@ -78,7 +112,13 @@ export function syncGsdStateToWorktree(mainBasePath: string, worktreePath_: stri
78
112
  if (!existsSync(mainGsd) || !existsSync(wtGsd)) return { synced };
79
113
 
80
114
  // Sync root-level .gsd/ files (DECISIONS, REQUIREMENTS, PROJECT, KNOWLEDGE)
81
- const rootFiles = ["DECISIONS.md", "REQUIREMENTS.md", "PROJECT.md", "KNOWLEDGE.md", "OVERRIDES.md"];
115
+ const rootFiles = [
116
+ "DECISIONS.md",
117
+ "REQUIREMENTS.md",
118
+ "PROJECT.md",
119
+ "KNOWLEDGE.md",
120
+ "OVERRIDES.md",
121
+ ];
82
122
  for (const f of rootFiles) {
83
123
  const src = join(mainGsd, f);
84
124
  const dst = join(wtGsd, f);
@@ -86,18 +126,23 @@ export function syncGsdStateToWorktree(mainBasePath: string, worktreePath_: stri
86
126
  try {
87
127
  cpSync(src, dst);
88
128
  synced.push(f);
89
- } catch { /* non-fatal */ }
129
+ } catch {
130
+ /* non-fatal */
131
+ }
90
132
  }
91
133
  }
92
134
 
93
135
  // Sync milestones: copy entire milestone directories that are missing
94
136
  const mainMilestonesDir = join(mainGsd, "milestones");
95
137
  const wtMilestonesDir = join(wtGsd, "milestones");
96
- if (existsSync(mainMilestonesDir) && existsSync(wtMilestonesDir)) {
138
+ if (existsSync(mainMilestonesDir)) {
97
139
  try {
98
- const mainMilestones = readdirSync(mainMilestonesDir, { withFileTypes: true })
99
- .filter(d => d.isDirectory() && /^M\d{3}/.test(d.name))
100
- .map(d => d.name);
140
+ mkdirSync(wtMilestonesDir, { recursive: true });
141
+ const mainMilestones = readdirSync(mainMilestonesDir, {
142
+ withFileTypes: true,
143
+ })
144
+ .filter((d) => d.isDirectory() && /^M\d{3}/.test(d.name))
145
+ .map((d) => d.name);
101
146
 
102
147
  for (const mid of mainMilestones) {
103
148
  const srcDir = join(mainMilestonesDir, mid);
@@ -108,12 +153,16 @@ export function syncGsdStateToWorktree(mainBasePath: string, worktreePath_: stri
108
153
  try {
109
154
  cpSync(srcDir, dstDir, { recursive: true });
110
155
  synced.push(`milestones/${mid}/`);
111
- } catch { /* non-fatal */ }
156
+ } catch {
157
+ /* non-fatal */
158
+ }
112
159
  } else {
113
160
  // Milestone directory exists but may be missing files (stale snapshot).
114
161
  // Sync individual top-level milestone files (CONTEXT, ROADMAP, RESEARCH, etc.)
115
162
  try {
116
- const srcFiles = readdirSync(srcDir).filter(f => f.endsWith(".md") || f.endsWith(".json"));
163
+ const srcFiles = readdirSync(srcDir).filter(
164
+ (f) => f.endsWith(".md") || f.endsWith(".json"),
165
+ );
117
166
  for (const f of srcFiles) {
118
167
  const srcFile = join(srcDir, f);
119
168
  const dstFile = join(dstDir, f);
@@ -124,7 +173,9 @@ export function syncGsdStateToWorktree(mainBasePath: string, worktreePath_: stri
124
173
  cpSync(srcFile, dstFile);
125
174
  synced.push(`milestones/${mid}/${f}`);
126
175
  }
127
- } catch { /* non-fatal */ }
176
+ } catch {
177
+ /* non-fatal */
178
+ }
128
179
  }
129
180
  }
130
181
 
@@ -135,12 +186,16 @@ export function syncGsdStateToWorktree(mainBasePath: string, worktreePath_: stri
135
186
  try {
136
187
  cpSync(srcSlicesDir, dstSlicesDir, { recursive: true });
137
188
  synced.push(`milestones/${mid}/slices/`);
138
- } catch { /* non-fatal */ }
189
+ } catch {
190
+ /* non-fatal */
191
+ }
139
192
  } else if (existsSync(srcSlicesDir) && existsSync(dstSlicesDir)) {
140
193
  // Both exist — sync missing slice directories
141
- const srcSlices = readdirSync(srcSlicesDir, { withFileTypes: true })
142
- .filter(d => d.isDirectory())
143
- .map(d => d.name);
194
+ const srcSlices = readdirSync(srcSlicesDir, {
195
+ withFileTypes: true,
196
+ })
197
+ .filter((d) => d.isDirectory())
198
+ .map((d) => d.name);
144
199
  for (const sid of srcSlices) {
145
200
  const srcSlice = join(srcSlicesDir, sid);
146
201
  const dstSlice = join(dstSlicesDir, sid);
@@ -148,19 +203,113 @@ export function syncGsdStateToWorktree(mainBasePath: string, worktreePath_: stri
148
203
  try {
149
204
  cpSync(srcSlice, dstSlice, { recursive: true });
150
205
  synced.push(`milestones/${mid}/slices/${sid}/`);
151
- } catch { /* non-fatal */ }
206
+ } catch {
207
+ /* non-fatal */
208
+ }
152
209
  }
153
210
  }
154
211
  }
155
- } catch { /* non-fatal */ }
212
+ } catch {
213
+ /* non-fatal */
214
+ }
156
215
  }
157
216
  }
158
- } catch { /* non-fatal */ }
217
+ } catch {
218
+ /* non-fatal */
219
+ }
159
220
  }
160
221
 
161
222
  return { synced };
162
223
  }
163
224
 
225
+ /**
226
+ * Sync milestone artifacts from worktree back to the main external state directory.
227
+ * Called before milestone merge to ensure completion artifacts (SUMMARY, VALIDATION,
228
+ * updated ROADMAP) are visible from the project root (#1412).
229
+ *
230
+ * Only syncs .gsd/milestones/ content — root-level files (DECISIONS, REQUIREMENTS, etc.)
231
+ * are handled by the merge itself.
232
+ */
233
+ export function syncWorktreeStateBack(
234
+ mainBasePath: string,
235
+ worktreePath: string,
236
+ milestoneId: string,
237
+ ): { synced: string[] } {
238
+ const mainGsd = gsdRoot(mainBasePath);
239
+ const wtGsd = gsdRoot(worktreePath);
240
+ const synced: string[] = [];
241
+
242
+ // If both resolve to the same directory (symlink), no sync needed
243
+ try {
244
+ const mainResolved = realpathSync(mainGsd);
245
+ const wtResolved = realpathSync(wtGsd);
246
+ if (mainResolved === wtResolved) return { synced };
247
+ } catch {
248
+ // Can't resolve — proceed with sync
249
+ }
250
+
251
+ const wtMilestoneDir = join(wtGsd, "milestones", milestoneId);
252
+ const mainMilestoneDir = join(mainGsd, "milestones", milestoneId);
253
+
254
+ if (!existsSync(wtMilestoneDir)) return { synced };
255
+ mkdirSync(mainMilestoneDir, { recursive: true });
256
+
257
+ // Sync milestone-level files (SUMMARY, VALIDATION, ROADMAP, CONTEXT)
258
+ try {
259
+ for (const entry of readdirSync(wtMilestoneDir, { withFileTypes: true })) {
260
+ if (entry.isFile() && entry.name.endsWith(".md")) {
261
+ const src = join(wtMilestoneDir, entry.name);
262
+ const dst = join(mainMilestoneDir, entry.name);
263
+ try {
264
+ cpSync(src, dst, { force: true });
265
+ synced.push(`milestones/${milestoneId}/${entry.name}`);
266
+ } catch {
267
+ /* non-fatal */
268
+ }
269
+ }
270
+ }
271
+ } catch {
272
+ /* non-fatal */
273
+ }
274
+
275
+ // Sync slice-level files (summaries, UATs)
276
+ const wtSlicesDir = join(wtMilestoneDir, "slices");
277
+ const mainSlicesDir = join(mainMilestoneDir, "slices");
278
+ if (existsSync(wtSlicesDir)) {
279
+ try {
280
+ for (const sliceEntry of readdirSync(wtSlicesDir, {
281
+ withFileTypes: true,
282
+ })) {
283
+ if (!sliceEntry.isDirectory()) continue;
284
+ const sid = sliceEntry.name;
285
+ const wtSliceDir = join(wtSlicesDir, sid);
286
+ const mainSliceDir = join(mainSlicesDir, sid);
287
+ mkdirSync(mainSliceDir, { recursive: true });
288
+
289
+ for (const fileEntry of readdirSync(wtSliceDir, {
290
+ withFileTypes: true,
291
+ })) {
292
+ if (fileEntry.isFile() && fileEntry.name.endsWith(".md")) {
293
+ const src = join(wtSliceDir, fileEntry.name);
294
+ const dst = join(mainSliceDir, fileEntry.name);
295
+ try {
296
+ cpSync(src, dst, { force: true });
297
+ synced.push(
298
+ `milestones/${milestoneId}/slices/${sid}/${fileEntry.name}`,
299
+ );
300
+ } catch {
301
+ /* non-fatal */
302
+ }
303
+ }
304
+ }
305
+ }
306
+ } catch {
307
+ /* non-fatal */
308
+ }
309
+ }
310
+
311
+ return { synced };
312
+ }
164
313
  // ─── Worktree Post-Create Hook (#597) ────────────────────────────────────────
165
314
 
166
315
  /**
@@ -171,7 +320,11 @@ export function syncGsdStateToWorktree(mainBasePath: string, worktreePath_: stri
171
320
  * Reads the hook path from git.worktree_post_create in preferences.
172
321
  * Pass hookPath directly to bypass preference loading (useful for testing).
173
322
  */
174
- export function runWorktreePostCreateHook(sourceDir: string, worktreeDir: string, hookPath?: string): string | null {
323
+ export function runWorktreePostCreateHook(
324
+ sourceDir: string,
325
+ worktreeDir: string,
326
+ hookPath?: string,
327
+ ): string | null {
175
328
  if (hookPath === undefined) {
176
329
  const prefs = loadEffectiveGSDPreferences()?.preferences?.git;
177
330
  hookPath = prefs?.worktree_post_create;
@@ -198,7 +351,7 @@ export function runWorktreePostCreateHook(sourceDir: string, worktreeDir: string
198
351
  });
199
352
  return null;
200
353
  } catch (err) {
201
- const msg = getErrorMessage(err);
354
+ const msg = err instanceof Error ? err.message : String(err);
202
355
  return `Worktree post-create hook failed: ${msg}`;
203
356
  }
204
357
  }
@@ -219,7 +372,110 @@ export function autoWorktreeBranch(milestoneId: string): string {
219
372
  * to prevent split-brain.
220
373
  */
221
374
 
222
- export function createAutoWorktree(basePath: string, milestoneId: string): string {
375
+ /**
376
+ * Forward-merge plan checkbox state from the project root into a freshly
377
+ * re-attached worktree (#778).
378
+ *
379
+ * When auto-mode stops via crash (not graceful stop), the milestone branch
380
+ * HEAD may be behind the filesystem state at the project root because
381
+ * syncStateToProjectRoot() runs after every task completion but the final
382
+ * git commit may not have happened before the crash. On restart the worktree
383
+ * is re-attached to the branch HEAD, which has [ ] for the crashed task,
384
+ * causing verifyExpectedArtifact() to fail and triggering an infinite
385
+ * dispatch/skip loop.
386
+ *
387
+ * Fix: after re-attaching, read every *.md plan file in the milestone
388
+ * directory at the project root and apply any [x] checkbox states that are
389
+ * ahead of the worktree version (forward-only: never downgrade [x] → [ ]).
390
+ *
391
+ * This is safe because syncStateToProjectRoot() is the authoritative source
392
+ * of post-task state at the project root — it writes the same [x] the LLM
393
+ * produced, then the auto-commit follows. If the commit never happened, the
394
+ * filesystem copy is still valid and correct.
395
+ */
396
+ function reconcilePlanCheckboxes(
397
+ projectRoot: string,
398
+ wtPath: string,
399
+ milestoneId: string,
400
+ ): void {
401
+ const srcMilestone = join(projectRoot, ".gsd", "milestones", milestoneId);
402
+ const dstMilestone = join(wtPath, ".gsd", "milestones", milestoneId);
403
+ if (!existsSync(srcMilestone) || !existsSync(dstMilestone)) return;
404
+
405
+ // Walk all markdown files in the milestone directory (plans, summaries, etc.)
406
+ function walkMd(dir: string): string[] {
407
+ const results: string[] = [];
408
+ try {
409
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
410
+ const full = join(dir, entry.name);
411
+ if (entry.isDirectory()) {
412
+ results.push(...walkMd(full));
413
+ } else if (entry.isFile() && entry.name.endsWith(".md")) {
414
+ results.push(full);
415
+ }
416
+ }
417
+ } catch {
418
+ /* non-fatal */
419
+ }
420
+ return results;
421
+ }
422
+
423
+ for (const srcFile of walkMd(srcMilestone)) {
424
+ const rel = srcFile.slice(srcMilestone.length);
425
+ const dstFile = dstMilestone + rel;
426
+ if (!existsSync(dstFile)) continue; // only reconcile existing files
427
+
428
+ let srcContent: string;
429
+ let dstContent: string;
430
+ try {
431
+ srcContent = readFileSync(srcFile, "utf-8");
432
+ dstContent = readFileSync(dstFile, "utf-8");
433
+ } catch {
434
+ continue;
435
+ }
436
+
437
+ if (srcContent === dstContent) continue;
438
+
439
+ // Extract all checked task IDs from the source (project root)
440
+ // Pattern: - [x] **T<id>: or - [x] **S<id>: (case-insensitive x)
441
+ const checkedRe = /^- \[[xX]\] \*\*([TS]\d+):/gm;
442
+ const srcChecked = new Set<string>();
443
+ for (const m of srcContent.matchAll(checkedRe)) srcChecked.add(m[1]);
444
+
445
+ if (srcChecked.size === 0) continue;
446
+
447
+ // Forward-apply: replace [ ] → [x] for any IDs that are checked in src
448
+ let updated = dstContent;
449
+ let changed = false;
450
+ for (const id of srcChecked) {
451
+ const escapedId = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
452
+ const uncheckedRe = new RegExp(
453
+ `^(- )\\[ \\]( \\*\\*${escapedId}:)`,
454
+ "gm",
455
+ );
456
+ if (uncheckedRe.test(updated)) {
457
+ updated = updated.replace(
458
+ new RegExp(`^(- )\\[ \\]( \\*\\*${escapedId}:)`, "gm"),
459
+ "$1[x]$2",
460
+ );
461
+ changed = true;
462
+ }
463
+ }
464
+
465
+ if (changed) {
466
+ try {
467
+ atomicWriteSync(dstFile, updated, "utf-8");
468
+ } catch {
469
+ /* non-fatal */
470
+ }
471
+ }
472
+ }
473
+ }
474
+
475
+ export function createAutoWorktree(
476
+ basePath: string,
477
+ milestoneId: string,
478
+ ): string {
223
479
  const branch = autoWorktreeBranch(milestoneId);
224
480
 
225
481
  // Check if the milestone branch already exists — it survives auto-mode
@@ -231,21 +487,46 @@ export function createAutoWorktree(basePath: string, milestoneId: string): strin
231
487
  let info: { name: string; path: string; branch: string; exists: boolean };
232
488
  if (branchExists) {
233
489
  // Re-attach worktree to the existing milestone branch (preserving commits)
234
- info = createWorktree(basePath, milestoneId, { branch, reuseExistingBranch: true });
490
+ info = createWorktree(basePath, milestoneId, {
491
+ branch,
492
+ reuseExistingBranch: true,
493
+ });
235
494
  } else {
236
495
  // Fresh start — create branch from integration branch
237
- const integrationBranch = readIntegrationBranch(basePath, milestoneId) ?? undefined;
238
- info = createWorktree(basePath, milestoneId, { branch, startPoint: integrationBranch });
496
+ const integrationBranch =
497
+ readIntegrationBranch(basePath, milestoneId) ?? undefined;
498
+ info = createWorktree(basePath, milestoneId, {
499
+ branch,
500
+ startPoint: integrationBranch,
501
+ });
239
502
  }
240
503
 
241
- // Ensure worktree shares external state via symlink
242
- ensureGsdSymlink(info.path);
243
-
244
- // Sync .gsd/ state from main repo into the worktree (#1311).
245
- // Even with the symlink, the worktree may have stale git-tracked files
246
- // if .gsd/ is not gitignored. And on fresh create, the milestone files
247
- // created on main since the branch point won't be in the worktree.
248
- syncGsdStateToWorktree(basePath, info.path);
504
+ // Copy .gsd/ planning artifacts from the source repo into the new worktree.
505
+ // Worktrees are fresh git checkouts — untracked files don't carry over.
506
+ // Planning artifacts may be untracked if the project's .gitignore had a
507
+ // blanket .gsd/ rule (pre-v2.14.0). Without this copy, auto-mode loops
508
+ // on plan-slice because the plan file doesn't exist in the worktree.
509
+ //
510
+ // IMPORTANT: Skip when re-attaching to an existing branch (#759).
511
+ // The branch checkout already has committed artifacts with correct state
512
+ // (e.g. [x] for completed slices). Copying from the project root would
513
+ // overwrite them with stale data ([ ] checkboxes) because the root is
514
+ // not always fully synced.
515
+ if (!branchExists) {
516
+ copyPlanningArtifacts(basePath, info.path);
517
+ } else {
518
+ // Re-attaching to an existing branch: forward-merge any plan checkpoint
519
+ // state from the project root into the worktree (#778).
520
+ //
521
+ // If auto-mode stopped via crash, the milestone branch HEAD may lag behind
522
+ // the project root filesystem because syncStateToProjectRoot() ran after
523
+ // task completion but the auto-commit never fired. On restart the worktree
524
+ // is re-created from the branch HEAD (which has [ ] for the crashed task),
525
+ // causing verifyExpectedArtifact() to return false → stale-key eviction →
526
+ // infinite dispatch/skip loop. Reconciling here ensures the worktree sees
527
+ // the same [x] state that syncStateToProjectRoot() wrote to the root.
528
+ reconcilePlanCheckboxes(basePath, info.path, milestoneId);
529
+ }
249
530
 
250
531
  // Run user-configured post-create hook (#597) — e.g. copy .env, symlink assets
251
532
  const hookError = runWorktreePostCreateHook(basePath, info.path);
@@ -264,7 +545,7 @@ export function createAutoWorktree(basePath: string, milestoneId: string): strin
264
545
  // Don't store originalBase -- caller can retry or clean up.
265
546
  throw new GSDError(
266
547
  GSD_IO_ERROR,
267
- `Auto-worktree created at ${info.path} but chdir failed: ${getErrorMessage(err)}`,
548
+ `Auto-worktree created at ${info.path} but chdir failed: ${err instanceof Error ? err.message : String(err)}`,
268
549
  );
269
550
  }
270
551
 
@@ -272,6 +553,49 @@ export function createAutoWorktree(basePath: string, milestoneId: string): strin
272
553
  return info.path;
273
554
  }
274
555
 
556
+ /**
557
+ * Copy .gsd/ planning artifacts from source repo to a new worktree.
558
+ * Copies milestones/, DECISIONS.md, REQUIREMENTS.md, PROJECT.md, QUEUE.md,
559
+ * STATE.md, KNOWLEDGE.md, and OVERRIDES.md.
560
+ * Skips runtime files (auto.lock, metrics.json, etc.) and the worktrees/ dir.
561
+ * Best-effort — failures are non-fatal since auto-mode can recreate artifacts.
562
+ */
563
+ function copyPlanningArtifacts(srcBase: string, wtPath: string): void {
564
+ const srcGsd = join(srcBase, ".gsd");
565
+ const dstGsd = join(wtPath, ".gsd");
566
+ if (!existsSync(srcGsd)) return;
567
+
568
+ // Copy milestones/ directory (planning files, roadmaps, plans, research)
569
+ safeCopyRecursive(join(srcGsd, "milestones"), join(dstGsd, "milestones"), {
570
+ force: true,
571
+ filter: (src) => !src.endsWith("-META.json"),
572
+ });
573
+
574
+ // Copy top-level planning files
575
+ for (const file of [
576
+ "DECISIONS.md",
577
+ "REQUIREMENTS.md",
578
+ "PROJECT.md",
579
+ "QUEUE.md",
580
+ "STATE.md",
581
+ "KNOWLEDGE.md",
582
+ "OVERRIDES.md",
583
+ ]) {
584
+ safeCopy(join(srcGsd, file), join(dstGsd, file), { force: true });
585
+ }
586
+
587
+ // Copy gsd.db if present in source
588
+ const srcDb = join(srcGsd, "gsd.db");
589
+ const destDb = join(dstGsd, "gsd.db");
590
+ if (existsSync(srcDb)) {
591
+ try {
592
+ copyWorktreeDb(srcDb, destDb);
593
+ } catch {
594
+ /* non-fatal */
595
+ }
596
+ }
597
+ }
598
+
275
599
  /**
276
600
  * Teardown an auto-worktree: chdir back to original base, then remove
277
601
  * the worktree and its branch.
@@ -291,12 +615,15 @@ export function teardownAutoWorktree(
291
615
  } catch (err) {
292
616
  throw new GSDError(
293
617
  GSD_IO_ERROR,
294
- `Failed to chdir back to ${originalBasePath} during teardown: ${getErrorMessage(err)}`,
618
+ `Failed to chdir back to ${originalBasePath} during teardown: ${err instanceof Error ? err.message : String(err)}`,
295
619
  );
296
620
  }
297
621
 
298
622
  nudgeGitBranchCache(previousCwd);
299
- removeWorktree(originalBasePath, milestoneId, { branch, deleteBranch: !preserveBranch });
623
+ removeWorktree(originalBasePath, milestoneId, {
624
+ branch,
625
+ deleteBranch: !preserveBranch,
626
+ });
300
627
  }
301
628
 
302
629
  /**
@@ -304,36 +631,13 @@ export function teardownAutoWorktree(
304
631
  * Checks both module state and git branch prefix.
305
632
  */
306
633
  export function isInAutoWorktree(basePath: string): boolean {
634
+ if (!originalBase) return false;
307
635
  const cwd = process.cwd();
308
-
309
- // Primary check: use originalBase if available (fast path)
310
- if (originalBase) {
311
- const resolvedBase = existsSync(basePath) ? realpathSync(basePath) : basePath;
312
- const wtDir = join(gsdRoot(resolvedBase), "worktrees");
313
- if (!cwd.startsWith(wtDir)) return false;
314
- const branch = nativeGetCurrentBranch(cwd);
315
- return branch.startsWith("milestone/");
316
- }
317
-
318
- // Fallback: infer worktree status structurally when originalBase is null
319
- // (happens after session restart where module-level state is lost, #1120).
320
- // Check if cwd is inside a .gsd/worktrees/ directory and has a .git file
321
- // (worktree marker) pointing to the main repo.
322
- const worktreeMarker = join(cwd, ".git");
323
- if (!existsSync(worktreeMarker)) return false;
324
- try {
325
- const stat = statSync(worktreeMarker);
326
- if (stat.isDirectory()) return false; // Main repo has .git dir, not file
327
- // Worktrees have a .git file with "gitdir: ..." pointing to the main repo
328
- const gitContent = readFileSync(worktreeMarker, "utf-8").trim();
329
- if (!gitContent.startsWith("gitdir:")) return false;
330
- // Verify we're inside a GSD-managed worktree
331
- if (!detectWorktreeName(cwd)) return false;
332
- const branch = nativeGetCurrentBranch(cwd);
333
- return branch.startsWith("milestone/");
334
- } catch {
335
- return false;
336
- }
636
+ const resolvedBase = existsSync(basePath) ? realpathSync(basePath) : basePath;
637
+ const wtDir = join(resolvedBase, ".gsd", "worktrees");
638
+ if (!cwd.startsWith(wtDir)) return false;
639
+ const branch = nativeGetCurrentBranch(cwd);
640
+ return branch.startsWith("milestone/");
337
641
  }
338
642
 
339
643
  /**
@@ -344,7 +648,10 @@ export function isInAutoWorktree(basePath: string): boolean {
344
648
  * gitdir: pointer) rather than just a stray directory. This prevents
345
649
  * mis-detection of leftover directories as active worktrees (#695).
346
650
  */
347
- export function getAutoWorktreePath(basePath: string, milestoneId: string): string | null {
651
+ export function getAutoWorktreePath(
652
+ basePath: string,
653
+ milestoneId: string,
654
+ ): string | null {
348
655
  const p = worktreePath(basePath, milestoneId);
349
656
  if (!existsSync(p)) return null;
350
657
 
@@ -368,39 +675,42 @@ export function getAutoWorktreePath(basePath: string, milestoneId: string): stri
368
675
  *
369
676
  * Atomic: chdir + originalBase update in same try block.
370
677
  */
371
- export function enterAutoWorktree(basePath: string, milestoneId: string): string {
678
+ export function enterAutoWorktree(
679
+ basePath: string,
680
+ milestoneId: string,
681
+ ): string {
372
682
  const p = worktreePath(basePath, milestoneId);
373
683
  if (!existsSync(p)) {
374
- throw new GSDError(GSD_IO_ERROR, `Auto-worktree for ${milestoneId} does not exist at ${p}`);
684
+ throw new GSDError(
685
+ GSD_IO_ERROR,
686
+ `Auto-worktree for ${milestoneId} does not exist at ${p}`,
687
+ );
375
688
  }
376
689
 
377
690
  // Validate this is a real git worktree, not a stray directory (#695)
378
691
  const gitPath = join(p, ".git");
379
692
  if (!existsSync(gitPath)) {
380
- throw new GSDError(GSD_GIT_ERROR, `Auto-worktree path ${p} exists but is not a git worktree (no .git)`);
693
+ throw new GSDError(
694
+ GSD_GIT_ERROR,
695
+ `Auto-worktree path ${p} exists but is not a git worktree (no .git)`,
696
+ );
381
697
  }
382
698
  try {
383
699
  const content = readFileSync(gitPath, "utf8").trim();
384
700
  if (!content.startsWith("gitdir: ")) {
385
- throw new GSDError(GSD_GIT_ERROR, `Auto-worktree path ${p} has a .git but it is not a worktree gitdir pointer`);
701
+ throw new GSDError(
702
+ GSD_GIT_ERROR,
703
+ `Auto-worktree path ${p} has a .git but it is not a worktree gitdir pointer`,
704
+ );
386
705
  }
387
706
  } catch (err) {
388
707
  if (err instanceof Error && err.message.includes("worktree")) throw err;
389
- throw new GSDError(GSD_IO_ERROR, `Auto-worktree path ${p} exists but .git is unreadable`);
708
+ throw new GSDError(
709
+ GSD_IO_ERROR,
710
+ `Auto-worktree path ${p} exists but .git is unreadable`,
711
+ );
390
712
  }
391
713
 
392
- // Ensure worktree shares external state via symlink (#1311).
393
- // On resume (enterAutoWorktree), the symlink may be missing if it was
394
- // created before ensureGsdSymlink existed, or the .gsd/ directory may be
395
- // a stale git-tracked copy instead of a symlink. Refreshing here ensures
396
- // the worktree sees the same milestone state as the main repo.
397
- ensureGsdSymlink(p);
398
-
399
- // Sync .gsd/ state from main repo into worktree (#1311).
400
- // Covers the case where .gsd/ is a real directory (not symlinked) and
401
- // milestones were created on main after the worktree was last used.
402
- syncGsdStateToWorktree(basePath, p);
403
-
404
714
  const previousCwd = process.cwd();
405
715
 
406
716
  try {
@@ -409,7 +719,7 @@ export function enterAutoWorktree(basePath: string, milestoneId: string): string
409
719
  } catch (err) {
410
720
  throw new GSDError(
411
721
  GSD_IO_ERROR,
412
- `Failed to enter auto-worktree at ${p}: ${getErrorMessage(err)}`,
722
+ `Failed to enter auto-worktree at ${p}: ${err instanceof Error ? err.message : String(err)}`,
413
723
  );
414
724
  }
415
725
 
@@ -432,8 +742,10 @@ export function getActiveAutoWorktreeContext(): {
432
742
  } | null {
433
743
  if (!originalBase) return null;
434
744
  const cwd = process.cwd();
435
- const resolvedBase = existsSync(originalBase) ? realpathSync(originalBase) : originalBase;
436
- const wtDir = join(gsdRoot(resolvedBase), "worktrees");
745
+ const resolvedBase = existsSync(originalBase)
746
+ ? realpathSync(originalBase)
747
+ : originalBase;
748
+ const wtDir = join(resolvedBase, ".gsd", "worktrees");
437
749
  if (!cwd.startsWith(wtDir)) return null;
438
750
  const worktreeName = detectWorktreeName(cwd);
439
751
  if (!worktreeName) return null;
@@ -457,7 +769,10 @@ function autoCommitDirtyState(cwd: string): boolean {
457
769
  const status = nativeWorkingTreeStatus(cwd);
458
770
  if (!status) return false;
459
771
  nativeAddAll(cwd);
460
- const result = nativeCommit(cwd, "chore: auto-commit before milestone merge");
772
+ const result = nativeCommit(
773
+ cwd,
774
+ "chore: auto-commit before milestone merge",
775
+ );
461
776
  return result !== null;
462
777
  } catch {
463
778
  return false;
@@ -493,59 +808,53 @@ export function mergeMilestoneToMain(
493
808
  // 1. Auto-commit dirty state in worktree before leaving
494
809
  autoCommitDirtyState(worktreeCwd);
495
810
 
811
+ // Reconcile worktree DB into main DB before leaving worktree context
812
+ if (isDbAvailable()) {
813
+ try {
814
+ const worktreeDbPath = join(worktreeCwd, ".gsd", "gsd.db");
815
+ const mainDbPath = join(originalBasePath_, ".gsd", "gsd.db");
816
+ reconcileWorktreeDb(mainDbPath, worktreeDbPath);
817
+ } catch {
818
+ /* non-fatal */
819
+ }
820
+ }
821
+
496
822
  // 2. Parse roadmap for slice listing
497
823
  const roadmap = parseRoadmap(roadmapContent);
498
- const completedSlices = roadmap.slices.filter(s => s.done);
824
+ const completedSlices = roadmap.slices.filter((s) => s.done);
499
825
 
500
826
  // 3. chdir to original base
501
827
  const previousCwd = process.cwd();
502
828
  process.chdir(originalBasePath_);
503
829
 
504
- // 3a. Auto-commit any dirty state in the project root. Without this, the
505
- // squash merge can fail with "Your local changes would be overwritten" (#1127).
506
- autoCommitDirtyState(originalBasePath_);
507
-
508
- // 3b. Remove untracked .gsd/ runtime files that syncStateToProjectRoot copied.
509
- // Only clean specific runtime files — NEVER touch milestones/, decisions, or
510
- // other planning artifacts that represent user work (#1250).
511
- const runtimeFilesToClean = ["STATE.md", "completed-units.json", "auto.lock", "gsd.db"];
512
- for (const f of runtimeFilesToClean) {
513
- const p = join(originalBasePath_, ".gsd", f);
514
- try { if (existsSync(p)) unlinkSync(p); } catch { /* non-fatal */ }
515
- }
516
- try {
517
- const runtimeDir = join(originalBasePath_, ".gsd", "runtime");
518
- if (existsSync(runtimeDir)) rmSync(runtimeDir, { recursive: true, force: true });
519
- } catch { /* non-fatal */ }
520
-
521
830
  // 4. Resolve integration branch — prefer milestone metadata, fall back to preferences / "main"
522
831
  const prefs = loadEffectiveGSDPreferences()?.preferences?.git ?? {};
523
- const integrationBranch = readIntegrationBranch(originalBasePath_, milestoneId);
832
+ const integrationBranch = readIntegrationBranch(
833
+ originalBasePath_,
834
+ milestoneId,
835
+ );
524
836
  const mainBranch = integrationBranch ?? prefs.main_branch ?? "main";
525
837
 
838
+ // Remove transient project-root state files before any branch or merge
839
+ // operation. Untracked milestone metadata can otherwise block squash merges.
840
+ clearProjectRootStateFiles(originalBasePath_, milestoneId);
841
+
526
842
  // 5. Checkout integration branch (skip if already current — avoids git error
527
843
  // when main is already checked out in the project-root worktree, #757)
528
844
  const currentBranchAtBase = nativeGetCurrentBranch(originalBasePath_);
529
845
  if (currentBranchAtBase !== mainBranch) {
530
- // Remove untracked .gsd/ state files that may conflict with the branch
531
- // being checked out. These are regenerated by doctor/rebuildState and
532
- // are not meaningful in the main working tree — the worktree had the
533
- // real state. Without this, `git checkout main` fails with
534
- // "Your local changes would be overwritten" (#827).
535
- const gsdStateFiles = ["STATE.md", "completed-units.json", "auto.lock"];
536
- for (const f of gsdStateFiles) {
537
- const p = join(gsdRoot(originalBasePath_), f);
538
- try { unlinkSync(p); } catch { /* non-fatal — file may not exist */ }
539
- }
540
846
  nativeCheckoutBranch(originalBasePath_, mainBranch);
541
847
  }
542
848
 
543
849
  // 6. Build rich commit message
544
- const milestoneTitle = roadmap.title.replace(/^M\d+:\s*/, "").trim() || milestoneId;
850
+ const milestoneTitle =
851
+ roadmap.title.replace(/^M\d+:\s*/, "").trim() || milestoneId;
545
852
  const subject = `feat(${milestoneId}): ${milestoneTitle}`;
546
853
  let body = "";
547
854
  if (completedSlices.length > 0) {
548
- const sliceLines = completedSlices.map(s => `- ${s.id}: ${s.title}`).join("\n");
855
+ const sliceLines = completedSlices
856
+ .map((s) => `- ${s.id}: ${s.title}`)
857
+ .join("\n");
549
858
  body = `\n\nCompleted slices:\n${sliceLines}\n\nBranch: ${milestoneBranch}`;
550
859
  }
551
860
  const commitMessage = subject + body;
@@ -555,17 +864,20 @@ export function mergeMilestoneToMain(
555
864
 
556
865
  if (!mergeResult.success) {
557
866
  // Check for conflicts — use merge result first, fall back to nativeConflictFiles
558
- const conflictedFiles = mergeResult.conflicts.length > 0
559
- ? mergeResult.conflicts
560
- : nativeConflictFiles(originalBasePath_);
867
+ const conflictedFiles =
868
+ mergeResult.conflicts.length > 0
869
+ ? mergeResult.conflicts
870
+ : nativeConflictFiles(originalBasePath_);
561
871
 
562
872
  if (conflictedFiles.length > 0) {
563
873
  // Separate .gsd/ state file conflicts from real code conflicts.
564
- // GSD state files (STATE.md, completed-units.json, auto.lock, etc.)
874
+ // GSD state files (STATE.md, auto.lock, etc.)
565
875
  // diverge between branches during normal operation — always prefer the
566
876
  // milestone branch version since it has the latest execution state.
567
- const gsdConflicts = conflictedFiles.filter(f => f.startsWith(".gsd/"));
568
- const codeConflicts = conflictedFiles.filter(f => !f.startsWith(".gsd/"));
877
+ const gsdConflicts = conflictedFiles.filter((f) => f.startsWith(".gsd/"));
878
+ const codeConflicts = conflictedFiles.filter(
879
+ (f) => !f.startsWith(".gsd/"),
880
+ );
569
881
 
570
882
  // Auto-resolve .gsd/ conflicts by accepting the milestone branch version
571
883
  if (gsdConflicts.length > 0) {
@@ -583,7 +895,12 @@ export function mergeMilestoneToMain(
583
895
 
584
896
  // If there are still non-.gsd conflicts, escalate
585
897
  if (codeConflicts.length > 0) {
586
- throw new MergeConflictError(codeConflicts, "squash", milestoneBranch, mainBranch);
898
+ throw new MergeConflictError(
899
+ codeConflicts,
900
+ "squash",
901
+ milestoneBranch,
902
+ mainBranch,
903
+ );
587
904
  }
588
905
  }
589
906
  // No conflicts detected — possibly "already up to date", fall through to commit
@@ -638,7 +955,10 @@ export function mergeMilestoneToMain(
638
955
 
639
956
  // 10. Remove worktree directory first (must happen before branch deletion)
640
957
  try {
641
- removeWorktree(originalBasePath_, milestoneId, { branch: null as unknown as string, deleteBranch: false });
958
+ removeWorktree(originalBasePath_, milestoneId, {
959
+ branch: null as unknown as string,
960
+ deleteBranch: false,
961
+ });
642
962
  } catch {
643
963
  // Best-effort -- worktree dir may already be gone
644
964
  }