gsd-pi 2.75.0-next.9c0ec0ba1 → 2.76.0

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 (610) hide show
  1. package/README.md +100 -100
  2. package/dist/claude-cli-check.d.ts +10 -0
  3. package/dist/claude-cli-check.js +13 -3
  4. package/dist/loader.js +0 -0
  5. package/dist/onboarding.d.ts +20 -1
  6. package/dist/onboarding.js +60 -25
  7. package/dist/resources/extensions/ask-user-questions.js +6 -3
  8. package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
  9. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +44 -2
  10. package/dist/resources/extensions/gsd/auto/phases.js +2 -0
  11. package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
  12. package/dist/resources/extensions/gsd/auto-dashboard.js +37 -8
  13. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +8 -2
  14. package/dist/resources/extensions/gsd/auto-dispatch.js +87 -9
  15. package/dist/resources/extensions/gsd/auto-model-selection.js +14 -4
  16. package/dist/resources/extensions/gsd/auto-post-unit.js +7 -5
  17. package/dist/resources/extensions/gsd/auto-prompts.js +188 -44
  18. package/dist/resources/extensions/gsd/auto-recovery.js +48 -0
  19. package/dist/resources/extensions/gsd/auto-start.js +5 -3
  20. package/dist/resources/extensions/gsd/auto-worktree.js +71 -2
  21. package/dist/resources/extensions/gsd/auto.js +25 -3
  22. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
  23. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +45 -23
  24. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +128 -0
  25. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
  26. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
  27. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
  28. package/dist/resources/extensions/gsd/bootstrap/system-context.js +17 -4
  29. package/dist/resources/extensions/gsd/commands/catalog.js +15 -7
  30. package/dist/resources/extensions/gsd/commands/handlers/core.js +58 -24
  31. package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
  32. package/dist/resources/extensions/gsd/commands/handlers/onboarding.js +159 -0
  33. package/dist/resources/extensions/gsd/commands/handlers/ops.js +10 -0
  34. package/dist/resources/extensions/gsd/commands-config.js +5 -0
  35. package/dist/resources/extensions/gsd/commands-extract-learnings.js +233 -75
  36. package/dist/resources/extensions/gsd/commands-memory.js +462 -0
  37. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +39 -11
  38. package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
  39. package/dist/resources/extensions/gsd/db-writer.js +1 -0
  40. package/dist/resources/extensions/gsd/docs/preferences-reference.md +2 -2
  41. package/dist/resources/extensions/gsd/doctor-environment.js +2 -1
  42. package/dist/resources/extensions/gsd/doctor-git-checks.js +27 -3
  43. package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
  44. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -1
  45. package/dist/resources/extensions/gsd/doctor.js +7 -1
  46. package/dist/resources/extensions/gsd/error-classifier.js +5 -2
  47. package/dist/resources/extensions/gsd/escalation.js +321 -0
  48. package/dist/resources/extensions/gsd/graph.js +26 -0
  49. package/dist/resources/extensions/gsd/gsd-db.js +490 -32
  50. package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
  51. package/dist/resources/extensions/gsd/health-widget.js +7 -4
  52. package/dist/resources/extensions/gsd/init-wizard.js +86 -45
  53. package/dist/resources/extensions/gsd/markdown-renderer.js +5 -5
  54. package/dist/resources/extensions/gsd/memory-embeddings.js +219 -0
  55. package/dist/resources/extensions/gsd/memory-extractor.js +78 -27
  56. package/dist/resources/extensions/gsd/memory-ingest.js +218 -0
  57. package/dist/resources/extensions/gsd/memory-relations.js +189 -0
  58. package/dist/resources/extensions/gsd/memory-source-store.js +113 -0
  59. package/dist/resources/extensions/gsd/memory-store.js +299 -6
  60. package/dist/resources/extensions/gsd/metrics.js +1 -0
  61. package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
  62. package/dist/resources/extensions/gsd/model-router.js +12 -5
  63. package/dist/resources/extensions/gsd/native-git-bridge.js +121 -5
  64. package/dist/resources/extensions/gsd/notification-overlay.js +7 -22
  65. package/dist/resources/extensions/gsd/notification-widget.js +24 -39
  66. package/dist/resources/extensions/gsd/onboarding-state.js +133 -0
  67. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
  68. package/dist/resources/extensions/gsd/pre-execution-checks.js +98 -8
  69. package/dist/resources/extensions/gsd/preferences-models.js +1 -0
  70. package/dist/resources/extensions/gsd/preferences-types.js +2 -1
  71. package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
  72. package/dist/resources/extensions/gsd/prompts/add-tests.md +1 -0
  73. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
  74. package/dist/resources/extensions/gsd/prompts/execute-task.md +13 -1
  75. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  76. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -0
  77. package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  78. package/dist/resources/extensions/gsd/python-resolver.js +70 -0
  79. package/dist/resources/extensions/gsd/setup-catalog.js +75 -0
  80. package/dist/resources/extensions/gsd/state.js +47 -3
  81. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -1
  82. package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
  83. package/dist/resources/extensions/gsd/tools/memory-tools.js +306 -0
  84. package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
  85. package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
  86. package/dist/resources/extensions/gsd/tools/skip-slice.js +78 -0
  87. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +14 -0
  88. package/dist/resources/extensions/gsd/uok/flags.js +1 -1
  89. package/dist/resources/extensions/gsd/verification-gate.js +2 -1
  90. package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
  91. package/dist/resources/extensions/gsd/workflow-mcp.js +1 -0
  92. package/dist/resources/extensions/gsd/workflow-projections.js +17 -15
  93. package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
  94. package/dist/resources/extensions/remote-questions/manager.js +11 -1
  95. package/dist/resources/extensions/search-the-web/command-search-provider.js +4 -1
  96. package/dist/resources/extensions/search-the-web/native-search.js +13 -2
  97. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  98. package/dist/web/standalone/.next/BUILD_ID +1 -1
  99. package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
  100. package/dist/web/standalone/.next/build-manifest.json +4 -4
  101. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  102. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  103. package/dist/web/standalone/.next/required-server-files.json +4 -4
  104. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  105. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  107. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  108. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  109. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  110. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  111. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  112. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  115. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  117. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -4
  118. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  119. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  120. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  121. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  124. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  126. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  129. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  132. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  134. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  135. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  140. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  143. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  148. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  150. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  168. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  174. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  177. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  179. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  180. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  188. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  191. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  193. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  196. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  199. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  201. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  202. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  204. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  205. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  207. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  208. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  209. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  210. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  213. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  216. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  219. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  221. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  222. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  223. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  225. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  226. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  227. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  228. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  229. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  231. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  232. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  233. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  234. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  235. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  236. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  237. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  238. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  239. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  240. package/dist/web/standalone/.next/server/app/index.html +1 -1
  241. package/dist/web/standalone/.next/server/app/index.rsc +5 -5
  242. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  243. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
  244. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  245. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  246. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  247. package/dist/web/standalone/.next/server/app/page.js +2 -2
  248. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  249. package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
  250. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  251. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  252. package/dist/web/standalone/.next/server/chunks/7461.js +1 -0
  253. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  254. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  255. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  256. package/dist/web/standalone/.next/server/middleware.js +2 -2
  257. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  258. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  259. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  260. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  261. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  262. package/dist/web/standalone/.next/static/chunks/{2826.02df9631042cc18e.js → 2826.e59e8578e2e28639.js} +2 -2
  263. package/dist/web/standalone/.next/static/chunks/{2008.71ee9230ad78df21.js → 3621.fc7480022c972438.js} +2 -2
  264. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
  265. package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
  266. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
  267. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
  268. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
  269. package/dist/web/standalone/.next/static/chunks/{webpack-6c7cda3e318eedb6.js → webpack-5fc74f13a25fa1bb.js} +1 -1
  270. package/dist/web/standalone/.next/static/css/632cd626b1731d88.css +1 -0
  271. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  272. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  273. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  274. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  275. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  276. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  277. package/dist/web/standalone/server.js +1 -1
  278. package/dist/welcome-screen.js +48 -24
  279. package/package.json +1 -1
  280. package/packages/daemon/package.json +2 -2
  281. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  282. package/packages/mcp-server/dist/server.js +12 -10
  283. package/packages/mcp-server/dist/server.js.map +1 -1
  284. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
  285. package/packages/mcp-server/dist/session-manager.js +8 -1
  286. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  287. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -0
  288. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  289. package/packages/mcp-server/dist/workflow-tools.js +207 -71
  290. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  291. package/packages/mcp-server/package.json +2 -2
  292. package/packages/mcp-server/src/mcp-server.test.ts +40 -4
  293. package/packages/mcp-server/src/server.ts +12 -10
  294. package/packages/mcp-server/src/session-manager.ts +10 -3
  295. package/packages/mcp-server/src/workflow-tools.test.ts +346 -1
  296. package/packages/mcp-server/src/workflow-tools.ts +228 -75
  297. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  298. package/packages/native/package.json +1 -1
  299. package/packages/pi-agent-core/package.json +1 -1
  300. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  301. package/packages/pi-ai/dist/index.d.ts +1 -0
  302. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  303. package/packages/pi-ai/dist/index.js +1 -0
  304. package/packages/pi-ai/dist/index.js.map +1 -1
  305. package/packages/pi-ai/dist/models/generated/index.d.ts +17 -0
  306. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  307. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  308. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  309. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  310. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  311. package/packages/pi-ai/dist/models.generated.test.js +1 -0
  312. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  313. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
  314. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  315. package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -7
  316. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  317. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
  318. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
  319. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
  320. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
  321. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
  322. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  323. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +19 -0
  324. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  325. package/packages/pi-ai/dist/providers/anthropic-shared.js +25 -1
  326. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  327. package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
  328. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  329. package/packages/pi-ai/dist/providers/anthropic.js +18 -1
  330. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  331. package/packages/pi-ai/dist/providers/api-family.d.ts +27 -0
  332. package/packages/pi-ai/dist/providers/api-family.d.ts.map +1 -0
  333. package/packages/pi-ai/dist/providers/api-family.js +47 -0
  334. package/packages/pi-ai/dist/providers/api-family.js.map +1 -0
  335. package/packages/pi-ai/dist/providers/api-family.test.d.ts +2 -0
  336. package/packages/pi-ai/dist/providers/api-family.test.d.ts.map +1 -0
  337. package/packages/pi-ai/dist/providers/api-family.test.js +101 -0
  338. package/packages/pi-ai/dist/providers/api-family.test.js.map +1 -0
  339. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  340. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
  341. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  342. package/packages/pi-ai/package.json +1 -1
  343. package/packages/pi-ai/scripts/generate-models.ts +12 -0
  344. package/packages/pi-ai/src/index.ts +1 -0
  345. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  346. package/packages/pi-ai/src/models.generated.test.ts +1 -0
  347. package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
  348. package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -8
  349. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
  350. package/packages/pi-ai/src/providers/anthropic-shared.ts +30 -1
  351. package/packages/pi-ai/src/providers/anthropic.ts +19 -1
  352. package/packages/pi-ai/src/providers/api-family.test.ts +129 -0
  353. package/packages/pi-ai/src/providers/api-family.ts +57 -0
  354. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
  355. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  356. package/packages/pi-coding-agent/dist/cli/args.d.ts +6 -0
  357. package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
  358. package/packages/pi-coding-agent/dist/cli/args.js +14 -4
  359. package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
  360. package/packages/pi-coding-agent/dist/cli/args.test.d.ts +2 -0
  361. package/packages/pi-coding-agent/dist/cli/args.test.d.ts.map +1 -0
  362. package/packages/pi-coding-agent/dist/cli/args.test.js +38 -0
  363. package/packages/pi-coding-agent/dist/cli/args.test.js.map +1 -0
  364. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +7 -0
  365. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  366. package/packages/pi-coding-agent/dist/core/auth-storage.js +25 -0
  367. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  368. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +38 -0
  369. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  370. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
  371. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  372. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -0
  373. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  374. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  375. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +2 -1
  376. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  377. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  378. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
  379. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  380. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  381. package/packages/pi-coding-agent/dist/core/retry-handler.js +4 -1
  382. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  383. package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -0
  384. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  385. package/packages/pi-coding-agent/dist/core/sdk.js +33 -5
  386. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  387. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  388. package/packages/pi-coding-agent/dist/main.js +3 -0
  389. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  390. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  391. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
  392. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  393. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  394. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
  395. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  396. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
  397. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  398. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
  399. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  400. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +1 -0
  401. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  402. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +1 -0
  403. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  404. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  405. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  406. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  407. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  408. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +13 -9
  409. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  410. package/packages/pi-coding-agent/package.json +1 -1
  411. package/packages/pi-coding-agent/src/cli/args.test.ts +44 -0
  412. package/packages/pi-coding-agent/src/cli/args.ts +21 -6
  413. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +42 -0
  414. package/packages/pi-coding-agent/src/core/auth-storage.ts +25 -0
  415. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
  416. package/packages/pi-coding-agent/src/core/extensions/runner.ts +4 -1
  417. package/packages/pi-coding-agent/src/core/extensions/types.ts +2 -2
  418. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
  419. package/packages/pi-coding-agent/src/core/retry-handler.ts +4 -1
  420. package/packages/pi-coding-agent/src/core/sdk.ts +48 -5
  421. package/packages/pi-coding-agent/src/main.ts +4 -0
  422. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
  423. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
  424. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
  425. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +1 -0
  426. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +1 -0
  427. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +13 -9
  428. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  429. package/packages/pi-tui/package.json +1 -1
  430. package/packages/rpc-client/package.json +1 -1
  431. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +1 -0
  432. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  433. package/pkg/dist/modes/interactive/theme/theme-schema.js +1 -0
  434. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  435. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  436. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  437. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  438. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  439. package/pkg/dist/modes/interactive/theme/themes.js +13 -9
  440. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  441. package/pkg/package.json +1 -1
  442. package/src/resources/extensions/ask-user-questions.ts +7 -4
  443. package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
  444. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +59 -1
  445. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +66 -0
  446. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -10
  447. package/src/resources/extensions/gsd/auto/phases.ts +3 -0
  448. package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
  449. package/src/resources/extensions/gsd/auto-dashboard.ts +46 -5
  450. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
  451. package/src/resources/extensions/gsd/auto-dispatch.ts +96 -4
  452. package/src/resources/extensions/gsd/auto-model-selection.ts +17 -4
  453. package/src/resources/extensions/gsd/auto-post-unit.ts +7 -5
  454. package/src/resources/extensions/gsd/auto-prompts.ts +225 -45
  455. package/src/resources/extensions/gsd/auto-recovery.ts +47 -0
  456. package/src/resources/extensions/gsd/auto-start.ts +8 -6
  457. package/src/resources/extensions/gsd/auto-worktree.ts +81 -1
  458. package/src/resources/extensions/gsd/auto.ts +27 -2
  459. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
  460. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +46 -24
  461. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +158 -0
  462. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
  463. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
  464. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
  465. package/src/resources/extensions/gsd/bootstrap/system-context.ts +20 -4
  466. package/src/resources/extensions/gsd/commands/catalog.ts +15 -7
  467. package/src/resources/extensions/gsd/commands/handlers/core.ts +63 -27
  468. package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
  469. package/src/resources/extensions/gsd/commands/handlers/onboarding.ts +196 -0
  470. package/src/resources/extensions/gsd/commands/handlers/ops.ts +10 -0
  471. package/src/resources/extensions/gsd/commands-config.ts +10 -0
  472. package/src/resources/extensions/gsd/commands-extract-learnings.ts +295 -76
  473. package/src/resources/extensions/gsd/commands-memory.ts +551 -0
  474. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +48 -11
  475. package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
  476. package/src/resources/extensions/gsd/db-writer.ts +3 -0
  477. package/src/resources/extensions/gsd/docs/preferences-reference.md +2 -2
  478. package/src/resources/extensions/gsd/doctor-environment.ts +2 -1
  479. package/src/resources/extensions/gsd/doctor-git-checks.ts +28 -3
  480. package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
  481. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -1
  482. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  483. package/src/resources/extensions/gsd/doctor.ts +7 -1
  484. package/src/resources/extensions/gsd/error-classifier.ts +5 -2
  485. package/src/resources/extensions/gsd/escalation.ts +367 -0
  486. package/src/resources/extensions/gsd/graph.ts +33 -0
  487. package/src/resources/extensions/gsd/gsd-db.ts +578 -32
  488. package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
  489. package/src/resources/extensions/gsd/health-widget.ts +7 -3
  490. package/src/resources/extensions/gsd/init-wizard.ts +87 -54
  491. package/src/resources/extensions/gsd/markdown-renderer.ts +5 -5
  492. package/src/resources/extensions/gsd/memory-embeddings.ts +235 -0
  493. package/src/resources/extensions/gsd/memory-extractor.ts +100 -34
  494. package/src/resources/extensions/gsd/memory-ingest.ts +286 -0
  495. package/src/resources/extensions/gsd/memory-relations.ts +240 -0
  496. package/src/resources/extensions/gsd/memory-source-store.ts +138 -0
  497. package/src/resources/extensions/gsd/memory-store.ts +351 -7
  498. package/src/resources/extensions/gsd/metrics.ts +1 -0
  499. package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
  500. package/src/resources/extensions/gsd/model-router.ts +21 -5
  501. package/src/resources/extensions/gsd/native-git-bridge.ts +118 -6
  502. package/src/resources/extensions/gsd/notification-overlay.ts +9 -19
  503. package/src/resources/extensions/gsd/notification-widget.ts +25 -43
  504. package/src/resources/extensions/gsd/onboarding-state.ts +146 -0
  505. package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
  506. package/src/resources/extensions/gsd/pre-execution-checks.ts +100 -12
  507. package/src/resources/extensions/gsd/preferences-models.ts +1 -0
  508. package/src/resources/extensions/gsd/preferences-types.ts +9 -1
  509. package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
  510. package/src/resources/extensions/gsd/prompts/add-tests.md +1 -0
  511. package/src/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
  512. package/src/resources/extensions/gsd/prompts/execute-task.md +13 -1
  513. package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  514. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -0
  515. package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  516. package/src/resources/extensions/gsd/python-resolver.ts +76 -0
  517. package/src/resources/extensions/gsd/setup-catalog.ts +105 -0
  518. package/src/resources/extensions/gsd/state.ts +50 -2
  519. package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -1
  520. package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
  521. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +49 -0
  522. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +63 -0
  523. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +12 -0
  524. package/src/resources/extensions/gsd/tests/auto-prompts-fallback.test.ts +35 -0
  525. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
  526. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
  527. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +333 -21
  528. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +6 -8
  529. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  530. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
  531. package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
  532. package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
  533. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
  534. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
  535. package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
  536. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +190 -0
  537. package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +79 -0
  538. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
  539. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
  540. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +32 -1
  541. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +72 -5
  542. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +2 -2
  543. package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
  544. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  545. package/src/resources/extensions/gsd/tests/memory-embeddings.test.ts +213 -0
  546. package/src/resources/extensions/gsd/tests/memory-ingest.test.ts +153 -0
  547. package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +107 -0
  548. package/src/resources/extensions/gsd/tests/memory-relations.test.ts +175 -0
  549. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  550. package/src/resources/extensions/gsd/tests/memory-tools.test.ts +295 -0
  551. package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
  552. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
  553. package/src/resources/extensions/gsd/tests/model-router.test.ts +51 -1
  554. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
  555. package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +56 -37
  556. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
  557. package/src/resources/extensions/gsd/tests/onboarding-state.test.ts +105 -0
  558. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +114 -0
  559. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +4 -5
  560. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
  561. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
  562. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +317 -1
  563. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
  564. package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +11 -2
  565. package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
  566. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +159 -8
  567. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
  568. package/src/resources/extensions/gsd/tests/prompts-no-gitignored-test-refs.test.ts +56 -0
  569. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +29 -0
  570. package/src/resources/extensions/gsd/tests/python-resolver.test.ts +131 -0
  571. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
  572. package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
  573. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
  574. package/src/resources/extensions/gsd/tests/skip-slice-cascades-tasks.test.ts +125 -0
  575. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
  576. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +54 -0
  577. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
  578. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
  579. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
  580. package/src/resources/extensions/gsd/tests/uok-flags.test.ts +1 -1
  581. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +35 -0
  582. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
  583. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +97 -0
  584. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
  585. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
  586. package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
  587. package/src/resources/extensions/gsd/tools/memory-tools.ts +380 -0
  588. package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
  589. package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
  590. package/src/resources/extensions/gsd/tools/skip-slice.ts +133 -0
  591. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +14 -0
  592. package/src/resources/extensions/gsd/types.ts +62 -0
  593. package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
  594. package/src/resources/extensions/gsd/uok/flags.ts +1 -1
  595. package/src/resources/extensions/gsd/verification-gate.ts +2 -1
  596. package/src/resources/extensions/gsd/workflow-logger.ts +3 -1
  597. package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
  598. package/src/resources/extensions/gsd/workflow-mcp.ts +1 -0
  599. package/src/resources/extensions/gsd/workflow-projections.ts +18 -16
  600. package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
  601. package/src/resources/extensions/remote-questions/manager.ts +13 -1
  602. package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
  603. package/src/resources/extensions/search-the-web/command-search-provider.ts +4 -1
  604. package/src/resources/extensions/search-the-web/native-search.ts +13 -3
  605. package/dist/web/standalone/.next/static/chunks/app/page-f1e30ab6bb269149.js +0 -1
  606. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
  607. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
  608. package/dist/web/standalone/.next/static/css/3e9cdadb4d23b8a4.css +0 -1
  609. /package/dist/web/standalone/.next/static/{JncJywFxCugMuXGs56m-b → ssX7BLv3Dw9Fb4CtrCGeR}/_buildManifest.js +0 -0
  610. /package/dist/web/standalone/.next/static/{JncJywFxCugMuXGs56m-b → ssX7BLv3Dw9Fb4CtrCGeR}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -210,8 +210,8 @@ GSD v2 solves all of these because it's not a prompt framework anymore — it's
210
210
  | Roadmap reassessment | Manual | Automatic after each slice completes |
211
211
  | Skill discovery | None | Auto-detect and install relevant skills during research |
212
212
  | Verification | Manual | Automated verification commands with auto-fix retries |
213
- | Reporting | None | Self-contained HTML reports with metrics and dep graphs |
214
- | Parallel execution | None | Multi-worker parallel milestone orchestration |
213
+ | Reporting | None | Self-contained HTML reports with metrics and dep graphs |
214
+ | Parallel execution | None | Multi-worker parallel milestone orchestration |
215
215
 
216
216
  ### Migrating from v1
217
217
 
@@ -407,47 +407,47 @@ On first run, GSD launches a branded setup wizard that walks you through LLM pro
407
407
 
408
408
  ### Commands
409
409
 
410
- | Command | What it does |
411
- | ----------------------- | --------------------------------------------------------------- |
412
- | `/gsd` | Step mode — executes one unit at a time, pauses between each |
413
- | `/gsd next` | Explicit step mode (same as bare `/gsd`) |
414
- | `/gsd auto` | Autonomous mode — researches, plans, executes, commits, repeats |
415
- | `/gsd quick` | Execute a quick task with GSD guarantees, skip planning overhead |
416
- | `/gsd stop` | Stop auto mode gracefully |
417
- | `/gsd steer` | Hard-steer plan documents during execution |
418
- | `/gsd discuss` | Discuss architecture and decisions (works alongside auto mode) |
419
- | `/gsd rethink` | Conversational project reorganization |
420
- | `/gsd mcp` | MCP server status and connectivity |
421
- | `/gsd status` | Progress dashboard |
422
- | `/gsd queue` | Queue future milestones (safe during auto mode) |
423
- | `/gsd prefs` | Model selection, timeouts, budget ceiling |
424
- | `/gsd migrate` | Migrate a v1 `.planning` directory to `.gsd` format |
425
- | `/gsd help` | Categorized command reference for all GSD subcommands |
426
- | `/gsd mode` | Switch workflow mode (solo/team) with coordinated defaults |
427
- | `/gsd workflow` | Unified workflow plugins — list, run `<name>`, install, info, validate |
428
- | `/gsd start <template>` | Launch a bundled or custom workflow template (bugfix, release, etc.) |
429
- | `/gsd forensics` | Full-access GSD debugger for auto-mode failure investigation |
430
- | `/gsd cleanup` | Archive phase directories from completed milestones |
410
+ | Command | What it does |
411
+ | ----------------------- | ----------------------------------------------------------------------------- |
412
+ | `/gsd` | Step mode — executes one unit at a time, pauses between each |
413
+ | `/gsd next` | Explicit step mode (same as bare `/gsd`) |
414
+ | `/gsd auto` | Autonomous mode — researches, plans, executes, commits, repeats |
415
+ | `/gsd quick` | Execute a quick task with GSD guarantees, skip planning overhead |
416
+ | `/gsd stop` | Stop auto mode gracefully |
417
+ | `/gsd steer` | Hard-steer plan documents during execution |
418
+ | `/gsd discuss` | Discuss architecture and decisions (works alongside auto mode) |
419
+ | `/gsd rethink` | Conversational project reorganization |
420
+ | `/gsd mcp` | MCP server status and connectivity |
421
+ | `/gsd status` | Progress dashboard |
422
+ | `/gsd queue` | Queue future milestones (safe during auto mode) |
423
+ | `/gsd prefs` | Model selection, timeouts, budget ceiling |
424
+ | `/gsd migrate` | Migrate a v1 `.planning` directory to `.gsd` format |
425
+ | `/gsd help` | Categorized command reference for all GSD subcommands |
426
+ | `/gsd mode` | Switch workflow mode (solo/team) with coordinated defaults |
427
+ | `/gsd workflow` | Unified workflow plugins — list, run `<name>`, install, info, validate |
428
+ | `/gsd start <template>` | Launch a bundled or custom workflow template (bugfix, release, etc.) |
429
+ | `/gsd forensics` | Full-access GSD debugger for auto-mode failure investigation |
430
+ | `/gsd cleanup` | Archive phase directories from completed milestones |
431
431
  | `/gsd doctor` | Runtime health checks — issues surface across widget, visualizer, and reports |
432
- | `/gsd keys` | API key manager — list, add, remove, test, rotate, doctor |
433
- | `/gsd logs` | Browse activity, debug, and metrics logs |
434
- | `/gsd export --html` | Generate HTML report for current or completed milestone |
435
- | `/worktree` (`/wt`) | Git worktree lifecycle — create, switch, merge, remove |
436
- | `/voice` | Toggle real-time speech-to-text (macOS, Linux) |
437
- | `/exit` | Graceful shutdown — saves session state before exiting |
438
- | `/kill` | Kill GSD process immediately |
439
- | `/clear` | Start a new session (alias for `/new`) |
440
- | `Ctrl+Alt+G` | Toggle dashboard overlay |
441
- | `Ctrl+Alt+V` | Toggle voice transcription |
442
- | `Ctrl+Alt+B` | Show background shell processes |
443
- | `Alt+V` | Paste clipboard image (macOS) |
444
- | `gsd config` | Re-run the setup wizard (LLM provider + tool keys) |
445
- | `gsd update` | Update GSD to the latest version |
446
- | `gsd headless [cmd]` | Run `/gsd` commands without TUI (CI, cron, scripts) |
447
- | `gsd headless query` | Instant JSON snapshot — state, next dispatch, costs (no LLM) |
448
- | `gsd --continue` (`-c`) | Resume the most recent session for the current directory |
449
- | `gsd --worktree` (`-w`) | Launch an isolated worktree session for the active milestone |
450
- | `gsd sessions` | Interactive session picker — browse and resume any saved session |
432
+ | `/gsd keys` | API key manager — list, add, remove, test, rotate, doctor |
433
+ | `/gsd logs` | Browse activity, debug, and metrics logs |
434
+ | `/gsd export --html` | Generate HTML report for current or completed milestone |
435
+ | `/worktree` (`/wt`) | Git worktree lifecycle — create, switch, merge, remove |
436
+ | `/voice` | Toggle real-time speech-to-text (macOS, Linux) |
437
+ | `/exit` | Graceful shutdown — saves session state before exiting |
438
+ | `/kill` | Kill GSD process immediately |
439
+ | `/clear` | Start a new session (alias for `/new`) |
440
+ | `Ctrl+Alt+G` | Toggle dashboard overlay |
441
+ | `Ctrl+Alt+V` | Toggle voice transcription |
442
+ | `Ctrl+Alt+B` | Show background shell processes |
443
+ | `Alt+V` | Paste clipboard image (macOS) |
444
+ | `gsd config` | Re-run the setup wizard (LLM provider + tool keys) |
445
+ | `gsd update` | Update GSD to the latest version |
446
+ | `gsd headless [cmd]` | Run `/gsd` commands without TUI (CI, cron, scripts) |
447
+ | `gsd headless query` | Instant JSON snapshot — state, next dispatch, costs (no LLM) |
448
+ | `gsd --continue` (`-c`) | Resume the most recent session for the current directory |
449
+ | `gsd --worktree` (`-w`) | Launch an isolated worktree session for the active milestone |
450
+ | `gsd sessions` | Interactive session picker — browse and resume any saved session |
451
451
 
452
452
  ---
453
453
 
@@ -556,24 +556,24 @@ auto_report: true
556
556
 
557
557
  **Key settings:**
558
558
 
559
- | Setting | What it controls |
560
- | ---------------------- | ----------------------------------------------------------------------------------------------------- |
561
- | `models.*` | Per-phase model selection — string for a single model, or `{model, fallbacks}` for automatic failover |
562
- | `skill_discovery` | `auto` / `suggest` / `off` — how GSD finds and applies skills |
563
- | `auto_supervisor.*` | Timeout thresholds for auto mode supervision |
564
- | `budget_ceiling` | USD ceiling — auto mode pauses when reached |
565
- | `uat_dispatch` | Enable automatic UAT runs after slice completion |
566
- | `always_use_skills` | Skills to always load when relevant |
567
- | `skill_rules` | Situational rules for skill routing |
568
- | `skill_staleness_days` | Skills unused for N days get deprioritized (default: 60, 0 = disabled) |
569
- | `unique_milestone_ids` | Uses unique milestone names to avoid clashes when working in teams of people |
570
- | `git.isolation` | `none` (default), `worktree`, or `branch` — enable worktree or branch isolation for milestone work |
571
- | `git.manage_gitignore` | Set `false` to prevent GSD from modifying `.gitignore` |
572
- | `verification_commands`| Array of shell commands to run after task execution (e.g., `["npm run lint", "npm run test"]`) |
573
- | `verification_auto_fix`| Auto-retry on verification failures (default: true) |
574
- | `verification_max_retries` | Max retries for verification failures (default: 2) |
575
- | `phases.require_slice_discussion` | Pause auto-mode before each slice for human discussion review |
576
- | `auto_report` | Auto-generate HTML reports after milestone completion (default: true) |
559
+ | Setting | What it controls |
560
+ | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
561
+ | `models.*` | Per-phase model selection — string for a single model, or `{model, fallbacks}` for automatic failover |
562
+ | `skill_discovery` | `auto` / `suggest` / `off` — how GSD finds and applies skills |
563
+ | `auto_supervisor.*` | Timeout thresholds for auto mode supervision |
564
+ | `budget_ceiling` | USD ceiling — auto mode pauses when reached |
565
+ | `uat_dispatch` | Enable automatic UAT runs after slice completion |
566
+ | `always_use_skills` | Skills to always load when relevant |
567
+ | `skill_rules` | Situational rules for skill routing |
568
+ | `skill_staleness_days` | Skills unused for N days get deprioritized (default: 60, 0 = disabled) |
569
+ | `unique_milestone_ids` | Uses unique milestone names to avoid clashes when working in teams of people |
570
+ | `git.isolation` | `none` (default), `worktree`, or `branch` — enable worktree or branch isolation for milestone work |
571
+ | `git.manage_gitignore` | Set `false` to prevent GSD from modifying `.gitignore` |
572
+ | `verification_commands` | Array of shell commands to run after task execution (e.g., `["npm run lint", "npm run test"]`) |
573
+ | `verification_auto_fix` | Auto-retry on verification failures (default: true) |
574
+ | `verification_max_retries` | Max retries for verification failures (default: 2) |
575
+ | `phases.require_slice_discussion` | Pause auto-mode before each slice for human discussion review |
576
+ | `auto_report` | Auto-generate HTML reports after milestone completion (default: true) |
577
577
 
578
578
  ### Agent Instructions
579
579
 
@@ -590,14 +590,14 @@ Start GSD with `gsd --debug` to enable structured JSONL diagnostic logging. Debu
590
590
  GSD includes a coordinated token optimization system that reduces usage by 40-60% on cost-sensitive workloads. Set a single preference to coordinate model selection, phase skipping, and context compression:
591
591
 
592
592
  ```yaml
593
- token_profile: budget # or balanced (default), quality
593
+ token_profile: budget # or balanced (default), quality
594
594
  ```
595
595
 
596
- | Profile | Savings | What It Does |
597
- |---------|---------|-------------|
598
- | `budget` | 40-60% | Cheap models, skip research/reassess, minimal context inlining |
599
- | `balanced` | 10-20% | Default models, skip slice research, standard context |
600
- | `quality` | 0% | All phases, all context, full model power |
596
+ | Profile | Savings | What It Does |
597
+ | ---------- | ------- | -------------------------------------------------------------- |
598
+ | `budget` | 40-60% | Cheap models, skip research/reassess, minimal context inlining |
599
+ | `balanced` | 10-20% | Default models, skip slice research, standard context |
600
+ | `quality` | 0% | All phases, all context, full model power |
601
601
 
602
602
  **Complexity-based routing** automatically classifies tasks as simple/standard/complex and routes to appropriate models. Simple docs tasks get Haiku; complex architectural work gets Opus. The classification is heuristic (sub-millisecond, no LLM calls) and learns from outcomes via a persistent routing history.
603
603
 
@@ -609,44 +609,44 @@ See the full [Token Optimization Guide](./docs/user-docs/token-optimization.md)
609
609
 
610
610
  GSD ships with 24 extensions, all loaded automatically:
611
611
 
612
- | Extension | What it provides |
613
- | ---------------------- | ---------------------------------------------------------------------------------------------------------------------- |
614
- | **GSD** | Core workflow engine, auto mode, commands, dashboard |
612
+ | Extension | What it provides |
613
+ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
614
+ | **GSD** | Core workflow engine, auto mode, commands, dashboard |
615
615
  | **Browser Tools** | Playwright-based browser with form intelligence, intent-ranked element finding, semantic actions, PDF export, session state persistence, network mocking, device emulation, structured extraction, visual diffing, region zoom, test code generation, and prompt injection detection |
616
- | **Search the Web** | Brave Search, Tavily, or Jina page extraction |
617
- | **Google Search** | Gemini-powered web search with AI-synthesized answers |
618
- | **Context7** | Up-to-date library/framework documentation |
619
- | **Background Shell** | Long-running process management with readiness detection |
620
- | **Async Jobs** | Background bash commands with job tracking and cancellation |
621
- | **Subagent** | Delegated tasks with isolated context windows |
622
- | **GitHub** | Full-suite GitHub issues and PR management via `/gh` command |
623
- | **Mac Tools** | macOS native app automation via Accessibility APIs |
624
- | **MCP Client** | Native MCP server integration via @modelcontextprotocol/sdk |
625
- | **Voice** | Real-time speech-to-text transcription (macOS, Linux — Ubuntu 22.04+) |
626
- | **Slash Commands** | Custom command creation |
627
- | **Ask User Questions** | Structured user input with single/multi-select |
628
- | **Secure Env Collect** | Masked secret collection without manual .env editing |
629
- | **Remote Questions** | Route decisions to Slack/Discord when human input is needed in headless/CI mode |
630
- | **Universal Config** | Discover and import MCP servers and rules from other AI coding tools |
631
- | **AWS Auth** | Automatic Bedrock credential refresh for AWS-hosted models |
632
- | **Ollama** | First-class local LLM support via Ollama |
633
- | **Claude Code CLI** | External provider extension for Claude Code CLI |
634
- | **cmux** | Claude multiplexer integration — desktop notifications, sidebar metadata, visual subagent splits |
635
- | **GitHub Sync** | Auto-sync milestones to GitHub Issues, PRs, and Milestones |
636
- | **LSP** | Language Server Protocol — diagnostics, definitions, references, hover, rename |
637
- | **TTSR** | Tool-triggered system rules — conditional context injection based on tool usage |
616
+ | **Search the Web** | Brave Search, Tavily, or Jina page extraction |
617
+ | **Google Search** | Gemini-powered web search with AI-synthesized answers |
618
+ | **Context7** | Up-to-date library/framework documentation |
619
+ | **Background Shell** | Long-running process management with readiness detection |
620
+ | **Async Jobs** | Background bash commands with job tracking and cancellation |
621
+ | **Subagent** | Delegated tasks with isolated context windows |
622
+ | **GitHub** | Full-suite GitHub issues and PR management via `/gh` command |
623
+ | **Mac Tools** | macOS native app automation via Accessibility APIs |
624
+ | **MCP Client** | Native MCP server integration via @modelcontextprotocol/sdk |
625
+ | **Voice** | Real-time speech-to-text transcription (macOS, Linux — Ubuntu 22.04+) |
626
+ | **Slash Commands** | Custom command creation |
627
+ | **Ask User Questions** | Structured user input with single/multi-select |
628
+ | **Secure Env Collect** | Masked secret collection without manual .env editing |
629
+ | **Remote Questions** | Route decisions to Slack/Discord when human input is needed in headless/CI mode |
630
+ | **Universal Config** | Discover and import MCP servers and rules from other AI coding tools |
631
+ | **AWS Auth** | Automatic Bedrock credential refresh for AWS-hosted models |
632
+ | **Ollama** | First-class local LLM support via Ollama |
633
+ | **Claude Code CLI** | External provider extension for Claude Code CLI |
634
+ | **cmux** | Claude multiplexer integration — desktop notifications, sidebar metadata, visual subagent splits |
635
+ | **GitHub Sync** | Auto-sync milestones to GitHub Issues, PRs, and Milestones |
636
+ | **LSP** | Language Server Protocol — diagnostics, definitions, references, hover, rename |
637
+ | **TTSR** | Tool-triggered system rules — conditional context injection based on tool usage |
638
638
 
639
639
  ### Bundled Agents
640
640
 
641
641
  Five specialized subagents for delegated work:
642
642
 
643
- | Agent | Role |
644
- | ------------------- | ------------------------------------------------------------ |
645
- | **Scout** | Fast codebase recon — returns compressed context for handoff |
646
- | **Researcher** | Web research — finds and synthesizes current information |
647
- | **Worker** | General-purpose execution in an isolated context window |
648
- | **JavaScript Pro** | JavaScript-specialized execution and debugging |
649
- | **TypeScript Pro** | TypeScript-specialized execution and debugging |
643
+ | Agent | Role |
644
+ | ------------------ | ------------------------------------------------------------ |
645
+ | **Scout** | Fast codebase recon — returns compressed context for handoff |
646
+ | **Researcher** | Web research — finds and synthesizes current information |
647
+ | **Worker** | General-purpose execution in an isolated context window |
648
+ | **JavaScript Pro** | JavaScript-specialized execution and debugging |
649
+ | **TypeScript Pro** | TypeScript-specialized execution and debugging |
650
650
 
651
651
  ---
652
652
 
@@ -806,8 +806,8 @@ Use expensive models where quality matters (planning, complex execution) and che
806
806
 
807
807
  ## Ecosystem
808
808
 
809
- | Project | Description |
810
- | ------- | ----------- |
809
+ | Project | Description |
810
+ | --------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
811
811
  | [GSD2 Config Utility](https://github.com/jeremymcs/gsd2-config) | Standalone configuration tool for managing GSD preferences, providers, and API keys |
812
812
 
813
813
  ---
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Platform-correct binary name for the Claude Code CLI.
3
+ *
4
+ * On Windows, npm-global binaries are installed as `.cmd` shims and
5
+ * `execFileSync` does not auto-resolve the extension — calling bare
6
+ * `claude` would fail with ENOENT even when the CLI is installed and
7
+ * authenticated. Mirrors the `NPM_COMMAND` pattern in
8
+ * `src/resources/extensions/gsd/pre-execution-checks.ts`.
9
+ */
10
+ export declare const CLAUDE_COMMAND: string;
1
11
  /**
2
12
  * Check if the `claude` binary is installed (regardless of auth state).
3
13
  */
@@ -2,12 +2,22 @@
2
2
  // Lightweight check used at onboarding time (before extensions load).
3
3
  // The full readiness check with caching lives in the claude-code-cli extension.
4
4
  import { execFileSync } from 'node:child_process';
5
+ /**
6
+ * Platform-correct binary name for the Claude Code CLI.
7
+ *
8
+ * On Windows, npm-global binaries are installed as `.cmd` shims and
9
+ * `execFileSync` does not auto-resolve the extension — calling bare
10
+ * `claude` would fail with ENOENT even when the CLI is installed and
11
+ * authenticated. Mirrors the `NPM_COMMAND` pattern in
12
+ * `src/resources/extensions/gsd/pre-execution-checks.ts`.
13
+ */
14
+ export const CLAUDE_COMMAND = process.platform === 'win32' ? 'claude.cmd' : 'claude';
5
15
  /**
6
16
  * Check if the `claude` binary is installed (regardless of auth state).
7
17
  */
8
18
  export function isClaudeBinaryInstalled() {
9
19
  try {
10
- execFileSync('claude', ['--version'], { timeout: 5_000, stdio: 'pipe' });
20
+ execFileSync(CLAUDE_COMMAND, ['--version'], { timeout: 5_000, stdio: 'pipe' });
11
21
  return true;
12
22
  }
13
23
  catch {
@@ -19,13 +29,13 @@ export function isClaudeBinaryInstalled() {
19
29
  */
20
30
  export function isClaudeCliReady() {
21
31
  try {
22
- execFileSync('claude', ['--version'], { timeout: 5_000, stdio: 'pipe' });
32
+ execFileSync(CLAUDE_COMMAND, ['--version'], { timeout: 5_000, stdio: 'pipe' });
23
33
  }
24
34
  catch {
25
35
  return false;
26
36
  }
27
37
  try {
28
- const output = execFileSync('claude', ['auth', 'status'], { timeout: 5_000, stdio: 'pipe' })
38
+ const output = execFileSync(CLAUDE_COMMAND, ['auth', 'status'], { timeout: 5_000, stdio: 'pipe' })
29
39
  .toString()
30
40
  .toLowerCase();
31
41
  return !(/not logged in|no credentials|unauthenticated|not authenticated/i.test(output));
package/dist/loader.js CHANGED
File without changes
@@ -10,6 +10,20 @@
10
10
  * All steps are skippable. All errors are recoverable. Never crashes boot.
11
11
  */
12
12
  import type { AuthStorage } from '@gsd/pi-coding-agent';
13
+ type ClackModule = typeof import('@clack/prompts');
14
+ type PicoModule = {
15
+ cyan: (s: string) => string;
16
+ green: (s: string) => string;
17
+ yellow: (s: string) => string;
18
+ dim: (s: string) => string;
19
+ bold: (s: string) => string;
20
+ red: (s: string) => string;
21
+ reset: (s: string) => string;
22
+ };
23
+ interface RunOnboardingOptions {
24
+ /** Show logo + intro banner. Disable when onboarding is launched inside an active TUI session. */
25
+ showIntro?: boolean;
26
+ }
13
27
  /**
14
28
  * Determine if the onboarding wizard should run.
15
29
  *
@@ -36,4 +50,9 @@ export declare function shouldRunOnboarding(authStorage: AuthStorage, settingsDe
36
50
  * All steps are skippable. All errors are recoverable.
37
51
  * Writes status to stderr during execution.
38
52
  */
39
- export declare function runOnboarding(authStorage: AuthStorage): Promise<void>;
53
+ export declare function runOnboarding(authStorage: AuthStorage, opts?: RunOnboardingOptions): Promise<void>;
54
+ export declare function runLlmStep(p: ClackModule, pc: PicoModule, authStorage: AuthStorage): Promise<boolean>;
55
+ export declare function runWebSearchStep(p: ClackModule, pc: PicoModule, authStorage: AuthStorage, isAnthropicAuth: boolean): Promise<string | null>;
56
+ export declare function runToolKeysStep(p: ClackModule, pc: PicoModule, authStorage: AuthStorage): Promise<number>;
57
+ export declare function runRemoteQuestionsStep(p: ClackModule, pc: PicoModule, authStorage: AuthStorage): Promise<string | null>;
58
+ export {};
@@ -15,6 +15,8 @@ import { dirname, join } from 'node:path';
15
15
  import { renderLogo } from './logo.js';
16
16
  import { agentDir } from './app-paths.js';
17
17
  import { isClaudeCliReady } from './claude-cli-check.js';
18
+ import { markOnboardingComplete, markStepCompleted, markStepSkipped, isOnboardingComplete, } from './resources/extensions/gsd/onboarding-state.js';
19
+ import { getLlmProviderIds } from './resources/extensions/gsd/setup-catalog.js';
18
20
  // ─── Constants ────────────────────────────────────────────────────────────────
19
21
  const TOOL_KEYS = [
20
22
  {
@@ -36,25 +38,17 @@ const TOOL_KEYS = [
36
38
  hint: 'voice transcription — free at console.groq.com',
37
39
  },
38
40
  ];
39
- /** Known LLM provider IDs that, if authed, mean the user doesn't need onboarding */
40
- const LLM_PROVIDER_IDS = [
41
- 'anthropic',
41
+ /**
42
+ * Known LLM provider IDs that, if authed, mean the user doesn't need onboarding.
43
+ * Sourced from the shared setup-catalog so adding a provider lands in one place.
44
+ * 'anthropic-vertex' and 'ollama' aren't in PROVIDER_REGISTRY but are still
45
+ * treated as "authed = no onboarding needed" for back-compat.
46
+ */
47
+ const LLM_PROVIDER_IDS = Array.from(new Set([
48
+ ...getLlmProviderIds(),
42
49
  'anthropic-vertex',
43
- 'claude-code',
44
- 'openai',
45
- 'github-copilot',
46
- 'openai-codex',
47
- 'google-gemini-cli',
48
- 'google-antigravity',
49
- 'google',
50
- 'groq',
51
- 'xai',
52
- 'openrouter',
53
- 'mistral',
54
50
  'ollama',
55
- 'ollama-cloud',
56
- 'custom-openai',
57
- ];
51
+ ]));
58
52
  /** API key prefix validation — loose checks to catch obvious mistakes */
59
53
  const API_KEY_PREFIXES = {
60
54
  anthropic: ['sk-ant-'],
@@ -178,6 +172,10 @@ async function runStep(p, warnLabel, fn, opts = {}) {
178
172
  export function shouldRunOnboarding(authStorage, settingsDefaultProvider) {
179
173
  if (!process.stdin.isTTY)
180
174
  return false;
175
+ // Explicit completion record wins — user has already finished onboarding (and
176
+ // our flowVersion hasn't bumped since).
177
+ if (isOnboardingComplete())
178
+ return false;
181
179
  if (settingsDefaultProvider)
182
180
  return false;
183
181
  // Check if any LLM provider has credentials
@@ -196,7 +194,7 @@ export function shouldRunOnboarding(authStorage, settingsDefaultProvider) {
196
194
  * All steps are skippable. All errors are recoverable.
197
195
  * Writes status to stderr during execution.
198
196
  */
199
- export async function runOnboarding(authStorage) {
197
+ export async function runOnboarding(authStorage, opts = {}) {
200
198
  let p;
201
199
  let pc;
202
200
  try {
@@ -209,31 +207,62 @@ export async function runOnboarding(authStorage) {
209
207
  return;
210
208
  }
211
209
  // ── Intro ─────────────────────────────────────────────────────────────────
212
- process.stderr.write(renderLogo(pc.cyan));
213
- p.intro(pc.bold('Welcome to GSD — let\'s get you set up'));
210
+ if (opts.showIntro !== false) {
211
+ process.stderr.write(renderLogo(pc.cyan));
212
+ p.intro(pc.bold('Welcome to GSD — let\'s get you set up'));
213
+ }
214
+ const completedSteps = [];
214
215
  // ── LLM Provider Selection ────────────────────────────────────────────────
215
216
  const llmResult = await runStep(p, 'LLM setup failed', () => runLlmStep(p, pc, authStorage), {
216
- cancelMessage: 'Setup cancelled — you can run /login inside GSD later.',
217
+ cancelMessage: 'Setup cancelled — you can run /gsd onboarding --resume later.',
217
218
  errorInfo: 'You can configure your LLM provider later with /login inside GSD.',
218
219
  });
219
220
  if (llmResult === STEP_CANCELLED)
220
221
  return;
221
222
  const llmConfigured = llmResult ?? false;
223
+ if (llmConfigured) {
224
+ markStepCompleted('llm');
225
+ completedSteps.push('llm');
226
+ }
227
+ else {
228
+ markStepSkipped('llm');
229
+ }
222
230
  // ── Web Search Provider ──────────────────────────────────────────────────
223
231
  const searchResult = await runStep(p, 'Web search setup failed', () => runWebSearchStep(p, pc, authStorage, llmConfigured));
224
232
  if (searchResult === STEP_CANCELLED)
225
233
  return;
226
234
  const searchConfigured = searchResult;
235
+ if (searchConfigured) {
236
+ markStepCompleted('search');
237
+ completedSteps.push('search');
238
+ }
239
+ else {
240
+ markStepSkipped('search');
241
+ }
227
242
  // ── Remote Questions ─────────────────────────────────────────────────────
228
243
  const remoteResult = await runStep(p, 'Remote questions setup failed', () => runRemoteQuestionsStep(p, pc, authStorage));
229
244
  if (remoteResult === STEP_CANCELLED)
230
245
  return;
231
246
  const remoteConfigured = remoteResult;
247
+ if (remoteConfigured) {
248
+ markStepCompleted('remote');
249
+ completedSteps.push('remote');
250
+ }
251
+ else {
252
+ markStepSkipped('remote');
253
+ }
232
254
  // ── Tool API Keys ─────────────────────────────────────────────────────────
233
255
  const toolResult = await runStep(p, 'Tool key setup failed', () => runToolKeysStep(p, pc, authStorage));
234
256
  if (toolResult === STEP_CANCELLED)
235
257
  return;
236
258
  const toolKeyCount = toolResult ?? 0;
259
+ if (toolKeyCount > 0) {
260
+ markStepCompleted('tool-keys');
261
+ completedSteps.push('tool-keys');
262
+ }
263
+ else {
264
+ markStepSkipped('tool-keys');
265
+ }
237
266
  // ── Summary ───────────────────────────────────────────────────────────────
238
267
  const summaryLines = [];
239
268
  if (llmConfigured) {
@@ -268,11 +297,17 @@ export async function runOnboarding(authStorage) {
268
297
  else {
269
298
  summaryLines.push(`${pc.dim('↷')} Tool keys: none configured`);
270
299
  }
300
+ // Persist completion record so re-entry, web boot probe, and shouldRunOnboarding
301
+ // all agree the wizard finished. Required steps drive the "complete" semantics
302
+ // in onboarding-state.ts; here we mark wizard-level completion regardless.
303
+ markOnboardingComplete(completedSteps);
304
+ summaryLines.push('');
305
+ summaryLines.push(`${pc.dim('Tip:')} re-run anytime with ${pc.cyan('/gsd onboarding')}`);
271
306
  p.note(summaryLines.join('\n'), 'Setup complete');
272
307
  p.outro(pc.dim('Launching GSD...'));
273
308
  }
274
309
  // ─── LLM Authentication Step ──────────────────────────────────────────────────
275
- async function runLlmStep(p, pc, authStorage) {
310
+ export async function runLlmStep(p, pc, authStorage) {
276
311
  // Build the OAuth provider list dynamically from what's registered
277
312
  const oauthProviders = authStorage.getOAuthProviders();
278
313
  const oauthMap = new Map(oauthProviders.map(op => [op.id, op]));
@@ -572,7 +607,7 @@ async function runCustomOpenAIFlow(p, pc, authStorage) {
572
607
  return true;
573
608
  }
574
609
  // ─── Web Search Provider Step ─────────────────────────────────────────────────
575
- async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
610
+ export async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
576
611
  // Check which LLM provider was configured
577
612
  const authed = authStorage.list().filter(id => LLM_PROVIDER_IDS.includes(id));
578
613
  const isAnthropic = isAnthropicAuth && authed.includes('anthropic');
@@ -633,7 +668,7 @@ async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
633
668
  return null;
634
669
  }
635
670
  // ─── Tool API Keys Step ───────────────────────────────────────────────────────
636
- async function runToolKeysStep(p, pc, authStorage) {
671
+ export async function runToolKeysStep(p, pc, authStorage) {
637
672
  // Filter to keys not already configured
638
673
  const missing = TOOL_KEYS.filter(tk => !authStorage.has(tk.provider) && !process.env[tk.envVar]);
639
674
  if (missing.length === 0)
@@ -668,7 +703,7 @@ async function runToolKeysStep(p, pc, authStorage) {
668
703
  return savedCount;
669
704
  }
670
705
  // ─── Remote Questions Step ────────────────────────────────────────────────────
671
- async function runRemoteQuestionsStep(p, pc, authStorage) {
706
+ export async function runRemoteQuestionsStep(p, pc, authStorage) {
672
707
  // Check existing config — use getCredentialsForProvider to skip empty-key entries
673
708
  const hasValidKey = (provider) => authStorage
674
709
  .getCredentialsForProvider(provider)
@@ -316,10 +316,13 @@ export default function AskUserQuestions(pi) {
316
316
  lines.push(`${theme.fg("accent", q.header)}: ${theme.fg("dim", "(no answer)")}`);
317
317
  continue;
318
318
  }
319
- const answerText = answer.answers.length > 0 ? answer.answers.join(", ") : "(custom)";
319
+ const selected = answer.selected;
320
+ const answerText = Array.isArray(selected)
321
+ ? (selected.length > 0 ? selected.join(", ") : "(custom)")
322
+ : (selected || "(custom)");
320
323
  let line = `${theme.fg("success", "✓ ")}${theme.fg("accent", q.header)}: ${answerText}`;
321
- if (answer.user_note) {
322
- line += ` ${theme.fg("muted", `[note: ${answer.user_note}]`)}`;
324
+ if (answer.notes) {
325
+ line += ` ${theme.fg("muted", `[note: ${answer.notes}]`)}`;
323
326
  }
324
327
  lines.push(line);
325
328
  }
@@ -9,6 +9,16 @@
9
9
  * and check the exit code + output for an authenticated session.
10
10
  */
11
11
  import { execFileSync } from "node:child_process";
12
+ /**
13
+ * Platform-correct binary name for the Claude Code CLI.
14
+ *
15
+ * On Windows, npm-global binaries are installed as `.cmd` shims and
16
+ * `execFileSync` does not auto-resolve the extension — calling bare
17
+ * `claude` would fail with ENOENT even when the CLI is installed and
18
+ * authenticated. Mirrors the `NPM_COMMAND` pattern in
19
+ * `src/resources/extensions/gsd/pre-execution-checks.ts`.
20
+ */
21
+ const CLAUDE_COMMAND = process.platform === "win32" ? "claude.cmd" : "claude";
12
22
  let cachedBinaryPresent = null;
13
23
  let cachedAuthed = null;
14
24
  let lastCheckMs = 0;
@@ -22,7 +32,7 @@ function refreshCache() {
22
32
  lastCheckMs = now;
23
33
  // Check binary presence
24
34
  try {
25
- execFileSync("claude", ["--version"], { timeout: 5_000, stdio: "pipe" });
35
+ execFileSync(CLAUDE_COMMAND, ["--version"], { timeout: 5_000, stdio: "pipe" });
26
36
  cachedBinaryPresent = true;
27
37
  }
28
38
  catch {
@@ -32,7 +42,7 @@ function refreshCache() {
32
42
  }
33
43
  // Check auth status — exit code 0 with non-error output means authenticated
34
44
  try {
35
- const output = execFileSync("claude", ["auth", "status"], { timeout: 5_000, stdio: "pipe" })
45
+ const output = execFileSync(CLAUDE_COMMAND, ["auth", "status"], { timeout: 5_000, stdio: "pipe" })
36
46
  .toString()
37
47
  .toLowerCase();
38
48
  // The CLI outputs "not logged in", "no credentials", or similar when unauthenticated