@falai/agent 3.4.5 → 4.0.0-alpha.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 (847) hide show
  1. package/README.md +41 -34
  2. package/dist/cjs/core/Agent.d.ts +22 -378
  3. package/dist/cjs/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/core/Agent.js +104 -1178
  5. package/dist/cjs/core/Agent.js.map +1 -1
  6. package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
  7. package/dist/cjs/core/CompactionEngine.js +5 -3
  8. package/dist/cjs/core/CompactionEngine.js.map +1 -1
  9. package/dist/cjs/core/FlowSpec.d.ts +136 -0
  10. package/dist/cjs/core/FlowSpec.d.ts.map +1 -0
  11. package/dist/cjs/core/FlowSpec.js +522 -0
  12. package/dist/cjs/core/FlowSpec.js.map +1 -0
  13. package/dist/cjs/core/Migrate.d.ts +38 -0
  14. package/dist/cjs/core/Migrate.d.ts.map +1 -0
  15. package/dist/cjs/core/Migrate.js +270 -0
  16. package/dist/cjs/core/Migrate.js.map +1 -0
  17. package/dist/cjs/core/Prompt.d.ts +54 -0
  18. package/dist/cjs/core/Prompt.d.ts.map +1 -0
  19. package/dist/cjs/core/Prompt.js +143 -0
  20. package/dist/cjs/core/Prompt.js.map +1 -0
  21. package/dist/cjs/core/Runner.d.ts +160 -0
  22. package/dist/cjs/core/Runner.d.ts.map +1 -0
  23. package/dist/cjs/core/Runner.js +1131 -0
  24. package/dist/cjs/core/Runner.js.map +1 -0
  25. package/dist/cjs/core/Speak.d.ts +37 -0
  26. package/dist/cjs/core/Speak.d.ts.map +1 -0
  27. package/dist/cjs/core/Speak.js +364 -0
  28. package/dist/cjs/core/Speak.js.map +1 -0
  29. package/dist/cjs/core/Understand.d.ts +28 -0
  30. package/dist/cjs/core/Understand.d.ts.map +1 -0
  31. package/dist/cjs/core/Understand.js +353 -0
  32. package/dist/cjs/core/Understand.js.map +1 -0
  33. package/dist/cjs/core/contracts.d.ts +122 -0
  34. package/dist/cjs/core/contracts.d.ts.map +1 -0
  35. package/dist/cjs/core/contracts.js +11 -0
  36. package/dist/cjs/core/contracts.js.map +1 -0
  37. package/dist/cjs/core/falai.d.ts +57 -0
  38. package/dist/cjs/core/falai.d.ts.map +1 -0
  39. package/dist/cjs/core/falai.js +43 -0
  40. package/dist/cjs/core/falai.js.map +1 -0
  41. package/dist/cjs/core/predicate.d.ts +9 -0
  42. package/dist/cjs/core/predicate.d.ts.map +1 -0
  43. package/dist/cjs/core/predicate.js +58 -0
  44. package/dist/cjs/core/predicate.js.map +1 -0
  45. package/dist/cjs/index.d.ts +26 -31
  46. package/dist/cjs/index.d.ts.map +1 -1
  47. package/dist/cjs/index.js +46 -68
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/persistence/MemoryStore.d.ts +15 -0
  50. package/dist/cjs/persistence/MemoryStore.d.ts.map +1 -0
  51. package/dist/cjs/persistence/MemoryStore.js +39 -0
  52. package/dist/cjs/persistence/MemoryStore.js.map +1 -0
  53. package/dist/cjs/persistence/MongoStore.d.ts +42 -0
  54. package/dist/cjs/persistence/MongoStore.d.ts.map +1 -0
  55. package/dist/cjs/persistence/MongoStore.js +60 -0
  56. package/dist/cjs/persistence/MongoStore.js.map +1 -0
  57. package/dist/cjs/persistence/OpenSearchStore.d.ts +86 -0
  58. package/dist/cjs/persistence/OpenSearchStore.d.ts.map +1 -0
  59. package/dist/cjs/persistence/OpenSearchStore.js +120 -0
  60. package/dist/cjs/persistence/OpenSearchStore.js.map +1 -0
  61. package/dist/cjs/persistence/PostgresStore.d.ts +41 -0
  62. package/dist/cjs/persistence/PostgresStore.d.ts.map +1 -0
  63. package/dist/cjs/persistence/PostgresStore.js +58 -0
  64. package/dist/cjs/persistence/PostgresStore.js.map +1 -0
  65. package/dist/cjs/persistence/PrismaStore.d.ts +65 -0
  66. package/dist/cjs/persistence/PrismaStore.d.ts.map +1 -0
  67. package/dist/cjs/persistence/PrismaStore.js +95 -0
  68. package/dist/cjs/persistence/PrismaStore.js.map +1 -0
  69. package/dist/cjs/persistence/RedisStore.d.ts +34 -0
  70. package/dist/cjs/persistence/RedisStore.d.ts.map +1 -0
  71. package/dist/cjs/persistence/RedisStore.js +61 -0
  72. package/dist/cjs/persistence/RedisStore.js.map +1 -0
  73. package/dist/cjs/persistence/SQLiteStore.d.ts +45 -0
  74. package/dist/cjs/persistence/SQLiteStore.d.ts.map +1 -0
  75. package/dist/cjs/persistence/SQLiteStore.js +74 -0
  76. package/dist/cjs/persistence/SQLiteStore.js.map +1 -0
  77. package/dist/cjs/persistence/sessionRow.d.ts +14 -0
  78. package/dist/cjs/persistence/sessionRow.d.ts.map +1 -0
  79. package/dist/cjs/persistence/sessionRow.js +50 -0
  80. package/dist/cjs/persistence/sessionRow.js.map +1 -0
  81. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
  82. package/dist/cjs/providers/DeepSeekProvider.js +8 -3
  83. package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
  84. package/dist/cjs/providers/GeminiProvider.d.ts +4 -3
  85. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  86. package/dist/cjs/providers/GeminiProvider.js +4 -3
  87. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  88. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +4 -0
  89. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  90. package/dist/cjs/providers/OpenAICompatibleProvider.js +2 -0
  91. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
  92. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  93. package/dist/cjs/providers/OpenRouterProvider.js +2 -4
  94. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  95. package/dist/cjs/providers/ProviderAdapter.d.ts +1 -1
  96. package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -1
  97. package/dist/cjs/providers/ProviderAdapter.js +33 -10
  98. package/dist/cjs/providers/ProviderAdapter.js.map +1 -1
  99. package/dist/cjs/types/agent.d.ts +153 -383
  100. package/dist/cjs/types/agent.d.ts.map +1 -1
  101. package/dist/cjs/types/agent.js +1 -1
  102. package/dist/cjs/types/ai.d.ts +32 -1
  103. package/dist/cjs/types/ai.d.ts.map +1 -1
  104. package/dist/cjs/types/compaction.d.ts +3 -1
  105. package/dist/cjs/types/compaction.d.ts.map +1 -1
  106. package/dist/cjs/types/errors.d.ts +9 -12
  107. package/dist/cjs/types/errors.d.ts.map +1 -1
  108. package/dist/cjs/types/errors.js +14 -17
  109. package/dist/cjs/types/errors.js.map +1 -1
  110. package/dist/cjs/types/flow.d.ts +265 -513
  111. package/dist/cjs/types/flow.d.ts.map +1 -1
  112. package/dist/cjs/types/flow.js +7 -1
  113. package/dist/cjs/types/flow.js.map +1 -1
  114. package/dist/cjs/types/history.d.ts +7 -18
  115. package/dist/cjs/types/history.d.ts.map +1 -1
  116. package/dist/cjs/types/history.js.map +1 -1
  117. package/dist/cjs/types/index.d.ts +9 -15
  118. package/dist/cjs/types/index.d.ts.map +1 -1
  119. package/dist/cjs/types/index.js +4 -14
  120. package/dist/cjs/types/index.js.map +1 -1
  121. package/dist/cjs/types/session.d.ts +94 -64
  122. package/dist/cjs/types/session.d.ts.map +1 -1
  123. package/dist/cjs/types/session.js +5 -1
  124. package/dist/cjs/types/session.js.map +1 -1
  125. package/dist/cjs/types/tool.d.ts +37 -207
  126. package/dist/cjs/types/tool.d.ts.map +1 -1
  127. package/dist/cjs/types/tool.js +5 -14
  128. package/dist/cjs/types/tool.js.map +1 -1
  129. package/dist/cjs/utils/clock.d.ts +28 -0
  130. package/dist/cjs/utils/clock.d.ts.map +1 -0
  131. package/dist/cjs/utils/clock.js +64 -0
  132. package/dist/cjs/utils/clock.js.map +1 -0
  133. package/dist/cjs/utils/duration.d.ts +11 -0
  134. package/dist/cjs/utils/duration.d.ts.map +1 -0
  135. package/dist/cjs/utils/duration.js +31 -0
  136. package/dist/cjs/utils/duration.js.map +1 -0
  137. package/dist/cjs/utils/history.d.ts +4 -1
  138. package/dist/cjs/utils/history.d.ts.map +1 -1
  139. package/dist/cjs/utils/history.js +2 -2
  140. package/dist/cjs/utils/history.js.map +1 -1
  141. package/dist/cjs/utils/index.d.ts +4 -10
  142. package/dist/cjs/utils/index.d.ts.map +1 -1
  143. package/dist/cjs/utils/index.js +14 -61
  144. package/dist/cjs/utils/index.js.map +1 -1
  145. package/dist/cjs/utils/json.d.ts +2 -0
  146. package/dist/cjs/utils/json.d.ts.map +1 -1
  147. package/dist/cjs/utils/json.js +5 -0
  148. package/dist/cjs/utils/json.js.map +1 -1
  149. package/dist/cjs/utils/outcomes.d.ts +48 -0
  150. package/dist/cjs/utils/outcomes.d.ts.map +1 -0
  151. package/dist/cjs/utils/outcomes.js +51 -0
  152. package/dist/cjs/utils/outcomes.js.map +1 -0
  153. package/dist/cjs/utils/schema.d.ts +50 -0
  154. package/dist/cjs/utils/schema.d.ts.map +1 -0
  155. package/dist/cjs/utils/schema.js +138 -0
  156. package/dist/cjs/utils/schema.js.map +1 -0
  157. package/dist/cjs/utils/streamingMessage.d.ts +3 -2
  158. package/dist/cjs/utils/streamingMessage.d.ts.map +1 -1
  159. package/dist/cjs/utils/streamingMessage.js +38 -4
  160. package/dist/cjs/utils/streamingMessage.js.map +1 -1
  161. package/dist/cjs/utils/template.d.ts +13 -149
  162. package/dist/cjs/utils/template.d.ts.map +1 -1
  163. package/dist/cjs/utils/template.js +31 -363
  164. package/dist/cjs/utils/template.js.map +1 -1
  165. package/dist/cjs/utils/usage.d.ts +19 -0
  166. package/dist/cjs/utils/usage.d.ts.map +1 -0
  167. package/dist/cjs/utils/usage.js +35 -0
  168. package/dist/cjs/utils/usage.js.map +1 -0
  169. package/dist/core/Agent.d.ts +22 -378
  170. package/dist/core/Agent.d.ts.map +1 -1
  171. package/dist/core/Agent.js +107 -1181
  172. package/dist/core/Agent.js.map +1 -1
  173. package/dist/core/CompactionEngine.d.ts.map +1 -1
  174. package/dist/core/CompactionEngine.js +5 -3
  175. package/dist/core/CompactionEngine.js.map +1 -1
  176. package/dist/core/FlowSpec.d.ts +136 -0
  177. package/dist/core/FlowSpec.d.ts.map +1 -0
  178. package/dist/core/FlowSpec.js +516 -0
  179. package/dist/core/FlowSpec.js.map +1 -0
  180. package/dist/core/Migrate.d.ts +38 -0
  181. package/dist/core/Migrate.d.ts.map +1 -0
  182. package/dist/core/Migrate.js +264 -0
  183. package/dist/core/Migrate.js.map +1 -0
  184. package/dist/core/Prompt.d.ts +54 -0
  185. package/dist/core/Prompt.d.ts.map +1 -0
  186. package/dist/core/Prompt.js +133 -0
  187. package/dist/core/Prompt.js.map +1 -0
  188. package/dist/core/Runner.d.ts +160 -0
  189. package/dist/core/Runner.d.ts.map +1 -0
  190. package/dist/core/Runner.js +1127 -0
  191. package/dist/core/Runner.js.map +1 -0
  192. package/dist/core/Speak.d.ts +37 -0
  193. package/dist/core/Speak.d.ts.map +1 -0
  194. package/dist/core/Speak.js +360 -0
  195. package/dist/core/Speak.js.map +1 -0
  196. package/dist/core/Understand.d.ts +28 -0
  197. package/dist/core/Understand.d.ts.map +1 -0
  198. package/dist/core/Understand.js +349 -0
  199. package/dist/core/Understand.js.map +1 -0
  200. package/dist/core/contracts.d.ts +122 -0
  201. package/dist/core/contracts.d.ts.map +1 -0
  202. package/dist/core/contracts.js +10 -0
  203. package/dist/core/contracts.js.map +1 -0
  204. package/dist/core/falai.d.ts +57 -0
  205. package/dist/core/falai.d.ts.map +1 -0
  206. package/dist/core/falai.js +40 -0
  207. package/dist/core/falai.js.map +1 -0
  208. package/dist/core/predicate.d.ts +9 -0
  209. package/dist/core/predicate.d.ts.map +1 -0
  210. package/dist/core/predicate.js +54 -0
  211. package/dist/core/predicate.js.map +1 -0
  212. package/dist/index.d.ts +26 -31
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js +19 -24
  215. package/dist/index.js.map +1 -1
  216. package/dist/persistence/MemoryStore.d.ts +15 -0
  217. package/dist/persistence/MemoryStore.d.ts.map +1 -0
  218. package/dist/persistence/MemoryStore.js +35 -0
  219. package/dist/persistence/MemoryStore.js.map +1 -0
  220. package/dist/persistence/MongoStore.d.ts +42 -0
  221. package/dist/persistence/MongoStore.d.ts.map +1 -0
  222. package/dist/persistence/MongoStore.js +56 -0
  223. package/dist/persistence/MongoStore.js.map +1 -0
  224. package/dist/persistence/OpenSearchStore.d.ts +86 -0
  225. package/dist/persistence/OpenSearchStore.d.ts.map +1 -0
  226. package/dist/persistence/OpenSearchStore.js +116 -0
  227. package/dist/persistence/OpenSearchStore.js.map +1 -0
  228. package/dist/persistence/PostgresStore.d.ts +41 -0
  229. package/dist/persistence/PostgresStore.d.ts.map +1 -0
  230. package/dist/persistence/PostgresStore.js +54 -0
  231. package/dist/persistence/PostgresStore.js.map +1 -0
  232. package/dist/persistence/PrismaStore.d.ts +65 -0
  233. package/dist/persistence/PrismaStore.d.ts.map +1 -0
  234. package/dist/persistence/PrismaStore.js +91 -0
  235. package/dist/persistence/PrismaStore.js.map +1 -0
  236. package/dist/persistence/RedisStore.d.ts +34 -0
  237. package/dist/persistence/RedisStore.d.ts.map +1 -0
  238. package/dist/persistence/RedisStore.js +57 -0
  239. package/dist/persistence/RedisStore.js.map +1 -0
  240. package/dist/persistence/SQLiteStore.d.ts +45 -0
  241. package/dist/persistence/SQLiteStore.d.ts.map +1 -0
  242. package/dist/persistence/SQLiteStore.js +70 -0
  243. package/dist/persistence/SQLiteStore.js.map +1 -0
  244. package/dist/persistence/sessionRow.d.ts +14 -0
  245. package/dist/persistence/sessionRow.d.ts.map +1 -0
  246. package/dist/persistence/sessionRow.js +45 -0
  247. package/dist/persistence/sessionRow.js.map +1 -0
  248. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  249. package/dist/providers/DeepSeekProvider.js +8 -3
  250. package/dist/providers/DeepSeekProvider.js.map +1 -1
  251. package/dist/providers/GeminiProvider.d.ts +4 -3
  252. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  253. package/dist/providers/GeminiProvider.js +4 -3
  254. package/dist/providers/GeminiProvider.js.map +1 -1
  255. package/dist/providers/OpenAICompatibleProvider.d.ts +4 -0
  256. package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  257. package/dist/providers/OpenAICompatibleProvider.js +2 -0
  258. package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
  259. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  260. package/dist/providers/OpenRouterProvider.js +2 -4
  261. package/dist/providers/OpenRouterProvider.js.map +1 -1
  262. package/dist/providers/ProviderAdapter.d.ts +1 -1
  263. package/dist/providers/ProviderAdapter.d.ts.map +1 -1
  264. package/dist/providers/ProviderAdapter.js +34 -11
  265. package/dist/providers/ProviderAdapter.js.map +1 -1
  266. package/dist/types/agent.d.ts +153 -383
  267. package/dist/types/agent.d.ts.map +1 -1
  268. package/dist/types/agent.js +1 -1
  269. package/dist/types/ai.d.ts +32 -1
  270. package/dist/types/ai.d.ts.map +1 -1
  271. package/dist/types/compaction.d.ts +3 -1
  272. package/dist/types/compaction.d.ts.map +1 -1
  273. package/dist/types/errors.d.ts +9 -12
  274. package/dist/types/errors.d.ts.map +1 -1
  275. package/dist/types/errors.js +12 -15
  276. package/dist/types/errors.js.map +1 -1
  277. package/dist/types/flow.d.ts +265 -513
  278. package/dist/types/flow.d.ts.map +1 -1
  279. package/dist/types/flow.js +7 -1
  280. package/dist/types/flow.js.map +1 -1
  281. package/dist/types/history.d.ts +7 -18
  282. package/dist/types/history.d.ts.map +1 -1
  283. package/dist/types/history.js.map +1 -1
  284. package/dist/types/index.d.ts +9 -15
  285. package/dist/types/index.d.ts.map +1 -1
  286. package/dist/types/index.js +2 -7
  287. package/dist/types/index.js.map +1 -1
  288. package/dist/types/session.d.ts +94 -64
  289. package/dist/types/session.d.ts.map +1 -1
  290. package/dist/types/session.js +5 -1
  291. package/dist/types/session.js.map +1 -1
  292. package/dist/types/tool.d.ts +37 -207
  293. package/dist/types/tool.d.ts.map +1 -1
  294. package/dist/types/tool.js +6 -13
  295. package/dist/types/tool.js.map +1 -1
  296. package/dist/utils/clock.d.ts +28 -0
  297. package/dist/utils/clock.d.ts.map +1 -0
  298. package/dist/utils/clock.js +59 -0
  299. package/dist/utils/clock.js.map +1 -0
  300. package/dist/utils/duration.d.ts +11 -0
  301. package/dist/utils/duration.d.ts.map +1 -0
  302. package/dist/utils/duration.js +26 -0
  303. package/dist/utils/duration.js.map +1 -0
  304. package/dist/utils/history.d.ts +4 -1
  305. package/dist/utils/history.d.ts.map +1 -1
  306. package/dist/utils/history.js +2 -2
  307. package/dist/utils/history.js.map +1 -1
  308. package/dist/utils/index.d.ts +4 -10
  309. package/dist/utils/index.d.ts.map +1 -1
  310. package/dist/utils/index.js +4 -21
  311. package/dist/utils/index.js.map +1 -1
  312. package/dist/utils/json.d.ts +2 -0
  313. package/dist/utils/json.d.ts.map +1 -1
  314. package/dist/utils/json.js +4 -0
  315. package/dist/utils/json.js.map +1 -1
  316. package/dist/utils/outcomes.d.ts +48 -0
  317. package/dist/utils/outcomes.d.ts.map +1 -0
  318. package/dist/utils/outcomes.js +48 -0
  319. package/dist/utils/outcomes.js.map +1 -0
  320. package/dist/utils/schema.d.ts +50 -0
  321. package/dist/utils/schema.d.ts.map +1 -0
  322. package/dist/utils/schema.js +129 -0
  323. package/dist/utils/schema.js.map +1 -0
  324. package/dist/utils/streamingMessage.d.ts +3 -2
  325. package/dist/utils/streamingMessage.d.ts.map +1 -1
  326. package/dist/utils/streamingMessage.js +38 -4
  327. package/dist/utils/streamingMessage.js.map +1 -1
  328. package/dist/utils/template.d.ts +13 -149
  329. package/dist/utils/template.d.ts.map +1 -1
  330. package/dist/utils/template.js +28 -355
  331. package/dist/utils/template.js.map +1 -1
  332. package/dist/utils/usage.d.ts +19 -0
  333. package/dist/utils/usage.d.ts.map +1 -0
  334. package/dist/utils/usage.js +31 -0
  335. package/dist/utils/usage.js.map +1 -0
  336. package/docs/README.md +37 -19
  337. package/docs/concepts/architecture.md +117 -239
  338. package/docs/concepts/collection.md +170 -0
  339. package/docs/concepts/pipeline.md +132 -378
  340. package/docs/concepts/runs-and-waits.md +192 -0
  341. package/docs/guides/actions-and-events.md +276 -0
  342. package/docs/guides/branching.md +119 -208
  343. package/docs/guides/compaction.md +63 -158
  344. package/docs/guides/conditions.md +164 -128
  345. package/docs/guides/error-handling.md +168 -164
  346. package/docs/guides/flow-control.md +210 -349
  347. package/docs/guides/flows-from-json.md +224 -0
  348. package/docs/guides/instructions.md +125 -161
  349. package/docs/guides/persistence.md +182 -206
  350. package/docs/guides/streaming.md +50 -114
  351. package/docs/guides/testing.md +284 -0
  352. package/docs/guides/triggers.md +401 -0
  353. package/docs/migration/README.md +8 -15
  354. package/docs/migration/v1-to-v2.md +1 -1
  355. package/docs/migration/v2-3-to-v2-4.md +2 -2
  356. package/docs/migration/v2-6-to-v2-7.md +4 -4
  357. package/docs/migration/v3-to-v4.md +452 -0
  358. package/docs/reference/actions-events-conditions.md +396 -0
  359. package/docs/reference/agent.md +244 -0
  360. package/docs/reference/branches.md +75 -203
  361. package/docs/reference/errors.md +188 -144
  362. package/docs/reference/fields.md +125 -0
  363. package/docs/reference/flow-spec.md +248 -0
  364. package/docs/reference/flow.md +104 -192
  365. package/docs/reference/instruction.md +83 -137
  366. package/docs/reference/outcomes.md +273 -0
  367. package/docs/reference/providers.md +525 -302
  368. package/docs/reference/session.md +210 -0
  369. package/docs/reference/step.md +194 -312
  370. package/docs/reference/stores.md +496 -0
  371. package/docs/reference/tool.md +162 -231
  372. package/docs/reference/trigger.md +180 -0
  373. package/docs/rfc/v4-one-flow.md +477 -0
  374. package/docs/start/01-install.md +59 -44
  375. package/docs/start/02-first-agent.md +97 -147
  376. package/docs/start/03-collect-data.md +78 -183
  377. package/docs/start/04-add-tools.md +159 -227
  378. package/docs/start/05-go-to-production.md +167 -164
  379. package/examples/01-quickstart.ts +26 -16
  380. package/examples/02-fields.ts +75 -0
  381. package/examples/03-tools.ts +79 -119
  382. package/examples/04-instructions.ts +60 -87
  383. package/examples/05-branches.ts +78 -0
  384. package/examples/06-triggers-and-waits.ts +148 -0
  385. package/examples/07-streaming.ts +34 -60
  386. package/examples/08-store-and-migration.ts +97 -0
  387. package/examples/09-flows-from-json.ts +107 -0
  388. package/package.json +9 -6
  389. package/src/core/Agent.ts +116 -1512
  390. package/src/core/CompactionEngine.ts +7 -4
  391. package/src/core/FlowSpec.ts +712 -0
  392. package/src/core/Migrate.ts +256 -0
  393. package/src/core/Prompt.ts +156 -0
  394. package/src/core/Runner.ts +1181 -0
  395. package/src/core/Speak.ts +451 -0
  396. package/src/core/Understand.ts +422 -0
  397. package/src/core/contracts.ts +111 -0
  398. package/src/core/falai.ts +86 -0
  399. package/src/core/predicate.ts +56 -0
  400. package/src/index.ts +119 -147
  401. package/src/persistence/MemoryStore.ts +37 -0
  402. package/src/persistence/MongoStore.ts +89 -0
  403. package/src/persistence/OpenSearchStore.ts +153 -0
  404. package/src/persistence/PostgresStore.ts +89 -0
  405. package/src/persistence/PrismaStore.ts +127 -0
  406. package/src/persistence/RedisStore.ts +90 -0
  407. package/src/persistence/SQLiteStore.ts +103 -0
  408. package/src/persistence/sessionRow.ts +45 -0
  409. package/src/providers/DeepSeekProvider.ts +8 -3
  410. package/src/providers/GeminiProvider.ts +4 -3
  411. package/src/providers/OpenAICompatibleProvider.ts +6 -0
  412. package/src/providers/OpenRouterProvider.ts +2 -4
  413. package/src/providers/ProviderAdapter.ts +36 -8
  414. package/src/types/agent.ts +124 -397
  415. package/src/types/ai.ts +33 -1
  416. package/src/types/compaction.ts +3 -1
  417. package/src/types/errors.ts +13 -16
  418. package/src/types/flow.ts +249 -550
  419. package/src/types/history.ts +7 -20
  420. package/src/types/index.ts +87 -139
  421. package/src/types/session.ts +135 -70
  422. package/src/types/tool.ts +42 -267
  423. package/src/utils/clock.ts +70 -0
  424. package/src/utils/duration.ts +33 -0
  425. package/src/utils/history.ts +3 -2
  426. package/src/utils/index.ts +8 -66
  427. package/src/utils/json.ts +5 -0
  428. package/src/utils/outcomes.ts +56 -0
  429. package/src/utils/schema.ts +145 -0
  430. package/src/utils/streamingMessage.ts +34 -4
  431. package/src/utils/template.ts +32 -423
  432. package/src/utils/usage.ts +37 -0
  433. package/dist/adapters/MemoryAdapter.d.ts +0 -47
  434. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  435. package/dist/adapters/MemoryAdapter.js +0 -204
  436. package/dist/adapters/MemoryAdapter.js.map +0 -1
  437. package/dist/adapters/MongoAdapter.d.ts +0 -97
  438. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  439. package/dist/adapters/MongoAdapter.js +0 -196
  440. package/dist/adapters/MongoAdapter.js.map +0 -1
  441. package/dist/adapters/OpenSearchAdapter.d.ts +0 -169
  442. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  443. package/dist/adapters/OpenSearchAdapter.js +0 -471
  444. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  445. package/dist/adapters/PostgreSQLAdapter.d.ts +0 -85
  446. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  447. package/dist/adapters/PostgreSQLAdapter.js +0 -308
  448. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  449. package/dist/adapters/PrismaAdapter.d.ts +0 -115
  450. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  451. package/dist/adapters/PrismaAdapter.js +0 -406
  452. package/dist/adapters/PrismaAdapter.js.map +0 -1
  453. package/dist/adapters/RedisAdapter.d.ts +0 -72
  454. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  455. package/dist/adapters/RedisAdapter.js +0 -286
  456. package/dist/adapters/RedisAdapter.js.map +0 -1
  457. package/dist/adapters/SQLiteAdapter.d.ts +0 -86
  458. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  459. package/dist/adapters/SQLiteAdapter.js +0 -337
  460. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  461. package/dist/adapters/index.d.ts +0 -17
  462. package/dist/adapters/index.d.ts.map +0 -1
  463. package/dist/adapters/index.js +0 -11
  464. package/dist/adapters/index.js.map +0 -1
  465. package/dist/adapters/sessionRow.d.ts +0 -22
  466. package/dist/adapters/sessionRow.d.ts.map +0 -1
  467. package/dist/adapters/sessionRow.js +0 -48
  468. package/dist/adapters/sessionRow.js.map +0 -1
  469. package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
  470. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  471. package/dist/cjs/adapters/MemoryAdapter.js +0 -208
  472. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  473. package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
  474. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  475. package/dist/cjs/adapters/MongoAdapter.js +0 -200
  476. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  477. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
  478. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  479. package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
  480. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  481. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
  482. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  483. package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
  484. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  485. package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
  486. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  487. package/dist/cjs/adapters/PrismaAdapter.js +0 -410
  488. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  489. package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
  490. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  491. package/dist/cjs/adapters/RedisAdapter.js +0 -290
  492. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  493. package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
  494. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  495. package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
  496. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  497. package/dist/cjs/adapters/index.d.ts +0 -17
  498. package/dist/cjs/adapters/index.d.ts.map +0 -1
  499. package/dist/cjs/adapters/index.js +0 -21
  500. package/dist/cjs/adapters/index.js.map +0 -1
  501. package/dist/cjs/adapters/sessionRow.d.ts +0 -22
  502. package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
  503. package/dist/cjs/adapters/sessionRow.js +0 -52
  504. package/dist/cjs/adapters/sessionRow.js.map +0 -1
  505. package/dist/cjs/constants/index.d.ts +0 -1
  506. package/dist/cjs/constants/index.d.ts.map +0 -1
  507. package/dist/cjs/constants/index.js +0 -4
  508. package/dist/cjs/constants/index.js.map +0 -1
  509. package/dist/cjs/core/AutoChainExecutor.d.ts +0 -97
  510. package/dist/cjs/core/AutoChainExecutor.d.ts.map +0 -1
  511. package/dist/cjs/core/AutoChainExecutor.js +0 -288
  512. package/dist/cjs/core/AutoChainExecutor.js.map +0 -1
  513. package/dist/cjs/core/BranchEvaluator.d.ts +0 -55
  514. package/dist/cjs/core/BranchEvaluator.d.ts.map +0 -1
  515. package/dist/cjs/core/BranchEvaluator.js +0 -125
  516. package/dist/cjs/core/BranchEvaluator.js.map +0 -1
  517. package/dist/cjs/core/DirectiveChainTracker.d.ts +0 -49
  518. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +0 -1
  519. package/dist/cjs/core/DirectiveChainTracker.js +0 -121
  520. package/dist/cjs/core/DirectiveChainTracker.js.map +0 -1
  521. package/dist/cjs/core/Events.d.ts +0 -26
  522. package/dist/cjs/core/Events.d.ts.map +0 -1
  523. package/dist/cjs/core/Events.js +0 -144
  524. package/dist/cjs/core/Events.js.map +0 -1
  525. package/dist/cjs/core/Flow.d.ts +0 -183
  526. package/dist/cjs/core/Flow.d.ts.map +0 -1
  527. package/dist/cjs/core/Flow.js +0 -551
  528. package/dist/cjs/core/Flow.js.map +0 -1
  529. package/dist/cjs/core/FlowRouter.d.ts +0 -183
  530. package/dist/cjs/core/FlowRouter.d.ts.map +0 -1
  531. package/dist/cjs/core/FlowRouter.js +0 -1047
  532. package/dist/cjs/core/FlowRouter.js.map +0 -1
  533. package/dist/cjs/core/PersistenceManager.d.ts +0 -114
  534. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  535. package/dist/cjs/core/PersistenceManager.js +0 -336
  536. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  537. package/dist/cjs/core/PromptComposer.d.ts +0 -47
  538. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  539. package/dist/cjs/core/PromptComposer.js +0 -397
  540. package/dist/cjs/core/PromptComposer.js.map +0 -1
  541. package/dist/cjs/core/PromptSectionCache.d.ts +0 -48
  542. package/dist/cjs/core/PromptSectionCache.d.ts.map +0 -1
  543. package/dist/cjs/core/PromptSectionCache.js +0 -108
  544. package/dist/cjs/core/PromptSectionCache.js.map +0 -1
  545. package/dist/cjs/core/ResponseEngine.d.ts +0 -43
  546. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  547. package/dist/cjs/core/ResponseEngine.js +0 -235
  548. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  549. package/dist/cjs/core/ResponseGenerationError.d.ts +0 -30
  550. package/dist/cjs/core/ResponseGenerationError.d.ts.map +0 -1
  551. package/dist/cjs/core/ResponseGenerationError.js +0 -35
  552. package/dist/cjs/core/ResponseGenerationError.js.map +0 -1
  553. package/dist/cjs/core/ResponseModal.d.ts +0 -305
  554. package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
  555. package/dist/cjs/core/ResponseModal.js +0 -1414
  556. package/dist/cjs/core/ResponseModal.js.map +0 -1
  557. package/dist/cjs/core/ResponsePipeline.d.ts +0 -220
  558. package/dist/cjs/core/ResponsePipeline.d.ts.map +0 -1
  559. package/dist/cjs/core/ResponsePipeline.js +0 -1040
  560. package/dist/cjs/core/ResponsePipeline.js.map +0 -1
  561. package/dist/cjs/core/SessionFinalizer.d.ts +0 -34
  562. package/dist/cjs/core/SessionFinalizer.d.ts.map +0 -1
  563. package/dist/cjs/core/SessionFinalizer.js +0 -88
  564. package/dist/cjs/core/SessionFinalizer.js.map +0 -1
  565. package/dist/cjs/core/SessionManager.d.ts +0 -112
  566. package/dist/cjs/core/SessionManager.d.ts.map +0 -1
  567. package/dist/cjs/core/SessionManager.js +0 -308
  568. package/dist/cjs/core/SessionManager.js.map +0 -1
  569. package/dist/cjs/core/SignalCoordinator.d.ts +0 -103
  570. package/dist/cjs/core/SignalCoordinator.d.ts.map +0 -1
  571. package/dist/cjs/core/SignalCoordinator.js +0 -207
  572. package/dist/cjs/core/SignalCoordinator.js.map +0 -1
  573. package/dist/cjs/core/SignalEvaluator.d.ts +0 -86
  574. package/dist/cjs/core/SignalEvaluator.d.ts.map +0 -1
  575. package/dist/cjs/core/SignalEvaluator.js +0 -319
  576. package/dist/cjs/core/SignalEvaluator.js.map +0 -1
  577. package/dist/cjs/core/SignalProcessor.d.ts +0 -152
  578. package/dist/cjs/core/SignalProcessor.d.ts.map +0 -1
  579. package/dist/cjs/core/SignalProcessor.js +0 -505
  580. package/dist/cjs/core/SignalProcessor.js.map +0 -1
  581. package/dist/cjs/core/Step.d.ts +0 -184
  582. package/dist/cjs/core/Step.d.ts.map +0 -1
  583. package/dist/cjs/core/Step.js +0 -599
  584. package/dist/cjs/core/Step.js.map +0 -1
  585. package/dist/cjs/core/StepLifecycle.d.ts +0 -43
  586. package/dist/cjs/core/StepLifecycle.d.ts.map +0 -1
  587. package/dist/cjs/core/StepLifecycle.js +0 -180
  588. package/dist/cjs/core/StepLifecycle.js.map +0 -1
  589. package/dist/cjs/core/StreamingToolExecutor.d.ts +0 -142
  590. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +0 -1
  591. package/dist/cjs/core/StreamingToolExecutor.js +0 -490
  592. package/dist/cjs/core/StreamingToolExecutor.js.map +0 -1
  593. package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
  594. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
  595. package/dist/cjs/core/ToolLoopExecutor.js +0 -568
  596. package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
  597. package/dist/cjs/core/ToolManager.d.ts +0 -250
  598. package/dist/cjs/core/ToolManager.d.ts.map +0 -1
  599. package/dist/cjs/core/ToolManager.js +0 -1104
  600. package/dist/cjs/core/ToolManager.js.map +0 -1
  601. package/dist/cjs/core/createAgent.d.ts +0 -35
  602. package/dist/cjs/core/createAgent.d.ts.map +0 -1
  603. package/dist/cjs/core/createAgent.js +0 -39
  604. package/dist/cjs/core/createAgent.js.map +0 -1
  605. package/dist/cjs/core/flow-namespace.d.ts +0 -64
  606. package/dist/cjs/core/flow-namespace.d.ts.map +0 -1
  607. package/dist/cjs/core/flow-namespace.js +0 -182
  608. package/dist/cjs/core/flow-namespace.js.map +0 -1
  609. package/dist/cjs/core/toolGates.d.ts +0 -24
  610. package/dist/cjs/core/toolGates.d.ts.map +0 -1
  611. package/dist/cjs/core/toolGates.js +0 -52
  612. package/dist/cjs/core/toolGates.js.map +0 -1
  613. package/dist/cjs/types/persistence.d.ts +0 -254
  614. package/dist/cjs/types/persistence.d.ts.map +0 -1
  615. package/dist/cjs/types/persistence.js +0 -7
  616. package/dist/cjs/types/persistence.js.map +0 -1
  617. package/dist/cjs/types/prompt-cache.d.ts +0 -15
  618. package/dist/cjs/types/prompt-cache.d.ts.map +0 -1
  619. package/dist/cjs/types/prompt-cache.js +0 -6
  620. package/dist/cjs/types/prompt-cache.js.map +0 -1
  621. package/dist/cjs/types/signals.d.ts +0 -263
  622. package/dist/cjs/types/signals.d.ts.map +0 -1
  623. package/dist/cjs/types/signals.js +0 -11
  624. package/dist/cjs/types/signals.js.map +0 -1
  625. package/dist/cjs/types/template.d.ts +0 -84
  626. package/dist/cjs/types/template.d.ts.map +0 -1
  627. package/dist/cjs/types/template.js +0 -3
  628. package/dist/cjs/types/template.js.map +0 -1
  629. package/dist/cjs/utils/condition.d.ts +0 -63
  630. package/dist/cjs/utils/condition.d.ts.map +0 -1
  631. package/dist/cjs/utils/condition.js +0 -239
  632. package/dist/cjs/utils/condition.js.map +0 -1
  633. package/dist/cjs/utils/event.d.ts +0 -6
  634. package/dist/cjs/utils/event.d.ts.map +0 -1
  635. package/dist/cjs/utils/event.js +0 -20
  636. package/dist/cjs/utils/event.js.map +0 -1
  637. package/dist/cjs/utils/id.d.ts +0 -33
  638. package/dist/cjs/utils/id.d.ts.map +0 -1
  639. package/dist/cjs/utils/id.js +0 -84
  640. package/dist/cjs/utils/id.js.map +0 -1
  641. package/dist/cjs/utils/serialize.d.ts +0 -36
  642. package/dist/cjs/utils/serialize.d.ts.map +0 -1
  643. package/dist/cjs/utils/serialize.js +0 -77
  644. package/dist/cjs/utils/serialize.js.map +0 -1
  645. package/dist/cjs/utils/session.d.ts +0 -124
  646. package/dist/cjs/utils/session.d.ts.map +0 -1
  647. package/dist/cjs/utils/session.js +0 -396
  648. package/dist/cjs/utils/session.js.map +0 -1
  649. package/dist/constants/index.d.ts +0 -2
  650. package/dist/constants/index.d.ts.map +0 -1
  651. package/dist/constants/index.js +0 -4
  652. package/dist/constants/index.js.map +0 -1
  653. package/dist/core/AutoChainExecutor.d.ts +0 -97
  654. package/dist/core/AutoChainExecutor.d.ts.map +0 -1
  655. package/dist/core/AutoChainExecutor.js +0 -284
  656. package/dist/core/AutoChainExecutor.js.map +0 -1
  657. package/dist/core/BranchEvaluator.d.ts +0 -55
  658. package/dist/core/BranchEvaluator.d.ts.map +0 -1
  659. package/dist/core/BranchEvaluator.js +0 -121
  660. package/dist/core/BranchEvaluator.js.map +0 -1
  661. package/dist/core/DirectiveChainTracker.d.ts +0 -49
  662. package/dist/core/DirectiveChainTracker.d.ts.map +0 -1
  663. package/dist/core/DirectiveChainTracker.js +0 -117
  664. package/dist/core/DirectiveChainTracker.js.map +0 -1
  665. package/dist/core/Events.d.ts +0 -26
  666. package/dist/core/Events.d.ts.map +0 -1
  667. package/dist/core/Events.js +0 -137
  668. package/dist/core/Events.js.map +0 -1
  669. package/dist/core/Flow.d.ts +0 -183
  670. package/dist/core/Flow.d.ts.map +0 -1
  671. package/dist/core/Flow.js +0 -547
  672. package/dist/core/Flow.js.map +0 -1
  673. package/dist/core/FlowRouter.d.ts +0 -183
  674. package/dist/core/FlowRouter.d.ts.map +0 -1
  675. package/dist/core/FlowRouter.js +0 -1043
  676. package/dist/core/FlowRouter.js.map +0 -1
  677. package/dist/core/PersistenceManager.d.ts +0 -114
  678. package/dist/core/PersistenceManager.d.ts.map +0 -1
  679. package/dist/core/PersistenceManager.js +0 -332
  680. package/dist/core/PersistenceManager.js.map +0 -1
  681. package/dist/core/PromptComposer.d.ts +0 -47
  682. package/dist/core/PromptComposer.d.ts.map +0 -1
  683. package/dist/core/PromptComposer.js +0 -393
  684. package/dist/core/PromptComposer.js.map +0 -1
  685. package/dist/core/PromptSectionCache.d.ts +0 -48
  686. package/dist/core/PromptSectionCache.d.ts.map +0 -1
  687. package/dist/core/PromptSectionCache.js +0 -104
  688. package/dist/core/PromptSectionCache.js.map +0 -1
  689. package/dist/core/ResponseEngine.d.ts +0 -43
  690. package/dist/core/ResponseEngine.d.ts.map +0 -1
  691. package/dist/core/ResponseEngine.js +0 -231
  692. package/dist/core/ResponseEngine.js.map +0 -1
  693. package/dist/core/ResponseGenerationError.d.ts +0 -30
  694. package/dist/core/ResponseGenerationError.d.ts.map +0 -1
  695. package/dist/core/ResponseGenerationError.js +0 -31
  696. package/dist/core/ResponseGenerationError.js.map +0 -1
  697. package/dist/core/ResponseModal.d.ts +0 -305
  698. package/dist/core/ResponseModal.d.ts.map +0 -1
  699. package/dist/core/ResponseModal.js +0 -1410
  700. package/dist/core/ResponseModal.js.map +0 -1
  701. package/dist/core/ResponsePipeline.d.ts +0 -220
  702. package/dist/core/ResponsePipeline.d.ts.map +0 -1
  703. package/dist/core/ResponsePipeline.js +0 -1035
  704. package/dist/core/ResponsePipeline.js.map +0 -1
  705. package/dist/core/SessionFinalizer.d.ts +0 -34
  706. package/dist/core/SessionFinalizer.d.ts.map +0 -1
  707. package/dist/core/SessionFinalizer.js +0 -84
  708. package/dist/core/SessionFinalizer.js.map +0 -1
  709. package/dist/core/SessionManager.d.ts +0 -112
  710. package/dist/core/SessionManager.d.ts.map +0 -1
  711. package/dist/core/SessionManager.js +0 -301
  712. package/dist/core/SessionManager.js.map +0 -1
  713. package/dist/core/SignalCoordinator.d.ts +0 -103
  714. package/dist/core/SignalCoordinator.d.ts.map +0 -1
  715. package/dist/core/SignalCoordinator.js +0 -203
  716. package/dist/core/SignalCoordinator.js.map +0 -1
  717. package/dist/core/SignalEvaluator.d.ts +0 -86
  718. package/dist/core/SignalEvaluator.d.ts.map +0 -1
  719. package/dist/core/SignalEvaluator.js +0 -312
  720. package/dist/core/SignalEvaluator.js.map +0 -1
  721. package/dist/core/SignalProcessor.d.ts +0 -152
  722. package/dist/core/SignalProcessor.d.ts.map +0 -1
  723. package/dist/core/SignalProcessor.js +0 -498
  724. package/dist/core/SignalProcessor.js.map +0 -1
  725. package/dist/core/Step.d.ts +0 -184
  726. package/dist/core/Step.d.ts.map +0 -1
  727. package/dist/core/Step.js +0 -594
  728. package/dist/core/Step.js.map +0 -1
  729. package/dist/core/StepLifecycle.d.ts +0 -43
  730. package/dist/core/StepLifecycle.d.ts.map +0 -1
  731. package/dist/core/StepLifecycle.js +0 -176
  732. package/dist/core/StepLifecycle.js.map +0 -1
  733. package/dist/core/StreamingToolExecutor.d.ts +0 -142
  734. package/dist/core/StreamingToolExecutor.d.ts.map +0 -1
  735. package/dist/core/StreamingToolExecutor.js +0 -483
  736. package/dist/core/StreamingToolExecutor.js.map +0 -1
  737. package/dist/core/ToolLoopExecutor.d.ts +0 -133
  738. package/dist/core/ToolLoopExecutor.d.ts.map +0 -1
  739. package/dist/core/ToolLoopExecutor.js +0 -564
  740. package/dist/core/ToolLoopExecutor.js.map +0 -1
  741. package/dist/core/ToolManager.d.ts +0 -250
  742. package/dist/core/ToolManager.d.ts.map +0 -1
  743. package/dist/core/ToolManager.js +0 -1098
  744. package/dist/core/ToolManager.js.map +0 -1
  745. package/dist/core/createAgent.d.ts +0 -35
  746. package/dist/core/createAgent.d.ts.map +0 -1
  747. package/dist/core/createAgent.js +0 -36
  748. package/dist/core/createAgent.js.map +0 -1
  749. package/dist/core/flow-namespace.d.ts +0 -64
  750. package/dist/core/flow-namespace.d.ts.map +0 -1
  751. package/dist/core/flow-namespace.js +0 -179
  752. package/dist/core/flow-namespace.js.map +0 -1
  753. package/dist/core/toolGates.d.ts +0 -24
  754. package/dist/core/toolGates.d.ts.map +0 -1
  755. package/dist/core/toolGates.js +0 -49
  756. package/dist/core/toolGates.js.map +0 -1
  757. package/dist/types/persistence.d.ts +0 -254
  758. package/dist/types/persistence.d.ts.map +0 -1
  759. package/dist/types/persistence.js +0 -6
  760. package/dist/types/persistence.js.map +0 -1
  761. package/dist/types/prompt-cache.d.ts +0 -15
  762. package/dist/types/prompt-cache.d.ts.map +0 -1
  763. package/dist/types/prompt-cache.js +0 -5
  764. package/dist/types/prompt-cache.js.map +0 -1
  765. package/dist/types/signals.d.ts +0 -263
  766. package/dist/types/signals.d.ts.map +0 -1
  767. package/dist/types/signals.js +0 -10
  768. package/dist/types/signals.js.map +0 -1
  769. package/dist/types/template.d.ts +0 -84
  770. package/dist/types/template.d.ts.map +0 -1
  771. package/dist/types/template.js +0 -2
  772. package/dist/types/template.js.map +0 -1
  773. package/dist/utils/condition.d.ts +0 -63
  774. package/dist/utils/condition.d.ts.map +0 -1
  775. package/dist/utils/condition.js +0 -230
  776. package/dist/utils/condition.js.map +0 -1
  777. package/dist/utils/event.d.ts +0 -6
  778. package/dist/utils/event.d.ts.map +0 -1
  779. package/dist/utils/event.js +0 -17
  780. package/dist/utils/event.js.map +0 -1
  781. package/dist/utils/id.d.ts +0 -33
  782. package/dist/utils/id.d.ts.map +0 -1
  783. package/dist/utils/id.js +0 -77
  784. package/dist/utils/id.js.map +0 -1
  785. package/dist/utils/serialize.d.ts +0 -36
  786. package/dist/utils/serialize.d.ts.map +0 -1
  787. package/dist/utils/serialize.js +0 -72
  788. package/dist/utils/serialize.js.map +0 -1
  789. package/dist/utils/session.d.ts +0 -124
  790. package/dist/utils/session.d.ts.map +0 -1
  791. package/dist/utils/session.js +0 -379
  792. package/dist/utils/session.js.map +0 -1
  793. package/docs/concepts/directives.md +0 -369
  794. package/docs/reference/adapters.md +0 -543
  795. package/docs/reference/create-agent.md +0 -216
  796. package/docs/reference/directive.md +0 -242
  797. package/docs/reference/signals.md +0 -368
  798. package/examples/02-data-extraction.ts +0 -90
  799. package/examples/05-branching.ts +0 -140
  800. package/examples/06-flow-control.ts +0 -103
  801. package/examples/08-persistence.ts +0 -98
  802. package/examples/09-signals.ts +0 -144
  803. package/src/adapters/MemoryAdapter.ts +0 -281
  804. package/src/adapters/MongoAdapter.ts +0 -341
  805. package/src/adapters/OpenSearchAdapter.ts +0 -693
  806. package/src/adapters/PostgreSQLAdapter.ts +0 -487
  807. package/src/adapters/PrismaAdapter.ts +0 -617
  808. package/src/adapters/RedisAdapter.ts +0 -439
  809. package/src/adapters/SQLiteAdapter.ts +0 -496
  810. package/src/adapters/index.ts +0 -43
  811. package/src/adapters/sessionRow.ts +0 -57
  812. package/src/constants/index.ts +0 -2
  813. package/src/core/AutoChainExecutor.ts +0 -397
  814. package/src/core/BranchEvaluator.ts +0 -161
  815. package/src/core/DirectiveChainTracker.ts +0 -144
  816. package/src/core/Events.ts +0 -164
  817. package/src/core/Flow.ts +0 -665
  818. package/src/core/FlowRouter.ts +0 -1540
  819. package/src/core/PersistenceManager.ts +0 -446
  820. package/src/core/PromptComposer.ts +0 -448
  821. package/src/core/PromptSectionCache.ts +0 -125
  822. package/src/core/ResponseEngine.ts +0 -338
  823. package/src/core/ResponseGenerationError.ts +0 -53
  824. package/src/core/ResponseModal.ts +0 -1902
  825. package/src/core/ResponsePipeline.ts +0 -1404
  826. package/src/core/SessionFinalizer.ts +0 -108
  827. package/src/core/SessionManager.ts +0 -372
  828. package/src/core/SignalCoordinator.ts +0 -263
  829. package/src/core/SignalEvaluator.ts +0 -404
  830. package/src/core/SignalProcessor.ts +0 -663
  831. package/src/core/Step.ts +0 -782
  832. package/src/core/StepLifecycle.ts +0 -242
  833. package/src/core/StreamingToolExecutor.ts +0 -609
  834. package/src/core/ToolLoopExecutor.ts +0 -749
  835. package/src/core/ToolManager.ts +0 -1379
  836. package/src/core/createAgent.ts +0 -40
  837. package/src/core/flow-namespace.ts +0 -227
  838. package/src/core/toolGates.ts +0 -72
  839. package/src/types/persistence.ts +0 -303
  840. package/src/types/prompt-cache.ts +0 -17
  841. package/src/types/signals.ts +0 -338
  842. package/src/types/template.ts +0 -98
  843. package/src/utils/condition.ts +0 -296
  844. package/src/utils/event.ts +0 -16
  845. package/src/utils/id.ts +0 -91
  846. package/src/utils/serialize.ts +0 -86
  847. package/src/utils/session.ts +0 -501
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Prisma Store over a generated Prisma client.
3
+ *
4
+ * The model (default `agentSession`) needs five fields, renameable through
5
+ * `fieldMappings.sessions`:
6
+ *
7
+ * ```prisma
8
+ * model AgentSession {
9
+ * id String @id
10
+ * version Int
11
+ * blob Json
12
+ * createdAt DateTime @default(now())
13
+ * updatedAt DateTime @updatedAt
14
+ * }
15
+ * ```
16
+ *
17
+ * A first save is `create`, and Prisma's unique violation (`P2002`) is the
18
+ * conflict; later saves are `updateMany` filtered on `{ id, version }`, and
19
+ * `count === 0` is the conflict. 3.x read, checked and wrote in three steps
20
+ * and tolerated a model without `version`; neither survives.
21
+ */
22
+
23
+ import { isRecord } from "../utils/json.js";
24
+ import { SessionConflictError } from "../types/errors.js";
25
+ import type { Session, Store } from "../types/session.js";
26
+ import { readBlob, toBlob } from "./sessionRow.js";
27
+
28
+ /** The delegate a generated client exposes per model. */
29
+ export interface PrismaSessionModel {
30
+ create(params: { data: Record<string, unknown> }): Promise<Record<string, unknown>>;
31
+ findUnique(params: { where: Record<string, unknown> }): Promise<Record<string, unknown> | null>;
32
+ updateMany(params: { where: Record<string, unknown>; data: Record<string, unknown> }): Promise<{ count: number }>;
33
+ }
34
+
35
+ /** Matches a generated Prisma client: model delegates by name, plus `$disconnect`. */
36
+ export interface PrismaClient {
37
+ [model: string]: unknown;
38
+ $disconnect?: () => Promise<void>;
39
+ }
40
+
41
+ export type PrismaSessionField = "id" | "version" | "blob" | "createdAt" | "updatedAt";
42
+
43
+ export interface PrismaStoreOptions {
44
+ prisma: PrismaClient;
45
+ /** Model name on the client. Default `agentSession`. */
46
+ tables?: { sessions?: string };
47
+ /** Field names when the model uses other names. */
48
+ fieldMappings?: { sessions?: Partial<Record<PrismaSessionField, string>> };
49
+ }
50
+
51
+ export class PrismaStore<D = unknown> implements Store<D> {
52
+ private readonly prisma: PrismaClient;
53
+ private readonly model: PrismaSessionModel;
54
+ private readonly field: Record<PrismaSessionField, string>;
55
+
56
+ constructor(options: PrismaStoreOptions) {
57
+ const name = options.tables?.sessions ?? "agentSession";
58
+ const model = options.prisma[name];
59
+ if (!isSessionModel(model)) {
60
+ throw new TypeError(
61
+ `[TypeError] PrismaStore cannot use model "${name}": the client has no such delegate with create, findUnique and updateMany. ` +
62
+ `Add the model to schema.prisma and run prisma generate, or pass tables.sessions with its name.`,
63
+ );
64
+ }
65
+ this.prisma = options.prisma;
66
+ this.model = model;
67
+ const custom = options.fieldMappings?.sessions ?? {};
68
+ this.field = {
69
+ id: custom.id ?? "id",
70
+ version: custom.version ?? "version",
71
+ blob: custom.blob ?? "blob",
72
+ createdAt: custom.createdAt ?? "createdAt",
73
+ updatedAt: custom.updatedAt ?? "updatedAt",
74
+ };
75
+ }
76
+
77
+ async disconnect(): Promise<void> {
78
+ await this.prisma.$disconnect?.();
79
+ }
80
+
81
+ async load(id: string): Promise<Session<D> | null> {
82
+ const row = await this.model.findUnique({ where: { [this.field.id]: id } });
83
+ return row ? readBlob<D>(row[this.field.blob], id) : null;
84
+ }
85
+
86
+ async save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
87
+ const next = expectedVersion + 1;
88
+ const blob = toBlob(session, next);
89
+ const now = new Date();
90
+ const { field } = this;
91
+ if (expectedVersion === 0) {
92
+ try {
93
+ await this.model.create({
94
+ data: { [field.id]: session.id, [field.version]: next, [field.blob]: blob, [field.createdAt]: now, [field.updatedAt]: now },
95
+ });
96
+ } catch (error) {
97
+ if (!isUniqueViolation(error)) throw error;
98
+ throw new SessionConflictError(session.id, 0, await this.storedVersion(session.id));
99
+ }
100
+ return blob;
101
+ }
102
+ const { count } = await this.model.updateMany({
103
+ where: { [field.id]: session.id, [field.version]: expectedVersion },
104
+ data: { [field.version]: next, [field.blob]: blob, [field.updatedAt]: now },
105
+ });
106
+ if (count === 0) throw new SessionConflictError(session.id, expectedVersion, await this.storedVersion(session.id));
107
+ return blob;
108
+ }
109
+
110
+ private async storedVersion(id: string): Promise<number | undefined> {
111
+ const row = await this.model.findUnique({ where: { [this.field.id]: id } });
112
+ const version = row?.[this.field.version];
113
+ return typeof version === "number" ? version : undefined;
114
+ }
115
+ }
116
+
117
+ function isSessionModel(value: unknown): value is PrismaSessionModel {
118
+ return (
119
+ isRecord(value) &&
120
+ typeof value.create === "function" &&
121
+ typeof value.findUnique === "function" &&
122
+ typeof value.updateMany === "function"
123
+ );
124
+ }
125
+
126
+ /** Prisma's `PrismaClientKnownRequestError` for a unique constraint hit. */
127
+ const isUniqueViolation = (error: unknown): boolean => isRecord(error) && error.code === "P2002";
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Redis Store over an ioredis-shaped client.
3
+ *
4
+ * One hash per session at `${keyPrefix}session:${id}` with the fields
5
+ * `version`, `blob` (the v4 session as JSON text), `createdAt`, `updatedAt`.
6
+ * The compare-and-swap is one Lua script, so two writers on a shared client
7
+ * cannot interleave between the read and the write (3.x checked, then set;
8
+ * WATCH/MULTI would not do either, since WATCH is per connection).
9
+ */
10
+
11
+ import { SessionConflictError } from "../types/errors.js";
12
+ import type { Session, Store } from "../types/session.js";
13
+ import { readBlob, toBlob } from "./sessionRow.js";
14
+
15
+ /** Matches ioredis. node-redis users wrap `eval` to this positional form. */
16
+ export interface RedisClient {
17
+ hgetall(key: string): Promise<Record<string, string>>;
18
+ eval(script: string, numKeys: number, ...args: (string | number)[]): Promise<unknown>;
19
+ quit(): Promise<string>;
20
+ }
21
+
22
+ export interface RedisStoreOptions {
23
+ redis: RedisClient;
24
+ /** Prefix of every key. Default `agent:`. */
25
+ keyPrefix?: string;
26
+ /** Seconds a session lives after its last save; `0` keeps it forever. Default 7 days. */
27
+ sessionTTL?: number;
28
+ }
29
+
30
+ /**
31
+ * KEYS[1] the session hash; ARGV: expected version, next version, blob, now, ttl.
32
+ * Returns nil on success, the stored version on a conflict, `missing` when
33
+ * the hash is gone.
34
+ */
35
+ const CAS_SCRIPT = `
36
+ local current = redis.call('HGET', KEYS[1], 'version')
37
+ if ARGV[1] == '0' then
38
+ if current then return current end
39
+ elseif current ~= ARGV[1] then
40
+ return current or 'missing'
41
+ end
42
+ redis.call('HSET', KEYS[1], 'version', ARGV[2], 'blob', ARGV[3], 'updatedAt', ARGV[4])
43
+ redis.call('HSETNX', KEYS[1], 'createdAt', ARGV[4])
44
+ if tonumber(ARGV[5]) > 0 then redis.call('EXPIRE', KEYS[1], ARGV[5]) end
45
+ return nil
46
+ `;
47
+
48
+ export class RedisStore<D = unknown> implements Store<D> {
49
+ private readonly redis: RedisClient;
50
+ private readonly keyPrefix: string;
51
+ private readonly ttl: number;
52
+
53
+ constructor(options: RedisStoreOptions) {
54
+ this.redis = options.redis;
55
+ this.keyPrefix = options.keyPrefix ?? "agent:";
56
+ this.ttl = options.sessionTTL ?? 7 * 24 * 60 * 60;
57
+ }
58
+
59
+ async disconnect(): Promise<void> {
60
+ await this.redis.quit();
61
+ }
62
+
63
+ async load(id: string): Promise<Session<D> | null> {
64
+ const row = await this.redis.hgetall(this.key(id));
65
+ if (Object.keys(row).length === 0) return null;
66
+ return readBlob<D>(row.blob, id);
67
+ }
68
+
69
+ async save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
70
+ const next = expectedVersion + 1;
71
+ const blob = toBlob(session, next);
72
+ const result = await this.redis.eval(
73
+ CAS_SCRIPT,
74
+ 1,
75
+ this.key(session.id),
76
+ String(expectedVersion),
77
+ String(next),
78
+ JSON.stringify(blob),
79
+ new Date().toISOString(),
80
+ String(this.ttl),
81
+ );
82
+ if (result === null || result === undefined) return blob;
83
+ const actual = typeof result === "string" && result !== "missing" ? Number(result) : undefined;
84
+ throw new SessionConflictError(session.id, expectedVersion, actual);
85
+ }
86
+
87
+ private key(id: string): string {
88
+ return `${this.keyPrefix}session:${id}`;
89
+ }
90
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * SQLite Store over a better-sqlite3-shaped database (bun:sqlite fits too).
3
+ *
4
+ * One row per session: `id`, `version`, `blob` (the v4 session as JSON text),
5
+ * `created_at`, `updated_at`. The compare-and-swap is the statement itself:
6
+ * `INSERT OR IGNORE` for a first save, `UPDATE … WHERE version = ?` after,
7
+ * and `changes === 0` means someone else got there first.
8
+ *
9
+ * A 3.x `agent_sessions` table has different columns. Point `tables.sessions`
10
+ * at a fresh table; 3.x blobs move through `migrateSession` at the host's
11
+ * choke point, not through this table.
12
+ */
13
+
14
+ import { SessionConflictError } from "../types/errors.js";
15
+ import type { Session, Store } from "../types/session.js";
16
+ import { asPromise, readBlob, toBlob } from "./sessionRow.js";
17
+
18
+ /** Matches better-sqlite3 and bun:sqlite statements. */
19
+ export interface SqliteStatement {
20
+ run(...params: unknown[]): { changes: number };
21
+ get(...params: unknown[]): unknown;
22
+ }
23
+
24
+ /** Matches better-sqlite3 and bun:sqlite databases. */
25
+ export interface SqliteDatabase {
26
+ prepare(sql: string): SqliteStatement;
27
+ exec(sql: string): unknown;
28
+ close(): void;
29
+ }
30
+
31
+ export interface SQLiteStoreOptions {
32
+ db: SqliteDatabase;
33
+ /** Table name. Default `agent_sessions`. */
34
+ tables?: { sessions?: string };
35
+ }
36
+
37
+ export class SQLiteStore<D = unknown> implements Store<D> {
38
+ private readonly db: SqliteDatabase;
39
+ private readonly table: string;
40
+
41
+ constructor(options: SQLiteStoreOptions) {
42
+ this.db = options.db;
43
+ this.table = options.tables?.sessions ?? "agent_sessions";
44
+ }
45
+
46
+ /** Create the table when it is missing. */
47
+ initialize(): Promise<void> {
48
+ return asPromise(() => {
49
+ this.db.exec(
50
+ `CREATE TABLE IF NOT EXISTS ${this.table} (
51
+ id TEXT PRIMARY KEY,
52
+ version INTEGER NOT NULL,
53
+ blob TEXT NOT NULL,
54
+ created_at TEXT NOT NULL,
55
+ updated_at TEXT NOT NULL
56
+ )`,
57
+ );
58
+ });
59
+ }
60
+
61
+ disconnect(): Promise<void> {
62
+ return asPromise(() => this.db.close());
63
+ }
64
+
65
+ load(id: string): Promise<Session<D> | null> {
66
+ return asPromise(() => {
67
+ const row = this.db.prepare(`SELECT blob FROM ${this.table} WHERE id = ?`).get(id);
68
+ if (row === undefined || row === null) return null;
69
+ return readBlob<D>(column(row, "blob"), id);
70
+ });
71
+ }
72
+
73
+ save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
74
+ return asPromise(() => {
75
+ const next = expectedVersion + 1;
76
+ const blob = toBlob(session, next);
77
+ const json = JSON.stringify(blob);
78
+ const now = new Date().toISOString();
79
+ const result =
80
+ expectedVersion === 0
81
+ ? this.db
82
+ .prepare(
83
+ `INSERT OR IGNORE INTO ${this.table} (id, version, blob, created_at, updated_at) VALUES (?, ?, ?, ?, ?)`,
84
+ )
85
+ .run(session.id, next, json, now, now)
86
+ : this.db
87
+ .prepare(`UPDATE ${this.table} SET version = ?, blob = ?, updated_at = ? WHERE id = ? AND version = ?`)
88
+ .run(next, json, now, session.id, expectedVersion);
89
+ if (result.changes === 0) throw new SessionConflictError(session.id, expectedVersion, this.storedVersion(session.id));
90
+ return blob;
91
+ });
92
+ }
93
+
94
+ private storedVersion(id: string): number | undefined {
95
+ const row = this.db.prepare(`SELECT version FROM ${this.table} WHERE id = ?`).get(id);
96
+ const version = row === undefined || row === null ? undefined : column(row, "version");
97
+ return typeof version === "number" ? version : undefined;
98
+ }
99
+ }
100
+
101
+ function column(row: unknown, name: string): unknown {
102
+ return typeof row === "object" && row !== null && name in row ? (row as Record<string, unknown>)[name] : undefined;
103
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * What every store writes and reads: the v4 session blob, and nothing else.
3
+ * One place so the seven stores cannot drift on what a row means.
4
+ * PostgreSQL hands JSONB back parsed, SQLite and Redis hand back text; both
5
+ * arrive here.
6
+ */
7
+
8
+ import { assertSession, InvalidSessionError } from "../core/Migrate.js";
9
+ import type { Session } from "../types/session.js";
10
+
11
+ /** The blob to persist, stamped with the version it is saved as. Optional keys are written only when set. */
12
+ export function toBlob<D>(session: Session<D>, version: number): Session<D> {
13
+ const blob: Session<D> = {
14
+ id: session.id,
15
+ v: 4,
16
+ version,
17
+ data: session.data,
18
+ runs: session.runs,
19
+ claims: session.claims,
20
+ inputs: session.inputs,
21
+ metadata: session.metadata,
22
+ };
23
+ if (session.lastUserAt !== undefined) blob.lastUserAt = session.lastUserAt;
24
+ if (session.lastAssistantAt !== undefined) blob.lastAssistantAt = session.lastAssistantAt;
25
+ if (session.history !== undefined) blob.history = session.history;
26
+ return blob;
27
+ }
28
+
29
+ /** A stored blob (parsed, or JSON text) back to a Session. Anything not v4-shaped throws. */
30
+ export function readBlob<D>(raw: unknown, sessionId: string): Session<D> {
31
+ let blob: unknown = raw;
32
+ if (typeof raw === "string") {
33
+ try {
34
+ blob = JSON.parse(raw);
35
+ } catch {
36
+ throw new InvalidSessionError(sessionId, "blob is not valid JSON");
37
+ }
38
+ }
39
+ return assertSession<D>(blob, sessionId);
40
+ }
41
+
42
+ /** Runs synchronous store work as a promise, so a thrown error is a rejection like everywhere else. */
43
+ export function asPromise<T>(work: () => T): Promise<T> {
44
+ return new Promise((resolve) => resolve(work()));
45
+ }
@@ -43,7 +43,8 @@ export class DeepSeekProvider extends OpenAICompatibleProvider {
43
43
  public readonly name = "deepseek";
44
44
  public readonly capabilities: ProviderCapabilities = {
45
45
  supportsTools: true,
46
- supportsNativeJsonSchema: true,
46
+ // JSON yes, a schema no — see `structuredOutput` below.
47
+ supportsNativeJsonSchema: false,
47
48
  supportsStreaming: true,
48
49
  supportsStreamingToolCalls: true,
49
50
  supportsPromptCaching: true,
@@ -60,8 +61,12 @@ export class DeepSeekProvider extends OpenAICompatibleProvider {
60
61
  apiKey: options.apiKey,
61
62
  baseUrl: options.baseURL ?? "https://api.deepseek.com",
62
63
  model: options.model,
63
- // No Responses API here; chat completions enforces the schema natively.
64
- structuredOutput: "json_schema",
64
+ // DeepSeek serves `response_format: { type: 'json_object' }` and nothing
65
+ // else: a `json_schema` format answers
66
+ // `400 "This response_format type is unavailable now"` on every call.
67
+ // So the endpoint guarantees JSON and the prompt carries the shape, which
68
+ // is the path the parser already tolerates.
69
+ structuredOutput: "json_object",
65
70
  ...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
66
71
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
67
72
  ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
@@ -5,9 +5,10 @@
5
5
  * hits and the thinking levels are all in `@providerkit/core`, written against
6
6
  * the REST API rather than the SDK.
7
7
  *
8
- * v3 sends a response schema alongside tools when a caller asks for both. v2
9
- * dropped the schema in that case, from a 2024-era constraint that no longer
10
- * holds — a sibling codebase runs the combination in production today.
8
+ * On Gemini 3 a response schema and tools travel on the same call. On Gemini 2
9
+ * they cannot: the API answers `400 "Function calling with a response mime
10
+ * type: 'application/json' is unsupported"`, so the schema rides in the prompt
11
+ * instead. `@providerkit/core` reads the model id and picks; nothing to set.
11
12
  */
12
13
 
13
14
  import { createGeminiProvider, type FallbackOptions, type Provider } from "@providerkit/core";
@@ -52,6 +52,10 @@ export interface OpenAICompatibleProviderInit
52
52
  /** Names the provider in errors, and picks core's effort dialect. */
53
53
  id: string;
54
54
  headers?: Record<string, string>;
55
+ /** App attribution for OpenRouter's rankings — sent as `HTTP-Referer`. */
56
+ siteUrl?: string;
57
+ /** App name for OpenRouter's rankings — sent as `X-Title`. */
58
+ siteName?: string;
55
59
  config?: RequestConfig;
56
60
  structuredOutput?: StructuredOutputMode;
57
61
  /** See {@link JsonWithTools}. Only affects calls that carry tools. */
@@ -101,6 +105,8 @@ function buildProvider(init: OpenAICompatibleProviderInit, mode: StructuredOutpu
101
105
  ...(init.jsonWithTools ? { jsonWithTools: init.jsonWithTools } : {}),
102
106
  ...(init.baseUrl ? { baseUrl: init.baseUrl } : {}),
103
107
  ...(init.headers ? { headers: init.headers } : {}),
108
+ ...(init.siteUrl ? { siteUrl: init.siteUrl } : {}),
109
+ ...(init.siteName ? { siteName: init.siteName } : {}),
104
110
  ...(init.config?.maxTokens ? { maxTokens: init.config.maxTokens } : {}),
105
111
  ...(init.config?.effort ? { effort: init.config.effort } : {}),
106
112
  ...(init.providerOrder ? { providerOrder: init.providerOrder } : {}),
@@ -71,10 +71,8 @@ export class OpenRouterProvider extends OpenAICompatibleProvider {
71
71
  // json_schema passthrough is what its models actually support.
72
72
  structuredOutput: "json_schema",
73
73
  ...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
74
- headers: {
75
- ...(options.siteUrl ? { "HTTP-Referer": options.siteUrl } : {}),
76
- ...(options.siteName ? { "X-Title": options.siteName } : {}),
77
- },
74
+ ...(options.siteUrl ? { siteUrl: options.siteUrl } : {}),
75
+ ...(options.siteName ? { siteName: options.siteName } : {}),
78
76
  ...(options.providerOrder ? { providerOrder: options.providerOrder } : {}),
79
77
  ...(options.backupModels ? { backupModels: options.backupModels } : {}),
80
78
  ...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
@@ -22,6 +22,8 @@ import {
22
22
  ProviderError,
23
23
  classify,
24
24
  isBackupEligible,
25
+ isCompleteJson,
26
+ parseToolArgs,
25
27
  probeJsonWithTools,
26
28
  requireContent,
27
29
  streamWatch,
@@ -145,8 +147,13 @@ function shouldTryBackup(error: unknown): boolean {
145
147
  }
146
148
 
147
149
  /** History plus the composed prompt, as the seam's messages. */
148
- export function toMessages(history: HistoryItem[], prompt: string): ChatMessage[] {
150
+ export function toMessages(history: HistoryItem[], prompt: string, system?: string): ChatMessage[] {
149
151
  const out: ChatMessage[] = [];
152
+ // First, and before any history: a cached prefix is only a prefix if nothing
153
+ // precedes it. Anthropic-shape hoists every system item into one top-level
154
+ // block, so a host that also puts system items in its history joins them to
155
+ // this one — fine while those are stable, and the host's to keep stable.
156
+ if (system?.trim()) out.push({ role: "system", content: system });
150
157
  for (const item of history) {
151
158
  switch (item.role) {
152
159
  case "system":
@@ -159,6 +166,11 @@ export function toMessages(history: HistoryItem[], prompt: string): ChatMessage[
159
166
  out.push({
160
167
  role: "assistant",
161
168
  content: item.content ?? "",
169
+ // Anthropic-shape drops these on purpose (its thinking blocks are
170
+ // signed); OpenAI-shape replays them, which is what DeepSeek and the
171
+ // GLM endpoints require on a turn that called a tool.
172
+ ...(item.reasoning ? { reasoning: item.reasoning } : {}),
173
+ ...(item.reasoningDetails?.length ? { reasoningDetails: item.reasoningDetails } : {}),
162
174
  ...(item.tool_calls?.length
163
175
  ? {
164
176
  toolCalls: item.tool_calls.map((call) => ({
@@ -212,6 +224,8 @@ function toJsonOutput(input: GenerateMessageInput<unknown>): StreamOptions["json
212
224
  interface Accumulator {
213
225
  text: string;
214
226
  model: string;
227
+ reasoning: string;
228
+ reasoningDetails?: unknown[];
215
229
  finishReason?: string;
216
230
  promptTokens?: number;
217
231
  completionTokens?: number;
@@ -229,6 +243,8 @@ function fold(acc: Accumulator, chunk: ProviderChunk): string {
229
243
  acc.cachedInputTokens = chunk.usage.cachedInputTokens;
230
244
  }
231
245
  if (chunk.finishReason) acc.finishReason = chunk.finishReason;
246
+ if (chunk.reasoning) acc.reasoning += chunk.reasoning;
247
+ if (chunk.reasoningDetails?.length) acc.reasoningDetails = chunk.reasoningDetails;
232
248
  for (const call of chunk.toolCalls ?? []) {
233
249
  const entry = acc.calls.get(call.index) ?? { name: "", arguments: "" };
234
250
  if (call.name) entry.name = call.name;
@@ -246,11 +262,18 @@ function toolCallsOf(acc: Accumulator, label: string): ToolCallList {
246
262
  const out: ToolCallList = [];
247
263
  for (const [, entry] of [...acc.calls.entries()].sort(([a], [b]) => a - b)) {
248
264
  if (!entry.name) continue;
249
- let args: Record<string, unknown> = {};
250
- try {
251
- if (entry.arguments) args = JSON.parse(entry.arguments) as Record<string, unknown>;
252
- } catch (error) {
253
- logger.warn(`[${label}] Failed to parse tool call arguments:`, error);
265
+ // Arguments arrive in fragments and the last one can be cut: a stream that
266
+ // ended early, a model at its `max_tokens`, a gateway that double-escaped.
267
+ // `JSON.parse` on that string throws, and the tool then ran with NOTHING —
268
+ // a lookup with no id, a send with no recipient, behind one warn line.
269
+ // `parseToolArgs` recovers what the model did send, closing an open string
270
+ // rather than dropping it — so a cut value arrives short instead of absent,
271
+ // and the tool's own `validateInput` decides whether that is enough.
272
+ const args = entry.arguments ? parseToolArgs(entry.arguments) : {};
273
+ if (entry.arguments && !isCompleteJson(entry.arguments)) {
274
+ logger.warn(
275
+ `[${label}] ${entry.name}: arguments were cut mid-stream; kept ${Object.keys(args).length} field(s).`,
276
+ );
254
277
  }
255
278
  out.push({ toolName: entry.name, arguments: args });
256
279
  }
@@ -333,10 +356,10 @@ export abstract class ProviderAdapter implements AiProvider {
333
356
  async *generateMessageStream<TContext = unknown, TStructured = AgentStructuredResponse>(
334
357
  input: GenerateMessageInput<TContext>,
335
358
  ): AsyncGenerator<GenerateMessageStreamChunk<TStructured>> {
336
- const messages = toMessages(input.history, input.prompt);
359
+ const messages = toMessages(input.history, input.prompt, input.system);
337
360
  const tools = toTools(input.tools);
338
361
  const json = toJsonOutput(input);
339
- const acc: Accumulator = { text: "", model: this.primaryModel, calls: new Map() };
362
+ const acc: Accumulator = { text: "", model: this.primaryModel, reasoning: "", calls: new Map() };
340
363
 
341
364
  const opts: StreamOptions = {
342
365
  ...this.defaults,
@@ -409,10 +432,15 @@ export abstract class ProviderAdapter implements AiProvider {
409
432
  const text = json && !structured && isJSONShaped(acc.text) ? "" : acc.text;
410
433
 
411
434
  if (toolCalls.length > 0) {
435
+ // The reasoning rides out with the tool calls it produced. A thinking
436
+ // provider rejects the next round when the assistant turn that called the
437
+ // tool comes back without it, so the caller has to be able to replay it.
412
438
  structured = {
413
439
  ...(structured ?? {}),
414
440
  message: (structured as AgentStructuredResponse | undefined)?.message || text,
415
441
  toolCalls,
442
+ ...(acc.reasoning ? { reasoning: acc.reasoning } : {}),
443
+ ...(acc.reasoningDetails ? { reasoningDetails: acc.reasoningDetails } : {}),
416
444
  } as TStructured;
417
445
  }
418
446