@falai/agent 1.2.8 → 2.0.0

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 (499) hide show
  1. package/README.md +40 -886
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1191 -1014
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +509 -136
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/types/agent.d.ts +183 -54
  126. package/dist/cjs/types/agent.d.ts.map +1 -1
  127. package/dist/cjs/types/agent.js +0 -6
  128. package/dist/cjs/types/agent.js.map +1 -1
  129. package/dist/cjs/types/ai.d.ts +3 -3
  130. package/dist/cjs/types/ai.d.ts.map +1 -1
  131. package/dist/cjs/types/errors.d.ts +15 -0
  132. package/dist/cjs/types/errors.d.ts.map +1 -0
  133. package/dist/cjs/types/errors.js +22 -0
  134. package/dist/cjs/types/errors.js.map +1 -0
  135. package/dist/cjs/types/flow.d.ts +513 -0
  136. package/dist/cjs/types/flow.d.ts.map +1 -0
  137. package/dist/cjs/types/{route.js → flow.js} +2 -2
  138. package/dist/cjs/types/flow.js.map +1 -0
  139. package/dist/cjs/types/index.d.ts +7 -6
  140. package/dist/cjs/types/index.d.ts.map +1 -1
  141. package/dist/cjs/types/index.js +6 -2
  142. package/dist/cjs/types/index.js.map +1 -1
  143. package/dist/cjs/types/persistence.d.ts +11 -7
  144. package/dist/cjs/types/persistence.d.ts.map +1 -1
  145. package/dist/cjs/types/routing.d.ts +1 -1
  146. package/dist/cjs/types/routing.d.ts.map +1 -1
  147. package/dist/cjs/types/session.d.ts +24 -23
  148. package/dist/cjs/types/session.d.ts.map +1 -1
  149. package/dist/cjs/types/signals.d.ts +248 -0
  150. package/dist/cjs/types/signals.d.ts.map +1 -0
  151. package/dist/cjs/types/signals.js +11 -0
  152. package/dist/cjs/types/signals.js.map +1 -0
  153. package/dist/cjs/types/template.d.ts +2 -8
  154. package/dist/cjs/types/template.d.ts.map +1 -1
  155. package/dist/cjs/types/tool.d.ts +36 -29
  156. package/dist/cjs/types/tool.d.ts.map +1 -1
  157. package/dist/cjs/types/tool.js +1 -1
  158. package/dist/cjs/types/tool.js.map +1 -1
  159. package/dist/cjs/utils/condition.d.ts +7 -1
  160. package/dist/cjs/utils/condition.d.ts.map +1 -1
  161. package/dist/cjs/utils/condition.js.map +1 -1
  162. package/dist/cjs/utils/id.d.ts +13 -5
  163. package/dist/cjs/utils/id.d.ts.map +1 -1
  164. package/dist/cjs/utils/id.js +24 -10
  165. package/dist/cjs/utils/id.js.map +1 -1
  166. package/dist/cjs/utils/index.d.ts +2 -2
  167. package/dist/cjs/utils/index.d.ts.map +1 -1
  168. package/dist/cjs/utils/index.js +7 -3
  169. package/dist/cjs/utils/index.js.map +1 -1
  170. package/dist/cjs/utils/session.d.ts +44 -5
  171. package/dist/cjs/utils/session.d.ts.map +1 -1
  172. package/dist/cjs/utils/session.js +197 -38
  173. package/dist/cjs/utils/session.js.map +1 -1
  174. package/dist/constants/index.d.ts +0 -9
  175. package/dist/constants/index.d.ts.map +1 -1
  176. package/dist/constants/index.js +3 -9
  177. package/dist/constants/index.js.map +1 -1
  178. package/dist/core/Agent.d.ts +119 -153
  179. package/dist/core/Agent.d.ts.map +1 -1
  180. package/dist/core/Agent.js +472 -325
  181. package/dist/core/Agent.js.map +1 -1
  182. package/dist/core/AutoChainExecutor.d.ts +107 -0
  183. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  184. package/dist/core/AutoChainExecutor.js +293 -0
  185. package/dist/core/AutoChainExecutor.js.map +1 -0
  186. package/dist/core/BranchEvaluator.d.ts +54 -0
  187. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  188. package/dist/core/BranchEvaluator.js +126 -0
  189. package/dist/core/BranchEvaluator.js.map +1 -0
  190. package/dist/core/DirectiveBus.d.ts +88 -0
  191. package/dist/core/DirectiveBus.d.ts.map +1 -0
  192. package/dist/core/DirectiveBus.js +192 -0
  193. package/dist/core/DirectiveBus.js.map +1 -0
  194. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  195. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  196. package/dist/core/DirectiveChainTracker.js +117 -0
  197. package/dist/core/DirectiveChainTracker.js.map +1 -0
  198. package/dist/core/Flow.d.ts +186 -0
  199. package/dist/core/Flow.d.ts.map +1 -0
  200. package/dist/core/Flow.js +546 -0
  201. package/dist/core/Flow.js.map +1 -0
  202. package/dist/core/FlowRouter.d.ts +182 -0
  203. package/dist/core/FlowRouter.d.ts.map +1 -0
  204. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  205. package/dist/core/FlowRouter.js.map +1 -0
  206. package/dist/core/PersistenceManager.d.ts +2 -2
  207. package/dist/core/PersistenceManager.d.ts.map +1 -1
  208. package/dist/core/PersistenceManager.js +7 -7
  209. package/dist/core/PersistenceManager.js.map +1 -1
  210. package/dist/core/PromptComposer.d.ts +21 -8
  211. package/dist/core/PromptComposer.d.ts.map +1 -1
  212. package/dist/core/PromptComposer.js +183 -106
  213. package/dist/core/PromptComposer.js.map +1 -1
  214. package/dist/core/PromptSectionCache.d.ts +1 -1
  215. package/dist/core/PromptSectionCache.js +1 -1
  216. package/dist/core/ResponseEngine.d.ts +18 -8
  217. package/dist/core/ResponseEngine.d.ts.map +1 -1
  218. package/dist/core/ResponseEngine.js +38 -36
  219. package/dist/core/ResponseEngine.js.map +1 -1
  220. package/dist/core/ResponseModal.d.ts +73 -56
  221. package/dist/core/ResponseModal.d.ts.map +1 -1
  222. package/dist/core/ResponseModal.js +1193 -1016
  223. package/dist/core/ResponseModal.js.map +1 -1
  224. package/dist/core/ResponsePipeline.d.ts +124 -26
  225. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  226. package/dist/core/ResponsePipeline.js +509 -137
  227. package/dist/core/ResponsePipeline.js.map +1 -1
  228. package/dist/core/SignalEvaluator.d.ts +86 -0
  229. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  230. package/dist/core/SignalEvaluator.js +326 -0
  231. package/dist/core/SignalEvaluator.js.map +1 -0
  232. package/dist/core/SignalProcessor.d.ts +152 -0
  233. package/dist/core/SignalProcessor.d.ts.map +1 -0
  234. package/dist/core/SignalProcessor.js +555 -0
  235. package/dist/core/SignalProcessor.js.map +1 -0
  236. package/dist/core/Step.d.ts +43 -32
  237. package/dist/core/Step.d.ts.map +1 -1
  238. package/dist/core/Step.js +220 -126
  239. package/dist/core/Step.js.map +1 -1
  240. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  241. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  242. package/dist/core/StreamingToolExecutor.js.map +1 -1
  243. package/dist/core/ToolManager.d.ts +44 -13
  244. package/dist/core/ToolManager.d.ts.map +1 -1
  245. package/dist/core/ToolManager.js +174 -91
  246. package/dist/core/ToolManager.js.map +1 -1
  247. package/dist/core/createAgent.d.ts +35 -0
  248. package/dist/core/createAgent.d.ts.map +1 -0
  249. package/dist/core/createAgent.js +36 -0
  250. package/dist/core/createAgent.js.map +1 -0
  251. package/dist/core/flow-namespace.d.ts +49 -0
  252. package/dist/core/flow-namespace.d.ts.map +1 -0
  253. package/dist/core/flow-namespace.js +168 -0
  254. package/dist/core/flow-namespace.js.map +1 -0
  255. package/dist/index.d.ts +11 -14
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +9 -12
  258. package/dist/index.js.map +1 -1
  259. package/dist/types/agent.d.ts +183 -54
  260. package/dist/types/agent.d.ts.map +1 -1
  261. package/dist/types/agent.js +0 -6
  262. package/dist/types/agent.js.map +1 -1
  263. package/dist/types/ai.d.ts +3 -3
  264. package/dist/types/ai.d.ts.map +1 -1
  265. package/dist/types/errors.d.ts +15 -0
  266. package/dist/types/errors.d.ts.map +1 -0
  267. package/dist/types/errors.js +18 -0
  268. package/dist/types/errors.js.map +1 -0
  269. package/dist/types/flow.d.ts +513 -0
  270. package/dist/types/flow.d.ts.map +1 -0
  271. package/dist/types/flow.js +5 -0
  272. package/dist/types/flow.js.map +1 -0
  273. package/dist/types/index.d.ts +7 -6
  274. package/dist/types/index.d.ts.map +1 -1
  275. package/dist/types/index.js +4 -1
  276. package/dist/types/index.js.map +1 -1
  277. package/dist/types/persistence.d.ts +11 -7
  278. package/dist/types/persistence.d.ts.map +1 -1
  279. package/dist/types/routing.d.ts +1 -1
  280. package/dist/types/routing.d.ts.map +1 -1
  281. package/dist/types/session.d.ts +24 -23
  282. package/dist/types/session.d.ts.map +1 -1
  283. package/dist/types/signals.d.ts +248 -0
  284. package/dist/types/signals.d.ts.map +1 -0
  285. package/dist/types/signals.js +10 -0
  286. package/dist/types/signals.js.map +1 -0
  287. package/dist/types/template.d.ts +2 -8
  288. package/dist/types/template.d.ts.map +1 -1
  289. package/dist/types/tool.d.ts +36 -29
  290. package/dist/types/tool.d.ts.map +1 -1
  291. package/dist/types/tool.js +1 -1
  292. package/dist/types/tool.js.map +1 -1
  293. package/dist/utils/condition.d.ts +7 -1
  294. package/dist/utils/condition.d.ts.map +1 -1
  295. package/dist/utils/condition.js.map +1 -1
  296. package/dist/utils/id.d.ts +13 -5
  297. package/dist/utils/id.d.ts.map +1 -1
  298. package/dist/utils/id.js +22 -9
  299. package/dist/utils/id.js.map +1 -1
  300. package/dist/utils/index.d.ts +2 -2
  301. package/dist/utils/index.d.ts.map +1 -1
  302. package/dist/utils/index.js +2 -2
  303. package/dist/utils/index.js.map +1 -1
  304. package/dist/utils/session.d.ts +44 -5
  305. package/dist/utils/session.d.ts.map +1 -1
  306. package/dist/utils/session.js +193 -37
  307. package/dist/utils/session.js.map +1 -1
  308. package/docs/README.md +15 -202
  309. package/docs/concepts/architecture.md +281 -0
  310. package/docs/concepts/directives.md +400 -0
  311. package/docs/concepts/pipeline.md +399 -0
  312. package/docs/guides/branching.md +263 -0
  313. package/docs/guides/compaction.md +163 -0
  314. package/docs/guides/conditions.md +167 -0
  315. package/docs/guides/error-handling.md +176 -0
  316. package/docs/guides/flow-control.md +409 -0
  317. package/docs/guides/instructions.md +210 -0
  318. package/docs/guides/persistence.md +182 -0
  319. package/docs/guides/streaming.md +137 -0
  320. package/docs/migration/README.md +15 -0
  321. package/docs/migration/route-to-flow.md +560 -0
  322. package/docs/migration/v1-to-v2.md +909 -0
  323. package/docs/reference/adapters.md +481 -0
  324. package/docs/reference/branches.md +241 -0
  325. package/docs/reference/create-agent.md +186 -0
  326. package/docs/reference/directive.md +243 -0
  327. package/docs/reference/errors.md +122 -0
  328. package/docs/reference/flow.md +238 -0
  329. package/docs/reference/instruction.md +177 -0
  330. package/docs/reference/pre-directive.md +131 -0
  331. package/docs/reference/providers.md +227 -0
  332. package/docs/reference/signals.md +356 -0
  333. package/docs/reference/step.md +339 -0
  334. package/docs/reference/tool.md +269 -0
  335. package/docs/start/01-install.md +81 -0
  336. package/docs/start/02-first-agent.md +196 -0
  337. package/docs/start/03-collect-data.md +222 -0
  338. package/docs/start/04-add-tools.md +276 -0
  339. package/docs/start/05-go-to-production.md +216 -0
  340. package/examples/01-quickstart.ts +20 -0
  341. package/examples/02-data-extraction.ts +90 -0
  342. package/examples/03-tools.ts +136 -0
  343. package/examples/04-instructions.ts +100 -0
  344. package/examples/05-branching.ts +140 -0
  345. package/examples/06-flow-control.ts +103 -0
  346. package/examples/07-streaming.ts +69 -0
  347. package/examples/08-persistence.ts +98 -0
  348. package/examples/09-signals.ts +144 -0
  349. package/examples/tsconfig.json +30 -0
  350. package/package.json +2 -1
  351. package/src/adapters/MemoryAdapter.ts +3 -3
  352. package/src/adapters/MongoAdapter.ts +3 -3
  353. package/src/adapters/OpenSearchAdapter.ts +10 -8
  354. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  355. package/src/adapters/PrismaAdapter.ts +6 -6
  356. package/src/adapters/RedisAdapter.ts +3 -3
  357. package/src/adapters/SQLiteAdapter.ts +31 -12
  358. package/src/constants/index.ts +2 -10
  359. package/src/core/Agent.ts +585 -374
  360. package/src/core/AutoChainExecutor.ts +440 -0
  361. package/src/core/BranchEvaluator.ts +167 -0
  362. package/src/core/DirectiveBus.ts +248 -0
  363. package/src/core/DirectiveChainTracker.ts +144 -0
  364. package/src/core/Flow.ts +666 -0
  365. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  366. package/src/core/PersistenceManager.ts +8 -8
  367. package/src/core/PromptComposer.ts +209 -140
  368. package/src/core/PromptSectionCache.ts +1 -1
  369. package/src/core/ResponseEngine.ts +61 -46
  370. package/src/core/ResponseModal.ts +1453 -1240
  371. package/src/core/ResponsePipeline.ts +655 -175
  372. package/src/core/SignalEvaluator.ts +420 -0
  373. package/src/core/SignalProcessor.ts +723 -0
  374. package/src/core/Step.ts +279 -176
  375. package/src/core/StreamingToolExecutor.ts +4 -4
  376. package/src/core/ToolManager.ts +200 -97
  377. package/src/core/createAgent.ts +40 -0
  378. package/src/core/flow-namespace.ts +219 -0
  379. package/src/index.ts +42 -36
  380. package/src/types/agent.ts +182 -53
  381. package/src/types/ai.ts +3 -3
  382. package/src/types/errors.ts +18 -0
  383. package/src/types/flow.ts +590 -0
  384. package/src/types/index.ts +43 -16
  385. package/src/types/persistence.ts +12 -8
  386. package/src/types/routing.ts +1 -1
  387. package/src/types/session.ts +26 -23
  388. package/src/types/signals.ts +321 -0
  389. package/src/types/template.ts +3 -11
  390. package/src/types/tool.ts +50 -42
  391. package/src/utils/condition.ts +13 -4
  392. package/src/utils/id.ts +27 -9
  393. package/src/utils/index.ts +6 -2
  394. package/src/utils/session.ts +238 -42
  395. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  396. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  397. package/dist/cjs/core/BatchExecutor.js +0 -861
  398. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  399. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  400. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  401. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  402. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  403. package/dist/cjs/core/Route.d.ts +0 -180
  404. package/dist/cjs/core/Route.d.ts.map +0 -1
  405. package/dist/cjs/core/Route.js +0 -542
  406. package/dist/cjs/core/Route.js.map +0 -1
  407. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  408. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  409. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  410. package/dist/cjs/types/route.d.ts +0 -336
  411. package/dist/cjs/types/route.d.ts.map +0 -1
  412. package/dist/cjs/types/route.js.map +0 -1
  413. package/dist/core/BatchExecutor.d.ts +0 -359
  414. package/dist/core/BatchExecutor.d.ts.map +0 -1
  415. package/dist/core/BatchExecutor.js +0 -856
  416. package/dist/core/BatchExecutor.js.map +0 -1
  417. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  418. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  419. package/dist/core/BatchPromptBuilder.js +0 -219
  420. package/dist/core/BatchPromptBuilder.js.map +0 -1
  421. package/dist/core/Route.d.ts +0 -180
  422. package/dist/core/Route.d.ts.map +0 -1
  423. package/dist/core/Route.js +0 -538
  424. package/dist/core/Route.js.map +0 -1
  425. package/dist/core/RoutingEngine.d.ts +0 -185
  426. package/dist/core/RoutingEngine.d.ts.map +0 -1
  427. package/dist/core/RoutingEngine.js.map +0 -1
  428. package/dist/types/route.d.ts +0 -336
  429. package/dist/types/route.d.ts.map +0 -1
  430. package/dist/types/route.js +0 -5
  431. package/dist/types/route.js.map +0 -1
  432. package/docs/CONTRIBUTING.md +0 -521
  433. package/docs/api/README.md +0 -3299
  434. package/docs/api/overview.md +0 -1410
  435. package/docs/architecture/data-extraction-flow.md +0 -360
  436. package/docs/architecture/multi-step-execution.md +0 -277
  437. package/docs/core/agent/README.md +0 -938
  438. package/docs/core/agent/context-management.md +0 -796
  439. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  440. package/docs/core/agent/session-management.md +0 -693
  441. package/docs/core/ai-integration/prompt-composition.md +0 -355
  442. package/docs/core/ai-integration/providers.md +0 -515
  443. package/docs/core/ai-integration/response-processing.md +0 -433
  444. package/docs/core/conversation-flows/data-collection.md +0 -772
  445. package/docs/core/conversation-flows/route-dsl.md +0 -509
  446. package/docs/core/conversation-flows/routes.md +0 -249
  447. package/docs/core/conversation-flows/step-transitions.md +0 -731
  448. package/docs/core/conversation-flows/steps.md +0 -268
  449. package/docs/core/error-handling.md +0 -830
  450. package/docs/core/persistence/adapters.md +0 -255
  451. package/docs/core/persistence/session-storage.md +0 -656
  452. package/docs/core/routing/intelligent-routing.md +0 -470
  453. package/docs/core/tools/enhanced-tool.md +0 -186
  454. package/docs/core/tools/streaming-execution.md +0 -161
  455. package/docs/core/tools/tool-definition.md +0 -970
  456. package/docs/core/tools/tool-scoping.md +0 -819
  457. package/docs/guides/advanced-patterns/publishing.md +0 -186
  458. package/docs/guides/context-compaction.md +0 -96
  459. package/docs/guides/error-handling-patterns.md +0 -578
  460. package/docs/guides/getting-started/README.md +0 -795
  461. package/docs/guides/migration/README.md +0 -101
  462. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  463. package/docs/guides/migration/multi-step-execution.md +0 -393
  464. package/docs/guides/migration/response-modal-refactor.md +0 -518
  465. package/docs/guides/prompt-optimization.md +0 -164
  466. package/examples/advanced-patterns/context-compaction.ts +0 -223
  467. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  468. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  469. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  470. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  471. package/examples/ai-providers/anthropic-integration.ts +0 -388
  472. package/examples/ai-providers/openai-integration.ts +0 -228
  473. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  474. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  475. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  476. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  477. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  478. package/examples/conversation-flows/completion-transitions.ts +0 -318
  479. package/examples/core-concepts/basic-agent.ts +0 -503
  480. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  481. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  482. package/examples/core-concepts/session-management.ts +0 -494
  483. package/examples/integrations/database-integration.ts +0 -631
  484. package/examples/integrations/healthcare-integration.ts +0 -595
  485. package/examples/integrations/search-integration.ts +0 -530
  486. package/examples/integrations/server-session-management.ts +0 -307
  487. package/examples/persistence/custom-adapter.ts +0 -526
  488. package/examples/persistence/database-persistence.ts +0 -583
  489. package/examples/persistence/memory-sessions.ts +0 -495
  490. package/examples/persistence/prisma-schema.example.prisma +0 -74
  491. package/examples/persistence/redis-persistence.ts +0 -488
  492. package/examples/tools/basic-tools.ts +0 -765
  493. package/examples/tools/data-enrichment-tools.ts +0 -593
  494. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  495. package/examples/tools/streaming-tool-execution.ts +0 -283
  496. package/src/core/BatchExecutor.ts +0 -1187
  497. package/src/core/BatchPromptBuilder.ts +0 -299
  498. package/src/core/Route.ts +0 -678
  499. package/src/types/route.ts +0 -392
@@ -0,0 +1,555 @@
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
+ import { MessageRole as MessageRoleEnum } from "../types/history";
14
+ import { logger } from "../utils";
15
+ // ──────────────────────────────────────────────────────────────────────────────
16
+ // behaviorAllowsExecution — Algorithm 2
17
+ // ──────────────────────────────────────────────────────────────────────────────
18
+ /**
19
+ * Determines whether a signal's behavior gating allows execution this turn.
20
+ *
21
+ * Algorithm 2 from the design document:
22
+ * - `'always'` (or unset) → always allowed
23
+ * - `'once'` → allowed only if no prior trigger exists
24
+ * - `'cooldown'` → allowed when elapsed time since last trigger >= cooldownMs;
25
+ * when `cooldownMs` is missing, treated as `'always'` (misconfigured)
26
+ * - Missing trigger (first-time) → allowed regardless of behavior
27
+ *
28
+ * Pure function; no I/O.
29
+ *
30
+ * @param signal - The signal definition (with id, behavior, cooldownMs)
31
+ * @param trigger - The existing trigger state from `session.signals.triggers[signal.id]`, or undefined
32
+ * @returns true if the signal is allowed to execute
33
+ *
34
+ * @requirements 5.1, 5.2, 5.3, 5.4
35
+ */
36
+ export function behaviorAllowsExecution(signal, trigger) {
37
+ // No prior trigger → always allowed (first-time execution)
38
+ if (trigger == null)
39
+ return true;
40
+ const behavior = signal.behavior ?? 'always';
41
+ if (behavior === 'always')
42
+ return true;
43
+ if (behavior === 'once')
44
+ return false;
45
+ if (behavior === 'cooldown') {
46
+ // Misconfigured: cooldown without cooldownMs → treat as 'always'
47
+ if (signal.cooldownMs == null)
48
+ return true;
49
+ const lastTriggeredTime = trigger.lastTriggeredAt instanceof Date
50
+ ? trigger.lastTriggeredAt.getTime()
51
+ : new Date(trigger.lastTriggeredAt).getTime();
52
+ const elapsedMs = Date.now() - lastTriggeredTime;
53
+ return elapsedMs >= signal.cooldownMs;
54
+ }
55
+ // Unknown behavior value → allow (defensive)
56
+ return true;
57
+ }
58
+ // ──────────────────────────────────────────────────────────────────────────────
59
+ // recordTrigger — Immutable session update
60
+ // ──────────────────────────────────────────────────────────────────────────────
61
+ /**
62
+ * Records a signal trigger on the session, returning a new session object
63
+ * (immutable update — never mutates input).
64
+ *
65
+ * - On first trigger: sets `firstTriggeredAt` and `lastTriggeredAt` to now,
66
+ * `count = 1`, plus `lastReason` and `lastPhase`.
67
+ * - On subsequent triggers: leaves `firstTriggeredAt` unchanged, increments
68
+ * `count`, updates `lastTriggeredAt`, `lastReason`, `lastPhase`.
69
+ *
70
+ * @param session - Current session state (not mutated)
71
+ * @param signal - The signal that fired
72
+ * @param reason - The match reason (AI rationale, 'code-only', or 'unconditional')
73
+ * @param phase - The phase in which the signal fired
74
+ * @returns A new session with updated `signals.triggers[signal.id]`
75
+ *
76
+ * @requirements 10.1, 10.2
77
+ */
78
+ export function recordTrigger(session, signal, reason, phase) {
79
+ const signalId = signal.id ?? 'unknown';
80
+ const now = new Date();
81
+ const existingTriggers = session.signals?.triggers ?? {};
82
+ const existingTrigger = existingTriggers[signalId];
83
+ let updatedTrigger;
84
+ if (existingTrigger == null) {
85
+ // First trigger
86
+ updatedTrigger = {
87
+ firstTriggeredAt: now,
88
+ lastTriggeredAt: now,
89
+ count: 1,
90
+ lastReason: reason,
91
+ lastPhase: phase,
92
+ };
93
+ }
94
+ else {
95
+ // Subsequent trigger — preserve firstTriggeredAt, increment count
96
+ updatedTrigger = {
97
+ firstTriggeredAt: existingTrigger.firstTriggeredAt,
98
+ lastTriggeredAt: now,
99
+ count: existingTrigger.count + 1,
100
+ lastReason: reason,
101
+ lastPhase: phase,
102
+ };
103
+ }
104
+ return {
105
+ ...session,
106
+ signals: {
107
+ ...session.signals,
108
+ triggers: {
109
+ ...existingTriggers,
110
+ [signalId]: updatedTrigger,
111
+ },
112
+ },
113
+ };
114
+ }
115
+ /**
116
+ * Builds the `SignalContext` passed to signal handlers.
117
+ *
118
+ * - `updateContext` and `updateData` replicate the ToolContext D-Q12 writer
119
+ * pattern: shallow-merge partial updates into the session, call the
120
+ * `onUpdateSession` callback so the processor can track mutations.
121
+ * - `dispatch` pushes a `SignalDirective` onto the turn-local bus.
122
+ * - `lastUserMessage` is derived from the last user-role event in history.
123
+ * - `triggeredAt` is set to `new Date()` at construction time.
124
+ * - `matched` is always `true` (literal type).
125
+ *
126
+ * @requirements 6.1, 6.2, 6.3
127
+ */
128
+ export function buildSignalContext(params) {
129
+ const { signal, reason, extracted, phase, session, context, history, directiveBus, onUpdateSession, } = params;
130
+ // Derive lastUserMessage from the last user-role event
131
+ const lastUserMessage = deriveLastUserMessage(history);
132
+ // D-Q12 contract writers — same signature as ToolContext
133
+ const updateContext = (updates) => {
134
+ // Context is agent-level (not on session directly). Push a contextUpdate
135
+ // directive so the pipeline applies the merge after handler returns.
136
+ directiveBus.push({ contextUpdate: updates });
137
+ return Promise.resolve();
138
+ };
139
+ const updateData = (updates) => {
140
+ const updatedData = { ...session.data, ...updates };
141
+ const updatedSession = {
142
+ ...session,
143
+ data: updatedData,
144
+ };
145
+ onUpdateSession(updatedSession);
146
+ // Also push a dataUpdate directive for the pipeline
147
+ directiveBus.push({ dataUpdate: updates });
148
+ return Promise.resolve();
149
+ };
150
+ const dispatch = (directive) => {
151
+ directiveBus.push(directive);
152
+ };
153
+ return {
154
+ signal,
155
+ phase,
156
+ matched: true,
157
+ reason,
158
+ extracted,
159
+ session,
160
+ context,
161
+ data: session.data,
162
+ history,
163
+ lastUserMessage,
164
+ triggeredAt: new Date(),
165
+ updateContext,
166
+ updateData,
167
+ dispatch,
168
+ };
169
+ }
170
+ // ──────────────────────────────────────────────────────────────────────────────
171
+ // Internal helpers
172
+ // ──────────────────────────────────────────────────────────────────────────────
173
+ /**
174
+ * Extracts the last user message from history events.
175
+ * Walks backward to find the most recent user-role message event.
176
+ */
177
+ function deriveLastUserMessage(history) {
178
+ for (let i = history.length - 1; i >= 0; i--) {
179
+ const event = history[i];
180
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
181
+ if (event.source === MessageRoleEnum.USER && event.kind === 'message') {
182
+ const data = event.data;
183
+ if (data?.message) {
184
+ return data.message;
185
+ }
186
+ }
187
+ }
188
+ return undefined;
189
+ }
190
+ /**
191
+ * SignalProcessor — Orchestrates signal phase execution.
192
+ *
193
+ * Constructed only when `options.signals` is non-empty (Requirement 2.3).
194
+ * Owns the full Algorithm 1 lifecycle: filtering, gating, evaluation,
195
+ * handler invocation, directive collection, and state persistence.
196
+ */
197
+ export class SignalProcessor {
198
+ constructor(signals, provider, evaluator, options) {
199
+ this.signals = signals;
200
+ this.provider = provider;
201
+ this.evaluator = evaluator;
202
+ this.options = options;
203
+ }
204
+ /** @internal Expose internals for testability. */
205
+ get _internals() {
206
+ return { signals: this.signals, provider: this.provider, evaluator: this.evaluator, options: this.options };
207
+ }
208
+ /**
209
+ * Pre-signal phase. Delegates to `runPhase('pre', ...)`.
210
+ * Return type narrows `mergedDirective` to `PreDirective | undefined`.
211
+ */
212
+ async runPreSignalPhase(params) {
213
+ return await this.runPhase('pre', params);
214
+ }
215
+ /**
216
+ * Post-signal phase. Delegates to `runPhase('post', ...)`.
217
+ * Return type narrows `mergedDirective` to `Directive | undefined`.
218
+ * Pre-LLM-only fields (`appendPrompt`, `injectTools`, `halt`) are
219
+ * already dropped inside `runPhase` for the post phase.
220
+ */
221
+ async runPostSignalPhase(params) {
222
+ return await this.runPhase('post', params);
223
+ }
224
+ // ──────────────────────────────────────────────────────────────────────────
225
+ // Private: Algorithm 1 — Phase orchestration
226
+ // ──────────────────────────────────────────────────────────────────────────
227
+ async runPhase(phase, params) {
228
+ const { session, history, context } = params;
229
+ // ── STEP 0: zero-cost fast path ──────────────────────────────────────
230
+ if (this.signals.length === 0) {
231
+ return { firings: [], updatedSession: session };
232
+ }
233
+ // ── STEP 1: filter eligible signals for this phase ───────────────────
234
+ const eligible = this.signals.filter((s) => s.enabled !== false && (s.phase === phase || s.phase === 'both'));
235
+ if (eligible.length === 0) {
236
+ return { firings: [], updatedSession: session };
237
+ }
238
+ logger.debug(`[Signals] Phase "${phase}" eligible signals: [${eligible.map(s => s.id ?? 'unknown').join(', ')}]`);
239
+ // ── STEP 2: filter by behavior gating ────────────────────────────────
240
+ const gated = eligible.filter((s) => behaviorAllowsExecution(s, session.signals?.triggers?.[s.id ?? 'unknown']));
241
+ if (gated.length === 0) {
242
+ return { firings: [], updatedSession: session };
243
+ }
244
+ logger.debug(`[Signals] Phase "${phase}" after behavior gating: [${gated.map(s => s.id ?? 'unknown').join(', ')}]`);
245
+ // ── STEP 3: partition by evaluation mode ─────────────────────────────
246
+ const unconditional = [];
247
+ const codeOnly = [];
248
+ const llmConditioned = [];
249
+ for (const s of gated) {
250
+ if (s.when != null) {
251
+ llmConditioned.push(s);
252
+ }
253
+ else if (s.if != null) {
254
+ codeOnly.push(s);
255
+ }
256
+ else {
257
+ unconditional.push(s);
258
+ }
259
+ }
260
+ // Build predicate context (shared across code-only and if-gating)
261
+ const predicateCtx = {
262
+ data: session.data,
263
+ context,
264
+ session,
265
+ history,
266
+ };
267
+ // ── STEP 4: unconditional signals — always match ─────────────────────
268
+ const matched = [];
269
+ for (const s of unconditional) {
270
+ matched.push({
271
+ signal: s,
272
+ reason: 'unconditional',
273
+ declarationIndex: this.signals.indexOf(s),
274
+ });
275
+ }
276
+ // ── STEP 5: code-only signals → evaluateIf ──────────────────────────
277
+ for (const s of codeOnly) {
278
+ const passes = await this.evaluator.evaluateIf(s.if, predicateCtx);
279
+ if (passes) {
280
+ matched.push({
281
+ signal: s,
282
+ reason: 'code-only',
283
+ declarationIndex: this.signals.indexOf(s),
284
+ });
285
+ }
286
+ }
287
+ // ── STEP 6: LLM-conditioned signals ─────────────────────────────────
288
+ if (llmConditioned.length > 0) {
289
+ // Gate by `if` first to skip token cost
290
+ const ifGated = [];
291
+ for (const s of llmConditioned) {
292
+ if (s.if == null) {
293
+ ifGated.push(s);
294
+ }
295
+ else {
296
+ const passes = await this.evaluator.evaluateIf(s.if, predicateCtx);
297
+ if (passes) {
298
+ ifGated.push(s);
299
+ }
300
+ }
301
+ }
302
+ if (ifGated.length > 0) {
303
+ const classifierStart = performance.now();
304
+ const classifierResults = await this.evaluator.evaluateSignalsBatched({
305
+ signals: ifGated,
306
+ batchSize: this.options.batchSize,
307
+ session,
308
+ history,
309
+ context,
310
+ });
311
+ const classifierDurationMs = performance.now() - classifierStart;
312
+ logger.debug(`[Signals] Phase "${phase}" classifier call duration: ${classifierDurationMs.toFixed(1)}ms for ${ifGated.length} LLM-conditioned signals`);
313
+ for (const s of ifGated) {
314
+ const id = s.id ?? 'unknown';
315
+ const result = classifierResults[id];
316
+ if (result?.matched) {
317
+ matched.push({
318
+ signal: s,
319
+ reason: result.reason ?? 'matched',
320
+ extracted: result.extracted,
321
+ declarationIndex: this.signals.indexOf(s),
322
+ });
323
+ }
324
+ }
325
+ }
326
+ }
327
+ // ── STEP 6b: unconditional + extract signals ────────────────────────
328
+ const unconditionalWithExtract = unconditional.filter((s) => s.extract != null);
329
+ if (unconditionalWithExtract.length > 0) {
330
+ const extractResults = await this.evaluator.evaluateSignals({
331
+ signals: unconditionalWithExtract,
332
+ session,
333
+ history,
334
+ context,
335
+ });
336
+ // Attach extracted data to already-matched unconditional entries
337
+ for (const s of unconditionalWithExtract) {
338
+ const id = s.id ?? 'unknown';
339
+ const entry = matched.find((m) => m.signal === s);
340
+ if (entry) {
341
+ entry.extracted = extractResults[id]?.extracted;
342
+ }
343
+ }
344
+ }
345
+ // ── STEP 7: sort by priority desc, declaration order tiebreaker ──────
346
+ matched.sort((a, b) => {
347
+ const priorityDiff = (b.signal.priority ?? 0) - (a.signal.priority ?? 0);
348
+ if (priorityDiff !== 0)
349
+ return priorityDiff;
350
+ return a.declarationIndex - b.declarationIndex;
351
+ });
352
+ // ── STEP 8: invoke handlers; collect directives; track state ─────────
353
+ const bus = [];
354
+ const firings = [];
355
+ let updatedSession = session;
356
+ for (const m of matched) {
357
+ // Turn-local directive bus for this handler (captures dispatch calls)
358
+ const handlerBus = [];
359
+ const sigCtx = buildSignalContext({
360
+ signal: m.signal,
361
+ reason: m.reason,
362
+ extracted: m.extracted,
363
+ phase,
364
+ session: updatedSession,
365
+ context,
366
+ history,
367
+ directiveBus: handlerBus,
368
+ onUpdateSession: (s) => { updatedSession = s; },
369
+ });
370
+ const start = performance.now();
371
+ try {
372
+ const handlerResult = await m.signal.handler(sigCtx);
373
+ // Collect directives from dispatch calls
374
+ for (const d of handlerBus) {
375
+ bus.push(d);
376
+ }
377
+ let resolvedDirective;
378
+ if (handlerResult != null && typeof handlerResult === 'object') {
379
+ resolvedDirective = { ...handlerResult };
380
+ // Resolve replyWith → reply
381
+ if (resolvedDirective.replyWith != null) {
382
+ if (typeof resolvedDirective.replyWith === 'function') {
383
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
384
+ resolvedDirective.reply = resolvedDirective.replyWith(sigCtx);
385
+ }
386
+ else {
387
+ resolvedDirective.reply = resolvedDirective.replyWith;
388
+ }
389
+ delete resolvedDirective.replyWith;
390
+ }
391
+ bus.push(resolvedDirective);
392
+ }
393
+ // Update session via recordTrigger
394
+ updatedSession = recordTrigger(updatedSession, m.signal, m.reason, phase);
395
+ const handlerDurationMs = performance.now() - start;
396
+ // Debug: per-handler duration and emitted directive fields
397
+ const directiveFields = resolvedDirective
398
+ ? Object.keys(resolvedDirective).filter(k => resolvedDirective[k] !== undefined)
399
+ : [];
400
+ logger.debug(`[Signals] Phase "${phase}" handler "${m.signal.id ?? 'unknown'}" completed in ${handlerDurationMs.toFixed(1)}ms` +
401
+ (directiveFields.length > 0 ? `, directive fields: [${directiveFields.join(', ')}]` : ', no directive'));
402
+ // Record firing
403
+ firings.push({
404
+ id: m.signal.id ?? 'unknown',
405
+ phase,
406
+ reason: m.reason,
407
+ extracted: m.extracted,
408
+ directive: resolvedDirective,
409
+ durationMs: handlerDurationMs,
410
+ });
411
+ // stopOtherSignals → break iteration
412
+ if (resolvedDirective?.stopOtherSignals === true) {
413
+ break;
414
+ }
415
+ }
416
+ catch (error) {
417
+ const errorMessage = error instanceof Error ? error.message : String(error);
418
+ const handlerDurationMs = performance.now() - start;
419
+ // Handler errors logged at ERROR regardless of debug flag (Requirement 13.2)
420
+ logger.error(`[Signals] Handler threw for signal "${m.signal.id ?? 'unknown'}": ${errorMessage}`);
421
+ // Still record trigger even on error (the signal matched)
422
+ updatedSession = recordTrigger(updatedSession, m.signal, m.reason, phase);
423
+ firings.push({
424
+ id: m.signal.id ?? 'unknown',
425
+ phase,
426
+ reason: m.reason,
427
+ handlerError: errorMessage,
428
+ durationMs: handlerDurationMs,
429
+ });
430
+ // Continue iteration — handler errors never break the turn
431
+ }
432
+ }
433
+ // ── STEP 9: merge directives ─────────────────────────────────────────
434
+ let mergedDirective;
435
+ if (bus.length > 0) {
436
+ mergedDirective = this.mergeDirectives(bus);
437
+ // For post-phase, drop pre-LLM-only fields with debug warning
438
+ if (phase === 'post') {
439
+ if (mergedDirective.appendPrompt != null) {
440
+ logger.debug('[Signals] Dropping appendPrompt from post-phase signal directive (pre-LLM-only field)');
441
+ delete mergedDirective.appendPrompt;
442
+ }
443
+ if (mergedDirective.injectTools != null) {
444
+ logger.debug('[Signals] Dropping injectTools from post-phase signal directive (pre-LLM-only field)');
445
+ delete mergedDirective.injectTools;
446
+ }
447
+ if (mergedDirective.halt != null) {
448
+ logger.debug('[Signals] Dropping halt from post-phase signal directive (pre-LLM-only field)');
449
+ delete mergedDirective.halt;
450
+ }
451
+ }
452
+ // Check if merged directive is now empty after stripping
453
+ const hasFields = Object.keys(mergedDirective).length > 0;
454
+ if (!hasFields) {
455
+ mergedDirective = undefined;
456
+ }
457
+ }
458
+ return { mergedDirective, firings, updatedSession };
459
+ }
460
+ // ──────────────────────────────────────────────────────────────────────────
461
+ // Directive merging — Algorithm 4 pattern
462
+ // ──────────────────────────────────────────────────────────────────────────
463
+ /**
464
+ * Merges an array of signal directives into a single directive.
465
+ *
466
+ * Merge strategy (matches Algorithm 4 / AutoChainExecutor pattern):
467
+ * - Position fields (`goTo`, `goToStep`, `complete`, `abort`, `reset`, `halt`): last-write-wins
468
+ * - `reply`: last-write-wins
469
+ * - `appendPrompt`: array-concat
470
+ * - `injectTools`: array-concat
471
+ * - `dataUpdate`: shallow-merge (later values overwrite earlier for same key)
472
+ * - `contextUpdate`: shallow-merge
473
+ * - `stopOtherSignals`: OR (any true → true)
474
+ */
475
+ mergeDirectives(directives) {
476
+ const merged = {};
477
+ for (const d of directives) {
478
+ // Position fields — last-write-wins
479
+ if (d.goTo !== undefined) {
480
+ merged.goTo = d.goTo;
481
+ // Clear other position fields
482
+ delete merged.goToStep;
483
+ delete merged.complete;
484
+ delete merged.abort;
485
+ delete merged.reset;
486
+ }
487
+ if (d.goToStep !== undefined) {
488
+ merged.goToStep = d.goToStep;
489
+ delete merged.goTo;
490
+ delete merged.complete;
491
+ delete merged.abort;
492
+ delete merged.reset;
493
+ }
494
+ if (d.complete !== undefined) {
495
+ merged.complete = d.complete;
496
+ delete merged.goTo;
497
+ delete merged.goToStep;
498
+ delete merged.abort;
499
+ delete merged.reset;
500
+ }
501
+ if (d.abort !== undefined) {
502
+ merged.abort = d.abort;
503
+ delete merged.goTo;
504
+ delete merged.goToStep;
505
+ delete merged.complete;
506
+ delete merged.reset;
507
+ }
508
+ if (d.reset !== undefined) {
509
+ merged.reset = d.reset;
510
+ delete merged.goTo;
511
+ delete merged.goToStep;
512
+ delete merged.complete;
513
+ delete merged.abort;
514
+ }
515
+ // halt — last-write-wins
516
+ if (d.halt !== undefined) {
517
+ merged.halt = d.halt;
518
+ }
519
+ // reply — last-write-wins
520
+ if (d.reply !== undefined) {
521
+ merged.reply = d.reply;
522
+ }
523
+ // appendPrompt — array-concat
524
+ if (d.appendPrompt != null) {
525
+ merged.appendPrompt = [
526
+ ...(merged.appendPrompt ?? []),
527
+ ...d.appendPrompt,
528
+ ];
529
+ }
530
+ // injectTools — array-concat
531
+ if (d.injectTools != null) {
532
+ merged.injectTools = [
533
+ ...(merged.injectTools ?? []),
534
+ ...d.injectTools,
535
+ ];
536
+ }
537
+ // dataUpdate — shallow-merge
538
+ if (d.dataUpdate != null) {
539
+ merged.dataUpdate = {
540
+ ...(merged.dataUpdate ?? {}),
541
+ ...d.dataUpdate,
542
+ };
543
+ }
544
+ // contextUpdate — shallow-merge
545
+ if (d.contextUpdate != null) {
546
+ merged.contextUpdate = {
547
+ ...(merged.contextUpdate ?? {}),
548
+ ...d.contextUpdate,
549
+ };
550
+ }
551
+ }
552
+ return merged;
553
+ }
554
+ }
555
+ //# sourceMappingURL=SignalProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignalProcessor.js","sourceRoot":"","sources":["../../src/core/SignalProcessor.ts"],"names":[],"mappings":"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"}