@bytetrue/byspace 0.1.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 (1177) hide show
  1. package/LICENSE +671 -0
  2. package/README.md +154 -0
  3. package/bin/byspace +3 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +121 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/agent/archive.d.ts +18 -0
  9. package/dist/commands/agent/archive.d.ts.map +1 -0
  10. package/dist/commands/agent/archive.js +102 -0
  11. package/dist/commands/agent/archive.js.map +1 -0
  12. package/dist/commands/agent/attach.d.ts +11 -0
  13. package/dist/commands/agent/attach.d.ts.map +1 -0
  14. package/dist/commands/agent/attach.js +159 -0
  15. package/dist/commands/agent/attach.js.map +1 -0
  16. package/dist/commands/agent/delete.d.ts +15 -0
  17. package/dist/commands/agent/delete.d.ts.map +1 -0
  18. package/dist/commands/agent/delete.js +107 -0
  19. package/dist/commands/agent/delete.js.map +1 -0
  20. package/dist/commands/agent/import.d.ts +14 -0
  21. package/dist/commands/agent/import.d.ts.map +1 -0
  22. package/dist/commands/agent/import.js +122 -0
  23. package/dist/commands/agent/import.js.map +1 -0
  24. package/dist/commands/agent/index.d.ts +3 -0
  25. package/dist/commands/agent/index.d.ts.map +1 -0
  26. package/dist/commands/agent/index.js +48 -0
  27. package/dist/commands/agent/index.js.map +1 -0
  28. package/dist/commands/agent/inspect.d.ts +15 -0
  29. package/dist/commands/agent/inspect.d.ts.map +1 -0
  30. package/dist/commands/agent/inspect.js +209 -0
  31. package/dist/commands/agent/inspect.js.map +1 -0
  32. package/dist/commands/agent/logs.d.ts +19 -0
  33. package/dist/commands/agent/logs.d.ts.map +1 -0
  34. package/dist/commands/agent/logs.js +180 -0
  35. package/dist/commands/agent/logs.js.map +1 -0
  36. package/dist/commands/agent/ls.d.ts +44 -0
  37. package/dist/commands/agent/ls.d.ts.map +1 -0
  38. package/dist/commands/agent/ls.js +204 -0
  39. package/dist/commands/agent/ls.js.map +1 -0
  40. package/dist/commands/agent/mode.d.ts +18 -0
  41. package/dist/commands/agent/mode.d.ts.map +1 -0
  42. package/dist/commands/agent/mode.js +100 -0
  43. package/dist/commands/agent/mode.js.map +1 -0
  44. package/dist/commands/agent/reload.d.ts +15 -0
  45. package/dist/commands/agent/reload.d.ts.map +1 -0
  46. package/dist/commands/agent/reload.js +75 -0
  47. package/dist/commands/agent/reload.js.map +1 -0
  48. package/dist/commands/agent/run.d.ts +44 -0
  49. package/dist/commands/agent/run.d.ts.map +1 -0
  50. package/dist/commands/agent/run.js +464 -0
  51. package/dist/commands/agent/run.js.map +1 -0
  52. package/dist/commands/agent/send.d.ts +19 -0
  53. package/dist/commands/agent/send.d.ts.map +1 -0
  54. package/dist/commands/agent/send.js +187 -0
  55. package/dist/commands/agent/send.js.map +1 -0
  56. package/dist/commands/agent/stop.d.ts +17 -0
  57. package/dist/commands/agent/stop.d.ts.map +1 -0
  58. package/dist/commands/agent/stop.js +115 -0
  59. package/dist/commands/agent/stop.js.map +1 -0
  60. package/dist/commands/agent/update.d.ts +18 -0
  61. package/dist/commands/agent/update.d.ts.map +1 -0
  62. package/dist/commands/agent/update.js +139 -0
  63. package/dist/commands/agent/update.js.map +1 -0
  64. package/dist/commands/agent/wait.d.ts +17 -0
  65. package/dist/commands/agent/wait.d.ts.map +1 -0
  66. package/dist/commands/agent/wait.js +158 -0
  67. package/dist/commands/agent/wait.js.map +1 -0
  68. package/dist/commands/chat/create.d.ts +9 -0
  69. package/dist/commands/chat/create.d.ts.map +1 -0
  70. package/dist/commands/chat/create.js +23 -0
  71. package/dist/commands/chat/create.js.map +1 -0
  72. package/dist/commands/chat/delete.d.ts +6 -0
  73. package/dist/commands/chat/delete.d.ts.map +1 -0
  74. package/dist/commands/chat/delete.js +20 -0
  75. package/dist/commands/chat/delete.js.map +1 -0
  76. package/dist/commands/chat/index.d.ts +3 -0
  77. package/dist/commands/chat/index.d.ts.map +1 -0
  78. package/dist/commands/chat/index.js +47 -0
  79. package/dist/commands/chat/index.js.map +1 -0
  80. package/dist/commands/chat/inspect.d.ts +6 -0
  81. package/dist/commands/chat/inspect.d.ts.map +1 -0
  82. package/dist/commands/chat/inspect.js +20 -0
  83. package/dist/commands/chat/inspect.js.map +1 -0
  84. package/dist/commands/chat/ls.d.ts +6 -0
  85. package/dist/commands/chat/ls.d.ts.map +1 -0
  86. package/dist/commands/chat/ls.js +20 -0
  87. package/dist/commands/chat/ls.js.map +1 -0
  88. package/dist/commands/chat/post.d.ts +9 -0
  89. package/dist/commands/chat/post.d.ts.map +1 -0
  90. package/dist/commands/chat/post.js +28 -0
  91. package/dist/commands/chat/post.js.map +1 -0
  92. package/dist/commands/chat/read.d.ts +11 -0
  93. package/dist/commands/chat/read.d.ts.map +1 -0
  94. package/dist/commands/chat/read.js +40 -0
  95. package/dist/commands/chat/read.js.map +1 -0
  96. package/dist/commands/chat/schema.d.ts +36 -0
  97. package/dist/commands/chat/schema.d.ts.map +1 -0
  98. package/dist/commands/chat/schema.js +81 -0
  99. package/dist/commands/chat/schema.js.map +1 -0
  100. package/dist/commands/chat/shared.d.ts +19 -0
  101. package/dist/commands/chat/shared.d.ts.map +1 -0
  102. package/dist/commands/chat/shared.js +118 -0
  103. package/dist/commands/chat/shared.js.map +1 -0
  104. package/dist/commands/chat/wait.d.ts +9 -0
  105. package/dist/commands/chat/wait.d.ts.map +1 -0
  106. package/dist/commands/chat/wait.js +45 -0
  107. package/dist/commands/chat/wait.js.map +1 -0
  108. package/dist/commands/clone.d.ts +17 -0
  109. package/dist/commands/clone.d.ts.map +1 -0
  110. package/dist/commands/clone.js +65 -0
  111. package/dist/commands/clone.js.map +1 -0
  112. package/dist/commands/daemon/index.d.ts +3 -0
  113. package/dist/commands/daemon/index.d.ts.map +1 -0
  114. package/dist/commands/daemon/index.js +57 -0
  115. package/dist/commands/daemon/index.js.map +1 -0
  116. package/dist/commands/daemon/local-daemon.d.ts +77 -0
  117. package/dist/commands/daemon/local-daemon.d.ts.map +1 -0
  118. package/dist/commands/daemon/local-daemon.js +545 -0
  119. package/dist/commands/daemon/local-daemon.js.map +1 -0
  120. package/dist/commands/daemon/pair.d.ts +9 -0
  121. package/dist/commands/daemon/pair.d.ts.map +1 -0
  122. package/dist/commands/daemon/pair.js +76 -0
  123. package/dist/commands/daemon/pair.js.map +1 -0
  124. package/dist/commands/daemon/restart.d.ts +12 -0
  125. package/dist/commands/daemon/restart.d.ts.map +1 -0
  126. package/dist/commands/daemon/restart.js +99 -0
  127. package/dist/commands/daemon/restart.js.map +1 -0
  128. package/dist/commands/daemon/runtime-toolchain.d.ts +6 -0
  129. package/dist/commands/daemon/runtime-toolchain.d.ts.map +1 -0
  130. package/dist/commands/daemon/runtime-toolchain.js +87 -0
  131. package/dist/commands/daemon/runtime-toolchain.js.map +1 -0
  132. package/dist/commands/daemon/set-password.d.ts +17 -0
  133. package/dist/commands/daemon/set-password.d.ts.map +1 -0
  134. package/dist/commands/daemon/set-password.js +82 -0
  135. package/dist/commands/daemon/set-password.js.map +1 -0
  136. package/dist/commands/daemon/start.d.ts +6 -0
  137. package/dist/commands/daemon/start.d.ts.map +1 -0
  138. package/dist/commands/daemon/start.js +56 -0
  139. package/dist/commands/daemon/start.js.map +1 -0
  140. package/dist/commands/daemon/status.d.ts +10 -0
  141. package/dist/commands/daemon/status.d.ts.map +1 -0
  142. package/dist/commands/daemon/status.js +337 -0
  143. package/dist/commands/daemon/status.js.map +1 -0
  144. package/dist/commands/daemon/stop.d.ts +15 -0
  145. package/dist/commands/daemon/stop.d.ts.map +1 -0
  146. package/dist/commands/daemon/stop.js +60 -0
  147. package/dist/commands/daemon/stop.js.map +1 -0
  148. package/dist/commands/hooks.d.ts +19 -0
  149. package/dist/commands/hooks.d.ts.map +1 -0
  150. package/dist/commands/hooks.js +89 -0
  151. package/dist/commands/hooks.js.map +1 -0
  152. package/dist/commands/loop/index.d.ts +3 -0
  153. package/dist/commands/loop/index.d.ts.map +1 -0
  154. package/dist/commands/loop/index.js +18 -0
  155. package/dist/commands/loop/index.js.map +1 -0
  156. package/dist/commands/loop/inspect.d.ts +13 -0
  157. package/dist/commands/loop/inspect.d.ts.map +1 -0
  158. package/dist/commands/loop/inspect.js +100 -0
  159. package/dist/commands/loop/inspect.js.map +1 -0
  160. package/dist/commands/loop/logs.d.ts +8 -0
  161. package/dist/commands/loop/logs.d.ts.map +1 -0
  162. package/dist/commands/loop/logs.js +69 -0
  163. package/dist/commands/loop/logs.js.map +1 -0
  164. package/dist/commands/loop/ls.d.ts +18 -0
  165. package/dist/commands/loop/ls.d.ts.map +1 -0
  166. package/dist/commands/loop/ls.js +62 -0
  167. package/dist/commands/loop/ls.js.map +1 -0
  168. package/dist/commands/loop/run.d.ts +30 -0
  169. package/dist/commands/loop/run.d.ts.map +1 -0
  170. package/dist/commands/loop/run.js +162 -0
  171. package/dist/commands/loop/run.js.map +1 -0
  172. package/dist/commands/loop/stop.d.ts +15 -0
  173. package/dist/commands/loop/stop.d.ts.map +1 -0
  174. package/dist/commands/loop/stop.js +56 -0
  175. package/dist/commands/loop/stop.js.map +1 -0
  176. package/dist/commands/loop/types.d.ts +138 -0
  177. package/dist/commands/loop/types.d.ts.map +1 -0
  178. package/dist/commands/loop/types.js +2 -0
  179. package/dist/commands/loop/types.js.map +1 -0
  180. package/dist/commands/onboard.d.ts +10 -0
  181. package/dist/commands/onboard.d.ts.map +1 -0
  182. package/dist/commands/onboard.js +415 -0
  183. package/dist/commands/onboard.js.map +1 -0
  184. package/dist/commands/permit/allow.d.ts +20 -0
  185. package/dist/commands/permit/allow.d.ts.map +1 -0
  186. package/dist/commands/permit/allow.js +133 -0
  187. package/dist/commands/permit/allow.js.map +1 -0
  188. package/dist/commands/permit/deny.d.ts +12 -0
  189. package/dist/commands/permit/deny.d.ts.map +1 -0
  190. package/dist/commands/permit/deny.js +105 -0
  191. package/dist/commands/permit/deny.js.map +1 -0
  192. package/dist/commands/permit/index.d.ts +3 -0
  193. package/dist/commands/permit/index.d.ts.map +1 -0
  194. package/dist/commands/permit/index.js +27 -0
  195. package/dist/commands/permit/index.js.map +1 -0
  196. package/dist/commands/permit/ls.d.ts +18 -0
  197. package/dist/commands/permit/ls.d.ts.map +1 -0
  198. package/dist/commands/permit/ls.js +66 -0
  199. package/dist/commands/permit/ls.js.map +1 -0
  200. package/dist/commands/provider/index.d.ts +3 -0
  201. package/dist/commands/provider/index.d.ts.map +1 -0
  202. package/dist/commands/provider/index.js +16 -0
  203. package/dist/commands/provider/index.js.map +1 -0
  204. package/dist/commands/provider/ls.d.ts +19 -0
  205. package/dist/commands/provider/ls.d.ts.map +1 -0
  206. package/dist/commands/provider/ls.js +73 -0
  207. package/dist/commands/provider/ls.js.map +1 -0
  208. package/dist/commands/provider/models.d.ts +20 -0
  209. package/dist/commands/provider/models.d.ts.map +1 -0
  210. package/dist/commands/provider/models.js +53 -0
  211. package/dist/commands/provider/models.js.map +1 -0
  212. package/dist/commands/schedule/create.d.ts +18 -0
  213. package/dist/commands/schedule/create.d.ts.map +1 -0
  214. package/dist/commands/schedule/create.js +40 -0
  215. package/dist/commands/schedule/create.js.map +1 -0
  216. package/dist/commands/schedule/delete.d.ts +10 -0
  217. package/dist/commands/schedule/delete.d.ts.map +1 -0
  218. package/dist/commands/schedule/delete.js +32 -0
  219. package/dist/commands/schedule/delete.js.map +1 -0
  220. package/dist/commands/schedule/index.d.ts +3 -0
  221. package/dist/commands/schedule/index.d.ts.map +1 -0
  222. package/dist/commands/schedule/index.js +66 -0
  223. package/dist/commands/schedule/index.js.map +1 -0
  224. package/dist/commands/schedule/inspect.d.ts +6 -0
  225. package/dist/commands/schedule/inspect.d.ts.map +1 -0
  226. package/dist/commands/schedule/inspect.js +24 -0
  227. package/dist/commands/schedule/inspect.js.map +1 -0
  228. package/dist/commands/schedule/logs.d.ts +6 -0
  229. package/dist/commands/schedule/logs.d.ts.map +1 -0
  230. package/dist/commands/schedule/logs.js +23 -0
  231. package/dist/commands/schedule/logs.js.map +1 -0
  232. package/dist/commands/schedule/ls.d.ts +5 -0
  233. package/dist/commands/schedule/ls.d.ts.map +1 -0
  234. package/dist/commands/schedule/ls.js +23 -0
  235. package/dist/commands/schedule/ls.js.map +1 -0
  236. package/dist/commands/schedule/pause.d.ts +5 -0
  237. package/dist/commands/schedule/pause.d.ts.map +1 -0
  238. package/dist/commands/schedule/pause.js +23 -0
  239. package/dist/commands/schedule/pause.js.map +1 -0
  240. package/dist/commands/schedule/resume.d.ts +5 -0
  241. package/dist/commands/schedule/resume.d.ts.map +1 -0
  242. package/dist/commands/schedule/resume.js +23 -0
  243. package/dist/commands/schedule/resume.js.map +1 -0
  244. package/dist/commands/schedule/run-once.d.ts +5 -0
  245. package/dist/commands/schedule/run-once.d.ts.map +1 -0
  246. package/dist/commands/schedule/run-once.js +23 -0
  247. package/dist/commands/schedule/run-once.js.map +1 -0
  248. package/dist/commands/schedule/schema.d.ts +21 -0
  249. package/dist/commands/schedule/schema.d.ts.map +1 -0
  250. package/dist/commands/schedule/schema.js +67 -0
  251. package/dist/commands/schedule/schema.js.map +1 -0
  252. package/dist/commands/schedule/shared.d.ts +56 -0
  253. package/dist/commands/schedule/shared.d.ts.map +1 -0
  254. package/dist/commands/schedule/shared.js +346 -0
  255. package/dist/commands/schedule/shared.js.map +1 -0
  256. package/dist/commands/schedule/types.d.ts +168 -0
  257. package/dist/commands/schedule/types.d.ts.map +1 -0
  258. package/dist/commands/schedule/types.js +2 -0
  259. package/dist/commands/schedule/types.js.map +1 -0
  260. package/dist/commands/schedule/update.d.ts +21 -0
  261. package/dist/commands/schedule/update.d.ts.map +1 -0
  262. package/dist/commands/schedule/update.js +39 -0
  263. package/dist/commands/schedule/update.js.map +1 -0
  264. package/dist/commands/speech/index.d.ts +3 -0
  265. package/dist/commands/speech/index.d.ts.map +1 -0
  266. package/dist/commands/speech/index.js +5 -0
  267. package/dist/commands/speech/index.js.map +1 -0
  268. package/dist/commands/terminal/capture.d.ts +10 -0
  269. package/dist/commands/terminal/capture.d.ts.map +1 -0
  270. package/dist/commands/terminal/capture.js +68 -0
  271. package/dist/commands/terminal/capture.js.map +1 -0
  272. package/dist/commands/terminal/create.d.ts +10 -0
  273. package/dist/commands/terminal/create.d.ts.map +1 -0
  274. package/dist/commands/terminal/create.js +38 -0
  275. package/dist/commands/terminal/create.js.map +1 -0
  276. package/dist/commands/terminal/index.d.ts +3 -0
  277. package/dist/commands/terminal/index.d.ts.map +1 -0
  278. package/dist/commands/terminal/index.js +43 -0
  279. package/dist/commands/terminal/index.js.map +1 -0
  280. package/dist/commands/terminal/kill.d.ts +6 -0
  281. package/dist/commands/terminal/kill.d.ts.map +1 -0
  282. package/dist/commands/terminal/kill.js +36 -0
  283. package/dist/commands/terminal/kill.js.map +1 -0
  284. package/dist/commands/terminal/ls.d.ts +10 -0
  285. package/dist/commands/terminal/ls.d.ts.map +1 -0
  286. package/dist/commands/terminal/ls.js +21 -0
  287. package/dist/commands/terminal/ls.js.map +1 -0
  288. package/dist/commands/terminal/schema.d.ts +18 -0
  289. package/dist/commands/terminal/schema.d.ts.map +1 -0
  290. package/dist/commands/terminal/schema.js +23 -0
  291. package/dist/commands/terminal/schema.js.map +1 -0
  292. package/dist/commands/terminal/send-keys.d.ts +7 -0
  293. package/dist/commands/terminal/send-keys.d.ts.map +1 -0
  294. package/dist/commands/terminal/send-keys.js +76 -0
  295. package/dist/commands/terminal/send-keys.js.map +1 -0
  296. package/dist/commands/terminal/shared.d.ts +12 -0
  297. package/dist/commands/terminal/shared.d.ts.map +1 -0
  298. package/dist/commands/terminal/shared.js +61 -0
  299. package/dist/commands/terminal/shared.js.map +1 -0
  300. package/dist/commands/worktree/archive.d.ts +20 -0
  301. package/dist/commands/worktree/archive.d.ts.map +1 -0
  302. package/dist/commands/worktree/archive.js +104 -0
  303. package/dist/commands/worktree/archive.js.map +1 -0
  304. package/dist/commands/worktree/create-input.d.ts +15 -0
  305. package/dist/commands/worktree/create-input.d.ts.map +1 -0
  306. package/dist/commands/worktree/create-input.js +56 -0
  307. package/dist/commands/worktree/create-input.js.map +1 -0
  308. package/dist/commands/worktree/create.d.ts +11 -0
  309. package/dist/commands/worktree/create.d.ts.map +1 -0
  310. package/dist/commands/worktree/create.js +58 -0
  311. package/dist/commands/worktree/create.js.map +1 -0
  312. package/dist/commands/worktree/index.d.ts +3 -0
  313. package/dist/commands/worktree/index.d.ts.map +1 -0
  314. package/dist/commands/worktree/index.js +25 -0
  315. package/dist/commands/worktree/index.js.map +1 -0
  316. package/dist/commands/worktree/ls.d.ts +19 -0
  317. package/dist/commands/worktree/ls.d.ts.map +1 -0
  318. package/dist/commands/worktree/ls.js +97 -0
  319. package/dist/commands/worktree/ls.js.map +1 -0
  320. package/dist/index.d.ts +2 -0
  321. package/dist/index.d.ts.map +1 -0
  322. package/dist/index.js +6 -0
  323. package/dist/index.js.map +1 -0
  324. package/dist/output/index.d.ts +45 -0
  325. package/dist/output/index.d.ts.map +1 -0
  326. package/dist/output/index.js +47 -0
  327. package/dist/output/index.js.map +1 -0
  328. package/dist/output/json.d.ts +11 -0
  329. package/dist/output/json.d.ts.map +1 -0
  330. package/dist/output/json.js +37 -0
  331. package/dist/output/json.js.map +1 -0
  332. package/dist/output/quiet.d.ts +9 -0
  333. package/dist/output/quiet.d.ts.map +1 -0
  334. package/dist/output/quiet.js +22 -0
  335. package/dist/output/quiet.js.map +1 -0
  336. package/dist/output/render.d.ts +15 -0
  337. package/dist/output/render.d.ts.map +1 -0
  338. package/dist/output/render.js +83 -0
  339. package/dist/output/render.js.map +1 -0
  340. package/dist/output/table.d.ts +13 -0
  341. package/dist/output/table.d.ts.map +1 -0
  342. package/dist/output/table.js +135 -0
  343. package/dist/output/table.js.map +1 -0
  344. package/dist/output/types.d.ts +73 -0
  345. package/dist/output/types.d.ts.map +1 -0
  346. package/dist/output/types.js +8 -0
  347. package/dist/output/types.js.map +1 -0
  348. package/dist/output/with-output.d.ts +41 -0
  349. package/dist/output/with-output.d.ts.map +1 -0
  350. package/dist/output/with-output.js +87 -0
  351. package/dist/output/with-output.js.map +1 -0
  352. package/dist/output/yaml.d.ts +11 -0
  353. package/dist/output/yaml.d.ts.map +1 -0
  354. package/dist/output/yaml.js +38 -0
  355. package/dist/output/yaml.js.map +1 -0
  356. package/dist/run.d.ts +9 -0
  357. package/dist/run.d.ts.map +1 -0
  358. package/dist/run.js +15 -0
  359. package/dist/run.js.map +1 -0
  360. package/dist/utils/client-id.d.ts +2 -0
  361. package/dist/utils/client-id.d.ts.map +1 -0
  362. package/dist/utils/client-id.js +37 -0
  363. package/dist/utils/client-id.js.map +1 -0
  364. package/dist/utils/client.d.ts +53 -0
  365. package/dist/utils/client.d.ts.map +1 -0
  366. package/dist/utils/client.js +339 -0
  367. package/dist/utils/client.js.map +1 -0
  368. package/dist/utils/command-options.d.ts +6 -0
  369. package/dist/utils/command-options.d.ts.map +1 -0
  370. package/dist/utils/command-options.js +17 -0
  371. package/dist/utils/command-options.js.map +1 -0
  372. package/dist/utils/duration.d.ts +7 -0
  373. package/dist/utils/duration.d.ts.map +1 -0
  374. package/dist/utils/duration.js +38 -0
  375. package/dist/utils/duration.js.map +1 -0
  376. package/dist/utils/errors.d.ts +5 -0
  377. package/dist/utils/errors.d.ts.map +1 -0
  378. package/dist/utils/errors.js +10 -0
  379. package/dist/utils/errors.js.map +1 -0
  380. package/dist/utils/paths.d.ts +12 -0
  381. package/dist/utils/paths.d.ts.map +1 -0
  382. package/dist/utils/paths.js +22 -0
  383. package/dist/utils/paths.js.map +1 -0
  384. package/dist/utils/provider-model.d.ts +11 -0
  385. package/dist/utils/provider-model.d.ts.map +1 -0
  386. package/dist/utils/provider-model.js +49 -0
  387. package/dist/utils/provider-model.js.map +1 -0
  388. package/dist/utils/timeline.d.ts +11 -0
  389. package/dist/utils/timeline.d.ts.map +1 -0
  390. package/dist/utils/timeline.js +11 -0
  391. package/dist/utils/timeline.js.map +1 -0
  392. package/dist/version.d.ts +2 -0
  393. package/dist/version.d.ts.map +1 -0
  394. package/dist/version.js +10 -0
  395. package/dist/version.js.map +1 -0
  396. package/node_modules/@bytetrue/byspace-client/README.md +12 -0
  397. package/node_modules/@bytetrue/byspace-client/dist/compat/normalize-provider-models.d.ts +11 -0
  398. package/node_modules/@bytetrue/byspace-client/dist/compat/normalize-provider-models.js +42 -0
  399. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-relay-e2ee-transport.d.ts +8 -0
  400. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-relay-e2ee-transport.js +161 -0
  401. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-runtime-metrics.d.ts +39 -0
  402. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-runtime-metrics.js +173 -0
  403. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-transport-types.d.ts +36 -0
  404. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-transport-types.js +2 -0
  405. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-transport-utils.d.ts +9 -0
  406. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-transport-utils.js +121 -0
  407. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-transport.d.ts +5 -0
  408. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-transport.js +4 -0
  409. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-websocket-transport.d.ts +8 -0
  410. package/node_modules/@bytetrue/byspace-client/dist/daemon-client-websocket-transport.js +120 -0
  411. package/node_modules/@bytetrue/byspace-client/dist/daemon-client.d.ts +1008 -0
  412. package/node_modules/@bytetrue/byspace-client/dist/daemon-client.js +3828 -0
  413. package/node_modules/@bytetrue/byspace-client/dist/index.d.ts +281 -0
  414. package/node_modules/@bytetrue/byspace-client/dist/index.js +176 -0
  415. package/node_modules/@bytetrue/byspace-client/dist/terminal-stream-router.d.ts +28 -0
  416. package/node_modules/@bytetrue/byspace-client/dist/terminal-stream-router.js +108 -0
  417. package/node_modules/@bytetrue/byspace-client/package.json +47 -0
  418. package/node_modules/@bytetrue/byspace-highlight/dist/colors.d.ts +4 -0
  419. package/node_modules/@bytetrue/byspace-highlight/dist/colors.js +45 -0
  420. package/node_modules/@bytetrue/byspace-highlight/dist/highlighter.d.ts +4 -0
  421. package/node_modules/@bytetrue/byspace-highlight/dist/highlighter.js +97 -0
  422. package/node_modules/@bytetrue/byspace-highlight/dist/index.d.ts +7 -0
  423. package/node_modules/@bytetrue/byspace-highlight/dist/index.js +5 -0
  424. package/node_modules/@bytetrue/byspace-highlight/dist/parsers.d.ts +5 -0
  425. package/node_modules/@bytetrue/byspace-highlight/dist/parsers.js +85 -0
  426. package/node_modules/@bytetrue/byspace-highlight/dist/themes.d.ts +12 -0
  427. package/node_modules/@bytetrue/byspace-highlight/dist/themes.js +235 -0
  428. package/node_modules/@bytetrue/byspace-highlight/dist/types.d.ts +6 -0
  429. package/node_modules/@bytetrue/byspace-highlight/dist/types.js +2 -0
  430. package/node_modules/@bytetrue/byspace-highlight/package.json +54 -0
  431. package/node_modules/@bytetrue/byspace-protocol/README.md +12 -0
  432. package/node_modules/@bytetrue/byspace-protocol/dist/agent-attention-notification.d.ts +41 -0
  433. package/node_modules/@bytetrue/byspace-protocol/dist/agent-attention-notification.js +140 -0
  434. package/node_modules/@bytetrue/byspace-protocol/dist/agent-labels.d.ts +7 -0
  435. package/node_modules/@bytetrue/byspace-protocol/dist/agent-labels.js +11 -0
  436. package/node_modules/@bytetrue/byspace-protocol/dist/agent-lifecycle.d.ts +3 -0
  437. package/node_modules/@bytetrue/byspace-protocol/dist/agent-lifecycle.js +8 -0
  438. package/node_modules/@bytetrue/byspace-protocol/dist/agent-state-bucket.d.ts +14 -0
  439. package/node_modules/@bytetrue/byspace-protocol/dist/agent-state-bucket.js +41 -0
  440. package/node_modules/@bytetrue/byspace-protocol/dist/agent-title-limits.d.ts +2 -0
  441. package/node_modules/@bytetrue/byspace-protocol/dist/agent-title-limits.js +2 -0
  442. package/node_modules/@bytetrue/byspace-protocol/dist/agent-types.d.ts +449 -0
  443. package/node_modules/@bytetrue/byspace-protocol/dist/agent-types.js +22 -0
  444. package/node_modules/@bytetrue/byspace-protocol/dist/binary-frames/demux.d.ts +11 -0
  445. package/node_modules/@bytetrue/byspace-protocol/dist/binary-frames/demux.js +23 -0
  446. package/node_modules/@bytetrue/byspace-protocol/dist/binary-frames/file-transfer.d.ts +50 -0
  447. package/node_modules/@bytetrue/byspace-protocol/dist/binary-frames/file-transfer.js +107 -0
  448. package/node_modules/@bytetrue/byspace-protocol/dist/binary-frames/index.d.ts +4 -0
  449. package/node_modules/@bytetrue/byspace-protocol/dist/binary-frames/index.js +4 -0
  450. package/node_modules/@bytetrue/byspace-protocol/dist/binary-frames/terminal.d.ts +31 -0
  451. package/node_modules/@bytetrue/byspace-protocol/dist/binary-frames/terminal.js +99 -0
  452. package/node_modules/@bytetrue/byspace-protocol/dist/branch-slug.d.ts +14 -0
  453. package/node_modules/@bytetrue/byspace-protocol/dist/branch-slug.js +49 -0
  454. package/node_modules/@bytetrue/byspace-protocol/dist/byspace-config-schema.d.ts +117 -0
  455. package/node_modules/@bytetrue/byspace-protocol/dist/byspace-config-schema.js +79 -0
  456. package/node_modules/@bytetrue/byspace-protocol/dist/chat/rpc-schemas.d.ts +158 -0
  457. package/node_modules/@bytetrue/byspace-protocol/dist/chat/rpc-schemas.js +103 -0
  458. package/node_modules/@bytetrue/byspace-protocol/dist/chat/types.d.ts +30 -0
  459. package/node_modules/@bytetrue/byspace-protocol/dist/chat/types.js +22 -0
  460. package/node_modules/@bytetrue/byspace-protocol/dist/client-capabilities.d.ts +8 -0
  461. package/node_modules/@bytetrue/byspace-protocol/dist/client-capabilities.js +18 -0
  462. package/node_modules/@bytetrue/byspace-protocol/dist/connection-offer.d.ts +36 -0
  463. package/node_modules/@bytetrue/byspace-protocol/dist/connection-offer.js +53 -0
  464. package/node_modules/@bytetrue/byspace-protocol/dist/daemon-endpoints.d.ts +47 -0
  465. package/node_modules/@bytetrue/byspace-protocol/dist/daemon-endpoints.js +201 -0
  466. package/node_modules/@bytetrue/byspace-protocol/dist/error-utils.d.ts +11 -0
  467. package/node_modules/@bytetrue/byspace-protocol/dist/error-utils.js +27 -0
  468. package/node_modules/@bytetrue/byspace-protocol/dist/generated/validation/ws-outbound.aot.d.ts +2 -0
  469. package/node_modules/@bytetrue/byspace-protocol/dist/generated/validation/ws-outbound.aot.js +51870 -0
  470. package/node_modules/@bytetrue/byspace-protocol/dist/git-remote.d.ts +26 -0
  471. package/node_modules/@bytetrue/byspace-protocol/dist/git-remote.js +84 -0
  472. package/node_modules/@bytetrue/byspace-protocol/dist/host-connection-schema.d.ts +11 -0
  473. package/node_modules/@bytetrue/byspace-protocol/dist/host-connection-schema.js +9 -0
  474. package/node_modules/@bytetrue/byspace-protocol/dist/literal-union.d.ts +2 -0
  475. package/node_modules/@bytetrue/byspace-protocol/dist/literal-union.js +2 -0
  476. package/node_modules/@bytetrue/byspace-protocol/dist/loop/rpc-schemas.d.ts +636 -0
  477. package/node_modules/@bytetrue/byspace-protocol/dist/loop/rpc-schemas.js +163 -0
  478. package/node_modules/@bytetrue/byspace-protocol/dist/messages.d.ts +33892 -0
  479. package/node_modules/@bytetrue/byspace-protocol/dist/messages.js +4000 -0
  480. package/node_modules/@bytetrue/byspace-protocol/dist/path-utils.d.ts +2 -0
  481. package/node_modules/@bytetrue/byspace-protocol/dist/path-utils.js +16 -0
  482. package/node_modules/@bytetrue/byspace-protocol/dist/provider-config.d.ts +126 -0
  483. package/node_modules/@bytetrue/byspace-protocol/dist/provider-config.js +110 -0
  484. package/node_modules/@bytetrue/byspace-protocol/dist/provider-icon-names.d.ts +5 -0
  485. package/node_modules/@bytetrue/byspace-protocol/dist/provider-icon-names.js +52 -0
  486. package/node_modules/@bytetrue/byspace-protocol/dist/provider-manifest.d.ts +34 -0
  487. package/node_modules/@bytetrue/byspace-protocol/dist/provider-manifest.js +230 -0
  488. package/node_modules/@bytetrue/byspace-protocol/dist/schedule/cron-expression.d.ts +13 -0
  489. package/node_modules/@bytetrue/byspace-protocol/dist/schedule/cron-expression.js +97 -0
  490. package/node_modules/@bytetrue/byspace-protocol/dist/schedule/rpc-schemas.d.ts +624 -0
  491. package/node_modules/@bytetrue/byspace-protocol/dist/schedule/rpc-schemas.js +155 -0
  492. package/node_modules/@bytetrue/byspace-protocol/dist/schedule/types.d.ts +222 -0
  493. package/node_modules/@bytetrue/byspace-protocol/dist/schedule/types.js +78 -0
  494. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-activity.d.ts +21 -0
  495. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-activity.js +25 -0
  496. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-input-mode.d.ts +26 -0
  497. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-input-mode.js +151 -0
  498. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-key-input.d.ts +13 -0
  499. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-key-input.js +201 -0
  500. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-profiles.d.ts +6 -0
  501. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-profiles.js +28 -0
  502. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-snapshot.d.ts +3 -0
  503. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-snapshot.js +178 -0
  504. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-stream-protocol.d.ts +2 -0
  505. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-stream-protocol.js +2 -0
  506. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-subscription-key.d.ts +2 -0
  507. package/node_modules/@bytetrue/byspace-protocol/dist/terminal-subscription-key.js +9 -0
  508. package/node_modules/@bytetrue/byspace-protocol/dist/tool-call-display.d.ts +11 -0
  509. package/node_modules/@bytetrue/byspace-protocol/dist/tool-call-display.js +135 -0
  510. package/node_modules/@bytetrue/byspace-protocol/dist/tool-name-normalization.d.ts +9 -0
  511. package/node_modules/@bytetrue/byspace-protocol/dist/tool-name-normalization.js +82 -0
  512. package/node_modules/@bytetrue/byspace-protocol/dist/validation/ws-outbound-schema-metadata.d.ts +6618 -0
  513. package/node_modules/@bytetrue/byspace-protocol/dist/validation/ws-outbound-schema-metadata.js +3 -0
  514. package/node_modules/@bytetrue/byspace-protocol/dist/validation/ws-outbound.d.ts +12 -0
  515. package/node_modules/@bytetrue/byspace-protocol/dist/validation/ws-outbound.js +8 -0
  516. package/node_modules/@bytetrue/byspace-protocol/package.json +42 -0
  517. package/node_modules/@bytetrue/byspace-relay/dist/base64.d.ts +3 -0
  518. package/node_modules/@bytetrue/byspace-relay/dist/base64.js +17 -0
  519. package/node_modules/@bytetrue/byspace-relay/dist/cloudflare-adapter.d.ts +76 -0
  520. package/node_modules/@bytetrue/byspace-relay/dist/cloudflare-adapter.js +504 -0
  521. package/node_modules/@bytetrue/byspace-relay/dist/crypto.d.ts +30 -0
  522. package/node_modules/@bytetrue/byspace-relay/dist/crypto.js +132 -0
  523. package/node_modules/@bytetrue/byspace-relay/dist/cutover-proxy.d.ts +6 -0
  524. package/node_modules/@bytetrue/byspace-relay/dist/cutover-proxy.js +12 -0
  525. package/node_modules/@bytetrue/byspace-relay/dist/e2ee.d.ts +5 -0
  526. package/node_modules/@bytetrue/byspace-relay/dist/e2ee.js +3 -0
  527. package/node_modules/@bytetrue/byspace-relay/dist/encrypted-channel.d.ts +76 -0
  528. package/node_modules/@bytetrue/byspace-relay/dist/encrypted-channel.js +350 -0
  529. package/node_modules/@bytetrue/byspace-relay/dist/index.d.ts +5 -0
  530. package/node_modules/@bytetrue/byspace-relay/dist/index.js +3 -0
  531. package/node_modules/@bytetrue/byspace-relay/dist/types.d.ts +27 -0
  532. package/node_modules/@bytetrue/byspace-relay/dist/types.js +11 -0
  533. package/node_modules/@bytetrue/byspace-relay/package.json +55 -0
  534. package/node_modules/@bytetrue/byspace-server/.env.example +31 -0
  535. package/node_modules/@bytetrue/byspace-server/README.md +111 -0
  536. package/node_modules/@bytetrue/byspace-server/dist/scripts/dev-runner.js +37 -0
  537. package/node_modules/@bytetrue/byspace-server/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
  538. package/node_modules/@bytetrue/byspace-server/dist/scripts/supervisor-entrypoint.js +112 -0
  539. package/node_modules/@bytetrue/byspace-server/dist/scripts/supervisor-log-config.js +31 -0
  540. package/node_modules/@bytetrue/byspace-server/dist/scripts/supervisor.js +252 -0
  541. package/node_modules/@bytetrue/byspace-server/dist/server/executable-resolution/executable-resolution.d.ts +10 -0
  542. package/node_modules/@bytetrue/byspace-server/dist/server/executable-resolution/executable-resolution.js +118 -0
  543. package/node_modules/@bytetrue/byspace-server/dist/server/executable-resolution/windows.d.ts +18 -0
  544. package/node_modules/@bytetrue/byspace-server/dist/server/executable-resolution/windows.js +65 -0
  545. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/activity-curator.d.ts +40 -0
  546. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/activity-curator.js +243 -0
  547. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-archive.d.ts +11 -0
  548. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-archive.js +16 -0
  549. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-loading.d.ts +14 -0
  550. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-loading.js +54 -0
  551. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-manager.d.ts +442 -0
  552. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-manager.js +2937 -0
  553. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-projections.d.ts +26 -0
  554. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-projections.js +389 -0
  555. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-prompt.d.ts +76 -0
  556. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-prompt.js +235 -0
  557. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-response-loop.d.ts +72 -0
  558. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-response-loop.js +333 -0
  559. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-run-state.d.ts +67 -0
  560. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-run-state.js +194 -0
  561. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-sdk-types.d.ts +653 -0
  562. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-sdk-types.js +22 -0
  563. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-storage.d.ts +120 -0
  564. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-storage.js +302 -0
  565. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
  566. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-stream-coalescer.js +175 -0
  567. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-timeline-content.d.ts +3 -0
  568. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-timeline-content.js +55 -0
  569. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-timeline-store-types.d.ts +50 -0
  570. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-timeline-store-types.js +2 -0
  571. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-timeline-store.d.ts +27 -0
  572. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/agent-timeline-store.js +230 -0
  573. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/audio-utils.d.ts +3 -0
  574. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/audio-utils.js +19 -0
  575. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/create-agent/create.d.ts +91 -0
  576. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/create-agent/create.js +378 -0
  577. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +54 -0
  578. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/create-agent-lifecycle-dispatch.js +152 -0
  579. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/create-agent-mode.d.ts +13 -0
  580. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/create-agent-mode.js +65 -0
  581. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/create-agent-title.d.ts +10 -0
  582. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/create-agent-title.js +34 -0
  583. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/dictation-debug.d.ts +13 -0
  584. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/dictation-debug.js +50 -0
  585. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/import-sessions.d.ts +47 -0
  586. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/import-sessions.js +145 -0
  587. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/lifecycle-command.d.ts +73 -0
  588. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/lifecycle-command.js +99 -0
  589. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/mcp-server.d.ts +5 -0
  590. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/mcp-server.js +66 -0
  591. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/mcp-shared.d.ts +179 -0
  592. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/mcp-shared.js +197 -0
  593. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
  594. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/pcm16-resampler.js +63 -0
  595. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/permission-response.d.ts +15 -0
  596. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/permission-response.js +14 -0
  597. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/prompt-attachments.d.ts +12 -0
  598. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/prompt-attachments.js +111 -0
  599. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
  600. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-history-timestamps.js +16 -0
  601. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-launch-config.d.ts +43 -0
  602. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-launch-config.js +167 -0
  603. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-notices.d.ts +3 -0
  604. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-notices.js +5 -0
  605. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-registry.d.ts +41 -0
  606. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-registry.js +501 -0
  607. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-session-import.d.ts +10 -0
  608. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-session-import.js +55 -0
  609. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-snapshot-manager.d.ts +135 -0
  610. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-snapshot-manager.js +685 -0
  611. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-subagents/store.d.ts +58 -0
  612. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/provider-subagents/store.js +98 -0
  613. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/acp-agent.d.ts +373 -0
  614. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/acp-agent.js +2538 -0
  615. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/agent.d.ts +68 -0
  616. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/agent.js +4482 -0
  617. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/feature-definitions.d.ts +8 -0
  618. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/feature-definitions.js +24 -0
  619. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/model-manifest.d.ts +90 -0
  620. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/model-manifest.js +205 -0
  621. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/models.d.ts +11 -0
  622. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/models.js +97 -0
  623. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/partial-json.d.ts +5 -0
  624. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/partial-json.js +306 -0
  625. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/project-dir.d.ts +6 -0
  626. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/project-dir.js +57 -0
  627. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/query.d.ts +17 -0
  628. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/query.js +86 -0
  629. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
  630. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/rewind.js +30 -0
  631. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +26 -0
  632. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/sidechain-tracker.js +374 -0
  633. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +35 -0
  634. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/task-notification-tool-call.js +272 -0
  635. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
  636. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -0
  637. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
  638. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +130 -0
  639. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
  640. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/claude/tool-call-mapper.js +129 -0
  641. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/app-server-transport.d.ts +90 -0
  642. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/app-server-transport.js +262 -0
  643. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/rewind.d.ts +21 -0
  644. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/rewind.js +46 -0
  645. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts +118 -0
  646. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js +417 -0
  647. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
  648. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
  649. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +24 -0
  650. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex/tool-call-mapper.js +877 -0
  651. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex-app-server-agent.d.ts +333 -0
  652. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex-app-server-agent.js +5189 -0
  653. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
  654. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/codex-feature-definitions.js +45 -0
  655. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/copilot-acp-agent.d.ts +26 -0
  656. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/copilot-acp-agent.js +187 -0
  657. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/cursor-acp-agent.d.ts +17 -0
  658. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/cursor-acp-agent.js +31 -0
  659. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/diagnostic-utils.d.ts +36 -0
  660. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/diagnostic-utils.js +355 -0
  661. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/generic-acp-agent.d.ts +51 -0
  662. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/generic-acp-agent.js +174 -0
  663. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/kiro-acp-agent.d.ts +17 -0
  664. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/kiro-acp-agent.js +78 -0
  665. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/mock-load-test-agent.d.ts +86 -0
  666. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/mock-load-test-agent.js +1043 -0
  667. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/mock-slow-provider.d.ts +14 -0
  668. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/mock-slow-provider.js +39 -0
  669. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
  670. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/paths.js +7 -0
  671. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
  672. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/rewind.js +14 -0
  673. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/server-manager.d.ts +95 -0
  674. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/server-manager.js +441 -0
  675. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +27 -0
  676. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/test-server-manager.js +43 -0
  677. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.d.ts +97 -0
  678. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.js +302 -0
  679. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
  680. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +256 -0
  681. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
  682. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode/tool-call-mapper.js +53 -0
  683. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode-agent.d.ts +295 -0
  684. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/opencode-agent.js +3225 -0
  685. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/agent.d.ts +140 -0
  686. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/agent.js +1862 -0
  687. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/cli-runtime.d.ts +21 -0
  688. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/cli-runtime.js +272 -0
  689. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/history-mapper.d.ts +9 -0
  690. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/history-mapper.js +143 -0
  691. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
  692. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/rewind.js +8 -0
  693. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/rpc-types.d.ts +214 -0
  694. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
  695. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/runtime.d.ts +59 -0
  696. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/runtime.js +60 -0
  697. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/session-descriptor.d.ts +16 -0
  698. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/session-descriptor.js +346 -0
  699. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +89 -0
  700. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +223 -0
  701. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +112 -0
  702. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/pi/tool-call-mapper.js +284 -0
  703. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/provider-image-output.d.ts +25 -0
  704. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/provider-image-output.js +165 -0
  705. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
  706. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/provider-runner.js +81 -0
  707. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts +3 -0
  708. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +60 -0
  709. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +884 -0
  710. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/tool-call-detail-primitives.js +778 -0
  711. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +25 -0
  712. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/tool-call-mapper-utils.js +208 -0
  713. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/trae-acp-agent.d.ts +15 -0
  714. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/providers/trae-acp-agent.js +18 -0
  715. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/recordings-debug.d.ts +3 -0
  716. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/recordings-debug.js +19 -0
  717. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/rewind/rewind.d.ts +10 -0
  718. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/rewind/rewind.js +29 -0
  719. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
  720. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
  721. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/runtime-mcp-config.d.ts +14 -0
  722. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/runtime-mcp-config.js +53 -0
  723. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/structured-generation-providers.d.ts +29 -0
  724. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/structured-generation-providers.js +236 -0
  725. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/stt-debug.d.ts +10 -0
  726. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/stt-debug.js +33 -0
  727. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/stt-manager.d.ts +38 -0
  728. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/stt-manager.js +246 -0
  729. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/system-prompt.d.ts +2 -0
  730. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/system-prompt.js +8 -0
  731. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/timeline-append.d.ts +10 -0
  732. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/timeline-append.js +27 -0
  733. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/timeline-projection.d.ts +71 -0
  734. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/timeline-projection.js +373 -0
  735. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/tools/byspace-tools.d.ts +51 -0
  736. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/tools/byspace-tools.js +2111 -0
  737. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/tools/types.d.ts +36 -0
  738. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/tools/types.js +2 -0
  739. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/tts-debug.d.ts +8 -0
  740. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/tts-debug.js +24 -0
  741. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/tts-manager.d.ts +41 -0
  742. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent/tts-manager.js +375 -0
  743. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent-attention-policy.d.ts +29 -0
  744. package/node_modules/@bytetrue/byspace-server/dist/server/server/agent-attention-policy.js +36 -0
  745. package/node_modules/@bytetrue/byspace-server/dist/server/server/atomic-file.d.ts +3 -0
  746. package/node_modules/@bytetrue/byspace-server/dist/server/server/atomic-file.js +19 -0
  747. package/node_modules/@bytetrue/byspace-server/dist/server/server/auth.d.ts +38 -0
  748. package/node_modules/@bytetrue/byspace-server/dist/server/server/auth.js +143 -0
  749. package/node_modules/@bytetrue/byspace-server/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
  750. package/node_modules/@bytetrue/byspace-server/dist/server/server/auto-archive-on-merge/archive-if-safe.js +92 -0
  751. package/node_modules/@bytetrue/byspace-server/dist/server/server/auto-archive-on-merge/index.d.ts +8 -0
  752. package/node_modules/@bytetrue/byspace-server/dist/server/server/auto-archive-on-merge/index.js +15 -0
  753. package/node_modules/@bytetrue/byspace-server/dist/server/server/bootstrap.d.ts +121 -0
  754. package/node_modules/@bytetrue/byspace-server/dist/server/server/bootstrap.js +1110 -0
  755. package/node_modules/@bytetrue/byspace-server/dist/server/server/byspace-env.d.ts +13 -0
  756. package/node_modules/@bytetrue/byspace-server/dist/server/server/byspace-env.js +46 -0
  757. package/node_modules/@bytetrue/byspace-server/dist/server/server/byspace-home.d.ts +2 -0
  758. package/node_modules/@bytetrue/byspace-server/dist/server/server/byspace-home.js +19 -0
  759. package/node_modules/@bytetrue/byspace-server/dist/server/server/byspace-worktree-service.d.ts +52 -0
  760. package/node_modules/@bytetrue/byspace-server/dist/server/server/byspace-worktree-service.js +294 -0
  761. package/node_modules/@bytetrue/byspace-server/dist/server/server/chat/chat-mentions.d.ts +47 -0
  762. package/node_modules/@bytetrue/byspace-server/dist/server/server/chat/chat-mentions.js +113 -0
  763. package/node_modules/@bytetrue/byspace-server/dist/server/server/chat/chat-service.d.ts +78 -0
  764. package/node_modules/@bytetrue/byspace-server/dist/server/server/chat/chat-service.js +337 -0
  765. package/node_modules/@bytetrue/byspace-server/dist/server/server/checkout/status-projection.d.ts +19 -0
  766. package/node_modules/@bytetrue/byspace-server/dist/server/server/checkout/status-projection.js +102 -0
  767. package/node_modules/@bytetrue/byspace-server/dist/server/server/checkout-diff-manager.d.ts +41 -0
  768. package/node_modules/@bytetrue/byspace-server/dist/server/server/checkout-diff-manager.js +189 -0
  769. package/node_modules/@bytetrue/byspace-server/dist/server/server/checkout-git-utils.d.ts +11 -0
  770. package/node_modules/@bytetrue/byspace-server/dist/server/server/checkout-git-utils.js +34 -0
  771. package/node_modules/@bytetrue/byspace-server/dist/server/server/client-message-id.d.ts +3 -0
  772. package/node_modules/@bytetrue/byspace-server/dist/server/server/client-message-id.js +12 -0
  773. package/node_modules/@bytetrue/byspace-server/dist/server/server/config.d.ts +22 -0
  774. package/node_modules/@bytetrue/byspace-server/dist/server/server/config.js +324 -0
  775. package/node_modules/@bytetrue/byspace-server/dist/server/server/connection-offer.d.ts +20 -0
  776. package/node_modules/@bytetrue/byspace-server/dist/server/server/connection-offer.js +59 -0
  777. package/node_modules/@bytetrue/byspace-server/dist/server/server/daemon-config-store.d.ts +25 -0
  778. package/node_modules/@bytetrue/byspace-server/dist/server/server/daemon-config-store.js +182 -0
  779. package/node_modules/@bytetrue/byspace-server/dist/server/server/daemon-keypair.d.ts +8 -0
  780. package/node_modules/@bytetrue/byspace-server/dist/server/server/daemon-keypair.js +42 -0
  781. package/node_modules/@bytetrue/byspace-server/dist/server/server/daemon-version.d.ts +5 -0
  782. package/node_modules/@bytetrue/byspace-server/dist/server/server/daemon-version.js +22 -0
  783. package/node_modules/@bytetrue/byspace-server/dist/server/server/daemon-worker.d.ts +2 -0
  784. package/node_modules/@bytetrue/byspace-server/dist/server/server/daemon-worker.js +251 -0
  785. package/node_modules/@bytetrue/byspace-server/dist/server/server/dictation/dictation-stream-manager.d.ts +87 -0
  786. package/node_modules/@bytetrue/byspace-server/dist/server/server/dictation/dictation-stream-manager.js +572 -0
  787. package/node_modules/@bytetrue/byspace-server/dist/server/server/exports.d.ts +24 -0
  788. package/node_modules/@bytetrue/byspace-server/dist/server/server/exports.js +24 -0
  789. package/node_modules/@bytetrue/byspace-server/dist/server/server/file-download/token-store.d.ts +24 -0
  790. package/node_modules/@bytetrue/byspace-server/dist/server/server/file-download/token-store.js +40 -0
  791. package/node_modules/@bytetrue/byspace-server/dist/server/server/file-explorer/service.d.ts +51 -0
  792. package/node_modules/@bytetrue/byspace-server/dist/server/server/file-explorer/service.js +246 -0
  793. package/node_modules/@bytetrue/byspace-server/dist/server/server/file-upload/index.d.ts +27 -0
  794. package/node_modules/@bytetrue/byspace-server/dist/server/server/file-upload/index.js +158 -0
  795. package/node_modules/@bytetrue/byspace-server/dist/server/server/hostnames.d.ts +13 -0
  796. package/node_modules/@bytetrue/byspace-server/dist/server/server/hostnames.js +94 -0
  797. package/node_modules/@bytetrue/byspace-server/dist/server/server/json-utils.d.ts +11 -0
  798. package/node_modules/@bytetrue/byspace-server/dist/server/server/json-utils.js +45 -0
  799. package/node_modules/@bytetrue/byspace-server/dist/server/server/lifecycle-reasons.d.ts +4 -0
  800. package/node_modules/@bytetrue/byspace-server/dist/server/server/lifecycle-reasons.js +6 -0
  801. package/node_modules/@bytetrue/byspace-server/dist/server/server/logger.d.ts +29 -0
  802. package/node_modules/@bytetrue/byspace-server/dist/server/server/logger.js +125 -0
  803. package/node_modules/@bytetrue/byspace-server/dist/server/server/loop-service.d.ts +235 -0
  804. package/node_modules/@bytetrue/byspace-server/dist/server/server/loop-service.js +837 -0
  805. package/node_modules/@bytetrue/byspace-server/dist/server/server/managed-processes/managed-processes.d.ts +76 -0
  806. package/node_modules/@bytetrue/byspace-server/dist/server/server/managed-processes/managed-processes.js +326 -0
  807. package/node_modules/@bytetrue/byspace-server/dist/server/server/messages.d.ts +9 -0
  808. package/node_modules/@bytetrue/byspace-server/dist/server/server/messages.js +29 -0
  809. package/node_modules/@bytetrue/byspace-server/dist/server/server/migrations/backfill-workspace-id.migration.d.ts +9 -0
  810. package/node_modules/@bytetrue/byspace-server/dist/server/server/migrations/backfill-workspace-id.migration.js +64 -0
  811. package/node_modules/@bytetrue/byspace-server/dist/server/server/package-version.d.ts +19 -0
  812. package/node_modules/@bytetrue/byspace-server/dist/server/server/package-version.js +60 -0
  813. package/node_modules/@bytetrue/byspace-server/dist/server/server/pagination/cursor.d.ts +16 -0
  814. package/node_modules/@bytetrue/byspace-server/dist/server/server/pagination/cursor.js +62 -0
  815. package/node_modules/@bytetrue/byspace-server/dist/server/server/pagination/sortable-pager.d.ts +24 -0
  816. package/node_modules/@bytetrue/byspace-server/dist/server/server/pagination/sortable-pager.js +68 -0
  817. package/node_modules/@bytetrue/byspace-server/dist/server/server/pairing-offer.d.ts +18 -0
  818. package/node_modules/@bytetrue/byspace-server/dist/server/server/pairing-offer.js +47 -0
  819. package/node_modules/@bytetrue/byspace-server/dist/server/server/pairing-qr.d.ts +7 -0
  820. package/node_modules/@bytetrue/byspace-server/dist/server/server/pairing-qr.js +45 -0
  821. package/node_modules/@bytetrue/byspace-server/dist/server/server/path-utils.d.ts +5 -0
  822. package/node_modules/@bytetrue/byspace-server/dist/server/server/path-utils.js +34 -0
  823. package/node_modules/@bytetrue/byspace-server/dist/server/server/persisted-config.d.ts +313 -0
  824. package/node_modules/@bytetrue/byspace-server/dist/server/server/persisted-config.js +391 -0
  825. package/node_modules/@bytetrue/byspace-server/dist/server/server/persistence-hooks.d.ts +31 -0
  826. package/node_modules/@bytetrue/byspace-server/dist/server/server/persistence-hooks.js +93 -0
  827. package/node_modules/@bytetrue/byspace-server/dist/server/server/pid-lock.d.ts +31 -0
  828. package/node_modules/@bytetrue/byspace-server/dist/server/server/pid-lock.js +168 -0
  829. package/node_modules/@bytetrue/byspace-server/dist/server/server/private-files.d.ts +6 -0
  830. package/node_modules/@bytetrue/byspace-server/dist/server/server/private-files.js +37 -0
  831. package/node_modules/@bytetrue/byspace-server/dist/server/server/process-diagnostics.d.ts +17 -0
  832. package/node_modules/@bytetrue/byspace-server/dist/server/server/process-diagnostics.js +22 -0
  833. package/node_modules/@bytetrue/byspace-server/dist/server/server/push/notifications.d.ts +9 -0
  834. package/node_modules/@bytetrue/byspace-server/dist/server/server/push/notifications.js +15 -0
  835. package/node_modules/@bytetrue/byspace-server/dist/server/server/push/push-service.d.ts +20 -0
  836. package/node_modules/@bytetrue/byspace-server/dist/server/server/push/push-service.js +66 -0
  837. package/node_modules/@bytetrue/byspace-server/dist/server/server/push/token-store.d.ts +18 -0
  838. package/node_modules/@bytetrue/byspace-server/dist/server/server/push/token-store.js +68 -0
  839. package/node_modules/@bytetrue/byspace-server/dist/server/server/relay-transport.d.ts +31 -0
  840. package/node_modules/@bytetrue/byspace-server/dist/server/server/relay-transport.js +514 -0
  841. package/node_modules/@bytetrue/byspace-server/dist/server/server/resolve-workspace-id-for-path.d.ts +3 -0
  842. package/node_modules/@bytetrue/byspace-server/dist/server/server/resolve-workspace-id-for-path.js +41 -0
  843. package/node_modules/@bytetrue/byspace-server/dist/server/server/resolve-worktree-creation-intent.d.ts +32 -0
  844. package/node_modules/@bytetrue/byspace-server/dist/server/server/resolve-worktree-creation-intent.js +121 -0
  845. package/node_modules/@bytetrue/byspace-server/dist/server/server/schedule/cron.d.ts +4 -0
  846. package/node_modules/@bytetrue/byspace-server/dist/server/server/schedule/cron.js +81 -0
  847. package/node_modules/@bytetrue/byspace-server/dist/server/server/schedule/service.d.ts +74 -0
  848. package/node_modules/@bytetrue/byspace-server/dist/server/server/schedule/service.js +804 -0
  849. package/node_modules/@bytetrue/byspace-server/dist/server/server/schedule/store.d.ts +27 -0
  850. package/node_modules/@bytetrue/byspace-server/dist/server/server/schedule/store.js +190 -0
  851. package/node_modules/@bytetrue/byspace-server/dist/server/server/script-health-monitor.d.ts +39 -0
  852. package/node_modules/@bytetrue/byspace-server/dist/server/server/script-health-monitor.js +159 -0
  853. package/node_modules/@bytetrue/byspace-server/dist/server/server/script-proxy.d.ts +3 -0
  854. package/node_modules/@bytetrue/byspace-server/dist/server/server/script-proxy.js +2 -0
  855. package/node_modules/@bytetrue/byspace-server/dist/server/server/script-route-branch-handler.d.ts +10 -0
  856. package/node_modules/@bytetrue/byspace-server/dist/server/server/script-route-branch-handler.js +11 -0
  857. package/node_modules/@bytetrue/byspace-server/dist/server/server/script-status-projection.d.ts +36 -0
  858. package/node_modules/@bytetrue/byspace-server/dist/server/server/script-status-projection.js +200 -0
  859. package/node_modules/@bytetrue/byspace-server/dist/server/server/server-id.d.ts +17 -0
  860. package/node_modules/@bytetrue/byspace-server/dist/server/server/server-id.js +68 -0
  861. package/node_modules/@bytetrue/byspace-server/dist/server/server/service-proxy.d.ts +237 -0
  862. package/node_modules/@bytetrue/byspace-server/dist/server/server/service-proxy.js +714 -0
  863. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/agent-config/agent-config-session.d.ts +50 -0
  864. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/agent-config/agent-config-session.js +98 -0
  865. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/agent-updates/agent-updates-service.d.ts +59 -0
  866. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/agent-updates/agent-updates-service.js +220 -0
  867. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/chat/chat-schedule-loop-session.d.ts +120 -0
  868. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/chat/chat-schedule-loop-session.js +489 -0
  869. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/checkout/checkout-session.d.ts +140 -0
  870. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/checkout/checkout-session.js +927 -0
  871. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
  872. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
  873. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +32 -0
  874. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-self-update-session-controller.js +88 -0
  875. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-self-updater.d.ts +32 -0
  876. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-self-updater.js +56 -0
  877. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-session.d.ts +76 -0
  878. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-session.js +148 -0
  879. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
  880. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/diagnostics.js +431 -0
  881. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/install-origin.d.ts +7 -0
  882. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/install-origin.js +64 -0
  883. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
  884. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/npm-global-cli.js +98 -0
  885. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/files/workspace-files-session.d.ts +43 -0
  886. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/files/workspace-files-session.js +218 -0
  887. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/git-mutation/git-mutation-service.d.ts +34 -0
  888. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/git-mutation/git-mutation-service.js +71 -0
  889. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/project-config/project-config-session.d.ts +34 -0
  890. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/project-config/project-config-session.js +125 -0
  891. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/provider/provider-catalog-session.d.ts +74 -0
  892. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/provider/provider-catalog-session.js +343 -0
  893. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/voice/voice-session.d.ts +166 -0
  894. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/voice/voice-session.js +904 -0
  895. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/voice/voice-turn-controller.d.ts +38 -0
  896. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/voice/voice-turn-controller.js +393 -0
  897. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +36 -0
  898. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +134 -0
  899. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +34 -0
  900. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +190 -0
  901. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +41 -0
  902. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +100 -0
  903. package/node_modules/@bytetrue/byspace-server/dist/server/server/session.d.ts +386 -0
  904. package/node_modules/@bytetrue/byspace-server/dist/server/server/session.js +4501 -0
  905. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/audio.d.ts +10 -0
  906. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/audio.js +101 -0
  907. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/provider-resolver.d.ts +3 -0
  908. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/provider-resolver.js +7 -0
  909. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/config.d.ts +30 -0
  910. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/config.js +134 -0
  911. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/models.d.ts +11 -0
  912. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/models.js +17 -0
  913. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/runtime.d.ts +31 -0
  914. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/runtime.js +135 -0
  915. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
  916. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +56 -0
  917. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/model-catalog.js +74 -0
  918. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +15 -0
  919. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/model-downloader.js +142 -0
  920. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +49 -0
  921. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +73 -0
  922. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +9 -0
  923. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +107 -0
  924. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
  925. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +137 -0
  926. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
  927. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +133 -0
  928. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +18 -0
  929. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  930. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +21 -0
  931. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +100 -0
  932. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts +19 -0
  933. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js +49 -0
  934. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts +38 -0
  935. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js +176 -0
  936. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/worker-bytes.d.ts +4 -0
  937. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/worker-bytes.js +9 -0
  938. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/worker-client.d.ts +93 -0
  939. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/worker-client.js +590 -0
  940. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/worker-process.d.ts +2 -0
  941. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/worker-process.js +270 -0
  942. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/worker-protocol.d.ts +95 -0
  943. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/local/worker-protocol.js +2 -0
  944. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/openai/config.d.ts +19 -0
  945. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/openai/config.js +148 -0
  946. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/openai/runtime.d.ts +29 -0
  947. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/openai/runtime.js +102 -0
  948. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/openai/stt.d.ts +23 -0
  949. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/openai/stt.js +209 -0
  950. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/openai/tts.d.ts +19 -0
  951. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/providers/openai/tts.js +48 -0
  952. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
  953. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/speech-config-resolver.js +132 -0
  954. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/speech-provider.d.ts +59 -0
  955. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/speech-provider.js +2 -0
  956. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/speech-runtime.d.ts +45 -0
  957. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/speech-runtime.js +562 -0
  958. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/speech-types.d.ts +22 -0
  959. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/speech-types.js +8 -0
  960. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/turn-detection-provider.d.ts +23 -0
  961. package/node_modules/@bytetrue/byspace-server/dist/server/server/speech/turn-detection-provider.js +2 -0
  962. package/node_modules/@bytetrue/byspace-server/dist/server/server/utils/diff-highlighter.d.ts +57 -0
  963. package/node_modules/@bytetrue/byspace-server/dist/server/server/utils/diff-highlighter.js +279 -0
  964. package/node_modules/@bytetrue/byspace-server/dist/server/server/voice-config.d.ts +15 -0
  965. package/node_modules/@bytetrue/byspace-server/dist/server/server/voice-config.js +54 -0
  966. package/node_modules/@bytetrue/byspace-server/dist/server/server/voice-permission-policy.d.ts +4 -0
  967. package/node_modules/@bytetrue/byspace-server/dist/server/server/voice-permission-policy.js +13 -0
  968. package/node_modules/@bytetrue/byspace-server/dist/server/server/voice-types.d.ts +12 -0
  969. package/node_modules/@bytetrue/byspace-server/dist/server/server/voice-types.js +2 -0
  970. package/node_modules/@bytetrue/byspace-server/dist/server/server/web-ui.d.ts +10 -0
  971. package/node_modules/@bytetrue/byspace-server/dist/server/server/web-ui.js +205 -0
  972. package/node_modules/@bytetrue/byspace-server/dist/server/server/websocket/runtime-metrics.d.ts +94 -0
  973. package/node_modules/@bytetrue/byspace-server/dist/server/server/websocket/runtime-metrics.js +148 -0
  974. package/node_modules/@bytetrue/byspace-server/dist/server/server/websocket-server.d.ts +167 -0
  975. package/node_modules/@bytetrue/byspace-server/dist/server/server/websocket-server.js +1650 -0
  976. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-archive-service.d.ts +65 -0
  977. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-archive-service.js +229 -0
  978. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-auto-name.d.ts +55 -0
  979. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-auto-name.js +128 -0
  980. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-bootstrap-dedupe.d.ts +34 -0
  981. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-bootstrap-dedupe.js +23 -0
  982. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-directory.d.ts +93 -0
  983. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-directory.js +421 -0
  984. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-git-metadata.d.ts +24 -0
  985. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-git-metadata.js +55 -0
  986. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-git-service.d.ts +257 -0
  987. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-git-service.js +1386 -0
  988. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-reconciliation-service.d.ts +57 -0
  989. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-reconciliation-service.js +278 -0
  990. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-registry-bootstrap.d.ts +13 -0
  991. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-registry-bootstrap.js +121 -0
  992. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-registry-model.d.ts +55 -0
  993. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-registry-model.js +190 -0
  994. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-registry.d.ts +121 -0
  995. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-registry.js +211 -0
  996. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
  997. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-script-runtime-store.js +78 -0
  998. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-service-env.d.ts +18 -0
  999. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-service-env.js +85 -0
  1000. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-service-port-registry.d.ts +19 -0
  1001. package/node_modules/@bytetrue/byspace-server/dist/server/server/workspace-service-port-registry.js +59 -0
  1002. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree/commands.d.ts +55 -0
  1003. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree/commands.js +107 -0
  1004. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-bootstrap.d.ts +76 -0
  1005. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-bootstrap.js +720 -0
  1006. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-branch-name-generator.d.ts +35 -0
  1007. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-branch-name-generator.js +91 -0
  1008. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-core.d.ts +31 -0
  1009. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-core.js +105 -0
  1010. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-errors.d.ts +12 -0
  1011. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-errors.js +28 -0
  1012. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-session.d.ts +152 -0
  1013. package/node_modules/@bytetrue/byspace-server/dist/server/server/worktree-session.js +466 -0
  1014. package/node_modules/@bytetrue/byspace-server/dist/server/services/github-service.d.ts +337 -0
  1015. package/node_modules/@bytetrue/byspace-server/dist/server/services/github-service.js +2101 -0
  1016. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/manifest.d.ts +4 -0
  1017. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/manifest.js +52 -0
  1018. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/provider.d.ts +17 -0
  1019. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/provider.js +2 -0
  1020. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/claude.d.ts +26 -0
  1021. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/claude.js +217 -0
  1022. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
  1023. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/codex.js +211 -0
  1024. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/copilot.d.ts +17 -0
  1025. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/copilot.js +75 -0
  1026. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/cursor.d.ts +17 -0
  1027. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/cursor.js +123 -0
  1028. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/grok.d.ts +18 -0
  1029. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/grok.js +89 -0
  1030. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/kimi.d.ts +20 -0
  1031. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/kimi.js +89 -0
  1032. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
  1033. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
  1034. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/zai.d.ts +17 -0
  1035. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/providers/zai.js +58 -0
  1036. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/service.d.ts +28 -0
  1037. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/service.js +58 -0
  1038. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/usage.d.ts +22 -0
  1039. package/node_modules/@bytetrue/byspace-server/dist/server/services/quota-fetcher/usage.js +49 -0
  1040. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/activity/terminal-activity-tracker.d.ts +20 -0
  1041. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/activity/terminal-activity-tracker.js +59 -0
  1042. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/agent-hook-installer.d.ts +62 -0
  1043. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/agent-hook-installer.js +117 -0
  1044. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/claude/claude-settings.d.ts +7 -0
  1045. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/claude/claude-settings.js +88 -0
  1046. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/claude/claude.d.ts +4 -0
  1047. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/claude/claude.js +47 -0
  1048. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/codex/codex-settings.d.ts +7 -0
  1049. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/codex/codex-settings.js +99 -0
  1050. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/codex/codex.d.ts +4 -0
  1051. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/codex/codex.js +30 -0
  1052. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/opencode/opencode-plugin.d.ts +4 -0
  1053. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/opencode/opencode-plugin.js +46 -0
  1054. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/opencode/opencode.d.ts +3 -0
  1055. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/opencode/opencode.js +23 -0
  1056. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/provider-registry.d.ts +24 -0
  1057. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/provider-registry.js +36 -0
  1058. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.d.ts +10 -0
  1059. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.js +26 -0
  1060. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
  1061. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/shell-integration/zsh/byspace-integration.zsh +32 -0
  1062. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-capture.d.ts +12 -0
  1063. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-capture.js +43 -0
  1064. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-manager-factory.d.ts +6 -0
  1065. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-manager-factory.js +5 -0
  1066. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-manager.d.ts +80 -0
  1067. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-manager.js +321 -0
  1068. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-output-coalescer.d.ts +34 -0
  1069. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-output-coalescer.js +73 -0
  1070. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-restore.d.ts +18 -0
  1071. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-restore.js +52 -0
  1072. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-session-controller.d.ts +85 -0
  1073. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-session-controller.js +821 -0
  1074. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-ts-loader.mjs +20 -0
  1075. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-worker-process.d.ts +2 -0
  1076. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-worker-process.js +304 -0
  1077. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-worker-protocol.d.ts +121 -0
  1078. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-worker-protocol.js +2 -0
  1079. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal.d.ts +151 -0
  1080. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal.js +1157 -0
  1081. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/worker-terminal-manager.d.ts +20 -0
  1082. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/worker-terminal-manager.js +688 -0
  1083. package/node_modules/@bytetrue/byspace-server/dist/server/utils/build-metadata-prompt.d.ts +19 -0
  1084. package/node_modules/@bytetrue/byspace-server/dist/server/utils/build-metadata-prompt.js +29 -0
  1085. package/node_modules/@bytetrue/byspace-server/dist/server/utils/byspace-config-file.d.ts +30 -0
  1086. package/node_modules/@bytetrue/byspace-server/dist/server/utils/byspace-config-file.js +90 -0
  1087. package/node_modules/@bytetrue/byspace-server/dist/server/utils/checkout-git.d.ts +253 -0
  1088. package/node_modules/@bytetrue/byspace-server/dist/server/utils/checkout-git.js +2238 -0
  1089. package/node_modules/@bytetrue/byspace-server/dist/server/utils/directory-suggestions.d.ts +28 -0
  1090. package/node_modules/@bytetrue/byspace-server/dist/server/utils/directory-suggestions.js +473 -0
  1091. package/node_modules/@bytetrue/byspace-server/dist/server/utils/git-rev-parse-path.d.ts +3 -0
  1092. package/node_modules/@bytetrue/byspace-server/dist/server/utils/git-rev-parse-path.js +21 -0
  1093. package/node_modules/@bytetrue/byspace-server/dist/server/utils/github-remote.d.ts +9 -0
  1094. package/node_modules/@bytetrue/byspace-server/dist/server/utils/github-remote.js +62 -0
  1095. package/node_modules/@bytetrue/byspace-server/dist/server/utils/path.d.ts +18 -0
  1096. package/node_modules/@bytetrue/byspace-server/dist/server/utils/path.js +123 -0
  1097. package/node_modules/@bytetrue/byspace-server/dist/server/utils/project-icon.d.ts +39 -0
  1098. package/node_modules/@bytetrue/byspace-server/dist/server/utils/project-icon.js +364 -0
  1099. package/node_modules/@bytetrue/byspace-server/dist/server/utils/promise-timeout.d.ts +9 -0
  1100. package/node_modules/@bytetrue/byspace-server/dist/server/utils/promise-timeout.js +25 -0
  1101. package/node_modules/@bytetrue/byspace-server/dist/server/utils/run-git-command.d.ts +37 -0
  1102. package/node_modules/@bytetrue/byspace-server/dist/server/utils/run-git-command.js +232 -0
  1103. package/node_modules/@bytetrue/byspace-server/dist/server/utils/spawn.d.ts +25 -0
  1104. package/node_modules/@bytetrue/byspace-server/dist/server/utils/spawn.js +59 -0
  1105. package/node_modules/@bytetrue/byspace-server/dist/server/utils/string-command-shell.d.ts +13 -0
  1106. package/node_modules/@bytetrue/byspace-server/dist/server/utils/string-command-shell.js +37 -0
  1107. package/node_modules/@bytetrue/byspace-server/dist/server/utils/tree-kill.d.ts +18 -0
  1108. package/node_modules/@bytetrue/byspace-server/dist/server/utils/tree-kill.js +77 -0
  1109. package/node_modules/@bytetrue/byspace-server/dist/server/utils/windows-command.d.ts +15 -0
  1110. package/node_modules/@bytetrue/byspace-server/dist/server/utils/windows-command.js +41 -0
  1111. package/node_modules/@bytetrue/byspace-server/dist/server/utils/worktree-metadata.d.ts +39 -0
  1112. package/node_modules/@bytetrue/byspace-server/dist/server/utils/worktree-metadata.js +174 -0
  1113. package/node_modules/@bytetrue/byspace-server/dist/server/utils/worktree.d.ts +205 -0
  1114. package/node_modules/@bytetrue/byspace-server/dist/server/utils/worktree.js +1129 -0
  1115. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
  1116. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
  1117. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
  1118. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-09af1f9a582567d448f8e2abd4a93265.js +15938 -0
  1119. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-09af1f9a582567d448f8e2abd4a93265.js.br +0 -0
  1120. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-09af1f9a582567d448f8e2abd4a93265.js.gz +0 -0
  1121. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-2ee2179f5dd960ab4ac4484c6858cb23.js +1 -0
  1122. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-2ee2179f5dd960ab4ac4484c6858cb23.js.br +0 -0
  1123. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-2ee2179f5dd960ab4ac4484c6858cb23.js.gz +0 -0
  1124. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/apple-touch-icon.png +0 -0
  1125. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
  1126. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
  1127. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
  1128. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
  1129. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
  1130. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
  1131. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
  1132. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
  1133. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
  1134. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
  1135. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
  1136. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
  1137. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
  1138. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
  1139. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
  1140. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
  1141. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
  1142. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
  1143. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  1144. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  1145. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  1146. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  1147. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  1148. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  1149. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
  1150. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/favicon.ico +0 -0
  1151. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html +91 -0
  1152. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html.br +0 -0
  1153. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html.gz +0 -0
  1154. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/manifest.json +27 -0
  1155. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/manifest.json.br +0 -0
  1156. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/manifest.json.gz +0 -0
  1157. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/metadata.json +1 -0
  1158. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/metadata.json.br +1 -0
  1159. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/metadata.json.gz +0 -0
  1160. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/pwa-icon-192.png +0 -0
  1161. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/pwa-icon-512.png +0 -0
  1162. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/robots.txt +2 -0
  1163. package/node_modules/@bytetrue/byspace-server/dist/src/executable-resolution/executable-resolution.js +118 -0
  1164. package/node_modules/@bytetrue/byspace-server/dist/src/executable-resolution/windows.js +65 -0
  1165. package/node_modules/@bytetrue/byspace-server/dist/src/server/agent/provider-launch-config.js +167 -0
  1166. package/node_modules/@bytetrue/byspace-server/dist/src/server/byspace-env.js +46 -0
  1167. package/node_modules/@bytetrue/byspace-server/dist/src/server/byspace-home.js +19 -0
  1168. package/node_modules/@bytetrue/byspace-server/dist/src/server/persisted-config.js +391 -0
  1169. package/node_modules/@bytetrue/byspace-server/dist/src/server/pid-lock.js +168 -0
  1170. package/node_modules/@bytetrue/byspace-server/dist/src/server/private-files.js +37 -0
  1171. package/node_modules/@bytetrue/byspace-server/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  1172. package/node_modules/@bytetrue/byspace-server/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
  1173. package/node_modules/@bytetrue/byspace-server/dist/src/terminal/shell-integration/zsh/byspace-integration.zsh +32 -0
  1174. package/node_modules/@bytetrue/byspace-server/dist/src/utils/spawn.js +59 -0
  1175. package/node_modules/@bytetrue/byspace-server/dist/src/utils/windows-command.js +41 -0
  1176. package/node_modules/@bytetrue/byspace-server/package.json +119 -0
  1177. package/package.json +110 -0
@@ -0,0 +1,3828 @@
1
+ import { CLIENT_CAPS } from "@bytetrue/byspace-protocol/client-capabilities";
2
+ import { AgentCreateFailedStatusPayloadSchema, AgentCreatedStatusPayloadSchema, AgentRefreshedStatusPayloadSchema, AgentResumedStatusPayloadSchema, parseServerInfoStatusPayload, RestartRequestedStatusPayloadSchema, ShutdownRequestedStatusPayloadSchema, DaemonUpdateResponseSchema, SessionInboundMessageSchema, } from "@bytetrue/byspace-protocol/messages";
3
+ import { validateWSOutboundMessage } from "@bytetrue/byspace-protocol/validation/ws-outbound";
4
+ import { isRelayClientWebSocketUrl } from "@bytetrue/byspace-protocol/daemon-endpoints";
5
+ import { terminalSubscriptionKey } from "@bytetrue/byspace-protocol/terminal-subscription-key";
6
+ import { asUint8Array, decodeFileTransferFrame, encodeFileTransferFrame, decodeTerminalStreamFrame, FileTransferOpcode, TerminalStreamOpcode, } from "@bytetrue/byspace-protocol/binary-frames/index";
7
+ import { createRelayE2eeTransportFactory, createWebSocketTransportFactory, decodeMessageData, defaultWebSocketFactory, describeTransportClose, describeTransportError, } from "./daemon-client-transport.js";
8
+ import { DaemonClientRuntimeMetrics } from "./daemon-client-runtime-metrics.js";
9
+ import { normalizeListProviderModelsPayload, normalizeProviderSnapshotUpdateMessage, normalizeProvidersSnapshotPayload, } from "./compat/normalize-provider-models.js";
10
+ import { TerminalStreamRouter } from "./terminal-stream-router.js";
11
+ const consoleLogger = {
12
+ debug: () => { },
13
+ info: (obj, msg) => console.log(msg, obj),
14
+ warn: (obj, msg) => console.warn(msg, obj),
15
+ error: (obj, msg) => console.error(msg, obj),
16
+ };
17
+ const perfNow = typeof performance !== "undefined" && typeof performance.now === "function"
18
+ ? () => performance.now()
19
+ : () => Date.now();
20
+ const WORKSPACE_GITHUB_CLONE_TIMEOUT_MS = 5 * 60 * 1000;
21
+ function normalizePassword(value) {
22
+ if (typeof value !== "string") {
23
+ return null;
24
+ }
25
+ return value.length > 0 ? value : null;
26
+ }
27
+ // COMPAT(daemon-client-object-options): added in v0.1.102; remove after
28
+ // 2026-12-29 once SDK callers have migrated to object parameters.
29
+ function normalizeFetchAgentOptions(input, legacyOptions) {
30
+ if (typeof input !== "string") {
31
+ return input;
32
+ }
33
+ if (typeof legacyOptions === "string") {
34
+ return { agentId: input, requestId: legacyOptions };
35
+ }
36
+ return { agentId: input, ...legacyOptions };
37
+ }
38
+ function normalizeListCommandsOptions(input, legacyOptions) {
39
+ if (typeof input !== "string") {
40
+ return input;
41
+ }
42
+ if (typeof legacyOptions === "string") {
43
+ return { agentId: input, requestId: legacyOptions };
44
+ }
45
+ return { agentId: input, ...legacyOptions };
46
+ }
47
+ class DaemonRpcError extends Error {
48
+ constructor(params) {
49
+ const parts = [params.error];
50
+ if (params.requestType)
51
+ parts.push(`requestType=${params.requestType}`);
52
+ if (params.code)
53
+ parts.push(`code=${params.code}`);
54
+ super(parts.join(" "));
55
+ this.name = "DaemonRpcError";
56
+ this.requestId = params.requestId;
57
+ this.requestType = params.requestType;
58
+ this.code = params.code;
59
+ }
60
+ }
61
+ class PingTimeoutError extends Error {
62
+ constructor(timeoutMs) {
63
+ super(`Ping timed out (${timeoutMs}ms)`);
64
+ this.timeoutMs = timeoutMs;
65
+ this.name = "PingTimeoutError";
66
+ }
67
+ }
68
+ function toTimeoutError(error, label, timeoutMs) {
69
+ if (error instanceof PingTimeoutError) {
70
+ return new Error(`${label} timed out (${timeoutMs}ms)`);
71
+ }
72
+ return error instanceof Error ? error : new Error(String(error));
73
+ }
74
+ const DEFAULT_RECONNECT_BASE_DELAY_MS = 1500;
75
+ const DEFAULT_RECONNECT_MAX_DELAY_MS = 30000;
76
+ const DEFAULT_SESSION_RPC_TIMEOUT_MS = 60000;
77
+ const DEFAULT_CONNECT_TIMEOUT_MS = 15000;
78
+ const DEFAULT_LIVENESS_TIMEOUT_MS = 5000;
79
+ const LIVENESS_HEARTBEAT_INTERVAL_MS = 10000;
80
+ const LIVENESS_HEARTBEAT_TIMEOUT_MS = 15000;
81
+ const LIVENESS_FAILURE_RECONNECT_THRESHOLD = 2;
82
+ /** Default timeout for waiting for connection before sending queued messages */
83
+ const DEFAULT_SEND_QUEUE_TIMEOUT_MS = DEFAULT_SESSION_RPC_TIMEOUT_MS;
84
+ const DEFAULT_DICTATION_FINISH_ACCEPT_TIMEOUT_MS = DEFAULT_SESSION_RPC_TIMEOUT_MS;
85
+ const DEFAULT_DICTATION_FINISH_FALLBACK_TIMEOUT_MS = 5 * 60 * 1000;
86
+ const DEFAULT_DICTATION_FINISH_TIMEOUT_GRACE_MS = 5000;
87
+ function isWaiterTimeoutError(error) {
88
+ return error instanceof Error && error.message.startsWith("Timeout waiting for message");
89
+ }
90
+ function normalizeClientId(value) {
91
+ if (typeof value !== "string") {
92
+ return null;
93
+ }
94
+ const trimmed = value.trim();
95
+ return trimmed.length > 0 ? trimmed : null;
96
+ }
97
+ function decodeBase64ToBytes(base64) {
98
+ const binary = globalThis.atob(base64);
99
+ const bytes = new Uint8Array(binary.length);
100
+ for (let index = 0; index < binary.length; index += 1) {
101
+ bytes[index] = binary.charCodeAt(index);
102
+ }
103
+ return bytes;
104
+ }
105
+ function legacyExplorerFileToBytes(file) {
106
+ let bytes;
107
+ if (file.encoding === "base64" && file.content) {
108
+ bytes = decodeBase64ToBytes(file.content);
109
+ }
110
+ else if (file.encoding === "utf-8" && file.content) {
111
+ bytes = new TextEncoder().encode(file.content);
112
+ }
113
+ else {
114
+ bytes = new Uint8Array();
115
+ }
116
+ return {
117
+ bytes,
118
+ mime: file.mimeType ?? "application/octet-stream",
119
+ size: file.size,
120
+ path: file.path,
121
+ kind: file.kind,
122
+ modifiedAt: file.modifiedAt,
123
+ };
124
+ }
125
+ function binaryFileKind(mime, encoding) {
126
+ if (mime.startsWith("image/")) {
127
+ return "image";
128
+ }
129
+ if (encoding === "utf-8" || mime.startsWith("text/") || mime === "application/json") {
130
+ return "text";
131
+ }
132
+ return "binary";
133
+ }
134
+ function concatByteChunks(chunks, size) {
135
+ const bytes = new Uint8Array(size);
136
+ let offset = 0;
137
+ for (const chunk of chunks) {
138
+ bytes.set(chunk, offset);
139
+ offset += chunk.byteLength;
140
+ }
141
+ return bytes;
142
+ }
143
+ function hashForLog(value) {
144
+ let hash = 0;
145
+ for (let index = 0; index < value.length; index += 1) {
146
+ hash = (hash * 31 + value.charCodeAt(index)) | 0;
147
+ }
148
+ return `h_${Math.abs(hash).toString(16)}`;
149
+ }
150
+ function toReasonCode(reason) {
151
+ if (!reason) {
152
+ return null;
153
+ }
154
+ const normalized = reason.toLowerCase();
155
+ if (normalized.includes("timed out")) {
156
+ return "connect_timeout";
157
+ }
158
+ if (normalized.includes("disposed")) {
159
+ return "disposed";
160
+ }
161
+ if (normalized.includes("client closed")) {
162
+ return "client_closed";
163
+ }
164
+ if (normalized.includes("transport")) {
165
+ return "transport_error";
166
+ }
167
+ if (normalized.includes("failed to connect")) {
168
+ return "connect_failed";
169
+ }
170
+ return "unknown";
171
+ }
172
+ export class DaemonClient {
173
+ constructor(config) {
174
+ this.config = config;
175
+ this.transport = null;
176
+ this.transportCleanup = [];
177
+ this.rawMessageListeners = new Set();
178
+ this.messageHandlers = new Map();
179
+ this.eventListeners = new Set();
180
+ this.waiters = new Set();
181
+ this.checkoutStatusInFlight = new Map();
182
+ this.connectionListeners = new Set();
183
+ this.reconnectTimeout = null;
184
+ this.connectTimeout = null;
185
+ this.pendingGenericTransportErrorTimeout = null;
186
+ this.reconnectAttempt = 0;
187
+ this.shouldReconnect = true;
188
+ this.connectPromise = null;
189
+ this.connectResolve = null;
190
+ this.connectReject = null;
191
+ this.lastErrorValue = null;
192
+ this.connectionState = { status: "idle" };
193
+ this.checkoutDiffSubscriptions = new Map();
194
+ this.terminalDirectorySubscriptions = new Map();
195
+ this.terminalStreams = new TerminalStreamRouter();
196
+ this.pendingBinaryFileReads = new Map();
197
+ this.activeBinaryFileTransfers = new Map();
198
+ this.completedBinaryFileReads = new Map();
199
+ this.pendingSendQueue = [];
200
+ this.lastServerInfoMessage = null;
201
+ this.runtimeMetricsInterval = null;
202
+ this.runtimeMetrics = null;
203
+ this.pingProbe = null;
204
+ this.livenessHeartbeatTimer = null;
205
+ this.lastLivenessRttMs = null;
206
+ this.consecutiveLivenessFailures = 0;
207
+ this.logger = config.logger ?? consoleLogger;
208
+ this.logConnectionPath = isRelayClientWebSocketUrl(this.config.url) ? "relay" : "direct";
209
+ let parsedUrlForLog = null;
210
+ try {
211
+ parsedUrlForLog = new URL(this.config.url);
212
+ }
213
+ catch {
214
+ parsedUrlForLog = null;
215
+ }
216
+ const parsedServerIdForLog = normalizeClientId(parsedUrlForLog?.searchParams.get("serverId"));
217
+ this.logServerId = parsedServerIdForLog ?? parsedUrlForLog?.host ?? null;
218
+ const resolvedClientId = normalizeClientId(this.config.clientId);
219
+ if (!resolvedClientId) {
220
+ throw new Error("Daemon client requires a non-empty clientId");
221
+ }
222
+ this.config.clientId = resolvedClientId;
223
+ this.logClientIdHash = hashForLog(resolvedClientId);
224
+ this.logGeneration =
225
+ typeof this.config.runtimeGeneration === "number" &&
226
+ Number.isFinite(this.config.runtimeGeneration)
227
+ ? this.config.runtimeGeneration
228
+ : null;
229
+ const runtimeMetricsIntervalMs = typeof config.runtimeMetricsIntervalMs === "number" && config.runtimeMetricsIntervalMs > 0
230
+ ? config.runtimeMetricsIntervalMs
231
+ : 0;
232
+ if (runtimeMetricsIntervalMs > 0) {
233
+ const runtimeMetricsWindowMs = typeof config.runtimeMetricsWindowMs === "number" && config.runtimeMetricsWindowMs > 0
234
+ ? Math.max(config.runtimeMetricsWindowMs, runtimeMetricsIntervalMs)
235
+ : undefined;
236
+ this.runtimeMetrics = new DaemonClientRuntimeMetrics(this.logger, {
237
+ connectionPath: this.logConnectionPath,
238
+ serverId: this.logServerId,
239
+ getConnectionStatus: () => this.connectionState.status,
240
+ }, runtimeMetricsWindowMs ? { windowMs: runtimeMetricsWindowMs } : undefined);
241
+ this.runtimeMetricsInterval = setInterval(() => {
242
+ this.runtimeMetrics?.flush();
243
+ }, runtimeMetricsIntervalMs);
244
+ }
245
+ }
246
+ // ============================================================================
247
+ // Connection
248
+ // ============================================================================
249
+ async connect() {
250
+ if (this.connectionState.status === "disposed") {
251
+ throw new Error("Daemon client is disposed");
252
+ }
253
+ if (this.connectionState.status === "connected") {
254
+ return;
255
+ }
256
+ if (this.connectPromise) {
257
+ return this.connectPromise;
258
+ }
259
+ this.shouldReconnect = true;
260
+ this.connectPromise = new Promise((resolve, reject) => {
261
+ this.connectResolve = resolve;
262
+ this.connectReject = reject;
263
+ this.attemptConnect();
264
+ });
265
+ return this.connectPromise;
266
+ }
267
+ attemptConnect() {
268
+ if (this.connectionState.status === "disposed") {
269
+ this.rejectConnect(new Error("Daemon client is disposed"));
270
+ return;
271
+ }
272
+ if (!this.shouldReconnect) {
273
+ this.rejectConnect(new Error("Daemon client is closed"));
274
+ return;
275
+ }
276
+ if (this.connectionState.status === "connecting") {
277
+ return;
278
+ }
279
+ const headers = {};
280
+ const password = normalizePassword(this.config.password);
281
+ if (password) {
282
+ headers.Authorization = `Bearer ${password}`;
283
+ }
284
+ else if (this.config.authHeader) {
285
+ headers.Authorization = this.config.authHeader;
286
+ }
287
+ const protocols = password ? [`byspace.bearer.${password}`] : undefined;
288
+ try {
289
+ // Reconnect can overlap with browser close/error delivery ordering.
290
+ // Always dispose previous transport before constructing the next one.
291
+ this.disposeTransport();
292
+ const baseTransportFactory = this.config.transportFactory ??
293
+ createWebSocketTransportFactory(this.config.webSocketFactory ?? defaultWebSocketFactory);
294
+ const shouldUseRelayE2ee = this.config.e2ee?.enabled === true && isRelayClientWebSocketUrl(this.config.url);
295
+ let transportFactory = baseTransportFactory;
296
+ if (shouldUseRelayE2ee) {
297
+ const daemonPublicKeyB64 = this.config.e2ee?.daemonPublicKeyB64;
298
+ if (!daemonPublicKeyB64) {
299
+ throw new Error("daemonPublicKeyB64 is required for relay E2EE");
300
+ }
301
+ transportFactory = createRelayE2eeTransportFactory({
302
+ baseFactory: baseTransportFactory,
303
+ daemonPublicKeyB64,
304
+ logger: this.logger,
305
+ });
306
+ }
307
+ const transportUrl = this.resolveTransportUrlForAttempt();
308
+ const transport = transportFactory({
309
+ url: transportUrl,
310
+ headers,
311
+ ...(protocols ? { protocols } : {}),
312
+ });
313
+ this.transport = transport;
314
+ this.lastServerInfoMessage = null;
315
+ this.updateConnectionState({
316
+ status: "connecting",
317
+ attempt: this.reconnectAttempt,
318
+ }, { event: "CONNECT_REQUEST" });
319
+ this.resetConnectTimeout();
320
+ const timeoutMs = Math.max(1, this.config.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS);
321
+ this.connectTimeout = setTimeout(() => {
322
+ if (this.connectionState.status !== "connecting") {
323
+ return;
324
+ }
325
+ this.lastErrorValue = "Connection timed out";
326
+ this.disposeTransport(1001, "Connection timed out");
327
+ this.scheduleReconnect({
328
+ reason: "Connection timed out",
329
+ event: "CONNECT_TIMEOUT",
330
+ reasonCode: "connect_timeout",
331
+ });
332
+ }, timeoutMs);
333
+ this.transportCleanup = [
334
+ transport.onOpen(() => {
335
+ if (this.pendingGenericTransportErrorTimeout) {
336
+ clearTimeout(this.pendingGenericTransportErrorTimeout);
337
+ this.pendingGenericTransportErrorTimeout = null;
338
+ }
339
+ this.lastErrorValue = null;
340
+ this.sendHelloMessage();
341
+ }),
342
+ transport.onClose((event) => {
343
+ this.resetConnectTimeout();
344
+ if (this.pendingGenericTransportErrorTimeout) {
345
+ clearTimeout(this.pendingGenericTransportErrorTimeout);
346
+ this.pendingGenericTransportErrorTimeout = null;
347
+ }
348
+ const reason = describeTransportClose(event);
349
+ if (reason) {
350
+ this.lastErrorValue = reason;
351
+ }
352
+ this.scheduleReconnect({
353
+ reason,
354
+ event: "TRANSPORT_CLOSE",
355
+ reasonCode: "transport_closed",
356
+ });
357
+ }),
358
+ transport.onError((event) => {
359
+ this.resetConnectTimeout();
360
+ const reason = describeTransportError(event);
361
+ const isGeneric = reason === "Transport error";
362
+ // Browser WebSocket.onerror often provides no useful details and is followed
363
+ // by a close event (often with code 1006). Prefer surfacing the close details
364
+ // instead of immediately disconnecting with a generic "Transport error".
365
+ if (isGeneric) {
366
+ this.lastErrorValue ?? (this.lastErrorValue = reason);
367
+ if (!this.pendingGenericTransportErrorTimeout) {
368
+ this.pendingGenericTransportErrorTimeout = setTimeout(() => {
369
+ this.pendingGenericTransportErrorTimeout = null;
370
+ if (this.connectionState.status === "connected" ||
371
+ this.connectionState.status === "connecting") {
372
+ this.lastErrorValue = reason;
373
+ this.scheduleReconnect({
374
+ reason,
375
+ event: "TRANSPORT_ERROR",
376
+ reasonCode: "transport_error",
377
+ });
378
+ }
379
+ }, 250);
380
+ }
381
+ return;
382
+ }
383
+ if (this.pendingGenericTransportErrorTimeout) {
384
+ clearTimeout(this.pendingGenericTransportErrorTimeout);
385
+ this.pendingGenericTransportErrorTimeout = null;
386
+ }
387
+ this.lastErrorValue = reason;
388
+ this.scheduleReconnect({
389
+ reason,
390
+ event: "TRANSPORT_ERROR",
391
+ reasonCode: "transport_error",
392
+ });
393
+ }),
394
+ transport.onMessage((data) => this.handleTransportMessage(data)),
395
+ ];
396
+ }
397
+ catch (error) {
398
+ this.resetConnectTimeout();
399
+ const message = error instanceof Error ? error.message : "Failed to connect";
400
+ this.lastErrorValue = message;
401
+ this.scheduleReconnect({
402
+ reason: message,
403
+ event: "CONNECT_FAILED",
404
+ reasonCode: "connect_failed",
405
+ });
406
+ this.rejectConnect(error instanceof Error ? error : new Error(message));
407
+ }
408
+ }
409
+ resolveConnect() {
410
+ if (this.connectResolve) {
411
+ this.connectResolve();
412
+ }
413
+ this.connectPromise = null;
414
+ this.connectResolve = null;
415
+ this.connectReject = null;
416
+ }
417
+ rejectConnect(error) {
418
+ if (this.connectReject) {
419
+ this.connectReject(error);
420
+ }
421
+ this.connectPromise = null;
422
+ this.connectResolve = null;
423
+ this.connectReject = null;
424
+ }
425
+ async close() {
426
+ if (this.connectionState.status === "disposed") {
427
+ return;
428
+ }
429
+ this.shouldReconnect = false;
430
+ this.connectPromise = null;
431
+ this.connectResolve = null;
432
+ this.connectReject = null;
433
+ if (this.reconnectTimeout) {
434
+ clearTimeout(this.reconnectTimeout);
435
+ this.reconnectTimeout = null;
436
+ }
437
+ this.resetConnectTimeout();
438
+ this.disposeTransport(1000, "Client closed");
439
+ this.clearWaiters(new Error("Daemon client closed"));
440
+ this.rejectPendingSendQueue(new Error("Daemon client closed"));
441
+ this.rejectPingProbe(new Error("Daemon client closed"));
442
+ this.terminalStreams.clearSlots();
443
+ this.lastServerInfoMessage = null;
444
+ if (this.runtimeMetricsInterval) {
445
+ clearInterval(this.runtimeMetricsInterval);
446
+ this.runtimeMetricsInterval = null;
447
+ this.runtimeMetrics?.flush({ final: true });
448
+ this.runtimeMetrics = null;
449
+ }
450
+ this.updateConnectionState({ status: "disposed" }, { event: "DISPOSE", reason: "Client closed", reasonCode: "disposed" });
451
+ }
452
+ ensureConnected() {
453
+ if (this.connectionState.status === "disposed") {
454
+ return;
455
+ }
456
+ if (!this.shouldReconnect) {
457
+ this.shouldReconnect = true;
458
+ }
459
+ if (this.connectionState.status === "connected" ||
460
+ this.connectionState.status === "connecting") {
461
+ return;
462
+ }
463
+ void this.connect();
464
+ }
465
+ getConnectionState() {
466
+ return this.connectionState;
467
+ }
468
+ subscribeConnectionStatus(listener) {
469
+ this.connectionListeners.add(listener);
470
+ listener(this.connectionState);
471
+ return () => {
472
+ this.connectionListeners.delete(listener);
473
+ };
474
+ }
475
+ get isConnected() {
476
+ return this.connectionState.status === "connected";
477
+ }
478
+ get isConnecting() {
479
+ return this.connectionState.status === "connecting";
480
+ }
481
+ get lastError() {
482
+ return this.lastErrorValue;
483
+ }
484
+ getLastLivenessRttMs() {
485
+ return this.lastLivenessRttMs;
486
+ }
487
+ // ============================================================================
488
+ // Message Subscription
489
+ // ============================================================================
490
+ subscribe(handler) {
491
+ this.eventListeners.add(handler);
492
+ return () => this.eventListeners.delete(handler);
493
+ }
494
+ subscribeRawMessages(handler) {
495
+ this.rawMessageListeners.add(handler);
496
+ return () => {
497
+ this.rawMessageListeners.delete(handler);
498
+ };
499
+ }
500
+ on(arg1, arg2) {
501
+ if (typeof arg1 === "function") {
502
+ return this.subscribe(arg1);
503
+ }
504
+ const type = arg1;
505
+ const handler = arg2;
506
+ if (!this.messageHandlers.has(type)) {
507
+ this.messageHandlers.set(type, new Set());
508
+ }
509
+ this.messageHandlers.get(type).add(handler);
510
+ return () => {
511
+ const handlers = this.messageHandlers.get(type);
512
+ if (!handlers) {
513
+ return;
514
+ }
515
+ handlers.delete(handler);
516
+ if (handlers.size === 0) {
517
+ this.messageHandlers.delete(type);
518
+ }
519
+ };
520
+ }
521
+ // ============================================================================
522
+ // Core Send Helpers
523
+ // ============================================================================
524
+ /**
525
+ * Send a session message. For fire-and-forget messages (heartbeats, etc.),
526
+ * failures are suppressed if `suppressSendErrors` is configured.
527
+ * For RPC methods that wait for responses, use `sendSessionMessageOrThrow` instead.
528
+ */
529
+ sendSessionMessage(message) {
530
+ if (!this.transport || this.connectionState.status !== "connected") {
531
+ if (this.config.suppressSendErrors) {
532
+ return;
533
+ }
534
+ throw new Error(`Transport not connected (status: ${this.connectionState.status})`);
535
+ }
536
+ const payload = SessionInboundMessageSchema.parse(message);
537
+ try {
538
+ this.transport.send(JSON.stringify({ type: "session", message: payload }));
539
+ }
540
+ catch (error) {
541
+ if (this.config.suppressSendErrors) {
542
+ return;
543
+ }
544
+ throw error instanceof Error ? error : new Error(String(error));
545
+ }
546
+ }
547
+ sendBinaryFrame(frame) {
548
+ if (!this.transport || this.connectionState.status !== "connected") {
549
+ if (this.config.suppressSendErrors) {
550
+ return;
551
+ }
552
+ throw new Error(`Transport not connected (status: ${this.connectionState.status})`);
553
+ }
554
+ try {
555
+ this.transport.send(frame);
556
+ }
557
+ catch (error) {
558
+ if (this.config.suppressSendErrors) {
559
+ return;
560
+ }
561
+ throw error instanceof Error ? error : new Error(String(error));
562
+ }
563
+ }
564
+ /**
565
+ * Send a session message for RPC methods that create waiters.
566
+ * If the connection is still being established ("connecting"), the message
567
+ * is queued and will be sent once connected (or rejected after timeout).
568
+ * This prevents waiters from hanging forever when called during connection.
569
+ */
570
+ sendSessionMessageOrThrow(message) {
571
+ const status = this.connectionState.status;
572
+ // If connected, send immediately
573
+ if (this.transport && status === "connected") {
574
+ const payload = SessionInboundMessageSchema.parse(message);
575
+ this.transport.send(JSON.stringify({ type: "session", message: payload }));
576
+ return Promise.resolve();
577
+ }
578
+ // If connecting, queue the message to be sent once connected
579
+ if (status === "connecting") {
580
+ return new Promise((resolve, reject) => {
581
+ const timeoutHandle = setTimeout(() => {
582
+ // Remove from queue
583
+ const idx = this.pendingSendQueue.findIndex((p) => p.resolve === resolve);
584
+ if (idx !== -1) {
585
+ this.pendingSendQueue.splice(idx, 1);
586
+ }
587
+ reject(new Error(`Timed out waiting for connection to send message`));
588
+ }, DEFAULT_SEND_QUEUE_TIMEOUT_MS);
589
+ this.pendingSendQueue.push({ message, resolve, reject, timeoutHandle });
590
+ });
591
+ }
592
+ // Not connected and not connecting - fail immediately
593
+ return Promise.reject(new Error(`Transport not connected (status: ${status})`));
594
+ }
595
+ /**
596
+ * Flush pending send queue - called when connection is established.
597
+ */
598
+ flushPendingSendQueue() {
599
+ const queue = this.pendingSendQueue;
600
+ this.pendingSendQueue = [];
601
+ for (const pending of queue) {
602
+ clearTimeout(pending.timeoutHandle);
603
+ try {
604
+ if (this.transport && this.connectionState.status === "connected") {
605
+ const payload = SessionInboundMessageSchema.parse(pending.message);
606
+ this.transport.send(JSON.stringify({ type: "session", message: payload }));
607
+ pending.resolve();
608
+ }
609
+ else {
610
+ pending.reject(new Error("Connection lost before message could be sent"));
611
+ }
612
+ }
613
+ catch (error) {
614
+ pending.reject(error instanceof Error ? error : new Error(String(error)));
615
+ }
616
+ }
617
+ }
618
+ /**
619
+ * Reject all pending sends - called when connection fails or is closed.
620
+ */
621
+ rejectPendingSendQueue(error) {
622
+ const queue = this.pendingSendQueue;
623
+ this.pendingSendQueue = [];
624
+ for (const pending of queue) {
625
+ clearTimeout(pending.timeoutHandle);
626
+ pending.reject(error);
627
+ }
628
+ }
629
+ async sendRequest(params) {
630
+ const timeout = params.timeout ?? DEFAULT_SESSION_RPC_TIMEOUT_MS;
631
+ const { promise, cancel } = this.waitForWithCancel((msg) => {
632
+ if (msg.type === "rpc_error" && msg.payload.requestId === params.requestId) {
633
+ return {
634
+ kind: "error",
635
+ error: new DaemonRpcError({
636
+ requestId: msg.payload.requestId,
637
+ error: msg.payload.error,
638
+ requestType: msg.payload.requestType,
639
+ code: msg.payload.code,
640
+ }),
641
+ };
642
+ }
643
+ const value = params.select(msg);
644
+ if (value === null) {
645
+ return null;
646
+ }
647
+ return { kind: "ok", value };
648
+ }, timeout, params.options);
649
+ try {
650
+ await this.sendSessionMessageOrThrow(params.message);
651
+ }
652
+ catch (error) {
653
+ const err = error instanceof Error ? error : new Error(String(error));
654
+ cancel(err);
655
+ void promise.catch(() => undefined);
656
+ throw err;
657
+ }
658
+ const result = await promise;
659
+ if (result.kind === "error") {
660
+ throw result.error;
661
+ }
662
+ return result.value;
663
+ }
664
+ async sendCorrelatedRequest(params) {
665
+ return this.sendRequest({
666
+ requestId: params.requestId,
667
+ message: params.message,
668
+ timeout: params.timeout,
669
+ options: params.options,
670
+ select: (msg) => {
671
+ const correlated = msg;
672
+ if (correlated.type !== params.responseType) {
673
+ return null;
674
+ }
675
+ const payload = correlated.payload;
676
+ if (payload.requestId !== params.requestId) {
677
+ return null;
678
+ }
679
+ if (!params.selectPayload) {
680
+ return payload;
681
+ }
682
+ return params.selectPayload(payload);
683
+ },
684
+ });
685
+ }
686
+ sendCorrelatedSessionRequest(params) {
687
+ const resolvedRequestId = this.createRequestId(params.requestId);
688
+ const message = SessionInboundMessageSchema.parse({
689
+ ...params.message,
690
+ requestId: resolvedRequestId,
691
+ });
692
+ return this.sendCorrelatedRequest({
693
+ requestId: resolvedRequestId,
694
+ message,
695
+ responseType: params.responseType,
696
+ timeout: params.timeout,
697
+ options: { skipQueue: true },
698
+ ...(params.selectPayload ? { selectPayload: params.selectPayload } : {}),
699
+ });
700
+ }
701
+ sendNamespacedCorrelatedSessionRequest(params) {
702
+ const responseType = params.message.type.replace(/\.request$/, ".response");
703
+ return this.sendCorrelatedSessionRequest({
704
+ ...params,
705
+ responseType,
706
+ });
707
+ }
708
+ sendSessionMessageStrict(message) {
709
+ if (!this.transport || this.connectionState.status !== "connected") {
710
+ throw new Error("Transport not connected");
711
+ }
712
+ const payload = SessionInboundMessageSchema.parse(message);
713
+ try {
714
+ this.transport.send(JSON.stringify({ type: "session", message: payload }));
715
+ }
716
+ catch (error) {
717
+ throw error instanceof Error ? error : new Error(String(error));
718
+ }
719
+ }
720
+ async clearAgentAttention(agentId) {
721
+ const requestId = this.createRequestId();
722
+ const message = SessionInboundMessageSchema.parse({
723
+ type: "clear_agent_attention",
724
+ agentId,
725
+ requestId,
726
+ });
727
+ await this.sendRequest({
728
+ requestId,
729
+ message,
730
+ options: { skipQueue: true },
731
+ select: (msg) => {
732
+ if (msg.type !== "clear_agent_attention_response") {
733
+ return null;
734
+ }
735
+ if (msg.payload.requestId !== requestId) {
736
+ return null;
737
+ }
738
+ return msg.payload;
739
+ },
740
+ });
741
+ }
742
+ async clearWorkspaceAttention(workspaceId) {
743
+ const requestId = this.createRequestId();
744
+ const message = SessionInboundMessageSchema.parse({
745
+ type: "workspace.clear_attention.request",
746
+ workspaceId,
747
+ requestId,
748
+ });
749
+ const response = await this.sendRequest({
750
+ requestId,
751
+ message,
752
+ options: { skipQueue: true },
753
+ select: (msg) => {
754
+ if (msg.type !== "workspace.clear_attention.response") {
755
+ return null;
756
+ }
757
+ if (msg.payload.requestId !== requestId) {
758
+ return null;
759
+ }
760
+ return msg.payload;
761
+ },
762
+ });
763
+ if (!response.success) {
764
+ throw new Error(response.error ?? "Failed to clear workspace attention");
765
+ }
766
+ }
767
+ sendHeartbeat(params) {
768
+ this.sendSessionMessage({
769
+ type: "client_heartbeat",
770
+ deviceType: params.deviceType,
771
+ focusedAgentId: params.focusedAgentId,
772
+ focusedTerminalId: params.focusedTerminalId ?? null,
773
+ lastActivityAt: params.lastActivityAt,
774
+ appVisible: params.appVisible,
775
+ appVisibilityChangedAt: params.appVisibilityChangedAt,
776
+ });
777
+ }
778
+ registerPushToken(token) {
779
+ this.sendSessionMessage({
780
+ type: "register_push_token",
781
+ token,
782
+ });
783
+ }
784
+ async ping(params) {
785
+ const requestId = params?.requestId ?? `ping-${Date.now()}-${Math.random().toString(36).slice(2)}`;
786
+ const clientSentAt = Date.now();
787
+ const payload = await this.sendRequest({
788
+ requestId,
789
+ message: { type: "ping", requestId, clientSentAt },
790
+ timeout: params?.timeoutMs ?? 5000,
791
+ select: (msg) => {
792
+ if (msg.type !== "pong")
793
+ return null;
794
+ if (msg.payload.requestId !== requestId)
795
+ return null;
796
+ if (typeof msg.payload.serverReceivedAt !== "number")
797
+ return null;
798
+ if (typeof msg.payload.serverSentAt !== "number")
799
+ return null;
800
+ return msg.payload;
801
+ },
802
+ });
803
+ return {
804
+ requestId,
805
+ clientSentAt,
806
+ serverReceivedAt: payload.serverReceivedAt,
807
+ serverSentAt: payload.serverSentAt,
808
+ rttMs: Date.now() - clientSentAt,
809
+ };
810
+ }
811
+ measureLatency(params) {
812
+ const timeoutMs = Math.max(1, params?.timeoutMs ?? DEFAULT_LIVENESS_TIMEOUT_MS);
813
+ return this.sendPingAwaitRtt({ timeoutMs, drivesLivenessFailure: false }).catch((error) => {
814
+ throw toTimeoutError(error, "Latency measurement", timeoutMs);
815
+ });
816
+ }
817
+ async livenessPing(params) {
818
+ const timeoutMs = Math.max(1, params?.timeoutMs ?? DEFAULT_LIVENESS_TIMEOUT_MS);
819
+ try {
820
+ const rttMs = await this.sendPingAwaitRtt({ timeoutMs, drivesLivenessFailure: true });
821
+ this.lastLivenessRttMs = rttMs;
822
+ return rttMs;
823
+ }
824
+ catch (error) {
825
+ throw toTimeoutError(error, "Liveness check", timeoutMs);
826
+ }
827
+ }
828
+ sendPingAwaitRtt(params) {
829
+ if (this.connectionState.status !== "connected" || !this.transport) {
830
+ return Promise.reject(new Error(`Transport not connected (status: ${this.connectionState.status})`));
831
+ }
832
+ if (this.pingProbe) {
833
+ return this.pingProbe.promise;
834
+ }
835
+ const startedAt = perfNow();
836
+ const timeoutMs = params.timeoutMs;
837
+ let resolveProbe = null;
838
+ let rejectProbe = null;
839
+ const promise = new Promise((resolve, reject) => {
840
+ resolveProbe = resolve;
841
+ rejectProbe = reject;
842
+ });
843
+ const probe = {
844
+ promise,
845
+ resolve: (value) => resolveProbe?.(value),
846
+ reject: (error) => rejectProbe?.(error),
847
+ timeoutHandle: setTimeout(() => {
848
+ if (this.pingProbe !== probe) {
849
+ return;
850
+ }
851
+ this.pingProbe = null;
852
+ const error = new PingTimeoutError(timeoutMs);
853
+ probe.reject(error);
854
+ if (probe.drivesLivenessFailure) {
855
+ this.recordLivenessFailure(toTimeoutError(error, "Liveness check", timeoutMs));
856
+ }
857
+ }, timeoutMs),
858
+ startedAt,
859
+ drivesLivenessFailure: params.drivesLivenessFailure,
860
+ };
861
+ this.pingProbe = probe;
862
+ try {
863
+ this.transport.send(JSON.stringify({ type: "ping" }));
864
+ }
865
+ catch (error) {
866
+ this.clearPingProbe();
867
+ const sendError = error instanceof Error ? error : new Error(String(error));
868
+ if (probe.drivesLivenessFailure) {
869
+ this.recordLivenessFailure(sendError);
870
+ }
871
+ return Promise.reject(sendError);
872
+ }
873
+ return promise;
874
+ }
875
+ startLivenessHeartbeat() {
876
+ this.stopLivenessHeartbeat();
877
+ this.lastLivenessRttMs = null;
878
+ this.scheduleNextLivenessHeartbeat();
879
+ }
880
+ stopLivenessHeartbeat() {
881
+ if (!this.livenessHeartbeatTimer) {
882
+ return;
883
+ }
884
+ clearTimeout(this.livenessHeartbeatTimer);
885
+ this.livenessHeartbeatTimer = null;
886
+ }
887
+ scheduleNextLivenessHeartbeat() {
888
+ if (this.connectionState.status !== "connected" || this.livenessHeartbeatTimer) {
889
+ return;
890
+ }
891
+ this.livenessHeartbeatTimer = setTimeout(() => {
892
+ this.livenessHeartbeatTimer = null;
893
+ this.livenessPing({ timeoutMs: LIVENESS_HEARTBEAT_TIMEOUT_MS })
894
+ .catch(() => { })
895
+ .finally(() => {
896
+ this.scheduleNextLivenessHeartbeat();
897
+ });
898
+ }, LIVENESS_HEARTBEAT_INTERVAL_MS);
899
+ }
900
+ // ============================================================================
901
+ // Agent RPCs (requestId-correlated)
902
+ // ============================================================================
903
+ async fetchAgents(options) {
904
+ const resolvedRequestId = this.createRequestId(options?.requestId);
905
+ const message = SessionInboundMessageSchema.parse({
906
+ type: "fetch_agents_request",
907
+ requestId: resolvedRequestId,
908
+ ...(options?.scope ? { scope: options.scope } : {}),
909
+ ...(options?.filter ? { filter: options.filter } : {}),
910
+ ...(options?.sort ? { sort: options.sort } : {}),
911
+ ...(options?.page ? { page: options.page } : {}),
912
+ ...(options?.subscribe ? { subscribe: options.subscribe } : {}),
913
+ });
914
+ return this.sendRequest({
915
+ requestId: resolvedRequestId,
916
+ message,
917
+ timeout: options?.timeout,
918
+ options: { skipQueue: true },
919
+ select: (msg) => {
920
+ if (msg.type !== "fetch_agents_response") {
921
+ return null;
922
+ }
923
+ if (msg.payload.requestId !== resolvedRequestId) {
924
+ return null;
925
+ }
926
+ return msg.payload;
927
+ },
928
+ });
929
+ }
930
+ async fetchAgentHistory(options) {
931
+ const resolvedRequestId = this.createRequestId(options?.requestId);
932
+ const message = SessionInboundMessageSchema.parse({
933
+ type: "fetch_agent_history_request",
934
+ requestId: resolvedRequestId,
935
+ ...(options?.filter ? { filter: options.filter } : {}),
936
+ ...(options?.sort ? { sort: options.sort } : {}),
937
+ ...(options?.page ? { page: options.page } : {}),
938
+ });
939
+ return this.sendRequest({
940
+ requestId: resolvedRequestId,
941
+ message,
942
+ options: { skipQueue: true },
943
+ select: (msg) => {
944
+ if (msg.type !== "fetch_agent_history_response") {
945
+ return null;
946
+ }
947
+ if (msg.payload.requestId !== resolvedRequestId) {
948
+ return null;
949
+ }
950
+ return msg.payload;
951
+ },
952
+ });
953
+ }
954
+ async fetchRecentProviderSessions(options) {
955
+ const resolvedRequestId = this.createRequestId(options?.requestId);
956
+ const message = SessionInboundMessageSchema.parse({
957
+ type: "fetch_recent_provider_sessions_request",
958
+ requestId: resolvedRequestId,
959
+ ...(options?.cwd ? { cwd: options.cwd } : {}),
960
+ ...(options?.providers ? { providers: options.providers } : {}),
961
+ ...(options?.since ? { since: options.since } : {}),
962
+ ...(options?.limit ? { limit: options.limit } : {}),
963
+ });
964
+ return this.sendRequest({
965
+ requestId: resolvedRequestId,
966
+ message,
967
+ options: { skipQueue: true },
968
+ select: (msg) => {
969
+ if (msg.type !== "fetch_recent_provider_sessions_response") {
970
+ return null;
971
+ }
972
+ if (msg.payload.requestId !== resolvedRequestId) {
973
+ return null;
974
+ }
975
+ return msg.payload;
976
+ },
977
+ });
978
+ }
979
+ async fetchWorkspaces(options) {
980
+ const resolvedRequestId = this.createRequestId(options?.requestId);
981
+ const message = SessionInboundMessageSchema.parse({
982
+ type: "fetch_workspaces_request",
983
+ requestId: resolvedRequestId,
984
+ ...(options?.filter ? { filter: options.filter } : {}),
985
+ ...(options?.sort ? { sort: options.sort } : {}),
986
+ ...(options?.page ? { page: options.page } : {}),
987
+ ...(options?.subscribe ? { subscribe: options.subscribe } : {}),
988
+ });
989
+ return this.sendRequest({
990
+ requestId: resolvedRequestId,
991
+ message,
992
+ options: { skipQueue: true },
993
+ select: (msg) => {
994
+ if (msg.type !== "fetch_workspaces_response") {
995
+ return null;
996
+ }
997
+ if (msg.payload.requestId !== resolvedRequestId) {
998
+ return null;
999
+ }
1000
+ return msg.payload;
1001
+ },
1002
+ });
1003
+ }
1004
+ async openProject(cwd, requestId) {
1005
+ return this.sendCorrelatedSessionRequest({
1006
+ requestId,
1007
+ message: {
1008
+ type: "open_project_request",
1009
+ cwd,
1010
+ },
1011
+ responseType: "open_project_response",
1012
+ });
1013
+ }
1014
+ async addProject(cwd, requestId) {
1015
+ return this.sendCorrelatedSessionRequest({
1016
+ requestId,
1017
+ message: {
1018
+ type: "project.add.request",
1019
+ cwd,
1020
+ },
1021
+ responseType: "project.add.response",
1022
+ });
1023
+ }
1024
+ async cloneGithubWorkspace(input, requestId) {
1025
+ const message = {
1026
+ type: "workspace.github.clone.request",
1027
+ repo: input.repo,
1028
+ targetDirectory: input.targetDirectory,
1029
+ ...(input.cloneProtocol ? { cloneProtocol: input.cloneProtocol } : {}),
1030
+ };
1031
+ return this.sendNamespacedCorrelatedSessionRequest({
1032
+ requestId,
1033
+ message,
1034
+ timeout: WORKSPACE_GITHUB_CLONE_TIMEOUT_MS,
1035
+ });
1036
+ }
1037
+ async startWorkspaceScript(workspaceId, scriptName, requestId) {
1038
+ return this.sendCorrelatedSessionRequest({
1039
+ requestId,
1040
+ message: {
1041
+ type: "start_workspace_script_request",
1042
+ workspaceId,
1043
+ scriptName,
1044
+ },
1045
+ responseType: "start_workspace_script_response",
1046
+ });
1047
+ }
1048
+ async archiveWorkspace(workspaceId, requestId) {
1049
+ return this.sendCorrelatedSessionRequest({
1050
+ requestId,
1051
+ message: {
1052
+ type: "archive_workspace_request",
1053
+ workspaceId,
1054
+ },
1055
+ responseType: "archive_workspace_response",
1056
+ });
1057
+ }
1058
+ async fetchWorkspaceSetupStatus(workspaceId, requestId) {
1059
+ return this.sendCorrelatedSessionRequest({
1060
+ requestId,
1061
+ message: {
1062
+ type: "workspace_setup_status_request",
1063
+ workspaceId,
1064
+ },
1065
+ responseType: "workspace_setup_status_response",
1066
+ });
1067
+ }
1068
+ async fetchAgent(input, legacyOptions) {
1069
+ const options = normalizeFetchAgentOptions(input, legacyOptions);
1070
+ const resolvedRequestId = this.createRequestId(options.requestId);
1071
+ const message = SessionInboundMessageSchema.parse({
1072
+ type: "fetch_agent_request",
1073
+ requestId: resolvedRequestId,
1074
+ agentId: options.agentId,
1075
+ });
1076
+ const payload = await this.sendRequest({
1077
+ requestId: resolvedRequestId,
1078
+ message,
1079
+ timeout: options.timeout,
1080
+ options: { skipQueue: true },
1081
+ select: (msg) => {
1082
+ if (msg.type !== "fetch_agent_response") {
1083
+ return null;
1084
+ }
1085
+ if (msg.payload.requestId !== resolvedRequestId) {
1086
+ return null;
1087
+ }
1088
+ return msg.payload;
1089
+ },
1090
+ });
1091
+ if (payload.error) {
1092
+ throw new Error(payload.error);
1093
+ }
1094
+ if (!payload.agent) {
1095
+ return null;
1096
+ }
1097
+ return { agent: payload.agent, project: payload.project ?? null };
1098
+ }
1099
+ resubscribeCheckoutDiffSubscriptions() {
1100
+ if (this.checkoutDiffSubscriptions.size === 0) {
1101
+ return;
1102
+ }
1103
+ for (const [subscriptionId, subscription] of this.checkoutDiffSubscriptions) {
1104
+ const message = SessionInboundMessageSchema.parse({
1105
+ type: "subscribe_checkout_diff_request",
1106
+ subscriptionId,
1107
+ cwd: subscription.cwd,
1108
+ compare: subscription.compare,
1109
+ requestId: this.createRequestId(),
1110
+ });
1111
+ this.sendSessionMessage(message);
1112
+ }
1113
+ }
1114
+ resubscribeTerminalDirectorySubscriptions() {
1115
+ if (this.terminalDirectorySubscriptions.size === 0) {
1116
+ return;
1117
+ }
1118
+ for (const subscription of this.terminalDirectorySubscriptions.values()) {
1119
+ this.sendSessionMessage({
1120
+ type: "subscribe_terminals_request",
1121
+ cwd: subscription.cwd,
1122
+ ...(subscription.workspaceId !== undefined
1123
+ ? { workspaceId: subscription.workspaceId }
1124
+ : {}),
1125
+ });
1126
+ }
1127
+ }
1128
+ // ============================================================================
1129
+ // Agent Lifecycle
1130
+ // ============================================================================
1131
+ async createAgent(options) {
1132
+ const requestId = this.createRequestId(options.requestId);
1133
+ const config = resolveAgentConfig(options);
1134
+ const message = SessionInboundMessageSchema.parse({
1135
+ type: "create_agent_request",
1136
+ requestId,
1137
+ config,
1138
+ ...(options.env ? { env: options.env } : {}),
1139
+ ...(options.workspaceId !== undefined ? { workspaceId: options.workspaceId } : {}),
1140
+ ...(options.initialPrompt ? { initialPrompt: options.initialPrompt } : {}),
1141
+ ...(options.clientMessageId ? { clientMessageId: options.clientMessageId } : {}),
1142
+ ...(options.outputSchema ? { outputSchema: options.outputSchema } : {}),
1143
+ ...(options.images && options.images.length > 0 ? { images: options.images } : {}),
1144
+ ...(options.attachments && options.attachments.length > 0
1145
+ ? { attachments: options.attachments }
1146
+ : {}),
1147
+ ...(options.git ? { git: options.git } : {}),
1148
+ ...(options.worktree ? { worktree: options.worktree } : {}),
1149
+ ...(options.autoArchive !== undefined ? { autoArchive: options.autoArchive } : {}),
1150
+ ...(options.worktreeName ? { worktreeName: options.worktreeName } : {}),
1151
+ ...(options.labels && Object.keys(options.labels).length > 0
1152
+ ? { labels: options.labels }
1153
+ : {}),
1154
+ });
1155
+ const status = await this.sendRequest({
1156
+ requestId,
1157
+ message,
1158
+ options: { skipQueue: true },
1159
+ select: (msg) => {
1160
+ if (msg.type !== "status") {
1161
+ return null;
1162
+ }
1163
+ const created = AgentCreatedStatusPayloadSchema.safeParse(msg.payload);
1164
+ if (created.success && created.data.requestId === requestId) {
1165
+ return created.data;
1166
+ }
1167
+ const failed = AgentCreateFailedStatusPayloadSchema.safeParse(msg.payload);
1168
+ if (failed.success && failed.data.requestId === requestId) {
1169
+ return failed.data;
1170
+ }
1171
+ return null;
1172
+ },
1173
+ });
1174
+ if (status.status === "agent_create_failed") {
1175
+ throw new Error(status.error);
1176
+ }
1177
+ return status.agent;
1178
+ }
1179
+ async deleteAgent(agentId) {
1180
+ const requestId = this.createRequestId();
1181
+ const message = SessionInboundMessageSchema.parse({
1182
+ type: "delete_agent_request",
1183
+ agentId,
1184
+ requestId,
1185
+ });
1186
+ await this.sendRequest({
1187
+ requestId,
1188
+ message,
1189
+ options: { skipQueue: true },
1190
+ select: (msg) => {
1191
+ if (msg.type !== "agent_deleted") {
1192
+ return null;
1193
+ }
1194
+ if (msg.payload.requestId !== requestId) {
1195
+ return null;
1196
+ }
1197
+ return msg.payload;
1198
+ },
1199
+ });
1200
+ }
1201
+ async archiveAgent(agentId) {
1202
+ const requestId = this.createRequestId();
1203
+ const message = SessionInboundMessageSchema.parse({
1204
+ type: "archive_agent_request",
1205
+ agentId,
1206
+ requestId,
1207
+ });
1208
+ const result = await this.sendRequest({
1209
+ requestId,
1210
+ message,
1211
+ options: { skipQueue: true },
1212
+ select: (msg) => {
1213
+ if (msg.type !== "agent_archived") {
1214
+ return null;
1215
+ }
1216
+ if (msg.payload.requestId !== requestId) {
1217
+ return null;
1218
+ }
1219
+ return msg.payload;
1220
+ },
1221
+ });
1222
+ return { archivedAt: result.archivedAt };
1223
+ }
1224
+ async detachAgent(agentId) {
1225
+ const payload = await this.sendNamespacedCorrelatedSessionRequest({
1226
+ message: {
1227
+ type: "agent.detach.request",
1228
+ agentId,
1229
+ },
1230
+ });
1231
+ if (!payload.accepted) {
1232
+ throw new Error(payload.error ?? "detachAgent rejected");
1233
+ }
1234
+ }
1235
+ async updateAgent(agentId, updates) {
1236
+ const requestId = this.createRequestId();
1237
+ const message = SessionInboundMessageSchema.parse({
1238
+ type: "update_agent_request",
1239
+ agentId,
1240
+ ...(updates.name !== undefined ? { name: updates.name } : {}),
1241
+ ...(updates.labels && Object.keys(updates.labels).length > 0
1242
+ ? { labels: updates.labels }
1243
+ : {}),
1244
+ requestId,
1245
+ });
1246
+ const payload = await this.sendRequest({
1247
+ requestId,
1248
+ message,
1249
+ options: { skipQueue: true },
1250
+ select: (msg) => {
1251
+ if (msg.type !== "update_agent_response") {
1252
+ return null;
1253
+ }
1254
+ if (msg.payload.requestId !== requestId) {
1255
+ return null;
1256
+ }
1257
+ return msg.payload;
1258
+ },
1259
+ });
1260
+ if (!payload.accepted) {
1261
+ throw new Error(payload.error ?? "updateAgent rejected");
1262
+ }
1263
+ }
1264
+ async renameProject(projectId, customName, requestId) {
1265
+ const payload = await this.sendCorrelatedSessionRequest({
1266
+ requestId,
1267
+ message: {
1268
+ type: "project.rename.request",
1269
+ projectId,
1270
+ customName,
1271
+ },
1272
+ responseType: "project.rename.response",
1273
+ });
1274
+ if (!payload.accepted) {
1275
+ throw new Error(payload.error ?? "renameProject rejected");
1276
+ }
1277
+ return { customName: payload.customName };
1278
+ }
1279
+ async removeProject(projectId, requestId) {
1280
+ const payload = await this.sendNamespacedCorrelatedSessionRequest({
1281
+ requestId,
1282
+ message: {
1283
+ type: "project.remove.request",
1284
+ projectId,
1285
+ },
1286
+ });
1287
+ if (!payload.accepted) {
1288
+ throw new Error(payload.error ?? "removeProject rejected");
1289
+ }
1290
+ return { removedWorkspaceIds: payload.removedWorkspaceIds };
1291
+ }
1292
+ async setWorkspaceTitle(workspaceId, title, requestId) {
1293
+ const payload = await this.sendCorrelatedSessionRequest({
1294
+ requestId,
1295
+ message: {
1296
+ type: "workspace.title.set.request",
1297
+ workspaceId,
1298
+ title,
1299
+ },
1300
+ responseType: "workspace.title.set.response",
1301
+ });
1302
+ if (!payload.accepted) {
1303
+ throw new Error(payload.error ?? "setWorkspaceTitle rejected");
1304
+ }
1305
+ return { title: payload.title };
1306
+ }
1307
+ async setWorkspacePinned(workspaceId, pinned, requestId) {
1308
+ const payload = await this.sendCorrelatedSessionRequest({
1309
+ requestId,
1310
+ message: {
1311
+ type: "workspace.pin.set.request",
1312
+ workspaceId,
1313
+ pinned,
1314
+ },
1315
+ responseType: "workspace.pin.set.response",
1316
+ });
1317
+ if (!payload.accepted) {
1318
+ throw new Error(payload.error ?? "setWorkspacePinned rejected");
1319
+ }
1320
+ return { pinnedAt: payload.pinnedAt };
1321
+ }
1322
+ async resumeAgent(handle, overrides) {
1323
+ const requestId = this.createRequestId();
1324
+ const message = SessionInboundMessageSchema.parse({
1325
+ type: "resume_agent_request",
1326
+ requestId,
1327
+ handle,
1328
+ ...(overrides ? { overrides } : {}),
1329
+ });
1330
+ const status = await this.sendRequest({
1331
+ requestId,
1332
+ message,
1333
+ options: { skipQueue: true },
1334
+ select: (msg) => {
1335
+ if (msg.type !== "status") {
1336
+ return null;
1337
+ }
1338
+ const resumed = AgentResumedStatusPayloadSchema.safeParse(msg.payload);
1339
+ if (resumed.success && resumed.data.requestId === requestId) {
1340
+ return resumed.data;
1341
+ }
1342
+ return null;
1343
+ },
1344
+ });
1345
+ return status.agent;
1346
+ }
1347
+ async importAgent(input) {
1348
+ const requestId = this.createRequestId();
1349
+ const message = SessionInboundMessageSchema.parse({
1350
+ type: "import_agent_request",
1351
+ requestId,
1352
+ ...("providerId" in input
1353
+ ? { providerId: input.providerId, providerHandleId: input.providerHandleId }
1354
+ : { provider: input.provider, sessionId: input.sessionId }),
1355
+ ...(input.cwd ? { cwd: input.cwd } : {}),
1356
+ ...(input.labels && Object.keys(input.labels).length > 0 ? { labels: input.labels } : {}),
1357
+ });
1358
+ const status = await this.sendRequest({
1359
+ requestId,
1360
+ message,
1361
+ options: { skipQueue: true },
1362
+ select: (msg) => {
1363
+ if (msg.type !== "status") {
1364
+ return null;
1365
+ }
1366
+ const resumed = AgentResumedStatusPayloadSchema.safeParse(msg.payload);
1367
+ if (resumed.success && resumed.data.requestId === requestId) {
1368
+ return resumed.data;
1369
+ }
1370
+ const failed = AgentCreateFailedStatusPayloadSchema.safeParse(msg.payload);
1371
+ if (failed.success && failed.data.requestId === requestId) {
1372
+ return failed.data;
1373
+ }
1374
+ return null;
1375
+ },
1376
+ });
1377
+ if (status.status === "agent_create_failed") {
1378
+ throw new Error(status.error);
1379
+ }
1380
+ return status.agent;
1381
+ }
1382
+ async refreshAgent(agentId, requestId) {
1383
+ const resolvedRequestId = this.createRequestId(requestId);
1384
+ const message = SessionInboundMessageSchema.parse({
1385
+ type: "refresh_agent_request",
1386
+ agentId,
1387
+ requestId: resolvedRequestId,
1388
+ });
1389
+ return this.sendRequest({
1390
+ requestId: resolvedRequestId,
1391
+ message,
1392
+ options: { skipQueue: true },
1393
+ select: (msg) => {
1394
+ if (msg.type !== "status") {
1395
+ return null;
1396
+ }
1397
+ const refreshed = AgentRefreshedStatusPayloadSchema.safeParse(msg.payload);
1398
+ if (refreshed.success && refreshed.data.requestId === resolvedRequestId) {
1399
+ return refreshed.data;
1400
+ }
1401
+ return null;
1402
+ },
1403
+ });
1404
+ }
1405
+ async fetchAgentTimeline(agentId, options = {}) {
1406
+ const resolvedRequestId = this.createRequestId(options.requestId);
1407
+ const message = SessionInboundMessageSchema.parse({
1408
+ type: "fetch_agent_timeline_request",
1409
+ agentId,
1410
+ requestId: resolvedRequestId,
1411
+ ...(options.direction ? { direction: options.direction } : {}),
1412
+ ...(options.cursor ? { cursor: options.cursor } : {}),
1413
+ ...(typeof options.limit === "number" ? { limit: options.limit } : {}),
1414
+ ...(options.projection ? { projection: options.projection } : {}),
1415
+ });
1416
+ const payload = await this.sendRequest({
1417
+ requestId: resolvedRequestId,
1418
+ message,
1419
+ timeout: options.timeout,
1420
+ options: { skipQueue: true },
1421
+ select: (msg) => {
1422
+ if (msg.type !== "fetch_agent_timeline_response") {
1423
+ return null;
1424
+ }
1425
+ if (msg.payload.requestId !== resolvedRequestId) {
1426
+ return null;
1427
+ }
1428
+ return msg.payload;
1429
+ },
1430
+ });
1431
+ if (payload.error) {
1432
+ throw new Error(payload.error);
1433
+ }
1434
+ return payload;
1435
+ }
1436
+ async listProviderSubagents(parentAgentId, options = {}) {
1437
+ const requestId = this.createRequestId(options.requestId);
1438
+ const message = SessionInboundMessageSchema.parse({
1439
+ type: "agent.provider_subagents.list.request",
1440
+ parentAgentId,
1441
+ requestId,
1442
+ });
1443
+ const payload = await this.sendRequest({
1444
+ requestId,
1445
+ message,
1446
+ timeout: options.timeout,
1447
+ options: { skipQueue: true },
1448
+ select: (response) => response.type === "agent.provider_subagents.list.response" &&
1449
+ response.payload.requestId === requestId
1450
+ ? response.payload
1451
+ : null,
1452
+ });
1453
+ if (payload.error) {
1454
+ throw new Error(payload.error);
1455
+ }
1456
+ return payload;
1457
+ }
1458
+ async fetchProviderSubagentTimeline(parentAgentId, subagentId, options = {}) {
1459
+ const requestId = this.createRequestId(options.requestId);
1460
+ const message = SessionInboundMessageSchema.parse({
1461
+ type: "agent.provider_subagents.timeline.get.request",
1462
+ parentAgentId,
1463
+ subagentId,
1464
+ requestId,
1465
+ ...(options.direction ? { direction: options.direction } : {}),
1466
+ ...(options.cursor ? { cursor: options.cursor } : {}),
1467
+ ...(typeof options.limit === "number" ? { limit: options.limit } : {}),
1468
+ });
1469
+ const payload = await this.sendRequest({
1470
+ requestId,
1471
+ message,
1472
+ timeout: options.timeout,
1473
+ options: { skipQueue: true },
1474
+ select: (response) => response.type === "agent.provider_subagents.timeline.get.response" &&
1475
+ response.payload.requestId === requestId
1476
+ ? response.payload
1477
+ : null,
1478
+ });
1479
+ if (payload.error) {
1480
+ throw new Error(payload.error);
1481
+ }
1482
+ return payload;
1483
+ }
1484
+ async buildAgentForkContext(agentId, options = {}) {
1485
+ const resolvedRequestId = this.createRequestId(options.requestId);
1486
+ const message = SessionInboundMessageSchema.parse({
1487
+ type: "agent.fork_context.request",
1488
+ agentId,
1489
+ requestId: resolvedRequestId,
1490
+ ...(options.boundaryCursor ? { boundaryCursor: options.boundaryCursor } : {}),
1491
+ ...(options.boundaryMessageId ? { boundaryMessageId: options.boundaryMessageId } : {}),
1492
+ });
1493
+ const payload = await this.sendRequest({
1494
+ requestId: resolvedRequestId,
1495
+ message,
1496
+ timeout: 15000,
1497
+ options: { skipQueue: true },
1498
+ select: (msg) => {
1499
+ if (msg.type !== "agent.fork_context.response") {
1500
+ return null;
1501
+ }
1502
+ if (msg.payload.requestId !== resolvedRequestId) {
1503
+ return null;
1504
+ }
1505
+ return msg.payload;
1506
+ },
1507
+ });
1508
+ if (payload.error) {
1509
+ throw new Error(payload.error);
1510
+ }
1511
+ return payload;
1512
+ }
1513
+ // ============================================================================
1514
+ // Agent Interaction
1515
+ // ============================================================================
1516
+ async sendAgentMessage(agentId, text, options) {
1517
+ const requestId = this.createRequestId();
1518
+ const messageId = options?.messageId ?? crypto.randomUUID();
1519
+ const message = SessionInboundMessageSchema.parse({
1520
+ type: "send_agent_message_request",
1521
+ requestId,
1522
+ agentId,
1523
+ text,
1524
+ ...(messageId ? { messageId } : {}),
1525
+ ...(options?.images ? { images: options.images } : {}),
1526
+ ...(options?.attachments ? { attachments: options.attachments } : {}),
1527
+ });
1528
+ const payload = await this.sendRequest({
1529
+ requestId,
1530
+ message,
1531
+ options: { skipQueue: true },
1532
+ select: (msg) => {
1533
+ if (msg.type !== "send_agent_message_response") {
1534
+ return null;
1535
+ }
1536
+ if (msg.payload.requestId !== requestId) {
1537
+ return null;
1538
+ }
1539
+ return msg.payload;
1540
+ },
1541
+ });
1542
+ if (!payload.accepted) {
1543
+ throw new Error(payload.error ?? "sendAgentMessage rejected");
1544
+ }
1545
+ }
1546
+ async sendMessage(agentId, text, options) {
1547
+ await this.sendAgentMessage(agentId, text, options);
1548
+ }
1549
+ async rewindAgent(agentId, messageId, mode) {
1550
+ const requestId = this.createRequestId();
1551
+ const message = SessionInboundMessageSchema.parse({
1552
+ type: "agent.rewind.request",
1553
+ requestId,
1554
+ agentId,
1555
+ messageId,
1556
+ mode,
1557
+ });
1558
+ const payload = await this.sendRequest({
1559
+ requestId,
1560
+ message,
1561
+ options: { skipQueue: true },
1562
+ select: (msg) => {
1563
+ if (msg.type !== "agent.rewind.response") {
1564
+ return null;
1565
+ }
1566
+ if (msg.payload.requestId !== requestId) {
1567
+ return null;
1568
+ }
1569
+ return msg.payload;
1570
+ },
1571
+ });
1572
+ if (!payload.ok) {
1573
+ throw new Error(payload.error ?? "Agent rewind failed");
1574
+ }
1575
+ return payload;
1576
+ }
1577
+ async cancelAgent(agentId) {
1578
+ const requestId = this.createRequestId();
1579
+ const message = SessionInboundMessageSchema.parse({
1580
+ type: "cancel_agent_request",
1581
+ agentId,
1582
+ requestId,
1583
+ });
1584
+ const payload = await this.sendRequest({
1585
+ requestId,
1586
+ message,
1587
+ options: { skipQueue: true },
1588
+ select: (msg) => {
1589
+ if (msg.type !== "cancel_agent_response") {
1590
+ return null;
1591
+ }
1592
+ if (msg.payload.requestId !== requestId) {
1593
+ return null;
1594
+ }
1595
+ return msg.payload;
1596
+ },
1597
+ });
1598
+ if (payload.error) {
1599
+ throw new Error(payload.error);
1600
+ }
1601
+ }
1602
+ async setAgentMode(agentId, modeId) {
1603
+ const requestId = this.createRequestId();
1604
+ const message = SessionInboundMessageSchema.parse({
1605
+ type: "set_agent_mode_request",
1606
+ agentId,
1607
+ modeId,
1608
+ requestId,
1609
+ });
1610
+ const payload = await this.sendRequest({
1611
+ requestId,
1612
+ message,
1613
+ options: { skipQueue: true },
1614
+ select: (msg) => {
1615
+ if (msg.type !== "set_agent_mode_response") {
1616
+ return null;
1617
+ }
1618
+ if (msg.payload.requestId !== requestId) {
1619
+ return null;
1620
+ }
1621
+ return msg.payload;
1622
+ },
1623
+ });
1624
+ if (!payload.accepted) {
1625
+ throw new Error(payload.error ?? "setAgentMode rejected");
1626
+ }
1627
+ return payload.notice ?? null;
1628
+ }
1629
+ async setAgentModel(agentId, modelId) {
1630
+ const requestId = this.createRequestId();
1631
+ const message = SessionInboundMessageSchema.parse({
1632
+ type: "set_agent_model_request",
1633
+ agentId,
1634
+ modelId,
1635
+ requestId,
1636
+ });
1637
+ const payload = await this.sendRequest({
1638
+ requestId,
1639
+ message,
1640
+ options: { skipQueue: true },
1641
+ select: (msg) => {
1642
+ if (msg.type !== "set_agent_model_response") {
1643
+ return null;
1644
+ }
1645
+ if (msg.payload.requestId !== requestId) {
1646
+ return null;
1647
+ }
1648
+ return msg.payload;
1649
+ },
1650
+ });
1651
+ if (!payload.accepted) {
1652
+ throw new Error(payload.error ?? "setAgentModel rejected");
1653
+ }
1654
+ }
1655
+ async setAgentFeature(agentId, featureId, value) {
1656
+ const requestId = this.createRequestId();
1657
+ const message = SessionInboundMessageSchema.parse({
1658
+ type: "set_agent_feature_request",
1659
+ agentId,
1660
+ featureId,
1661
+ value,
1662
+ requestId,
1663
+ });
1664
+ const payload = await this.sendRequest({
1665
+ requestId,
1666
+ message,
1667
+ options: { skipQueue: true },
1668
+ select: (msg) => {
1669
+ if (msg.type !== "set_agent_feature_response") {
1670
+ return null;
1671
+ }
1672
+ if (msg.payload.requestId !== requestId) {
1673
+ return null;
1674
+ }
1675
+ return msg.payload;
1676
+ },
1677
+ });
1678
+ if (!payload.accepted) {
1679
+ throw new Error(payload.error ?? "setAgentFeature rejected");
1680
+ }
1681
+ }
1682
+ async setAgentThinkingOption(agentId, thinkingOptionId) {
1683
+ const requestId = this.createRequestId();
1684
+ const message = SessionInboundMessageSchema.parse({
1685
+ type: "set_agent_thinking_request",
1686
+ agentId,
1687
+ thinkingOptionId,
1688
+ requestId,
1689
+ });
1690
+ const payload = await this.sendRequest({
1691
+ requestId,
1692
+ message,
1693
+ options: { skipQueue: true },
1694
+ select: (msg) => {
1695
+ if (msg.type !== "set_agent_thinking_response") {
1696
+ return null;
1697
+ }
1698
+ if (msg.payload.requestId !== requestId) {
1699
+ return null;
1700
+ }
1701
+ return msg.payload;
1702
+ },
1703
+ });
1704
+ if (!payload.accepted) {
1705
+ throw new Error(payload.error ?? "setAgentThinkingOption rejected");
1706
+ }
1707
+ return payload.notice ?? null;
1708
+ }
1709
+ async restartServer(reason, requestId) {
1710
+ const resolvedRequestId = this.createRequestId(requestId);
1711
+ const message = SessionInboundMessageSchema.parse({
1712
+ type: "restart_server_request",
1713
+ ...(reason && reason.trim().length > 0 ? { reason } : {}),
1714
+ requestId: resolvedRequestId,
1715
+ });
1716
+ return this.sendRequest({
1717
+ requestId: resolvedRequestId,
1718
+ message,
1719
+ options: { skipQueue: true },
1720
+ select: (msg) => {
1721
+ if (msg.type !== "status") {
1722
+ return null;
1723
+ }
1724
+ const restarted = RestartRequestedStatusPayloadSchema.safeParse(msg.payload);
1725
+ if (!restarted.success) {
1726
+ return null;
1727
+ }
1728
+ if (restarted.data.requestId !== resolvedRequestId) {
1729
+ return null;
1730
+ }
1731
+ return restarted.data;
1732
+ },
1733
+ });
1734
+ }
1735
+ async shutdownServer(options) {
1736
+ const resolvedRequestId = this.createRequestId(options?.requestId);
1737
+ const message = SessionInboundMessageSchema.parse({
1738
+ type: "shutdown_server_request",
1739
+ requestId: resolvedRequestId,
1740
+ });
1741
+ return this.sendRequest({
1742
+ requestId: resolvedRequestId,
1743
+ message,
1744
+ timeout: options?.timeout,
1745
+ options: { skipQueue: true },
1746
+ select: (msg) => {
1747
+ if (msg.type !== "status") {
1748
+ return null;
1749
+ }
1750
+ const shutdown = ShutdownRequestedStatusPayloadSchema.safeParse(msg.payload);
1751
+ if (!shutdown.success) {
1752
+ return null;
1753
+ }
1754
+ if (shutdown.data.requestId !== resolvedRequestId) {
1755
+ return null;
1756
+ }
1757
+ return shutdown.data;
1758
+ },
1759
+ });
1760
+ }
1761
+ async updateDaemon(requestId) {
1762
+ const resolvedRequestId = this.createRequestId(requestId);
1763
+ const message = SessionInboundMessageSchema.parse({
1764
+ type: "daemon.update.request",
1765
+ requestId: resolvedRequestId,
1766
+ });
1767
+ return this.sendRequest({
1768
+ requestId: resolvedRequestId,
1769
+ message,
1770
+ timeout: 300000, // 5 minutes — npm update can be slow on remote machines
1771
+ options: { skipQueue: true },
1772
+ select: (msg) => {
1773
+ const parsed = DaemonUpdateResponseSchema.safeParse(msg);
1774
+ if (!parsed.success) {
1775
+ return null;
1776
+ }
1777
+ if (parsed.data.payload.requestId !== resolvedRequestId) {
1778
+ return null;
1779
+ }
1780
+ return parsed.data.payload;
1781
+ },
1782
+ });
1783
+ }
1784
+ // ============================================================================
1785
+ // Audio / Voice
1786
+ // ============================================================================
1787
+ async setVoiceMode(enabled, agentId) {
1788
+ const requestId = this.createRequestId();
1789
+ const message = SessionInboundMessageSchema.parse({
1790
+ type: "set_voice_mode",
1791
+ enabled,
1792
+ ...(agentId ? { agentId } : {}),
1793
+ requestId,
1794
+ });
1795
+ const response = await this.sendRequest({
1796
+ requestId,
1797
+ message,
1798
+ select: (msg) => {
1799
+ if (msg.type !== "set_voice_mode_response") {
1800
+ return null;
1801
+ }
1802
+ if (msg.payload.requestId !== requestId) {
1803
+ return null;
1804
+ }
1805
+ return msg.payload;
1806
+ },
1807
+ });
1808
+ if (!response.accepted) {
1809
+ const codeSuffix = typeof response.reasonCode === "string" && response.reasonCode.trim().length > 0
1810
+ ? ` (${response.reasonCode})`
1811
+ : "";
1812
+ throw new Error((response.error ?? "Failed to set voice mode") + codeSuffix);
1813
+ }
1814
+ return response;
1815
+ }
1816
+ async sendVoiceAudioChunk(audio, format, isLast = false) {
1817
+ this.sendSessionMessage({ type: "voice_audio_chunk", audio, format, isLast });
1818
+ }
1819
+ async startDictationStream(dictationId, format) {
1820
+ const ack = this.waitForWithCancel((msg) => {
1821
+ if (msg.type !== "dictation_stream_ack") {
1822
+ return null;
1823
+ }
1824
+ if (msg.payload.dictationId !== dictationId) {
1825
+ return null;
1826
+ }
1827
+ if (msg.payload.ackSeq !== -1) {
1828
+ return null;
1829
+ }
1830
+ return msg.payload;
1831
+ }, 30000, { skipQueue: true });
1832
+ const ackPromise = ack.promise.then(() => undefined);
1833
+ const streamError = this.waitForWithCancel((msg) => {
1834
+ if (msg.type !== "dictation_stream_error") {
1835
+ return null;
1836
+ }
1837
+ if (msg.payload.dictationId !== dictationId) {
1838
+ return null;
1839
+ }
1840
+ return msg.payload;
1841
+ }, 30000, { skipQueue: true });
1842
+ const errorPromise = streamError.promise.then((payload) => {
1843
+ throw new Error(payload.error);
1844
+ });
1845
+ const cleanupError = new Error("Cancelled dictation start waiter");
1846
+ try {
1847
+ this.sendSessionMessageStrict({ type: "dictation_stream_start", dictationId, format });
1848
+ await Promise.race([ackPromise, errorPromise]);
1849
+ }
1850
+ finally {
1851
+ ack.cancel(cleanupError);
1852
+ streamError.cancel(cleanupError);
1853
+ void ackPromise.catch(() => undefined);
1854
+ void errorPromise.catch(() => undefined);
1855
+ }
1856
+ }
1857
+ sendDictationStreamChunk(dictationId, seq, audio, format) {
1858
+ this.sendSessionMessageStrict({
1859
+ type: "dictation_stream_chunk",
1860
+ dictationId,
1861
+ seq,
1862
+ audio,
1863
+ format,
1864
+ });
1865
+ }
1866
+ async finishDictationStream(dictationId, finalSeq) {
1867
+ const final = this.waitForWithCancel((msg) => {
1868
+ if (msg.type !== "dictation_stream_final") {
1869
+ return null;
1870
+ }
1871
+ if (msg.payload.dictationId !== dictationId) {
1872
+ return null;
1873
+ }
1874
+ return msg.payload;
1875
+ }, 0, { skipQueue: true });
1876
+ const streamError = this.waitForWithCancel((msg) => {
1877
+ if (msg.type !== "dictation_stream_error") {
1878
+ return null;
1879
+ }
1880
+ if (msg.payload.dictationId !== dictationId) {
1881
+ return null;
1882
+ }
1883
+ return msg.payload;
1884
+ }, 0, { skipQueue: true });
1885
+ const finishAccepted = this.waitForWithCancel((msg) => {
1886
+ if (msg.type !== "dictation_stream_finish_accepted") {
1887
+ return null;
1888
+ }
1889
+ if (msg.payload.dictationId !== dictationId) {
1890
+ return null;
1891
+ }
1892
+ return msg.payload;
1893
+ }, DEFAULT_DICTATION_FINISH_ACCEPT_TIMEOUT_MS, { skipQueue: true });
1894
+ const finalPromise = final.promise;
1895
+ const errorPromise = streamError.promise.then((payload) => {
1896
+ throw new Error(payload.error);
1897
+ });
1898
+ const finishAcceptedPromise = finishAccepted.promise;
1899
+ const finalOutcomePromise = finalPromise.then((payload) => ({
1900
+ kind: "final",
1901
+ payload,
1902
+ }));
1903
+ const errorOutcomePromise = errorPromise.then(() => ({
1904
+ kind: "error",
1905
+ error: new Error("Unexpected dictation stream error state"),
1906
+ }), (error) => ({
1907
+ kind: "error",
1908
+ error: error instanceof Error ? error : new Error(String(error)),
1909
+ }));
1910
+ const finishAcceptedOutcomePromise = finishAcceptedPromise.then((payload) => ({ kind: "accepted", payload }), (error) => {
1911
+ if (isWaiterTimeoutError(error)) {
1912
+ return { kind: "accepted_timeout" };
1913
+ }
1914
+ return {
1915
+ kind: "accepted_error",
1916
+ error: error instanceof Error ? error : new Error(String(error)),
1917
+ };
1918
+ });
1919
+ const waitForFinalResult = async (timeoutMs) => {
1920
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
1921
+ const outcome = await Promise.race([finalOutcomePromise, errorOutcomePromise]);
1922
+ if (outcome.kind === "error") {
1923
+ throw outcome.error;
1924
+ }
1925
+ return outcome.payload;
1926
+ }
1927
+ let timeoutHandle = null;
1928
+ const timeoutPromise = new Promise((resolve) => {
1929
+ timeoutHandle = setTimeout(() => resolve({ kind: "timeout" }), timeoutMs);
1930
+ });
1931
+ const outcome = await Promise.race([
1932
+ finalOutcomePromise,
1933
+ errorOutcomePromise,
1934
+ timeoutPromise,
1935
+ ]);
1936
+ if (timeoutHandle) {
1937
+ clearTimeout(timeoutHandle);
1938
+ }
1939
+ if (outcome.kind === "timeout") {
1940
+ throw new Error(`Timeout waiting for dictation finalization (${timeoutMs}ms)`);
1941
+ }
1942
+ if (outcome.kind === "error") {
1943
+ throw outcome.error;
1944
+ }
1945
+ return outcome.payload;
1946
+ };
1947
+ const cleanupError = new Error("Cancelled dictation finish waiter");
1948
+ try {
1949
+ this.sendSessionMessageStrict({ type: "dictation_stream_finish", dictationId, finalSeq });
1950
+ const firstOutcome = await Promise.race([
1951
+ finalOutcomePromise,
1952
+ errorOutcomePromise,
1953
+ finishAcceptedOutcomePromise,
1954
+ ]);
1955
+ if (firstOutcome.kind === "final") {
1956
+ return firstOutcome.payload;
1957
+ }
1958
+ if (firstOutcome.kind === "error") {
1959
+ throw firstOutcome.error;
1960
+ }
1961
+ if (firstOutcome.kind === "accepted") {
1962
+ return await waitForFinalResult(firstOutcome.payload.timeoutMs + DEFAULT_DICTATION_FINISH_TIMEOUT_GRACE_MS);
1963
+ }
1964
+ return await waitForFinalResult(DEFAULT_DICTATION_FINISH_FALLBACK_TIMEOUT_MS);
1965
+ }
1966
+ finally {
1967
+ final.cancel(cleanupError);
1968
+ streamError.cancel(cleanupError);
1969
+ finishAccepted.cancel(cleanupError);
1970
+ void finalPromise.catch(() => undefined);
1971
+ void errorPromise.catch(() => undefined);
1972
+ void finishAcceptedPromise.catch(() => undefined);
1973
+ }
1974
+ }
1975
+ cancelDictationStream(dictationId) {
1976
+ this.sendSessionMessageStrict({ type: "dictation_stream_cancel", dictationId });
1977
+ }
1978
+ async abortRequest() {
1979
+ this.sendSessionMessage({ type: "abort_request" });
1980
+ }
1981
+ async audioPlayed(id) {
1982
+ this.sendSessionMessage({ type: "audio_played", id });
1983
+ }
1984
+ // ============================================================================
1985
+ // Git Operations
1986
+ // ============================================================================
1987
+ async getCheckoutStatus(cwd, options) {
1988
+ const requestId = options?.requestId;
1989
+ if (!requestId) {
1990
+ const existing = this.checkoutStatusInFlight.get(cwd);
1991
+ if (existing) {
1992
+ return existing;
1993
+ }
1994
+ }
1995
+ const resolvedRequestId = this.createRequestId(requestId);
1996
+ const message = SessionInboundMessageSchema.parse({
1997
+ type: "checkout_status_request",
1998
+ cwd,
1999
+ requestId: resolvedRequestId,
2000
+ });
2001
+ const responsePromise = this.sendRequest({
2002
+ requestId: resolvedRequestId,
2003
+ message,
2004
+ options: { skipQueue: true },
2005
+ select: (msg) => {
2006
+ if (msg.type !== "checkout_status_response") {
2007
+ return null;
2008
+ }
2009
+ if (msg.payload.requestId !== resolvedRequestId) {
2010
+ return null;
2011
+ }
2012
+ return msg.payload;
2013
+ },
2014
+ });
2015
+ if (!requestId) {
2016
+ this.checkoutStatusInFlight.set(cwd, responsePromise);
2017
+ void responsePromise
2018
+ .finally(() => {
2019
+ if (this.checkoutStatusInFlight.get(cwd) === responsePromise) {
2020
+ this.checkoutStatusInFlight.delete(cwd);
2021
+ }
2022
+ })
2023
+ .catch(() => undefined);
2024
+ }
2025
+ return responsePromise;
2026
+ }
2027
+ normalizeCheckoutDiffCompare(compare) {
2028
+ if (compare.mode === "uncommitted") {
2029
+ return compare.ignoreWhitespace === true
2030
+ ? { mode: "uncommitted", ignoreWhitespace: true }
2031
+ : { mode: "uncommitted" };
2032
+ }
2033
+ const trimmedBaseRef = compare.baseRef?.trim();
2034
+ if (!trimmedBaseRef) {
2035
+ return compare.ignoreWhitespace === true
2036
+ ? { mode: "base", ignoreWhitespace: true }
2037
+ : { mode: "base" };
2038
+ }
2039
+ return compare.ignoreWhitespace === true
2040
+ ? { mode: "base", baseRef: trimmedBaseRef, ignoreWhitespace: true }
2041
+ : { mode: "base", baseRef: trimmedBaseRef };
2042
+ }
2043
+ async getCheckoutDiff(cwd, compare, requestId) {
2044
+ const oneShotSubscriptionId = `oneshot-checkout-diff:${crypto.randomUUID()}`;
2045
+ try {
2046
+ const payload = await this.subscribeCheckoutDiff(cwd, compare, {
2047
+ subscriptionId: oneShotSubscriptionId,
2048
+ requestId,
2049
+ });
2050
+ return {
2051
+ cwd: payload.cwd,
2052
+ files: payload.files,
2053
+ error: payload.error,
2054
+ requestId: payload.requestId,
2055
+ };
2056
+ }
2057
+ finally {
2058
+ try {
2059
+ this.unsubscribeCheckoutDiff(oneShotSubscriptionId);
2060
+ }
2061
+ catch {
2062
+ // Ignore disconnect races during one-shot cleanup.
2063
+ }
2064
+ }
2065
+ }
2066
+ async subscribeCheckoutDiff(cwd, compare, options) {
2067
+ const subscriptionId = options?.subscriptionId ?? crypto.randomUUID();
2068
+ const normalizedCompare = this.normalizeCheckoutDiffCompare(compare);
2069
+ const previousSubscription = this.checkoutDiffSubscriptions.get(subscriptionId) ?? null;
2070
+ this.checkoutDiffSubscriptions.set(subscriptionId, {
2071
+ cwd,
2072
+ compare: normalizedCompare,
2073
+ });
2074
+ const resolvedRequestId = this.createRequestId(options?.requestId);
2075
+ const message = SessionInboundMessageSchema.parse({
2076
+ type: "subscribe_checkout_diff_request",
2077
+ subscriptionId,
2078
+ cwd,
2079
+ compare: normalizedCompare,
2080
+ requestId: resolvedRequestId,
2081
+ });
2082
+ try {
2083
+ return await this.sendCorrelatedRequest({
2084
+ requestId: resolvedRequestId,
2085
+ message,
2086
+ responseType: "subscribe_checkout_diff_response",
2087
+ options: { skipQueue: true },
2088
+ selectPayload: (payload) => {
2089
+ if (payload.subscriptionId !== subscriptionId) {
2090
+ return null;
2091
+ }
2092
+ return payload;
2093
+ },
2094
+ });
2095
+ }
2096
+ catch (error) {
2097
+ if (previousSubscription) {
2098
+ this.checkoutDiffSubscriptions.set(subscriptionId, previousSubscription);
2099
+ }
2100
+ else {
2101
+ this.checkoutDiffSubscriptions.delete(subscriptionId);
2102
+ }
2103
+ throw error;
2104
+ }
2105
+ }
2106
+ unsubscribeCheckoutDiff(subscriptionId) {
2107
+ this.checkoutDiffSubscriptions.delete(subscriptionId);
2108
+ this.sendSessionMessage({
2109
+ type: "unsubscribe_checkout_diff_request",
2110
+ subscriptionId,
2111
+ });
2112
+ }
2113
+ async checkoutCommit(cwd, input, requestId) {
2114
+ return this.sendCorrelatedSessionRequest({
2115
+ requestId,
2116
+ message: {
2117
+ type: "checkout_commit_request",
2118
+ cwd,
2119
+ message: input.message,
2120
+ addAll: input.addAll,
2121
+ },
2122
+ responseType: "checkout_commit_response",
2123
+ });
2124
+ }
2125
+ async checkoutMerge(cwd, input, requestId) {
2126
+ return this.sendCorrelatedSessionRequest({
2127
+ requestId,
2128
+ message: {
2129
+ type: "checkout_merge_request",
2130
+ cwd,
2131
+ baseRef: input.baseRef,
2132
+ strategy: input.strategy,
2133
+ requireCleanTarget: input.requireCleanTarget,
2134
+ },
2135
+ responseType: "checkout_merge_response",
2136
+ });
2137
+ }
2138
+ async checkoutMergeFromBase(cwd, input, requestId) {
2139
+ return this.sendCorrelatedSessionRequest({
2140
+ requestId,
2141
+ message: {
2142
+ type: "checkout_merge_from_base_request",
2143
+ cwd,
2144
+ baseRef: input.baseRef,
2145
+ requireCleanTarget: input.requireCleanTarget,
2146
+ },
2147
+ responseType: "checkout_merge_from_base_response",
2148
+ });
2149
+ }
2150
+ async checkoutPull(cwd, requestId) {
2151
+ return this.sendCorrelatedSessionRequest({
2152
+ requestId,
2153
+ message: {
2154
+ type: "checkout_pull_request",
2155
+ cwd,
2156
+ },
2157
+ responseType: "checkout_pull_response",
2158
+ });
2159
+ }
2160
+ async checkoutPush(cwd, requestId) {
2161
+ return this.sendCorrelatedSessionRequest({
2162
+ requestId,
2163
+ message: {
2164
+ type: "checkout_push_request",
2165
+ cwd,
2166
+ },
2167
+ responseType: "checkout_push_response",
2168
+ });
2169
+ }
2170
+ async checkoutRefresh(cwd, requestId) {
2171
+ return this.sendCorrelatedSessionRequest({
2172
+ requestId,
2173
+ message: {
2174
+ type: "checkout.refresh.request",
2175
+ cwd,
2176
+ },
2177
+ responseType: "checkout.refresh.response",
2178
+ });
2179
+ }
2180
+ async checkoutPrCreate(cwd, input, requestId) {
2181
+ return this.sendCorrelatedSessionRequest({
2182
+ requestId,
2183
+ message: {
2184
+ type: "checkout_pr_create_request",
2185
+ cwd,
2186
+ title: input.title,
2187
+ body: input.body,
2188
+ baseRef: input.baseRef,
2189
+ },
2190
+ responseType: "checkout_pr_create_response",
2191
+ });
2192
+ }
2193
+ async checkoutPrMerge(cwd, input, requestId) {
2194
+ return this.sendCorrelatedSessionRequest({
2195
+ requestId,
2196
+ message: {
2197
+ type: "checkout_pr_merge_request",
2198
+ cwd,
2199
+ mergeMethod: input.method,
2200
+ },
2201
+ responseType: "checkout_pr_merge_response",
2202
+ });
2203
+ }
2204
+ async checkoutGithubSetAutoMerge(cwd, input, requestId) {
2205
+ return this.sendNamespacedCorrelatedSessionRequest({
2206
+ requestId,
2207
+ message: {
2208
+ type: "checkout.github.set_auto_merge.request",
2209
+ cwd,
2210
+ enabled: input.enabled,
2211
+ ...(input.enabled ? { mergeMethod: input.method } : {}),
2212
+ },
2213
+ });
2214
+ }
2215
+ async checkoutGithubGetCheckDetails(input, requestId) {
2216
+ return this.sendNamespacedCorrelatedSessionRequest({
2217
+ requestId,
2218
+ message: {
2219
+ type: "checkout.github.get_check_details.request",
2220
+ cwd: input.cwd,
2221
+ repoOwner: input.repoOwner,
2222
+ repoName: input.repoName,
2223
+ checkRunId: input.checkRunId,
2224
+ workflowRunId: input.workflowRunId,
2225
+ },
2226
+ });
2227
+ }
2228
+ async checkoutPrStatus(cwd, requestId) {
2229
+ return this.sendCorrelatedSessionRequest({
2230
+ requestId,
2231
+ message: {
2232
+ type: "checkout_pr_status_request",
2233
+ cwd,
2234
+ },
2235
+ responseType: "checkout_pr_status_response",
2236
+ });
2237
+ }
2238
+ async pullRequestTimeline(input, requestId) {
2239
+ return this.sendCorrelatedSessionRequest({
2240
+ requestId,
2241
+ message: {
2242
+ type: "pull_request_timeline_request",
2243
+ cwd: input.cwd,
2244
+ prNumber: input.prNumber,
2245
+ repoOwner: input.repoOwner,
2246
+ repoName: input.repoName,
2247
+ },
2248
+ responseType: "pull_request_timeline_response",
2249
+ });
2250
+ }
2251
+ async checkoutSwitchBranch(cwd, branch, requestId) {
2252
+ return this.sendCorrelatedSessionRequest({
2253
+ requestId,
2254
+ message: {
2255
+ type: "checkout_switch_branch_request",
2256
+ cwd,
2257
+ branch,
2258
+ },
2259
+ responseType: "checkout_switch_branch_response",
2260
+ });
2261
+ }
2262
+ async renameBranch(input) {
2263
+ return this.sendCorrelatedSessionRequest({
2264
+ requestId: input.requestId,
2265
+ message: {
2266
+ type: "checkout.rename_branch.request",
2267
+ cwd: input.cwd,
2268
+ branch: input.branch,
2269
+ },
2270
+ responseType: "checkout.rename_branch.response",
2271
+ });
2272
+ }
2273
+ async stashSave(cwd, options, requestId) {
2274
+ return this.sendCorrelatedSessionRequest({
2275
+ requestId,
2276
+ message: {
2277
+ type: "stash_save_request",
2278
+ cwd,
2279
+ branch: options?.branch,
2280
+ },
2281
+ responseType: "stash_save_response",
2282
+ });
2283
+ }
2284
+ async stashPop(cwd, stashIndex, requestId) {
2285
+ return this.sendCorrelatedSessionRequest({
2286
+ requestId,
2287
+ message: {
2288
+ type: "stash_pop_request",
2289
+ cwd,
2290
+ stashIndex,
2291
+ },
2292
+ responseType: "stash_pop_response",
2293
+ });
2294
+ }
2295
+ async stashList(cwd, options, requestId) {
2296
+ return this.sendCorrelatedSessionRequest({
2297
+ requestId,
2298
+ message: {
2299
+ type: "stash_list_request",
2300
+ cwd,
2301
+ byspaceOnly: options?.byspaceOnly,
2302
+ },
2303
+ responseType: "stash_list_response",
2304
+ });
2305
+ }
2306
+ async getBySpaceWorktreeList(input, requestId) {
2307
+ return this.sendCorrelatedSessionRequest({
2308
+ requestId,
2309
+ message: {
2310
+ type: "byspace_worktree_list_request",
2311
+ cwd: input.cwd,
2312
+ repoRoot: input.repoRoot,
2313
+ },
2314
+ responseType: "byspace_worktree_list_response",
2315
+ });
2316
+ }
2317
+ async archiveBySpaceWorktree(input, requestId) {
2318
+ return this.sendCorrelatedSessionRequest({
2319
+ requestId,
2320
+ message: {
2321
+ type: "byspace_worktree_archive_request",
2322
+ worktreePath: input.worktreePath,
2323
+ repoRoot: input.repoRoot,
2324
+ branchName: input.branchName,
2325
+ ...(input.workspaceId !== undefined ? { workspaceId: input.workspaceId } : {}),
2326
+ ...(input.scope !== undefined ? { scope: input.scope } : {}),
2327
+ },
2328
+ responseType: "byspace_worktree_archive_response",
2329
+ });
2330
+ }
2331
+ async createBySpaceWorktree(input, requestId) {
2332
+ return this.sendCorrelatedSessionRequest({
2333
+ requestId,
2334
+ message: {
2335
+ type: "create_byspace_worktree_request",
2336
+ cwd: input.cwd,
2337
+ ...(input.projectId !== undefined ? { projectId: input.projectId } : {}),
2338
+ worktreeSlug: input.worktreeSlug,
2339
+ ...(input.firstAgentContext !== undefined
2340
+ ? { firstAgentContext: input.firstAgentContext }
2341
+ : {}),
2342
+ ...(input.refName !== undefined ? { refName: input.refName } : {}),
2343
+ ...(input.action !== undefined ? { action: input.action } : {}),
2344
+ ...(input.githubPrNumber !== undefined ? { githubPrNumber: input.githubPrNumber } : {}),
2345
+ },
2346
+ responseType: "create_byspace_worktree_response",
2347
+ });
2348
+ }
2349
+ async createWorkspace(input, requestId) {
2350
+ return this.sendCorrelatedSessionRequest({
2351
+ requestId,
2352
+ message: {
2353
+ type: "workspace.create.request",
2354
+ source: input.source,
2355
+ ...(input.title !== undefined ? { title: input.title } : {}),
2356
+ ...(input.firstAgentContext !== undefined
2357
+ ? { firstAgentContext: input.firstAgentContext }
2358
+ : {}),
2359
+ },
2360
+ responseType: "workspace.create.response",
2361
+ });
2362
+ }
2363
+ async validateBranch(options, requestId) {
2364
+ return this.sendCorrelatedSessionRequest({
2365
+ requestId,
2366
+ message: {
2367
+ type: "validate_branch_request",
2368
+ cwd: options.cwd,
2369
+ branchName: options.branchName,
2370
+ },
2371
+ responseType: "validate_branch_response",
2372
+ });
2373
+ }
2374
+ async getBranchSuggestions(options, requestId) {
2375
+ return this.sendCorrelatedSessionRequest({
2376
+ requestId,
2377
+ message: {
2378
+ type: "branch_suggestions_request",
2379
+ cwd: options.cwd,
2380
+ query: options.query,
2381
+ limit: options.limit,
2382
+ },
2383
+ responseType: "branch_suggestions_response",
2384
+ });
2385
+ }
2386
+ async searchGitHub(options, requestId) {
2387
+ return this.sendCorrelatedSessionRequest({
2388
+ requestId,
2389
+ message: {
2390
+ type: "github_search_request",
2391
+ cwd: options.cwd,
2392
+ query: options.query,
2393
+ limit: options.limit,
2394
+ kinds: options.kinds,
2395
+ },
2396
+ responseType: "github_search_response",
2397
+ });
2398
+ }
2399
+ async getDirectorySuggestions(options, requestId) {
2400
+ return this.sendCorrelatedSessionRequest({
2401
+ requestId,
2402
+ message: {
2403
+ type: "directory_suggestions_request",
2404
+ query: options.query,
2405
+ cwd: options.cwd,
2406
+ includeFiles: options.includeFiles,
2407
+ includeDirectories: options.includeDirectories,
2408
+ matchMode: options.matchMode,
2409
+ limit: options.limit,
2410
+ },
2411
+ responseType: "directory_suggestions_response",
2412
+ // Home-tree scans on large home dirs can take several seconds; don't cut
2413
+ // the suggestion request off early (it would surface as an empty list).
2414
+ });
2415
+ }
2416
+ // ============================================================================
2417
+ // File Explorer
2418
+ // ============================================================================
2419
+ async requestFileExplorer(cwd, path, mode, requestId, acceptBinary = false) {
2420
+ return this.sendCorrelatedSessionRequest({
2421
+ requestId,
2422
+ message: {
2423
+ type: "file_explorer_request",
2424
+ cwd,
2425
+ path,
2426
+ mode,
2427
+ ...(acceptBinary ? { acceptBinary: true } : {}),
2428
+ },
2429
+ responseType: "file_explorer_response",
2430
+ });
2431
+ }
2432
+ async listDirectory(cwd, path, requestId) {
2433
+ const payload = await this.requestFileExplorer(cwd, path, "list", requestId);
2434
+ if (payload.error) {
2435
+ throw new Error(payload.error);
2436
+ }
2437
+ if (!payload.directory) {
2438
+ throw new Error("Directory listing unavailable.");
2439
+ }
2440
+ return payload.directory;
2441
+ }
2442
+ async readFile(cwd, path, requestId) {
2443
+ const resolvedRequestId = this.createRequestId(requestId);
2444
+ this.pendingBinaryFileReads.set(resolvedRequestId, { cwd, path });
2445
+ try {
2446
+ const payload = await this.requestFileExplorer(cwd, path, "file", resolvedRequestId, true);
2447
+ if (payload.error) {
2448
+ throw new Error(payload.error);
2449
+ }
2450
+ const binaryResult = this.completedBinaryFileReads.get(resolvedRequestId);
2451
+ if (binaryResult) {
2452
+ this.completedBinaryFileReads.delete(resolvedRequestId);
2453
+ return binaryResult;
2454
+ }
2455
+ if (!payload.file) {
2456
+ throw new Error("File unavailable.");
2457
+ }
2458
+ return legacyExplorerFileToBytes(payload.file);
2459
+ }
2460
+ finally {
2461
+ this.pendingBinaryFileReads.delete(resolvedRequestId);
2462
+ this.activeBinaryFileTransfers.delete(resolvedRequestId);
2463
+ }
2464
+ }
2465
+ async uploadFile(input) {
2466
+ const bytes = asUint8Array(input.bytes);
2467
+ if (!bytes) {
2468
+ throw new Error("File bytes are required.");
2469
+ }
2470
+ const resolvedRequestId = this.createRequestId(input.requestId);
2471
+ const modifiedAt = input.modifiedAt ?? new Date().toISOString();
2472
+ const responsePromise = this.sendCorrelatedRequest({
2473
+ requestId: resolvedRequestId,
2474
+ message: {
2475
+ type: "file.upload.request",
2476
+ fileName: input.fileName,
2477
+ mimeType: input.mimeType,
2478
+ size: bytes.byteLength,
2479
+ modifiedAt,
2480
+ requestId: resolvedRequestId,
2481
+ },
2482
+ responseType: "file.upload.response",
2483
+ options: { skipQueue: true },
2484
+ });
2485
+ this.sendBinaryFrame(encodeFileTransferFrame({
2486
+ opcode: FileTransferOpcode.FileBegin,
2487
+ requestId: resolvedRequestId,
2488
+ metadata: {
2489
+ mime: input.mimeType,
2490
+ size: bytes.byteLength,
2491
+ encoding: "binary",
2492
+ modifiedAt,
2493
+ fileName: input.fileName,
2494
+ },
2495
+ }));
2496
+ const chunkSize = input.chunkSize ?? 1024 * 1024;
2497
+ for (let offset = 0; offset < bytes.byteLength; offset += chunkSize) {
2498
+ this.sendBinaryFrame(encodeFileTransferFrame({
2499
+ opcode: FileTransferOpcode.FileChunk,
2500
+ requestId: resolvedRequestId,
2501
+ payload: bytes.subarray(offset, Math.min(offset + chunkSize, bytes.byteLength)),
2502
+ }));
2503
+ }
2504
+ this.sendBinaryFrame(encodeFileTransferFrame({
2505
+ opcode: FileTransferOpcode.FileEnd,
2506
+ requestId: resolvedRequestId,
2507
+ }));
2508
+ return responsePromise;
2509
+ }
2510
+ async requestDownloadToken(cwd, path, requestId) {
2511
+ return this.sendCorrelatedSessionRequest({
2512
+ requestId,
2513
+ message: {
2514
+ type: "file_download_token_request",
2515
+ cwd,
2516
+ path,
2517
+ },
2518
+ responseType: "file_download_token_response",
2519
+ });
2520
+ }
2521
+ async requestProjectIcon(cwd, requestId) {
2522
+ return this.sendCorrelatedSessionRequest({
2523
+ requestId,
2524
+ message: {
2525
+ type: "project_icon_request",
2526
+ cwd,
2527
+ },
2528
+ responseType: "project_icon_response",
2529
+ });
2530
+ }
2531
+ // ============================================================================
2532
+ // Provider Models / Commands
2533
+ // ============================================================================
2534
+ async listProviderModels(provider, options) {
2535
+ const payload = await this.sendCorrelatedSessionRequest({
2536
+ requestId: options?.requestId,
2537
+ message: {
2538
+ type: "list_provider_models_request",
2539
+ provider,
2540
+ cwd: options?.cwd,
2541
+ },
2542
+ responseType: "list_provider_models_response",
2543
+ // Provider SDK cold starts (especially model discovery) can exceed 60s.
2544
+ timeout: 90000,
2545
+ });
2546
+ return normalizeListProviderModelsPayload(payload);
2547
+ }
2548
+ async listProviderModes(provider, options) {
2549
+ return this.sendCorrelatedSessionRequest({
2550
+ requestId: options?.requestId,
2551
+ message: {
2552
+ type: "list_provider_modes_request",
2553
+ provider,
2554
+ cwd: options?.cwd,
2555
+ },
2556
+ responseType: "list_provider_modes_response",
2557
+ timeout: 90000,
2558
+ });
2559
+ }
2560
+ async listProviderFeatures(draftConfig, options) {
2561
+ return this.sendCorrelatedSessionRequest({
2562
+ requestId: options?.requestId,
2563
+ message: {
2564
+ type: "list_provider_features_request",
2565
+ draftConfig,
2566
+ },
2567
+ responseType: "list_provider_features_response",
2568
+ timeout: 90000,
2569
+ });
2570
+ }
2571
+ async listAvailableProviders(options) {
2572
+ return this.sendCorrelatedSessionRequest({
2573
+ requestId: options?.requestId,
2574
+ message: {
2575
+ type: "list_available_providers_request",
2576
+ },
2577
+ responseType: "list_available_providers_response",
2578
+ });
2579
+ }
2580
+ async getProvidersSnapshot(options) {
2581
+ const payload = await this.sendCorrelatedSessionRequest({
2582
+ requestId: options?.requestId,
2583
+ message: {
2584
+ type: "get_providers_snapshot_request",
2585
+ cwd: options?.cwd,
2586
+ },
2587
+ responseType: "get_providers_snapshot_response",
2588
+ });
2589
+ return normalizeProvidersSnapshotPayload(payload);
2590
+ }
2591
+ async getDaemonConfig(requestId) {
2592
+ return this.sendCorrelatedSessionRequest({
2593
+ requestId,
2594
+ message: {
2595
+ type: "get_daemon_config_request",
2596
+ },
2597
+ responseType: "get_daemon_config_response",
2598
+ });
2599
+ }
2600
+ async getDaemonStatus(options) {
2601
+ return this.sendCorrelatedSessionRequest({
2602
+ requestId: options?.requestId,
2603
+ message: {
2604
+ type: "daemon.get_status.request",
2605
+ },
2606
+ responseType: "daemon.get_status.response",
2607
+ timeout: options?.timeout,
2608
+ });
2609
+ }
2610
+ async getDaemonPairingOffer(options) {
2611
+ return this.sendCorrelatedSessionRequest({
2612
+ requestId: options?.requestId,
2613
+ message: {
2614
+ type: "daemon.get_pairing_offer.request",
2615
+ },
2616
+ responseType: "daemon.get_pairing_offer.response",
2617
+ timeout: options?.timeout,
2618
+ });
2619
+ }
2620
+ async collectDiagnostics(requestId) {
2621
+ return this.sendNamespacedCorrelatedSessionRequest({
2622
+ requestId,
2623
+ message: {
2624
+ type: "diagnostics.request",
2625
+ },
2626
+ });
2627
+ }
2628
+ async patchDaemonConfig(config, requestId) {
2629
+ return this.sendCorrelatedSessionRequest({
2630
+ requestId,
2631
+ message: {
2632
+ type: "set_daemon_config_request",
2633
+ config,
2634
+ },
2635
+ responseType: "set_daemon_config_response",
2636
+ });
2637
+ }
2638
+ async readProjectConfig(repoRoot, requestId) {
2639
+ return this.sendCorrelatedSessionRequest({
2640
+ requestId,
2641
+ message: {
2642
+ type: "read_project_config_request",
2643
+ repoRoot,
2644
+ },
2645
+ responseType: "read_project_config_response",
2646
+ });
2647
+ }
2648
+ async writeProjectConfig(input) {
2649
+ return this.sendCorrelatedSessionRequest({
2650
+ requestId: input.requestId,
2651
+ message: {
2652
+ type: "write_project_config_request",
2653
+ repoRoot: input.repoRoot,
2654
+ config: input.config,
2655
+ expectedRevision: input.expectedRevision,
2656
+ },
2657
+ responseType: "write_project_config_response",
2658
+ });
2659
+ }
2660
+ async refreshProvidersSnapshot(options) {
2661
+ return this.sendCorrelatedSessionRequest({
2662
+ requestId: options?.requestId,
2663
+ message: {
2664
+ type: "refresh_providers_snapshot_request",
2665
+ cwd: options?.cwd,
2666
+ providers: options?.providers,
2667
+ },
2668
+ responseType: "refresh_providers_snapshot_response",
2669
+ timeout: 120000,
2670
+ });
2671
+ }
2672
+ async getProviderDiagnostic(provider, options) {
2673
+ return this.sendCorrelatedSessionRequest({
2674
+ requestId: options?.requestId,
2675
+ message: {
2676
+ type: "provider_diagnostic_request",
2677
+ provider,
2678
+ },
2679
+ responseType: "provider_diagnostic_response",
2680
+ timeout: 180000,
2681
+ });
2682
+ }
2683
+ async listProviderUsage(options) {
2684
+ return this.sendNamespacedCorrelatedSessionRequest({
2685
+ requestId: options?.requestId,
2686
+ message: {
2687
+ type: "provider.usage.list.request",
2688
+ },
2689
+ });
2690
+ }
2691
+ async listCommands(input, legacyOptions) {
2692
+ const options = normalizeListCommandsOptions(input, legacyOptions);
2693
+ return this.sendCorrelatedSessionRequest({
2694
+ requestId: options.requestId,
2695
+ message: {
2696
+ type: "list_commands_request",
2697
+ agentId: options.agentId,
2698
+ ...(options.draftConfig ? { draftConfig: options.draftConfig } : {}),
2699
+ },
2700
+ responseType: "list_commands_response",
2701
+ });
2702
+ }
2703
+ // ============================================================================
2704
+ // Permissions
2705
+ // ============================================================================
2706
+ async respondToPermission(agentId, requestId, response) {
2707
+ this.sendSessionMessage({
2708
+ type: "agent_permission_response",
2709
+ agentId,
2710
+ requestId,
2711
+ response,
2712
+ });
2713
+ }
2714
+ async respondToPermissionAndWait(agentId, requestId, response, timeout = 15000) {
2715
+ const message = SessionInboundMessageSchema.parse({
2716
+ type: "agent_permission_response",
2717
+ agentId,
2718
+ requestId,
2719
+ response,
2720
+ });
2721
+ return this.sendRequest({
2722
+ requestId,
2723
+ message,
2724
+ timeout,
2725
+ options: { skipQueue: true },
2726
+ select: (msg) => {
2727
+ if (msg.type !== "agent_permission_resolved") {
2728
+ return null;
2729
+ }
2730
+ if (msg.payload.requestId !== requestId) {
2731
+ return null;
2732
+ }
2733
+ if (msg.payload.agentId !== agentId) {
2734
+ return null;
2735
+ }
2736
+ return msg.payload;
2737
+ },
2738
+ });
2739
+ }
2740
+ // ============================================================================
2741
+ // Waiting / Streaming Helpers
2742
+ // ============================================================================
2743
+ async waitForAgentUpsert(agentId, predicate, timeout = 60000) {
2744
+ const deadline = Date.now() + timeout;
2745
+ const remainingTimeoutMs = () => Math.max(1, deadline - Date.now());
2746
+ const timeoutError = () => new Error(`Timed out waiting for agent ${agentId}`);
2747
+ const fetchAgentWithinDeadline = () => this.fetchAgent({ agentId, timeout: remainingTimeoutMs() }).catch(() => null);
2748
+ const initialResult = await fetchAgentWithinDeadline();
2749
+ if (initialResult && predicate(initialResult.agent)) {
2750
+ return initialResult.agent;
2751
+ }
2752
+ if (Date.now() >= deadline) {
2753
+ throw timeoutError();
2754
+ }
2755
+ return await new Promise((resolve, reject) => {
2756
+ let settled = false;
2757
+ let pollInFlight = false;
2758
+ let pollTimer = null;
2759
+ let timeoutTimer = null;
2760
+ let unsubscribe = null;
2761
+ const finish = (result) => {
2762
+ if (settled) {
2763
+ return;
2764
+ }
2765
+ settled = true;
2766
+ if (timeoutTimer) {
2767
+ clearTimeout(timeoutTimer);
2768
+ timeoutTimer = null;
2769
+ }
2770
+ if (pollTimer) {
2771
+ clearInterval(pollTimer);
2772
+ pollTimer = null;
2773
+ }
2774
+ if (unsubscribe) {
2775
+ unsubscribe();
2776
+ unsubscribe = null;
2777
+ }
2778
+ if (result.kind === "ok") {
2779
+ resolve(result.snapshot);
2780
+ return;
2781
+ }
2782
+ reject(result.error);
2783
+ };
2784
+ const maybeResolve = (snapshot) => {
2785
+ if (!snapshot) {
2786
+ return false;
2787
+ }
2788
+ if (!predicate(snapshot)) {
2789
+ return false;
2790
+ }
2791
+ finish({ kind: "ok", snapshot });
2792
+ return true;
2793
+ };
2794
+ const poll = async () => {
2795
+ if (settled || pollInFlight) {
2796
+ return;
2797
+ }
2798
+ pollInFlight = true;
2799
+ try {
2800
+ const result = await fetchAgentWithinDeadline();
2801
+ maybeResolve(result?.agent ?? null);
2802
+ }
2803
+ finally {
2804
+ pollInFlight = false;
2805
+ }
2806
+ };
2807
+ unsubscribe = this.on("agent_update", (message) => {
2808
+ if (settled) {
2809
+ return;
2810
+ }
2811
+ if (message.payload.kind !== "upsert") {
2812
+ return;
2813
+ }
2814
+ const snapshot = message.payload.agent;
2815
+ if (snapshot.id !== agentId) {
2816
+ return;
2817
+ }
2818
+ maybeResolve(snapshot);
2819
+ });
2820
+ const remaining = Math.max(1, deadline - Date.now());
2821
+ timeoutTimer = setTimeout(() => {
2822
+ finish({
2823
+ kind: "error",
2824
+ error: timeoutError(),
2825
+ });
2826
+ }, remaining);
2827
+ pollTimer = setInterval(() => {
2828
+ void poll();
2829
+ }, 250);
2830
+ void poll();
2831
+ });
2832
+ }
2833
+ async waitForFinish(agentId, timeout = 60000) {
2834
+ const requestId = this.createRequestId();
2835
+ const hasTimeout = Number.isFinite(timeout) && timeout > 0;
2836
+ const message = SessionInboundMessageSchema.parse({
2837
+ type: "wait_for_finish_request",
2838
+ requestId,
2839
+ agentId,
2840
+ ...(hasTimeout ? { timeoutMs: timeout } : {}),
2841
+ });
2842
+ const payload = await this.sendCorrelatedRequest({
2843
+ requestId,
2844
+ message,
2845
+ responseType: "wait_for_finish_response",
2846
+ timeout: hasTimeout ? timeout + 5000 : 0,
2847
+ options: { skipQueue: true },
2848
+ });
2849
+ return {
2850
+ status: payload.status,
2851
+ final: payload.final,
2852
+ error: payload.error,
2853
+ lastMessage: payload.lastMessage,
2854
+ };
2855
+ }
2856
+ // ============================================================================
2857
+ // Terminals
2858
+ // ============================================================================
2859
+ subscribeTerminals(input) {
2860
+ this.terminalDirectorySubscriptions.set(terminalSubscriptionKey(input.cwd, input.workspaceId), {
2861
+ cwd: input.cwd,
2862
+ workspaceId: input.workspaceId,
2863
+ });
2864
+ if (!this.transport || this.connectionState.status !== "connected") {
2865
+ return;
2866
+ }
2867
+ this.sendSessionMessage({
2868
+ type: "subscribe_terminals_request",
2869
+ cwd: input.cwd,
2870
+ ...(input.workspaceId !== undefined ? { workspaceId: input.workspaceId } : {}),
2871
+ });
2872
+ }
2873
+ unsubscribeTerminals(input) {
2874
+ this.terminalDirectorySubscriptions.delete(terminalSubscriptionKey(input.cwd, input.workspaceId));
2875
+ if (!this.transport || this.connectionState.status !== "connected") {
2876
+ return;
2877
+ }
2878
+ this.sendSessionMessage({
2879
+ type: "unsubscribe_terminals_request",
2880
+ cwd: input.cwd,
2881
+ ...(input.workspaceId !== undefined ? { workspaceId: input.workspaceId } : {}),
2882
+ });
2883
+ }
2884
+ async listTerminals(cwd, requestId, options) {
2885
+ const resolvedRequestId = this.createRequestId(requestId);
2886
+ const message = SessionInboundMessageSchema.parse({
2887
+ type: "list_terminals_request",
2888
+ ...(cwd === undefined ? {} : { cwd }),
2889
+ ...(options?.workspaceId !== undefined ? { workspaceId: options.workspaceId } : {}),
2890
+ requestId: resolvedRequestId,
2891
+ });
2892
+ return this.sendCorrelatedRequest({
2893
+ requestId: resolvedRequestId,
2894
+ message,
2895
+ responseType: "list_terminals_response",
2896
+ options: { skipQueue: true },
2897
+ });
2898
+ }
2899
+ async createTerminal(cwd, name, requestId, options) {
2900
+ const resolvedRequestId = this.createRequestId(requestId);
2901
+ const message = SessionInboundMessageSchema.parse({
2902
+ type: "create_terminal_request",
2903
+ cwd,
2904
+ name,
2905
+ agentId: options?.agentId,
2906
+ command: options?.command,
2907
+ args: options?.args,
2908
+ ...(options?.workspaceId !== undefined ? { workspaceId: options.workspaceId } : {}),
2909
+ ...(options?.size !== undefined ? { size: options.size } : {}),
2910
+ requestId: resolvedRequestId,
2911
+ });
2912
+ return this.sendCorrelatedRequest({
2913
+ requestId: resolvedRequestId,
2914
+ message,
2915
+ responseType: "create_terminal_response",
2916
+ options: { skipQueue: true },
2917
+ });
2918
+ }
2919
+ async renameTerminal(input) {
2920
+ return this.sendCorrelatedSessionRequest({
2921
+ requestId: input.requestId,
2922
+ message: {
2923
+ type: "terminal.rename.request",
2924
+ terminalId: input.terminalId,
2925
+ title: input.title,
2926
+ },
2927
+ responseType: "terminal.rename.response",
2928
+ });
2929
+ }
2930
+ async subscribeTerminal(terminalId, optionsOrRequestId) {
2931
+ const restore = typeof optionsOrRequestId === "object" ? optionsOrRequestId.restore : undefined;
2932
+ const requestId = typeof optionsOrRequestId === "object" ? optionsOrRequestId.requestId : optionsOrRequestId;
2933
+ const resolvedRequestId = this.createRequestId(requestId);
2934
+ const message = SessionInboundMessageSchema.parse({
2935
+ type: "subscribe_terminal_request",
2936
+ terminalId,
2937
+ requestId: resolvedRequestId,
2938
+ ...(restore ? { restore } : {}),
2939
+ });
2940
+ const payload = await this.sendCorrelatedRequest({
2941
+ requestId: resolvedRequestId,
2942
+ message,
2943
+ responseType: "subscribe_terminal_response",
2944
+ options: { skipQueue: true },
2945
+ });
2946
+ if (payload.error === null) {
2947
+ this.terminalStreams.setSlot(terminalId, payload.slot);
2948
+ }
2949
+ return payload;
2950
+ }
2951
+ unsubscribeTerminal(terminalId) {
2952
+ this.terminalStreams.removeTerminal(terminalId);
2953
+ this.sendSessionMessage({
2954
+ type: "unsubscribe_terminal_request",
2955
+ terminalId,
2956
+ });
2957
+ }
2958
+ sendTerminalInput(terminalId, message) {
2959
+ const frame = this.terminalStreams.encodeInput(terminalId, message);
2960
+ if (frame) {
2961
+ this.sendBinaryFrame(frame);
2962
+ return;
2963
+ }
2964
+ this.sendSessionMessage({
2965
+ type: "terminal_input",
2966
+ terminalId,
2967
+ message,
2968
+ });
2969
+ }
2970
+ async killTerminal(terminalId, requestId) {
2971
+ const resolvedRequestId = this.createRequestId(requestId);
2972
+ const message = SessionInboundMessageSchema.parse({
2973
+ type: "kill_terminal_request",
2974
+ terminalId,
2975
+ requestId: resolvedRequestId,
2976
+ });
2977
+ return this.sendCorrelatedRequest({
2978
+ requestId: resolvedRequestId,
2979
+ message,
2980
+ responseType: "kill_terminal_response",
2981
+ options: { skipQueue: true },
2982
+ });
2983
+ }
2984
+ async closeItems(input, requestId) {
2985
+ const resolvedRequestId = this.createRequestId(requestId);
2986
+ const message = SessionInboundMessageSchema.parse({
2987
+ type: "close_items_request",
2988
+ agentIds: input.agentIds ?? [],
2989
+ terminalIds: input.terminalIds ?? [],
2990
+ requestId: resolvedRequestId,
2991
+ });
2992
+ return this.sendCorrelatedRequest({
2993
+ requestId: resolvedRequestId,
2994
+ message,
2995
+ responseType: "close_items_response",
2996
+ options: { skipQueue: true },
2997
+ });
2998
+ }
2999
+ async captureTerminal(terminalId, options, requestId) {
3000
+ const resolvedRequestId = this.createRequestId(requestId);
3001
+ const message = SessionInboundMessageSchema.parse({
3002
+ type: "capture_terminal_request",
3003
+ terminalId,
3004
+ ...(options?.start === undefined ? {} : { start: options.start }),
3005
+ ...(options?.end === undefined ? {} : { end: options.end }),
3006
+ ...(options?.stripAnsi === undefined ? {} : { stripAnsi: options.stripAnsi }),
3007
+ requestId: resolvedRequestId,
3008
+ });
3009
+ return this.sendCorrelatedRequest({
3010
+ requestId: resolvedRequestId,
3011
+ message,
3012
+ responseType: "capture_terminal_response",
3013
+ options: { skipQueue: true },
3014
+ });
3015
+ }
3016
+ async createChatRoom(options) {
3017
+ return this.sendCorrelatedSessionRequest({
3018
+ requestId: options.requestId,
3019
+ message: {
3020
+ type: "chat/create",
3021
+ name: options.name,
3022
+ ...(options.purpose ? { purpose: options.purpose } : {}),
3023
+ },
3024
+ responseType: "chat/create/response",
3025
+ });
3026
+ }
3027
+ async listChatRooms(requestId) {
3028
+ return this.sendCorrelatedSessionRequest({
3029
+ requestId,
3030
+ message: {
3031
+ type: "chat/list",
3032
+ },
3033
+ responseType: "chat/list/response",
3034
+ });
3035
+ }
3036
+ async inspectChatRoom(options) {
3037
+ return this.sendCorrelatedSessionRequest({
3038
+ requestId: options.requestId,
3039
+ message: {
3040
+ type: "chat/inspect",
3041
+ room: options.room,
3042
+ },
3043
+ responseType: "chat/inspect/response",
3044
+ });
3045
+ }
3046
+ async deleteChatRoom(options) {
3047
+ return this.sendCorrelatedSessionRequest({
3048
+ requestId: options.requestId,
3049
+ message: {
3050
+ type: "chat/delete",
3051
+ room: options.room,
3052
+ },
3053
+ responseType: "chat/delete/response",
3054
+ });
3055
+ }
3056
+ async postChatMessage(options) {
3057
+ return this.sendCorrelatedSessionRequest({
3058
+ requestId: options.requestId,
3059
+ message: {
3060
+ type: "chat/post",
3061
+ room: options.room,
3062
+ body: options.body,
3063
+ ...(options.authorAgentId ? { authorAgentId: options.authorAgentId } : {}),
3064
+ ...(options.replyToMessageId ? { replyToMessageId: options.replyToMessageId } : {}),
3065
+ },
3066
+ responseType: "chat/post/response",
3067
+ });
3068
+ }
3069
+ async readChatMessages(options) {
3070
+ return this.sendCorrelatedSessionRequest({
3071
+ requestId: options.requestId,
3072
+ message: {
3073
+ type: "chat/read",
3074
+ room: options.room,
3075
+ ...(typeof options.limit === "number" ? { limit: options.limit } : {}),
3076
+ ...(options.since ? { since: options.since } : {}),
3077
+ ...(options.authorAgentId ? { authorAgentId: options.authorAgentId } : {}),
3078
+ },
3079
+ responseType: "chat/read/response",
3080
+ timeout: options.timeout,
3081
+ });
3082
+ }
3083
+ async waitForChatMessages(options) {
3084
+ return this.sendCorrelatedSessionRequest({
3085
+ requestId: options.requestId,
3086
+ message: {
3087
+ type: "chat/wait",
3088
+ room: options.room,
3089
+ ...(options.afterMessageId ? { afterMessageId: options.afterMessageId } : {}),
3090
+ ...(typeof options.timeoutMs === "number" ? { timeoutMs: options.timeoutMs } : {}),
3091
+ },
3092
+ responseType: "chat/wait/response",
3093
+ timeout: (options.timeoutMs ?? 0) + 10000,
3094
+ });
3095
+ }
3096
+ async scheduleCreate(options) {
3097
+ return this.sendCorrelatedSessionRequest({
3098
+ requestId: options.requestId,
3099
+ message: {
3100
+ type: "schedule/create",
3101
+ prompt: options.prompt,
3102
+ cadence: options.cadence,
3103
+ target: options.target,
3104
+ ...(options.name ? { name: options.name } : {}),
3105
+ ...(typeof options.maxRuns === "number" ? { maxRuns: options.maxRuns } : {}),
3106
+ ...(options.expiresAt ? { expiresAt: options.expiresAt } : {}),
3107
+ ...(typeof options.runOnCreate === "boolean" ? { runOnCreate: options.runOnCreate } : {}),
3108
+ },
3109
+ responseType: "schedule/create/response",
3110
+ });
3111
+ }
3112
+ async scheduleList(requestId) {
3113
+ return this.sendCorrelatedSessionRequest({
3114
+ requestId,
3115
+ message: {
3116
+ type: "schedule/list",
3117
+ },
3118
+ responseType: "schedule/list/response",
3119
+ });
3120
+ }
3121
+ async scheduleInspect(options) {
3122
+ return this.sendCorrelatedSessionRequest({
3123
+ requestId: options.requestId,
3124
+ message: {
3125
+ type: "schedule/inspect",
3126
+ scheduleId: options.id,
3127
+ },
3128
+ responseType: "schedule/inspect/response",
3129
+ });
3130
+ }
3131
+ async scheduleLogs(options) {
3132
+ return this.sendCorrelatedSessionRequest({
3133
+ requestId: options.requestId,
3134
+ message: {
3135
+ type: "schedule/logs",
3136
+ scheduleId: options.id,
3137
+ },
3138
+ responseType: "schedule/logs/response",
3139
+ });
3140
+ }
3141
+ async schedulePause(options) {
3142
+ return this.sendCorrelatedSessionRequest({
3143
+ requestId: options.requestId,
3144
+ message: {
3145
+ type: "schedule/pause",
3146
+ scheduleId: options.id,
3147
+ },
3148
+ responseType: "schedule/pause/response",
3149
+ });
3150
+ }
3151
+ async scheduleResume(options) {
3152
+ return this.sendCorrelatedSessionRequest({
3153
+ requestId: options.requestId,
3154
+ message: {
3155
+ type: "schedule/resume",
3156
+ scheduleId: options.id,
3157
+ },
3158
+ responseType: "schedule/resume/response",
3159
+ });
3160
+ }
3161
+ async scheduleDelete(options) {
3162
+ return this.sendCorrelatedSessionRequest({
3163
+ requestId: options.requestId,
3164
+ message: {
3165
+ type: "schedule/delete",
3166
+ scheduleId: options.id,
3167
+ },
3168
+ responseType: "schedule/delete/response",
3169
+ });
3170
+ }
3171
+ async scheduleRunOnce(options) {
3172
+ return this.sendCorrelatedSessionRequest({
3173
+ requestId: options.requestId,
3174
+ message: {
3175
+ type: "schedule/run-once",
3176
+ scheduleId: options.id,
3177
+ },
3178
+ responseType: "schedule/run-once/response",
3179
+ });
3180
+ }
3181
+ async scheduleUpdate(options) {
3182
+ return this.sendCorrelatedSessionRequest({
3183
+ requestId: options.requestId,
3184
+ message: {
3185
+ type: "schedule/update",
3186
+ scheduleId: options.id,
3187
+ ...(options.name !== undefined ? { name: options.name } : {}),
3188
+ ...(options.prompt !== undefined ? { prompt: options.prompt } : {}),
3189
+ ...(options.cadence !== undefined ? { cadence: options.cadence } : {}),
3190
+ ...(options.newAgentConfig !== undefined ? { newAgentConfig: options.newAgentConfig } : {}),
3191
+ ...(options.maxRuns !== undefined ? { maxRuns: options.maxRuns } : {}),
3192
+ ...(options.expiresAt !== undefined ? { expiresAt: options.expiresAt } : {}),
3193
+ },
3194
+ responseType: "schedule/update/response",
3195
+ });
3196
+ }
3197
+ async loopRun(options) {
3198
+ return this.sendCorrelatedSessionRequest({
3199
+ requestId: options.requestId,
3200
+ message: {
3201
+ type: "loop/run",
3202
+ prompt: options.prompt,
3203
+ cwd: options.cwd,
3204
+ ...(options.provider ? { provider: options.provider } : {}),
3205
+ ...(options.model ? { model: options.model } : {}),
3206
+ ...(options.modeId ? { modeId: options.modeId } : {}),
3207
+ ...(options.verifierProvider ? { verifierProvider: options.verifierProvider } : {}),
3208
+ ...(options.verifierModel ? { verifierModel: options.verifierModel } : {}),
3209
+ ...(options.verifierModeId ? { verifierModeId: options.verifierModeId } : {}),
3210
+ ...(options.verifyPrompt ? { verifyPrompt: options.verifyPrompt } : {}),
3211
+ ...(options.verifyChecks && options.verifyChecks.length > 0
3212
+ ? { verifyChecks: options.verifyChecks }
3213
+ : {}),
3214
+ ...(options.name ? { name: options.name } : {}),
3215
+ ...(typeof options.sleepMs === "number" ? { sleepMs: options.sleepMs } : {}),
3216
+ ...(typeof options.maxIterations === "number"
3217
+ ? { maxIterations: options.maxIterations }
3218
+ : {}),
3219
+ ...(typeof options.maxTimeMs === "number" ? { maxTimeMs: options.maxTimeMs } : {}),
3220
+ },
3221
+ responseType: "loop/run/response",
3222
+ });
3223
+ }
3224
+ async loopList(requestId) {
3225
+ return this.sendCorrelatedSessionRequest({
3226
+ requestId,
3227
+ message: {
3228
+ type: "loop/list",
3229
+ },
3230
+ responseType: "loop/list/response",
3231
+ });
3232
+ }
3233
+ async loopInspect(options) {
3234
+ const normalized = typeof options === "string" ? { id: options } : options;
3235
+ return this.sendCorrelatedSessionRequest({
3236
+ requestId: normalized.requestId,
3237
+ message: {
3238
+ type: "loop/inspect",
3239
+ id: normalized.id,
3240
+ },
3241
+ responseType: "loop/inspect/response",
3242
+ });
3243
+ }
3244
+ async loopLogs(options, afterSeq) {
3245
+ const normalized = typeof options === "string" ? { id: options, afterSeq } : options;
3246
+ return this.sendCorrelatedSessionRequest({
3247
+ requestId: normalized.requestId,
3248
+ message: {
3249
+ type: "loop/logs",
3250
+ id: normalized.id,
3251
+ ...(typeof normalized.afterSeq === "number" ? { afterSeq: normalized.afterSeq } : {}),
3252
+ },
3253
+ responseType: "loop/logs/response",
3254
+ });
3255
+ }
3256
+ async loopStop(options) {
3257
+ const normalized = typeof options === "string" ? { id: options } : options;
3258
+ return this.sendCorrelatedSessionRequest({
3259
+ requestId: normalized.requestId,
3260
+ message: {
3261
+ type: "loop/stop",
3262
+ id: normalized.id,
3263
+ },
3264
+ responseType: "loop/stop/response",
3265
+ });
3266
+ }
3267
+ onTerminalStreamEvent(handler) {
3268
+ return this.terminalStreams.onEvent(handler);
3269
+ }
3270
+ async waitForTerminalStreamEvent(predicate, timeout = 5000) {
3271
+ return new Promise((resolve, reject) => {
3272
+ const timeoutHandle = setTimeout(() => {
3273
+ unsubscribe();
3274
+ reject(new Error(`Timeout waiting for terminal stream event (${timeout}ms)`));
3275
+ }, timeout);
3276
+ const unsubscribe = this.onTerminalStreamEvent((event) => {
3277
+ if (!predicate(event)) {
3278
+ return;
3279
+ }
3280
+ clearTimeout(timeoutHandle);
3281
+ unsubscribe();
3282
+ resolve(event);
3283
+ });
3284
+ });
3285
+ }
3286
+ // ============================================================================
3287
+ // Internals
3288
+ // ============================================================================
3289
+ createRequestId(requestId) {
3290
+ return requestId ?? crypto.randomUUID();
3291
+ }
3292
+ getLastServerInfoMessage() {
3293
+ return this.lastServerInfoMessage;
3294
+ }
3295
+ resolveTransportUrlForAttempt() {
3296
+ return this.config.url;
3297
+ }
3298
+ sendHelloMessage() {
3299
+ if (!this.transport) {
3300
+ this.scheduleReconnect({
3301
+ reason: "Transport unavailable before hello",
3302
+ event: "HELLO_TRANSPORT_MISSING",
3303
+ reasonCode: "transport_error",
3304
+ });
3305
+ return;
3306
+ }
3307
+ try {
3308
+ this.transport.send(JSON.stringify({
3309
+ type: "hello",
3310
+ clientId: this.config.clientId,
3311
+ clientType: this.config.clientType ?? "cli",
3312
+ protocolVersion: 1,
3313
+ capabilities: {
3314
+ [CLIENT_CAPS.customModeIcons]: true,
3315
+ [CLIENT_CAPS.reasoningMergeEnum]: true,
3316
+ [CLIENT_CAPS.terminalReflowableSnapshot]: true,
3317
+ [CLIENT_CAPS.providerSubagents]: true,
3318
+ ...this.config.capabilities,
3319
+ },
3320
+ ...(this.config.appVersion ? { appVersion: this.config.appVersion } : {}),
3321
+ }));
3322
+ }
3323
+ catch (error) {
3324
+ const message = error instanceof Error ? error.message : "Failed to send hello message";
3325
+ this.lastErrorValue = message;
3326
+ this.scheduleReconnect({
3327
+ reason: message,
3328
+ event: "HELLO_SEND_FAILED",
3329
+ reasonCode: "transport_error",
3330
+ });
3331
+ }
3332
+ }
3333
+ disposeTransport(code = 1001, reason = "Reconnecting") {
3334
+ this.stopLivenessHeartbeat();
3335
+ this.cleanupTransport();
3336
+ if (this.transport) {
3337
+ try {
3338
+ this.transport.close(code, reason);
3339
+ }
3340
+ catch {
3341
+ // no-op
3342
+ }
3343
+ this.transport = null;
3344
+ }
3345
+ }
3346
+ cleanupTransport() {
3347
+ this.resetConnectTimeout();
3348
+ if (this.pendingGenericTransportErrorTimeout) {
3349
+ clearTimeout(this.pendingGenericTransportErrorTimeout);
3350
+ this.pendingGenericTransportErrorTimeout = null;
3351
+ }
3352
+ for (const cleanup of this.transportCleanup) {
3353
+ try {
3354
+ cleanup();
3355
+ }
3356
+ catch {
3357
+ // no-op
3358
+ }
3359
+ }
3360
+ this.transportCleanup = [];
3361
+ }
3362
+ resetConnectTimeout() {
3363
+ if (!this.connectTimeout) {
3364
+ return;
3365
+ }
3366
+ clearTimeout(this.connectTimeout);
3367
+ this.connectTimeout = null;
3368
+ }
3369
+ handleTransportMessage(data) {
3370
+ const rawData = data && typeof data === "object" && "data" in data ? data.data : data;
3371
+ if (typeof Blob !== "undefined" &&
3372
+ rawData instanceof Blob &&
3373
+ typeof rawData.arrayBuffer === "function") {
3374
+ void rawData
3375
+ .arrayBuffer()
3376
+ .then((buffer) => {
3377
+ this.handleTransportMessage(buffer);
3378
+ return;
3379
+ })
3380
+ .catch(() => {
3381
+ // Ignore failed blob decoding and allow reconnect logic to recover.
3382
+ });
3383
+ return;
3384
+ }
3385
+ const rawBytes = asUint8Array(rawData);
3386
+ if (rawBytes && this.tryHandleBinaryFrame(rawBytes)) {
3387
+ return;
3388
+ }
3389
+ const payload = decodeMessageData(rawData);
3390
+ if (!payload) {
3391
+ return;
3392
+ }
3393
+ this.handleJsonPayload(payload, rawBytes?.byteLength);
3394
+ }
3395
+ handleJsonPayload(payload, rawBytesLength) {
3396
+ const bytes = rawBytesLength ?? payload.length;
3397
+ const startMs = perfNow();
3398
+ let parsedJson;
3399
+ try {
3400
+ parsedJson = JSON.parse(payload);
3401
+ }
3402
+ catch {
3403
+ return;
3404
+ }
3405
+ const parsed = validateWSOutboundMessage(parsedJson);
3406
+ if (!parsed.success) {
3407
+ const msgType = parsedJson != null &&
3408
+ typeof parsedJson === "object" &&
3409
+ "type" in parsedJson &&
3410
+ typeof parsedJson.type === "string"
3411
+ ? parsedJson.type
3412
+ : "unknown";
3413
+ this.logger.warn({ msgType, error: parsed.error.message }, "Message validation failed");
3414
+ return;
3415
+ }
3416
+ this.consecutiveLivenessFailures = 0;
3417
+ if (parsed.data.type === "pong") {
3418
+ this.resolvePingProbe();
3419
+ this.runtimeMetrics?.recordMessage("pong", bytes, perfNow() - startMs);
3420
+ return;
3421
+ }
3422
+ this.handleSessionMessage(parsed.data.message);
3423
+ const msgType = parsed.data.message.type;
3424
+ this.runtimeMetrics?.recordMessage(msgType, bytes, perfNow() - startMs);
3425
+ if (parsed.data.message.type === "agent_stream") {
3426
+ this.runtimeMetrics?.recordAgentStream(parsed.data.message.payload);
3427
+ }
3428
+ }
3429
+ tryHandleBinaryFrame(rawBytes) {
3430
+ const fileFrame = decodeFileTransferFrame(rawBytes);
3431
+ if (fileFrame) {
3432
+ this.consecutiveLivenessFailures = 0;
3433
+ this.handleFileTransferFrame(fileFrame);
3434
+ this.runtimeMetrics?.recordBinaryFrame("other", rawBytes.byteLength, 0);
3435
+ return true;
3436
+ }
3437
+ const frame = decodeTerminalStreamFrame(rawBytes);
3438
+ if (!frame) {
3439
+ return false;
3440
+ }
3441
+ this.consecutiveLivenessFailures = 0;
3442
+ const binaryStartMs = perfNow();
3443
+ this.terminalStreams.handleFrame(frame);
3444
+ let frameKind = "other";
3445
+ if (frame.opcode === TerminalStreamOpcode.Output) {
3446
+ frameKind = "output";
3447
+ }
3448
+ else if (frame.opcode === TerminalStreamOpcode.Snapshot) {
3449
+ frameKind = "snapshot";
3450
+ }
3451
+ else if (frame.opcode === TerminalStreamOpcode.Restore) {
3452
+ frameKind = "output";
3453
+ }
3454
+ this.runtimeMetrics?.recordBinaryFrame(frameKind, rawBytes.byteLength, perfNow() - binaryStartMs);
3455
+ return true;
3456
+ }
3457
+ handleFileTransferFrame(frame) {
3458
+ if (frame.opcode === FileTransferOpcode.FileBegin) {
3459
+ const pending = this.pendingBinaryFileReads.get(frame.requestId);
3460
+ if (!pending) {
3461
+ return;
3462
+ }
3463
+ this.activeBinaryFileTransfers.set(frame.requestId, {
3464
+ ...pending,
3465
+ mime: frame.metadata.mime,
3466
+ size: frame.metadata.size,
3467
+ encoding: frame.metadata.encoding,
3468
+ modifiedAt: frame.metadata.modifiedAt,
3469
+ chunks: [],
3470
+ });
3471
+ return;
3472
+ }
3473
+ const transfer = this.activeBinaryFileTransfers.get(frame.requestId);
3474
+ if (!transfer) {
3475
+ return;
3476
+ }
3477
+ if (frame.opcode === FileTransferOpcode.FileChunk) {
3478
+ transfer.chunks.push(frame.payload);
3479
+ return;
3480
+ }
3481
+ const bytes = concatByteChunks(transfer.chunks, transfer.size);
3482
+ this.activeBinaryFileTransfers.delete(frame.requestId);
3483
+ this.completedBinaryFileReads.set(frame.requestId, {
3484
+ bytes,
3485
+ mime: transfer.mime,
3486
+ size: transfer.size,
3487
+ path: transfer.path,
3488
+ kind: binaryFileKind(transfer.mime, transfer.encoding),
3489
+ modifiedAt: transfer.modifiedAt,
3490
+ });
3491
+ this.handleSessionMessage({
3492
+ type: "file_explorer_response",
3493
+ payload: {
3494
+ cwd: transfer.cwd,
3495
+ path: transfer.path,
3496
+ mode: "file",
3497
+ directory: null,
3498
+ file: null,
3499
+ error: null,
3500
+ requestId: frame.requestId,
3501
+ },
3502
+ });
3503
+ }
3504
+ updateConnectionState(next, metadata) {
3505
+ const previous = this.connectionState;
3506
+ this.connectionState = next;
3507
+ const reasonFromNext = next.status === "disconnected" && typeof next.reason === "string" ? next.reason : null;
3508
+ const reason = metadata?.reason ?? reasonFromNext;
3509
+ const reasonCode = metadata?.reasonCode ?? toReasonCode(reason);
3510
+ this.logger.debug({
3511
+ serverId: this.logServerId,
3512
+ clientIdHash: this.logClientIdHash,
3513
+ from: previous.status,
3514
+ to: next.status,
3515
+ event: metadata?.event ?? "STATE_UPDATE",
3516
+ connectionPath: this.logConnectionPath,
3517
+ generation: this.logGeneration,
3518
+ reasonCode,
3519
+ reason,
3520
+ }, "DaemonClientTransition");
3521
+ for (const listener of this.connectionListeners) {
3522
+ try {
3523
+ listener(next);
3524
+ }
3525
+ catch {
3526
+ // no-op
3527
+ }
3528
+ }
3529
+ }
3530
+ setReconnectEnabled(enabled) {
3531
+ this.config = { ...this.config, reconnect: { ...this.config.reconnect, enabled } };
3532
+ }
3533
+ scheduleReconnect(input) {
3534
+ if (this.reconnectTimeout) {
3535
+ clearTimeout(this.reconnectTimeout);
3536
+ this.reconnectTimeout = null;
3537
+ }
3538
+ const wasDisposed = this.connectionState.status === "disposed";
3539
+ const reason = input?.reason;
3540
+ if (typeof reason === "string" && reason.trim().length > 0) {
3541
+ this.lastErrorValue = reason.trim();
3542
+ }
3543
+ // Clear all pending waiters and queued sends since the connection was lost
3544
+ // and responses from the previous connection will never arrive.
3545
+ this.clearWaiters(new Error(reason ?? "Connection lost"));
3546
+ this.rejectPendingSendQueue(new Error(reason ?? "Connection lost"));
3547
+ this.rejectPingProbe(new Error(reason ?? "Connection lost"));
3548
+ this.terminalStreams.clearSlots();
3549
+ this.lastServerInfoMessage = null;
3550
+ if (wasDisposed) {
3551
+ this.rejectConnect(new Error(reason ?? "Daemon client is disposed"));
3552
+ return;
3553
+ }
3554
+ this.emitDisconnectedStateForReconnect(reason, input);
3555
+ if (!this.shouldReconnect || this.config.reconnect?.enabled === false) {
3556
+ this.rejectConnect(new Error(reason ?? "Transport disconnected before connect"));
3557
+ return;
3558
+ }
3559
+ this.armReconnectTimer();
3560
+ }
3561
+ emitDisconnectedStateForReconnect(reason, input) {
3562
+ this.updateConnectionState({
3563
+ status: "disconnected",
3564
+ ...(reason ? { reason } : {}),
3565
+ }, {
3566
+ event: input?.event ?? "TRANSPORT_CLOSE",
3567
+ ...(reason ? { reason } : {}),
3568
+ ...(input?.reasonCode ? { reasonCode: input.reasonCode } : {}),
3569
+ });
3570
+ }
3571
+ armReconnectTimer() {
3572
+ const attempt = this.reconnectAttempt;
3573
+ const baseDelay = this.config.reconnect?.baseDelayMs ?? DEFAULT_RECONNECT_BASE_DELAY_MS;
3574
+ const maxDelay = this.config.reconnect?.maxDelayMs ?? DEFAULT_RECONNECT_MAX_DELAY_MS;
3575
+ const delay = Math.min(baseDelay * 2 ** attempt, maxDelay);
3576
+ this.reconnectAttempt = attempt + 1;
3577
+ this.reconnectTimeout = setTimeout(() => {
3578
+ this.reconnectTimeout = null;
3579
+ if (!this.shouldReconnect) {
3580
+ return;
3581
+ }
3582
+ this.attemptConnect();
3583
+ }, delay);
3584
+ }
3585
+ resolvePingProbe() {
3586
+ const probe = this.pingProbe;
3587
+ if (!probe) {
3588
+ return;
3589
+ }
3590
+ this.pingProbe = null;
3591
+ clearTimeout(probe.timeoutHandle);
3592
+ probe.resolve(perfNow() - probe.startedAt);
3593
+ }
3594
+ clearPingProbe() {
3595
+ const probe = this.pingProbe;
3596
+ if (!probe) {
3597
+ return;
3598
+ }
3599
+ this.pingProbe = null;
3600
+ clearTimeout(probe.timeoutHandle);
3601
+ }
3602
+ rejectPingProbe(error) {
3603
+ const probe = this.pingProbe;
3604
+ if (!probe) {
3605
+ return;
3606
+ }
3607
+ this.pingProbe = null;
3608
+ clearTimeout(probe.timeoutHandle);
3609
+ probe.reject(error);
3610
+ }
3611
+ recordLivenessFailure(error) {
3612
+ this.consecutiveLivenessFailures += 1;
3613
+ if (this.consecutiveLivenessFailures < LIVENESS_FAILURE_RECONNECT_THRESHOLD) {
3614
+ return;
3615
+ }
3616
+ this.consecutiveLivenessFailures = 0;
3617
+ this.lastErrorValue = error.message;
3618
+ this.disposeTransport(1001, "Liveness check timed out");
3619
+ this.scheduleReconnect({
3620
+ reason: error.message,
3621
+ event: "LIVENESS_TIMEOUT",
3622
+ reasonCode: "liveness_timeout",
3623
+ });
3624
+ }
3625
+ handleSessionMessage(msg) {
3626
+ const consumerMessage = normalizeProviderSnapshotUpdateMessage(msg);
3627
+ if (consumerMessage.type === "status") {
3628
+ const serverInfo = parseServerInfoStatusPayload(consumerMessage.payload);
3629
+ if (serverInfo) {
3630
+ this.lastServerInfoMessage = serverInfo;
3631
+ if (this.connectionState.status === "connecting") {
3632
+ this.resetConnectTimeout();
3633
+ this.reconnectAttempt = 0;
3634
+ this.updateConnectionState({ status: "connected" }, { event: "HELLO_SERVER_INFO" });
3635
+ this.startLivenessHeartbeat();
3636
+ this.resubscribeCheckoutDiffSubscriptions();
3637
+ this.resubscribeTerminalDirectorySubscriptions();
3638
+ this.flushPendingSendQueue();
3639
+ this.resolveConnect();
3640
+ }
3641
+ }
3642
+ }
3643
+ if (consumerMessage.type === "terminal_stream_exit") {
3644
+ this.terminalStreams.removeTerminal(consumerMessage.payload.terminalId);
3645
+ }
3646
+ if (this.rawMessageListeners.size > 0) {
3647
+ for (const handler of this.rawMessageListeners) {
3648
+ try {
3649
+ handler(consumerMessage);
3650
+ }
3651
+ catch {
3652
+ // no-op
3653
+ }
3654
+ }
3655
+ }
3656
+ const handlers = this.messageHandlers.get(consumerMessage.type);
3657
+ if (handlers) {
3658
+ for (const handler of handlers) {
3659
+ try {
3660
+ handler(consumerMessage);
3661
+ }
3662
+ catch {
3663
+ // no-op
3664
+ }
3665
+ }
3666
+ }
3667
+ const event = this.toEvent(consumerMessage);
3668
+ if (event) {
3669
+ for (const handler of this.eventListeners) {
3670
+ handler(event);
3671
+ }
3672
+ }
3673
+ this.resolveWaiters(consumerMessage);
3674
+ }
3675
+ resolveWaiters(msg) {
3676
+ for (const waiter of Array.from(this.waiters)) {
3677
+ const result = waiter.predicate(msg);
3678
+ if (result !== null) {
3679
+ this.waiters.delete(waiter);
3680
+ if (waiter.timeoutHandle) {
3681
+ clearTimeout(waiter.timeoutHandle);
3682
+ }
3683
+ waiter.resolve(result);
3684
+ }
3685
+ }
3686
+ }
3687
+ clearWaiters(error) {
3688
+ for (const waiter of Array.from(this.waiters)) {
3689
+ if (waiter.timeoutHandle) {
3690
+ clearTimeout(waiter.timeoutHandle);
3691
+ }
3692
+ waiter.reject(error);
3693
+ }
3694
+ this.waiters.clear();
3695
+ }
3696
+ toEvent(msg) {
3697
+ switch (msg.type) {
3698
+ case "agent_update":
3699
+ return {
3700
+ type: "agent_update",
3701
+ agentId: msg.payload.kind === "upsert" ? msg.payload.agent.id : msg.payload.agentId,
3702
+ payload: msg.payload,
3703
+ };
3704
+ case "workspace_update":
3705
+ return {
3706
+ type: "workspace_update",
3707
+ workspaceId: msg.payload.kind === "upsert" ? msg.payload.workspace.id : msg.payload.id,
3708
+ payload: msg.payload,
3709
+ };
3710
+ case "workspace_setup_progress":
3711
+ return {
3712
+ type: "workspace_setup_progress",
3713
+ workspaceId: msg.payload.workspaceId,
3714
+ payload: msg.payload,
3715
+ };
3716
+ case "agent_stream":
3717
+ return {
3718
+ type: "agent_stream",
3719
+ agentId: msg.payload.agentId,
3720
+ event: msg.payload.event,
3721
+ timestamp: msg.payload.timestamp,
3722
+ ...(typeof msg.payload.seq === "number" ? { seq: msg.payload.seq } : {}),
3723
+ ...(typeof msg.payload.epoch === "string" ? { epoch: msg.payload.epoch } : {}),
3724
+ };
3725
+ case "status":
3726
+ return { type: "status", payload: msg.payload };
3727
+ case "agent_deleted":
3728
+ return { type: "agent_deleted", agentId: msg.payload.agentId };
3729
+ case "agent_permission_request":
3730
+ return {
3731
+ type: "agent_permission_request",
3732
+ agentId: msg.payload.agentId,
3733
+ request: msg.payload.request,
3734
+ };
3735
+ case "agent_permission_resolved":
3736
+ return {
3737
+ type: "agent_permission_resolved",
3738
+ agentId: msg.payload.agentId,
3739
+ requestId: msg.payload.requestId,
3740
+ resolution: msg.payload.resolution,
3741
+ };
3742
+ case "providers_snapshot_update":
3743
+ return {
3744
+ type: "providers_snapshot_update",
3745
+ payload: msg.payload,
3746
+ };
3747
+ default:
3748
+ return null;
3749
+ }
3750
+ }
3751
+ waitForWithCancel(predicate, timeout = 30000, _options) {
3752
+ // Capture stack trace at call site, not inside setTimeout
3753
+ const timeoutError = new Error(`Timeout waiting for message (${timeout}ms)`);
3754
+ let waiter = null;
3755
+ let settled = false;
3756
+ let rejectFn = null;
3757
+ const promise = new Promise((resolve, reject) => {
3758
+ const wrappedResolve = (value) => {
3759
+ if (settled)
3760
+ return;
3761
+ settled = true;
3762
+ resolve(value);
3763
+ };
3764
+ const wrappedReject = (error) => {
3765
+ if (settled)
3766
+ return;
3767
+ settled = true;
3768
+ reject(error);
3769
+ };
3770
+ rejectFn = wrappedReject;
3771
+ const timeoutHandle = timeout > 0
3772
+ ? setTimeout(() => {
3773
+ if (waiter) {
3774
+ this.waiters.delete(waiter);
3775
+ }
3776
+ wrappedReject(timeoutError);
3777
+ }, timeout)
3778
+ : null;
3779
+ waiter = {
3780
+ predicate,
3781
+ resolve: wrappedResolve,
3782
+ reject: wrappedReject,
3783
+ timeoutHandle,
3784
+ };
3785
+ this.waiters.add(waiter);
3786
+ });
3787
+ const cancel = (error) => {
3788
+ if (settled) {
3789
+ return;
3790
+ }
3791
+ if (waiter) {
3792
+ this.waiters.delete(waiter);
3793
+ if (waiter.timeoutHandle) {
3794
+ clearTimeout(waiter.timeoutHandle);
3795
+ }
3796
+ }
3797
+ if (rejectFn) {
3798
+ rejectFn(error);
3799
+ return;
3800
+ }
3801
+ // Extremely unlikely: cancel called before the Promise executor ran.
3802
+ queueMicrotask(() => {
3803
+ if (!settled && rejectFn) {
3804
+ rejectFn(error);
3805
+ }
3806
+ });
3807
+ };
3808
+ return { promise, cancel };
3809
+ }
3810
+ }
3811
+ function resolveAgentConfig(options) {
3812
+ const { config, provider, cwd, env: _env, workspaceId: _workspaceId, initialPrompt: _initialPrompt, images: _images, git: _git, worktreeName: _worktreeName, requestId: _requestId, labels: _labels, ...overrides } = options;
3813
+ const baseConfig = {
3814
+ ...(provider ? { provider } : {}),
3815
+ ...(cwd ? { cwd } : {}),
3816
+ ...overrides,
3817
+ };
3818
+ const merged = config ? { ...baseConfig, ...config } : baseConfig;
3819
+ if (!merged.provider || !merged.cwd) {
3820
+ throw new Error("createAgent requires provider and cwd");
3821
+ }
3822
+ return {
3823
+ ...merged,
3824
+ provider: merged.provider,
3825
+ cwd: merged.cwd,
3826
+ };
3827
+ }
3828
+ //# sourceMappingURL=daemon-client.js.map