@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
package/src/index.ts CHANGED
@@ -5,22 +5,42 @@
5
5
  */
6
6
 
7
7
  // Core
8
+ export { falai } from "./core/falai.js";
9
+ export type { DataOf, Falai, FalaiRoot } from "./core/falai.js";
8
10
  export { Agent } from "./core/Agent.js";
9
- export type { RespondParams, StreamOptions, GenerateOptions } from "./core/ResponseModal.js";
10
- export { ResponseGenerationError } from "./core/ResponseGenerationError.js";
11
- export type { EndedFlow } from "./types/agent.js";
12
- export { createAgent } from "./core/createAgent.js";
13
- export { Flow } from "./core/Flow.js";
14
- export { Step, FlowConfigurationError } from "./core/Step.js";
15
- export { flow } from "./core/flow-namespace.js";
16
-
17
- export { adaptEvent, convertHistoryToEvents } from "./core/Events.js";
18
- export { PersistenceManager } from "./core/PersistenceManager.js";
19
- export { SessionManager } from "./core/SessionManager.js";
20
- export { ToolManager, ToolCreationError, ToolExecutionError } from "./core/ToolManager.js";
21
- export { NotImplementedError, SessionConflictError, ProviderError } from "./types/errors.js";
11
+ export {
12
+ FlowConfigurationError,
13
+ ProviderError,
14
+ SessionConflictError,
15
+ } from "./types/errors.js";
22
16
  export type { ErrorKind } from "./types/errors.js";
23
17
 
18
+ // Stored flows as JSON
19
+ export { flowSpecSchema, fromSpec, toSpec, validateFlow } from "./core/FlowSpec.js";
20
+ export type { BranchSpec, FlowSpec, InstructionSpec, Registries, StepKind, StepSpec, TriggerSpec } from "./core/FlowSpec.js";
21
+
22
+ // Time: a clock you control and an in-memory scheduler (tests, playground)
23
+ export { fakeClock, MemoryScheduler } from "./utils/clock.js";
24
+ export type { FakeClock } from "./utils/clock.js";
25
+ export { assertDuration, isDuration, parseDuration } from "./utils/duration.js";
26
+ export { OUTCOME_MESSAGES } from "./utils/outcomes.js";
27
+
28
+ // Sessions: reading stored blobs and the seven stores
29
+ export { assertSession, InvalidSessionError, migrateSession } from "./core/Migrate.js";
30
+ export type { MigrateOptions } from "./core/Migrate.js";
31
+ export { MemoryStore } from "./persistence/MemoryStore.js";
32
+ export { PostgresStore } from "./persistence/PostgresStore.js";
33
+ export type { PgClient, PgQueryResult, PostgresStoreOptions } from "./persistence/PostgresStore.js";
34
+ export { PrismaStore } from "./persistence/PrismaStore.js";
35
+ export type { PrismaClient, PrismaSessionField, PrismaSessionModel, PrismaStoreOptions } from "./persistence/PrismaStore.js";
36
+ export { RedisStore } from "./persistence/RedisStore.js";
37
+ export type { RedisClient, RedisStoreOptions } from "./persistence/RedisStore.js";
38
+ export { MongoStore } from "./persistence/MongoStore.js";
39
+ export type { MongoClient, MongoCollection, MongoDatabase, MongoStoreOptions } from "./persistence/MongoStore.js";
40
+ export { SQLiteStore } from "./persistence/SQLiteStore.js";
41
+ export type { SqliteDatabase, SqliteStatement, SQLiteStoreOptions } from "./persistence/SQLiteStore.js";
42
+ export { OpenSearchStore } from "./persistence/OpenSearchStore.js";
43
+ export type { OpenSearchClient, OpenSearchStoreOptions } from "./persistence/OpenSearchStore.js";
24
44
 
25
45
  // Providers
26
46
  export { GeminiProvider } from "./providers/GeminiProvider.js";
@@ -58,156 +78,108 @@ export type {
58
78
  RetryConfig,
59
79
  } from "./providers/ProviderAdapter.js";
60
80
 
61
- // Adapters
62
- export { PrismaAdapter } from "./adapters/PrismaAdapter.js";
63
- export type {
64
- PrismaClient,
65
- FieldMappings,
66
- PrismaAdapterOptions,
67
- } from "./adapters/PrismaAdapter.js";
68
- export { RedisAdapter } from "./adapters/RedisAdapter.js";
69
- export type { RedisClient, RedisAdapterOptions } from "./adapters/RedisAdapter.js";
70
- export { MongoAdapter } from "./adapters/MongoAdapter.js";
71
- export type {
72
- MongoClient,
73
- MongoDatabase,
74
- MongoCollection,
75
- MongoAdapterOptions,
76
- } from "./adapters/MongoAdapter.js";
77
- export { PostgreSQLAdapter } from "./adapters/PostgreSQLAdapter.js";
78
- export type {
79
- PgClient,
80
- PgQueryResult,
81
- PostgreSQLAdapterOptions,
82
- } from "./adapters/PostgreSQLAdapter.js";
83
- export { SQLiteAdapter } from "./adapters/SQLiteAdapter.js";
84
- export type {
85
- SqliteDatabase,
86
- SqliteStatement,
87
- SQLiteAdapterOptions,
88
- } from "./adapters/SQLiteAdapter.js";
89
- export { MemoryAdapter } from "./adapters/MemoryAdapter.js";
90
- export { OpenSearchAdapter } from "./adapters/OpenSearchAdapter.js";
91
- export type {
92
- OpenSearchClient,
93
- OpenSearchAdapterOptions,
94
- } from "./adapters/OpenSearchAdapter.js";
95
-
96
- // Utils
97
- export { generateFlowId, generateStepId, generateToolId } from "./utils/id.js";
98
- export { formatKnowledgeBase } from "./utils/template.js";
99
- export {
100
- ConditionEvaluator,
101
- createConditionEvaluator,
102
- extractAIContextStrings,
103
- hasProgrammaticConditions
104
- } from "./utils/condition.js";
81
+ // History helpers
105
82
  export {
83
+ assistantMessage,
84
+ eventsToHistory,
85
+ eventToHistoryItem,
106
86
  historyItemToEvent,
107
87
  historyToEvents,
108
- eventToHistoryItem,
109
- eventsToHistory,
110
- userMessage,
111
- assistantMessage,
112
- toolMessage,
113
88
  systemMessage,
89
+ toolMessage,
90
+ userMessage,
114
91
  } from "./utils/history.js";
115
92
 
116
93
  // Types
117
94
  export type {
118
- AgentOptions,
95
+ Action,
96
+ ActionCtx,
97
+ ActionMap,
98
+ ActionResult,
119
99
  AgentCompactionConfig,
120
- AgentResponse,
121
- Term,
122
- Instruction,
123
- ScopedInstructions,
124
- AppliedInstruction,
125
- ContextLifecycleHooks,
126
- ContextProvider,
127
- HookContext,
128
- ExitReason,
129
- Event,
130
- EmittedEvent,
131
- MessageEventData,
132
- ToolEventData,
133
- StatusEventData,
134
- Participant,
135
- FlowRef,
136
- StepRef,
137
- FlowOptions,
138
- StepOptions,
139
- FlowLifecycleHooks,
140
- StepLifecycleHooks,
141
- SessionState,
142
- SignalsState,
143
- SignalTriggerState,
144
- Signal,
145
- SignalContext,
146
- SignalDirective,
147
- ResolvedSignalDirective,
148
- SignalPredicate,
149
- SignalPredicateContext,
150
- SignalFiring,
151
- SignalSchema,
152
- ToolContext,
153
- ToolResult,
154
- ToolHandler,
155
- Tool,
156
-
157
- ToolValidationResult,
158
- ToolPermissionResult,
159
- ToolCallRequest,
160
- ToolExecutionUpdate,
161
-
100
+ AgentOptions,
101
+ AgentStructuredResponse,
102
+ AiProvider,
103
+ AssistantHistoryItem,
104
+ Branch,
105
+ BusinessHours,
106
+ Clock,
162
107
  CompactionOptions,
163
108
  CompactionResult,
164
-
165
- DataEnrichmentConfig,
166
- ValidationConfig,
167
- ValidationError,
168
- ApiCallConfig,
169
- ComputationConfig,
170
- ToolScope,
171
- AiProvider,
172
- ProviderCapabilities,
109
+ Condition,
110
+ ConditionMap,
111
+ ConditionSpec,
112
+ DoStep,
113
+ Duration,
114
+ EmittedEvent,
115
+ EndReason,
116
+ Event,
117
+ EventDef,
118
+ EventMap,
119
+ EventToolResult,
120
+ FieldDef,
121
+ FieldDefs,
122
+ Flow,
173
123
  GenerateMessageInput,
174
124
  GenerateMessageOutput,
175
- AgentStructuredResponse,
125
+ TokenUsage,
126
+ GenerateMessageStreamChunk,
127
+ History,
128
+ HistoryItem,
129
+ Idle,
130
+ IfStep,
131
+ InferData,
132
+ InferParams,
133
+ Instruction,
134
+ MessageEventData,
135
+ Next,
136
+ OutboundMessage,
137
+ ParamDef,
138
+ ParamDefs,
139
+ Participant,
140
+ Pred,
141
+ PredCtx,
142
+ ProviderCapabilities,
176
143
  ReasoningConfig,
177
- StructuredSchema,
178
- SessionData,
179
- MessageData,
180
- CollectedStateData,
181
- SessionStatus,
182
- SessionRepository,
183
- SessionUpdateOptions,
184
- MessageRepository,
185
- PersistenceConfig,
186
- CreateSessionOptions,
187
- SaveMessageOptions,
188
- AgentResponseStreamChunk,
144
+ Repeat,
189
145
  Role,
190
- HistoryItem,
191
- History,
192
- PersistenceAdapter,
146
+ Run,
147
+ RunStatus,
148
+ SayStep,
149
+ ScalarDef,
150
+ ScalarType,
151
+ ScheduleEntry,
152
+ Session,
153
+ Silenced,
154
+ StatusEventData,
155
+ Step,
156
+ StepBase,
157
+ StepOutcome,
158
+ StepOutcomeCode,
159
+ StepOutcomeKind,
160
+ StepOutcomeStatus,
161
+ Store,
162
+ StructuredSchema,
163
+ SystemHistoryItem,
164
+ TalkStep,
193
165
  Template,
194
- TemplateContext,
195
- ConditionEvaluationResult,
196
- UserHistoryItem,
197
- AssistantHistoryItem,
166
+ Tool,
167
+ ToolCall,
168
+ ToolCtx,
169
+ ToolEventData,
198
170
  ToolHistoryItem,
199
- SystemHistoryItem,
200
- // Flow execution types
201
- StoppedReason,
202
- PrepareResult,
203
- Directive,
204
- BranchEntry,
205
- BranchMap,
206
- BranchPredicate,
207
- BranchPredicateContext,
208
- ConditionPredicate,
209
- ConditionIf,
210
- ConditionWhen,
171
+ ToolPermissionResult,
172
+ ToolResult,
173
+ ToolValidationResult,
174
+ Trigger,
175
+ TriggerKind,
176
+ TurnBase,
177
+ TurnInput,
178
+ TurnKind,
179
+ TurnResult,
180
+ TurnStreamChunk,
181
+ UserHistoryItem,
182
+ WaitEventStep,
183
+ WaitStep,
211
184
  } from "./types/index.js";
212
185
  export { EventKind, MessageRole } from "./types/index.js";
213
- export { restoreSession, createSession, createSessionId, createPersistedState, enterFlow, enterStep, completeCurrentFlow, isFlowCompletedThisSession, mergeCollected } from "./utils/index.js";
@@ -0,0 +1,37 @@
1
+ /**
2
+ * In-memory Store: tests, the playground, prototypes. Nothing survives the
3
+ * process. Rows are kept as JSON text and read back through the same check
4
+ * every other store runs, so a session round-trips here exactly as it would
5
+ * through PostgreSQL or Redis: Dates come back as text, `undefined` drops.
6
+ */
7
+
8
+ import { SessionConflictError } from "../types/errors.js";
9
+ import type { Session, Store } from "../types/session.js";
10
+ import { asPromise, readBlob, toBlob } from "./sessionRow.js";
11
+
12
+ export class MemoryStore<D = unknown> implements Store<D> {
13
+ private readonly rows = new Map<string, { version: number; blob: string }>();
14
+
15
+ load(id: string): Promise<Session<D> | null> {
16
+ return asPromise(() => {
17
+ const row = this.rows.get(id);
18
+ return row ? readBlob<D>(row.blob, id) : null;
19
+ });
20
+ }
21
+
22
+ save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
23
+ return asPromise(() => {
24
+ const current = this.rows.get(session.id);
25
+ const conflict = expectedVersion === 0 ? current !== undefined : current?.version !== expectedVersion;
26
+ if (conflict) throw new SessionConflictError(session.id, expectedVersion, current?.version);
27
+ const blob = toBlob(session, expectedVersion + 1);
28
+ this.rows.set(session.id, { version: blob.version, blob: JSON.stringify(blob) });
29
+ return blob;
30
+ });
31
+ }
32
+
33
+ /** Drop every session. */
34
+ clear(): void {
35
+ this.rows.clear();
36
+ }
37
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * MongoDB Store over the official driver's client.
3
+ *
4
+ * One document per session: `_id` (the session id), `version`, `blob`,
5
+ * `createdAt`, `updatedAt`. A first save is `insertOne`, and the duplicate
6
+ * key error is the conflict; later saves are `updateOne` filtered on
7
+ * `{ _id, version }`, and `matchedCount === 0` is the conflict.
8
+ */
9
+
10
+ import { isRecord } from "../utils/json.js";
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 the mongodb driver's Collection. */
16
+ export interface MongoCollection<T = Record<string, unknown>> {
17
+ insertOne(doc: T): Promise<unknown>;
18
+ findOne(filter: Record<string, unknown>): Promise<T | null>;
19
+ updateOne(filter: Record<string, unknown>, update: Record<string, unknown>): Promise<{ matchedCount: number }>;
20
+ }
21
+
22
+ export interface MongoDatabase {
23
+ collection<T = Record<string, unknown>>(name: string): MongoCollection<T>;
24
+ }
25
+
26
+ export interface MongoClient {
27
+ db(name?: string): MongoDatabase;
28
+ close(): Promise<void>;
29
+ }
30
+
31
+ export interface MongoStoreOptions {
32
+ client: MongoClient;
33
+ databaseName: string;
34
+ /** Collection name. Default `agent_sessions`. */
35
+ collections?: { sessions?: string };
36
+ }
37
+
38
+ export class MongoStore<D = unknown> implements Store<D> {
39
+ private readonly client: MongoClient;
40
+ private readonly sessions: MongoCollection;
41
+
42
+ constructor(options: MongoStoreOptions) {
43
+ this.client = options.client;
44
+ this.sessions = options.client.db(options.databaseName).collection(options.collections?.sessions ?? "agent_sessions");
45
+ }
46
+
47
+ async disconnect(): Promise<void> {
48
+ await this.client.close();
49
+ }
50
+
51
+ async load(id: string): Promise<Session<D> | null> {
52
+ const doc = await this.sessions.findOne({ _id: id });
53
+ return doc ? readBlob<D>(doc.blob, id) : null;
54
+ }
55
+
56
+ async save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
57
+ const next = expectedVersion + 1;
58
+ const blob = toBlob(session, next);
59
+ // ponytail: the blob is stored as JSON text, not a sub-document, because
60
+ // claim keys carry channel message ids and those may contain dots, which
61
+ // older servers reject in field names. Upgrade: a sub-document once keys
62
+ // are escaped, for queries on runs and claims.
63
+ const json = JSON.stringify(blob);
64
+ const now = new Date();
65
+ if (expectedVersion === 0) {
66
+ try {
67
+ await this.sessions.insertOne({ _id: session.id, version: next, blob: json, createdAt: now, updatedAt: now });
68
+ } catch (error) {
69
+ if (!isDuplicateKey(error)) throw error;
70
+ throw new SessionConflictError(session.id, 0, await this.storedVersion(session.id));
71
+ }
72
+ return blob;
73
+ }
74
+ const { matchedCount } = await this.sessions.updateOne(
75
+ { _id: session.id, version: expectedVersion },
76
+ { $set: { version: next, blob: json, updatedAt: now } },
77
+ );
78
+ if (matchedCount === 0) throw new SessionConflictError(session.id, expectedVersion, await this.storedVersion(session.id));
79
+ return blob;
80
+ }
81
+
82
+ private async storedVersion(id: string): Promise<number | undefined> {
83
+ const doc = await this.sessions.findOne({ _id: id });
84
+ return typeof doc?.version === "number" ? doc.version : undefined;
85
+ }
86
+ }
87
+
88
+ /** The driver's `MongoServerError` for a unique index hit. */
89
+ const isDuplicateKey = (error: unknown): boolean => isRecord(error) && error.code === 11000;
@@ -0,0 +1,153 @@
1
+ /**
2
+ * OpenSearch Store over the official client (Elasticsearch 7.x fits too).
3
+ *
4
+ * One document per session: `id`, `version`, `blob` (stored, not indexed),
5
+ * `createdAt`, `updatedAt`. A first save is an `index` with `op_type:
6
+ * 'create'`, and the 409 is the conflict; later saves are a scripted
7
+ * `update` that compares `version` and becomes a `noop` when it differs,
8
+ * so the check and the write happen together on the shard (3.x read, then
9
+ * wrote).
10
+ */
11
+
12
+ import { SessionConflictError } from "../types/errors.js";
13
+ import type { Session, Store } from "../types/session.js";
14
+ import { readBlob, toBlob } from "./sessionRow.js";
15
+
16
+ type Refresh = boolean | "wait_for";
17
+
18
+ /** Matches `@opensearch-project/opensearch`'s Client. */
19
+ export interface OpenSearchClient {
20
+ index(params: {
21
+ index: string;
22
+ id: string;
23
+ body: Record<string, unknown>;
24
+ op_type?: "index" | "create";
25
+ refresh?: Refresh;
26
+ }): Promise<{ body: { result: string } }>;
27
+ update(params: {
28
+ index: string;
29
+ id: string;
30
+ body: Record<string, unknown>;
31
+ retry_on_conflict?: number;
32
+ refresh?: Refresh;
33
+ }): Promise<{ body: { result: string } }>;
34
+ get(params: { index: string; id: string }): Promise<{ body: { _source: Record<string, unknown> } }>;
35
+ indices: {
36
+ exists(params: { index: string }): Promise<{ body: boolean }>;
37
+ create(params: { index: string; body: { mappings?: Record<string, unknown> } }): Promise<{ body: { acknowledged: boolean } }>;
38
+ };
39
+ }
40
+
41
+ export interface OpenSearchStoreOptions {
42
+ /** Index name. Default `agent_sessions`. */
43
+ indices?: { sessions?: string };
44
+ /** Create the index with its mappings on `initialize()`. Default true. */
45
+ autoCreateIndices?: boolean;
46
+ /** Refresh policy on writes: `true` at once, `false` in the background, `'wait_for'` blocks. Default false. */
47
+ refresh?: Refresh;
48
+ }
49
+
50
+ /** Writes the new version only when the stored one is the expected one; otherwise a noop. */
51
+ const CAS_SCRIPT =
52
+ "if (ctx._source.version != params.expected) { ctx.op = 'noop' } " +
53
+ "else { ctx._source.version = params.version; ctx._source.blob = params.blob; ctx._source.updatedAt = params.updatedAt }";
54
+
55
+ export class OpenSearchStore<D = unknown> implements Store<D> {
56
+ private readonly client: OpenSearchClient;
57
+ private readonly index: string;
58
+ private readonly autoCreateIndices: boolean;
59
+ private readonly refresh: Refresh;
60
+
61
+ constructor(client: OpenSearchClient, options: OpenSearchStoreOptions = {}) {
62
+ this.client = client;
63
+ this.index = options.indices?.sessions ?? "agent_sessions";
64
+ this.autoCreateIndices = options.autoCreateIndices ?? true;
65
+ this.refresh = options.refresh ?? false;
66
+ }
67
+
68
+ /** Create the index with its mappings when it is missing and `autoCreateIndices` is on. */
69
+ async initialize(): Promise<void> {
70
+ if (!this.autoCreateIndices) return;
71
+ const exists = await this.client.indices.exists({ index: this.index });
72
+ if (exists.body) return;
73
+ await this.client.indices.create({
74
+ index: this.index,
75
+ body: {
76
+ mappings: {
77
+ properties: {
78
+ id: { type: "keyword" },
79
+ version: { type: "integer" },
80
+ blob: { type: "object", enabled: false },
81
+ createdAt: { type: "date" },
82
+ updatedAt: { type: "date" },
83
+ },
84
+ },
85
+ },
86
+ });
87
+ }
88
+
89
+ async load(id: string): Promise<Session<D> | null> {
90
+ try {
91
+ const response = await this.client.get({ index: this.index, id });
92
+ return readBlob<D>(response.body._source.blob, id);
93
+ } catch (error) {
94
+ if (statusCodeOf(error) === 404) return null;
95
+ throw error;
96
+ }
97
+ }
98
+
99
+ async save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
100
+ const next = expectedVersion + 1;
101
+ const blob = toBlob(session, next);
102
+ const now = new Date().toISOString();
103
+ if (expectedVersion === 0) {
104
+ try {
105
+ await this.client.index({
106
+ index: this.index,
107
+ id: session.id,
108
+ op_type: "create",
109
+ body: { id: session.id, version: next, blob, createdAt: now, updatedAt: now },
110
+ refresh: this.refresh,
111
+ });
112
+ } catch (error) {
113
+ if (statusCodeOf(error) !== 409) throw error;
114
+ throw new SessionConflictError(session.id, 0, await this.storedVersion(session.id));
115
+ }
116
+ return blob;
117
+ }
118
+ try {
119
+ const response = await this.client.update({
120
+ index: this.index,
121
+ id: session.id,
122
+ retry_on_conflict: 3,
123
+ refresh: this.refresh,
124
+ body: {
125
+ script: { lang: "painless", source: CAS_SCRIPT, params: { expected: expectedVersion, version: next, blob, updatedAt: now } },
126
+ },
127
+ });
128
+ if (response.body.result !== "noop") return blob;
129
+ } catch (error) {
130
+ const status = statusCodeOf(error);
131
+ if (status !== 404 && status !== 409) throw error;
132
+ }
133
+ throw new SessionConflictError(session.id, expectedVersion, await this.storedVersion(session.id));
134
+ }
135
+
136
+ private async storedVersion(id: string): Promise<number | undefined> {
137
+ try {
138
+ const response = await this.client.get({ index: this.index, id });
139
+ const version = response.body._source.version;
140
+ return typeof version === "number" ? version : undefined;
141
+ } catch (error) {
142
+ if (statusCodeOf(error) === 404) return undefined;
143
+ throw error;
144
+ }
145
+ }
146
+ }
147
+
148
+ /** The client's `ResponseError` carries the HTTP status as `statusCode`. */
149
+ function statusCodeOf(error: unknown): number | undefined {
150
+ return typeof error === "object" && error !== null && "statusCode" in error && typeof error.statusCode === "number"
151
+ ? error.statusCode
152
+ : undefined;
153
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * PostgreSQL Store over a `pg` client or pool.
3
+ *
4
+ * One row per session: `id`, `version`, `blob` (the v4 session as JSONB),
5
+ * `created_at`, `updated_at`. The compare-and-swap is the statement itself:
6
+ * `INSERT … ON CONFLICT DO NOTHING` for a first save, `UPDATE … WHERE
7
+ * version = $n` after; no row back 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 { readBlob, toBlob } from "./sessionRow.js";
17
+
18
+ export interface PgQueryResult<T = Record<string, unknown>> {
19
+ rows: T[];
20
+ rowCount?: number | null;
21
+ }
22
+
23
+ /** Matches `pg`'s Client and Pool. */
24
+ export interface PgClient {
25
+ query<T = Record<string, unknown>>(sql: string, values?: unknown[]): Promise<PgQueryResult<T>>;
26
+ end(): Promise<void>;
27
+ }
28
+
29
+ export interface PostgresStoreOptions {
30
+ client: PgClient;
31
+ /** Table name. Default `agent_sessions`. */
32
+ tables?: { sessions?: string };
33
+ }
34
+
35
+ export class PostgresStore<D = unknown> implements Store<D> {
36
+ private readonly client: PgClient;
37
+ private readonly table: string;
38
+
39
+ constructor(options: PostgresStoreOptions) {
40
+ this.client = options.client;
41
+ this.table = options.tables?.sessions ?? "agent_sessions";
42
+ }
43
+
44
+ /** Create the table when it is missing. */
45
+ async initialize(): Promise<void> {
46
+ await this.client.query(
47
+ `CREATE TABLE IF NOT EXISTS ${this.table} (
48
+ id VARCHAR(255) PRIMARY KEY,
49
+ version INTEGER NOT NULL,
50
+ blob JSONB NOT NULL,
51
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
52
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
53
+ )`,
54
+ );
55
+ }
56
+
57
+ async disconnect(): Promise<void> {
58
+ await this.client.end();
59
+ }
60
+
61
+ async load(id: string): Promise<Session<D> | null> {
62
+ const { rows } = await this.client.query(`SELECT blob FROM ${this.table} WHERE id = $1`, [id]);
63
+ return rows.length > 0 ? readBlob<D>(rows[0].blob, id) : null;
64
+ }
65
+
66
+ async save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
67
+ const next = expectedVersion + 1;
68
+ const blob = toBlob(session, next);
69
+ const json = JSON.stringify(blob);
70
+ const { rows } =
71
+ expectedVersion === 0
72
+ ? await this.client.query(
73
+ `INSERT INTO ${this.table} (id, version, blob) VALUES ($1, $2, $3) ON CONFLICT (id) DO NOTHING RETURNING version`,
74
+ [session.id, next, json],
75
+ )
76
+ : await this.client.query(
77
+ `UPDATE ${this.table} SET version = $2, blob = $3, updated_at = NOW() WHERE id = $1 AND version = $4 RETURNING version`,
78
+ [session.id, next, json, expectedVersion],
79
+ );
80
+ if (rows.length === 0) throw new SessionConflictError(session.id, expectedVersion, await this.storedVersion(session.id));
81
+ return blob;
82
+ }
83
+
84
+ private async storedVersion(id: string): Promise<number | undefined> {
85
+ const { rows } = await this.client.query(`SELECT version FROM ${this.table} WHERE id = $1`, [id]);
86
+ const version = rows[0]?.version;
87
+ return typeof version === "number" ? version : undefined;
88
+ }
89
+ }