@falai/agent 3.4.4 → 4.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (847) hide show
  1. package/README.md +41 -34
  2. package/dist/cjs/core/Agent.d.ts +22 -378
  3. package/dist/cjs/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/core/Agent.js +104 -1178
  5. package/dist/cjs/core/Agent.js.map +1 -1
  6. package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
  7. package/dist/cjs/core/CompactionEngine.js +5 -3
  8. package/dist/cjs/core/CompactionEngine.js.map +1 -1
  9. package/dist/cjs/core/FlowSpec.d.ts +136 -0
  10. package/dist/cjs/core/FlowSpec.d.ts.map +1 -0
  11. package/dist/cjs/core/FlowSpec.js +522 -0
  12. package/dist/cjs/core/FlowSpec.js.map +1 -0
  13. package/dist/cjs/core/Migrate.d.ts +38 -0
  14. package/dist/cjs/core/Migrate.d.ts.map +1 -0
  15. package/dist/cjs/core/Migrate.js +270 -0
  16. package/dist/cjs/core/Migrate.js.map +1 -0
  17. package/dist/cjs/core/Prompt.d.ts +54 -0
  18. package/dist/cjs/core/Prompt.d.ts.map +1 -0
  19. package/dist/cjs/core/Prompt.js +143 -0
  20. package/dist/cjs/core/Prompt.js.map +1 -0
  21. package/dist/cjs/core/Runner.d.ts +160 -0
  22. package/dist/cjs/core/Runner.d.ts.map +1 -0
  23. package/dist/cjs/core/Runner.js +1131 -0
  24. package/dist/cjs/core/Runner.js.map +1 -0
  25. package/dist/cjs/core/Speak.d.ts +37 -0
  26. package/dist/cjs/core/Speak.d.ts.map +1 -0
  27. package/dist/cjs/core/Speak.js +364 -0
  28. package/dist/cjs/core/Speak.js.map +1 -0
  29. package/dist/cjs/core/Understand.d.ts +28 -0
  30. package/dist/cjs/core/Understand.d.ts.map +1 -0
  31. package/dist/cjs/core/Understand.js +353 -0
  32. package/dist/cjs/core/Understand.js.map +1 -0
  33. package/dist/cjs/core/contracts.d.ts +122 -0
  34. package/dist/cjs/core/contracts.d.ts.map +1 -0
  35. package/dist/cjs/core/contracts.js +11 -0
  36. package/dist/cjs/core/contracts.js.map +1 -0
  37. package/dist/cjs/core/falai.d.ts +57 -0
  38. package/dist/cjs/core/falai.d.ts.map +1 -0
  39. package/dist/cjs/core/falai.js +43 -0
  40. package/dist/cjs/core/falai.js.map +1 -0
  41. package/dist/cjs/core/predicate.d.ts +9 -0
  42. package/dist/cjs/core/predicate.d.ts.map +1 -0
  43. package/dist/cjs/core/predicate.js +58 -0
  44. package/dist/cjs/core/predicate.js.map +1 -0
  45. package/dist/cjs/index.d.ts +26 -31
  46. package/dist/cjs/index.d.ts.map +1 -1
  47. package/dist/cjs/index.js +46 -68
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/persistence/MemoryStore.d.ts +15 -0
  50. package/dist/cjs/persistence/MemoryStore.d.ts.map +1 -0
  51. package/dist/cjs/persistence/MemoryStore.js +39 -0
  52. package/dist/cjs/persistence/MemoryStore.js.map +1 -0
  53. package/dist/cjs/persistence/MongoStore.d.ts +42 -0
  54. package/dist/cjs/persistence/MongoStore.d.ts.map +1 -0
  55. package/dist/cjs/persistence/MongoStore.js +60 -0
  56. package/dist/cjs/persistence/MongoStore.js.map +1 -0
  57. package/dist/cjs/persistence/OpenSearchStore.d.ts +86 -0
  58. package/dist/cjs/persistence/OpenSearchStore.d.ts.map +1 -0
  59. package/dist/cjs/persistence/OpenSearchStore.js +120 -0
  60. package/dist/cjs/persistence/OpenSearchStore.js.map +1 -0
  61. package/dist/cjs/persistence/PostgresStore.d.ts +41 -0
  62. package/dist/cjs/persistence/PostgresStore.d.ts.map +1 -0
  63. package/dist/cjs/persistence/PostgresStore.js +58 -0
  64. package/dist/cjs/persistence/PostgresStore.js.map +1 -0
  65. package/dist/cjs/persistence/PrismaStore.d.ts +65 -0
  66. package/dist/cjs/persistence/PrismaStore.d.ts.map +1 -0
  67. package/dist/cjs/persistence/PrismaStore.js +95 -0
  68. package/dist/cjs/persistence/PrismaStore.js.map +1 -0
  69. package/dist/cjs/persistence/RedisStore.d.ts +34 -0
  70. package/dist/cjs/persistence/RedisStore.d.ts.map +1 -0
  71. package/dist/cjs/persistence/RedisStore.js +61 -0
  72. package/dist/cjs/persistence/RedisStore.js.map +1 -0
  73. package/dist/cjs/persistence/SQLiteStore.d.ts +45 -0
  74. package/dist/cjs/persistence/SQLiteStore.d.ts.map +1 -0
  75. package/dist/cjs/persistence/SQLiteStore.js +74 -0
  76. package/dist/cjs/persistence/SQLiteStore.js.map +1 -0
  77. package/dist/cjs/persistence/sessionRow.d.ts +14 -0
  78. package/dist/cjs/persistence/sessionRow.d.ts.map +1 -0
  79. package/dist/cjs/persistence/sessionRow.js +50 -0
  80. package/dist/cjs/persistence/sessionRow.js.map +1 -0
  81. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
  82. package/dist/cjs/providers/DeepSeekProvider.js +8 -3
  83. package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
  84. package/dist/cjs/providers/GeminiProvider.d.ts +4 -3
  85. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  86. package/dist/cjs/providers/GeminiProvider.js +4 -3
  87. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  88. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +4 -0
  89. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  90. package/dist/cjs/providers/OpenAICompatibleProvider.js +2 -0
  91. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
  92. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  93. package/dist/cjs/providers/OpenRouterProvider.js +2 -4
  94. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  95. package/dist/cjs/providers/ProviderAdapter.d.ts +1 -1
  96. package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -1
  97. package/dist/cjs/providers/ProviderAdapter.js +33 -10
  98. package/dist/cjs/providers/ProviderAdapter.js.map +1 -1
  99. package/dist/cjs/types/agent.d.ts +153 -383
  100. package/dist/cjs/types/agent.d.ts.map +1 -1
  101. package/dist/cjs/types/agent.js +1 -1
  102. package/dist/cjs/types/ai.d.ts +32 -1
  103. package/dist/cjs/types/ai.d.ts.map +1 -1
  104. package/dist/cjs/types/compaction.d.ts +3 -1
  105. package/dist/cjs/types/compaction.d.ts.map +1 -1
  106. package/dist/cjs/types/errors.d.ts +9 -12
  107. package/dist/cjs/types/errors.d.ts.map +1 -1
  108. package/dist/cjs/types/errors.js +14 -17
  109. package/dist/cjs/types/errors.js.map +1 -1
  110. package/dist/cjs/types/flow.d.ts +265 -513
  111. package/dist/cjs/types/flow.d.ts.map +1 -1
  112. package/dist/cjs/types/flow.js +7 -1
  113. package/dist/cjs/types/flow.js.map +1 -1
  114. package/dist/cjs/types/history.d.ts +7 -18
  115. package/dist/cjs/types/history.d.ts.map +1 -1
  116. package/dist/cjs/types/history.js.map +1 -1
  117. package/dist/cjs/types/index.d.ts +9 -15
  118. package/dist/cjs/types/index.d.ts.map +1 -1
  119. package/dist/cjs/types/index.js +4 -14
  120. package/dist/cjs/types/index.js.map +1 -1
  121. package/dist/cjs/types/session.d.ts +94 -64
  122. package/dist/cjs/types/session.d.ts.map +1 -1
  123. package/dist/cjs/types/session.js +5 -1
  124. package/dist/cjs/types/session.js.map +1 -1
  125. package/dist/cjs/types/tool.d.ts +37 -207
  126. package/dist/cjs/types/tool.d.ts.map +1 -1
  127. package/dist/cjs/types/tool.js +5 -14
  128. package/dist/cjs/types/tool.js.map +1 -1
  129. package/dist/cjs/utils/clock.d.ts +28 -0
  130. package/dist/cjs/utils/clock.d.ts.map +1 -0
  131. package/dist/cjs/utils/clock.js +64 -0
  132. package/dist/cjs/utils/clock.js.map +1 -0
  133. package/dist/cjs/utils/duration.d.ts +11 -0
  134. package/dist/cjs/utils/duration.d.ts.map +1 -0
  135. package/dist/cjs/utils/duration.js +31 -0
  136. package/dist/cjs/utils/duration.js.map +1 -0
  137. package/dist/cjs/utils/history.d.ts +4 -1
  138. package/dist/cjs/utils/history.d.ts.map +1 -1
  139. package/dist/cjs/utils/history.js +2 -2
  140. package/dist/cjs/utils/history.js.map +1 -1
  141. package/dist/cjs/utils/index.d.ts +4 -10
  142. package/dist/cjs/utils/index.d.ts.map +1 -1
  143. package/dist/cjs/utils/index.js +14 -61
  144. package/dist/cjs/utils/index.js.map +1 -1
  145. package/dist/cjs/utils/json.d.ts +2 -0
  146. package/dist/cjs/utils/json.d.ts.map +1 -1
  147. package/dist/cjs/utils/json.js +5 -0
  148. package/dist/cjs/utils/json.js.map +1 -1
  149. package/dist/cjs/utils/outcomes.d.ts +48 -0
  150. package/dist/cjs/utils/outcomes.d.ts.map +1 -0
  151. package/dist/cjs/utils/outcomes.js +51 -0
  152. package/dist/cjs/utils/outcomes.js.map +1 -0
  153. package/dist/cjs/utils/schema.d.ts +50 -0
  154. package/dist/cjs/utils/schema.d.ts.map +1 -0
  155. package/dist/cjs/utils/schema.js +138 -0
  156. package/dist/cjs/utils/schema.js.map +1 -0
  157. package/dist/cjs/utils/streamingMessage.d.ts +3 -2
  158. package/dist/cjs/utils/streamingMessage.d.ts.map +1 -1
  159. package/dist/cjs/utils/streamingMessage.js +38 -4
  160. package/dist/cjs/utils/streamingMessage.js.map +1 -1
  161. package/dist/cjs/utils/template.d.ts +13 -149
  162. package/dist/cjs/utils/template.d.ts.map +1 -1
  163. package/dist/cjs/utils/template.js +31 -363
  164. package/dist/cjs/utils/template.js.map +1 -1
  165. package/dist/cjs/utils/usage.d.ts +19 -0
  166. package/dist/cjs/utils/usage.d.ts.map +1 -0
  167. package/dist/cjs/utils/usage.js +35 -0
  168. package/dist/cjs/utils/usage.js.map +1 -0
  169. package/dist/core/Agent.d.ts +22 -378
  170. package/dist/core/Agent.d.ts.map +1 -1
  171. package/dist/core/Agent.js +107 -1181
  172. package/dist/core/Agent.js.map +1 -1
  173. package/dist/core/CompactionEngine.d.ts.map +1 -1
  174. package/dist/core/CompactionEngine.js +5 -3
  175. package/dist/core/CompactionEngine.js.map +1 -1
  176. package/dist/core/FlowSpec.d.ts +136 -0
  177. package/dist/core/FlowSpec.d.ts.map +1 -0
  178. package/dist/core/FlowSpec.js +516 -0
  179. package/dist/core/FlowSpec.js.map +1 -0
  180. package/dist/core/Migrate.d.ts +38 -0
  181. package/dist/core/Migrate.d.ts.map +1 -0
  182. package/dist/core/Migrate.js +264 -0
  183. package/dist/core/Migrate.js.map +1 -0
  184. package/dist/core/Prompt.d.ts +54 -0
  185. package/dist/core/Prompt.d.ts.map +1 -0
  186. package/dist/core/Prompt.js +133 -0
  187. package/dist/core/Prompt.js.map +1 -0
  188. package/dist/core/Runner.d.ts +160 -0
  189. package/dist/core/Runner.d.ts.map +1 -0
  190. package/dist/core/Runner.js +1127 -0
  191. package/dist/core/Runner.js.map +1 -0
  192. package/dist/core/Speak.d.ts +37 -0
  193. package/dist/core/Speak.d.ts.map +1 -0
  194. package/dist/core/Speak.js +360 -0
  195. package/dist/core/Speak.js.map +1 -0
  196. package/dist/core/Understand.d.ts +28 -0
  197. package/dist/core/Understand.d.ts.map +1 -0
  198. package/dist/core/Understand.js +349 -0
  199. package/dist/core/Understand.js.map +1 -0
  200. package/dist/core/contracts.d.ts +122 -0
  201. package/dist/core/contracts.d.ts.map +1 -0
  202. package/dist/core/contracts.js +10 -0
  203. package/dist/core/contracts.js.map +1 -0
  204. package/dist/core/falai.d.ts +57 -0
  205. package/dist/core/falai.d.ts.map +1 -0
  206. package/dist/core/falai.js +40 -0
  207. package/dist/core/falai.js.map +1 -0
  208. package/dist/core/predicate.d.ts +9 -0
  209. package/dist/core/predicate.d.ts.map +1 -0
  210. package/dist/core/predicate.js +54 -0
  211. package/dist/core/predicate.js.map +1 -0
  212. package/dist/index.d.ts +26 -31
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js +19 -24
  215. package/dist/index.js.map +1 -1
  216. package/dist/persistence/MemoryStore.d.ts +15 -0
  217. package/dist/persistence/MemoryStore.d.ts.map +1 -0
  218. package/dist/persistence/MemoryStore.js +35 -0
  219. package/dist/persistence/MemoryStore.js.map +1 -0
  220. package/dist/persistence/MongoStore.d.ts +42 -0
  221. package/dist/persistence/MongoStore.d.ts.map +1 -0
  222. package/dist/persistence/MongoStore.js +56 -0
  223. package/dist/persistence/MongoStore.js.map +1 -0
  224. package/dist/persistence/OpenSearchStore.d.ts +86 -0
  225. package/dist/persistence/OpenSearchStore.d.ts.map +1 -0
  226. package/dist/persistence/OpenSearchStore.js +116 -0
  227. package/dist/persistence/OpenSearchStore.js.map +1 -0
  228. package/dist/persistence/PostgresStore.d.ts +41 -0
  229. package/dist/persistence/PostgresStore.d.ts.map +1 -0
  230. package/dist/persistence/PostgresStore.js +54 -0
  231. package/dist/persistence/PostgresStore.js.map +1 -0
  232. package/dist/persistence/PrismaStore.d.ts +65 -0
  233. package/dist/persistence/PrismaStore.d.ts.map +1 -0
  234. package/dist/persistence/PrismaStore.js +91 -0
  235. package/dist/persistence/PrismaStore.js.map +1 -0
  236. package/dist/persistence/RedisStore.d.ts +34 -0
  237. package/dist/persistence/RedisStore.d.ts.map +1 -0
  238. package/dist/persistence/RedisStore.js +57 -0
  239. package/dist/persistence/RedisStore.js.map +1 -0
  240. package/dist/persistence/SQLiteStore.d.ts +45 -0
  241. package/dist/persistence/SQLiteStore.d.ts.map +1 -0
  242. package/dist/persistence/SQLiteStore.js +70 -0
  243. package/dist/persistence/SQLiteStore.js.map +1 -0
  244. package/dist/persistence/sessionRow.d.ts +14 -0
  245. package/dist/persistence/sessionRow.d.ts.map +1 -0
  246. package/dist/persistence/sessionRow.js +45 -0
  247. package/dist/persistence/sessionRow.js.map +1 -0
  248. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  249. package/dist/providers/DeepSeekProvider.js +8 -3
  250. package/dist/providers/DeepSeekProvider.js.map +1 -1
  251. package/dist/providers/GeminiProvider.d.ts +4 -3
  252. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  253. package/dist/providers/GeminiProvider.js +4 -3
  254. package/dist/providers/GeminiProvider.js.map +1 -1
  255. package/dist/providers/OpenAICompatibleProvider.d.ts +4 -0
  256. package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  257. package/dist/providers/OpenAICompatibleProvider.js +2 -0
  258. package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
  259. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  260. package/dist/providers/OpenRouterProvider.js +2 -4
  261. package/dist/providers/OpenRouterProvider.js.map +1 -1
  262. package/dist/providers/ProviderAdapter.d.ts +1 -1
  263. package/dist/providers/ProviderAdapter.d.ts.map +1 -1
  264. package/dist/providers/ProviderAdapter.js +34 -11
  265. package/dist/providers/ProviderAdapter.js.map +1 -1
  266. package/dist/types/agent.d.ts +153 -383
  267. package/dist/types/agent.d.ts.map +1 -1
  268. package/dist/types/agent.js +1 -1
  269. package/dist/types/ai.d.ts +32 -1
  270. package/dist/types/ai.d.ts.map +1 -1
  271. package/dist/types/compaction.d.ts +3 -1
  272. package/dist/types/compaction.d.ts.map +1 -1
  273. package/dist/types/errors.d.ts +9 -12
  274. package/dist/types/errors.d.ts.map +1 -1
  275. package/dist/types/errors.js +12 -15
  276. package/dist/types/errors.js.map +1 -1
  277. package/dist/types/flow.d.ts +265 -513
  278. package/dist/types/flow.d.ts.map +1 -1
  279. package/dist/types/flow.js +7 -1
  280. package/dist/types/flow.js.map +1 -1
  281. package/dist/types/history.d.ts +7 -18
  282. package/dist/types/history.d.ts.map +1 -1
  283. package/dist/types/history.js.map +1 -1
  284. package/dist/types/index.d.ts +9 -15
  285. package/dist/types/index.d.ts.map +1 -1
  286. package/dist/types/index.js +2 -7
  287. package/dist/types/index.js.map +1 -1
  288. package/dist/types/session.d.ts +94 -64
  289. package/dist/types/session.d.ts.map +1 -1
  290. package/dist/types/session.js +5 -1
  291. package/dist/types/session.js.map +1 -1
  292. package/dist/types/tool.d.ts +37 -207
  293. package/dist/types/tool.d.ts.map +1 -1
  294. package/dist/types/tool.js +6 -13
  295. package/dist/types/tool.js.map +1 -1
  296. package/dist/utils/clock.d.ts +28 -0
  297. package/dist/utils/clock.d.ts.map +1 -0
  298. package/dist/utils/clock.js +59 -0
  299. package/dist/utils/clock.js.map +1 -0
  300. package/dist/utils/duration.d.ts +11 -0
  301. package/dist/utils/duration.d.ts.map +1 -0
  302. package/dist/utils/duration.js +26 -0
  303. package/dist/utils/duration.js.map +1 -0
  304. package/dist/utils/history.d.ts +4 -1
  305. package/dist/utils/history.d.ts.map +1 -1
  306. package/dist/utils/history.js +2 -2
  307. package/dist/utils/history.js.map +1 -1
  308. package/dist/utils/index.d.ts +4 -10
  309. package/dist/utils/index.d.ts.map +1 -1
  310. package/dist/utils/index.js +4 -21
  311. package/dist/utils/index.js.map +1 -1
  312. package/dist/utils/json.d.ts +2 -0
  313. package/dist/utils/json.d.ts.map +1 -1
  314. package/dist/utils/json.js +4 -0
  315. package/dist/utils/json.js.map +1 -1
  316. package/dist/utils/outcomes.d.ts +48 -0
  317. package/dist/utils/outcomes.d.ts.map +1 -0
  318. package/dist/utils/outcomes.js +48 -0
  319. package/dist/utils/outcomes.js.map +1 -0
  320. package/dist/utils/schema.d.ts +50 -0
  321. package/dist/utils/schema.d.ts.map +1 -0
  322. package/dist/utils/schema.js +129 -0
  323. package/dist/utils/schema.js.map +1 -0
  324. package/dist/utils/streamingMessage.d.ts +3 -2
  325. package/dist/utils/streamingMessage.d.ts.map +1 -1
  326. package/dist/utils/streamingMessage.js +38 -4
  327. package/dist/utils/streamingMessage.js.map +1 -1
  328. package/dist/utils/template.d.ts +13 -149
  329. package/dist/utils/template.d.ts.map +1 -1
  330. package/dist/utils/template.js +28 -355
  331. package/dist/utils/template.js.map +1 -1
  332. package/dist/utils/usage.d.ts +19 -0
  333. package/dist/utils/usage.d.ts.map +1 -0
  334. package/dist/utils/usage.js +31 -0
  335. package/dist/utils/usage.js.map +1 -0
  336. package/docs/README.md +37 -19
  337. package/docs/concepts/architecture.md +117 -239
  338. package/docs/concepts/collection.md +170 -0
  339. package/docs/concepts/pipeline.md +132 -378
  340. package/docs/concepts/runs-and-waits.md +192 -0
  341. package/docs/guides/actions-and-events.md +276 -0
  342. package/docs/guides/branching.md +119 -208
  343. package/docs/guides/compaction.md +63 -158
  344. package/docs/guides/conditions.md +164 -128
  345. package/docs/guides/error-handling.md +168 -164
  346. package/docs/guides/flow-control.md +210 -349
  347. package/docs/guides/flows-from-json.md +224 -0
  348. package/docs/guides/instructions.md +125 -161
  349. package/docs/guides/persistence.md +182 -206
  350. package/docs/guides/streaming.md +50 -114
  351. package/docs/guides/testing.md +284 -0
  352. package/docs/guides/triggers.md +401 -0
  353. package/docs/migration/README.md +8 -15
  354. package/docs/migration/v1-to-v2.md +1 -1
  355. package/docs/migration/v2-3-to-v2-4.md +2 -2
  356. package/docs/migration/v2-6-to-v2-7.md +4 -4
  357. package/docs/migration/v3-to-v4.md +452 -0
  358. package/docs/reference/actions-events-conditions.md +396 -0
  359. package/docs/reference/agent.md +244 -0
  360. package/docs/reference/branches.md +75 -203
  361. package/docs/reference/errors.md +188 -144
  362. package/docs/reference/fields.md +125 -0
  363. package/docs/reference/flow-spec.md +248 -0
  364. package/docs/reference/flow.md +104 -192
  365. package/docs/reference/instruction.md +83 -137
  366. package/docs/reference/outcomes.md +273 -0
  367. package/docs/reference/providers.md +525 -302
  368. package/docs/reference/session.md +210 -0
  369. package/docs/reference/step.md +194 -312
  370. package/docs/reference/stores.md +496 -0
  371. package/docs/reference/tool.md +162 -231
  372. package/docs/reference/trigger.md +180 -0
  373. package/docs/rfc/v4-one-flow.md +477 -0
  374. package/docs/start/01-install.md +59 -44
  375. package/docs/start/02-first-agent.md +97 -147
  376. package/docs/start/03-collect-data.md +78 -183
  377. package/docs/start/04-add-tools.md +159 -227
  378. package/docs/start/05-go-to-production.md +167 -164
  379. package/examples/01-quickstart.ts +26 -16
  380. package/examples/02-fields.ts +75 -0
  381. package/examples/03-tools.ts +79 -119
  382. package/examples/04-instructions.ts +60 -87
  383. package/examples/05-branches.ts +78 -0
  384. package/examples/06-triggers-and-waits.ts +148 -0
  385. package/examples/07-streaming.ts +34 -60
  386. package/examples/08-store-and-migration.ts +97 -0
  387. package/examples/09-flows-from-json.ts +107 -0
  388. package/package.json +9 -6
  389. package/src/core/Agent.ts +116 -1512
  390. package/src/core/CompactionEngine.ts +7 -4
  391. package/src/core/FlowSpec.ts +712 -0
  392. package/src/core/Migrate.ts +256 -0
  393. package/src/core/Prompt.ts +156 -0
  394. package/src/core/Runner.ts +1181 -0
  395. package/src/core/Speak.ts +451 -0
  396. package/src/core/Understand.ts +422 -0
  397. package/src/core/contracts.ts +111 -0
  398. package/src/core/falai.ts +86 -0
  399. package/src/core/predicate.ts +56 -0
  400. package/src/index.ts +119 -147
  401. package/src/persistence/MemoryStore.ts +37 -0
  402. package/src/persistence/MongoStore.ts +89 -0
  403. package/src/persistence/OpenSearchStore.ts +153 -0
  404. package/src/persistence/PostgresStore.ts +89 -0
  405. package/src/persistence/PrismaStore.ts +127 -0
  406. package/src/persistence/RedisStore.ts +90 -0
  407. package/src/persistence/SQLiteStore.ts +103 -0
  408. package/src/persistence/sessionRow.ts +45 -0
  409. package/src/providers/DeepSeekProvider.ts +8 -3
  410. package/src/providers/GeminiProvider.ts +4 -3
  411. package/src/providers/OpenAICompatibleProvider.ts +6 -0
  412. package/src/providers/OpenRouterProvider.ts +2 -4
  413. package/src/providers/ProviderAdapter.ts +36 -8
  414. package/src/types/agent.ts +124 -397
  415. package/src/types/ai.ts +33 -1
  416. package/src/types/compaction.ts +3 -1
  417. package/src/types/errors.ts +13 -16
  418. package/src/types/flow.ts +249 -550
  419. package/src/types/history.ts +7 -20
  420. package/src/types/index.ts +87 -139
  421. package/src/types/session.ts +135 -70
  422. package/src/types/tool.ts +42 -267
  423. package/src/utils/clock.ts +70 -0
  424. package/src/utils/duration.ts +33 -0
  425. package/src/utils/history.ts +3 -2
  426. package/src/utils/index.ts +8 -66
  427. package/src/utils/json.ts +5 -0
  428. package/src/utils/outcomes.ts +56 -0
  429. package/src/utils/schema.ts +145 -0
  430. package/src/utils/streamingMessage.ts +34 -4
  431. package/src/utils/template.ts +32 -423
  432. package/src/utils/usage.ts +37 -0
  433. package/dist/adapters/MemoryAdapter.d.ts +0 -47
  434. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  435. package/dist/adapters/MemoryAdapter.js +0 -204
  436. package/dist/adapters/MemoryAdapter.js.map +0 -1
  437. package/dist/adapters/MongoAdapter.d.ts +0 -97
  438. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  439. package/dist/adapters/MongoAdapter.js +0 -196
  440. package/dist/adapters/MongoAdapter.js.map +0 -1
  441. package/dist/adapters/OpenSearchAdapter.d.ts +0 -169
  442. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  443. package/dist/adapters/OpenSearchAdapter.js +0 -471
  444. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  445. package/dist/adapters/PostgreSQLAdapter.d.ts +0 -85
  446. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  447. package/dist/adapters/PostgreSQLAdapter.js +0 -308
  448. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  449. package/dist/adapters/PrismaAdapter.d.ts +0 -115
  450. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  451. package/dist/adapters/PrismaAdapter.js +0 -406
  452. package/dist/adapters/PrismaAdapter.js.map +0 -1
  453. package/dist/adapters/RedisAdapter.d.ts +0 -72
  454. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  455. package/dist/adapters/RedisAdapter.js +0 -286
  456. package/dist/adapters/RedisAdapter.js.map +0 -1
  457. package/dist/adapters/SQLiteAdapter.d.ts +0 -86
  458. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  459. package/dist/adapters/SQLiteAdapter.js +0 -337
  460. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  461. package/dist/adapters/index.d.ts +0 -17
  462. package/dist/adapters/index.d.ts.map +0 -1
  463. package/dist/adapters/index.js +0 -11
  464. package/dist/adapters/index.js.map +0 -1
  465. package/dist/adapters/sessionRow.d.ts +0 -22
  466. package/dist/adapters/sessionRow.d.ts.map +0 -1
  467. package/dist/adapters/sessionRow.js +0 -48
  468. package/dist/adapters/sessionRow.js.map +0 -1
  469. package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
  470. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  471. package/dist/cjs/adapters/MemoryAdapter.js +0 -208
  472. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  473. package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
  474. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  475. package/dist/cjs/adapters/MongoAdapter.js +0 -200
  476. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  477. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
  478. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  479. package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
  480. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  481. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
  482. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  483. package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
  484. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  485. package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
  486. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  487. package/dist/cjs/adapters/PrismaAdapter.js +0 -410
  488. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  489. package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
  490. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  491. package/dist/cjs/adapters/RedisAdapter.js +0 -290
  492. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  493. package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
  494. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  495. package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
  496. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  497. package/dist/cjs/adapters/index.d.ts +0 -17
  498. package/dist/cjs/adapters/index.d.ts.map +0 -1
  499. package/dist/cjs/adapters/index.js +0 -21
  500. package/dist/cjs/adapters/index.js.map +0 -1
  501. package/dist/cjs/adapters/sessionRow.d.ts +0 -22
  502. package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
  503. package/dist/cjs/adapters/sessionRow.js +0 -52
  504. package/dist/cjs/adapters/sessionRow.js.map +0 -1
  505. package/dist/cjs/constants/index.d.ts +0 -1
  506. package/dist/cjs/constants/index.d.ts.map +0 -1
  507. package/dist/cjs/constants/index.js +0 -4
  508. package/dist/cjs/constants/index.js.map +0 -1
  509. package/dist/cjs/core/AutoChainExecutor.d.ts +0 -97
  510. package/dist/cjs/core/AutoChainExecutor.d.ts.map +0 -1
  511. package/dist/cjs/core/AutoChainExecutor.js +0 -288
  512. package/dist/cjs/core/AutoChainExecutor.js.map +0 -1
  513. package/dist/cjs/core/BranchEvaluator.d.ts +0 -55
  514. package/dist/cjs/core/BranchEvaluator.d.ts.map +0 -1
  515. package/dist/cjs/core/BranchEvaluator.js +0 -125
  516. package/dist/cjs/core/BranchEvaluator.js.map +0 -1
  517. package/dist/cjs/core/DirectiveChainTracker.d.ts +0 -49
  518. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +0 -1
  519. package/dist/cjs/core/DirectiveChainTracker.js +0 -121
  520. package/dist/cjs/core/DirectiveChainTracker.js.map +0 -1
  521. package/dist/cjs/core/Events.d.ts +0 -26
  522. package/dist/cjs/core/Events.d.ts.map +0 -1
  523. package/dist/cjs/core/Events.js +0 -144
  524. package/dist/cjs/core/Events.js.map +0 -1
  525. package/dist/cjs/core/Flow.d.ts +0 -183
  526. package/dist/cjs/core/Flow.d.ts.map +0 -1
  527. package/dist/cjs/core/Flow.js +0 -551
  528. package/dist/cjs/core/Flow.js.map +0 -1
  529. package/dist/cjs/core/FlowRouter.d.ts +0 -183
  530. package/dist/cjs/core/FlowRouter.d.ts.map +0 -1
  531. package/dist/cjs/core/FlowRouter.js +0 -1047
  532. package/dist/cjs/core/FlowRouter.js.map +0 -1
  533. package/dist/cjs/core/PersistenceManager.d.ts +0 -114
  534. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  535. package/dist/cjs/core/PersistenceManager.js +0 -336
  536. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  537. package/dist/cjs/core/PromptComposer.d.ts +0 -47
  538. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  539. package/dist/cjs/core/PromptComposer.js +0 -397
  540. package/dist/cjs/core/PromptComposer.js.map +0 -1
  541. package/dist/cjs/core/PromptSectionCache.d.ts +0 -48
  542. package/dist/cjs/core/PromptSectionCache.d.ts.map +0 -1
  543. package/dist/cjs/core/PromptSectionCache.js +0 -108
  544. package/dist/cjs/core/PromptSectionCache.js.map +0 -1
  545. package/dist/cjs/core/ResponseEngine.d.ts +0 -43
  546. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  547. package/dist/cjs/core/ResponseEngine.js +0 -235
  548. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  549. package/dist/cjs/core/ResponseGenerationError.d.ts +0 -30
  550. package/dist/cjs/core/ResponseGenerationError.d.ts.map +0 -1
  551. package/dist/cjs/core/ResponseGenerationError.js +0 -35
  552. package/dist/cjs/core/ResponseGenerationError.js.map +0 -1
  553. package/dist/cjs/core/ResponseModal.d.ts +0 -305
  554. package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
  555. package/dist/cjs/core/ResponseModal.js +0 -1414
  556. package/dist/cjs/core/ResponseModal.js.map +0 -1
  557. package/dist/cjs/core/ResponsePipeline.d.ts +0 -220
  558. package/dist/cjs/core/ResponsePipeline.d.ts.map +0 -1
  559. package/dist/cjs/core/ResponsePipeline.js +0 -1040
  560. package/dist/cjs/core/ResponsePipeline.js.map +0 -1
  561. package/dist/cjs/core/SessionFinalizer.d.ts +0 -34
  562. package/dist/cjs/core/SessionFinalizer.d.ts.map +0 -1
  563. package/dist/cjs/core/SessionFinalizer.js +0 -88
  564. package/dist/cjs/core/SessionFinalizer.js.map +0 -1
  565. package/dist/cjs/core/SessionManager.d.ts +0 -112
  566. package/dist/cjs/core/SessionManager.d.ts.map +0 -1
  567. package/dist/cjs/core/SessionManager.js +0 -308
  568. package/dist/cjs/core/SessionManager.js.map +0 -1
  569. package/dist/cjs/core/SignalCoordinator.d.ts +0 -103
  570. package/dist/cjs/core/SignalCoordinator.d.ts.map +0 -1
  571. package/dist/cjs/core/SignalCoordinator.js +0 -207
  572. package/dist/cjs/core/SignalCoordinator.js.map +0 -1
  573. package/dist/cjs/core/SignalEvaluator.d.ts +0 -86
  574. package/dist/cjs/core/SignalEvaluator.d.ts.map +0 -1
  575. package/dist/cjs/core/SignalEvaluator.js +0 -319
  576. package/dist/cjs/core/SignalEvaluator.js.map +0 -1
  577. package/dist/cjs/core/SignalProcessor.d.ts +0 -152
  578. package/dist/cjs/core/SignalProcessor.d.ts.map +0 -1
  579. package/dist/cjs/core/SignalProcessor.js +0 -505
  580. package/dist/cjs/core/SignalProcessor.js.map +0 -1
  581. package/dist/cjs/core/Step.d.ts +0 -184
  582. package/dist/cjs/core/Step.d.ts.map +0 -1
  583. package/dist/cjs/core/Step.js +0 -599
  584. package/dist/cjs/core/Step.js.map +0 -1
  585. package/dist/cjs/core/StepLifecycle.d.ts +0 -43
  586. package/dist/cjs/core/StepLifecycle.d.ts.map +0 -1
  587. package/dist/cjs/core/StepLifecycle.js +0 -180
  588. package/dist/cjs/core/StepLifecycle.js.map +0 -1
  589. package/dist/cjs/core/StreamingToolExecutor.d.ts +0 -142
  590. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +0 -1
  591. package/dist/cjs/core/StreamingToolExecutor.js +0 -490
  592. package/dist/cjs/core/StreamingToolExecutor.js.map +0 -1
  593. package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
  594. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
  595. package/dist/cjs/core/ToolLoopExecutor.js +0 -568
  596. package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
  597. package/dist/cjs/core/ToolManager.d.ts +0 -250
  598. package/dist/cjs/core/ToolManager.d.ts.map +0 -1
  599. package/dist/cjs/core/ToolManager.js +0 -1104
  600. package/dist/cjs/core/ToolManager.js.map +0 -1
  601. package/dist/cjs/core/createAgent.d.ts +0 -35
  602. package/dist/cjs/core/createAgent.d.ts.map +0 -1
  603. package/dist/cjs/core/createAgent.js +0 -39
  604. package/dist/cjs/core/createAgent.js.map +0 -1
  605. package/dist/cjs/core/flow-namespace.d.ts +0 -64
  606. package/dist/cjs/core/flow-namespace.d.ts.map +0 -1
  607. package/dist/cjs/core/flow-namespace.js +0 -182
  608. package/dist/cjs/core/flow-namespace.js.map +0 -1
  609. package/dist/cjs/core/toolGates.d.ts +0 -24
  610. package/dist/cjs/core/toolGates.d.ts.map +0 -1
  611. package/dist/cjs/core/toolGates.js +0 -52
  612. package/dist/cjs/core/toolGates.js.map +0 -1
  613. package/dist/cjs/types/persistence.d.ts +0 -254
  614. package/dist/cjs/types/persistence.d.ts.map +0 -1
  615. package/dist/cjs/types/persistence.js +0 -7
  616. package/dist/cjs/types/persistence.js.map +0 -1
  617. package/dist/cjs/types/prompt-cache.d.ts +0 -15
  618. package/dist/cjs/types/prompt-cache.d.ts.map +0 -1
  619. package/dist/cjs/types/prompt-cache.js +0 -6
  620. package/dist/cjs/types/prompt-cache.js.map +0 -1
  621. package/dist/cjs/types/signals.d.ts +0 -263
  622. package/dist/cjs/types/signals.d.ts.map +0 -1
  623. package/dist/cjs/types/signals.js +0 -11
  624. package/dist/cjs/types/signals.js.map +0 -1
  625. package/dist/cjs/types/template.d.ts +0 -84
  626. package/dist/cjs/types/template.d.ts.map +0 -1
  627. package/dist/cjs/types/template.js +0 -3
  628. package/dist/cjs/types/template.js.map +0 -1
  629. package/dist/cjs/utils/condition.d.ts +0 -63
  630. package/dist/cjs/utils/condition.d.ts.map +0 -1
  631. package/dist/cjs/utils/condition.js +0 -239
  632. package/dist/cjs/utils/condition.js.map +0 -1
  633. package/dist/cjs/utils/event.d.ts +0 -6
  634. package/dist/cjs/utils/event.d.ts.map +0 -1
  635. package/dist/cjs/utils/event.js +0 -20
  636. package/dist/cjs/utils/event.js.map +0 -1
  637. package/dist/cjs/utils/id.d.ts +0 -33
  638. package/dist/cjs/utils/id.d.ts.map +0 -1
  639. package/dist/cjs/utils/id.js +0 -84
  640. package/dist/cjs/utils/id.js.map +0 -1
  641. package/dist/cjs/utils/serialize.d.ts +0 -36
  642. package/dist/cjs/utils/serialize.d.ts.map +0 -1
  643. package/dist/cjs/utils/serialize.js +0 -77
  644. package/dist/cjs/utils/serialize.js.map +0 -1
  645. package/dist/cjs/utils/session.d.ts +0 -124
  646. package/dist/cjs/utils/session.d.ts.map +0 -1
  647. package/dist/cjs/utils/session.js +0 -396
  648. package/dist/cjs/utils/session.js.map +0 -1
  649. package/dist/constants/index.d.ts +0 -2
  650. package/dist/constants/index.d.ts.map +0 -1
  651. package/dist/constants/index.js +0 -4
  652. package/dist/constants/index.js.map +0 -1
  653. package/dist/core/AutoChainExecutor.d.ts +0 -97
  654. package/dist/core/AutoChainExecutor.d.ts.map +0 -1
  655. package/dist/core/AutoChainExecutor.js +0 -284
  656. package/dist/core/AutoChainExecutor.js.map +0 -1
  657. package/dist/core/BranchEvaluator.d.ts +0 -55
  658. package/dist/core/BranchEvaluator.d.ts.map +0 -1
  659. package/dist/core/BranchEvaluator.js +0 -121
  660. package/dist/core/BranchEvaluator.js.map +0 -1
  661. package/dist/core/DirectiveChainTracker.d.ts +0 -49
  662. package/dist/core/DirectiveChainTracker.d.ts.map +0 -1
  663. package/dist/core/DirectiveChainTracker.js +0 -117
  664. package/dist/core/DirectiveChainTracker.js.map +0 -1
  665. package/dist/core/Events.d.ts +0 -26
  666. package/dist/core/Events.d.ts.map +0 -1
  667. package/dist/core/Events.js +0 -137
  668. package/dist/core/Events.js.map +0 -1
  669. package/dist/core/Flow.d.ts +0 -183
  670. package/dist/core/Flow.d.ts.map +0 -1
  671. package/dist/core/Flow.js +0 -547
  672. package/dist/core/Flow.js.map +0 -1
  673. package/dist/core/FlowRouter.d.ts +0 -183
  674. package/dist/core/FlowRouter.d.ts.map +0 -1
  675. package/dist/core/FlowRouter.js +0 -1043
  676. package/dist/core/FlowRouter.js.map +0 -1
  677. package/dist/core/PersistenceManager.d.ts +0 -114
  678. package/dist/core/PersistenceManager.d.ts.map +0 -1
  679. package/dist/core/PersistenceManager.js +0 -332
  680. package/dist/core/PersistenceManager.js.map +0 -1
  681. package/dist/core/PromptComposer.d.ts +0 -47
  682. package/dist/core/PromptComposer.d.ts.map +0 -1
  683. package/dist/core/PromptComposer.js +0 -393
  684. package/dist/core/PromptComposer.js.map +0 -1
  685. package/dist/core/PromptSectionCache.d.ts +0 -48
  686. package/dist/core/PromptSectionCache.d.ts.map +0 -1
  687. package/dist/core/PromptSectionCache.js +0 -104
  688. package/dist/core/PromptSectionCache.js.map +0 -1
  689. package/dist/core/ResponseEngine.d.ts +0 -43
  690. package/dist/core/ResponseEngine.d.ts.map +0 -1
  691. package/dist/core/ResponseEngine.js +0 -231
  692. package/dist/core/ResponseEngine.js.map +0 -1
  693. package/dist/core/ResponseGenerationError.d.ts +0 -30
  694. package/dist/core/ResponseGenerationError.d.ts.map +0 -1
  695. package/dist/core/ResponseGenerationError.js +0 -31
  696. package/dist/core/ResponseGenerationError.js.map +0 -1
  697. package/dist/core/ResponseModal.d.ts +0 -305
  698. package/dist/core/ResponseModal.d.ts.map +0 -1
  699. package/dist/core/ResponseModal.js +0 -1410
  700. package/dist/core/ResponseModal.js.map +0 -1
  701. package/dist/core/ResponsePipeline.d.ts +0 -220
  702. package/dist/core/ResponsePipeline.d.ts.map +0 -1
  703. package/dist/core/ResponsePipeline.js +0 -1035
  704. package/dist/core/ResponsePipeline.js.map +0 -1
  705. package/dist/core/SessionFinalizer.d.ts +0 -34
  706. package/dist/core/SessionFinalizer.d.ts.map +0 -1
  707. package/dist/core/SessionFinalizer.js +0 -84
  708. package/dist/core/SessionFinalizer.js.map +0 -1
  709. package/dist/core/SessionManager.d.ts +0 -112
  710. package/dist/core/SessionManager.d.ts.map +0 -1
  711. package/dist/core/SessionManager.js +0 -301
  712. package/dist/core/SessionManager.js.map +0 -1
  713. package/dist/core/SignalCoordinator.d.ts +0 -103
  714. package/dist/core/SignalCoordinator.d.ts.map +0 -1
  715. package/dist/core/SignalCoordinator.js +0 -203
  716. package/dist/core/SignalCoordinator.js.map +0 -1
  717. package/dist/core/SignalEvaluator.d.ts +0 -86
  718. package/dist/core/SignalEvaluator.d.ts.map +0 -1
  719. package/dist/core/SignalEvaluator.js +0 -312
  720. package/dist/core/SignalEvaluator.js.map +0 -1
  721. package/dist/core/SignalProcessor.d.ts +0 -152
  722. package/dist/core/SignalProcessor.d.ts.map +0 -1
  723. package/dist/core/SignalProcessor.js +0 -498
  724. package/dist/core/SignalProcessor.js.map +0 -1
  725. package/dist/core/Step.d.ts +0 -184
  726. package/dist/core/Step.d.ts.map +0 -1
  727. package/dist/core/Step.js +0 -594
  728. package/dist/core/Step.js.map +0 -1
  729. package/dist/core/StepLifecycle.d.ts +0 -43
  730. package/dist/core/StepLifecycle.d.ts.map +0 -1
  731. package/dist/core/StepLifecycle.js +0 -176
  732. package/dist/core/StepLifecycle.js.map +0 -1
  733. package/dist/core/StreamingToolExecutor.d.ts +0 -142
  734. package/dist/core/StreamingToolExecutor.d.ts.map +0 -1
  735. package/dist/core/StreamingToolExecutor.js +0 -483
  736. package/dist/core/StreamingToolExecutor.js.map +0 -1
  737. package/dist/core/ToolLoopExecutor.d.ts +0 -133
  738. package/dist/core/ToolLoopExecutor.d.ts.map +0 -1
  739. package/dist/core/ToolLoopExecutor.js +0 -564
  740. package/dist/core/ToolLoopExecutor.js.map +0 -1
  741. package/dist/core/ToolManager.d.ts +0 -250
  742. package/dist/core/ToolManager.d.ts.map +0 -1
  743. package/dist/core/ToolManager.js +0 -1098
  744. package/dist/core/ToolManager.js.map +0 -1
  745. package/dist/core/createAgent.d.ts +0 -35
  746. package/dist/core/createAgent.d.ts.map +0 -1
  747. package/dist/core/createAgent.js +0 -36
  748. package/dist/core/createAgent.js.map +0 -1
  749. package/dist/core/flow-namespace.d.ts +0 -64
  750. package/dist/core/flow-namespace.d.ts.map +0 -1
  751. package/dist/core/flow-namespace.js +0 -179
  752. package/dist/core/flow-namespace.js.map +0 -1
  753. package/dist/core/toolGates.d.ts +0 -24
  754. package/dist/core/toolGates.d.ts.map +0 -1
  755. package/dist/core/toolGates.js +0 -49
  756. package/dist/core/toolGates.js.map +0 -1
  757. package/dist/types/persistence.d.ts +0 -254
  758. package/dist/types/persistence.d.ts.map +0 -1
  759. package/dist/types/persistence.js +0 -6
  760. package/dist/types/persistence.js.map +0 -1
  761. package/dist/types/prompt-cache.d.ts +0 -15
  762. package/dist/types/prompt-cache.d.ts.map +0 -1
  763. package/dist/types/prompt-cache.js +0 -5
  764. package/dist/types/prompt-cache.js.map +0 -1
  765. package/dist/types/signals.d.ts +0 -263
  766. package/dist/types/signals.d.ts.map +0 -1
  767. package/dist/types/signals.js +0 -10
  768. package/dist/types/signals.js.map +0 -1
  769. package/dist/types/template.d.ts +0 -84
  770. package/dist/types/template.d.ts.map +0 -1
  771. package/dist/types/template.js +0 -2
  772. package/dist/types/template.js.map +0 -1
  773. package/dist/utils/condition.d.ts +0 -63
  774. package/dist/utils/condition.d.ts.map +0 -1
  775. package/dist/utils/condition.js +0 -230
  776. package/dist/utils/condition.js.map +0 -1
  777. package/dist/utils/event.d.ts +0 -6
  778. package/dist/utils/event.d.ts.map +0 -1
  779. package/dist/utils/event.js +0 -17
  780. package/dist/utils/event.js.map +0 -1
  781. package/dist/utils/id.d.ts +0 -33
  782. package/dist/utils/id.d.ts.map +0 -1
  783. package/dist/utils/id.js +0 -77
  784. package/dist/utils/id.js.map +0 -1
  785. package/dist/utils/serialize.d.ts +0 -36
  786. package/dist/utils/serialize.d.ts.map +0 -1
  787. package/dist/utils/serialize.js +0 -72
  788. package/dist/utils/serialize.js.map +0 -1
  789. package/dist/utils/session.d.ts +0 -124
  790. package/dist/utils/session.d.ts.map +0 -1
  791. package/dist/utils/session.js +0 -379
  792. package/dist/utils/session.js.map +0 -1
  793. package/docs/concepts/directives.md +0 -369
  794. package/docs/reference/adapters.md +0 -543
  795. package/docs/reference/create-agent.md +0 -216
  796. package/docs/reference/directive.md +0 -242
  797. package/docs/reference/signals.md +0 -368
  798. package/examples/02-data-extraction.ts +0 -90
  799. package/examples/05-branching.ts +0 -140
  800. package/examples/06-flow-control.ts +0 -103
  801. package/examples/08-persistence.ts +0 -98
  802. package/examples/09-signals.ts +0 -144
  803. package/src/adapters/MemoryAdapter.ts +0 -281
  804. package/src/adapters/MongoAdapter.ts +0 -341
  805. package/src/adapters/OpenSearchAdapter.ts +0 -693
  806. package/src/adapters/PostgreSQLAdapter.ts +0 -487
  807. package/src/adapters/PrismaAdapter.ts +0 -617
  808. package/src/adapters/RedisAdapter.ts +0 -439
  809. package/src/adapters/SQLiteAdapter.ts +0 -496
  810. package/src/adapters/index.ts +0 -43
  811. package/src/adapters/sessionRow.ts +0 -57
  812. package/src/constants/index.ts +0 -2
  813. package/src/core/AutoChainExecutor.ts +0 -397
  814. package/src/core/BranchEvaluator.ts +0 -161
  815. package/src/core/DirectiveChainTracker.ts +0 -144
  816. package/src/core/Events.ts +0 -164
  817. package/src/core/Flow.ts +0 -665
  818. package/src/core/FlowRouter.ts +0 -1540
  819. package/src/core/PersistenceManager.ts +0 -446
  820. package/src/core/PromptComposer.ts +0 -448
  821. package/src/core/PromptSectionCache.ts +0 -125
  822. package/src/core/ResponseEngine.ts +0 -338
  823. package/src/core/ResponseGenerationError.ts +0 -53
  824. package/src/core/ResponseModal.ts +0 -1902
  825. package/src/core/ResponsePipeline.ts +0 -1404
  826. package/src/core/SessionFinalizer.ts +0 -108
  827. package/src/core/SessionManager.ts +0 -372
  828. package/src/core/SignalCoordinator.ts +0 -263
  829. package/src/core/SignalEvaluator.ts +0 -404
  830. package/src/core/SignalProcessor.ts +0 -663
  831. package/src/core/Step.ts +0 -782
  832. package/src/core/StepLifecycle.ts +0 -242
  833. package/src/core/StreamingToolExecutor.ts +0 -609
  834. package/src/core/ToolLoopExecutor.ts +0 -749
  835. package/src/core/ToolManager.ts +0 -1379
  836. package/src/core/createAgent.ts +0 -40
  837. package/src/core/flow-namespace.ts +0 -227
  838. package/src/core/toolGates.ts +0 -72
  839. package/src/types/persistence.ts +0 -303
  840. package/src/types/prompt-cache.ts +0 -17
  841. package/src/types/signals.ts +0 -338
  842. package/src/types/template.ts +0 -98
  843. package/src/utils/condition.ts +0 -296
  844. package/src/utils/event.ts +0 -16
  845. package/src/utils/id.ts +0 -91
  846. package/src/utils/serialize.ts +0 -86
  847. package/src/utils/session.ts +0 -501
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
+ }