@falai/agent 3.4.5 → 4.0.0-alpha.10

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 (865) hide show
  1. package/README.md +41 -34
  2. package/dist/cjs/core/Agent.d.ts +29 -378
  3. package/dist/cjs/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/core/Agent.js +113 -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 +573 -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 +149 -0
  20. package/dist/cjs/core/Prompt.js.map +1 -0
  21. package/dist/cjs/core/Runner.d.ts +171 -0
  22. package/dist/cjs/core/Runner.d.ts.map +1 -0
  23. package/dist/cjs/core/Runner.js +1158 -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 +373 -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 +357 -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 +163 -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/phrases.d.ts +25 -0
  158. package/dist/cjs/utils/phrases.d.ts.map +1 -0
  159. package/dist/cjs/utils/phrases.js +38 -0
  160. package/dist/cjs/utils/phrases.js.map +1 -0
  161. package/dist/cjs/utils/schema.d.ts +50 -0
  162. package/dist/cjs/utils/schema.d.ts.map +1 -0
  163. package/dist/cjs/utils/schema.js +138 -0
  164. package/dist/cjs/utils/schema.js.map +1 -0
  165. package/dist/cjs/utils/streamingMessage.d.ts +3 -2
  166. package/dist/cjs/utils/streamingMessage.d.ts.map +1 -1
  167. package/dist/cjs/utils/streamingMessage.js +38 -4
  168. package/dist/cjs/utils/streamingMessage.js.map +1 -1
  169. package/dist/cjs/utils/template.d.ts +22 -150
  170. package/dist/cjs/utils/template.d.ts.map +1 -1
  171. package/dist/cjs/utils/template.js +64 -359
  172. package/dist/cjs/utils/template.js.map +1 -1
  173. package/dist/cjs/utils/usage.d.ts +19 -0
  174. package/dist/cjs/utils/usage.d.ts.map +1 -0
  175. package/dist/cjs/utils/usage.js +35 -0
  176. package/dist/cjs/utils/usage.js.map +1 -0
  177. package/dist/core/Agent.d.ts +29 -378
  178. package/dist/core/Agent.d.ts.map +1 -1
  179. package/dist/core/Agent.js +116 -1181
  180. package/dist/core/Agent.js.map +1 -1
  181. package/dist/core/CompactionEngine.d.ts.map +1 -1
  182. package/dist/core/CompactionEngine.js +5 -3
  183. package/dist/core/CompactionEngine.js.map +1 -1
  184. package/dist/core/FlowSpec.d.ts +136 -0
  185. package/dist/core/FlowSpec.d.ts.map +1 -0
  186. package/dist/core/FlowSpec.js +567 -0
  187. package/dist/core/FlowSpec.js.map +1 -0
  188. package/dist/core/Migrate.d.ts +38 -0
  189. package/dist/core/Migrate.d.ts.map +1 -0
  190. package/dist/core/Migrate.js +264 -0
  191. package/dist/core/Migrate.js.map +1 -0
  192. package/dist/core/Prompt.d.ts +54 -0
  193. package/dist/core/Prompt.d.ts.map +1 -0
  194. package/dist/core/Prompt.js +139 -0
  195. package/dist/core/Prompt.js.map +1 -0
  196. package/dist/core/Runner.d.ts +171 -0
  197. package/dist/core/Runner.d.ts.map +1 -0
  198. package/dist/core/Runner.js +1154 -0
  199. package/dist/core/Runner.js.map +1 -0
  200. package/dist/core/Speak.d.ts +37 -0
  201. package/dist/core/Speak.d.ts.map +1 -0
  202. package/dist/core/Speak.js +369 -0
  203. package/dist/core/Speak.js.map +1 -0
  204. package/dist/core/Understand.d.ts +28 -0
  205. package/dist/core/Understand.d.ts.map +1 -0
  206. package/dist/core/Understand.js +353 -0
  207. package/dist/core/Understand.js.map +1 -0
  208. package/dist/core/contracts.d.ts +122 -0
  209. package/dist/core/contracts.d.ts.map +1 -0
  210. package/dist/core/contracts.js +10 -0
  211. package/dist/core/contracts.js.map +1 -0
  212. package/dist/core/falai.d.ts +57 -0
  213. package/dist/core/falai.d.ts.map +1 -0
  214. package/dist/core/falai.js +40 -0
  215. package/dist/core/falai.js.map +1 -0
  216. package/dist/core/predicate.d.ts +9 -0
  217. package/dist/core/predicate.d.ts.map +1 -0
  218. package/dist/core/predicate.js +54 -0
  219. package/dist/core/predicate.js.map +1 -0
  220. package/dist/index.d.ts +26 -31
  221. package/dist/index.d.ts.map +1 -1
  222. package/dist/index.js +19 -24
  223. package/dist/index.js.map +1 -1
  224. package/dist/persistence/MemoryStore.d.ts +15 -0
  225. package/dist/persistence/MemoryStore.d.ts.map +1 -0
  226. package/dist/persistence/MemoryStore.js +35 -0
  227. package/dist/persistence/MemoryStore.js.map +1 -0
  228. package/dist/persistence/MongoStore.d.ts +42 -0
  229. package/dist/persistence/MongoStore.d.ts.map +1 -0
  230. package/dist/persistence/MongoStore.js +56 -0
  231. package/dist/persistence/MongoStore.js.map +1 -0
  232. package/dist/persistence/OpenSearchStore.d.ts +86 -0
  233. package/dist/persistence/OpenSearchStore.d.ts.map +1 -0
  234. package/dist/persistence/OpenSearchStore.js +116 -0
  235. package/dist/persistence/OpenSearchStore.js.map +1 -0
  236. package/dist/persistence/PostgresStore.d.ts +41 -0
  237. package/dist/persistence/PostgresStore.d.ts.map +1 -0
  238. package/dist/persistence/PostgresStore.js +54 -0
  239. package/dist/persistence/PostgresStore.js.map +1 -0
  240. package/dist/persistence/PrismaStore.d.ts +65 -0
  241. package/dist/persistence/PrismaStore.d.ts.map +1 -0
  242. package/dist/persistence/PrismaStore.js +91 -0
  243. package/dist/persistence/PrismaStore.js.map +1 -0
  244. package/dist/persistence/RedisStore.d.ts +34 -0
  245. package/dist/persistence/RedisStore.d.ts.map +1 -0
  246. package/dist/persistence/RedisStore.js +57 -0
  247. package/dist/persistence/RedisStore.js.map +1 -0
  248. package/dist/persistence/SQLiteStore.d.ts +45 -0
  249. package/dist/persistence/SQLiteStore.d.ts.map +1 -0
  250. package/dist/persistence/SQLiteStore.js +70 -0
  251. package/dist/persistence/SQLiteStore.js.map +1 -0
  252. package/dist/persistence/sessionRow.d.ts +14 -0
  253. package/dist/persistence/sessionRow.d.ts.map +1 -0
  254. package/dist/persistence/sessionRow.js +45 -0
  255. package/dist/persistence/sessionRow.js.map +1 -0
  256. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  257. package/dist/providers/DeepSeekProvider.js +8 -3
  258. package/dist/providers/DeepSeekProvider.js.map +1 -1
  259. package/dist/providers/GeminiProvider.d.ts +4 -3
  260. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  261. package/dist/providers/GeminiProvider.js +4 -3
  262. package/dist/providers/GeminiProvider.js.map +1 -1
  263. package/dist/providers/OpenAICompatibleProvider.d.ts +4 -0
  264. package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
  265. package/dist/providers/OpenAICompatibleProvider.js +2 -0
  266. package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
  267. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  268. package/dist/providers/OpenRouterProvider.js +2 -4
  269. package/dist/providers/OpenRouterProvider.js.map +1 -1
  270. package/dist/providers/ProviderAdapter.d.ts +11 -6
  271. package/dist/providers/ProviderAdapter.d.ts.map +1 -1
  272. package/dist/providers/ProviderAdapter.js +34 -11
  273. package/dist/providers/ProviderAdapter.js.map +1 -1
  274. package/dist/providers/ZaiProvider.d.ts +6 -4
  275. package/dist/providers/ZaiProvider.d.ts.map +1 -1
  276. package/dist/providers/ZaiProvider.js +6 -4
  277. package/dist/providers/ZaiProvider.js.map +1 -1
  278. package/dist/types/agent.d.ts +163 -383
  279. package/dist/types/agent.d.ts.map +1 -1
  280. package/dist/types/agent.js +1 -1
  281. package/dist/types/ai.d.ts +32 -1
  282. package/dist/types/ai.d.ts.map +1 -1
  283. package/dist/types/compaction.d.ts +3 -1
  284. package/dist/types/compaction.d.ts.map +1 -1
  285. package/dist/types/errors.d.ts +9 -12
  286. package/dist/types/errors.d.ts.map +1 -1
  287. package/dist/types/errors.js +12 -15
  288. package/dist/types/errors.js.map +1 -1
  289. package/dist/types/flow.d.ts +265 -513
  290. package/dist/types/flow.d.ts.map +1 -1
  291. package/dist/types/flow.js +7 -1
  292. package/dist/types/flow.js.map +1 -1
  293. package/dist/types/history.d.ts +7 -18
  294. package/dist/types/history.d.ts.map +1 -1
  295. package/dist/types/history.js.map +1 -1
  296. package/dist/types/index.d.ts +9 -15
  297. package/dist/types/index.d.ts.map +1 -1
  298. package/dist/types/index.js +2 -7
  299. package/dist/types/index.js.map +1 -1
  300. package/dist/types/session.d.ts +94 -64
  301. package/dist/types/session.d.ts.map +1 -1
  302. package/dist/types/session.js +5 -1
  303. package/dist/types/session.js.map +1 -1
  304. package/dist/types/tool.d.ts +37 -207
  305. package/dist/types/tool.d.ts.map +1 -1
  306. package/dist/types/tool.js +6 -13
  307. package/dist/types/tool.js.map +1 -1
  308. package/dist/utils/clock.d.ts +28 -0
  309. package/dist/utils/clock.d.ts.map +1 -0
  310. package/dist/utils/clock.js +59 -0
  311. package/dist/utils/clock.js.map +1 -0
  312. package/dist/utils/duration.d.ts +11 -0
  313. package/dist/utils/duration.d.ts.map +1 -0
  314. package/dist/utils/duration.js +26 -0
  315. package/dist/utils/duration.js.map +1 -0
  316. package/dist/utils/history.d.ts +4 -1
  317. package/dist/utils/history.d.ts.map +1 -1
  318. package/dist/utils/history.js +2 -2
  319. package/dist/utils/history.js.map +1 -1
  320. package/dist/utils/index.d.ts +4 -10
  321. package/dist/utils/index.d.ts.map +1 -1
  322. package/dist/utils/index.js +4 -21
  323. package/dist/utils/index.js.map +1 -1
  324. package/dist/utils/json.d.ts +2 -0
  325. package/dist/utils/json.d.ts.map +1 -1
  326. package/dist/utils/json.js +4 -0
  327. package/dist/utils/json.js.map +1 -1
  328. package/dist/utils/outcomes.d.ts +48 -0
  329. package/dist/utils/outcomes.d.ts.map +1 -0
  330. package/dist/utils/outcomes.js +48 -0
  331. package/dist/utils/outcomes.js.map +1 -0
  332. package/dist/utils/phrases.d.ts +25 -0
  333. package/dist/utils/phrases.d.ts.map +1 -0
  334. package/dist/utils/phrases.js +35 -0
  335. package/dist/utils/phrases.js.map +1 -0
  336. package/dist/utils/schema.d.ts +50 -0
  337. package/dist/utils/schema.d.ts.map +1 -0
  338. package/dist/utils/schema.js +129 -0
  339. package/dist/utils/schema.js.map +1 -0
  340. package/dist/utils/streamingMessage.d.ts +3 -2
  341. package/dist/utils/streamingMessage.d.ts.map +1 -1
  342. package/dist/utils/streamingMessage.js +38 -4
  343. package/dist/utils/streamingMessage.js.map +1 -1
  344. package/dist/utils/template.d.ts +22 -150
  345. package/dist/utils/template.d.ts.map +1 -1
  346. package/dist/utils/template.js +61 -351
  347. package/dist/utils/template.js.map +1 -1
  348. package/dist/utils/usage.d.ts +19 -0
  349. package/dist/utils/usage.d.ts.map +1 -0
  350. package/dist/utils/usage.js +31 -0
  351. package/dist/utils/usage.js.map +1 -0
  352. package/docs/README.md +37 -19
  353. package/docs/concepts/architecture.md +117 -239
  354. package/docs/concepts/collection.md +170 -0
  355. package/docs/concepts/pipeline.md +132 -378
  356. package/docs/concepts/runs-and-waits.md +192 -0
  357. package/docs/guides/actions-and-events.md +276 -0
  358. package/docs/guides/branching.md +119 -208
  359. package/docs/guides/compaction.md +63 -158
  360. package/docs/guides/conditions.md +164 -128
  361. package/docs/guides/error-handling.md +170 -164
  362. package/docs/guides/flow-control.md +210 -349
  363. package/docs/guides/flows-from-json.md +224 -0
  364. package/docs/guides/instructions.md +125 -161
  365. package/docs/guides/persistence.md +182 -206
  366. package/docs/guides/streaming.md +50 -114
  367. package/docs/guides/testing.md +284 -0
  368. package/docs/guides/triggers.md +401 -0
  369. package/docs/migration/README.md +8 -15
  370. package/docs/migration/v1-to-v2.md +1 -1
  371. package/docs/migration/v2-3-to-v2-4.md +2 -2
  372. package/docs/migration/v2-6-to-v2-7.md +4 -4
  373. package/docs/migration/v3-to-v4.md +457 -0
  374. package/docs/reference/actions-events-conditions.md +396 -0
  375. package/docs/reference/agent.md +248 -0
  376. package/docs/reference/branches.md +75 -203
  377. package/docs/reference/errors.md +188 -144
  378. package/docs/reference/fields.md +125 -0
  379. package/docs/reference/flow-spec.md +248 -0
  380. package/docs/reference/flow.md +104 -192
  381. package/docs/reference/instruction.md +83 -137
  382. package/docs/reference/outcomes.md +273 -0
  383. package/docs/reference/providers.md +525 -302
  384. package/docs/reference/session.md +210 -0
  385. package/docs/reference/step.md +194 -312
  386. package/docs/reference/stores.md +496 -0
  387. package/docs/reference/tool.md +162 -231
  388. package/docs/reference/trigger.md +200 -0
  389. package/docs/rfc/v4-one-flow.md +477 -0
  390. package/docs/start/01-install.md +59 -44
  391. package/docs/start/02-first-agent.md +97 -147
  392. package/docs/start/03-collect-data.md +78 -183
  393. package/docs/start/04-add-tools.md +159 -227
  394. package/docs/start/05-go-to-production.md +181 -163
  395. package/examples/01-quickstart.ts +26 -16
  396. package/examples/02-fields.ts +75 -0
  397. package/examples/03-tools.ts +79 -119
  398. package/examples/04-instructions.ts +60 -87
  399. package/examples/05-branches.ts +78 -0
  400. package/examples/06-triggers-and-waits.ts +149 -0
  401. package/examples/07-streaming.ts +34 -60
  402. package/examples/08-store-and-migration.ts +97 -0
  403. package/examples/09-flows-from-json.ts +107 -0
  404. package/package.json +11 -6
  405. package/src/core/Agent.ts +126 -1512
  406. package/src/core/CompactionEngine.ts +7 -4
  407. package/src/core/FlowSpec.ts +778 -0
  408. package/src/core/Migrate.ts +256 -0
  409. package/src/core/Prompt.ts +162 -0
  410. package/src/core/Runner.ts +1214 -0
  411. package/src/core/Speak.ts +460 -0
  412. package/src/core/Understand.ts +423 -0
  413. package/src/core/contracts.ts +111 -0
  414. package/src/core/falai.ts +86 -0
  415. package/src/core/predicate.ts +56 -0
  416. package/src/index.ts +120 -147
  417. package/src/persistence/MemoryStore.ts +37 -0
  418. package/src/persistence/MongoStore.ts +89 -0
  419. package/src/persistence/OpenSearchStore.ts +153 -0
  420. package/src/persistence/PostgresStore.ts +89 -0
  421. package/src/persistence/PrismaStore.ts +127 -0
  422. package/src/persistence/RedisStore.ts +90 -0
  423. package/src/persistence/SQLiteStore.ts +103 -0
  424. package/src/persistence/sessionRow.ts +45 -0
  425. package/src/providers/DeepSeekProvider.ts +8 -3
  426. package/src/providers/GeminiProvider.ts +4 -3
  427. package/src/providers/OpenAICompatibleProvider.ts +6 -0
  428. package/src/providers/OpenRouterProvider.ts +2 -4
  429. package/src/providers/ProviderAdapter.ts +46 -13
  430. package/src/providers/ZaiProvider.ts +6 -4
  431. package/src/types/agent.ts +135 -397
  432. package/src/types/ai.ts +33 -1
  433. package/src/types/compaction.ts +3 -1
  434. package/src/types/errors.ts +13 -16
  435. package/src/types/flow.ts +249 -550
  436. package/src/types/history.ts +7 -20
  437. package/src/types/index.ts +88 -139
  438. package/src/types/session.ts +135 -70
  439. package/src/types/tool.ts +42 -267
  440. package/src/utils/clock.ts +70 -0
  441. package/src/utils/duration.ts +33 -0
  442. package/src/utils/history.ts +3 -2
  443. package/src/utils/index.ts +8 -66
  444. package/src/utils/json.ts +5 -0
  445. package/src/utils/outcomes.ts +56 -0
  446. package/src/utils/phrases.ts +40 -0
  447. package/src/utils/schema.ts +145 -0
  448. package/src/utils/streamingMessage.ts +34 -4
  449. package/src/utils/template.ts +63 -418
  450. package/src/utils/usage.ts +37 -0
  451. package/dist/adapters/MemoryAdapter.d.ts +0 -47
  452. package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
  453. package/dist/adapters/MemoryAdapter.js +0 -204
  454. package/dist/adapters/MemoryAdapter.js.map +0 -1
  455. package/dist/adapters/MongoAdapter.d.ts +0 -97
  456. package/dist/adapters/MongoAdapter.d.ts.map +0 -1
  457. package/dist/adapters/MongoAdapter.js +0 -196
  458. package/dist/adapters/MongoAdapter.js.map +0 -1
  459. package/dist/adapters/OpenSearchAdapter.d.ts +0 -169
  460. package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
  461. package/dist/adapters/OpenSearchAdapter.js +0 -471
  462. package/dist/adapters/OpenSearchAdapter.js.map +0 -1
  463. package/dist/adapters/PostgreSQLAdapter.d.ts +0 -85
  464. package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  465. package/dist/adapters/PostgreSQLAdapter.js +0 -308
  466. package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
  467. package/dist/adapters/PrismaAdapter.d.ts +0 -115
  468. package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
  469. package/dist/adapters/PrismaAdapter.js +0 -406
  470. package/dist/adapters/PrismaAdapter.js.map +0 -1
  471. package/dist/adapters/RedisAdapter.d.ts +0 -72
  472. package/dist/adapters/RedisAdapter.d.ts.map +0 -1
  473. package/dist/adapters/RedisAdapter.js +0 -286
  474. package/dist/adapters/RedisAdapter.js.map +0 -1
  475. package/dist/adapters/SQLiteAdapter.d.ts +0 -86
  476. package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
  477. package/dist/adapters/SQLiteAdapter.js +0 -337
  478. package/dist/adapters/SQLiteAdapter.js.map +0 -1
  479. package/dist/adapters/index.d.ts +0 -17
  480. package/dist/adapters/index.d.ts.map +0 -1
  481. package/dist/adapters/index.js +0 -11
  482. package/dist/adapters/index.js.map +0 -1
  483. package/dist/adapters/sessionRow.d.ts +0 -22
  484. package/dist/adapters/sessionRow.d.ts.map +0 -1
  485. package/dist/adapters/sessionRow.js +0 -48
  486. package/dist/adapters/sessionRow.js.map +0 -1
  487. package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
  488. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  489. package/dist/cjs/adapters/MemoryAdapter.js +0 -208
  490. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  491. package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
  492. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  493. package/dist/cjs/adapters/MongoAdapter.js +0 -200
  494. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  495. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
  496. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  497. package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
  498. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  499. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
  500. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  501. package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
  502. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  503. package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
  504. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  505. package/dist/cjs/adapters/PrismaAdapter.js +0 -410
  506. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  507. package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
  508. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  509. package/dist/cjs/adapters/RedisAdapter.js +0 -290
  510. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  511. package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
  512. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  513. package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
  514. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  515. package/dist/cjs/adapters/index.d.ts +0 -17
  516. package/dist/cjs/adapters/index.d.ts.map +0 -1
  517. package/dist/cjs/adapters/index.js +0 -21
  518. package/dist/cjs/adapters/index.js.map +0 -1
  519. package/dist/cjs/adapters/sessionRow.d.ts +0 -22
  520. package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
  521. package/dist/cjs/adapters/sessionRow.js +0 -52
  522. package/dist/cjs/adapters/sessionRow.js.map +0 -1
  523. package/dist/cjs/constants/index.d.ts +0 -1
  524. package/dist/cjs/constants/index.d.ts.map +0 -1
  525. package/dist/cjs/constants/index.js +0 -4
  526. package/dist/cjs/constants/index.js.map +0 -1
  527. package/dist/cjs/core/AutoChainExecutor.d.ts +0 -97
  528. package/dist/cjs/core/AutoChainExecutor.d.ts.map +0 -1
  529. package/dist/cjs/core/AutoChainExecutor.js +0 -288
  530. package/dist/cjs/core/AutoChainExecutor.js.map +0 -1
  531. package/dist/cjs/core/BranchEvaluator.d.ts +0 -55
  532. package/dist/cjs/core/BranchEvaluator.d.ts.map +0 -1
  533. package/dist/cjs/core/BranchEvaluator.js +0 -125
  534. package/dist/cjs/core/BranchEvaluator.js.map +0 -1
  535. package/dist/cjs/core/DirectiveChainTracker.d.ts +0 -49
  536. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +0 -1
  537. package/dist/cjs/core/DirectiveChainTracker.js +0 -121
  538. package/dist/cjs/core/DirectiveChainTracker.js.map +0 -1
  539. package/dist/cjs/core/Events.d.ts +0 -26
  540. package/dist/cjs/core/Events.d.ts.map +0 -1
  541. package/dist/cjs/core/Events.js +0 -144
  542. package/dist/cjs/core/Events.js.map +0 -1
  543. package/dist/cjs/core/Flow.d.ts +0 -183
  544. package/dist/cjs/core/Flow.d.ts.map +0 -1
  545. package/dist/cjs/core/Flow.js +0 -551
  546. package/dist/cjs/core/Flow.js.map +0 -1
  547. package/dist/cjs/core/FlowRouter.d.ts +0 -183
  548. package/dist/cjs/core/FlowRouter.d.ts.map +0 -1
  549. package/dist/cjs/core/FlowRouter.js +0 -1047
  550. package/dist/cjs/core/FlowRouter.js.map +0 -1
  551. package/dist/cjs/core/PersistenceManager.d.ts +0 -114
  552. package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
  553. package/dist/cjs/core/PersistenceManager.js +0 -336
  554. package/dist/cjs/core/PersistenceManager.js.map +0 -1
  555. package/dist/cjs/core/PromptComposer.d.ts +0 -47
  556. package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
  557. package/dist/cjs/core/PromptComposer.js +0 -397
  558. package/dist/cjs/core/PromptComposer.js.map +0 -1
  559. package/dist/cjs/core/PromptSectionCache.d.ts +0 -48
  560. package/dist/cjs/core/PromptSectionCache.d.ts.map +0 -1
  561. package/dist/cjs/core/PromptSectionCache.js +0 -108
  562. package/dist/cjs/core/PromptSectionCache.js.map +0 -1
  563. package/dist/cjs/core/ResponseEngine.d.ts +0 -43
  564. package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
  565. package/dist/cjs/core/ResponseEngine.js +0 -235
  566. package/dist/cjs/core/ResponseEngine.js.map +0 -1
  567. package/dist/cjs/core/ResponseGenerationError.d.ts +0 -30
  568. package/dist/cjs/core/ResponseGenerationError.d.ts.map +0 -1
  569. package/dist/cjs/core/ResponseGenerationError.js +0 -35
  570. package/dist/cjs/core/ResponseGenerationError.js.map +0 -1
  571. package/dist/cjs/core/ResponseModal.d.ts +0 -305
  572. package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
  573. package/dist/cjs/core/ResponseModal.js +0 -1414
  574. package/dist/cjs/core/ResponseModal.js.map +0 -1
  575. package/dist/cjs/core/ResponsePipeline.d.ts +0 -220
  576. package/dist/cjs/core/ResponsePipeline.d.ts.map +0 -1
  577. package/dist/cjs/core/ResponsePipeline.js +0 -1040
  578. package/dist/cjs/core/ResponsePipeline.js.map +0 -1
  579. package/dist/cjs/core/SessionFinalizer.d.ts +0 -34
  580. package/dist/cjs/core/SessionFinalizer.d.ts.map +0 -1
  581. package/dist/cjs/core/SessionFinalizer.js +0 -88
  582. package/dist/cjs/core/SessionFinalizer.js.map +0 -1
  583. package/dist/cjs/core/SessionManager.d.ts +0 -112
  584. package/dist/cjs/core/SessionManager.d.ts.map +0 -1
  585. package/dist/cjs/core/SessionManager.js +0 -308
  586. package/dist/cjs/core/SessionManager.js.map +0 -1
  587. package/dist/cjs/core/SignalCoordinator.d.ts +0 -103
  588. package/dist/cjs/core/SignalCoordinator.d.ts.map +0 -1
  589. package/dist/cjs/core/SignalCoordinator.js +0 -207
  590. package/dist/cjs/core/SignalCoordinator.js.map +0 -1
  591. package/dist/cjs/core/SignalEvaluator.d.ts +0 -86
  592. package/dist/cjs/core/SignalEvaluator.d.ts.map +0 -1
  593. package/dist/cjs/core/SignalEvaluator.js +0 -319
  594. package/dist/cjs/core/SignalEvaluator.js.map +0 -1
  595. package/dist/cjs/core/SignalProcessor.d.ts +0 -152
  596. package/dist/cjs/core/SignalProcessor.d.ts.map +0 -1
  597. package/dist/cjs/core/SignalProcessor.js +0 -505
  598. package/dist/cjs/core/SignalProcessor.js.map +0 -1
  599. package/dist/cjs/core/Step.d.ts +0 -184
  600. package/dist/cjs/core/Step.d.ts.map +0 -1
  601. package/dist/cjs/core/Step.js +0 -599
  602. package/dist/cjs/core/Step.js.map +0 -1
  603. package/dist/cjs/core/StepLifecycle.d.ts +0 -43
  604. package/dist/cjs/core/StepLifecycle.d.ts.map +0 -1
  605. package/dist/cjs/core/StepLifecycle.js +0 -180
  606. package/dist/cjs/core/StepLifecycle.js.map +0 -1
  607. package/dist/cjs/core/StreamingToolExecutor.d.ts +0 -142
  608. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +0 -1
  609. package/dist/cjs/core/StreamingToolExecutor.js +0 -490
  610. package/dist/cjs/core/StreamingToolExecutor.js.map +0 -1
  611. package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
  612. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
  613. package/dist/cjs/core/ToolLoopExecutor.js +0 -568
  614. package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
  615. package/dist/cjs/core/ToolManager.d.ts +0 -250
  616. package/dist/cjs/core/ToolManager.d.ts.map +0 -1
  617. package/dist/cjs/core/ToolManager.js +0 -1104
  618. package/dist/cjs/core/ToolManager.js.map +0 -1
  619. package/dist/cjs/core/createAgent.d.ts +0 -35
  620. package/dist/cjs/core/createAgent.d.ts.map +0 -1
  621. package/dist/cjs/core/createAgent.js +0 -39
  622. package/dist/cjs/core/createAgent.js.map +0 -1
  623. package/dist/cjs/core/flow-namespace.d.ts +0 -64
  624. package/dist/cjs/core/flow-namespace.d.ts.map +0 -1
  625. package/dist/cjs/core/flow-namespace.js +0 -182
  626. package/dist/cjs/core/flow-namespace.js.map +0 -1
  627. package/dist/cjs/core/toolGates.d.ts +0 -24
  628. package/dist/cjs/core/toolGates.d.ts.map +0 -1
  629. package/dist/cjs/core/toolGates.js +0 -52
  630. package/dist/cjs/core/toolGates.js.map +0 -1
  631. package/dist/cjs/types/persistence.d.ts +0 -254
  632. package/dist/cjs/types/persistence.d.ts.map +0 -1
  633. package/dist/cjs/types/persistence.js +0 -7
  634. package/dist/cjs/types/persistence.js.map +0 -1
  635. package/dist/cjs/types/prompt-cache.d.ts +0 -15
  636. package/dist/cjs/types/prompt-cache.d.ts.map +0 -1
  637. package/dist/cjs/types/prompt-cache.js +0 -6
  638. package/dist/cjs/types/prompt-cache.js.map +0 -1
  639. package/dist/cjs/types/signals.d.ts +0 -263
  640. package/dist/cjs/types/signals.d.ts.map +0 -1
  641. package/dist/cjs/types/signals.js +0 -11
  642. package/dist/cjs/types/signals.js.map +0 -1
  643. package/dist/cjs/types/template.d.ts +0 -84
  644. package/dist/cjs/types/template.d.ts.map +0 -1
  645. package/dist/cjs/types/template.js +0 -3
  646. package/dist/cjs/types/template.js.map +0 -1
  647. package/dist/cjs/utils/condition.d.ts +0 -63
  648. package/dist/cjs/utils/condition.d.ts.map +0 -1
  649. package/dist/cjs/utils/condition.js +0 -239
  650. package/dist/cjs/utils/condition.js.map +0 -1
  651. package/dist/cjs/utils/event.d.ts +0 -6
  652. package/dist/cjs/utils/event.d.ts.map +0 -1
  653. package/dist/cjs/utils/event.js +0 -20
  654. package/dist/cjs/utils/event.js.map +0 -1
  655. package/dist/cjs/utils/id.d.ts +0 -33
  656. package/dist/cjs/utils/id.d.ts.map +0 -1
  657. package/dist/cjs/utils/id.js +0 -84
  658. package/dist/cjs/utils/id.js.map +0 -1
  659. package/dist/cjs/utils/serialize.d.ts +0 -36
  660. package/dist/cjs/utils/serialize.d.ts.map +0 -1
  661. package/dist/cjs/utils/serialize.js +0 -77
  662. package/dist/cjs/utils/serialize.js.map +0 -1
  663. package/dist/cjs/utils/session.d.ts +0 -124
  664. package/dist/cjs/utils/session.d.ts.map +0 -1
  665. package/dist/cjs/utils/session.js +0 -396
  666. package/dist/cjs/utils/session.js.map +0 -1
  667. package/dist/constants/index.d.ts +0 -2
  668. package/dist/constants/index.d.ts.map +0 -1
  669. package/dist/constants/index.js +0 -4
  670. package/dist/constants/index.js.map +0 -1
  671. package/dist/core/AutoChainExecutor.d.ts +0 -97
  672. package/dist/core/AutoChainExecutor.d.ts.map +0 -1
  673. package/dist/core/AutoChainExecutor.js +0 -284
  674. package/dist/core/AutoChainExecutor.js.map +0 -1
  675. package/dist/core/BranchEvaluator.d.ts +0 -55
  676. package/dist/core/BranchEvaluator.d.ts.map +0 -1
  677. package/dist/core/BranchEvaluator.js +0 -121
  678. package/dist/core/BranchEvaluator.js.map +0 -1
  679. package/dist/core/DirectiveChainTracker.d.ts +0 -49
  680. package/dist/core/DirectiveChainTracker.d.ts.map +0 -1
  681. package/dist/core/DirectiveChainTracker.js +0 -117
  682. package/dist/core/DirectiveChainTracker.js.map +0 -1
  683. package/dist/core/Events.d.ts +0 -26
  684. package/dist/core/Events.d.ts.map +0 -1
  685. package/dist/core/Events.js +0 -137
  686. package/dist/core/Events.js.map +0 -1
  687. package/dist/core/Flow.d.ts +0 -183
  688. package/dist/core/Flow.d.ts.map +0 -1
  689. package/dist/core/Flow.js +0 -547
  690. package/dist/core/Flow.js.map +0 -1
  691. package/dist/core/FlowRouter.d.ts +0 -183
  692. package/dist/core/FlowRouter.d.ts.map +0 -1
  693. package/dist/core/FlowRouter.js +0 -1043
  694. package/dist/core/FlowRouter.js.map +0 -1
  695. package/dist/core/PersistenceManager.d.ts +0 -114
  696. package/dist/core/PersistenceManager.d.ts.map +0 -1
  697. package/dist/core/PersistenceManager.js +0 -332
  698. package/dist/core/PersistenceManager.js.map +0 -1
  699. package/dist/core/PromptComposer.d.ts +0 -47
  700. package/dist/core/PromptComposer.d.ts.map +0 -1
  701. package/dist/core/PromptComposer.js +0 -393
  702. package/dist/core/PromptComposer.js.map +0 -1
  703. package/dist/core/PromptSectionCache.d.ts +0 -48
  704. package/dist/core/PromptSectionCache.d.ts.map +0 -1
  705. package/dist/core/PromptSectionCache.js +0 -104
  706. package/dist/core/PromptSectionCache.js.map +0 -1
  707. package/dist/core/ResponseEngine.d.ts +0 -43
  708. package/dist/core/ResponseEngine.d.ts.map +0 -1
  709. package/dist/core/ResponseEngine.js +0 -231
  710. package/dist/core/ResponseEngine.js.map +0 -1
  711. package/dist/core/ResponseGenerationError.d.ts +0 -30
  712. package/dist/core/ResponseGenerationError.d.ts.map +0 -1
  713. package/dist/core/ResponseGenerationError.js +0 -31
  714. package/dist/core/ResponseGenerationError.js.map +0 -1
  715. package/dist/core/ResponseModal.d.ts +0 -305
  716. package/dist/core/ResponseModal.d.ts.map +0 -1
  717. package/dist/core/ResponseModal.js +0 -1410
  718. package/dist/core/ResponseModal.js.map +0 -1
  719. package/dist/core/ResponsePipeline.d.ts +0 -220
  720. package/dist/core/ResponsePipeline.d.ts.map +0 -1
  721. package/dist/core/ResponsePipeline.js +0 -1035
  722. package/dist/core/ResponsePipeline.js.map +0 -1
  723. package/dist/core/SessionFinalizer.d.ts +0 -34
  724. package/dist/core/SessionFinalizer.d.ts.map +0 -1
  725. package/dist/core/SessionFinalizer.js +0 -84
  726. package/dist/core/SessionFinalizer.js.map +0 -1
  727. package/dist/core/SessionManager.d.ts +0 -112
  728. package/dist/core/SessionManager.d.ts.map +0 -1
  729. package/dist/core/SessionManager.js +0 -301
  730. package/dist/core/SessionManager.js.map +0 -1
  731. package/dist/core/SignalCoordinator.d.ts +0 -103
  732. package/dist/core/SignalCoordinator.d.ts.map +0 -1
  733. package/dist/core/SignalCoordinator.js +0 -203
  734. package/dist/core/SignalCoordinator.js.map +0 -1
  735. package/dist/core/SignalEvaluator.d.ts +0 -86
  736. package/dist/core/SignalEvaluator.d.ts.map +0 -1
  737. package/dist/core/SignalEvaluator.js +0 -312
  738. package/dist/core/SignalEvaluator.js.map +0 -1
  739. package/dist/core/SignalProcessor.d.ts +0 -152
  740. package/dist/core/SignalProcessor.d.ts.map +0 -1
  741. package/dist/core/SignalProcessor.js +0 -498
  742. package/dist/core/SignalProcessor.js.map +0 -1
  743. package/dist/core/Step.d.ts +0 -184
  744. package/dist/core/Step.d.ts.map +0 -1
  745. package/dist/core/Step.js +0 -594
  746. package/dist/core/Step.js.map +0 -1
  747. package/dist/core/StepLifecycle.d.ts +0 -43
  748. package/dist/core/StepLifecycle.d.ts.map +0 -1
  749. package/dist/core/StepLifecycle.js +0 -176
  750. package/dist/core/StepLifecycle.js.map +0 -1
  751. package/dist/core/StreamingToolExecutor.d.ts +0 -142
  752. package/dist/core/StreamingToolExecutor.d.ts.map +0 -1
  753. package/dist/core/StreamingToolExecutor.js +0 -483
  754. package/dist/core/StreamingToolExecutor.js.map +0 -1
  755. package/dist/core/ToolLoopExecutor.d.ts +0 -133
  756. package/dist/core/ToolLoopExecutor.d.ts.map +0 -1
  757. package/dist/core/ToolLoopExecutor.js +0 -564
  758. package/dist/core/ToolLoopExecutor.js.map +0 -1
  759. package/dist/core/ToolManager.d.ts +0 -250
  760. package/dist/core/ToolManager.d.ts.map +0 -1
  761. package/dist/core/ToolManager.js +0 -1098
  762. package/dist/core/ToolManager.js.map +0 -1
  763. package/dist/core/createAgent.d.ts +0 -35
  764. package/dist/core/createAgent.d.ts.map +0 -1
  765. package/dist/core/createAgent.js +0 -36
  766. package/dist/core/createAgent.js.map +0 -1
  767. package/dist/core/flow-namespace.d.ts +0 -64
  768. package/dist/core/flow-namespace.d.ts.map +0 -1
  769. package/dist/core/flow-namespace.js +0 -179
  770. package/dist/core/flow-namespace.js.map +0 -1
  771. package/dist/core/toolGates.d.ts +0 -24
  772. package/dist/core/toolGates.d.ts.map +0 -1
  773. package/dist/core/toolGates.js +0 -49
  774. package/dist/core/toolGates.js.map +0 -1
  775. package/dist/types/persistence.d.ts +0 -254
  776. package/dist/types/persistence.d.ts.map +0 -1
  777. package/dist/types/persistence.js +0 -6
  778. package/dist/types/persistence.js.map +0 -1
  779. package/dist/types/prompt-cache.d.ts +0 -15
  780. package/dist/types/prompt-cache.d.ts.map +0 -1
  781. package/dist/types/prompt-cache.js +0 -5
  782. package/dist/types/prompt-cache.js.map +0 -1
  783. package/dist/types/signals.d.ts +0 -263
  784. package/dist/types/signals.d.ts.map +0 -1
  785. package/dist/types/signals.js +0 -10
  786. package/dist/types/signals.js.map +0 -1
  787. package/dist/types/template.d.ts +0 -84
  788. package/dist/types/template.d.ts.map +0 -1
  789. package/dist/types/template.js +0 -2
  790. package/dist/types/template.js.map +0 -1
  791. package/dist/utils/condition.d.ts +0 -63
  792. package/dist/utils/condition.d.ts.map +0 -1
  793. package/dist/utils/condition.js +0 -230
  794. package/dist/utils/condition.js.map +0 -1
  795. package/dist/utils/event.d.ts +0 -6
  796. package/dist/utils/event.d.ts.map +0 -1
  797. package/dist/utils/event.js +0 -17
  798. package/dist/utils/event.js.map +0 -1
  799. package/dist/utils/id.d.ts +0 -33
  800. package/dist/utils/id.d.ts.map +0 -1
  801. package/dist/utils/id.js +0 -77
  802. package/dist/utils/id.js.map +0 -1
  803. package/dist/utils/serialize.d.ts +0 -36
  804. package/dist/utils/serialize.d.ts.map +0 -1
  805. package/dist/utils/serialize.js +0 -72
  806. package/dist/utils/serialize.js.map +0 -1
  807. package/dist/utils/session.d.ts +0 -124
  808. package/dist/utils/session.d.ts.map +0 -1
  809. package/dist/utils/session.js +0 -379
  810. package/dist/utils/session.js.map +0 -1
  811. package/docs/concepts/directives.md +0 -369
  812. package/docs/reference/adapters.md +0 -543
  813. package/docs/reference/create-agent.md +0 -216
  814. package/docs/reference/directive.md +0 -242
  815. package/docs/reference/signals.md +0 -368
  816. package/examples/02-data-extraction.ts +0 -90
  817. package/examples/05-branching.ts +0 -140
  818. package/examples/06-flow-control.ts +0 -103
  819. package/examples/08-persistence.ts +0 -98
  820. package/examples/09-signals.ts +0 -144
  821. package/src/adapters/MemoryAdapter.ts +0 -281
  822. package/src/adapters/MongoAdapter.ts +0 -341
  823. package/src/adapters/OpenSearchAdapter.ts +0 -693
  824. package/src/adapters/PostgreSQLAdapter.ts +0 -487
  825. package/src/adapters/PrismaAdapter.ts +0 -617
  826. package/src/adapters/RedisAdapter.ts +0 -439
  827. package/src/adapters/SQLiteAdapter.ts +0 -496
  828. package/src/adapters/index.ts +0 -43
  829. package/src/adapters/sessionRow.ts +0 -57
  830. package/src/constants/index.ts +0 -2
  831. package/src/core/AutoChainExecutor.ts +0 -397
  832. package/src/core/BranchEvaluator.ts +0 -161
  833. package/src/core/DirectiveChainTracker.ts +0 -144
  834. package/src/core/Events.ts +0 -164
  835. package/src/core/Flow.ts +0 -665
  836. package/src/core/FlowRouter.ts +0 -1540
  837. package/src/core/PersistenceManager.ts +0 -446
  838. package/src/core/PromptComposer.ts +0 -448
  839. package/src/core/PromptSectionCache.ts +0 -125
  840. package/src/core/ResponseEngine.ts +0 -338
  841. package/src/core/ResponseGenerationError.ts +0 -53
  842. package/src/core/ResponseModal.ts +0 -1902
  843. package/src/core/ResponsePipeline.ts +0 -1404
  844. package/src/core/SessionFinalizer.ts +0 -108
  845. package/src/core/SessionManager.ts +0 -372
  846. package/src/core/SignalCoordinator.ts +0 -263
  847. package/src/core/SignalEvaluator.ts +0 -404
  848. package/src/core/SignalProcessor.ts +0 -663
  849. package/src/core/Step.ts +0 -782
  850. package/src/core/StepLifecycle.ts +0 -242
  851. package/src/core/StreamingToolExecutor.ts +0 -609
  852. package/src/core/ToolLoopExecutor.ts +0 -749
  853. package/src/core/ToolManager.ts +0 -1379
  854. package/src/core/createAgent.ts +0 -40
  855. package/src/core/flow-namespace.ts +0 -227
  856. package/src/core/toolGates.ts +0 -72
  857. package/src/types/persistence.ts +0 -303
  858. package/src/types/prompt-cache.ts +0 -17
  859. package/src/types/signals.ts +0 -338
  860. package/src/types/template.ts +0 -98
  861. package/src/utils/condition.ts +0 -296
  862. package/src/utils/event.ts +0 -16
  863. package/src/utils/id.ts +0 -91
  864. package/src/utils/serialize.ts +0 -86
  865. package/src/utils/session.ts +0 -501
@@ -1,663 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /**
3
- * SignalProcessor — Orchestration for signal phase execution.
4
- *
5
- * Owns:
6
- * - `behaviorAllowsExecution`: Behavior gating (Algorithm 2)
7
- * - `recordTrigger`: Immutable session update for trigger state
8
- * - `buildSignalContext`: Constructs the handler context (D-Q12 writers)
9
- * - `runPhase` / `runPreSignalPhase` / `runPostSignalPhase`: Phase orchestration (Algorithm 1)
10
- *
11
- * @module SignalProcessor
12
- */
13
-
14
- import type { AiProvider } from "../types/ai.js";
15
- import type { Event } from "../types/history.js";
16
- import { MessageRole as MessageRoleEnum } from "../types/history.js";
17
- import type { SessionState } from "../types/session.js";
18
- import type { Directive } from "../types/flow.js";
19
- import type {
20
- Signal,
21
- SignalContext,
22
- SignalDirective,
23
- SignalFiring,
24
- SignalPredicateContext,
25
- SignalTriggerState,
26
- } from "../types/signals.js";
27
- import type { SignalEvaluator } from "./SignalEvaluator.js";
28
- import { flow } from "./flow-namespace.js";
29
- import { logger } from "../utils/index.js";
30
-
31
- /** Recorded on `SignalFiring.extractionError` when a matched extraction-mode
32
- * signal yields no payload (model omitted the field or returned null). */
33
- const EXTRACTION_MISSING_MESSAGE =
34
- "Signal matched in extraction mode but the classifier returned no extracted payload.";
35
-
36
- // ──────────────────────────────────────────────────────────────────────────────
37
- // behaviorAllowsExecution — Algorithm 2
38
- // ──────────────────────────────────────────────────────────────────────────────
39
-
40
- /**
41
- * Determines whether a signal's behavior gating allows execution this turn.
42
- *
43
- * Algorithm 2 from the design document:
44
- * - `'always'` (or unset) → always allowed
45
- * - `'once'` → allowed only if no prior trigger exists
46
- * - `'cooldown'` → allowed when elapsed time since last trigger >= cooldownMs;
47
- * when `cooldownMs` is missing, treated as `'always'` (misconfigured)
48
- * - Missing trigger (first-time) → allowed regardless of behavior
49
- *
50
- * Pure function; no I/O.
51
- *
52
- * @param signal - The signal definition (with id, behavior, cooldownMs)
53
- * @param trigger - The existing trigger state from `session.signals.triggers[signal.id]`, or undefined
54
- * @returns true if the signal is allowed to execute
55
- *
56
- * @requirements 5.1, 5.2, 5.3, 5.4
57
- */
58
- export function behaviorAllowsExecution<TContext = unknown, TData = unknown>(
59
- signal: Signal<TContext, TData, any>,
60
- trigger: SignalTriggerState | undefined,
61
- ): boolean {
62
- // No prior trigger → always allowed (first-time execution)
63
- if (trigger == null) return true;
64
-
65
- const behavior = signal.behavior ?? 'always';
66
-
67
- if (behavior === 'always') return true;
68
- if (behavior === 'once') return false;
69
-
70
- if (behavior === 'cooldown') {
71
- // Misconfigured: cooldown without cooldownMs → treat as 'always'
72
- if (signal.cooldownMs == null) return true;
73
-
74
- const lastTriggeredTime = trigger.lastTriggeredAt instanceof Date
75
- ? trigger.lastTriggeredAt.getTime()
76
- : new Date(trigger.lastTriggeredAt).getTime();
77
-
78
- const elapsedMs = Date.now() - lastTriggeredTime;
79
- return elapsedMs >= signal.cooldownMs;
80
- }
81
-
82
- // Unknown behavior value → allow (defensive)
83
- return true;
84
- }
85
-
86
- // ──────────────────────────────────────────────────────────────────────────────
87
- // recordTrigger — Immutable session update
88
- // ──────────────────────────────────────────────────────────────────────────────
89
-
90
- /**
91
- * Records a signal trigger on the session, returning a new session object
92
- * (immutable update — never mutates input).
93
- *
94
- * - On first trigger: sets `firstTriggeredAt` and `lastTriggeredAt` to now,
95
- * `count = 1`, plus `lastReason` and `lastPhase`.
96
- * - On subsequent triggers: leaves `firstTriggeredAt` unchanged, increments
97
- * `count`, updates `lastTriggeredAt`, `lastReason`, `lastPhase`.
98
- *
99
- * @param session - Current session state (not mutated)
100
- * @param signal - The signal that fired
101
- * @param reason - The match reason (AI rationale, 'code-only', or 'unconditional')
102
- * @param phase - The phase in which the signal fired
103
- * @returns A new session with updated `signals.triggers[signal.id]`
104
- *
105
- * @requirements 10.1, 10.2
106
- */
107
- export function recordTrigger<TData = unknown>(
108
- session: SessionState<TData>,
109
- signal: Signal<any, TData, any>,
110
- reason: string,
111
- phase: 'pre' | 'post',
112
- ): SessionState<TData> {
113
- const signalId = signal.id ?? 'unknown';
114
- const now = new Date();
115
-
116
- const existingTriggers = session.signals?.triggers ?? {};
117
- const existingTrigger = existingTriggers[signalId];
118
-
119
- let updatedTrigger: SignalTriggerState;
120
-
121
- if (existingTrigger == null) {
122
- // First trigger
123
- updatedTrigger = {
124
- firstTriggeredAt: now,
125
- lastTriggeredAt: now,
126
- count: 1,
127
- lastReason: reason,
128
- lastPhase: phase,
129
- };
130
- } else {
131
- // Subsequent trigger — preserve firstTriggeredAt, increment count
132
- updatedTrigger = {
133
- firstTriggeredAt: existingTrigger.firstTriggeredAt,
134
- lastTriggeredAt: now,
135
- count: existingTrigger.count + 1,
136
- lastReason: reason,
137
- lastPhase: phase,
138
- };
139
- }
140
-
141
- return {
142
- ...session,
143
- signals: {
144
- ...session.signals,
145
- triggers: {
146
- ...existingTriggers,
147
- [signalId]: updatedTrigger,
148
- },
149
- },
150
- };
151
- }
152
-
153
- // ──────────────────────────────────────────────────────────────────────────────
154
- // buildSignalContext — Constructs the handler context
155
- // ──────────────────────────────────────────────────────────────────────────────
156
-
157
- /**
158
- * Parameters for building the SignalContext.
159
- */
160
- export interface BuildSignalContextParams<TContext = unknown, TData = unknown, TExtract = void> {
161
- signal: Signal<TContext, TData, TExtract>;
162
- reason: string;
163
- extracted: TExtract extends void ? undefined : TExtract;
164
- phase: 'pre' | 'post';
165
- session: SessionState<TData>;
166
- context: TContext;
167
- history: Event[];
168
- /** Turn-local directive bus — `dispatch` pushes onto this array. */
169
- directiveBus: SignalDirective<TContext, TData>[];
170
- /** Session updater — called when handler invokes `updateContext`. */
171
- onUpdateSession: (updatedSession: SessionState<TData>) => void;
172
- }
173
-
174
- /**
175
- * Builds the `SignalContext` passed to signal handlers.
176
- *
177
- * - `updateContext` and `updateData` replicate the ToolContext D-Q12 writer
178
- * pattern: shallow-merge partial updates into the session, call the
179
- * `onUpdateSession` callback so the processor can track mutations.
180
- * - `dispatch` pushes a `SignalDirective` onto the turn-local bus.
181
- * - `lastUserMessage` is derived from the last user-role event in history.
182
- * - `triggeredAt` is set to `new Date()` at construction time.
183
- * - `matched` is always `true` (literal type).
184
- *
185
- * @requirements 6.1, 6.2, 6.3
186
- */
187
- export function buildSignalContext<TContext = unknown, TData = unknown, TExtract = void>(
188
- params: BuildSignalContextParams<TContext, TData, TExtract>,
189
- ): SignalContext<TContext, TData, TExtract> {
190
- const {
191
- signal,
192
- reason,
193
- extracted,
194
- phase,
195
- session,
196
- context,
197
- history,
198
- directiveBus,
199
- onUpdateSession,
200
- } = params;
201
-
202
- // Derive lastUserMessage from the last user-role event
203
- const lastUserMessage = deriveLastUserMessage(history);
204
-
205
- // D-Q12 contract writers — same signature as ToolContext
206
- const updateContext = (updates: Partial<TContext>): Promise<void> => {
207
- // Context is agent-level (not on session directly). Push a contextUpdate
208
- // directive so the pipeline applies the merge after handler returns.
209
- directiveBus.push({ contextUpdate: updates } as SignalDirective<TContext, TData>);
210
- return Promise.resolve();
211
- };
212
-
213
- const updateData = (updates: Partial<TData>): Promise<void> => {
214
- const updatedData = { ...session.data, ...updates };
215
- const updatedSession: SessionState<TData> = {
216
- ...session,
217
- data: updatedData,
218
- };
219
- onUpdateSession(updatedSession);
220
- // Also push a dataUpdate directive for the pipeline
221
- directiveBus.push({ dataUpdate: updates } as SignalDirective<TContext, TData>);
222
- return Promise.resolve();
223
- };
224
-
225
- const dispatch = (directive: SignalDirective<TContext, TData>): void => {
226
- directiveBus.push(directive);
227
- };
228
-
229
- return {
230
- signal,
231
- phase,
232
- matched: true,
233
- reason,
234
- extracted,
235
- session,
236
- context,
237
- data: session.data,
238
- history,
239
- lastUserMessage,
240
- triggeredAt: new Date(),
241
- updateContext,
242
- updateData,
243
- dispatch,
244
- } as SignalContext<TContext, TData, TExtract>;
245
- }
246
-
247
- // ──────────────────────────────────────────────────────────────────────────────
248
- // Internal helpers
249
- // ──────────────────────────────────────────────────────────────────────────────
250
-
251
- /**
252
- * Extracts the last user message from history events.
253
- * Walks backward to find the most recent user-role message event.
254
- */
255
- function deriveLastUserMessage(history: Event[]): string | undefined {
256
- for (let i = history.length - 1; i >= 0; i--) {
257
- const event = history[i];
258
- // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
259
- if (event.source === MessageRoleEnum.USER && event.kind === 'message') {
260
- const data = event.data as { message?: string; participant?: { display_name?: string } };
261
- if (data?.message) {
262
- return data.message;
263
- }
264
- }
265
- }
266
- return undefined;
267
- }
268
-
269
- // ──────────────────────────────────────────────────────────────────────────────
270
- // SignalProcessor — Full Algorithm 1 implementation
271
- // ──────────────────────────────────────────────────────────────────────────────
272
-
273
- /** Internal matched-signal entry carried through the pipeline. */
274
- interface MatchedEntry<TContext, TData> {
275
- signal: Signal<TContext, TData, any>;
276
- reason: string;
277
- extracted?: unknown;
278
- /** Original index in the signals array (declaration order). */
279
- declarationIndex: number;
280
- }
281
-
282
- /**
283
- * SignalProcessor — Orchestrates signal phase execution.
284
- *
285
- * Constructed only when `options.signals` is non-empty (Requirement 2.3).
286
- * Owns the full Algorithm 1 lifecycle: filtering, gating, evaluation,
287
- * handler invocation, directive collection, and state persistence.
288
- */
289
- export class SignalProcessor<TContext = unknown, TData = unknown> {
290
- constructor(
291
- private readonly signals: Signal<TContext, TData, any>[],
292
- private readonly provider: AiProvider,
293
- private readonly evaluator: SignalEvaluator<TContext, TData>,
294
- private readonly options: { batchSize: number },
295
- ) { }
296
-
297
- /** @internal Expose internals for testability. */
298
- get _internals() {
299
- return { signals: this.signals, provider: this.provider, evaluator: this.evaluator, options: this.options };
300
- }
301
-
302
- /**
303
- * Pre-signal phase. Delegates to `runPhase('pre', ...)`.
304
- * Return type narrows `mergedDirective` to `Directive | undefined`.
305
- */
306
- async runPreSignalPhase(params: {
307
- session: SessionState<TData>;
308
- history: Event[];
309
- context: TContext;
310
- }): Promise<{
311
- mergedDirective?: Directive<TContext, TData>;
312
- firings: SignalFiring<TContext, TData>[];
313
- updatedSession: SessionState<TData>;
314
- }> {
315
- return await this.runPhase('pre', params);
316
- }
317
-
318
- /**
319
- * Post-signal phase. Delegates to `runPhase('post', ...)`.
320
- * Return type narrows `mergedDirective` to `Directive | undefined`.
321
- * Pre-LLM-only fields (`appendPrompt`, `injectTools`, `halt`) are
322
- * already dropped inside `runPhase` for the post phase.
323
- */
324
- async runPostSignalPhase(params: {
325
- session: SessionState<TData>;
326
- history: Event[];
327
- context: TContext;
328
- }): Promise<{
329
- mergedDirective?: Directive<TContext, TData>;
330
- firings: SignalFiring<TContext, TData>[];
331
- updatedSession: SessionState<TData>;
332
- }> {
333
- return await this.runPhase('post', params);
334
- }
335
-
336
- // ──────────────────────────────────────────────────────────────────────────
337
- // Private: Algorithm 1 — Phase orchestration
338
- // ──────────────────────────────────────────────────────────────────────────
339
-
340
- private async runPhase(
341
- phase: 'pre' | 'post',
342
- params: { session: SessionState<TData>; history: Event[]; context: TContext },
343
- ): Promise<{
344
- mergedDirective?: Directive<TContext, TData>;
345
- firings: SignalFiring<TContext, TData>[];
346
- updatedSession: SessionState<TData>;
347
- }> {
348
- const { session, history, context } = params;
349
-
350
- // ── STEP 0: zero-cost fast path ──────────────────────────────────────
351
- if (this.signals.length === 0) {
352
- return { firings: [], updatedSession: session };
353
- }
354
-
355
- // ── STEP 1: filter eligible signals for this phase ───────────────────
356
- const eligible = this.signals.filter(
357
- (s) => s.enabled !== false && (s.phase === phase || s.phase === 'both'),
358
- );
359
- if (eligible.length === 0) {
360
- return { firings: [], updatedSession: session };
361
- }
362
-
363
- logger.debug(`[Signals] Phase "${phase}" eligible signals: [${eligible.map(s => s.id ?? 'unknown').join(', ')}]`);
364
-
365
- // ── STEP 2: filter by behavior gating ────────────────────────────────
366
- const gated = eligible.filter((s) =>
367
- behaviorAllowsExecution(s, session.signals?.triggers?.[s.id ?? 'unknown']),
368
- );
369
- if (gated.length === 0) {
370
- return { firings: [], updatedSession: session };
371
- }
372
-
373
- logger.debug(`[Signals] Phase "${phase}" after behavior gating: [${gated.map(s => s.id ?? 'unknown').join(', ')}]`);
374
-
375
- // ── STEP 3: partition by evaluation mode ─────────────────────────────
376
- const unconditional: Signal<TContext, TData, any>[] = [];
377
- const codeOnly: Signal<TContext, TData, any>[] = [];
378
- const llmConditioned: Signal<TContext, TData, any>[] = [];
379
-
380
- for (const s of gated) {
381
- if (s.when != null) {
382
- llmConditioned.push(s);
383
- } else if (s.if != null) {
384
- codeOnly.push(s);
385
- } else {
386
- unconditional.push(s);
387
- }
388
- }
389
-
390
- // Build predicate context (shared across code-only and if-gating)
391
- const predicateCtx: SignalPredicateContext<TContext, TData> = {
392
- data: session.data,
393
- context,
394
- session,
395
- history,
396
- };
397
-
398
- // ── STEP 4: unconditional signals — always match ─────────────────────
399
- const matched: MatchedEntry<TContext, TData>[] = [];
400
-
401
- for (const s of unconditional) {
402
- matched.push({
403
- signal: s,
404
- reason: 'unconditional',
405
- declarationIndex: this.signals.indexOf(s),
406
- });
407
- }
408
-
409
- // ── STEP 5: code-only signals → evaluateIf ──────────────────────────
410
- for (const s of codeOnly) {
411
- const passes = await this.evaluator.evaluateIf(s.if!, predicateCtx);
412
- if (passes) {
413
- matched.push({
414
- signal: s,
415
- reason: 'code-only',
416
- declarationIndex: this.signals.indexOf(s),
417
- });
418
- }
419
- }
420
-
421
- // ── STEP 6: LLM-conditioned signals ─────────────────────────────────
422
- if (llmConditioned.length > 0) {
423
- // Gate by `if` first to skip token cost
424
- const ifGated: Signal<TContext, TData, any>[] = [];
425
- for (const s of llmConditioned) {
426
- if (s.if == null) {
427
- ifGated.push(s);
428
- } else {
429
- const passes = await this.evaluator.evaluateIf(s.if, predicateCtx);
430
- if (passes) {
431
- ifGated.push(s);
432
- }
433
- }
434
- }
435
-
436
- if (ifGated.length > 0) {
437
- const classifierStart = performance.now();
438
- const classifierResults = await this.evaluator.evaluateSignalsBatched({
439
- signals: ifGated,
440
- batchSize: this.options.batchSize,
441
- session,
442
- history,
443
- context,
444
- });
445
- const classifierDurationMs = performance.now() - classifierStart;
446
- logger.debug(`[Signals] Phase "${phase}" classifier call duration: ${classifierDurationMs.toFixed(1)}ms for ${ifGated.length} LLM-conditioned signals`);
447
-
448
- for (const s of ifGated) {
449
- const id = s.id ?? 'unknown';
450
- const result = classifierResults[id];
451
- if (result?.matched) {
452
- matched.push({
453
- signal: s,
454
- reason: result.reason ?? 'matched',
455
- extracted: result.extracted,
456
- declarationIndex: this.signals.indexOf(s),
457
- });
458
- }
459
- }
460
- }
461
- }
462
-
463
- // ── STEP 6b: extraction for code-matched signals ─────────────────────
464
- // Signals matched by code — unconditional (no `when`/`if`) or code-only
465
- // (`if` without `when`) — that carry an `extract` schema still need a
466
- // dedicated extraction call. LLM-conditioned signals already had their
467
- // extraction merged into the STEP 6 classifier batch, so they are
468
- // excluded here by identity. Without this, an `if` + `extract` signal
469
- // (e.g. the documented `leadStage` example) would reach its handler with
470
- // `ctx.extracted` permanently undefined.
471
- const codeMatchedWithExtract = matched.filter(
472
- (m) => m.signal.extract != null && !llmConditioned.includes(m.signal),
473
- );
474
- if (codeMatchedWithExtract.length > 0) {
475
- const extractResults = await this.evaluator.evaluateSignals({
476
- signals: codeMatchedWithExtract.map((m) => m.signal),
477
- session,
478
- history,
479
- context,
480
- });
481
-
482
- // Attach extracted data back onto the already-matched entries.
483
- for (const m of codeMatchedWithExtract) {
484
- const id = m.signal.id ?? 'unknown';
485
- m.extracted = extractResults[id]?.extracted;
486
- }
487
- }
488
-
489
- // ── STEP 7: sort by priority desc, declaration order tiebreaker ──────
490
- matched.sort((a, b) => {
491
- const priorityDiff = (b.signal.priority ?? 0) - (a.signal.priority ?? 0);
492
- if (priorityDiff !== 0) return priorityDiff;
493
- return a.declarationIndex - b.declarationIndex;
494
- });
495
-
496
- // ── STEP 8: invoke handlers; collect directives; track state ─────────
497
- const bus: SignalDirective<TContext, TData>[] = [];
498
- const firings: SignalFiring<TContext, TData>[] = [];
499
- let updatedSession = session;
500
-
501
- for (const m of matched) {
502
- // Turn-local directive bus for this handler (captures dispatch calls)
503
- const handlerBus: SignalDirective<TContext, TData>[] = [];
504
-
505
- // A signal in extraction mode that matched but produced no payload
506
- // would otherwise pass `extracted: undefined` to the handler with no
507
- // trace. Surface the miss on the firing and in logs instead.
508
- const extractionMissing = m.signal.extract != null && m.extracted == null;
509
- if (extractionMissing) {
510
- logger.warn(
511
- `[Signals] Signal "${m.signal.id ?? 'unknown'}" matched in extraction mode ` +
512
- `but the classifier returned no extracted payload; handler receives extracted: undefined.`,
513
- );
514
- }
515
-
516
- const sigCtx = buildSignalContext<TContext, TData, any>({
517
- signal: m.signal,
518
- reason: m.reason,
519
- extracted: m.extracted,
520
- phase,
521
- session: updatedSession,
522
- context,
523
- history,
524
- directiveBus: handlerBus,
525
- onUpdateSession: (s) => { updatedSession = s; },
526
- });
527
-
528
- const start = performance.now();
529
-
530
- try {
531
-
532
- const handlerResult = await m.signal.handler(sigCtx);
533
-
534
- // Collect directives from dispatch calls
535
- for (const d of handlerBus) {
536
- bus.push(d);
537
- }
538
-
539
- let resolvedDirective: SignalDirective<TContext, TData> | undefined;
540
-
541
- if (handlerResult != null && typeof handlerResult === 'object') {
542
- resolvedDirective = { ...handlerResult } as SignalDirective<TContext, TData>;
543
-
544
- // Resolve replyWith → reply
545
- if (resolvedDirective.replyWith != null) {
546
- if (typeof resolvedDirective.replyWith === 'function') {
547
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
548
- resolvedDirective.reply = resolvedDirective.replyWith(sigCtx);
549
- } else {
550
- resolvedDirective.reply = resolvedDirective.replyWith;
551
- }
552
- delete resolvedDirective.replyWith;
553
- }
554
-
555
- bus.push(resolvedDirective);
556
- }
557
-
558
- // Record trigger only after the handler has completed successfully.
559
- updatedSession = recordTrigger(updatedSession, m.signal, m.reason, phase);
560
-
561
- const handlerDurationMs = performance.now() - start;
562
-
563
- // Debug: per-handler duration and emitted directive fields
564
- const directiveFields = resolvedDirective
565
- ? Object.keys(resolvedDirective).filter(k => resolvedDirective[k as keyof typeof resolvedDirective] !== undefined)
566
- : [];
567
- logger.debug(
568
- `[Signals] Phase "${phase}" handler "${m.signal.id ?? 'unknown'}" completed in ${handlerDurationMs.toFixed(1)}ms` +
569
- (directiveFields.length > 0 ? `, directive fields: [${directiveFields.join(', ')}]` : ', no directive'),
570
- );
571
-
572
- // Record firing
573
- firings.push({
574
- id: m.signal.id ?? 'unknown',
575
- phase,
576
- reason: m.reason,
577
- extracted: m.extracted,
578
- directive: resolvedDirective,
579
- durationMs: handlerDurationMs,
580
- ...(extractionMissing ? { extractionError: EXTRACTION_MISSING_MESSAGE } : {}),
581
- });
582
-
583
- // stopOtherSignals → break iteration
584
- if (resolvedDirective?.stopOtherSignals === true) {
585
- break;
586
- }
587
- } catch (error) {
588
- const errorMessage = error instanceof Error ? error.message : String(error);
589
- const handlerDurationMs = performance.now() - start;
590
-
591
- // Handler errors logged at ERROR regardless of debug flag (Requirement 13.2)
592
- logger.error(`[Signals] Handler threw for signal "${m.signal.id ?? 'unknown'}": ${errorMessage}`);
593
-
594
- firings.push({
595
- id: m.signal.id ?? 'unknown',
596
- phase,
597
- reason: m.reason,
598
- handlerError: errorMessage,
599
- durationMs: handlerDurationMs,
600
- ...(extractionMissing ? { extractionError: EXTRACTION_MISSING_MESSAGE } : {}),
601
- });
602
-
603
- // Continue iteration — handler errors never break the turn
604
- }
605
- }
606
-
607
- // ── STEP 9: merge directives ─────────────────────────────────────────
608
- let mergedDirective: Directive<TContext, TData> | undefined;
609
-
610
- if (bus.length > 0) {
611
- mergedDirective = this.mergeDirectives(bus);
612
-
613
- // For post-phase, drop pre-LLM-only fields with debug warning
614
- if (phase === 'post') {
615
- if (mergedDirective.appendPrompt != null) {
616
- logger.debug('[Signals] Dropping appendPrompt from post-phase signal directive (pre-LLM-only field)');
617
- delete mergedDirective.appendPrompt;
618
- }
619
- if (mergedDirective.injectTools != null) {
620
- logger.debug('[Signals] Dropping injectTools from post-phase signal directive (pre-LLM-only field)');
621
- delete mergedDirective.injectTools;
622
- }
623
- if (mergedDirective.halt != null) {
624
- logger.debug('[Signals] Dropping halt from post-phase signal directive (pre-LLM-only field)');
625
- delete mergedDirective.halt;
626
- }
627
- }
628
-
629
- // Check if merged directive is now empty after stripping
630
- const hasFields = Object.keys(mergedDirective).length > 0;
631
- if (!hasFields) {
632
- mergedDirective = undefined;
633
- }
634
- }
635
-
636
- return { mergedDirective, firings, updatedSession };
637
- }
638
-
639
- // ──────────────────────────────────────────────────────────────────────────
640
- // Directive merging — Algorithm 4 pattern
641
- // ──────────────────────────────────────────────────────────────────────────
642
-
643
- /**
644
- * Merges an array of signal directives into a single directive.
645
- *
646
- * Merge strategy (matches Algorithm 4 / AutoChainExecutor pattern):
647
- * - Position fields (`goTo`, `goToStep`, `complete`, `abort`, `reset`, `halt`): last-write-wins
648
- * - `reply`: last-write-wins
649
- * - `appendPrompt`: array-concat
650
- * - `injectTools`: array-concat
651
- * - `dataUpdate`: shallow-merge (later values overwrite earlier for same key)
652
- * - `contextUpdate`: shallow-merge
653
- * - `stopOtherSignals`: OR (any true → true)
654
- */
655
- private mergeDirectives(
656
- directives: SignalDirective<TContext, TData>[],
657
- ): Directive<TContext, TData> {
658
- // Canonical Algorithm 4 merge — one algorithm shared with tools and
659
- // step hooks (position precedence, reply last-wins, state shallow-merge,
660
- // halt OR). Empty in, empty ({}) out.
661
- return flow.mergeAll(directives) ?? {};
662
- }
663
- }