@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
@@ -1,518 +0,0 @@
1
- # ResponseModal Refactor Migration Guide
2
-
3
- This guide helps you migrate from the legacy response APIs to the new ResponseModal architecture introduced in the latest version. The refactor provides better architecture, modern streaming APIs, and improved maintainability while maintaining full backward compatibility.
4
-
5
- ## 📋 Table of Contents
6
-
7
- - [Overview](#overview)
8
- - [What Changed](#what-changed)
9
- - [Backward Compatibility](#backward-compatibility)
10
- - [New Modern APIs](#new-modern-apis)
11
- - [Migration Strategies](#migration-strategies)
12
- - [Side-by-Side Comparisons](#side-by-side-comparisons)
13
- - [Benefits of Migration](#benefits-of-migration)
14
- - [Troubleshooting](#troubleshooting)
15
-
16
- ## Overview
17
-
18
- The ResponseModal refactor centralizes all response generation logic into a dedicated `ResponseModal` class, providing:
19
-
20
- - **🏗️ Better Architecture**: Separation of concerns between Agent configuration and response generation
21
- - **🚀 Modern APIs**: Simple `stream()` and `generate()` methods with automatic session management
22
- - **🔄 Backward Compatibility**: All existing `respond()` and `respondStream()` methods work unchanged
23
- - **⚡ Performance**: Unified response logic eliminates code duplication
24
- - **🛠️ Maintainability**: Centralized response logic is easier to test and maintain
25
-
26
- ## What Changed
27
-
28
- ### Internal Architecture
29
-
30
- ```mermaid
31
- graph TD
32
- subgraph "Before: Monolithic Agent"
33
- A1[Agent Class<br/>2000+ lines] --> RL[Response Logic]
34
- A1 --> SM[Session Management]
35
- A1 --> RE[Response Engine]
36
- A1 --> RP[Response Pipeline]
37
- end
38
-
39
- subgraph "After: Separated Concerns"
40
- A2[Agent Class<br/>Simplified] --> RM[ResponseModal]
41
- A2 --> SM2[Session Management]
42
- RM --> RE2[Response Engine]
43
- RM --> RP2[Response Pipeline]
44
- RM --> UL[Unified Logic]
45
- end
46
-
47
- style A1 fill:#ffcccc
48
- style A2 fill:#ccffcc
49
- style RM fill:#ccffcc
50
- ```
51
-
52
- ### New Classes
53
-
54
- - **`ResponseModal<TContext, TData>`**: Handles all response generation logic
55
- - **`ResponseGenerationError`**: Specialized error handling for response failures
56
- - **New interfaces**: `StreamOptions`, `GenerateOptions`, `ResponseModalOptions`
57
-
58
- ### New Methods
59
-
60
- - **`agent.stream(message, options?)`**: Modern streaming API with automatic session management
61
- - **`responseModal.generate(message, options?)`**: Modern non-streaming API (internal)
62
-
63
- ## Backward Compatibility
64
-
65
- **✅ All existing code continues to work without changes.**
66
-
67
- ```typescript
68
- // These methods work exactly the same as before
69
- const response = await agent.respond({ history, session });
70
- const stream = agent.respondStream({ history, session });
71
- const chatResponse = await agent.chat("Hello");
72
- ```
73
-
74
- The only difference is that these methods now delegate to the internal `ResponseModal` class for better architecture.
75
-
76
- ## New Modern APIs
77
-
78
- ### Modern Streaming: `agent.stream()`
79
-
80
- The new `stream()` method provides a much simpler interface for streaming responses:
81
-
82
- ```typescript
83
- // NEW: Modern streaming API
84
- for await (const chunk of agent.stream("Hello, how are you?")) {
85
- if (chunk.delta) {
86
- process.stdout.write(chunk.delta);
87
- }
88
-
89
- if (chunk.done) {
90
- console.log("Stream complete!");
91
- // Session history is automatically updated
92
- }
93
- }
94
- ```
95
-
96
- **Key Features:**
97
- - 🎯 Simple interface: just pass the message
98
- - 🔄 Automatic session management
99
- - 🌊 Same streaming performance as `respondStream()`
100
- - 🛑 Supports AbortSignal for cancellation
101
- - ⚙️ Optional context override
102
-
103
- ### Options Support
104
-
105
- ```typescript
106
- // With options
107
- for await (const chunk of agent.stream("Explain quantum computing", {
108
- contextOverride: { userId: "123" },
109
- signal: abortController.signal
110
- })) {
111
- // Handle chunk
112
- }
113
- ```
114
-
115
- ## Migration Strategies
116
-
117
- ### Strategy 1: Gradual Migration (Recommended)
118
-
119
- Migrate to modern APIs gradually while keeping existing code working:
120
-
121
- ```typescript
122
- // Phase 1: Keep existing code working
123
- const response = await agent.respond({ history, session }); // ✅ Still works
124
-
125
- // Phase 2: Start using modern APIs for new features
126
- for await (const chunk of agent.stream("New feature message")) {
127
- // Handle streaming
128
- }
129
-
130
- // Phase 3: Gradually replace old APIs when convenient
131
- // Old: agent.respondStream({ history: agent.session.getHistory() })
132
- // New: agent.stream("message")
133
- ```
134
-
135
- ### Strategy 2: Full Migration
136
-
137
- Replace all streaming calls with the modern API:
138
-
139
- ```typescript
140
- // Before: Manual session management
141
- await agent.session.addMessage("user", userMessage);
142
- for await (const chunk of agent.respondStream({
143
- history: agent.session.getHistory()
144
- })) {
145
- // Handle chunk
146
- if (chunk.done) {
147
- await agent.session.addMessage("assistant", chunk.accumulated);
148
- }
149
- }
150
-
151
- // After: Automatic session management
152
- for await (const chunk of agent.stream(userMessage)) {
153
- // Handle chunk - session is automatically managed
154
- }
155
- ```
156
-
157
- ### Strategy 3: Hybrid Approach
158
-
159
- Use modern APIs for new code, keep legacy APIs for complex existing implementations:
160
-
161
- ```typescript
162
- // Complex existing code - keep using respondStream()
163
- const complexResponse = await agent.respondStream({
164
- history: customHistory,
165
- session: customSession,
166
- contextOverride: complexContext,
167
- signal: customSignal
168
- });
169
-
170
- // Simple new code - use modern stream()
171
- for await (const chunk of agent.stream("Simple question")) {
172
- // Handle chunk
173
- }
174
- ```
175
-
176
- ## Side-by-Side Comparisons
177
-
178
- ### Basic Streaming
179
-
180
- ```typescript
181
- // ❌ OLD WAY: respondStream() - Manual session management
182
- await agent.session.addMessage("user", "What is TypeScript?");
183
- let fullMessage = "";
184
-
185
- for await (const chunk of agent.respondStream({
186
- history: agent.session.getHistory()
187
- })) {
188
- if (chunk.delta) {
189
- process.stdout.write(chunk.delta);
190
- fullMessage += chunk.delta;
191
- }
192
-
193
- if (chunk.done) {
194
- await agent.session.addMessage("assistant", fullMessage);
195
- }
196
- }
197
-
198
- // ✅ NEW WAY: stream() - Automatic session management
199
- for await (const chunk of agent.stream("What is TypeScript?")) {
200
- if (chunk.delta) {
201
- process.stdout.write(chunk.delta);
202
- }
203
- // Session is automatically updated when done
204
- }
205
- ```
206
-
207
- ### Multi-turn Conversations
208
-
209
- ```typescript
210
- // ❌ OLD WAY: Manual history management
211
- const messages = ["Hello", "How are you?", "Tell me about AI"];
212
-
213
- for (const message of messages) {
214
- await agent.session.addMessage("user", message);
215
-
216
- let response = "";
217
- for await (const chunk of agent.respondStream({
218
- history: agent.session.getHistory()
219
- })) {
220
- if (chunk.delta) response += chunk.delta;
221
- if (chunk.done) {
222
- await agent.session.addMessage("assistant", response);
223
- }
224
- }
225
- }
226
-
227
- // ✅ NEW WAY: Automatic session management
228
- const messages = ["Hello", "How are you?", "Tell me about AI"];
229
-
230
- for (const message of messages) {
231
- for await (const chunk of agent.stream(message)) {
232
- if (chunk.delta) process.stdout.write(chunk.delta);
233
- // Session automatically updated
234
- }
235
- }
236
- ```
237
-
238
- ### With Abort Signals
239
-
240
- ```typescript
241
- // ❌ OLD WAY: Complex parameter structure
242
- const abortController = new AbortController();
243
- await agent.session.addMessage("user", "Long story please");
244
-
245
- for await (const chunk of agent.respondStream({
246
- history: agent.session.getHistory(),
247
- signal: abortController.signal
248
- })) {
249
- // Handle chunk
250
- }
251
-
252
- // ✅ NEW WAY: Simple options structure
253
- const abortController = new AbortController();
254
-
255
- for await (const chunk of agent.stream("Long story please", {
256
- signal: abortController.signal
257
- })) {
258
- // Handle chunk
259
- }
260
- ```
261
-
262
- ### Context Override
263
-
264
- ```typescript
265
- // ❌ OLD WAY: Complex parameter passing
266
- for await (const chunk of agent.respondStream({
267
- history: agent.session.getHistory(),
268
- contextOverride: { userId: "123" }
269
- })) {
270
- // Handle chunk
271
- }
272
-
273
- // ✅ NEW WAY: Clean options structure
274
- for await (const chunk of agent.stream("Hello", {
275
- contextOverride: { userId: "123" }
276
- })) {
277
- // Handle chunk
278
- }
279
- ```
280
-
281
- ## Benefits of Migration
282
-
283
- ### 1. Simplified Code
284
-
285
- **Before:**
286
- ```typescript
287
- // 6 lines of manual session management
288
- await agent.session.addMessage("user", userMessage);
289
- let fullResponse = "";
290
- for await (const chunk of agent.respondStream({ history: agent.session.getHistory() })) {
291
- if (chunk.delta) fullResponse += chunk.delta;
292
- if (chunk.done) await agent.session.addMessage("assistant", fullResponse);
293
- }
294
- ```
295
-
296
- **After:**
297
- ```typescript
298
- // 3 lines with automatic session management
299
- for await (const chunk of agent.stream(userMessage)) {
300
- if (chunk.delta) process.stdout.write(chunk.delta);
301
- }
302
- ```
303
-
304
- ### 2. Reduced Errors
305
-
306
- Common mistakes eliminated:
307
- - ❌ Forgetting to add user message to session
308
- - ❌ Forgetting to add assistant response to session
309
- - ❌ Incorrect history management
310
- - ❌ Session state inconsistencies
311
-
312
- ### 3. Better Performance
313
-
314
- - Unified response logic eliminates code duplication
315
- - Optimized session management
316
- - Reduced memory allocations
317
-
318
- ### 4. Improved Maintainability
319
-
320
- - Centralized response logic in `ResponseModal`
321
- - Better error handling with `ResponseGenerationError`
322
- - Cleaner separation of concerns
323
-
324
- ## Troubleshooting
325
-
326
- ### Common Migration Issues
327
-
328
- #### Issue: "My existing code stopped working"
329
-
330
- **Solution:** This shouldn't happen! All existing APIs are fully backward compatible. If you're experiencing issues:
331
-
332
- ```typescript
333
- // These should all still work exactly as before
334
- const response = await agent.respond({ history, session });
335
- const stream = agent.respondStream({ history, session });
336
- const chat = await agent.chat("Hello");
337
- ```
338
-
339
- #### Issue: "Session history is not being updated with stream()"
340
-
341
- **Solution:** The modern `stream()` API automatically manages session history. You don't need to manually call `addMessage()`:
342
-
343
- ```typescript
344
- // ❌ Don't do this with stream()
345
- await agent.session.addMessage("user", "Hello");
346
- for await (const chunk of agent.stream("Hello")) {
347
- // This will duplicate the message!
348
- }
349
-
350
- // ✅ Do this instead
351
- for await (const chunk of agent.stream("Hello")) {
352
- // Session is automatically managed
353
- }
354
- ```
355
-
356
- #### Issue: "I need custom history with stream()"
357
-
358
- **Solution:** Use the `history` option to override session history:
359
-
360
- ```typescript
361
- // Use custom history without affecting session
362
- for await (const chunk of agent.stream("Hello", {
363
- history: customHistory
364
- })) {
365
- // Uses custom history, doesn't update session
366
- }
367
- ```
368
-
369
- #### Issue: "ResponseGenerationError in my error handling"
370
-
371
- **Solution:** Update error handling to check for the new error type:
372
-
373
- ```typescript
374
- try {
375
- const response = await agent.respond(params);
376
- } catch (error) {
377
- if (error instanceof ResponseGenerationError) {
378
- console.log("Response generation failed:", error.message);
379
- console.log("Phase:", error.details?.phase);
380
- console.log("Original error:", error.details?.originalError);
381
- } else {
382
- // Handle other errors
383
- }
384
- }
385
- ```
386
-
387
- ### Performance Considerations
388
-
389
- #### Memory Usage
390
-
391
- The new architecture is more memory-efficient:
392
- - Unified response logic reduces code duplication
393
- - Better session state management
394
- - Optimized streaming pipeline
395
-
396
- #### Streaming Performance
397
-
398
- Both APIs have identical streaming performance:
399
- - `respondStream()` and `stream()` use the same underlying logic
400
- - No performance penalty for using modern APIs
401
- - Same chunk delivery timing and throughput
402
-
403
- ### Debugging Tips
404
-
405
- #### Enable Debug Mode
406
-
407
- ```typescript
408
- const agent = new Agent({
409
- // ... other options
410
- debug: true // Enable detailed logging
411
- });
412
- ```
413
-
414
- #### Access ResponseModal Directly (Advanced)
415
-
416
- ```typescript
417
- // For advanced debugging only
418
- const responseModal = (agent as any).responseModal;
419
- console.log("ResponseModal instance:", responseModal);
420
- ```
421
-
422
- #### Check Session State
423
-
424
- ```typescript
425
- // Monitor session state during streaming
426
- for await (const chunk of agent.stream("Hello")) {
427
- if (chunk.done) {
428
- console.log("Session messages:", agent.session.getHistory().length);
429
- console.log("Session data:", agent.session.getData());
430
- }
431
- }
432
- ```
433
-
434
- ## Best Practices
435
-
436
- ### 1. Use Modern APIs for New Code
437
-
438
- ```typescript
439
- // ✅ Recommended for new implementations
440
- for await (const chunk of agent.stream("Hello")) {
441
- // Handle chunk
442
- }
443
-
444
- // ❌ Avoid for new code (but still supported)
445
- for await (const chunk of agent.respondStream({ history })) {
446
- // More complex
447
- }
448
- ```
449
-
450
- ### 2. Migrate Gradually
451
-
452
- ```typescript
453
- // Phase 1: Keep existing complex code
454
- const complexResponse = await agent.respondStream({
455
- history: customHistory,
456
- session: customSession,
457
- contextOverride: complexContext
458
- });
459
-
460
- // Phase 2: Use modern APIs for simple cases
461
- for await (const chunk of agent.stream("Simple question")) {
462
- // Handle chunk
463
- }
464
-
465
- // Phase 3: Migrate complex code when convenient
466
- ```
467
-
468
- ### 3. Handle Errors Appropriately
469
-
470
- ```typescript
471
- try {
472
- for await (const chunk of agent.stream("Hello")) {
473
- // Handle chunk
474
- }
475
- } catch (error) {
476
- if (error instanceof ResponseGenerationError) {
477
- // Handle response-specific errors
478
- console.log("Response failed:", error.details?.phase);
479
- } else if (error.name === "AbortError") {
480
- // Handle cancellation
481
- console.log("Stream was cancelled");
482
- } else {
483
- // Handle other errors
484
- console.error("Unexpected error:", error);
485
- }
486
- }
487
- ```
488
-
489
- ### 4. Use AbortSignal for Long Operations
490
-
491
- ```typescript
492
- const controller = new AbortController();
493
- setTimeout(() => controller.abort(), 30000); // 30s timeout
494
-
495
- for await (const chunk of agent.stream("Complex question", {
496
- signal: controller.signal
497
- })) {
498
- // Handle chunk
499
- }
500
- ```
501
-
502
- ## Conclusion
503
-
504
- The ResponseModal refactor provides significant improvements in architecture, usability, and maintainability while maintaining full backward compatibility. You can:
505
-
506
- 1. **Keep existing code working** - No immediate changes required
507
- 2. **Adopt modern APIs gradually** - Migrate at your own pace
508
- 3. **Benefit from improved architecture** - Better performance and maintainability
509
- 4. **Use simpler APIs for new features** - `stream()` is much easier than `respondStream()`
510
-
511
- The modern `stream()` API is the recommended approach for new streaming implementations, but your existing `respondStream()` code will continue to work exactly as before.
512
-
513
- ---
514
-
515
- **Need Help?**
516
- - Check the [examples](../../../examples/) directory for complete working examples
517
- - Review the [API documentation](../../api/) for detailed method signatures
518
- - Look at the [streaming examples](../../../examples/advanced-patterns/streaming-responses.ts) for side-by-side comparisons
@@ -1,164 +0,0 @@
1
- # Prompt Optimization
2
-
3
- The `PromptSectionCache` optimizes prompt generation by memoizing static sections across turns and recomputing only dynamic sections per-turn. Combined with the native history format change, this reduces redundant computation and token usage.
4
-
5
- ## Section Types
6
-
7
- Prompt sections are classified as either static or dynamic:
8
-
9
- | Type | Behavior | Examples |
10
- |---|---|---|
11
- | `static` | Cached after first computation, reused across turns | Agent identity, glossary, knowledge base, route descriptions, scoring rules |
12
- | `dynamic` | Recomputed on every `resolveAll()` call | Instructions, directives, available tools, guidelines |
13
-
14
- Static sections only change when the underlying state changes (context update, session switch, route change). Dynamic sections depend on per-turn state and are always fresh.
15
-
16
- ## Configuration
17
-
18
- Prompt caching is enabled by default. Configure it via the `promptCache` option on the agent:
19
-
20
- ```typescript
21
- import { Agent } from "@falai/agent";
22
-
23
- const agent = new Agent({
24
- name: "MyAgent",
25
- provider: anthropicProvider,
26
- promptCache: {
27
- enabled: true, // default: true
28
- volatileKeys: [], // keys that always recompute, even if registered as static
29
- },
30
- });
31
- ```
32
-
33
- ### PromptCacheConfig
34
-
35
- | Option | Type | Default | Description |
36
- |---|---|---|---|
37
- | `enabled` | `boolean` | `true` | Enable/disable section memoization |
38
- | `volatileKeys` | `string[]` | `[]` | Section keys forced to recompute every turn |
39
-
40
- Set `enabled: false` to disable caching entirely (useful for debugging):
41
-
42
- ```typescript
43
- const agent = new Agent({
44
- name: "DebugAgent",
45
- provider: anthropicProvider,
46
- promptCache: { enabled: false },
47
- });
48
- ```
49
-
50
- ## PromptSectionCache API
51
-
52
- ### `register(key, type, compute)`
53
-
54
- Register a section with a unique key, type (`'static'` or `'dynamic'`), and a compute function.
55
-
56
- ```typescript
57
- cache.register("agentMeta", "static", async () => {
58
- return "## Agent Identity\nYou are MyAgent.";
59
- });
60
-
61
- cache.register("directives", "dynamic", () => {
62
- return "## Directives\n- Address the user's question";
63
- });
64
- ```
65
-
66
- ### `get(key)`
67
-
68
- Retrieve a section's value. Static sections return the cached value when available; dynamic sections always recompute.
69
-
70
- ### `resolveAll()`
71
-
72
- Resolve all registered sections in registration order. Returns `(string | null)[]`.
73
-
74
- ### `invalidate(key)`
75
-
76
- Force a specific section to recompute on the next `resolveAll()` call.
77
-
78
- ```typescript
79
- cache.invalidate("knowledgeBase");
80
- ```
81
-
82
- ### `invalidateAll()`
83
-
84
- Force all sections to recompute. Called automatically on session change or `/clear`.
85
-
86
- ```typescript
87
- cache.invalidateAll();
88
- ```
89
-
90
- ## Automatic Cache Invalidation
91
-
92
- The framework invalidates relevant caches automatically when state changes:
93
-
94
- | Event | Sections Invalidated |
95
- |---|---|
96
- | `agent.updateContext()` | `agentMeta`, `knowledgeBase` |
97
- | Session change / clear | All sections (`invalidateAll()`) |
98
- | Route switch | Route-dependent sections (active routes, route rules, route knowledge base) |
99
-
100
- No manual cache management is needed for typical usage.
101
-
102
- ## Native History Format
103
-
104
- History is now sent as native provider messages via `GenerateMessageInput.history` instead of being JSON-serialized into the system prompt. This saves tokens (no JSON overhead) and lets providers optimize for their native message format.
105
-
106
- ### Migration from `addInteractionHistory()`
107
-
108
- The `PromptComposer.addInteractionHistory()` method is deprecated. If you were calling it directly:
109
-
110
- **Before:**
111
- ```typescript
112
- const pc = new PromptComposer(context);
113
- await pc.addAgentMeta(agentOptions);
114
- await pc.addInteractionHistory(history); // embedded in prompt string
115
- await pc.addLastMessage(lastMessage);
116
- const prompt = await pc.build();
117
-
118
- const response = await provider.generateMessage({ prompt, history: [] });
119
- ```
120
-
121
- **After:**
122
- ```typescript
123
- const pc = new PromptComposer(context, cache);
124
- await pc.addAgentMeta(agentOptions);
125
- // No addInteractionHistory() — history flows natively
126
- const prompt = await pc.build();
127
-
128
- const response = await provider.generateMessage({ prompt, history });
129
- ```
130
-
131
- The `addInteractionHistory()` method still works for backward compatibility but is marked `@deprecated` and will be removed in a future version.
132
-
133
- ## Manual Cache Usage
134
-
135
- You can use `PromptSectionCache` directly for custom prompt pipelines:
136
-
137
- ```typescript
138
- import { PromptSectionCache } from "@falai/agent";
139
-
140
- const cache = new PromptSectionCache({ enabled: true });
141
-
142
- cache.register("identity", "static", () => "You are a helpful assistant.");
143
- cache.register("tools", "dynamic", () => "Available: search, calculate");
144
-
145
- // First call: both sections computed
146
- const sections1 = await cache.resolveAll(); // ["You are a helpful assistant.", "Available: search, calculate"]
147
-
148
- // Second call: identity served from cache, tools recomputed
149
- const sections2 = await cache.resolveAll();
150
-
151
- // Invalidate a specific section
152
- cache.invalidate("identity");
153
-
154
- // Next call: identity recomputed, tools recomputed (always)
155
- const sections3 = await cache.resolveAll();
156
- ```
157
-
158
- ## Key Properties
159
-
160
- - **Static sections cache** — computed once per session, reused across turns until invalidated
161
- - **Dynamic sections recompute** — always fresh on every `resolveAll()` call
162
- - **Automatic invalidation** — context updates, session changes, and route switches trigger targeted invalidation
163
- - **Configurable** — disable caching or mark specific keys as volatile
164
- - **Backward compatible** — `addInteractionHistory()` still works, just deprecated