gsd-pi 2.54.0 → 2.55.0-dev.9ec7cdf

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 (262) hide show
  1. package/dist/cli.js +19 -19
  2. package/dist/headless-ui.d.ts +27 -1
  3. package/dist/headless-ui.js +203 -13
  4. package/dist/headless.js +60 -3
  5. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +2 -2
  6. package/dist/resources/extensions/bg-shell/utilities.js +34 -5
  7. package/dist/resources/extensions/gsd/auto/phases.js +19 -3
  8. package/dist/resources/extensions/gsd/auto-dispatch.js +1 -1
  9. package/dist/resources/extensions/gsd/auto-model-selection.js +17 -1
  10. package/dist/resources/extensions/gsd/auto-prompts.js +9 -0
  11. package/dist/resources/extensions/gsd/auto-start.js +12 -5
  12. package/dist/resources/extensions/gsd/auto-worktree.js +39 -14
  13. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +5 -1
  14. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +18 -0
  15. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +18 -5
  16. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +20 -0
  17. package/dist/resources/extensions/gsd/commands/catalog.js +2 -1
  18. package/dist/resources/extensions/gsd/commands/handlers/parallel.js +15 -1
  19. package/dist/resources/extensions/gsd/crash-recovery.js +2 -2
  20. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +413 -0
  21. package/dist/resources/extensions/gsd/parallel-orchestrator.js +5 -1
  22. package/dist/resources/extensions/gsd/session-lock.js +46 -12
  23. package/dist/resources/extensions/gsd/skill-health.js +2 -2
  24. package/dist/resources/extensions/gsd/visualizer-overlay.js +3 -3
  25. package/dist/resources/extensions/shared/format-utils.js +1 -1
  26. package/dist/resources/extensions/subagent/worker-registry.js +2 -1
  27. package/dist/web/standalone/.next/BUILD_ID +1 -1
  28. package/dist/web/standalone/.next/app-path-routes-manifest.json +15 -15
  29. package/dist/web/standalone/.next/build-manifest.json +4 -4
  30. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  31. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  32. package/dist/web/standalone/.next/required-server-files.json +3 -3
  33. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  34. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  35. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  36. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  37. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  38. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  39. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  40. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  41. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  42. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  43. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  44. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  45. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  46. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  47. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  48. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  50. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  51. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  52. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  53. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  54. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  55. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  56. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  57. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  58. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  59. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  60. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  61. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  62. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  63. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  64. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  65. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  66. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  67. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  68. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  69. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  70. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  71. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  72. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  73. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  74. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  75. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  76. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  77. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  78. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  79. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  80. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  81. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  82. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  84. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  85. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  87. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  88. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  90. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  99. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  100. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  106. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  120. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  122. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  124. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  126. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/index.html +1 -1
  136. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  137. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  138. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  139. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  140. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  141. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/page.js +2 -2
  143. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app-paths-manifest.json +15 -15
  145. package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
  146. package/dist/web/standalone/.next/server/chunks/7471.js +3 -3
  147. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/middleware.js +2 -2
  150. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  152. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  153. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  154. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  155. package/dist/web/standalone/.next/static/chunks/6502.2305d0afd2385711.js +9 -0
  156. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  157. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  158. package/dist/web/standalone/.next/static/chunks/app/page-0c485498795110d6.js +1 -0
  159. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  160. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  161. package/dist/web/standalone/.next/static/chunks/{webpack-bca0e732db0dcec3.js → webpack-4332cbd5dd1be584.js} +1 -1
  162. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  163. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  164. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  165. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  166. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  167. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  168. package/dist/web/standalone/server.js +1 -1
  169. package/package.json +6 -4
  170. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +1 -1
  171. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  172. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  173. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts +2 -0
  174. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
  175. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +14 -2
  176. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
  177. package/packages/pi-coding-agent/package.json +1 -1
  178. package/packages/pi-coding-agent/src/core/model-registry.ts +1 -1
  179. package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +16 -2
  180. package/pkg/package.json +1 -1
  181. package/scripts/ensure-workspace-builds.cjs +45 -41
  182. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +2 -2
  183. package/src/resources/extensions/bg-shell/utilities.ts +39 -4
  184. package/src/resources/extensions/gsd/auto/phases.ts +25 -4
  185. package/src/resources/extensions/gsd/auto-dispatch.ts +1 -1
  186. package/src/resources/extensions/gsd/auto-model-selection.ts +21 -1
  187. package/src/resources/extensions/gsd/auto-prompts.ts +15 -0
  188. package/src/resources/extensions/gsd/auto-start.ts +13 -5
  189. package/src/resources/extensions/gsd/auto-worktree.ts +46 -13
  190. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +5 -4
  191. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +53 -0
  192. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +19 -6
  193. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +24 -0
  194. package/src/resources/extensions/gsd/commands/catalog.ts +2 -1
  195. package/src/resources/extensions/gsd/commands/handlers/parallel.ts +19 -1
  196. package/src/resources/extensions/gsd/crash-recovery.ts +2 -3
  197. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +497 -0
  198. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -1
  199. package/src/resources/extensions/gsd/session-lock.ts +46 -12
  200. package/src/resources/extensions/gsd/skill-health.ts +2 -2
  201. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +139 -0
  202. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +28 -0
  203. package/src/resources/extensions/gsd/tests/{all-milestones-complete-merge.test.ts → integration/all-milestones-complete-merge.test.ts} +3 -3
  204. package/src/resources/extensions/gsd/tests/{atomic-task-closeout.test.ts → integration/atomic-task-closeout.test.ts} +1 -1
  205. package/src/resources/extensions/gsd/tests/{auto-preflight.test.ts → integration/auto-preflight.test.ts} +1 -1
  206. package/src/resources/extensions/gsd/tests/{auto-recovery.test.ts → integration/auto-recovery.test.ts} +7 -7
  207. package/src/resources/extensions/gsd/tests/{auto-secrets-gate.test.ts → integration/auto-secrets-gate.test.ts} +2 -2
  208. package/src/resources/extensions/gsd/tests/{auto-stash-merge.test.ts → integration/auto-stash-merge.test.ts} +3 -3
  209. package/src/resources/extensions/gsd/tests/{auto-worktree-milestone-merge.test.ts → integration/auto-worktree-milestone-merge.test.ts} +4 -4
  210. package/src/resources/extensions/gsd/tests/{auto-worktree.test.ts → integration/auto-worktree.test.ts} +5 -5
  211. package/src/resources/extensions/gsd/tests/{continue-here.test.ts → integration/continue-here.test.ts} +3 -3
  212. package/src/resources/extensions/gsd/tests/{doctor-completion-deferral.test.ts → integration/doctor-completion-deferral.test.ts} +1 -1
  213. package/src/resources/extensions/gsd/tests/{doctor-delimiter-fix.test.ts → integration/doctor-delimiter-fix.test.ts} +1 -1
  214. package/src/resources/extensions/gsd/tests/{doctor-enhancements.test.ts → integration/doctor-enhancements.test.ts} +3 -3
  215. package/src/resources/extensions/gsd/tests/{doctor-environment-worktree.test.ts → integration/doctor-environment-worktree.test.ts} +1 -1
  216. package/src/resources/extensions/gsd/tests/{doctor-environment.test.ts → integration/doctor-environment.test.ts} +1 -1
  217. package/src/resources/extensions/gsd/tests/{doctor-fixlevel.test.ts → integration/doctor-fixlevel.test.ts} +2 -2
  218. package/src/resources/extensions/gsd/tests/{doctor-git.test.ts → integration/doctor-git.test.ts} +1 -1
  219. package/src/resources/extensions/gsd/tests/{doctor-proactive.test.ts → integration/doctor-proactive.test.ts} +1 -1
  220. package/src/resources/extensions/gsd/tests/{doctor-roadmap-summary-atomicity.test.ts → integration/doctor-roadmap-summary-atomicity.test.ts} +1 -1
  221. package/src/resources/extensions/gsd/tests/{doctor-runtime.test.ts → integration/doctor-runtime.test.ts} +1 -1
  222. package/src/resources/extensions/gsd/tests/{doctor.test.ts → integration/doctor.test.ts} +1 -1
  223. package/src/resources/extensions/gsd/tests/{e2e-workflow-pipeline-integration.test.ts → integration/e2e-workflow-pipeline-integration.test.ts} +5 -5
  224. package/src/resources/extensions/gsd/tests/{feature-branch-lifecycle-integration.test.ts → integration/feature-branch-lifecycle-integration.test.ts} +4 -4
  225. package/src/resources/extensions/gsd/tests/{git-locale.test.ts → integration/git-locale.test.ts} +4 -4
  226. package/src/resources/extensions/gsd/tests/{git-self-heal.test.ts → integration/git-self-heal.test.ts} +1 -1
  227. package/src/resources/extensions/gsd/tests/{git-service.test.ts → integration/git-service.test.ts} +4 -4
  228. package/src/resources/extensions/gsd/tests/{gitignore-tracked-gsd.test.ts → integration/gitignore-tracked-gsd.test.ts} +2 -2
  229. package/src/resources/extensions/gsd/tests/{idle-recovery.test.ts → integration/idle-recovery.test.ts} +3 -3
  230. package/src/resources/extensions/gsd/tests/{inherited-repo-home-dir.test.ts → integration/inherited-repo-home-dir.test.ts} +1 -1
  231. package/src/resources/extensions/gsd/tests/{integration-lifecycle.test.ts → integration/integration-lifecycle.test.ts} +4 -4
  232. package/src/resources/extensions/gsd/tests/{integration-mixed-milestones.test.ts → integration/integration-mixed-milestones.test.ts} +6 -6
  233. package/src/resources/extensions/gsd/tests/{integration-proof.test.ts → integration/integration-proof.test.ts} +12 -12
  234. package/src/resources/extensions/gsd/tests/{migrate-command.test.ts → integration/migrate-command.test.ts} +2 -2
  235. package/src/resources/extensions/gsd/tests/{milestone-transition-worktree.test.ts → integration/milestone-transition-worktree.test.ts} +3 -3
  236. package/src/resources/extensions/gsd/tests/{parallel-merge.test.ts → integration/parallel-merge.test.ts} +3 -3
  237. package/src/resources/extensions/gsd/tests/{parallel-workers-multi-milestone-e2e.test.ts → integration/parallel-workers-multi-milestone-e2e.test.ts} +3 -3
  238. package/src/resources/extensions/gsd/tests/{paths.test.ts → integration/paths.test.ts} +1 -1
  239. package/src/resources/extensions/gsd/tests/{plugin-importer-live.test.ts → integration/plugin-importer-live.test.ts} +2 -2
  240. package/src/resources/extensions/gsd/tests/{queue-completed-milestone-perf.test.ts → integration/queue-completed-milestone-perf.test.ts} +3 -3
  241. package/src/resources/extensions/gsd/tests/{queue-reorder-e2e.test.ts → integration/queue-reorder-e2e.test.ts} +5 -5
  242. package/src/resources/extensions/gsd/tests/{quick-branch-lifecycle.test.ts → integration/quick-branch-lifecycle.test.ts} +5 -5
  243. package/src/resources/extensions/gsd/tests/{run-uat.test.ts → integration/run-uat.test.ts} +4 -4
  244. package/src/resources/extensions/gsd/tests/{token-savings.test.ts → integration/token-savings.test.ts} +3 -3
  245. package/src/resources/extensions/gsd/tests/{worktree-e2e.test.ts → integration/worktree-e2e.test.ts} +4 -4
  246. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +55 -0
  247. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +60 -0
  248. package/src/resources/extensions/gsd/tests/parallel-worker-lock-contention.test.ts +226 -0
  249. package/src/resources/extensions/gsd/tests/plan-milestone-queue-context.test.ts +48 -0
  250. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +61 -19
  251. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +98 -0
  252. package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +59 -0
  253. package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +49 -24
  254. package/src/resources/extensions/gsd/visualizer-overlay.ts +3 -3
  255. package/src/resources/extensions/shared/format-utils.ts +1 -1
  256. package/src/resources/extensions/subagent/worker-registry.ts +2 -1
  257. package/dist/web/standalone/.next/static/chunks/4024.87fd909ae0110f50.js +0 -9
  258. package/dist/web/standalone/.next/static/chunks/app/page-fbecd1237e2d6d1f.js +0 -1
  259. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  260. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  261. /package/dist/web/standalone/.next/static/{KixbEdSRlU9zzYdZdrJ7A → k92jvAf8IfV4dZE3nnrAr}/_buildManifest.js +0 -0
  262. /package/dist/web/standalone/.next/static/{KixbEdSRlU9zzYdZdrJ7A → k92jvAf8IfV4dZE3nnrAr}/_ssgManifest.js +0 -0
@@ -1,11 +1,12 @@
1
1
  /**
2
2
  * worktree-preferences-sync.test.ts — Regression test for #2684.
3
3
  *
4
- * Verifies that preferences.md is seeded into auto-mode worktrees:
4
+ * Verifies that canonical PREFERENCES.md is seeded into auto-mode worktrees,
5
+ * while legacy lowercase preferences.md remains supported:
5
6
  *
6
- * 1. copyPlanningArtifacts() copies preferences.md on initial worktree creation
7
- * 2. syncGsdStateToWorktree() forward-syncs preferences.md (additive only)
8
- * 3. syncWorktreeStateBack() does NOT overwrite project root preferences.md
7
+ * 1. syncGsdStateToWorktree() forward-syncs PREFERENCES.md (additive only)
8
+ * 2. syncGsdStateToWorktree() still accepts legacy lowercase preferences.md
9
+ * 3. syncWorktreeStateBack() does NOT overwrite project root PREFERENCES.md
9
10
  */
10
11
 
11
12
  import test from "node:test";
@@ -15,6 +16,7 @@ import {
15
16
  mkdirSync,
16
17
  mkdtempSync,
17
18
  readFileSync,
19
+ readdirSync,
18
20
  rmSync,
19
21
  writeFileSync,
20
22
  } from "node:fs";
@@ -56,35 +58,58 @@ const PREFS_CONTENT = [
56
58
  ' - use: "frontend-design"',
57
59
  ].join("\n");
58
60
 
59
- test("#2684: syncGsdStateToWorktree forward-syncs preferences.md when missing from worktree", (t) => {
61
+ test("#2684: syncGsdStateToWorktree forward-syncs PREFERENCES.md when missing from worktree", (t) => {
60
62
  const mainBase = makeTempDir("main");
61
63
  const wtBase = makeTempDir("wt");
62
64
  t.after(() => cleanup(mainBase, wtBase));
63
65
 
64
- // Project root has preferences.md
65
- writeFile(mainBase, ".gsd/preferences.md", PREFS_CONTENT);
66
+ // Project root has canonical PREFERENCES.md
67
+ writeFile(mainBase, ".gsd/PREFERENCES.md", PREFS_CONTENT);
66
68
 
67
- // Worktree has .gsd/ but no preferences.md
69
+ // Worktree has .gsd/ but no preferences file
68
70
  mkdirSync(join(wtBase, ".gsd"), { recursive: true });
69
71
 
70
72
  const result = syncGsdStateToWorktree(mainBase, wtBase);
71
73
 
72
74
  assert.ok(
73
- existsSync(join(wtBase, ".gsd", "preferences.md")),
74
- "preferences.md should be copied to worktree",
75
+ existsSync(join(wtBase, ".gsd", "PREFERENCES.md")),
76
+ "PREFERENCES.md should be copied to worktree",
75
77
  );
76
78
  assert.equal(
77
- readFileSync(join(wtBase, ".gsd", "preferences.md"), "utf-8"),
79
+ readFileSync(join(wtBase, ".gsd", "PREFERENCES.md"), "utf-8"),
78
80
  PREFS_CONTENT,
79
- "preferences.md content should match source",
81
+ "PREFERENCES.md content should match source",
82
+ );
83
+ assert.ok(
84
+ result.synced.includes("PREFERENCES.md"),
85
+ "PREFERENCES.md should appear in synced list",
86
+ );
87
+ });
88
+
89
+ test("syncGsdStateToWorktree still accepts legacy lowercase preferences.md", (t) => {
90
+ const mainBase = makeTempDir("main");
91
+ const wtBase = makeTempDir("wt");
92
+ t.after(() => cleanup(mainBase, wtBase));
93
+
94
+ writeFile(mainBase, ".gsd/preferences.md", PREFS_CONTENT);
95
+ mkdirSync(join(wtBase, ".gsd"), { recursive: true });
96
+
97
+ const result = syncGsdStateToWorktree(mainBase, wtBase);
98
+
99
+ const copiedEntries = readdirSync(join(wtBase, ".gsd"))
100
+ .filter((name) => name === "PREFERENCES.md" || name === "preferences.md");
101
+
102
+ assert.ok(
103
+ copiedEntries.length === 1,
104
+ `expected exactly one preferences file in worktree, got ${copiedEntries.join(", ") || "(none)"}`,
80
105
  );
81
106
  assert.ok(
82
- result.synced.includes("preferences.md"),
83
- "preferences.md should appear in synced list",
107
+ result.synced.includes("preferences.md") || result.synced.includes("PREFERENCES.md"),
108
+ "legacy source should still appear in synced list",
84
109
  );
85
110
  });
86
111
 
87
- test("#2684: syncGsdStateToWorktree does NOT overwrite existing worktree preferences.md", (t) => {
112
+ test("#2684: syncGsdStateToWorktree does NOT overwrite existing worktree preferences file", (t) => {
88
113
  const mainBase = makeTempDir("main");
89
114
  const wtBase = makeTempDir("wt");
90
115
  t.after(() => cleanup(mainBase, wtBase));
@@ -92,19 +117,19 @@ test("#2684: syncGsdStateToWorktree does NOT overwrite existing worktree prefere
92
117
  const rootPrefs = "# Root preferences\nold: true";
93
118
  const wtPrefs = "# Worktree preferences\nmodified: true";
94
119
 
95
- writeFile(mainBase, ".gsd/preferences.md", rootPrefs);
96
- writeFile(wtBase, ".gsd/preferences.md", wtPrefs);
120
+ writeFile(mainBase, ".gsd/PREFERENCES.md", rootPrefs);
121
+ writeFile(wtBase, ".gsd/PREFERENCES.md", wtPrefs);
97
122
 
98
123
  syncGsdStateToWorktree(mainBase, wtBase);
99
124
 
100
125
  assert.equal(
101
- readFileSync(join(wtBase, ".gsd", "preferences.md"), "utf-8"),
126
+ readFileSync(join(wtBase, ".gsd", "PREFERENCES.md"), "utf-8"),
102
127
  wtPrefs,
103
- "existing worktree preferences.md must not be overwritten",
128
+ "existing worktree PREFERENCES.md must not be overwritten",
104
129
  );
105
130
  });
106
131
 
107
- test("#2684: syncWorktreeStateBack does NOT overwrite project root preferences.md", (t) => {
132
+ test("#2684: syncWorktreeStateBack does NOT overwrite project root PREFERENCES.md", (t) => {
108
133
  const mainBase = makeTempDir("main");
109
134
  const wtBase = makeTempDir("wt");
110
135
  const mid = "M001";
@@ -113,8 +138,8 @@ test("#2684: syncWorktreeStateBack does NOT overwrite project root preferences.m
113
138
  const rootPrefs = "# Root preferences\nauthoritative: true";
114
139
  const wtPrefs = "# Worktree preferences\nstale-copy: true";
115
140
 
116
- writeFile(mainBase, ".gsd/preferences.md", rootPrefs);
117
- writeFile(wtBase, ".gsd/preferences.md", wtPrefs);
141
+ writeFile(mainBase, ".gsd/PREFERENCES.md", rootPrefs);
142
+ writeFile(wtBase, ".gsd/PREFERENCES.md", wtPrefs);
118
143
 
119
144
  // Worktree needs at least a milestone dir for the function to proceed
120
145
  mkdirSync(join(wtBase, ".gsd", "milestones", mid), { recursive: true });
@@ -123,8 +148,8 @@ test("#2684: syncWorktreeStateBack does NOT overwrite project root preferences.m
123
148
  syncWorktreeStateBack(mainBase, wtBase, mid);
124
149
 
125
150
  assert.equal(
126
- readFileSync(join(mainBase, ".gsd", "preferences.md"), "utf-8"),
151
+ readFileSync(join(mainBase, ".gsd", "PREFERENCES.md"), "utf-8"),
127
152
  rootPrefs,
128
- "project root preferences.md must NOT be overwritten by worktree copy",
153
+ "project root PREFERENCES.md must NOT be overwritten by worktree copy",
129
154
  );
130
155
  });
@@ -14,7 +14,10 @@ import {
14
14
  renderHealthView,
15
15
  type ProgressFilter,
16
16
  } from "./visualizer-views.js";
17
+ import { writeFileSync, mkdirSync } from "node:fs";
18
+ import { join } from "node:path";
17
19
  import { writeExportFile } from "./export.js";
20
+ import { gsdRoot } from "./paths.js";
18
21
  import { stripAnsi } from "../shared/mod.js";
19
22
 
20
23
  const TAB_COUNT = 10;
@@ -350,9 +353,6 @@ export class GSDVisualizerOverlay {
350
353
  // Capture current active tab's rendered lines as snapshot
351
354
  const snapshotLines = this.renderTabContent(this.activeTab, 80);
352
355
  const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
353
- const { writeFileSync, mkdirSync } = require("node:fs");
354
- const { join } = require("node:path");
355
- const { gsdRoot } = require("./paths.js");
356
356
  const exportDir = gsdRoot(this.basePath);
357
357
  mkdirSync(exportDir, { recursive: true });
358
358
  const outPath = join(exportDir, `snapshot-${timestamp}.txt`);
@@ -11,7 +11,7 @@
11
11
 
12
12
  /** Format a millisecond duration as a compact human-readable string. */
13
13
  export function formatDuration(ms: number): string {
14
- if (ms < 1000) return `${ms}ms`;
14
+ if (ms > 0 && ms < 1000) return `${ms}ms`;
15
15
  const s = Math.floor(ms / 1000);
16
16
  if (s < 60) return `${s}s`;
17
17
  const m = Math.floor(s / 60);
@@ -54,9 +54,10 @@ export function updateWorker(id: string, status: "completed" | "failed"): void {
54
54
  if (entry) {
55
55
  entry.status = status;
56
56
  // Remove after a brief display window (5 seconds)
57
+ // unref() so the timer doesn't keep the process alive in test environments
57
58
  setTimeout(() => {
58
59
  activeWorkers.delete(id);
59
- }, 5000);
60
+ }, 5000).unref();
60
61
  }
61
62
  }
62
63