gsd-pi 2.51.0-dev.ae8f7cb → 2.52.0-dev.585e355

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 (337) hide show
  1. package/README.md +4 -4
  2. package/dist/headless-events.d.ts +18 -0
  3. package/dist/headless-events.js +36 -0
  4. package/dist/headless-types.d.ts +28 -0
  5. package/dist/headless-types.js +7 -0
  6. package/dist/headless.d.ts +8 -3
  7. package/dist/headless.js +47 -16
  8. package/dist/help-text.js +16 -5
  9. package/dist/onboarding.js +5 -4
  10. package/dist/remote-questions-config.js +1 -1
  11. package/dist/resources/extensions/async-jobs/async-bash-tool.js +29 -17
  12. package/dist/resources/extensions/async-jobs/job-manager.js +4 -1
  13. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +18 -19
  14. package/dist/resources/extensions/gsd/auto/phases.js +6 -0
  15. package/dist/resources/extensions/gsd/auto-dispatch.js +18 -0
  16. package/dist/resources/extensions/gsd/auto-start.js +2 -0
  17. package/dist/resources/extensions/gsd/auto-timers.js +24 -2
  18. package/dist/resources/extensions/gsd/auto-tool-tracking.js +25 -7
  19. package/dist/resources/extensions/gsd/auto-worktree.js +21 -0
  20. package/dist/resources/extensions/gsd/auto.js +8 -4
  21. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +105 -70
  22. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +12 -2
  23. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +1 -1
  24. package/dist/resources/extensions/gsd/claude-import.js +60 -9
  25. package/dist/resources/extensions/gsd/commands/handlers/auto.js +69 -6
  26. package/dist/resources/extensions/gsd/commands-config.js +10 -5
  27. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +4 -4
  28. package/dist/resources/extensions/gsd/detection.js +6 -6
  29. package/dist/resources/extensions/gsd/docs/preferences-reference.md +5 -5
  30. package/dist/resources/extensions/gsd/error-classifier.js +105 -0
  31. package/dist/resources/extensions/gsd/git-service.js +4 -3
  32. package/dist/resources/extensions/gsd/gitignore.js +7 -7
  33. package/dist/resources/extensions/gsd/gsd-db.js +298 -45
  34. package/dist/resources/extensions/gsd/init-wizard.js +2 -2
  35. package/dist/resources/extensions/gsd/key-manager.js +7 -16
  36. package/dist/resources/extensions/gsd/markdown-renderer.js +5 -4
  37. package/dist/resources/extensions/gsd/memory-store.js +28 -13
  38. package/dist/resources/extensions/gsd/milestone-actions.js +19 -0
  39. package/dist/resources/extensions/gsd/preferences-models.js +1 -13
  40. package/dist/resources/extensions/gsd/preferences-types.js +1 -1
  41. package/dist/resources/extensions/gsd/preferences.js +13 -13
  42. package/dist/resources/extensions/gsd/prompts/system.md +1 -1
  43. package/dist/resources/extensions/gsd/provider-error-pause.js +0 -44
  44. package/dist/resources/extensions/gsd/rule-registry.js +1 -1
  45. package/dist/resources/extensions/gsd/service-tier.js +13 -2
  46. package/dist/resources/extensions/gsd/state.js +33 -19
  47. package/dist/resources/extensions/gsd/status-guards.js +12 -0
  48. package/dist/resources/extensions/gsd/tools/complete-milestone.js +7 -13
  49. package/dist/resources/extensions/gsd/tools/complete-slice.js +7 -20
  50. package/dist/resources/extensions/gsd/tools/complete-task.js +11 -21
  51. package/dist/resources/extensions/gsd/tools/plan-milestone.js +28 -29
  52. package/dist/resources/extensions/gsd/tools/plan-slice.js +27 -26
  53. package/dist/resources/extensions/gsd/tools/plan-task.js +23 -23
  54. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +50 -41
  55. package/dist/resources/extensions/gsd/tools/reopen-slice.js +4 -3
  56. package/dist/resources/extensions/gsd/tools/reopen-task.js +5 -4
  57. package/dist/resources/extensions/gsd/tools/replan-slice.js +51 -41
  58. package/dist/resources/extensions/gsd/tools/validate-milestone.js +23 -16
  59. package/dist/resources/extensions/gsd/validation.js +21 -0
  60. package/dist/resources/extensions/gsd/workflow-logger.js +0 -1
  61. package/dist/resources/extensions/remote-questions/config.js +1 -1
  62. package/dist/resources/extensions/remote-questions/remote-command.js +1 -1
  63. package/dist/resources/extensions/search-the-web/native-search.js +1 -1
  64. package/dist/resources/extensions/search-the-web/provider.js +1 -1
  65. package/dist/resources/extensions/shared/rtk.js +5 -3
  66. package/dist/rtk.js +3 -1
  67. package/dist/web/standalone/.next/BUILD_ID +1 -1
  68. package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
  69. package/dist/web/standalone/.next/build-manifest.json +3 -3
  70. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  71. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  72. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  73. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  74. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  75. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  76. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  77. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  78. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  79. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  80. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  81. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  82. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  83. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  84. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  85. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  87. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  90. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  99. package/dist/web/standalone/.next/server/app/api/experimental/route.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/index.html +1 -1
  134. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  135. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  137. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  139. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  140. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
  142. package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
  143. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  146. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  147. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  148. package/dist/web/standalone/.next/static/chunks/4024.21054f459af5cc78.js +9 -0
  149. package/dist/web/standalone/.next/static/chunks/{webpack-cfc9a116e6450a6b.js → webpack-024d82be84800e52.js} +1 -1
  150. package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
  151. package/dist/wizard.js +4 -1
  152. package/package.json +2 -2
  153. package/packages/mcp-server/README.md +202 -0
  154. package/packages/mcp-server/package.json +36 -0
  155. package/packages/mcp-server/src/cli.ts +68 -0
  156. package/packages/mcp-server/src/index.ts +14 -0
  157. package/packages/mcp-server/src/mcp-server.test.ts +628 -0
  158. package/packages/mcp-server/src/server.ts +278 -0
  159. package/packages/mcp-server/src/session-manager.ts +328 -0
  160. package/packages/mcp-server/src/types.ts +107 -0
  161. package/packages/mcp-server/tsconfig.json +24 -0
  162. package/packages/pi-ai/dist/models.d.ts +14 -3
  163. package/packages/pi-ai/dist/models.d.ts.map +1 -1
  164. package/packages/pi-ai/dist/models.js +53 -10
  165. package/packages/pi-ai/dist/models.js.map +1 -1
  166. package/packages/pi-ai/dist/models.test.js +102 -1
  167. package/packages/pi-ai/dist/models.test.js.map +1 -1
  168. package/packages/pi-ai/dist/types.d.ts +30 -0
  169. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  170. package/packages/pi-ai/dist/types.js.map +1 -1
  171. package/packages/pi-ai/src/models.test.ts +114 -1
  172. package/packages/pi-ai/src/models.ts +70 -13
  173. package/packages/pi-ai/src/types.ts +31 -0
  174. package/packages/pi-coding-agent/dist/cli/args.d.ts +2 -0
  175. package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
  176. package/packages/pi-coding-agent/dist/cli/args.js +3 -0
  177. package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
  178. package/packages/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
  179. package/packages/pi-coding-agent/dist/core/bash-executor.js +5 -1
  180. package/packages/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
  181. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  182. package/packages/pi-coding-agent/dist/core/model-registry.js +9 -4
  183. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  184. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.d.ts +19 -0
  185. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.d.ts.map +1 -0
  186. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +83 -0
  187. package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -0
  188. package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  189. package/packages/pi-coding-agent/dist/core/tools/bash.js +5 -1
  190. package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  191. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  192. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  193. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  194. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  195. package/packages/pi-coding-agent/dist/main.js +5 -3
  196. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  197. package/packages/pi-coding-agent/dist/modes/index.d.ts +1 -1
  198. package/packages/pi-coding-agent/dist/modes/index.d.ts.map +1 -1
  199. package/packages/pi-coding-agent/dist/modes/index.js.map +1 -1
  200. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  201. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -2
  202. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  203. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +28 -1
  204. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  205. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +49 -0
  206. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  207. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts +1 -1
  208. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  209. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +114 -6
  210. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  211. package/packages/pi-coding-agent/dist/modes/rpc/rpc-protocol-v2.test.d.ts +9 -0
  212. package/packages/pi-coding-agent/dist/modes/rpc/rpc-protocol-v2.test.d.ts.map +1 -0
  213. package/packages/pi-coding-agent/dist/modes/rpc/rpc-protocol-v2.test.js +831 -0
  214. package/packages/pi-coding-agent/dist/modes/rpc/rpc-protocol-v2.test.js.map +1 -0
  215. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +66 -0
  216. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  217. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  218. package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
  219. package/packages/pi-coding-agent/dist/utils/shell.js +0 -1
  220. package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
  221. package/packages/pi-coding-agent/package.json +1 -1
  222. package/packages/pi-coding-agent/src/cli/args.ts +4 -0
  223. package/packages/pi-coding-agent/src/core/bash-executor.ts +5 -1
  224. package/packages/pi-coding-agent/src/core/model-registry.ts +10 -3
  225. package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +101 -0
  226. package/packages/pi-coding-agent/src/core/tools/bash.ts +5 -1
  227. package/packages/pi-coding-agent/src/index.ts +3 -0
  228. package/packages/pi-coding-agent/src/main.ts +5 -3
  229. package/packages/pi-coding-agent/src/modes/index.ts +8 -1
  230. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -2
  231. package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +54 -1
  232. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +124 -6
  233. package/packages/pi-coding-agent/src/modes/rpc/rpc-protocol-v2.test.ts +971 -0
  234. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +61 -4
  235. package/packages/pi-coding-agent/src/utils/shell.ts +0 -1
  236. package/packages/rpc-client/package.json +20 -0
  237. package/pkg/package.json +1 -1
  238. package/scripts/ensure-workspace-builds.cjs +36 -8
  239. package/src/resources/extensions/async-jobs/async-bash-tool.ts +22 -11
  240. package/src/resources/extensions/async-jobs/job-manager.ts +4 -1
  241. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +19 -20
  242. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +21 -0
  243. package/src/resources/extensions/gsd/auto/phases.ts +6 -0
  244. package/src/resources/extensions/gsd/auto-dispatch.ts +19 -0
  245. package/src/resources/extensions/gsd/auto-start.ts +2 -0
  246. package/src/resources/extensions/gsd/auto-timers.ts +25 -1
  247. package/src/resources/extensions/gsd/auto-tool-tracking.ts +30 -6
  248. package/src/resources/extensions/gsd/auto-worktree.ts +21 -0
  249. package/src/resources/extensions/gsd/auto.ts +10 -4
  250. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +125 -73
  251. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +11 -2
  252. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +1 -1
  253. package/src/resources/extensions/gsd/claude-import.ts +58 -9
  254. package/src/resources/extensions/gsd/commands/handlers/auto.ts +73 -6
  255. package/src/resources/extensions/gsd/commands-config.ts +11 -5
  256. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +4 -4
  257. package/src/resources/extensions/gsd/detection.ts +6 -6
  258. package/src/resources/extensions/gsd/docs/preferences-reference.md +5 -5
  259. package/src/resources/extensions/gsd/error-classifier.ts +139 -0
  260. package/src/resources/extensions/gsd/git-service.ts +4 -3
  261. package/src/resources/extensions/gsd/gitignore.ts +7 -7
  262. package/src/resources/extensions/gsd/gsd-db.ts +355 -63
  263. package/src/resources/extensions/gsd/init-wizard.ts +2 -2
  264. package/src/resources/extensions/gsd/key-manager.ts +7 -16
  265. package/src/resources/extensions/gsd/markdown-renderer.ts +5 -4
  266. package/src/resources/extensions/gsd/memory-store.ts +29 -18
  267. package/src/resources/extensions/gsd/milestone-actions.ts +17 -0
  268. package/src/resources/extensions/gsd/preferences-models.ts +1 -13
  269. package/src/resources/extensions/gsd/preferences-types.ts +1 -1
  270. package/src/resources/extensions/gsd/preferences.ts +12 -13
  271. package/src/resources/extensions/gsd/prompts/system.md +1 -1
  272. package/src/resources/extensions/gsd/provider-error-pause.ts +0 -57
  273. package/src/resources/extensions/gsd/rule-registry.ts +1 -1
  274. package/src/resources/extensions/gsd/service-tier.ts +14 -2
  275. package/src/resources/extensions/gsd/state.ts +34 -20
  276. package/src/resources/extensions/gsd/status-guards.ts +13 -0
  277. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -1
  278. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +61 -0
  279. package/src/resources/extensions/gsd/tests/claude-import-marketplace-discovery.test.ts +191 -0
  280. package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +1 -1
  281. package/src/resources/extensions/gsd/tests/commands-config.test.ts +24 -0
  282. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  283. package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +106 -0
  284. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  285. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +35 -7
  286. package/src/resources/extensions/gsd/tests/detection.test.ts +1 -1
  287. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +4 -4
  288. package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +1 -1
  289. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +2 -2
  290. package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
  291. package/src/resources/extensions/gsd/tests/git-service.test.ts +37 -4
  292. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +1 -1
  293. package/src/resources/extensions/gsd/tests/idle-watchdog-stall-override.test.ts +125 -0
  294. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +1 -1
  295. package/src/resources/extensions/gsd/tests/interactive-tool-idle-exemption.test.ts +119 -0
  296. package/src/resources/extensions/gsd/tests/key-manager.test.ts +16 -1
  297. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  298. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  299. package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +7 -7
  300. package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +85 -0
  301. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +91 -0
  302. package/src/resources/extensions/gsd/tests/preferences.test.ts +2 -2
  303. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +77 -70
  304. package/src/resources/extensions/gsd/tests/remediation-completion-guard.test.ts +110 -0
  305. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +29 -0
  306. package/src/resources/extensions/gsd/tests/status-guards.test.ts +30 -0
  307. package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +42 -31
  308. package/src/resources/extensions/gsd/tests/token-cost-display.test.ts +2 -2
  309. package/src/resources/extensions/gsd/tests/vacuous-truth-slices.test.ts +115 -0
  310. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +90 -0
  311. package/src/resources/extensions/gsd/tests/validation.test.ts +72 -0
  312. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +81 -1
  313. package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +130 -0
  314. package/src/resources/extensions/gsd/tools/complete-milestone.ts +7 -17
  315. package/src/resources/extensions/gsd/tools/complete-slice.ts +7 -24
  316. package/src/resources/extensions/gsd/tools/complete-task.ts +13 -25
  317. package/src/resources/extensions/gsd/tools/plan-milestone.ts +30 -32
  318. package/src/resources/extensions/gsd/tools/plan-slice.ts +30 -30
  319. package/src/resources/extensions/gsd/tools/plan-task.ts +26 -26
  320. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +57 -46
  321. package/src/resources/extensions/gsd/tools/reopen-slice.ts +4 -3
  322. package/src/resources/extensions/gsd/tools/reopen-task.ts +5 -4
  323. package/src/resources/extensions/gsd/tools/replan-slice.ts +55 -44
  324. package/src/resources/extensions/gsd/tools/validate-milestone.ts +26 -20
  325. package/src/resources/extensions/gsd/validation.ts +23 -0
  326. package/src/resources/extensions/gsd/workflow-logger.ts +0 -1
  327. package/src/resources/extensions/remote-questions/config.ts +1 -1
  328. package/src/resources/extensions/remote-questions/remote-command.ts +1 -1
  329. package/src/resources/extensions/search-the-web/native-search.ts +1 -1
  330. package/src/resources/extensions/search-the-web/provider.ts +1 -1
  331. package/src/resources/extensions/shared/rtk.ts +12 -3
  332. package/dist/web/standalone/.next/static/chunks/4024.9ad5def014d90ce4.js +0 -9
  333. package/dist/web/standalone/.next/static/css/de141508b083f922.css +0 -1
  334. /package/dist/resources/extensions/gsd/templates/{preferences.md → PREFERENCES.md} +0 -0
  335. /package/dist/web/standalone/.next/static/{5_KeZz1X0tXJK-d_4OhjB → KTe1kB5nPLQFIIFz2OcmI}/_buildManifest.js +0 -0
  336. /package/dist/web/standalone/.next/static/{5_KeZz1X0tXJK-d_4OhjB → KTe1kB5nPLQFIIFz2OcmI}/_ssgManifest.js +0 -0
  337. /package/src/resources/extensions/gsd/templates/{preferences.md → PREFERENCES.md} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-protocol-v2.test.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-protocol-v2.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RPC Protocol v2 test suite.\n *\n * Tests v1 backward compatibility, v2 init handshake, protocol locking,\n * v2 feature type shapes, and RpcClient command serialization against\n * mock child processes using PassThrough streams.\n */\n\nimport { describe, it, beforeEach, afterEach, mock } from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport { PassThrough } from \"node:stream\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.js\";\nimport type {\n\tRpcCommand,\n\tRpcResponse,\n\tRpcInitResult,\n\tRpcExecutionCompleteEvent,\n\tRpcCostUpdateEvent,\n\tRpcV2Event,\n\tRpcProtocolVersion,\n\tRpcSessionState,\n} from \"./rpc-types.js\";\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Collect JSONL output lines from a stream */\nfunction collectLines(stream: PassThrough): { lines: unknown[]; detach: () => void } {\n\tconst lines: unknown[] = [];\n\tconst detach = attachJsonlLineReader(stream, (line) => {\n\t\ttry {\n\t\t\tlines.push(JSON.parse(line));\n\t\t} catch {\n\t\t\t// skip non-JSON lines\n\t\t}\n\t});\n\treturn { lines, detach };\n}\n\n/** Write a command as JSONL to a writable stream and wait for drain */\nfunction writeLine(stream: PassThrough, obj: unknown): void {\n\tstream.write(serializeJsonLine(obj));\n}\n\n/**\n * Create a mock \"child process\" with piped stdin/stdout.\n * clientStdin → data flows into the \"server\" (from the client's perspective, this is what the client writes to)\n * clientStdout ← data flows out of the \"server\" (from the client's perspective, this is what the client reads from)\n *\n * The test acts as the \"server\": read from clientStdin, write to clientStdout.\n */\nfunction createMockProcess() {\n\t// Client writes to this → server reads from it\n\tconst clientStdin = new PassThrough();\n\t// Server writes to this → client reads from it\n\tconst clientStdout = new PassThrough();\n\n\treturn { clientStdin, clientStdout };\n}\n\n/** Wait a tick for async handlers to process */\nfunction tick(ms = 10): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// ============================================================================\n// JSONL utilities\n// ============================================================================\n\ndescribe(\"JSONL utilities\", () => {\n\tit(\"serializeJsonLine produces newline-terminated JSON\", () => {\n\t\tconst result = serializeJsonLine({ type: \"test\", value: 42 });\n\t\tassert.equal(result, '{\"type\":\"test\",\"value\":42}\\n');\n\t});\n\n\tit(\"serializeJsonLine handles nested objects\", () => {\n\t\tconst result = serializeJsonLine({ a: { b: [1, 2, 3] } });\n\t\tassert.ok(result.endsWith(\"\\n\"));\n\t\tconst parsed = JSON.parse(result.trim());\n\t\tassert.deepEqual(parsed, { a: { b: [1, 2, 3] } });\n\t});\n\n\tit(\"attachJsonlLineReader splits on LF only\", async () => {\n\t\tconst stream = new PassThrough();\n\t\tconst { lines, detach } = collectLines(stream);\n\n\t\tstream.write('{\"a\":1}\\n{\"b\":2}\\n');\n\t\tawait tick();\n\n\t\tassert.equal(lines.length, 2);\n\t\tassert.deepEqual(lines[0], { a: 1 });\n\t\tassert.deepEqual(lines[1], { b: 2 });\n\t\tdetach();\n\t});\n\n\tit(\"attachJsonlLineReader handles partial writes\", async () => {\n\t\tconst stream = new PassThrough();\n\t\tconst { lines, detach } = collectLines(stream);\n\n\t\tstream.write('{\"partial\":');\n\t\tawait tick();\n\t\tassert.equal(lines.length, 0);\n\n\t\tstream.write('\"value\"}\\n');\n\t\tawait tick();\n\t\tassert.equal(lines.length, 1);\n\t\tassert.deepEqual(lines[0], { partial: \"value\" });\n\t\tdetach();\n\t});\n\n\tit(\"attachJsonlLineReader handles CR+LF\", async () => {\n\t\tconst stream = new PassThrough();\n\t\tconst { lines, detach } = collectLines(stream);\n\n\t\tstream.write('{\"cr\":\"lf\"}\\r\\n');\n\t\tawait tick();\n\t\tassert.equal(lines.length, 1);\n\t\tassert.deepEqual(lines[0], { cr: \"lf\" });\n\t\tdetach();\n\t});\n\n\tit(\"detach stops line delivery\", async () => {\n\t\tconst stream = new PassThrough();\n\t\tconst { lines, detach } = collectLines(stream);\n\n\t\tstream.write('{\"before\":1}\\n');\n\t\tawait tick();\n\t\tassert.equal(lines.length, 1);\n\n\t\tdetach();\n\n\t\tstream.write('{\"after\":2}\\n');\n\t\tawait tick();\n\t\t// Should still be 1 since we detached\n\t\tassert.equal(lines.length, 1);\n\t});\n});\n\n// ============================================================================\n// v2 type shape assertions\n// ============================================================================\n\ndescribe(\"v2 type shapes\", () => {\n\tit(\"RpcInitResult has required fields\", () => {\n\t\tconst initResult: RpcInitResult = {\n\t\t\tprotocolVersion: 2,\n\t\t\tsessionId: \"test-session-123\",\n\t\t\tcapabilities: {\n\t\t\t\tevents: [\"execution_complete\", \"cost_update\"],\n\t\t\t\tcommands: [\"init\", \"shutdown\", \"subscribe\"],\n\t\t\t},\n\t\t};\n\t\tassert.equal(initResult.protocolVersion, 2);\n\t\tassert.ok(typeof initResult.sessionId === \"string\");\n\t\tassert.ok(Array.isArray(initResult.capabilities.events));\n\t\tassert.ok(Array.isArray(initResult.capabilities.commands));\n\t\tassert.ok(initResult.capabilities.events.includes(\"execution_complete\"));\n\t\tassert.ok(initResult.capabilities.events.includes(\"cost_update\"));\n\t\tassert.ok(initResult.capabilities.commands.includes(\"init\"));\n\t\tassert.ok(initResult.capabilities.commands.includes(\"shutdown\"));\n\t\tassert.ok(initResult.capabilities.commands.includes(\"subscribe\"));\n\t});\n\n\tit(\"RpcExecutionCompleteEvent matches expected shape\", () => {\n\t\tconst event: RpcExecutionCompleteEvent = {\n\t\t\ttype: \"execution_complete\",\n\t\t\trunId: \"run-abc-123\",\n\t\t\tstatus: \"completed\",\n\t\t\tstats: {\n\t\t\t\tcost: 0.05,\n\t\t\t\tturns: 3,\n\t\t\t\tduration: 12000,\n\t\t\t\ttokens: { input: 1000, output: 500, cacheRead: 200, cacheWrite: 100 },\n\t\t\t} as any, // SessionStats is complex, we just verify shape\n\t\t};\n\t\tassert.equal(event.type, \"execution_complete\");\n\t\tassert.ok(typeof event.runId === \"string\");\n\t\tassert.ok([\"completed\", \"error\", \"cancelled\"].includes(event.status));\n\t\tassert.ok(event.stats !== undefined);\n\t});\n\n\tit(\"RpcExecutionCompleteEvent supports error status with reason\", () => {\n\t\tconst event: RpcExecutionCompleteEvent = {\n\t\t\ttype: \"execution_complete\",\n\t\t\trunId: \"run-err-456\",\n\t\t\tstatus: \"error\",\n\t\t\treason: \"API rate limit exceeded\",\n\t\t\tstats: {} as any,\n\t\t};\n\t\tassert.equal(event.status, \"error\");\n\t\tassert.equal(event.reason, \"API rate limit exceeded\");\n\t});\n\n\tit(\"RpcCostUpdateEvent matches expected shape\", () => {\n\t\tconst event: RpcCostUpdateEvent = {\n\t\t\ttype: \"cost_update\",\n\t\t\trunId: \"run-cost-789\",\n\t\t\tturnCost: 0.01,\n\t\t\tcumulativeCost: 0.05,\n\t\t\ttokens: {\n\t\t\t\tinput: 500,\n\t\t\t\toutput: 200,\n\t\t\t\tcacheRead: 100,\n\t\t\t\tcacheWrite: 50,\n\t\t\t},\n\t\t};\n\t\tassert.equal(event.type, \"cost_update\");\n\t\tassert.ok(typeof event.runId === \"string\");\n\t\tassert.ok(typeof event.turnCost === \"number\");\n\t\tassert.ok(typeof event.cumulativeCost === \"number\");\n\t\tassert.ok(typeof event.tokens.input === \"number\");\n\t\tassert.ok(typeof event.tokens.output === \"number\");\n\t\tassert.ok(typeof event.tokens.cacheRead === \"number\");\n\t\tassert.ok(typeof event.tokens.cacheWrite === \"number\");\n\t});\n\n\tit(\"RpcV2Event discriminated union resolves by type field\", () => {\n\t\tconst events: RpcV2Event[] = [\n\t\t\t{\n\t\t\t\ttype: \"execution_complete\",\n\t\t\t\trunId: \"r1\",\n\t\t\t\tstatus: \"completed\",\n\t\t\t\tstats: {} as any,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"cost_update\",\n\t\t\t\trunId: \"r2\",\n\t\t\t\tturnCost: 0.01,\n\t\t\t\tcumulativeCost: 0.03,\n\t\t\t\ttokens: { input: 100, output: 50, cacheRead: 10, cacheWrite: 5 },\n\t\t\t},\n\t\t];\n\n\t\tfor (const event of events) {\n\t\t\tif (event.type === \"execution_complete\") {\n\t\t\t\t// TypeScript narrows to RpcExecutionCompleteEvent\n\t\t\t\tassert.ok(\"status\" in event);\n\t\t\t\tassert.ok(\"stats\" in event);\n\t\t\t} else if (event.type === \"cost_update\") {\n\t\t\t\t// TypeScript narrows to RpcCostUpdateEvent\n\t\t\t\tassert.ok(\"turnCost\" in event);\n\t\t\t\tassert.ok(\"tokens\" in event);\n\t\t\t} else {\n\t\t\t\tassert.fail(`Unexpected event type: ${(event as any).type}`);\n\t\t\t}\n\t\t}\n\t});\n\n\tit(\"RpcProtocolVersion is 1 or 2\", () => {\n\t\tconst v1: RpcProtocolVersion = 1;\n\t\tconst v2: RpcProtocolVersion = 2;\n\t\tassert.equal(v1, 1);\n\t\tassert.equal(v2, 2);\n\t});\n\n\tit(\"v2 prompt response includes optional runId field\", () => {\n\t\tconst v1Response: RpcResponse = {\n\t\t\tid: \"1\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"prompt\",\n\t\t\tsuccess: true,\n\t\t};\n\t\tassert.equal(v1Response.success, true);\n\t\tassert.equal((v1Response as any).runId, undefined);\n\n\t\tconst v2Response: RpcResponse = {\n\t\t\tid: \"2\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"prompt\",\n\t\t\tsuccess: true,\n\t\t\trunId: \"run-123\",\n\t\t};\n\t\tassert.equal(v2Response.success, true);\n\t\tassert.equal((v2Response as any).runId, \"run-123\");\n\t});\n\n\tit(\"v2 command types are present in RpcCommand union\", () => {\n\t\t// These compile — that's the actual test. Runtime verification:\n\t\tconst initCmd: RpcCommand = { type: \"init\", protocolVersion: 2 };\n\t\tconst shutdownCmd: RpcCommand = { type: \"shutdown\" };\n\t\tconst subscribeCmd: RpcCommand = { type: \"subscribe\", events: [\"agent_end\"] };\n\n\t\tassert.equal(initCmd.type, \"init\");\n\t\tassert.equal(shutdownCmd.type, \"shutdown\");\n\t\tassert.equal(subscribeCmd.type, \"subscribe\");\n\t});\n\n\tit(\"init command supports optional clientId\", () => {\n\t\tconst cmd: RpcCommand = { type: \"init\", protocolVersion: 2, clientId: \"my-client\" };\n\t\tassert.equal(cmd.type, \"init\");\n\t\tif (cmd.type === \"init\") {\n\t\t\tassert.equal(cmd.clientId, \"my-client\");\n\t\t}\n\t});\n\n\tit(\"shutdown command supports optional graceful flag\", () => {\n\t\tconst cmd: RpcCommand = { type: \"shutdown\", graceful: true };\n\t\tif (cmd.type === \"shutdown\") {\n\t\t\tassert.equal(cmd.graceful, true);\n\t\t}\n\t});\n\n\tit(\"v2 response types include init, shutdown, subscribe\", () => {\n\t\tconst initResp: RpcResponse = {\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"init\",\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tprotocolVersion: 2,\n\t\t\t\tsessionId: \"s1\",\n\t\t\t\tcapabilities: { events: [], commands: [] },\n\t\t\t},\n\t\t};\n\t\tconst shutdownResp: RpcResponse = {\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"shutdown\",\n\t\t\tsuccess: true,\n\t\t};\n\t\tconst subscribeResp: RpcResponse = {\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"subscribe\",\n\t\t\tsuccess: true,\n\t\t};\n\n\t\tassert.equal(initResp.command, \"init\");\n\t\tassert.equal(shutdownResp.command, \"shutdown\");\n\t\tassert.equal(subscribeResp.command, \"subscribe\");\n\t});\n});\n\n// ============================================================================\n// v1 backward compatibility\n// ============================================================================\n\ndescribe(\"v1 backward compatibility — command shapes\", () => {\n\tit(\"v1 prompt command has no protocolVersion or runId\", () => {\n\t\tconst cmd: RpcCommand = { type: \"prompt\", message: \"hello\" };\n\t\tassert.equal(cmd.type, \"prompt\");\n\t\tassert.equal((cmd as any).protocolVersion, undefined);\n\t\tassert.equal((cmd as any).runId, undefined);\n\t});\n\n\tit(\"v1 get_state response has no v2 fields\", () => {\n\t\tconst state: RpcSessionState = {\n\t\t\tthinkingLevel: \"medium\",\n\t\t\tisStreaming: false,\n\t\t\tisCompacting: false,\n\t\t\tsteeringMode: \"all\",\n\t\t\tfollowUpMode: \"all\",\n\t\t\tsessionId: \"test-id\",\n\t\t\tautoCompactionEnabled: true,\n\t\t\tautoRetryEnabled: false,\n\t\t\tretryInProgress: false,\n\t\t\tretryAttempt: 0,\n\t\t\tmessageCount: 0,\n\t\t\tpendingMessageCount: 0,\n\t\t\textensionsReady: true,\n\t\t};\n\t\t// v1 state should not include any v2-specific fields\n\t\tassert.equal((state as any).protocolVersion, undefined);\n\t\tassert.equal((state as any).runId, undefined);\n\t});\n\n\tit(\"v1 prompt response has no runId\", () => {\n\t\tconst resp: RpcResponse = {\n\t\t\tid: \"1\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"prompt\",\n\t\t\tsuccess: true,\n\t\t};\n\t\tassert.equal(resp.success, true);\n\t\t// runId is optional; in v1 mode it won't be present\n\t\tassert.equal((resp as any).runId, undefined);\n\t});\n\n\tit(\"error response shape is consistent across v1 and v2\", () => {\n\t\tconst errResp: RpcResponse = {\n\t\t\tid: \"err-1\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"init\",\n\t\t\tsuccess: false,\n\t\t\terror: \"Protocol version already locked. init must be the first command.\",\n\t\t};\n\t\tassert.equal(errResp.success, false);\n\t\tif (!errResp.success) {\n\t\t\tassert.ok(typeof errResp.error === \"string\");\n\t\t\tassert.ok(errResp.error.length > 0);\n\t\t}\n\t});\n});\n\n// ============================================================================\n// RpcClient command serialization tests (mock process)\n// ============================================================================\n\ndescribe(\"RpcClient command serialization\", () => {\n\t// We import the class dynamically to avoid the full module graph at test time.\n\t// Instead we test the protocol framing directly — what gets written to stdin and\n\t// what comes back from stdout — using PassThrough streams.\n\n\tit(\"init command serializes correctly\", () => {\n\t\tconst cmd = { id: \"req_1\", type: \"init\", protocolVersion: 2 };\n\t\tconst serialized = serializeJsonLine(cmd);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.equal(parsed.type, \"init\");\n\t\tassert.equal(parsed.protocolVersion, 2);\n\t\tassert.equal(parsed.id, \"req_1\");\n\t});\n\n\tit(\"init command with clientId serializes correctly\", () => {\n\t\tconst cmd = { id: \"req_1\", type: \"init\", protocolVersion: 2, clientId: \"test-client\" };\n\t\tconst serialized = serializeJsonLine(cmd);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.equal(parsed.clientId, \"test-client\");\n\t});\n\n\tit(\"shutdown command serializes correctly\", () => {\n\t\tconst cmd = { id: \"req_2\", type: \"shutdown\" };\n\t\tconst serialized = serializeJsonLine(cmd);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.equal(parsed.type, \"shutdown\");\n\t\tassert.equal(parsed.id, \"req_2\");\n\t});\n\n\tit(\"subscribe command serializes correctly with event list\", () => {\n\t\tconst cmd = { id: \"req_3\", type: \"subscribe\", events: [\"agent_end\", \"cost_update\"] };\n\t\tconst serialized = serializeJsonLine(cmd);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.equal(parsed.type, \"subscribe\");\n\t\tassert.deepEqual(parsed.events, [\"agent_end\", \"cost_update\"]);\n\t});\n\n\tit(\"subscribe command with wildcard serializes correctly\", () => {\n\t\tconst cmd = { id: \"req_4\", type: \"subscribe\", events: [\"*\"] };\n\t\tconst serialized = serializeJsonLine(cmd);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.deepEqual(parsed.events, [\"*\"]);\n\t});\n\n\tit(\"subscribe command with empty array serializes correctly\", () => {\n\t\tconst cmd = { id: \"req_5\", type: \"subscribe\", events: [] as string[] };\n\t\tconst serialized = serializeJsonLine(cmd);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.deepEqual(parsed.events, []);\n\t});\n\n\tit(\"sendUIResponse serializes correct JSONL\", () => {\n\t\tconst response = {\n\t\t\ttype: \"extension_ui_response\",\n\t\t\tid: \"ui-req-123\",\n\t\t\tvalue: \"test-value\",\n\t\t};\n\t\tconst serialized = serializeJsonLine(response);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.equal(parsed.type, \"extension_ui_response\");\n\t\tassert.equal(parsed.id, \"ui-req-123\");\n\t\tassert.equal(parsed.value, \"test-value\");\n\t});\n\n\tit(\"sendUIResponse with cancelled flag serializes correctly\", () => {\n\t\tconst response = {\n\t\t\ttype: \"extension_ui_response\",\n\t\t\tid: \"ui-req-456\",\n\t\t\tcancelled: true,\n\t\t};\n\t\tconst serialized = serializeJsonLine(response);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.equal(parsed.type, \"extension_ui_response\");\n\t\tassert.equal(parsed.cancelled, true);\n\t});\n\n\tit(\"sendUIResponse with confirmed flag serializes correctly\", () => {\n\t\tconst response = {\n\t\t\ttype: \"extension_ui_response\",\n\t\t\tid: \"ui-req-789\",\n\t\t\tconfirmed: true,\n\t\t};\n\t\tconst serialized = serializeJsonLine(response);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.equal(parsed.confirmed, true);\n\t});\n\n\tit(\"sendUIResponse with multiple values serializes correctly\", () => {\n\t\tconst response = {\n\t\t\ttype: \"extension_ui_response\",\n\t\t\tid: \"ui-req-multi\",\n\t\t\tvalues: [\"opt-a\", \"opt-b\"],\n\t\t};\n\t\tconst serialized = serializeJsonLine(response);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.deepEqual(parsed.values, [\"opt-a\", \"opt-b\"]);\n\t});\n\n\tit(\"prompt command with runId in v2 response\", () => {\n\t\tconst response = {\n\t\t\tid: \"req_10\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"prompt\",\n\t\t\tsuccess: true,\n\t\t\trunId: \"run-uuid-abc\",\n\t\t};\n\t\tconst serialized = serializeJsonLine(response);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.equal(parsed.runId, \"run-uuid-abc\");\n\t\tassert.equal(parsed.command, \"prompt\");\n\t\tassert.equal(parsed.success, true);\n\t});\n});\n\n// ============================================================================\n// Client ↔ Mock server integration (PassThrough streams)\n// ============================================================================\n\ndescribe(\"Client ↔ Mock server protocol exchange\", () => {\n\tlet clientStdin: PassThrough;\n\tlet clientStdout: PassThrough;\n\n\tbeforeEach(() => {\n\t\tconst mockProc = createMockProcess();\n\t\tclientStdin = mockProc.clientStdin;\n\t\tclientStdout = mockProc.clientStdout;\n\t});\n\n\tafterEach(() => {\n\t\tclientStdin.destroy();\n\t\tclientStdout.destroy();\n\t});\n\n\tit(\"init handshake: client writes init, server responds with init_result\", async () => {\n\t\t// Collect what the client would write\n\t\tconst { lines: clientWrites, detach: detachStdin } = collectLines(clientStdin);\n\n\t\t// Client sends init command\n\t\twriteLine(clientStdin, { id: \"req_1\", type: \"init\", protocolVersion: 2 });\n\t\tawait tick();\n\n\t\tassert.equal(clientWrites.length, 1);\n\t\tconst initCmd = clientWrites[0] as any;\n\t\tassert.equal(initCmd.type, \"init\");\n\t\tassert.equal(initCmd.protocolVersion, 2);\n\n\t\t// Server responds with init_result\n\t\tconst initResult: RpcInitResult = {\n\t\t\tprotocolVersion: 2,\n\t\t\tsessionId: \"sess-abc\",\n\t\t\tcapabilities: {\n\t\t\t\tevents: [\"execution_complete\", \"cost_update\"],\n\t\t\t\tcommands: [\"init\", \"shutdown\", \"subscribe\"],\n\t\t\t},\n\t\t};\n\t\twriteLine(clientStdout, {\n\t\t\tid: \"req_1\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"init\",\n\t\t\tsuccess: true,\n\t\t\tdata: initResult,\n\t\t});\n\n\t\t// Collect server response\n\t\tconst { lines: serverResponses, detach: detachStdout } = collectLines(clientStdout);\n\t\t// Already wrote above, but let's verify the shape by re-writing\n\t\twriteLine(clientStdout, {\n\t\t\tid: \"req_verify\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"init\",\n\t\t\tsuccess: true,\n\t\t\tdata: initResult,\n\t\t});\n\t\tawait tick();\n\n\t\tconst resp = serverResponses[0] as any;\n\t\tassert.equal(resp.type, \"response\");\n\t\tassert.equal(resp.command, \"init\");\n\t\tassert.equal(resp.success, true);\n\t\tassert.equal(resp.data.protocolVersion, 2);\n\t\tassert.ok(typeof resp.data.sessionId === \"string\");\n\n\t\tdetachStdin();\n\t\tdetachStdout();\n\t});\n\n\tit(\"shutdown: client writes shutdown, server acknowledges\", async () => {\n\t\tconst { lines: clientWrites, detach } = collectLines(clientStdin);\n\n\t\twriteLine(clientStdin, { id: \"req_2\", type: \"shutdown\" });\n\t\tawait tick();\n\n\t\tconst cmd = clientWrites[0] as any;\n\t\tassert.equal(cmd.type, \"shutdown\");\n\n\t\tdetach();\n\t});\n\n\tit(\"subscribe: client writes subscribe with event list\", async () => {\n\t\tconst { lines: clientWrites, detach } = collectLines(clientStdin);\n\n\t\twriteLine(clientStdin, { id: \"req_3\", type: \"subscribe\", events: [\"agent_end\", \"execution_complete\"] });\n\t\tawait tick();\n\n\t\tconst cmd = clientWrites[0] as any;\n\t\tassert.equal(cmd.type, \"subscribe\");\n\t\tassert.deepEqual(cmd.events, [\"agent_end\", \"execution_complete\"]);\n\n\t\tdetach();\n\t});\n\n\tit(\"sendUIResponse: client writes extension_ui_response\", async () => {\n\t\tconst { lines: clientWrites, detach } = collectLines(clientStdin);\n\n\t\twriteLine(clientStdin, {\n\t\t\ttype: \"extension_ui_response\",\n\t\t\tid: \"ui-123\",\n\t\t\tvalue: \"selected-option\",\n\t\t});\n\t\tawait tick();\n\n\t\tconst msg = clientWrites[0] as any;\n\t\tassert.equal(msg.type, \"extension_ui_response\");\n\t\tassert.equal(msg.id, \"ui-123\");\n\t\tassert.equal(msg.value, \"selected-option\");\n\n\t\tdetach();\n\t});\n\n\tit(\"v2 event filtering: subscribe with empty array should filter all\", async () => {\n\t\t// An empty event filter means no events pass through (Set with 0 entries)\n\t\tconst subscribeCmd = { id: \"req_4\", type: \"subscribe\", events: [] as string[] };\n\t\tconst serialized = serializeJsonLine(subscribeCmd);\n\t\tconst parsed = JSON.parse(serialized);\n\t\tassert.deepEqual(parsed.events, []);\n\t\t// Server-side: `eventFilter = new Set([])` — Set.has(anything) returns false\n\t\tconst filter = new Set(parsed.events as string[]);\n\t\tassert.equal(filter.has(\"agent_end\"), false);\n\t\tassert.equal(filter.has(\"execution_complete\"), false);\n\t\tassert.equal(filter.size, 0);\n\t});\n\n\tit(\"v2 event filtering: subscribe with wildcard resets filter\", async () => {\n\t\t// Server-side: `events.includes(\"*\")` → `eventFilter = null`\n\t\tconst subscribeCmd = { type: \"subscribe\", events: [\"*\"] };\n\t\tconst parsed = JSON.parse(serializeJsonLine(subscribeCmd));\n\t\tconst hasWildcard = (parsed.events as string[]).includes(\"*\");\n\t\tassert.equal(hasWildcard, true);\n\t\t// When wildcard is detected, filter becomes null (all events pass)\n\t});\n\n\tit(\"multiple commands can be sent sequentially\", async () => {\n\t\tconst { lines, detach } = collectLines(clientStdin);\n\n\t\twriteLine(clientStdin, { id: \"1\", type: \"init\", protocolVersion: 2 });\n\t\twriteLine(clientStdin, { id: \"2\", type: \"subscribe\", events: [\"agent_end\"] });\n\t\twriteLine(clientStdin, { id: \"3\", type: \"prompt\", message: \"hello\" });\n\t\tawait tick();\n\n\t\tassert.equal(lines.length, 3);\n\t\tassert.equal((lines[0] as any).type, \"init\");\n\t\tassert.equal((lines[1] as any).type, \"subscribe\");\n\t\tassert.equal((lines[2] as any).type, \"prompt\");\n\n\t\tdetach();\n\t});\n});\n\n// ============================================================================\n// Negative tests — malformed inputs, error paths, boundary conditions\n// ============================================================================\n\ndescribe(\"Negative tests — protocol error shapes\", () => {\n\tit(\"init with missing protocolVersion produces a type error at compile time\", () => {\n\t\t// Runtime check: a message missing protocolVersion is malformed\n\t\tconst malformed = { type: \"init\" } as any;\n\t\tassert.equal(malformed.protocolVersion, undefined);\n\t\t// Server would treat this as v1 lock since it's not a valid init\n\t});\n\n\tit(\"subscribe with non-array events is a type violation\", () => {\n\t\t// Runtime: server expects events to be string[]\n\t\tconst malformed = { type: \"subscribe\", events: \"agent_end\" } as any;\n\t\tassert.equal(typeof malformed.events, \"string\"); // Not an array\n\t\tassert.equal(Array.isArray(malformed.events), false);\n\t});\n\n\tit(\"double init error response shape\", () => {\n\t\t// When init is sent after protocol lock, server returns error\n\t\tconst errorResp: RpcResponse = {\n\t\t\tid: \"req_dup\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"init\",\n\t\t\tsuccess: false,\n\t\t\terror: \"Protocol version already locked. init must be the first command.\",\n\t\t};\n\t\tassert.equal(errorResp.success, false);\n\t\tif (!errorResp.success) {\n\t\t\tassert.ok(errorResp.error.includes(\"already locked\"));\n\t\t}\n\t});\n\n\tit(\"init after v1 lock error response shape\", () => {\n\t\t// First command was get_state (v1 lock), then init arrives\n\t\tconst errorResp: RpcResponse = {\n\t\t\tid: \"req_late_init\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"init\",\n\t\t\tsuccess: false,\n\t\t\terror: \"Protocol version already locked. init must be the first command.\",\n\t\t};\n\t\tassert.equal(errorResp.success, false);\n\t\tif (!errorResp.success) {\n\t\t\tassert.ok(errorResp.error.includes(\"init must be the first command\"));\n\t\t}\n\t});\n\n\tit(\"unknown command type produces error response\", () => {\n\t\tconst errorResp: RpcResponse = {\n\t\t\tid: \"req_unknown\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"nonexistent\",\n\t\t\tsuccess: false,\n\t\t\terror: \"Unknown command: nonexistent\",\n\t\t};\n\t\tassert.equal(errorResp.success, false);\n\t\tif (!errorResp.success) {\n\t\t\tassert.ok(errorResp.error.includes(\"Unknown command\"));\n\t\t}\n\t});\n\n\tit(\"malformed JSON parse error shape\", () => {\n\t\tconst errorResp: RpcResponse = {\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"parse\",\n\t\t\tsuccess: false,\n\t\t\terror: \"Failed to parse command: Unexpected token\",\n\t\t};\n\t\tassert.equal(errorResp.command, \"parse\");\n\t\tassert.equal(errorResp.success, false);\n\t});\n\n\tit(\"shutdown works in both v1 and v2 — no version gating\", () => {\n\t\t// shutdown returns success regardless of protocolVersion\n\t\tconst v1Shutdown: RpcResponse = {\n\t\t\tid: \"s1\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"shutdown\",\n\t\t\tsuccess: true,\n\t\t};\n\t\tconst v2Shutdown: RpcResponse = {\n\t\t\tid: \"s2\",\n\t\t\ttype: \"response\",\n\t\t\tcommand: \"shutdown\",\n\t\t\tsuccess: true,\n\t\t};\n\t\tassert.equal(v1Shutdown.success, true);\n\t\tassert.equal(v2Shutdown.success, true);\n\t});\n});\n\n// ============================================================================\n// Protocol version detection logic (unit)\n// ============================================================================\n\ndescribe(\"Protocol version detection logic\", () => {\n\tit(\"simulates v1 lock when first command is non-init\", () => {\n\t\tlet protocolVersion: 1 | 2 = 1;\n\t\tlet protocolLocked = false;\n\n\t\t// Simulate first command being get_state\n\t\tconst command = { type: \"get_state\" } as RpcCommand;\n\n\t\tif (!protocolLocked) {\n\t\t\tprotocolLocked = true;\n\t\t\tif (command.type === \"init\") {\n\t\t\t\tprotocolVersion = 2;\n\t\t\t} else {\n\t\t\t\tprotocolVersion = 1;\n\t\t\t}\n\t\t}\n\n\t\tassert.equal(protocolVersion, 1);\n\t\tassert.equal(protocolLocked, true);\n\t});\n\n\tit(\"simulates v2 lock when first command is init\", () => {\n\t\tlet protocolVersion: 1 | 2 = 1;\n\t\tlet protocolLocked = false;\n\n\t\tconst command: RpcCommand = { type: \"init\", protocolVersion: 2 };\n\n\t\tif (!protocolLocked) {\n\t\t\tprotocolLocked = true;\n\t\t\tif (command.type === \"init\") {\n\t\t\t\tprotocolVersion = 2;\n\t\t\t} else {\n\t\t\t\tprotocolVersion = 1;\n\t\t\t}\n\t\t}\n\n\t\tassert.equal(protocolVersion, 2);\n\t\tassert.equal(protocolLocked, true);\n\t});\n\n\tit(\"rejects re-init after v2 lock\", () => {\n\t\tlet protocolLocked = true; // already locked from first init\n\t\tlet errorMessage: string | null = null;\n\n\t\tconst command: RpcCommand = { type: \"init\", protocolVersion: 2 };\n\n\t\tif (protocolLocked && command.type === \"init\") {\n\t\t\terrorMessage = \"Protocol version already locked. init must be the first command.\";\n\t\t}\n\n\t\tassert.ok(errorMessage !== null);\n\t\tassert.ok(errorMessage!.includes(\"already locked\"));\n\t});\n\n\tit(\"rejects init after v1 lock\", () => {\n\t\tlet protocolLocked = true; // already locked from first non-init command\n\t\tlet protocolVersion: 1 | 2 = 1;\n\t\tlet errorMessage: string | null = null;\n\n\t\tconst command: RpcCommand = { type: \"init\", protocolVersion: 2 };\n\n\t\tif (protocolLocked && command.type === \"init\") {\n\t\t\terrorMessage = \"Protocol version already locked. init must be the first command.\";\n\t\t}\n\n\t\tassert.equal(protocolVersion, 1); // stays v1\n\t\tassert.ok(errorMessage !== null);\n\t});\n\n\tit(\"extension_ui_response bypasses protocol detection\", () => {\n\t\tlet protocolLocked = false;\n\t\tlet protocolDetectionTriggered = false;\n\n\t\t// Simulate the handleInputLine logic\n\t\tconst parsed = { type: \"extension_ui_response\", id: \"ui-1\", value: \"ok\" };\n\n\t\tif (parsed.type === \"extension_ui_response\") {\n\t\t\t// Bypass — do not touch protocolLocked\n\t\t} else {\n\t\t\tprotocolDetectionTriggered = true;\n\t\t\tif (!protocolLocked) {\n\t\t\t\tprotocolLocked = true;\n\t\t\t}\n\t\t}\n\n\t\tassert.equal(protocolLocked, false);\n\t\tassert.equal(protocolDetectionTriggered, false);\n\t});\n});\n\n// ============================================================================\n// v2 event filter logic (unit)\n// ============================================================================\n\ndescribe(\"v2 event filter logic\", () => {\n\t/** Mimics the server-side event filter check: null means all events pass */\n\tfunction shouldEmit(filter: Set<string> | null, eventType: string): boolean {\n\t\treturn !filter || filter.has(eventType);\n\t}\n\n\tit(\"null filter passes all events\", () => {\n\t\tassert.equal(shouldEmit(null, \"agent_end\"), true);\n\t\tassert.equal(shouldEmit(null, \"cost_update\"), true);\n\t\tassert.equal(shouldEmit(null, \"anything\"), true);\n\t});\n\n\tit(\"filter with specific events passes matching events\", () => {\n\t\tconst filter = new Set([\"agent_end\", \"cost_update\"]);\n\n\t\tassert.equal(shouldEmit(filter, \"agent_end\"), true);\n\t\tassert.equal(shouldEmit(filter, \"cost_update\"), true);\n\t\tassert.equal(shouldEmit(filter, \"execution_complete\"), false);\n\t\tassert.equal(shouldEmit(filter, \"message_start\"), false);\n\t});\n\n\tit(\"empty Set filter blocks all events\", () => {\n\t\tconst filter = new Set<string>();\n\n\t\tassert.equal(shouldEmit(filter, \"agent_end\"), false);\n\t\tassert.equal(shouldEmit(filter, \"cost_update\"), false);\n\t\tassert.equal(shouldEmit(filter, \"anything\"), false);\n\t\tassert.equal(filter.size, 0);\n\t});\n\n\tit(\"wildcard subscribe resets filter to null\", () => {\n\t\tlet eventFilter: Set<string> | null = new Set([\"agent_end\"]);\n\n\t\t// Simulate subscribe with wildcard\n\t\tconst events = [\"*\"];\n\t\tif (events.includes(\"*\")) {\n\t\t\teventFilter = null;\n\t\t} else {\n\t\t\teventFilter = new Set(events);\n\t\t}\n\n\t\tassert.equal(eventFilter, null);\n\t});\n\n\tit(\"subscribe replaces previous filter\", () => {\n\t\tlet eventFilter: Set<string> | null = new Set([\"agent_end\"]);\n\n\t\t// Subscribe with different events\n\t\tconst events = [\"cost_update\", \"execution_complete\"];\n\t\tif (events.includes(\"*\")) {\n\t\t\teventFilter = null;\n\t\t} else {\n\t\t\teventFilter = new Set(events);\n\t\t}\n\n\t\tassert.equal(eventFilter!.has(\"agent_end\"), false);\n\t\tassert.equal(eventFilter!.has(\"cost_update\"), true);\n\t\tassert.equal(eventFilter!.has(\"execution_complete\"), true);\n\t});\n\n\tit(\"filter applies to both regular and synthesized v2 events\", () => {\n\t\tconst eventFilter = new Set([\"execution_complete\"]);\n\n\t\t// Regular event\n\t\tassert.equal(eventFilter.has(\"agent_end\"), false); // filtered out\n\t\t// Synthesized v2 event\n\t\tassert.equal(eventFilter.has(\"execution_complete\"), true); // passes\n\t\tassert.equal(eventFilter.has(\"cost_update\"), false); // filtered out\n\t});\n});\n\n// ============================================================================\n// v2 runId injection logic (unit)\n// ============================================================================\n\ndescribe(\"v2 runId injection\", () => {\n\tit(\"runId is present when protocolVersion is 2 and command is prompt/steer/follow_up\", () => {\n\t\tconst protocolVersion = 2;\n\t\tconst commands = [\"prompt\", \"steer\", \"follow_up\"] as const;\n\n\t\tfor (const cmdType of commands) {\n\t\t\tconst runId = protocolVersion === 2 ? `run-${cmdType}-uuid` : undefined;\n\t\t\tassert.ok(runId !== undefined, `runId should be generated for ${cmdType} in v2`);\n\t\t\tassert.ok(typeof runId === \"string\");\n\t\t}\n\t});\n\n\tit(\"runId is undefined when protocolVersion is 1\", () => {\n\t\t// Test the v1 path: runId should not be generated\n\t\tfunction generateRunId(version: 1 | 2): string | undefined {\n\t\t\treturn version === 2 ? \"run-uuid\" : undefined;\n\t\t}\n\t\tassert.equal(generateRunId(1), undefined);\n\t\tassert.ok(typeof generateRunId(2) === \"string\");\n\t});\n\n\tit(\"runId is injected into event output via spread\", () => {\n\t\tconst currentRunId = \"run-abc-123\";\n\t\tconst event = { type: \"message_start\", message: { role: \"assistant\" } };\n\n\t\t// v2 injection logic from rpc-mode.ts\n\t\tconst outputEvent = currentRunId ? { ...event, runId: currentRunId } : event;\n\n\t\tassert.equal((outputEvent as any).runId, \"run-abc-123\");\n\t\tassert.equal((outputEvent as any).type, \"message_start\");\n\t});\n\n\tit(\"runId is not injected when null\", () => {\n\t\tconst currentRunId: string | null = null;\n\t\tconst event = { type: \"message_start\", message: { role: \"assistant\" } };\n\n\t\tconst outputEvent = currentRunId ? { ...event, runId: currentRunId } : event;\n\n\t\tassert.equal((outputEvent as any).runId, undefined);\n\t});\n});\n"]}
@@ -9,6 +9,8 @@ import type { ImageContent, Model } from "@gsd/pi-ai";
9
9
  import type { SessionStats } from "../../core/agent-session.js";
10
10
  import type { BashResult } from "../../core/bash-executor.js";
11
11
  import type { CompactionResult } from "../../core/compaction/index.js";
12
+ /** Supported protocol versions. v1 is the implicit default; v2 requires an init handshake. */
13
+ export type RpcProtocolVersion = 1 | 2;
12
14
  export type RpcCommand = {
13
15
  id?: string;
14
16
  type: "prompt";
@@ -126,6 +128,19 @@ export type RpcCommand = {
126
128
  } | {
127
129
  id?: string;
128
130
  type: "terminal_redraw";
131
+ } | {
132
+ id?: string;
133
+ type: "init";
134
+ protocolVersion: 2;
135
+ clientId?: string;
136
+ } | {
137
+ id?: string;
138
+ type: "shutdown";
139
+ graceful?: boolean;
140
+ } | {
141
+ id?: string;
142
+ type: "subscribe";
143
+ events: string[];
129
144
  };
130
145
  /** A command available for invocation via prompt */
131
146
  export interface RpcSlashCommand {
@@ -164,16 +179,19 @@ export type RpcResponse = {
164
179
  type: "response";
165
180
  command: "prompt";
166
181
  success: true;
182
+ runId?: string;
167
183
  } | {
168
184
  id?: string;
169
185
  type: "response";
170
186
  command: "steer";
171
187
  success: true;
188
+ runId?: string;
172
189
  } | {
173
190
  id?: string;
174
191
  type: "response";
175
192
  command: "follow_up";
176
193
  success: true;
194
+ runId?: string;
177
195
  } | {
178
196
  id?: string;
179
197
  type: "response";
@@ -358,6 +376,22 @@ export type RpcResponse = {
358
376
  type: "response";
359
377
  command: "terminal_redraw";
360
378
  success: true;
379
+ } | {
380
+ id?: string;
381
+ type: "response";
382
+ command: "init";
383
+ success: true;
384
+ data: RpcInitResult;
385
+ } | {
386
+ id?: string;
387
+ type: "response";
388
+ command: "shutdown";
389
+ success: true;
390
+ } | {
391
+ id?: string;
392
+ type: "response";
393
+ command: "subscribe";
394
+ success: true;
361
395
  } | {
362
396
  id?: string;
363
397
  type: "response";
@@ -365,6 +399,38 @@ export type RpcResponse = {
365
399
  success: false;
366
400
  error: string;
367
401
  };
402
+ /** Result of the init handshake (v2 only) */
403
+ export interface RpcInitResult {
404
+ protocolVersion: 2;
405
+ sessionId: string;
406
+ capabilities: {
407
+ events: string[];
408
+ commands: string[];
409
+ };
410
+ }
411
+ /** v2 execution_complete event — emitted when a prompt/steer/follow_up finishes */
412
+ export interface RpcExecutionCompleteEvent {
413
+ type: "execution_complete";
414
+ runId: string;
415
+ status: "completed" | "error" | "cancelled";
416
+ reason?: string;
417
+ stats: SessionStats;
418
+ }
419
+ /** v2 cost_update event — emitted per-turn with running cost data */
420
+ export interface RpcCostUpdateEvent {
421
+ type: "cost_update";
422
+ runId: string;
423
+ turnCost: number;
424
+ cumulativeCost: number;
425
+ tokens: {
426
+ input: number;
427
+ output: number;
428
+ cacheRead: number;
429
+ cacheWrite: number;
430
+ };
431
+ }
432
+ /** Discriminated union of all v2-only event types */
433
+ export type RpcV2Event = RpcExecutionCompleteEvent | RpcCostUpdateEvent;
368
434
  /** Emitted when an extension needs user input */
369
435
  export type RpcExtensionUIRequest = {
370
436
  type: "extension_ui_request";
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-types.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-types.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-types.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * RPC protocol types for headless operation.\n *\n * Commands are sent as JSON lines on stdin.\n * Responses and events are emitted as JSON lines on stdout.\n */\n\nimport type { AgentMessage, ThinkingLevel } from \"@gsd/pi-agent-core\";\nimport type { ImageContent, Model } from \"@gsd/pi-ai\";\nimport type { SessionStats } from \"../../core/agent-session.js\";\nimport type { BashResult } from \"../../core/bash-executor.js\";\nimport type { CompactionResult } from \"../../core/compaction/index.js\";\n\n// ============================================================================\n// RPC Commands (stdin)\n// ============================================================================\n\nexport type RpcCommand =\n\t// Prompting\n\t| { id?: string; type: \"prompt\"; message: string; images?: ImageContent[]; streamingBehavior?: \"steer\" | \"followUp\" }\n\t| { id?: string; type: \"steer\"; message: string; images?: ImageContent[] }\n\t| { id?: string; type: \"follow_up\"; message: string; images?: ImageContent[] }\n\t| { id?: string; type: \"abort\" }\n\t| { id?: string; type: \"new_session\"; parentSession?: string }\n\n\t// State\n\t| { id?: string; type: \"get_state\" }\n\n\t// Model\n\t| { id?: string; type: \"set_model\"; provider: string; modelId: string }\n\t| { id?: string; type: \"cycle_model\" }\n\t| { id?: string; type: \"get_available_models\" }\n\n\t// Thinking\n\t| { id?: string; type: \"set_thinking_level\"; level: ThinkingLevel }\n\t| { id?: string; type: \"cycle_thinking_level\" }\n\n\t// Queue modes\n\t| { id?: string; type: \"set_steering_mode\"; mode: \"all\" | \"one-at-a-time\" }\n\t| { id?: string; type: \"set_follow_up_mode\"; mode: \"all\" | \"one-at-a-time\" }\n\n\t// Compaction\n\t| { id?: string; type: \"compact\"; customInstructions?: string }\n\t| { id?: string; type: \"set_auto_compaction\"; enabled: boolean }\n\n\t// Retry\n\t| { id?: string; type: \"set_auto_retry\"; enabled: boolean }\n\t| { id?: string; type: \"abort_retry\" }\n\n\t// Bash\n\t| { id?: string; type: \"bash\"; command: string }\n\t| { id?: string; type: \"abort_bash\" }\n\n\t// Session\n\t| { id?: string; type: \"get_session_stats\" }\n\t| { id?: string; type: \"export_html\"; outputPath?: string }\n\t| { id?: string; type: \"switch_session\"; sessionPath: string }\n\t| { id?: string; type: \"fork\"; entryId: string }\n\t| { id?: string; type: \"get_fork_messages\" }\n\t| { id?: string; type: \"get_last_assistant_text\" }\n\t| { id?: string; type: \"set_session_name\"; name: string }\n\n\t// Messages\n\t| { id?: string; type: \"get_messages\" }\n\n\t// Commands (available for invocation via prompt)\n\t| { id?: string; type: \"get_commands\" }\n\n\t// Bridge-hosted native terminal\n\t| { id?: string; type: \"terminal_input\"; data: string }\n\t| { id?: string; type: \"terminal_resize\"; cols: number; rows: number }\n\t| { id?: string; type: \"terminal_redraw\" };\n\n// ============================================================================\n// RPC Slash Command (for get_commands response)\n// ============================================================================\n\n/** A command available for invocation via prompt */\nexport interface RpcSlashCommand {\n\t/** Command name (without leading slash) */\n\tname: string;\n\t/** Human-readable description */\n\tdescription?: string;\n\t/** What kind of command this is */\n\tsource: \"extension\" | \"prompt\" | \"skill\";\n\t/** Where the command was loaded from (undefined for extensions) */\n\tlocation?: \"user\" | \"project\" | \"path\";\n\t/** File path to the command source */\n\tpath?: string;\n}\n\n// ============================================================================\n// RPC State\n// ============================================================================\n\nexport interface RpcSessionState {\n\tmodel?: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\tisStreaming: boolean;\n\tisCompacting: boolean;\n\tsteeringMode: \"all\" | \"one-at-a-time\";\n\tfollowUpMode: \"all\" | \"one-at-a-time\";\n\tsessionFile?: string;\n\tsessionId: string;\n\tsessionName?: string;\n\tautoCompactionEnabled: boolean;\n\tautoRetryEnabled: boolean;\n\tretryInProgress: boolean;\n\tretryAttempt: number;\n\tmessageCount: number;\n\tpendingMessageCount: number;\n\t/** Whether extension loading has completed. Commands from `get_commands` may be incomplete until true. */\n\textensionsReady: boolean;\n}\n\n// ============================================================================\n// RPC Responses (stdout)\n// ============================================================================\n\n// Success responses with data\nexport type RpcResponse =\n\t// Prompting (async - events follow)\n\t| { id?: string; type: \"response\"; command: \"prompt\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"steer\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"follow_up\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"abort\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"new_session\"; success: true; data: { cancelled: boolean } }\n\n\t// State\n\t| { id?: string; type: \"response\"; command: \"get_state\"; success: true; data: RpcSessionState }\n\n\t// Model\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"set_model\";\n\t\t\tsuccess: true;\n\t\t\tdata: Model<any>;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"cycle_model\";\n\t\t\tsuccess: true;\n\t\t\tdata: { model: Model<any>; thinkingLevel: ThinkingLevel; isScoped: boolean } | null;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_available_models\";\n\t\t\tsuccess: true;\n\t\t\tdata: { models: Model<any>[] };\n\t }\n\n\t// Thinking\n\t| { id?: string; type: \"response\"; command: \"set_thinking_level\"; success: true }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"cycle_thinking_level\";\n\t\t\tsuccess: true;\n\t\t\tdata: { level: ThinkingLevel } | null;\n\t }\n\n\t// Queue modes\n\t| { id?: string; type: \"response\"; command: \"set_steering_mode\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"set_follow_up_mode\"; success: true }\n\n\t// Compaction\n\t| { id?: string; type: \"response\"; command: \"compact\"; success: true; data: CompactionResult }\n\t| { id?: string; type: \"response\"; command: \"set_auto_compaction\"; success: true }\n\n\t// Retry\n\t| { id?: string; type: \"response\"; command: \"set_auto_retry\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"abort_retry\"; success: true }\n\n\t// Bash\n\t| { id?: string; type: \"response\"; command: \"bash\"; success: true; data: BashResult }\n\t| { id?: string; type: \"response\"; command: \"abort_bash\"; success: true }\n\n\t// Session\n\t| { id?: string; type: \"response\"; command: \"get_session_stats\"; success: true; data: SessionStats }\n\t| { id?: string; type: \"response\"; command: \"export_html\"; success: true; data: { path: string } }\n\t| { id?: string; type: \"response\"; command: \"switch_session\"; success: true; data: { cancelled: boolean } }\n\t| { id?: string; type: \"response\"; command: \"fork\"; success: true; data: { text: string; cancelled: boolean } }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_fork_messages\";\n\t\t\tsuccess: true;\n\t\t\tdata: { messages: Array<{ entryId: string; text: string }> };\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_last_assistant_text\";\n\t\t\tsuccess: true;\n\t\t\tdata: { text: string | null };\n\t }\n\t| { id?: string; type: \"response\"; command: \"set_session_name\"; success: true }\n\n\t// Messages\n\t| { id?: string; type: \"response\"; command: \"get_messages\"; success: true; data: { messages: AgentMessage[] } }\n\n\t// Commands\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_commands\";\n\t\t\tsuccess: true;\n\t\t\tdata: { commands: RpcSlashCommand[] };\n\t }\n\n\t// Bridge-hosted native terminal\n\t| { id?: string; type: \"response\"; command: \"terminal_input\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"terminal_resize\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"terminal_redraw\"; success: true }\n\n\t// Error response (any command can fail)\n\t| { id?: string; type: \"response\"; command: string; success: false; error: string };\n\n// ============================================================================\n// Extension UI Events (stdout)\n// ============================================================================\n\n/** Emitted when an extension needs user input */\nexport type RpcExtensionUIRequest =\n\t| { type: \"extension_ui_request\"; id: string; method: \"select\"; title: string; options: string[]; timeout?: number; allowMultiple?: boolean }\n\t| { type: \"extension_ui_request\"; id: string; method: \"confirm\"; title: string; message: string; timeout?: number }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"input\";\n\t\t\ttitle: string;\n\t\t\tplaceholder?: string;\n\t\t\ttimeout?: number;\n\t }\n\t| { type: \"extension_ui_request\"; id: string; method: \"editor\"; title: string; prefill?: string }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"notify\";\n\t\t\tmessage: string;\n\t\t\tnotifyType?: \"info\" | \"warning\" | \"error\";\n\t }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"setStatus\";\n\t\t\tstatusKey: string;\n\t\t\tstatusText: string | undefined;\n\t }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"setWidget\";\n\t\t\twidgetKey: string;\n\t\t\twidgetLines: string[] | undefined;\n\t\t\twidgetPlacement?: \"aboveEditor\" | \"belowEditor\";\n\t }\n\t| { type: \"extension_ui_request\"; id: string; method: \"setTitle\"; title: string }\n\t| { type: \"extension_ui_request\"; id: string; method: \"set_editor_text\"; text: string };\n\n// ============================================================================\n// Extension UI Commands (stdin)\n// ============================================================================\n\n/** Response to an extension UI request */\nexport type RpcExtensionUIResponse =\n\t| { type: \"extension_ui_response\"; id: string; value: string }\n\t| { type: \"extension_ui_response\"; id: string; values: string[] }\n\t| { type: \"extension_ui_response\"; id: string; confirmed: boolean }\n\t| { type: \"extension_ui_response\"; id: string; cancelled: true };\n\n// ============================================================================\n// Helper type for extracting command types\n// ============================================================================\n\nexport type RpcCommandType = RpcCommand[\"type\"];\n"]}
1
+ {"version":3,"file":"rpc-types.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * RPC protocol types for headless operation.\n *\n * Commands are sent as JSON lines on stdin.\n * Responses and events are emitted as JSON lines on stdout.\n */\n\nimport type { AgentMessage, ThinkingLevel } from \"@gsd/pi-agent-core\";\nimport type { ImageContent, Model } from \"@gsd/pi-ai\";\nimport type { SessionStats } from \"../../core/agent-session.js\";\nimport type { BashResult } from \"../../core/bash-executor.js\";\nimport type { CompactionResult } from \"../../core/compaction/index.js\";\n\n// ============================================================================\n// RPC Protocol Versioning\n// ============================================================================\n\n/** Supported protocol versions. v1 is the implicit default; v2 requires an init handshake. */\nexport type RpcProtocolVersion = 1 | 2;\n\n// ============================================================================\n// RPC Commands (stdin)\n// ============================================================================\n\nexport type RpcCommand =\n\t// Prompting\n\t| { id?: string; type: \"prompt\"; message: string; images?: ImageContent[]; streamingBehavior?: \"steer\" | \"followUp\" }\n\t| { id?: string; type: \"steer\"; message: string; images?: ImageContent[] }\n\t| { id?: string; type: \"follow_up\"; message: string; images?: ImageContent[] }\n\t| { id?: string; type: \"abort\" }\n\t| { id?: string; type: \"new_session\"; parentSession?: string }\n\n\t// State\n\t| { id?: string; type: \"get_state\" }\n\n\t// Model\n\t| { id?: string; type: \"set_model\"; provider: string; modelId: string }\n\t| { id?: string; type: \"cycle_model\" }\n\t| { id?: string; type: \"get_available_models\" }\n\n\t// Thinking\n\t| { id?: string; type: \"set_thinking_level\"; level: ThinkingLevel }\n\t| { id?: string; type: \"cycle_thinking_level\" }\n\n\t// Queue modes\n\t| { id?: string; type: \"set_steering_mode\"; mode: \"all\" | \"one-at-a-time\" }\n\t| { id?: string; type: \"set_follow_up_mode\"; mode: \"all\" | \"one-at-a-time\" }\n\n\t// Compaction\n\t| { id?: string; type: \"compact\"; customInstructions?: string }\n\t| { id?: string; type: \"set_auto_compaction\"; enabled: boolean }\n\n\t// Retry\n\t| { id?: string; type: \"set_auto_retry\"; enabled: boolean }\n\t| { id?: string; type: \"abort_retry\" }\n\n\t// Bash\n\t| { id?: string; type: \"bash\"; command: string }\n\t| { id?: string; type: \"abort_bash\" }\n\n\t// Session\n\t| { id?: string; type: \"get_session_stats\" }\n\t| { id?: string; type: \"export_html\"; outputPath?: string }\n\t| { id?: string; type: \"switch_session\"; sessionPath: string }\n\t| { id?: string; type: \"fork\"; entryId: string }\n\t| { id?: string; type: \"get_fork_messages\" }\n\t| { id?: string; type: \"get_last_assistant_text\" }\n\t| { id?: string; type: \"set_session_name\"; name: string }\n\n\t// Messages\n\t| { id?: string; type: \"get_messages\" }\n\n\t// Commands (available for invocation via prompt)\n\t| { id?: string; type: \"get_commands\" }\n\n\t// Bridge-hosted native terminal\n\t| { id?: string; type: \"terminal_input\"; data: string }\n\t| { id?: string; type: \"terminal_resize\"; cols: number; rows: number }\n\t| { id?: string; type: \"terminal_redraw\" }\n\n\t// v2 Protocol\n\t| { id?: string; type: \"init\"; protocolVersion: 2; clientId?: string }\n\t| { id?: string; type: \"shutdown\"; graceful?: boolean }\n\t| { id?: string; type: \"subscribe\"; events: string[] };\n\n// ============================================================================\n// RPC Slash Command (for get_commands response)\n// ============================================================================\n\n/** A command available for invocation via prompt */\nexport interface RpcSlashCommand {\n\t/** Command name (without leading slash) */\n\tname: string;\n\t/** Human-readable description */\n\tdescription?: string;\n\t/** What kind of command this is */\n\tsource: \"extension\" | \"prompt\" | \"skill\";\n\t/** Where the command was loaded from (undefined for extensions) */\n\tlocation?: \"user\" | \"project\" | \"path\";\n\t/** File path to the command source */\n\tpath?: string;\n}\n\n// ============================================================================\n// RPC State\n// ============================================================================\n\nexport interface RpcSessionState {\n\tmodel?: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\tisStreaming: boolean;\n\tisCompacting: boolean;\n\tsteeringMode: \"all\" | \"one-at-a-time\";\n\tfollowUpMode: \"all\" | \"one-at-a-time\";\n\tsessionFile?: string;\n\tsessionId: string;\n\tsessionName?: string;\n\tautoCompactionEnabled: boolean;\n\tautoRetryEnabled: boolean;\n\tretryInProgress: boolean;\n\tretryAttempt: number;\n\tmessageCount: number;\n\tpendingMessageCount: number;\n\t/** Whether extension loading has completed. Commands from `get_commands` may be incomplete until true. */\n\textensionsReady: boolean;\n}\n\n// ============================================================================\n// RPC Responses (stdout)\n// ============================================================================\n\n// Success responses with data\nexport type RpcResponse =\n\t// Prompting (async - events follow)\n\t| { id?: string; type: \"response\"; command: \"prompt\"; success: true; runId?: string }\n\t| { id?: string; type: \"response\"; command: \"steer\"; success: true; runId?: string }\n\t| { id?: string; type: \"response\"; command: \"follow_up\"; success: true; runId?: string }\n\t| { id?: string; type: \"response\"; command: \"abort\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"new_session\"; success: true; data: { cancelled: boolean } }\n\n\t// State\n\t| { id?: string; type: \"response\"; command: \"get_state\"; success: true; data: RpcSessionState }\n\n\t// Model\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"set_model\";\n\t\t\tsuccess: true;\n\t\t\tdata: Model<any>;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"cycle_model\";\n\t\t\tsuccess: true;\n\t\t\tdata: { model: Model<any>; thinkingLevel: ThinkingLevel; isScoped: boolean } | null;\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_available_models\";\n\t\t\tsuccess: true;\n\t\t\tdata: { models: Model<any>[] };\n\t }\n\n\t// Thinking\n\t| { id?: string; type: \"response\"; command: \"set_thinking_level\"; success: true }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"cycle_thinking_level\";\n\t\t\tsuccess: true;\n\t\t\tdata: { level: ThinkingLevel } | null;\n\t }\n\n\t// Queue modes\n\t| { id?: string; type: \"response\"; command: \"set_steering_mode\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"set_follow_up_mode\"; success: true }\n\n\t// Compaction\n\t| { id?: string; type: \"response\"; command: \"compact\"; success: true; data: CompactionResult }\n\t| { id?: string; type: \"response\"; command: \"set_auto_compaction\"; success: true }\n\n\t// Retry\n\t| { id?: string; type: \"response\"; command: \"set_auto_retry\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"abort_retry\"; success: true }\n\n\t// Bash\n\t| { id?: string; type: \"response\"; command: \"bash\"; success: true; data: BashResult }\n\t| { id?: string; type: \"response\"; command: \"abort_bash\"; success: true }\n\n\t// Session\n\t| { id?: string; type: \"response\"; command: \"get_session_stats\"; success: true; data: SessionStats }\n\t| { id?: string; type: \"response\"; command: \"export_html\"; success: true; data: { path: string } }\n\t| { id?: string; type: \"response\"; command: \"switch_session\"; success: true; data: { cancelled: boolean } }\n\t| { id?: string; type: \"response\"; command: \"fork\"; success: true; data: { text: string; cancelled: boolean } }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_fork_messages\";\n\t\t\tsuccess: true;\n\t\t\tdata: { messages: Array<{ entryId: string; text: string }> };\n\t }\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_last_assistant_text\";\n\t\t\tsuccess: true;\n\t\t\tdata: { text: string | null };\n\t }\n\t| { id?: string; type: \"response\"; command: \"set_session_name\"; success: true }\n\n\t// Messages\n\t| { id?: string; type: \"response\"; command: \"get_messages\"; success: true; data: { messages: AgentMessage[] } }\n\n\t// Commands\n\t| {\n\t\t\tid?: string;\n\t\t\ttype: \"response\";\n\t\t\tcommand: \"get_commands\";\n\t\t\tsuccess: true;\n\t\t\tdata: { commands: RpcSlashCommand[] };\n\t }\n\n\t// Bridge-hosted native terminal\n\t| { id?: string; type: \"response\"; command: \"terminal_input\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"terminal_resize\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"terminal_redraw\"; success: true }\n\n\t// v2 Protocol\n\t| { id?: string; type: \"response\"; command: \"init\"; success: true; data: RpcInitResult }\n\t| { id?: string; type: \"response\"; command: \"shutdown\"; success: true }\n\t| { id?: string; type: \"response\"; command: \"subscribe\"; success: true }\n\n\t// Error response (any command can fail)\n\t| { id?: string; type: \"response\"; command: string; success: false; error: string };\n\n// ============================================================================\n// v2 Protocol Types\n// ============================================================================\n\n/** Result of the init handshake (v2 only) */\nexport interface RpcInitResult {\n\tprotocolVersion: 2;\n\tsessionId: string;\n\tcapabilities: {\n\t\tevents: string[];\n\t\tcommands: string[];\n\t};\n}\n\n/** v2 execution_complete event — emitted when a prompt/steer/follow_up finishes */\nexport interface RpcExecutionCompleteEvent {\n\ttype: \"execution_complete\";\n\trunId: string;\n\tstatus: \"completed\" | \"error\" | \"cancelled\";\n\treason?: string;\n\tstats: SessionStats;\n}\n\n/** v2 cost_update event — emitted per-turn with running cost data */\nexport interface RpcCostUpdateEvent {\n\ttype: \"cost_update\";\n\trunId: string;\n\tturnCost: number;\n\tcumulativeCost: number;\n\ttokens: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t};\n}\n\n/** Discriminated union of all v2-only event types */\nexport type RpcV2Event = RpcExecutionCompleteEvent | RpcCostUpdateEvent;\n\n// ============================================================================\n// Extension UI Events (stdout)\n// ============================================================================\n\n/** Emitted when an extension needs user input */\nexport type RpcExtensionUIRequest =\n\t| { type: \"extension_ui_request\"; id: string; method: \"select\"; title: string; options: string[]; timeout?: number; allowMultiple?: boolean }\n\t| { type: \"extension_ui_request\"; id: string; method: \"confirm\"; title: string; message: string; timeout?: number }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"input\";\n\t\t\ttitle: string;\n\t\t\tplaceholder?: string;\n\t\t\ttimeout?: number;\n\t }\n\t| { type: \"extension_ui_request\"; id: string; method: \"editor\"; title: string; prefill?: string }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"notify\";\n\t\t\tmessage: string;\n\t\t\tnotifyType?: \"info\" | \"warning\" | \"error\";\n\t }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"setStatus\";\n\t\t\tstatusKey: string;\n\t\t\tstatusText: string | undefined;\n\t }\n\t| {\n\t\t\ttype: \"extension_ui_request\";\n\t\t\tid: string;\n\t\t\tmethod: \"setWidget\";\n\t\t\twidgetKey: string;\n\t\t\twidgetLines: string[] | undefined;\n\t\t\twidgetPlacement?: \"aboveEditor\" | \"belowEditor\";\n\t }\n\t| { type: \"extension_ui_request\"; id: string; method: \"setTitle\"; title: string }\n\t| { type: \"extension_ui_request\"; id: string; method: \"set_editor_text\"; text: string };\n\n// ============================================================================\n// Extension UI Commands (stdin)\n// ============================================================================\n\n/** Response to an extension UI request */\nexport type RpcExtensionUIResponse =\n\t| { type: \"extension_ui_response\"; id: string; value: string }\n\t| { type: \"extension_ui_response\"; id: string; values: string[] }\n\t| { type: \"extension_ui_response\"; id: string; confirmed: boolean }\n\t| { type: \"extension_ui_response\"; id: string; cancelled: true };\n\n// ============================================================================\n// Helper type for extracting command types\n// ============================================================================\n\nexport type RpcCommandType = RpcCommand[\"type\"];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AA2CA;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAoElE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAAC,UAAU,CAY/C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8BxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAwBjD"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AA2CA;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAoElE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAAC,UAAU,CAY/C;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8BxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAuBjD"}
@@ -171,7 +171,6 @@ export function killProcessTree(pid) {
171
171
  try {
172
172
  spawn("taskkill", ["/F", "/T", "/PID", String(pid)], {
173
173
  stdio: "ignore",
174
- detached: true,
175
174
  });
176
175
  }
177
176
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { delimiter } from \"node:path\";\nimport { spawn, spawnSync } from \"child_process\";\nimport { getBinDir, getSettingsPath } from \"../config.js\";\nimport { SettingsManager } from \"../core/settings-manager.js\";\n\nlet cachedShellConfig: { shell: string; args: string[] } | null = null;\n\n/**\n * Find bash executable on PATH (cross-platform)\n */\nfunction findBashOnPath(): string | null {\n\tif (process.platform === \"win32\") {\n\t\t// Windows: Use 'where' and verify file exists (where can return non-existent paths)\n\t\ttry {\n\t\t\tconst result = spawnSync(\"where\", [\"bash.exe\"], { encoding: \"utf-8\", timeout: 5000 });\n\t\t\tif (result.status === 0 && result.stdout) {\n\t\t\t\tconst firstMatch = result.stdout.trim().split(/\\r?\\n/)[0];\n\t\t\t\tif (firstMatch && existsSync(firstMatch)) {\n\t\t\t\t\treturn firstMatch;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore errors\n\t\t}\n\t\treturn null;\n\t}\n\n\t// Unix: Use 'which' and trust its output (handles Termux and special filesystems)\n\ttry {\n\t\tconst result = spawnSync(\"which\", [\"bash\"], { encoding: \"utf-8\", timeout: 5000 });\n\t\tif (result.status === 0 && result.stdout) {\n\t\t\tconst firstMatch = result.stdout.trim().split(/\\r?\\n/)[0];\n\t\t\tif (firstMatch) {\n\t\t\t\treturn firstMatch;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Ignore errors\n\t}\n\treturn null;\n}\n\n/**\n * Get shell configuration based on platform.\n * Resolution order:\n * 1. User-specified shellPath in settings.json\n * 2. On Windows: Git Bash in known locations, then bash on PATH\n * 3. On Unix: /bin/bash, then bash on PATH, then fallback to sh\n */\nexport function getShellConfig(): { shell: string; args: string[] } {\n\tif (cachedShellConfig) {\n\t\treturn cachedShellConfig;\n\t}\n\n\tconst settings = SettingsManager.create();\n\tconst customShellPath = settings.getShellPath();\n\n\t// 1. Check user-specified shell path\n\tif (customShellPath) {\n\t\tif (existsSync(customShellPath)) {\n\t\t\tcachedShellConfig = { shell: customShellPath, args: [\"-c\"] };\n\t\t\treturn cachedShellConfig;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`Custom shell path not found: ${customShellPath}\\nPlease update shellPath in ${getSettingsPath()}`,\n\t\t);\n\t}\n\n\tif (process.platform === \"win32\") {\n\t\t// 2. Try Git Bash in known locations\n\t\tconst paths: string[] = [];\n\t\tconst programFiles = process.env.ProgramFiles;\n\t\tif (programFiles) {\n\t\t\tpaths.push(`${programFiles}\\\\Git\\\\bin\\\\bash.exe`);\n\t\t}\n\t\tconst programFilesX86 = process.env[\"ProgramFiles(x86)\"];\n\t\tif (programFilesX86) {\n\t\t\tpaths.push(`${programFilesX86}\\\\Git\\\\bin\\\\bash.exe`);\n\t\t}\n\n\t\tfor (const path of paths) {\n\t\t\tif (existsSync(path)) {\n\t\t\t\tcachedShellConfig = { shell: path, args: [\"-c\"] };\n\t\t\t\treturn cachedShellConfig;\n\t\t\t}\n\t\t}\n\n\t\t// 3. Fallback: search bash.exe on PATH (Cygwin, MSYS2, WSL, etc.)\n\t\tconst bashOnPath = findBashOnPath();\n\t\tif (bashOnPath) {\n\t\t\tcachedShellConfig = { shell: bashOnPath, args: [\"-c\"] };\n\t\t\treturn cachedShellConfig;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`No bash shell found. Options:\\n` +\n\t\t\t\t` 1. Install Git for Windows: https://git-scm.com/download/win\\n` +\n\t\t\t\t` 2. Add your bash to PATH (Cygwin, MSYS2, etc.)\\n` +\n\t\t\t\t` 3. Set shellPath in ${getSettingsPath()}\\n\\n` +\n\t\t\t\t`Searched Git Bash in:\\n${paths.map((p) => ` ${p}`).join(\"\\n\")}`,\n\t\t);\n\t}\n\n\t// Unix: try /bin/bash, then bash on PATH, then fallback to sh\n\tif (existsSync(\"/bin/bash\")) {\n\t\tcachedShellConfig = { shell: \"/bin/bash\", args: [\"-c\"] };\n\t\treturn cachedShellConfig;\n\t}\n\n\tconst bashOnPath = findBashOnPath();\n\tif (bashOnPath) {\n\t\tcachedShellConfig = { shell: bashOnPath, args: [\"-c\"] };\n\t\treturn cachedShellConfig;\n\t}\n\n\tcachedShellConfig = { shell: \"sh\", args: [\"-c\"] };\n\treturn cachedShellConfig;\n}\n\n/**\n * On Windows + Git Bash, rewrite Windows-style NUL redirects to /dev/null.\n * Git Bash doesn't recognize NUL as a device name and creates a literal file\n * that is undeletable due to NUL being a reserved Windows device name.\n * No-op on non-Windows platforms.\n */\nexport function sanitizeCommand(command: string): string {\n\tif (process.platform !== \"win32\") return command;\n\treturn command.replace(/(\\d*>>?) *\\bNUL\\b(?=\\s|;|\\||&|\\)|$)/gi, \"$1 /dev/null\");\n}\n\nexport function getShellEnv(): NodeJS.ProcessEnv {\n\tconst binDir = getBinDir();\n\tconst pathKey = Object.keys(process.env).find((key) => key.toLowerCase() === \"path\") ?? \"PATH\";\n\tconst currentPath = process.env[pathKey] ?? \"\";\n\tconst pathEntries = currentPath.split(delimiter).filter(Boolean);\n\tconst hasBinDir = pathEntries.includes(binDir);\n\tconst updatedPath = hasBinDir ? currentPath : [binDir, currentPath].filter(Boolean).join(delimiter);\n\n\treturn {\n\t\t...process.env,\n\t\t[pathKey]: updatedPath,\n\t};\n}\n\n/**\n * Sanitize binary output for display/storage.\n * Removes characters that crash string-width or cause display issues:\n * - Control characters (except tab, newline, carriage return)\n * - Lone surrogates\n * - Unicode Format characters (crash string-width due to a bug)\n * - Characters with undefined code points\n */\nexport function sanitizeBinaryOutput(str: string): string {\n\t// Use Array.from to properly iterate over code points (not code units)\n\t// This handles surrogate pairs correctly and catches edge cases where\n\t// codePointAt() might return undefined\n\treturn Array.from(str)\n\t\t.filter((char) => {\n\t\t\t// Filter out characters that cause string-width to crash\n\t\t\t// This includes:\n\t\t\t// - Unicode format characters\n\t\t\t// - Lone surrogates (already filtered by Array.from)\n\t\t\t// - Control chars except \\t \\n \\r\n\t\t\t// - Characters with undefined code points\n\n\t\t\tconst code = char.codePointAt(0);\n\n\t\t\t// Skip if code point is undefined (edge case with invalid strings)\n\t\t\tif (code === undefined) return false;\n\n\t\t\t// Allow tab, newline, carriage return\n\t\t\tif (code === 0x09 || code === 0x0a || code === 0x0d) return true;\n\n\t\t\t// Filter out control characters (0x00-0x1F, except 0x09, 0x0a, 0x0x0d)\n\t\t\tif (code <= 0x1f) return false;\n\n\t\t\t// Filter out Unicode format characters\n\t\t\tif (code >= 0xfff9 && code <= 0xfffb) return false;\n\n\t\t\treturn true;\n\t\t})\n\t\t.join(\"\");\n}\n\n/**\n * Kill a process and all its children (cross-platform)\n */\nexport function killProcessTree(pid: number): void {\n\tif (process.platform === \"win32\") {\n\t\t// Use taskkill on Windows to kill process tree\n\t\ttry {\n\t\t\tspawn(\"taskkill\", [\"/F\", \"/T\", \"/PID\", String(pid)], {\n\t\t\t\tstdio: \"ignore\",\n\t\t\t\tdetached: true,\n\t\t\t});\n\t\t} catch {\n\t\t\t// Ignore errors if taskkill fails\n\t\t}\n\t} else {\n\t\t// Use SIGKILL on Unix/Linux/Mac\n\t\ttry {\n\t\t\tprocess.kill(-pid, \"SIGKILL\");\n\t\t} catch {\n\t\t\t// Fallback to killing just the child if process group kill fails\n\t\t\ttry {\n\t\t\t\tprocess.kill(pid, \"SIGKILL\");\n\t\t\t} catch {\n\t\t\t\t// Process already dead\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { delimiter } from \"node:path\";\nimport { spawn, spawnSync } from \"child_process\";\nimport { getBinDir, getSettingsPath } from \"../config.js\";\nimport { SettingsManager } from \"../core/settings-manager.js\";\n\nlet cachedShellConfig: { shell: string; args: string[] } | null = null;\n\n/**\n * Find bash executable on PATH (cross-platform)\n */\nfunction findBashOnPath(): string | null {\n\tif (process.platform === \"win32\") {\n\t\t// Windows: Use 'where' and verify file exists (where can return non-existent paths)\n\t\ttry {\n\t\t\tconst result = spawnSync(\"where\", [\"bash.exe\"], { encoding: \"utf-8\", timeout: 5000 });\n\t\t\tif (result.status === 0 && result.stdout) {\n\t\t\t\tconst firstMatch = result.stdout.trim().split(/\\r?\\n/)[0];\n\t\t\t\tif (firstMatch && existsSync(firstMatch)) {\n\t\t\t\t\treturn firstMatch;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore errors\n\t\t}\n\t\treturn null;\n\t}\n\n\t// Unix: Use 'which' and trust its output (handles Termux and special filesystems)\n\ttry {\n\t\tconst result = spawnSync(\"which\", [\"bash\"], { encoding: \"utf-8\", timeout: 5000 });\n\t\tif (result.status === 0 && result.stdout) {\n\t\t\tconst firstMatch = result.stdout.trim().split(/\\r?\\n/)[0];\n\t\t\tif (firstMatch) {\n\t\t\t\treturn firstMatch;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Ignore errors\n\t}\n\treturn null;\n}\n\n/**\n * Get shell configuration based on platform.\n * Resolution order:\n * 1. User-specified shellPath in settings.json\n * 2. On Windows: Git Bash in known locations, then bash on PATH\n * 3. On Unix: /bin/bash, then bash on PATH, then fallback to sh\n */\nexport function getShellConfig(): { shell: string; args: string[] } {\n\tif (cachedShellConfig) {\n\t\treturn cachedShellConfig;\n\t}\n\n\tconst settings = SettingsManager.create();\n\tconst customShellPath = settings.getShellPath();\n\n\t// 1. Check user-specified shell path\n\tif (customShellPath) {\n\t\tif (existsSync(customShellPath)) {\n\t\t\tcachedShellConfig = { shell: customShellPath, args: [\"-c\"] };\n\t\t\treturn cachedShellConfig;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`Custom shell path not found: ${customShellPath}\\nPlease update shellPath in ${getSettingsPath()}`,\n\t\t);\n\t}\n\n\tif (process.platform === \"win32\") {\n\t\t// 2. Try Git Bash in known locations\n\t\tconst paths: string[] = [];\n\t\tconst programFiles = process.env.ProgramFiles;\n\t\tif (programFiles) {\n\t\t\tpaths.push(`${programFiles}\\\\Git\\\\bin\\\\bash.exe`);\n\t\t}\n\t\tconst programFilesX86 = process.env[\"ProgramFiles(x86)\"];\n\t\tif (programFilesX86) {\n\t\t\tpaths.push(`${programFilesX86}\\\\Git\\\\bin\\\\bash.exe`);\n\t\t}\n\n\t\tfor (const path of paths) {\n\t\t\tif (existsSync(path)) {\n\t\t\t\tcachedShellConfig = { shell: path, args: [\"-c\"] };\n\t\t\t\treturn cachedShellConfig;\n\t\t\t}\n\t\t}\n\n\t\t// 3. Fallback: search bash.exe on PATH (Cygwin, MSYS2, WSL, etc.)\n\t\tconst bashOnPath = findBashOnPath();\n\t\tif (bashOnPath) {\n\t\t\tcachedShellConfig = { shell: bashOnPath, args: [\"-c\"] };\n\t\t\treturn cachedShellConfig;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`No bash shell found. Options:\\n` +\n\t\t\t\t` 1. Install Git for Windows: https://git-scm.com/download/win\\n` +\n\t\t\t\t` 2. Add your bash to PATH (Cygwin, MSYS2, etc.)\\n` +\n\t\t\t\t` 3. Set shellPath in ${getSettingsPath()}\\n\\n` +\n\t\t\t\t`Searched Git Bash in:\\n${paths.map((p) => ` ${p}`).join(\"\\n\")}`,\n\t\t);\n\t}\n\n\t// Unix: try /bin/bash, then bash on PATH, then fallback to sh\n\tif (existsSync(\"/bin/bash\")) {\n\t\tcachedShellConfig = { shell: \"/bin/bash\", args: [\"-c\"] };\n\t\treturn cachedShellConfig;\n\t}\n\n\tconst bashOnPath = findBashOnPath();\n\tif (bashOnPath) {\n\t\tcachedShellConfig = { shell: bashOnPath, args: [\"-c\"] };\n\t\treturn cachedShellConfig;\n\t}\n\n\tcachedShellConfig = { shell: \"sh\", args: [\"-c\"] };\n\treturn cachedShellConfig;\n}\n\n/**\n * On Windows + Git Bash, rewrite Windows-style NUL redirects to /dev/null.\n * Git Bash doesn't recognize NUL as a device name and creates a literal file\n * that is undeletable due to NUL being a reserved Windows device name.\n * No-op on non-Windows platforms.\n */\nexport function sanitizeCommand(command: string): string {\n\tif (process.platform !== \"win32\") return command;\n\treturn command.replace(/(\\d*>>?) *\\bNUL\\b(?=\\s|;|\\||&|\\)|$)/gi, \"$1 /dev/null\");\n}\n\nexport function getShellEnv(): NodeJS.ProcessEnv {\n\tconst binDir = getBinDir();\n\tconst pathKey = Object.keys(process.env).find((key) => key.toLowerCase() === \"path\") ?? \"PATH\";\n\tconst currentPath = process.env[pathKey] ?? \"\";\n\tconst pathEntries = currentPath.split(delimiter).filter(Boolean);\n\tconst hasBinDir = pathEntries.includes(binDir);\n\tconst updatedPath = hasBinDir ? currentPath : [binDir, currentPath].filter(Boolean).join(delimiter);\n\n\treturn {\n\t\t...process.env,\n\t\t[pathKey]: updatedPath,\n\t};\n}\n\n/**\n * Sanitize binary output for display/storage.\n * Removes characters that crash string-width or cause display issues:\n * - Control characters (except tab, newline, carriage return)\n * - Lone surrogates\n * - Unicode Format characters (crash string-width due to a bug)\n * - Characters with undefined code points\n */\nexport function sanitizeBinaryOutput(str: string): string {\n\t// Use Array.from to properly iterate over code points (not code units)\n\t// This handles surrogate pairs correctly and catches edge cases where\n\t// codePointAt() might return undefined\n\treturn Array.from(str)\n\t\t.filter((char) => {\n\t\t\t// Filter out characters that cause string-width to crash\n\t\t\t// This includes:\n\t\t\t// - Unicode format characters\n\t\t\t// - Lone surrogates (already filtered by Array.from)\n\t\t\t// - Control chars except \\t \\n \\r\n\t\t\t// - Characters with undefined code points\n\n\t\t\tconst code = char.codePointAt(0);\n\n\t\t\t// Skip if code point is undefined (edge case with invalid strings)\n\t\t\tif (code === undefined) return false;\n\n\t\t\t// Allow tab, newline, carriage return\n\t\t\tif (code === 0x09 || code === 0x0a || code === 0x0d) return true;\n\n\t\t\t// Filter out control characters (0x00-0x1F, except 0x09, 0x0a, 0x0x0d)\n\t\t\tif (code <= 0x1f) return false;\n\n\t\t\t// Filter out Unicode format characters\n\t\t\tif (code >= 0xfff9 && code <= 0xfffb) return false;\n\n\t\t\treturn true;\n\t\t})\n\t\t.join(\"\");\n}\n\n/**\n * Kill a process and all its children (cross-platform)\n */\nexport function killProcessTree(pid: number): void {\n\tif (process.platform === \"win32\") {\n\t\t// Use taskkill on Windows to kill process tree\n\t\ttry {\n\t\t\tspawn(\"taskkill\", [\"/F\", \"/T\", \"/PID\", String(pid)], {\n\t\t\t\tstdio: \"ignore\",\n\t\t\t});\n\t\t} catch {\n\t\t\t// Ignore errors if taskkill fails\n\t\t}\n\t} else {\n\t\t// Use SIGKILL on Unix/Linux/Mac\n\t\ttry {\n\t\t\tprocess.kill(-pid, \"SIGKILL\");\n\t\t} catch {\n\t\t\t// Fallback to killing just the child if process group kill fails\n\t\t\ttry {\n\t\t\t\tprocess.kill(pid, \"SIGKILL\");\n\t\t\t} catch {\n\t\t\t\t// Process already dead\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gsd/pi-coding-agent",
3
- "version": "2.51.0",
3
+ "version": "2.52.0",
4
4
  "description": "Coding agent CLI (vendored from pi-mono)",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -49,6 +49,8 @@ export interface Args {
49
49
  fileArgs: string[];
50
50
  /** Unknown flags (potentially extension flags) - map of flag name to value */
51
51
  unknownFlags: Map<string, boolean | string>;
52
+ /** --bare: suppress CLAUDE.md/AGENTS.md, user skills, prompt templates, themes, project preferences */
53
+ bare?: boolean;
52
54
  }
53
55
 
54
56
  const VALID_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"] as const;
@@ -169,6 +171,8 @@ export function parseArgs(args: string[], extensionFlags?: Map<string, { type: "
169
171
  }
170
172
  } else if (arg === "--verbose") {
171
173
  result.verbose = true;
174
+ } else if (arg === "--bare") {
175
+ result.bare = true;
172
176
  } else if (arg === "--offline") {
173
177
  result.offline = true;
174
178
  } else if (arg.startsWith("@")) {
@@ -87,8 +87,12 @@ export function executeBash(command: string, options?: BashExecutorOptions & { l
87
87
  } else {
88
88
  ({ shell, args } = getShellConfig());
89
89
  }
90
+ // On Windows, detached: true sets CREATE_NEW_PROCESS_GROUP which can
91
+ // cause EINVAL in VSCode/ConPTY terminal contexts. The bg-shell
92
+ // extension already guards this (process-manager.ts); align here.
93
+ // Process-tree cleanup uses taskkill /F /T on Windows regardless.
90
94
  const child: ChildProcess = spawn(shell, [...args, sanitizeCommand(command)], {
91
- detached: true,
95
+ detached: process.platform !== "win32",
92
96
  env: getShellEnv(),
93
97
  stdio: ["ignore", "pipe", "pipe"],
94
98
  });
@@ -4,6 +4,7 @@
4
4
 
5
5
  import {
6
6
  type Api,
7
+ applyCapabilityPatches,
7
8
  type AssistantMessageEventStream,
8
9
  type Context,
9
10
  getApiProvider,
@@ -304,7 +305,10 @@ export class ModelRegistry {
304
305
  }
305
306
  }
306
307
 
307
- this.models = combined;
308
+ // Apply capability patches so custom/discovered/extension models get
309
+ // capabilities (supportsXhigh, supportsServiceTier, etc.) that the
310
+ // static pi-ai registry applies at module load for built-in models.
311
+ this.models = applyCapabilityPatches(combined);
308
312
  }
309
313
 
310
314
  /** Load built-in models and apply provider/model overrides */
@@ -748,6 +752,9 @@ export class ModelRegistry {
748
752
  this.models = config.oauth.modifyModels(this.models, cred);
749
753
  }
750
754
  }
755
+
756
+ // Ensure newly added extension models get capability patches
757
+ this.models = applyCapabilityPatches(this.models);
751
758
  } else if (config.baseUrl) {
752
759
  // Override-only: update baseUrl/headers for existing models
753
760
  const resolvedHeaders = resolveHeaders(config.headers);
@@ -808,8 +815,8 @@ export class ModelRegistry {
808
815
  }
809
816
  }
810
817
 
811
- // Convert and merge discovered models
812
- this.discoveredModels = this.convertDiscoveredModels(results);
818
+ // Convert and merge discovered models, then apply capability patches
819
+ this.discoveredModels = applyCapabilityPatches(this.convertDiscoveredModels(results));
813
820
  return results;
814
821
  }
815
822