gsd-pi 2.70.0 → 2.70.1-dev.3e19108

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 (254) hide show
  1. package/dist/loader.js +4 -0
  2. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +152 -2
  3. package/dist/resources/extensions/gsd/auto-model-selection.js +33 -19
  4. package/dist/resources/extensions/gsd/auto-prompts.js +7 -3
  5. package/dist/resources/extensions/gsd/auto-start.js +28 -12
  6. package/dist/resources/extensions/gsd/auto.js +12 -8
  7. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +4 -0
  8. package/dist/resources/extensions/gsd/commands-handlers.js +22 -8
  9. package/dist/resources/extensions/gsd/doctor-engine-checks.js +12 -0
  10. package/dist/resources/extensions/gsd/doctor-format.js +2 -0
  11. package/dist/resources/extensions/gsd/guided-flow.js +33 -20
  12. package/dist/resources/extensions/gsd/init-wizard.js +3 -11
  13. package/dist/resources/extensions/gsd/pre-execution-checks.js +5 -3
  14. package/dist/resources/extensions/gsd/prompts/discuss.md +31 -13
  15. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +34 -0
  16. package/dist/resources/extensions/gsd/validate-directory.js +30 -12
  17. package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +56 -0
  18. package/dist/resources/extensions/gsd/workflow-mcp.js +12 -1
  19. package/dist/resources/extensions/slash-commands/audit.js +2 -1
  20. package/dist/resources/extensions/subagent/isolation.js +4 -2
  21. package/dist/update-check.d.ts +1 -0
  22. package/dist/update-check.js +30 -27
  23. package/dist/update-cmd.js +3 -11
  24. package/dist/web/standalone/.next/BUILD_ID +1 -1
  25. package/dist/web/standalone/.next/app-path-routes-manifest.json +15 -15
  26. package/dist/web/standalone/.next/build-manifest.json +4 -4
  27. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  28. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  29. package/dist/web/standalone/.next/required-server-files.json +3 -3
  30. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  31. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  32. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  33. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  36. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  37. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  38. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  39. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  40. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  41. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  42. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  43. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  44. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  45. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  46. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  47. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  48. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  51. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  52. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  53. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  54. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  55. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  56. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  57. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  58. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  59. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  60. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  61. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  62. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  63. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  64. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  65. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  66. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  67. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  68. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  69. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  70. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  71. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  72. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  73. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  74. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  75. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  76. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  77. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  78. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  79. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  80. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  81. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  82. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  84. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  85. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  87. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  88. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  89. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  90. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  99. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  105. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  121. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  125. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  134. package/dist/web/standalone/.next/server/app/index.html +1 -1
  135. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  136. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  137. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  138. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  140. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/page.js +2 -2
  142. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app-paths-manifest.json +15 -15
  144. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  145. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  146. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/middleware.js +2 -2
  149. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  150. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  151. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  152. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  153. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  154. package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +9 -0
  155. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  156. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  157. package/dist/web/standalone/.next/static/chunks/app/page-f1e30ab6bb269149.js +1 -0
  158. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  159. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  160. package/dist/web/standalone/.next/static/chunks/{webpack-6e4d7e9a4f57bed4.js → webpack-b868033a5834586d.js} +1 -1
  161. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  162. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  163. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  164. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  165. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  166. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  167. package/dist/web/standalone/server.js +1 -1
  168. package/dist/web-mode.js +4 -0
  169. package/package.json +11 -11
  170. package/packages/mcp-server/dist/env-writer.d.ts +39 -0
  171. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -0
  172. package/packages/mcp-server/dist/env-writer.js +158 -0
  173. package/packages/mcp-server/dist/env-writer.js.map +1 -0
  174. package/packages/mcp-server/dist/server.d.ts +11 -2
  175. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  176. package/packages/mcp-server/dist/server.js +102 -2
  177. package/packages/mcp-server/dist/server.js.map +1 -1
  178. package/packages/mcp-server/dist/workflow-tools.d.ts +2 -0
  179. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  180. package/packages/mcp-server/dist/workflow-tools.js +35 -3
  181. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  182. package/packages/mcp-server/src/env-writer.test.ts +280 -0
  183. package/packages/mcp-server/src/env-writer.ts +183 -0
  184. package/packages/mcp-server/src/import-candidates.test.ts +48 -0
  185. package/packages/mcp-server/src/secure-env-collect.test.ts +265 -0
  186. package/packages/mcp-server/src/server.ts +137 -3
  187. package/packages/mcp-server/src/workflow-tools.ts +34 -1
  188. package/packages/pi-agent-core/dist/agent.d.ts +8 -0
  189. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  190. package/packages/pi-agent-core/dist/agent.js +3 -0
  191. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  192. package/packages/pi-agent-core/src/agent.test.ts +82 -0
  193. package/packages/pi-agent-core/src/agent.ts +12 -0
  194. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.d.ts +2 -0
  195. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.d.ts.map +1 -0
  196. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +133 -0
  197. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -0
  198. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +1 -0
  199. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  200. package/packages/pi-coding-agent/dist/core/lsp/config.js +38 -15
  201. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  202. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  203. package/packages/pi-coding-agent/dist/core/sdk.js +10 -0
  204. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  205. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  206. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +58 -21
  207. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  208. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  209. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +3 -1
  210. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  211. package/packages/pi-coding-agent/package.json +1 -1
  212. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +152 -0
  213. package/packages/pi-coding-agent/src/core/lsp/config.ts +43 -17
  214. package/packages/pi-coding-agent/src/core/sdk.ts +8 -0
  215. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +83 -27
  216. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +7 -5
  217. package/pkg/package.json +1 -1
  218. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +229 -2
  219. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +205 -0
  220. package/src/resources/extensions/gsd/auto-model-selection.ts +39 -25
  221. package/src/resources/extensions/gsd/auto-prompts.ts +7 -3
  222. package/src/resources/extensions/gsd/auto-start.ts +37 -14
  223. package/src/resources/extensions/gsd/auto.ts +12 -8
  224. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +4 -0
  225. package/src/resources/extensions/gsd/commands-handlers.ts +22 -7
  226. package/src/resources/extensions/gsd/doctor-engine-checks.ts +14 -0
  227. package/src/resources/extensions/gsd/doctor-format.ts +1 -0
  228. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  229. package/src/resources/extensions/gsd/guided-flow.ts +36 -17
  230. package/src/resources/extensions/gsd/init-wizard.ts +3 -13
  231. package/src/resources/extensions/gsd/pre-execution-checks.ts +6 -3
  232. package/src/resources/extensions/gsd/prompts/discuss.md +31 -13
  233. package/src/resources/extensions/gsd/tests/discuss-incremental-persistence.test.ts +9 -0
  234. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +43 -0
  235. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +207 -0
  236. package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +48 -1
  237. package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +8 -7
  238. package/src/resources/extensions/gsd/tests/validate-directory.test.ts +33 -1
  239. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +87 -1
  240. package/src/resources/extensions/gsd/tests/workflow-mcp-auto-prep.test.ts +76 -0
  241. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +180 -1
  242. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +22 -0
  243. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +60 -25
  244. package/src/resources/extensions/gsd/validate-directory.ts +33 -11
  245. package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +76 -0
  246. package/src/resources/extensions/gsd/workflow-mcp.ts +16 -1
  247. package/src/resources/extensions/slash-commands/audit.ts +2 -1
  248. package/src/resources/extensions/subagent/isolation.ts +4 -3
  249. package/dist/web/standalone/.next/static/chunks/2826.821e01b07d92e948.js +0 -9
  250. package/dist/web/standalone/.next/static/chunks/app/page-7115e62689b5fd84.js +0 -1
  251. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  252. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  253. /package/dist/web/standalone/.next/static/{Nl6lg7zP5dNgNBV1107v1 → cHCEWiRJM5bXJa9HkP1QU}/_buildManifest.js +0 -0
  254. /package/dist/web/standalone/.next/static/{Nl6lg7zP5dNgNBV1107v1 → cHCEWiRJM5bXJa9HkP1QU}/_ssgManifest.js +0 -0
@@ -0,0 +1,76 @@
1
+ import type { ExtensionContext } from "@gsd/pi-coding-agent";
2
+
3
+ import {
4
+ type EnsureProjectWorkflowMcpConfigResult,
5
+ ensureProjectWorkflowMcpConfig,
6
+ } from "./mcp-project-config.js";
7
+ import { usesWorkflowMcpTransport } from "./workflow-mcp.js";
8
+
9
+ interface WorkflowMcpAutoPrepContext {
10
+ model?: { provider?: string; baseUrl?: string };
11
+ modelRegistry?: {
12
+ getProviderAuthMode?: (provider: string) => string;
13
+ isProviderRequestReady?: (provider: string) => boolean;
14
+ };
15
+ ui?: Pick<ExtensionContext["ui"], "notify">;
16
+ }
17
+
18
+ function getAuthModeSafe(
19
+ ctx: WorkflowMcpAutoPrepContext,
20
+ provider: string | undefined,
21
+ ): string | undefined {
22
+ if (!provider) return undefined;
23
+ const getAuthMode = ctx.modelRegistry?.getProviderAuthMode;
24
+ if (typeof getAuthMode !== "function") return undefined;
25
+ try {
26
+ return getAuthMode(provider);
27
+ } catch {
28
+ return undefined;
29
+ }
30
+ }
31
+
32
+ function hasClaudeCodeProvider(ctx: WorkflowMcpAutoPrepContext): boolean {
33
+ return getAuthModeSafe(ctx, "claude-code") === "externalCli";
34
+ }
35
+
36
+ function isClaudeCodeProviderReady(ctx: WorkflowMcpAutoPrepContext): boolean {
37
+ const readyCheck = ctx.modelRegistry?.isProviderRequestReady;
38
+ if (typeof readyCheck !== "function") return false;
39
+ try {
40
+ return readyCheck("claude-code");
41
+ } catch {
42
+ return false;
43
+ }
44
+ }
45
+
46
+ export function shouldAutoPrepareWorkflowMcp(ctx: WorkflowMcpAutoPrepContext): boolean {
47
+ const provider = ctx.model?.provider;
48
+ const baseUrl = ctx.model?.baseUrl;
49
+ const authMode = getAuthModeSafe(ctx, provider);
50
+
51
+ if (usesWorkflowMcpTransport(authMode as any, baseUrl)) return true;
52
+ if (provider === "claude-code") return true;
53
+ if (hasClaudeCodeProvider(ctx)) return true;
54
+ return isClaudeCodeProviderReady(ctx);
55
+ }
56
+
57
+ export function prepareWorkflowMcpForProject(
58
+ ctx: WorkflowMcpAutoPrepContext,
59
+ projectRoot: string,
60
+ ): EnsureProjectWorkflowMcpConfigResult | null {
61
+ if (!shouldAutoPrepareWorkflowMcp(ctx)) return null;
62
+
63
+ try {
64
+ const result = ensureProjectWorkflowMcpConfig(projectRoot);
65
+ if (result.status !== "unchanged") {
66
+ ctx.ui?.notify?.(`Claude Code MCP prepared at ${result.configPath}`, "info");
67
+ }
68
+ return result;
69
+ } catch (err) {
70
+ ctx.ui?.notify?.(
71
+ `Claude Code MCP prep failed: ${err instanceof Error ? err.message : String(err)}. Detected Claude Code model but no workflow MCP. Please run /gsd mcp init . from your project root.`,
72
+ "warning",
73
+ );
74
+ return null;
75
+ }
76
+ }
@@ -348,6 +348,21 @@ export function usesWorkflowMcpTransport(
348
348
  return authMode === "externalCli" && typeof baseUrl === "string" && baseUrl.startsWith("local://");
349
349
  }
350
350
 
351
+ export function supportsStructuredQuestions(
352
+ activeTools: string[],
353
+ options: Pick<WorkflowCapabilityOptions, "authMode" | "baseUrl"> = {},
354
+ ): boolean {
355
+ if (!activeTools.includes("ask_user_questions")) return false;
356
+
357
+ // Workflow MCP currently exposes ask_user_questions via MCP form elicitation.
358
+ // Local external CLI transports such as Claude Code can invoke the tool, but
359
+ // do not reliably complete that elicitation round-trip yet, so guided discuss
360
+ // prompts must fall back to plain-text questioning.
361
+ if (usesWorkflowMcpTransport(options.authMode, options.baseUrl)) return false;
362
+
363
+ return true;
364
+ }
365
+
351
366
  export function getWorkflowTransportSupportError(
352
367
  provider: string | undefined,
353
368
  requiredTools: string[],
@@ -364,7 +379,7 @@ export function getWorkflowTransportSupportError(
364
379
  const providerLabel = `"${provider}"`;
365
380
 
366
381
  if (!launch) {
367
- return `Provider ${providerLabel} cannot run ${surface}${unitLabel}: the GSD workflow MCP server is not configured or discoverable. Configure GSD_WORKFLOW_MCP_COMMAND, build packages/mcp-server/dist/cli.js, or install gsd-mcp-server on PATH.`;
382
+ return `Provider ${providerLabel} cannot run ${surface}${unitLabel}: the GSD workflow MCP server is not configured or discoverable. Detected Claude Code model but no workflow MCP. Please run /gsd mcp init . from your project root. You can also configure GSD_WORKFLOW_MCP_COMMAND, build packages/mcp-server/dist/cli.js, or install gsd-mcp-server on PATH.`;
368
383
  }
369
384
 
370
385
  const missing = [...new Set(requiredTools)].filter((tool) => !MCP_WORKFLOW_TOOL_SURFACE.has(tool));
@@ -1,4 +1,5 @@
1
1
  import type { ExtensionAPI, ExtensionCommandContext } from "@gsd/pi-coding-agent";
2
+ import { mkdirSync } from "node:fs";
2
3
 
3
4
  export default function auditCommand(pi: ExtensionAPI) {
4
5
  pi.registerCommand("audit", {
@@ -39,7 +40,7 @@ export default function auditCommand(pi: ExtensionAPI) {
39
40
 
40
41
  // ── Step 3: Ensure the output directory exists ───────────────────────
41
42
 
42
- await pi.exec("mkdir", ["-p", ".gsd/audits"]);
43
+ mkdirSync(".gsd/audits", { recursive: true });
43
44
 
44
45
  // ── Step 4: Send the audit prompt to the agent ───────────────────────
45
46
 
@@ -53,8 +53,10 @@ interface Baseline {
53
53
  // Directory helpers
54
54
  // ============================================================================
55
55
 
56
- function encodeCwd(cwd: string): string {
57
- return cwd.replace(/\//g, "--");
56
+ export function encodeCwd(cwd: string): string {
57
+ // Encode the entire cwd so Windows drive letters, separators, and UNC
58
+ // prefixes cannot leak into the isolation path.
59
+ return Buffer.from(cwd, "utf8").toString("base64url");
58
60
  }
59
61
 
60
62
  const gsdHome = process.env.GSD_HOME || path.join(os.homedir(), ".gsd");
@@ -500,4 +502,3 @@ export function readIsolationMode(): IsolationMode {
500
502
  return "none";
501
503
  }
502
504
  }
503
-