@adonis-agora/agent 0.60.1 → 0.62.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 (707) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +12 -7
  3. package/dist/configure.d.ts +7 -5
  4. package/dist/configure.d.ts.map +1 -1
  5. package/dist/configure.js +9 -5
  6. package/dist/configure.js.map +1 -1
  7. package/dist/providers/a2a_provider.d.ts +14 -0
  8. package/dist/providers/a2a_provider.d.ts.map +1 -0
  9. package/dist/providers/a2a_provider.js +136 -0
  10. package/dist/providers/a2a_provider.js.map +1 -0
  11. package/dist/providers/agent_provider.d.ts.map +1 -1
  12. package/dist/providers/agent_provider.js +195 -11
  13. package/dist/providers/agent_provider.js.map +1 -1
  14. package/dist/providers/mcp_provider.d.ts +3 -0
  15. package/dist/providers/mcp_provider.d.ts.map +1 -1
  16. package/dist/providers/mcp_provider.js +147 -62
  17. package/dist/providers/mcp_provider.js.map +1 -1
  18. package/dist/src/a2a/auth.d.ts +67 -0
  19. package/dist/src/a2a/auth.d.ts.map +1 -0
  20. package/dist/src/a2a/auth.js +47 -0
  21. package/dist/src/a2a/auth.js.map +1 -0
  22. package/dist/src/a2a/define_config.d.ts +74 -0
  23. package/dist/src/a2a/define_config.d.ts.map +1 -0
  24. package/dist/src/a2a/define_config.js +5 -0
  25. package/dist/src/a2a/define_config.js.map +1 -0
  26. package/dist/src/a2a/gate.d.ts +23 -0
  27. package/dist/src/a2a/gate.d.ts.map +1 -0
  28. package/dist/src/a2a/gate.js +56 -0
  29. package/dist/src/a2a/gate.js.map +1 -0
  30. package/dist/src/a2a/handler.d.ts +65 -0
  31. package/dist/src/a2a/handler.d.ts.map +1 -0
  32. package/dist/src/a2a/handler.js +322 -0
  33. package/dist/src/a2a/handler.js.map +1 -0
  34. package/dist/src/a2a/index.d.ts +15 -0
  35. package/dist/src/a2a/index.d.ts.map +1 -0
  36. package/dist/src/a2a/index.js +9 -0
  37. package/dist/src/a2a/index.js.map +1 -0
  38. package/dist/src/a2a/permission-tool.d.ts +17 -0
  39. package/dist/src/a2a/permission-tool.d.ts.map +1 -0
  40. package/dist/src/a2a/permission-tool.js +70 -0
  41. package/dist/src/a2a/permission-tool.js.map +1 -0
  42. package/dist/src/a2a/protocol.d.ts +100 -0
  43. package/dist/src/a2a/protocol.d.ts.map +1 -0
  44. package/dist/src/a2a/protocol.js +106 -0
  45. package/dist/src/a2a/protocol.js.map +1 -0
  46. package/dist/src/a2a/runtime.d.ts +6 -0
  47. package/dist/src/a2a/runtime.d.ts.map +1 -0
  48. package/dist/src/a2a/runtime.js +13 -0
  49. package/dist/src/a2a/runtime.js.map +1 -0
  50. package/dist/src/a2a/server_middleware.d.ts +13 -0
  51. package/dist/src/a2a/server_middleware.d.ts.map +1 -0
  52. package/dist/src/a2a/server_middleware.js +18 -0
  53. package/dist/src/a2a/server_middleware.js.map +1 -0
  54. package/dist/src/a2a/store.d.ts +79 -0
  55. package/dist/src/a2a/store.d.ts.map +1 -0
  56. package/dist/src/a2a/store.js +151 -0
  57. package/dist/src/a2a/store.js.map +1 -0
  58. package/dist/src/a2a/turn.d.ts +80 -0
  59. package/dist/src/a2a/turn.d.ts.map +1 -0
  60. package/dist/src/a2a/turn.js +211 -0
  61. package/dist/src/a2a/turn.js.map +1 -0
  62. package/dist/src/action-proposal-approval.d.ts +26 -0
  63. package/dist/src/action-proposal-approval.d.ts.map +1 -0
  64. package/dist/src/action-proposal-approval.js +28 -0
  65. package/dist/src/action-proposal-approval.js.map +1 -0
  66. package/dist/src/action-proposal-discovery.d.ts +9 -0
  67. package/dist/src/action-proposal-discovery.d.ts.map +1 -0
  68. package/dist/src/action-proposal-discovery.js +20 -0
  69. package/dist/src/action-proposal-discovery.js.map +1 -0
  70. package/dist/src/action-proposal-executor.d.ts +40 -0
  71. package/dist/src/action-proposal-executor.d.ts.map +1 -0
  72. package/dist/src/action-proposal-executor.js +80 -0
  73. package/dist/src/action-proposal-executor.js.map +1 -0
  74. package/dist/src/action-proposal-outcome.d.ts +12 -0
  75. package/dist/src/action-proposal-outcome.d.ts.map +1 -0
  76. package/dist/src/action-proposal-outcome.js +86 -0
  77. package/dist/src/action-proposal-outcome.js.map +1 -0
  78. package/dist/src/action-proposal-preparation.d.ts +20 -0
  79. package/dist/src/action-proposal-preparation.d.ts.map +1 -0
  80. package/dist/src/action-proposal-preparation.js +27 -0
  81. package/dist/src/action-proposal-preparation.js.map +1 -0
  82. package/dist/src/action-proposal-receipt.d.ts +12 -0
  83. package/dist/src/action-proposal-receipt.d.ts.map +1 -0
  84. package/dist/src/action-proposal-receipt.js +4 -0
  85. package/dist/src/action-proposal-receipt.js.map +1 -0
  86. package/dist/src/action-proposal-runtime.d.ts +9 -0
  87. package/dist/src/action-proposal-runtime.d.ts.map +1 -0
  88. package/dist/src/action-proposal-runtime.js +34 -0
  89. package/dist/src/action-proposal-runtime.js.map +1 -0
  90. package/dist/src/action-proposal-service.d.ts +47 -0
  91. package/dist/src/action-proposal-service.d.ts.map +1 -0
  92. package/dist/src/action-proposal-service.js +136 -0
  93. package/dist/src/action-proposal-service.js.map +1 -0
  94. package/dist/src/action-proposal-text.d.ts +72 -0
  95. package/dist/src/action-proposal-text.d.ts.map +1 -0
  96. package/dist/src/action-proposal-text.js +119 -0
  97. package/dist/src/action-proposal-text.js.map +1 -0
  98. package/dist/src/action-proposal-transitions.d.ts +20 -0
  99. package/dist/src/action-proposal-transitions.d.ts.map +1 -0
  100. package/dist/src/action-proposal-transitions.js +311 -0
  101. package/dist/src/action-proposal-transitions.js.map +1 -0
  102. package/dist/src/action-proposal-worker.d.ts +32 -0
  103. package/dist/src/action-proposal-worker.d.ts.map +1 -0
  104. package/dist/src/action-proposal-worker.js +140 -0
  105. package/dist/src/action-proposal-worker.js.map +1 -0
  106. package/dist/src/ag-ui/adapter.d.ts.map +1 -1
  107. package/dist/src/ag-ui/adapter.js +106 -1
  108. package/dist/src/ag-ui/adapter.js.map +1 -1
  109. package/dist/src/ag-ui/core/encoder.d.ts +105 -0
  110. package/dist/src/ag-ui/core/encoder.d.ts.map +1 -0
  111. package/dist/src/ag-ui/core/encoder.js +523 -0
  112. package/dist/src/ag-ui/core/encoder.js.map +1 -0
  113. package/dist/src/ag-ui/core/index.d.ts +12 -0
  114. package/dist/src/ag-ui/core/index.d.ts.map +1 -0
  115. package/dist/src/ag-ui/core/index.js +12 -0
  116. package/dist/src/ag-ui/core/index.js.map +1 -0
  117. package/dist/src/ag-ui/core/input.d.ts +74 -0
  118. package/dist/src/ag-ui/core/input.d.ts.map +1 -0
  119. package/dist/src/ag-ui/core/input.js +228 -0
  120. package/dist/src/ag-ui/core/input.js.map +1 -0
  121. package/dist/src/ag-ui/core/interrupt-id.d.ts +31 -0
  122. package/dist/src/ag-ui/core/interrupt-id.d.ts.map +1 -0
  123. package/dist/src/ag-ui/core/interrupt-id.js +48 -0
  124. package/dist/src/ag-ui/core/interrupt-id.js.map +1 -0
  125. package/dist/src/ag-ui/core/proposal-decision.d.ts +9 -0
  126. package/dist/src/ag-ui/core/proposal-decision.d.ts.map +1 -0
  127. package/dist/src/ag-ui/core/proposal-decision.js +20 -0
  128. package/dist/src/ag-ui/core/proposal-decision.js.map +1 -0
  129. package/dist/src/ag-ui/core/stream.d.ts +27 -0
  130. package/dist/src/ag-ui/core/stream.d.ts.map +1 -0
  131. package/dist/src/ag-ui/core/stream.js +68 -0
  132. package/dist/src/ag-ui/core/stream.js.map +1 -0
  133. package/dist/src/ag-ui/core/types.d.ts +249 -0
  134. package/dist/src/ag-ui/core/types.d.ts.map +1 -0
  135. package/dist/src/ag-ui/core/types.js +35 -0
  136. package/dist/src/ag-ui/core/types.js.map +1 -0
  137. package/dist/src/ag-ui/encoder.d.ts +3 -4
  138. package/dist/src/ag-ui/encoder.d.ts.map +1 -1
  139. package/dist/src/ag-ui/encoder.js +10 -11
  140. package/dist/src/ag-ui/encoder.js.map +1 -1
  141. package/dist/src/ag-ui/frames.d.ts +4 -5
  142. package/dist/src/ag-ui/frames.d.ts.map +1 -1
  143. package/dist/src/ag-ui/frames.js +9 -4
  144. package/dist/src/ag-ui/frames.js.map +1 -1
  145. package/dist/src/ag-ui/index.d.ts +3 -5
  146. package/dist/src/ag-ui/index.d.ts.map +1 -1
  147. package/dist/src/ag-ui/index.js +3 -5
  148. package/dist/src/ag-ui/index.js.map +1 -1
  149. package/dist/src/ag-ui/stream.d.ts +3 -4
  150. package/dist/src/ag-ui/stream.d.ts.map +1 -1
  151. package/dist/src/ag-ui/stream.js +4 -5
  152. package/dist/src/ag-ui/stream.js.map +1 -1
  153. package/dist/src/agent-deps-factory.d.ts +8 -0
  154. package/dist/src/agent-deps-factory.d.ts.map +1 -1
  155. package/dist/src/agent-deps-factory.js +12 -0
  156. package/dist/src/agent-deps-factory.js.map +1 -1
  157. package/dist/src/agent-deps.d.ts +7 -0
  158. package/dist/src/agent-deps.d.ts.map +1 -1
  159. package/dist/src/agent-deps.js.map +1 -1
  160. package/dist/src/agent-loop.d.ts +8 -3
  161. package/dist/src/agent-loop.d.ts.map +1 -1
  162. package/dist/src/agent-loop.js +398 -63
  163. package/dist/src/agent-loop.js.map +1 -1
  164. package/dist/src/agent-service.d.ts +52 -2
  165. package/dist/src/agent-service.d.ts.map +1 -1
  166. package/dist/src/agent-service.js +62 -2
  167. package/dist/src/agent-service.js.map +1 -1
  168. package/dist/src/ai-sdk/ai-sdk-model.js +4 -1
  169. package/dist/src/ai-sdk/ai-sdk-model.js.map +1 -1
  170. package/dist/src/ai-tool-ref.d.ts +6 -1
  171. package/dist/src/ai-tool-ref.d.ts.map +1 -1
  172. package/dist/src/ai-tool-ref.js +32 -16
  173. package/dist/src/ai-tool-ref.js.map +1 -1
  174. package/dist/src/chat-queue-service.d.ts.map +1 -1
  175. package/dist/src/chat-queue-service.js +4 -0
  176. package/dist/src/chat-queue-service.js.map +1 -1
  177. package/dist/src/client/chat-client.d.ts +12 -0
  178. package/dist/src/client/chat-client.d.ts.map +1 -1
  179. package/dist/src/client/chat-client.js +69 -1
  180. package/dist/src/client/chat-client.js.map +1 -1
  181. package/dist/src/client/sse.d.ts +15 -0
  182. package/dist/src/client/sse.d.ts.map +1 -1
  183. package/dist/src/client/sse.js +45 -0
  184. package/dist/src/client/sse.js.map +1 -1
  185. package/dist/src/define_config.d.ts +70 -12
  186. package/dist/src/define_config.d.ts.map +1 -1
  187. package/dist/src/define_config.js.map +1 -1
  188. package/dist/src/engine.d.ts +77 -0
  189. package/dist/src/engine.d.ts.map +1 -0
  190. package/dist/src/engine.js +27 -0
  191. package/dist/src/engine.js.map +1 -0
  192. package/dist/src/genui/builtins.d.ts +73 -3
  193. package/dist/src/genui/builtins.d.ts.map +1 -1
  194. package/dist/src/genui/builtins.js +298 -3
  195. package/dist/src/genui/builtins.js.map +1 -1
  196. package/dist/src/genui/capabilities.d.ts +24 -0
  197. package/dist/src/genui/capabilities.d.ts.map +1 -0
  198. package/dist/src/genui/capabilities.js +81 -0
  199. package/dist/src/genui/capabilities.js.map +1 -0
  200. package/dist/src/genui/catalog.d.ts +77 -0
  201. package/dist/src/genui/catalog.d.ts.map +1 -0
  202. package/dist/src/genui/catalog.js +88 -0
  203. package/dist/src/genui/catalog.js.map +1 -0
  204. package/dist/src/genui/factory.d.ts +8 -8
  205. package/dist/src/genui/factory.d.ts.map +1 -1
  206. package/dist/src/genui/factory.js +3 -1
  207. package/dist/src/genui/factory.js.map +1 -1
  208. package/dist/src/genui/index.d.ts +4 -12
  209. package/dist/src/genui/index.d.ts.map +1 -1
  210. package/dist/src/genui/index.js +6 -18
  211. package/dist/src/genui/index.js.map +1 -1
  212. package/dist/src/genui/public.d.ts +9 -0
  213. package/dist/src/genui/public.d.ts.map +1 -0
  214. package/dist/src/genui/public.js +9 -0
  215. package/dist/src/genui/public.js.map +1 -0
  216. package/dist/src/genui/registry.d.ts +65 -0
  217. package/dist/src/genui/registry.d.ts.map +1 -0
  218. package/dist/src/genui/registry.js +151 -0
  219. package/dist/src/genui/registry.js.map +1 -0
  220. package/dist/src/genui/schema.d.ts +71 -0
  221. package/dist/src/genui/schema.d.ts.map +1 -0
  222. package/dist/src/genui/schema.js +304 -0
  223. package/dist/src/genui/schema.js.map +1 -0
  224. package/dist/src/genui/text.d.ts +35 -0
  225. package/dist/src/genui/text.d.ts.map +1 -0
  226. package/dist/src/genui/text.js +156 -0
  227. package/dist/src/genui/text.js.map +1 -0
  228. package/dist/src/genui/tools.d.ts +91 -0
  229. package/dist/src/genui/tools.d.ts.map +1 -0
  230. package/dist/src/genui/tools.js +292 -0
  231. package/dist/src/genui/tools.js.map +1 -0
  232. package/dist/src/genui/tree.d.ts +56 -0
  233. package/dist/src/genui/tree.d.ts.map +1 -0
  234. package/dist/src/genui/tree.js +188 -0
  235. package/dist/src/genui/tree.js.map +1 -0
  236. package/dist/src/index.d.ts +21 -3
  237. package/dist/src/index.d.ts.map +1 -1
  238. package/dist/src/index.js +19 -2
  239. package/dist/src/index.js.map +1 -1
  240. package/dist/src/mcp/auth.d.ts +17 -1
  241. package/dist/src/mcp/auth.d.ts.map +1 -1
  242. package/dist/src/mcp/auth.js +14 -3
  243. package/dist/src/mcp/auth.js.map +1 -1
  244. package/dist/src/mcp/define_config.d.ts +81 -2
  245. package/dist/src/mcp/define_config.d.ts.map +1 -1
  246. package/dist/src/mcp/define_config.js.map +1 -1
  247. package/dist/src/mcp/index.d.ts +1 -1
  248. package/dist/src/mcp/index.d.ts.map +1 -1
  249. package/dist/src/mcp/index.js.map +1 -1
  250. package/dist/src/mcp/oauth-resource.d.ts +9 -0
  251. package/dist/src/mcp/oauth-resource.d.ts.map +1 -0
  252. package/dist/src/mcp/oauth-resource.js +16 -0
  253. package/dist/src/mcp/oauth-resource.js.map +1 -0
  254. package/dist/src/mcp/server.d.ts +5 -0
  255. package/dist/src/mcp/server.d.ts.map +1 -1
  256. package/dist/src/mcp/server.js +48 -16
  257. package/dist/src/mcp/server.js.map +1 -1
  258. package/dist/src/negotiated-tool-ui.d.ts +10 -0
  259. package/dist/src/negotiated-tool-ui.d.ts.map +1 -0
  260. package/dist/src/negotiated-tool-ui.js +57 -0
  261. package/dist/src/negotiated-tool-ui.js.map +1 -0
  262. package/dist/src/opencode/client.d.ts +202 -0
  263. package/dist/src/opencode/client.d.ts.map +1 -0
  264. package/dist/src/opencode/client.js +2 -0
  265. package/dist/src/opencode/client.js.map +1 -0
  266. package/dist/src/opencode/durable/index.d.ts +33 -0
  267. package/dist/src/opencode/durable/index.d.ts.map +1 -0
  268. package/dist/src/opencode/durable/index.js +38 -0
  269. package/dist/src/opencode/durable/index.js.map +1 -0
  270. package/dist/src/opencode/durable/runner.d.ts +36 -0
  271. package/dist/src/opencode/durable/runner.d.ts.map +1 -0
  272. package/dist/src/opencode/durable/runner.js +88 -0
  273. package/dist/src/opencode/durable/runner.js.map +1 -0
  274. package/dist/src/opencode/durable/workflow.d.ts +40 -0
  275. package/dist/src/opencode/durable/workflow.d.ts.map +1 -0
  276. package/dist/src/opencode/durable/workflow.js +106 -0
  277. package/dist/src/opencode/durable/workflow.js.map +1 -0
  278. package/dist/src/opencode/engine.d.ts +48 -0
  279. package/dist/src/opencode/engine.d.ts.map +1 -0
  280. package/dist/src/opencode/engine.js +98 -0
  281. package/dist/src/opencode/engine.js.map +1 -0
  282. package/dist/src/opencode/event-hub.d.ts +23 -0
  283. package/dist/src/opencode/event-hub.d.ts.map +1 -0
  284. package/dist/src/opencode/event-hub.js +99 -0
  285. package/dist/src/opencode/event-hub.js.map +1 -0
  286. package/dist/src/opencode/forms.d.ts +19 -0
  287. package/dist/src/opencode/forms.d.ts.map +1 -0
  288. package/dist/src/opencode/forms.js +82 -0
  289. package/dist/src/opencode/forms.js.map +1 -0
  290. package/dist/src/opencode/host.d.ts +179 -0
  291. package/dist/src/opencode/host.d.ts.map +1 -0
  292. package/dist/src/opencode/host.js +34 -0
  293. package/dist/src/opencode/host.js.map +1 -0
  294. package/dist/src/opencode/index.d.ts +15 -0
  295. package/dist/src/opencode/index.d.ts.map +1 -0
  296. package/dist/src/opencode/index.js +9 -0
  297. package/dist/src/opencode/index.js.map +1 -0
  298. package/dist/src/opencode/log.d.ts +9 -0
  299. package/dist/src/opencode/log.d.ts.map +1 -0
  300. package/dist/src/opencode/log.js +15 -0
  301. package/dist/src/opencode/log.js.map +1 -0
  302. package/dist/src/opencode/mcp.d.ts +60 -0
  303. package/dist/src/opencode/mcp.d.ts.map +1 -0
  304. package/dist/src/opencode/mcp.js +258 -0
  305. package/dist/src/opencode/mcp.js.map +1 -0
  306. package/dist/src/opencode/runner.d.ts +40 -0
  307. package/dist/src/opencode/runner.d.ts.map +1 -0
  308. package/dist/src/opencode/runner.js +125 -0
  309. package/dist/src/opencode/runner.js.map +1 -0
  310. package/dist/src/opencode/turn.d.ts +167 -0
  311. package/dist/src/opencode/turn.d.ts.map +1 -0
  312. package/dist/src/opencode/turn.js +761 -0
  313. package/dist/src/opencode/turn.js.map +1 -0
  314. package/dist/src/opencode/turns.d.ts +245 -0
  315. package/dist/src/opencode/turns.d.ts.map +1 -0
  316. package/dist/src/opencode/turns.js +867 -0
  317. package/dist/src/opencode/turns.js.map +1 -0
  318. package/dist/src/personas.d.ts.map +1 -1
  319. package/dist/src/personas.js +4 -1
  320. package/dist/src/personas.js.map +1 -1
  321. package/dist/src/react/ag-ui.d.ts +4 -2
  322. package/dist/src/react/ag-ui.d.ts.map +1 -1
  323. package/dist/src/react/ag-ui.js +2 -2
  324. package/dist/src/react/ag-ui.js.map +1 -1
  325. package/dist/src/react/client.d.ts +1 -1
  326. package/dist/src/react/client.d.ts.map +1 -1
  327. package/dist/src/react/client.js +1 -1
  328. package/dist/src/react/client.js.map +1 -1
  329. package/dist/src/react/core/ag-ui-backend.d.ts +85 -0
  330. package/dist/src/react/core/ag-ui-backend.d.ts.map +1 -0
  331. package/dist/src/react/core/ag-ui-backend.js +409 -0
  332. package/dist/src/react/core/ag-ui-backend.js.map +1 -0
  333. package/dist/src/react/core/agent-chat-transport.d.ts +187 -0
  334. package/dist/src/react/core/agent-chat-transport.d.ts.map +1 -0
  335. package/dist/src/react/core/agent-chat-transport.js +796 -0
  336. package/dist/src/react/core/agent-chat-transport.js.map +1 -0
  337. package/dist/src/react/core/approvals/countdown.d.ts +22 -0
  338. package/dist/src/react/core/approvals/countdown.d.ts.map +1 -0
  339. package/dist/src/react/core/approvals/countdown.js +39 -0
  340. package/dist/src/react/core/approvals/countdown.js.map +1 -0
  341. package/dist/src/react/core/approvals/proposals.d.ts +15 -0
  342. package/dist/src/react/core/approvals/proposals.d.ts.map +1 -0
  343. package/dist/src/react/core/approvals/proposals.js +82 -0
  344. package/dist/src/react/core/approvals/proposals.js.map +1 -0
  345. package/dist/src/react/core/approvals/use-action-proposals.d.ts +10 -0
  346. package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -0
  347. package/dist/src/react/core/approvals/use-action-proposals.js +86 -0
  348. package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -0
  349. package/dist/src/react/core/attachments/files.d.ts +39 -0
  350. package/dist/src/react/core/attachments/files.d.ts.map +1 -0
  351. package/dist/src/react/core/attachments/files.js +89 -0
  352. package/dist/src/react/core/attachments/files.js.map +1 -0
  353. package/dist/src/react/core/attachments/use-attachments.d.ts +106 -0
  354. package/dist/src/react/core/attachments/use-attachments.d.ts.map +1 -0
  355. package/dist/src/react/core/attachments/use-attachments.js +217 -0
  356. package/dist/src/react/core/attachments/use-attachments.js.map +1 -0
  357. package/dist/src/react/core/backend.d.ts +234 -0
  358. package/dist/src/react/core/backend.d.ts.map +1 -0
  359. package/dist/src/react/core/backend.js +21 -0
  360. package/dist/src/react/core/backend.js.map +1 -0
  361. package/dist/src/react/core/background-runs.d.ts +32 -0
  362. package/dist/src/react/core/background-runs.d.ts.map +1 -0
  363. package/dist/src/react/core/background-runs.js +47 -0
  364. package/dist/src/react/core/background-runs.js.map +1 -0
  365. package/dist/src/react/core/catalog/use-agents.d.ts +31 -0
  366. package/dist/src/react/core/catalog/use-agents.d.ts.map +1 -0
  367. package/dist/src/react/core/catalog/use-agents.js +28 -0
  368. package/dist/src/react/core/catalog/use-agents.js.map +1 -0
  369. package/dist/src/react/core/catalog/use-models.d.ts +41 -0
  370. package/dist/src/react/core/catalog/use-models.d.ts.map +1 -0
  371. package/dist/src/react/core/catalog/use-models.js +35 -0
  372. package/dist/src/react/core/catalog/use-models.js.map +1 -0
  373. package/dist/src/react/core/catalog/use-resource.d.ts +12 -0
  374. package/dist/src/react/core/catalog/use-resource.d.ts.map +1 -0
  375. package/dist/src/react/core/catalog/use-resource.js +41 -0
  376. package/dist/src/react/core/catalog/use-resource.js.map +1 -0
  377. package/dist/src/react/core/client-wire.d.ts +14 -0
  378. package/dist/src/react/core/client-wire.d.ts.map +1 -0
  379. package/dist/src/react/core/client-wire.js +2 -0
  380. package/dist/src/react/core/client-wire.js.map +1 -0
  381. package/dist/src/react/core/client.d.ts +222 -0
  382. package/dist/src/react/core/client.d.ts.map +1 -0
  383. package/dist/src/react/core/client.js +435 -0
  384. package/dist/src/react/core/client.js.map +1 -0
  385. package/dist/src/react/core/components/ambient-ui.d.ts +22 -0
  386. package/dist/src/react/core/components/ambient-ui.d.ts.map +1 -0
  387. package/dist/src/react/core/components/ambient-ui.js +30 -0
  388. package/dist/src/react/core/components/ambient-ui.js.map +1 -0
  389. package/dist/src/react/core/components/chat-input.d.ts +44 -0
  390. package/dist/src/react/core/components/chat-input.d.ts.map +1 -0
  391. package/dist/src/react/core/components/chat-input.js +69 -0
  392. package/dist/src/react/core/components/chat-input.js.map +1 -0
  393. package/dist/src/react/core/components/index.d.ts +7 -0
  394. package/dist/src/react/core/components/index.d.ts.map +1 -0
  395. package/dist/src/react/core/components/index.js +7 -0
  396. package/dist/src/react/core/components/index.js.map +1 -0
  397. package/dist/src/react/core/components/message-item.d.ts +101 -0
  398. package/dist/src/react/core/components/message-item.d.ts.map +1 -0
  399. package/dist/src/react/core/components/message-item.js +118 -0
  400. package/dist/src/react/core/components/message-item.js.map +1 -0
  401. package/dist/src/react/core/components/message-list.d.ts +85 -0
  402. package/dist/src/react/core/components/message-list.d.ts.map +1 -0
  403. package/dist/src/react/core/components/message-list.js +45 -0
  404. package/dist/src/react/core/components/message-list.js.map +1 -0
  405. package/dist/src/react/core/components/speech-languages.d.ts +22 -0
  406. package/dist/src/react/core/components/speech-languages.d.ts.map +1 -0
  407. package/dist/src/react/core/components/speech-languages.js +38 -0
  408. package/dist/src/react/core/components/speech-languages.js.map +1 -0
  409. package/dist/src/react/core/components/use-speech-recognition.d.ts +19 -0
  410. package/dist/src/react/core/components/use-speech-recognition.d.ts.map +1 -0
  411. package/dist/src/react/core/components/use-speech-recognition.js +92 -0
  412. package/dist/src/react/core/components/use-speech-recognition.js.map +1 -0
  413. package/dist/src/react/core/composer/index.d.ts +4 -0
  414. package/dist/src/react/core/composer/index.d.ts.map +1 -0
  415. package/dist/src/react/core/composer/index.js +4 -0
  416. package/dist/src/react/core/composer/index.js.map +1 -0
  417. package/dist/src/react/core/composer/model.d.ts +83 -0
  418. package/dist/src/react/core/composer/model.d.ts.map +1 -0
  419. package/dist/src/react/core/composer/model.js +53 -0
  420. package/dist/src/react/core/composer/model.js.map +1 -0
  421. package/dist/src/react/core/composer/skills-source.d.ts +29 -0
  422. package/dist/src/react/core/composer/skills-source.d.ts.map +1 -0
  423. package/dist/src/react/core/composer/skills-source.js +61 -0
  424. package/dist/src/react/core/composer/skills-source.js.map +1 -0
  425. package/dist/src/react/core/composer/use-composer-autocomplete.d.ts +78 -0
  426. package/dist/src/react/core/composer/use-composer-autocomplete.d.ts.map +1 -0
  427. package/dist/src/react/core/composer/use-composer-autocomplete.js +244 -0
  428. package/dist/src/react/core/composer/use-composer-autocomplete.js.map +1 -0
  429. package/dist/src/react/core/config/use-agent-config.d.ts +21 -0
  430. package/dist/src/react/core/config/use-agent-config.d.ts.map +1 -0
  431. package/dist/src/react/core/config/use-agent-config.js +57 -0
  432. package/dist/src/react/core/config/use-agent-config.js.map +1 -0
  433. package/dist/src/react/core/elicitation/answers.d.ts +22 -0
  434. package/dist/src/react/core/elicitation/answers.d.ts.map +1 -0
  435. package/dist/src/react/core/elicitation/answers.js +65 -0
  436. package/dist/src/react/core/elicitation/answers.js.map +1 -0
  437. package/dist/src/react/core/feedback/use-message-feedback.d.ts +32 -0
  438. package/dist/src/react/core/feedback/use-message-feedback.d.ts.map +1 -0
  439. package/dist/src/react/core/feedback/use-message-feedback.js +106 -0
  440. package/dist/src/react/core/feedback/use-message-feedback.js.map +1 -0
  441. package/dist/src/react/core/genui/generative-ui.d.ts +76 -0
  442. package/dist/src/react/core/genui/generative-ui.d.ts.map +1 -0
  443. package/dist/src/react/core/genui/generative-ui.js +210 -0
  444. package/dist/src/react/core/genui/generative-ui.js.map +1 -0
  445. package/dist/src/react/core/genui/index.d.ts +5 -0
  446. package/dist/src/react/core/genui/index.d.ts.map +1 -0
  447. package/dist/src/react/core/genui/index.js +5 -0
  448. package/dist/src/react/core/genui/index.js.map +1 -0
  449. package/dist/src/react/core/genui/json-render.d.ts +54 -0
  450. package/dist/src/react/core/genui/json-render.d.ts.map +1 -0
  451. package/dist/src/react/core/genui/json-render.js +64 -0
  452. package/dist/src/react/core/genui/json-render.js.map +1 -0
  453. package/dist/src/react/core/genui/playwright.d.ts +12 -0
  454. package/dist/src/react/core/genui/playwright.d.ts.map +1 -0
  455. package/dist/src/react/core/genui/playwright.js +141 -0
  456. package/dist/src/react/core/genui/playwright.js.map +1 -0
  457. package/dist/src/react/core/genui/react-registry.d.ts +22 -0
  458. package/dist/src/react/core/genui/react-registry.d.ts.map +1 -0
  459. package/dist/src/react/core/genui/react-registry.js +72 -0
  460. package/dist/src/react/core/genui/react-registry.js.map +1 -0
  461. package/dist/src/react/core/genui/server.d.ts +32 -0
  462. package/dist/src/react/core/genui/server.d.ts.map +1 -0
  463. package/dist/src/react/core/genui/server.js +66 -0
  464. package/dist/src/react/core/genui/server.js.map +1 -0
  465. package/dist/src/react/core/genui/types.d.ts +98 -0
  466. package/dist/src/react/core/genui/types.d.ts.map +1 -0
  467. package/dist/src/react/core/genui/types.js +3 -0
  468. package/dist/src/react/core/genui/types.js.map +1 -0
  469. package/dist/src/react/core/genui/use-generative-ui.d.ts +42 -0
  470. package/dist/src/react/core/genui/use-generative-ui.d.ts.map +1 -0
  471. package/dist/src/react/core/genui/use-generative-ui.js +186 -0
  472. package/dist/src/react/core/genui/use-generative-ui.js.map +1 -0
  473. package/dist/src/react/core/http-error.d.ts +33 -0
  474. package/dist/src/react/core/http-error.d.ts.map +1 -0
  475. package/dist/src/react/core/http-error.js +47 -0
  476. package/dist/src/react/core/http-error.js.map +1 -0
  477. package/dist/src/react/core/index.d.ts +35 -0
  478. package/dist/src/react/core/index.d.ts.map +1 -0
  479. package/dist/src/react/core/index.js +34 -0
  480. package/dist/src/react/core/index.js.map +1 -0
  481. package/dist/src/react/core/markdown/agent-markdown.d.ts +39 -0
  482. package/dist/src/react/core/markdown/agent-markdown.d.ts.map +1 -0
  483. package/dist/src/react/core/markdown/agent-markdown.js +22 -0
  484. package/dist/src/react/core/markdown/agent-markdown.js.map +1 -0
  485. package/dist/src/react/core/markdown/index.d.ts +2 -0
  486. package/dist/src/react/core/markdown/index.d.ts.map +1 -0
  487. package/dist/src/react/core/markdown/index.js +2 -0
  488. package/dist/src/react/core/markdown/index.js.map +1 -0
  489. package/dist/src/react/core/media/index.d.ts +64 -0
  490. package/dist/src/react/core/media/index.d.ts.map +1 -0
  491. package/dist/src/react/core/media/index.js +135 -0
  492. package/dist/src/react/core/media/index.js.map +1 -0
  493. package/dist/src/react/core/media/tus.d.ts +13 -0
  494. package/dist/src/react/core/media/tus.d.ts.map +1 -0
  495. package/dist/src/react/core/media/tus.js +59 -0
  496. package/dist/src/react/core/media/tus.js.map +1 -0
  497. package/dist/src/react/core/presentation/phrasing.d.ts +25 -0
  498. package/dist/src/react/core/presentation/phrasing.d.ts.map +1 -0
  499. package/dist/src/react/core/presentation/phrasing.js +58 -0
  500. package/dist/src/react/core/presentation/phrasing.js.map +1 -0
  501. package/dist/src/react/core/presentation/result-view.d.ts +43 -0
  502. package/dist/src/react/core/presentation/result-view.d.ts.map +1 -0
  503. package/dist/src/react/core/presentation/result-view.js +90 -0
  504. package/dist/src/react/core/presentation/result-view.js.map +1 -0
  505. package/dist/src/react/core/presentation/tool-activity.d.ts +106 -0
  506. package/dist/src/react/core/presentation/tool-activity.d.ts.map +1 -0
  507. package/dist/src/react/core/presentation/tool-activity.js +165 -0
  508. package/dist/src/react/core/presentation/tool-activity.js.map +1 -0
  509. package/dist/src/react/core/presentation/use-tool-catalog.d.ts +39 -0
  510. package/dist/src/react/core/presentation/use-tool-catalog.d.ts.map +1 -0
  511. package/dist/src/react/core/presentation/use-tool-catalog.js +77 -0
  512. package/dist/src/react/core/presentation/use-tool-catalog.js.map +1 -0
  513. package/dist/src/react/core/provider.d.ts +68 -0
  514. package/dist/src/react/core/provider.d.ts.map +1 -0
  515. package/dist/src/react/core/provider.js +61 -0
  516. package/dist/src/react/core/provider.js.map +1 -0
  517. package/dist/src/react/core/queue/model.d.ts +73 -0
  518. package/dist/src/react/core/queue/model.d.ts.map +1 -0
  519. package/dist/src/react/core/queue/model.js +2 -0
  520. package/dist/src/react/core/queue/model.js.map +1 -0
  521. package/dist/src/react/core/quota/use-quota.d.ts +35 -0
  522. package/dist/src/react/core/quota/use-quota.d.ts.map +1 -0
  523. package/dist/src/react/core/quota/use-quota.js +47 -0
  524. package/dist/src/react/core/quota/use-quota.js.map +1 -0
  525. package/dist/src/react/core/reasoning/timing.d.ts +38 -0
  526. package/dist/src/react/core/reasoning/timing.d.ts.map +1 -0
  527. package/dist/src/react/core/reasoning/timing.js +73 -0
  528. package/dist/src/react/core/reasoning/timing.js.map +1 -0
  529. package/dist/src/react/core/run-errors.d.ts +37 -0
  530. package/dist/src/react/core/run-errors.d.ts.map +1 -0
  531. package/dist/src/react/core/run-errors.js +37 -0
  532. package/dist/src/react/core/run-errors.js.map +1 -0
  533. package/dist/src/react/core/stored-message-to-ui-message.d.ts +4 -0
  534. package/dist/src/react/core/stored-message-to-ui-message.d.ts.map +1 -0
  535. package/dist/src/react/core/stored-message-to-ui-message.js +216 -0
  536. package/dist/src/react/core/stored-message-to-ui-message.js.map +1 -0
  537. package/dist/src/react/core/stored-thread-to-ui-messages.d.ts +82 -0
  538. package/dist/src/react/core/stored-thread-to-ui-messages.d.ts.map +1 -0
  539. package/dist/src/react/core/stored-thread-to-ui-messages.js +116 -0
  540. package/dist/src/react/core/stored-thread-to-ui-messages.js.map +1 -0
  541. package/dist/src/react/core/threads/threads-events.d.ts +22 -0
  542. package/dist/src/react/core/threads/threads-events.d.ts.map +1 -0
  543. package/dist/src/react/core/threads/threads-events.js +21 -0
  544. package/dist/src/react/core/threads/threads-events.js.map +1 -0
  545. package/dist/src/react/core/threads/use-threads.d.ts +31 -0
  546. package/dist/src/react/core/threads/use-threads.d.ts.map +1 -0
  547. package/dist/src/react/core/threads/use-threads.js +81 -0
  548. package/dist/src/react/core/threads/use-threads.js.map +1 -0
  549. package/dist/src/react/core/transcript/index.d.ts +4 -0
  550. package/dist/src/react/core/transcript/index.d.ts.map +1 -0
  551. package/dist/src/react/core/transcript/index.js +4 -0
  552. package/dist/src/react/core/transcript/index.js.map +1 -0
  553. package/dist/src/react/core/transcript/model.d.ts +399 -0
  554. package/dist/src/react/core/transcript/model.d.ts.map +1 -0
  555. package/dist/src/react/core/transcript/model.js +725 -0
  556. package/dist/src/react/core/transcript/model.js.map +1 -0
  557. package/dist/src/react/core/transcript/use-chat-transcript.d.ts +254 -0
  558. package/dist/src/react/core/transcript/use-chat-transcript.d.ts.map +1 -0
  559. package/dist/src/react/core/transcript/use-chat-transcript.js +572 -0
  560. package/dist/src/react/core/transcript/use-chat-transcript.js.map +1 -0
  561. package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts +33 -0
  562. package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts.map +1 -0
  563. package/dist/src/react/core/transcript/use-stick-to-bottom.js +48 -0
  564. package/dist/src/react/core/transcript/use-stick-to-bottom.js.map +1 -0
  565. package/dist/src/react/core/use-agent-chat.d.ts +341 -0
  566. package/dist/src/react/core/use-agent-chat.d.ts.map +1 -0
  567. package/dist/src/react/core/use-agent-chat.js +1118 -0
  568. package/dist/src/react/core/use-agent-chat.js.map +1 -0
  569. package/dist/src/react/genui/index.d.ts +1 -7
  570. package/dist/src/react/genui/index.d.ts.map +1 -1
  571. package/dist/src/react/genui/index.js +1 -7
  572. package/dist/src/react/genui/index.js.map +1 -1
  573. package/dist/src/react/genui/json-render.d.ts +1 -5
  574. package/dist/src/react/genui/json-render.d.ts.map +1 -1
  575. package/dist/src/react/genui/json-render.js +1 -5
  576. package/dist/src/react/genui/json-render.js.map +1 -1
  577. package/dist/src/react/genui/server.d.ts +2 -0
  578. package/dist/src/react/genui/server.d.ts.map +1 -0
  579. package/dist/src/react/genui/server.js +2 -0
  580. package/dist/src/react/genui/server.js.map +1 -0
  581. package/dist/src/react/genui/server_playwright.d.ts +2 -0
  582. package/dist/src/react/genui/server_playwright.d.ts.map +1 -0
  583. package/dist/src/react/genui/server_playwright.js +2 -0
  584. package/dist/src/react/genui/server_playwright.js.map +1 -0
  585. package/dist/src/react/index.d.ts +5 -7
  586. package/dist/src/react/index.d.ts.map +1 -1
  587. package/dist/src/react/index.js +5 -7
  588. package/dist/src/react/index.js.map +1 -1
  589. package/dist/src/react/markdown.d.ts +1 -6
  590. package/dist/src/react/markdown.d.ts.map +1 -1
  591. package/dist/src/react/markdown.js +1 -6
  592. package/dist/src/react/markdown.js.map +1 -1
  593. package/dist/src/react/media.d.ts +1 -17
  594. package/dist/src/react/media.d.ts.map +1 -1
  595. package/dist/src/react/media.js +1 -17
  596. package/dist/src/react/media.js.map +1 -1
  597. package/dist/src/refusal.d.ts +3 -0
  598. package/dist/src/refusal.d.ts.map +1 -0
  599. package/dist/src/refusal.js +3 -0
  600. package/dist/src/refusal.js.map +1 -0
  601. package/dist/src/spi/action-proposal-outcome-store.d.ts +43 -0
  602. package/dist/src/spi/action-proposal-outcome-store.d.ts.map +1 -0
  603. package/dist/src/spi/action-proposal-outcome-store.js +2 -0
  604. package/dist/src/spi/action-proposal-outcome-store.js.map +1 -0
  605. package/dist/src/spi/action-proposal-store.d.ts +152 -0
  606. package/dist/src/spi/action-proposal-store.d.ts.map +1 -0
  607. package/dist/src/spi/action-proposal-store.js +2 -0
  608. package/dist/src/spi/action-proposal-store.js.map +1 -0
  609. package/dist/src/spi/action-proposal-worker-store.d.ts +17 -0
  610. package/dist/src/spi/action-proposal-worker-store.d.ts.map +1 -0
  611. package/dist/src/spi/action-proposal-worker-store.js +2 -0
  612. package/dist/src/spi/action-proposal-worker-store.js.map +1 -0
  613. package/dist/src/spi/agent-runner.d.ts +6 -0
  614. package/dist/src/spi/agent-runner.d.ts.map +1 -1
  615. package/dist/src/spi/agent-store.d.ts +5 -0
  616. package/dist/src/spi/agent-store.d.ts.map +1 -1
  617. package/dist/src/spi/agent-store.js.map +1 -1
  618. package/dist/src/spi/approval-policy.d.ts +3 -0
  619. package/dist/src/spi/approval-policy.d.ts.map +1 -1
  620. package/dist/src/spi/approval-policy.js +8 -1
  621. package/dist/src/spi/approval-policy.js.map +1 -1
  622. package/dist/src/spi/background-actor-resolver.d.ts +9 -0
  623. package/dist/src/spi/background-actor-resolver.d.ts.map +1 -0
  624. package/dist/src/spi/background-actor-resolver.js +2 -0
  625. package/dist/src/spi/background-actor-resolver.js.map +1 -0
  626. package/dist/src/spi/chat-queue.d.ts +7 -1
  627. package/dist/src/spi/chat-queue.d.ts.map +1 -1
  628. package/dist/src/spi/chat-queue.js.map +1 -1
  629. package/dist/src/spi/protocol-adapter.d.ts +3 -3
  630. package/dist/src/spi/roles-policy.d.ts +7 -0
  631. package/dist/src/spi/roles-policy.d.ts.map +1 -1
  632. package/dist/src/spi/token-stream-sink.d.ts +9 -0
  633. package/dist/src/spi/token-stream-sink.d.ts.map +1 -1
  634. package/dist/src/spi/token-stream-sink.js.map +1 -1
  635. package/dist/src/spi/tool.d.ts +40 -3
  636. package/dist/src/spi/tool.d.ts.map +1 -1
  637. package/dist/src/sse.d.ts.map +1 -1
  638. package/dist/src/sse.js +6 -0
  639. package/dist/src/sse.js.map +1 -1
  640. package/dist/src/stores/lucid-action-proposal-store.d.ts +55 -0
  641. package/dist/src/stores/lucid-action-proposal-store.d.ts.map +1 -0
  642. package/dist/src/stores/lucid-action-proposal-store.js +465 -0
  643. package/dist/src/stores/lucid-action-proposal-store.js.map +1 -0
  644. package/dist/src/stores/lucid-schema.d.ts +8 -6
  645. package/dist/src/stores/lucid-schema.d.ts.map +1 -1
  646. package/dist/src/stores/lucid-schema.js +61 -6
  647. package/dist/src/stores/lucid-schema.js.map +1 -1
  648. package/dist/src/stores/lucid.d.ts +4 -2
  649. package/dist/src/stores/lucid.d.ts.map +1 -1
  650. package/dist/src/stores/lucid.js +46 -14
  651. package/dist/src/stores/lucid.js.map +1 -1
  652. package/dist/src/stores/sqlite-transactions.d.ts +8 -0
  653. package/dist/src/stores/sqlite-transactions.d.ts.map +1 -0
  654. package/dist/src/stores/sqlite-transactions.js +24 -0
  655. package/dist/src/stores/sqlite-transactions.js.map +1 -0
  656. package/dist/src/stream-events.d.ts +4 -0
  657. package/dist/src/stream-events.d.ts.map +1 -1
  658. package/dist/src/testing/chat-queue-store-contract.d.ts.map +1 -1
  659. package/dist/src/testing/chat-queue-store-contract.js +4 -0
  660. package/dist/src/testing/chat-queue-store-contract.js.map +1 -1
  661. package/dist/src/testing/in-memory-action-proposal-store.d.ts +32 -0
  662. package/dist/src/testing/in-memory-action-proposal-store.d.ts.map +1 -0
  663. package/dist/src/testing/in-memory-action-proposal-store.js +159 -0
  664. package/dist/src/testing/in-memory-action-proposal-store.js.map +1 -0
  665. package/dist/src/testing/in-memory-store.d.ts +9 -1
  666. package/dist/src/testing/in-memory-store.d.ts.map +1 -1
  667. package/dist/src/testing/in-memory-store.js +80 -1
  668. package/dist/src/testing/in-memory-store.js.map +1 -1
  669. package/dist/src/testing/index.d.ts +1 -0
  670. package/dist/src/testing/index.d.ts.map +1 -1
  671. package/dist/src/testing/index.js +1 -0
  672. package/dist/src/testing/index.js.map +1 -1
  673. package/dist/src/tool-discovery.d.ts +1 -1
  674. package/dist/src/tool-discovery.d.ts.map +1 -1
  675. package/dist/src/tool-discovery.js +12 -1
  676. package/dist/src/tool-discovery.js.map +1 -1
  677. package/dist/src/tool-registry.d.ts +28 -1
  678. package/dist/src/tool-registry.d.ts.map +1 -1
  679. package/dist/src/tool-registry.js +85 -3
  680. package/dist/src/tool-registry.js.map +1 -1
  681. package/dist/src/tool-result-presentation.d.ts +12 -0
  682. package/dist/src/tool-result-presentation.d.ts.map +1 -0
  683. package/dist/src/tool-result-presentation.js +44 -0
  684. package/dist/src/tool-result-presentation.js.map +1 -0
  685. package/dist/src/tool-retry.d.ts +0 -11
  686. package/dist/src/tool-retry.d.ts.map +1 -1
  687. package/dist/src/tool-retry.js +5 -1
  688. package/dist/src/tool-retry.js.map +1 -1
  689. package/dist/src/tool-ui.d.ts +4 -1
  690. package/dist/src/tool-ui.d.ts.map +1 -1
  691. package/dist/src/tool-ui.js +32 -4
  692. package/dist/src/tool-ui.js.map +1 -1
  693. package/dist/src/types.d.ts +48 -2
  694. package/dist/src/types.d.ts.map +1 -1
  695. package/dist/src/ui-capabilities.d.ts +2 -0
  696. package/dist/src/ui-capabilities.d.ts.map +1 -0
  697. package/dist/src/ui-capabilities.js +4 -0
  698. package/dist/src/ui-capabilities.js.map +1 -0
  699. package/dist/stubs/database/migrations/add_action_proposal_discovery.stub +24 -0
  700. package/dist/stubs/database/migrations/add_action_proposal_runtime.stub +19 -0
  701. package/dist/stubs/database/migrations/create_agent_tables.stub +3 -3
  702. package/package.json +123 -22
  703. package/skills/agent-governance/SKILL.md +12 -4
  704. package/skills/agent-personas-agents/SKILL.md +2 -1
  705. package/skills/agent-setup/SKILL.md +36 -13
  706. package/skills/agent-testing/SKILL.md +22 -0
  707. package/skills/agent-tools/SKILL.md +54 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/opencode/durable/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { BaseWorkflow, type WorkflowCtx, type WorkflowEngine } from '@adonis-agora/durable';
2
+ import type { AgentRunInput } from '../../types.js';
3
+ import type { OpenCodeTurns } from '../turns.js';
4
+ export declare const OPENCODE_RUN_WORKFLOW = "agora.agent.opencode.run";
5
+ /** The token a person's answer to `toolCallId` is signalled under — the library's own convention. */
6
+ export declare function decisionToken(runId: string, toolCallId: string): string;
7
+ /**
8
+ * A suspend / continue-as-new the runtime throws THROUGH the body — control flow, not a failure.
9
+ * Recognised by name, so a second copy of `@adonis-agora/durable` (another class identity) still is.
10
+ */
11
+ export declare function isControlFlowSignal(error: unknown): boolean;
12
+ /**
13
+ * An OpenCode turn as a durable workflow:
14
+ *
15
+ * begin → prompt → observe:0 → [ wait for a person (signal `tool:<run>:<call>`) → reply:n → observe:n+1 ]* → finish
16
+ *
17
+ * Every step is checkpointed. A turn parked on a person is a suspended run with a signal waiter: an
18
+ * app restart loses nothing, and the decision resumes it on whichever process takes it — replaying
19
+ * the steps from their checkpoints and replying to OpenCode from there (`OpenCodeTurns` rebuilds the
20
+ * live turn, and re-prompts a fresh session when OpenCode itself restarted meanwhile). A process
21
+ * that dies while OpenCode works re-runs that `observe` step, which catches up on what OpenCode
22
+ * asked while nobody listened.
23
+ *
24
+ * Built by the engine's factory with the turn steps (see `registerOpenCodeWorkflow`), not by the
25
+ * container.
26
+ */
27
+ export declare class OpenCodeRunWorkflow extends BaseWorkflow {
28
+ private readonly turns;
29
+ private readonly engine?;
30
+ static workflow: {
31
+ name: string;
32
+ version: string;
33
+ };
34
+ constructor(turns: OpenCodeTurns, engine?: WorkflowEngine | undefined);
35
+ run(ctx: WorkflowCtx, input: AgentRunInput): Promise<{
36
+ outcome: string;
37
+ }>;
38
+ private cancelled;
39
+ }
40
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../../../src/opencode/durable/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5F,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,gBAAgB,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAEhE,eAAO,MAAM,qBAAqB,6BAA6B,CAAC;AAEhE,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D;AAOD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IAIjD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAJ1B,OAAgB,QAAQ;;;MAAiD;IAEzE,YACmB,KAAK,EAAE,aAAa,EACpB,MAAM,CAAC,EAAE,cAAc,YAAA,EAGzC;IAEK,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAmD9E;YAEa,SAAS;CAQxB"}
@@ -0,0 +1,106 @@
1
+ import { BaseWorkflow } from '@adonis-agora/durable';
2
+ import { errorText } from '../log.js';
3
+ export const OPENCODE_RUN_WORKFLOW = 'agora.agent.opencode.run';
4
+ /** The token a person's answer to `toolCallId` is signalled under — the library's own convention. */
5
+ export function decisionToken(runId, toolCallId) {
6
+ return `tool:${runId}:${toolCallId}`;
7
+ }
8
+ /**
9
+ * A suspend / continue-as-new the runtime throws THROUGH the body — control flow, not a failure.
10
+ * Recognised by name, so a second copy of `@adonis-agora/durable` (another class identity) still is.
11
+ */
12
+ export function isControlFlowSignal(error) {
13
+ const name = error?.name;
14
+ return name === 'WorkflowSuspended' || name === 'ContinueAsNew';
15
+ }
16
+ /** The runtime's `SignalTimeoutError`, recognised by name for the same reason. */
17
+ function isSignalTimeout(error) {
18
+ return error instanceof Error && error.name === 'SignalTimeoutError';
19
+ }
20
+ /**
21
+ * An OpenCode turn as a durable workflow:
22
+ *
23
+ * begin → prompt → observe:0 → [ wait for a person (signal `tool:<run>:<call>`) → reply:n → observe:n+1 ]* → finish
24
+ *
25
+ * Every step is checkpointed. A turn parked on a person is a suspended run with a signal waiter: an
26
+ * app restart loses nothing, and the decision resumes it on whichever process takes it — replaying
27
+ * the steps from their checkpoints and replying to OpenCode from there (`OpenCodeTurns` rebuilds the
28
+ * live turn, and re-prompts a fresh session when OpenCode itself restarted meanwhile). A process
29
+ * that dies while OpenCode works re-runs that `observe` step, which catches up on what OpenCode
30
+ * asked while nobody listened.
31
+ *
32
+ * Built by the engine's factory with the turn steps (see `registerOpenCodeWorkflow`), not by the
33
+ * container.
34
+ */
35
+ export class OpenCodeRunWorkflow extends BaseWorkflow {
36
+ turns;
37
+ engine;
38
+ static workflow = { name: OPENCODE_RUN_WORKFLOW, version: '1' };
39
+ constructor(turns, engine) {
40
+ super();
41
+ this.turns = turns;
42
+ this.engine = engine;
43
+ }
44
+ async run(ctx, input) {
45
+ const turns = this.turns;
46
+ // `@adonis-agora/durable` >= 0.43.3 never runs one run twice at once in a process, so a step
47
+ // that talks to OpenCode (a `reply`, an `observe`) runs once per execution of the run.
48
+ const step = (name, body) => ctx.localStep(name, body);
49
+ try {
50
+ const begun = await step('begin', async () => ({
51
+ handle: await turns.begin(ctx.runId, input, true),
52
+ startedAt: Date.now(),
53
+ }));
54
+ let handle = begun.handle;
55
+ await step('prompt', async () => {
56
+ await turns.prompt(ctx.runId, input, handle);
57
+ return true;
58
+ });
59
+ for (let n = 0;; n += 1) {
60
+ const milestone = await step(`observe:${n}`, () => turns.observe(ctx.runId, input, handle));
61
+ if (milestone.kind === 'finished') {
62
+ await step('finish', async () => {
63
+ // A cancel settles the run itself (it may be parked where no step runs again).
64
+ if (await this.cancelled(ctx.runId))
65
+ turns.drop(ctx.runId);
66
+ else {
67
+ await turns.settle(ctx.runId, input, milestone.outcome, Date.now() - begun.startedAt);
68
+ }
69
+ return true;
70
+ });
71
+ return { outcome: milestone.outcome.status };
72
+ }
73
+ let reply;
74
+ try {
75
+ reply = await ctx.waitForSignal(decisionToken(ctx.runId, milestone.ask.id), milestone.timeoutMs !== undefined ? { timeoutMs: milestone.timeoutMs } : undefined);
76
+ }
77
+ catch (error) {
78
+ if (!isSignalTimeout(error))
79
+ throw error;
80
+ reply = { approved: false, expired: true };
81
+ }
82
+ const ask = milestone.ask;
83
+ handle = await step(`reply:${n}`, () => turns.reply(ctx.runId, input, handle, ask, reply));
84
+ }
85
+ }
86
+ catch (error) {
87
+ if (isControlFlowSignal(error))
88
+ throw error;
89
+ await step('fail', async () => {
90
+ await turns.settleFailed(ctx.runId, input, errorText(error, 'the turn failed'));
91
+ return true;
92
+ });
93
+ return { outcome: 'failed' };
94
+ }
95
+ }
96
+ async cancelled(runId) {
97
+ try {
98
+ const status = (await this.engine?.getRun(runId))?.status;
99
+ return status === 'cancelling' || status === 'cancelled';
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ }
106
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../../src/opencode/durable/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyC,MAAM,uBAAuB,CAAC;AAG5F,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAEhE,qGAAqG;AACrG,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,UAAkB;IAC7D,OAAO,QAAQ,KAAK,IAAI,UAAU,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;IACxD,OAAO,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,eAAe,CAAC;AAClE,CAAC;AAED,kFAAkF;AAClF,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAIhC,KAAK;IACL,MAAM;IAJzB,MAAM,CAAU,QAAQ,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAEzE,YACmB,KAAoB,EACpB,MAAuB;QAExC,KAAK,EAAE,CAAC;qBAHS,KAAK;sBACL,MAAM;IAGzB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAgB,EAAE,KAAoB;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,6FAA6F;QAC7F,uFAAuF;QACvF,MAAM,IAAI,GAAG,CAAI,IAAY,EAAE,IAAsB,EAAc,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChG,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC7C,MAAM,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;gBACjD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC,CAAC;YACJ,IAAI,MAAM,GAAkB,KAAK,CAAC,MAAM,CAAC;YACzC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;gBAC9B,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAc,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,CAC3D,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CACxC,CAAC;gBACF,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAClC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;wBAC9B,+EAA+E;wBAC/E,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;4BAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;6BACtD,CAAC;4BACJ,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;wBACxF,CAAC;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CAAC;oBACH,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/C,CAAC;gBACD,IAAI,KAAiB,CAAC;gBACtB,IAAI,CAAC;oBACH,KAAK,GAAG,MAAM,GAAG,CAAC,aAAa,CAC7B,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAC1C,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CACnF,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;wBAAE,MAAM,KAAK,CAAC;oBACzC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAqB,CAAC;gBAChE,CAAC;gBACD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;gBAC1B,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,mBAAmB,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAC5C,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;gBAC5B,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;gBAChF,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,KAAa;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAA4B,CAAC;YAChF,OAAO,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,WAAW,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ import type { AgentEngine, AgentEngineContext } from '../engine.js';
2
+ import type { AgentRunner } from '../spi/agent-runner.js';
3
+ import type { ProtocolAdapter } from '../spi/protocol-adapter.js';
4
+ import { type OpenCodeHost, type OpenCodeSessionStore } from './host.js';
5
+ import { OpenCodeMcpEndpoint } from './mcp.js';
6
+ import { type OpenCodeEngineSettings, OpenCodeTurns } from './turns.js';
7
+ /** A class the container builds (`@inject()` its services into the constructor). */
8
+ export type OpenCodeClass<T> = abstract new (...args: any[]) => T;
9
+ export interface OpenCodeEngineOptions extends OpenCodeEngineSettings {
10
+ /**
11
+ * The host: an {@link OpenCodeHost} instance, or a class the app's container builds (so it can
12
+ * `@inject()` the services that know where the server is and how to set sessions up).
13
+ */
14
+ host: OpenCodeHost | OpenCodeClass<OpenCodeHost>;
15
+ /** Where each thread's session is kept. Same forms as `host`. Omit → in memory. */
16
+ sessions?: OpenCodeSessionStore | OpenCodeClass<OpenCodeSessionStore>;
17
+ }
18
+ /**
19
+ * The OpenCode engine — `engine: openCode({ host })` in `config/agent.ts`. The routes, threads,
20
+ * stream protocol, approvals, questions and queue stay the library's; OpenCode runs the model, the
21
+ * tools, skills and the context, on the server and sessions the host provides.
22
+ */
23
+ export declare class OpenCodeEngine implements AgentEngine {
24
+ #private;
25
+ readonly options: OpenCodeEngineOptions;
26
+ readonly name: string;
27
+ readonly durable: boolean;
28
+ constructor(options: OpenCodeEngineOptions);
29
+ /**
30
+ * The engine's turn steps, once the provider built the runner: `pushToSession` (trusted pushes
31
+ * into a session's run) and `liveRuns()` for the host's own use.
32
+ */
33
+ get turns(): OpenCodeTurns;
34
+ /** The tools endpoint, when `tools` is set and the engine has started. */
35
+ get endpoint(): OpenCodeMcpEndpoint | undefined;
36
+ createRunner(context: AgentEngineContext): Promise<AgentRunner>;
37
+ adapters(): readonly ProtocolAdapter[];
38
+ shutdown(): void;
39
+ /** The host, the session store, the tools endpoint and the turn steps every OpenCode runner needs. */
40
+ protected buildTurns(context: AgentEngineContext): Promise<OpenCodeTurns>;
41
+ }
42
+ /**
43
+ * Run the agent's turns on OpenCode 2 — `engine: openCode({ host })` in `config/agent.ts`. In
44
+ * memory: a turn parked on a person lives in this process (single replica); see
45
+ * `openCodeDurable()` (`@adonis-agora/agent/opencode/durable`) for turns that survive restarts.
46
+ */
47
+ export declare function openCode(options: OpenCodeEngineOptions): OpenCodeEngine;
48
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/opencode/engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,mBAAmB,EAAuB,MAAM,UAAU,CAAC;AAEpE,OAAO,EAAE,KAAK,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExE,oFAAoF;AAEpF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAElE,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB;IACnE;;;OAGG;IACH,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IACjD,mFAAmF;IACnF,QAAQ,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;CACvE;AAkBD;;;;GAIG;AACH,qBAAa,cAAe,YAAW,WAAW;;IAMpC,QAAQ,CAAC,OAAO,EAAE,qBAAqB;IALnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAc;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAS;IAIlC,YAAqB,OAAO,EAAE,qBAAqB,EAAI;IAEvD;;;OAGG;IACH,IAAI,KAAK,IAAI,aAAa,CAKzB;IAED,0EAA0E;IAC1E,IAAI,QAAQ,IAAI,mBAAmB,GAAG,SAAS,CAE9C;IAEK,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAGpE;IAED,QAAQ,IAAI,SAAS,eAAe,EAAE,CAErC;IAED,QAAQ,IAAI,IAAI,CAEf;IAED,sGAAsG;IACtG,UAAgB,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqC9E;CACF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAEvE"}
@@ -0,0 +1,98 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { InMemoryOpenCodeSessionStore, } from './host.js';
3
+ import { openCodeLog } from './log.js';
4
+ import { OpenCodeMcpEndpoint, OpenCodeToolsTokens } from './mcp.js';
5
+ import { OpenCodeAgentRunner } from './runner.js';
6
+ import { OpenCodeTurns } from './turns.js';
7
+ const DEFAULT_TOOLS_TTL_MS = 7 * 24 * 60 * 60_000;
8
+ async function resolve(value, context, what) {
9
+ if (typeof value !== 'function')
10
+ return value;
11
+ if (context.make === undefined) {
12
+ throw new Error(`[@adonis-agora/agent/opencode] the ${what} is a class, and there is no container to build it with: pass an instance.`);
13
+ }
14
+ return context.make(value);
15
+ }
16
+ /**
17
+ * The OpenCode engine — `engine: openCode({ host })` in `config/agent.ts`. The routes, threads,
18
+ * stream protocol, approvals, questions and queue stay the library's; OpenCode runs the model, the
19
+ * tools, skills and the context, on the server and sessions the host provides.
20
+ */
21
+ export class OpenCodeEngine {
22
+ options;
23
+ name = 'opencode';
24
+ durable = false;
25
+ #turns;
26
+ #endpoint;
27
+ constructor(options) {
28
+ this.options = options;
29
+ }
30
+ /**
31
+ * The engine's turn steps, once the provider built the runner: `pushToSession` (trusted pushes
32
+ * into a session's run) and `liveRuns()` for the host's own use.
33
+ */
34
+ get turns() {
35
+ if (this.#turns === undefined) {
36
+ throw new Error('[@adonis-agora/agent/opencode] the engine has not been started yet.');
37
+ }
38
+ return this.#turns;
39
+ }
40
+ /** The tools endpoint, when `tools` is set and the engine has started. */
41
+ get endpoint() {
42
+ return this.#endpoint;
43
+ }
44
+ async createRunner(context) {
45
+ const turns = await this.buildTurns(context);
46
+ return new OpenCodeAgentRunner(turns, context.store);
47
+ }
48
+ adapters() {
49
+ return this.#endpoint !== undefined ? [this.#endpoint.adapter()] : [];
50
+ }
51
+ shutdown() {
52
+ this.#turns?.close();
53
+ }
54
+ /** The host, the session store, the tools endpoint and the turn steps every OpenCode runner needs. */
55
+ async buildTurns(context) {
56
+ const { host: hostOption, sessions: sessionsOption, ...settings } = this.options;
57
+ const host = await resolve(hostOption, context, 'host');
58
+ const sessions = sessionsOption === undefined
59
+ ? new InMemoryOpenCodeSessionStore()
60
+ : await resolve(sessionsOption, context, 'session store');
61
+ let tokens;
62
+ if (settings.tools !== undefined) {
63
+ const secret = settings.tools.secret ??
64
+ (context.appKey !== undefined
65
+ ? createHash('sha256').update(`opencode-tools:${context.appKey}`).digest('hex')
66
+ : undefined);
67
+ if (secret === undefined) {
68
+ openCodeLog.warn('`tools` has no `secret` and the app has no APP_KEY: the endpoint signs its tokens with a per-process secret, so it only works with one process.');
69
+ }
70
+ tokens = new OpenCodeToolsTokens(secret, settings.tools.ttlMs ?? DEFAULT_TOOLS_TTL_MS);
71
+ }
72
+ const turns = new OpenCodeTurns({
73
+ host,
74
+ sessions,
75
+ settings,
76
+ factory: context.factory,
77
+ store: context.store,
78
+ sink: context.sink,
79
+ registry: context.registry,
80
+ queue: context.queue,
81
+ ...(tokens !== undefined
82
+ ? { mintToolsToken: (actor, serverKey) => tokens.mint(actor, serverKey) }
83
+ : {}),
84
+ });
85
+ this.#turns = turns;
86
+ this.#endpoint = tokens !== undefined ? new OpenCodeMcpEndpoint(turns, tokens) : undefined;
87
+ return turns;
88
+ }
89
+ }
90
+ /**
91
+ * Run the agent's turns on OpenCode 2 — `engine: openCode({ host })` in `config/agent.ts`. In
92
+ * memory: a turn parked on a person lives in this process (single replica); see
93
+ * `openCodeDurable()` (`@adonis-agora/agent/opencode/durable`) for turns that survive restarts.
94
+ */
95
+ export function openCode(options) {
96
+ return new OpenCodeEngine(options);
97
+ }
98
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/opencode/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { OpenCodeClient, OpenCodeEvent } from './client.js';
2
+ type Listener = (event: OpenCodeEvent) => void;
3
+ /** The session an event belongs to. Form events carry it inside the form. */
4
+ export declare function sessionOf(event: OpenCodeEvent): string | undefined;
5
+ /**
6
+ * One event subscription per OpenCode server, fanned out to the turns listening on its sessions. A
7
+ * server's stream closes when its last listener leaves; a stream that drops reconnects with backoff.
8
+ */
9
+ export declare class OpenCodeEventHub {
10
+ private readonly streams;
11
+ /** Listen to one session's events on a server. Resolves once the server's stream is open. */
12
+ listen(serverKey: string, client: OpenCodeClient, sessionId: string, listener: Listener): Promise<() => void>;
13
+ close(): void;
14
+ /**
15
+ * The server's stream, opened on `client`. A different client for a known key (the host replaced
16
+ * the connection, e.g. a new sandbox under the same key) moves every listener to a stream on the
17
+ * new one: the old connection may be dead, and its sessions would never hear back.
18
+ */
19
+ private streamFor;
20
+ private pump;
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=event-hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-hub.d.ts","sourceRoot":"","sources":["../../../src/opencode/event-hub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjE,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAU/C,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAGlE;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,6FAA6F;IACvF,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,IAAI,CAAC,CAoBrB;IAED,KAAK,IAAI,IAAI,CAGZ;IAED;;;;OAIG;IACH,OAAO,CAAC,SAAS;YAoBH,IAAI;CAgCnB"}
@@ -0,0 +1,99 @@
1
+ import { openCodeLog } from './log.js';
2
+ /** The session an event belongs to. Form events carry it inside the form. */
3
+ export function sessionOf(event) {
4
+ const id = event.data?.sessionID ?? event.data?.form?.sessionID;
5
+ return typeof id === 'string' ? id : undefined;
6
+ }
7
+ /**
8
+ * One event subscription per OpenCode server, fanned out to the turns listening on its sessions. A
9
+ * server's stream closes when its last listener leaves; a stream that drops reconnects with backoff.
10
+ */
11
+ export class OpenCodeEventHub {
12
+ streams = new Map();
13
+ /** Listen to one session's events on a server. Resolves once the server's stream is open. */
14
+ async listen(serverKey, client, sessionId, listener) {
15
+ const stream = this.streamFor(serverKey, client);
16
+ let set = stream.listeners.get(sessionId);
17
+ if (set === undefined) {
18
+ set = new Set();
19
+ stream.listeners.set(sessionId, set);
20
+ }
21
+ set.add(listener);
22
+ await stream.ready;
23
+ return () => {
24
+ // The server's stream now — it may have moved to a new client since this listener joined.
25
+ const live = this.streams.get(serverKey) ?? stream;
26
+ const current = live.listeners.get(sessionId);
27
+ current?.delete(listener);
28
+ if (current?.size === 0)
29
+ live.listeners.delete(sessionId);
30
+ if (live.listeners.size === 0 && this.streams.get(serverKey) === live) {
31
+ live.controller.abort();
32
+ this.streams.delete(serverKey);
33
+ }
34
+ };
35
+ }
36
+ close() {
37
+ for (const stream of this.streams.values())
38
+ stream.controller.abort();
39
+ this.streams.clear();
40
+ }
41
+ /**
42
+ * The server's stream, opened on `client`. A different client for a known key (the host replaced
43
+ * the connection, e.g. a new sandbox under the same key) moves every listener to a stream on the
44
+ * new one: the old connection may be dead, and its sessions would never hear back.
45
+ */
46
+ streamFor(serverKey, client) {
47
+ const existing = this.streams.get(serverKey);
48
+ if (existing !== undefined && existing.client === client)
49
+ return existing;
50
+ existing?.controller.abort();
51
+ const controller = new AbortController();
52
+ let opened;
53
+ const ready = new Promise((resolve) => {
54
+ opened = resolve;
55
+ });
56
+ const stream = {
57
+ client,
58
+ controller,
59
+ listeners: existing?.listeners ?? new Map(),
60
+ ready,
61
+ };
62
+ this.streams.set(serverKey, stream);
63
+ void this.pump(serverKey, stream, client, opened);
64
+ return stream;
65
+ }
66
+ async pump(serverKey, stream, client, opened) {
67
+ let backoff = 500;
68
+ while (!stream.controller.signal.aborted) {
69
+ try {
70
+ const events = client.event.subscribe({ signal: stream.controller.signal });
71
+ opened();
72
+ for await (const event of events) {
73
+ backoff = 500;
74
+ const sessionId = sessionOf(event);
75
+ if (sessionId === undefined)
76
+ continue;
77
+ for (const listener of stream.listeners.get(sessionId) ?? []) {
78
+ try {
79
+ listener(event);
80
+ }
81
+ catch (error) {
82
+ openCodeLog.error(`an event listener failed: ${error.message}`);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ catch (error) {
88
+ if (stream.controller.signal.aborted)
89
+ return;
90
+ openCodeLog.warn(`the event stream of ${serverKey} dropped: ${error.message}`);
91
+ }
92
+ if (stream.controller.signal.aborted)
93
+ return;
94
+ await new Promise((resolve) => setTimeout(resolve, backoff).unref?.());
95
+ backoff = Math.min(backoff * 2, 10_000);
96
+ }
97
+ }
98
+ }
99
+ //# sourceMappingURL=event-hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-hub.js","sourceRoot":"","sources":["../../../src/opencode/event-hub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ElicitationQuestion, ElicitationRequest } from '../elicitation.js';
2
+ import type { OpenCodeForm, OpenCodeFormField, OpenCodeFormValue } from './client.js';
3
+ /** An OpenCode form field as a stream-protocol question (`elicitation`, *Asking the user*). */
4
+ export declare function toQuestion(field: OpenCodeFormField): ElicitationQuestion;
5
+ /** The fields of a form, skipping anything that is not one. */
6
+ export declare function formFields(form: Pick<OpenCodeForm, 'fields'>): OpenCodeFormField[];
7
+ /** The elicitation an OpenCode form streams as, under `id` (the tool-call id it is answered through). */
8
+ export declare function toElicitation(id: string, form: OpenCodeForm): ElicitationRequest;
9
+ /** An answer a form field cannot take. */
10
+ export declare class FormAnswerError extends Error {
11
+ constructor(message: string);
12
+ }
13
+ /**
14
+ * The protocol's answers (question id → canonical strings) as OpenCode's form reply: numbers as
15
+ * numbers, booleans as booleans, multiple choice as a list. Questions left out take their defaults;
16
+ * a value a question can't take throws {@link FormAnswerError}.
17
+ */
18
+ export declare function toFormAnswer(form: OpenCodeForm, answers?: Record<string, string[]>): Record<string, OpenCodeFormValue>;
19
+ //# sourceMappingURL=forms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../../src/opencode/forms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEjF,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtF,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CA4BxE;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,iBAAiB,EAAE,CAKlF;AAED,yGAAyG;AACzG,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,kBAAkB,CAUhF;AAED,0CAA0C;AAC1C,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM,GACrC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAkBnC"}
@@ -0,0 +1,82 @@
1
+ import { validateElicitationAnswer } from '../elicitation-input.js';
2
+ /** An OpenCode form field as a stream-protocol question (`elicitation`, *Asking the user*). */
3
+ export function toQuestion(field) {
4
+ const required = field.required === true ? { required: true } : {};
5
+ const base = {
6
+ id: field.key,
7
+ prompt: field.title || field.key,
8
+ ...(field.description && field.description !== field.title
9
+ ? { description: field.description }
10
+ : {}),
11
+ };
12
+ if (field.options !== undefined && field.options.length > 0) {
13
+ return {
14
+ ...base,
15
+ options: field.options.map((option) => ({
16
+ value: String(option.value),
17
+ label: String(option.label ?? option.value),
18
+ })),
19
+ input: { type: 'select', ...required },
20
+ ...(field.type === 'array' ? { multiple: true } : {}),
21
+ ...(field.custom === true ? { allowFreeText: true } : {}),
22
+ };
23
+ }
24
+ const type = field.type === 'number' || field.type === 'integer'
25
+ ? 'number'
26
+ : field.type === 'boolean'
27
+ ? 'boolean'
28
+ : 'text';
29
+ return { ...base, input: { type, ...required } };
30
+ }
31
+ /** The fields of a form, skipping anything that is not one. */
32
+ export function formFields(form) {
33
+ return (form.fields ?? []).filter((field) => typeof field === 'object' && field !== null && typeof field.key === 'string');
34
+ }
35
+ /** The elicitation an OpenCode form streams as, under `id` (the tool-call id it is answered through). */
36
+ export function toElicitation(id, form) {
37
+ const questions = formFields(form).map(toQuestion);
38
+ const first = questions[0];
39
+ // OpenCode titles a one-question form after the question (or just "Questions"): not a preamble.
40
+ const title = form.title;
41
+ const preamble = title && title !== 'Questions' && title !== first?.prompt && title !== first?.description
42
+ ? title
43
+ : undefined;
44
+ return { id, source: 'ask', ...(preamble ? { preamble } : {}), questions };
45
+ }
46
+ /** An answer a form field cannot take. */
47
+ export class FormAnswerError extends Error {
48
+ constructor(message) {
49
+ super(message);
50
+ this.name = 'FormAnswerError';
51
+ }
52
+ }
53
+ /**
54
+ * The protocol's answers (question id → canonical strings) as OpenCode's form reply: numbers as
55
+ * numbers, booleans as booleans, multiple choice as a list. Questions left out take their defaults;
56
+ * a value a question can't take throws {@link FormAnswerError}.
57
+ */
58
+ export function toFormAnswer(form, answers = {}) {
59
+ const out = {};
60
+ for (const field of formFields(form)) {
61
+ const question = toQuestion(field);
62
+ const values = answers[field.key] ?? question.defaults ?? [];
63
+ const problem = validateElicitationAnswer(question, values);
64
+ if (problem !== null) {
65
+ throw new FormAnswerError(`answers["${field.key}"] ${problem}`);
66
+ }
67
+ const present = values.filter((value) => value !== '');
68
+ const [value] = present;
69
+ if (value === undefined)
70
+ continue;
71
+ if (question.multiple === true)
72
+ out[field.key] = present;
73
+ else if (question.input?.type === 'number')
74
+ out[field.key] = Number(value);
75
+ else if (question.input?.type === 'boolean')
76
+ out[field.key] = value === 'true';
77
+ else
78
+ out[field.key] = value;
79
+ }
80
+ return out;
81
+ }
82
+ //# sourceMappingURL=forms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../src/opencode/forms.ts"],"names":[],"mappings":"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"}