gsd-pi 2.75.0-dev.063e5a3 → 2.75.0-dev.b6ad8c5f7

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