gsd-pi 2.76.0 → 2.77.0-dev.c9c8932c6

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 (757) hide show
  1. package/README.md +32 -30
  2. package/dist/claude-cli-check.js +32 -3
  3. package/dist/cli.js +14 -0
  4. package/dist/extension-discovery.d.ts +6 -0
  5. package/dist/extension-discovery.js +37 -0
  6. package/dist/extension-registry.d.ts +3 -0
  7. package/dist/extension-sort.d.ts +18 -0
  8. package/dist/extension-sort.js +114 -0
  9. package/dist/extension-validator.d.ts +47 -0
  10. package/dist/extension-validator.js +127 -0
  11. package/dist/loader.js +35 -7
  12. package/dist/mcp-server.d.ts +7 -0
  13. package/dist/mcp-server.js +35 -1
  14. package/dist/onboarding.js +45 -0
  15. package/dist/resource-loader.d.ts +1 -1
  16. package/dist/resource-loader.js +2 -8
  17. package/dist/resources/agents/researcher.md +1 -1
  18. package/dist/resources/extensions/claude-code-cli/readiness.js +31 -8
  19. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +134 -57
  20. package/dist/resources/extensions/cmux/index.js +20 -0
  21. package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
  22. package/dist/resources/extensions/google-search/index.js +2 -375
  23. package/dist/resources/extensions/gsd/auto/loop.js +9 -0
  24. package/dist/resources/extensions/gsd/auto/phases.js +104 -11
  25. package/dist/resources/extensions/gsd/auto/run-unit.js +38 -2
  26. package/dist/resources/extensions/gsd/auto/session.js +22 -1
  27. package/dist/resources/extensions/gsd/auto-dispatch.js +56 -17
  28. package/dist/resources/extensions/gsd/auto-model-selection.js +53 -16
  29. package/dist/resources/extensions/gsd/auto-post-unit.js +59 -2
  30. package/dist/resources/extensions/gsd/auto-prompts.js +14 -0
  31. package/dist/resources/extensions/gsd/auto-recovery.js +69 -1
  32. package/dist/resources/extensions/gsd/auto-start.js +74 -59
  33. package/dist/resources/extensions/gsd/auto-verification.js +33 -0
  34. package/dist/resources/extensions/gsd/auto-worktree.js +51 -53
  35. package/dist/resources/extensions/gsd/auto.js +92 -37
  36. package/dist/resources/extensions/gsd/blocked-models.js +68 -0
  37. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +93 -1
  38. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +39 -9
  39. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +93 -0
  40. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +3 -0
  41. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +23 -0
  42. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +52 -6
  43. package/dist/resources/extensions/gsd/bootstrap/system-context.js +95 -29
  44. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +34 -2
  45. package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
  46. package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
  47. package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
  48. package/dist/resources/extensions/gsd/commands-extract-learnings.js +54 -89
  49. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
  50. package/dist/resources/extensions/gsd/compaction-snapshot.js +121 -0
  51. package/dist/resources/extensions/gsd/complexity-classifier.js +5 -3
  52. package/dist/resources/extensions/gsd/db-writer.js +88 -16
  53. package/dist/resources/extensions/gsd/dispatch-guard.js +44 -3
  54. package/dist/resources/extensions/gsd/doctor-git-checks.js +23 -29
  55. package/dist/resources/extensions/gsd/doctor-providers.js +51 -5
  56. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +1 -0
  57. package/dist/resources/extensions/gsd/error-classifier.js +31 -3
  58. package/dist/resources/extensions/gsd/exec-history.js +120 -0
  59. package/dist/resources/extensions/gsd/exec-sandbox.js +258 -0
  60. package/dist/resources/extensions/gsd/gitignore.js +1 -0
  61. package/dist/resources/extensions/gsd/gsd-db.js +168 -23
  62. package/dist/resources/extensions/gsd/guided-flow.js +190 -1
  63. package/dist/resources/extensions/gsd/health-widget.js +4 -1
  64. package/dist/resources/extensions/gsd/hook-emitter.js +108 -0
  65. package/dist/resources/extensions/gsd/init-wizard.js +15 -1
  66. package/dist/resources/extensions/gsd/key-manager.js +28 -0
  67. package/dist/resources/extensions/gsd/memory-backfill.js +126 -0
  68. package/dist/resources/extensions/gsd/memory-store.js +19 -0
  69. package/dist/resources/extensions/gsd/model-router.js +36 -3
  70. package/dist/resources/extensions/gsd/notifications.js +30 -16
  71. package/dist/resources/extensions/gsd/pre-execution-checks.js +44 -9
  72. package/dist/resources/extensions/gsd/preferences-types.js +9 -0
  73. package/dist/resources/extensions/gsd/preferences-validation.js +83 -0
  74. package/dist/resources/extensions/gsd/preferences.js +17 -17
  75. package/dist/resources/extensions/gsd/prompt-loader.js +22 -7
  76. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  77. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -2
  78. package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +2 -0
  79. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -0
  80. package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
  81. package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -2
  82. package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
  83. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -0
  84. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -0
  85. package/dist/resources/extensions/gsd/prompts/system.md +1 -0
  86. package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
  87. package/dist/resources/extensions/gsd/safety/file-change-validator.js +13 -5
  88. package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
  89. package/dist/resources/extensions/gsd/state.js +43 -4
  90. package/dist/resources/extensions/gsd/token-counter.js +22 -5
  91. package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
  92. package/dist/resources/extensions/gsd/tools/exec-search-tool.js +59 -0
  93. package/dist/resources/extensions/gsd/tools/exec-tool.js +126 -0
  94. package/dist/resources/extensions/gsd/tools/memory-tools.js +26 -1
  95. package/dist/resources/extensions/gsd/tools/resume-tool.js +23 -0
  96. package/dist/resources/extensions/gsd/uok/plan-v2.js +20 -3
  97. package/dist/resources/extensions/gsd/workflow-mcp.js +3 -0
  98. package/dist/resources/extensions/gsd/workflow-templates/spike.md +6 -0
  99. package/dist/resources/extensions/gsd/worktree-resolver.js +50 -10
  100. package/dist/resources/extensions/search-the-web/command-search-provider.js +5 -4
  101. package/dist/resources/extensions/search-the-web/native-search.js +45 -13
  102. package/dist/resources/extensions/shared/cmux-events.js +12 -0
  103. package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
  104. package/dist/resources/skills/api-design/SKILL.md +190 -0
  105. package/dist/resources/skills/create-mcp-server/SKILL.md +121 -0
  106. package/dist/resources/skills/decompose-into-slices/SKILL.md +139 -0
  107. package/dist/resources/skills/dependency-upgrade/SKILL.md +158 -0
  108. package/dist/resources/skills/design-an-interface/SKILL.md +102 -0
  109. package/dist/resources/skills/forensics/SKILL.md +153 -0
  110. package/dist/resources/skills/grill-me/SKILL.md +93 -0
  111. package/dist/resources/skills/handoff/SKILL.md +121 -0
  112. package/dist/resources/skills/observability/SKILL.md +174 -0
  113. package/dist/resources/skills/security-review/SKILL.md +181 -0
  114. package/dist/resources/skills/spike-wrap-up/SKILL.md +138 -0
  115. package/dist/resources/skills/tdd/SKILL.md +112 -0
  116. package/dist/resources/skills/verify-before-complete/SKILL.md +98 -0
  117. package/dist/resources/skills/write-docs/SKILL.md +82 -0
  118. package/dist/resources/skills/write-milestone-brief/SKILL.md +135 -0
  119. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  120. package/dist/web/standalone/.next/BUILD_ID +1 -1
  121. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  122. package/dist/web/standalone/.next/build-manifest.json +4 -4
  123. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  124. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  125. package/dist/web/standalone/.next/required-server-files.json +4 -4
  126. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  127. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  129. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  130. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  131. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  132. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  133. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  137. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  139. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  140. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  141. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  143. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  146. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  153. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  165. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  185. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  195. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  201. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  204. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  207. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  209. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  210. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  213. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  215. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  216. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  217. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  219. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  221. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  222. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  223. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  225. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  226. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  227. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  229. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  230. package/dist/web/standalone/.next/server/app/index.html +1 -1
  231. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  232. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  233. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  234. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  235. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  236. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  237. package/dist/web/standalone/.next/server/app/page.js +2 -2
  238. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  239. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  240. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  241. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  242. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  243. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  244. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  245. package/dist/web/standalone/.next/server/middleware.js +2 -2
  246. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  247. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  248. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  249. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  250. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  251. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +9 -0
  252. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  253. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  254. package/dist/web/standalone/.next/static/chunks/app/page-5b113fd32bc2a1c3.js +1 -0
  255. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  256. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  257. package/dist/web/standalone/.next/static/chunks/{webpack-5fc74f13a25fa1bb.js → webpack-1832629448831fdc.js} +1 -1
  258. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  259. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  260. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  261. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  262. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  263. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  264. package/dist/web/standalone/server.js +1 -1
  265. package/dist/welcome-screen.js +6 -1
  266. package/dist/wizard.js +2 -0
  267. package/package.json +14 -12
  268. package/packages/daemon/package.json +2 -2
  269. package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
  270. package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
  271. package/packages/mcp-server/dist/remote-questions.js +732 -0
  272. package/packages/mcp-server/dist/remote-questions.js.map +1 -0
  273. package/packages/mcp-server/dist/server.d.ts +7 -0
  274. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  275. package/packages/mcp-server/dist/server.js +70 -8
  276. package/packages/mcp-server/dist/server.js.map +1 -1
  277. package/packages/mcp-server/dist/session-manager.d.ts +14 -0
  278. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
  279. package/packages/mcp-server/dist/session-manager.js +49 -1
  280. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  281. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  282. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  283. package/packages/mcp-server/dist/workflow-tools.js +163 -25
  284. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  285. package/packages/mcp-server/package.json +9 -3
  286. package/packages/mcp-server/src/mcp-server.test.ts +67 -0
  287. package/packages/mcp-server/src/readers/readers.test.ts +5 -1
  288. package/packages/mcp-server/src/remote-questions.test.ts +294 -0
  289. package/packages/mcp-server/src/remote-questions.ts +916 -0
  290. package/packages/mcp-server/src/server.ts +89 -14
  291. package/packages/mcp-server/src/session-manager.ts +43 -1
  292. package/packages/mcp-server/src/workflow-tools.test.ts +146 -1
  293. package/packages/mcp-server/src/workflow-tools.ts +215 -43
  294. package/packages/mcp-server/tsconfig.test.json +19 -0
  295. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  296. package/packages/native/package.json +6 -1
  297. package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
  298. package/packages/native/tsconfig.tsbuildinfo +1 -1
  299. package/packages/pi-agent-core/dist/agent-loop.js +12 -0
  300. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  301. package/packages/pi-agent-core/dist/types.d.ts +30 -0
  302. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  303. package/packages/pi-agent-core/dist/types.js.map +1 -1
  304. package/packages/pi-agent-core/package.json +6 -1
  305. package/packages/pi-agent-core/src/agent-loop.test.ts +220 -15
  306. package/packages/pi-agent-core/src/agent-loop.ts +14 -0
  307. package/packages/pi-agent-core/src/types.ts +34 -0
  308. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  309. package/packages/pi-ai/dist/models/custom.d.ts +38 -0
  310. package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
  311. package/packages/pi-ai/dist/models/custom.js +41 -0
  312. package/packages/pi-ai/dist/models/custom.js.map +1 -1
  313. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
  314. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  315. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts +2 -0
  316. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts.map +1 -0
  317. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +13 -0
  318. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -0
  319. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  320. package/packages/pi-ai/dist/providers/anthropic-shared.js +27 -4
  321. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  322. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  323. package/packages/pi-ai/dist/providers/anthropic.js +13 -4
  324. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  325. package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
  326. package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
  327. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
  328. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
  329. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  330. package/packages/pi-ai/dist/providers/openai-completions.js +60 -15
  331. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  332. package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
  333. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  334. package/packages/pi-ai/dist/providers/simple-options.js +16 -1
  335. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  336. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts +17 -0
  337. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts.map +1 -0
  338. package/packages/pi-ai/dist/providers/think-tag-parser.js +75 -0
  339. package/packages/pi-ai/dist/providers/think-tag-parser.js.map +1 -0
  340. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts +2 -0
  341. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts.map +1 -0
  342. package/packages/pi-ai/dist/providers/think-tag-parser.test.js +41 -0
  343. package/packages/pi-ai/dist/providers/think-tag-parser.test.js.map +1 -0
  344. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  345. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +12 -2
  346. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  347. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +164 -14
  348. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
  349. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  350. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +15 -3
  351. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  352. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts +2 -0
  353. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts.map +1 -0
  354. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +67 -0
  355. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -0
  356. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  357. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +16 -3
  358. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  359. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts +2 -0
  360. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts.map +1 -0
  361. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +67 -0
  362. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -0
  363. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts +2 -0
  364. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts.map +1 -0
  365. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js +289 -0
  366. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js.map +1 -0
  367. package/packages/pi-ai/package.json +6 -1
  368. package/packages/pi-ai/src/models/custom.ts +42 -0
  369. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
  370. package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -0
  371. package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
  372. package/packages/pi-ai/src/providers/anthropic.ts +15 -4
  373. package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
  374. package/packages/pi-ai/src/providers/openai-completions.ts +57 -16
  375. package/packages/pi-ai/src/providers/simple-options.ts +17 -1
  376. package/packages/pi-ai/src/providers/think-tag-parser.test.ts +44 -0
  377. package/packages/pi-ai/src/providers/think-tag-parser.ts +94 -0
  378. package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +200 -23
  379. package/packages/pi-ai/src/utils/oauth/github-copilot.ts +12 -2
  380. package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +84 -0
  381. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +15 -5
  382. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +84 -0
  383. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +16 -5
  384. package/packages/pi-ai/src/utils/oauth/oauth-providers.test.ts +363 -0
  385. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  386. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +3 -2
  387. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
  388. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
  389. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  390. package/packages/pi-coding-agent/dist/core/agent-session.js +32 -2
  391. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  392. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
  393. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  394. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
  395. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  396. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
  397. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  398. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
  399. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  400. package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
  401. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  402. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  403. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +8 -2
  404. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  405. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
  406. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
  407. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
  408. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
  409. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
  410. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
  411. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
  412. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
  413. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
  414. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
  415. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
  416. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
  417. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  418. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  419. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  420. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +3 -2
  421. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  422. package/packages/pi-coding-agent/dist/core/extensions/loader.js +28 -8
  423. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  424. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +35 -2
  425. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  426. package/packages/pi-coding-agent/dist/core/extensions/runner.js +233 -0
  427. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  428. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +212 -2
  429. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  430. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  431. package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts +53 -0
  432. package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts.map +1 -0
  433. package/packages/pi-coding-agent/dist/core/hooks-runner.js +337 -0
  434. package/packages/pi-coding-agent/dist/core/hooks-runner.js.map +1 -0
  435. package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts +2 -0
  436. package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts.map +1 -0
  437. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +234 -0
  438. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -0
  439. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
  440. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  441. package/packages/pi-coding-agent/dist/core/index.js +1 -0
  442. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  443. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +11 -0
  444. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  445. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts +3 -1
  446. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts.map +1 -1
  447. package/packages/pi-coding-agent/dist/core/model-discovery.js +92 -12
  448. package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -1
  449. package/packages/pi-coding-agent/dist/core/model-discovery.test.js +16 -1
  450. package/packages/pi-coding-agent/dist/core/model-discovery.test.js.map +1 -1
  451. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts +2 -0
  452. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts.map +1 -0
  453. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js +40 -0
  454. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js.map +1 -0
  455. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -2
  456. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  457. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
  458. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
  459. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
  460. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
  461. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js +61 -1
  462. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js.map +1 -1
  463. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +5 -0
  464. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  465. package/packages/pi-coding-agent/dist/core/model-registry.js +90 -10
  466. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  467. package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts +2 -0
  468. package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts.map +1 -0
  469. package/packages/pi-coding-agent/dist/core/redact-secrets.js +49 -0
  470. package/packages/pi-coding-agent/dist/core/redact-secrets.js.map +1 -0
  471. package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts +2 -0
  472. package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts.map +1 -0
  473. package/packages/pi-coding-agent/dist/core/redact-secrets.test.js +67 -0
  474. package/packages/pi-coding-agent/dist/core/redact-secrets.test.js.map +1 -0
  475. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
  476. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  477. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  478. package/packages/pi-coding-agent/dist/core/session-manager.js +10 -6
  479. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  480. package/packages/pi-coding-agent/dist/core/session-manager.test.js +45 -1
  481. package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
  482. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +55 -0
  483. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  484. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  485. package/packages/pi-coding-agent/dist/core/system-prompt.js +3 -3
  486. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  487. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
  488. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
  489. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  490. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  491. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  492. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +1 -1
  493. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  494. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +5 -4
  495. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  496. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
  497. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +13 -7
  498. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
  499. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +7 -6
  500. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  501. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +29 -21
  502. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  503. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -0
  504. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  505. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  506. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +13 -1
  507. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  508. package/packages/pi-coding-agent/package.json +6 -1
  509. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +3 -2
  510. package/packages/pi-coding-agent/src/core/agent-session.ts +38 -2
  511. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
  512. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
  513. package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
  514. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +8 -1
  515. package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
  516. package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
  517. package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
  518. package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
  519. package/packages/pi-coding-agent/src/core/extensions/index.ts +16 -0
  520. package/packages/pi-coding-agent/src/core/extensions/loader.ts +29 -11
  521. package/packages/pi-coding-agent/src/core/extensions/runner.ts +351 -0
  522. package/packages/pi-coding-agent/src/core/extensions/types.ts +266 -0
  523. package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +269 -0
  524. package/packages/pi-coding-agent/src/core/hooks-runner.ts +460 -0
  525. package/packages/pi-coding-agent/src/core/index.ts +10 -0
  526. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +13 -0
  527. package/packages/pi-coding-agent/src/core/model-discovery.test.ts +19 -0
  528. package/packages/pi-coding-agent/src/core/model-discovery.ts +99 -12
  529. package/packages/pi-coding-agent/src/core/model-registry-auth-header.test.ts +44 -0
  530. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -2
  531. package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
  532. package/packages/pi-coding-agent/src/core/model-registry-discovery.test.ts +75 -0
  533. package/packages/pi-coding-agent/src/core/model-registry.ts +102 -10
  534. package/packages/pi-coding-agent/src/core/redact-secrets.test.ts +86 -0
  535. package/packages/pi-coding-agent/src/core/redact-secrets.ts +58 -0
  536. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
  537. package/packages/pi-coding-agent/src/core/session-manager.test.ts +65 -1
  538. package/packages/pi-coding-agent/src/core/session-manager.ts +10 -6
  539. package/packages/pi-coding-agent/src/core/settings-manager.ts +57 -0
  540. package/packages/pi-coding-agent/src/core/system-prompt.ts +3 -3
  541. package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
  542. package/packages/pi-coding-agent/src/index.ts +16 -0
  543. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +6 -6
  544. package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +16 -7
  545. package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +36 -22
  546. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
  547. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +13 -1
  548. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  549. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +12 -5
  550. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  551. package/packages/pi-tui/package.json +6 -1
  552. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -5
  553. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  554. package/packages/rpc-client/package.json +6 -1
  555. package/pkg/package.json +1 -1
  556. package/scripts/install.js +512 -0
  557. package/scripts/lib/workspace-manifest.cjs +86 -0
  558. package/scripts/link-workspace-packages.cjs +5 -16
  559. package/scripts/postinstall.js +9 -178
  560. package/src/resources/agents/researcher.md +1 -1
  561. package/src/resources/extensions/claude-code-cli/readiness.ts +32 -8
  562. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +148 -61
  563. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +236 -5
  564. package/src/resources/extensions/cmux/index.ts +35 -10
  565. package/src/resources/extensions/google-search/extension-manifest.json +5 -4
  566. package/src/resources/extensions/google-search/index.ts +8 -470
  567. package/src/resources/extensions/gsd/auto/loop-deps.ts +15 -1
  568. package/src/resources/extensions/gsd/auto/loop.ts +9 -0
  569. package/src/resources/extensions/gsd/auto/phases.ts +131 -10
  570. package/src/resources/extensions/gsd/auto/run-unit.ts +40 -2
  571. package/src/resources/extensions/gsd/auto/session.ts +35 -2
  572. package/src/resources/extensions/gsd/auto/types.ts +1 -1
  573. package/src/resources/extensions/gsd/auto-dispatch.ts +59 -16
  574. package/src/resources/extensions/gsd/auto-model-selection.ts +71 -15
  575. package/src/resources/extensions/gsd/auto-post-unit.ts +62 -3
  576. package/src/resources/extensions/gsd/auto-prompts.ts +28 -1
  577. package/src/resources/extensions/gsd/auto-recovery.ts +62 -1
  578. package/src/resources/extensions/gsd/auto-start.ts +80 -74
  579. package/src/resources/extensions/gsd/auto-verification.ts +33 -0
  580. package/src/resources/extensions/gsd/auto-worktree.ts +62 -63
  581. package/src/resources/extensions/gsd/auto.ts +100 -41
  582. package/src/resources/extensions/gsd/blocked-models.ts +98 -0
  583. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +120 -1
  584. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +40 -9
  585. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +109 -0
  586. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +5 -0
  587. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +26 -0
  588. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +54 -6
  589. package/src/resources/extensions/gsd/bootstrap/system-context.ts +102 -35
  590. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +35 -2
  591. package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
  592. package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
  593. package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
  594. package/src/resources/extensions/gsd/commands-extract-learnings.ts +55 -90
  595. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
  596. package/src/resources/extensions/gsd/compaction-snapshot.ts +165 -0
  597. package/src/resources/extensions/gsd/complexity-classifier.ts +5 -3
  598. package/src/resources/extensions/gsd/db-writer.ts +88 -17
  599. package/src/resources/extensions/gsd/dispatch-guard.ts +44 -2
  600. package/src/resources/extensions/gsd/doctor-git-checks.ts +23 -27
  601. package/src/resources/extensions/gsd/doctor-providers.ts +59 -6
  602. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +2 -0
  603. package/src/resources/extensions/gsd/error-classifier.ts +36 -3
  604. package/src/resources/extensions/gsd/exec-history.ts +153 -0
  605. package/src/resources/extensions/gsd/exec-sandbox.ts +326 -0
  606. package/src/resources/extensions/gsd/gitignore.ts +1 -1
  607. package/src/resources/extensions/gsd/gsd-db.ts +186 -23
  608. package/src/resources/extensions/gsd/guided-flow.ts +222 -1
  609. package/src/resources/extensions/gsd/health-widget.ts +3 -1
  610. package/src/resources/extensions/gsd/hook-emitter.ts +188 -0
  611. package/src/resources/extensions/gsd/init-wizard.ts +15 -1
  612. package/src/resources/extensions/gsd/journal.ts +2 -1
  613. package/src/resources/extensions/gsd/key-manager.ts +28 -0
  614. package/src/resources/extensions/gsd/memory-backfill.ts +140 -0
  615. package/src/resources/extensions/gsd/memory-store.ts +26 -0
  616. package/src/resources/extensions/gsd/model-router.ts +42 -1
  617. package/src/resources/extensions/gsd/notifications.ts +27 -15
  618. package/src/resources/extensions/gsd/pre-execution-checks.ts +46 -10
  619. package/src/resources/extensions/gsd/preferences-types.ts +46 -0
  620. package/src/resources/extensions/gsd/preferences-validation.ts +79 -0
  621. package/src/resources/extensions/gsd/preferences.ts +17 -17
  622. package/src/resources/extensions/gsd/prompt-loader.ts +30 -7
  623. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  624. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -2
  625. package/src/resources/extensions/gsd/prompts/debug-diagnose.md +2 -0
  626. package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -0
  627. package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
  628. package/src/resources/extensions/gsd/prompts/execute-task.md +3 -2
  629. package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
  630. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -0
  631. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -0
  632. package/src/resources/extensions/gsd/prompts/system.md +1 -0
  633. package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
  634. package/src/resources/extensions/gsd/safety/file-change-validator.ts +17 -4
  635. package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
  636. package/src/resources/extensions/gsd/state.ts +45 -4
  637. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +188 -2
  638. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +95 -1
  639. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
  640. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +122 -0
  641. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
  642. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +63 -0
  643. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +33 -3
  644. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +38 -0
  645. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
  646. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +98 -0
  647. package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +54 -0
  648. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
  649. package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
  650. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +68 -66
  651. package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +123 -0
  652. package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +15 -0
  653. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
  654. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  655. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  656. package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +3 -3
  657. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
  658. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +42 -0
  659. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +8 -4
  660. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +9 -9
  661. package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +77 -0
  662. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +148 -3
  663. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +1 -1
  664. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +306 -1
  665. package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
  666. package/src/resources/extensions/gsd/tests/exec-history.test.ts +237 -0
  667. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +210 -0
  668. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +58 -0
  669. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +40 -9
  670. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +62 -0
  671. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +121 -0
  672. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +447 -1
  673. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +27 -0
  674. package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +11 -0
  675. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +78 -0
  676. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +1 -0
  677. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
  678. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
  679. package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +11 -0
  680. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -1
  681. package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +1 -1
  682. package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
  683. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +37 -0
  684. package/src/resources/extensions/gsd/tests/key-manager.test.ts +9 -0
  685. package/src/resources/extensions/gsd/tests/load-memory-block.test.ts +36 -0
  686. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  687. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +12 -0
  688. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  689. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
  690. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
  691. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
  692. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +19 -0
  693. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
  694. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
  695. package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +14 -0
  696. package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
  697. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +356 -0
  698. package/src/resources/extensions/gsd/tests/preferences.test.ts +110 -0
  699. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
  700. package/src/resources/extensions/gsd/tests/prompt-loader-extension-dir.test.ts +49 -0
  701. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +103 -4
  702. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
  703. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +9 -3
  704. package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
  705. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
  706. package/src/resources/extensions/gsd/tests/save-gate-result-render.test.ts +95 -0
  707. package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
  708. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
  709. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
  710. package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
  711. package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
  712. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +23 -0
  713. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
  714. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +136 -8
  715. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
  716. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
  717. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +35 -0
  718. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
  719. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
  720. package/src/resources/extensions/gsd/tests/write-gate.test.ts +64 -0
  721. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +3 -1
  722. package/src/resources/extensions/gsd/token-counter.ts +22 -5
  723. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  724. package/src/resources/extensions/gsd/tools/exec-search-tool.ts +81 -0
  725. package/src/resources/extensions/gsd/tools/exec-tool.ts +183 -0
  726. package/src/resources/extensions/gsd/tools/memory-tools.ts +31 -1
  727. package/src/resources/extensions/gsd/tools/resume-tool.ts +40 -0
  728. package/src/resources/extensions/gsd/uok/plan-v2.ts +26 -3
  729. package/src/resources/extensions/gsd/workflow-logger.ts +4 -1
  730. package/src/resources/extensions/gsd/workflow-mcp.ts +3 -0
  731. package/src/resources/extensions/gsd/workflow-templates/spike.md +6 -0
  732. package/src/resources/extensions/gsd/worktree-resolver.ts +54 -9
  733. package/src/resources/extensions/search-the-web/command-search-provider.ts +5 -4
  734. package/src/resources/extensions/search-the-web/native-search.ts +48 -12
  735. package/src/resources/extensions/shared/cmux-events.ts +59 -0
  736. package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
  737. package/src/resources/skills/api-design/SKILL.md +190 -0
  738. package/src/resources/skills/create-mcp-server/SKILL.md +121 -0
  739. package/src/resources/skills/decompose-into-slices/SKILL.md +139 -0
  740. package/src/resources/skills/dependency-upgrade/SKILL.md +158 -0
  741. package/src/resources/skills/design-an-interface/SKILL.md +102 -0
  742. package/src/resources/skills/forensics/SKILL.md +153 -0
  743. package/src/resources/skills/grill-me/SKILL.md +93 -0
  744. package/src/resources/skills/handoff/SKILL.md +121 -0
  745. package/src/resources/skills/observability/SKILL.md +174 -0
  746. package/src/resources/skills/security-review/SKILL.md +181 -0
  747. package/src/resources/skills/spike-wrap-up/SKILL.md +138 -0
  748. package/src/resources/skills/tdd/SKILL.md +112 -0
  749. package/src/resources/skills/verify-before-complete/SKILL.md +98 -0
  750. package/src/resources/skills/write-docs/SKILL.md +82 -0
  751. package/src/resources/skills/write-milestone-brief/SKILL.md +135 -0
  752. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +0 -9
  753. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +0 -1
  754. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  755. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  756. /package/dist/web/standalone/.next/static/{ssX7BLv3Dw9Fb4CtrCGeR → H51SzzS_EEgdBsDVhrLBv}/_buildManifest.js +0 -0
  757. /package/dist/web/standalone/.next/static/{ssX7BLv3Dw9Fb4CtrCGeR → H51SzzS_EEgdBsDVhrLBv}/_ssgManifest.js +0 -0
@@ -1,3 +1,21 @@
1
+ /**
2
+ * Strict plain-object guard. True only for object literals and
3
+ * `Object.create(null)` — not for `Date`, `URL`, `Map`, `Set`, class instances,
4
+ * or arrays. Used to gate `structuredContent` forwarding so the MCP transport
5
+ * receives only true JSON objects (the protocol contract). See #4477 review.
6
+ *
7
+ * Mirrored in `packages/mcp-server/src/workflow-tools.ts` for the
8
+ * `adaptExecutorResult` adapter on the workflow path. Keep both copies in
9
+ * sync if the contract definition needs to evolve.
10
+ */
11
+ function isPlainObject(value) {
12
+ if (value === null || typeof value !== 'object')
13
+ return false;
14
+ if (Array.isArray(value))
15
+ return false;
16
+ const proto = Object.getPrototypeOf(value);
17
+ return proto === null || proto === Object.prototype;
18
+ }
1
19
  // MCP SDK subpath imports use wildcard exports (./*) in @modelcontextprotocol/sdk's
2
20
  // package.json export map. The wildcard maps "./foo" → "./dist/cjs/foo" (no .js
3
21
  // suffix), so bare subpath specifiers like `${MCP_PKG}/server/stdio` resolve to
@@ -83,7 +101,23 @@ export async function startMcpServer(options) {
83
101
  // by stringifying into a text block so clients see the payload.
84
102
  return { type: 'text', text: JSON.stringify(block) };
85
103
  });
86
- return { content };
104
+ // Forward a tool's runtime `details` field to MCP's `structuredContent`
105
+ // channel. The protocol drops non-standard fields on the wire, so tools
106
+ // that populate `details` for client-side renderers (e.g. save_gate_result)
107
+ // would otherwise arrive empty on the other side. See #4472.
108
+ //
109
+ // Use a strict plain-object guard (prototype-chain check) rather than just
110
+ // `typeof === 'object' && !Array.isArray()` — Date, URL, Map, Set, and
111
+ // class instances would otherwise pass through and end up as
112
+ // `structuredContent`, violating the protocol's JSON-object contract.
113
+ // The mirror discipline applies in `workflow-tools.ts adaptExecutorResult`.
114
+ const base = { content };
115
+ if (isPlainObject(result.details)) {
116
+ base.structuredContent = result.details;
117
+ }
118
+ if (result.isError === true)
119
+ base.isError = true;
120
+ return base;
87
121
  }
88
122
  catch (err) {
89
123
  // AbortError from a cancelled tool surfaces as a normal error — MCP
@@ -60,6 +60,8 @@ const OTHER_PROVIDERS = [
60
60
  { value: 'xai', label: 'xAI (Grok)', hint: 'console.x.ai' },
61
61
  { value: 'openrouter', label: 'OpenRouter', hint: '200+ models — openrouter.ai/keys' },
62
62
  { value: 'mistral', label: 'Mistral', hint: 'console.mistral.ai/api-keys' },
63
+ { value: 'minimax', label: 'MiniMax', hint: 'platform.minimax.io (Anthropic-compatible recommended)' },
64
+ { value: 'minimax-cn', label: 'MiniMax CN', hint: 'api.minimaxi.com (Anthropic-compatible)' },
63
65
  { value: 'ollama-cloud', label: 'Ollama Cloud' },
64
66
  { value: 'custom-openai', label: 'Custom (OpenAI-compatible)', hint: 'Ollama, LM Studio, vLLM, proxies — see docs/providers.md' },
65
67
  ];
@@ -131,6 +133,36 @@ function persistDefaultProvider(providerId) {
131
133
  // Non-fatal: startup fallback logic will still run.
132
134
  }
133
135
  }
136
+ /**
137
+ * Persist the selected default model to settings.json.
138
+ */
139
+ function persistDefaultModel(modelId) {
140
+ const settingsPath = join(agentDir, 'settings.json');
141
+ try {
142
+ const raw = existsSync(settingsPath) ? JSON.parse(readFileSync(settingsPath, 'utf-8')) : {};
143
+ raw.defaultModel = modelId;
144
+ mkdirSync(dirname(settingsPath), { recursive: true });
145
+ writeFileSync(settingsPath, JSON.stringify(raw, null, 2), 'utf-8');
146
+ }
147
+ catch {
148
+ // Non-fatal: startup fallback logic will still run.
149
+ }
150
+ }
151
+ function detectNativeProviderFromBaseUrl(baseUrl) {
152
+ try {
153
+ const hostname = new URL(baseUrl).hostname.toLowerCase();
154
+ if (hostname === 'api.minimax.io' || hostname.endsWith('.minimax.io')) {
155
+ return 'minimax';
156
+ }
157
+ if (hostname === 'api.minimaxi.com' || hostname.endsWith('.minimaxi.com')) {
158
+ return 'minimax-cn';
159
+ }
160
+ }
161
+ catch {
162
+ // ignore parse failures; handled by prior validation
163
+ }
164
+ return null;
165
+ }
134
166
  /** Sentinel returned by runStep when the user cancels — tells the caller
135
167
  * to abort the entire wizard. */
136
168
  const STEP_CANCELLED = Symbol('step-cancelled');
@@ -558,9 +590,22 @@ async function runCustomOpenAIFlow(p, pc, authStorage) {
558
590
  if (p.isCancel(modelId) || !modelId)
559
591
  return false;
560
592
  const trimmedModelId = modelId.trim();
593
+ const nativeProvider = detectNativeProviderFromBaseUrl(trimmedUrl);
594
+ if (nativeProvider) {
595
+ const envVar = nativeProvider === 'minimax' ? 'MINIMAX_API_KEY' : 'MINIMAX_CN_API_KEY';
596
+ authStorage.set(nativeProvider, { type: 'api_key', key: trimmedKey });
597
+ persistDefaultProvider(nativeProvider);
598
+ persistDefaultModel(trimmedModelId);
599
+ process.env[envVar] = trimmedKey;
600
+ p.log.success(`${pc.green('MiniMax')} detected — configured as native provider (${pc.cyan(nativeProvider)})`);
601
+ p.log.info(`Model: ${pc.cyan(trimmedModelId)}`);
602
+ p.log.info(pc.dim('Using Anthropic-compatible MiniMax integration for full model metadata and clean thinking output.'));
603
+ return true;
604
+ }
561
605
  // Save API key to auth storage
562
606
  authStorage.set('custom-openai', { type: 'api_key', key: trimmedKey });
563
607
  persistDefaultProvider('custom-openai');
608
+ persistDefaultModel(trimmedModelId);
564
609
  // Write or merge into models.json
565
610
  const modelsJsonPath = join(agentDir, 'models.json');
566
611
  let config = { providers: {} };
@@ -21,6 +21,6 @@ export declare function getNewerManagedResourceVersion(agentDir: string, current
21
21
  *
22
22
  * Inspectable: `ls ~/.gsd/agent/extensions/`
23
23
  */
24
- export declare function initResources(agentDir: string): void;
24
+ export declare function initResources(agentDir: string, skillsDir?: string): void;
25
25
  export declare function hasStaleCompiledExtensionSiblings(extensionsDir: string, sourceDir?: string): boolean;
26
26
  export declare function buildResourceLoader(agentDir: string): DefaultResourceLoader;
@@ -506,7 +506,7 @@ function pruneRemovedBundledExtensions(manifest, agentDir) {
506
506
  *
507
507
  * Inspectable: `ls ~/.gsd/agent/extensions/`
508
508
  */
509
- export function initResources(agentDir) {
509
+ export function initResources(agentDir, skillsDir = join(homedir(), '.agents', 'skills')) {
510
510
  mkdirSync(agentDir, { recursive: true });
511
511
  const currentVersion = getBundledGsdVersion();
512
512
  const manifest = readManagedResourceManifest(agentDir);
@@ -538,13 +538,7 @@ export function initResources(agentDir) {
538
538
  // Sync bundled resources — overwrite so updates land on next launch.
539
539
  syncResourceDir(bundledExtensionsDir, join(agentDir, 'extensions'));
540
540
  syncResourceDir(join(resourcesDir, 'agents'), join(agentDir, 'agents'));
541
- // Skills are no longer force-synced here. Users install skills via the
542
- // skills.sh CLI (`npx skills add <repo>`) into ~/.agents/skills/ which
543
- // is the industry-standard Agent Skills ecosystem directory.
544
- //
545
- // Migration from the legacy ~/.gsd/agent/skills/ directory is handled
546
- // above the manifest check so it runs on every launch (including retries
547
- // after partial copy failures).
541
+ syncResourceDir(join(resourcesDir, 'skills'), skillsDir);
548
542
  // Sync GSD-WORKFLOW.md to agentDir as a fallback for when GSD_WORKFLOW_PATH
549
543
  // env var is not set (e.g. fork/dev builds, alternative entry points).
550
544
  const workflowSrc = join(resourcesDir, 'GSD-WORKFLOW.md');
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: researcher
3
3
  description: Web researcher that finds and synthesizes current information using Brave Search
4
- tools: search-the-web, bash
4
+ tools: search-the-web, bash, capture_thought, memory_query, gsd_graph
5
5
  ---
6
6
 
7
7
  You are a web researcher. You find current, accurate information using web search and synthesize it into a clear, well-structured report.
@@ -10,15 +10,38 @@
10
10
  */
11
11
  import { execFileSync } from "node:child_process";
12
12
  /**
13
- * Platform-correct binary name for the Claude Code CLI.
13
+ * Candidate executable names for the Claude Code CLI.
14
14
  *
15
- * On Windows, npm-global binaries are installed as `.cmd` shims and
16
- * `execFileSync` does not auto-resolve the extension — calling bare
17
- * `claude` would fail with ENOENT even when the CLI is installed and
18
- * authenticated. Mirrors the `NPM_COMMAND` pattern in
19
- * `src/resources/extensions/gsd/pre-execution-checks.ts`.
15
+ * Keep the explicit win32 ternary selector for regression coverage (Issue #4424):
16
+ * Node's execFileSync must target `claude.cmd` directly on Windows.
20
17
  */
21
18
  const CLAUDE_COMMAND = process.platform === "win32" ? "claude.cmd" : "claude";
19
+ /**
20
+ * Windows installs vary: some environments expose `claude.cmd` (npm shim),
21
+ * `claude.exe` (direct binary install), or a bare `claude` shim on PATH
22
+ * (for example Git Bash wrappers). Try all three to avoid false "not
23
+ * installed" results in readiness checks.
24
+ */
25
+ const CLAUDE_COMMAND_CANDIDATES = process.platform === "win32" ? [CLAUDE_COMMAND, "claude.exe", "claude"] : [CLAUDE_COMMAND];
26
+ function execClaude(args) {
27
+ let lastError;
28
+ for (const command of CLAUDE_COMMAND_CANDIDATES) {
29
+ try {
30
+ return execFileSync(command, args, { timeout: 5_000, stdio: "pipe" });
31
+ }
32
+ catch (error) {
33
+ lastError = error;
34
+ const code = error?.code;
35
+ // Windows Git Bash can surface `.cmd` spawn failures as EINVAL instead
36
+ // of ENOENT. Treat both as "try next candidate".
37
+ if (code === "ENOENT" || code === "EINVAL") {
38
+ continue;
39
+ }
40
+ throw error;
41
+ }
42
+ }
43
+ throw lastError ?? new Error(`Claude CLI executable not found (tried: ${CLAUDE_COMMAND_CANDIDATES.join(", ")})`);
44
+ }
22
45
  let cachedBinaryPresent = null;
23
46
  let cachedAuthed = null;
24
47
  let lastCheckMs = 0;
@@ -32,7 +55,7 @@ function refreshCache() {
32
55
  lastCheckMs = now;
33
56
  // Check binary presence
34
57
  try {
35
- execFileSync(CLAUDE_COMMAND, ["--version"], { timeout: 5_000, stdio: "pipe" });
58
+ execClaude(["--version"]);
36
59
  cachedBinaryPresent = true;
37
60
  }
38
61
  catch {
@@ -42,7 +65,7 @@ function refreshCache() {
42
65
  }
43
66
  // Check auth status — exit code 0 with non-error output means authenticated
44
67
  try {
45
- const output = execFileSync(CLAUDE_COMMAND, ["auth", "status"], { timeout: 5_000, stdio: "pipe" })
68
+ const output = execClaude(["auth", "status"])
46
69
  .toString()
47
70
  .toLowerCase();
48
71
  // The CLI outputs "not logged in", "no credentials", or similar when unauthenticated
@@ -3,8 +3,9 @@
3
3
  *
4
4
  * The SDK runs the full agentic loop (multi-turn, tool execution, compaction)
5
5
  * in one call. This adapter translates the SDK's streaming output into
6
- * AssistantMessageEvents for TUI rendering, then strips tool-call blocks from
7
- * the final AssistantMessage so GSD's agent loop doesn't try to dispatch them.
6
+ * AssistantMessageEvents for TUI rendering, then preserves externally executed
7
+ * tool-call blocks on the final AssistantMessage so Agent Core can render them
8
+ * while `externalToolExecution` prevents local redispatch.
8
9
  */
9
10
  import { EventStream } from "@gsd/pi-ai";
10
11
  import { execSync } from "node:child_process";
@@ -484,25 +485,33 @@ export function makeAbortedMessage(model, lastTextContent) {
484
485
  /**
485
486
  * Resolve the Claude Code permission mode for the current run.
486
487
  *
487
- * GSD subagents run underneath a host Claude Code session the user has
488
- * already consented to, and their work (edits, shell inspection, MCP calls)
489
- * spans the full workflow toolset. Defaulting the inner SDK to
490
- * `bypassPermissions` avoids per-tool approval prompts that offer no
491
- * meaningful safety beyond what the host session and the subagent prompts
492
- * already enforce. `GSD_CLAUDE_CODE_PERMISSION_MODE` lets security-conscious
493
- * users opt into a stricter mode (`acceptEdits`, `default`, `plan`).
488
+ * Defaults to `acceptEdits`, which auto-approves file reads/edits but
489
+ * surfaces a permission dialog for dangerous operations (e.g. general Bash,
490
+ * Agent, WebFetch). This prevents tools outside the allowlist from being
491
+ * silently denied the SDK emits an `extension_ui_request` event so the
492
+ * user sees a prompt instead of a silent refusal that Claude Code mistakes
493
+ * for user rejection (#4383).
494
494
  *
495
- * Tradeoff: bypass means a prompt-injection payload read from an untrusted
496
- * file could trigger tool calls without a second gate. Accepted for GSD
497
- * because the workflow is explicit user intent and the alternative
498
- * (#4099) is continuous approval fatigue that blocks real work.
495
+ * Set `GSD_CLAUDE_CODE_PERMISSION_MODE` to `bypassPermissions` to restore
496
+ * the old always-approve behaviour, or to `default` / `plan` for stricter
497
+ * modes.
498
+ *
499
+ * When `GSD_HEADLESS=1` is set (auto-mode / non-interactive runs), the
500
+ * default flips to `bypassPermissions` because there is no UI to approve
501
+ * permission dialogs — `acceptEdits` would hang verification commands like
502
+ * `npx tsc --noEmit` or `npx vitest run` indefinitely (#4657). Explicit
503
+ * overrides still win, so users can opt back into `acceptEdits` in headless.
499
504
  */
500
505
  export async function resolveClaudePermissionMode(env = process.env) {
501
506
  const override = env.GSD_CLAUDE_CODE_PERMISSION_MODE?.trim();
502
507
  if (override === "bypassPermissions" || override === "acceptEdits" || override === "default" || override === "plan") {
503
508
  return override;
504
509
  }
505
- return "bypassPermissions";
510
+ if (env.GSD_HEADLESS === "1") {
511
+ console.warn("[claude-code-cli] Headless mode detected (GSD_HEADLESS=1): defaulting permissionMode to 'bypassPermissions' so verification Bash commands can run. Set GSD_CLAUDE_CODE_PERMISSION_MODE=acceptEdits to opt out.");
512
+ return "bypassPermissions";
513
+ }
514
+ return "acceptEdits";
506
515
  }
507
516
  // NOTE: These helpers intentionally mirror @gsd/pi-ai anthropic-shared
508
517
  // behavior so this extension remains typecheck-stable even when the published
@@ -554,7 +563,7 @@ function mapThinkingLevelToAnthropicEffort(level, modelId) {
554
563
  export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
555
564
  const { reasoning, ...sdkExtraOptions } = extraOptions;
556
565
  const mcpServers = buildWorkflowMcpServers();
557
- const permissionMode = overrides?.permissionMode ?? "bypassPermissions";
566
+ const permissionMode = overrides?.permissionMode ?? "acceptEdits";
558
567
  const disallowedTools = ["AskUserQuestion"];
559
568
  // Pre-authorize the safe built-ins and every registered workflow MCP
560
569
  // server's tools. `acceptEdits` mode (the interactive default) only
@@ -637,6 +646,68 @@ function normalizeToolResultContent(content) {
637
646
  }
638
647
  return blocks.length > 0 ? blocks : [{ type: "text", text: "" }];
639
648
  }
649
+ /**
650
+ * Extract a `details` payload from an MCP tool-result block.
651
+ *
652
+ * MCP's `CallToolResult` carries structured data in `structuredContent` — the
653
+ * protocol's supported channel for non-text payloads. Claude Code's synthetic
654
+ * user message may surface that field in one of two shapes depending on SDK
655
+ * version: as a sibling on the `mcp_tool_result` block itself, or as a
656
+ * dedicated content sub-block with `type: "structuredContent"`. Snake-case
657
+ * (`structured_content`) is accepted defensively in case a transport hop
658
+ * rewrites casing. All other shapes fall back to an empty object so callers
659
+ * can rely on `details` being present.
660
+ */
661
+ function extractStructuredDetailsFromBlock(block) {
662
+ const sibling = block.structuredContent ?? block.structured_content;
663
+ if (sibling && typeof sibling === "object" && !Array.isArray(sibling)) {
664
+ return sibling;
665
+ }
666
+ if (Array.isArray(block.content)) {
667
+ for (const item of block.content) {
668
+ if (!item || typeof item !== "object")
669
+ continue;
670
+ const sub = item;
671
+ if (sub.type !== "structuredContent" && sub.type !== "structured_content")
672
+ continue;
673
+ const payload = sub.structuredContent ?? sub.structured_content ?? sub.data ?? sub.value;
674
+ if (payload && typeof payload === "object" && !Array.isArray(payload)) {
675
+ return payload;
676
+ }
677
+ }
678
+ }
679
+ // Return undefined (not {}) when no structured payload is present, matching
680
+ // the pre-#4477 contract where `details` was nullable. An empty-object
681
+ // sentinel is truthy and breaks downstream consumers that gate on
682
+ // `if (details)`. `undefined` matches the type of the field these results
683
+ // flow into (`Record<string, unknown> | undefined`).
684
+ return undefined;
685
+ }
686
+ /**
687
+ * True for items that are MCP `structuredContent` pseudo-blocks living inside
688
+ * a tool-result `content[]` array. These blocks carry the structured payload
689
+ * (extracted separately by `extractStructuredDetailsFromBlock`) and must NOT
690
+ * leak into the visible content rendered to the user — otherwise the renderer
691
+ * stringifies the JSON pseudo-block and shows it next to the actual tool
692
+ * output. See PR #4477 review (CodeRabbit, post-fix-round).
693
+ */
694
+ function isStructuredContentPseudoBlock(item) {
695
+ if (!item || typeof item !== "object")
696
+ return false;
697
+ const type = item.type;
698
+ return type === "structuredContent" || type === "structured_content";
699
+ }
700
+ /**
701
+ * Strip `structuredContent` pseudo-blocks from a tool-result content array
702
+ * before normalization. The structured payload is extracted via the sibling
703
+ * `structuredContent` field (or a dedicated extractor pass on the raw block);
704
+ * the visible content path must not include the pseudo-block itself.
705
+ */
706
+ function stripStructuredContentPseudoBlocks(content) {
707
+ if (!Array.isArray(content))
708
+ return content;
709
+ return content.filter((item) => !isStructuredContentPseudoBlock(item));
710
+ }
640
711
  /** Extract tool result payloads from an SDK synthetic user message, keyed by tool-use ID. */
641
712
  export function extractToolResultsFromSdkUserMessage(message) {
642
713
  const extracted = [];
@@ -657,8 +728,8 @@ export function extractToolResultsFromSdkUserMessage(message) {
657
728
  extracted.push({
658
729
  toolUseId,
659
730
  result: {
660
- content: normalizeToolResultContent(block.content),
661
- details: {},
731
+ content: normalizeToolResultContent(stripStructuredContentPseudoBlocks(block.content)),
732
+ details: extractStructuredDetailsFromBlock(block),
662
733
  isError: block.is_error === true,
663
734
  },
664
735
  });
@@ -672,8 +743,8 @@ export function extractToolResultsFromSdkUserMessage(message) {
672
743
  extracted.push({
673
744
  toolUseId,
674
745
  result: {
675
- content: normalizeToolResultContent(toolResult.content),
676
- details: {},
746
+ content: normalizeToolResultContent(stripStructuredContentPseudoBlocks(toolResult.content)),
747
+ details: extractStructuredDetailsFromBlock(toolResult),
677
748
  isError: toolResult.is_error === true,
678
749
  },
679
750
  });
@@ -693,6 +764,39 @@ function attachExternalResultsToToolBlocks(toolBlocks, toolResultsById) {
693
764
  block.externalResult = externalResult;
694
765
  }
695
766
  }
767
+ /**
768
+ * Build the final assistant content that Agent Core consumes in
769
+ * `externalToolExecution` mode. This preserves tool-call blocks, attaches any
770
+ * SDK-produced external results by tool-call id, and then appends the final
771
+ * text/thinking blocks for the completed turn.
772
+ */
773
+ export function buildFinalAssistantContent(params) {
774
+ const mergedToolBlocks = [...params.intermediateToolBlocks];
775
+ if (params.pendingContent) {
776
+ mergePendingToolCalls(mergedToolBlocks, params.pendingContent);
777
+ }
778
+ attachExternalResultsToToolBlocks(mergedToolBlocks, params.toolResultsById);
779
+ const finalContent = [...mergedToolBlocks];
780
+ if (params.pendingContent && params.pendingContent.length > 0) {
781
+ for (const block of params.pendingContent) {
782
+ if (block.type === "text" || block.type === "thinking") {
783
+ finalContent.push(block);
784
+ }
785
+ }
786
+ }
787
+ else {
788
+ if (params.lastThinkingContent) {
789
+ finalContent.push({ type: "thinking", thinking: params.lastThinkingContent });
790
+ }
791
+ if (params.lastTextContent) {
792
+ finalContent.push({ type: "text", text: params.lastTextContent });
793
+ }
794
+ }
795
+ if (finalContent.length === 0 && params.fallbackResultText) {
796
+ finalContent.push({ type: "text", text: params.fallbackResultText });
797
+ }
798
+ return finalContent;
799
+ }
696
800
  /**
697
801
  * Merge tool-call blocks from the active partial-message builder into the
698
802
  * running list of intermediate tool calls, preserving order and de-duping
@@ -722,8 +826,9 @@ export function mergePendingToolCalls(intermediate, pending) {
722
826
  * GSD streamSimple function that delegates to the Claude Agent SDK.
723
827
  *
724
828
  * Emits AssistantMessageEvent deltas for real-time TUI rendering
725
- * (thinking, text, tool calls). The final AssistantMessage has tool-call
726
- * blocks stripped so the agent loop ends the turn without local dispatch.
829
+ * (thinking, text, tool calls). The final AssistantMessage preserves
830
+ * SDK-executed tool-call blocks for Agent Core's `externalToolExecution`
831
+ * path, which renders the results without dispatching the tools locally.
727
832
  */
728
833
  export function streamViaClaudeCode(model, context, options) {
729
834
  const stream = createAssistantStream();
@@ -886,42 +991,14 @@ async function pumpSdkMessages(model, context, options, stream) {
886
991
  // -- Result (terminal) --
887
992
  case "result": {
888
993
  const result = msg;
889
- // Build final message. Include intermediate tool calls so the
890
- // agent loop's externalToolExecution path emits tool_execution
891
- // events for proper TUI rendering, followed by the text response.
892
- const finalContent = [];
893
- // If the final turn ended without a synthetic user message
894
- // (e.g. stop_reason: "tool_use" followed directly by result,
895
- // or a turn with text but no tool execution), the `builder`
896
- // still holds toolCall blocks that were never pushed into
897
- // `intermediateToolBlocks`. Fold them in here so they aren't
898
- // dropped from the final AssistantMessage.
899
- if (builder) {
900
- mergePendingToolCalls(intermediateToolBlocks, builder.message.content);
901
- }
902
- // Add tool calls from intermediate turns first (renders above text)
903
- attachExternalResultsToToolBlocks(intermediateToolBlocks, toolResultsById);
904
- finalContent.push(...intermediateToolBlocks);
905
- // Add text/thinking from the last turn
906
- if (builder && builder.message.content.length > 0) {
907
- for (const block of builder.message.content) {
908
- if (block.type === "text" || block.type === "thinking") {
909
- finalContent.push(block);
910
- }
911
- }
912
- }
913
- else {
914
- if (lastThinkingContent) {
915
- finalContent.push({ type: "thinking", thinking: lastThinkingContent });
916
- }
917
- if (lastTextContent) {
918
- finalContent.push({ type: "text", text: lastTextContent });
919
- }
920
- }
921
- // Fallback: use the SDK's result text if we have no content
922
- if (finalContent.length === 0 && result.subtype === "success" && result.result) {
923
- finalContent.push({ type: "text", text: result.result });
924
- }
994
+ const finalContent = buildFinalAssistantContent({
995
+ intermediateToolBlocks,
996
+ pendingContent: builder?.message.content,
997
+ toolResultsById,
998
+ lastThinkingContent,
999
+ lastTextContent,
1000
+ fallbackResultText: result.subtype === "success" && result.result ? result.result : undefined,
1001
+ });
925
1002
  const finalMessage = {
926
1003
  role: "assistant",
927
1004
  content: finalContent,
@@ -1,5 +1,6 @@
1
1
  import { execFileSync, spawn } from "node:child_process";
2
2
  import { existsSync } from "node:fs";
3
+ import { CMUX_CHANNELS } from "../shared/cmux-events.js";
3
4
  const DEFAULT_SOCKET_PATH = "/tmp/cmux.sock";
4
5
  const STATUS_KEY = "gsd";
5
6
  const lastSidebarSnapshots = new Map();
@@ -382,3 +383,22 @@ function extractSurfaceIds(value) {
382
383
  visit(value);
383
384
  return Array.from(found);
384
385
  }
386
+ /**
387
+ * Wire event subscriptions so cmux reacts to gsd events.
388
+ * Called by the gsd extension during registration, passing pi.events.
389
+ */
390
+ export function initCmuxEventListeners(events) {
391
+ events.on(CMUX_CHANNELS.SIDEBAR, (data) => {
392
+ const event = data;
393
+ if (event.action === "sync" && event.state) {
394
+ syncCmuxSidebar(event.preferences, event.state);
395
+ }
396
+ if (event.action === "clear") {
397
+ clearCmuxSidebar(event.preferences);
398
+ }
399
+ });
400
+ events.on(CMUX_CHANNELS.LOG, (data) => {
401
+ const event = data;
402
+ logCmuxEvent(event.preferences, event.message, event.level);
403
+ });
404
+ }
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "id": "google-search",
3
- "name": "Google Search",
3
+ "name": "Google Search (deprecated stub)",
4
4
  "version": "1.0.0",
5
- "description": "Web search via Google with AI-synthesized answers and source citations",
5
+ "description": "Deprecation stub. The google_search tool moved to @gsd-extensions/google-search. Install with: gsd extensions install @gsd-extensions/google-search",
6
6
  "tier": "bundled",
7
+ "deprecated": true,
7
8
  "requires": { "platform": ">=2.29.0" },
8
9
  "provides": {
9
- "tools": ["google_search"],
10
- "hooks": ["session_start", "session_shutdown"]
10
+ "tools": [],
11
+ "hooks": ["session_start"]
11
12
  }
12
13
  }