@opencode-ai/core 0.0.0-dev-18673 → 0.0.0-dev-18677

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 (294) hide show
  1. package/dist/agent.js +2 -2
  2. package/dist/bus.js +1 -1
  3. package/dist/catalog.js +5 -5
  4. package/dist/chunks/{job-6xnprn33.js → job-0ard5z33.js} +6 -6
  5. package/dist/chunks/{job-2crbvxrz.js → job-0mhpcp7m.js} +3 -3
  6. package/dist/chunks/{job-x7r2g85h.js → job-0vhffh46.js} +2 -2
  7. package/dist/chunks/{job-wjd92vx4.js → job-11rrpezh.js} +2 -2
  8. package/dist/chunks/{job-ngdmqv4f.js → job-1emzt0wt.js} +2 -2
  9. package/dist/chunks/{job-qtqph8kb.js → job-25d8xd9w.js} +4 -4
  10. package/dist/chunks/{job-nr9st120.js → job-2jft3yd5.js} +4 -4
  11. package/dist/chunks/{job-f2v2a3w4.js → job-2ptj9njb.js} +2 -2
  12. package/dist/chunks/{job-522kq8qa.js → job-2spyzfer.js} +1 -1
  13. package/dist/chunks/{job-dv3yagct.js → job-2xxqbh3j.js} +4 -4
  14. package/dist/chunks/{job-ek7xs75a.js → job-30ngbap7.js} +1 -1
  15. package/dist/chunks/{job-vgthr3zd.js → job-3asq9qd5.js} +3 -3
  16. package/dist/chunks/{job-rngafpkn.js → job-3fbdyapk.js} +3 -3
  17. package/dist/chunks/{job-1795kap3.js → job-3fhw42bc.js} +6 -6
  18. package/dist/chunks/{job-7khw64yh.js → job-41qzzbpz.js} +2 -1
  19. package/dist/chunks/{job-gmvz6tt0.js → job-46crkez1.js} +1 -1
  20. package/dist/chunks/{job-b09nc7xz.js → job-47gdfeya.js} +16 -16
  21. package/dist/chunks/{job-twchz7da.js → job-48vsw0jw.js} +1 -1
  22. package/dist/chunks/{job-2rc1qwhy.js → job-4df507vk.js} +50 -42
  23. package/dist/chunks/{job-6xx60510.js → job-4seh17cq.js} +1 -1
  24. package/dist/chunks/{job-zpyt1ezn.js → job-54fer0d0.js} +1 -1
  25. package/dist/chunks/job-57pbmnfc.js +33 -0
  26. package/dist/chunks/{job-9qkcnssy.js → job-587cy5wm.js} +2 -2
  27. package/dist/chunks/{job-jxfq75rv.js → job-61m6ks43.js} +1 -1
  28. package/dist/chunks/job-6266zj4e.js +34 -0
  29. package/dist/chunks/{job-ppc4pq6n.js → job-6421j3fd.js} +2 -2
  30. package/dist/chunks/job-68jwqkqq.js +203 -0
  31. package/dist/chunks/{job-arfgd8hp.js → job-762jys75.js} +2 -2
  32. package/dist/chunks/{job-r1bm65q2.js → job-7b8p713x.js} +2 -2
  33. package/dist/chunks/{job-vt9vdee9.js → job-7jp3zpyh.js} +16 -16
  34. package/dist/chunks/{job-ccc48pq3.js → job-7s30ncaq.js} +1 -1
  35. package/dist/chunks/{job-ggy6v1em.js → job-813exka1.js} +3 -3
  36. package/dist/chunks/{job-d0dbhb87.js → job-8hhxd7er.js} +2 -2
  37. package/dist/chunks/{job-k36tycg5.js → job-8n8yxdw2.js} +2 -2
  38. package/dist/chunks/{job-ndwaftrw.js → job-910ht18m.js} +7 -7
  39. package/dist/chunks/{job-493bygj2.js → job-9bg23qva.js} +5 -5
  40. package/dist/chunks/{job-ntrwn9c5.js → job-9e6s2wbs.js} +1 -1
  41. package/dist/chunks/{job-53s1vm97.js → job-9jtvr9f7.js} +1 -1
  42. package/dist/chunks/{job-bv3cft66.js → job-9tna6sny.js} +6 -6
  43. package/dist/chunks/{job-w6r7reh9.js → job-af6k8xdc.js} +5 -5
  44. package/dist/chunks/{job-1gwra17j.js → job-ajmf56n3.js} +8 -8
  45. package/dist/chunks/{job-1y7r54v0.js → job-ajzk3rs2.js} +1 -1
  46. package/dist/chunks/{job-9tbbhhr5.js → job-aksqn8ry.js} +1 -1
  47. package/dist/chunks/{job-3raka4vp.js → job-arxtz9h4.js} +1 -1
  48. package/dist/chunks/{job-ea0dq72e.js → job-ave2dd3r.js} +46 -44
  49. package/dist/chunks/{job-tb3sg9tv.js → job-b2jn2z3c.js} +3 -3
  50. package/dist/chunks/{job-662k41g4.js → job-b4jawdm2.js} +2 -2
  51. package/dist/chunks/{job-ke8148ty.js → job-bfbx87ej.js} +1 -1
  52. package/dist/chunks/{job-17rksvd3.js → job-bn0n0hq9.js} +2 -2
  53. package/dist/chunks/{job-pjq3bk07.js → job-bv2z3evd.js} +5 -5
  54. package/dist/chunks/{job-vf9yn9vx.js → job-bvavh6pe.js} +3 -3
  55. package/dist/chunks/{job-s7azyhqy.js → job-caf5y5zg.js} +2 -2
  56. package/dist/chunks/{job-3x82cc09.js → job-cdm889rz.js} +1 -1
  57. package/dist/chunks/job-cgqn2mrm.js +147 -0
  58. package/dist/chunks/{job-za8wqpca.js → job-cqr0z25w.js} +2 -2
  59. package/dist/chunks/job-cs1gk7aw.js +330 -0
  60. package/dist/chunks/{job-w989xrsb.js → job-dc495s0z.js} +2 -2
  61. package/dist/chunks/{job-e663gt7g.js → job-dh8ckpgp.js} +1 -1
  62. package/dist/chunks/{job-9kxkwge9.js → job-dmvhg2kz.js} +3 -3
  63. package/dist/chunks/{job-qgr3f3b0.js → job-dn8yfcj9.js} +2 -2
  64. package/dist/chunks/{job-knm8yv8d.js → job-dv2qtrbh.js} +1 -1
  65. package/dist/chunks/{job-m4nj1rxs.js → job-e08y7spt.js} +2 -2
  66. package/dist/chunks/{job-04ve9v9t.js → job-e43zqy1x.js} +4 -4
  67. package/dist/chunks/{job-p3ahxk9y.js → job-e4v0c7ed.js} +1 -1
  68. package/dist/chunks/{job-69r90z8c.js → job-emzj2mnz.js} +1 -1
  69. package/dist/chunks/{job-v42pfaxk.js → job-evztkcdr.js} +1 -1
  70. package/dist/chunks/{job-1t1wgrhv.js → job-ey3px3v3.js} +2 -2
  71. package/dist/chunks/{job-dgn4zcks.js → job-f59p8r33.js} +42 -42
  72. package/dist/chunks/{job-z1t08826.js → job-fagh19yc.js} +5 -5
  73. package/dist/chunks/{job-wyghbada.js → job-fbd4gqt5.js} +1 -1
  74. package/dist/chunks/{job-edjh5g28.js → job-fe8hw932.js} +2 -2
  75. package/dist/chunks/{job-yrxhe8a3.js → job-fg9cms5n.js} +6 -6
  76. package/dist/chunks/{job-ecft2zb7.js → job-fjvbp1rw.js} +97 -71
  77. package/dist/chunks/{job-dnxrkvvt.js → job-g9rvq1b5.js} +1 -1
  78. package/dist/chunks/{job-kxn229zn.js → job-g9vy0vzc.js} +1 -1
  79. package/dist/chunks/{job-mrdgq75n.js → job-h5cf492r.js} +3 -3
  80. package/dist/chunks/{job-wvmyfgqa.js → job-h9bbwcgd.js} +1 -1
  81. package/dist/chunks/job-hym53p1s.js +120 -0
  82. package/dist/chunks/{job-d64twz5j.js → job-jp8kwwgf.js} +1 -1
  83. package/dist/chunks/{job-cfzsy64h.js → job-jq8sgn79.js} +2 -2
  84. package/dist/chunks/{job-1kexajey.js → job-jr5hd5p5.js} +2 -2
  85. package/dist/chunks/{job-spcjzfgq.js → job-k4t29e2h.js} +2 -2
  86. package/dist/chunks/{job-rcmgh3ca.js → job-ka9jgdn3.js} +2 -2
  87. package/dist/chunks/{job-c48kc6fa.js → job-kaffyxmp.js} +4 -4
  88. package/dist/chunks/{job-zk95prvm.js → job-kh42a55x.js} +3 -3
  89. package/dist/chunks/{job-vx4s9vef.js → job-khy57ct7.js} +1 -1
  90. package/dist/chunks/{job-wf9by8hw.js → job-knqwwztd.js} +2 -2
  91. package/dist/chunks/{job-bz4yk1t4.js → job-kpkmmjx3.js} +4 -4
  92. package/dist/chunks/{job-2jqw5dy6.js → job-m1fdqckz.js} +2 -2
  93. package/dist/chunks/{job-7xyyvdqe.js → job-m90gkrdr.js} +2 -2
  94. package/dist/chunks/{job-0kdsfzn8.js → job-me02a623.js} +1 -1
  95. package/dist/chunks/{job-v2shkc71.js → job-me5d9f22.js} +6 -6
  96. package/dist/chunks/{job-ngrdkqab.js → job-n5tqbq9v.js} +1 -1
  97. package/dist/chunks/{job-y1a7rf83.js → job-ndmfymhz.js} +1 -1
  98. package/dist/chunks/{job-9ah4t5gc.js → job-new463fc.js} +1 -1
  99. package/dist/chunks/{job-q5ke20s1.js → job-nh8pkdtv.js} +1 -1
  100. package/dist/chunks/{job-44ehhp8z.js → job-nvaw7ncd.js} +18 -18
  101. package/dist/chunks/{job-gg11cpea.js → job-pkn40a12.js} +4 -4
  102. package/dist/chunks/{job-eyavsrxt.js → job-pskv33a2.js} +2 -2
  103. package/dist/chunks/{job-52hchg7s.js → job-q87p9xpa.js} +1 -1
  104. package/dist/chunks/{job-r5qypb3j.js → job-qba7b96d.js} +3 -3
  105. package/dist/chunks/{job-x6p3vk3n.js → job-qjge9hjg.js} +3 -3
  106. package/dist/chunks/{job-t981ghyw.js → job-qyg9b9kw.js} +3 -3
  107. package/dist/chunks/{job-eqacz5gw.js → job-rvnd6a2n.js} +1 -1
  108. package/dist/chunks/{job-0bw528m8.js → job-sx7e8x54.js} +16 -16
  109. package/dist/chunks/{job-wpn3tqwb.js → job-t0esftz3.js} +82 -82
  110. package/dist/chunks/{job-3apyg94z.js → job-tjvgp8sx.js} +1 -1
  111. package/dist/chunks/{job-dm0vs72c.js → job-tywfhfz1.js} +6 -6
  112. package/dist/chunks/{job-c1fr40sx.js → job-v4rnjb1g.js} +1 -1
  113. package/dist/chunks/{job-sqzywsbq.js → job-v50dw4p6.js} +2 -2
  114. package/dist/chunks/{job-83zdjmgg.js → job-v9j3k8n3.js} +2 -2
  115. package/dist/chunks/{job-qarwrfd1.js → job-x9rd2vnh.js} +1 -1
  116. package/dist/chunks/{job-6eb12gng.js → job-xygthxr3.js} +2 -2
  117. package/dist/chunks/{job-vzgmc9jp.js → job-y3sfr5g3.js} +4 -4
  118. package/dist/chunks/{job-830qkp09.js → job-ye4yygw2.js} +1 -1
  119. package/dist/chunks/job-yyjmndg0.js +483 -0
  120. package/dist/chunks/{job-4gv2h1pd.js → job-yypfb467.js} +3 -3
  121. package/dist/chunks/{job-j0e9tdbc.js → job-z136m2k9.js} +3 -3
  122. package/dist/chunks/{job-n2c9k96k.js → job-z3fjxbtv.js} +4 -4
  123. package/dist/chunks/{job-ba35xjtb.js → job-z61mvmr2.js} +6 -6
  124. package/dist/chunks/{job-xes8c7na.js → job-zjdkpeq1.js} +8 -6
  125. package/dist/chunks/{job-hnxf074g.js → job-zq3dpz3n.js} +1 -1
  126. package/dist/chunks/{job-vhxe1a2q.js → job-zr6va574.js} +2 -2
  127. package/dist/chunks/{job-h41pqsxw.js → job-zrccwvnf.js} +1 -1
  128. package/dist/chunks/{job-tdk41tnh.js → job-zzhrh7mp.js} +2 -2
  129. package/dist/chunks/{job-nkej4bfa.js → job-zzp6hyw7.js} +2 -2
  130. package/dist/command.js +2 -2
  131. package/dist/config/plugin/agent.js +15 -15
  132. package/dist/config/plugin/command.js +9 -9
  133. package/dist/config/plugin/compaction.js +22 -22
  134. package/dist/config/plugin/entry-observer.js +8 -8
  135. package/dist/config/plugin/formatter.js +10 -10
  136. package/dist/config/plugin/image.js +14 -14
  137. package/dist/config/plugin/instruction.js +7 -7
  138. package/dist/config/plugin/location-watcher.js +9 -9
  139. package/dist/config/plugin/mcp.js +13 -13
  140. package/dist/config/plugin/policy.js +9 -9
  141. package/dist/config/plugin/provider.js +9 -9
  142. package/dist/config/plugin/reference.js +10 -10
  143. package/dist/config/plugin/shell.js +9 -9
  144. package/dist/config/plugin/skill-file.js +13 -13
  145. package/dist/config/plugin/skill.js +17 -17
  146. package/dist/config/plugin/snapshot.js +10 -10
  147. package/dist/config/plugin/source.js +9 -9
  148. package/dist/config/plugin/tool-output.js +9 -9
  149. package/dist/config/plugin/websearch.js +9 -9
  150. package/dist/config.js +8 -8
  151. package/dist/credential.js +2 -2
  152. package/dist/effect/app-node-builder.js +146 -142
  153. package/dist/environment/environment.js +6 -6
  154. package/dist/environment/index.js +6 -6
  155. package/dist/event-logger.js +1 -1
  156. package/dist/file-mutation.js +7 -7
  157. package/dist/filesystem/location-watcher.js +125 -123
  158. package/dist/filesystem/search.js +8 -8
  159. package/dist/filesystem.js +9 -9
  160. package/dist/form.js +2 -2
  161. package/dist/formatter.js +6 -6
  162. package/dist/generate.js +7 -7
  163. package/dist/github-copilot/chat/openai-compatible-chat-language-model.js +4 -4
  164. package/dist/github-copilot/copilot-provider.js +9 -9
  165. package/dist/github-copilot/responses/openai-responses-language-model.js +5 -5
  166. package/dist/github-copilot/responses/openai-responses-prepare-tools.js +2 -2
  167. package/dist/image/photon.js +10 -10
  168. package/dist/image.js +10 -10
  169. package/dist/instance.js +145 -141
  170. package/dist/instruction-discovery.js +2 -2
  171. package/dist/instructions/builtins.js +6 -6
  172. package/dist/integration.js +4 -4
  173. package/dist/location-activity.js +5 -5
  174. package/dist/location-mutation.js +6 -6
  175. package/dist/location-service-map.js +5 -5
  176. package/dist/location-services.js +146 -142
  177. package/dist/location.js +5 -5
  178. package/dist/mcp/client.js +7 -7
  179. package/dist/mcp/index.js +10 -10
  180. package/dist/mcp/instructions.js +23 -23
  181. package/dist/mcp/stdio.js +7 -7
  182. package/dist/model-resolver.js +6 -6
  183. package/dist/models-dev.js +2 -2
  184. package/dist/permission.js +11 -11
  185. package/dist/persistent-pty/index.js +2 -2
  186. package/dist/persistent-pty.js +2 -2
  187. package/dist/plugin/agent.js +12 -12
  188. package/dist/plugin/command.js +11 -11
  189. package/dist/plugin/host.js +47 -45
  190. package/dist/plugin/internal.js +120 -118
  191. package/dist/plugin/models-dev.js +3 -3
  192. package/dist/plugin/plan.js +12 -12
  193. package/dist/plugin/provider/azure.js +13 -13
  194. package/dist/plugin/provider/cloudflare-ai-gateway.js +13 -13
  195. package/dist/plugin/provider/cloudflare-workers-ai.js +13 -13
  196. package/dist/plugin/provider/configured.js +12 -12
  197. package/dist/plugin/provider/github-copilot.js +7 -7
  198. package/dist/plugin/provider/llmgateway.js +5 -5
  199. package/dist/plugin/provider/lmstudio.js +13 -13
  200. package/dist/plugin/provider/ollama.js +13 -13
  201. package/dist/plugin/provider/openai.js +5 -5
  202. package/dist/plugin/provider/opencode.js +5 -5
  203. package/dist/plugin/provider/vllm.js +13 -13
  204. package/dist/plugin/provider/xai.js +5 -5
  205. package/dist/plugin/provider.js +35 -35
  206. package/dist/plugin/runtime.js +41 -39
  207. package/dist/plugin/sdk.js +2 -2
  208. package/dist/plugin/skill.js +17 -17
  209. package/dist/plugin/supervisor.js +126 -124
  210. package/dist/plugin/vcs/git.js +7 -7
  211. package/dist/plugin/vcs/hg.js +7 -7
  212. package/dist/plugin/warming.js +9 -9
  213. package/dist/plugin/websearch/index.js +3 -3
  214. package/dist/plugin.js +48 -46
  215. package/dist/project/markers.js +3 -3
  216. package/dist/project.js +4 -4
  217. package/dist/pty.js +6 -6
  218. package/dist/reference/instructions.js +3 -3
  219. package/dist/reference.js +2 -2
  220. package/dist/ripgrep.js +7 -7
  221. package/dist/session/compaction.js +19 -19
  222. package/dist/session/context.js +133 -131
  223. package/dist/session/error.js +23 -1
  224. package/dist/session/execution/restart.js +39 -37
  225. package/dist/session/execution.js +21 -21
  226. package/dist/session/generate-node.js +134 -132
  227. package/dist/session/history.js +2 -2
  228. package/dist/session/inbox.js +11 -15
  229. package/dist/session/instructions.js +10 -10
  230. package/dist/session/model-request.js +25 -25
  231. package/dist/session/projector.js +3 -3
  232. package/dist/session/prompt-node.js +320 -0
  233. package/dist/session/prompt.js +130 -0
  234. package/dist/session/revert-node.js +320 -0
  235. package/dist/session/revert.js +17 -12
  236. package/dist/session/run-coordinator.js +1 -1
  237. package/dist/session/runner/index.js +7 -7
  238. package/dist/session/runner/llm.js +138 -136
  239. package/dist/session/runner/model.js +7 -7
  240. package/dist/session/runner/retry.js +1 -1
  241. package/dist/session/runner/step.js +29 -29
  242. package/dist/session/session.js +181 -0
  243. package/dist/session/store.js +4 -4
  244. package/dist/session/title.js +134 -132
  245. package/dist/session/to-session-error.js +18 -18
  246. package/dist/session/transfer.js +40 -38
  247. package/dist/session.js +50 -48
  248. package/dist/shell.js +10 -10
  249. package/dist/skill/instructions.js +13 -13
  250. package/dist/skill.js +12 -12
  251. package/dist/snapshot.js +6 -6
  252. package/dist/tool/mcp.js +22 -22
  253. package/dist/tool/plugin/edit.js +16 -16
  254. package/dist/tool/plugin/glob.js +17 -17
  255. package/dist/tool/plugin/grep.js +17 -17
  256. package/dist/tool/plugin/patch.js +16 -16
  257. package/dist/tool/plugin/question.js +13 -13
  258. package/dist/tool/plugin/read.js +19 -19
  259. package/dist/tool/plugin/shell.js +43 -41
  260. package/dist/tool/plugin/skill.js +13 -13
  261. package/dist/tool/plugin/subagent.js +42 -40
  262. package/dist/tool/plugin/webfetch.js +12 -12
  263. package/dist/tool/plugin/websearch.js +14 -14
  264. package/dist/tool/plugin/write.js +16 -16
  265. package/dist/tool/read-filesystem.js +10 -10
  266. package/dist/tool.js +17 -17
  267. package/dist/types/instance.d.ts +2 -2
  268. package/dist/types/location-service-map.d.ts +2 -2
  269. package/dist/types/plugin/host.d.ts +4 -18
  270. package/dist/types/project.d.ts +1 -0
  271. package/dist/types/session/error.d.ts +115 -0
  272. package/dist/types/session/execution.d.ts +2 -0
  273. package/dist/types/session/inbox.d.ts +557 -176
  274. package/dist/types/session/prompt-node.d.ts +3 -0
  275. package/dist/types/session/prompt.d.ts +126 -0
  276. package/dist/types/session/revert-node.d.ts +3 -0
  277. package/dist/types/session/revert.d.ts +24 -29
  278. package/dist/types/session/run-coordinator.d.ts +2 -0
  279. package/dist/types/session/session.d.ts +232 -0
  280. package/dist/types/session.d.ts +14 -141
  281. package/dist/vcs.js +6 -6
  282. package/dist/websearch.js +2 -2
  283. package/dist/wellknown/plugin.js +3 -3
  284. package/dist/wellknown.js +2 -2
  285. package/dist/worktree.js +6 -6
  286. package/package.json +7 -7
  287. package/dist/chunks/job-fb7nfzf2.js +0 -71
  288. package/dist/chunks/job-k3b93ktv.js +0 -909
  289. package/dist/chunks/job-x7z7742t.js +0 -115
  290. package/dist/chunks/{job-dchkjjs1.js → job-5y7h4bj8.js} +6 -6
  291. package/dist/chunks/{job-yd18a1xb.js → job-pzy8panz.js} +9 -9
  292. package/dist/chunks/{job-tkazpfmd.js → job-qj3yfbbj.js} +3 -3
  293. /package/dist/chunks/{job-ryg4g4zw.js → job-s5a3kj32.js} +0 -0
  294. /package/dist/chunks/{job-j925pnyr.js → job-wcdz88tf.js} +0 -0
@@ -0,0 +1,3 @@
1
+ export * as SessionPromptNode from "./prompt-node.js";
2
+ import { SessionPrompt } from "./prompt.js";
3
+ export declare const node: import("@opencode-ai/util/effect/layer-node").Node<SessionPrompt.Service, never, import("@opencode-ai/util/effect/layer-node").Tag<"location">>;
@@ -0,0 +1,126 @@
1
+ export * as SessionPrompt from "./prompt.js";
2
+ import { PromptInput } from "@opencode-ai/schema/prompt-input";
3
+ import { SessionInbox } from "@opencode-ai/schema/session-inbox";
4
+ import type { Session } from "@opencode-ai/schema/session";
5
+ import type { SessionMessage } from "@opencode-ai/schema/session-message";
6
+ import { FSUtil } from "@opencode-ai/util/fs-util";
7
+ import { Context, Effect, Layer } from "effect";
8
+ import { Image } from "../image.js";
9
+ import { PluginHooks } from "../plugin/hooks.js";
10
+ import { PluginSupervisor } from "../plugin/supervisor-service.js";
11
+ import { Skill } from "../skill.js";
12
+ import { AttachmentError, SkillNotFoundError } from "./error.js";
13
+ export type Input = {
14
+ text: string;
15
+ files?: PromptInput.Prompt["files"];
16
+ agents?: PromptInput.Prompt["agents"];
17
+ skills?: PromptInput.Prompt["skills"];
18
+ metadata?: Record<string, unknown>;
19
+ delivery?: SessionInbox.Delivery;
20
+ };
21
+ export declare const make: () => Effect.Effect<{
22
+ prepare: (request: {
23
+ sessionID: Session.ID;
24
+ messageID: SessionMessage.ID;
25
+ input: Input;
26
+ }) => Effect.Effect<{
27
+ type: "user";
28
+ payload: {
29
+ readonly text: string;
30
+ readonly metadata?: {
31
+ readonly [x: string]: unknown;
32
+ } | undefined;
33
+ readonly files?: readonly {
34
+ readonly source: {
35
+ readonly type: "inline";
36
+ } | {
37
+ readonly type: "uri";
38
+ readonly uri: string;
39
+ };
40
+ readonly data: string;
41
+ readonly mime: string;
42
+ readonly name?: string | undefined;
43
+ readonly description?: string | undefined;
44
+ readonly mention?: {
45
+ readonly start: number;
46
+ readonly end: number;
47
+ readonly text: string;
48
+ } | undefined;
49
+ }[] | undefined;
50
+ readonly agents?: readonly {
51
+ readonly name: string;
52
+ readonly mention?: {
53
+ readonly start: number;
54
+ readonly end: number;
55
+ readonly text: string;
56
+ } | undefined;
57
+ }[] | undefined;
58
+ readonly skills?: readonly {
59
+ readonly name: string & import("effect/Brand").Brand<"Skill.Name">;
60
+ readonly id: string & import("effect/Brand").Brand<"Skill.ID">;
61
+ readonly text?: string | undefined;
62
+ readonly mention?: {
63
+ readonly start: number;
64
+ readonly end: number;
65
+ readonly text: string;
66
+ } | undefined;
67
+ }[] | undefined;
68
+ };
69
+ delivery: "steer" | "queue";
70
+ }, AttachmentError | SkillNotFoundError, never>;
71
+ }, never, FSUtil.Service | Image.Service | PluginSupervisor.Service | PluginHooks.Service | Skill.Service>;
72
+ export type Interface = Effect.Success<ReturnType<typeof make>>;
73
+ declare const Service_base: Context.ServiceClass<Service, "@opencode/SessionPrompt", {
74
+ prepare: (request: {
75
+ sessionID: Session.ID;
76
+ messageID: SessionMessage.ID;
77
+ input: Input;
78
+ }) => Effect.Effect<{
79
+ type: "user";
80
+ payload: {
81
+ readonly text: string;
82
+ readonly metadata?: {
83
+ readonly [x: string]: unknown;
84
+ } | undefined;
85
+ readonly files?: readonly {
86
+ readonly source: {
87
+ readonly type: "inline";
88
+ } | {
89
+ readonly type: "uri";
90
+ readonly uri: string;
91
+ };
92
+ readonly data: string;
93
+ readonly mime: string;
94
+ readonly name?: string | undefined;
95
+ readonly description?: string | undefined;
96
+ readonly mention?: {
97
+ readonly start: number;
98
+ readonly end: number;
99
+ readonly text: string;
100
+ } | undefined;
101
+ }[] | undefined;
102
+ readonly agents?: readonly {
103
+ readonly name: string;
104
+ readonly mention?: {
105
+ readonly start: number;
106
+ readonly end: number;
107
+ readonly text: string;
108
+ } | undefined;
109
+ }[] | undefined;
110
+ readonly skills?: readonly {
111
+ readonly name: string & import("effect/Brand").Brand<"Skill.Name">;
112
+ readonly id: string & import("effect/Brand").Brand<"Skill.ID">;
113
+ readonly text?: string | undefined;
114
+ readonly mention?: {
115
+ readonly start: number;
116
+ readonly end: number;
117
+ readonly text: string;
118
+ } | undefined;
119
+ }[] | undefined;
120
+ };
121
+ delivery: "steer" | "queue";
122
+ }, AttachmentError | SkillNotFoundError, never>;
123
+ }>;
124
+ export declare class Service extends Service_base {
125
+ }
126
+ export declare const layer: Layer.Layer<Service, never, FSUtil.Service | Image.Service | PluginSupervisor.Service | PluginHooks.Service | Skill.Service>;
@@ -0,0 +1,3 @@
1
+ export * as SessionRevertNode from "./revert-node.js";
2
+ import { SessionRevert } from "./revert.js";
3
+ export declare const node: import("@opencode-ai/util/effect/layer-node").Node<SessionRevert.Service, never, import("@opencode-ai/util/effect/layer-node").Tag<"location">>;
@@ -1,36 +1,31 @@
1
1
  export * as SessionRevert from "./revert.js";
2
- import { Effect, Schema } from "effect";
2
+ import { Context, Effect, Layer } from "effect";
3
3
  import { Database } from "../database/database.js";
4
4
  import { Bus } from "../bus.js";
5
+ import { PluginSupervisor } from "../plugin/supervisor-service.js";
5
6
  import { Snapshot } from "../snapshot.js";
7
+ import { MessageNotFoundError } from "./error.js";
6
8
  import { SessionMessage } from "./message.js";
7
9
  import { SessionSchema } from "./schema.js";
8
- declare const MessageNotFoundError_base: Schema.Class<MessageNotFoundError, Schema.TaggedStruct<"Session.MessageNotFoundError", {
9
- readonly sessionID: Schema.brand<Schema.String, "SessionID"> & {
10
- create: () => string & import("effect/Brand").Brand<"SessionID">;
11
- descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
12
- };
13
- readonly messageID: Schema.brand<Schema.String, "Session.Message.ID"> & {
14
- create: () => string & import("effect/Brand").Brand<"Session.Message.ID">;
15
- fromEvent: (eventID: import("@opencode-ai/schema/event").ID) => string & import("effect/Brand").Brand<"Session.Message.ID">;
16
- };
17
- }>, import("effect/Cause").YieldableError>;
18
- export declare class MessageNotFoundError extends MessageNotFoundError_base {
10
+ export { MessageNotFoundError };
11
+ export interface Interface {
12
+ readonly stage: (input: {
13
+ readonly session: SessionSchema.Info;
14
+ readonly messageID: SessionMessage.ID;
15
+ readonly files?: boolean;
16
+ }) => Effect.Effect<SessionSchema.Revert, MessageNotFoundError | Snapshot.Error>;
17
+ readonly clear: (session: SessionSchema.Info) => Effect.Effect<void, Snapshot.Error>;
19
18
  }
20
- export declare const stage: (input: {
21
- readonly session: SessionSchema.Info;
22
- readonly messageID: SessionMessage.ID;
23
- readonly files?: boolean;
24
- }) => Effect.Effect<{
25
- messageID: string & import("effect/Brand").Brand<"Session.Message.ID">;
26
- snapshot: (string & import("effect/Brand").Brand<"Snapshot.ID">) | undefined;
27
- files: readonly {
28
- readonly file: string;
29
- readonly patch: string;
30
- readonly additions: number;
31
- readonly deletions: number;
32
- readonly status: "added" | "deleted" | "modified";
33
- }[];
34
- }, Snapshot.Error | MessageNotFoundError, Database.Service | Bus.Service | Snapshot.Service>;
35
- export declare const clear: (session: SessionSchema.Info) => Effect.Effect<void, Snapshot.Error, Bus.Service | Snapshot.Service>;
36
- export declare const commit: (session: SessionSchema.Info) => Effect.Effect<void, never, Bus.Service>;
19
+ declare const Service_base: Context.ServiceClass<Service, "@opencode/SessionRevert", Interface>;
20
+ export declare class Service extends Service_base {
21
+ }
22
+ export declare const make: () => Effect.Effect<{
23
+ stage: (input: {
24
+ readonly session: SessionSchema.Info;
25
+ readonly messageID: SessionMessage.ID;
26
+ readonly files?: boolean;
27
+ }) => Effect.Effect<SessionSchema.Revert, MessageNotFoundError | Snapshot.Error>;
28
+ clear: (session: SessionSchema.Info) => Effect.Effect<void, Snapshot.Error>;
29
+ }, never, Database.Service | Bus.Service | PluginSupervisor.Service | Snapshot.Service>;
30
+ export declare const layer: Layer.Layer<Service, never, Database.Service | Bus.Service | PluginSupervisor.Service | Snapshot.Service>;
31
+ export declare const commit: (bus: Bus.Interface, session: SessionSchema.Info) => Effect.Effect<void, never, never>;
@@ -5,6 +5,8 @@ import type { Promotable } from "./inbox.js";
5
5
  export interface Coordinator<Key, E, Reason = never> {
6
6
  /** Snapshots keys with an execution owned by this coordinator. */
7
7
  readonly active: Effect.Effect<ReadonlySet<Key>>;
8
+ /** Checks ownership for one key, including cleanup and terminal settlement. */
9
+ readonly isActive: (key: Key) => Effect.Effect<boolean>;
8
10
  /** Starts an execution while idle, or joins the active execution and returns its exit. */
9
11
  readonly run: (key: Key) => Effect.Effect<void, E>;
10
12
  /** Rings the doorbell: an idle key starts an execution; an active one drains again before settling. */
@@ -0,0 +1,232 @@
1
+ export * as Session from "./session.js";
2
+ import { DateTime, Effect, Layer, Scope } from "effect";
3
+ import type { Agent } from "@opencode-ai/schema/agent";
4
+ import type { Model } from "@opencode-ai/schema/model";
5
+ import { Event } from "@opencode-ai/schema/event";
6
+ import { Bus } from "../bus.js";
7
+ import { Location } from "../location.js";
8
+ import { PluginSupervisor } from "../plugin/supervisor-service.js";
9
+ import { Shell } from "../shell.js";
10
+ import { BusyError, CompactionConflictError, InboxConflictError, MessageIncompleteError, MessageNotAssistantError, MessageNotFoundError, MessageToolIncompleteError, NotFoundError, PromptConflictError, SyntheticConflictError } from "./error.js";
11
+ import { SessionExecution } from "./execution.js";
12
+ import { SessionInbox } from "./inbox.js";
13
+ import { SessionMessage } from "./message.js";
14
+ import { SessionPrompt } from "./prompt.js";
15
+ import { SessionRevert } from "./revert.js";
16
+ import { SessionSchema } from "./schema.js";
17
+ import { SessionStore } from "./store.js";
18
+ export type Services = PluginSupervisor.Service | SessionPrompt.Service | SessionRevert.Service | Shell.Service;
19
+ type PromptRequest = SessionPrompt.Input & {
20
+ id?: SessionMessage.ID;
21
+ resume?: boolean;
22
+ };
23
+ /**
24
+ * Build once in the host Scope: `const sessions = yield* Session.make(servicesFor)`.
25
+ * Use `sessions.forSession(id)` for handles that share host services and reload current state.
26
+ */
27
+ export declare const make: (servicesFor: (ref: Location.Ref) => Layer.Layer<Services>) => Effect.Effect<{
28
+ forSession: (sessionID: SessionSchema.ID) => {
29
+ id: string & import("effect/Brand").Brand<"SessionID">;
30
+ get: () => Effect.Effect<SessionSchema.Info, NotFoundError, never>;
31
+ message: (messageID: string & import("effect/Brand").Brand<"Session.Message.ID">) => Effect.Effect<SessionMessage.Info | undefined, never, never>;
32
+ updateMessage: (input: {
33
+ readonly messageID: SessionMessage.ID;
34
+ readonly content: readonly SessionMessage.AssistantContent[];
35
+ }) => Effect.Effect<SessionMessage.Assistant, NotFoundError | MessageNotFoundError | MessageNotAssistantError | MessageIncompleteError | MessageToolIncompleteError | BusyError, never>;
36
+ view: (input: {
37
+ idle: number;
38
+ }) => Effect.Effect<void, NotFoundError, never>;
39
+ rename: (input: {
40
+ title: string;
41
+ }) => Effect.Effect<void, NotFoundError, never>;
42
+ switchAgent: (input: {
43
+ agent: Agent.ID;
44
+ }) => Effect.Effect<void, NotFoundError, never>;
45
+ switchModel: (input: {
46
+ model: Model.Ref;
47
+ }) => Effect.Effect<void, NotFoundError, never>;
48
+ inbox: () => Effect.Effect<({
49
+ readonly type: "user";
50
+ readonly payload: {
51
+ readonly text: string;
52
+ readonly metadata?: {
53
+ readonly [x: string]: unknown;
54
+ } | undefined;
55
+ readonly files?: readonly {
56
+ readonly source: {
57
+ readonly type: "inline";
58
+ } | {
59
+ readonly type: "uri";
60
+ readonly uri: string;
61
+ };
62
+ readonly data: string;
63
+ readonly mime: string;
64
+ readonly name?: string | undefined;
65
+ readonly description?: string | undefined;
66
+ readonly mention?: {
67
+ readonly start: number;
68
+ readonly end: number;
69
+ readonly text: string;
70
+ } | undefined;
71
+ }[] | undefined;
72
+ readonly agents?: readonly {
73
+ readonly name: string;
74
+ readonly mention?: {
75
+ readonly start: number;
76
+ readonly end: number;
77
+ readonly text: string;
78
+ } | undefined;
79
+ }[] | undefined;
80
+ readonly skills?: readonly {
81
+ readonly name: string & import("effect/Brand").Brand<"Skill.Name">;
82
+ readonly id: string & import("effect/Brand").Brand<"Skill.ID">;
83
+ readonly text?: string | undefined;
84
+ readonly mention?: {
85
+ readonly start: number;
86
+ readonly end: number;
87
+ readonly text: string;
88
+ } | undefined;
89
+ }[] | undefined;
90
+ };
91
+ readonly delivery: "steer" | "queue";
92
+ readonly id: string & import("effect/Brand").Brand<"Session.Message.ID">;
93
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
94
+ readonly timeCreated: DateTime.Utc;
95
+ } | {
96
+ readonly type: "synthetic";
97
+ readonly payload: {
98
+ readonly text: string;
99
+ readonly description?: string | undefined;
100
+ readonly metadata?: {
101
+ readonly [x: string]: unknown;
102
+ } | undefined;
103
+ };
104
+ readonly delivery: "steer" | "queue";
105
+ readonly id: string & import("effect/Brand").Brand<"Session.Message.ID">;
106
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
107
+ readonly timeCreated: DateTime.Utc;
108
+ } | {
109
+ readonly type: "compaction";
110
+ readonly payload: {};
111
+ readonly delivery: "steer" | "queue";
112
+ readonly id: string & import("effect/Brand").Brand<"Session.Message.ID">;
113
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
114
+ readonly timeCreated: DateTime.Utc;
115
+ } | {
116
+ readonly type: "move";
117
+ readonly payload: {
118
+ readonly location: {
119
+ readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
120
+ readonly workspaceID?: (string & import("effect/Brand").Brand<"Workspace.ID">) | undefined;
121
+ };
122
+ readonly projectID: string & import("effect/Brand").Brand<"Project.ID">;
123
+ readonly subpath?: (string & import("effect/Brand").Brand<"RelativePath">) | undefined;
124
+ };
125
+ readonly delivery: "steer" | "queue";
126
+ readonly id: string & import("effect/Brand").Brand<"Session.Message.ID">;
127
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
128
+ readonly timeCreated: DateTime.Utc;
129
+ })[], NotFoundError, never>;
130
+ prompt: (input: PromptRequest) => Effect.Effect<{
131
+ readonly type: "user";
132
+ readonly payload: {
133
+ readonly text: string;
134
+ readonly metadata?: {
135
+ readonly [x: string]: unknown;
136
+ } | undefined;
137
+ readonly files?: readonly {
138
+ readonly source: {
139
+ readonly type: "inline";
140
+ } | {
141
+ readonly type: "uri";
142
+ readonly uri: string;
143
+ };
144
+ readonly data: string;
145
+ readonly mime: string;
146
+ readonly name?: string | undefined;
147
+ readonly description?: string | undefined;
148
+ readonly mention?: {
149
+ readonly start: number;
150
+ readonly end: number;
151
+ readonly text: string;
152
+ } | undefined;
153
+ }[] | undefined;
154
+ readonly agents?: readonly {
155
+ readonly name: string;
156
+ readonly mention?: {
157
+ readonly start: number;
158
+ readonly end: number;
159
+ readonly text: string;
160
+ } | undefined;
161
+ }[] | undefined;
162
+ readonly skills?: readonly {
163
+ readonly name: string & import("effect/Brand").Brand<"Skill.Name">;
164
+ readonly id: string & import("effect/Brand").Brand<"Skill.ID">;
165
+ readonly text?: string | undefined;
166
+ readonly mention?: {
167
+ readonly start: number;
168
+ readonly end: number;
169
+ readonly text: string;
170
+ } | undefined;
171
+ }[] | undefined;
172
+ };
173
+ readonly delivery: "steer" | "queue";
174
+ readonly id: string & import("effect/Brand").Brand<"Session.Message.ID">;
175
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
176
+ readonly timeCreated: DateTime.Utc;
177
+ }, NotFoundError | PromptConflictError | import("./error.js").AttachmentError | import("./error.js").SkillNotFoundError, never>;
178
+ synthetic: (input: {
179
+ id?: SessionMessage.ID;
180
+ text: string;
181
+ description?: string;
182
+ metadata?: Record<string, unknown>;
183
+ delivery?: SessionInbox.Delivery;
184
+ resume?: boolean;
185
+ }) => Effect.Effect<{
186
+ readonly type: "synthetic";
187
+ readonly payload: {
188
+ readonly text: string;
189
+ readonly description?: string | undefined;
190
+ readonly metadata?: {
191
+ readonly [x: string]: unknown;
192
+ } | undefined;
193
+ };
194
+ readonly delivery: "steer" | "queue";
195
+ readonly id: string & import("effect/Brand").Brand<"Session.Message.ID">;
196
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
197
+ readonly timeCreated: DateTime.Utc;
198
+ }, NotFoundError | SyntheticConflictError, never>;
199
+ shell: (input: {
200
+ id?: Event.ID;
201
+ command: string;
202
+ }) => Effect.Effect<void, NotFoundError, never>;
203
+ compact: (input: {
204
+ id?: SessionMessage.ID;
205
+ delivery?: SessionInbox.Delivery;
206
+ }) => Effect.Effect<{
207
+ readonly type: "compaction";
208
+ readonly payload: {};
209
+ readonly delivery: "steer" | "queue";
210
+ readonly id: string & import("effect/Brand").Brand<"Session.Message.ID">;
211
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
212
+ readonly timeCreated: DateTime.Utc;
213
+ }, NotFoundError | CompactionConflictError, never>;
214
+ wait: () => Effect.Effect<void, NotFoundError, never>;
215
+ resume: () => Effect.Effect<void, NotFoundError | import("./runner/index.js").RunError, never>;
216
+ interrupt: (options?: {
217
+ readonly continue?: boolean;
218
+ } | undefined) => Effect.Effect<boolean, never, never>;
219
+ cancelInbox: (inboxID: string & import("effect/Brand").Brand<"Session.Message.ID">) => Effect.Effect<void, NotFoundError | InboxConflictError, never>;
220
+ steerInbox: (inboxID: string & import("effect/Brand").Brand<"Session.Message.ID">) => Effect.Effect<void, NotFoundError | InboxConflictError, never>;
221
+ queueInbox: (inboxID: string & import("effect/Brand").Brand<"Session.Message.ID">) => Effect.Effect<void, NotFoundError | InboxConflictError, never>;
222
+ revert: {
223
+ stage: (input: {
224
+ messageID: SessionMessage.ID;
225
+ files?: boolean;
226
+ }) => Effect.Effect<SessionSchema.Revert, NotFoundError | MessageNotFoundError | BusyError | import("../snapshot.js").Error, never>;
227
+ clear: () => Effect.Effect<void, NotFoundError | BusyError | import("../snapshot.js").Error, never>;
228
+ commit: () => Effect.Effect<void, NotFoundError | BusyError, never>;
229
+ };
230
+ };
231
+ }, never, Scope.Scope | Bus.Service | SessionInbox.Service | SessionStore.Service | SessionExecution.Service>;
232
+ export type Handle = ReturnType<Effect.Success<ReturnType<typeof make>>["forSession"]>;