@code-yeongyu/senpi 2026.8.26 → 2026.8.28-2

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 (335) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/README.md +3 -3
  3. package/dist/cli/args.d.ts +5 -1
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +18 -1
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/core/agent-session-services.d.ts.map +1 -1
  8. package/dist/core/agent-session-services.js +2 -0
  9. package/dist/core/agent-session-services.js.map +1 -1
  10. package/dist/core/agent-session.d.ts +5 -0
  11. package/dist/core/agent-session.d.ts.map +1 -1
  12. package/dist/core/agent-session.js +11 -1
  13. package/dist/core/agent-session.js.map +1 -1
  14. package/dist/core/auth-storage.d.ts +1 -0
  15. package/dist/core/auth-storage.d.ts.map +1 -1
  16. package/dist/core/auth-storage.js +3 -0
  17. package/dist/core/auth-storage.js.map +1 -1
  18. package/dist/core/bash-executor.d.ts.map +1 -1
  19. package/dist/core/bash-executor.js +67 -29
  20. package/dist/core/bash-executor.js.map +1 -1
  21. package/dist/core/credential-accounts.d.ts +31 -0
  22. package/dist/core/credential-accounts.d.ts.map +1 -0
  23. package/dist/core/credential-accounts.js +135 -0
  24. package/dist/core/credential-accounts.js.map +1 -0
  25. package/dist/core/credential-pool/classify.d.ts +47 -0
  26. package/dist/core/credential-pool/classify.d.ts.map +1 -0
  27. package/dist/core/credential-pool/classify.js +92 -0
  28. package/dist/core/credential-pool/classify.js.map +1 -0
  29. package/dist/core/credential-pool/env-slots.d.ts +22 -0
  30. package/dist/core/credential-pool/env-slots.d.ts.map +1 -0
  31. package/dist/core/credential-pool/env-slots.js +37 -0
  32. package/dist/core/credential-pool/env-slots.js.map +1 -0
  33. package/dist/core/credential-pool/failover.d.ts +62 -0
  34. package/dist/core/credential-pool/failover.d.ts.map +1 -0
  35. package/dist/core/credential-pool/failover.js +124 -0
  36. package/dist/core/credential-pool/failover.js.map +1 -0
  37. package/dist/core/credential-pool/rotation-stream.d.ts +54 -0
  38. package/dist/core/credential-pool/rotation-stream.d.ts.map +1 -0
  39. package/dist/core/credential-pool/rotation-stream.js +183 -0
  40. package/dist/core/credential-pool/rotation-stream.js.map +1 -0
  41. package/dist/core/credential-pool/state-store.d.ts +89 -0
  42. package/dist/core/credential-pool/state-store.d.ts.map +1 -0
  43. package/dist/core/credential-pool/state-store.js +166 -0
  44. package/dist/core/credential-pool/state-store.js.map +1 -0
  45. package/dist/core/extensions/builtin/account/index.d.ts +9 -0
  46. package/dist/core/extensions/builtin/account/index.d.ts.map +1 -0
  47. package/dist/core/extensions/builtin/account/index.js +69 -0
  48. package/dist/core/extensions/builtin/account/index.js.map +1 -0
  49. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  50. package/dist/core/extensions/builtin/compaction/index.js +67 -0
  51. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  52. package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
  53. package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/compaction/log.js +1 -0
  55. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  56. package/dist/core/extensions/builtin/config-reload/index.js +14 -22
  57. package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
  58. package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts +1 -0
  59. package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts.map +1 -1
  60. package/dist/core/extensions/builtin/goal/continuation-recovery.js +2 -0
  61. package/dist/core/extensions/builtin/goal/continuation-recovery.js.map +1 -1
  62. package/dist/core/extensions/builtin/goal/continuation.d.ts +8 -1
  63. package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
  64. package/dist/core/extensions/builtin/goal/continuation.js +15 -0
  65. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  66. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js +2 -2
  67. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.js.map +1 -1
  68. package/dist/core/extensions/builtin/goal/format.d.ts +6 -1
  69. package/dist/core/extensions/builtin/goal/format.d.ts.map +1 -1
  70. package/dist/core/extensions/builtin/goal/format.js +6 -0
  71. package/dist/core/extensions/builtin/goal/format.js.map +1 -1
  72. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  73. package/dist/core/extensions/builtin/goal/index.js +7 -0
  74. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  75. package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
  76. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +5 -2
  77. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
  78. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  79. package/dist/core/extensions/builtin/goal/monitor-continuation.js +31 -7
  80. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  81. package/dist/core/extensions/builtin/goal/persistence.js +2 -0
  82. package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
  83. package/dist/core/extensions/builtin/goal/renderers.d.ts +14 -0
  84. package/dist/core/extensions/builtin/goal/renderers.d.ts.map +1 -0
  85. package/dist/core/extensions/builtin/goal/renderers.js +153 -0
  86. package/dist/core/extensions/builtin/goal/renderers.js.map +1 -0
  87. package/dist/core/extensions/builtin/goal/store.d.ts +6 -2
  88. package/dist/core/extensions/builtin/goal/store.d.ts.map +1 -1
  89. package/dist/core/extensions/builtin/goal/store.js +8 -2
  90. package/dist/core/extensions/builtin/goal/store.js.map +1 -1
  91. package/dist/core/extensions/builtin/goal/tool-registration.d.ts.map +1 -1
  92. package/dist/core/extensions/builtin/goal/tool-registration.js +16 -6
  93. package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
  94. package/dist/core/extensions/builtin/goal/types.d.ts +1 -0
  95. package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -1
  96. package/dist/core/extensions/builtin/goal/types.js.map +1 -1
  97. package/dist/core/extensions/builtin/imagegen/index.d.ts.map +1 -1
  98. package/dist/core/extensions/builtin/imagegen/index.js +10 -3
  99. package/dist/core/extensions/builtin/imagegen/index.js.map +1 -1
  100. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  101. package/dist/core/extensions/builtin/index.js +4 -0
  102. package/dist/core/extensions/builtin/index.js.map +1 -1
  103. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  104. package/dist/core/extensions/builtin/service-tier.js +13 -0
  105. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  106. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  107. package/dist/core/extensions/builtin/terminal/extension.js +4 -2
  108. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  109. package/dist/core/extensions/builtin/todotools/index.js +1 -1
  110. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  111. package/dist/core/extensions/builtin/todotools/native-todo-mirror.d.ts +1 -1
  112. package/dist/core/extensions/builtin/todotools/native-todo-mirror.d.ts.map +1 -1
  113. package/dist/core/extensions/builtin/todotools/native-todo-mirror.js +1 -1
  114. package/dist/core/extensions/builtin/todotools/native-todo-mirror.js.map +1 -1
  115. package/dist/core/hidden-stdout-log.d.ts +10 -0
  116. package/dist/core/hidden-stdout-log.d.ts.map +1 -1
  117. package/dist/core/hidden-stdout-log.js +36 -5
  118. package/dist/core/hidden-stdout-log.js.map +1 -1
  119. package/dist/core/model-config-schema.d.ts +85 -12
  120. package/dist/core/model-config-schema.d.ts.map +1 -1
  121. package/dist/core/model-config-schema.js +25 -0
  122. package/dist/core/model-config-schema.js.map +1 -1
  123. package/dist/core/model-runtime.d.ts +36 -1
  124. package/dist/core/model-runtime.d.ts.map +1 -1
  125. package/dist/core/model-runtime.js +142 -12
  126. package/dist/core/model-runtime.js.map +1 -1
  127. package/dist/core/retry-fallback/chains.d.ts +23 -1
  128. package/dist/core/retry-fallback/chains.d.ts.map +1 -1
  129. package/dist/core/retry-fallback/chains.js +59 -3
  130. package/dist/core/retry-fallback/chains.js.map +1 -1
  131. package/dist/core/retry-fallback/controller.d.ts.map +1 -1
  132. package/dist/core/retry-fallback/controller.js +9 -2
  133. package/dist/core/retry-fallback/controller.js.map +1 -1
  134. package/dist/core/retry-fallback/settings.d.ts.map +1 -1
  135. package/dist/core/retry-fallback/settings.js +9 -0
  136. package/dist/core/retry-fallback/settings.js.map +1 -1
  137. package/dist/core/retry-fallback/validate.js +1 -1
  138. package/dist/core/retry-fallback/validate.js.map +1 -1
  139. package/dist/core/sdk.js +1 -1
  140. package/dist/core/sdk.js.map +1 -1
  141. package/dist/core/session-manager.d.ts +9 -0
  142. package/dist/core/session-manager.d.ts.map +1 -1
  143. package/dist/core/session-manager.js +31 -0
  144. package/dist/core/session-manager.js.map +1 -1
  145. package/dist/core/tools/output-accumulator.d.ts +2 -0
  146. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  147. package/dist/core/tools/output-accumulator.js +32 -7
  148. package/dist/core/tools/output-accumulator.js.map +1 -1
  149. package/dist/index.d.ts +1 -1
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +1 -1
  152. package/dist/index.js.map +1 -1
  153. package/dist/main.d.ts +7 -0
  154. package/dist/main.d.ts.map +1 -1
  155. package/dist/main.js +48 -4
  156. package/dist/main.js.map +1 -1
  157. package/dist/modes/app-server/server/account.d.ts.map +1 -1
  158. package/dist/modes/app-server/server/account.js +5 -5
  159. package/dist/modes/app-server/server/account.js.map +1 -1
  160. package/dist/modes/index.d.ts +1 -0
  161. package/dist/modes/index.d.ts.map +1 -1
  162. package/dist/modes/index.js +1 -0
  163. package/dist/modes/index.js.map +1 -1
  164. package/dist/modes/interactive/components/footer.d.ts +11 -3
  165. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  166. package/dist/modes/interactive/components/footer.js +31 -1
  167. package/dist/modes/interactive/components/footer.js.map +1 -1
  168. package/dist/modes/interactive/components/tool-execution-fallback.d.ts.map +1 -1
  169. package/dist/modes/interactive/components/tool-execution-fallback.js +82 -1
  170. package/dist/modes/interactive/components/tool-execution-fallback.js.map +1 -1
  171. package/dist/modes/interactive/grok/chrome.d.ts +4 -4
  172. package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
  173. package/dist/modes/interactive/grok/chrome.js.map +1 -1
  174. package/dist/modes/interactive/grok/footer.d.ts +3 -3
  175. package/dist/modes/interactive/grok/footer.d.ts.map +1 -1
  176. package/dist/modes/interactive/grok/footer.js.map +1 -1
  177. package/dist/modes/interactive/interactive-host-runtime.d.ts +44 -0
  178. package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -0
  179. package/dist/modes/interactive/interactive-host-runtime.js +529 -0
  180. package/dist/modes/interactive/interactive-host-runtime.js.map +1 -0
  181. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  182. package/dist/modes/interactive/interactive-mode.js +340 -257
  183. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  184. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  185. package/dist/modes/rpc/connection-handler.js +151 -30
  186. package/dist/modes/rpc/connection-handler.js.map +1 -1
  187. package/dist/modes/rpc/host-ensure.d.ts +41 -0
  188. package/dist/modes/rpc/host-ensure.d.ts.map +1 -0
  189. package/dist/modes/rpc/host-ensure.js +245 -0
  190. package/dist/modes/rpc/host-ensure.js.map +1 -0
  191. package/dist/modes/rpc/host-lifecycle.d.ts +57 -0
  192. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -0
  193. package/dist/modes/rpc/host-lifecycle.js +491 -0
  194. package/dist/modes/rpc/host-lifecycle.js.map +1 -0
  195. package/dist/modes/rpc/host-watchdog.d.ts +33 -0
  196. package/dist/modes/rpc/host-watchdog.d.ts.map +1 -0
  197. package/dist/modes/rpc/host-watchdog.js +142 -0
  198. package/dist/modes/rpc/host-watchdog.js.map +1 -0
  199. package/dist/modes/rpc/multi-session-host.d.ts +7 -1
  200. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
  201. package/dist/modes/rpc/multi-session-host.js +216 -32
  202. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  203. package/dist/modes/rpc/rpc-client.d.ts +115 -8
  204. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  205. package/dist/modes/rpc/rpc-client.js +200 -32
  206. package/dist/modes/rpc/rpc-client.js.map +1 -1
  207. package/dist/modes/rpc/rpc-mode.d.ts +4 -2
  208. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  209. package/dist/modes/rpc/rpc-mode.js +4 -2
  210. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  211. package/dist/modes/rpc/rpc-types.d.ts +166 -3
  212. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  213. package/dist/modes/rpc/rpc-types.js.map +1 -1
  214. package/dist/modes/rpc/session-command-router.d.ts +22 -0
  215. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  216. package/dist/modes/rpc/session-command-router.js +165 -16
  217. package/dist/modes/rpc/session-command-router.js.map +1 -1
  218. package/dist/modes/rpc/session-event-writer.d.ts +15 -2
  219. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
  220. package/dist/modes/rpc/session-event-writer.js +69 -25
  221. package/dist/modes/rpc/session-event-writer.js.map +1 -1
  222. package/dist/modes/rpc/session-registry.d.ts +16 -0
  223. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  224. package/dist/modes/rpc/session-registry.js +40 -3
  225. package/dist/modes/rpc/session-registry.js.map +1 -1
  226. package/docs/providers.md +48 -0
  227. package/docs/rpc.md +96 -5
  228. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +56 -0
  229. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  230. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +13 -1
  231. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/inline-worker.ts +15 -1
  232. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-indirect-eval.js +711 -1
  233. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +14 -1
  234. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +10 -10
  235. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-eval-result.ts +9 -3
  236. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +6 -1
  237. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts.map +1 -1
  238. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +20 -4
  239. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js.map +1 -1
  240. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts +1 -1
  241. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.d.ts.map +1 -1
  242. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js.map +1 -1
  243. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/post-mutate.d.ts +21 -0
  244. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/post-mutate.d.ts.map +1 -0
  245. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/post-mutate.js +27 -0
  246. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/post-mutate.js.map +1 -0
  247. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts +24 -0
  248. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.d.ts.map +1 -1
  249. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js.map +1 -1
  250. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts.map +1 -1
  251. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +7 -2
  252. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js.map +1 -1
  253. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  254. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-pairs.d.ts +1 -1
  255. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-pairs.d.ts.map +1 -1
  256. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-pairs.js +46 -14
  257. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-pairs.js.map +1 -1
  258. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +11 -0
  259. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
  260. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +30 -16
  261. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  262. package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.d.ts +2 -1
  263. package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.d.ts.map +1 -1
  264. package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.js +2 -1
  265. package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.js.map +1 -1
  266. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/classify.d.ts +16 -0
  267. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/classify.d.ts.map +1 -0
  268. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/classify.js +75 -0
  269. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/classify.js.map +1 -0
  270. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.d.ts +45 -0
  271. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.d.ts.map +1 -0
  272. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.js +81 -0
  273. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.js.map +1 -0
  274. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.d.ts +31 -0
  275. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.d.ts.map +1 -0
  276. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.js +65 -0
  277. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.js.map +1 -0
  278. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts +12 -0
  279. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts.map +1 -1
  280. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js +37 -0
  281. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js.map +1 -1
  282. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts +6 -0
  283. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
  284. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +32 -6
  285. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
  286. package/node_modules/@earendil-works/pi-ai/dist/auth/types.d.ts +3 -2
  287. package/node_modules/@earendil-works/pi-ai/dist/auth/types.d.ts.map +1 -1
  288. package/node_modules/@earendil-works/pi-ai/dist/auth/types.js.map +1 -1
  289. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts +6 -0
  290. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  291. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +6 -1
  292. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  293. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +75 -0
  294. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  295. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +75 -0
  296. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  297. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  298. package/node_modules/@earendil-works/pi-ai/dist/providers/data/alibaba-token-plan.json +1 -1
  299. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  300. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  301. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  302. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  303. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  304. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  305. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  306. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
  307. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
  308. package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
  309. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  310. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  311. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  312. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  313. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  314. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
  315. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  316. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
  317. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
  318. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  319. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  320. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  321. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  322. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  323. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +4 -0
  324. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  325. package/node_modules/@earendil-works/pi-ai/package.json +5 -5
  326. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  327. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  328. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +5 -0
  329. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  330. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +90 -1
  331. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  332. package/node_modules/@earendil-works/pi-tui/dist/tui.js +1 -1
  333. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  334. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  335. package/package.json +7 -7
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import type { AgentMessage, ThinkingLevel } from "@earendil-works/pi-agent-core";
7
7
  import type { ImageContent } from "@earendil-works/pi-ai";
8
- import type { SessionStats } from "../../core/agent-session.ts";
8
+ import type { PromptDisposition, SessionStats } from "../../core/agent-session.ts";
9
9
  import type { BashResult } from "../../core/bash-executor.ts";
10
10
  import type { CompactionResult } from "../../core/compaction/index.ts";
11
11
  import type { ServiceTier } from "../../core/extensions/builtin/service-tier.ts";
@@ -13,6 +13,8 @@ import type { SessionEntry, SessionTreeNode } from "../../core/session-manager.t
13
13
  import type { JsonAgentSessionEvent } from "../json-event.ts";
14
14
  import type { RpcAccountFailoverEvent, RpcAuthAccountsChangedEvent, RpcExtensionEvent, RpcProviderAccount, RpcSessionState, RpcSlashCommand } from "./rpc-types.ts";
15
15
  export interface RpcClientOptions {
16
+ /** Connect to an existing multi-session Unix socket instead of spawning a child. */
17
+ socketPath?: string;
16
18
  /** Path to the CLI entry point (default: searches for dist/cli.js) */
17
19
  cliPath?: string;
18
20
  /** Working directory for the agent */
@@ -33,15 +35,29 @@ export interface ModelInfo {
33
35
  reasoning: boolean;
34
36
  supportedThinkingLevels?: ThinkingLevel[];
35
37
  }
38
+ type PromptOptions = {
39
+ images?: ImageContent[];
40
+ streamingBehavior?: "steer" | "followUp";
41
+ thinkingLevel?: ThinkingLevel;
42
+ promptDisposition?: (disposition: PromptDisposition) => void;
43
+ preflightResult?: (success: boolean) => void;
44
+ expandPromptTemplates?: boolean;
45
+ };
36
46
  export type RpcProviderAccountEvent = RpcAuthAccountsChangedEvent | RpcAccountFailoverEvent;
37
- export type RpcClientEvent = JsonAgentSessionEvent | RpcProviderAccountEvent | RpcExtensionEvent;
47
+ export type RpcClientEvent = JsonAgentSessionEvent | RpcProviderAccountEvent | RpcExtensionEvent | {
48
+ type: "bash_start";
49
+ } | {
50
+ type: "bash_end";
51
+ };
38
52
  export type RpcEventListener = (event: RpcClientEvent) => void;
39
53
  export declare class RpcClient {
40
54
  private process;
55
+ private socket;
41
56
  private stopReadingStdout;
42
57
  private eventListeners;
43
58
  private pendingRequests;
44
59
  private requestId;
60
+ private sessionId;
45
61
  private stderr;
46
62
  private exitError;
47
63
  private options;
@@ -54,6 +70,7 @@ export declare class RpcClient {
54
70
  * Stop the RPC agent process.
55
71
  */
56
72
  stop(): Promise<void>;
73
+ private startSocket;
57
74
  /**
58
75
  * Subscribe to agent events.
59
76
  */
@@ -62,31 +79,95 @@ export declare class RpcClient {
62
79
  * Get collected stderr output (useful for debugging).
63
80
  */
64
81
  getStderr(): string;
82
+ openSession(options: {
83
+ sessionPath?: string;
84
+ cwd?: string;
85
+ provider?: string;
86
+ modelId?: string;
87
+ thinkingLevel?: ThinkingLevel;
88
+ permissionPreset?: string;
89
+ }): Promise<{
90
+ sessionId: string;
91
+ state: RpcSessionState;
92
+ attached?: boolean;
93
+ }>;
94
+ closeSession(sessionId?: string | undefined): Promise<void>;
95
+ listSessions(): Promise<Array<{
96
+ sessionId: string;
97
+ durableSessionId?: string;
98
+ sessionPath?: string;
99
+ cwd: string;
100
+ name?: string;
101
+ status: "opening" | "open" | "closing" | "closed";
102
+ }>>;
65
103
  /**
66
104
  * Send a prompt to the agent.
67
105
  * Returns immediately after sending; use onEvent() to receive streaming events.
68
106
  * Use waitForIdle() to wait for completion.
107
+ *
108
+ * The disposition/preflight callbacks mirror AgentSession's local prompt contract:
109
+ * they fire synchronously while the response frame is dispatched — before any
110
+ * queued message_start event — so optimistic-echo eligibility is settled in wire
111
+ * order. A success response without a disposition (older host) maps to "handled"
112
+ * so the echo degrades to canonical-only rendering instead of double-rendering.
69
113
  */
70
114
  prompt(message: string, images?: ImageContent[]): Promise<void>;
115
+ prompt(message: string, options?: PromptOptions): Promise<void>;
116
+ appendUserMessage(content: unknown): Promise<void>;
117
+ appendSessionEntry(entry: import("../../core/session-manager.ts").SessionEntry): Promise<void>;
118
+ sendCustomMessage<T = unknown>(message: {
119
+ customType: string;
120
+ content: unknown;
121
+ display: boolean;
122
+ details?: T;
123
+ }, options?: {
124
+ triggerTurn?: boolean;
125
+ deliverAs?: "steer" | "followUp" | "nextTurn";
126
+ }): Promise<void>;
71
127
  /**
72
128
  * Queue a steering message to interrupt the agent mid-run.
73
129
  */
74
- steer(message: string, images?: ImageContent[]): Promise<void>;
130
+ steer(message: string, images?: ImageContent[], recovery?: {
131
+ enqueueOrder?: number;
132
+ }): Promise<void>;
75
133
  /**
76
134
  * Queue a follow-up message to be processed after the agent finishes.
77
135
  */
78
- followUp(message: string, images?: ImageContent[]): Promise<void>;
136
+ followUp(message: string, images?: ImageContent[], recovery?: {
137
+ enqueueOrder?: number;
138
+ }): Promise<void>;
79
139
  /**
80
140
  * Abort current operation.
81
141
  */
82
142
  abort(): Promise<void>;
143
+ abortCompaction(): Promise<void>;
144
+ reload(): Promise<{
145
+ cancelled: boolean;
146
+ reason?: string;
147
+ }>;
148
+ checkReloadVeto(): Promise<{
149
+ cancelled: boolean;
150
+ reason?: string;
151
+ }>;
83
152
  /**
84
153
  * Clear queued steering and follow-up messages, returning their text.
85
154
  */
86
- clearQueue(): Promise<{
155
+ clearQueue(options?: {
156
+ abortWillFollow?: boolean;
157
+ }): Promise<{
87
158
  steering: string[];
88
159
  followUp: string[];
160
+ ordered: Array<{
161
+ text: string;
162
+ mode: "steer" | "followUp";
163
+ enqueueOrder: number;
164
+ }>;
89
165
  }>;
166
+ getSteeringMessages(): Promise<string[]>;
167
+ getFollowUpMessages(): Promise<string[]>;
168
+ abortBranchSummary(): Promise<void>;
169
+ recordBashResult(command: string, result: BashResult, excludeFromContext?: boolean): Promise<void>;
170
+ setLabel(entryId: string, label?: string): Promise<void>;
90
171
  /**
91
172
  * Start a new session, optionally with parent tracking.
92
173
  * @param parentSession - Optional parent session path for lineage tracking
@@ -105,6 +186,7 @@ export declare class RpcClient {
105
186
  setModel(provider: string, modelId: string): Promise<{
106
187
  provider: string;
107
188
  id: string;
189
+ systemPromptName?: string;
108
190
  }>;
109
191
  /**
110
192
  * Cycle to next model.
@@ -186,7 +268,21 @@ export declare class RpcClient {
186
268
  /**
187
269
  * Execute a bash command.
188
270
  */
189
- bash(command: string): Promise<BashResult>;
271
+ bash(command: string, options?: {
272
+ excludeFromContext?: boolean;
273
+ operations?: Record<string, unknown>;
274
+ }): Promise<BashResult>;
275
+ navigateTree(targetId: string, options?: {
276
+ summarize?: boolean;
277
+ customInstructions?: string;
278
+ replaceInstructions?: boolean;
279
+ label?: string;
280
+ }): Promise<{
281
+ cancelled: boolean;
282
+ editorText?: string;
283
+ aborted?: boolean;
284
+ summaryEntry?: unknown;
285
+ }>;
190
286
  /**
191
287
  * Abort running bash command.
192
288
  */
@@ -201,18 +297,25 @@ export declare class RpcClient {
201
297
  exportHtml(outputPath?: string): Promise<{
202
298
  path: string;
203
299
  }>;
300
+ exportJsonl(outputPath?: string): Promise<{
301
+ path: string;
302
+ }>;
204
303
  /**
205
304
  * Switch to a different session file.
206
305
  * @returns Object with `cancelled: true` if an extension cancelled the switch
207
306
  */
208
- switchSession(sessionPath: string): Promise<{
307
+ switchSession(sessionPath: string, options?: {
308
+ cwdOverride?: string;
309
+ }): Promise<{
209
310
  cancelled: boolean;
210
311
  }>;
211
312
  /**
212
313
  * Fork from a specific message.
213
314
  * @returns Object with `text` (the message text) and `cancelled` (if extension cancelled)
214
315
  */
215
- fork(entryId: string): Promise<{
316
+ fork(entryId: string, options?: {
317
+ position?: "before" | "at";
318
+ }): Promise<{
216
319
  text: string;
217
320
  cancelled: boolean;
218
321
  }>;
@@ -252,6 +355,9 @@ export declare class RpcClient {
252
355
  * Set the session display name.
253
356
  */
254
357
  setSessionName(name: string): Promise<void>;
358
+ importJsonl(inputPath: string, cwdOverride?: string): Promise<{
359
+ cancelled: boolean;
360
+ }>;
255
361
  /**
256
362
  * Get all messages in the session.
257
363
  */
@@ -287,4 +393,5 @@ export declare class RpcClient {
287
393
  private send;
288
394
  private getData;
289
395
  }
396
+ export {};
290
397
  //# sourceMappingURL=rpc-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@
4
4
  * Spawns the agent in RPC mode and provides a typed API for all operations.
5
5
  */
6
6
  import { spawn } from "node:child_process";
7
+ import { createConnection } from "node:net";
8
+ import { MissingSessionCwdError } from "../../core/session-cwd.js";
7
9
  import { attachJsonlLineReader, serializeJsonLine } from "./jsonl.js";
8
10
  function isProviderAccountEvent(event) {
9
11
  return event.type === "auth_accounts_changed" || event.type === "account_failover";
@@ -14,6 +16,7 @@ function isProviderAccountEvent(event) {
14
16
  export class RpcClient {
15
17
  constructor(options = {}) {
16
18
  this.process = null;
19
+ this.socket = null;
17
20
  this.stopReadingStdout = null;
18
21
  this.eventListeners = [];
19
22
  this.pendingRequests = new Map();
@@ -26,10 +29,14 @@ export class RpcClient {
26
29
  * Start the RPC agent process.
27
30
  */
28
31
  async start() {
29
- if (this.process) {
32
+ if (this.process || this.socket) {
30
33
  throw new Error("Client already started");
31
34
  }
32
35
  this.exitError = null;
36
+ if (this.options.socketPath) {
37
+ await this.startSocket(this.options.socketPath);
38
+ return;
39
+ }
33
40
  const cliPath = this.options.cliPath ?? "dist/cli.js";
34
41
  const args = ["--mode", "rpc"];
35
42
  if (this.options.provider) {
@@ -89,6 +96,15 @@ export class RpcClient {
89
96
  * Stop the RPC agent process.
90
97
  */
91
98
  async stop() {
99
+ if (this.socket) {
100
+ this.stopReadingStdout?.();
101
+ this.stopReadingStdout = null;
102
+ this.socket.destroy();
103
+ this.socket = null;
104
+ this.sessionId = undefined;
105
+ this.rejectPendingRequests(new Error("RPC socket client stopped"));
106
+ return;
107
+ }
92
108
  if (!this.process)
93
109
  return;
94
110
  this.stopReadingStdout?.();
@@ -108,6 +124,40 @@ export class RpcClient {
108
124
  this.process = null;
109
125
  this.pendingRequests.clear();
110
126
  }
127
+ async startSocket(path) {
128
+ const socket = createConnection(path);
129
+ this.socket = socket;
130
+ await new Promise((resolve, reject) => {
131
+ const onConnect = () => {
132
+ cleanup();
133
+ resolve();
134
+ };
135
+ const onError = (error) => {
136
+ cleanup();
137
+ this.socket = null;
138
+ reject(error);
139
+ };
140
+ const cleanup = () => {
141
+ socket.off("connect", onConnect);
142
+ socket.off("error", onError);
143
+ };
144
+ socket.once("connect", onConnect);
145
+ socket.once("error", onError);
146
+ });
147
+ this.stopReadingStdout = attachJsonlLineReader(socket, (line) => this.handleLine(line));
148
+ socket.once("close", () => {
149
+ if (this.socket !== socket)
150
+ return;
151
+ this.socket = null;
152
+ this.rejectPendingRequests(new Error("RPC socket closed"));
153
+ });
154
+ socket.once("error", (error) => {
155
+ if (this.socket !== socket)
156
+ return;
157
+ this.exitError = error;
158
+ this.rejectPendingRequests(error);
159
+ });
160
+ }
111
161
  /**
112
162
  * Subscribe to agent events.
113
163
  */
@@ -129,25 +179,74 @@ export class RpcClient {
129
179
  // =========================================================================
130
180
  // Command Methods
131
181
  // =========================================================================
132
- /**
133
- * Send a prompt to the agent.
134
- * Returns immediately after sending; use onEvent() to receive streaming events.
135
- * Use waitForIdle() to wait for completion.
136
- */
137
- async prompt(message, images) {
138
- await this.send({ type: "prompt", message, images });
182
+ async openSession(options) {
183
+ const response = await this.send({ type: "open_session", ...options }, false);
184
+ const opened = this.getData(response);
185
+ this.sessionId = opened.sessionId;
186
+ return opened;
187
+ }
188
+ async closeSession(sessionId = this.sessionId) {
189
+ if (!sessionId)
190
+ return;
191
+ await this.send({ type: "close_session", sessionId }, false);
192
+ if (this.sessionId === sessionId)
193
+ this.sessionId = undefined;
194
+ }
195
+ async listSessions() {
196
+ const response = await this.send({ type: "list_sessions" }, false);
197
+ return this.getData(response).sessions;
198
+ }
199
+ async prompt(message, optionsOrImages) {
200
+ const options = Array.isArray(optionsOrImages)
201
+ ? { images: optionsOrImages }
202
+ : (optionsOrImages ?? {});
203
+ const response = await this.send({
204
+ type: "prompt",
205
+ message,
206
+ ...(options.images ? { images: options.images } : {}),
207
+ ...(options.streamingBehavior ? { streamingBehavior: options.streamingBehavior } : {}),
208
+ ...(options.thinkingLevel ? { thinkingLevel: options.thinkingLevel } : {}),
209
+ ...(options.expandPromptTemplates !== undefined
210
+ ? { expandPromptTemplates: options.expandPromptTemplates }
211
+ : {}),
212
+ }, true, {
213
+ onResponse: (wireResponse) => {
214
+ if (!wireResponse.success) {
215
+ options?.preflightResult?.(false);
216
+ return;
217
+ }
218
+ const data = wireResponse.data;
219
+ options?.promptDisposition?.(data?.disposition ?? "handled");
220
+ options?.preflightResult?.(true);
221
+ },
222
+ onReject: () => {
223
+ options?.preflightResult?.(false);
224
+ },
225
+ });
226
+ if (!response.success) {
227
+ throw new Error(response.error);
228
+ }
229
+ }
230
+ async appendUserMessage(content) {
231
+ await this.send({ type: "append_user_message", content });
232
+ }
233
+ async appendSessionEntry(entry) {
234
+ await this.send({ type: "append_session_entry", entry });
235
+ }
236
+ async sendCustomMessage(message, options) {
237
+ await this.send({ type: "send_custom_message", ...message, ...options });
139
238
  }
140
239
  /**
141
240
  * Queue a steering message to interrupt the agent mid-run.
142
241
  */
143
- async steer(message, images) {
144
- await this.send({ type: "steer", message, images });
242
+ async steer(message, images, recovery) {
243
+ await this.send({ type: "steer", message, images, enqueueOrder: recovery?.enqueueOrder });
145
244
  }
146
245
  /**
147
246
  * Queue a follow-up message to be processed after the agent finishes.
148
247
  */
149
- async followUp(message, images) {
150
- await this.send({ type: "follow_up", message, images });
248
+ async followUp(message, images, recovery) {
249
+ await this.send({ type: "follow_up", message, images, enqueueOrder: recovery?.enqueueOrder });
151
250
  }
152
251
  /**
153
252
  * Abort current operation.
@@ -155,13 +254,41 @@ export class RpcClient {
155
254
  async abort() {
156
255
  await this.send({ type: "abort" });
157
256
  }
257
+ async abortCompaction() {
258
+ await this.send({ type: "abort_compaction" });
259
+ }
260
+ async reload() {
261
+ const response = await this.send({ type: "reload" });
262
+ return this.getData(response);
263
+ }
264
+ async checkReloadVeto() {
265
+ const response = await this.send({ type: "check_reload_veto" });
266
+ return this.getData(response);
267
+ }
158
268
  /**
159
269
  * Clear queued steering and follow-up messages, returning their text.
160
270
  */
161
- async clearQueue() {
162
- const response = await this.send({ type: "clear_queue" });
271
+ async clearQueue(options) {
272
+ const response = await this.send({ type: "clear_queue", abortWillFollow: options?.abortWillFollow });
163
273
  return this.getData(response);
164
274
  }
275
+ async getSteeringMessages() {
276
+ const response = await this.send({ type: "get_steering_messages" });
277
+ return this.getData(response).messages;
278
+ }
279
+ async getFollowUpMessages() {
280
+ const response = await this.send({ type: "get_follow_up_messages" });
281
+ return this.getData(response).messages;
282
+ }
283
+ async abortBranchSummary() {
284
+ await this.send({ type: "abort_branch_summary" });
285
+ }
286
+ async recordBashResult(command, result, excludeFromContext) {
287
+ await this.send({ type: "record_bash_result", command, result, excludeFromContext });
288
+ }
289
+ async setLabel(entryId, label) {
290
+ await this.send({ type: "set_label", entryId, label });
291
+ }
165
292
  /**
166
293
  * Start a new session, optionally with parent tracking.
167
294
  * @param parentSession - Optional parent session path for lineage tracking
@@ -282,8 +409,17 @@ export class RpcClient {
282
409
  /**
283
410
  * Execute a bash command.
284
411
  */
285
- async bash(command) {
286
- const response = await this.send({ type: "bash", command });
412
+ async bash(command, options) {
413
+ const response = await this.send({
414
+ type: "bash",
415
+ command,
416
+ excludeFromContext: options?.excludeFromContext,
417
+ operations: options?.operations,
418
+ });
419
+ return this.getData(response);
420
+ }
421
+ async navigateTree(targetId, options) {
422
+ const response = await this.send({ type: "navigate_tree", targetId, ...options });
287
423
  return this.getData(response);
288
424
  }
289
425
  /**
@@ -306,20 +442,24 @@ export class RpcClient {
306
442
  const response = await this.send({ type: "export_html", outputPath });
307
443
  return this.getData(response);
308
444
  }
445
+ async exportJsonl(outputPath) {
446
+ const response = await this.send({ type: "export_jsonl", outputPath });
447
+ return this.getData(response);
448
+ }
309
449
  /**
310
450
  * Switch to a different session file.
311
451
  * @returns Object with `cancelled: true` if an extension cancelled the switch
312
452
  */
313
- async switchSession(sessionPath) {
314
- const response = await this.send({ type: "switch_session", sessionPath });
453
+ async switchSession(sessionPath, options) {
454
+ const response = await this.send({ type: "switch_session", sessionPath, cwdOverride: options?.cwdOverride });
315
455
  return this.getData(response);
316
456
  }
317
457
  /**
318
458
  * Fork from a specific message.
319
459
  * @returns Object with `text` (the message text) and `cancelled` (if extension cancelled)
320
460
  */
321
- async fork(entryId) {
322
- const response = await this.send({ type: "fork", entryId });
461
+ async fork(entryId, options) {
462
+ const response = await this.send({ type: "fork", entryId, position: options?.position });
323
463
  return this.getData(response);
324
464
  }
325
465
  /**
@@ -364,6 +504,10 @@ export class RpcClient {
364
504
  async setSessionName(name) {
365
505
  await this.send({ type: "set_session_name", name });
366
506
  }
507
+ async importJsonl(inputPath, cwdOverride) {
508
+ const response = await this.send({ type: "import_jsonl", inputPath, cwdOverride });
509
+ return this.getData(response);
510
+ }
367
511
  /**
368
512
  * Get all messages in the session.
369
513
  */
@@ -433,7 +577,10 @@ export class RpcClient {
433
577
  reject(new Error(`Timeout collecting events. Stderr: ${this.stderr}`));
434
578
  }, timeout);
435
579
  const unsubscribe = this.onEvent((event) => {
436
- if (isProviderAccountEvent(event) || event.type === "extension_event")
580
+ if (isProviderAccountEvent(event) ||
581
+ event.type === "extension_event" ||
582
+ event.type === "bash_start" ||
583
+ event.type === "bash_end")
437
584
  return;
438
585
  events.push(event);
439
586
  if (event.type === "agent_settled") {
@@ -449,7 +596,7 @@ export class RpcClient {
449
596
  */
450
597
  async promptAndWait(message, images, timeout = 60000) {
451
598
  const eventsPromise = this.collectEvents(timeout);
452
- await this.prompt(message, images);
599
+ await this.prompt(message, images ? { images } : undefined);
453
600
  return eventsPromise;
454
601
  }
455
602
  // =========================================================================
@@ -462,10 +609,17 @@ export class RpcClient {
462
609
  if (data.type === "response" && data.id && this.pendingRequests.has(data.id)) {
463
610
  const pending = this.pendingRequests.get(data.id);
464
611
  this.pendingRequests.delete(data.id);
612
+ // Response hooks run synchronously inside the frame dispatch so ordering-sensitive
613
+ // contracts (e.g. optimistic-echo disposition) settle before the NEXT frame —
614
+ // never through the microtask scheduled by resolve().
615
+ pending.onResponse?.(data);
465
616
  pending.resolve(data);
466
617
  return;
467
618
  }
468
- // Otherwise it's an event
619
+ // Otherwise it's an event. Multi-session hosts broadcast all session
620
+ // events to every connection; a routed client exposes only its lease.
621
+ if (data.sessionId !== undefined && this.sessionId !== undefined && data.sessionId !== this.sessionId)
622
+ return;
469
623
  for (const listener of this.eventListeners) {
470
624
  listener(data);
471
625
  }
@@ -479,35 +633,43 @@ export class RpcClient {
479
633
  }
480
634
  rejectPendingRequests(error) {
481
635
  for (const pending of this.pendingRequests.values()) {
636
+ pending.onReject?.(error);
482
637
  pending.reject(error);
483
638
  }
484
639
  this.pendingRequests.clear();
485
640
  }
486
- async send(command) {
641
+ async send(command, route = true, hooks) {
487
642
  const childProcess = this.process;
488
- const stdin = childProcess?.stdin;
489
- if (!childProcess || !stdin) {
643
+ const stream = this.socket ?? childProcess?.stdin;
644
+ if (!stream) {
490
645
  throw new Error("Client not started");
491
646
  }
492
647
  if (this.exitError) {
493
648
  throw this.exitError;
494
649
  }
495
- if (childProcess.exitCode !== null) {
650
+ if (childProcess?.exitCode !== null && childProcess?.exitCode !== undefined) {
496
651
  const error = this.createProcessExitError(childProcess.exitCode, childProcess.signalCode);
497
652
  this.exitError = error;
498
653
  throw error;
499
654
  }
500
- if (stdin.destroyed || !stdin.writable) {
501
- const error = new Error(`Agent process stdin is not writable. Stderr: ${this.stderr}`);
655
+ if (stream.destroyed || !stream.writable) {
656
+ const error = new Error(`RPC transport is not writable. Stderr: ${this.stderr}`);
502
657
  this.exitError = error;
503
658
  throw error;
504
659
  }
505
660
  const id = `req_${++this.requestId}`;
506
- const fullCommand = { ...command, id };
661
+ const fullCommand = {
662
+ ...command,
663
+ ...(route && this.sessionId && !("sessionId" in command) ? { sessionId: this.sessionId } : {}),
664
+ id,
665
+ };
507
666
  return new Promise((resolve, reject) => {
508
667
  const timeout = setTimeout(() => {
668
+ const pending = this.pendingRequests.get(id);
509
669
  this.pendingRequests.delete(id);
510
- reject(new Error(`Timeout waiting for response to ${command.type}. Stderr: ${this.stderr}`));
670
+ const timeoutError = new Error(`Timeout waiting for response to ${command.type}. Stderr: ${this.stderr}`);
671
+ pending?.onReject?.(timeoutError);
672
+ reject(timeoutError);
511
673
  }, 30000);
512
674
  this.pendingRequests.set(id, {
513
675
  resolve: (response) => {
@@ -518,14 +680,17 @@ export class RpcClient {
518
680
  clearTimeout(timeout);
519
681
  reject(error);
520
682
  },
683
+ ...(hooks?.onResponse ? { onResponse: hooks.onResponse } : {}),
684
+ ...(hooks?.onReject ? { onReject: hooks.onReject } : {}),
521
685
  });
522
686
  try {
523
- stdin.write(serializeJsonLine(fullCommand));
687
+ stream.write(serializeJsonLine(fullCommand));
524
688
  }
525
689
  catch (error) {
526
690
  const writeError = error instanceof Error ? error : new Error(String(error));
527
691
  const pending = this.pendingRequests.get(id);
528
692
  this.pendingRequests.delete(id);
693
+ pending?.onReject?.(writeError);
529
694
  pending?.reject(writeError);
530
695
  }
531
696
  });
@@ -533,6 +698,9 @@ export class RpcClient {
533
698
  getData(response) {
534
699
  if (!response.success) {
535
700
  const errorResponse = response;
701
+ if (errorResponse.errorCode === "missing_session_cwd" && errorResponse.errorData) {
702
+ throw new MissingSessionCwdError(errorResponse.errorData);
703
+ }
536
704
  throw new Error(errorResponse.error);
537
705
  }
538
706
  // Type assertion: we trust response.data matches T based on the command sent.