gsd-pi 2.77.0-dev.538325aea → 2.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (709) hide show
  1. package/README.md +35 -17
  2. package/dist/cli.js +21 -13
  3. package/dist/extension-registry.js +1 -1
  4. package/dist/headless-ui.d.ts +1 -1
  5. package/dist/headless.js +4 -2
  6. package/dist/loader.js +1 -0
  7. package/dist/onboarding.js +5 -5
  8. package/dist/provider-migrations.d.ts +2 -2
  9. package/dist/provider-migrations.js +1 -2
  10. package/dist/remote-questions-config.js +1 -1
  11. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
  12. package/dist/resources/extensions/aws-auth/index.js +1 -2
  13. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +9 -6
  14. package/dist/resources/extensions/bg-shell/process-manager.js +1 -2
  15. package/dist/resources/extensions/browser-tools/index.js +1 -0
  16. package/dist/resources/extensions/claude-code-cli/index.js +1 -1
  17. package/dist/resources/extensions/claude-code-cli/partial-builder.js +17 -106
  18. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +10 -17
  19. package/dist/resources/extensions/gsd/auto-dispatch.js +14 -40
  20. package/dist/resources/extensions/gsd/auto-post-unit.js +0 -34
  21. package/dist/resources/extensions/gsd/auto-recovery.js +1 -38
  22. package/dist/resources/extensions/gsd/auto-start.js +2 -16
  23. package/dist/resources/extensions/gsd/dispatch-guard.js +3 -44
  24. package/dist/resources/extensions/gsd/guided-flow.js +1 -1
  25. package/dist/resources/extensions/gsd/prompts/system.md +0 -1
  26. package/dist/resources/extensions/mcp-client/index.js +1 -1
  27. package/dist/resources/extensions/ollama/index.js +2 -1
  28. package/dist/resources/extensions/ollama/ollama-chat-provider.js +15 -5
  29. package/dist/resources/extensions/remote-questions/config.js +1 -12
  30. package/dist/resources/extensions/universal-config/index.js +1 -1
  31. package/dist/security-overrides.d.ts +1 -4
  32. package/dist/security-overrides.js +3 -16
  33. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  34. package/dist/web/standalone/.next/BUILD_ID +1 -1
  35. package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
  36. package/dist/web/standalone/.next/build-manifest.json +4 -4
  37. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  38. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  39. package/dist/web/standalone/.next/required-server-files.json +3 -3
  40. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  41. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  42. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  43. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  44. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  45. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  46. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  47. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  48. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  51. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  52. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  53. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  54. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  55. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  56. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  57. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  58. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  59. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  60. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  61. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  62. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  63. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  64. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  65. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  66. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  67. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  68. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  69. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  70. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  71. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  72. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  73. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  74. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  75. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  76. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  77. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  78. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  79. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  80. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  81. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  82. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  84. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  85. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  87. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  88. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  90. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  99. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  109. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  115. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/shutdown/route.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.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  129. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  131. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  133. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  135. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/index.html +1 -1
  145. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  146. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  147. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  148. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  149. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  150. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  151. package/dist/web/standalone/.next/server/app/page.js +2 -2
  152. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
  154. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  155. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  156. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  158. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/middleware.js +2 -2
  160. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  162. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  163. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  164. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  165. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +9 -0
  166. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
  167. package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
  168. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
  169. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
  170. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
  171. package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-5fc74f13a25fa1bb.js} +1 -1
  172. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  173. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  174. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  175. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  176. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  177. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  178. package/dist/web/standalone/server.js +1 -1
  179. package/dist/web-mode.js +1 -1
  180. package/dist/welcome-screen.js +20 -19
  181. package/dist/wizard.js +5 -2
  182. package/package.json +7 -25
  183. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  184. package/packages/mcp-server/dist/server.js +11 -15
  185. package/packages/mcp-server/dist/server.js.map +1 -1
  186. package/packages/mcp-server/src/server.ts +16 -17
  187. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  188. package/packages/native/tsconfig.json +1 -2
  189. package/packages/native/tsconfig.tsbuildinfo +1 -0
  190. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  191. package/pkg/dist/core/export-html/ansi-to-html.js +0 -1
  192. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  193. package/pkg/dist/core/export-html/index.d.ts +1 -1
  194. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  195. package/pkg/dist/core/export-html/index.js +5 -39
  196. package/pkg/dist/core/export-html/index.js.map +1 -1
  197. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  198. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  199. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  200. package/scripts/ensure-workspace-builds.cjs +0 -2
  201. package/scripts/link-workspace-packages.cjs +0 -2
  202. package/scripts/postinstall.js +178 -9
  203. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  204. package/src/resources/extensions/aws-auth/index.ts +1 -2
  205. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +7 -4
  206. package/src/resources/extensions/bg-shell/index.ts +1 -2
  207. package/src/resources/extensions/bg-shell/process-manager.ts +1 -2
  208. package/src/resources/extensions/browser-tools/index.ts +1 -2
  209. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  210. package/src/resources/extensions/claude-code-cli/partial-builder.ts +23 -115
  211. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +9 -19
  212. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +3 -27
  213. package/src/resources/extensions/gsd/auto-dispatch.ts +13 -43
  214. package/src/resources/extensions/gsd/auto-post-unit.ts +0 -33
  215. package/src/resources/extensions/gsd/auto-recovery.ts +1 -37
  216. package/src/resources/extensions/gsd/auto-start.ts +6 -20
  217. package/src/resources/extensions/gsd/dispatch-guard.ts +2 -44
  218. package/src/resources/extensions/gsd/guided-flow.ts +1 -1
  219. package/src/resources/extensions/gsd/prompts/system.md +0 -1
  220. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -73
  221. package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +0 -15
  222. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +9 -9
  223. package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +0 -11
  224. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
  225. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +5 -127
  226. package/src/resources/extensions/mcp-client/index.ts +1 -1
  227. package/src/resources/extensions/ollama/index.ts +3 -3
  228. package/src/resources/extensions/ollama/ollama-chat-provider.ts +18 -6
  229. package/src/resources/extensions/remote-questions/config.ts +4 -15
  230. package/src/resources/extensions/search-the-web/index.ts +1 -2
  231. package/src/resources/extensions/shared/tests/format-utils.test.ts +3 -5
  232. package/src/resources/extensions/universal-config/index.ts +1 -1
  233. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
  234. package/dist/web/standalone/.next/static/chunks/app/page-5b113fd32bc2a1c3.js +0 -1
  235. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
  236. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
  237. package/packages/gsd-agent-core/dist/agent-session.d.ts +0 -716
  238. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +0 -1
  239. package/packages/gsd-agent-core/dist/agent-session.js +0 -2595
  240. package/packages/gsd-agent-core/dist/agent-session.js.map +0 -1
  241. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +0 -52
  242. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +0 -1
  243. package/packages/gsd-agent-core/dist/artifact-manager.js +0 -118
  244. package/packages/gsd-agent-core/dist/artifact-manager.js.map +0 -1
  245. package/packages/gsd-agent-core/dist/bash-executor.d.ts +0 -57
  246. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +0 -1
  247. package/packages/gsd-agent-core/dist/bash-executor.js +0 -282
  248. package/packages/gsd-agent-core/dist/bash-executor.js.map +0 -1
  249. package/packages/gsd-agent-core/dist/blob-store.d.ts +0 -39
  250. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +0 -1
  251. package/packages/gsd-agent-core/dist/blob-store.js +0 -151
  252. package/packages/gsd-agent-core/dist/blob-store.js.map +0 -1
  253. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +0 -90
  254. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +0 -1
  255. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +0 -207
  256. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +0 -1
  257. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +0 -137
  258. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +0 -1
  259. package/packages/gsd-agent-core/dist/compaction/compaction.js +0 -621
  260. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +0 -1
  261. package/packages/gsd-agent-core/dist/compaction/index.d.ts +0 -7
  262. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +0 -1
  263. package/packages/gsd-agent-core/dist/compaction/index.js +0 -7
  264. package/packages/gsd-agent-core/dist/compaction/index.js.map +0 -1
  265. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +0 -78
  266. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +0 -1
  267. package/packages/gsd-agent-core/dist/compaction/utils.js +0 -263
  268. package/packages/gsd-agent-core/dist/compaction/utils.js.map +0 -1
  269. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +0 -90
  270. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +0 -1
  271. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +0 -338
  272. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +0 -1
  273. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +0 -43
  274. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +0 -1
  275. package/packages/gsd-agent-core/dist/contextual-tips.js +0 -208
  276. package/packages/gsd-agent-core/dist/contextual-tips.js.map +0 -1
  277. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +0 -18
  278. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +0 -1
  279. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +0 -250
  280. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +0 -1
  281. package/packages/gsd-agent-core/dist/export-html/index.d.ts +0 -37
  282. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +0 -1
  283. package/packages/gsd-agent-core/dist/export-html/index.js +0 -257
  284. package/packages/gsd-agent-core/dist/export-html/index.js.map +0 -1
  285. package/packages/gsd-agent-core/dist/export-html/template.css +0 -971
  286. package/packages/gsd-agent-core/dist/export-html/template.html +0 -54
  287. package/packages/gsd-agent-core/dist/export-html/template.js +0 -1583
  288. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +0 -38
  289. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +0 -1
  290. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +0 -70
  291. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +0 -1
  292. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +0 -1213
  293. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +0 -6
  294. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +0 -75
  295. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +0 -1
  296. package/packages/gsd-agent-core/dist/fallback-resolver.js +0 -118
  297. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +0 -1
  298. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +0 -44
  299. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +0 -1
  300. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +0 -99
  301. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +0 -1
  302. package/packages/gsd-agent-core/dist/index.d.ts +0 -14
  303. package/packages/gsd-agent-core/dist/index.d.ts.map +0 -1
  304. package/packages/gsd-agent-core/dist/index.js +0 -19
  305. package/packages/gsd-agent-core/dist/index.js.map +0 -1
  306. package/packages/gsd-agent-core/dist/keybindings.d.ts +0 -47
  307. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +0 -1
  308. package/packages/gsd-agent-core/dist/keybindings.js +0 -156
  309. package/packages/gsd-agent-core/dist/keybindings.js.map +0 -1
  310. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +0 -42
  311. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +0 -1
  312. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +0 -204
  313. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +0 -1
  314. package/packages/gsd-agent-core/dist/retry-handler.d.ts +0 -128
  315. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +0 -1
  316. package/packages/gsd-agent-core/dist/retry-handler.js +0 -518
  317. package/packages/gsd-agent-core/dist/retry-handler.js.map +0 -1
  318. package/packages/gsd-agent-core/dist/sdk.d.ts +0 -159
  319. package/packages/gsd-agent-core/dist/sdk.d.ts.map +0 -1
  320. package/packages/gsd-agent-core/dist/sdk.js +0 -375
  321. package/packages/gsd-agent-core/dist/sdk.js.map +0 -1
  322. package/packages/gsd-agent-core/dist/system-prompt.d.ts +0 -28
  323. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +0 -1
  324. package/packages/gsd-agent-core/dist/system-prompt.js +0 -201
  325. package/packages/gsd-agent-core/dist/system-prompt.js.map +0 -1
  326. package/packages/gsd-agent-core/package.json +0 -25
  327. package/packages/gsd-agent-core/scripts/copy-assets.cjs +0 -43
  328. package/packages/gsd-agent-core/src/agent-session.test.ts +0 -169
  329. package/packages/gsd-agent-core/src/agent-session.ts +0 -3358
  330. package/packages/gsd-agent-core/src/artifact-manager.ts +0 -126
  331. package/packages/gsd-agent-core/src/bash-executor.ts +0 -352
  332. package/packages/gsd-agent-core/src/blob-store.ts +0 -154
  333. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +0 -317
  334. package/packages/gsd-agent-core/src/compaction/compaction.ts +0 -855
  335. package/packages/gsd-agent-core/src/compaction/index.ts +0 -7
  336. package/packages/gsd-agent-core/src/compaction/utils.ts +0 -312
  337. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +0 -449
  338. package/packages/gsd-agent-core/src/contextual-tips.ts +0 -232
  339. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +0 -259
  340. package/packages/gsd-agent-core/src/export-html/index.ts +0 -345
  341. package/packages/gsd-agent-core/src/export-html/template.css +0 -971
  342. package/packages/gsd-agent-core/src/export-html/template.html +0 -54
  343. package/packages/gsd-agent-core/src/export-html/template.js +0 -1583
  344. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +0 -114
  345. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +0 -1213
  346. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +0 -6
  347. package/packages/gsd-agent-core/src/fallback-resolver.ts +0 -193
  348. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +0 -120
  349. package/packages/gsd-agent-core/src/index.ts +0 -68
  350. package/packages/gsd-agent-core/src/keybindings.ts +0 -220
  351. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +0 -284
  352. package/packages/gsd-agent-core/src/retry-handler.ts +0 -620
  353. package/packages/gsd-agent-core/src/sdk.ts +0 -550
  354. package/packages/gsd-agent-core/src/system-prompt.ts +0 -270
  355. package/packages/gsd-agent-core/tsconfig.json +0 -28
  356. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +0 -1
  357. package/packages/gsd-agent-modes/dist/cli/args.d.ts +0 -58
  358. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +0 -1
  359. package/packages/gsd-agent-modes/dist/cli/args.js +0 -324
  360. package/packages/gsd-agent-modes/dist/cli/args.js.map +0 -1
  361. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +0 -13
  362. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +0 -1
  363. package/packages/gsd-agent-modes/dist/cli/config-selector.js +0 -32
  364. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +0 -1
  365. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +0 -15
  366. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +0 -1
  367. package/packages/gsd-agent-modes/dist/cli/file-processor.js +0 -86
  368. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +0 -1
  369. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +0 -21
  370. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +0 -1
  371. package/packages/gsd-agent-modes/dist/cli/list-models.js +0 -114
  372. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +0 -1
  373. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +0 -10
  374. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +0 -1
  375. package/packages/gsd-agent-modes/dist/cli/session-picker.js +0 -37
  376. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +0 -1
  377. package/packages/gsd-agent-modes/dist/index.d.ts +0 -7
  378. package/packages/gsd-agent-modes/dist/index.d.ts.map +0 -1
  379. package/packages/gsd-agent-modes/dist/index.js +0 -7
  380. package/packages/gsd-agent-modes/dist/index.js.map +0 -1
  381. package/packages/gsd-agent-modes/dist/main.d.ts +0 -8
  382. package/packages/gsd-agent-modes/dist/main.d.ts.map +0 -1
  383. package/packages/gsd-agent-modes/dist/main.js +0 -491
  384. package/packages/gsd-agent-modes/dist/main.js.map +0 -1
  385. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +0 -34
  386. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +0 -1
  387. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +0 -330
  388. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +0 -1
  389. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +0 -29
  390. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  391. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +0 -141
  392. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +0 -1
  393. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +0 -36
  394. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  395. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +0 -157
  396. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +0 -1
  397. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  398. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  399. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +0 -48
  400. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  401. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  402. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  403. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +0 -43
  404. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  405. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +0 -11
  406. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +0 -1
  407. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +0 -47
  408. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +0 -1
  409. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  410. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  411. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +0 -44
  412. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  413. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +0 -71
  414. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  415. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +0 -474
  416. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +0 -1
  417. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +0 -15
  418. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  419. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +0 -32
  420. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  421. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +0 -22
  422. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  423. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +0 -70
  424. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +0 -1
  425. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +0 -20
  426. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  427. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +0 -75
  428. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +0 -1
  429. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  430. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  431. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +0 -140
  432. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +0 -1
  433. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +0 -12
  434. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +0 -1
  435. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +0 -133
  436. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +0 -1
  437. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +0 -33
  438. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  439. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +0 -82
  440. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  441. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  442. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  443. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +0 -111
  444. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +0 -1
  445. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +0 -24
  446. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  447. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +0 -63
  448. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +0 -1
  449. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +0 -33
  450. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  451. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +0 -118
  452. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +0 -1
  453. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +0 -32
  454. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +0 -1
  455. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +0 -230
  456. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +0 -1
  457. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +0 -34
  458. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +0 -1
  459. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +0 -36
  460. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +0 -1
  461. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +0 -48
  462. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  463. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +0 -72
  464. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  465. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +0 -63
  466. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  467. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +0 -213
  468. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +0 -1
  469. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +0 -86
  470. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  471. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +0 -536
  472. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +0 -1
  473. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  474. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  475. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +0 -93
  476. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  477. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +0 -30
  478. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +0 -1
  479. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +0 -169
  480. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +0 -1
  481. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  482. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  483. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +0 -267
  484. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  485. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
  486. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  487. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +0 -155
  488. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  489. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +0 -97
  490. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  491. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +0 -810
  492. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +0 -1
  493. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +0 -71
  494. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  495. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +0 -320
  496. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +0 -1
  497. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  498. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  499. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +0 -34
  500. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  501. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  502. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  503. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +0 -46
  504. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  505. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  506. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  507. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +0 -45
  508. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +0 -1
  509. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  510. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  511. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +0 -46
  512. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  513. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +0 -15
  514. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +0 -1
  515. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +0 -40
  516. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +0 -1
  517. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +0 -111
  518. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  519. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +0 -984
  520. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +0 -1
  521. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +0 -44
  522. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +0 -1
  523. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +0 -61
  524. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +0 -1
  525. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +0 -109
  526. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  527. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +0 -1035
  528. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +0 -1
  529. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  530. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  531. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +0 -112
  532. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  533. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +0 -12
  534. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  535. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +0 -38
  536. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +0 -1
  537. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  538. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  539. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +0 -33
  540. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  541. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +0 -27
  542. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +0 -1
  543. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +0 -793
  544. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +0 -1
  545. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +0 -4
  546. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +0 -1
  547. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +0 -62
  548. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +0 -1
  549. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +0 -22
  550. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +0 -1
  551. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +0 -118
  552. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +0 -1
  553. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +0 -7
  554. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +0 -1
  555. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +0 -68
  556. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +0 -1
  557. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +0 -50
  558. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +0 -1
  559. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +0 -2
  560. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +0 -1
  561. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +0 -358
  562. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  563. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +0 -3409
  564. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +0 -1
  565. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +0 -77
  566. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +0 -1
  567. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +0 -529
  568. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +0 -1
  569. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +0 -6
  570. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +0 -1
  571. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +0 -15
  572. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +0 -1
  573. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +0 -28
  574. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +0 -1
  575. package/packages/gsd-agent-modes/dist/modes/print-mode.js +0 -84
  576. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +0 -1
  577. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +0 -17
  578. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +0 -1
  579. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +0 -49
  580. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +0 -1
  581. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +0 -37
  582. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +0 -1
  583. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +0 -84
  584. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +0 -1
  585. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +0 -243
  586. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  587. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +0 -464
  588. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +0 -1
  589. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +0 -25
  590. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  591. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +0 -750
  592. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +0 -1
  593. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +0 -511
  594. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  595. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +0 -8
  596. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +0 -1
  597. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +0 -19
  598. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +0 -1
  599. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +0 -45
  600. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +0 -1
  601. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +0 -22
  602. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +0 -1
  603. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +0 -21
  604. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +0 -1
  605. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +0 -4
  606. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +0 -1
  607. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +0 -3
  608. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +0 -1
  609. package/packages/gsd-agent-modes/dist/theme.d.ts +0 -15
  610. package/packages/gsd-agent-modes/dist/theme.d.ts.map +0 -1
  611. package/packages/gsd-agent-modes/dist/theme.js +0 -23
  612. package/packages/gsd-agent-modes/dist/theme.js.map +0 -1
  613. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +0 -16
  614. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +0 -1
  615. package/packages/gsd-agent-modes/dist/utils/theme.js +0 -11
  616. package/packages/gsd-agent-modes/dist/utils/theme.js.map +0 -1
  617. package/packages/gsd-agent-modes/package.json +0 -23
  618. package/packages/gsd-agent-modes/src/cli/args.ts +0 -350
  619. package/packages/gsd-agent-modes/src/cli/config-selector.ts +0 -54
  620. package/packages/gsd-agent-modes/src/cli/file-processor.ts +0 -107
  621. package/packages/gsd-agent-modes/src/cli/list-models.ts +0 -141
  622. package/packages/gsd-agent-modes/src/cli/session-picker.ts +0 -59
  623. package/packages/gsd-agent-modes/src/index.ts +0 -6
  624. package/packages/gsd-agent-modes/src/main.ts +0 -614
  625. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +0 -24
  626. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +0 -18
  627. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +0 -38
  628. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +0 -171
  629. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +0 -382
  630. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +0 -178
  631. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +0 -212
  632. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +0 -66
  633. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +0 -59
  634. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +0 -67
  635. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +0 -60
  636. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +0 -597
  637. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +0 -41
  638. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +0 -88
  639. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +0 -100
  640. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +0 -165
  641. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +0 -147
  642. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +0 -73
  643. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +0 -89
  644. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +0 -151
  645. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +0 -100
  646. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +0 -156
  647. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +0 -257
  648. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +0 -35
  649. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +0 -84
  650. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +0 -257
  651. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +0 -656
  652. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +0 -122
  653. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +0 -210
  654. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +0 -342
  655. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +0 -194
  656. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +0 -1011
  657. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +0 -452
  658. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +0 -45
  659. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +0 -56
  660. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +0 -63
  661. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +0 -64
  662. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +0 -48
  663. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +0 -1157
  664. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +0 -81
  665. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +0 -1208
  666. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +0 -145
  667. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +0 -44
  668. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +0 -50
  669. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +0 -1430
  670. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +0 -71
  671. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +0 -957
  672. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +0 -63
  673. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +0 -183
  674. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +0 -140
  675. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +0 -77
  676. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +0 -44
  677. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +0 -49
  678. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +0 -4195
  679. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +0 -670
  680. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +0 -14
  681. package/packages/gsd-agent-modes/src/modes/print-mode.ts +0 -106
  682. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +0 -58
  683. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +0 -109
  684. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +0 -572
  685. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +0 -902
  686. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +0 -971
  687. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +0 -335
  688. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +0 -53
  689. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +0 -42
  690. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +0 -4
  691. package/packages/gsd-agent-modes/src/theme.ts +0 -25
  692. package/packages/gsd-agent-modes/src/utils/theme.ts +0 -24
  693. package/packages/gsd-agent-modes/tsconfig.json +0 -28
  694. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +0 -1
  695. package/packages/gsd-agent-types/dist/index.d.ts +0 -176
  696. package/packages/gsd-agent-types/dist/index.d.ts.map +0 -1
  697. package/packages/gsd-agent-types/dist/index.js +0 -24
  698. package/packages/gsd-agent-types/dist/index.js.map +0 -1
  699. package/packages/gsd-agent-types/package.json +0 -24
  700. package/packages/gsd-agent-types/src/index.ts +0 -206
  701. package/packages/gsd-agent-types/tsconfig.json +0 -25
  702. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +0 -1
  703. package/packages/native/dist/tsconfig.tsbuildinfo +0 -1
  704. package/scripts/install.js +0 -512
  705. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +0 -27
  706. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +0 -63
  707. package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +0 -77
  708. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → pV-mPo7rYGb5JBC09C8GG}/_buildManifest.js +0 -0
  709. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → pV-mPo7rYGb5JBC09C8GG}/_ssgManifest.js +0 -0
@@ -1,971 +0,0 @@
1
- /**
2
- * RPC Protocol v2 test suite.
3
- *
4
- * Tests v1 backward compatibility, v2 init handshake, protocol locking,
5
- * v2 feature type shapes, and RpcClient command serialization against
6
- * mock child processes using PassThrough streams.
7
- */
8
-
9
- import { describe, it, beforeEach, afterEach, mock } from "node:test";
10
- import assert from "node:assert/strict";
11
- import { PassThrough } from "node:stream";
12
- import { attachJsonlLineReader, serializeJsonLine } from "@gsd/pi-coding-agent";
13
- import type {
14
- RpcCommand,
15
- RpcResponse,
16
- RpcInitResult,
17
- RpcExecutionCompleteEvent,
18
- RpcCostUpdateEvent,
19
- RpcV2Event,
20
- RpcProtocolVersion,
21
- RpcSessionState,
22
- } from "./rpc-types.js";
23
-
24
- // ============================================================================
25
- // Helpers
26
- // ============================================================================
27
-
28
- /** Collect JSONL output lines from a stream */
29
- function collectLines(stream: PassThrough): { lines: unknown[]; detach: () => void } {
30
- const lines: unknown[] = [];
31
- const detach = attachJsonlLineReader(stream, (line) => {
32
- try {
33
- lines.push(JSON.parse(line));
34
- } catch {
35
- // skip non-JSON lines
36
- }
37
- });
38
- return { lines, detach };
39
- }
40
-
41
- /** Write a command as JSONL to a writable stream and wait for drain */
42
- function writeLine(stream: PassThrough, obj: unknown): void {
43
- stream.write(serializeJsonLine(obj));
44
- }
45
-
46
- /**
47
- * Create a mock "child process" with piped stdin/stdout.
48
- * clientStdin → data flows into the "server" (from the client's perspective, this is what the client writes to)
49
- * clientStdout ← data flows out of the "server" (from the client's perspective, this is what the client reads from)
50
- *
51
- * The test acts as the "server": read from clientStdin, write to clientStdout.
52
- */
53
- function createMockProcess() {
54
- // Client writes to this → server reads from it
55
- const clientStdin = new PassThrough();
56
- // Server writes to this → client reads from it
57
- const clientStdout = new PassThrough();
58
-
59
- return { clientStdin, clientStdout };
60
- }
61
-
62
- /** Wait a tick for async handlers to process */
63
- function tick(ms = 10): Promise<void> {
64
- return new Promise((resolve) => setTimeout(resolve, ms));
65
- }
66
-
67
- // ============================================================================
68
- // JSONL utilities
69
- // ============================================================================
70
-
71
- describe("JSONL utilities", () => {
72
- it("serializeJsonLine produces newline-terminated JSON", () => {
73
- const result = serializeJsonLine({ type: "test", value: 42 });
74
- assert.equal(result, '{"type":"test","value":42}\n');
75
- });
76
-
77
- it("serializeJsonLine handles nested objects", () => {
78
- const result = serializeJsonLine({ a: { b: [1, 2, 3] } });
79
- assert.ok(result.endsWith("\n"));
80
- const parsed = JSON.parse(result.trim());
81
- assert.deepEqual(parsed, { a: { b: [1, 2, 3] } });
82
- });
83
-
84
- it("attachJsonlLineReader splits on LF only", async () => {
85
- const stream = new PassThrough();
86
- const { lines, detach } = collectLines(stream);
87
-
88
- stream.write('{"a":1}\n{"b":2}\n');
89
- await tick();
90
-
91
- assert.equal(lines.length, 2);
92
- assert.deepEqual(lines[0], { a: 1 });
93
- assert.deepEqual(lines[1], { b: 2 });
94
- detach();
95
- });
96
-
97
- it("attachJsonlLineReader handles partial writes", async () => {
98
- const stream = new PassThrough();
99
- const { lines, detach } = collectLines(stream);
100
-
101
- stream.write('{"partial":');
102
- await tick();
103
- assert.equal(lines.length, 0);
104
-
105
- stream.write('"value"}\n');
106
- await tick();
107
- assert.equal(lines.length, 1);
108
- assert.deepEqual(lines[0], { partial: "value" });
109
- detach();
110
- });
111
-
112
- it("attachJsonlLineReader handles CR+LF", async () => {
113
- const stream = new PassThrough();
114
- const { lines, detach } = collectLines(stream);
115
-
116
- stream.write('{"cr":"lf"}\r\n');
117
- await tick();
118
- assert.equal(lines.length, 1);
119
- assert.deepEqual(lines[0], { cr: "lf" });
120
- detach();
121
- });
122
-
123
- it("detach stops line delivery", async () => {
124
- const stream = new PassThrough();
125
- const { lines, detach } = collectLines(stream);
126
-
127
- stream.write('{"before":1}\n');
128
- await tick();
129
- assert.equal(lines.length, 1);
130
-
131
- detach();
132
-
133
- stream.write('{"after":2}\n');
134
- await tick();
135
- // Should still be 1 since we detached
136
- assert.equal(lines.length, 1);
137
- });
138
- });
139
-
140
- // ============================================================================
141
- // v2 type shape assertions
142
- // ============================================================================
143
-
144
- describe("v2 type shapes", () => {
145
- it("RpcInitResult has required fields", () => {
146
- const initResult: RpcInitResult = {
147
- protocolVersion: 2,
148
- sessionId: "test-session-123",
149
- capabilities: {
150
- events: ["execution_complete", "cost_update"],
151
- commands: ["init", "shutdown", "subscribe"],
152
- },
153
- };
154
- assert.equal(initResult.protocolVersion, 2);
155
- assert.ok(typeof initResult.sessionId === "string");
156
- assert.ok(Array.isArray(initResult.capabilities.events));
157
- assert.ok(Array.isArray(initResult.capabilities.commands));
158
- assert.ok(initResult.capabilities.events.includes("execution_complete"));
159
- assert.ok(initResult.capabilities.events.includes("cost_update"));
160
- assert.ok(initResult.capabilities.commands.includes("init"));
161
- assert.ok(initResult.capabilities.commands.includes("shutdown"));
162
- assert.ok(initResult.capabilities.commands.includes("subscribe"));
163
- });
164
-
165
- it("RpcExecutionCompleteEvent matches expected shape", () => {
166
- const event: RpcExecutionCompleteEvent = {
167
- type: "execution_complete",
168
- runId: "run-abc-123",
169
- status: "completed",
170
- stats: {
171
- cost: 0.05,
172
- turns: 3,
173
- duration: 12000,
174
- tokens: { input: 1000, output: 500, cacheRead: 200, cacheWrite: 100 },
175
- } as any, // SessionStats is complex, we just verify shape
176
- };
177
- assert.equal(event.type, "execution_complete");
178
- assert.ok(typeof event.runId === "string");
179
- assert.ok(["completed", "error", "cancelled"].includes(event.status));
180
- assert.ok(event.stats !== undefined);
181
- });
182
-
183
- it("RpcExecutionCompleteEvent supports error status with reason", () => {
184
- const event: RpcExecutionCompleteEvent = {
185
- type: "execution_complete",
186
- runId: "run-err-456",
187
- status: "error",
188
- reason: "API rate limit exceeded",
189
- stats: {} as any,
190
- };
191
- assert.equal(event.status, "error");
192
- assert.equal(event.reason, "API rate limit exceeded");
193
- });
194
-
195
- it("RpcCostUpdateEvent matches expected shape", () => {
196
- const event: RpcCostUpdateEvent = {
197
- type: "cost_update",
198
- runId: "run-cost-789",
199
- turnCost: 0.01,
200
- cumulativeCost: 0.05,
201
- tokens: {
202
- input: 500,
203
- output: 200,
204
- cacheRead: 100,
205
- cacheWrite: 50,
206
- },
207
- };
208
- assert.equal(event.type, "cost_update");
209
- assert.ok(typeof event.runId === "string");
210
- assert.ok(typeof event.turnCost === "number");
211
- assert.ok(typeof event.cumulativeCost === "number");
212
- assert.ok(typeof event.tokens.input === "number");
213
- assert.ok(typeof event.tokens.output === "number");
214
- assert.ok(typeof event.tokens.cacheRead === "number");
215
- assert.ok(typeof event.tokens.cacheWrite === "number");
216
- });
217
-
218
- it("RpcV2Event discriminated union resolves by type field", () => {
219
- const events: RpcV2Event[] = [
220
- {
221
- type: "execution_complete",
222
- runId: "r1",
223
- status: "completed",
224
- stats: {} as any,
225
- },
226
- {
227
- type: "cost_update",
228
- runId: "r2",
229
- turnCost: 0.01,
230
- cumulativeCost: 0.03,
231
- tokens: { input: 100, output: 50, cacheRead: 10, cacheWrite: 5 },
232
- },
233
- ];
234
-
235
- for (const event of events) {
236
- if (event.type === "execution_complete") {
237
- // TypeScript narrows to RpcExecutionCompleteEvent
238
- assert.ok("status" in event);
239
- assert.ok("stats" in event);
240
- } else if (event.type === "cost_update") {
241
- // TypeScript narrows to RpcCostUpdateEvent
242
- assert.ok("turnCost" in event);
243
- assert.ok("tokens" in event);
244
- } else {
245
- assert.fail(`Unexpected event type: ${(event as any).type}`);
246
- }
247
- }
248
- });
249
-
250
- it("RpcProtocolVersion is 1 or 2", () => {
251
- const v1: RpcProtocolVersion = 1;
252
- const v2: RpcProtocolVersion = 2;
253
- assert.equal(v1, 1);
254
- assert.equal(v2, 2);
255
- });
256
-
257
- it("v2 prompt response includes optional runId field", () => {
258
- const v1Response: RpcResponse = {
259
- id: "1",
260
- type: "response",
261
- command: "prompt",
262
- success: true,
263
- };
264
- assert.equal(v1Response.success, true);
265
- assert.equal((v1Response as any).runId, undefined);
266
-
267
- const v2Response: RpcResponse = {
268
- id: "2",
269
- type: "response",
270
- command: "prompt",
271
- success: true,
272
- runId: "run-123",
273
- };
274
- assert.equal(v2Response.success, true);
275
- assert.equal((v2Response as any).runId, "run-123");
276
- });
277
-
278
- it("v2 command types are present in RpcCommand union", () => {
279
- // These compile — that's the actual test. Runtime verification:
280
- const initCmd: RpcCommand = { type: "init", protocolVersion: 2 };
281
- const shutdownCmd: RpcCommand = { type: "shutdown" };
282
- const subscribeCmd: RpcCommand = { type: "subscribe", events: ["agent_end"] };
283
-
284
- assert.equal(initCmd.type, "init");
285
- assert.equal(shutdownCmd.type, "shutdown");
286
- assert.equal(subscribeCmd.type, "subscribe");
287
- });
288
-
289
- it("init command supports optional clientId", () => {
290
- const cmd: RpcCommand = { type: "init", protocolVersion: 2, clientId: "my-client" };
291
- assert.equal(cmd.type, "init");
292
- if (cmd.type === "init") {
293
- assert.equal(cmd.clientId, "my-client");
294
- }
295
- });
296
-
297
- it("shutdown command supports optional graceful flag", () => {
298
- const cmd: RpcCommand = { type: "shutdown", graceful: true };
299
- if (cmd.type === "shutdown") {
300
- assert.equal(cmd.graceful, true);
301
- }
302
- });
303
-
304
- it("v2 response types include init, shutdown, subscribe", () => {
305
- const initResp: RpcResponse = {
306
- type: "response",
307
- command: "init",
308
- success: true,
309
- data: {
310
- protocolVersion: 2,
311
- sessionId: "s1",
312
- capabilities: { events: [], commands: [] },
313
- },
314
- };
315
- const shutdownResp: RpcResponse = {
316
- type: "response",
317
- command: "shutdown",
318
- success: true,
319
- };
320
- const subscribeResp: RpcResponse = {
321
- type: "response",
322
- command: "subscribe",
323
- success: true,
324
- };
325
-
326
- assert.equal(initResp.command, "init");
327
- assert.equal(shutdownResp.command, "shutdown");
328
- assert.equal(subscribeResp.command, "subscribe");
329
- });
330
- });
331
-
332
- // ============================================================================
333
- // v1 backward compatibility
334
- // ============================================================================
335
-
336
- describe("v1 backward compatibility — command shapes", () => {
337
- it("v1 prompt command has no protocolVersion or runId", () => {
338
- const cmd: RpcCommand = { type: "prompt", message: "hello" };
339
- assert.equal(cmd.type, "prompt");
340
- assert.equal((cmd as any).protocolVersion, undefined);
341
- assert.equal((cmd as any).runId, undefined);
342
- });
343
-
344
- it("v1 get_state response has no v2 fields", () => {
345
- const state: RpcSessionState = {
346
- thinkingLevel: "medium",
347
- isStreaming: false,
348
- isCompacting: false,
349
- steeringMode: "all",
350
- followUpMode: "all",
351
- sessionId: "test-id",
352
- autoCompactionEnabled: true,
353
- autoRetryEnabled: false,
354
- retryInProgress: false,
355
- retryAttempt: 0,
356
- messageCount: 0,
357
- pendingMessageCount: 0,
358
- extensionsReady: true,
359
- };
360
- // v1 state should not include any v2-specific fields
361
- assert.equal((state as any).protocolVersion, undefined);
362
- assert.equal((state as any).runId, undefined);
363
- });
364
-
365
- it("v1 prompt response has no runId", () => {
366
- const resp: RpcResponse = {
367
- id: "1",
368
- type: "response",
369
- command: "prompt",
370
- success: true,
371
- };
372
- assert.equal(resp.success, true);
373
- // runId is optional; in v1 mode it won't be present
374
- assert.equal((resp as any).runId, undefined);
375
- });
376
-
377
- it("error response shape is consistent across v1 and v2", () => {
378
- const errResp: RpcResponse = {
379
- id: "err-1",
380
- type: "response",
381
- command: "init",
382
- success: false,
383
- error: "Protocol version already locked. init must be the first command.",
384
- };
385
- assert.equal(errResp.success, false);
386
- if (!errResp.success) {
387
- assert.ok(typeof errResp.error === "string");
388
- assert.ok(errResp.error.length > 0);
389
- }
390
- });
391
- });
392
-
393
- // ============================================================================
394
- // RpcClient command serialization tests (mock process)
395
- // ============================================================================
396
-
397
- describe("RpcClient command serialization", () => {
398
- // We import the class dynamically to avoid the full module graph at test time.
399
- // Instead we test the protocol framing directly — what gets written to stdin and
400
- // what comes back from stdout — using PassThrough streams.
401
-
402
- it("init command serializes correctly", () => {
403
- const cmd = { id: "req_1", type: "init", protocolVersion: 2 };
404
- const serialized = serializeJsonLine(cmd);
405
- const parsed = JSON.parse(serialized);
406
- assert.equal(parsed.type, "init");
407
- assert.equal(parsed.protocolVersion, 2);
408
- assert.equal(parsed.id, "req_1");
409
- });
410
-
411
- it("init command with clientId serializes correctly", () => {
412
- const cmd = { id: "req_1", type: "init", protocolVersion: 2, clientId: "test-client" };
413
- const serialized = serializeJsonLine(cmd);
414
- const parsed = JSON.parse(serialized);
415
- assert.equal(parsed.clientId, "test-client");
416
- });
417
-
418
- it("shutdown command serializes correctly", () => {
419
- const cmd = { id: "req_2", type: "shutdown" };
420
- const serialized = serializeJsonLine(cmd);
421
- const parsed = JSON.parse(serialized);
422
- assert.equal(parsed.type, "shutdown");
423
- assert.equal(parsed.id, "req_2");
424
- });
425
-
426
- it("subscribe command serializes correctly with event list", () => {
427
- const cmd = { id: "req_3", type: "subscribe", events: ["agent_end", "cost_update"] };
428
- const serialized = serializeJsonLine(cmd);
429
- const parsed = JSON.parse(serialized);
430
- assert.equal(parsed.type, "subscribe");
431
- assert.deepEqual(parsed.events, ["agent_end", "cost_update"]);
432
- });
433
-
434
- it("subscribe command with wildcard serializes correctly", () => {
435
- const cmd = { id: "req_4", type: "subscribe", events: ["*"] };
436
- const serialized = serializeJsonLine(cmd);
437
- const parsed = JSON.parse(serialized);
438
- assert.deepEqual(parsed.events, ["*"]);
439
- });
440
-
441
- it("subscribe command with empty array serializes correctly", () => {
442
- const cmd = { id: "req_5", type: "subscribe", events: [] as string[] };
443
- const serialized = serializeJsonLine(cmd);
444
- const parsed = JSON.parse(serialized);
445
- assert.deepEqual(parsed.events, []);
446
- });
447
-
448
- it("sendUIResponse serializes correct JSONL", () => {
449
- const response = {
450
- type: "extension_ui_response",
451
- id: "ui-req-123",
452
- value: "test-value",
453
- };
454
- const serialized = serializeJsonLine(response);
455
- const parsed = JSON.parse(serialized);
456
- assert.equal(parsed.type, "extension_ui_response");
457
- assert.equal(parsed.id, "ui-req-123");
458
- assert.equal(parsed.value, "test-value");
459
- });
460
-
461
- it("sendUIResponse with cancelled flag serializes correctly", () => {
462
- const response = {
463
- type: "extension_ui_response",
464
- id: "ui-req-456",
465
- cancelled: true,
466
- };
467
- const serialized = serializeJsonLine(response);
468
- const parsed = JSON.parse(serialized);
469
- assert.equal(parsed.type, "extension_ui_response");
470
- assert.equal(parsed.cancelled, true);
471
- });
472
-
473
- it("sendUIResponse with confirmed flag serializes correctly", () => {
474
- const response = {
475
- type: "extension_ui_response",
476
- id: "ui-req-789",
477
- confirmed: true,
478
- };
479
- const serialized = serializeJsonLine(response);
480
- const parsed = JSON.parse(serialized);
481
- assert.equal(parsed.confirmed, true);
482
- });
483
-
484
- it("sendUIResponse with multiple values serializes correctly", () => {
485
- const response = {
486
- type: "extension_ui_response",
487
- id: "ui-req-multi",
488
- values: ["opt-a", "opt-b"],
489
- };
490
- const serialized = serializeJsonLine(response);
491
- const parsed = JSON.parse(serialized);
492
- assert.deepEqual(parsed.values, ["opt-a", "opt-b"]);
493
- });
494
-
495
- it("prompt command with runId in v2 response", () => {
496
- const response = {
497
- id: "req_10",
498
- type: "response",
499
- command: "prompt",
500
- success: true,
501
- runId: "run-uuid-abc",
502
- };
503
- const serialized = serializeJsonLine(response);
504
- const parsed = JSON.parse(serialized);
505
- assert.equal(parsed.runId, "run-uuid-abc");
506
- assert.equal(parsed.command, "prompt");
507
- assert.equal(parsed.success, true);
508
- });
509
- });
510
-
511
- // ============================================================================
512
- // Client ↔ Mock server integration (PassThrough streams)
513
- // ============================================================================
514
-
515
- describe("Client ↔ Mock server protocol exchange", () => {
516
- let clientStdin: PassThrough;
517
- let clientStdout: PassThrough;
518
-
519
- beforeEach(() => {
520
- const mockProc = createMockProcess();
521
- clientStdin = mockProc.clientStdin;
522
- clientStdout = mockProc.clientStdout;
523
- });
524
-
525
- afterEach(() => {
526
- clientStdin.destroy();
527
- clientStdout.destroy();
528
- });
529
-
530
- it("init handshake: client writes init, server responds with init_result", async () => {
531
- // Collect what the client would write
532
- const { lines: clientWrites, detach: detachStdin } = collectLines(clientStdin);
533
-
534
- // Client sends init command
535
- writeLine(clientStdin, { id: "req_1", type: "init", protocolVersion: 2 });
536
- await tick();
537
-
538
- assert.equal(clientWrites.length, 1);
539
- const initCmd = clientWrites[0] as any;
540
- assert.equal(initCmd.type, "init");
541
- assert.equal(initCmd.protocolVersion, 2);
542
-
543
- // Server responds with init_result
544
- const initResult: RpcInitResult = {
545
- protocolVersion: 2,
546
- sessionId: "sess-abc",
547
- capabilities: {
548
- events: ["execution_complete", "cost_update"],
549
- commands: ["init", "shutdown", "subscribe"],
550
- },
551
- };
552
- writeLine(clientStdout, {
553
- id: "req_1",
554
- type: "response",
555
- command: "init",
556
- success: true,
557
- data: initResult,
558
- });
559
-
560
- // Collect server response
561
- const { lines: serverResponses, detach: detachStdout } = collectLines(clientStdout);
562
- // Already wrote above, but let's verify the shape by re-writing
563
- writeLine(clientStdout, {
564
- id: "req_verify",
565
- type: "response",
566
- command: "init",
567
- success: true,
568
- data: initResult,
569
- });
570
- await tick();
571
-
572
- const resp = serverResponses[0] as any;
573
- assert.equal(resp.type, "response");
574
- assert.equal(resp.command, "init");
575
- assert.equal(resp.success, true);
576
- assert.equal(resp.data.protocolVersion, 2);
577
- assert.ok(typeof resp.data.sessionId === "string");
578
-
579
- detachStdin();
580
- detachStdout();
581
- });
582
-
583
- it("shutdown: client writes shutdown, server acknowledges", async () => {
584
- const { lines: clientWrites, detach } = collectLines(clientStdin);
585
-
586
- writeLine(clientStdin, { id: "req_2", type: "shutdown" });
587
- await tick();
588
-
589
- const cmd = clientWrites[0] as any;
590
- assert.equal(cmd.type, "shutdown");
591
-
592
- detach();
593
- });
594
-
595
- it("subscribe: client writes subscribe with event list", async () => {
596
- const { lines: clientWrites, detach } = collectLines(clientStdin);
597
-
598
- writeLine(clientStdin, { id: "req_3", type: "subscribe", events: ["agent_end", "execution_complete"] });
599
- await tick();
600
-
601
- const cmd = clientWrites[0] as any;
602
- assert.equal(cmd.type, "subscribe");
603
- assert.deepEqual(cmd.events, ["agent_end", "execution_complete"]);
604
-
605
- detach();
606
- });
607
-
608
- it("sendUIResponse: client writes extension_ui_response", async () => {
609
- const { lines: clientWrites, detach } = collectLines(clientStdin);
610
-
611
- writeLine(clientStdin, {
612
- type: "extension_ui_response",
613
- id: "ui-123",
614
- value: "selected-option",
615
- });
616
- await tick();
617
-
618
- const msg = clientWrites[0] as any;
619
- assert.equal(msg.type, "extension_ui_response");
620
- assert.equal(msg.id, "ui-123");
621
- assert.equal(msg.value, "selected-option");
622
-
623
- detach();
624
- });
625
-
626
- it("v2 event filtering: subscribe with empty array should filter all", async () => {
627
- // An empty event filter means no events pass through (Set with 0 entries)
628
- const subscribeCmd = { id: "req_4", type: "subscribe", events: [] as string[] };
629
- const serialized = serializeJsonLine(subscribeCmd);
630
- const parsed = JSON.parse(serialized);
631
- assert.deepEqual(parsed.events, []);
632
- // Server-side: `eventFilter = new Set([])` — Set.has(anything) returns false
633
- const filter = new Set(parsed.events as string[]);
634
- assert.equal(filter.has("agent_end"), false);
635
- assert.equal(filter.has("execution_complete"), false);
636
- assert.equal(filter.size, 0);
637
- });
638
-
639
- it("v2 event filtering: subscribe with wildcard resets filter", async () => {
640
- // Server-side: `events.includes("*")` → `eventFilter = null`
641
- const subscribeCmd = { type: "subscribe", events: ["*"] };
642
- const parsed = JSON.parse(serializeJsonLine(subscribeCmd));
643
- const hasWildcard = (parsed.events as string[]).includes("*");
644
- assert.equal(hasWildcard, true);
645
- // When wildcard is detected, filter becomes null (all events pass)
646
- });
647
-
648
- it("multiple commands can be sent sequentially", async () => {
649
- const { lines, detach } = collectLines(clientStdin);
650
-
651
- writeLine(clientStdin, { id: "1", type: "init", protocolVersion: 2 });
652
- writeLine(clientStdin, { id: "2", type: "subscribe", events: ["agent_end"] });
653
- writeLine(clientStdin, { id: "3", type: "prompt", message: "hello" });
654
- await tick();
655
-
656
- assert.equal(lines.length, 3);
657
- assert.equal((lines[0] as any).type, "init");
658
- assert.equal((lines[1] as any).type, "subscribe");
659
- assert.equal((lines[2] as any).type, "prompt");
660
-
661
- detach();
662
- });
663
- });
664
-
665
- // ============================================================================
666
- // Negative tests — malformed inputs, error paths, boundary conditions
667
- // ============================================================================
668
-
669
- describe("Negative tests — protocol error shapes", () => {
670
- it("init with missing protocolVersion produces a type error at compile time", () => {
671
- // Runtime check: a message missing protocolVersion is malformed
672
- const malformed = { type: "init" } as any;
673
- assert.equal(malformed.protocolVersion, undefined);
674
- // Server would treat this as v1 lock since it's not a valid init
675
- });
676
-
677
- it("subscribe with non-array events is a type violation", () => {
678
- // Runtime: server expects events to be string[]
679
- const malformed = { type: "subscribe", events: "agent_end" } as any;
680
- assert.equal(typeof malformed.events, "string"); // Not an array
681
- assert.equal(Array.isArray(malformed.events), false);
682
- });
683
-
684
- it("double init error response shape", () => {
685
- // When init is sent after protocol lock, server returns error
686
- const errorResp: RpcResponse = {
687
- id: "req_dup",
688
- type: "response",
689
- command: "init",
690
- success: false,
691
- error: "Protocol version already locked. init must be the first command.",
692
- };
693
- assert.equal(errorResp.success, false);
694
- if (!errorResp.success) {
695
- assert.ok(errorResp.error.includes("already locked"));
696
- }
697
- });
698
-
699
- it("init after v1 lock error response shape", () => {
700
- // First command was get_state (v1 lock), then init arrives
701
- const errorResp: RpcResponse = {
702
- id: "req_late_init",
703
- type: "response",
704
- command: "init",
705
- success: false,
706
- error: "Protocol version already locked. init must be the first command.",
707
- };
708
- assert.equal(errorResp.success, false);
709
- if (!errorResp.success) {
710
- assert.ok(errorResp.error.includes("init must be the first command"));
711
- }
712
- });
713
-
714
- it("unknown command type produces error response", () => {
715
- const errorResp: RpcResponse = {
716
- id: "req_unknown",
717
- type: "response",
718
- command: "nonexistent",
719
- success: false,
720
- error: "Unknown command: nonexistent",
721
- };
722
- assert.equal(errorResp.success, false);
723
- if (!errorResp.success) {
724
- assert.ok(errorResp.error.includes("Unknown command"));
725
- }
726
- });
727
-
728
- it("malformed JSON parse error shape", () => {
729
- const errorResp: RpcResponse = {
730
- type: "response",
731
- command: "parse",
732
- success: false,
733
- error: "Failed to parse command: Unexpected token",
734
- };
735
- assert.equal(errorResp.command, "parse");
736
- assert.equal(errorResp.success, false);
737
- });
738
-
739
- it("shutdown works in both v1 and v2 — no version gating", () => {
740
- // shutdown returns success regardless of protocolVersion
741
- const v1Shutdown: RpcResponse = {
742
- id: "s1",
743
- type: "response",
744
- command: "shutdown",
745
- success: true,
746
- };
747
- const v2Shutdown: RpcResponse = {
748
- id: "s2",
749
- type: "response",
750
- command: "shutdown",
751
- success: true,
752
- };
753
- assert.equal(v1Shutdown.success, true);
754
- assert.equal(v2Shutdown.success, true);
755
- });
756
- });
757
-
758
- // ============================================================================
759
- // Protocol version detection logic (unit)
760
- // ============================================================================
761
-
762
- describe("Protocol version detection logic", () => {
763
- it("simulates v1 lock when first command is non-init", () => {
764
- let protocolVersion: 1 | 2 = 1;
765
- let protocolLocked = false;
766
-
767
- // Simulate first command being get_state
768
- const command = { type: "get_state" } as RpcCommand;
769
-
770
- if (!protocolLocked) {
771
- protocolLocked = true;
772
- if (command.type === "init") {
773
- protocolVersion = 2;
774
- } else {
775
- protocolVersion = 1;
776
- }
777
- }
778
-
779
- assert.equal(protocolVersion, 1);
780
- assert.equal(protocolLocked, true);
781
- });
782
-
783
- it("simulates v2 lock when first command is init", () => {
784
- let protocolVersion: 1 | 2 = 1;
785
- let protocolLocked = false;
786
-
787
- const command: RpcCommand = { type: "init", protocolVersion: 2 };
788
-
789
- if (!protocolLocked) {
790
- protocolLocked = true;
791
- if (command.type === "init") {
792
- protocolVersion = 2;
793
- } else {
794
- protocolVersion = 1;
795
- }
796
- }
797
-
798
- assert.equal(protocolVersion, 2);
799
- assert.equal(protocolLocked, true);
800
- });
801
-
802
- it("rejects re-init after v2 lock", () => {
803
- let protocolLocked = true; // already locked from first init
804
- let errorMessage: string | null = null;
805
-
806
- const command: RpcCommand = { type: "init", protocolVersion: 2 };
807
-
808
- if (protocolLocked && command.type === "init") {
809
- errorMessage = "Protocol version already locked. init must be the first command.";
810
- }
811
-
812
- assert.ok(errorMessage !== null);
813
- assert.ok(errorMessage!.includes("already locked"));
814
- });
815
-
816
- it("rejects init after v1 lock", () => {
817
- let protocolLocked = true; // already locked from first non-init command
818
- let protocolVersion: 1 | 2 = 1;
819
- let errorMessage: string | null = null;
820
-
821
- const command: RpcCommand = { type: "init", protocolVersion: 2 };
822
-
823
- if (protocolLocked && command.type === "init") {
824
- errorMessage = "Protocol version already locked. init must be the first command.";
825
- }
826
-
827
- assert.equal(protocolVersion, 1); // stays v1
828
- assert.ok(errorMessage !== null);
829
- });
830
-
831
- it("extension_ui_response bypasses protocol detection", () => {
832
- let protocolLocked = false;
833
- let protocolDetectionTriggered = false;
834
-
835
- // Simulate the handleInputLine logic
836
- const parsed = { type: "extension_ui_response", id: "ui-1", value: "ok" };
837
-
838
- if (parsed.type === "extension_ui_response") {
839
- // Bypass — do not touch protocolLocked
840
- } else {
841
- protocolDetectionTriggered = true;
842
- if (!protocolLocked) {
843
- protocolLocked = true;
844
- }
845
- }
846
-
847
- assert.equal(protocolLocked, false);
848
- assert.equal(protocolDetectionTriggered, false);
849
- });
850
- });
851
-
852
- // ============================================================================
853
- // v2 event filter logic (unit)
854
- // ============================================================================
855
-
856
- describe("v2 event filter logic", () => {
857
- /** Mimics the server-side event filter check: null means all events pass */
858
- function shouldEmit(filter: Set<string> | null, eventType: string): boolean {
859
- return !filter || filter.has(eventType);
860
- }
861
-
862
- it("null filter passes all events", () => {
863
- assert.equal(shouldEmit(null, "agent_end"), true);
864
- assert.equal(shouldEmit(null, "cost_update"), true);
865
- assert.equal(shouldEmit(null, "anything"), true);
866
- });
867
-
868
- it("filter with specific events passes matching events", () => {
869
- const filter = new Set(["agent_end", "cost_update"]);
870
-
871
- assert.equal(shouldEmit(filter, "agent_end"), true);
872
- assert.equal(shouldEmit(filter, "cost_update"), true);
873
- assert.equal(shouldEmit(filter, "execution_complete"), false);
874
- assert.equal(shouldEmit(filter, "message_start"), false);
875
- });
876
-
877
- it("empty Set filter blocks all events", () => {
878
- const filter = new Set<string>();
879
-
880
- assert.equal(shouldEmit(filter, "agent_end"), false);
881
- assert.equal(shouldEmit(filter, "cost_update"), false);
882
- assert.equal(shouldEmit(filter, "anything"), false);
883
- assert.equal(filter.size, 0);
884
- });
885
-
886
- it("wildcard subscribe resets filter to null", () => {
887
- let eventFilter: Set<string> | null = new Set(["agent_end"]);
888
-
889
- // Simulate subscribe with wildcard
890
- const events = ["*"];
891
- if (events.includes("*")) {
892
- eventFilter = null;
893
- } else {
894
- eventFilter = new Set(events);
895
- }
896
-
897
- assert.equal(eventFilter, null);
898
- });
899
-
900
- it("subscribe replaces previous filter", () => {
901
- let eventFilter: Set<string> | null = new Set(["agent_end"]);
902
-
903
- // Subscribe with different events
904
- const events = ["cost_update", "execution_complete"];
905
- if (events.includes("*")) {
906
- eventFilter = null;
907
- } else {
908
- eventFilter = new Set(events);
909
- }
910
-
911
- assert.equal(eventFilter!.has("agent_end"), false);
912
- assert.equal(eventFilter!.has("cost_update"), true);
913
- assert.equal(eventFilter!.has("execution_complete"), true);
914
- });
915
-
916
- it("filter applies to both regular and synthesized v2 events", () => {
917
- const eventFilter = new Set(["execution_complete"]);
918
-
919
- // Regular event
920
- assert.equal(eventFilter.has("agent_end"), false); // filtered out
921
- // Synthesized v2 event
922
- assert.equal(eventFilter.has("execution_complete"), true); // passes
923
- assert.equal(eventFilter.has("cost_update"), false); // filtered out
924
- });
925
- });
926
-
927
- // ============================================================================
928
- // v2 runId injection logic (unit)
929
- // ============================================================================
930
-
931
- describe("v2 runId injection", () => {
932
- it("runId is present when protocolVersion is 2 and command is prompt/steer/follow_up", () => {
933
- const protocolVersion = 2;
934
- const commands = ["prompt", "steer", "follow_up"] as const;
935
-
936
- for (const cmdType of commands) {
937
- const runId = protocolVersion === 2 ? `run-${cmdType}-uuid` : undefined;
938
- assert.ok(runId !== undefined, `runId should be generated for ${cmdType} in v2`);
939
- assert.ok(typeof runId === "string");
940
- }
941
- });
942
-
943
- it("runId is undefined when protocolVersion is 1", () => {
944
- // Test the v1 path: runId should not be generated
945
- function generateRunId(version: 1 | 2): string | undefined {
946
- return version === 2 ? "run-uuid" : undefined;
947
- }
948
- assert.equal(generateRunId(1), undefined);
949
- assert.ok(typeof generateRunId(2) === "string");
950
- });
951
-
952
- it("runId is injected into event output via spread", () => {
953
- const currentRunId = "run-abc-123";
954
- const event = { type: "message_start", message: { role: "assistant" } };
955
-
956
- // v2 injection logic from rpc-mode.ts
957
- const outputEvent = currentRunId ? { ...event, runId: currentRunId } : event;
958
-
959
- assert.equal((outputEvent as any).runId, "run-abc-123");
960
- assert.equal((outputEvent as any).type, "message_start");
961
- });
962
-
963
- it("runId is not injected when null", () => {
964
- const currentRunId: string | null = null;
965
- const event = { type: "message_start", message: { role: "assistant" } };
966
-
967
- const outputEvent = currentRunId ? { ...event, runId: currentRunId } : event;
968
-
969
- assert.equal((outputEvent as any).runId, undefined);
970
- });
971
- });