gsd-pi 2.75.0 → 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 (824) 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/onboarding.d.ts +20 -1
  8. package/dist/onboarding.js +99 -39
  9. package/dist/resources/extensions/ask-user-questions.js +17 -5
  10. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  11. package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
  12. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +76 -4
  13. package/dist/resources/extensions/gsd/auto/detect-stuck.js +9 -0
  14. package/dist/resources/extensions/gsd/auto/loop.js +67 -4
  15. package/dist/resources/extensions/gsd/auto/phases.js +72 -47
  16. package/dist/resources/extensions/gsd/auto/resolve.js +1 -1
  17. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -1
  18. package/dist/resources/extensions/gsd/auto/session.js +5 -0
  19. package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
  20. package/dist/resources/extensions/gsd/auto-dashboard.js +37 -8
  21. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +8 -2
  22. package/dist/resources/extensions/gsd/auto-dispatch.js +120 -14
  23. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  24. package/dist/resources/extensions/gsd/auto-model-selection.js +14 -4
  25. package/dist/resources/extensions/gsd/auto-post-unit.js +10 -8
  26. package/dist/resources/extensions/gsd/auto-prompts.js +190 -46
  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 +71 -2
  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 +45 -23
  34. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +128 -0
  35. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
  36. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
  37. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
  38. package/dist/resources/extensions/gsd/bootstrap/system-context.js +17 -4
  39. package/dist/resources/extensions/gsd/commands/catalog.js +81 -9
  40. package/dist/resources/extensions/gsd/commands/handlers/core.js +64 -24
  41. package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
  42. package/dist/resources/extensions/gsd/commands/handlers/onboarding.js +159 -0
  43. package/dist/resources/extensions/gsd/commands/handlers/ops.js +21 -0
  44. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +228 -29
  45. package/dist/resources/extensions/gsd/commands-cmux.js +5 -2
  46. package/dist/resources/extensions/gsd/commands-config.js +5 -0
  47. package/dist/resources/extensions/gsd/commands-debug.js +388 -0
  48. package/dist/resources/extensions/gsd/commands-do.js +1 -0
  49. package/dist/resources/extensions/gsd/commands-extract-learnings.js +233 -75
  50. package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
  51. package/dist/resources/extensions/gsd/commands-memory.js +462 -0
  52. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +40 -12
  53. package/dist/resources/extensions/gsd/commands-scan.js +94 -0
  54. package/dist/resources/extensions/gsd/commands-workflow-templates.js +101 -2
  55. package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
  56. package/dist/resources/extensions/gsd/db-writer.js +1 -0
  57. package/dist/resources/extensions/gsd/debug-session-store.js +238 -0
  58. package/dist/resources/extensions/gsd/definition-loader.js +7 -0
  59. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  60. package/dist/resources/extensions/gsd/doctor-environment.js +2 -1
  61. package/dist/resources/extensions/gsd/doctor-git-checks.js +27 -3
  62. package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
  63. package/dist/resources/extensions/gsd/doctor-providers.js +48 -20
  64. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +22 -4
  65. package/dist/resources/extensions/gsd/doctor.js +7 -1
  66. package/dist/resources/extensions/gsd/error-classifier.js +6 -3
  67. package/dist/resources/extensions/gsd/escalation.js +321 -0
  68. package/dist/resources/extensions/gsd/forensics.js +26 -29
  69. package/dist/resources/extensions/gsd/git-service.js +0 -1
  70. package/dist/resources/extensions/gsd/graph.js +26 -2
  71. package/dist/resources/extensions/gsd/gsd-db.js +490 -32
  72. package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
  73. package/dist/resources/extensions/gsd/health-widget.js +7 -4
  74. package/dist/resources/extensions/gsd/init-wizard.js +86 -45
  75. package/dist/resources/extensions/gsd/markdown-renderer.js +5 -5
  76. package/dist/resources/extensions/gsd/memory-embeddings.js +219 -0
  77. package/dist/resources/extensions/gsd/memory-extractor.js +78 -27
  78. package/dist/resources/extensions/gsd/memory-ingest.js +218 -0
  79. package/dist/resources/extensions/gsd/memory-relations.js +189 -0
  80. package/dist/resources/extensions/gsd/memory-source-store.js +113 -0
  81. package/dist/resources/extensions/gsd/memory-store.js +299 -6
  82. package/dist/resources/extensions/gsd/metrics.js +1 -0
  83. package/dist/resources/extensions/gsd/model-cost-table.js +3 -1
  84. package/dist/resources/extensions/gsd/model-router.js +16 -6
  85. package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
  86. package/dist/resources/extensions/gsd/notification-overlay.js +7 -22
  87. package/dist/resources/extensions/gsd/notification-widget.js +24 -39
  88. package/dist/resources/extensions/gsd/notifications.js +4 -0
  89. package/dist/resources/extensions/gsd/onboarding-state.js +133 -0
  90. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
  91. package/dist/resources/extensions/gsd/pre-execution-checks.js +105 -8
  92. package/dist/resources/extensions/gsd/preferences-models.js +1 -0
  93. package/dist/resources/extensions/gsd/preferences-types.js +2 -1
  94. package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
  95. package/dist/resources/extensions/gsd/preferences.js +10 -10
  96. package/dist/resources/extensions/gsd/prompts/add-tests.md +1 -0
  97. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
  98. package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
  99. package/dist/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  100. package/dist/resources/extensions/gsd/prompts/execute-task.md +13 -1
  101. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  102. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -0
  103. package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  104. package/dist/resources/extensions/gsd/prompts/scan.md +79 -0
  105. package/dist/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  106. package/dist/resources/extensions/gsd/python-resolver.js +70 -0
  107. package/dist/resources/extensions/gsd/run-manager.js +37 -17
  108. package/dist/resources/extensions/gsd/setup-catalog.js +75 -0
  109. package/dist/resources/extensions/gsd/state.js +47 -3
  110. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  111. package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
  112. package/dist/resources/extensions/gsd/tools/memory-tools.js +306 -0
  113. package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
  114. package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
  115. package/dist/resources/extensions/gsd/tools/skip-slice.js +78 -0
  116. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +14 -0
  117. package/dist/resources/extensions/gsd/uok/flags.js +7 -7
  118. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  119. package/dist/resources/extensions/gsd/verification-gate.js +2 -1
  120. package/dist/resources/extensions/gsd/workflow-dispatch.js +64 -0
  121. package/dist/resources/extensions/gsd/workflow-install.js +327 -0
  122. package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
  123. package/dist/resources/extensions/gsd/workflow-mcp.js +1 -6
  124. package/dist/resources/extensions/gsd/workflow-plugins.js +346 -0
  125. package/dist/resources/extensions/gsd/workflow-projections.js +17 -15
  126. package/dist/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  127. package/dist/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  128. package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  129. package/dist/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  130. package/dist/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  131. package/dist/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  132. package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  133. package/dist/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  134. package/dist/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  135. package/dist/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  136. package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  137. package/dist/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  138. package/dist/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  139. package/dist/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  140. package/dist/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  141. package/dist/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  142. package/dist/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  143. package/dist/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  144. package/dist/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  145. package/dist/resources/extensions/gsd/workflow-templates/release.md +118 -0
  146. package/dist/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  147. package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  148. package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  149. package/dist/resources/extensions/gsd/workflow-templates/spike.md +1 -0
  150. package/dist/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  151. package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
  152. package/dist/resources/extensions/remote-questions/commands.js +380 -0
  153. package/dist/resources/extensions/remote-questions/manager.js +39 -5
  154. package/dist/resources/extensions/remote-questions/telegram-adapter.js +79 -4
  155. package/dist/resources/extensions/search-the-web/command-search-provider.js +4 -1
  156. package/dist/resources/extensions/search-the-web/native-search.js +13 -2
  157. package/dist/resources/extensions/shared/interview-ui.js +189 -1
  158. package/dist/resources/extensions/shared/layout-utils.js +17 -0
  159. package/dist/resources/extensions/shared/rtk-shared.js +47 -0
  160. package/dist/resources/extensions/shared/rtk.js +3 -46
  161. package/dist/resources/skills/create-workflow/SKILL.md +33 -6
  162. package/dist/rtk-shared.d.ts +10 -0
  163. package/dist/rtk-shared.js +47 -0
  164. package/dist/rtk.d.ts +2 -6
  165. package/dist/rtk.js +3 -48
  166. package/dist/shared/workspace-types.d.ts +52 -0
  167. package/dist/shared/workspace-types.js +1 -0
  168. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  169. package/dist/update-check.d.ts +10 -0
  170. package/dist/update-check.js +24 -3
  171. package/dist/web/standalone/.next/BUILD_ID +1 -1
  172. package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
  173. package/dist/web/standalone/.next/build-manifest.json +3 -3
  174. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  175. package/dist/web/standalone/.next/required-server-files.json +1 -1
  176. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  177. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  178. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  179. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  180. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  181. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  182. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  183. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  184. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  185. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  186. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  187. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  188. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  189. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  190. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  191. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  192. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  193. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  194. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  196. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  198. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  200. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  201. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  202. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  204. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  206. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  207. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  208. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  209. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  210. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  212. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  213. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  214. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  216. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  218. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  219. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  220. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  221. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  222. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  223. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  224. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  225. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  226. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  227. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  228. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  229. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  230. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  231. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  232. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  233. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  234. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  235. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  236. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  237. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  238. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  239. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  240. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  241. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  242. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  243. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  244. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  246. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  247. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  248. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  249. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  250. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  251. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  252. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  253. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  254. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  256. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  258. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  259. package/dist/web/standalone/.next/server/app/index.html +1 -1
  260. package/dist/web/standalone/.next/server/app/index.rsc +3 -3
  261. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  262. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  263. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  264. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  265. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  266. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  267. package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
  268. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  269. package/dist/web/standalone/.next/server/chunks/7461.js +1 -0
  270. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  271. package/dist/web/standalone/.next/server/middleware-manifest.json +1 -1
  272. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  273. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  274. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  275. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +9 -0
  276. package/dist/web/standalone/.next/static/chunks/{2008.71ee9230ad78df21.js → 3621.fc7480022c972438.js} +2 -2
  277. package/dist/web/standalone/.next/static/chunks/app/{page-7115e62689b5fd84.js → page-151349214571e2b6.js} +1 -1
  278. package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-5fc74f13a25fa1bb.js} +1 -1
  279. package/dist/web/standalone/.next/static/css/632cd626b1731d88.css +1 -0
  280. package/dist/web/standalone/server.js +1 -1
  281. package/dist/welcome-screen.js +48 -24
  282. package/dist/wizard.js +2 -2
  283. package/dist/worktree-cli.d.ts +6 -5
  284. package/dist/worktree-cli.js +23 -7
  285. package/package.json +3 -3
  286. package/packages/daemon/package.json +2 -2
  287. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  288. package/packages/mcp-server/dist/server.js +12 -10
  289. package/packages/mcp-server/dist/server.js.map +1 -1
  290. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
  291. package/packages/mcp-server/dist/session-manager.js +8 -1
  292. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  293. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -0
  294. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  295. package/packages/mcp-server/dist/workflow-tools.js +207 -71
  296. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  297. package/packages/mcp-server/package.json +2 -2
  298. package/packages/mcp-server/src/mcp-server.test.ts +40 -4
  299. package/packages/mcp-server/src/server.ts +12 -10
  300. package/packages/mcp-server/src/session-manager.ts +10 -3
  301. package/packages/mcp-server/src/workflow-tools.test.ts +346 -1
  302. package/packages/mcp-server/src/workflow-tools.ts +228 -75
  303. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  304. package/packages/native/package.json +1 -1
  305. package/packages/native/tsconfig.tsbuildinfo +1 -1
  306. package/packages/pi-agent-core/package.json +1 -1
  307. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  308. package/packages/pi-ai/dist/index.d.ts +1 -0
  309. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  310. package/packages/pi-ai/dist/index.js +1 -0
  311. package/packages/pi-ai/dist/index.js.map +1 -1
  312. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
  313. package/packages/pi-ai/dist/models/capability-patches.js +3 -2
  314. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
  315. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +68 -0
  316. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -1
  317. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +68 -0
  318. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -1
  319. package/packages/pi-ai/dist/models/generated/anthropic.d.ts +17 -0
  320. package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -1
  321. package/packages/pi-ai/dist/models/generated/anthropic.js +17 -0
  322. package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -1
  323. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +17 -0
  324. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -1
  325. package/packages/pi-ai/dist/models/generated/google-antigravity.js +17 -0
  326. package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -1
  327. package/packages/pi-ai/dist/models/generated/groq.d.ts +0 -153
  328. package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -1
  329. package/packages/pi-ai/dist/models/generated/groq.js +0 -153
  330. package/packages/pi-ai/dist/models/generated/groq.js.map +1 -1
  331. package/packages/pi-ai/dist/models/generated/index.d.ts +136 -153
  332. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  333. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  334. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  335. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  336. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  337. package/packages/pi-ai/dist/models/generated/openrouter.d.ts +17 -0
  338. package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -1
  339. package/packages/pi-ai/dist/models/generated/openrouter.js +17 -0
  340. package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -1
  341. package/packages/pi-ai/dist/models.generated.test.js +17 -0
  342. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  343. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
  344. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  345. package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -6
  346. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  347. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
  348. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
  349. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
  350. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
  351. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
  352. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  353. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +20 -1
  354. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  355. package/packages/pi-ai/dist/providers/anthropic-shared.js +32 -2
  356. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  357. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +12 -1
  358. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
  359. package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
  360. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  361. package/packages/pi-ai/dist/providers/anthropic.js +18 -1
  362. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  363. package/packages/pi-ai/dist/providers/api-family.d.ts +27 -0
  364. package/packages/pi-ai/dist/providers/api-family.d.ts.map +1 -0
  365. package/packages/pi-ai/dist/providers/api-family.js +47 -0
  366. package/packages/pi-ai/dist/providers/api-family.js.map +1 -0
  367. package/packages/pi-ai/dist/providers/api-family.test.d.ts +2 -0
  368. package/packages/pi-ai/dist/providers/api-family.test.d.ts.map +1 -0
  369. package/packages/pi-ai/dist/providers/api-family.test.js +101 -0
  370. package/packages/pi-ai/dist/providers/api-family.test.js.map +1 -0
  371. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  372. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
  373. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  374. package/packages/pi-ai/package.json +2 -2
  375. package/packages/pi-ai/scripts/generate-models.ts +50 -0
  376. package/packages/pi-ai/src/index.ts +1 -0
  377. package/packages/pi-ai/src/models/capability-patches.ts +5 -2
  378. package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +68 -0
  379. package/packages/pi-ai/src/models/generated/anthropic.ts +17 -0
  380. package/packages/pi-ai/src/models/generated/google-antigravity.ts +17 -0
  381. package/packages/pi-ai/src/models/generated/groq.ts +0 -153
  382. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  383. package/packages/pi-ai/src/models/generated/openrouter.ts +17 -0
  384. package/packages/pi-ai/src/models.generated.test.ts +17 -0
  385. package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
  386. package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -7
  387. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
  388. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +15 -1
  389. package/packages/pi-ai/src/providers/anthropic-shared.ts +36 -3
  390. package/packages/pi-ai/src/providers/anthropic.ts +19 -1
  391. package/packages/pi-ai/src/providers/api-family.test.ts +129 -0
  392. package/packages/pi-ai/src/providers/api-family.ts +57 -0
  393. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
  394. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  395. package/packages/pi-coding-agent/dist/cli/args.d.ts +6 -0
  396. package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
  397. package/packages/pi-coding-agent/dist/cli/args.js +14 -4
  398. package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
  399. package/packages/pi-coding-agent/dist/cli/args.test.d.ts +2 -0
  400. package/packages/pi-coding-agent/dist/cli/args.test.d.ts.map +1 -0
  401. package/packages/pi-coding-agent/dist/cli/args.test.js +38 -0
  402. package/packages/pi-coding-agent/dist/cli/args.test.js.map +1 -0
  403. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts +2 -0
  404. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts.map +1 -0
  405. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +38 -0
  406. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -0
  407. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +14 -0
  408. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  409. package/packages/pi-coding-agent/dist/core/auth-storage.js +34 -0
  410. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  411. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +74 -0
  412. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  413. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
  414. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  415. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -0
  416. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  417. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  418. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +2 -1
  419. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  420. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  421. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
  422. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  423. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  424. package/packages/pi-coding-agent/dist/core/retry-handler.js +4 -1
  425. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  426. package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -0
  427. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  428. package/packages/pi-coding-agent/dist/core/sdk.js +39 -1
  429. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  430. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +2 -2
  431. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  432. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  433. package/packages/pi-coding-agent/dist/main.js +3 -0
  434. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  435. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  436. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
  437. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  438. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  439. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
  440. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  441. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
  442. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  443. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
  444. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  445. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  446. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  447. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +77 -0
  448. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  449. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -66
  450. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  451. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -75
  452. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  453. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +1 -1
  454. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  455. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +192 -24
  456. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  457. package/packages/pi-coding-agent/package.json +1 -1
  458. package/packages/pi-coding-agent/src/cli/args.test.ts +44 -0
  459. package/packages/pi-coding-agent/src/cli/args.ts +21 -6
  460. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +56 -0
  461. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +83 -0
  462. package/packages/pi-coding-agent/src/core/auth-storage.ts +35 -0
  463. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
  464. package/packages/pi-coding-agent/src/core/extensions/runner.ts +4 -1
  465. package/packages/pi-coding-agent/src/core/extensions/types.ts +2 -2
  466. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
  467. package/packages/pi-coding-agent/src/core/retry-handler.ts +4 -1
  468. package/packages/pi-coding-agent/src/core/sdk.ts +58 -1
  469. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +2 -2
  470. package/packages/pi-coding-agent/src/main.ts +4 -0
  471. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
  472. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
  473. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
  474. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +83 -0
  475. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +2 -83
  476. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +208 -27
  477. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  478. package/packages/pi-tui/package.json +1 -1
  479. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  480. package/packages/rpc-client/package.json +1 -1
  481. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  482. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  483. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  484. package/pkg/dist/modes/interactive/theme/theme-schema.js +77 -0
  485. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  486. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -66
  487. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  488. package/pkg/dist/modes/interactive/theme/theme.js +1 -75
  489. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  490. package/pkg/dist/modes/interactive/theme/themes.d.ts +1 -1
  491. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  492. package/pkg/dist/modes/interactive/theme/themes.js +192 -24
  493. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  494. package/pkg/package.json +1 -1
  495. package/src/resources/extensions/ask-user-questions.ts +24 -6
  496. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  497. package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
  498. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +94 -4
  499. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +84 -0
  500. package/src/resources/extensions/gsd/auto/detect-stuck.ts +10 -0
  501. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -9
  502. package/src/resources/extensions/gsd/auto/loop.ts +109 -3
  503. package/src/resources/extensions/gsd/auto/phases.ts +97 -60
  504. package/src/resources/extensions/gsd/auto/resolve.ts +1 -1
  505. package/src/resources/extensions/gsd/auto/run-unit.ts +11 -1
  506. package/src/resources/extensions/gsd/auto/session.ts +7 -0
  507. package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
  508. package/src/resources/extensions/gsd/auto-dashboard.ts +46 -5
  509. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
  510. package/src/resources/extensions/gsd/auto-dispatch.ts +141 -9
  511. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  512. package/src/resources/extensions/gsd/auto-model-selection.ts +17 -4
  513. package/src/resources/extensions/gsd/auto-post-unit.ts +10 -8
  514. package/src/resources/extensions/gsd/auto-prompts.ts +232 -47
  515. package/src/resources/extensions/gsd/auto-recovery.ts +63 -1
  516. package/src/resources/extensions/gsd/auto-start.ts +8 -6
  517. package/src/resources/extensions/gsd/auto-verification.ts +3 -3
  518. package/src/resources/extensions/gsd/auto-worktree.ts +81 -1
  519. package/src/resources/extensions/gsd/auto.ts +61 -28
  520. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
  521. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +46 -24
  522. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +158 -0
  523. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
  524. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
  525. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
  526. package/src/resources/extensions/gsd/bootstrap/system-context.ts +20 -4
  527. package/src/resources/extensions/gsd/commands/catalog.ts +74 -9
  528. package/src/resources/extensions/gsd/commands/handlers/core.ts +69 -27
  529. package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
  530. package/src/resources/extensions/gsd/commands/handlers/onboarding.ts +196 -0
  531. package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -0
  532. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +279 -29
  533. package/src/resources/extensions/gsd/commands-cmux.ts +6 -2
  534. package/src/resources/extensions/gsd/commands-config.ts +10 -0
  535. package/src/resources/extensions/gsd/commands-debug.ts +484 -0
  536. package/src/resources/extensions/gsd/commands-do.ts +1 -0
  537. package/src/resources/extensions/gsd/commands-extract-learnings.ts +295 -76
  538. package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
  539. package/src/resources/extensions/gsd/commands-memory.ts +551 -0
  540. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +49 -12
  541. package/src/resources/extensions/gsd/commands-scan.ts +125 -0
  542. package/src/resources/extensions/gsd/commands-workflow-templates.ts +129 -2
  543. package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
  544. package/src/resources/extensions/gsd/db-writer.ts +3 -0
  545. package/src/resources/extensions/gsd/debug-session-store.ts +377 -0
  546. package/src/resources/extensions/gsd/definition-loader.ts +7 -0
  547. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  548. package/src/resources/extensions/gsd/doctor-environment.ts +2 -1
  549. package/src/resources/extensions/gsd/doctor-git-checks.ts +28 -3
  550. package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
  551. package/src/resources/extensions/gsd/doctor-providers.ts +52 -22
  552. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +23 -4
  553. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  554. package/src/resources/extensions/gsd/doctor.ts +7 -1
  555. package/src/resources/extensions/gsd/error-classifier.ts +6 -3
  556. package/src/resources/extensions/gsd/escalation.ts +367 -0
  557. package/src/resources/extensions/gsd/forensics.ts +25 -29
  558. package/src/resources/extensions/gsd/git-service.ts +0 -1
  559. package/src/resources/extensions/gsd/graph.ts +33 -3
  560. package/src/resources/extensions/gsd/gsd-db.ts +578 -32
  561. package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
  562. package/src/resources/extensions/gsd/health-widget.ts +7 -3
  563. package/src/resources/extensions/gsd/init-wizard.ts +87 -54
  564. package/src/resources/extensions/gsd/markdown-renderer.ts +5 -5
  565. package/src/resources/extensions/gsd/memory-embeddings.ts +235 -0
  566. package/src/resources/extensions/gsd/memory-extractor.ts +100 -34
  567. package/src/resources/extensions/gsd/memory-ingest.ts +286 -0
  568. package/src/resources/extensions/gsd/memory-relations.ts +240 -0
  569. package/src/resources/extensions/gsd/memory-source-store.ts +138 -0
  570. package/src/resources/extensions/gsd/memory-store.ts +351 -7
  571. package/src/resources/extensions/gsd/metrics.ts +1 -0
  572. package/src/resources/extensions/gsd/model-cost-table.ts +3 -1
  573. package/src/resources/extensions/gsd/model-router.ts +25 -6
  574. package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
  575. package/src/resources/extensions/gsd/notification-overlay.ts +9 -19
  576. package/src/resources/extensions/gsd/notification-widget.ts +25 -43
  577. package/src/resources/extensions/gsd/notifications.ts +6 -0
  578. package/src/resources/extensions/gsd/onboarding-state.ts +146 -0
  579. package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
  580. package/src/resources/extensions/gsd/pre-execution-checks.ts +106 -12
  581. package/src/resources/extensions/gsd/preferences-models.ts +1 -0
  582. package/src/resources/extensions/gsd/preferences-types.ts +10 -2
  583. package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
  584. package/src/resources/extensions/gsd/preferences.ts +10 -10
  585. package/src/resources/extensions/gsd/prompts/add-tests.md +1 -0
  586. package/src/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
  587. package/src/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
  588. package/src/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  589. package/src/resources/extensions/gsd/prompts/execute-task.md +13 -1
  590. package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  591. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -0
  592. package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  593. package/src/resources/extensions/gsd/prompts/scan.md +79 -0
  594. package/src/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  595. package/src/resources/extensions/gsd/python-resolver.ts +76 -0
  596. package/src/resources/extensions/gsd/run-manager.ts +53 -19
  597. package/src/resources/extensions/gsd/setup-catalog.ts +105 -0
  598. package/src/resources/extensions/gsd/state.ts +50 -2
  599. package/src/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  600. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -34
  601. package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
  602. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +49 -0
  603. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +45 -31
  604. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +63 -0
  605. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +12 -0
  606. package/src/resources/extensions/gsd/tests/auto-prompts-fallback.test.ts +35 -0
  607. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
  608. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
  609. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +39 -0
  610. package/src/resources/extensions/gsd/tests/commands-do.test.ts +48 -0
  611. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +333 -21
  612. package/src/resources/extensions/gsd/tests/commands-scan.test.ts +351 -0
  613. package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +8 -6
  614. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +6 -8
  615. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  616. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
  617. package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +905 -0
  618. package/src/resources/extensions/gsd/tests/debug-command-lifecycle.integration.test.ts +1229 -0
  619. package/src/resources/extensions/gsd/tests/debug-session-store.test.ts +565 -0
  620. package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +64 -0
  621. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +67 -0
  622. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +62 -18
  623. package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
  624. package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
  625. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +29 -12
  626. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
  627. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +74 -0
  628. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +0 -4
  629. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
  630. package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
  631. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +190 -0
  632. package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +79 -0
  633. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
  634. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
  635. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +68 -1
  636. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +109 -11
  637. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +51 -0
  638. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +2 -2
  639. package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
  640. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +171 -1
  641. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  642. package/src/resources/extensions/gsd/tests/memory-embeddings.test.ts +213 -0
  643. package/src/resources/extensions/gsd/tests/memory-ingest.test.ts +153 -0
  644. package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +107 -0
  645. package/src/resources/extensions/gsd/tests/memory-relations.test.ts +175 -0
  646. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  647. package/src/resources/extensions/gsd/tests/memory-tools.test.ts +295 -0
  648. package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
  649. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
  650. package/src/resources/extensions/gsd/tests/model-router.test.ts +51 -1
  651. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
  652. package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +56 -37
  653. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
  654. package/src/resources/extensions/gsd/tests/onboarding-state.test.ts +105 -0
  655. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +114 -0
  656. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +4 -5
  657. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
  658. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
  659. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +341 -6
  660. package/src/resources/extensions/gsd/tests/preferences.test.ts +69 -1
  661. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
  662. package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +11 -2
  663. package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
  664. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +159 -8
  665. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
  666. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +1 -1
  667. package/src/resources/extensions/gsd/tests/prompts-no-gitignored-test-refs.test.ts +56 -0
  668. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +33 -0
  669. package/src/resources/extensions/gsd/tests/python-resolver.test.ts +131 -0
  670. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
  671. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +107 -0
  672. package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
  673. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
  674. package/src/resources/extensions/gsd/tests/skip-slice-cascades-tasks.test.ts +125 -0
  675. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
  676. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +54 -0
  677. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
  678. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +15 -0
  679. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
  680. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
  681. package/src/resources/extensions/gsd/tests/uok-flags.test.ts +31 -1
  682. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +166 -0
  683. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +35 -0
  684. package/src/resources/extensions/gsd/tests/workflow-install.test.ts +113 -0
  685. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +15 -6
  686. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
  687. package/src/resources/extensions/gsd/tests/workflow-plugins.test.ts +310 -0
  688. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
  689. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +8 -2
  690. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +97 -0
  691. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
  692. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
  693. package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
  694. package/src/resources/extensions/gsd/tools/memory-tools.ts +380 -0
  695. package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
  696. package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
  697. package/src/resources/extensions/gsd/tools/skip-slice.ts +133 -0
  698. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +14 -0
  699. package/src/resources/extensions/gsd/types.ts +62 -0
  700. package/src/resources/extensions/gsd/unit-runtime.ts +1 -0
  701. package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
  702. package/src/resources/extensions/gsd/uok/flags.ts +7 -7
  703. package/src/resources/extensions/gsd/uok/kernel.ts +16 -4
  704. package/src/resources/extensions/gsd/verification-gate.ts +2 -1
  705. package/src/resources/extensions/gsd/workflow-dispatch.ts +106 -0
  706. package/src/resources/extensions/gsd/workflow-install.ts +423 -0
  707. package/src/resources/extensions/gsd/workflow-logger.ts +3 -1
  708. package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
  709. package/src/resources/extensions/gsd/workflow-mcp.ts +1 -6
  710. package/src/resources/extensions/gsd/workflow-plugins.ts +403 -0
  711. package/src/resources/extensions/gsd/workflow-projections.ts +18 -16
  712. package/src/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  713. package/src/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  714. package/src/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  715. package/src/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  716. package/src/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  717. package/src/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  718. package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  719. package/src/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  720. package/src/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  721. package/src/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  722. package/src/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  723. package/src/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  724. package/src/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  725. package/src/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  726. package/src/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  727. package/src/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  728. package/src/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  729. package/src/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  730. package/src/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  731. package/src/resources/extensions/gsd/workflow-templates/release.md +118 -0
  732. package/src/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  733. package/src/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  734. package/src/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  735. package/src/resources/extensions/gsd/workflow-templates/spike.md +1 -0
  736. package/src/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  737. package/src/resources/extensions/gsd/workflow-templates.ts +7 -0
  738. package/src/resources/extensions/gsd/workspace-index.ts +9 -4
  739. package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
  740. package/src/resources/extensions/remote-questions/commands.ts +480 -0
  741. package/src/resources/extensions/remote-questions/manager.ts +49 -4
  742. package/src/resources/extensions/remote-questions/telegram-adapter.ts +86 -4
  743. package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +246 -0
  744. package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
  745. package/src/resources/extensions/remote-questions/tests/telegram-commands.test.ts +267 -0
  746. package/src/resources/extensions/search-the-web/command-search-provider.ts +4 -1
  747. package/src/resources/extensions/search-the-web/native-search.ts +13 -3
  748. package/src/resources/extensions/shared/interview-ui.ts +195 -1
  749. package/src/resources/extensions/shared/layout-utils.ts +26 -0
  750. package/src/resources/extensions/shared/rtk-shared.ts +58 -0
  751. package/src/resources/extensions/shared/rtk.ts +12 -52
  752. package/src/resources/extensions/shared/tests/interview-preview.test.ts +177 -0
  753. package/src/resources/extensions/shared/tests/preview-layout.test.ts +120 -0
  754. package/src/resources/skills/create-workflow/SKILL.md +33 -6
  755. package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +0 -9
  756. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  757. package/packages/native/dist/ps/types.d.ts +0 -5
  758. package/packages/native/dist/ps/types.js +0 -2
  759. package/packages/native/src/ps/types.ts +0 -5
  760. package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +0 -201
  761. package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +0 -9
  762. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -762
  763. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
  764. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
  765. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
  766. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
  767. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -230
  768. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -87
  769. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -32
  770. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -169
  771. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +0 -21
  772. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +0 -88
  773. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
  774. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
  775. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
  776. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
  777. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +0 -8
  778. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +0 -41
  779. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +0 -21
  780. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
  781. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
  782. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
  783. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
  784. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
  785. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
  786. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -46
  787. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -24
  788. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -12
  789. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -63
  790. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +0 -13
  791. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +0 -12
  792. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
  793. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
  794. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
  795. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
  796. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +0 -5
  797. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +0 -6
  798. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +0 -13
  799. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -8
  800. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
  801. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
  802. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
  803. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
  804. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -46
  805. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -24
  806. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -12
  807. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -63
  808. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +0 -13
  809. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +0 -12
  810. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
  811. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
  812. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
  813. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
  814. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +0 -5
  815. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +0 -6
  816. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +0 -13
  817. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -8
  818. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
  819. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
  820. package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +0 -68
  821. package/packages/pi-ai/oauth.d.ts +0 -1
  822. package/packages/pi-ai/oauth.js +0 -1
  823. /package/dist/web/standalone/.next/static/{prkokVQFxWtUVIku57_0z → ssX7BLv3Dw9Fb4CtrCGeR}/_buildManifest.js +0 -0
  824. /package/dist/web/standalone/.next/static/{prkokVQFxWtUVIku57_0z → ssX7BLv3Dw9Fb4CtrCGeR}/_ssgManifest.js +0 -0
@@ -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-'],
@@ -118,6 +112,25 @@ function openBrowser(url) {
118
112
  execFile(cmd, [url], () => { });
119
113
  }
120
114
  }
115
+ /**
116
+ * Persist the selected default provider to settings.json.
117
+ *
118
+ * This ensures first startup after onboarding prefers the provider the user
119
+ * just configured, instead of falling back to the first "available" provider
120
+ * (which can be influenced by unrelated env auth like AWS_PROFILE).
121
+ */
122
+ function persistDefaultProvider(providerId) {
123
+ const settingsPath = join(agentDir, 'settings.json');
124
+ try {
125
+ const raw = existsSync(settingsPath) ? JSON.parse(readFileSync(settingsPath, 'utf-8')) : {};
126
+ raw.defaultProvider = providerId;
127
+ mkdirSync(dirname(settingsPath), { recursive: true });
128
+ writeFileSync(settingsPath, JSON.stringify(raw, null, 2), 'utf-8');
129
+ }
130
+ catch {
131
+ // Non-fatal: startup fallback logic will still run.
132
+ }
133
+ }
121
134
  /** Sentinel returned by runStep when the user cancels — tells the caller
122
135
  * to abort the entire wizard. */
123
136
  const STEP_CANCELLED = Symbol('step-cancelled');
@@ -159,6 +172,10 @@ async function runStep(p, warnLabel, fn, opts = {}) {
159
172
  export function shouldRunOnboarding(authStorage, settingsDefaultProvider) {
160
173
  if (!process.stdin.isTTY)
161
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;
162
179
  if (settingsDefaultProvider)
163
180
  return false;
164
181
  // Check if any LLM provider has credentials
@@ -177,7 +194,7 @@ export function shouldRunOnboarding(authStorage, settingsDefaultProvider) {
177
194
  * All steps are skippable. All errors are recoverable.
178
195
  * Writes status to stderr during execution.
179
196
  */
180
- export async function runOnboarding(authStorage) {
197
+ export async function runOnboarding(authStorage, opts = {}) {
181
198
  let p;
182
199
  let pc;
183
200
  try {
@@ -190,31 +207,62 @@ export async function runOnboarding(authStorage) {
190
207
  return;
191
208
  }
192
209
  // ── Intro ─────────────────────────────────────────────────────────────────
193
- process.stderr.write(renderLogo(pc.cyan));
194
- 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 = [];
195
215
  // ── LLM Provider Selection ────────────────────────────────────────────────
196
216
  const llmResult = await runStep(p, 'LLM setup failed', () => runLlmStep(p, pc, authStorage), {
197
- cancelMessage: 'Setup cancelled — you can run /login inside GSD later.',
217
+ cancelMessage: 'Setup cancelled — you can run /gsd onboarding --resume later.',
198
218
  errorInfo: 'You can configure your LLM provider later with /login inside GSD.',
199
219
  });
200
220
  if (llmResult === STEP_CANCELLED)
201
221
  return;
202
222
  const llmConfigured = llmResult ?? false;
223
+ if (llmConfigured) {
224
+ markStepCompleted('llm');
225
+ completedSteps.push('llm');
226
+ }
227
+ else {
228
+ markStepSkipped('llm');
229
+ }
203
230
  // ── Web Search Provider ──────────────────────────────────────────────────
204
231
  const searchResult = await runStep(p, 'Web search setup failed', () => runWebSearchStep(p, pc, authStorage, llmConfigured));
205
232
  if (searchResult === STEP_CANCELLED)
206
233
  return;
207
234
  const searchConfigured = searchResult;
235
+ if (searchConfigured) {
236
+ markStepCompleted('search');
237
+ completedSteps.push('search');
238
+ }
239
+ else {
240
+ markStepSkipped('search');
241
+ }
208
242
  // ── Remote Questions ─────────────────────────────────────────────────────
209
243
  const remoteResult = await runStep(p, 'Remote questions setup failed', () => runRemoteQuestionsStep(p, pc, authStorage));
210
244
  if (remoteResult === STEP_CANCELLED)
211
245
  return;
212
246
  const remoteConfigured = remoteResult;
247
+ if (remoteConfigured) {
248
+ markStepCompleted('remote');
249
+ completedSteps.push('remote');
250
+ }
251
+ else {
252
+ markStepSkipped('remote');
253
+ }
213
254
  // ── Tool API Keys ─────────────────────────────────────────────────────────
214
255
  const toolResult = await runStep(p, 'Tool key setup failed', () => runToolKeysStep(p, pc, authStorage));
215
256
  if (toolResult === STEP_CANCELLED)
216
257
  return;
217
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
+ }
218
266
  // ── Summary ───────────────────────────────────────────────────────────────
219
267
  const summaryLines = [];
220
268
  if (llmConfigured) {
@@ -249,11 +297,17 @@ export async function runOnboarding(authStorage) {
249
297
  else {
250
298
  summaryLines.push(`${pc.dim('↷')} Tool keys: none configured`);
251
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')}`);
252
306
  p.note(summaryLines.join('\n'), 'Setup complete');
253
307
  p.outro(pc.dim('Launching GSD...'));
254
308
  }
255
309
  // ─── LLM Authentication Step ──────────────────────────────────────────────────
256
- async function runLlmStep(p, pc, authStorage) {
310
+ export async function runLlmStep(p, pc, authStorage) {
257
311
  // Build the OAuth provider list dynamically from what's registered
258
312
  const oauthProviders = authStorage.getOAuthProviders();
259
313
  const oauthMap = new Map(oauthProviders.map(op => [op.id, op]));
@@ -283,16 +337,8 @@ async function runLlmStep(p, pc, authStorage) {
283
337
  p.log.info('Your Claude subscription will be used for inference. No API key needed.');
284
338
  // Store sentinel so hasAuth('claude-code') returns true on future boots
285
339
  authStorage.set('claude-code', { type: 'api_key', key: 'cli' });
286
- // Persist claude-code as the default provider so the startup migration in
287
- // cli.ts does not need to fire and the user is not left on "anthropic".
288
- const settingsPath = join(agentDir, 'settings.json');
289
- try {
290
- const raw = existsSync(settingsPath) ? JSON.parse(readFileSync(settingsPath, 'utf-8')) : {};
291
- raw.defaultProvider = 'claude-code';
292
- mkdirSync(dirname(settingsPath), { recursive: true });
293
- writeFileSync(settingsPath, JSON.stringify(raw, null, 2), 'utf-8');
294
- }
295
- catch { /* non-fatal — startup migration will catch it */ }
340
+ // Persist claude-code so startup does not keep users on anthropic direct API.
341
+ persistDefaultProvider('claude-code');
296
342
  return true;
297
343
  }
298
344
  // ── Step 2: Which provider? ──────────────────────────────────────────────
@@ -345,7 +391,7 @@ async function runOAuthFlow(p, pc, authStorage, providerId, oauthMap) {
345
391
  const s = p.spinner();
346
392
  s.start(`Authenticating with ${providerName}...`);
347
393
  try {
348
- await authStorage.login(providerId, {
394
+ const loginCallbacks = {
349
395
  onAuth: (info) => {
350
396
  s.stop(`Opening browser for ${providerName}`);
351
397
  openBrowser(info.url);
@@ -377,7 +423,9 @@ async function runOAuthFlow(p, pc, authStorage, providerId, oauthMap) {
377
423
  return result;
378
424
  }
379
425
  : undefined,
380
- });
426
+ };
427
+ await authStorage.login(providerId, loginCallbacks);
428
+ persistDefaultProvider(providerId);
381
429
  p.log.success(`Authenticated with ${pc.green(providerName)}`);
382
430
  return true;
383
431
  }
@@ -416,6 +464,7 @@ async function runApiKeyFlow(p, pc, authStorage, providerId, providerLabel) {
416
464
  p.log.warn(`Key doesn't start with expected prefix (${expectedPrefixes.join(' or ')}). Saving anyway.`);
417
465
  }
418
466
  authStorage.set(providerId, { type: 'api_key', key: trimmed });
467
+ persistDefaultProvider(providerId);
419
468
  p.log.success(`API key saved for ${pc.green(providerLabel)}`);
420
469
  // Provider-specific post-setup hints
421
470
  if (providerId === 'openrouter') {
@@ -438,6 +487,7 @@ async function runOllamaLocalFlow(p, pc, authStorage) {
438
487
  s.stop(`Ollama is running at ${pc.green(host)}`);
439
488
  // Store a placeholder so the provider is recognized as authenticated
440
489
  authStorage.set('ollama', { type: 'api_key', key: 'ollama' });
490
+ persistDefaultProvider('ollama');
441
491
  p.log.success(`${pc.green('Ollama (Local)')} configured — no API key needed`);
442
492
  p.log.info(pc.dim('Models are discovered automatically from your local Ollama instance.'));
443
493
  return true;
@@ -460,6 +510,7 @@ async function runOllamaLocalFlow(p, pc, authStorage) {
460
510
  if (p.isCancel(proceed) || !proceed)
461
511
  return false;
462
512
  authStorage.set('ollama', { type: 'api_key', key: 'ollama' });
513
+ persistDefaultProvider('ollama');
463
514
  p.log.success(`${pc.green('Ollama (Local)')} saved — models will appear when Ollama is running`);
464
515
  return true;
465
516
  }
@@ -509,6 +560,7 @@ async function runCustomOpenAIFlow(p, pc, authStorage) {
509
560
  const trimmedModelId = modelId.trim();
510
561
  // Save API key to auth storage
511
562
  authStorage.set('custom-openai', { type: 'api_key', key: trimmedKey });
563
+ persistDefaultProvider('custom-openai');
512
564
  // Write or merge into models.json
513
565
  const modelsJsonPath = join(agentDir, 'models.json');
514
566
  let config = { providers: {} };
@@ -555,7 +607,7 @@ async function runCustomOpenAIFlow(p, pc, authStorage) {
555
607
  return true;
556
608
  }
557
609
  // ─── Web Search Provider Step ─────────────────────────────────────────────────
558
- async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
610
+ export async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
559
611
  // Check which LLM provider was configured
560
612
  const authed = authStorage.list().filter(id => LLM_PROVIDER_IDS.includes(id));
561
613
  const isAnthropic = isAnthropicAuth && authed.includes('anthropic');
@@ -616,7 +668,7 @@ async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
616
668
  return null;
617
669
  }
618
670
  // ─── Tool API Keys Step ───────────────────────────────────────────────────────
619
- async function runToolKeysStep(p, pc, authStorage) {
671
+ export async function runToolKeysStep(p, pc, authStorage) {
620
672
  // Filter to keys not already configured
621
673
  const missing = TOOL_KEYS.filter(tk => !authStorage.has(tk.provider) && !process.env[tk.envVar]);
622
674
  if (missing.length === 0)
@@ -651,9 +703,11 @@ async function runToolKeysStep(p, pc, authStorage) {
651
703
  return savedCount;
652
704
  }
653
705
  // ─── Remote Questions Step ────────────────────────────────────────────────────
654
- async function runRemoteQuestionsStep(p, pc, authStorage) {
706
+ export async function runRemoteQuestionsStep(p, pc, authStorage) {
655
707
  // Check existing config — use getCredentialsForProvider to skip empty-key entries
656
- const hasValidKey = (provider) => authStorage.getCredentialsForProvider(provider).some((c) => c.type === 'api_key' && c.key);
708
+ const hasValidKey = (provider) => authStorage
709
+ .getCredentialsForProvider(provider)
710
+ .some((c) => c.type === 'api_key' && typeof c.key === 'string' && c.key.length > 0);
657
711
  const hasDiscord = hasValidKey('discord_bot');
658
712
  const hasSlack = hasValidKey('slack_bot');
659
713
  const hasTelegram = hasValidKey('telegram_bot');
@@ -858,7 +912,13 @@ async function runDiscordChannelStep(p, pc, token) {
858
912
  try {
859
913
  const res = await fetch(`https://discord.com/api/v10/guilds/${guildId}/channels`, { headers, signal: AbortSignal.timeout(15_000) });
860
914
  const data = await res.json();
861
- channels = Array.isArray(data) ? data.filter((ch) => ch.type === 0 || ch.type === 5) : [];
915
+ channels = Array.isArray(data)
916
+ ? data.filter((ch) => typeof ch === 'object' &&
917
+ ch !== null &&
918
+ typeof ch.id === 'string' &&
919
+ typeof ch.name === 'string' &&
920
+ (ch.type === 0 || ch.type === 5))
921
+ : [];
862
922
  }
863
923
  catch {
864
924
  p.log.warn('Could not fetch channels — configure later with /gsd remote discord');
@@ -16,13 +16,16 @@ import { showInterviewRound, } from "./shared/tui.js";
16
16
  const OptionSchema = Type.Object({
17
17
  label: Type.String({ description: "User-facing label (1-5 words)" }),
18
18
  description: Type.String({ description: "One short sentence explaining impact/tradeoff if selected" }),
19
+ preview: Type.Optional(Type.String({
20
+ description: "Optional markdown content shown in a side-by-side preview panel when this option is highlighted. Use for showing code samples, config snippets, or detailed explanations. Keep under ~20 lines — longer content is truncated.",
21
+ })),
19
22
  });
20
23
  const QuestionSchema = Type.Object({
21
24
  id: Type.String({ description: "Stable identifier for mapping answers (snake_case)" }),
22
25
  header: Type.String({ description: "Short header label shown in the UI (12 or fewer chars)" }),
23
26
  question: Type.String({ description: "Single-sentence prompt shown to the user" }),
24
27
  options: Type.Array(OptionSchema, {
25
- description: 'Provide 2-3 mutually exclusive choices for single-select, or any number for multi-select. Put the recommended option first and suffix its label with "(Recommended)". Do not include an "Other" option for single-select; the client adds a free-form "None of the above" option automatically.',
28
+ description: 'Provide 2-3 mutually exclusive choices for single-select, or any number for multi-select. Put the recommended option first and suffix its label with "(Recommended)". Each option can include an optional "preview" field with markdown content shown in a side panel. Do not include an "Other" option for single-select; the client adds a free-form "None of the above" option automatically.',
26
29
  }),
27
30
  allowMultiple: Type.Optional(Type.Boolean({
28
31
  description: "If true, the user can select multiple options using SPACE to toggle and ENTER to confirm. No 'None of the above' option is added. Default: false.",
@@ -134,12 +137,14 @@ export default function AskUserQuestions(pi) {
134
137
  pi.registerTool({
135
138
  name: "ask_user_questions",
136
139
  label: "Request User Input",
137
- description: "Request user input for one to three short questions and wait for the response. Single-select questions have 2-3 mutually exclusive options with a free-form 'None of the above' added automatically. Multi-select questions (allowMultiple: true) let the user toggle multiple options with SPACE and confirm with ENTER.",
140
+ description: "Request user input for one to three short questions and wait for the response. Single-select questions have 2-3 mutually exclusive options with a free-form 'None of the above' added automatically. Multi-select questions (allowMultiple: true) let the user toggle multiple options with SPACE and confirm with ENTER. Options can include an optional 'preview' field with markdown content shown in a side-by-side panel when highlighted.",
138
141
  promptGuidelines: [
139
142
  "Use ask_user_questions when you need the user to choose between concrete alternatives before proceeding.",
140
143
  "Keep questions to 1 when possible; never exceed 3.",
141
144
  "For single-select: each question must have 2-3 options. Put the recommended option first with '(Recommended)' suffix. Do not include an 'Other' or 'None of the above' option - the client adds one automatically.",
142
145
  "For multi-select: set allowMultiple: true. The user can pick any number of options. No 'None of the above' is added.",
146
+ "When options involve code patterns, config choices, or architecture decisions, add a 'preview' field with markdown content (code blocks, lists, headers, etc.). The preview renders in a side-by-side panel when the option is highlighted.",
147
+ "Preview content is rendered in a fixed-height panel (max ~20 lines visible). Keep previews concise — show the most relevant snippet, not exhaustive examples. Longer content is truncated with a '+N lines hidden' indicator.",
143
148
  ],
144
149
  parameters: AskUserQuestionsParams,
145
150
  async execute(_toolCallId, params, signal, _onUpdate, ctx) {
@@ -274,6 +279,10 @@ export default function AskUserQuestions(pi) {
274
279
  const headers = qs.map((q) => q.header).join(", ");
275
280
  text += theme.fg("dim", ` (${headers})`);
276
281
  }
282
+ const previewCount = qs.reduce((acc, q) => acc + (q.options || []).filter((o) => o.preview).length, 0);
283
+ if (previewCount > 0) {
284
+ text += theme.fg("accent", ` [${previewCount} preview${previewCount !== 1 ? "s" : ""}]`);
285
+ }
277
286
  for (const q of qs) {
278
287
  const multiSel = !!q.allowMultiple;
279
288
  text += `\n ${theme.fg("text", q.question)}`;
@@ -307,10 +316,13 @@ export default function AskUserQuestions(pi) {
307
316
  lines.push(`${theme.fg("accent", q.header)}: ${theme.fg("dim", "(no answer)")}`);
308
317
  continue;
309
318
  }
310
- 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)");
311
323
  let line = `${theme.fg("success", "✓ ")}${theme.fg("accent", q.header)}: ${answerText}`;
312
- if (answer.user_note) {
313
- line += ` ${theme.fg("muted", `[note: ${answer.user_note}]`)}`;
324
+ if (answer.notes) {
325
+ line += ` ${theme.fg("muted", `[note: ${answer.notes}]`)}`;
314
326
  }
315
327
  lines.push(line);
316
328
  }
@@ -19,6 +19,15 @@ export const CLAUDE_CODE_MODELS = [
19
19
  contextWindow: 1_000_000,
20
20
  maxTokens: 128_000,
21
21
  },
22
+ {
23
+ id: "claude-opus-4-7",
24
+ name: "Claude Opus 4.7 (via Claude Code)",
25
+ reasoning: true,
26
+ input: ["text", "image"],
27
+ cost: ZERO_COST,
28
+ contextWindow: 1_000_000,
29
+ maxTokens: 128_000,
30
+ },
22
31
  {
23
32
  id: "claude-sonnet-4-6",
24
33
  name: "Claude Sonnet 4.6 (via Claude Code)",
@@ -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
@@ -6,12 +6,14 @@
6
6
  * AssistantMessageEvents for TUI rendering, then strips tool-call blocks from
7
7
  * the final AssistantMessage so GSD's agent loop doesn't try to dispatch them.
8
8
  */
9
- import { EventStream, mapThinkingLevelToEffort, supportsAdaptiveThinking } from "@gsd/pi-ai";
9
+ import { EventStream } from "@gsd/pi-ai";
10
10
  import { execSync } from "node:child_process";
11
11
  import { PartialMessageBuilder, ZERO_USAGE, mapUsage } from "./partial-builder.js";
12
12
  import { buildWorkflowMcpServers } from "../gsd/workflow-mcp.js";
13
13
  import { showInterviewRound } from "../shared/tui.js";
14
+ /** Label used for the free-text fallback option in single-choice elicitation questions. */
14
15
  const OTHER_OPTION_LABEL = "None of the above";
16
+ /** Regex pattern that identifies field names and descriptions that should be treated as sensitive/secure inputs. */
15
17
  const SENSITIVE_FIELD_PATTERN = /(password|passphrase|secret|token|api[_\s-]*key|private[_\s-]*key|credential)/i;
16
18
  // ---------------------------------------------------------------------------
17
19
  // Stream factory
@@ -29,6 +31,7 @@ function createAssistantStream() {
29
31
  throw new Error("Unexpected event type for final result");
30
32
  });
31
33
  }
34
+ /** Extract a human-readable error string from an SDK result message. */
32
35
  export function getResultErrorMessage(result) {
33
36
  if ("errors" in result && Array.isArray(result.errors) && result.errors.length > 0) {
34
37
  return result.errors.join("; ");
@@ -41,10 +44,13 @@ export function getResultErrorMessage(result) {
41
44
  // ---------------------------------------------------------------------------
42
45
  // Claude binary resolution
43
46
  // ---------------------------------------------------------------------------
47
+ /** Cached result of the `which`/`where claude` lookup so the shell is only spawned once per process. */
44
48
  let cachedClaudePath = null;
49
+ /** Return the shell command used to locate the `claude` binary on the given platform. */
45
50
  export function getClaudeLookupCommand(platform = process.platform) {
46
51
  return platform === "win32" ? "where claude" : "which claude";
47
52
  }
53
+ /** Extract the first line of `which`/`where` output as the resolved binary path. */
48
54
  export function parseClaudeLookupOutput(output) {
49
55
  return output
50
56
  .toString()
@@ -123,6 +129,7 @@ export function buildPromptFromContext(context) {
123
129
  }
124
130
  return parts.join("\n\n");
125
131
  }
132
+ /** Strip the `data:<mime>;base64,` prefix from a data URI, returning only the raw base64 payload. */
126
133
  function stripDataUriPrefix(value) {
127
134
  const commaIndex = value.indexOf(",");
128
135
  if (value.startsWith("data:") && commaIndex !== -1) {
@@ -130,10 +137,12 @@ function stripDataUriPrefix(value) {
130
137
  }
131
138
  return value;
132
139
  }
140
+ /** Extract the MIME type from a data URI string, or return `null` if the value is not a valid data URI. */
133
141
  function inferMimeTypeFromDataUri(value) {
134
142
  const match = /^data:([^;,]+);base64,/.exec(value);
135
143
  return match?.[1] ?? null;
136
144
  }
145
+ /** Collect all base64 image blocks from user messages in the context for inclusion in the SDK prompt. */
137
146
  export function extractImageBlocksFromContext(context) {
138
147
  const imageBlocks = [];
139
148
  for (const msg of context.messages) {
@@ -162,6 +171,7 @@ export function extractImageBlocksFromContext(context) {
162
171
  }
163
172
  return imageBlocks;
164
173
  }
174
+ /** Build the SDK query prompt, wrapping image blocks into an async iterable user message when present. */
165
175
  export function buildSdkQueryPrompt(context, textPrompt = buildPromptFromContext(context)) {
166
176
  const imageBlocks = extractImageBlocksFromContext(context);
167
177
  if (imageBlocks.length === 0) {
@@ -183,6 +193,7 @@ export function buildSdkQueryPrompt(context, textPrompt = buildPromptFromContext
183
193
  // ---------------------------------------------------------------------------
184
194
  // Error helper
185
195
  // ---------------------------------------------------------------------------
196
+ /** Build a minimal error `AssistantMessage` with the given model ID and error text. */
186
197
  function makeErrorMessage(model, errorMsg) {
187
198
  return {
188
199
  role: "assistant",
@@ -209,6 +220,7 @@ export function makeStreamExhaustedErrorMessage(model, lastTextContent) {
209
220
  }
210
221
  return message;
211
222
  }
223
+ /** Extract the string labels from an array of SDK elicitation option objects, filtering out blank entries. */
212
224
  function readElicitationChoices(options) {
213
225
  if (!Array.isArray(options))
214
226
  return [];
@@ -216,6 +228,7 @@ function readElicitationChoices(options) {
216
228
  .map((option) => (typeof option?.const === "string" ? option.const : typeof option?.title === "string" ? option.title : ""))
217
229
  .filter((option) => option.length > 0);
218
230
  }
231
+ /** Parse an SDK elicitation request into structured multiple-choice questions, or null if the schema is unsupported. */
219
232
  export function parseAskUserQuestionsElicitation(request) {
220
233
  if (request.mode && request.mode !== "form")
221
234
  return null;
@@ -265,6 +278,7 @@ export function parseAskUserQuestionsElicitation(request) {
265
278
  }
266
279
  return questions.length > 0 ? questions : null;
267
280
  }
281
+ /** Return true if the elicitation field should be treated as sensitive and rendered as a secure/password input. */
268
282
  function isSecureElicitationField(requestMessage, fieldId, field) {
269
283
  if (field.format === "password")
270
284
  return true;
@@ -283,6 +297,7 @@ function isSecureElicitationField(requestMessage, fieldId, field) {
283
297
  .toLowerCase();
284
298
  return SENSITIVE_FIELD_PATTERN.test(haystack);
285
299
  }
300
+ /** Parse an SDK elicitation request into free-text input field descriptors, or null if unsupported. */
286
301
  export function parseTextInputElicitation(request) {
287
302
  if (request.mode && request.mode !== "form")
288
303
  return null;
@@ -315,6 +330,7 @@ export function parseTextInputElicitation(request) {
315
330
  }
316
331
  return fields.length > 0 ? fields : null;
317
332
  }
333
+ /** Convert a TUI interview round result into the SDK elicitation content map. */
318
334
  export function roundResultToElicitationContent(questions, result) {
319
335
  const content = {};
320
336
  for (const question of questions) {
@@ -334,6 +350,7 @@ export function roundResultToElicitationContent(questions, result) {
334
350
  }
335
351
  return content;
336
352
  }
353
+ /** Build the dialog title string for a multiple-choice elicitation question, combining server name, header, and question text. */
337
354
  function buildElicitationPromptTitle(request, question) {
338
355
  const parts = [
339
356
  request.serverName ? `[${request.serverName}]` : "",
@@ -342,6 +359,7 @@ function buildElicitationPromptTitle(request, question) {
342
359
  ].filter((part) => part && part.trim().length > 0);
343
360
  return parts.join("\n\n");
344
361
  }
362
+ /** Drive each multiple-choice elicitation question through the extension UI's `select` dialog, collecting answers into an SDK result. */
345
363
  async function promptElicitationWithDialogs(request, questions, ui, signal) {
346
364
  const content = {};
347
365
  for (const question of questions) {
@@ -379,6 +397,7 @@ async function promptElicitationWithDialogs(request, questions, ui, signal) {
379
397
  }
380
398
  return { action: "accept", content };
381
399
  }
400
+ /** Build the dialog title string for a free-text input field, combining server name, field title, and description. */
382
401
  function buildTextInputPromptTitle(request, field) {
383
402
  const parts = [
384
403
  request.serverName ? `[${request.serverName}]` : "",
@@ -387,6 +406,7 @@ function buildTextInputPromptTitle(request, field) {
387
406
  ].filter((part) => typeof part === "string" && part.trim().length > 0);
388
407
  return parts.join("\n\n");
389
408
  }
409
+ /** Derive a placeholder hint for a free-text input field from its description, falling back to "Required" or "Leave empty to skip". */
390
410
  function buildTextInputPlaceholder(field) {
391
411
  const desc = field.description.trim();
392
412
  if (!desc)
@@ -400,6 +420,7 @@ function buildTextInputPlaceholder(field) {
400
420
  const hint = formatLine.replace(/^format:\s*/i, "").trim();
401
421
  return hint.length > 0 ? hint : field.required ? "Required" : "Leave empty to skip";
402
422
  }
423
+ /** Collect each free-text input field via the extension UI's `input` dialog, returning the filled SDK elicitation result. */
403
424
  async function promptTextInputElicitation(request, fields, ui, signal) {
404
425
  const content = {};
405
426
  for (const field of fields) {
@@ -411,6 +432,7 @@ async function promptTextInputElicitation(request, fields, ui, signal) {
411
432
  }
412
433
  return { action: "accept", content };
413
434
  }
435
+ /** Create an SDK elicitation handler that routes requests through the extension UI dialogs, or undefined if no UI is available. */
414
436
  export function createClaudeCodeElicitationHandler(ui) {
415
437
  if (!ui)
416
438
  return undefined;
@@ -482,6 +504,42 @@ export async function resolveClaudePermissionMode(env = process.env) {
482
504
  }
483
505
  return "bypassPermissions";
484
506
  }
507
+ // NOTE: These helpers intentionally mirror @gsd/pi-ai anthropic-shared
508
+ // behavior so this extension remains typecheck-stable even when the published
509
+ // @gsd/pi-ai barrel lags behind monorepo source exports.
510
+ /** Return true for model IDs that support the adaptive thinking API (Opus 4.6/4.7, Sonnet 4.6/4.7, Haiku 4.5). */
511
+ function modelSupportsAdaptiveThinking(modelId) {
512
+ return (modelId.includes("opus-4-6")
513
+ || modelId.includes("opus-4.6")
514
+ || modelId.includes("opus-4-7")
515
+ || modelId.includes("opus-4.7")
516
+ || modelId.includes("sonnet-4-6")
517
+ || modelId.includes("sonnet-4.6")
518
+ || modelId.includes("sonnet-4-7")
519
+ || modelId.includes("sonnet-4.7")
520
+ || modelId.includes("haiku-4-5")
521
+ || modelId.includes("haiku-4.5"));
522
+ }
523
+ /** Map a GSD thinking level to the Anthropic effort value, clamping xhigh to max for models that lack native xhigh support. */
524
+ function mapThinkingLevelToAnthropicEffort(level, modelId) {
525
+ switch (level) {
526
+ case "minimal":
527
+ case "low":
528
+ return "low";
529
+ case "medium":
530
+ return "medium";
531
+ case "high":
532
+ return "high";
533
+ case "xhigh":
534
+ if (modelId.includes("opus-4-7") || modelId.includes("opus-4.7"))
535
+ return "xhigh";
536
+ if (modelId.includes("opus-4-6") || modelId.includes("opus-4.6"))
537
+ return "max";
538
+ return "high";
539
+ default:
540
+ return "high";
541
+ }
542
+ }
485
543
  /**
486
544
  * Build the options object passed to the Claude Agent SDK's `query()` call.
487
545
  *
@@ -513,8 +571,17 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
513
571
  "Bash(pwd)",
514
572
  ...(mcpServers ? Object.keys(mcpServers).map((serverName) => `mcp__${serverName}__*`) : []),
515
573
  ];
516
- const effort = reasoning && supportsAdaptiveThinking(modelId)
517
- ? mapThinkingLevelToEffort(reasoning, modelId)
574
+ const supportsAdaptive = modelSupportsAdaptiveThinking(modelId);
575
+ const effort = reasoning && supportsAdaptive
576
+ ? mapThinkingLevelToAnthropicEffort(reasoning, modelId)
577
+ : undefined;
578
+ // Bug B: SDK requires thinking:{type:"adaptive"} alongside effort for adaptive thinking to activate.
579
+ // Bug C: SDK requires thinking:{type:"disabled"} to actually stop adaptive thinking when reasoning is off;
580
+ // omitting the field leaves the SDK in its adaptive default (or persisted session state).
581
+ const thinkingConfig = supportsAdaptive
582
+ ? effort
583
+ ? { thinking: { type: "adaptive" } }
584
+ : { thinking: { type: "disabled" } }
518
585
  : undefined;
519
586
  return {
520
587
  pathToClaudeCodeExecutable: getClaudePath(),
@@ -529,11 +596,13 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
529
596
  disallowedTools,
530
597
  ...(allowedTools.length > 0 ? { allowedTools } : {}),
531
598
  ...(mcpServers ? { mcpServers } : {}),
532
- betas: modelId.includes("sonnet") ? ["context-1m-2025-08-07"] : [],
599
+ betas: (modelId.includes("sonnet") || modelId.includes("opus-4-7") || modelId.includes("opus-4.7")) ? ["context-1m-2025-08-07"] : [],
600
+ ...(thinkingConfig ?? {}),
533
601
  ...(effort ? { effort } : {}),
534
602
  ...sdkExtraOptions,
535
603
  };
536
604
  }
605
+ /** Normalise heterogeneous SDK tool-result content (string, array, or object) into a uniform `ExternalToolResultContentBlock[]`. */
537
606
  function normalizeToolResultContent(content) {
538
607
  if (typeof content === "string") {
539
608
  return [{ type: "text", text: content }];
@@ -568,6 +637,7 @@ function normalizeToolResultContent(content) {
568
637
  }
569
638
  return blocks.length > 0 ? blocks : [{ type: "text", text: "" }];
570
639
  }
640
+ /** Extract tool result payloads from an SDK synthetic user message, keyed by tool-use ID. */
571
641
  export function extractToolResultsFromSdkUserMessage(message) {
572
642
  const extracted = [];
573
643
  const seen = new Set();
@@ -612,6 +682,7 @@ export function extractToolResultsFromSdkUserMessage(message) {
612
682
  }
613
683
  return extracted;
614
684
  }
685
+ /** Attach external tool results from the SDK synthetic user message to their corresponding tool-call blocks by ID. */
615
686
  function attachExternalResultsToToolBlocks(toolBlocks, toolResultsById) {
616
687
  for (const block of toolBlocks) {
617
688
  if (block.type !== "toolCall" && block.type !== "serverToolUse")
@@ -659,6 +730,7 @@ export function streamViaClaudeCode(model, context, options) {
659
730
  void pumpSdkMessages(model, context, options, stream);
660
731
  return stream;
661
732
  }
733
+ /** Async pump that drives the Claude Agent SDK's async-iterable message stream and pushes events into `stream`. */
662
734
  async function pumpSdkMessages(model, context, options, stream) {
663
735
  const modelId = model.id;
664
736
  let builder = null;