@agentick/core 0.0.1

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 (626) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +875 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/.tsbuildinfo.build +1 -0
  5. package/dist/agent.d.ts +32 -0
  6. package/dist/agent.d.ts.map +1 -0
  7. package/dist/agent.js +26 -0
  8. package/dist/agent.js.map +1 -0
  9. package/dist/agentick-instance.d.ts +285 -0
  10. package/dist/agentick-instance.d.ts.map +1 -0
  11. package/dist/agentick-instance.js +700 -0
  12. package/dist/agentick-instance.js.map +1 -0
  13. package/dist/aidk-instance.d.ts +294 -0
  14. package/dist/aidk-instance.d.ts.map +1 -0
  15. package/dist/aidk-instance.js +340 -0
  16. package/dist/aidk-instance.js.map +1 -0
  17. package/dist/app/session-store.d.ts +57 -0
  18. package/dist/app/session-store.d.ts.map +1 -0
  19. package/dist/app/session-store.js +87 -0
  20. package/dist/app/session-store.js.map +1 -0
  21. package/dist/app/session.d.ts +209 -0
  22. package/dist/app/session.d.ts.map +1 -0
  23. package/dist/app/session.js +2131 -0
  24. package/dist/app/session.js.map +1 -0
  25. package/dist/app/sqlite-session-store.d.ts +60 -0
  26. package/dist/app/sqlite-session-store.d.ts.map +1 -0
  27. package/dist/app/sqlite-session-store.js +234 -0
  28. package/dist/app/sqlite-session-store.js.map +1 -0
  29. package/dist/app/types.d.ts +1461 -0
  30. package/dist/app/types.d.ts.map +1 -0
  31. package/dist/app/types.js +14 -0
  32. package/dist/app/types.js.map +1 -0
  33. package/dist/app.d.ts +79 -0
  34. package/dist/app.d.ts.map +1 -0
  35. package/dist/app.js +83 -0
  36. package/dist/app.js.map +1 -0
  37. package/dist/channels/adapters/index.d.ts +2 -0
  38. package/dist/channels/adapters/index.d.ts.map +1 -0
  39. package/dist/channels/adapters/index.js +2 -0
  40. package/dist/channels/adapters/index.js.map +1 -0
  41. package/dist/channels/adapters/redis.d.ts +77 -0
  42. package/dist/channels/adapters/redis.d.ts.map +1 -0
  43. package/dist/channels/adapters/redis.js +259 -0
  44. package/dist/channels/adapters/redis.js.map +1 -0
  45. package/dist/channels/index.d.ts +38 -0
  46. package/dist/channels/index.d.ts.map +1 -0
  47. package/dist/channels/index.js +38 -0
  48. package/dist/channels/index.js.map +1 -0
  49. package/dist/channels/service.d.ts +684 -0
  50. package/dist/channels/service.d.ts.map +1 -0
  51. package/dist/channels/service.js +870 -0
  52. package/dist/channels/service.js.map +1 -0
  53. package/dist/channels/transports/index.d.ts +4 -0
  54. package/dist/channels/transports/index.d.ts.map +1 -0
  55. package/dist/channels/transports/index.js +4 -0
  56. package/dist/channels/transports/index.js.map +1 -0
  57. package/dist/channels/transports/socketio.d.ts +98 -0
  58. package/dist/channels/transports/socketio.d.ts.map +1 -0
  59. package/dist/channels/transports/socketio.js +246 -0
  60. package/dist/channels/transports/socketio.js.map +1 -0
  61. package/dist/channels/transports/streamable-http.d.ts +107 -0
  62. package/dist/channels/transports/streamable-http.d.ts.map +1 -0
  63. package/dist/channels/transports/streamable-http.js +353 -0
  64. package/dist/channels/transports/streamable-http.js.map +1 -0
  65. package/dist/channels/transports/websocket.d.ts +117 -0
  66. package/dist/channels/transports/websocket.d.ts.map +1 -0
  67. package/dist/channels/transports/websocket.js +416 -0
  68. package/dist/channels/transports/websocket.js.map +1 -0
  69. package/dist/com/index.d.ts +29 -0
  70. package/dist/com/index.d.ts.map +1 -0
  71. package/dist/com/index.js +29 -0
  72. package/dist/com/index.js.map +1 -0
  73. package/dist/com/object-model.d.ts +634 -0
  74. package/dist/com/object-model.d.ts.map +1 -0
  75. package/dist/com/object-model.js +963 -0
  76. package/dist/com/object-model.js.map +1 -0
  77. package/dist/com/types.d.ts +192 -0
  78. package/dist/com/types.d.ts.map +1 -0
  79. package/dist/com/types.js +1 -0
  80. package/dist/com/types.js.map +1 -0
  81. package/dist/compiler/collector.d.ts +16 -0
  82. package/dist/compiler/collector.d.ts.map +1 -0
  83. package/dist/compiler/collector.js +388 -0
  84. package/dist/compiler/collector.js.map +1 -0
  85. package/dist/compiler/content-block-registry.d.ts +11 -0
  86. package/dist/compiler/content-block-registry.d.ts.map +1 -0
  87. package/dist/compiler/content-block-registry.js +312 -0
  88. package/dist/compiler/content-block-registry.js.map +1 -0
  89. package/dist/compiler/extractors.d.ts +68 -0
  90. package/dist/compiler/extractors.d.ts.map +1 -0
  91. package/dist/compiler/extractors.js +547 -0
  92. package/dist/compiler/extractors.js.map +1 -0
  93. package/dist/compiler/fiber-compiler.d.ts +203 -0
  94. package/dist/compiler/fiber-compiler.d.ts.map +1 -0
  95. package/dist/compiler/fiber-compiler.js +498 -0
  96. package/dist/compiler/fiber-compiler.js.map +1 -0
  97. package/dist/compiler/fiber.d.ts +61 -0
  98. package/dist/compiler/fiber.d.ts.map +1 -0
  99. package/dist/compiler/fiber.js +244 -0
  100. package/dist/compiler/fiber.js.map +1 -0
  101. package/dist/compiler/index.d.ts +18 -0
  102. package/dist/compiler/index.d.ts.map +1 -0
  103. package/dist/compiler/index.js +38 -0
  104. package/dist/compiler/index.js.map +1 -0
  105. package/dist/compiler/scheduler.d.ts +95 -0
  106. package/dist/compiler/scheduler.d.ts.map +1 -0
  107. package/dist/compiler/scheduler.js +138 -0
  108. package/dist/compiler/scheduler.js.map +1 -0
  109. package/dist/compiler/structure-renderer.d.ts +42 -0
  110. package/dist/compiler/structure-renderer.d.ts.map +1 -0
  111. package/dist/compiler/structure-renderer.js +189 -0
  112. package/dist/compiler/structure-renderer.js.map +1 -0
  113. package/dist/compiler/types.d.ts +96 -0
  114. package/dist/compiler/types.d.ts.map +1 -0
  115. package/dist/compiler/types.js +19 -0
  116. package/dist/compiler/types.js.map +1 -0
  117. package/dist/component/component-hooks.d.ts +68 -0
  118. package/dist/component/component-hooks.d.ts.map +1 -0
  119. package/dist/component/component-hooks.js +112 -0
  120. package/dist/component/component-hooks.js.map +1 -0
  121. package/dist/component/component.d.ts +314 -0
  122. package/dist/component/component.d.ts.map +1 -0
  123. package/dist/component/component.js +64 -0
  124. package/dist/component/component.js.map +1 -0
  125. package/dist/component/index.d.ts +47 -0
  126. package/dist/component/index.d.ts.map +1 -0
  127. package/dist/component/index.js +47 -0
  128. package/dist/component/index.js.map +1 -0
  129. package/dist/component/tentickle-component.d.ts +185 -0
  130. package/dist/component/tentickle-component.d.ts.map +1 -0
  131. package/dist/component/tentickle-component.js +182 -0
  132. package/dist/component/tentickle-component.js.map +1 -0
  133. package/dist/content/index.d.ts +12 -0
  134. package/dist/content/index.d.ts.map +1 -0
  135. package/dist/content/index.js +17 -0
  136. package/dist/content/index.js.map +1 -0
  137. package/dist/context/index.d.ts +51 -0
  138. package/dist/context/index.d.ts.map +1 -0
  139. package/dist/context/index.js +69 -0
  140. package/dist/context/index.js.map +1 -0
  141. package/dist/core/channel-helpers.d.ts +31 -0
  142. package/dist/core/channel-helpers.d.ts.map +1 -0
  143. package/dist/core/channel-helpers.js +62 -0
  144. package/dist/core/channel-helpers.js.map +1 -0
  145. package/dist/core/channel.d.ts +164 -0
  146. package/dist/core/channel.d.ts.map +1 -0
  147. package/dist/core/channel.js +199 -0
  148. package/dist/core/channel.js.map +1 -0
  149. package/dist/core/context.d.ts +412 -0
  150. package/dist/core/context.d.ts.map +1 -0
  151. package/dist/core/context.js +290 -0
  152. package/dist/core/context.js.map +1 -0
  153. package/dist/core/event-buffer.d.ts +212 -0
  154. package/dist/core/event-buffer.d.ts.map +1 -0
  155. package/dist/core/event-buffer.js +346 -0
  156. package/dist/core/event-buffer.js.map +1 -0
  157. package/dist/core/execution-helpers.d.ts +179 -0
  158. package/dist/core/execution-helpers.d.ts.map +1 -0
  159. package/dist/core/execution-helpers.js +212 -0
  160. package/dist/core/execution-helpers.js.map +1 -0
  161. package/dist/core/execution-tracker.d.ts +53 -0
  162. package/dist/core/execution-tracker.d.ts.map +1 -0
  163. package/dist/core/execution-tracker.js +309 -0
  164. package/dist/core/execution-tracker.js.map +1 -0
  165. package/dist/core/index.d.ts +58 -0
  166. package/dist/core/index.d.ts.map +1 -0
  167. package/dist/core/index.js +58 -0
  168. package/dist/core/index.js.map +1 -0
  169. package/dist/core/logger.d.ts +341 -0
  170. package/dist/core/logger.d.ts.map +1 -0
  171. package/dist/core/logger.js +346 -0
  172. package/dist/core/logger.js.map +1 -0
  173. package/dist/core/metrics-helpers.d.ts +40 -0
  174. package/dist/core/metrics-helpers.d.ts.map +1 -0
  175. package/dist/core/metrics-helpers.js +72 -0
  176. package/dist/core/metrics-helpers.js.map +1 -0
  177. package/dist/core/otel-provider.d.ts +54 -0
  178. package/dist/core/otel-provider.d.ts.map +1 -0
  179. package/dist/core/otel-provider.js +107 -0
  180. package/dist/core/otel-provider.js.map +1 -0
  181. package/dist/core/procedure-graph.d.ts +136 -0
  182. package/dist/core/procedure-graph.d.ts.map +1 -0
  183. package/dist/core/procedure-graph.js +272 -0
  184. package/dist/core/procedure-graph.js.map +1 -0
  185. package/dist/core/procedure.d.ts +755 -0
  186. package/dist/core/procedure.d.ts.map +1 -0
  187. package/dist/core/procedure.js +899 -0
  188. package/dist/core/procedure.js.map +1 -0
  189. package/dist/core/stream.d.ts +106 -0
  190. package/dist/core/stream.d.ts.map +1 -0
  191. package/dist/core/stream.js +186 -0
  192. package/dist/core/stream.js.map +1 -0
  193. package/dist/core/telemetry.d.ts +182 -0
  194. package/dist/core/telemetry.d.ts.map +1 -0
  195. package/dist/core/telemetry.js +124 -0
  196. package/dist/core/telemetry.js.map +1 -0
  197. package/dist/engine/client-tool-coordinator.d.ts +50 -0
  198. package/dist/engine/client-tool-coordinator.d.ts.map +1 -0
  199. package/dist/engine/client-tool-coordinator.js +121 -0
  200. package/dist/engine/client-tool-coordinator.js.map +1 -0
  201. package/dist/engine/engine-events.d.ts +117 -0
  202. package/dist/engine/engine-events.d.ts.map +1 -0
  203. package/dist/engine/engine-events.js +178 -0
  204. package/dist/engine/engine-events.js.map +1 -0
  205. package/dist/engine/engine-response.d.ts +48 -0
  206. package/dist/engine/engine-response.d.ts.map +1 -0
  207. package/dist/engine/engine-response.js +2 -0
  208. package/dist/engine/engine-response.js.map +1 -0
  209. package/dist/engine/execution-graph.d.ts +104 -0
  210. package/dist/engine/execution-graph.d.ts.map +1 -0
  211. package/dist/engine/execution-graph.js +257 -0
  212. package/dist/engine/execution-graph.js.map +1 -0
  213. package/dist/engine/execution-handle.d.ts +212 -0
  214. package/dist/engine/execution-handle.d.ts.map +1 -0
  215. package/dist/engine/execution-handle.js +602 -0
  216. package/dist/engine/execution-handle.js.map +1 -0
  217. package/dist/engine/execution-types.d.ts +248 -0
  218. package/dist/engine/execution-types.d.ts.map +1 -0
  219. package/dist/engine/execution-types.js +23 -0
  220. package/dist/engine/execution-types.js.map +1 -0
  221. package/dist/engine/index.d.ts +21 -0
  222. package/dist/engine/index.d.ts.map +1 -0
  223. package/dist/engine/index.js +23 -0
  224. package/dist/engine/index.js.map +1 -0
  225. package/dist/engine/tool-confirmation-coordinator.d.ts +74 -0
  226. package/dist/engine/tool-confirmation-coordinator.d.ts.map +1 -0
  227. package/dist/engine/tool-confirmation-coordinator.js +137 -0
  228. package/dist/engine/tool-confirmation-coordinator.js.map +1 -0
  229. package/dist/engine/tool-executor.d.ts +127 -0
  230. package/dist/engine/tool-executor.d.ts.map +1 -0
  231. package/dist/engine/tool-executor.js +363 -0
  232. package/dist/engine/tool-executor.js.map +1 -0
  233. package/dist/hibernation/index.d.ts +126 -0
  234. package/dist/hibernation/index.d.ts.map +1 -0
  235. package/dist/hibernation/index.js +127 -0
  236. package/dist/hibernation/index.js.map +1 -0
  237. package/dist/hooks/base-hook-registry.d.ts +41 -0
  238. package/dist/hooks/base-hook-registry.d.ts.map +1 -0
  239. package/dist/hooks/base-hook-registry.js +76 -0
  240. package/dist/hooks/base-hook-registry.js.map +1 -0
  241. package/dist/hooks/com-state.d.ts +40 -0
  242. package/dist/hooks/com-state.d.ts.map +1 -0
  243. package/dist/hooks/com-state.js +90 -0
  244. package/dist/hooks/com-state.js.map +1 -0
  245. package/dist/hooks/context-info.d.ts +139 -0
  246. package/dist/hooks/context-info.d.ts.map +1 -0
  247. package/dist/hooks/context-info.js +115 -0
  248. package/dist/hooks/context-info.js.map +1 -0
  249. package/dist/hooks/context-internal.d.ts +21 -0
  250. package/dist/hooks/context-internal.d.ts.map +1 -0
  251. package/dist/hooks/context-internal.js +20 -0
  252. package/dist/hooks/context-internal.js.map +1 -0
  253. package/dist/hooks/context.d.ts +64 -0
  254. package/dist/hooks/context.d.ts.map +1 -0
  255. package/dist/hooks/context.js +83 -0
  256. package/dist/hooks/context.js.map +1 -0
  257. package/dist/hooks/data.d.ts +33 -0
  258. package/dist/hooks/data.d.ts.map +1 -0
  259. package/dist/hooks/data.js +84 -0
  260. package/dist/hooks/data.js.map +1 -0
  261. package/dist/hooks/formatter-context.d.ts +34 -0
  262. package/dist/hooks/formatter-context.d.ts.map +1 -0
  263. package/dist/hooks/formatter-context.js +34 -0
  264. package/dist/hooks/formatter-context.js.map +1 -0
  265. package/dist/hooks/hook-registry.d.ts +45 -0
  266. package/dist/hooks/hook-registry.d.ts.map +1 -0
  267. package/dist/hooks/hook-registry.js +109 -0
  268. package/dist/hooks/hook-registry.js.map +1 -0
  269. package/dist/hooks/index.d.ts +20 -0
  270. package/dist/hooks/index.d.ts.map +1 -0
  271. package/dist/hooks/index.js +47 -0
  272. package/dist/hooks/index.js.map +1 -0
  273. package/dist/hooks/knob.d.ts +87 -0
  274. package/dist/hooks/knob.d.ts.map +1 -0
  275. package/dist/hooks/knob.js +129 -0
  276. package/dist/hooks/knob.js.map +1 -0
  277. package/dist/hooks/knobs-component.d.ts +70 -0
  278. package/dist/hooks/knobs-component.d.ts.map +1 -0
  279. package/dist/hooks/knobs-component.js +300 -0
  280. package/dist/hooks/knobs-component.js.map +1 -0
  281. package/dist/hooks/lifecycle.d.ts +158 -0
  282. package/dist/hooks/lifecycle.d.ts.map +1 -0
  283. package/dist/hooks/lifecycle.js +217 -0
  284. package/dist/hooks/lifecycle.js.map +1 -0
  285. package/dist/hooks/message-context.d.ts +101 -0
  286. package/dist/hooks/message-context.d.ts.map +1 -0
  287. package/dist/hooks/message-context.js +145 -0
  288. package/dist/hooks/message-context.js.map +1 -0
  289. package/dist/hooks/policy-context.d.ts.map +1 -0
  290. package/dist/hooks/runtime-context.d.ts +122 -0
  291. package/dist/hooks/runtime-context.d.ts.map +1 -0
  292. package/dist/hooks/runtime-context.js +149 -0
  293. package/dist/hooks/runtime-context.js.map +1 -0
  294. package/dist/hooks/signal.d.ts +267 -0
  295. package/dist/hooks/signal.d.ts.map +1 -0
  296. package/dist/hooks/signal.js +825 -0
  297. package/dist/hooks/signal.js.map +1 -0
  298. package/dist/hooks/types.d.ts +179 -0
  299. package/dist/hooks/types.d.ts.map +1 -0
  300. package/dist/hooks/types.js +5 -0
  301. package/dist/hooks/types.js.map +1 -0
  302. package/dist/index.d.ts +20 -0
  303. package/dist/index.d.ts.map +1 -0
  304. package/dist/index.js +50 -0
  305. package/dist/index.js.map +1 -0
  306. package/dist/jsx/components/agent.d.ts +64 -0
  307. package/dist/jsx/components/agent.d.ts.map +1 -0
  308. package/dist/jsx/components/agent.js +80 -0
  309. package/dist/jsx/components/agent.js.map +1 -0
  310. package/dist/jsx/components/complete.d.ts +65 -0
  311. package/dist/jsx/components/complete.d.ts.map +1 -0
  312. package/dist/jsx/components/complete.js +64 -0
  313. package/dist/jsx/components/complete.js.map +1 -0
  314. package/dist/jsx/components/content.d.ts +98 -0
  315. package/dist/jsx/components/content.d.ts.map +1 -0
  316. package/dist/jsx/components/content.js +51 -0
  317. package/dist/jsx/components/content.js.map +1 -0
  318. package/dist/jsx/components/harness.d.ts +118 -0
  319. package/dist/jsx/components/harness.d.ts.map +1 -0
  320. package/dist/jsx/components/harness.js +117 -0
  321. package/dist/jsx/components/harness.js.map +1 -0
  322. package/dist/jsx/components/index.d.ts +11 -0
  323. package/dist/jsx/components/index.d.ts.map +1 -0
  324. package/dist/jsx/components/index.js +11 -0
  325. package/dist/jsx/components/index.js.map +1 -0
  326. package/dist/jsx/components/markdown.d.ts +31 -0
  327. package/dist/jsx/components/markdown.d.ts.map +1 -0
  328. package/dist/jsx/components/markdown.js +17 -0
  329. package/dist/jsx/components/markdown.js.map +1 -0
  330. package/dist/jsx/components/messages.d.ts +283 -0
  331. package/dist/jsx/components/messages.d.ts.map +1 -0
  332. package/dist/jsx/components/messages.js +257 -0
  333. package/dist/jsx/components/messages.js.map +1 -0
  334. package/dist/jsx/components/model.d.ts +94 -0
  335. package/dist/jsx/components/model.d.ts.map +1 -0
  336. package/dist/jsx/components/model.js +96 -0
  337. package/dist/jsx/components/model.js.map +1 -0
  338. package/dist/jsx/components/primitives.d.ts +117 -0
  339. package/dist/jsx/components/primitives.d.ts.map +1 -0
  340. package/dist/jsx/components/primitives.js +83 -0
  341. package/dist/jsx/components/primitives.js.map +1 -0
  342. package/dist/jsx/components/renderer.d.ts +24 -0
  343. package/dist/jsx/components/renderer.d.ts.map +1 -0
  344. package/dist/jsx/components/renderer.js +11 -0
  345. package/dist/jsx/components/renderer.js.map +1 -0
  346. package/dist/jsx/components/semantic.d.ts +155 -0
  347. package/dist/jsx/components/semantic.d.ts.map +1 -0
  348. package/dist/jsx/components/semantic.js +39 -0
  349. package/dist/jsx/components/semantic.js.map +1 -0
  350. package/dist/jsx/components/timeline.d.ts +157 -0
  351. package/dist/jsx/components/timeline.d.ts.map +1 -0
  352. package/dist/jsx/components/timeline.js +357 -0
  353. package/dist/jsx/components/timeline.js.map +1 -0
  354. package/dist/jsx/components/token-budget.d.ts +70 -0
  355. package/dist/jsx/components/token-budget.d.ts.map +1 -0
  356. package/dist/jsx/components/token-budget.js +135 -0
  357. package/dist/jsx/components/token-budget.js.map +1 -0
  358. package/dist/jsx/components/xml.d.ts +27 -0
  359. package/dist/jsx/components/xml.d.ts.map +1 -0
  360. package/dist/jsx/components/xml.js +17 -0
  361. package/dist/jsx/components/xml.js.map +1 -0
  362. package/dist/jsx/index.d.ts +58 -0
  363. package/dist/jsx/index.d.ts.map +1 -0
  364. package/dist/jsx/index.js +59 -0
  365. package/dist/jsx/index.js.map +1 -0
  366. package/dist/jsx/jsx-runtime.d.ts +370 -0
  367. package/dist/jsx/jsx-runtime.d.ts.map +1 -0
  368. package/dist/jsx/jsx-runtime.js +79 -0
  369. package/dist/jsx/jsx-runtime.js.map +1 -0
  370. package/dist/jsx/jsx-types.d.ts +23 -0
  371. package/dist/jsx/jsx-types.d.ts.map +1 -0
  372. package/dist/jsx/jsx-types.js +1 -0
  373. package/dist/jsx/jsx-types.js.map +1 -0
  374. package/dist/mcp/client.d.ts +46 -0
  375. package/dist/mcp/client.d.ts.map +1 -0
  376. package/dist/mcp/client.js +138 -0
  377. package/dist/mcp/client.js.map +1 -0
  378. package/dist/mcp/component.d.ts +95 -0
  379. package/dist/mcp/component.d.ts.map +1 -0
  380. package/dist/mcp/component.js +185 -0
  381. package/dist/mcp/component.js.map +1 -0
  382. package/dist/mcp/create-mcp-tool.d.ts +191 -0
  383. package/dist/mcp/create-mcp-tool.d.ts.map +1 -0
  384. package/dist/mcp/create-mcp-tool.js +228 -0
  385. package/dist/mcp/create-mcp-tool.js.map +1 -0
  386. package/dist/mcp/index.d.ts +49 -0
  387. package/dist/mcp/index.d.ts.map +1 -0
  388. package/dist/mcp/index.js +48 -0
  389. package/dist/mcp/index.js.map +1 -0
  390. package/dist/mcp/service.d.ts +39 -0
  391. package/dist/mcp/service.d.ts.map +1 -0
  392. package/dist/mcp/service.js +77 -0
  393. package/dist/mcp/service.js.map +1 -0
  394. package/dist/mcp/tool.d.ts +55 -0
  395. package/dist/mcp/tool.d.ts.map +1 -0
  396. package/dist/mcp/tool.js +119 -0
  397. package/dist/mcp/tool.js.map +1 -0
  398. package/dist/mcp/types.d.ts +72 -0
  399. package/dist/mcp/types.d.ts.map +1 -0
  400. package/dist/mcp/types.js +6 -0
  401. package/dist/mcp/types.js.map +1 -0
  402. package/dist/middleware/defaults.d.ts +9 -0
  403. package/dist/middleware/defaults.d.ts.map +1 -0
  404. package/dist/middleware/defaults.js +47 -0
  405. package/dist/middleware/defaults.js.map +1 -0
  406. package/dist/model/adapter-helpers.d.ts +161 -0
  407. package/dist/model/adapter-helpers.d.ts.map +1 -0
  408. package/dist/model/adapter-helpers.js +351 -0
  409. package/dist/model/adapter-helpers.js.map +1 -0
  410. package/dist/model/adapter.d.ts +399 -0
  411. package/dist/model/adapter.d.ts.map +1 -0
  412. package/dist/model/adapter.js +497 -0
  413. package/dist/model/adapter.js.map +1 -0
  414. package/dist/model/index.d.ts +54 -0
  415. package/dist/model/index.d.ts.map +1 -0
  416. package/dist/model/index.js +55 -0
  417. package/dist/model/index.js.map +1 -0
  418. package/dist/model/model-hooks.d.ts +45 -0
  419. package/dist/model/model-hooks.d.ts.map +1 -0
  420. package/dist/model/model-hooks.js +24 -0
  421. package/dist/model/model-hooks.js.map +1 -0
  422. package/dist/model/model.d.ts +302 -0
  423. package/dist/model/model.d.ts.map +1 -0
  424. package/dist/model/model.js +20 -0
  425. package/dist/model/model.js.map +1 -0
  426. package/dist/model/simple-adapter.d.ts +176 -0
  427. package/dist/model/simple-adapter.d.ts.map +1 -0
  428. package/dist/model/simple-adapter.js +264 -0
  429. package/dist/model/simple-adapter.js.map +1 -0
  430. package/dist/model/stream-accumulator.d.ts +284 -0
  431. package/dist/model/stream-accumulator.d.ts.map +1 -0
  432. package/dist/model/stream-accumulator.js +532 -0
  433. package/dist/model/stream-accumulator.js.map +1 -0
  434. package/dist/model/utils/index.d.ts +2 -0
  435. package/dist/model/utils/index.d.ts.map +1 -0
  436. package/dist/model/utils/index.js +2 -0
  437. package/dist/model/utils/index.js.map +1 -0
  438. package/dist/model/utils/language-model.d.ts +26 -0
  439. package/dist/model/utils/language-model.d.ts.map +1 -0
  440. package/dist/model/utils/language-model.js +706 -0
  441. package/dist/model/utils/language-model.js.map +1 -0
  442. package/dist/procedure/index.d.ts +20 -0
  443. package/dist/procedure/index.d.ts.map +1 -0
  444. package/dist/procedure/index.js +19 -0
  445. package/dist/procedure/index.js.map +1 -0
  446. package/dist/reconciler/devtools-bridge.d.ts +40 -0
  447. package/dist/reconciler/devtools-bridge.d.ts.map +1 -0
  448. package/dist/reconciler/devtools-bridge.js +79 -0
  449. package/dist/reconciler/devtools-bridge.js.map +1 -0
  450. package/dist/reconciler/host-config.d.ts +39 -0
  451. package/dist/reconciler/host-config.d.ts.map +1 -0
  452. package/dist/reconciler/host-config.js +195 -0
  453. package/dist/reconciler/host-config.js.map +1 -0
  454. package/dist/reconciler/index.d.ts +7 -0
  455. package/dist/reconciler/index.d.ts.map +1 -0
  456. package/dist/reconciler/index.js +7 -0
  457. package/dist/reconciler/index.js.map +1 -0
  458. package/dist/reconciler/reconciler.d.ts +47 -0
  459. package/dist/reconciler/reconciler.d.ts.map +1 -0
  460. package/dist/reconciler/reconciler.js +89 -0
  461. package/dist/reconciler/reconciler.js.map +1 -0
  462. package/dist/reconciler/types.d.ts +86 -0
  463. package/dist/reconciler/types.d.ts.map +1 -0
  464. package/dist/reconciler/types.js +37 -0
  465. package/dist/reconciler/types.js.map +1 -0
  466. package/dist/renderers/base.d.ts +98 -0
  467. package/dist/renderers/base.d.ts.map +1 -0
  468. package/dist/renderers/base.js +82 -0
  469. package/dist/renderers/base.js.map +1 -0
  470. package/dist/renderers/index.d.ts +31 -0
  471. package/dist/renderers/index.d.ts.map +1 -0
  472. package/dist/renderers/index.js +31 -0
  473. package/dist/renderers/index.js.map +1 -0
  474. package/dist/renderers/markdown.d.ts +48 -0
  475. package/dist/renderers/markdown.d.ts.map +1 -0
  476. package/dist/renderers/markdown.js +432 -0
  477. package/dist/renderers/markdown.js.map +1 -0
  478. package/dist/renderers/types.d.ts +7 -0
  479. package/dist/renderers/types.d.ts.map +1 -0
  480. package/dist/renderers/types.js +7 -0
  481. package/dist/renderers/types.js.map +1 -0
  482. package/dist/renderers/xml.d.ts +49 -0
  483. package/dist/renderers/xml.d.ts.map +1 -0
  484. package/dist/renderers/xml.js +444 -0
  485. package/dist/renderers/xml.js.map +1 -0
  486. package/dist/state/boundary.d.ts +347 -0
  487. package/dist/state/boundary.d.ts.map +1 -0
  488. package/dist/state/boundary.js +341 -0
  489. package/dist/state/boundary.js.map +1 -0
  490. package/dist/state/context.d.ts +138 -0
  491. package/dist/state/context.d.ts.map +1 -0
  492. package/dist/state/context.js +139 -0
  493. package/dist/state/context.js.map +1 -0
  494. package/dist/state/hooks.d.ts +798 -0
  495. package/dist/state/hooks.d.ts.map +1 -0
  496. package/dist/state/hooks.js +1437 -0
  497. package/dist/state/hooks.js.map +1 -0
  498. package/dist/state/index.d.ts +72 -0
  499. package/dist/state/index.d.ts.map +1 -0
  500. package/dist/state/index.js +73 -0
  501. package/dist/state/index.js.map +1 -0
  502. package/dist/state/signal.d.ts +223 -0
  503. package/dist/state/signal.d.ts.map +1 -0
  504. package/dist/state/signal.js +699 -0
  505. package/dist/state/signal.js.map +1 -0
  506. package/dist/state/use-state.d.ts +210 -0
  507. package/dist/state/use-state.d.ts.map +1 -0
  508. package/dist/state/use-state.js +327 -0
  509. package/dist/state/use-state.js.map +1 -0
  510. package/dist/tentickle-instance.d.ts +285 -0
  511. package/dist/tentickle-instance.d.ts.map +1 -0
  512. package/dist/tentickle-instance.js +700 -0
  513. package/dist/tentickle-instance.js.map +1 -0
  514. package/dist/testing/act.d.ts +59 -0
  515. package/dist/testing/act.d.ts.map +1 -0
  516. package/dist/testing/act.js +92 -0
  517. package/dist/testing/act.js.map +1 -0
  518. package/dist/testing/async-helpers.d.ts +99 -0
  519. package/dist/testing/async-helpers.d.ts.map +1 -0
  520. package/dist/testing/async-helpers.js +193 -0
  521. package/dist/testing/async-helpers.js.map +1 -0
  522. package/dist/testing/compile-agent.d.ts +101 -0
  523. package/dist/testing/compile-agent.d.ts.map +1 -0
  524. package/dist/testing/compile-agent.js +136 -0
  525. package/dist/testing/compile-agent.js.map +1 -0
  526. package/dist/testing/index.d.ts +57 -0
  527. package/dist/testing/index.d.ts.map +1 -0
  528. package/dist/testing/index.js +59 -0
  529. package/dist/testing/index.js.map +1 -0
  530. package/dist/testing/mock-app.d.ts +163 -0
  531. package/dist/testing/mock-app.d.ts.map +1 -0
  532. package/dist/testing/mock-app.js +393 -0
  533. package/dist/testing/mock-app.js.map +1 -0
  534. package/dist/testing/mocks.d.ts +142 -0
  535. package/dist/testing/mocks.d.ts.map +1 -0
  536. package/dist/testing/mocks.js +191 -0
  537. package/dist/testing/mocks.js.map +1 -0
  538. package/dist/testing/render-agent.d.ts +146 -0
  539. package/dist/testing/render-agent.d.ts.map +1 -0
  540. package/dist/testing/render-agent.js +200 -0
  541. package/dist/testing/render-agent.js.map +1 -0
  542. package/dist/testing/test-adapter.d.ts +157 -0
  543. package/dist/testing/test-adapter.d.ts.map +1 -0
  544. package/dist/testing/test-adapter.js +297 -0
  545. package/dist/testing/test-adapter.js.map +1 -0
  546. package/dist/testing/test-model.d.ts +132 -0
  547. package/dist/testing/test-model.d.ts.map +1 -0
  548. package/dist/testing/test-model.js +260 -0
  549. package/dist/testing/test-model.js.map +1 -0
  550. package/dist/tool/index.d.ts +61 -0
  551. package/dist/tool/index.d.ts.map +1 -0
  552. package/dist/tool/index.js +63 -0
  553. package/dist/tool/index.js.map +1 -0
  554. package/dist/tool/tool-hooks.d.ts +45 -0
  555. package/dist/tool/tool-hooks.d.ts.map +1 -0
  556. package/dist/tool/tool-hooks.js +35 -0
  557. package/dist/tool/tool-hooks.js.map +1 -0
  558. package/dist/tool/tool.d.ts +403 -0
  559. package/dist/tool/tool.d.ts.map +1 -0
  560. package/dist/tool/tool.js +176 -0
  561. package/dist/tool/tool.js.map +1 -0
  562. package/dist/types.d.ts +442 -0
  563. package/dist/types.d.ts.map +1 -0
  564. package/dist/types.js +97 -0
  565. package/dist/types.js.map +1 -0
  566. package/dist/utils/abort-utils.d.ts +5 -0
  567. package/dist/utils/abort-utils.d.ts.map +1 -0
  568. package/dist/utils/abort-utils.js +50 -0
  569. package/dist/utils/abort-utils.js.map +1 -0
  570. package/dist/utils/classify-error.d.ts +19 -0
  571. package/dist/utils/classify-error.d.ts.map +1 -0
  572. package/dist/utils/classify-error.js +77 -0
  573. package/dist/utils/classify-error.js.map +1 -0
  574. package/dist/utils/index.d.ts +21 -0
  575. package/dist/utils/index.d.ts.map +1 -0
  576. package/dist/utils/index.js +21 -0
  577. package/dist/utils/index.js.map +1 -0
  578. package/dist/utils/normalization.d.ts +6 -0
  579. package/dist/utils/normalization.d.ts.map +1 -0
  580. package/dist/utils/normalization.js +103 -0
  581. package/dist/utils/normalization.js.map +1 -0
  582. package/dist/utils/registry.d.ts +15 -0
  583. package/dist/utils/registry.d.ts.map +1 -0
  584. package/dist/utils/registry.js +28 -0
  585. package/dist/utils/registry.js.map +1 -0
  586. package/dist/utils/schema.d.ts +7 -0
  587. package/dist/utils/schema.d.ts.map +1 -0
  588. package/dist/utils/schema.js +13 -0
  589. package/dist/utils/schema.js.map +1 -0
  590. package/dist/utils/token-estimate.d.ts +87 -0
  591. package/dist/utils/token-estimate.d.ts.map +1 -0
  592. package/dist/utils/token-estimate.js +199 -0
  593. package/dist/utils/token-estimate.js.map +1 -0
  594. package/dist/v2/reconciler/host-config.d.ts +31 -0
  595. package/dist/v2/reconciler/host-config.d.ts.map +1 -0
  596. package/dist/v2/reconciler/host-config.js +197 -0
  597. package/dist/v2/reconciler/host-config.js.map +1 -0
  598. package/dist/v2/reconciler/index.d.ts +7 -0
  599. package/dist/v2/reconciler/index.d.ts.map +1 -0
  600. package/dist/v2/reconciler/index.js +7 -0
  601. package/dist/v2/reconciler/index.js.map +1 -0
  602. package/dist/v2/reconciler/reconciler.d.ts +39 -0
  603. package/dist/v2/reconciler/reconciler.d.ts.map +1 -0
  604. package/dist/v2/reconciler/reconciler.js +54 -0
  605. package/dist/v2/reconciler/reconciler.js.map +1 -0
  606. package/dist/v2/reconciler/types.d.ts +64 -0
  607. package/dist/v2/reconciler/types.d.ts.map +1 -0
  608. package/dist/v2/reconciler/types.js +20 -0
  609. package/dist/v2/reconciler/types.js.map +1 -0
  610. package/dist/v2/renderers/index.d.ts +7 -0
  611. package/dist/v2/renderers/index.d.ts.map +1 -0
  612. package/dist/v2/renderers/index.js +7 -0
  613. package/dist/v2/renderers/index.js.map +1 -0
  614. package/dist/v2/renderers/markdown.d.ts +16 -0
  615. package/dist/v2/renderers/markdown.d.ts.map +1 -0
  616. package/dist/v2/renderers/markdown.js +65 -0
  617. package/dist/v2/renderers/markdown.js.map +1 -0
  618. package/dist/v2/renderers/types.d.ts +26 -0
  619. package/dist/v2/renderers/types.d.ts.map +1 -0
  620. package/dist/v2/renderers/types.js +6 -0
  621. package/dist/v2/renderers/types.js.map +1 -0
  622. package/dist/v2/renderers/xml.d.ts +17 -0
  623. package/dist/v2/renderers/xml.d.ts.map +1 -0
  624. package/dist/v2/renderers/xml.js +73 -0
  625. package/dist/v2/renderers/xml.js.map +1 -0
  626. package/package.json +49 -0
@@ -0,0 +1,706 @@
1
+ import { isEventBlock, StopReason } from "@agentick/shared";
2
+ import { Logger } from "@agentick/kernel";
3
+ const log = Logger.for("language-model");
4
+ function deriveStopReason(output) {
5
+ if (!output.stopReason) {
6
+ return undefined;
7
+ }
8
+ return {
9
+ reason: output.stopReason,
10
+ description: `Stopped due to ${output.stopReason}`,
11
+ recoverable: false,
12
+ metadata: {
13
+ usage: output.usage,
14
+ model: output.model,
15
+ },
16
+ };
17
+ }
18
+ function isTerminalStopReason(reason) {
19
+ const terminalReasons = [
20
+ StopReason.STOP,
21
+ StopReason.EXPLICIT_COMPLETION,
22
+ StopReason.NATURAL_COMPLETION,
23
+ StopReason.MAX_TOKENS,
24
+ StopReason.CONTENT_FILTER,
25
+ ];
26
+ return terminalReasons.includes(reason);
27
+ }
28
+ // ============================================================================
29
+ // Transformer Functions
30
+ // ============================================================================
31
+ /** Default message transformation config */
32
+ const DEFAULT_TRANSFORMATION_CONFIG = {
33
+ preferredRenderer: "markdown",
34
+ roleMapping: {
35
+ event: "user",
36
+ ephemeral: "user",
37
+ },
38
+ delimiters: {
39
+ event: "[Event]",
40
+ ephemeral: "[Context]",
41
+ useDelimiters: true,
42
+ },
43
+ ephemeralPosition: "flow",
44
+ };
45
+ /**
46
+ * Resolve message transformation config from model capabilities and options.
47
+ * Handles function-based configs that need model ID/provider to resolve.
48
+ */
49
+ function resolveTransformationConfig(modelId, provider, modelCapabilities, modelOptions, inputModelOptions) {
50
+ // 1. Get base config from model capabilities (resolve function if needed)
51
+ let baseConfig;
52
+ if (modelCapabilities?.messageTransformation) {
53
+ const cap = modelCapabilities.messageTransformation;
54
+ baseConfig = typeof cap === "function" ? cap(modelId, provider) : cap;
55
+ }
56
+ // 2. Merge with modelOptions.messageTransformation
57
+ // 3. Merge with inputModelOptions.messageTransformation
58
+ // 4. Apply defaults
59
+ return {
60
+ ...DEFAULT_TRANSFORMATION_CONFIG,
61
+ ...baseConfig,
62
+ ...modelOptions?.messageTransformation,
63
+ ...inputModelOptions?.messageTransformation,
64
+ roleMapping: {
65
+ ...DEFAULT_TRANSFORMATION_CONFIG.roleMapping,
66
+ ...baseConfig?.roleMapping,
67
+ ...modelOptions?.messageTransformation?.roleMapping,
68
+ ...inputModelOptions?.messageTransformation?.roleMapping,
69
+ },
70
+ delimiters: {
71
+ ...DEFAULT_TRANSFORMATION_CONFIG.delimiters,
72
+ ...baseConfig?.delimiters,
73
+ ...modelOptions?.messageTransformation?.delimiters,
74
+ ...inputModelOptions?.messageTransformation?.delimiters,
75
+ },
76
+ };
77
+ }
78
+ /**
79
+ * Helper to check if delimiter config is per-block-type
80
+ */
81
+ function isBlockDelimiters(delimiter) {
82
+ if (!delimiter || typeof delimiter === "string")
83
+ return false;
84
+ // Check if it has any of the block-type keys
85
+ return ("user_action" in delimiter ||
86
+ "system_event" in delimiter ||
87
+ "state_change" in delimiter ||
88
+ "default" in delimiter);
89
+ }
90
+ /**
91
+ * Get delimiter for a specific block type
92
+ */
93
+ function getDelimiterForBlock(blockType, delimiters) {
94
+ switch (blockType) {
95
+ case "user_action":
96
+ return delimiters.user_action ?? delimiters.default;
97
+ case "system_event":
98
+ return delimiters.system_event ?? delimiters.default;
99
+ case "state_change":
100
+ return delimiters.state_change ?? delimiters.default;
101
+ default:
102
+ return delimiters.default;
103
+ }
104
+ }
105
+ /**
106
+ * Wrap text with delimiter
107
+ */
108
+ function wrapTextWithDelimiter(text, delimiter) {
109
+ if (!delimiter) {
110
+ return [{ type: "text", text }];
111
+ }
112
+ const result = [];
113
+ const startDelim = typeof delimiter === "string" ? delimiter : delimiter.start;
114
+ const endDelim = typeof delimiter === "string" ? "" : delimiter.end;
115
+ if (startDelim) {
116
+ result.push({
117
+ type: "text",
118
+ text: `${startDelim} ${text}${endDelim ? ` ${endDelim}` : ""}`,
119
+ });
120
+ }
121
+ else {
122
+ result.push({ type: "text", text });
123
+ }
124
+ return result;
125
+ }
126
+ /**
127
+ * Convert unsupported content blocks to text blocks for ModelInput.
128
+ *
129
+ * Models only support a subset of ContentBlock types natively:
130
+ * - text, image, document, audio, video, tool_use, tool_result, reasoning
131
+ *
132
+ * Unsupported types must be converted to text:
133
+ * - code → markdown code fences
134
+ * - json → markdown JSON code fences
135
+ * - Other convertible types → text representation
136
+ *
137
+ * This ensures ModelInput only contains ModelInputContentBlock types.
138
+ *
139
+ * @param blocks - Content blocks from COMInput (may include unsupported types)
140
+ * @returns Content blocks suitable for ModelInput (only supported types)
141
+ */
142
+ function convertUnsupportedBlocksToText(blocks) {
143
+ return blocks.flatMap((block) => {
144
+ // Code blocks → markdown code fences
145
+ if (block.type === "code") {
146
+ const codeBlock = block;
147
+ const language = codeBlock.language || "";
148
+ return [
149
+ {
150
+ type: "text",
151
+ text: `\`\`\`${language}\n${codeBlock.text}\n\`\`\``,
152
+ },
153
+ ];
154
+ }
155
+ // JSON blocks → markdown JSON code fences
156
+ if (block.type === "json") {
157
+ const jsonBlock = block;
158
+ const jsonText = jsonBlock.text || JSON.stringify(jsonBlock.data || {}, null, 2);
159
+ return [
160
+ {
161
+ type: "text",
162
+ text: `\`\`\`json\n${jsonText}\n\`\`\``,
163
+ },
164
+ ];
165
+ }
166
+ // Event blocks are handled separately by transformEventContent
167
+ // Other unsupported types → convert to text representation
168
+ // (xml, csv, html, generated_image, etc.)
169
+ const unsupportedTypes = [
170
+ "xml",
171
+ "csv",
172
+ "html",
173
+ "generated_image",
174
+ "generated_file",
175
+ "executable_code",
176
+ "code_execution_result",
177
+ ];
178
+ if (unsupportedTypes.includes(block.type)) {
179
+ // Convert to text representation
180
+ const text = block.text || JSON.stringify(block, null, 2);
181
+ return [
182
+ {
183
+ type: "text",
184
+ text,
185
+ },
186
+ ];
187
+ }
188
+ // Pass through supported block types unchanged
189
+ // (text, image, document, audio, video, tool_use, tool_result, reasoning)
190
+ return [block];
191
+ });
192
+ }
193
+ /**
194
+ * Extract text representation from an event block.
195
+ * Uses the block's `text` field if available, otherwise generates from semantic fields.
196
+ */
197
+ function getEventBlockText(block) {
198
+ // Text blocks use their text directly
199
+ if (block.type === "text") {
200
+ return block.text;
201
+ }
202
+ // Event blocks: use text field if available, else serialize semantic data
203
+ const eventBlock = block;
204
+ if ("text" in eventBlock && eventBlock.text) {
205
+ return eventBlock.text;
206
+ }
207
+ // Fallback: generate text from semantic fields
208
+ switch (block.type) {
209
+ case "user_action": {
210
+ const ua = block;
211
+ const parts = [ua.actor || "User", ua.action];
212
+ if (ua.target)
213
+ parts.push(`on ${ua.target}`);
214
+ return parts.join(" ");
215
+ }
216
+ case "system_event": {
217
+ const se = block;
218
+ const parts = [se.event];
219
+ if (se.source)
220
+ parts.push(`(${se.source})`);
221
+ return parts.join(" ");
222
+ }
223
+ case "state_change": {
224
+ const sc = block;
225
+ return `${sc.entity}${sc.field ? `.${sc.field}` : ""}: ${JSON.stringify(sc.from)} → ${JSON.stringify(sc.to)}`;
226
+ }
227
+ default:
228
+ return JSON.stringify(block);
229
+ }
230
+ }
231
+ /**
232
+ * Transform event message content based on unified config.
233
+ *
234
+ * Supports:
235
+ * - Custom formatBlock function (full control)
236
+ * - Per-block-type delimiters (uses block.text if available)
237
+ * - Simple delimiter (wraps all content)
238
+ *
239
+ * Event blocks with `text` field use that for content; otherwise
240
+ * a default representation is generated from semantic fields.
241
+ *
242
+ * Note: This is called AFTER StructureRenderer formats event blocks to text.
243
+ * If content is already text blocks (formatted by renderer), delimiters are
244
+ * only applied if useDelimiters is true. If content is still event blocks,
245
+ * they are converted to text first, then delimiters are applied.
246
+ */
247
+ function transformEventContent(content, config) {
248
+ // If custom formatter provided, use it for each block
249
+ if (config.formatBlock) {
250
+ return content.flatMap((block) => {
251
+ if (isEventBlock(block) || block.type === "text") {
252
+ return config.formatBlock(block);
253
+ }
254
+ // Non-event blocks pass through
255
+ return [block];
256
+ });
257
+ }
258
+ // Check if delimiters should be used
259
+ if (!config.delimiters?.useDelimiters) {
260
+ return content;
261
+ }
262
+ const delimiter = config.delimiters.event;
263
+ if (!delimiter) {
264
+ return content;
265
+ }
266
+ // Check if content is already formatted text blocks (from renderer)
267
+ // If so, we need to extract the text and wrap it with delimiters
268
+ const _isAlreadyFormatted = content.every((block) => block.type === "text");
269
+ // Per-block-type delimiters - extract text and wrap each block
270
+ if (isBlockDelimiters(delimiter)) {
271
+ const wrapped = content.flatMap((block) => {
272
+ const blockText = getEventBlockText(block);
273
+ // Skip empty text blocks
274
+ if (!blockText || blockText.trim() === "") {
275
+ return [];
276
+ }
277
+ const blockDelim = getDelimiterForBlock(block.type, delimiter);
278
+ return wrapTextWithDelimiter(blockText, blockDelim);
279
+ });
280
+ // If all blocks were empty, return original content (don't add delimiters to empty content)
281
+ return wrapped.length > 0 ? wrapped : content;
282
+ }
283
+ // Simple delimiter - combine all block texts and wrap
284
+ const allText = content
285
+ .map(getEventBlockText)
286
+ .filter((text) => text && text.trim() !== "")
287
+ .join("\n");
288
+ if (!allText || allText.trim() === "") {
289
+ // If no text content, return original content (don't add delimiters to empty content)
290
+ return content;
291
+ }
292
+ return wrapTextWithDelimiter(allText, delimiter);
293
+ }
294
+ /**
295
+ * Convert an EphemeralEntry to a Message with the configured role and formatting.
296
+ *
297
+ * Content is already consolidated by StructureRenderer - this just applies
298
+ * delimiters and role mapping.
299
+ *
300
+ * @param entry - Ephemeral entry to convert
301
+ * @param config - Unified transformation configuration
302
+ */
303
+ function ephemeralEntryToMessage(entry, config) {
304
+ // Build content with delimiters
305
+ let content = [...entry.content];
306
+ // Apply delimiters if enabled
307
+ if (config.delimiters?.useDelimiters && config.delimiters.ephemeral) {
308
+ const delimiter = config.delimiters.ephemeral;
309
+ const startDelim = typeof delimiter === "string" ? delimiter : delimiter.start;
310
+ const endDelim = typeof delimiter === "string" ? "" : delimiter.end;
311
+ // Prepend delimiter to first text block if possible, otherwise add as new block
312
+ if (startDelim) {
313
+ if (content.length > 0 && content[0].type === "text") {
314
+ content[0] = {
315
+ type: "text",
316
+ text: `${startDelim}\n${content[0].text}`,
317
+ };
318
+ }
319
+ else {
320
+ content.unshift({ type: "text", text: startDelim });
321
+ }
322
+ }
323
+ // Append delimiter to last text block if possible, otherwise add as new block
324
+ if (endDelim) {
325
+ const lastIdx = content.length - 1;
326
+ if (lastIdx >= 0 && content[lastIdx].type === "text") {
327
+ content[lastIdx] = {
328
+ type: "text",
329
+ text: `${content[lastIdx].text}\n${endDelim}`,
330
+ };
331
+ }
332
+ else {
333
+ content.push({ type: "text", text: endDelim });
334
+ }
335
+ }
336
+ }
337
+ // Convert unsupported blocks to text (models don't support code/json blocks natively)
338
+ content = convertUnsupportedBlocksToText(content);
339
+ const role = config.roleMapping?.ephemeral || "user";
340
+ // Map 'developer' to 'user' for Message type (adapter will convert to 'developer' if supported)
341
+ const messageRole = role === "developer" ? "user" : role;
342
+ return {
343
+ role: messageRole,
344
+ content,
345
+ };
346
+ }
347
+ /**
348
+ * Interleave ephemeral entries into the message array based on their position.
349
+ *
350
+ * Ephemeral entries are NOT Messages - they are transient content that gets
351
+ * converted to Messages and inserted at the appropriate positions.
352
+ *
353
+ * Position semantics:
354
+ * - 'flow': In declaration order (converted and appended to messages)
355
+ * - 'after-system': Immediately after the last system message
356
+ * - 'start': After system + after-system, before conversation
357
+ * - 'before-user': Just before the last user message
358
+ * - 'end': At the very end
359
+ *
360
+ * Entries with the same position are ordered by their `order` property (lower = earlier).
361
+ *
362
+ * @param messages - Timeline messages (persisted)
363
+ * @param ephemeral - Ephemeral entries (transient)
364
+ * @param config - Role and formatting configuration for conversion
365
+ */
366
+ function interleaveEphemeral(messages, ephemeral, config) {
367
+ if (ephemeral.length === 0) {
368
+ return messages;
369
+ }
370
+ // Group ephemeral entries by position
371
+ const defaultPosition = config.ephemeralPosition || "flow";
372
+ const positionBuckets = {
373
+ flow: [],
374
+ "after-system": [],
375
+ start: [],
376
+ "before-user": [],
377
+ end: [],
378
+ };
379
+ for (const entry of ephemeral) {
380
+ const entryPosition = entry.position || defaultPosition;
381
+ const bucket = positionBuckets[entryPosition] || positionBuckets["end"];
382
+ bucket.push(entry);
383
+ }
384
+ // Sort each bucket by order (lower = earlier)
385
+ const sortByOrder = (a, b) => {
386
+ return (a.order ?? 0) - (b.order ?? 0);
387
+ };
388
+ for (const bucket of Object.values(positionBuckets)) {
389
+ bucket.sort(sortByOrder);
390
+ }
391
+ // Convert buckets to messages
392
+ const toMessages = (entries) => entries.map((e) => ephemeralEntryToMessage(e, config));
393
+ // If only flow entries, append them as messages
394
+ const hasPositionedEntries = positionBuckets["after-system"].length > 0 ||
395
+ positionBuckets["start"].length > 0 ||
396
+ positionBuckets["before-user"].length > 0 ||
397
+ positionBuckets["end"].length > 0;
398
+ if (!hasPositionedEntries) {
399
+ // Flow entries get appended at the end (they represent current state)
400
+ return [...messages, ...toMessages(positionBuckets["flow"])];
401
+ }
402
+ // Find key positions in messages
403
+ let lastSystemIdx = -1;
404
+ let lastUserIdx = -1;
405
+ for (let i = 0; i < messages.length; i++) {
406
+ if (messages[i].role === "system") {
407
+ lastSystemIdx = i;
408
+ }
409
+ if (messages[i].role === "user") {
410
+ lastUserIdx = i;
411
+ }
412
+ }
413
+ // Build result with ephemeral messages inserted at the right points
414
+ const result = [];
415
+ let insertedAfterSystem = false;
416
+ let insertedStart = false;
417
+ let insertedBeforeUser = false;
418
+ for (let i = 0; i < messages.length; i++) {
419
+ const msg = messages[i];
420
+ // Insert after-system after the last system message
421
+ if (!insertedAfterSystem && lastSystemIdx >= 0 && i === lastSystemIdx) {
422
+ result.push(msg);
423
+ result.push(...toMessages(positionBuckets["after-system"]));
424
+ insertedAfterSystem = true;
425
+ // Also insert 'start' after system
426
+ result.push(...toMessages(positionBuckets["start"]));
427
+ insertedStart = true;
428
+ continue;
429
+ }
430
+ // Insert start at beginning if no system messages
431
+ if (!insertedStart && lastSystemIdx === -1 && i === 0) {
432
+ result.push(...toMessages(positionBuckets["after-system"]));
433
+ result.push(...toMessages(positionBuckets["start"]));
434
+ insertedStart = true;
435
+ }
436
+ // Insert before-user before the last user message
437
+ if (!insertedBeforeUser && lastUserIdx >= 0 && i === lastUserIdx) {
438
+ result.push(...toMessages(positionBuckets["before-user"]));
439
+ insertedBeforeUser = true;
440
+ }
441
+ result.push(msg);
442
+ }
443
+ // Handle edge cases - insert any positioned messages that weren't inserted
444
+ if (!insertedAfterSystem) {
445
+ result.unshift(...toMessages(positionBuckets["after-system"]));
446
+ }
447
+ if (!insertedStart) {
448
+ const afterSystemCount = positionBuckets["after-system"].length;
449
+ result.splice(afterSystemCount, 0, ...toMessages(positionBuckets["start"]));
450
+ }
451
+ if (!insertedBeforeUser && positionBuckets["before-user"].length > 0) {
452
+ result.push(...toMessages(positionBuckets["before-user"]));
453
+ }
454
+ // Flow entries go before positioned 'end' entries
455
+ result.push(...toMessages(positionBuckets["flow"]));
456
+ // End always goes at the very end
457
+ result.push(...toMessages(positionBuckets["end"]));
458
+ return result;
459
+ }
460
+ /**
461
+ * Convert COMInput to ModelInput
462
+ *
463
+ * @param input - COMInput from engine state
464
+ * @param modelOptions - Optional model options to merge into ModelInput (can also be provided via input.modelOptions)
465
+ * @param model - Optional model instance to get transformation config from capabilities
466
+ * @returns ModelInput with modelOptions merged in
467
+ */
468
+ export async function fromEngineState(input, modelOptions, model) {
469
+ // Resolve transformation config from model capabilities and options
470
+ const modelId = model?.metadata.id || model?.metadata.model || "";
471
+ const provider = model?.metadata.provider;
472
+ const transformationConfig = resolveTransformationConfig(modelId, provider, model?.metadata.capabilities, modelOptions, input.modelOptions);
473
+ // Extract conversation messages from timeline (excludes system - those are in input.system)
474
+ log.debug({ timelineCount: input.timeline.length }, "fromEngineState processing timeline");
475
+ input.timeline.forEach((entry, i) => {
476
+ log.debug({ index: i, kind: entry.kind, role: entry.message?.role }, "fromEngineState timeline entry");
477
+ });
478
+ const timelineMessages = input.timeline
479
+ .filter((entry) => entry.kind === "message")
480
+ .map((entry) => entry.message);
481
+ log.debug({ timelineMessagesCount: timelineMessages.length }, "fromEngineState extracted timeline messages");
482
+ // Transform event messages (models don't understand 'event' role)
483
+ // Also convert code/json blocks to markdown text (models don't support code blocks natively)
484
+ const conversationMessages = timelineMessages.map((msg) => {
485
+ let content = msg.content;
486
+ // Transform event messages
487
+ if (msg.role === "event") {
488
+ content = transformEventContent(content, transformationConfig);
489
+ const eventRole = transformationConfig.roleMapping?.event || "user";
490
+ // Map 'developer' to 'user' for Message type (adapter will convert to 'developer' if supported)
491
+ const messageRole = eventRole === "developer"
492
+ ? "user"
493
+ : eventRole === "event"
494
+ ? "user"
495
+ : eventRole;
496
+ return {
497
+ ...msg,
498
+ role: messageRole,
499
+ content: convertUnsupportedBlocksToText(content),
500
+ };
501
+ }
502
+ // Convert unsupported blocks to text for all messages (code/json blocks → markdown)
503
+ return {
504
+ ...msg,
505
+ content: convertUnsupportedBlocksToText(content),
506
+ };
507
+ });
508
+ // Build base message array: system messages FIRST, then conversation
509
+ const baseMessages = [];
510
+ // System messages come from input.system (rebuilt fresh each tick by StructureRenderer)
511
+ // Unwrap from COMTimelineEntry envelope and convert unsupported blocks to text
512
+ if (input.system && input.system.length > 0) {
513
+ const systemMessages = input.system
514
+ .filter((entry) => entry.kind === "message")
515
+ .map((entry) => ({
516
+ ...entry.message,
517
+ content: convertUnsupportedBlocksToText(entry.message.content),
518
+ }));
519
+ baseMessages.push(...systemMessages);
520
+ }
521
+ else {
522
+ // No system message exists - create one from sections (fallback for direct model calls)
523
+ const systemSections = Object.values(input.sections)
524
+ .filter((s) => s.audience === "model")
525
+ .map((s) => {
526
+ // Use formattedContent if available (already processed ContentBlocks)
527
+ const contentToUse = s.formattedContent ?? s.content;
528
+ if (typeof contentToUse === "string") {
529
+ return s.title ? `${s.title}: ${contentToUse}` : contentToUse;
530
+ }
531
+ // If it's an array of content blocks, extract text
532
+ if (Array.isArray(contentToUse)) {
533
+ const text = contentToUse
534
+ .map((block) => {
535
+ if (typeof block === "string")
536
+ return block;
537
+ if (block && typeof block === "object" && "text" in block) {
538
+ return block.text;
539
+ }
540
+ return "";
541
+ })
542
+ .filter(Boolean)
543
+ .join("\n");
544
+ return s.title ? `${s.title}: ${text}` : text;
545
+ }
546
+ // Fallback for other types
547
+ return s.title ? `${s.title}: ${String(contentToUse)}` : String(contentToUse);
548
+ });
549
+ if (systemSections.length > 0) {
550
+ baseMessages.push({
551
+ role: "system",
552
+ content: [{ type: "text", text: systemSections.join("\n\n") }],
553
+ });
554
+ }
555
+ }
556
+ // Add conversation messages after system
557
+ baseMessages.push(...conversationMessages);
558
+ // NOW interleave ephemeral entries into the correctly-ordered message array
559
+ // This happens AFTER system consolidation so positions are respected
560
+ const messages = interleaveEphemeral(baseMessages, input.ephemeral || [], transformationConfig);
561
+ // Convert tools to ModelInput format
562
+ const tools = input.tools || [];
563
+ // Build base ModelInput
564
+ const baseModelInput = {
565
+ messages,
566
+ tools: tools.length > 0 ? tools : [],
567
+ };
568
+ // Merge modelOptions from input.modelOptions or passed parameter
569
+ const optionsToMerge = modelOptions || input.modelOptions;
570
+ if (optionsToMerge) {
571
+ // Merge modelOptions into ModelInput
572
+ // Only include defined values
573
+ if (optionsToMerge.model !== undefined) {
574
+ baseModelInput.model = optionsToMerge.model;
575
+ }
576
+ if (optionsToMerge.temperature !== undefined) {
577
+ baseModelInput.temperature = optionsToMerge.temperature;
578
+ }
579
+ if (optionsToMerge.maxTokens !== undefined) {
580
+ baseModelInput.maxTokens = optionsToMerge.maxTokens;
581
+ }
582
+ if (optionsToMerge.topP !== undefined) {
583
+ baseModelInput.topP = optionsToMerge.topP;
584
+ }
585
+ if (optionsToMerge.frequencyPenalty !== undefined) {
586
+ baseModelInput.frequencyPenalty = optionsToMerge.frequencyPenalty;
587
+ }
588
+ if (optionsToMerge.presencePenalty !== undefined) {
589
+ baseModelInput.presencePenalty = optionsToMerge.presencePenalty;
590
+ }
591
+ if (optionsToMerge.stop !== undefined) {
592
+ baseModelInput.stop = optionsToMerge.stop;
593
+ }
594
+ if (optionsToMerge.providerOptions !== undefined) {
595
+ baseModelInput.providerOptions = optionsToMerge.providerOptions;
596
+ }
597
+ if (optionsToMerge.responseFormat !== undefined) {
598
+ baseModelInput.responseFormat = optionsToMerge.responseFormat;
599
+ }
600
+ // Note: tools from modelOptions are not merged - we use tools from COMInput.tools
601
+ }
602
+ return baseModelInput;
603
+ }
604
+ /**
605
+ * Extract tool calls and results from messages, separating pending from executed.
606
+ *
607
+ * Provider/adapter-executed tools will have both tool_use and tool_result messages.
608
+ * Pending tools will only have tool_use without corresponding tool_result.
609
+ */
610
+ function extractToolCallsAndResults(messages) {
611
+ // First pass: collect all toolUseIds that have tool_result messages
612
+ const executedToolIds = new Set();
613
+ const executedResults = [];
614
+ for (const msg of messages) {
615
+ if (msg.role === "tool") {
616
+ for (const block of msg.content) {
617
+ if (block.type === "tool_result") {
618
+ const toolResultBlock = block;
619
+ executedToolIds.add(toolResultBlock.toolUseId);
620
+ executedResults.push({
621
+ id: toolResultBlock.id,
622
+ toolUseId: toolResultBlock.toolUseId,
623
+ name: toolResultBlock.name || "unknown",
624
+ content: toolResultBlock.content || [],
625
+ success: !toolResultBlock.isError,
626
+ executedBy: "adapter", // or 'provider' - could be refined based on metadata
627
+ });
628
+ }
629
+ }
630
+ }
631
+ }
632
+ // Second pass: collect tool_use blocks that weren't executed
633
+ const pendingToolCalls = [];
634
+ for (const msg of messages) {
635
+ if (msg.role === "assistant") {
636
+ for (const block of msg.content) {
637
+ if (block.type === "tool_use") {
638
+ const toolUseBlock = block;
639
+ // Support both `toolUseId` (standard) and `id` (some providers)
640
+ const toolId = toolUseBlock.toolUseId || toolUseBlock.id || "";
641
+ // Only include if not already executed
642
+ if (!executedToolIds.has(toolId)) {
643
+ pendingToolCalls.push({
644
+ id: toolId,
645
+ name: toolUseBlock.name,
646
+ input: toolUseBlock.input || {},
647
+ });
648
+ }
649
+ }
650
+ }
651
+ }
652
+ }
653
+ return { pendingToolCalls, executedToolResults: executedResults };
654
+ }
655
+ /**
656
+ * Convert ModelOutput to EngineResponse
657
+ */
658
+ export async function toEngineState(output) {
659
+ // Derive structured stop reason information
660
+ const stopReasonInfo = deriveStopReason(output);
661
+ // Use messages array if available, fall back to single message
662
+ const messages = output.messages?.length
663
+ ? output.messages
664
+ : output.message
665
+ ? [output.message]
666
+ : [];
667
+ // Extract tool calls and results, separating pending from executed
668
+ const { pendingToolCalls, executedToolResults } = extractToolCallsAndResults(messages);
669
+ // Also check output.toolCalls for backward compatibility
670
+ // These would be from adapters that don't use messages array
671
+ const legacyToolCalls = output.toolCalls?.map((tc) => ({
672
+ id: tc.id,
673
+ name: tc.name,
674
+ input: tc.input,
675
+ })) || [];
676
+ // Merge: pendingToolCalls from messages + legacy toolCalls (dedupe by id)
677
+ const seenIds = new Set(pendingToolCalls.map((tc) => tc.id));
678
+ const allPendingToolCalls = [
679
+ ...pendingToolCalls,
680
+ ...legacyToolCalls.filter((tc) => !seenIds.has(tc.id)),
681
+ ];
682
+ // Determine if we should stop:
683
+ // 1. No tool calls AND terminal stop reason, OR
684
+ // 2. No tool calls AND empty content (model has nothing to say)
685
+ const hasToolCalls = allPendingToolCalls.length > 0;
686
+ const hasContent = messages.some((msg) => msg.role !== "tool" && msg.content && Array.isArray(msg.content) && msg.content.length > 0);
687
+ const isTerminal = stopReasonInfo ? isTerminalStopReason(stopReasonInfo.reason) : false;
688
+ // Stop if: no tool calls AND (terminal stop reason OR empty response)
689
+ // This prevents infinite loops when model returns empty content with UNSPECIFIED stop reason
690
+ const shouldStop = !hasToolCalls && (isTerminal || !hasContent);
691
+ return {
692
+ newTimelineEntries: messages
693
+ .filter((msg) => msg.role !== "tool") // Tool messages handled separately
694
+ .map((msg) => ({
695
+ kind: "message",
696
+ message: msg,
697
+ tags: ["model_output"],
698
+ })),
699
+ toolCalls: allPendingToolCalls.length > 0 ? allPendingToolCalls : undefined,
700
+ executedToolResults: executedToolResults.length > 0 ? executedToolResults : undefined,
701
+ usage: output.usage,
702
+ shouldStop,
703
+ stopReason: stopReasonInfo,
704
+ };
705
+ }
706
+ //# sourceMappingURL=language-model.js.map