gsd-pi 2.75.0-dev.063e5a3 → 2.75.0-dev.2203010a0

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 (710) hide show
  1. package/README.md +186 -149
  2. package/dist/claude-cli-check.d.ts +10 -0
  3. package/dist/claude-cli-check.js +13 -3
  4. package/dist/headless-events.d.ts +1 -1
  5. package/dist/headless-events.js +5 -2
  6. package/dist/headless.js +5 -6
  7. package/dist/loader.js +0 -0
  8. package/dist/onboarding.d.ts +15 -0
  9. package/dist/onboarding.js +94 -36
  10. package/dist/resources/extensions/ask-user-questions.js +17 -5
  11. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  12. package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
  13. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +76 -4
  14. package/dist/resources/extensions/gsd/auto/detect-stuck.js +9 -0
  15. package/dist/resources/extensions/gsd/auto/loop.js +67 -4
  16. package/dist/resources/extensions/gsd/auto/phases.js +70 -47
  17. package/dist/resources/extensions/gsd/auto/resolve.js +1 -1
  18. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -1
  19. package/dist/resources/extensions/gsd/auto/session.js +5 -0
  20. package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
  21. package/dist/resources/extensions/gsd/auto-dashboard.js +15 -7
  22. package/dist/resources/extensions/gsd/auto-dispatch.js +112 -6
  23. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  24. package/dist/resources/extensions/gsd/auto-model-selection.js +10 -2
  25. package/dist/resources/extensions/gsd/auto-post-unit.js +10 -8
  26. package/dist/resources/extensions/gsd/auto-prompts.js +173 -39
  27. package/dist/resources/extensions/gsd/auto-recovery.js +57 -0
  28. package/dist/resources/extensions/gsd/auto-start.js +5 -3
  29. package/dist/resources/extensions/gsd/auto-verification.js +3 -3
  30. package/dist/resources/extensions/gsd/auto-worktree.js +55 -1
  31. package/dist/resources/extensions/gsd/auto.js +57 -25
  32. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
  33. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +22 -4
  34. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
  35. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
  36. package/dist/resources/extensions/gsd/commands/catalog.js +81 -9
  37. package/dist/resources/extensions/gsd/commands/handlers/core.js +64 -24
  38. package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
  39. package/dist/resources/extensions/gsd/commands/handlers/onboarding.js +175 -0
  40. package/dist/resources/extensions/gsd/commands/handlers/ops.js +16 -0
  41. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +228 -29
  42. package/dist/resources/extensions/gsd/commands-cmux.js +5 -2
  43. package/dist/resources/extensions/gsd/commands-config.js +5 -0
  44. package/dist/resources/extensions/gsd/commands-debug.js +388 -0
  45. package/dist/resources/extensions/gsd/commands-do.js +1 -0
  46. package/dist/resources/extensions/gsd/commands-extract-learnings.js +233 -75
  47. package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
  48. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +40 -12
  49. package/dist/resources/extensions/gsd/commands-scan.js +94 -0
  50. package/dist/resources/extensions/gsd/commands-workflow-templates.js +101 -2
  51. package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
  52. package/dist/resources/extensions/gsd/db-writer.js +1 -0
  53. package/dist/resources/extensions/gsd/debug-session-store.js +238 -0
  54. package/dist/resources/extensions/gsd/definition-loader.js +7 -0
  55. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  56. package/dist/resources/extensions/gsd/doctor-environment.js +2 -1
  57. package/dist/resources/extensions/gsd/doctor-git-checks.js +5 -1
  58. package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
  59. package/dist/resources/extensions/gsd/doctor-providers.js +48 -20
  60. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +22 -4
  61. package/dist/resources/extensions/gsd/doctor.js +7 -1
  62. package/dist/resources/extensions/gsd/error-classifier.js +6 -3
  63. package/dist/resources/extensions/gsd/escalation.js +321 -0
  64. package/dist/resources/extensions/gsd/forensics.js +26 -29
  65. package/dist/resources/extensions/gsd/git-service.js +0 -1
  66. package/dist/resources/extensions/gsd/graph.js +26 -2
  67. package/dist/resources/extensions/gsd/gsd-db.js +254 -29
  68. package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
  69. package/dist/resources/extensions/gsd/health-widget.js +7 -4
  70. package/dist/resources/extensions/gsd/init-wizard.js +86 -45
  71. package/dist/resources/extensions/gsd/markdown-renderer.js +5 -5
  72. package/dist/resources/extensions/gsd/metrics.js +1 -0
  73. package/dist/resources/extensions/gsd/model-cost-table.js +3 -1
  74. package/dist/resources/extensions/gsd/model-router.js +7 -1
  75. package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
  76. package/dist/resources/extensions/gsd/notification-widget.js +24 -39
  77. package/dist/resources/extensions/gsd/notifications.js +4 -0
  78. package/dist/resources/extensions/gsd/onboarding-state.js +133 -0
  79. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
  80. package/dist/resources/extensions/gsd/pre-execution-checks.js +97 -4
  81. package/dist/resources/extensions/gsd/preferences-models.js +1 -0
  82. package/dist/resources/extensions/gsd/preferences-types.js +2 -1
  83. package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
  84. package/dist/resources/extensions/gsd/preferences.js +10 -10
  85. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
  86. package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
  87. package/dist/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  88. package/dist/resources/extensions/gsd/prompts/execute-task.md +12 -0
  89. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  90. package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  91. package/dist/resources/extensions/gsd/prompts/scan.md +79 -0
  92. package/dist/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  93. package/dist/resources/extensions/gsd/python-resolver.js +70 -0
  94. package/dist/resources/extensions/gsd/run-manager.js +37 -17
  95. package/dist/resources/extensions/gsd/setup-catalog.js +75 -0
  96. package/dist/resources/extensions/gsd/state.js +47 -3
  97. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  98. package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
  99. package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
  100. package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
  101. package/dist/resources/extensions/gsd/uok/flags.js +7 -7
  102. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  103. package/dist/resources/extensions/gsd/verification-gate.js +2 -1
  104. package/dist/resources/extensions/gsd/workflow-dispatch.js +64 -0
  105. package/dist/resources/extensions/gsd/workflow-install.js +327 -0
  106. package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
  107. package/dist/resources/extensions/gsd/workflow-mcp.js +1 -6
  108. package/dist/resources/extensions/gsd/workflow-plugins.js +346 -0
  109. package/dist/resources/extensions/gsd/workflow-projections.js +17 -15
  110. package/dist/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  111. package/dist/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  112. package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  113. package/dist/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  114. package/dist/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  115. package/dist/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  116. package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  117. package/dist/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  118. package/dist/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  119. package/dist/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  120. package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  121. package/dist/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  122. package/dist/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  123. package/dist/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  124. package/dist/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  125. package/dist/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  126. package/dist/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  127. package/dist/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  128. package/dist/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  129. package/dist/resources/extensions/gsd/workflow-templates/release.md +118 -0
  130. package/dist/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  131. package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  132. package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  133. package/dist/resources/extensions/gsd/workflow-templates/spike.md +1 -0
  134. package/dist/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  135. package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
  136. package/dist/resources/extensions/remote-questions/commands.js +380 -0
  137. package/dist/resources/extensions/remote-questions/manager.js +39 -5
  138. package/dist/resources/extensions/remote-questions/telegram-adapter.js +79 -4
  139. package/dist/resources/extensions/shared/interview-ui.js +189 -1
  140. package/dist/resources/extensions/shared/layout-utils.js +17 -0
  141. package/dist/resources/extensions/shared/rtk-shared.js +47 -0
  142. package/dist/resources/extensions/shared/rtk.js +3 -46
  143. package/dist/resources/skills/create-workflow/SKILL.md +33 -6
  144. package/dist/rtk-shared.d.ts +10 -0
  145. package/dist/rtk-shared.js +47 -0
  146. package/dist/rtk.d.ts +2 -6
  147. package/dist/rtk.js +3 -48
  148. package/dist/shared/workspace-types.d.ts +52 -0
  149. package/dist/shared/workspace-types.js +1 -0
  150. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  151. package/dist/update-check.d.ts +10 -0
  152. package/dist/update-check.js +24 -3
  153. package/dist/web/standalone/.next/BUILD_ID +1 -1
  154. package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
  155. package/dist/web/standalone/.next/build-manifest.json +3 -3
  156. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  157. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  158. package/dist/web/standalone/.next/required-server-files.json +1 -1
  159. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  161. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  162. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  163. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  164. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  165. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  166. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  167. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  168. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  170. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  171. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  172. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  173. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  174. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  175. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  176. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  177. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  179. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  181. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  184. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  185. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  187. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  189. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  191. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  193. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  195. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  197. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  199. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  201. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  203. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  204. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  205. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  207. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  209. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  210. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  211. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  213. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  215. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  216. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  217. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  219. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  221. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  222. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  223. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  225. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  226. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  227. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  229. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  231. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  232. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  233. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  234. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  235. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  236. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  237. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  238. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  239. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  240. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  241. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  242. package/dist/web/standalone/.next/server/app/index.html +1 -1
  243. package/dist/web/standalone/.next/server/app/index.rsc +3 -3
  244. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  245. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  246. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  247. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  248. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  249. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  250. package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
  251. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  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/pages/404.html +1 -1
  257. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  258. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  259. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +9 -0
  260. package/dist/web/standalone/.next/static/chunks/{2008.71ee9230ad78df21.js → 3621.fc7480022c972438.js} +2 -2
  261. package/dist/web/standalone/.next/static/chunks/app/{page-f1e30ab6bb269149.js → page-5b113fd32bc2a1c3.js} +1 -1
  262. package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-5fc74f13a25fa1bb.js} +1 -1
  263. package/dist/web/standalone/.next/static/css/632cd626b1731d88.css +1 -0
  264. package/dist/web/standalone/server.js +1 -1
  265. package/dist/welcome-screen.js +48 -24
  266. package/dist/wizard.js +2 -2
  267. package/dist/worktree-cli.d.ts +6 -5
  268. package/dist/worktree-cli.js +23 -7
  269. package/package.json +3 -3
  270. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  271. package/packages/native/tsconfig.tsbuildinfo +1 -1
  272. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  273. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
  274. package/packages/pi-ai/dist/models/capability-patches.js +3 -2
  275. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
  276. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +68 -0
  277. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -1
  278. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +68 -0
  279. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -1
  280. package/packages/pi-ai/dist/models/generated/anthropic.d.ts +17 -0
  281. package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -1
  282. package/packages/pi-ai/dist/models/generated/anthropic.js +17 -0
  283. package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -1
  284. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +17 -0
  285. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -1
  286. package/packages/pi-ai/dist/models/generated/google-antigravity.js +17 -0
  287. package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -1
  288. package/packages/pi-ai/dist/models/generated/groq.d.ts +0 -153
  289. package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -1
  290. package/packages/pi-ai/dist/models/generated/groq.js +0 -153
  291. package/packages/pi-ai/dist/models/generated/groq.js.map +1 -1
  292. package/packages/pi-ai/dist/models/generated/index.d.ts +136 -153
  293. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  294. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  295. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  296. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  297. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  298. package/packages/pi-ai/dist/models/generated/openrouter.d.ts +17 -0
  299. package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -1
  300. package/packages/pi-ai/dist/models/generated/openrouter.js +17 -0
  301. package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -1
  302. package/packages/pi-ai/dist/models.generated.test.js +17 -0
  303. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  304. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
  305. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  306. package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -6
  307. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  308. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
  309. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
  310. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
  311. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
  312. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
  313. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  314. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +20 -1
  315. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  316. package/packages/pi-ai/dist/providers/anthropic-shared.js +32 -2
  317. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  318. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +12 -1
  319. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
  320. package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
  321. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  322. package/packages/pi-ai/dist/providers/anthropic.js +18 -1
  323. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  324. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  325. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
  326. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  327. package/packages/pi-ai/package.json +1 -1
  328. package/packages/pi-ai/scripts/generate-models.ts +50 -0
  329. package/packages/pi-ai/src/models/capability-patches.ts +5 -2
  330. package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +68 -0
  331. package/packages/pi-ai/src/models/generated/anthropic.ts +17 -0
  332. package/packages/pi-ai/src/models/generated/google-antigravity.ts +17 -0
  333. package/packages/pi-ai/src/models/generated/groq.ts +0 -153
  334. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  335. package/packages/pi-ai/src/models/generated/openrouter.ts +17 -0
  336. package/packages/pi-ai/src/models.generated.test.ts +17 -0
  337. package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
  338. package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -7
  339. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
  340. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +15 -1
  341. package/packages/pi-ai/src/providers/anthropic-shared.ts +36 -3
  342. package/packages/pi-ai/src/providers/anthropic.ts +19 -1
  343. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
  344. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  345. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts +2 -0
  346. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts.map +1 -0
  347. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +38 -0
  348. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -0
  349. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +14 -0
  350. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  351. package/packages/pi-coding-agent/dist/core/auth-storage.js +34 -0
  352. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  353. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +74 -0
  354. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  355. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
  356. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  357. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
  358. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  359. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  360. package/packages/pi-coding-agent/dist/core/sdk.js +32 -0
  361. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  362. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +2 -2
  363. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  364. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  365. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
  366. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  367. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  368. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
  369. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  370. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
  371. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  372. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
  373. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  374. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  375. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  376. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +77 -0
  377. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  378. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -66
  379. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  380. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -75
  381. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  382. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +1 -1
  383. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  384. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +192 -24
  385. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  386. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +56 -0
  387. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +83 -0
  388. package/packages/pi-coding-agent/src/core/auth-storage.ts +35 -0
  389. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
  390. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
  391. package/packages/pi-coding-agent/src/core/sdk.ts +41 -0
  392. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +2 -2
  393. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
  394. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
  395. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
  396. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +83 -0
  397. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +2 -83
  398. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +208 -27
  399. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  400. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  401. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  402. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  403. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  404. package/pkg/dist/modes/interactive/theme/theme-schema.js +77 -0
  405. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  406. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -66
  407. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  408. package/pkg/dist/modes/interactive/theme/theme.js +1 -75
  409. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  410. package/pkg/dist/modes/interactive/theme/themes.d.ts +1 -1
  411. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  412. package/pkg/dist/modes/interactive/theme/themes.js +192 -24
  413. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  414. package/src/resources/extensions/ask-user-questions.ts +24 -6
  415. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  416. package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
  417. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +94 -4
  418. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +84 -0
  419. package/src/resources/extensions/gsd/auto/detect-stuck.ts +10 -0
  420. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
  421. package/src/resources/extensions/gsd/auto/loop.ts +109 -3
  422. package/src/resources/extensions/gsd/auto/phases.ts +94 -60
  423. package/src/resources/extensions/gsd/auto/resolve.ts +1 -1
  424. package/src/resources/extensions/gsd/auto/run-unit.ts +11 -1
  425. package/src/resources/extensions/gsd/auto/session.ts +7 -0
  426. package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
  427. package/src/resources/extensions/gsd/auto-dashboard.ts +21 -4
  428. package/src/resources/extensions/gsd/auto-dispatch.ts +123 -5
  429. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  430. package/src/resources/extensions/gsd/auto-model-selection.ts +13 -2
  431. package/src/resources/extensions/gsd/auto-post-unit.ts +10 -8
  432. package/src/resources/extensions/gsd/auto-prompts.ts +201 -40
  433. package/src/resources/extensions/gsd/auto-recovery.ts +63 -1
  434. package/src/resources/extensions/gsd/auto-start.ts +8 -6
  435. package/src/resources/extensions/gsd/auto-verification.ts +3 -3
  436. package/src/resources/extensions/gsd/auto-worktree.ts +65 -0
  437. package/src/resources/extensions/gsd/auto.ts +61 -28
  438. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
  439. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +22 -4
  440. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
  441. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
  442. package/src/resources/extensions/gsd/commands/catalog.ts +74 -9
  443. package/src/resources/extensions/gsd/commands/handlers/core.ts +69 -27
  444. package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
  445. package/src/resources/extensions/gsd/commands/handlers/onboarding.ts +229 -0
  446. package/src/resources/extensions/gsd/commands/handlers/ops.ts +16 -0
  447. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +279 -29
  448. package/src/resources/extensions/gsd/commands-cmux.ts +6 -2
  449. package/src/resources/extensions/gsd/commands-config.ts +10 -0
  450. package/src/resources/extensions/gsd/commands-debug.ts +484 -0
  451. package/src/resources/extensions/gsd/commands-do.ts +1 -0
  452. package/src/resources/extensions/gsd/commands-extract-learnings.ts +295 -76
  453. package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
  454. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +49 -12
  455. package/src/resources/extensions/gsd/commands-scan.ts +125 -0
  456. package/src/resources/extensions/gsd/commands-workflow-templates.ts +129 -2
  457. package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
  458. package/src/resources/extensions/gsd/db-writer.ts +3 -0
  459. package/src/resources/extensions/gsd/debug-session-store.ts +377 -0
  460. package/src/resources/extensions/gsd/definition-loader.ts +7 -0
  461. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  462. package/src/resources/extensions/gsd/doctor-environment.ts +2 -1
  463. package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -1
  464. package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
  465. package/src/resources/extensions/gsd/doctor-providers.ts +52 -22
  466. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +23 -4
  467. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  468. package/src/resources/extensions/gsd/doctor.ts +7 -1
  469. package/src/resources/extensions/gsd/error-classifier.ts +6 -3
  470. package/src/resources/extensions/gsd/escalation.ts +367 -0
  471. package/src/resources/extensions/gsd/forensics.ts +25 -29
  472. package/src/resources/extensions/gsd/git-service.ts +0 -1
  473. package/src/resources/extensions/gsd/graph.ts +33 -3
  474. package/src/resources/extensions/gsd/gsd-db.ts +306 -29
  475. package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
  476. package/src/resources/extensions/gsd/health-widget.ts +7 -3
  477. package/src/resources/extensions/gsd/init-wizard.ts +87 -54
  478. package/src/resources/extensions/gsd/markdown-renderer.ts +5 -5
  479. package/src/resources/extensions/gsd/metrics.ts +1 -0
  480. package/src/resources/extensions/gsd/model-cost-table.ts +3 -1
  481. package/src/resources/extensions/gsd/model-router.ts +15 -1
  482. package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
  483. package/src/resources/extensions/gsd/notification-widget.ts +25 -43
  484. package/src/resources/extensions/gsd/notifications.ts +6 -0
  485. package/src/resources/extensions/gsd/onboarding-state.ts +146 -0
  486. package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
  487. package/src/resources/extensions/gsd/pre-execution-checks.ts +98 -8
  488. package/src/resources/extensions/gsd/preferences-models.ts +1 -0
  489. package/src/resources/extensions/gsd/preferences-types.ts +10 -2
  490. package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
  491. package/src/resources/extensions/gsd/preferences.ts +10 -10
  492. package/src/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
  493. package/src/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
  494. package/src/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  495. package/src/resources/extensions/gsd/prompts/execute-task.md +12 -0
  496. package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  497. package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  498. package/src/resources/extensions/gsd/prompts/scan.md +79 -0
  499. package/src/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  500. package/src/resources/extensions/gsd/python-resolver.ts +76 -0
  501. package/src/resources/extensions/gsd/run-manager.ts +53 -19
  502. package/src/resources/extensions/gsd/setup-catalog.ts +105 -0
  503. package/src/resources/extensions/gsd/state.ts +50 -2
  504. package/src/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  505. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -34
  506. package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
  507. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +45 -31
  508. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +63 -0
  509. package/src/resources/extensions/gsd/tests/auto-prompts-fallback.test.ts +35 -0
  510. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
  511. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
  512. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +39 -0
  513. package/src/resources/extensions/gsd/tests/commands-do.test.ts +48 -0
  514. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +333 -21
  515. package/src/resources/extensions/gsd/tests/commands-scan.test.ts +351 -0
  516. package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +8 -6
  517. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +6 -8
  518. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  519. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
  520. package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +905 -0
  521. package/src/resources/extensions/gsd/tests/debug-command-lifecycle.integration.test.ts +1229 -0
  522. package/src/resources/extensions/gsd/tests/debug-session-store.test.ts +565 -0
  523. package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +64 -0
  524. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +67 -0
  525. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +62 -18
  526. package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
  527. package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
  528. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +29 -12
  529. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
  530. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +74 -0
  531. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +0 -4
  532. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
  533. package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
  534. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +190 -0
  535. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
  536. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
  537. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +68 -1
  538. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +109 -11
  539. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +51 -0
  540. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +2 -2
  541. package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
  542. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +171 -1
  543. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  544. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  545. package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
  546. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
  547. package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
  548. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
  549. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
  550. package/src/resources/extensions/gsd/tests/onboarding-state.test.ts +105 -0
  551. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +114 -0
  552. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +4 -5
  553. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
  554. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
  555. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +275 -6
  556. package/src/resources/extensions/gsd/tests/preferences.test.ts +69 -1
  557. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
  558. package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +11 -2
  559. package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
  560. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +27 -0
  561. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
  562. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +1 -1
  563. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +33 -0
  564. package/src/resources/extensions/gsd/tests/python-resolver.test.ts +131 -0
  565. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
  566. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +107 -0
  567. package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
  568. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
  569. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
  570. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
  571. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +15 -0
  572. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
  573. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
  574. package/src/resources/extensions/gsd/tests/uok-flags.test.ts +31 -1
  575. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +166 -0
  576. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +35 -0
  577. package/src/resources/extensions/gsd/tests/workflow-install.test.ts +113 -0
  578. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +15 -6
  579. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
  580. package/src/resources/extensions/gsd/tests/workflow-plugins.test.ts +310 -0
  581. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
  582. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +8 -2
  583. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
  584. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
  585. package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
  586. package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
  587. package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
  588. package/src/resources/extensions/gsd/types.ts +62 -0
  589. package/src/resources/extensions/gsd/unit-runtime.ts +1 -0
  590. package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
  591. package/src/resources/extensions/gsd/uok/flags.ts +7 -7
  592. package/src/resources/extensions/gsd/uok/kernel.ts +16 -4
  593. package/src/resources/extensions/gsd/verification-gate.ts +2 -1
  594. package/src/resources/extensions/gsd/workflow-dispatch.ts +106 -0
  595. package/src/resources/extensions/gsd/workflow-install.ts +423 -0
  596. package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
  597. package/src/resources/extensions/gsd/workflow-mcp.ts +1 -6
  598. package/src/resources/extensions/gsd/workflow-plugins.ts +403 -0
  599. package/src/resources/extensions/gsd/workflow-projections.ts +18 -16
  600. package/src/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  601. package/src/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  602. package/src/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  603. package/src/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  604. package/src/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  605. package/src/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  606. package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  607. package/src/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  608. package/src/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  609. package/src/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  610. package/src/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  611. package/src/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  612. package/src/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  613. package/src/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  614. package/src/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  615. package/src/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  616. package/src/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  617. package/src/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  618. package/src/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  619. package/src/resources/extensions/gsd/workflow-templates/release.md +118 -0
  620. package/src/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  621. package/src/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  622. package/src/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  623. package/src/resources/extensions/gsd/workflow-templates/spike.md +1 -0
  624. package/src/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  625. package/src/resources/extensions/gsd/workflow-templates.ts +7 -0
  626. package/src/resources/extensions/gsd/workspace-index.ts +9 -4
  627. package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
  628. package/src/resources/extensions/remote-questions/commands.ts +480 -0
  629. package/src/resources/extensions/remote-questions/manager.ts +49 -4
  630. package/src/resources/extensions/remote-questions/telegram-adapter.ts +86 -4
  631. package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +246 -0
  632. package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
  633. package/src/resources/extensions/remote-questions/tests/telegram-commands.test.ts +267 -0
  634. package/src/resources/extensions/shared/interview-ui.ts +195 -1
  635. package/src/resources/extensions/shared/layout-utils.ts +26 -0
  636. package/src/resources/extensions/shared/rtk-shared.ts +58 -0
  637. package/src/resources/extensions/shared/rtk.ts +12 -52
  638. package/src/resources/extensions/shared/tests/interview-preview.test.ts +177 -0
  639. package/src/resources/extensions/shared/tests/preview-layout.test.ts +120 -0
  640. package/src/resources/skills/create-workflow/SKILL.md +33 -6
  641. package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +0 -9
  642. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  643. package/packages/native/dist/ps/types.d.ts +0 -5
  644. package/packages/native/dist/ps/types.js +0 -2
  645. package/packages/native/src/ps/types.ts +0 -5
  646. package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +0 -201
  647. package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +0 -9
  648. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -762
  649. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
  650. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
  651. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
  652. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
  653. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -230
  654. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -87
  655. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -32
  656. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -169
  657. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +0 -21
  658. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +0 -88
  659. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
  660. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
  661. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
  662. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
  663. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +0 -8
  664. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +0 -41
  665. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +0 -21
  666. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
  667. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
  668. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
  669. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
  670. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
  671. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
  672. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -46
  673. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -24
  674. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -12
  675. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -63
  676. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +0 -13
  677. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +0 -12
  678. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
  679. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
  680. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
  681. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
  682. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +0 -5
  683. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +0 -6
  684. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +0 -13
  685. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -8
  686. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
  687. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
  688. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
  689. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
  690. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -46
  691. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -24
  692. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -12
  693. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -63
  694. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +0 -13
  695. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +0 -12
  696. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
  697. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
  698. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
  699. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
  700. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +0 -5
  701. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +0 -6
  702. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +0 -13
  703. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -8
  704. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
  705. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
  706. package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +0 -68
  707. package/packages/pi-ai/oauth.d.ts +0 -1
  708. package/packages/pi-ai/oauth.js +0 -1
  709. /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → 8FZqxNe9FxQDmsbRzR8tA}/_buildManifest.js +0 -0
  710. /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → 8FZqxNe9FxQDmsbRzR8tA}/_ssgManifest.js +0 -0
@@ -36,11 +36,17 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
36
36
  " /gsd undo Revert last completed unit [--force]",
37
37
  " /gsd rethink Conversational project reorganization",
38
38
  "",
39
+ "OBSERVABILITY",
40
+ " /gsd logs Browse activity and debug logs",
41
+ " /gsd debug Create/list/continue persistent debug sessions",
42
+ "",
39
43
  "SETUP",
44
+ " /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
45
+ " /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
40
46
  " /gsd init Project init wizard",
41
- " /gsd setup Global setup status [llm|search|remote|keys|prefs]",
42
47
  " /gsd model Switch active session model",
43
- " /gsd prefs Manage preferences",
48
+ " /gsd prefs Manage preferences (alias for /gsd setup prefs)",
49
+ " /gsd keys API key manager (LLM + tool keys)",
44
50
  " /gsd doctor Diagnose and repair .gsd/ state",
45
51
  "",
46
52
  "Use /gsd help full for the complete command reference.",
@@ -67,6 +73,8 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
67
73
  " /gsd history View execution history [--cost] [--phase] [--model] [N]",
68
74
  " /gsd changelog Show categorized release notes [version]",
69
75
  ` /gsd notifications View persistent notification history [clear|tail|filter] (${formattedShortcutPair("notifications")})`,
76
+ " /gsd logs Browse activity logs, debug logs, and metrics",
77
+ " /gsd debug Create/list/continue persistent debug sessions",
70
78
  "",
71
79
  "COURSE CORRECTION",
72
80
  " /gsd steer <desc> Apply user override to active work",
@@ -83,14 +91,15 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
83
91
  " /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
84
92
  "",
85
93
  "SETUP & CONFIGURATION",
94
+ " /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
95
+ " /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
86
96
  " /gsd init Project init wizard — detect, configure, bootstrap .gsd/",
87
- " /gsd setup Global setup status [llm|search|remote|keys|prefs]",
88
97
  " /gsd model Switch active session model [provider/model|model-id]",
89
98
  " /gsd mode Set workflow mode (solo/team) [global|project]",
90
- " /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude]",
99
+ " /gsd prefs Manage preferences [global|project|status|wizard|setup|import-claude] (alias for /gsd setup prefs)",
91
100
  " /gsd cmux Manage cmux integration [status|on|off|notifications|sidebar|splits|browser]",
92
- " /gsd config Set API keys for external tools",
93
- " /gsd keys API key manager [list|add|remove|test|rotate|doctor]",
101
+ " /gsd keys API key manager (LLM + tool keys) [list|add|remove|test|rotate|doctor]",
102
+ " /gsd config (deprecated) Set tool API keys — use /gsd keys instead",
94
103
  " /gsd show-config Show effective configuration (models, routing, toggles)",
95
104
  " /gsd hooks Show post-unit hook configuration",
96
105
  " /gsd extensions Manage extensions [list|enable|disable|info]",
@@ -170,32 +179,39 @@ export async function handleVisualize(ctx: ExtensionCommandContext): Promise<voi
170
179
  }
171
180
  }
172
181
 
173
- export async function handleSetup(args: string, ctx: ExtensionCommandContext): Promise<void> {
182
+ export async function handleSetup(args: string, ctx: ExtensionCommandContext, pi?: ExtensionAPI): Promise<void> {
174
183
  const { detectProjectState, hasGlobalSetup } = await import("../../detection.js");
175
-
176
- const globalConfigured = hasGlobalSetup();
177
- const detection = detectProjectState(projectRoot());
178
-
179
- const statusLines = ["GSD Setup Status\n"];
180
- statusLines.push(` Global preferences: ${globalConfigured ? "configured" : "not set"}`);
181
- statusLines.push(` Project state: ${detection.state}`);
182
- if (detection.projectSignals.primaryLanguage) {
183
- statusLines.push(` Detected: ${detection.projectSignals.primaryLanguage}`);
184
+ const { isOnboardingComplete, readOnboardingRecord } = await import("../../onboarding-state.js");
185
+
186
+ // Sub-route dispatch — keep redirects but route the canonical work to /gsd
187
+ // onboarding (single source for wizard steps) and /gsd keys (single source
188
+ // for credentials).
189
+ if (args === "onboarding" || args === "wizard") {
190
+ const { handleOnboarding } = await import("./onboarding.js");
191
+ await handleOnboarding("", ctx);
192
+ return;
184
193
  }
185
-
186
194
  if (args === "llm" || args === "auth") {
187
- ctx.ui.notify("Use /login to configure LLM authentication.", "info");
195
+ const { handleOnboarding } = await import("./onboarding.js");
196
+ await handleOnboarding("--step llm", ctx);
188
197
  return;
189
198
  }
190
199
  if (args === "search") {
191
- ctx.ui.notify("Use /search-provider to configure web search.", "info");
200
+ const { handleOnboarding } = await import("./onboarding.js");
201
+ await handleOnboarding("--step search", ctx);
192
202
  return;
193
203
  }
194
204
  if (args === "remote") {
195
- ctx.ui.notify("Use /gsd remote to configure remote questions.", "info");
205
+ const { handleOnboarding } = await import("./onboarding.js");
206
+ await handleOnboarding("--step remote", ctx);
207
+ return;
208
+ }
209
+ if (args === "model") {
210
+ await handleModel("", ctx, pi);
196
211
  return;
197
212
  }
198
213
  if (args === "keys") {
214
+ ctx.ui.notify("Tip: /gsd keys is the canonical command for API key management.", "info");
199
215
  const { handleKeys } = await import("../../key-manager.js");
200
216
  await handleKeys("", ctx);
201
217
  return;
@@ -206,14 +222,35 @@ export async function handleSetup(args: string, ctx: ExtensionCommandContext): P
206
222
  return;
207
223
  }
208
224
 
225
+ // Bare /gsd setup — render the hub: status + actions
226
+ const globalConfigured = hasGlobalSetup();
227
+ const detection = detectProjectState(projectRoot());
228
+ const onboardingDone = isOnboardingComplete();
229
+ const record = readOnboardingRecord();
230
+
231
+ const statusLines: string[] = ["GSD Setup\n"];
232
+ statusLines.push(
233
+ onboardingDone
234
+ ? ` Onboarding: ✓ complete${record.completedAt ? ` (${record.completedAt.slice(0, 10)})` : ""}`
235
+ : ` Onboarding: ○ not complete — /gsd onboarding to start`,
236
+ );
237
+ statusLines.push(` Global preferences: ${globalConfigured ? "configured" : "not set"}`);
238
+ statusLines.push(` Project state: ${detection.state}`);
239
+ if (detection.projectSignals.primaryLanguage) {
240
+ statusLines.push(` Detected: ${detection.projectSignals.primaryLanguage}`);
241
+ }
242
+
209
243
  ctx.ui.notify(statusLines.join("\n"), "info");
210
244
  ctx.ui.notify(
211
- "Available setup commands:\n" +
212
- " /gsd setup llm — LLM authentication\n" +
213
- " /gsd setup search Web search provider\n" +
214
- " /gsd setup remote Remote questions (Discord/Slack/Telegram)\n" +
215
- " /gsd setup keys Tool API keys\n" +
216
- " /gsd setup prefs Global preferences wizard",
245
+ "Configuration hub:\n" +
246
+ " /gsd setup llm — LLM provider & auth\n" +
247
+ " /gsd setup model Default model picker\n" +
248
+ " /gsd setup search Web search provider\n" +
249
+ " /gsd setup remote Remote questions (Discord/Slack/Telegram)\n" +
250
+ " /gsd setup keys API keys (alias for /gsd keys)\n" +
251
+ " /gsd setup prefs — Global preferences (alias for /gsd prefs)\n" +
252
+ " /gsd setup onboarding — Full wizard (alias for /gsd onboarding)\n\n" +
253
+ "Tip: /gsd onboarding --resume to continue an incomplete setup.",
217
254
  "info",
218
255
  );
219
256
  }
@@ -423,7 +460,12 @@ export async function handleCoreCommand(
423
460
  return true;
424
461
  }
425
462
  if (trimmed === "setup" || trimmed.startsWith("setup ")) {
426
- await handleSetup(trimmed.replace(/^setup\s*/, "").trim(), ctx);
463
+ await handleSetup(trimmed.replace(/^setup\s*/, "").trim(), ctx, pi);
464
+ return true;
465
+ }
466
+ if (trimmed === "onboarding" || trimmed.startsWith("onboarding ")) {
467
+ const { handleOnboarding } = await import("./onboarding.js");
468
+ await handleOnboarding(trimmed.replace(/^onboarding\s*/, "").trim(), ctx);
427
469
  return true;
428
470
  }
429
471
  return false;
@@ -0,0 +1,216 @@
1
+ // GSD Extension — /gsd escalate Command Handler (ADR-011 Phase 2)
2
+ // Surface and resolve mid-execution escalations from the CLI.
3
+
4
+ import type { ExtensionAPI, ExtensionCommandContext } from "@gsd/pi-coding-agent";
5
+
6
+ import { projectRoot } from "../context.js";
7
+ import { getActiveMilestoneId } from "../../state.js";
8
+ import {
9
+ readEscalationArtifact,
10
+ formatEscalationForDisplay,
11
+ resolveEscalation,
12
+ listActionableEscalations,
13
+ listAllEscalations,
14
+ } from "../../escalation.js";
15
+ import { saveDecisionToDb } from "../../db-writer.js";
16
+ import { loadEffectiveGSDPreferences } from "../../preferences.js";
17
+ import { invalidateStateCache } from "../../state.js";
18
+ import { emitUokAuditEvent, buildAuditEnvelope } from "../../uok/audit.js";
19
+
20
+ function helpMessage(): string {
21
+ return [
22
+ "/gsd escalate — manage mid-execution escalations (ADR-011 Phase 2)",
23
+ "",
24
+ "Subcommands:",
25
+ " list [--all] show pending escalations (use --all to include resolved)",
26
+ " show <taskId> print the escalation artifact",
27
+ " resolve <taskId> <choice> [rationale...]",
28
+ " resolve an escalation — choice is an option id,",
29
+ " `accept` (use recommendation), or `reject-blocker`",
30
+ " (convert to a blocker and trigger slice replan)",
31
+ "",
32
+ "Note: disabling `phases.mid_execution_escalation` does NOT clear pending",
33
+ "escalations. If you need to drain them, re-enable the flag, resolve via",
34
+ "`/gsd escalate resolve`, then disable.",
35
+ ].join("\n");
36
+ }
37
+
38
+ function formatListEntries(
39
+ rows: ReturnType<typeof listActionableEscalations>,
40
+ basePath: string,
41
+ ): string {
42
+ if (rows.length === 0) return "No escalations.";
43
+ return rows.map((t) => {
44
+ const art = t.escalation_artifact_path ? readEscalationArtifact(t.escalation_artifact_path) : null;
45
+ const status = t.escalation_pending ? "PENDING (paused)" : t.escalation_awaiting_review ? "awaiting-review" : "resolved";
46
+ const question = art?.question ?? "(artifact missing)";
47
+ return ` ${t.slice_id}/${t.id} [${status}] ${question}`;
48
+ }).join("\n");
49
+ }
50
+
51
+ export async function handleEscalateCommand(
52
+ args: string,
53
+ ctx: ExtensionCommandContext,
54
+ pi: ExtensionAPI,
55
+ ): Promise<void> {
56
+ void pi;
57
+
58
+ const trimmed = args.trim();
59
+ if (trimmed === "" || trimmed === "help") {
60
+ ctx.ui.notify(helpMessage(), "info");
61
+ return;
62
+ }
63
+
64
+ const basePath = projectRoot();
65
+ const prefs = loadEffectiveGSDPreferences()?.preferences;
66
+ if (prefs?.phases?.mid_execution_escalation !== true) {
67
+ ctx.ui.notify(
68
+ "Escalation is off. Enable with `phases: { mid_execution_escalation: true }` in your PREFERENCES.md.",
69
+ "warning",
70
+ );
71
+ return;
72
+ }
73
+
74
+ const milestoneId = await getActiveMilestoneId(basePath);
75
+ if (!milestoneId) {
76
+ ctx.ui.notify("No active milestone — cannot list escalations.", "warning");
77
+ return;
78
+ }
79
+
80
+ // ── list ────────────────────────────────────────────────────────────────
81
+ if (trimmed === "list" || trimmed === "list --all" || trimmed === "--all") {
82
+ const includeAll = trimmed.includes("--all");
83
+ const rows = includeAll ? listAllEscalations(milestoneId) : listActionableEscalations(milestoneId);
84
+ const body = formatListEntries(rows, basePath);
85
+ ctx.ui.notify(
86
+ `${includeAll ? "All escalations" : "Actionable escalations"} for ${milestoneId}:\n${body}`,
87
+ "info",
88
+ );
89
+ return;
90
+ }
91
+
92
+ // Parse a possibly-slice-qualified task id: "Sxx/Tyy" or plain "Tyy".
93
+ // Returns { sliceId?, taskId }.
94
+ const parseTaskRef = (ref: string): { sliceId?: string; taskId: string } => {
95
+ const slash = ref.indexOf("/");
96
+ if (slash > 0) {
97
+ return { sliceId: ref.slice(0, slash), taskId: ref.slice(slash + 1) };
98
+ }
99
+ return { taskId: ref };
100
+ };
101
+
102
+ // Resolve a task ref to a single row, surfacing ambiguity when a bare task
103
+ // id matches more than one slice.
104
+ const locateRow = (ref: string): ReturnType<typeof listAllEscalations>[number] | "ambiguous" | "not-found" => {
105
+ const { sliceId, taskId } = parseTaskRef(ref);
106
+ const rows = listAllEscalations(milestoneId).filter(
107
+ (t) => t.id === taskId && (sliceId === undefined || t.slice_id === sliceId),
108
+ );
109
+ if (rows.length === 0) return "not-found";
110
+ if (rows.length > 1) return "ambiguous";
111
+ return rows[0]!;
112
+ };
113
+
114
+ // ── show <taskRef> ──────────────────────────────────────────────────────
115
+ if (trimmed.startsWith("show ")) {
116
+ const ref = trimmed.slice(5).trim();
117
+ const row = locateRow(ref);
118
+ if (row === "ambiguous") {
119
+ ctx.ui.notify(`Task ${ref} matches multiple slices. Use Sxx/Tyy format.`, "warning");
120
+ return;
121
+ }
122
+ if (row === "not-found" || !row.escalation_artifact_path) {
123
+ ctx.ui.notify(`No escalation found for ${ref} in ${milestoneId}.`, "warning");
124
+ return;
125
+ }
126
+ const art = readEscalationArtifact(row.escalation_artifact_path);
127
+ if (!art) {
128
+ ctx.ui.notify(`Escalation artifact at ${row.escalation_artifact_path} is missing or malformed.`, "error");
129
+ return;
130
+ }
131
+ ctx.ui.notify(formatEscalationForDisplay(art), "info");
132
+ return;
133
+ }
134
+
135
+ // ── resolve <taskRef> <choice> [rationale...] ───────────────────────────
136
+ if (trimmed.startsWith("resolve ")) {
137
+ const parts = trimmed.slice(8).trim().split(/\s+/);
138
+ const ref = parts[0];
139
+ const choice = parts[1];
140
+ const rationale = parts.slice(2).join(" ").trim();
141
+ if (!ref || !choice) {
142
+ ctx.ui.notify("Usage: /gsd escalate resolve <taskId|Sxx/Tyy> <choice> [rationale...]", "warning");
143
+ return;
144
+ }
145
+
146
+ const row = locateRow(ref);
147
+ if (row === "ambiguous") {
148
+ ctx.ui.notify(`Task ${ref} matches multiple slices. Use Sxx/Tyy format.`, "warning");
149
+ return;
150
+ }
151
+ if (row === "not-found") {
152
+ ctx.ui.notify(`No escalation found for ${ref} in ${milestoneId}.`, "warning");
153
+ return;
154
+ }
155
+ const taskId = row.id;
156
+
157
+ const result = resolveEscalation(basePath, milestoneId, row.slice_id, taskId, choice, rationale);
158
+ invalidateStateCache();
159
+
160
+ if (result.status !== "resolved" && result.status !== "rejected-to-blocker") {
161
+ ctx.ui.notify(result.message, result.status === "invalid-choice" ? "warning" : "error");
162
+ return;
163
+ }
164
+
165
+ // Persist the user's choice as a decision (only for resolved, not reject-blocker).
166
+ if (result.status === "resolved") {
167
+ try {
168
+ const art = row.escalation_artifact_path ? readEscalationArtifact(row.escalation_artifact_path) : null;
169
+ const scope = `${milestoneId}/${row.slice_id}/${taskId}`;
170
+ const decisionText = art?.question ?? `escalation on ${taskId}`;
171
+ const choiceLabel = choice === "accept"
172
+ ? `${art?.recommendation ?? "accepted"} (recommended)`
173
+ : (result.chosenOption?.label ?? choice);
174
+ const { id: decisionId } = await saveDecisionToDb({
175
+ scope,
176
+ decision: decisionText,
177
+ choice: choiceLabel,
178
+ rationale: rationale || result.chosenOption?.tradeoffs || "User-resolved escalation.",
179
+ made_by: "human",
180
+ source: "escalation",
181
+ when_context: `ADR-011 escalation resolved ${new Date().toISOString()}`,
182
+ }, basePath);
183
+
184
+ emitUokAuditEvent(basePath, buildAuditEnvelope({
185
+ traceId: `escalation:${milestoneId}:${row.slice_id}:${taskId}`,
186
+ category: "gate",
187
+ type: "escalation-decision-persisted",
188
+ payload: {
189
+ milestoneId,
190
+ sliceId: row.slice_id,
191
+ taskId,
192
+ decisionId,
193
+ choice,
194
+ },
195
+ }));
196
+
197
+ ctx.ui.notify(
198
+ `${result.message}\nDecision recorded as ${decisionId}. Run /gsd auto to continue.`,
199
+ "success",
200
+ );
201
+ } catch (decErr) {
202
+ ctx.ui.notify(
203
+ `${result.message}\nWARN: decision persistence failed: ${(decErr as Error).message}`,
204
+ "warning",
205
+ );
206
+ }
207
+ return;
208
+ }
209
+
210
+ // rejected-to-blocker path
211
+ ctx.ui.notify(`${result.message} Run /gsd auto to trigger the replan.`, "success");
212
+ return;
213
+ }
214
+
215
+ ctx.ui.notify(`Unknown subcommand. ${helpMessage()}`, "warning");
216
+ }
@@ -0,0 +1,229 @@
1
+ // GSD — /gsd onboarding command handler (re-entry, --resume, --reset, --step)
2
+ //
3
+ // Provides the discoverable re-entry point for the onboarding wizard. The
4
+ // first-run wizard in src/onboarding.ts is hidden behind shouldRunOnboarding;
5
+ // this handler lets users re-launch it on demand.
6
+
7
+ import type { ExtensionCommandContext } from "@gsd/pi-coding-agent"
8
+ import { AuthStorage } from "@gsd/pi-coding-agent"
9
+ import { homedir } from "node:os"
10
+ import { join } from "node:path"
11
+ import {
12
+ ONBOARDING_STEPS,
13
+ isValidStepId,
14
+ nearestResumeStep,
15
+ type OnboardingStepId,
16
+ } from "../../setup-catalog.js"
17
+ import {
18
+ isOnboardingComplete,
19
+ readOnboardingRecord,
20
+ resetOnboarding,
21
+ } from "../../onboarding-state.js"
22
+
23
+ // Inline auth path (mirrors src/app-paths.ts) — keep this module rootDir-clean
24
+ // for the resources tsconfig. Importing from src/ pulls files outside
25
+ // src/resources and breaks the build.
26
+ const AUTH_FILE_PATH = join(
27
+ process.env.GSD_CODING_AGENT_DIR ||
28
+ join(process.env.GSD_HOME || join(homedir(), ".gsd"), "agent"),
29
+ "auth.json",
30
+ )
31
+
32
+ /**
33
+ * Dynamic import shim for the first-run wizard.
34
+ *
35
+ * src/onboarding.ts lives outside the resources rootDir, so a static import
36
+ * pulls it into this tsconfig project and triggers TS6059. We resolve the
37
+ * specifier through a variable + opaque type so TS can't pull the file at
38
+ * compile time; the path resolves correctly at runtime via dist/onboarding.js.
39
+ */
40
+ type FirstRunWizardModule = {
41
+ runOnboarding: (storage: AuthStorage) => Promise<void>
42
+ runLlmStep: (...args: unknown[]) => Promise<unknown>
43
+ runWebSearchStep: (...args: unknown[]) => Promise<unknown>
44
+ runRemoteQuestionsStep: (...args: unknown[]) => Promise<unknown>
45
+ runToolKeysStep: (...args: unknown[]) => Promise<unknown>
46
+ }
47
+ async function loadFirstRunWizard(): Promise<FirstRunWizardModule> {
48
+ const specifier = "../../../../../onboarding.js"
49
+ return (await import(/* @vite-ignore */ specifier)) as FirstRunWizardModule
50
+ }
51
+
52
+ interface ParsedArgs {
53
+ resume: boolean
54
+ reset: boolean
55
+ step: string | null
56
+ stepValid: boolean | null
57
+ }
58
+
59
+ function parseArgs(raw: string): ParsedArgs {
60
+ const tokens = raw.split(/\s+/).filter(Boolean)
61
+ const out: ParsedArgs = { resume: false, reset: false, step: null, stepValid: null }
62
+ for (let i = 0; i < tokens.length; i++) {
63
+ const t = tokens[i]
64
+ if (t === "--resume" || t === "resume") out.resume = true
65
+ else if (t === "--reset" || t === "reset") out.reset = true
66
+ else if (t === "--step" || t === "step") {
67
+ const next = tokens[i + 1]
68
+ if (next) {
69
+ out.step = next
70
+ out.stepValid = isValidStepId(next)
71
+ i++
72
+ }
73
+ } else if (t.startsWith("--step=")) {
74
+ const v = t.slice(7)
75
+ out.step = v
76
+ out.stepValid = isValidStepId(v)
77
+ }
78
+ }
79
+ return out
80
+ }
81
+
82
+ async function getAuthStorage(): Promise<AuthStorage> {
83
+ return AuthStorage.create(AUTH_FILE_PATH)
84
+ }
85
+
86
+ async function runWholeWizard(ctx: ExtensionCommandContext, fromStep?: OnboardingStepId): Promise<void> {
87
+ const authStorage = await getAuthStorage()
88
+ // The first-run wizard ignores the resume hint today — it always walks the
89
+ // full sequence with skip prompts. We still mark completion at the end and
90
+ // record the resume hint for next time. This keeps the wizard linear and
91
+ // simple; per-step jump support comes via --step.
92
+ if (fromStep) {
93
+ ctx.ui.notify(
94
+ `Resuming from step: ${fromStep}. The wizard runs all remaining steps; press skip on any you've already configured.`,
95
+ "info",
96
+ )
97
+ }
98
+ const { runOnboarding } = await loadFirstRunWizard()
99
+ await runOnboarding(authStorage)
100
+ }
101
+
102
+ async function runSingleStep(ctx: ExtensionCommandContext, stepId: OnboardingStepId): Promise<void> {
103
+ const authStorage = await getAuthStorage()
104
+ const ob = await loadFirstRunWizard()
105
+ // Lazy-load clack + chalk via the same path the wizard uses
106
+ const p = await import("@clack/prompts")
107
+ const { default: chalk } = await import("chalk")
108
+ const pc = {
109
+ cyan: chalk.cyan, green: chalk.green, yellow: chalk.yellow,
110
+ dim: chalk.dim, bold: chalk.bold, red: chalk.red, reset: chalk.reset,
111
+ }
112
+
113
+ switch (stepId) {
114
+ case "llm":
115
+ await ob.runLlmStep(p as any, pc as any, authStorage)
116
+ return
117
+ case "search":
118
+ await ob.runWebSearchStep(p as any, pc as any, authStorage, false)
119
+ return
120
+ case "remote":
121
+ await ob.runRemoteQuestionsStep(p as any, pc as any, authStorage)
122
+ return
123
+ case "tool-keys":
124
+ await ob.runToolKeysStep(p as any, pc as any, authStorage)
125
+ return
126
+ case "model": {
127
+ // Delegate to /gsd model picker
128
+ const { handleCoreCommand } = await import("./core.js")
129
+ await handleCoreCommand("model", ctx)
130
+ return
131
+ }
132
+ case "prefs": {
133
+ const { ensurePreferencesFile, handlePrefsWizard } = await import("../../commands-prefs-wizard.js")
134
+ const { getGlobalGSDPreferencesPath } = await import("../../preferences.js")
135
+ await ensurePreferencesFile(getGlobalGSDPreferencesPath(), ctx, "global")
136
+ await handlePrefsWizard(ctx, "global")
137
+ return
138
+ }
139
+ case "doctor": {
140
+ // Best-effort: surface provider doctor results inline
141
+ try {
142
+ const { runProviderDoctor } = await import("../../doctor-providers.js") as any
143
+ if (typeof runProviderDoctor === "function") {
144
+ await runProviderDoctor(ctx)
145
+ return
146
+ }
147
+ } catch { /* fall through */ }
148
+ ctx.ui.notify("Run /gsd doctor to validate your setup.", "info")
149
+ return
150
+ }
151
+ case "skills": {
152
+ ctx.ui.notify("Skill install runs automatically during /gsd init. Use /gsd init or /skill manage.", "info")
153
+ return
154
+ }
155
+ case "project": {
156
+ const { handleCoreCommand } = await import("./core.js")
157
+ await handleCoreCommand("init", ctx)
158
+ return
159
+ }
160
+ }
161
+ }
162
+
163
+ function renderStatus(): string {
164
+ const r = readOnboardingRecord()
165
+ const lines: string[] = ["GSD Onboarding\n"]
166
+ if (r.completedAt) {
167
+ lines.push(` Completed: ${r.completedAt}`)
168
+ } else {
169
+ lines.push(` Status: not complete`)
170
+ }
171
+ if (r.lastResumePoint) lines.push(` Last step: ${r.lastResumePoint}`)
172
+ lines.push("")
173
+ lines.push(" Steps:")
174
+ for (const step of ONBOARDING_STEPS) {
175
+ const mark = r.completedSteps.includes(step.id)
176
+ ? "✓"
177
+ : r.skippedSteps.includes(step.id)
178
+ ? "↷"
179
+ : "○"
180
+ const reqTag = step.required ? " (required)" : ""
181
+ lines.push(` ${mark} ${step.id.padEnd(10)} — ${step.label}${reqTag}`)
182
+ }
183
+ return lines.join("\n")
184
+ }
185
+
186
+ export async function handleOnboarding(rawArgs: string, ctx: ExtensionCommandContext): Promise<void> {
187
+ const args = parseArgs(rawArgs.trim())
188
+
189
+ if (args.step !== null) {
190
+ if (!args.stepValid) {
191
+ const validIds = ONBOARDING_STEPS.map(s => s.id).join(", ")
192
+ ctx.ui.notify(`Unknown step "${args.step}". Valid: ${validIds}`, "warning")
193
+ return
194
+ }
195
+ await runSingleStep(ctx, args.step as OnboardingStepId)
196
+ return
197
+ }
198
+
199
+ if (args.reset) {
200
+ resetOnboarding()
201
+ ctx.ui.notify(
202
+ "Onboarding reset. Existing API keys/credentials are unchanged — manage them with /gsd keys.",
203
+ "info",
204
+ )
205
+ await runWholeWizard(ctx)
206
+ return
207
+ }
208
+
209
+ if (args.resume) {
210
+ const r = readOnboardingRecord()
211
+ const next = nearestResumeStep(r.lastResumePoint, r.completedSteps)
212
+ await runWholeWizard(ctx, next)
213
+ return
214
+ }
215
+
216
+ // No flags. If already complete, show status + offer choice.
217
+ if (isOnboardingComplete()) {
218
+ ctx.ui.notify(renderStatus(), "info")
219
+ ctx.ui.notify(
220
+ "Onboarding already complete. Use /gsd onboarding --reset to start over, or --step <name> to redo one section.",
221
+ "info",
222
+ )
223
+ return
224
+ }
225
+
226
+ await runWholeWizard(ctx)
227
+ }
228
+
229
+ export { renderStatus as renderOnboardingStatus }
@@ -6,6 +6,7 @@ import { handleConfig } from "../../commands-config.js";
6
6
  import { handleDoctor, handleCapture, handleKnowledge, handleRunHook, handleSkillHealth, handleSteer, handleTriage, handleUpdate } from "../../commands-handlers.js";
7
7
  import { handleInspect } from "../../commands-inspect.js";
8
8
  import { handleLogs } from "../../commands-logs.js";
9
+ import { handleDebug } from "../../commands-debug.js";
9
10
  import { handleCleanupBranches, handleCleanupSnapshots, handleSkip, handleCleanupProjects, handleCleanupWorktrees, handleRecover } from "../../commands-maintenance.js";
10
11
  import { handleExport } from "../../export.js";
11
12
  import { handleHistory } from "../../history.js";
@@ -42,6 +43,10 @@ export async function handleOpsCommand(trimmed: string, ctx: ExtensionCommandCon
42
43
  await handleLogs(trimmed.replace(/^logs\s*/, "").trim(), ctx);
43
44
  return true;
44
45
  }
46
+ if (trimmed === "debug" || trimmed.startsWith("debug ")) {
47
+ await handleDebug(trimmed.replace(/^debug\s*/, "").trim(), ctx, pi);
48
+ return true;
49
+ }
45
50
  if (trimmed === "forensics" || trimmed.startsWith("forensics ")) {
46
51
  const { handleForensics } = await import("../../forensics.js");
47
52
  await handleForensics(trimmed.replace(/^forensics\s*/, "").trim(), ctx, pi);
@@ -186,6 +191,11 @@ Examples:
186
191
  await handleNotificationsCommand(trimmed.replace(/^notifications\s*/, "").trim(), ctx, pi);
187
192
  return true;
188
193
  }
194
+ if (trimmed === "escalate" || trimmed.startsWith("escalate ")) {
195
+ const { handleEscalateCommand } = await import("./escalate.js");
196
+ await handleEscalateCommand(trimmed.replace(/^escalate\s*/, "").trim(), ctx, pi);
197
+ return true;
198
+ }
189
199
  if (trimmed === "inspect") {
190
200
  await handleInspect(ctx);
191
201
  return true;
@@ -241,5 +251,11 @@ Examples:
241
251
  await handleExtractLearnings(trimmed.replace(/^extract-learnings\s*/, "").trim(), ctx, pi);
242
252
  return true;
243
253
  }
254
+ if (trimmed === "scan" || trimmed.startsWith("scan ")) {
255
+ const { handleScan } = await import("../../commands-scan.js");
256
+ // \s* (not \s+) is intentional: handles both /gsd scan (no args) and /gsd scan --focus X
257
+ await handleScan(trimmed.replace(/^scan\s*/, "").trim(), ctx, pi);
258
+ return true;
259
+ }
244
260
  return false;
245
261
  }