@falai/agent 3.4.5 → 4.0.0-alpha.2

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 (856) 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 +11 -6
  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/providers/ZaiProvider.d.ts +6 -4
  100. package/dist/cjs/providers/ZaiProvider.d.ts.map +1 -1
  101. package/dist/cjs/providers/ZaiProvider.js +6 -4
  102. package/dist/cjs/providers/ZaiProvider.js.map +1 -1
  103. package/dist/cjs/types/agent.d.ts +153 -383
  104. package/dist/cjs/types/agent.d.ts.map +1 -1
  105. package/dist/cjs/types/agent.js +1 -1
  106. package/dist/cjs/types/ai.d.ts +32 -1
  107. package/dist/cjs/types/ai.d.ts.map +1 -1
  108. package/dist/cjs/types/compaction.d.ts +3 -1
  109. package/dist/cjs/types/compaction.d.ts.map +1 -1
  110. package/dist/cjs/types/errors.d.ts +9 -12
  111. package/dist/cjs/types/errors.d.ts.map +1 -1
  112. package/dist/cjs/types/errors.js +14 -17
  113. package/dist/cjs/types/errors.js.map +1 -1
  114. package/dist/cjs/types/flow.d.ts +265 -513
  115. package/dist/cjs/types/flow.d.ts.map +1 -1
  116. package/dist/cjs/types/flow.js +7 -1
  117. package/dist/cjs/types/flow.js.map +1 -1
  118. package/dist/cjs/types/history.d.ts +7 -18
  119. package/dist/cjs/types/history.d.ts.map +1 -1
  120. package/dist/cjs/types/history.js.map +1 -1
  121. package/dist/cjs/types/index.d.ts +9 -15
  122. package/dist/cjs/types/index.d.ts.map +1 -1
  123. package/dist/cjs/types/index.js +4 -14
  124. package/dist/cjs/types/index.js.map +1 -1
  125. package/dist/cjs/types/session.d.ts +94 -64
  126. package/dist/cjs/types/session.d.ts.map +1 -1
  127. package/dist/cjs/types/session.js +5 -1
  128. package/dist/cjs/types/session.js.map +1 -1
  129. package/dist/cjs/types/tool.d.ts +37 -207
  130. package/dist/cjs/types/tool.d.ts.map +1 -1
  131. package/dist/cjs/types/tool.js +5 -14
  132. package/dist/cjs/types/tool.js.map +1 -1
  133. package/dist/cjs/utils/clock.d.ts +28 -0
  134. package/dist/cjs/utils/clock.d.ts.map +1 -0
  135. package/dist/cjs/utils/clock.js +64 -0
  136. package/dist/cjs/utils/clock.js.map +1 -0
  137. package/dist/cjs/utils/duration.d.ts +11 -0
  138. package/dist/cjs/utils/duration.d.ts.map +1 -0
  139. package/dist/cjs/utils/duration.js +31 -0
  140. package/dist/cjs/utils/duration.js.map +1 -0
  141. package/dist/cjs/utils/history.d.ts +4 -1
  142. package/dist/cjs/utils/history.d.ts.map +1 -1
  143. package/dist/cjs/utils/history.js +2 -2
  144. package/dist/cjs/utils/history.js.map +1 -1
  145. package/dist/cjs/utils/index.d.ts +4 -10
  146. package/dist/cjs/utils/index.d.ts.map +1 -1
  147. package/dist/cjs/utils/index.js +14 -61
  148. package/dist/cjs/utils/index.js.map +1 -1
  149. package/dist/cjs/utils/json.d.ts +2 -0
  150. package/dist/cjs/utils/json.d.ts.map +1 -1
  151. package/dist/cjs/utils/json.js +5 -0
  152. package/dist/cjs/utils/json.js.map +1 -1
  153. package/dist/cjs/utils/outcomes.d.ts +48 -0
  154. package/dist/cjs/utils/outcomes.d.ts.map +1 -0
  155. package/dist/cjs/utils/outcomes.js +51 -0
  156. package/dist/cjs/utils/outcomes.js.map +1 -0
  157. package/dist/cjs/utils/schema.d.ts +50 -0
  158. package/dist/cjs/utils/schema.d.ts.map +1 -0
  159. package/dist/cjs/utils/schema.js +138 -0
  160. package/dist/cjs/utils/schema.js.map +1 -0
  161. package/dist/cjs/utils/streamingMessage.d.ts +3 -2
  162. package/dist/cjs/utils/streamingMessage.d.ts.map +1 -1
  163. package/dist/cjs/utils/streamingMessage.js +38 -4
  164. package/dist/cjs/utils/streamingMessage.js.map +1 -1
  165. package/dist/cjs/utils/template.d.ts +13 -149
  166. package/dist/cjs/utils/template.d.ts.map +1 -1
  167. package/dist/cjs/utils/template.js +31 -363
  168. package/dist/cjs/utils/template.js.map +1 -1
  169. package/dist/cjs/utils/usage.d.ts +19 -0
  170. package/dist/cjs/utils/usage.d.ts.map +1 -0
  171. package/dist/cjs/utils/usage.js +35 -0
  172. package/dist/cjs/utils/usage.js.map +1 -0
  173. package/dist/core/Agent.d.ts +22 -378
  174. package/dist/core/Agent.d.ts.map +1 -1
  175. package/dist/core/Agent.js +107 -1181
  176. package/dist/core/Agent.js.map +1 -1
  177. package/dist/core/CompactionEngine.d.ts.map +1 -1
  178. package/dist/core/CompactionEngine.js +5 -3
  179. package/dist/core/CompactionEngine.js.map +1 -1
  180. package/dist/core/FlowSpec.d.ts +136 -0
  181. package/dist/core/FlowSpec.d.ts.map +1 -0
  182. package/dist/core/FlowSpec.js +516 -0
  183. package/dist/core/FlowSpec.js.map +1 -0
  184. package/dist/core/Migrate.d.ts +38 -0
  185. package/dist/core/Migrate.d.ts.map +1 -0
  186. package/dist/core/Migrate.js +264 -0
  187. package/dist/core/Migrate.js.map +1 -0
  188. package/dist/core/Prompt.d.ts +54 -0
  189. package/dist/core/Prompt.d.ts.map +1 -0
  190. package/dist/core/Prompt.js +133 -0
  191. package/dist/core/Prompt.js.map +1 -0
  192. package/dist/core/Runner.d.ts +160 -0
  193. package/dist/core/Runner.d.ts.map +1 -0
  194. package/dist/core/Runner.js +1127 -0
  195. package/dist/core/Runner.js.map +1 -0
  196. package/dist/core/Speak.d.ts +37 -0
  197. package/dist/core/Speak.d.ts.map +1 -0
  198. package/dist/core/Speak.js +360 -0
  199. package/dist/core/Speak.js.map +1 -0
  200. package/dist/core/Understand.d.ts +28 -0
  201. package/dist/core/Understand.d.ts.map +1 -0
  202. package/dist/core/Understand.js +349 -0
  203. package/dist/core/Understand.js.map +1 -0
  204. package/dist/core/contracts.d.ts +122 -0
  205. package/dist/core/contracts.d.ts.map +1 -0
  206. package/dist/core/contracts.js +10 -0
  207. package/dist/core/contracts.js.map +1 -0
  208. package/dist/core/falai.d.ts +57 -0
  209. package/dist/core/falai.d.ts.map +1 -0
  210. package/dist/core/falai.js +40 -0
  211. package/dist/core/falai.js.map +1 -0
  212. package/dist/core/predicate.d.ts +9 -0
  213. package/dist/core/predicate.d.ts.map +1 -0
  214. package/dist/core/predicate.js +54 -0
  215. package/dist/core/predicate.js.map +1 -0
  216. package/dist/index.d.ts +26 -31
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +19 -24
  219. package/dist/index.js.map +1 -1
  220. package/dist/persistence/MemoryStore.d.ts +15 -0
  221. package/dist/persistence/MemoryStore.d.ts.map +1 -0
  222. package/dist/persistence/MemoryStore.js +35 -0
  223. package/dist/persistence/MemoryStore.js.map +1 -0
  224. package/dist/persistence/MongoStore.d.ts +42 -0
  225. package/dist/persistence/MongoStore.d.ts.map +1 -0
  226. package/dist/persistence/MongoStore.js +56 -0
  227. package/dist/persistence/MongoStore.js.map +1 -0
  228. package/dist/persistence/OpenSearchStore.d.ts +86 -0
  229. package/dist/persistence/OpenSearchStore.d.ts.map +1 -0
  230. package/dist/persistence/OpenSearchStore.js +116 -0
  231. package/dist/persistence/OpenSearchStore.js.map +1 -0
  232. package/dist/persistence/PostgresStore.d.ts +41 -0
  233. package/dist/persistence/PostgresStore.d.ts.map +1 -0
  234. package/dist/persistence/PostgresStore.js +54 -0
  235. package/dist/persistence/PostgresStore.js.map +1 -0
  236. package/dist/persistence/PrismaStore.d.ts +65 -0
  237. package/dist/persistence/PrismaStore.d.ts.map +1 -0
  238. package/dist/persistence/PrismaStore.js +91 -0
  239. package/dist/persistence/PrismaStore.js.map +1 -0
  240. package/dist/persistence/RedisStore.d.ts +34 -0
  241. package/dist/persistence/RedisStore.d.ts.map +1 -0
  242. package/dist/persistence/RedisStore.js +57 -0
  243. package/dist/persistence/RedisStore.js.map +1 -0
  244. package/dist/persistence/SQLiteStore.d.ts +45 -0
  245. package/dist/persistence/SQLiteStore.d.ts.map +1 -0
  246. package/dist/persistence/SQLiteStore.js +70 -0
  247. package/dist/persistence/SQLiteStore.js.map +1 -0
  248. package/dist/persistence/sessionRow.d.ts +14 -0
  249. package/dist/persistence/sessionRow.d.ts.map +1 -0
  250. package/dist/persistence/sessionRow.js +45 -0
  251. package/dist/persistence/sessionRow.js.map +1 -0
  252. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  253. package/dist/providers/DeepSeekProvider.js +8 -3
  254. package/dist/providers/DeepSeekProvider.js.map +1 -1
  255. package/dist/providers/GeminiProvider.d.ts +4 -3
  256. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  257. package/dist/providers/GeminiProvider.js +4 -3
  258. package/dist/providers/GeminiProvider.js.map +1 -1
  259. package/dist/providers/OpenAICompatibleProvider.d.ts +4 -0
  260. package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  261. package/dist/providers/OpenAICompatibleProvider.js +2 -0
  262. package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
  263. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  264. package/dist/providers/OpenRouterProvider.js +2 -4
  265. package/dist/providers/OpenRouterProvider.js.map +1 -1
  266. package/dist/providers/ProviderAdapter.d.ts +11 -6
  267. package/dist/providers/ProviderAdapter.d.ts.map +1 -1
  268. package/dist/providers/ProviderAdapter.js +34 -11
  269. package/dist/providers/ProviderAdapter.js.map +1 -1
  270. package/dist/providers/ZaiProvider.d.ts +6 -4
  271. package/dist/providers/ZaiProvider.d.ts.map +1 -1
  272. package/dist/providers/ZaiProvider.js +6 -4
  273. package/dist/providers/ZaiProvider.js.map +1 -1
  274. package/dist/types/agent.d.ts +153 -383
  275. package/dist/types/agent.d.ts.map +1 -1
  276. package/dist/types/agent.js +1 -1
  277. package/dist/types/ai.d.ts +32 -1
  278. package/dist/types/ai.d.ts.map +1 -1
  279. package/dist/types/compaction.d.ts +3 -1
  280. package/dist/types/compaction.d.ts.map +1 -1
  281. package/dist/types/errors.d.ts +9 -12
  282. package/dist/types/errors.d.ts.map +1 -1
  283. package/dist/types/errors.js +12 -15
  284. package/dist/types/errors.js.map +1 -1
  285. package/dist/types/flow.d.ts +265 -513
  286. package/dist/types/flow.d.ts.map +1 -1
  287. package/dist/types/flow.js +7 -1
  288. package/dist/types/flow.js.map +1 -1
  289. package/dist/types/history.d.ts +7 -18
  290. package/dist/types/history.d.ts.map +1 -1
  291. package/dist/types/history.js.map +1 -1
  292. package/dist/types/index.d.ts +9 -15
  293. package/dist/types/index.d.ts.map +1 -1
  294. package/dist/types/index.js +2 -7
  295. package/dist/types/index.js.map +1 -1
  296. package/dist/types/session.d.ts +94 -64
  297. package/dist/types/session.d.ts.map +1 -1
  298. package/dist/types/session.js +5 -1
  299. package/dist/types/session.js.map +1 -1
  300. package/dist/types/tool.d.ts +37 -207
  301. package/dist/types/tool.d.ts.map +1 -1
  302. package/dist/types/tool.js +6 -13
  303. package/dist/types/tool.js.map +1 -1
  304. package/dist/utils/clock.d.ts +28 -0
  305. package/dist/utils/clock.d.ts.map +1 -0
  306. package/dist/utils/clock.js +59 -0
  307. package/dist/utils/clock.js.map +1 -0
  308. package/dist/utils/duration.d.ts +11 -0
  309. package/dist/utils/duration.d.ts.map +1 -0
  310. package/dist/utils/duration.js +26 -0
  311. package/dist/utils/duration.js.map +1 -0
  312. package/dist/utils/history.d.ts +4 -1
  313. package/dist/utils/history.d.ts.map +1 -1
  314. package/dist/utils/history.js +2 -2
  315. package/dist/utils/history.js.map +1 -1
  316. package/dist/utils/index.d.ts +4 -10
  317. package/dist/utils/index.d.ts.map +1 -1
  318. package/dist/utils/index.js +4 -21
  319. package/dist/utils/index.js.map +1 -1
  320. package/dist/utils/json.d.ts +2 -0
  321. package/dist/utils/json.d.ts.map +1 -1
  322. package/dist/utils/json.js +4 -0
  323. package/dist/utils/json.js.map +1 -1
  324. package/dist/utils/outcomes.d.ts +48 -0
  325. package/dist/utils/outcomes.d.ts.map +1 -0
  326. package/dist/utils/outcomes.js +48 -0
  327. package/dist/utils/outcomes.js.map +1 -0
  328. package/dist/utils/schema.d.ts +50 -0
  329. package/dist/utils/schema.d.ts.map +1 -0
  330. package/dist/utils/schema.js +129 -0
  331. package/dist/utils/schema.js.map +1 -0
  332. package/dist/utils/streamingMessage.d.ts +3 -2
  333. package/dist/utils/streamingMessage.d.ts.map +1 -1
  334. package/dist/utils/streamingMessage.js +38 -4
  335. package/dist/utils/streamingMessage.js.map +1 -1
  336. package/dist/utils/template.d.ts +13 -149
  337. package/dist/utils/template.d.ts.map +1 -1
  338. package/dist/utils/template.js +28 -355
  339. package/dist/utils/template.js.map +1 -1
  340. package/dist/utils/usage.d.ts +19 -0
  341. package/dist/utils/usage.d.ts.map +1 -0
  342. package/dist/utils/usage.js +31 -0
  343. package/dist/utils/usage.js.map +1 -0
  344. package/docs/README.md +37 -19
  345. package/docs/concepts/architecture.md +117 -239
  346. package/docs/concepts/collection.md +170 -0
  347. package/docs/concepts/pipeline.md +132 -378
  348. package/docs/concepts/runs-and-waits.md +192 -0
  349. package/docs/guides/actions-and-events.md +276 -0
  350. package/docs/guides/branching.md +119 -208
  351. package/docs/guides/compaction.md +63 -158
  352. package/docs/guides/conditions.md +164 -128
  353. package/docs/guides/error-handling.md +168 -164
  354. package/docs/guides/flow-control.md +210 -349
  355. package/docs/guides/flows-from-json.md +224 -0
  356. package/docs/guides/instructions.md +125 -161
  357. package/docs/guides/persistence.md +182 -206
  358. package/docs/guides/streaming.md +50 -114
  359. package/docs/guides/testing.md +284 -0
  360. package/docs/guides/triggers.md +401 -0
  361. package/docs/migration/README.md +8 -15
  362. package/docs/migration/v1-to-v2.md +1 -1
  363. package/docs/migration/v2-3-to-v2-4.md +2 -2
  364. package/docs/migration/v2-6-to-v2-7.md +4 -4
  365. package/docs/migration/v3-to-v4.md +452 -0
  366. package/docs/reference/actions-events-conditions.md +396 -0
  367. package/docs/reference/agent.md +244 -0
  368. package/docs/reference/branches.md +75 -203
  369. package/docs/reference/errors.md +188 -144
  370. package/docs/reference/fields.md +125 -0
  371. package/docs/reference/flow-spec.md +248 -0
  372. package/docs/reference/flow.md +104 -192
  373. package/docs/reference/instruction.md +83 -137
  374. package/docs/reference/outcomes.md +273 -0
  375. package/docs/reference/providers.md +525 -302
  376. package/docs/reference/session.md +210 -0
  377. package/docs/reference/step.md +194 -312
  378. package/docs/reference/stores.md +496 -0
  379. package/docs/reference/tool.md +162 -231
  380. package/docs/reference/trigger.md +180 -0
  381. package/docs/rfc/v4-one-flow.md +477 -0
  382. package/docs/start/01-install.md +59 -44
  383. package/docs/start/02-first-agent.md +97 -147
  384. package/docs/start/03-collect-data.md +78 -183
  385. package/docs/start/04-add-tools.md +159 -227
  386. package/docs/start/05-go-to-production.md +167 -164
  387. package/examples/01-quickstart.ts +26 -16
  388. package/examples/02-fields.ts +75 -0
  389. package/examples/03-tools.ts +79 -119
  390. package/examples/04-instructions.ts +60 -87
  391. package/examples/05-branches.ts +78 -0
  392. package/examples/06-triggers-and-waits.ts +148 -0
  393. package/examples/07-streaming.ts +34 -60
  394. package/examples/08-store-and-migration.ts +97 -0
  395. package/examples/09-flows-from-json.ts +107 -0
  396. package/package.json +9 -6
  397. package/src/core/Agent.ts +116 -1512
  398. package/src/core/CompactionEngine.ts +7 -4
  399. package/src/core/FlowSpec.ts +712 -0
  400. package/src/core/Migrate.ts +256 -0
  401. package/src/core/Prompt.ts +156 -0
  402. package/src/core/Runner.ts +1181 -0
  403. package/src/core/Speak.ts +451 -0
  404. package/src/core/Understand.ts +422 -0
  405. package/src/core/contracts.ts +111 -0
  406. package/src/core/falai.ts +86 -0
  407. package/src/core/predicate.ts +56 -0
  408. package/src/index.ts +119 -147
  409. package/src/persistence/MemoryStore.ts +37 -0
  410. package/src/persistence/MongoStore.ts +89 -0
  411. package/src/persistence/OpenSearchStore.ts +153 -0
  412. package/src/persistence/PostgresStore.ts +89 -0
  413. package/src/persistence/PrismaStore.ts +127 -0
  414. package/src/persistence/RedisStore.ts +90 -0
  415. package/src/persistence/SQLiteStore.ts +103 -0
  416. package/src/persistence/sessionRow.ts +45 -0
  417. package/src/providers/DeepSeekProvider.ts +8 -3
  418. package/src/providers/GeminiProvider.ts +4 -3
  419. package/src/providers/OpenAICompatibleProvider.ts +6 -0
  420. package/src/providers/OpenRouterProvider.ts +2 -4
  421. package/src/providers/ProviderAdapter.ts +46 -13
  422. package/src/providers/ZaiProvider.ts +6 -4
  423. package/src/types/agent.ts +124 -397
  424. package/src/types/ai.ts +33 -1
  425. package/src/types/compaction.ts +3 -1
  426. package/src/types/errors.ts +13 -16
  427. package/src/types/flow.ts +249 -550
  428. package/src/types/history.ts +7 -20
  429. package/src/types/index.ts +87 -139
  430. package/src/types/session.ts +135 -70
  431. package/src/types/tool.ts +42 -267
  432. package/src/utils/clock.ts +70 -0
  433. package/src/utils/duration.ts +33 -0
  434. package/src/utils/history.ts +3 -2
  435. package/src/utils/index.ts +8 -66
  436. package/src/utils/json.ts +5 -0
  437. package/src/utils/outcomes.ts +56 -0
  438. package/src/utils/schema.ts +145 -0
  439. package/src/utils/streamingMessage.ts +34 -4
  440. package/src/utils/template.ts +32 -423
  441. package/src/utils/usage.ts +37 -0
  442. package/dist/adapters/MemoryAdapter.d.ts +0 -47
  443. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  444. package/dist/adapters/MemoryAdapter.js +0 -204
  445. package/dist/adapters/MemoryAdapter.js.map +0 -1
  446. package/dist/adapters/MongoAdapter.d.ts +0 -97
  447. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  448. package/dist/adapters/MongoAdapter.js +0 -196
  449. package/dist/adapters/MongoAdapter.js.map +0 -1
  450. package/dist/adapters/OpenSearchAdapter.d.ts +0 -169
  451. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  452. package/dist/adapters/OpenSearchAdapter.js +0 -471
  453. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  454. package/dist/adapters/PostgreSQLAdapter.d.ts +0 -85
  455. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  456. package/dist/adapters/PostgreSQLAdapter.js +0 -308
  457. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  458. package/dist/adapters/PrismaAdapter.d.ts +0 -115
  459. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  460. package/dist/adapters/PrismaAdapter.js +0 -406
  461. package/dist/adapters/PrismaAdapter.js.map +0 -1
  462. package/dist/adapters/RedisAdapter.d.ts +0 -72
  463. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  464. package/dist/adapters/RedisAdapter.js +0 -286
  465. package/dist/adapters/RedisAdapter.js.map +0 -1
  466. package/dist/adapters/SQLiteAdapter.d.ts +0 -86
  467. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  468. package/dist/adapters/SQLiteAdapter.js +0 -337
  469. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  470. package/dist/adapters/index.d.ts +0 -17
  471. package/dist/adapters/index.d.ts.map +0 -1
  472. package/dist/adapters/index.js +0 -11
  473. package/dist/adapters/index.js.map +0 -1
  474. package/dist/adapters/sessionRow.d.ts +0 -22
  475. package/dist/adapters/sessionRow.d.ts.map +0 -1
  476. package/dist/adapters/sessionRow.js +0 -48
  477. package/dist/adapters/sessionRow.js.map +0 -1
  478. package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
  479. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  480. package/dist/cjs/adapters/MemoryAdapter.js +0 -208
  481. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  482. package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
  483. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  484. package/dist/cjs/adapters/MongoAdapter.js +0 -200
  485. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  486. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
  487. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  488. package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
  489. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  490. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
  491. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  492. package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
  493. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  494. package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
  495. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  496. package/dist/cjs/adapters/PrismaAdapter.js +0 -410
  497. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  498. package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
  499. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  500. package/dist/cjs/adapters/RedisAdapter.js +0 -290
  501. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  502. package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
  503. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  504. package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
  505. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  506. package/dist/cjs/adapters/index.d.ts +0 -17
  507. package/dist/cjs/adapters/index.d.ts.map +0 -1
  508. package/dist/cjs/adapters/index.js +0 -21
  509. package/dist/cjs/adapters/index.js.map +0 -1
  510. package/dist/cjs/adapters/sessionRow.d.ts +0 -22
  511. package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
  512. package/dist/cjs/adapters/sessionRow.js +0 -52
  513. package/dist/cjs/adapters/sessionRow.js.map +0 -1
  514. package/dist/cjs/constants/index.d.ts +0 -1
  515. package/dist/cjs/constants/index.d.ts.map +0 -1
  516. package/dist/cjs/constants/index.js +0 -4
  517. package/dist/cjs/constants/index.js.map +0 -1
  518. package/dist/cjs/core/AutoChainExecutor.d.ts +0 -97
  519. package/dist/cjs/core/AutoChainExecutor.d.ts.map +0 -1
  520. package/dist/cjs/core/AutoChainExecutor.js +0 -288
  521. package/dist/cjs/core/AutoChainExecutor.js.map +0 -1
  522. package/dist/cjs/core/BranchEvaluator.d.ts +0 -55
  523. package/dist/cjs/core/BranchEvaluator.d.ts.map +0 -1
  524. package/dist/cjs/core/BranchEvaluator.js +0 -125
  525. package/dist/cjs/core/BranchEvaluator.js.map +0 -1
  526. package/dist/cjs/core/DirectiveChainTracker.d.ts +0 -49
  527. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +0 -1
  528. package/dist/cjs/core/DirectiveChainTracker.js +0 -121
  529. package/dist/cjs/core/DirectiveChainTracker.js.map +0 -1
  530. package/dist/cjs/core/Events.d.ts +0 -26
  531. package/dist/cjs/core/Events.d.ts.map +0 -1
  532. package/dist/cjs/core/Events.js +0 -144
  533. package/dist/cjs/core/Events.js.map +0 -1
  534. package/dist/cjs/core/Flow.d.ts +0 -183
  535. package/dist/cjs/core/Flow.d.ts.map +0 -1
  536. package/dist/cjs/core/Flow.js +0 -551
  537. package/dist/cjs/core/Flow.js.map +0 -1
  538. package/dist/cjs/core/FlowRouter.d.ts +0 -183
  539. package/dist/cjs/core/FlowRouter.d.ts.map +0 -1
  540. package/dist/cjs/core/FlowRouter.js +0 -1047
  541. package/dist/cjs/core/FlowRouter.js.map +0 -1
  542. package/dist/cjs/core/PersistenceManager.d.ts +0 -114
  543. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  544. package/dist/cjs/core/PersistenceManager.js +0 -336
  545. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  546. package/dist/cjs/core/PromptComposer.d.ts +0 -47
  547. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  548. package/dist/cjs/core/PromptComposer.js +0 -397
  549. package/dist/cjs/core/PromptComposer.js.map +0 -1
  550. package/dist/cjs/core/PromptSectionCache.d.ts +0 -48
  551. package/dist/cjs/core/PromptSectionCache.d.ts.map +0 -1
  552. package/dist/cjs/core/PromptSectionCache.js +0 -108
  553. package/dist/cjs/core/PromptSectionCache.js.map +0 -1
  554. package/dist/cjs/core/ResponseEngine.d.ts +0 -43
  555. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  556. package/dist/cjs/core/ResponseEngine.js +0 -235
  557. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  558. package/dist/cjs/core/ResponseGenerationError.d.ts +0 -30
  559. package/dist/cjs/core/ResponseGenerationError.d.ts.map +0 -1
  560. package/dist/cjs/core/ResponseGenerationError.js +0 -35
  561. package/dist/cjs/core/ResponseGenerationError.js.map +0 -1
  562. package/dist/cjs/core/ResponseModal.d.ts +0 -305
  563. package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
  564. package/dist/cjs/core/ResponseModal.js +0 -1414
  565. package/dist/cjs/core/ResponseModal.js.map +0 -1
  566. package/dist/cjs/core/ResponsePipeline.d.ts +0 -220
  567. package/dist/cjs/core/ResponsePipeline.d.ts.map +0 -1
  568. package/dist/cjs/core/ResponsePipeline.js +0 -1040
  569. package/dist/cjs/core/ResponsePipeline.js.map +0 -1
  570. package/dist/cjs/core/SessionFinalizer.d.ts +0 -34
  571. package/dist/cjs/core/SessionFinalizer.d.ts.map +0 -1
  572. package/dist/cjs/core/SessionFinalizer.js +0 -88
  573. package/dist/cjs/core/SessionFinalizer.js.map +0 -1
  574. package/dist/cjs/core/SessionManager.d.ts +0 -112
  575. package/dist/cjs/core/SessionManager.d.ts.map +0 -1
  576. package/dist/cjs/core/SessionManager.js +0 -308
  577. package/dist/cjs/core/SessionManager.js.map +0 -1
  578. package/dist/cjs/core/SignalCoordinator.d.ts +0 -103
  579. package/dist/cjs/core/SignalCoordinator.d.ts.map +0 -1
  580. package/dist/cjs/core/SignalCoordinator.js +0 -207
  581. package/dist/cjs/core/SignalCoordinator.js.map +0 -1
  582. package/dist/cjs/core/SignalEvaluator.d.ts +0 -86
  583. package/dist/cjs/core/SignalEvaluator.d.ts.map +0 -1
  584. package/dist/cjs/core/SignalEvaluator.js +0 -319
  585. package/dist/cjs/core/SignalEvaluator.js.map +0 -1
  586. package/dist/cjs/core/SignalProcessor.d.ts +0 -152
  587. package/dist/cjs/core/SignalProcessor.d.ts.map +0 -1
  588. package/dist/cjs/core/SignalProcessor.js +0 -505
  589. package/dist/cjs/core/SignalProcessor.js.map +0 -1
  590. package/dist/cjs/core/Step.d.ts +0 -184
  591. package/dist/cjs/core/Step.d.ts.map +0 -1
  592. package/dist/cjs/core/Step.js +0 -599
  593. package/dist/cjs/core/Step.js.map +0 -1
  594. package/dist/cjs/core/StepLifecycle.d.ts +0 -43
  595. package/dist/cjs/core/StepLifecycle.d.ts.map +0 -1
  596. package/dist/cjs/core/StepLifecycle.js +0 -180
  597. package/dist/cjs/core/StepLifecycle.js.map +0 -1
  598. package/dist/cjs/core/StreamingToolExecutor.d.ts +0 -142
  599. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +0 -1
  600. package/dist/cjs/core/StreamingToolExecutor.js +0 -490
  601. package/dist/cjs/core/StreamingToolExecutor.js.map +0 -1
  602. package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
  603. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
  604. package/dist/cjs/core/ToolLoopExecutor.js +0 -568
  605. package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
  606. package/dist/cjs/core/ToolManager.d.ts +0 -250
  607. package/dist/cjs/core/ToolManager.d.ts.map +0 -1
  608. package/dist/cjs/core/ToolManager.js +0 -1104
  609. package/dist/cjs/core/ToolManager.js.map +0 -1
  610. package/dist/cjs/core/createAgent.d.ts +0 -35
  611. package/dist/cjs/core/createAgent.d.ts.map +0 -1
  612. package/dist/cjs/core/createAgent.js +0 -39
  613. package/dist/cjs/core/createAgent.js.map +0 -1
  614. package/dist/cjs/core/flow-namespace.d.ts +0 -64
  615. package/dist/cjs/core/flow-namespace.d.ts.map +0 -1
  616. package/dist/cjs/core/flow-namespace.js +0 -182
  617. package/dist/cjs/core/flow-namespace.js.map +0 -1
  618. package/dist/cjs/core/toolGates.d.ts +0 -24
  619. package/dist/cjs/core/toolGates.d.ts.map +0 -1
  620. package/dist/cjs/core/toolGates.js +0 -52
  621. package/dist/cjs/core/toolGates.js.map +0 -1
  622. package/dist/cjs/types/persistence.d.ts +0 -254
  623. package/dist/cjs/types/persistence.d.ts.map +0 -1
  624. package/dist/cjs/types/persistence.js +0 -7
  625. package/dist/cjs/types/persistence.js.map +0 -1
  626. package/dist/cjs/types/prompt-cache.d.ts +0 -15
  627. package/dist/cjs/types/prompt-cache.d.ts.map +0 -1
  628. package/dist/cjs/types/prompt-cache.js +0 -6
  629. package/dist/cjs/types/prompt-cache.js.map +0 -1
  630. package/dist/cjs/types/signals.d.ts +0 -263
  631. package/dist/cjs/types/signals.d.ts.map +0 -1
  632. package/dist/cjs/types/signals.js +0 -11
  633. package/dist/cjs/types/signals.js.map +0 -1
  634. package/dist/cjs/types/template.d.ts +0 -84
  635. package/dist/cjs/types/template.d.ts.map +0 -1
  636. package/dist/cjs/types/template.js +0 -3
  637. package/dist/cjs/types/template.js.map +0 -1
  638. package/dist/cjs/utils/condition.d.ts +0 -63
  639. package/dist/cjs/utils/condition.d.ts.map +0 -1
  640. package/dist/cjs/utils/condition.js +0 -239
  641. package/dist/cjs/utils/condition.js.map +0 -1
  642. package/dist/cjs/utils/event.d.ts +0 -6
  643. package/dist/cjs/utils/event.d.ts.map +0 -1
  644. package/dist/cjs/utils/event.js +0 -20
  645. package/dist/cjs/utils/event.js.map +0 -1
  646. package/dist/cjs/utils/id.d.ts +0 -33
  647. package/dist/cjs/utils/id.d.ts.map +0 -1
  648. package/dist/cjs/utils/id.js +0 -84
  649. package/dist/cjs/utils/id.js.map +0 -1
  650. package/dist/cjs/utils/serialize.d.ts +0 -36
  651. package/dist/cjs/utils/serialize.d.ts.map +0 -1
  652. package/dist/cjs/utils/serialize.js +0 -77
  653. package/dist/cjs/utils/serialize.js.map +0 -1
  654. package/dist/cjs/utils/session.d.ts +0 -124
  655. package/dist/cjs/utils/session.d.ts.map +0 -1
  656. package/dist/cjs/utils/session.js +0 -396
  657. package/dist/cjs/utils/session.js.map +0 -1
  658. package/dist/constants/index.d.ts +0 -2
  659. package/dist/constants/index.d.ts.map +0 -1
  660. package/dist/constants/index.js +0 -4
  661. package/dist/constants/index.js.map +0 -1
  662. package/dist/core/AutoChainExecutor.d.ts +0 -97
  663. package/dist/core/AutoChainExecutor.d.ts.map +0 -1
  664. package/dist/core/AutoChainExecutor.js +0 -284
  665. package/dist/core/AutoChainExecutor.js.map +0 -1
  666. package/dist/core/BranchEvaluator.d.ts +0 -55
  667. package/dist/core/BranchEvaluator.d.ts.map +0 -1
  668. package/dist/core/BranchEvaluator.js +0 -121
  669. package/dist/core/BranchEvaluator.js.map +0 -1
  670. package/dist/core/DirectiveChainTracker.d.ts +0 -49
  671. package/dist/core/DirectiveChainTracker.d.ts.map +0 -1
  672. package/dist/core/DirectiveChainTracker.js +0 -117
  673. package/dist/core/DirectiveChainTracker.js.map +0 -1
  674. package/dist/core/Events.d.ts +0 -26
  675. package/dist/core/Events.d.ts.map +0 -1
  676. package/dist/core/Events.js +0 -137
  677. package/dist/core/Events.js.map +0 -1
  678. package/dist/core/Flow.d.ts +0 -183
  679. package/dist/core/Flow.d.ts.map +0 -1
  680. package/dist/core/Flow.js +0 -547
  681. package/dist/core/Flow.js.map +0 -1
  682. package/dist/core/FlowRouter.d.ts +0 -183
  683. package/dist/core/FlowRouter.d.ts.map +0 -1
  684. package/dist/core/FlowRouter.js +0 -1043
  685. package/dist/core/FlowRouter.js.map +0 -1
  686. package/dist/core/PersistenceManager.d.ts +0 -114
  687. package/dist/core/PersistenceManager.d.ts.map +0 -1
  688. package/dist/core/PersistenceManager.js +0 -332
  689. package/dist/core/PersistenceManager.js.map +0 -1
  690. package/dist/core/PromptComposer.d.ts +0 -47
  691. package/dist/core/PromptComposer.d.ts.map +0 -1
  692. package/dist/core/PromptComposer.js +0 -393
  693. package/dist/core/PromptComposer.js.map +0 -1
  694. package/dist/core/PromptSectionCache.d.ts +0 -48
  695. package/dist/core/PromptSectionCache.d.ts.map +0 -1
  696. package/dist/core/PromptSectionCache.js +0 -104
  697. package/dist/core/PromptSectionCache.js.map +0 -1
  698. package/dist/core/ResponseEngine.d.ts +0 -43
  699. package/dist/core/ResponseEngine.d.ts.map +0 -1
  700. package/dist/core/ResponseEngine.js +0 -231
  701. package/dist/core/ResponseEngine.js.map +0 -1
  702. package/dist/core/ResponseGenerationError.d.ts +0 -30
  703. package/dist/core/ResponseGenerationError.d.ts.map +0 -1
  704. package/dist/core/ResponseGenerationError.js +0 -31
  705. package/dist/core/ResponseGenerationError.js.map +0 -1
  706. package/dist/core/ResponseModal.d.ts +0 -305
  707. package/dist/core/ResponseModal.d.ts.map +0 -1
  708. package/dist/core/ResponseModal.js +0 -1410
  709. package/dist/core/ResponseModal.js.map +0 -1
  710. package/dist/core/ResponsePipeline.d.ts +0 -220
  711. package/dist/core/ResponsePipeline.d.ts.map +0 -1
  712. package/dist/core/ResponsePipeline.js +0 -1035
  713. package/dist/core/ResponsePipeline.js.map +0 -1
  714. package/dist/core/SessionFinalizer.d.ts +0 -34
  715. package/dist/core/SessionFinalizer.d.ts.map +0 -1
  716. package/dist/core/SessionFinalizer.js +0 -84
  717. package/dist/core/SessionFinalizer.js.map +0 -1
  718. package/dist/core/SessionManager.d.ts +0 -112
  719. package/dist/core/SessionManager.d.ts.map +0 -1
  720. package/dist/core/SessionManager.js +0 -301
  721. package/dist/core/SessionManager.js.map +0 -1
  722. package/dist/core/SignalCoordinator.d.ts +0 -103
  723. package/dist/core/SignalCoordinator.d.ts.map +0 -1
  724. package/dist/core/SignalCoordinator.js +0 -203
  725. package/dist/core/SignalCoordinator.js.map +0 -1
  726. package/dist/core/SignalEvaluator.d.ts +0 -86
  727. package/dist/core/SignalEvaluator.d.ts.map +0 -1
  728. package/dist/core/SignalEvaluator.js +0 -312
  729. package/dist/core/SignalEvaluator.js.map +0 -1
  730. package/dist/core/SignalProcessor.d.ts +0 -152
  731. package/dist/core/SignalProcessor.d.ts.map +0 -1
  732. package/dist/core/SignalProcessor.js +0 -498
  733. package/dist/core/SignalProcessor.js.map +0 -1
  734. package/dist/core/Step.d.ts +0 -184
  735. package/dist/core/Step.d.ts.map +0 -1
  736. package/dist/core/Step.js +0 -594
  737. package/dist/core/Step.js.map +0 -1
  738. package/dist/core/StepLifecycle.d.ts +0 -43
  739. package/dist/core/StepLifecycle.d.ts.map +0 -1
  740. package/dist/core/StepLifecycle.js +0 -176
  741. package/dist/core/StepLifecycle.js.map +0 -1
  742. package/dist/core/StreamingToolExecutor.d.ts +0 -142
  743. package/dist/core/StreamingToolExecutor.d.ts.map +0 -1
  744. package/dist/core/StreamingToolExecutor.js +0 -483
  745. package/dist/core/StreamingToolExecutor.js.map +0 -1
  746. package/dist/core/ToolLoopExecutor.d.ts +0 -133
  747. package/dist/core/ToolLoopExecutor.d.ts.map +0 -1
  748. package/dist/core/ToolLoopExecutor.js +0 -564
  749. package/dist/core/ToolLoopExecutor.js.map +0 -1
  750. package/dist/core/ToolManager.d.ts +0 -250
  751. package/dist/core/ToolManager.d.ts.map +0 -1
  752. package/dist/core/ToolManager.js +0 -1098
  753. package/dist/core/ToolManager.js.map +0 -1
  754. package/dist/core/createAgent.d.ts +0 -35
  755. package/dist/core/createAgent.d.ts.map +0 -1
  756. package/dist/core/createAgent.js +0 -36
  757. package/dist/core/createAgent.js.map +0 -1
  758. package/dist/core/flow-namespace.d.ts +0 -64
  759. package/dist/core/flow-namespace.d.ts.map +0 -1
  760. package/dist/core/flow-namespace.js +0 -179
  761. package/dist/core/flow-namespace.js.map +0 -1
  762. package/dist/core/toolGates.d.ts +0 -24
  763. package/dist/core/toolGates.d.ts.map +0 -1
  764. package/dist/core/toolGates.js +0 -49
  765. package/dist/core/toolGates.js.map +0 -1
  766. package/dist/types/persistence.d.ts +0 -254
  767. package/dist/types/persistence.d.ts.map +0 -1
  768. package/dist/types/persistence.js +0 -6
  769. package/dist/types/persistence.js.map +0 -1
  770. package/dist/types/prompt-cache.d.ts +0 -15
  771. package/dist/types/prompt-cache.d.ts.map +0 -1
  772. package/dist/types/prompt-cache.js +0 -5
  773. package/dist/types/prompt-cache.js.map +0 -1
  774. package/dist/types/signals.d.ts +0 -263
  775. package/dist/types/signals.d.ts.map +0 -1
  776. package/dist/types/signals.js +0 -10
  777. package/dist/types/signals.js.map +0 -1
  778. package/dist/types/template.d.ts +0 -84
  779. package/dist/types/template.d.ts.map +0 -1
  780. package/dist/types/template.js +0 -2
  781. package/dist/types/template.js.map +0 -1
  782. package/dist/utils/condition.d.ts +0 -63
  783. package/dist/utils/condition.d.ts.map +0 -1
  784. package/dist/utils/condition.js +0 -230
  785. package/dist/utils/condition.js.map +0 -1
  786. package/dist/utils/event.d.ts +0 -6
  787. package/dist/utils/event.d.ts.map +0 -1
  788. package/dist/utils/event.js +0 -17
  789. package/dist/utils/event.js.map +0 -1
  790. package/dist/utils/id.d.ts +0 -33
  791. package/dist/utils/id.d.ts.map +0 -1
  792. package/dist/utils/id.js +0 -77
  793. package/dist/utils/id.js.map +0 -1
  794. package/dist/utils/serialize.d.ts +0 -36
  795. package/dist/utils/serialize.d.ts.map +0 -1
  796. package/dist/utils/serialize.js +0 -72
  797. package/dist/utils/serialize.js.map +0 -1
  798. package/dist/utils/session.d.ts +0 -124
  799. package/dist/utils/session.d.ts.map +0 -1
  800. package/dist/utils/session.js +0 -379
  801. package/dist/utils/session.js.map +0 -1
  802. package/docs/concepts/directives.md +0 -369
  803. package/docs/reference/adapters.md +0 -543
  804. package/docs/reference/create-agent.md +0 -216
  805. package/docs/reference/directive.md +0 -242
  806. package/docs/reference/signals.md +0 -368
  807. package/examples/02-data-extraction.ts +0 -90
  808. package/examples/05-branching.ts +0 -140
  809. package/examples/06-flow-control.ts +0 -103
  810. package/examples/08-persistence.ts +0 -98
  811. package/examples/09-signals.ts +0 -144
  812. package/src/adapters/MemoryAdapter.ts +0 -281
  813. package/src/adapters/MongoAdapter.ts +0 -341
  814. package/src/adapters/OpenSearchAdapter.ts +0 -693
  815. package/src/adapters/PostgreSQLAdapter.ts +0 -487
  816. package/src/adapters/PrismaAdapter.ts +0 -617
  817. package/src/adapters/RedisAdapter.ts +0 -439
  818. package/src/adapters/SQLiteAdapter.ts +0 -496
  819. package/src/adapters/index.ts +0 -43
  820. package/src/adapters/sessionRow.ts +0 -57
  821. package/src/constants/index.ts +0 -2
  822. package/src/core/AutoChainExecutor.ts +0 -397
  823. package/src/core/BranchEvaluator.ts +0 -161
  824. package/src/core/DirectiveChainTracker.ts +0 -144
  825. package/src/core/Events.ts +0 -164
  826. package/src/core/Flow.ts +0 -665
  827. package/src/core/FlowRouter.ts +0 -1540
  828. package/src/core/PersistenceManager.ts +0 -446
  829. package/src/core/PromptComposer.ts +0 -448
  830. package/src/core/PromptSectionCache.ts +0 -125
  831. package/src/core/ResponseEngine.ts +0 -338
  832. package/src/core/ResponseGenerationError.ts +0 -53
  833. package/src/core/ResponseModal.ts +0 -1902
  834. package/src/core/ResponsePipeline.ts +0 -1404
  835. package/src/core/SessionFinalizer.ts +0 -108
  836. package/src/core/SessionManager.ts +0 -372
  837. package/src/core/SignalCoordinator.ts +0 -263
  838. package/src/core/SignalEvaluator.ts +0 -404
  839. package/src/core/SignalProcessor.ts +0 -663
  840. package/src/core/Step.ts +0 -782
  841. package/src/core/StepLifecycle.ts +0 -242
  842. package/src/core/StreamingToolExecutor.ts +0 -609
  843. package/src/core/ToolLoopExecutor.ts +0 -749
  844. package/src/core/ToolManager.ts +0 -1379
  845. package/src/core/createAgent.ts +0 -40
  846. package/src/core/flow-namespace.ts +0 -227
  847. package/src/core/toolGates.ts +0 -72
  848. package/src/types/persistence.ts +0 -303
  849. package/src/types/prompt-cache.ts +0 -17
  850. package/src/types/signals.ts +0 -338
  851. package/src/types/template.ts +0 -98
  852. package/src/utils/condition.ts +0 -296
  853. package/src/utils/event.ts +0 -16
  854. package/src/utils/id.ts +0 -91
  855. package/src/utils/serialize.ts +0 -86
  856. 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,
@@ -99,11 +101,16 @@ export interface RequestConfig {
99
101
  maxTokens?: number;
100
102
  stopSequences?: string[];
101
103
  /**
102
- * How hard the model thinks, bound as this provider's default. Absent means
103
- * the model's own dynamic thinking, which is what every shape does when the
104
- * field is never sent — so `"none"` is the only way to say *don't*, and it
105
- * matters most under a small `maxTokens`, where thinking tokens come out of
106
- * the same budget as the answer and can consume all of it.
104
+ * How hard the model thinks, bound as this provider's default. What absent
105
+ * means is the shape's own business, not one rule: on Gemini it is the
106
+ * model's dynamic thinking; on the OpenAI and OpenRouter dialects nothing is
107
+ * sent and not thinking is the default anyway; on the Anthropic shape — so
108
+ * `AnthropicProvider` and `ZaiProvider` — `@providerkit/core` resolves an
109
+ * absent effort to `"none"`, and Z.ai is sent an explicit disabled marker
110
+ * because its endpoint reads silence as thinking ON. Set a level to ask for
111
+ * thinking where it is off; it matters most under a small `maxTokens`, where
112
+ * thinking tokens come out of the same budget as the answer and can consume
113
+ * all of it.
107
114
  */
108
115
  effort?: Effort;
109
116
  }
@@ -145,8 +152,13 @@ function shouldTryBackup(error: unknown): boolean {
145
152
  }
146
153
 
147
154
  /** History plus the composed prompt, as the seam's messages. */
148
- export function toMessages(history: HistoryItem[], prompt: string): ChatMessage[] {
155
+ export function toMessages(history: HistoryItem[], prompt: string, system?: string): ChatMessage[] {
149
156
  const out: ChatMessage[] = [];
157
+ // First, and before any history: a cached prefix is only a prefix if nothing
158
+ // precedes it. Anthropic-shape hoists every system item into one top-level
159
+ // block, so a host that also puts system items in its history joins them to
160
+ // this one — fine while those are stable, and the host's to keep stable.
161
+ if (system?.trim()) out.push({ role: "system", content: system });
150
162
  for (const item of history) {
151
163
  switch (item.role) {
152
164
  case "system":
@@ -159,6 +171,11 @@ export function toMessages(history: HistoryItem[], prompt: string): ChatMessage[
159
171
  out.push({
160
172
  role: "assistant",
161
173
  content: item.content ?? "",
174
+ // Anthropic-shape drops these on purpose (its thinking blocks are
175
+ // signed); OpenAI-shape replays them, which is what DeepSeek and the
176
+ // GLM endpoints require on a turn that called a tool.
177
+ ...(item.reasoning ? { reasoning: item.reasoning } : {}),
178
+ ...(item.reasoningDetails?.length ? { reasoningDetails: item.reasoningDetails } : {}),
162
179
  ...(item.tool_calls?.length
163
180
  ? {
164
181
  toolCalls: item.tool_calls.map((call) => ({
@@ -212,6 +229,8 @@ function toJsonOutput(input: GenerateMessageInput<unknown>): StreamOptions["json
212
229
  interface Accumulator {
213
230
  text: string;
214
231
  model: string;
232
+ reasoning: string;
233
+ reasoningDetails?: unknown[];
215
234
  finishReason?: string;
216
235
  promptTokens?: number;
217
236
  completionTokens?: number;
@@ -229,6 +248,8 @@ function fold(acc: Accumulator, chunk: ProviderChunk): string {
229
248
  acc.cachedInputTokens = chunk.usage.cachedInputTokens;
230
249
  }
231
250
  if (chunk.finishReason) acc.finishReason = chunk.finishReason;
251
+ if (chunk.reasoning) acc.reasoning += chunk.reasoning;
252
+ if (chunk.reasoningDetails?.length) acc.reasoningDetails = chunk.reasoningDetails;
232
253
  for (const call of chunk.toolCalls ?? []) {
233
254
  const entry = acc.calls.get(call.index) ?? { name: "", arguments: "" };
234
255
  if (call.name) entry.name = call.name;
@@ -246,11 +267,18 @@ function toolCallsOf(acc: Accumulator, label: string): ToolCallList {
246
267
  const out: ToolCallList = [];
247
268
  for (const [, entry] of [...acc.calls.entries()].sort(([a], [b]) => a - b)) {
248
269
  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);
270
+ // Arguments arrive in fragments and the last one can be cut: a stream that
271
+ // ended early, a model at its `max_tokens`, a gateway that double-escaped.
272
+ // `JSON.parse` on that string throws, and the tool then ran with NOTHING —
273
+ // a lookup with no id, a send with no recipient, behind one warn line.
274
+ // `parseToolArgs` recovers what the model did send, closing an open string
275
+ // rather than dropping it — so a cut value arrives short instead of absent,
276
+ // and the tool's own `validateInput` decides whether that is enough.
277
+ const args = entry.arguments ? parseToolArgs(entry.arguments) : {};
278
+ if (entry.arguments && !isCompleteJson(entry.arguments)) {
279
+ logger.warn(
280
+ `[${label}] ${entry.name}: arguments were cut mid-stream; kept ${Object.keys(args).length} field(s).`,
281
+ );
254
282
  }
255
283
  out.push({ toolName: entry.name, arguments: args });
256
284
  }
@@ -333,10 +361,10 @@ export abstract class ProviderAdapter implements AiProvider {
333
361
  async *generateMessageStream<TContext = unknown, TStructured = AgentStructuredResponse>(
334
362
  input: GenerateMessageInput<TContext>,
335
363
  ): AsyncGenerator<GenerateMessageStreamChunk<TStructured>> {
336
- const messages = toMessages(input.history, input.prompt);
364
+ const messages = toMessages(input.history, input.prompt, input.system);
337
365
  const tools = toTools(input.tools);
338
366
  const json = toJsonOutput(input);
339
- const acc: Accumulator = { text: "", model: this.primaryModel, calls: new Map() };
367
+ const acc: Accumulator = { text: "", model: this.primaryModel, reasoning: "", calls: new Map() };
340
368
 
341
369
  const opts: StreamOptions = {
342
370
  ...this.defaults,
@@ -409,10 +437,15 @@ export abstract class ProviderAdapter implements AiProvider {
409
437
  const text = json && !structured && isJSONShaped(acc.text) ? "" : acc.text;
410
438
 
411
439
  if (toolCalls.length > 0) {
440
+ // The reasoning rides out with the tool calls it produced. A thinking
441
+ // provider rejects the next round when the assistant turn that called the
442
+ // tool comes back without it, so the caller has to be able to replay it.
412
443
  structured = {
413
444
  ...(structured ?? {}),
414
445
  message: (structured as AgentStructuredResponse | undefined)?.message || text,
415
446
  toolCalls,
447
+ ...(acc.reasoning ? { reasoning: acc.reasoning } : {}),
448
+ ...(acc.reasoningDetails ? { reasoningDetails: acc.reasoningDetails } : {}),
416
449
  } as TStructured;
417
450
  }
418
451
 
@@ -6,10 +6,12 @@
6
6
  * `@providerkit/core` (adapter + preset); this file is the constructor, the
7
7
  * family default for cheap high-volume work.
8
8
  *
9
- * Dialect notes (measured 2026-09-13, see the core preset for detail):
10
- * model ids are BARE (`glm-5.3-flash`, not `z-ai/glm-5.3-flash`), and
11
- * "no thinking" must be an explicit marker — silence means the model default,
12
- * which is thinking ON.
9
+ * Dialect notes (see the core preset for detail): model ids are BARE
10
+ * (`glm-5.3-flash`, not `z-ai/glm-5.3-flash`), and the endpoint reads an
11
+ * absent `thinking` field as thinking ON, so the preset says "no" out loud.
12
+ * That makes thinking OFF here by default (measured 2026-09-21: a call with no
13
+ * `config.effort` sends `thinking: { type: "disabled" }`); ask for it with
14
+ * `config: { effort: 'high' }`.
13
15
  */
14
16
 
15
17
  import { createZaiCodingProvider, type FallbackOptions, type Provider } from "@providerkit/core";