@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,3225 @@
1
+ import { createOpencodeClient, } from "@opencode-ai/sdk/v2/client";
2
+ import fs from "node:fs/promises";
3
+ import { createPathEquivalenceMatcher } from "../../../utils/path.js";
4
+ import pLimit from "p-limit";
5
+ import { z } from "zod";
6
+ import { getAgentStreamEventTurnId, } from "../agent-sdk-types.js";
7
+ import { importSessionFromPersistence } from "../provider-session-import.js";
8
+ import { isDefaultAgentCreateConfigUnattended, resolveDefaultAgentCreateConfig, } from "../create-agent-mode.js";
9
+ import { checkProviderLaunchAvailable, createProviderEnvSpec, resolveProviderLaunch, } from "../provider-launch-config.js";
10
+ import { withTimeout } from "../../../utils/promise-timeout.js";
11
+ import { execCommand } from "../../../utils/spawn.js";
12
+ import { mapOpencodeToolCall } from "./opencode/tool-call-mapper.js";
13
+ import { OpenCodeServerManager, } from "./opencode/server-manager.js";
14
+ import { resolveOpenCodeHomeDir } from "./opencode/paths.js";
15
+ import { formatProviderDiagnostic, formatProviderDiagnosticError, buildBinaryDiagnosticRows, buildCommandResolutionDiagnosticRows, toDiagnosticErrorMessage, } from "./diagnostic-utils.js";
16
+ import { runProviderTurn } from "./provider-runner.js";
17
+ import { renderPromptAttachmentAsText } from "../prompt-attachments.js";
18
+ import { composeSystemPromptParts } from "../system-prompt.js";
19
+ import { normalizeProviderReplayTimestamp } from "../provider-history-timestamps.js";
20
+ import { revertOpenCodeConversationAndFiles } from "./opencode/rewind.js";
21
+ const OPENCODE_CAPABILITIES = {
22
+ supportsStreaming: true,
23
+ supportsSessionPersistence: true,
24
+ supportsSessionListing: true,
25
+ supportsDynamicModes: true,
26
+ supportsMcpServers: true,
27
+ supportsReasoningStream: true,
28
+ supportsToolInvocations: true,
29
+ supportsRewindConversation: false,
30
+ supportsRewindFiles: false,
31
+ supportsRewindBoth: true,
32
+ };
33
+ const OPENCODE_BUILD_MODE_ID = "build";
34
+ const OPENCODE_LEGACY_FULL_ACCESS_MODE_ID = "full-access";
35
+ const OPENCODE_AUTO_ACCEPT_FEATURE_ID = "auto_accept";
36
+ const OPENCODE_PERSISTED_SESSION_LIMIT = 200;
37
+ const OPENCODE_PENDING_ABORT_START_TIMEOUT_MS = 10000;
38
+ const OPENCODE_CHILD_SESSION_HYDRATION_LIMIT = 100;
39
+ const OPENCODE_CHILD_SESSION_SERVER_REGISTRY_LIMIT = 500;
40
+ const OPENCODE_PERMISSION_ACTION_ALLOW_ONCE = "allow_once";
41
+ const OPENCODE_PERMISSION_ACTION_ALLOW_ALWAYS = "allow_always";
42
+ // OpenCode child sessions run on the server process that spawned them. Adoption
43
+ // resumes must attach to that same helper server to receive live global events.
44
+ const openCodeChildSessionServerUrls = new Map();
45
+ function registerOpenCodeChildSessionServerUrl(sessionId, serverUrl) {
46
+ openCodeChildSessionServerUrls.delete(sessionId);
47
+ openCodeChildSessionServerUrls.set(sessionId, serverUrl);
48
+ if (openCodeChildSessionServerUrls.size <= OPENCODE_CHILD_SESSION_SERVER_REGISTRY_LIMIT) {
49
+ return;
50
+ }
51
+ const oldestSessionId = openCodeChildSessionServerUrls.keys().next().value;
52
+ if (typeof oldestSessionId === "string") {
53
+ openCodeChildSessionServerUrls.delete(oldestSessionId);
54
+ }
55
+ }
56
+ function unregisterOpenCodeChildSessionServerUrl(sessionId) {
57
+ openCodeChildSessionServerUrls.delete(sessionId);
58
+ }
59
+ function getOpenCodeChildSessionServerUrl(sessionId) {
60
+ return openCodeChildSessionServerUrls.get(sessionId);
61
+ }
62
+ const DEFAULT_MODES = [
63
+ {
64
+ id: OPENCODE_BUILD_MODE_ID,
65
+ label: "Build",
66
+ description: "Allows edits and tool execution for implementation work",
67
+ },
68
+ {
69
+ id: "plan",
70
+ label: "Plan",
71
+ description: "Read-only planning mode that avoids file edits",
72
+ },
73
+ ];
74
+ function isOpenCodeAutoAcceptEnabled(config) {
75
+ return config.featureValues?.[OPENCODE_AUTO_ACCEPT_FEATURE_ID] === true;
76
+ }
77
+ function withOpenCodeAutoAcceptFeature(featureValues, enabled) {
78
+ return {
79
+ ...featureValues,
80
+ [OPENCODE_AUTO_ACCEPT_FEATURE_ID]: enabled,
81
+ };
82
+ }
83
+ function resolveOpenCodeCreateConfig(input) {
84
+ const legacyFullAccess = input.requestedMode === OPENCODE_LEGACY_FULL_ACCESS_MODE_ID;
85
+ const parent = input.parent;
86
+ const isUnattendedCreate = input.unattended || parent?.isUnattended === true;
87
+ const inheritsUnattended = input.requestedMode === undefined && isUnattendedCreate;
88
+ const inheritedOpenCodeMode = inheritsUnattended && parent?.provider === input.provider
89
+ ? (parent.modeId ?? undefined)
90
+ : undefined;
91
+ const requestedMode = legacyFullAccess
92
+ ? OPENCODE_BUILD_MODE_ID
93
+ : (input.requestedMode ?? inheritedOpenCodeMode);
94
+ const featureValues = legacyFullAccess ||
95
+ (isUnattendedCreate && input.featureValues?.[OPENCODE_AUTO_ACCEPT_FEATURE_ID] === undefined)
96
+ ? withOpenCodeAutoAcceptFeature(input.featureValues, true)
97
+ : input.featureValues;
98
+ if (inheritsUnattended && requestedMode === undefined) {
99
+ // Unattendedness for OpenCode is carried by auto_accept (set above), not
100
+ // by any particular agent. Leave the mode unset so OpenCode uses its own
101
+ // default agent — `build` may not exist in the user's OpenCode config.
102
+ return { modeId: undefined, featureValues };
103
+ }
104
+ const resolved = resolveDefaultAgentCreateConfig({
105
+ ...input,
106
+ requestedMode,
107
+ featureValues,
108
+ });
109
+ return { ...resolved, featureValues };
110
+ }
111
+ function isOpenCodeCreateConfigUnattended(input) {
112
+ return (isDefaultAgentCreateConfigUnattended(input) ||
113
+ input.config.featureValues?.[OPENCODE_AUTO_ACCEPT_FEATURE_ID] === true ||
114
+ input.features?.some((feature) => feature.id === OPENCODE_AUTO_ACCEPT_FEATURE_ID &&
115
+ (feature.value === true || feature.value === "true")) === true);
116
+ }
117
+ function buildOpenCodeAutoAcceptFeature(config) {
118
+ return {
119
+ type: "toggle",
120
+ id: OPENCODE_AUTO_ACCEPT_FEATURE_ID,
121
+ label: "Auto Accept",
122
+ description: "Automatically approves OpenCode tool permission prompts.",
123
+ tooltip: "Auto accept permission prompts",
124
+ icon: "shield-check",
125
+ value: isOpenCodeAutoAcceptEnabled(config),
126
+ };
127
+ }
128
+ function buildOpenCodePermissionActions() {
129
+ return [
130
+ {
131
+ id: "deny",
132
+ label: "Deny",
133
+ behavior: "deny",
134
+ variant: "danger",
135
+ intent: "dismiss",
136
+ },
137
+ {
138
+ id: OPENCODE_PERMISSION_ACTION_ALLOW_ALWAYS,
139
+ label: "Allow always",
140
+ behavior: "allow",
141
+ variant: "secondary",
142
+ },
143
+ {
144
+ id: OPENCODE_PERMISSION_ACTION_ALLOW_ONCE,
145
+ label: "Allow once",
146
+ behavior: "allow",
147
+ variant: "primary",
148
+ },
149
+ ];
150
+ }
151
+ function resolveOpenCodePermissionReply(response) {
152
+ if (response.behavior === "deny") {
153
+ return "reject";
154
+ }
155
+ if (response.selectedActionId === OPENCODE_PERMISSION_ACTION_ALLOW_ALWAYS) {
156
+ return "always";
157
+ }
158
+ return "once";
159
+ }
160
+ const MCP_ALREADY_PRESENT_ERROR_TOKENS = ["already", "exists", "connected"];
161
+ const OPENCODE_PROVIDER_LIST_TIMEOUT_MS = 30000;
162
+ const OPENCODE_METADATA_CONCURRENCY = 4;
163
+ const openCodeMetadataLimit = pLimit(OPENCODE_METADATA_CONCURRENCY);
164
+ const OPENCODE_HANDLED_BUILTIN_SLASH_COMMANDS = [
165
+ {
166
+ name: "compact",
167
+ description: "Compact the current session",
168
+ argumentHint: "",
169
+ kind: "command",
170
+ },
171
+ {
172
+ name: "summarize",
173
+ description: "Compact the current session",
174
+ argumentHint: "",
175
+ kind: "command",
176
+ },
177
+ ];
178
+ const OPENCODE_HEADERS_TIMEOUT_TOKENS = [
179
+ "headers timeout",
180
+ "headers timeout error",
181
+ "headers_timeout",
182
+ "und_err_headers_timeout",
183
+ ];
184
+ const OpencodeToolStateSchema = z
185
+ .object({
186
+ status: z.string().optional(),
187
+ input: z.unknown().optional(),
188
+ output: z.unknown().optional(),
189
+ error: z.unknown().optional(),
190
+ })
191
+ .passthrough();
192
+ const OpencodeToolPartBaseSchema = z
193
+ .object({
194
+ tool: z.string().trim().min(1),
195
+ state: OpencodeToolStateSchema.optional(),
196
+ })
197
+ .passthrough();
198
+ const OpencodeToolPartWithCallIdSchema = OpencodeToolPartBaseSchema.extend({
199
+ callID: z.string().trim().min(1),
200
+ id: z.string().optional(),
201
+ }).transform((part) => ({
202
+ toolName: part.tool,
203
+ callId: part.callID,
204
+ status: part.state?.status,
205
+ input: part.state?.input,
206
+ output: part.state?.output,
207
+ error: part.state?.error,
208
+ }));
209
+ const OpencodeToolPartWithIdSchema = OpencodeToolPartBaseSchema.extend({
210
+ id: z.string().trim().min(1),
211
+ callID: z.string().optional(),
212
+ }).transform((part) => ({
213
+ toolName: part.tool,
214
+ callId: part.id,
215
+ status: part.state?.status,
216
+ input: part.state?.input,
217
+ output: part.state?.output,
218
+ error: part.state?.error,
219
+ }));
220
+ const OpencodeToolPartWithoutIdSchema = OpencodeToolPartBaseSchema.extend({
221
+ id: z.string().optional(),
222
+ callID: z.string().optional(),
223
+ }).transform((part) => ({
224
+ toolName: part.tool,
225
+ callId: undefined,
226
+ status: part.state?.status,
227
+ input: part.state?.input,
228
+ output: part.state?.output,
229
+ error: part.state?.error,
230
+ }));
231
+ const OpencodeToolPartSchema = z.union([
232
+ OpencodeToolPartWithCallIdSchema,
233
+ OpencodeToolPartWithIdSchema,
234
+ OpencodeToolPartWithoutIdSchema,
235
+ ]);
236
+ const OpencodeToolPartTimelineEnvelopeSchema = OpencodeToolPartSchema.transform((part) => ({
237
+ toolName: part.toolName,
238
+ callId: part.callId,
239
+ status: part.status,
240
+ input: part.input,
241
+ output: part.output,
242
+ error: part.error,
243
+ }));
244
+ const OpencodeToolPartToTimelineItemSchema = OpencodeToolPartTimelineEnvelopeSchema.transform((part) => mapOpencodeToolCall({
245
+ toolName: part.toolName,
246
+ callId: part.callId,
247
+ status: part.status,
248
+ input: part.input,
249
+ output: part.output,
250
+ error: part.error,
251
+ }));
252
+ function toOpenCodeMcpConfig(config) {
253
+ if (config.type === "stdio") {
254
+ return {
255
+ type: "local",
256
+ command: [config.command, ...(config.args ?? [])],
257
+ ...(config.env ? { environment: config.env } : {}),
258
+ enabled: true,
259
+ };
260
+ }
261
+ return {
262
+ type: "remote",
263
+ url: config.url,
264
+ ...(config.headers ? { headers: config.headers } : {}),
265
+ enabled: true,
266
+ };
267
+ }
268
+ function toTerminalTurnEvent(event) {
269
+ if (event.type === "turn_failed") {
270
+ return {
271
+ type: "turn_failed",
272
+ provider: "opencode",
273
+ error: toDiagnosticErrorMessage(event.error),
274
+ };
275
+ }
276
+ if (event.type === "turn_completed" || event.type === "turn_canceled") {
277
+ return event;
278
+ }
279
+ return null;
280
+ }
281
+ function isOpenCodeNotFoundError(error) {
282
+ return (typeof error === "object" &&
283
+ error !== null &&
284
+ "name" in error &&
285
+ error.name === "NotFoundError");
286
+ }
287
+ async function reconcileOpenCodeSessionClose(params) {
288
+ const { client, sessionId, directory, logger } = params;
289
+ try {
290
+ const response = await client.session.abort({
291
+ sessionID: sessionId,
292
+ directory,
293
+ });
294
+ if (response.error && !isOpenCodeNotFoundError(response.error)) {
295
+ logger.warn({
296
+ sessionId,
297
+ error: toDiagnosticErrorMessage(response.error),
298
+ }, "Failed to abort OpenCode session during close");
299
+ }
300
+ }
301
+ catch (error) {
302
+ logger.warn({
303
+ sessionId,
304
+ error: toDiagnosticErrorMessage(error),
305
+ }, "Failed to abort OpenCode session during close");
306
+ }
307
+ try {
308
+ const response = await client.session.update({
309
+ sessionID: sessionId,
310
+ directory,
311
+ time: { archived: Date.now() },
312
+ });
313
+ if (response.error && !isOpenCodeNotFoundError(response.error)) {
314
+ logger.warn({
315
+ sessionId,
316
+ error: toDiagnosticErrorMessage(response.error),
317
+ }, "Failed to archive OpenCode session during close");
318
+ }
319
+ }
320
+ catch (error) {
321
+ logger.warn({
322
+ sessionId,
323
+ error: toDiagnosticErrorMessage(error),
324
+ }, "Failed to archive OpenCode session during close");
325
+ }
326
+ }
327
+ function isOpenCodeHeadersTimeoutFailure(error) {
328
+ const diagnostics = new Set();
329
+ const queue = [error];
330
+ while (queue.length > 0) {
331
+ const current = queue.shift();
332
+ if (!current) {
333
+ continue;
334
+ }
335
+ const normalized = toDiagnosticErrorMessage(current).trim().toLowerCase();
336
+ if (normalized) {
337
+ diagnostics.add(normalized);
338
+ }
339
+ if (typeof current === "object") {
340
+ const record = current;
341
+ for (const value of [record.message, record.code, record.name]) {
342
+ if (typeof value !== "string") {
343
+ continue;
344
+ }
345
+ const diagnostic = value.trim().toLowerCase();
346
+ if (diagnostic) {
347
+ diagnostics.add(diagnostic);
348
+ }
349
+ }
350
+ if (record.cause) {
351
+ queue.push(record.cause);
352
+ }
353
+ }
354
+ }
355
+ return [...diagnostics].some((diagnostic) => OPENCODE_HEADERS_TIMEOUT_TOKENS.some((token) => diagnostic.includes(token)));
356
+ }
357
+ function isAlreadyPresentMcpError(error) {
358
+ const normalized = toDiagnosticErrorMessage(error).toLowerCase();
359
+ return MCP_ALREADY_PRESENT_ERROR_TOKENS.some((token) => normalized.includes(token));
360
+ }
361
+ function readOpenCodeMcpOperationError(data, name) {
362
+ const root = readOpenCodeRecord(data);
363
+ const entry = readOpenCodeRecord(root?.[name]);
364
+ if (!entry || entry.status !== "failed") {
365
+ return undefined;
366
+ }
367
+ return entry.error ?? `OpenCode reported MCP server '${name}' failed`;
368
+ }
369
+ function resolvePartDedupeKey(part, partType) {
370
+ if (part.id.trim().length > 0) {
371
+ return `${partType}:${part.id}`;
372
+ }
373
+ if (part.messageID.trim().length > 0) {
374
+ return `${partType}:message:${part.messageID}`;
375
+ }
376
+ return null;
377
+ }
378
+ function matchesHydratedFingerprint(fingerprints, id, value) {
379
+ const hydratedFingerprint = fingerprints?.get(id);
380
+ if (!hydratedFingerprint) {
381
+ return false;
382
+ }
383
+ fingerprints?.delete(id);
384
+ return hydratedFingerprint === JSON.stringify(value);
385
+ }
386
+ // `null` = no explicit mode. The `agent` field is then omitted from OpenCode
387
+ // prompt/command calls so OpenCode falls back to its own configured default
388
+ // agent — never assume any particular agent (even `build`) exists, since
389
+ // OpenCode users can define or delete agents at will.
390
+ function normalizeOpenCodeModeId(modeId) {
391
+ const trimmed = typeof modeId === "string" ? modeId.trim() : "";
392
+ if (!trimmed || trimmed === "default") {
393
+ return null;
394
+ }
395
+ return trimmed;
396
+ }
397
+ function resolveOpenCodeRuntimeAgentId(modeId) {
398
+ const normalizedModeId = normalizeOpenCodeModeId(modeId);
399
+ if (normalizedModeId === null) {
400
+ return undefined;
401
+ }
402
+ return normalizedModeId === OPENCODE_LEGACY_FULL_ACCESS_MODE_ID
403
+ ? OPENCODE_BUILD_MODE_ID
404
+ : normalizedModeId;
405
+ }
406
+ function normalizeOpenCodeConfig(config) {
407
+ if (normalizeOpenCodeModeId(config.modeId) !== OPENCODE_LEGACY_FULL_ACCESS_MODE_ID) {
408
+ return { ...config };
409
+ }
410
+ return {
411
+ ...config,
412
+ modeId: OPENCODE_BUILD_MODE_ID,
413
+ featureValues: {
414
+ ...config.featureValues,
415
+ [OPENCODE_AUTO_ACCEPT_FEATURE_ID]: true,
416
+ },
417
+ };
418
+ }
419
+ function isSelectableOpenCodeAgent(agent) {
420
+ return (agent.mode === "primary" || agent.mode === "all") && agent.hidden !== true;
421
+ }
422
+ const OPENCODE_AGENT_HEX_COLOR_PATTERN = /^#[0-9a-fA-F]{6}$/;
423
+ function readOpenCodeAgentHexColor(agent) {
424
+ return typeof agent.color === "string" && OPENCODE_AGENT_HEX_COLOR_PATTERN.test(agent.color)
425
+ ? agent.color
426
+ : undefined;
427
+ }
428
+ function mapOpenCodeAgentToMode(agent) {
429
+ const colorTier = readOpenCodeAgentHexColor(agent);
430
+ return {
431
+ id: agent.name,
432
+ label: agent.name.startsWith("byspace")
433
+ ? `BySpace${agent.name.slice("byspace".length)}`
434
+ : agent.name.charAt(0).toUpperCase() + agent.name.slice(1),
435
+ icon: "Bot",
436
+ description: typeof agent.description === "string" && agent.description.trim().length > 0
437
+ ? agent.description.trim()
438
+ : DEFAULT_MODES.find((mode) => mode.id === agent.name)?.description,
439
+ ...(colorTier ? { colorTier } : {}),
440
+ };
441
+ }
442
+ function mergeOpenCodeModes(discoveredModes) {
443
+ const filtered = discoveredModes.filter((mode) => mode.id !== OPENCODE_LEGACY_FULL_ACCESS_MODE_ID);
444
+ // When discovery returns results, trust them exactly — don't inject hardcoded
445
+ // defaults that the user may have intentionally disabled in their OpenCode config.
446
+ // When discovery produced nothing, return empty rather than fabricating modes:
447
+ // OpenCode users can rename or delete any agent, so a hardcoded fallback can
448
+ // validate a mode that does not actually exist (failing later at prompt time).
449
+ return sortOpenCodeModes(filtered);
450
+ }
451
+ function sortOpenCodeModes(modes) {
452
+ const order = new Map(DEFAULT_MODES.map((mode, index) => [mode.id, index]));
453
+ return [...modes].sort((left, right) => {
454
+ const leftOrder = order.get(left.id) ?? Number.MAX_SAFE_INTEGER;
455
+ const rightOrder = order.get(right.id) ?? Number.MAX_SAFE_INTEGER;
456
+ if (leftOrder !== rightOrder) {
457
+ return leftOrder - rightOrder;
458
+ }
459
+ return left.label.localeCompare(right.label);
460
+ });
461
+ }
462
+ function readPositiveFiniteNumber(value) {
463
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : undefined;
464
+ }
465
+ function maxFiniteNumber(left, right) {
466
+ return left === undefined ? right : Math.max(left, right);
467
+ }
468
+ function assignUsageNumber(usage, key, value) {
469
+ if (value !== undefined) {
470
+ usage[key] = value;
471
+ }
472
+ }
473
+ function buildOpenCodeModelLookupKey(providerId, modelId) {
474
+ return `${providerId}/${modelId}`;
475
+ }
476
+ function parseOpenCodeModelLookupKey(modelId) {
477
+ if (typeof modelId !== "string" || modelId.trim().length === 0) {
478
+ return undefined;
479
+ }
480
+ const slashIndex = modelId.indexOf("/");
481
+ if (slashIndex <= 0 || slashIndex === modelId.length - 1) {
482
+ return undefined;
483
+ }
484
+ const providerId = modelId.slice(0, slashIndex).trim();
485
+ const providerModelId = modelId.slice(slashIndex + 1).trim();
486
+ if (!providerId || !providerModelId) {
487
+ return undefined;
488
+ }
489
+ return buildOpenCodeModelLookupKey(providerId, providerModelId);
490
+ }
491
+ function extractOpenCodeModelContextWindow(model) {
492
+ if (!model || typeof model !== "object") {
493
+ return undefined;
494
+ }
495
+ const limit = model.limit;
496
+ return readPositiveFiniteNumber(limit?.context);
497
+ }
498
+ function buildOpenCodeModelDefinition(provider, modelId, model) {
499
+ const rawVariants = model.variants ? Object.keys(model.variants) : [];
500
+ const thinkingOptions = rawVariants.map((id, index) => ({
501
+ id,
502
+ label: id,
503
+ isDefault: index === 0,
504
+ }));
505
+ return {
506
+ provider: "opencode",
507
+ id: `${provider.id}/${modelId}`,
508
+ label: model.name,
509
+ description: `${provider.name} - ${model.family ?? ""}`.trim(),
510
+ thinkingOptions: thinkingOptions.length > 0 ? thinkingOptions : undefined,
511
+ defaultThinkingOptionId: thinkingOptions[0]?.id,
512
+ metadata: {
513
+ providerId: provider.id,
514
+ providerName: provider.name,
515
+ modelId,
516
+ family: model.family,
517
+ releaseDate: model.release_date,
518
+ supportsAttachments: model.attachment,
519
+ supportsReasoning: model.reasoning,
520
+ supportsToolCall: model.tool_call,
521
+ cost: model.cost,
522
+ contextWindowMaxTokens: extractOpenCodeModelContextWindow(model),
523
+ ...(model.limit ? { limit: model.limit } : {}),
524
+ },
525
+ };
526
+ }
527
+ function resolveOpenCodeSelectedModelContextWindow(providers, modelId) {
528
+ if (!providers) {
529
+ return undefined;
530
+ }
531
+ const modelLookupKey = parseOpenCodeModelLookupKey(modelId);
532
+ if (!modelLookupKey) {
533
+ return undefined;
534
+ }
535
+ const lookup = buildOpenCodeModelContextWindowLookup(providers);
536
+ return lookup.get(modelLookupKey);
537
+ }
538
+ function buildOpenCodeModelContextWindowLookup(providers) {
539
+ const lookup = new Map();
540
+ if (!providers) {
541
+ return lookup;
542
+ }
543
+ const connectedProviderIds = new Set(providers.connected ?? []);
544
+ for (const provider of providers.all ?? []) {
545
+ // Providers with source "api" are managed by the OpenCode console/subscription and are
546
+ // usable even though they don't appear in `connected` (which only lists env/config providers).
547
+ if (!connectedProviderIds.has(provider.id) && provider.source !== "api") {
548
+ continue;
549
+ }
550
+ for (const [modelId, modelDefinition] of Object.entries(provider.models ?? {})) {
551
+ const contextWindow = extractOpenCodeModelContextWindow(modelDefinition);
552
+ if (contextWindow === undefined) {
553
+ continue;
554
+ }
555
+ lookup.set(buildOpenCodeModelLookupKey(provider.id, modelId), contextWindow);
556
+ }
557
+ }
558
+ return lookup;
559
+ }
560
+ function resolveOpenCodeModelLookupKeyFromAssistantMessage(info) {
561
+ const providerId = info.providerID;
562
+ const modelId = info.modelID;
563
+ if (!providerId || !modelId) {
564
+ return undefined;
565
+ }
566
+ return buildOpenCodeModelLookupKey(providerId, modelId);
567
+ }
568
+ function mergeOpenCodeStepFinishUsage(usage, part, options = {}) {
569
+ const inputTokens = readPositiveFiniteNumber(part.tokens?.input);
570
+ const outputTokens = readPositiveFiniteNumber(part.tokens?.output);
571
+ const reasoningTokens = readPositiveFiniteNumber(part.tokens?.reasoning);
572
+ const cacheReadTokens = readPositiveFiniteNumber(part.tokens?.cache?.read);
573
+ const cacheWriteTokens = readPositiveFiniteNumber(part.tokens?.cache?.write);
574
+ const totalTokens = (inputTokens ?? 0) +
575
+ (outputTokens ?? 0) +
576
+ (reasoningTokens ?? 0) +
577
+ (cacheReadTokens ?? 0) +
578
+ (cacheWriteTokens ?? 0);
579
+ const cost = readPositiveFiniteNumber(part.cost);
580
+ assignUsageNumber(usage, "inputTokens", inputTokens);
581
+ assignUsageNumber(usage, "cachedInputTokens", cacheReadTokens);
582
+ assignUsageNumber(usage, "outputTokens", outputTokens);
583
+ if (totalTokens > 0) {
584
+ usage.contextWindowUsedTokens = totalTokens;
585
+ }
586
+ if (cost !== undefined) {
587
+ usage.totalCostUsd = options.totalCostUsd ?? (usage.totalCostUsd ?? 0) + cost;
588
+ }
589
+ }
590
+ function hasNormalizedOpenCodeUsage(usage) {
591
+ return [
592
+ usage.inputTokens,
593
+ usage.cachedInputTokens,
594
+ usage.outputTokens,
595
+ usage.totalCostUsd,
596
+ usage.contextWindowMaxTokens,
597
+ usage.contextWindowUsedTokens,
598
+ ].some((value) => typeof value === "number" && Number.isFinite(value));
599
+ }
600
+ function getOpenCodeAttachmentExtension(mimeType) {
601
+ switch (mimeType) {
602
+ case "image/png":
603
+ return "png";
604
+ case "image/jpeg":
605
+ return "jpg";
606
+ case "image/webp":
607
+ return "webp";
608
+ case "image/gif":
609
+ return "gif";
610
+ case "image/svg+xml":
611
+ return "svg";
612
+ default:
613
+ return "bin";
614
+ }
615
+ }
616
+ function toOpenCodeDataUrl(mimeType, data) {
617
+ const match = data.match(/^data:([^;,]+);base64,(.+)$/);
618
+ if (match) {
619
+ return {
620
+ mimeType: match[1] ?? mimeType,
621
+ url: data,
622
+ };
623
+ }
624
+ return {
625
+ mimeType,
626
+ url: `data:${mimeType};base64,${data}`,
627
+ };
628
+ }
629
+ function buildOpenCodePromptParts(prompt) {
630
+ if (typeof prompt === "string") {
631
+ return [{ type: "text", text: prompt }];
632
+ }
633
+ let attachmentOrdinal = 0;
634
+ const output = [];
635
+ for (const part of prompt) {
636
+ if (part.type === "text") {
637
+ output.push({ type: "text", text: part.text });
638
+ continue;
639
+ }
640
+ if (part.type === "image") {
641
+ attachmentOrdinal += 1;
642
+ const normalized = toOpenCodeDataUrl(part.mimeType, part.data);
643
+ output.push({
644
+ type: "file",
645
+ mime: normalized.mimeType,
646
+ filename: `attachment-${attachmentOrdinal}.${getOpenCodeAttachmentExtension(normalized.mimeType)}`,
647
+ url: normalized.url,
648
+ });
649
+ continue;
650
+ }
651
+ output.push({ type: "text", text: renderPromptAttachmentAsText(part) });
652
+ }
653
+ return output;
654
+ }
655
+ function buildOpenCodeUserTimelineText(prompt) {
656
+ if (typeof prompt === "string") {
657
+ return prompt;
658
+ }
659
+ return prompt
660
+ .map((part) => {
661
+ if (part.type === "text") {
662
+ return part.text;
663
+ }
664
+ if (part.type === "image") {
665
+ return "[Image]";
666
+ }
667
+ return renderPromptAttachmentAsText(part);
668
+ })
669
+ .filter((text) => text.trim().length > 0)
670
+ .join("\n");
671
+ }
672
+ async function collectOpenCodeImportableSessionsFromSdk(client, options) {
673
+ const limit = options?.limit ?? OPENCODE_PERSISTED_SESSION_LIMIT;
674
+ const sessionListLimit = options?.cwd ? Math.max(limit, OPENCODE_PERSISTED_SESSION_LIMIT) : limit;
675
+ const response = await client.experimental.session.list({
676
+ archived: true,
677
+ roots: true,
678
+ limit: sessionListLimit,
679
+ });
680
+ if (response.error) {
681
+ throw new Error(`Failed to list OpenCode sessions: ${JSON.stringify(response.error)}`);
682
+ }
683
+ const matchesCwd = options?.cwd ? createPathEquivalenceMatcher(options.cwd) : null;
684
+ return (response.data ?? [])
685
+ .filter((session) => !matchesCwd || matchesCwd(session.directory))
686
+ .sort((left, right) => getOpenCodeSessionTimestamp(right) - getOpenCodeSessionTimestamp(left))
687
+ .slice(0, limit)
688
+ .map((session) => ({
689
+ providerHandleId: session.id,
690
+ cwd: session.directory,
691
+ title: normalizeOpenCodeSessionTitle(session.title),
692
+ firstPromptPreview: null,
693
+ lastPromptPreview: null,
694
+ lastActivityAt: new Date(getOpenCodeSessionTimestamp(session)),
695
+ }));
696
+ }
697
+ function normalizeOpenCodeSessionTitle(title) {
698
+ const normalized = title?.trim();
699
+ return normalized ? normalized : null;
700
+ }
701
+ function getOpenCodeSessionTimestamp(session) {
702
+ return session.time?.updated ?? session.time?.created ?? 0;
703
+ }
704
+ function resolveOpenCodeReplayTimestamp(params) {
705
+ const timedPart = params.part;
706
+ const partTimestamp = timedPart?.time?.start ??
707
+ timedPart?.time?.end ??
708
+ params.message.time?.created ??
709
+ params.message.time?.completed;
710
+ return normalizeProviderReplayTimestamp(partTimestamp);
711
+ }
712
+ function buildOpenCodeReplayTimelineEvent(params) {
713
+ const timestamp = resolveOpenCodeReplayTimestamp({
714
+ message: params.message,
715
+ part: params.part,
716
+ });
717
+ return {
718
+ type: "timeline",
719
+ provider: "opencode",
720
+ item: params.item,
721
+ ...(timestamp ? { timestamp } : {}),
722
+ };
723
+ }
724
+ function buildOpenCodeReplayPartTimelineEvent(params) {
725
+ const { part, message } = params;
726
+ if (part.type === "text" && part.text) {
727
+ return buildOpenCodeReplayTimelineEvent({
728
+ item: { type: "assistant_message", text: part.text, messageId: message.id },
729
+ message,
730
+ part,
731
+ });
732
+ }
733
+ if (part.type === "reasoning" && part.text) {
734
+ return buildOpenCodeReplayTimelineEvent({
735
+ item: { type: "reasoning", text: part.text },
736
+ message,
737
+ part,
738
+ });
739
+ }
740
+ if (part.type !== "tool") {
741
+ return null;
742
+ }
743
+ if (isOpenCodeTodoWriteToolPart(part)) {
744
+ const todos = readOpenCodeTodoItemsFromToolPart(part);
745
+ if (!todos) {
746
+ return null;
747
+ }
748
+ return buildOpenCodeReplayTimelineEvent({
749
+ item: mapOpenCodeTodosToTimelineItems(todos),
750
+ message,
751
+ part,
752
+ });
753
+ }
754
+ const parsedToolPart = OpencodeToolPartToTimelineItemSchema.safeParse(part);
755
+ if (!parsedToolPart.success || !parsedToolPart.data) {
756
+ return null;
757
+ }
758
+ return buildOpenCodeReplayTimelineEvent({
759
+ item: parsedToolPart.data,
760
+ message,
761
+ part,
762
+ });
763
+ }
764
+ function isOpenCodeCompactionSummaryMessage(message) {
765
+ return (message.role === "assistant" &&
766
+ (message.summary === true || message.agent === "compaction" || message.mode === "compaction"));
767
+ }
768
+ function findOpenCodeCompactionPart(message) {
769
+ return message.parts.find((part) => part.type === "compaction");
770
+ }
771
+ async function readOpenCodeSessionMessagesFromSdk(client, session) {
772
+ const response = await client.session.messages({
773
+ sessionID: session.id,
774
+ directory: session.directory,
775
+ });
776
+ if (response.error || !response.data) {
777
+ return [];
778
+ }
779
+ return filterOpenCodeRevertedMessages(response.data, session.revert);
780
+ }
781
+ function buildOpenCodeSessionTimeline(messages) {
782
+ const timeline = [];
783
+ let hideNextAssistantAfterCompaction = false;
784
+ for (const message of messages) {
785
+ const compactionPart = findOpenCodeCompactionPart(message);
786
+ if (message.info.role === "assistant" && hideNextAssistantAfterCompaction) {
787
+ hideNextAssistantAfterCompaction = false;
788
+ continue;
789
+ }
790
+ if (message.info.role === "user" && !compactionPart) {
791
+ hideNextAssistantAfterCompaction = false;
792
+ }
793
+ timeline.push(...buildOpenCodeReplayTimelineEvents(message).map((event) => event.item));
794
+ if (message.info.role === "user" && compactionPart) {
795
+ timeline.push(createCompactionTimelineItem("completed", compactionPart.auto ? "auto" : "manual"));
796
+ hideNextAssistantAfterCompaction = true;
797
+ }
798
+ }
799
+ return timeline;
800
+ }
801
+ function filterOpenCodeRevertedMessages(messages, revert) {
802
+ if (!revert?.messageID || revert.partID) {
803
+ return [...messages];
804
+ }
805
+ const revertIndex = messages.findIndex((message) => message.info.id === revert.messageID);
806
+ if (revertIndex < 0) {
807
+ return [...messages];
808
+ }
809
+ return messages.slice(0, revertIndex);
810
+ }
811
+ function resolveOpenCodePersistedSessionModeId(session, messages) {
812
+ const agent = session.agent ?? messages.map(readOpenCodeMessageAgent).find(Boolean);
813
+ return agent ? (normalizeOpenCodeModeId(agent) ?? undefined) : undefined;
814
+ }
815
+ function readOpenCodeMessageAgent(message) {
816
+ const agent = message.info.agent;
817
+ return typeof agent === "string" && agent.trim() ? agent : undefined;
818
+ }
819
+ function resolveOpenCodePersistedSessionModel(session, messages) {
820
+ if (session.model) {
821
+ return buildOpenCodeModelLookupKey(session.model.providerID, session.model.id);
822
+ }
823
+ const model = messages.map(readOpenCodeMessageModel).find(Boolean);
824
+ return model ? buildOpenCodeModelLookupKey(model.providerID, model.modelID) : undefined;
825
+ }
826
+ function readOpenCodeMessageModel(message) {
827
+ const { info } = message;
828
+ if (info.role === "user") {
829
+ return info.model;
830
+ }
831
+ return {
832
+ providerID: info.providerID,
833
+ modelID: info.modelID,
834
+ };
835
+ }
836
+ function buildOpenCodeReplayTimelineEvents(message) {
837
+ const { info, parts } = message;
838
+ if (isOpenCodeCompactionSummaryMessage(info)) {
839
+ return [];
840
+ }
841
+ if (info.role === "user") {
842
+ const text = parts
843
+ .filter((part) => part.type === "text")
844
+ .map((part) => part.text)
845
+ .join("");
846
+ return text
847
+ ? [
848
+ buildOpenCodeReplayTimelineEvent({
849
+ item: { type: "user_message", text, messageId: info.id },
850
+ message: info,
851
+ }),
852
+ ]
853
+ : [];
854
+ }
855
+ const events = [];
856
+ let emittedAssistantText = false;
857
+ for (const part of parts) {
858
+ if (part.type === "text" && part.text) {
859
+ emittedAssistantText = true;
860
+ }
861
+ const event = buildOpenCodeReplayPartTimelineEvent({ part, message: info });
862
+ if (event) {
863
+ events.push(event);
864
+ }
865
+ }
866
+ if (!emittedAssistantText) {
867
+ const text = stringifyStructuredAssistantMessage(info.structured);
868
+ if (text) {
869
+ events.push(buildOpenCodeReplayTimelineEvent({
870
+ item: { type: "assistant_message", text, messageId: info.id },
871
+ message: info,
872
+ }));
873
+ }
874
+ }
875
+ return events;
876
+ }
877
+ export const __openCodeInternals = {
878
+ buildOpenCodePromptParts,
879
+ buildOpenCodeSessionTimeline,
880
+ buildOpenCodeModelContextWindowLookup,
881
+ buildOpenCodeModelDefinition,
882
+ buildOpenCodeModelLookupKey,
883
+ extractOpenCodeModelContextWindow,
884
+ hasNormalizedOpenCodeUsage,
885
+ mergeOpenCodeStepFinishUsage,
886
+ parseOpenCodeModelLookupKey,
887
+ reconcileOpenCodeSessionClose,
888
+ resolveOpenCodeModelLookupKeyFromAssistantMessage,
889
+ resolveOpenCodeSelectedModelContextWindow,
890
+ isSelectableOpenCodeAgent,
891
+ mapOpenCodeAgentToMode,
892
+ resolveOpenCodeHomeDir,
893
+ get OpenCodeAgentSession() {
894
+ return OpenCodeAgentSession;
895
+ },
896
+ };
897
+ function createSdkOpenCodeClient(options) {
898
+ return createOpencodeClient(options);
899
+ }
900
+ export class OpenCodeAgentClient {
901
+ constructor(logger, runtimeSettings, deps = {}) {
902
+ this.provider = "opencode";
903
+ this.capabilities = OPENCODE_CAPABILITIES;
904
+ this.resolveCreateConfig = resolveOpenCodeCreateConfig;
905
+ this.isCreateConfigUnattended = isOpenCodeCreateConfigUnattended;
906
+ this.modelContextWindows = new Map();
907
+ this.logger = logger.child({ module: "agent", provider: "opencode" });
908
+ this.runtimeSettings = runtimeSettings;
909
+ this.serverManager =
910
+ deps.serverManager ??
911
+ OpenCodeServerManager.getInstance(this.logger, runtimeSettings, {
912
+ managedProcesses: deps.managedProcesses,
913
+ resolveHomeDir: deps.resolveHomeDir,
914
+ });
915
+ this.createOpenCodeClient = deps.createClient ?? createSdkOpenCodeClient;
916
+ this.resolveHomeDir = deps.resolveHomeDir ?? resolveOpenCodeHomeDir;
917
+ }
918
+ async createSession(config, launchContext, options) {
919
+ const openCodeConfig = this.assertConfig(config);
920
+ const acquisition = launchContext?.env
921
+ ? await this.serverManager.acquireDedicated(launchContext.env)
922
+ : await this.serverManager.acquireCurrent();
923
+ const { url } = acquisition.server;
924
+ const client = this.createOpenCodeClient({
925
+ baseUrl: url,
926
+ directory: openCodeConfig.cwd,
927
+ });
928
+ try {
929
+ const response = await withTimeout(client.session.create({ directory: openCodeConfig.cwd }), 10000, "OpenCode session.create timed out after 10s");
930
+ if (response.error) {
931
+ throw new Error(`Failed to create OpenCode session: ${JSON.stringify(response.error)}`);
932
+ }
933
+ const session = response.data;
934
+ if (!session) {
935
+ throw new Error("OpenCode session creation returned no data");
936
+ }
937
+ await this.populateModelContextWindowCache(client, openCodeConfig.cwd);
938
+ return new OpenCodeAgentSession(openCodeConfig, client, session.id, this.logger, new Map(this.modelContextWindows), acquisition.release, options?.persistSession, launchContext?.agentId, url);
939
+ }
940
+ catch (error) {
941
+ acquisition.release();
942
+ throw error;
943
+ }
944
+ }
945
+ async resumeSession(handle, overrides, launchContext) {
946
+ const metadata = (handle.metadata ?? {});
947
+ const cwd = overrides?.cwd ?? metadata.cwd;
948
+ if (!cwd) {
949
+ throw new Error("OpenCode resume requires the original working directory");
950
+ }
951
+ const config = {
952
+ ...metadata,
953
+ ...overrides,
954
+ provider: "opencode",
955
+ cwd,
956
+ };
957
+ const openCodeConfig = this.assertConfig(config);
958
+ const registeredServerUrl = getOpenCodeChildSessionServerUrl(handle.sessionId);
959
+ const registeredAcquisition = registeredServerUrl
960
+ ? this.serverManager.acquireExisting(registeredServerUrl)
961
+ : null;
962
+ const acquisition = registeredAcquisition ??
963
+ (launchContext?.env
964
+ ? await this.serverManager.acquireDedicated(launchContext.env)
965
+ : await this.serverManager.acquireCurrent());
966
+ const { url } = acquisition.server;
967
+ const client = this.createOpenCodeClient({
968
+ baseUrl: url,
969
+ directory: openCodeConfig.cwd,
970
+ });
971
+ try {
972
+ await this.populateModelContextWindowCache(client, openCodeConfig.cwd);
973
+ return new OpenCodeAgentSession(openCodeConfig, client, handle.sessionId, this.logger, new Map(this.modelContextWindows), acquisition.release, undefined, launchContext?.agentId, url, registeredAcquisition !== null);
974
+ }
975
+ catch (error) {
976
+ acquisition.release();
977
+ throw error;
978
+ }
979
+ }
980
+ async fetchCatalog(options) {
981
+ const acquisition = options.force
982
+ ? await this.serverManager.acquireNew()
983
+ : await this.serverManager.acquireCurrent();
984
+ const { url } = acquisition.server;
985
+ const isGlobalCatalog = options.scope === "global";
986
+ try {
987
+ // OpenCode treats the catalog directory as a workspace. The global catalog
988
+ // is not a project, so use the neutral OpenCode home instead of user home.
989
+ const directory = isGlobalCatalog ? this.resolveHomeDir() : options.cwd;
990
+ if (isGlobalCatalog) {
991
+ await fs.mkdir(directory, { recursive: true });
992
+ this.logger.debug({ directory }, "opencode catalog refresh: using opencode-home for global provider catalog");
993
+ }
994
+ const client = this.createOpenCodeClient({ baseUrl: url, directory });
995
+ const [models, modes] = await Promise.all([
996
+ this.fetchModelsFromClient(client, directory),
997
+ this.fetchModesFromClient(client, directory),
998
+ ]);
999
+ return { models, modes };
1000
+ }
1001
+ finally {
1002
+ acquisition.release();
1003
+ }
1004
+ }
1005
+ async listCommands(config) {
1006
+ const openCodeConfig = this.assertConfig(config);
1007
+ const acquisition = await this.serverManager.acquireCurrent();
1008
+ const { url } = acquisition.server;
1009
+ const client = this.createOpenCodeClient({
1010
+ baseUrl: url,
1011
+ directory: openCodeConfig.cwd,
1012
+ });
1013
+ try {
1014
+ return await listOpenCodeCommandsFromSdk(client, openCodeConfig.cwd);
1015
+ }
1016
+ finally {
1017
+ acquisition.release();
1018
+ }
1019
+ }
1020
+ async listFeatures(config) {
1021
+ return [buildOpenCodeAutoAcceptFeature(this.assertConfig(config))];
1022
+ }
1023
+ async listImportableSessions(options) {
1024
+ const acquisition = await this.serverManager.acquireCurrent();
1025
+ const { url } = acquisition.server;
1026
+ const client = this.createOpenCodeClient({
1027
+ baseUrl: url,
1028
+ directory: options?.cwd ?? "",
1029
+ });
1030
+ try {
1031
+ return await collectOpenCodeImportableSessionsFromSdk(client, options);
1032
+ }
1033
+ finally {
1034
+ acquisition.release();
1035
+ }
1036
+ }
1037
+ async importSession(input, context) {
1038
+ const acquisition = await this.serverManager.acquireCurrent();
1039
+ const { url } = acquisition.server;
1040
+ const client = this.createOpenCodeClient({
1041
+ baseUrl: url,
1042
+ directory: input.cwd,
1043
+ });
1044
+ try {
1045
+ const sessionResponse = await client.session.get({
1046
+ sessionID: input.providerHandleId,
1047
+ directory: input.cwd,
1048
+ });
1049
+ if (sessionResponse.error || !sessionResponse.data) {
1050
+ throw new Error(`Failed to load OpenCode session ${input.providerHandleId}`);
1051
+ }
1052
+ const session = sessionResponse.data;
1053
+ const messages = await readOpenCodeSessionMessagesFromSdk(client, session);
1054
+ const modeId = resolveOpenCodePersistedSessionModeId(session, messages);
1055
+ const model = resolveOpenCodePersistedSessionModel(session, messages);
1056
+ return await importSessionFromPersistence({
1057
+ provider: "opencode",
1058
+ request: input,
1059
+ context,
1060
+ resumeSession: this.resumeSession.bind(this),
1061
+ config: {
1062
+ title: normalizeOpenCodeSessionTitle(session.title) ?? undefined,
1063
+ ...(modeId ? { modeId } : {}),
1064
+ ...(model ? { model } : {}),
1065
+ },
1066
+ });
1067
+ }
1068
+ finally {
1069
+ acquisition.release();
1070
+ }
1071
+ }
1072
+ async isAvailable() {
1073
+ const launch = await resolveProviderLaunch({
1074
+ commandConfig: this.runtimeSettings?.command,
1075
+ defaultBinary: "opencode",
1076
+ });
1077
+ const availability = await checkProviderLaunchAvailable(launch);
1078
+ return availability.available;
1079
+ }
1080
+ async shutdown() {
1081
+ await this.serverManager.shutdown();
1082
+ }
1083
+ async getDiagnostic() {
1084
+ try {
1085
+ const launch = await resolveProviderLaunch({
1086
+ commandConfig: this.runtimeSettings?.command,
1087
+ defaultBinary: "opencode",
1088
+ });
1089
+ const availability = await checkProviderLaunchAvailable(launch);
1090
+ let authValue = "Not checked";
1091
+ const authCommand = availability.available
1092
+ ? (availability.resolvedPath ?? launch.command)
1093
+ : null;
1094
+ if (authCommand) {
1095
+ try {
1096
+ const { stdout, stderr } = await execCommand(authCommand, [...launch.args, "auth", "list"], {
1097
+ ...createProviderEnvSpec(),
1098
+ timeout: 5000,
1099
+ });
1100
+ const text = (stdout.trim() || stderr.trim()).trim();
1101
+ authValue = text ? `\n ${text.replace(/\n/g, "\n ")}` : "(empty)";
1102
+ }
1103
+ catch (error) {
1104
+ authValue = `Error - ${toDiagnosticErrorMessage(error)}`;
1105
+ }
1106
+ }
1107
+ return {
1108
+ diagnostic: formatProviderDiagnostic("OpenCode", [
1109
+ ...(await buildCommandResolutionDiagnosticRows(launch, {
1110
+ knownBinaryNames: ["opencode"],
1111
+ })),
1112
+ ...(await buildBinaryDiagnosticRows(launch, availability)),
1113
+ { label: "Auth", value: authValue },
1114
+ ]),
1115
+ };
1116
+ }
1117
+ catch (error) {
1118
+ return {
1119
+ diagnostic: formatProviderDiagnosticError("OpenCode", error),
1120
+ };
1121
+ }
1122
+ }
1123
+ async fetchModelsFromClient(client, directory) {
1124
+ const response = await openCodeMetadataLimit(() => withTimeout(client.provider.list({ directory }), OPENCODE_PROVIDER_LIST_TIMEOUT_MS, `OpenCode provider.list timed out after ${OPENCODE_PROVIDER_LIST_TIMEOUT_MS / 1000}s - server may not be authenticated or connected to any providers`));
1125
+ if (response.error) {
1126
+ throw new Error(`Failed to fetch OpenCode providers: ${JSON.stringify(response.error)}`);
1127
+ }
1128
+ const providers = response.data;
1129
+ if (!providers) {
1130
+ return [];
1131
+ }
1132
+ const connectedProviderIds = new Set(providers.connected);
1133
+ const isAccessible = (provider) => connectedProviderIds.has(provider.id) || provider.source === "api";
1134
+ if (!providers.all.some(isAccessible)) {
1135
+ throw new Error("OpenCode has no connected providers. Please authenticate with at least one provider " +
1136
+ "(e.g., openai, anthropic), set appropriate environment variables (e.g., OPENAI_API_KEY), " +
1137
+ "or log in to OpenCode Go via the console.");
1138
+ }
1139
+ const models = [];
1140
+ this.modelContextWindows.clear();
1141
+ for (const provider of providers.all) {
1142
+ if (!isAccessible(provider)) {
1143
+ continue;
1144
+ }
1145
+ for (const [modelId, model] of Object.entries(provider.models)) {
1146
+ const definition = buildOpenCodeModelDefinition(provider, modelId, model);
1147
+ const contextWindowMaxTokens = extractOpenCodeModelContextWindow(model);
1148
+ if (contextWindowMaxTokens !== undefined) {
1149
+ this.modelContextWindows.set(buildOpenCodeModelLookupKey(provider.id, modelId), contextWindowMaxTokens);
1150
+ }
1151
+ models.push(definition);
1152
+ }
1153
+ }
1154
+ return models;
1155
+ }
1156
+ async fetchModesFromClient(client, directory) {
1157
+ const response = await openCodeMetadataLimit(() => withTimeout(client.app.agents({ directory }), 10000, "OpenCode app.agents timed out after 10s"));
1158
+ if (response.error || !response.data) {
1159
+ // Discovery failed — return an empty list rather than fabricating
1160
+ // modes. OpenCode users can rename or delete any agent (including
1161
+ // "build"/"plan"), so a hardcoded fallback can validate a mode that
1162
+ // does not actually exist, which then fails at prompt time.
1163
+ return [];
1164
+ }
1165
+ const discovered = response.data.filter(isSelectableOpenCodeAgent).map(mapOpenCodeAgentToMode);
1166
+ return mergeOpenCodeModes(discovered);
1167
+ }
1168
+ assertConfig(config) {
1169
+ if (config.provider !== "opencode") {
1170
+ throw new Error(`OpenCodeAgentClient received config for provider '${config.provider}'`);
1171
+ }
1172
+ return normalizeOpenCodeConfig({ ...config, provider: "opencode" });
1173
+ }
1174
+ async populateModelContextWindowCache(client, cwd) {
1175
+ const response = await openCodeMetadataLimit(() => client.provider.list({ directory: cwd }));
1176
+ if (response.error || !response.data) {
1177
+ return;
1178
+ }
1179
+ const lookup = buildOpenCodeModelContextWindowLookup(response.data);
1180
+ this.modelContextWindows.clear();
1181
+ for (const [modelLookupKey, contextWindowMaxTokens] of lookup.entries()) {
1182
+ this.modelContextWindows.set(modelLookupKey, contextWindowMaxTokens);
1183
+ }
1184
+ }
1185
+ }
1186
+ function stringifyStructuredAssistantMessage(value) {
1187
+ if (value === undefined) {
1188
+ return null;
1189
+ }
1190
+ if (typeof value === "string") {
1191
+ const trimmed = value.trim();
1192
+ return trimmed.length > 0 ? trimmed : null;
1193
+ }
1194
+ try {
1195
+ return JSON.stringify(value);
1196
+ }
1197
+ catch {
1198
+ return null;
1199
+ }
1200
+ }
1201
+ async function listOpenCodeCommandsFromSdk(client, directory) {
1202
+ const result = await client.command.list({ directory });
1203
+ const commandsByName = new Map(OPENCODE_HANDLED_BUILTIN_SLASH_COMMANDS.map((command) => [command.name, command]));
1204
+ if (result.error || !result.data) {
1205
+ return Array.from(commandsByName.values());
1206
+ }
1207
+ for (const cmd of result.data) {
1208
+ commandsByName.set(cmd.name, {
1209
+ name: cmd.name,
1210
+ description: cmd.description ?? "",
1211
+ argumentHint: cmd.hints?.length ? cmd.hints.join(" ") : "",
1212
+ kind: cmd.source === "skill" ? "skill" : "command",
1213
+ });
1214
+ }
1215
+ return Array.from(commandsByName.values());
1216
+ }
1217
+ function readOpenCodeRecord(value) {
1218
+ return typeof value === "object" && value !== null && !Array.isArray(value)
1219
+ ? value
1220
+ : null;
1221
+ }
1222
+ function readNonEmptyString(value) {
1223
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
1224
+ }
1225
+ function isOpenCodeTodoWriteToolPart(part) {
1226
+ return part.type === "tool" && part.tool.trim().toLowerCase() === "todowrite";
1227
+ }
1228
+ function readOpenCodeTodoItems(value) {
1229
+ if (typeof value === "string") {
1230
+ try {
1231
+ return readOpenCodeTodoItems(JSON.parse(value));
1232
+ }
1233
+ catch {
1234
+ return null;
1235
+ }
1236
+ }
1237
+ if (Array.isArray(value)) {
1238
+ return value.flatMap((entry) => {
1239
+ const record = readOpenCodeRecord(entry);
1240
+ if (!record) {
1241
+ return [];
1242
+ }
1243
+ const content = readNonEmptyString(record.content);
1244
+ if (!content) {
1245
+ return [];
1246
+ }
1247
+ return [
1248
+ {
1249
+ content,
1250
+ status: readNonEmptyString(record.status),
1251
+ },
1252
+ ];
1253
+ });
1254
+ }
1255
+ const record = readOpenCodeRecord(value);
1256
+ if (!record) {
1257
+ return null;
1258
+ }
1259
+ return readOpenCodeTodoItems(record.todos);
1260
+ }
1261
+ function readOpenCodeTodoItemsFromToolPart(part) {
1262
+ const state = readOpenCodeRecord(part.state);
1263
+ return (readOpenCodeTodoItems(state?.input) ??
1264
+ readOpenCodeTodoItems(state?.output) ??
1265
+ readOpenCodeTodoItems(state?.metadata));
1266
+ }
1267
+ function mapOpenCodeTodosToTimelineItems(todos) {
1268
+ return {
1269
+ type: "todo",
1270
+ items: todos.flatMap((todo) => {
1271
+ const text = readNonEmptyString(todo.content);
1272
+ if (!text) {
1273
+ return [];
1274
+ }
1275
+ return [
1276
+ {
1277
+ text,
1278
+ completed: todo.status === "completed",
1279
+ },
1280
+ ];
1281
+ }),
1282
+ };
1283
+ }
1284
+ function createCompactionTimelineItem(status, trigger) {
1285
+ return {
1286
+ type: "compaction",
1287
+ status,
1288
+ ...(trigger ? { trigger } : {}),
1289
+ };
1290
+ }
1291
+ const PERMISSION_COMMAND_KEYS = ["command", "cmd", "shellCommand"];
1292
+ const PERMISSION_CWD_KEYS = ["cwd", "directory", "path", "workdir"];
1293
+ const PERMISSION_REASON_KEYS = ["reason", "purpose", "description", "message"];
1294
+ const PERMISSION_TITLE_BY_NAME = {
1295
+ external_directory: "Access external directory",
1296
+ bash: "Run shell command",
1297
+ read: "Read files",
1298
+ read_file: "Read files",
1299
+ write: "Write files",
1300
+ write_file: "Write files",
1301
+ create_file: "Write files",
1302
+ edit: "Edit files",
1303
+ apply_patch: "Edit files",
1304
+ apply_diff: "Edit files",
1305
+ };
1306
+ function toHumanReadablePermissionTitle(permission) {
1307
+ const mapped = PERMISSION_TITLE_BY_NAME[permission];
1308
+ if (mapped) {
1309
+ return mapped;
1310
+ }
1311
+ const normalized = permission
1312
+ .split(/[\s_-]+/)
1313
+ .map((part) => part.trim())
1314
+ .filter((part) => part.length > 0)
1315
+ .map((part) => `${part[0]?.toUpperCase() ?? ""}${part.slice(1)}`)
1316
+ .join(" ");
1317
+ return normalized.length > 0 ? normalized : "Permission request";
1318
+ }
1319
+ function readFirstStringFromRecord(record, keys) {
1320
+ if (!record) {
1321
+ return null;
1322
+ }
1323
+ for (const key of keys) {
1324
+ const value = readNonEmptyString(record[key]);
1325
+ if (value) {
1326
+ return value;
1327
+ }
1328
+ }
1329
+ return null;
1330
+ }
1331
+ function readPermissionField(metadata, keys) {
1332
+ const direct = readFirstStringFromRecord(metadata, keys);
1333
+ if (direct) {
1334
+ return direct;
1335
+ }
1336
+ const nestedInput = readOpenCodeRecord(metadata?.input);
1337
+ return readFirstStringFromRecord(nestedInput, keys);
1338
+ }
1339
+ function buildOpenCodePermissionInput(params) {
1340
+ return {
1341
+ ...(params.patterns.length > 0 ? { patterns: params.patterns } : {}),
1342
+ ...(params.metadata ? { metadata: params.metadata } : {}),
1343
+ ...(params.tool ? { tool: params.tool } : {}),
1344
+ ...(params.command ? { command: params.command } : {}),
1345
+ };
1346
+ }
1347
+ function buildOpenCodePermissionDetail(params) {
1348
+ if (params.command) {
1349
+ return {
1350
+ type: "shell",
1351
+ command: params.command,
1352
+ ...(params.cwd ? { cwd: params.cwd } : {}),
1353
+ };
1354
+ }
1355
+ return {
1356
+ type: "unknown",
1357
+ input: {
1358
+ permission: params.permission,
1359
+ ...params.input,
1360
+ },
1361
+ output: null,
1362
+ };
1363
+ }
1364
+ function buildOpenCodePermissionDescription(params) {
1365
+ const parts = [];
1366
+ if (params.reason) {
1367
+ parts.push(params.reason);
1368
+ }
1369
+ if (params.patterns.length > 0) {
1370
+ parts.push(`Scope: ${params.patterns.join(", ")}`);
1371
+ }
1372
+ return parts.length > 0 ? parts.join(" - ") : undefined;
1373
+ }
1374
+ export function translateOpenCodeEvent(event, state) {
1375
+ const events = [];
1376
+ switch (event.type) {
1377
+ case "session.created":
1378
+ case "session.updated":
1379
+ appendOpenCodeSessionCreatedOrUpdated(event, state, events);
1380
+ break;
1381
+ case "session.deleted":
1382
+ appendOpenCodeSessionDeleted(event, state, events);
1383
+ break;
1384
+ case "message.updated":
1385
+ appendOpenCodeMessageUpdated(event, state, events);
1386
+ break;
1387
+ case "message.part.updated":
1388
+ appendOpenCodeMessagePartUpdated(event, state, events);
1389
+ break;
1390
+ case "message.part.delta":
1391
+ appendOpenCodeMessagePartDelta(event, state, events);
1392
+ break;
1393
+ case "permission.asked":
1394
+ appendOpenCodePermissionAsked(event, state, events);
1395
+ break;
1396
+ case "question.asked":
1397
+ appendOpenCodeQuestionAsked(event, state, events);
1398
+ break;
1399
+ case "todo.updated":
1400
+ if (event.properties.sessionID === state.sessionId) {
1401
+ events.push({
1402
+ type: "timeline",
1403
+ provider: "opencode",
1404
+ item: mapOpenCodeTodosToTimelineItems(event.properties.todos),
1405
+ });
1406
+ }
1407
+ break;
1408
+ case "session.compacted":
1409
+ if (event.properties.sessionID === state.sessionId) {
1410
+ events.push({
1411
+ type: "timeline",
1412
+ provider: "opencode",
1413
+ item: createCompactionTimelineItem("completed"),
1414
+ });
1415
+ }
1416
+ break;
1417
+ case "session.idle":
1418
+ if (event.properties.sessionID === state.sessionId) {
1419
+ resetOpenCodeTurnTrackingState(state);
1420
+ events.push({ type: "turn_completed", provider: "opencode", usage: undefined });
1421
+ }
1422
+ break;
1423
+ case "session.error":
1424
+ appendOpenCodeSessionError(event, state, events);
1425
+ break;
1426
+ case "session.status":
1427
+ appendOpenCodeSessionStatus(event, state, events);
1428
+ break;
1429
+ }
1430
+ return events;
1431
+ }
1432
+ function resetOpenCodeTurnTrackingState(state) {
1433
+ state.streamedPartKeys.clear();
1434
+ state.partTypes.clear();
1435
+ state.compactionSummaryMessageIds.clear();
1436
+ state.emittedCompactionPartIds.clear();
1437
+ if (state.suppressAssistantMessagesUntilIdle) {
1438
+ state.suppressAssistantMessagesUntilIdle.active = false;
1439
+ }
1440
+ }
1441
+ function getOpenCodeSubAgentMaps(state) {
1442
+ state.subAgentsByCallId ?? (state.subAgentsByCallId = new Map());
1443
+ state.subAgentCallIdByChildSessionId ?? (state.subAgentCallIdByChildSessionId = new Map());
1444
+ return {
1445
+ byCallId: state.subAgentsByCallId,
1446
+ callIdByChildSessionId: state.subAgentCallIdByChildSessionId,
1447
+ };
1448
+ }
1449
+ function getOpenCodeKnownChildSessionIds(state) {
1450
+ state.knownChildSessionIds ?? (state.knownChildSessionIds = new Set());
1451
+ return state.knownChildSessionIds;
1452
+ }
1453
+ function isOpenCodeSessionTrackedByParent(sessionId, state) {
1454
+ return (sessionId === state.sessionId ||
1455
+ state.knownChildSessionIds?.has(sessionId) === true ||
1456
+ state.subAgentCallIdByChildSessionId?.has(sessionId) === true);
1457
+ }
1458
+ function appendOpenCodeChildSessionDetected(child, state, events, status = "running") {
1459
+ if (child.id === state.sessionId ||
1460
+ !isOpenCodeSessionTrackedByParent(child.parentSessionId, state)) {
1461
+ return false;
1462
+ }
1463
+ const knownChildSessionIds = getOpenCodeKnownChildSessionIds(state);
1464
+ if (knownChildSessionIds.has(child.id)) {
1465
+ return false;
1466
+ }
1467
+ knownChildSessionIds.add(child.id);
1468
+ events.push({
1469
+ type: "provider_subagent",
1470
+ provider: "opencode",
1471
+ event: {
1472
+ type: "upsert",
1473
+ id: child.id,
1474
+ title: child.title ?? "OpenCode subagent",
1475
+ status,
1476
+ ...(child.directory ? { cwd: child.directory } : {}),
1477
+ },
1478
+ });
1479
+ return true;
1480
+ }
1481
+ function getOpenCodeSubAgentState(callId, state, toolCall) {
1482
+ const maps = getOpenCodeSubAgentMaps(state);
1483
+ const existing = maps.byCallId.get(callId);
1484
+ if (existing) {
1485
+ existing.toolCall = toolCall;
1486
+ return existing;
1487
+ }
1488
+ const created = {
1489
+ toolCall,
1490
+ };
1491
+ maps.byCallId.set(callId, created);
1492
+ return created;
1493
+ }
1494
+ function linkOpenCodeSubAgentChildSession(activity, childSessionId, state) {
1495
+ activity.childSessionId = childSessionId;
1496
+ const maps = getOpenCodeSubAgentMaps(state);
1497
+ maps.callIdByChildSessionId.set(childSessionId, activity.toolCall.callId);
1498
+ }
1499
+ function buildOpenCodeSubAgentTimelineItem(activity) {
1500
+ const toolCall = activity.toolCall;
1501
+ if (toolCall.detail.type !== "sub_agent") {
1502
+ return toolCall;
1503
+ }
1504
+ const childSessionId = activity.childSessionId ?? toolCall.detail.childSessionId;
1505
+ return {
1506
+ ...toolCall,
1507
+ detail: {
1508
+ ...toolCall.detail,
1509
+ ...(childSessionId ? { childSessionId } : {}),
1510
+ },
1511
+ };
1512
+ }
1513
+ function registerOpenCodeSubAgentToolCall(item, state) {
1514
+ if (item.detail.type !== "sub_agent") {
1515
+ return item;
1516
+ }
1517
+ const activity = getOpenCodeSubAgentState(item.callId, state, item);
1518
+ if (item.detail.childSessionId) {
1519
+ linkOpenCodeSubAgentChildSession(activity, item.detail.childSessionId, state);
1520
+ }
1521
+ return buildOpenCodeSubAgentTimelineItem(activity);
1522
+ }
1523
+ function findOnlyOpenCodeSubAgentWaitingForChild(state) {
1524
+ const maps = getOpenCodeSubAgentMaps(state);
1525
+ const candidates = [...maps.byCallId.values()].filter((activity) => activity.toolCall.status === "running" &&
1526
+ activity.toolCall.detail.type === "sub_agent" &&
1527
+ !activity.childSessionId);
1528
+ return candidates.length === 1 ? (candidates[0] ?? null) : null;
1529
+ }
1530
+ function appendOpenCodeToolCallTimelineItem(item, state, events) {
1531
+ const timelineItem = registerOpenCodeSubAgentToolCall(item, state);
1532
+ events.push({
1533
+ type: "timeline",
1534
+ provider: "opencode",
1535
+ item: timelineItem,
1536
+ });
1537
+ }
1538
+ function appendOpenCodeSubAgentChildSessionLinked(childSessionId, state, events) {
1539
+ const activity = findOnlyOpenCodeSubAgentWaitingForChild(state);
1540
+ if (!activity) {
1541
+ return;
1542
+ }
1543
+ linkOpenCodeSubAgentChildSession(activity, childSessionId, state);
1544
+ events.push({
1545
+ type: "timeline",
1546
+ provider: "opencode",
1547
+ item: buildOpenCodeSubAgentTimelineItem(activity),
1548
+ });
1549
+ }
1550
+ function appendOpenCodeSessionCreatedOrUpdated(event, state, events) {
1551
+ const info = readOpenCodeRecord(event.properties.info);
1552
+ if (event.properties.info.id === state.sessionId) {
1553
+ const sessionCost = readPositiveFiniteNumber(info?.cost);
1554
+ if (sessionCost !== undefined) {
1555
+ state.sessionTotalCostUsd = maxFiniteNumber(state.sessionTotalCostUsd, sessionCost);
1556
+ state.accumulatedUsage.totalCostUsd = state.sessionTotalCostUsd;
1557
+ }
1558
+ events.push({
1559
+ type: "thread_started",
1560
+ sessionId: state.sessionId,
1561
+ provider: "opencode",
1562
+ });
1563
+ return;
1564
+ }
1565
+ const parentSessionId = readNonEmptyString(info?.parentID) ?? readNonEmptyString(info?.parentId);
1566
+ if (parentSessionId) {
1567
+ appendOpenCodeChildSessionDetected({
1568
+ id: event.properties.info.id,
1569
+ parentSessionId,
1570
+ ...(readNonEmptyString(info?.title)
1571
+ ? { title: readNonEmptyString(info?.title) ?? undefined }
1572
+ : {}),
1573
+ ...(readNonEmptyString(info?.directory)
1574
+ ? { directory: readNonEmptyString(info?.directory) ?? undefined }
1575
+ : {}),
1576
+ }, state, events);
1577
+ }
1578
+ if (parentSessionId === state.sessionId) {
1579
+ appendOpenCodeSubAgentChildSessionLinked(event.properties.info.id, state, events);
1580
+ }
1581
+ }
1582
+ function appendOpenCodeSessionDeleted(event, state, events) {
1583
+ const sessionId = event.properties.sessionID;
1584
+ if (!isOpenCodeSessionTrackedByParent(sessionId, state)) {
1585
+ return;
1586
+ }
1587
+ state.knownChildSessionIds?.delete(sessionId);
1588
+ state.subAgentCallIdByChildSessionId?.delete(sessionId);
1589
+ events.push({
1590
+ type: "provider_subagent",
1591
+ provider: "opencode",
1592
+ event: { type: "remove", id: sessionId },
1593
+ });
1594
+ }
1595
+ function appendOpenCodeMessageUpdated(event, state, events) {
1596
+ const info = event.properties.info;
1597
+ if (info.sessionID !== state.sessionId) {
1598
+ return;
1599
+ }
1600
+ state.messageRoles.set(info.id, info.role);
1601
+ if (matchesHydratedFingerprint(state.hydratedMessageFingerprints, info.id, info)) {
1602
+ return;
1603
+ }
1604
+ if (info.role === "user") {
1605
+ appendOpenCodeUserMessageUpdated(info, state, events);
1606
+ return;
1607
+ }
1608
+ if (info.role !== "assistant") {
1609
+ return;
1610
+ }
1611
+ if (state.suppressAssistantMessagesUntilIdle?.active) {
1612
+ state.compactionSummaryMessageIds.add(info.id);
1613
+ return;
1614
+ }
1615
+ if (isOpenCodeCompactionSummaryMessage(info)) {
1616
+ state.compactionSummaryMessageIds.add(info.id);
1617
+ return;
1618
+ }
1619
+ const modelLookupKey = resolveOpenCodeModelLookupKeyFromAssistantMessage(info);
1620
+ if (modelLookupKey) {
1621
+ const contextWindowMaxTokens = state.modelContextWindowsByModelKey?.get(modelLookupKey);
1622
+ if (contextWindowMaxTokens !== undefined) {
1623
+ state.onAssistantModelContextWindowResolved?.(contextWindowMaxTokens);
1624
+ }
1625
+ }
1626
+ if (state.emittedStructuredMessageIds.has(info.id) || info.time?.completed === undefined) {
1627
+ return;
1628
+ }
1629
+ const text = stringifyStructuredAssistantMessage(info.structured);
1630
+ if (!text) {
1631
+ return;
1632
+ }
1633
+ state.emittedStructuredMessageIds.add(info.id);
1634
+ events.push({
1635
+ type: "timeline",
1636
+ provider: "opencode",
1637
+ item: { type: "assistant_message", text, messageId: info.id },
1638
+ });
1639
+ }
1640
+ function appendOpenCodeUserMessageUpdated(info, state, events) {
1641
+ const text = state.pendingUserMessageText;
1642
+ if (!text || text.trim().length === 0 || state.emittedUserMessageIds?.has(info.id)) {
1643
+ return;
1644
+ }
1645
+ state.emittedUserMessageIds?.add(info.id);
1646
+ events.push({
1647
+ type: "timeline",
1648
+ provider: "opencode",
1649
+ item: { type: "user_message", text, messageId: info.id },
1650
+ });
1651
+ }
1652
+ function appendOpenCodeMessagePartUpdated(event, state, events) {
1653
+ const part = event.properties.part;
1654
+ if (part.type === "tool" && isOpenCodeTodoWriteToolPart(part)) {
1655
+ return;
1656
+ }
1657
+ if (part.sessionID !== state.sessionId) {
1658
+ return;
1659
+ }
1660
+ if (matchesHydratedFingerprint(state.hydratedPartFingerprints, part.id, part)) {
1661
+ return;
1662
+ }
1663
+ const messageRole = state.messageRoles.get(part.messageID);
1664
+ state.partTypes.set(part.id, part.type);
1665
+ if (state.compactionSummaryMessageIds.has(part.messageID)) {
1666
+ return;
1667
+ }
1668
+ if (shouldSuppressOpenCodeAssistantPart(part, messageRole, state)) {
1669
+ state.compactionSummaryMessageIds.add(part.messageID);
1670
+ return;
1671
+ }
1672
+ if (part.type === "text") {
1673
+ appendOpenCodeTextPart(part, messageRole, state, events);
1674
+ return;
1675
+ }
1676
+ if (part.type === "reasoning") {
1677
+ appendOpenCodeReasoningPart(part, state, events);
1678
+ return;
1679
+ }
1680
+ if (part.type === "tool") {
1681
+ const parsedToolPart = OpencodeToolPartToTimelineItemSchema.safeParse(part);
1682
+ if (parsedToolPart.success && parsedToolPart.data) {
1683
+ appendOpenCodeToolCallTimelineItem(parsedToolPart.data, state, events);
1684
+ }
1685
+ return;
1686
+ }
1687
+ if (part.type === "compaction") {
1688
+ if (state.emittedCompactionPartIds.has(part.id)) {
1689
+ return;
1690
+ }
1691
+ state.emittedCompactionPartIds.add(part.id);
1692
+ events.push({
1693
+ type: "timeline",
1694
+ provider: "opencode",
1695
+ item: createCompactionTimelineItem("loading", part.auto ? "auto" : "manual"),
1696
+ });
1697
+ return;
1698
+ }
1699
+ if (part.type === "step-finish") {
1700
+ const stepCost = readPositiveFiniteNumber(part.cost);
1701
+ if (stepCost !== undefined) {
1702
+ state.sessionTotalCostUsd = (state.sessionTotalCostUsd ?? 0) + stepCost;
1703
+ }
1704
+ mergeOpenCodeStepFinishUsage(state.accumulatedUsage, part, {
1705
+ totalCostUsd: state.sessionTotalCostUsd,
1706
+ });
1707
+ if (hasNormalizedOpenCodeUsage(state.accumulatedUsage)) {
1708
+ events.push({
1709
+ type: "usage_updated",
1710
+ provider: "opencode",
1711
+ usage: { ...state.accumulatedUsage },
1712
+ });
1713
+ }
1714
+ }
1715
+ }
1716
+ function shouldSuppressOpenCodeAssistantPart(part, messageRole, state) {
1717
+ return (state.suppressAssistantMessagesUntilIdle?.active === true &&
1718
+ part.type === "text" &&
1719
+ messageRole !== "user");
1720
+ }
1721
+ function appendOpenCodeTextPart(part, messageRole, state, events) {
1722
+ if (messageRole === "user") {
1723
+ if (!part.time?.end || !part.text || state.emittedUserMessageIds?.has(part.messageID)) {
1724
+ return;
1725
+ }
1726
+ state.emittedUserMessageIds?.add(part.messageID);
1727
+ events.push({
1728
+ type: "timeline",
1729
+ provider: "opencode",
1730
+ item: { type: "user_message", text: part.text, messageId: part.messageID },
1731
+ });
1732
+ return;
1733
+ }
1734
+ if (!part.time?.end) {
1735
+ return;
1736
+ }
1737
+ const partKey = resolvePartDedupeKey(part, "text");
1738
+ if (partKey && state.streamedPartKeys.delete(partKey)) {
1739
+ return;
1740
+ }
1741
+ if (part.text) {
1742
+ events.push({
1743
+ type: "timeline",
1744
+ provider: "opencode",
1745
+ item: { type: "assistant_message", text: part.text, messageId: part.messageID },
1746
+ });
1747
+ }
1748
+ }
1749
+ function appendOpenCodeReasoningPart(part, state, events) {
1750
+ if (!part.time.end) {
1751
+ return;
1752
+ }
1753
+ const partKey = resolvePartDedupeKey(part, "reasoning");
1754
+ if (partKey && state.streamedPartKeys.delete(partKey)) {
1755
+ return;
1756
+ }
1757
+ if (part.text) {
1758
+ events.push({
1759
+ type: "timeline",
1760
+ provider: "opencode",
1761
+ item: { type: "reasoning", text: part.text },
1762
+ });
1763
+ }
1764
+ }
1765
+ function appendOpenCodeMessagePartDelta(event, state, events) {
1766
+ const { sessionID, messageID, partID, field, delta } = event.properties;
1767
+ if (sessionID !== state.sessionId) {
1768
+ return;
1769
+ }
1770
+ if (!delta || !field) {
1771
+ return;
1772
+ }
1773
+ const messageRole = messageID ? state.messageRoles.get(messageID) : undefined;
1774
+ const knownPartType = partID ? state.partTypes.get(partID) : undefined;
1775
+ const isReasoning = knownPartType === "reasoning" || field === "reasoning";
1776
+ if (messageID && state.compactionSummaryMessageIds.has(messageID)) {
1777
+ return;
1778
+ }
1779
+ if (isReasoning) {
1780
+ if (partID) {
1781
+ state.streamedPartKeys.add(`reasoning:${partID}`);
1782
+ }
1783
+ events.push({
1784
+ type: "timeline",
1785
+ provider: "opencode",
1786
+ item: { type: "reasoning", text: delta },
1787
+ });
1788
+ return;
1789
+ }
1790
+ if (field !== "text") {
1791
+ return;
1792
+ }
1793
+ if (messageRole === "user") {
1794
+ return;
1795
+ }
1796
+ const assistantMessageId = messageID || partID;
1797
+ if (!assistantMessageId) {
1798
+ return;
1799
+ }
1800
+ if (state.suppressAssistantMessagesUntilIdle?.active === true) {
1801
+ state.compactionSummaryMessageIds.add(assistantMessageId);
1802
+ return;
1803
+ }
1804
+ if (partID) {
1805
+ state.streamedPartKeys.add(`text:${partID}`);
1806
+ }
1807
+ events.push({
1808
+ type: "timeline",
1809
+ provider: "opencode",
1810
+ item: {
1811
+ type: "assistant_message",
1812
+ text: delta,
1813
+ messageId: assistantMessageId,
1814
+ },
1815
+ });
1816
+ }
1817
+ function appendOpenCodePermissionAsked(event, state, events) {
1818
+ if (!isOpenCodeSessionTrackedByParent(event.properties.sessionID, state)) {
1819
+ return;
1820
+ }
1821
+ const metadata = readOpenCodeRecord(event.properties.metadata);
1822
+ const tool = readOpenCodeRecord(event.properties.tool);
1823
+ const patterns = Array.isArray(event.properties.patterns)
1824
+ ? event.properties.patterns.filter((value) => typeof value === "string")
1825
+ : [];
1826
+ const command = readPermissionField(metadata, PERMISSION_COMMAND_KEYS);
1827
+ const cwd = readPermissionField(metadata, PERMISSION_CWD_KEYS);
1828
+ const reason = readPermissionField(metadata, PERMISSION_REASON_KEYS);
1829
+ const input = buildOpenCodePermissionInput({ patterns, metadata, tool, command });
1830
+ const detail = buildOpenCodePermissionDetail({
1831
+ permission: event.properties.permission,
1832
+ input,
1833
+ command,
1834
+ cwd,
1835
+ });
1836
+ const description = buildOpenCodePermissionDescription({ reason, patterns });
1837
+ events.push({
1838
+ type: "permission_requested",
1839
+ provider: "opencode",
1840
+ request: {
1841
+ id: event.properties.id,
1842
+ provider: "opencode",
1843
+ name: event.properties.permission,
1844
+ kind: "tool",
1845
+ title: toHumanReadablePermissionTitle(event.properties.permission),
1846
+ ...(description ? { description } : {}),
1847
+ input,
1848
+ detail,
1849
+ actions: buildOpenCodePermissionActions(),
1850
+ },
1851
+ });
1852
+ }
1853
+ function appendOpenCodeQuestionAsked(event, state, events) {
1854
+ if (event.properties.sessionID !== state.sessionId) {
1855
+ return;
1856
+ }
1857
+ const questions = event.properties.questions.flatMap((q) => {
1858
+ if (!q.question || !q.header) {
1859
+ return [];
1860
+ }
1861
+ const options = q.options?.map((o) => ({
1862
+ label: o.label,
1863
+ ...(o.description ? { description: o.description } : {}),
1864
+ })) ?? [];
1865
+ return [
1866
+ {
1867
+ question: q.question,
1868
+ header: q.header,
1869
+ options,
1870
+ ...(q.multiple === true ? { multiSelect: true } : {}),
1871
+ allowOther: true,
1872
+ },
1873
+ ];
1874
+ });
1875
+ if (questions.length === 0) {
1876
+ return;
1877
+ }
1878
+ events.push({
1879
+ type: "permission_requested",
1880
+ provider: "opencode",
1881
+ request: {
1882
+ id: event.properties.id,
1883
+ provider: "opencode",
1884
+ name: "question",
1885
+ kind: "question",
1886
+ title: "Question",
1887
+ input: { questions },
1888
+ metadata: {
1889
+ source: "opencode_question",
1890
+ ...event.properties.tool,
1891
+ },
1892
+ },
1893
+ });
1894
+ }
1895
+ function appendOpenCodeSessionError(event, state, events) {
1896
+ if (event.properties.sessionID !== state.sessionId) {
1897
+ return;
1898
+ }
1899
+ resetOpenCodeTurnTrackingState(state);
1900
+ const error = event.properties.error;
1901
+ if (typeof error === "object" &&
1902
+ error !== null &&
1903
+ "name" in error &&
1904
+ error.name === "MessageAbortedError") {
1905
+ events.push({
1906
+ type: "turn_canceled",
1907
+ provider: "opencode",
1908
+ reason: "interrupted",
1909
+ });
1910
+ }
1911
+ else {
1912
+ events.push({
1913
+ type: "turn_failed",
1914
+ provider: "opencode",
1915
+ error: toDiagnosticErrorMessage(error),
1916
+ });
1917
+ }
1918
+ }
1919
+ function appendOpenCodeSessionStatus(event, state, events) {
1920
+ if (event.properties.sessionID !== state.sessionId) {
1921
+ return;
1922
+ }
1923
+ const { status } = event.properties;
1924
+ if (status.type === "idle") {
1925
+ resetOpenCodeTurnTrackingState(state);
1926
+ events.push({ type: "turn_completed", provider: "opencode", usage: undefined });
1927
+ return;
1928
+ }
1929
+ if (status.type === "retry") {
1930
+ // Mirror what opencode's TUI shows: retry attempts are visible activity, not
1931
+ // terminal. opencode itself never gives up — it backs off and tries again
1932
+ // forever. If we silently swallow these the user sees a spinner with no
1933
+ // explanation. Forwarding as a timeline error item is a no-op for old
1934
+ // clients (the schema already supports it).
1935
+ const message = typeof status.message === "string" ? status.message.trim() : "";
1936
+ const text = message
1937
+ ? `Provider retry (attempt ${status.attempt}): ${message}`
1938
+ : `Provider retry (attempt ${status.attempt})`;
1939
+ events.push({
1940
+ type: "timeline",
1941
+ provider: "opencode",
1942
+ item: { type: "error", message: text },
1943
+ });
1944
+ return;
1945
+ }
1946
+ // "busy" is transient — no terminal event, no surfaced activity.
1947
+ }
1948
+ function createDeferred() {
1949
+ let resolve;
1950
+ let reject;
1951
+ const promise = new Promise((res, rej) => {
1952
+ resolve = res;
1953
+ reject = rej;
1954
+ });
1955
+ return { promise, resolve, reject };
1956
+ }
1957
+ function unwrapOpenCodeGlobalEvent(event) {
1958
+ const record = readOpenCodeRecord(event);
1959
+ if (!record) {
1960
+ return null;
1961
+ }
1962
+ const payload = readOpenCodeRecord(record.payload);
1963
+ if (typeof payload?.type === "string") {
1964
+ return payload;
1965
+ }
1966
+ if (typeof record.type === "string") {
1967
+ return record;
1968
+ }
1969
+ return null;
1970
+ }
1971
+ function getOpenCodeEventSessionId(event) {
1972
+ const properties = readOpenCodeRecord(event.properties);
1973
+ const info = readOpenCodeRecord(properties?.info);
1974
+ const part = readOpenCodeRecord(properties?.part);
1975
+ return (readNonEmptyString(properties?.sessionID) ??
1976
+ readNonEmptyString(properties?.sessionId) ??
1977
+ readNonEmptyString(info?.sessionID) ??
1978
+ readNonEmptyString(info?.sessionId) ??
1979
+ readNonEmptyString(part?.sessionID) ??
1980
+ readNonEmptyString(part?.sessionId) ??
1981
+ (event.type === "session.created" || event.type === "session.updated"
1982
+ ? readNonEmptyString(info?.id)
1983
+ : null));
1984
+ }
1985
+ function isOpenCodeUserMessageEvent(event, sessionId) {
1986
+ return (event.type === "message.updated" &&
1987
+ event.properties.info.sessionID === sessionId &&
1988
+ event.properties.info.role === "user");
1989
+ }
1990
+ function isOpenCodeTerminalEvent(event, sessionId) {
1991
+ if (event.type === "session.idle" || event.type === "session.error") {
1992
+ return event.properties.sessionID === sessionId;
1993
+ }
1994
+ return (event.type === "session.status" &&
1995
+ event.properties.sessionID === sessionId &&
1996
+ event.properties.status.type === "idle");
1997
+ }
1998
+ function isOpenCodeProviderInternalEvent(event) {
1999
+ return event.type === "provider_subagent";
2000
+ }
2001
+ function readOpenCodeChildSessionInfo(value) {
2002
+ const record = readOpenCodeRecord(value);
2003
+ if (!record) {
2004
+ return null;
2005
+ }
2006
+ const id = readNonEmptyString(record.id);
2007
+ const parentSessionId = readNonEmptyString(record.parentID) ?? readNonEmptyString(record.parentId);
2008
+ if (!id || !parentSessionId) {
2009
+ return null;
2010
+ }
2011
+ const title = readNonEmptyString(record.title);
2012
+ const directory = readNonEmptyString(record.directory);
2013
+ const revert = readOpenCodeRecord(record.revert);
2014
+ return {
2015
+ id,
2016
+ parentSessionId,
2017
+ ...(title ? { title } : {}),
2018
+ ...(directory ? { directory } : {}),
2019
+ ...(revert ? { revert } : {}),
2020
+ };
2021
+ }
2022
+ function readOpenCodeChildSessionInfosFromResponse(response) {
2023
+ const record = readOpenCodeRecord(response);
2024
+ if (!record || record.error) {
2025
+ return null;
2026
+ }
2027
+ const data = record.data;
2028
+ if (!Array.isArray(data)) {
2029
+ return null;
2030
+ }
2031
+ return data.flatMap((item) => {
2032
+ const child = readOpenCodeChildSessionInfo(item);
2033
+ return child ? [child] : [];
2034
+ });
2035
+ }
2036
+ async function listOpenCodeChildSessions(client, sessionId, directory) {
2037
+ try {
2038
+ const pathResponse = await Reflect.apply(client.session.children, client.session, [
2039
+ { path: { id: sessionId } },
2040
+ ]);
2041
+ const pathChildren = readOpenCodeChildSessionInfosFromResponse(pathResponse);
2042
+ if (pathChildren) {
2043
+ return pathChildren;
2044
+ }
2045
+ }
2046
+ catch (error) {
2047
+ if (!(error instanceof Error)) {
2048
+ throw error;
2049
+ }
2050
+ }
2051
+ const sessionIdResponse = await client.session.children({
2052
+ sessionID: sessionId,
2053
+ directory,
2054
+ });
2055
+ return readOpenCodeChildSessionInfosFromResponse(sessionIdResponse) ?? [];
2056
+ }
2057
+ class OpenCodeAgentSession {
2058
+ constructor(config, client, sessionId, logger, modelContextWindowsByModelKey = new Map(), releaseServer, persistSession = true, agentId, serverUrl, externallyDriven = false) {
2059
+ this.agentId = agentId;
2060
+ this.serverUrl = serverUrl;
2061
+ this.externallyDriven = externallyDriven;
2062
+ this.provider = "opencode";
2063
+ this.capabilities = OPENCODE_CAPABILITIES;
2064
+ this.currentMode = null;
2065
+ this.autoAcceptEnabled = false;
2066
+ this.pendingPermissions = new Map();
2067
+ this.abortController = null;
2068
+ this.pendingAbortPromise = null;
2069
+ this.accumulatedUsage = {};
2070
+ this.mcpConfigured = false;
2071
+ this.mcpSetupPromise = null;
2072
+ /** Tracks the role of each message by ID to distinguish user from assistant messages */
2073
+ this.messageRoles = new Map();
2074
+ this.pendingUserMessageText = null;
2075
+ this.emittedUserMessageIds = new Set();
2076
+ /** Tracks streamed textual part IDs to suppress final full-text echoes from OpenCode. */
2077
+ this.streamedPartKeys = new Set();
2078
+ /** Tracks assistant messages already emitted from structured payloads. */
2079
+ this.emittedStructuredMessageIds = new Set();
2080
+ this.compactionSummaryMessageIds = new Set();
2081
+ this.emittedCompactionPartIds = new Set();
2082
+ this.suppressAssistantMessagesUntilIdle = { active: false };
2083
+ /** Tracks the type of each part by ID, learned from message.part.updated events. */
2084
+ this.partTypes = new Map();
2085
+ this.availableModesCache = null;
2086
+ this.subscribers = new Set();
2087
+ this.nextTurnOrdinal = 0;
2088
+ this.activeForegroundTurnId = null;
2089
+ this.activeForegroundTurnSource = null;
2090
+ this.runningToolCalls = new Map();
2091
+ this.subAgentsByCallId = new Map();
2092
+ this.subAgentCallIdByChildSessionId = new Map();
2093
+ this.knownChildSessionIds = new Set();
2094
+ this.childTranslationStates = new Map();
2095
+ this.childSessionCwds = new Map();
2096
+ this.pendingPermissionDirectories = new Map();
2097
+ this.childHydrationPromise = null;
2098
+ this.childHydrationCompleted = false;
2099
+ this.unrelatedSessionIds = new Set();
2100
+ this.eventStreamAbortController = null;
2101
+ this.eventStreamReady = null;
2102
+ this.eventStreamTask = null;
2103
+ this.suppressTerminalUntilNextUserMessage = false;
2104
+ this.closed = false;
2105
+ this.deletedFromProvider = false;
2106
+ this.config = config;
2107
+ this.client = client;
2108
+ this.sessionId = sessionId;
2109
+ this.logger = logger.child({ agentId: this.agentId });
2110
+ this.modelContextWindowsByModelKey = modelContextWindowsByModelKey;
2111
+ this.currentMode = normalizeOpenCodeModeId(config.modeId);
2112
+ this.autoAcceptEnabled = isOpenCodeAutoAcceptEnabled(config);
2113
+ this.releaseServer = releaseServer ?? null;
2114
+ this.persistSession = persistSession;
2115
+ this.selectedModelContextWindowMaxTokens = this.resolveConfiguredModelContextWindowMaxTokens(config.model);
2116
+ this.startEventStream();
2117
+ }
2118
+ get id() {
2119
+ return this.sessionId;
2120
+ }
2121
+ get features() {
2122
+ return [buildOpenCodeAutoAcceptFeature(this.config)];
2123
+ }
2124
+ async getRuntimeInfo() {
2125
+ return {
2126
+ provider: "opencode",
2127
+ sessionId: this.sessionId,
2128
+ model: this.config.model ?? null,
2129
+ modeId: this.currentMode,
2130
+ };
2131
+ }
2132
+ async setModel(modelId) {
2133
+ const normalizedModelId = typeof modelId === "string" && modelId.trim().length > 0 ? modelId : null;
2134
+ this.config.model = normalizedModelId ?? undefined;
2135
+ this.selectedModelContextWindowMaxTokens = this.resolveConfiguredModelContextWindowMaxTokens(this.config.model);
2136
+ }
2137
+ async setThinkingOption(thinkingOptionId) {
2138
+ const normalizedThinkingOptionId = typeof thinkingOptionId === "string" && thinkingOptionId.trim().length > 0
2139
+ ? thinkingOptionId
2140
+ : null;
2141
+ this.config.thinkingOptionId = normalizedThinkingOptionId ?? undefined;
2142
+ }
2143
+ async run(prompt, options) {
2144
+ return runProviderTurn({
2145
+ prompt,
2146
+ runOptions: options,
2147
+ startTurn: (p, o) => this.startTurn(p, o),
2148
+ subscribe: (callback) => this.subscribe(callback),
2149
+ getSessionId: () => this.sessionId,
2150
+ });
2151
+ }
2152
+ async interrupt() {
2153
+ let turnId = this.activeForegroundTurnId;
2154
+ const turnAbortController = this.abortController;
2155
+ turnAbortController?.abort();
2156
+ // COMPAT(opencodeSlowAbort): OpenCode 1.14.42+ blocks session.abort until
2157
+ // the running tool actually stops, which can be tens of seconds for
2158
+ // long-running tools. Cap the wait so the user-visible cancel lands
2159
+ // quickly while still giving OpenCode a chance to confirm the abort
2160
+ // cleanly. Drop the timeout once upstream returns abort acknowledgement
2161
+ // before tool teardown.
2162
+ const abortPromise = this.beginSessionAbort(turnId, "interrupt");
2163
+ await withTimeout(abortPromise, 2000, "OpenCode session.abort").catch((error) => {
2164
+ this.logger.warn({ err: error, sessionId: this.sessionId, turnId }, "OpenCode session.abort exceeded the cancel cap; proceeding with local cancel");
2165
+ });
2166
+ if (turnId) {
2167
+ this.suppressTerminalUntilNextUserMessage = true;
2168
+ this.finishForegroundTurn({ type: "turn_canceled", provider: "opencode", reason: "interrupted" }, turnId);
2169
+ }
2170
+ }
2171
+ async revertBoth(input) {
2172
+ await revertOpenCodeConversationAndFiles({
2173
+ client: this.client,
2174
+ sessionId: this.sessionId,
2175
+ cwd: this.config.cwd,
2176
+ messageId: input.messageId,
2177
+ });
2178
+ }
2179
+ beginSessionAbort(turnId, reason) {
2180
+ const abortPromise = this.client.session
2181
+ .abort({
2182
+ sessionID: this.sessionId,
2183
+ directory: this.config.cwd,
2184
+ })
2185
+ .then(() => undefined)
2186
+ .catch((error) => {
2187
+ this.logger.warn({ err: error, sessionId: this.sessionId, turnId, reason }, "OpenCode session.abort rejected");
2188
+ });
2189
+ const trackedAbortPromise = abortPromise.finally(() => {
2190
+ if (this.pendingAbortPromise === trackedAbortPromise) {
2191
+ this.pendingAbortPromise = null;
2192
+ }
2193
+ });
2194
+ this.pendingAbortPromise = trackedAbortPromise;
2195
+ return trackedAbortPromise;
2196
+ }
2197
+ async awaitPendingAbortBeforeStartingTurn() {
2198
+ const pendingAbortPromise = this.pendingAbortPromise;
2199
+ if (!pendingAbortPromise) {
2200
+ return;
2201
+ }
2202
+ await withTimeout(pendingAbortPromise, OPENCODE_PENDING_ABORT_START_TIMEOUT_MS, "OpenCode pending session.abort").catch((error) => {
2203
+ this.logger.warn({ err: error, sessionId: this.sessionId }, "OpenCode session.abort was still pending before starting the next turn");
2204
+ });
2205
+ }
2206
+ async startTurn(prompt, options) {
2207
+ if (this.activeForegroundTurnId) {
2208
+ if (this.activeForegroundTurnSource === "external") {
2209
+ // A direct BySpace prompt owns the foreground; close the adopted child run first.
2210
+ this.finishForegroundTurn({ type: "turn_completed", provider: "opencode", usage: undefined }, this.activeForegroundTurnId);
2211
+ }
2212
+ else {
2213
+ throw new Error("A foreground turn is already active");
2214
+ }
2215
+ }
2216
+ await this.awaitPendingAbortBeforeStartingTurn();
2217
+ this.runningToolCalls.clear();
2218
+ this.subAgentsByCallId.clear();
2219
+ this.subAgentCallIdByChildSessionId.clear();
2220
+ const turnAbortController = new AbortController();
2221
+ this.abortController = turnAbortController;
2222
+ await this.ensureMcpServersConfigured();
2223
+ const contextWindowMaxTokens = this.resolveSelectedModelContextWindowMaxTokens();
2224
+ this.accumulatedUsage = contextWindowMaxTokens !== undefined ? { contextWindowMaxTokens } : {};
2225
+ const parts = buildOpenCodePromptParts(prompt);
2226
+ this.pendingUserMessageText = buildOpenCodeUserTimelineText(prompt);
2227
+ this.suppressAssistantMessagesUntilIdle.active = false;
2228
+ const model = this.parseModel(this.config.model);
2229
+ const thinkingOptionId = this.config.thinkingOptionId;
2230
+ const effectiveVariant = thinkingOptionId ?? undefined;
2231
+ const effectiveMode = resolveOpenCodeRuntimeAgentId(this.currentMode);
2232
+ try {
2233
+ await this.ensureEventStreamReady();
2234
+ }
2235
+ catch (error) {
2236
+ if (this.abortController === turnAbortController) {
2237
+ this.abortController = null;
2238
+ }
2239
+ throw error;
2240
+ }
2241
+ const turnId = this.createTurnId();
2242
+ this.activeForegroundTurnId = turnId;
2243
+ this.activeForegroundTurnSource = "byspace";
2244
+ this.notifySubscribers({ type: "turn_started", provider: "opencode" }, turnId);
2245
+ const slashCommand = await this.resolveSlashCommandInvocation(prompt);
2246
+ if (slashCommand) {
2247
+ if (slashCommand.commandName === "compact" || slashCommand.commandName === "summarize") {
2248
+ this.suppressAssistantMessagesUntilIdle.active = true;
2249
+ void this.client.session
2250
+ .summarize({
2251
+ sessionID: this.sessionId,
2252
+ directory: this.config.cwd,
2253
+ ...(model ? { providerID: model.providerID, modelID: model.modelID } : {}),
2254
+ })
2255
+ .then((response) => {
2256
+ if (response.error) {
2257
+ this.suppressAssistantMessagesUntilIdle.active = false;
2258
+ this.finishForegroundTurn({
2259
+ type: "turn_failed",
2260
+ provider: "opencode",
2261
+ error: toDiagnosticErrorMessage(response.error),
2262
+ }, turnId);
2263
+ }
2264
+ return;
2265
+ })
2266
+ .catch((error) => {
2267
+ this.suppressAssistantMessagesUntilIdle.active = false;
2268
+ this.finishForegroundTurn({
2269
+ type: "turn_failed",
2270
+ provider: "opencode",
2271
+ error: toDiagnosticErrorMessage(error),
2272
+ }, turnId);
2273
+ });
2274
+ return { turnId };
2275
+ }
2276
+ // command() is only dispatch acknowledgement. OpenCode session events are
2277
+ // the source of truth for when the command turn becomes idle or fails.
2278
+ void this.client.session
2279
+ .command({
2280
+ sessionID: this.sessionId,
2281
+ directory: this.config.cwd,
2282
+ command: slashCommand.commandName,
2283
+ arguments: slashCommand.args ?? "",
2284
+ ...(this.config.model ? { model: this.config.model } : {}),
2285
+ ...(effectiveMode ? { agent: effectiveMode } : {}),
2286
+ ...(effectiveVariant ? { variant: effectiveVariant } : {}),
2287
+ })
2288
+ .then((response) => {
2289
+ if (response.error) {
2290
+ if (isOpenCodeHeadersTimeoutFailure(response.error)) {
2291
+ this.logger.warn({
2292
+ err: response.error,
2293
+ commandName: slashCommand.commandName,
2294
+ turnId,
2295
+ }, "OpenCode slash command hit a header timeout; waiting for SSE terminal event");
2296
+ return;
2297
+ }
2298
+ const errorMsg = toDiagnosticErrorMessage(response.error);
2299
+ this.finishForegroundTurn({ type: "turn_failed", provider: "opencode", error: errorMsg }, turnId);
2300
+ }
2301
+ return;
2302
+ })
2303
+ .catch((err) => {
2304
+ if (isOpenCodeHeadersTimeoutFailure(err)) {
2305
+ this.logger.warn({
2306
+ err,
2307
+ commandName: slashCommand.commandName,
2308
+ turnId,
2309
+ }, "OpenCode slash command hit a header timeout; waiting for SSE terminal event");
2310
+ return;
2311
+ }
2312
+ this.finishForegroundTurn({ type: "turn_failed", provider: "opencode", error: toDiagnosticErrorMessage(err) }, turnId);
2313
+ });
2314
+ }
2315
+ else {
2316
+ // Wrap in an async IIFE so a synchronous throw from promptAsync (e.g.
2317
+ // SDK input validation) is caught alongside async rejections. A plain
2318
+ // `.then().catch()` chain would let a sync throw escape unhandled.
2319
+ void (async () => {
2320
+ this.traceOpenCode("provider.opencode.prompt_async.start", {
2321
+ turnId,
2322
+ sessionId: this.sessionId,
2323
+ model,
2324
+ effectiveMode,
2325
+ effectiveVariant,
2326
+ partTypes: parts.map((p) => p.type),
2327
+ });
2328
+ try {
2329
+ const systemPrompt = composeSystemPromptParts(this.config.systemPrompt, this.config.daemonAppendSystemPrompt);
2330
+ const promptResponse = await this.client.session.promptAsync({
2331
+ sessionID: this.sessionId,
2332
+ directory: this.config.cwd,
2333
+ parts,
2334
+ ...(options?.outputSchema
2335
+ ? {
2336
+ format: {
2337
+ type: "json_schema",
2338
+ schema: options.outputSchema,
2339
+ },
2340
+ }
2341
+ : {}),
2342
+ ...(systemPrompt ? { system: systemPrompt } : {}),
2343
+ ...(model ? { model } : {}),
2344
+ ...(effectiveMode ? { agent: effectiveMode } : {}),
2345
+ ...(effectiveVariant ? { variant: effectiveVariant } : {}),
2346
+ });
2347
+ this.traceOpenCode("provider.opencode.prompt_async.response", {
2348
+ turnId,
2349
+ hasError: promptResponse.error !== undefined,
2350
+ error: promptResponse.error,
2351
+ data: promptResponse.data,
2352
+ });
2353
+ if (promptResponse.error) {
2354
+ this.finishForegroundTurn({
2355
+ type: "turn_failed",
2356
+ provider: "opencode",
2357
+ error: toDiagnosticErrorMessage(promptResponse.error),
2358
+ }, turnId);
2359
+ }
2360
+ }
2361
+ catch (error) {
2362
+ this.traceOpenCode("provider.opencode.prompt_async.throw", {
2363
+ turnId,
2364
+ error: error instanceof Error
2365
+ ? { name: error.name, message: error.message, stack: error.stack }
2366
+ : String(error),
2367
+ });
2368
+ this.finishForegroundTurn({
2369
+ type: "turn_failed",
2370
+ provider: "opencode",
2371
+ error: toDiagnosticErrorMessage(error),
2372
+ }, turnId);
2373
+ }
2374
+ })();
2375
+ }
2376
+ return { turnId };
2377
+ }
2378
+ subscribe(callback) {
2379
+ this.subscribers.add(callback);
2380
+ this.startChildSessionHydration();
2381
+ return () => {
2382
+ this.subscribers.delete(callback);
2383
+ };
2384
+ }
2385
+ startChildSessionHydration() {
2386
+ if (this.childHydrationPromise) {
2387
+ return;
2388
+ }
2389
+ const hydration = this.hydrateChildSessions()
2390
+ .then(() => {
2391
+ this.childHydrationCompleted = true;
2392
+ return undefined;
2393
+ })
2394
+ .finally(() => {
2395
+ if (this.childHydrationPromise === hydration) {
2396
+ this.childHydrationPromise = null;
2397
+ }
2398
+ });
2399
+ this.childHydrationPromise = hydration;
2400
+ void hydration.catch((error) => {
2401
+ this.logger.warn({ err: error, sessionId: this.sessionId }, "OpenCode child hydration failed");
2402
+ });
2403
+ }
2404
+ async hydrateChildSessions() {
2405
+ const queue = [this.sessionId];
2406
+ const visited = new Set();
2407
+ while (queue.length > 0 && visited.size < OPENCODE_CHILD_SESSION_HYDRATION_LIMIT) {
2408
+ const parentSessionId = queue.shift();
2409
+ if (!parentSessionId || visited.has(parentSessionId)) {
2410
+ continue;
2411
+ }
2412
+ visited.add(parentSessionId);
2413
+ const children = await listOpenCodeChildSessions(this.client, parentSessionId, this.config.cwd);
2414
+ if (this.closed)
2415
+ return;
2416
+ for (const child of children) {
2417
+ const detectionEvents = [];
2418
+ appendOpenCodeChildSessionDetected(child, this.createTranslationState(), detectionEvents, "completed");
2419
+ for (const event of detectionEvents) {
2420
+ this.recordProviderInternalEvent(event);
2421
+ this.notifySubscribers(event, null);
2422
+ }
2423
+ try {
2424
+ await this.hydrateChildSessionTimeline(child);
2425
+ }
2426
+ catch (error) {
2427
+ this.logger.warn({ err: error, sessionId: child.id }, "OpenCode child timeline hydration failed");
2428
+ }
2429
+ if (visited.size + queue.length < OPENCODE_CHILD_SESSION_HYDRATION_LIMIT) {
2430
+ queue.push(child.id);
2431
+ }
2432
+ }
2433
+ }
2434
+ }
2435
+ async hydrateChildSessionTimeline(child) {
2436
+ const messages = await readOpenCodeSessionMessagesFromSdk(this.client, {
2437
+ id: child.id,
2438
+ directory: child.directory ?? this.config.cwd,
2439
+ ...(child.revert ? { revert: child.revert } : {}),
2440
+ });
2441
+ const translationState = this.getChildTranslationState(child.id);
2442
+ let latestReplayedMessage = null;
2443
+ for (const message of messages) {
2444
+ if (message.info.role === "assistant" && message.info.time?.completed === undefined) {
2445
+ continue;
2446
+ }
2447
+ latestReplayedMessage = message;
2448
+ for (const timelineEvent of buildOpenCodeReplayTimelineEvents(message)) {
2449
+ const event = {
2450
+ type: "provider_subagent",
2451
+ provider: "opencode",
2452
+ event: {
2453
+ type: "timeline",
2454
+ id: child.id,
2455
+ item: timelineEvent.item,
2456
+ ...(timelineEvent.timestamp ? { timestamp: timelineEvent.timestamp } : {}),
2457
+ },
2458
+ };
2459
+ this.recordProviderInternalEvent(event);
2460
+ this.notifySubscribers(event, null);
2461
+ }
2462
+ }
2463
+ if (latestReplayedMessage) {
2464
+ translationState.hydratedMessageFingerprints?.set(latestReplayedMessage.info.id, JSON.stringify(latestReplayedMessage.info));
2465
+ for (const part of latestReplayedMessage.parts) {
2466
+ translationState.hydratedPartFingerprints?.set(part.id, JSON.stringify(part));
2467
+ }
2468
+ }
2469
+ }
2470
+ recordProviderInternalEvent(event) {
2471
+ if (event.type !== "provider_subagent") {
2472
+ return;
2473
+ }
2474
+ if (event.event.type === "upsert") {
2475
+ this.unrelatedSessionIds.delete(event.event.id);
2476
+ if (event.event.cwd) {
2477
+ this.childSessionCwds.set(event.event.id, event.event.cwd);
2478
+ }
2479
+ if (this.serverUrl) {
2480
+ registerOpenCodeChildSessionServerUrl(event.event.id, this.serverUrl);
2481
+ }
2482
+ }
2483
+ else if (event.event.type === "remove") {
2484
+ unregisterOpenCodeChildSessionServerUrl(event.event.id);
2485
+ this.childTranslationStates.delete(event.event.id);
2486
+ this.childSessionCwds.delete(event.event.id);
2487
+ }
2488
+ }
2489
+ startEventStream() {
2490
+ void this.ensureEventStreamReady().catch((error) => {
2491
+ this.logger.warn({ err: error, sessionId: this.sessionId }, "OpenCode event stream failed");
2492
+ });
2493
+ }
2494
+ ensureEventStreamReady() {
2495
+ if (this.eventStreamReady) {
2496
+ return this.eventStreamReady.promise;
2497
+ }
2498
+ const eventStreamAbortController = new AbortController();
2499
+ const eventStreamReady = createDeferred();
2500
+ this.eventStreamAbortController = eventStreamAbortController;
2501
+ this.eventStreamReady = eventStreamReady;
2502
+ const eventStreamTask = this.consumeEventStream(eventStreamAbortController, eventStreamReady).finally(() => {
2503
+ if (this.eventStreamAbortController === eventStreamAbortController) {
2504
+ this.eventStreamAbortController = null;
2505
+ this.eventStreamReady = null;
2506
+ }
2507
+ if (this.eventStreamTask === eventStreamTask) {
2508
+ this.eventStreamTask = null;
2509
+ }
2510
+ });
2511
+ this.eventStreamTask = eventStreamTask;
2512
+ void eventStreamTask.catch((error) => {
2513
+ this.logger.warn({ err: error, sessionId: this.sessionId }, "OpenCode event stream task failed");
2514
+ });
2515
+ return eventStreamReady.promise;
2516
+ }
2517
+ async consumeEventStream(eventStreamAbortController, eventStreamReady) {
2518
+ this.traceOpenCode("provider.opencode.subscribe.start", {
2519
+ sessionId: this.sessionId,
2520
+ cwd: this.config.cwd,
2521
+ });
2522
+ let eventStreamReadyResolved = false;
2523
+ try {
2524
+ const result = await this.client.global.event({
2525
+ signal: eventStreamAbortController.signal,
2526
+ sseMaxRetryAttempts: 0,
2527
+ });
2528
+ eventStreamReadyResolved = true;
2529
+ this.traceOpenCode("provider.opencode.subscribe.ready", {
2530
+ sessionId: this.sessionId,
2531
+ });
2532
+ eventStreamReady.resolve();
2533
+ let eventCount = 0;
2534
+ for await (const rawEvent of result.stream) {
2535
+ eventCount += 1;
2536
+ await this.consumeOpenCodeStreamEvent({ rawEvent, eventCount });
2537
+ }
2538
+ this.traceOpenCode("provider.opencode.stream.eof", {
2539
+ eventCount,
2540
+ aborted: eventStreamAbortController.signal.aborted,
2541
+ activeTurnId: this.activeForegroundTurnId,
2542
+ });
2543
+ if (!eventStreamAbortController.signal.aborted) {
2544
+ if (!eventStreamReadyResolved) {
2545
+ eventStreamReady.reject(new Error("OpenCode event stream ended before it became ready"));
2546
+ }
2547
+ const activeTurnId = this.activeForegroundTurnId;
2548
+ if (activeTurnId) {
2549
+ this.traceOpenCode("provider.opencode.turn.fail_eof", {
2550
+ turnId: activeTurnId,
2551
+ eventCount,
2552
+ });
2553
+ this.finishForegroundTurn({
2554
+ type: "turn_failed",
2555
+ provider: "opencode",
2556
+ error: "OpenCode event stream ended before the turn reached a terminal state",
2557
+ }, activeTurnId);
2558
+ }
2559
+ }
2560
+ }
2561
+ catch (error) {
2562
+ this.traceOpenCode("provider.opencode.subscribe.error", {
2563
+ turnId: this.activeForegroundTurnId ?? undefined,
2564
+ error: error instanceof Error ? { name: error.name, message: error.message } : String(error),
2565
+ });
2566
+ if (!eventStreamReadyResolved) {
2567
+ eventStreamReady.reject(error);
2568
+ }
2569
+ const activeTurnId = this.activeForegroundTurnId;
2570
+ if (!eventStreamAbortController.signal.aborted && activeTurnId) {
2571
+ this.finishForegroundTurn({
2572
+ type: "turn_failed",
2573
+ provider: "opencode",
2574
+ error: toDiagnosticErrorMessage(error),
2575
+ }, activeTurnId);
2576
+ }
2577
+ }
2578
+ }
2579
+ async consumeOpenCodeStreamEvent(params) {
2580
+ const { rawEvent, eventCount } = params;
2581
+ let turnId = this.activeForegroundTurnId;
2582
+ const event = unwrapOpenCodeGlobalEvent(rawEvent);
2583
+ this.traceOpenCode("provider.opencode.raw_event", {
2584
+ turnId: turnId ?? undefined,
2585
+ n: eventCount,
2586
+ type: event?.type,
2587
+ rawType: readOpenCodeRecord(rawEvent)?.type,
2588
+ directory: readOpenCodeRecord(rawEvent)?.directory,
2589
+ rawEvent,
2590
+ properties: event?.properties,
2591
+ });
2592
+ if (!event) {
2593
+ return;
2594
+ }
2595
+ const translated = await this.translateEvent(event);
2596
+ const foregroundEvents = [];
2597
+ for (const translatedEvent of translated) {
2598
+ if (isOpenCodeProviderInternalEvent(translatedEvent)) {
2599
+ this.notifySubscribers(translatedEvent, null);
2600
+ }
2601
+ else {
2602
+ foregroundEvents.push(translatedEvent);
2603
+ }
2604
+ }
2605
+ if (!turnId && this.shouldStartExternalDrivenTurn(event, foregroundEvents)) {
2606
+ turnId = this.startExternalDrivenTurn();
2607
+ }
2608
+ if (!turnId) {
2609
+ this.emitBackgroundPermissionRequests(foregroundEvents);
2610
+ this.traceOpenCode("provider.opencode.event.skip", {
2611
+ n: eventCount,
2612
+ reason: "no_active_turn",
2613
+ type: event.type,
2614
+ });
2615
+ return;
2616
+ }
2617
+ if (this.suppressTerminalUntilNextUserMessage) {
2618
+ if (isOpenCodeUserMessageEvent(event, this.sessionId)) {
2619
+ this.suppressTerminalUntilNextUserMessage = false;
2620
+ }
2621
+ else if (isOpenCodeTerminalEvent(event, this.sessionId)) {
2622
+ this.traceOpenCode("provider.opencode.event.skip", {
2623
+ n: eventCount,
2624
+ reason: "stale_interrupt_terminal",
2625
+ type: event.type,
2626
+ });
2627
+ return;
2628
+ }
2629
+ }
2630
+ this.traceOpenCode("provider.opencode.parsed_event", {
2631
+ turnId,
2632
+ n: eventCount,
2633
+ count: foregroundEvents.length,
2634
+ types: foregroundEvents.map((t) => t.type),
2635
+ events: foregroundEvents,
2636
+ });
2637
+ for (const e of foregroundEvents) {
2638
+ if (this.activeForegroundTurnId !== turnId) {
2639
+ this.traceOpenCode("provider.opencode.parsed_event.skip_active", { turnId, type: e.type });
2640
+ return;
2641
+ }
2642
+ if (e.type === "timeline" && e.item.type === "tool_call") {
2643
+ this.trackToolCall(e.item);
2644
+ }
2645
+ const terminalEvent = toTerminalTurnEvent(e);
2646
+ if (terminalEvent) {
2647
+ this.traceOpenCode("provider.opencode.event.terminal", {
2648
+ turnId,
2649
+ type: terminalEvent.type,
2650
+ });
2651
+ this.finishForegroundTurn(terminalEvent, turnId);
2652
+ return;
2653
+ }
2654
+ this.notifySubscribers(e, turnId);
2655
+ }
2656
+ }
2657
+ emitBackgroundPermissionRequests(events) {
2658
+ for (const event of events) {
2659
+ if (event.type === "permission_requested") {
2660
+ this.notifySubscribers(event, null);
2661
+ }
2662
+ }
2663
+ }
2664
+ shouldStartExternalDrivenTurn(event, foregroundEvents) {
2665
+ if (!this.externallyDriven) {
2666
+ return false;
2667
+ }
2668
+ if (this.activeForegroundTurnId) {
2669
+ return false;
2670
+ }
2671
+ if (foregroundEvents.some((foregroundEvent) => !toTerminalTurnEvent(foregroundEvent))) {
2672
+ return true;
2673
+ }
2674
+ return (event.type === "session.status" &&
2675
+ event.properties.sessionID === this.sessionId &&
2676
+ event.properties.status.type === "busy");
2677
+ }
2678
+ startExternalDrivenTurn() {
2679
+ const turnId = this.createTurnId();
2680
+ this.activeForegroundTurnId = turnId;
2681
+ this.activeForegroundTurnSource = "external";
2682
+ this.runningToolCalls.clear();
2683
+ this.subAgentsByCallId.clear();
2684
+ this.subAgentCallIdByChildSessionId.clear();
2685
+ this.pendingUserMessageText = null;
2686
+ this.abortController = null;
2687
+ this.notifySubscribers({ type: "turn_started", provider: "opencode" }, turnId);
2688
+ return turnId;
2689
+ }
2690
+ finishForegroundTurn(event, turnId) {
2691
+ this.traceOpenCode("provider.opencode.finish_foreground_turn", {
2692
+ turnId,
2693
+ activeTurnId: this.activeForegroundTurnId,
2694
+ type: event.type,
2695
+ error: event.type === "turn_failed" ? event.error : undefined,
2696
+ reason: event.type === "turn_canceled" ? event.reason : undefined,
2697
+ });
2698
+ if (this.activeForegroundTurnId !== turnId) {
2699
+ return;
2700
+ }
2701
+ if (event.type === "turn_canceled" || event.type === "turn_failed") {
2702
+ this.synthesizeInterruptedToolCalls(turnId);
2703
+ }
2704
+ else {
2705
+ this.runningToolCalls.clear();
2706
+ }
2707
+ this.pendingUserMessageText = null;
2708
+ this.activeForegroundTurnId = null;
2709
+ this.activeForegroundTurnSource = null;
2710
+ this.abortController = null;
2711
+ this.notifySubscribers(event, turnId);
2712
+ }
2713
+ trackToolCall(item) {
2714
+ if (item.status === "running") {
2715
+ this.runningToolCalls.set(item.callId, item);
2716
+ return;
2717
+ }
2718
+ this.runningToolCalls.delete(item.callId);
2719
+ }
2720
+ synthesizeInterruptedToolCalls(turnId) {
2721
+ for (const item of this.runningToolCalls.values()) {
2722
+ const error = { message: "Tool execution aborted" };
2723
+ this.notifySubscribers({
2724
+ type: "timeline",
2725
+ provider: "opencode",
2726
+ item: {
2727
+ ...item,
2728
+ status: "failed",
2729
+ error,
2730
+ detail: item.detail.type === "sub_agent"
2731
+ ? {
2732
+ ...item.detail,
2733
+ log: [item.detail.log, error.message]
2734
+ .filter((entry) => entry.trim().length > 0)
2735
+ .join("\n"),
2736
+ }
2737
+ : item.detail,
2738
+ },
2739
+ }, turnId);
2740
+ }
2741
+ this.runningToolCalls.clear();
2742
+ }
2743
+ notifySubscribers(event, turnIdOverride) {
2744
+ if (this.closed) {
2745
+ return;
2746
+ }
2747
+ const turnId = turnIdOverride === null ? null : (turnIdOverride ?? this.activeForegroundTurnId);
2748
+ const tagged = turnId ? { ...event, turnId } : event;
2749
+ this.traceOpenCode("provider.opencode.event_emit", {
2750
+ turnId: getAgentStreamEventTurnId(tagged),
2751
+ event: tagged,
2752
+ });
2753
+ for (const callback of this.subscribers) {
2754
+ try {
2755
+ callback(tagged);
2756
+ }
2757
+ catch {
2758
+ // Subscriber callback error isolation
2759
+ }
2760
+ }
2761
+ }
2762
+ createTurnId() {
2763
+ return `opencode-turn-${this.nextTurnOrdinal++}`;
2764
+ }
2765
+ traceOpenCode(msg, data = {}) {
2766
+ this.logger.trace({
2767
+ agentId: this.agentId,
2768
+ provider: "opencode",
2769
+ sessionId: this.sessionId,
2770
+ turnId: data.turnId ?? this.activeForegroundTurnId ?? undefined,
2771
+ ...data,
2772
+ }, msg);
2773
+ }
2774
+ async *streamHistory() {
2775
+ const sessionResponse = await this.client.session.get({
2776
+ sessionID: this.sessionId,
2777
+ directory: this.config.cwd,
2778
+ });
2779
+ const response = await this.client.session.messages({
2780
+ sessionID: this.sessionId,
2781
+ directory: this.config.cwd,
2782
+ });
2783
+ if (response.error || !response.data) {
2784
+ return;
2785
+ }
2786
+ const messages = filterOpenCodeRevertedMessages(response.data, sessionResponse.error ? null : sessionResponse.data?.revert);
2787
+ for (const message of messages) {
2788
+ for (const event of buildOpenCodeReplayTimelineEvents(message)) {
2789
+ yield event;
2790
+ }
2791
+ }
2792
+ }
2793
+ async getAvailableModes() {
2794
+ if (this.availableModesCache) {
2795
+ return this.availableModesCache;
2796
+ }
2797
+ const response = await openCodeMetadataLimit(() => this.client.app.agents({
2798
+ directory: this.config.cwd,
2799
+ }));
2800
+ const agents = response.error || !response.data ? [] : response.data;
2801
+ const discoveredModes = agents.filter(isSelectableOpenCodeAgent).map(mapOpenCodeAgentToMode);
2802
+ this.availableModesCache = mergeOpenCodeModes(discoveredModes);
2803
+ return this.availableModesCache;
2804
+ }
2805
+ async getCurrentMode() {
2806
+ return this.currentMode;
2807
+ }
2808
+ async listCommands() {
2809
+ return await listOpenCodeCommandsFromSdk(this.client, this.config.cwd);
2810
+ }
2811
+ async setMode(modeId) {
2812
+ const normalizedModeId = normalizeOpenCodeModeId(modeId);
2813
+ if (normalizedModeId === OPENCODE_LEGACY_FULL_ACCESS_MODE_ID) {
2814
+ this.currentMode = OPENCODE_BUILD_MODE_ID;
2815
+ await this.setFeature(OPENCODE_AUTO_ACCEPT_FEATURE_ID, true);
2816
+ return;
2817
+ }
2818
+ this.currentMode = normalizedModeId;
2819
+ this.config.modeId = normalizedModeId ?? undefined;
2820
+ }
2821
+ async setFeature(featureId, value) {
2822
+ if (featureId !== OPENCODE_AUTO_ACCEPT_FEATURE_ID) {
2823
+ throw new Error(`Unsupported OpenCode feature '${featureId}'`);
2824
+ }
2825
+ const enabled = value === true;
2826
+ this.autoAcceptEnabled = enabled;
2827
+ this.config.featureValues = {
2828
+ ...this.config.featureValues,
2829
+ [OPENCODE_AUTO_ACCEPT_FEATURE_ID]: enabled,
2830
+ };
2831
+ }
2832
+ getPendingPermissions() {
2833
+ return Array.from(this.pendingPermissions.values());
2834
+ }
2835
+ async respondToPermission(requestId, response) {
2836
+ const pending = this.pendingPermissions.get(requestId);
2837
+ if (!pending) {
2838
+ throw new Error(`No pending permission request with id '${requestId}'`);
2839
+ }
2840
+ const directory = this.pendingPermissionDirectories.get(requestId) ?? this.config.cwd;
2841
+ if (pending.kind === "question") {
2842
+ if (response.behavior === "deny") {
2843
+ await this.client.question.reject({
2844
+ requestID: requestId,
2845
+ directory,
2846
+ });
2847
+ }
2848
+ else {
2849
+ const answersRecord = readOpenCodeRecord(response.updatedInput?.answers);
2850
+ const questions = Array.isArray(pending.input?.questions) ? pending.input.questions : [];
2851
+ const answers = questions.map((item) => {
2852
+ const header = readNonEmptyString(readOpenCodeRecord(item)?.header);
2853
+ const rawAnswer = header ? readNonEmptyString(answersRecord?.[header]) : null;
2854
+ if (!rawAnswer) {
2855
+ return [];
2856
+ }
2857
+ return rawAnswer
2858
+ .split(",")
2859
+ .map((entry) => entry.trim())
2860
+ .filter((entry) => entry.length > 0);
2861
+ });
2862
+ await this.client.question.reply({
2863
+ requestID: requestId,
2864
+ directory,
2865
+ answers,
2866
+ });
2867
+ }
2868
+ this.pendingPermissions.delete(requestId);
2869
+ this.pendingPermissionDirectories.delete(requestId);
2870
+ return;
2871
+ }
2872
+ const reply = resolveOpenCodePermissionReply(response);
2873
+ await this.client.permission.reply({
2874
+ requestID: requestId,
2875
+ directory,
2876
+ reply,
2877
+ message: response.behavior === "deny" ? response.message : undefined,
2878
+ });
2879
+ this.pendingPermissions.delete(requestId);
2880
+ this.pendingPermissionDirectories.delete(requestId);
2881
+ }
2882
+ describePersistence() {
2883
+ return {
2884
+ provider: "opencode",
2885
+ sessionId: this.sessionId,
2886
+ nativeHandle: this.sessionId,
2887
+ metadata: {
2888
+ cwd: this.config.cwd,
2889
+ ...(this.config.modeId ? { modeId: this.config.modeId } : {}),
2890
+ ...(this.config.model ? { model: this.config.model } : {}),
2891
+ },
2892
+ };
2893
+ }
2894
+ async close() {
2895
+ try {
2896
+ // Flip closed before clearing subscribers so any event the SDK delivers
2897
+ // after the abort (between here and subscribers.clear) is swallowed by
2898
+ // notifySubscribers instead of bubbling through provider-runner as an
2899
+ // unhandled rejection in whichever test the daemon hops to next.
2900
+ this.closed = true;
2901
+ this.abortController?.abort();
2902
+ const eventStreamTask = this.eventStreamTask;
2903
+ this.eventStreamAbortController?.abort();
2904
+ if (eventStreamTask) {
2905
+ await eventStreamTask.catch((error) => {
2906
+ this.logger.debug({ err: error, sessionId: this.sessionId }, "OpenCode event stream failed during close");
2907
+ });
2908
+ }
2909
+ this.eventStreamAbortController = null;
2910
+ this.eventStreamReady = null;
2911
+ this.eventStreamTask = null;
2912
+ this.subscribers.clear();
2913
+ await reconcileOpenCodeSessionClose({
2914
+ client: this.client,
2915
+ sessionId: this.sessionId,
2916
+ directory: this.config.cwd,
2917
+ logger: this.logger,
2918
+ });
2919
+ await this.deleteProviderSessionIfEphemeral();
2920
+ this.activeForegroundTurnId = null;
2921
+ }
2922
+ finally {
2923
+ this.releaseServer?.();
2924
+ this.releaseServer = null;
2925
+ }
2926
+ }
2927
+ async deleteProviderSessionIfEphemeral() {
2928
+ if (this.persistSession || this.deletedFromProvider) {
2929
+ return;
2930
+ }
2931
+ this.deletedFromProvider = true;
2932
+ try {
2933
+ const response = await this.client.session.delete({
2934
+ sessionID: this.sessionId,
2935
+ directory: this.config.cwd,
2936
+ });
2937
+ if (response.error) {
2938
+ throw new Error(`OpenCode session.delete failed: ${JSON.stringify(response.error)}`);
2939
+ }
2940
+ }
2941
+ catch (error) {
2942
+ this.logger.debug({ err: error, sessionId: this.sessionId }, "Failed to delete non-persistent OpenCode session");
2943
+ }
2944
+ }
2945
+ parseSlashCommandInput(text) {
2946
+ const trimmed = text.trim();
2947
+ if (!trimmed.startsWith("/") || trimmed.length <= 1) {
2948
+ return null;
2949
+ }
2950
+ const withoutPrefix = trimmed.slice(1);
2951
+ const firstWhitespaceIdx = withoutPrefix.search(/\s/);
2952
+ const commandName = firstWhitespaceIdx === -1 ? withoutPrefix : withoutPrefix.slice(0, firstWhitespaceIdx);
2953
+ if (!commandName || commandName.includes("/")) {
2954
+ return null;
2955
+ }
2956
+ const rawArgs = firstWhitespaceIdx === -1 ? "" : withoutPrefix.slice(firstWhitespaceIdx + 1).trim();
2957
+ return rawArgs.length > 0 ? { commandName, args: rawArgs } : { commandName };
2958
+ }
2959
+ async resolveSlashCommandInvocation(prompt) {
2960
+ if (typeof prompt !== "string") {
2961
+ return null;
2962
+ }
2963
+ const parsed = this.parseSlashCommandInput(prompt);
2964
+ if (!parsed) {
2965
+ return null;
2966
+ }
2967
+ try {
2968
+ const commands = await this.listCommands();
2969
+ return commands.some((command) => command.name === parsed.commandName) ? parsed : null;
2970
+ }
2971
+ catch (error) {
2972
+ this.logger.warn({ err: error, commandName: parsed.commandName }, "Failed to resolve slash command; falling back to plain prompt input");
2973
+ return null;
2974
+ }
2975
+ }
2976
+ parseModel(model) {
2977
+ if (!model) {
2978
+ return undefined;
2979
+ }
2980
+ const parts = model.split("/");
2981
+ if (parts.length >= 2) {
2982
+ return { providerID: parts[0], modelID: parts.slice(1).join("/") };
2983
+ }
2984
+ return { providerID: "opencode", modelID: model };
2985
+ }
2986
+ async ensureMcpServersConfigured() {
2987
+ if (this.mcpConfigured) {
2988
+ return;
2989
+ }
2990
+ const mcpServers = this.config.mcpServers;
2991
+ if (!mcpServers || Object.keys(mcpServers).length === 0) {
2992
+ this.mcpConfigured = true;
2993
+ return;
2994
+ }
2995
+ if (!this.mcpSetupPromise) {
2996
+ this.mcpSetupPromise = this.configureMcpServers(mcpServers);
2997
+ }
2998
+ try {
2999
+ await this.mcpSetupPromise;
3000
+ this.mcpConfigured = true;
3001
+ }
3002
+ catch (error) {
3003
+ this.mcpSetupPromise = null;
3004
+ throw error;
3005
+ }
3006
+ }
3007
+ async configureMcpServers(mcpServers) {
3008
+ await Promise.all(Object.entries(mcpServers).map(([name, serverConfig]) => this.registerMcpServer(name, toOpenCodeMcpConfig(serverConfig))));
3009
+ }
3010
+ async registerMcpServer(name, config) {
3011
+ await this.runMcpOperation("add", name, () => this.client.mcp.add({
3012
+ directory: this.config.cwd,
3013
+ name,
3014
+ config,
3015
+ }));
3016
+ }
3017
+ async runMcpOperation(operation, name, run) {
3018
+ const response = await run();
3019
+ const error = response.error ?? readOpenCodeMcpOperationError(response.data, name);
3020
+ if (!error) {
3021
+ return;
3022
+ }
3023
+ if (isAlreadyPresentMcpError(error)) {
3024
+ return;
3025
+ }
3026
+ throw new Error(`Failed to ${operation} OpenCode MCP server '${name}': ${toDiagnosticErrorMessage(error)}`);
3027
+ }
3028
+ createTranslationState() {
3029
+ return {
3030
+ sessionId: this.sessionId,
3031
+ cwd: this.config.cwd,
3032
+ messageRoles: this.messageRoles,
3033
+ pendingUserMessageText: this.pendingUserMessageText,
3034
+ emittedUserMessageIds: this.emittedUserMessageIds,
3035
+ accumulatedUsage: this.accumulatedUsage,
3036
+ sessionTotalCostUsd: this.sessionTotalCostUsd,
3037
+ streamedPartKeys: this.streamedPartKeys,
3038
+ emittedStructuredMessageIds: this.emittedStructuredMessageIds,
3039
+ compactionSummaryMessageIds: this.compactionSummaryMessageIds,
3040
+ emittedCompactionPartIds: this.emittedCompactionPartIds,
3041
+ suppressAssistantMessagesUntilIdle: this.suppressAssistantMessagesUntilIdle,
3042
+ partTypes: this.partTypes,
3043
+ subAgentsByCallId: this.subAgentsByCallId,
3044
+ subAgentCallIdByChildSessionId: this.subAgentCallIdByChildSessionId,
3045
+ knownChildSessionIds: this.knownChildSessionIds,
3046
+ modelContextWindowsByModelKey: this.modelContextWindowsByModelKey,
3047
+ onAssistantModelContextWindowResolved: (contextWindowMaxTokens) => {
3048
+ this.accumulatedUsage.contextWindowMaxTokens = contextWindowMaxTokens;
3049
+ if (!this.config.model) {
3050
+ this.selectedModelContextWindowMaxTokens = contextWindowMaxTokens;
3051
+ }
3052
+ },
3053
+ };
3054
+ }
3055
+ getChildTranslationState(sessionId) {
3056
+ const existing = this.childTranslationStates.get(sessionId);
3057
+ if (existing) {
3058
+ return existing;
3059
+ }
3060
+ const state = {
3061
+ sessionId,
3062
+ cwd: this.config.cwd,
3063
+ messageRoles: new Map(),
3064
+ emittedUserMessageIds: new Set(),
3065
+ accumulatedUsage: {},
3066
+ streamedPartKeys: new Set(),
3067
+ emittedStructuredMessageIds: new Set(),
3068
+ compactionSummaryMessageIds: new Set(),
3069
+ emittedCompactionPartIds: new Set(),
3070
+ hydratedMessageFingerprints: new Map(),
3071
+ hydratedPartFingerprints: new Map(),
3072
+ suppressAssistantMessagesUntilIdle: { active: false },
3073
+ partTypes: new Map(),
3074
+ subAgentsByCallId: new Map(),
3075
+ subAgentCallIdByChildSessionId: new Map(),
3076
+ knownChildSessionIds: new Set(),
3077
+ modelContextWindowsByModelKey: this.modelContextWindowsByModelKey,
3078
+ };
3079
+ this.childTranslationStates.set(sessionId, state);
3080
+ return state;
3081
+ }
3082
+ appendProviderSubagentEvents(event, translated) {
3083
+ const childSessionId = getOpenCodeEventSessionId(event);
3084
+ const isKnownChild = childSessionId && this.knownChildSessionIds.has(childSessionId);
3085
+ if (!childSessionId || childSessionId === this.sessionId || !isKnownChild) {
3086
+ return;
3087
+ }
3088
+ translated.push(...this.translateProviderSubagentEvent(childSessionId, event));
3089
+ }
3090
+ translateProviderSubagentEvent(sessionId, event) {
3091
+ const translated = translateOpenCodeEvent(event, this.getChildTranslationState(sessionId));
3092
+ const events = [];
3093
+ let markedRunning = false;
3094
+ const markRunning = () => {
3095
+ if (markedRunning)
3096
+ return;
3097
+ markedRunning = true;
3098
+ events.push({
3099
+ type: "provider_subagent",
3100
+ provider: "opencode",
3101
+ event: { type: "upsert", id: sessionId, status: "running" },
3102
+ });
3103
+ };
3104
+ if (event.type === "session.status" && event.properties.status.type === "busy") {
3105
+ markRunning();
3106
+ }
3107
+ for (const childEvent of translated) {
3108
+ if (childEvent.type === "timeline") {
3109
+ markRunning();
3110
+ events.push({
3111
+ type: "provider_subagent",
3112
+ provider: "opencode",
3113
+ event: {
3114
+ type: "timeline",
3115
+ id: sessionId,
3116
+ item: childEvent.item,
3117
+ timestamp: childEvent.timestamp,
3118
+ },
3119
+ });
3120
+ }
3121
+ else if (childEvent.type === "turn_started") {
3122
+ markRunning();
3123
+ }
3124
+ else if (childEvent.type === "turn_completed") {
3125
+ events.push({
3126
+ type: "provider_subagent",
3127
+ provider: "opencode",
3128
+ event: { type: "upsert", id: sessionId, status: "completed" },
3129
+ });
3130
+ }
3131
+ else if (childEvent.type === "turn_failed") {
3132
+ events.push({
3133
+ type: "provider_subagent",
3134
+ provider: "opencode",
3135
+ event: { type: "upsert", id: sessionId, status: "failed" },
3136
+ });
3137
+ }
3138
+ else if (childEvent.type === "turn_canceled") {
3139
+ events.push({
3140
+ type: "provider_subagent",
3141
+ provider: "opencode",
3142
+ event: { type: "upsert", id: sessionId, status: "canceled" },
3143
+ });
3144
+ }
3145
+ else if (childEvent.type === "permission_requested" &&
3146
+ childEvent.request.kind === "question") {
3147
+ events.push(childEvent);
3148
+ }
3149
+ }
3150
+ return events;
3151
+ }
3152
+ async translateEvent(event) {
3153
+ const eventSessionId = getOpenCodeEventSessionId(event);
3154
+ if (event.type !== "session.created" &&
3155
+ eventSessionId &&
3156
+ eventSessionId !== this.sessionId &&
3157
+ !this.knownChildSessionIds.has(eventSessionId) &&
3158
+ !this.unrelatedSessionIds.has(eventSessionId)) {
3159
+ if (!this.childHydrationCompleted) {
3160
+ this.startChildSessionHydration();
3161
+ await this.childHydrationPromise?.catch(() => undefined);
3162
+ }
3163
+ if (!this.knownChildSessionIds.has(eventSessionId)) {
3164
+ this.unrelatedSessionIds.add(eventSessionId);
3165
+ }
3166
+ }
3167
+ const translated = translateOpenCodeEvent(event, this.createTranslationState());
3168
+ this.appendProviderSubagentEvents(event, translated);
3169
+ const events = [];
3170
+ if (typeof this.accumulatedUsage.totalCostUsd === "number") {
3171
+ this.sessionTotalCostUsd = maxFiniteNumber(this.sessionTotalCostUsd, this.accumulatedUsage.totalCostUsd);
3172
+ }
3173
+ for (const translatedEvent of translated) {
3174
+ this.recordProviderInternalEvent(translatedEvent);
3175
+ if (translatedEvent.type === "permission_requested") {
3176
+ const directory = (eventSessionId ? this.childSessionCwds.get(eventSessionId) : undefined) ??
3177
+ this.config.cwd;
3178
+ const autoApproved = await this.tryAutoApproveToolPermission(translatedEvent.request, directory);
3179
+ if (autoApproved) {
3180
+ continue;
3181
+ }
3182
+ this.pendingPermissions.set(translatedEvent.request.id, translatedEvent.request);
3183
+ this.pendingPermissionDirectories.set(translatedEvent.request.id, directory);
3184
+ }
3185
+ if (translatedEvent.type === "turn_completed") {
3186
+ if (hasNormalizedOpenCodeUsage(this.accumulatedUsage)) {
3187
+ translatedEvent.usage = this.accumulatedUsage;
3188
+ }
3189
+ const contextWindowMaxTokens = this.resolveSelectedModelContextWindowMaxTokens();
3190
+ this.accumulatedUsage =
3191
+ contextWindowMaxTokens !== undefined ? { contextWindowMaxTokens } : {};
3192
+ }
3193
+ events.push(translatedEvent);
3194
+ }
3195
+ return events;
3196
+ }
3197
+ async tryAutoApproveToolPermission(request, directory) {
3198
+ if (!this.autoAcceptEnabled || request.kind !== "tool") {
3199
+ return false;
3200
+ }
3201
+ try {
3202
+ await this.client.permission.reply({
3203
+ requestID: request.id,
3204
+ directory,
3205
+ reply: "once",
3206
+ });
3207
+ return true;
3208
+ }
3209
+ catch (error) {
3210
+ this.logger.warn({ err: error, requestId: request.id }, "Failed to auto-approve OpenCode tool permission");
3211
+ return false;
3212
+ }
3213
+ }
3214
+ resolveSelectedModelContextWindowMaxTokens() {
3215
+ return this.selectedModelContextWindowMaxTokens;
3216
+ }
3217
+ resolveConfiguredModelContextWindowMaxTokens(modelId) {
3218
+ const modelLookupKey = parseOpenCodeModelLookupKey(modelId);
3219
+ if (!modelLookupKey) {
3220
+ return undefined;
3221
+ }
3222
+ return this.modelContextWindowsByModelKey.get(modelLookupKey);
3223
+ }
3224
+ }
3225
+ //# sourceMappingURL=opencode-agent.js.map