@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,556 +0,0 @@
1
- /**
2
- * Rules & Prohibitions Example
3
- * Updated for v2 architecture with session step management
4
- *
5
- * Demonstrates how to use rules and prohibitions to control agent behavior
6
- * in different conversation routes (e.g., WhatsApp bot with different styles)
7
- *
8
- * NEW: Enhanced with complex ConditionTemplate patterns:
9
- * - Mixed conditions: ["AI context", (ctx) => keyword_detection]
10
- * - Route skipIf: Dynamic route exclusion based on message analysis
11
- * - Function-only conditions: (ctx) => sophisticated_routing_logic
12
- * - String-only conditions: "simple AI context for general chat"
13
- * - Emergency routing with never-skip logic (skipIf: false)
14
- * - Performance patterns for real-time condition evaluation
15
- */
16
-
17
- import { Agent, type History, END_ROUTE, OpenAIProvider } from "../../src";
18
-
19
- /**
20
- * Configuration for the AI provider
21
- */
22
- const provider = new OpenAIProvider({
23
- apiKey: process.env.OPENAI_API_KEY || "your-api-key-here",
24
- model: "gpt-5",
25
- });
26
-
27
- // Define data schema for feedback collection
28
- interface ServiceData {
29
- feedbackRating?: number;
30
- feedbackComments?: string;
31
- }
32
-
33
- const serviceSchema = {
34
- type: "object",
35
- properties: {
36
- feedbackRating: {
37
- type: "number",
38
- description: "Rating from 1-5",
39
- minimum: 1,
40
- maximum: 5,
41
- },
42
- feedbackComments: {
43
- type: "string",
44
- description: "Additional feedback comments",
45
- },
46
- },
47
- };
48
-
49
- /**
50
- * Create a new agent instance with predefined routes and rules/prohibitions.
51
- */
52
- const agent = new Agent<unknown, ServiceData>({
53
- name: "CustomerServiceAgent",
54
- description:
55
- "A versatile customer service agent that adapts its behavior based on the conversation's context.",
56
- goal: "Provide excellent customer service by following route-specific rules and prohibitions.",
57
- provider,
58
- // NEW: Agent-level schema
59
- schema: serviceSchema,
60
- debug: true,
61
-
62
- // Knowledge base with customer service best practices
63
- knowledgeBase: {
64
- communicationGuidelines: {
65
- channels: {
66
- whatsapp: {
67
- maxMessageLength: "1000 characters",
68
- supports: ["text", "images", "documents"],
69
- bestFor: [
70
- "Quick questions",
71
- "Personal communication",
72
- "Mobile users",
73
- ],
74
- },
75
- email: {
76
- maxMessageLength: "No limit",
77
- supports: ["text", "attachments", "formatting"],
78
- bestFor: [
79
- "Detailed inquiries",
80
- "Documentation",
81
- "Formal communication",
82
- ],
83
- },
84
- chat: {
85
- maxMessageLength: "Real-time",
86
- supports: ["text", "quick responses"],
87
- bestFor: ["Immediate help", "Simple questions", "Live support"],
88
- },
89
- },
90
- toneGuidelines: {
91
- professional: "Formal language, complete sentences, proper grammar",
92
- casual: "Friendly language, contractions, emojis allowed",
93
- urgent: "Direct, clear, action-oriented language",
94
- },
95
- },
96
- escalationPaths: {
97
- technical: "Route to technical support team",
98
- billing: "Route to billing department",
99
- complaint: "Route to customer success manager",
100
- legal: "Route to legal/compliance team",
101
- },
102
- responseTimeTargets: {
103
- whatsapp: "Within 5 minutes during business hours",
104
- email: "Within 24 hours",
105
- chat: "Immediate response",
106
- emergency: "Immediate escalation",
107
- },
108
- customerSegments: {
109
- new: "Welcome warmly, provide overview, offer help",
110
- returning: "Personalize greeting, reference history, anticipate needs",
111
- vip: "Priority service, direct manager access, special offers",
112
- enterprise: "Dedicated account manager, SLA guarantees, custom solutions",
113
- },
114
- },
115
- });
116
-
117
- /**
118
- * Add routes to the agent.
119
- */
120
- agent.createRoute({
121
- title: "Quick Support",
122
- description: "Fast answers for common questions",
123
- // Mixed condition: AI context + programmatic validation
124
- when: [
125
- "User has a simple question",
126
- "User wants quick help",
127
- (ctx) => {
128
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
129
- return message.includes('quick') || message.includes('simple') || message.length < 50;
130
- }
131
- ],
132
- // Skip if user seems to need detailed help
133
- skipIf: [
134
- "user needs detailed or complex assistance",
135
- (ctx) => {
136
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
137
- return message.includes('detailed') || message.includes('complex') || message.length > 100;
138
- }
139
- ],
140
- rules: [
141
- "Keep messages extremely short (1-2 lines maximum)",
142
- "Use bullet points for lists",
143
- "Maximum 1 emoji per message šŸ‘",
144
- "Be direct and to the point",
145
- ],
146
- prohibitions: [
147
- "Never send long paragraphs",
148
- "Do not over-explain",
149
- "Never use more than 2 emojis",
150
- "Do not ask follow-up questions unless necessary",
151
- ],
152
- });
153
-
154
- agent.createRoute({
155
- title: "Sales Consultation",
156
- description: "Help customer discover needs and present solutions",
157
- // Function-only condition for programmatic sales detection
158
- when: (ctx) => {
159
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
160
- return message.includes('buy') || message.includes('purchase') ||
161
- message.includes('price') || message.includes('cost') ||
162
- message.includes('product') || message.includes('interested');
163
- },
164
- // Skip if user is having technical issues
165
- skipIf: [
166
- "user has technical problems that need solving first",
167
- (ctx) => {
168
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
169
- return message.includes('broken') || message.includes('error') ||
170
- message.includes('not working') || message.includes('problem');
171
- }
172
- ],
173
- rules: [
174
- "Ask open-ended questions to discover needs",
175
- "Use storytelling when presenting solutions",
176
- "Emoji to reinforce positive emotions 😊✨",
177
- "Present value before mentioning price",
178
- "Make customer feel special and understood",
179
- ],
180
- prohibitions: [
181
- "Never talk about price before showing value",
182
- "Do not pressure or push",
183
- "Avoid technical jargon",
184
- "Never send more than 2 messages without waiting for response",
185
- "Do not make promises you cannot keep",
186
- ],
187
- // Route-level guidelines for sales behavior
188
- guidelines: [
189
- {
190
- condition: "Customer mentions budget concerns",
191
- action: "Focus on ROI and long-term value rather than upfront cost",
192
- },
193
- {
194
- condition: "Customer seems hesitant or unsure",
195
- action: "Offer a free trial or consultation to reduce risk",
196
- },
197
- {
198
- condition: "Customer asks for competitors comparison",
199
- action:
200
- "Highlight unique strengths and differentiators without negative comments",
201
- },
202
- ],
203
- });
204
-
205
- agent.createRoute({
206
- title: "Technical Support",
207
- description: "Help with technical issues and troubleshooting",
208
- // Mixed condition: AI context + technical keyword detection
209
- when: [
210
- "User has technical problem",
211
- "User needs step-by-step help",
212
- (ctx) => {
213
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
214
- return message.includes('help') || message.includes('problem') ||
215
- message.includes('error') || message.includes('not working') ||
216
- message.includes('broken') || message.includes('fix');
217
- }
218
- ],
219
- // Skip if user is just browsing or asking about sales
220
- skipIf: (ctx) => {
221
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
222
- return message.includes('price') || message.includes('buy') || message.includes('cost');
223
- },
224
- rules: [
225
- "Provide clear, numbered steps",
226
- "Use simple language for technical concepts",
227
- "Confirm understanding after each major step",
228
- "Offer screenshots or visual aids when helpful",
229
- "Be patient and thorough",
230
- ],
231
- prohibitions: [
232
- "Never skip steps or assume knowledge",
233
- "Do not use excessive technical terms without explanation",
234
- "Never blame the user for the issue",
235
- "Do not rush through explanations",
236
- ],
237
- });
238
-
239
- // Add a stepful feedback flow to the Technical Support route
240
- const techSupportRoute = agent
241
- .getRoutes()
242
- .find((r) => r.title === "Technical Support")!;
243
- techSupportRoute.initialStep
244
- .nextStep({
245
- prompt: "Provide step-by-step technical assistance.",
246
- })
247
- .nextStep({
248
- prompt: "Ask for a rating of the support provided (1-5).",
249
- collect: ["feedbackRating"],
250
- })
251
- .nextStep({
252
- prompt: "Ask for any additional comments.",
253
- collect: ["feedbackComments"],
254
- })
255
- .nextStep({
256
- prompt: "Thank the user for their feedback.",
257
- })
258
- .nextStep({ step: END_ROUTE });
259
-
260
- agent.createRoute({
261
- title: "Emergency Support",
262
- description: "Handle urgent customer issues",
263
- // Mixed condition: AI context + urgency detection
264
- when: [
265
- "Customer is frustrated",
266
- "Urgent issue",
267
- "Service down",
268
- (ctx) => {
269
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
270
- const urgentWords = ['urgent', 'emergency', 'critical', 'down', 'broken', 'frustrated', 'angry'];
271
- return urgentWords.some(word => message.includes(word)) || message.includes('!!!');
272
- }
273
- ],
274
- // Never skip emergency support
275
- skipIf: ()=>false,
276
- rules: [
277
- "Acknowledge the urgency immediately",
278
- "Express empathy and understanding",
279
- "Provide concrete next steps",
280
- "Set clear expectations on resolution time",
281
- "Keep customer updated",
282
- ],
283
- prohibitions: [
284
- "Never downplay the customer's concern",
285
- "Do not use emojis (keep it professional)",
286
- 'Never say "calm down" or similar dismissive phrases',
287
- "Do not transfer without explaining why",
288
- "Never make excuses or blame others",
289
- ],
290
- });
291
-
292
- agent.createRoute({
293
- title: "General Chat",
294
- description: "Casual conversation and general questions",
295
- // String-only condition for AI context
296
- when: "User is just chatting, greeting, or asking general questions",
297
- // Skip if user has specific needs that other routes can handle
298
- skipIf: (ctx) => {
299
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
300
- return message.includes('help') || message.includes('buy') ||
301
- message.includes('problem') || message.includes('urgent');
302
- },
303
- rules: [
304
- "Be friendly and conversational",
305
- "Use emojis naturally 😊",
306
- "Mirror the customer's tone and energy",
307
- "Keep it light and positive",
308
- ],
309
- prohibitions: [
310
- "Do not be overly formal",
311
- "Never ignore the customer's mood",
312
- "Do not push products unless asked",
313
- ],
314
- });
315
-
316
- /**
317
- * Demonstration function to show how the agent responds to different scenarios.
318
- */
319
- async function demonstrateRulesAndProhibitions() {
320
- const agent = new Agent<unknown, ServiceData>({
321
- name: "CustomerServiceAgent",
322
- description:
323
- "A versatile customer service agent that adapts its behavior based on the conversation's context.",
324
- goal: "Provide excellent customer service by following route-specific rules and prohibitions.",
325
- provider,
326
- // NEW: Agent-level schema
327
- schema: serviceSchema,
328
- debug: true,
329
- });
330
-
331
- // Add domains
332
- agent.createRoute({
333
- title: "Quick Support",
334
- description: "Fast answers for common questions",
335
- when: ["User has a simple question", "User wants quick help"],
336
- rules: [
337
- "Keep messages extremely short (1-2 lines maximum)",
338
- "Use bullet points for lists",
339
- "Maximum 1 emoji per message šŸ‘",
340
- "Be direct and to the point",
341
- ],
342
- prohibitions: [
343
- "Never send long paragraphs",
344
- "Do not over-explain",
345
- "Never use more than 2 emojis",
346
- "Do not ask follow-up questions unless necessary",
347
- ],
348
- });
349
-
350
- agent.createRoute({
351
- title: "Sales Consultation",
352
- description: "Help customer discover needs and present solutions",
353
- when: [
354
- "User is interested in buying",
355
- "User wants product information",
356
- ],
357
- rules: [
358
- "Ask open-ended questions to discover needs",
359
- "Use storytelling when presenting solutions",
360
- "Emoji to reinforce positive emotions 😊✨",
361
- "Present value before mentioning price",
362
- "Make customer feel special and understood",
363
- ],
364
- prohibitions: [
365
- "Never talk about price before showing value",
366
- "Do not pressure or push",
367
- "Avoid technical jargon",
368
- "Never send more than 2 messages without waiting for response",
369
- "Do not make promises you cannot keep",
370
- ],
371
- });
372
-
373
- agent.createRoute({
374
- title: "Technical Support",
375
- description: "Help with technical issues and troubleshooting",
376
- when: ["User has technical problem", "User needs step-by-step help"],
377
- rules: [
378
- "Provide clear, numbered steps",
379
- "Use simple language for technical concepts",
380
- "Confirm understanding after each major step",
381
- "Offer screenshots or visual aids when helpful",
382
- "Be patient and thorough",
383
- ],
384
- prohibitions: [
385
- "Never skip steps or assume knowledge",
386
- "Do not use excessive technical terms without explanation",
387
- "Never blame the user for the issue",
388
- "Do not rush through explanations",
389
- ],
390
- });
391
-
392
- // Add a stepful feedback flow to the Technical Support route
393
- const techSupportRoute = agent
394
- .getRoutes()
395
- .find((r) => r.title === "Technical Support")!;
396
- techSupportRoute.initialStep
397
- .nextStep({
398
- prompt: "Provide step-by-step technical assistance.",
399
- })
400
- .nextStep({
401
- prompt: "Ask for a rating of the support provided (1-5).",
402
- collect: ["feedbackRating"],
403
- })
404
- .nextStep({
405
- prompt: "Ask for any additional comments.",
406
- collect: ["feedbackComments"],
407
- })
408
- .nextStep({
409
- prompt: "Thank the user for their feedback.",
410
- })
411
- .nextStep({ step: END_ROUTE });
412
-
413
- agent.createRoute({
414
- title: "Emergency Support",
415
- description: "Handle urgent customer issues",
416
- when: ["Customer is frustrated", "Urgent issue", "Service down"],
417
- rules: [
418
- "Acknowledge the urgency immediately",
419
- "Express empathy and understanding",
420
- "Provide concrete next steps",
421
- "Set clear expectations on resolution time",
422
- "Keep customer updated",
423
- ],
424
- prohibitions: [
425
- "Never downplay the customer's concern",
426
- "Do not use emojis (keep it professional)",
427
- 'Never say "calm down" or similar dismissive phrases',
428
- "Do not transfer without explaining why",
429
- "Never make excuses or blame others",
430
- ],
431
- });
432
-
433
- agent.createRoute({
434
- title: "General Chat",
435
- description: "Casual conversation and general questions",
436
- when: ["User is just chatting", "Greeting", "General question"],
437
- rules: [
438
- "Be friendly and conversational",
439
- "Use emojis naturally 😊",
440
- "Mirror the customer's tone and energy",
441
- "Keep it light and positive",
442
- ],
443
- prohibitions: [
444
- "Do not be overly formal",
445
- "Never ignore the customer's mood",
446
- "Do not push products unless asked",
447
- ],
448
- });
449
-
450
- console.info("\n=== Rules & Prohibitions Demo ===\n");
451
-
452
- // --- Quick Support ---
453
- console.info("1ļøāƒ£ Quick Support Route (short, direct)");
454
- const quickSupportMessages: History = [
455
- {
456
- role: "user",
457
- content: "How do I reset my password?",
458
- },
459
- ];
460
- const response1 = await agent.respond({ history: quickSupportMessages });
461
- console.info(`Route: ${response1.session?.currentRoute?.title}`);
462
- console.info(`Response: ${response1.message}`);
463
- console.info(`Expected: Short, direct, max 1 emoji\n`);
464
-
465
- // --- Sales Consultation ---
466
- console.info("2ļøāƒ£ Sales Consultation Route (conversational, value-first)");
467
- const salesMessages: History = [
468
- {
469
- role: "user",
470
- content: "How much does your premium plan cost?",
471
- },
472
- ];
473
- const response2 = await agent.respond({ history: salesMessages });
474
- console.info(`Route: ${response2.session?.currentRoute?.title}`);
475
- console.info(`Response: ${response2.message}`);
476
- console.info(`Expected: Ask about needs, show value before price\n`);
477
-
478
- // --- Technical Support ---
479
- console.info("3ļøāƒ£ Technical Support Route (detailed, step-by-step)");
480
- const techSupportMessages: History = [
481
- {
482
- role: "user",
483
- content: "My new headphones won't connect to Bluetooth.",
484
- },
485
- ];
486
- const response3 = await agent.respond({ history: techSupportMessages });
487
- console.info(`Route: ${response3.session?.currentRoute?.title}`);
488
- console.info(`Response: ${response3.message}`);
489
- console.info(`Expected: Clear steps, simple language, patient\n`);
490
- if (response3.isRouteComplete) {
491
- console.info("\nāœ… Technical support feedback collected!");
492
- }
493
-
494
- // --- Emergency Support ---
495
- console.info("4ļøāƒ£ Emergency Support Route (urgent, professional)");
496
- const emergencyMessages: History = [
497
- {
498
- role: "user",
499
- content: "My account has been compromised!",
500
- },
501
- ];
502
- const response4 = await agent.respond({ history: emergencyMessages });
503
- console.info(`Route: ${response4.session?.currentRoute?.title}`);
504
- console.info(`Response: ${response4.message}`);
505
- console.info(`Expected: Acknowledge urgency, no emojis, concrete steps\n`);
506
-
507
- // --- General Chat ---
508
- console.info("5ļøāƒ£ General Chat Route (friendly, casual)");
509
- const generalMessages: History = [
510
- {
511
- role: "user",
512
- content: "What's the weather like today?",
513
- },
514
- ];
515
- const response5 = await agent.respond({ history: generalMessages });
516
- console.info(`Route: ${response5.session?.currentRoute?.title}`);
517
- console.info(`Response: ${response5.message}`);
518
- console.info(`Expected: Friendly, emojis, mirrors customer tone\n`);
519
- }
520
-
521
- /**
522
- * Inspect route configurations.
523
- */
524
- console.info("\nšŸ“‹ Route Configurations:\n");
525
- agent.getRoutes().forEach((route) => {
526
- console.info(`\nšŸ›¤ļø ${route.title}`);
527
- const rules = route.getRules();
528
- const prohibitions = route.getProhibitions();
529
-
530
- if (rules.length > 0) {
531
- console.info(` āœ… Rules (${rules.length}):`);
532
- rules.forEach((rule, i) => console.info(` ${i + 1}. ${String(rule)}`));
533
- }
534
-
535
- if (prohibitions.length > 0) {
536
- console.info(` āŒ Prohibitions (${prohibitions.length}):`);
537
- prohibitions.forEach((prohibition, i) =>
538
- console.info(` ${i + 1}. ${String(prohibition)}`)
539
- );
540
- }
541
- });
542
-
543
- /**
544
- * Benefits explanation.
545
- */
546
- console.info(`
547
- šŸ’” This demo shows how rules and prohibitions, combined with routing,
548
- allow a single agent to handle diverse scenarios with tailored,
549
- context-appropriate behavior.
550
- `);
551
- // Run demonstration
552
- if (import.meta.url === `file://${process.argv[1]}`) {
553
- demonstrateRulesAndProhibitions().catch((err) => console.error(err));
554
- }
555
-
556
- export { agent };