@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.
- package/README.md +40 -886
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +9 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +5 -5
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +30 -11
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +5 -5
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/constants/index.d.ts +0 -9
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +2 -11
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +119 -153
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +471 -324
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/cjs/core/AutoChainExecutor.js +297 -0
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
- package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/BranchEvaluator.js +130 -0
- package/dist/cjs/core/BranchEvaluator.js.map +1 -0
- package/dist/cjs/core/DirectiveBus.d.ts +88 -0
- package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveBus.js +196 -0
- package/dist/cjs/core/DirectiveBus.js.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.js +121 -0
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
- package/dist/cjs/core/Flow.d.ts +186 -0
- package/dist/cjs/core/Flow.d.ts.map +1 -0
- package/dist/cjs/core/Flow.js +550 -0
- package/dist/cjs/core/Flow.js.map +1 -0
- package/dist/cjs/core/FlowRouter.d.ts +182 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
- package/dist/cjs/core/{RoutingEngine.js ā FlowRouter.js} +323 -306
- package/dist/cjs/core/FlowRouter.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.d.ts +2 -2
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +7 -7
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +21 -8
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +182 -105
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
- package/dist/cjs/core/PromptSectionCache.js +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +18 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +38 -36
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +73 -56
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +1191 -1014
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +509 -136
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/SignalEvaluator.js +333 -0
- package/dist/cjs/core/SignalEvaluator.js.map +1 -0
- package/dist/cjs/core/SignalProcessor.d.ts +152 -0
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
- package/dist/cjs/core/SignalProcessor.js +562 -0
- package/dist/cjs/core/SignalProcessor.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +43 -32
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +221 -126
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +44 -13
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +174 -91
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/core/flow-namespace.d.ts +49 -0
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
- package/dist/cjs/core/flow-namespace.js +171 -0
- package/dist/cjs/core/flow-namespace.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +183 -54
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +0 -6
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/ai.d.ts +3 -3
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +15 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +22 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/flow.d.ts +513 -0
- package/dist/cjs/types/flow.d.ts.map +1 -0
- package/dist/cjs/types/{route.js ā flow.js} +2 -2
- package/dist/cjs/types/flow.js.map +1 -0
- package/dist/cjs/types/index.d.ts +7 -6
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +6 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +11 -7
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/routing.d.ts +1 -1
- package/dist/cjs/types/routing.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +24 -23
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +248 -0
- package/dist/cjs/types/signals.d.ts.map +1 -0
- package/dist/cjs/types/signals.js +11 -0
- package/dist/cjs/types/signals.js.map +1 -0
- package/dist/cjs/types/template.d.ts +2 -8
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +36 -29
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +7 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/id.d.ts +13 -5
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +24 -10
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -2
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +44 -5
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +197 -38
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/constants/index.d.ts +0 -9
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -9
- package/dist/constants/index.js.map +1 -1
- package/dist/core/Agent.d.ts +119 -153
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +472 -325
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +107 -0
- package/dist/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/core/AutoChainExecutor.js +293 -0
- package/dist/core/AutoChainExecutor.js.map +1 -0
- package/dist/core/BranchEvaluator.d.ts +54 -0
- package/dist/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/core/BranchEvaluator.js +126 -0
- package/dist/core/BranchEvaluator.js.map +1 -0
- package/dist/core/DirectiveBus.d.ts +88 -0
- package/dist/core/DirectiveBus.d.ts.map +1 -0
- package/dist/core/DirectiveBus.js +192 -0
- package/dist/core/DirectiveBus.js.map +1 -0
- package/dist/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/core/DirectiveChainTracker.js +117 -0
- package/dist/core/DirectiveChainTracker.js.map +1 -0
- package/dist/core/Flow.d.ts +186 -0
- package/dist/core/Flow.d.ts.map +1 -0
- package/dist/core/Flow.js +546 -0
- package/dist/core/Flow.js.map +1 -0
- package/dist/core/FlowRouter.d.ts +182 -0
- package/dist/core/FlowRouter.d.ts.map +1 -0
- package/dist/core/{RoutingEngine.js ā FlowRouter.js} +322 -305
- package/dist/core/FlowRouter.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts +2 -2
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +7 -7
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +21 -8
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +183 -106
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +1 -1
- package/dist/core/PromptSectionCache.js +1 -1
- package/dist/core/ResponseEngine.d.ts +18 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +38 -36
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +73 -56
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +1193 -1016
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +124 -26
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +509 -137
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +86 -0
- package/dist/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/core/SignalEvaluator.js +326 -0
- package/dist/core/SignalEvaluator.js.map +1 -0
- package/dist/core/SignalProcessor.d.ts +152 -0
- package/dist/core/SignalProcessor.d.ts.map +1 -0
- package/dist/core/SignalProcessor.js +555 -0
- package/dist/core/SignalProcessor.js.map +1 -0
- package/dist/core/Step.d.ts +43 -32
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +220 -126
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +44 -13
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +174 -91
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +35 -0
- package/dist/core/createAgent.d.ts.map +1 -0
- package/dist/core/createAgent.js +36 -0
- package/dist/core/createAgent.js.map +1 -0
- package/dist/core/flow-namespace.d.ts +49 -0
- package/dist/core/flow-namespace.d.ts.map +1 -0
- package/dist/core/flow-namespace.js +168 -0
- package/dist/core/flow-namespace.js.map +1 -0
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/types/agent.d.ts +183 -54
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/ai.d.ts +3 -3
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +18 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/flow.d.ts +513 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +5 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +7 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +11 -7
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/routing.d.ts +1 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -23
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +248 -0
- package/dist/types/signals.d.ts.map +1 -0
- package/dist/types/signals.js +10 -0
- package/dist/types/signals.js.map +1 -0
- package/dist/types/template.d.ts +2 -8
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +36 -29
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +7 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/id.d.ts +13 -5
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +44 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +193 -37
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +15 -202
- package/docs/concepts/architecture.md +281 -0
- package/docs/concepts/directives.md +400 -0
- package/docs/concepts/pipeline.md +399 -0
- package/docs/guides/branching.md +263 -0
- package/docs/guides/compaction.md +163 -0
- package/docs/guides/conditions.md +167 -0
- package/docs/guides/error-handling.md +176 -0
- package/docs/guides/flow-control.md +409 -0
- package/docs/guides/instructions.md +210 -0
- package/docs/guides/persistence.md +182 -0
- package/docs/guides/streaming.md +137 -0
- package/docs/migration/README.md +15 -0
- package/docs/migration/route-to-flow.md +560 -0
- package/docs/migration/v1-to-v2.md +909 -0
- package/docs/reference/adapters.md +481 -0
- package/docs/reference/branches.md +241 -0
- package/docs/reference/create-agent.md +186 -0
- package/docs/reference/directive.md +243 -0
- package/docs/reference/errors.md +122 -0
- package/docs/reference/flow.md +238 -0
- package/docs/reference/instruction.md +177 -0
- package/docs/reference/pre-directive.md +131 -0
- package/docs/reference/providers.md +227 -0
- package/docs/reference/signals.md +356 -0
- package/docs/reference/step.md +339 -0
- package/docs/reference/tool.md +269 -0
- package/docs/start/01-install.md +81 -0
- package/docs/start/02-first-agent.md +196 -0
- package/docs/start/03-collect-data.md +222 -0
- package/docs/start/04-add-tools.md +276 -0
- package/docs/start/05-go-to-production.md +216 -0
- package/examples/01-quickstart.ts +20 -0
- package/examples/02-data-extraction.ts +90 -0
- package/examples/03-tools.ts +136 -0
- package/examples/04-instructions.ts +100 -0
- package/examples/05-branching.ts +140 -0
- package/examples/06-flow-control.ts +103 -0
- package/examples/07-streaming.ts +69 -0
- package/examples/08-persistence.ts +98 -0
- package/examples/09-signals.ts +144 -0
- package/examples/tsconfig.json +30 -0
- package/package.json +2 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +10 -8
- package/src/adapters/PostgreSQLAdapter.ts +26 -10
- package/src/adapters/PrismaAdapter.ts +6 -6
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +31 -12
- package/src/constants/index.ts +2 -10
- package/src/core/Agent.ts +585 -374
- package/src/core/AutoChainExecutor.ts +440 -0
- package/src/core/BranchEvaluator.ts +167 -0
- package/src/core/DirectiveBus.ts +248 -0
- package/src/core/DirectiveChainTracker.ts +144 -0
- package/src/core/Flow.ts +666 -0
- package/src/core/{RoutingEngine.ts ā FlowRouter.ts} +385 -365
- package/src/core/PersistenceManager.ts +8 -8
- package/src/core/PromptComposer.ts +209 -140
- package/src/core/PromptSectionCache.ts +1 -1
- package/src/core/ResponseEngine.ts +61 -46
- package/src/core/ResponseModal.ts +1453 -1240
- package/src/core/ResponsePipeline.ts +655 -175
- package/src/core/SignalEvaluator.ts +420 -0
- package/src/core/SignalProcessor.ts +723 -0
- package/src/core/Step.ts +279 -176
- package/src/core/StreamingToolExecutor.ts +4 -4
- package/src/core/ToolManager.ts +200 -97
- package/src/core/createAgent.ts +40 -0
- package/src/core/flow-namespace.ts +219 -0
- package/src/index.ts +42 -36
- package/src/types/agent.ts +182 -53
- package/src/types/ai.ts +3 -3
- package/src/types/errors.ts +18 -0
- package/src/types/flow.ts +590 -0
- package/src/types/index.ts +43 -16
- package/src/types/persistence.ts +12 -8
- package/src/types/routing.ts +1 -1
- package/src/types/session.ts +26 -23
- package/src/types/signals.ts +321 -0
- package/src/types/template.ts +3 -11
- package/src/types/tool.ts +50 -42
- package/src/utils/condition.ts +13 -4
- package/src/utils/id.ts +27 -9
- package/src/utils/index.ts +6 -2
- package/src/utils/session.ts +238 -42
- package/dist/cjs/core/BatchExecutor.d.ts +0 -359
- package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
- package/dist/cjs/core/BatchExecutor.js +0 -861
- package/dist/cjs/core/BatchExecutor.js.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.js +0 -223
- package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -180
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -542
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -185
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -336
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/route.js.map +0 -1
- package/dist/core/BatchExecutor.d.ts +0 -359
- package/dist/core/BatchExecutor.d.ts.map +0 -1
- package/dist/core/BatchExecutor.js +0 -856
- package/dist/core/BatchExecutor.js.map +0 -1
- package/dist/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/core/BatchPromptBuilder.js +0 -219
- package/dist/core/BatchPromptBuilder.js.map +0 -1
- package/dist/core/Route.d.ts +0 -180
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -538
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -185
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/types/route.d.ts +0 -336
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/route.js +0 -5
- package/dist/types/route.js.map +0 -1
- package/docs/CONTRIBUTING.md +0 -521
- package/docs/api/README.md +0 -3299
- package/docs/api/overview.md +0 -1410
- package/docs/architecture/data-extraction-flow.md +0 -360
- package/docs/architecture/multi-step-execution.md +0 -277
- package/docs/core/agent/README.md +0 -938
- package/docs/core/agent/context-management.md +0 -796
- package/docs/core/agent/rules-and-prohibitions.md +0 -113
- package/docs/core/agent/session-management.md +0 -693
- package/docs/core/ai-integration/prompt-composition.md +0 -355
- package/docs/core/ai-integration/providers.md +0 -515
- package/docs/core/ai-integration/response-processing.md +0 -433
- package/docs/core/conversation-flows/data-collection.md +0 -772
- package/docs/core/conversation-flows/route-dsl.md +0 -509
- package/docs/core/conversation-flows/routes.md +0 -249
- package/docs/core/conversation-flows/step-transitions.md +0 -731
- package/docs/core/conversation-flows/steps.md +0 -268
- package/docs/core/error-handling.md +0 -830
- package/docs/core/persistence/adapters.md +0 -255
- package/docs/core/persistence/session-storage.md +0 -656
- package/docs/core/routing/intelligent-routing.md +0 -470
- package/docs/core/tools/enhanced-tool.md +0 -186
- package/docs/core/tools/streaming-execution.md +0 -161
- package/docs/core/tools/tool-definition.md +0 -970
- package/docs/core/tools/tool-scoping.md +0 -819
- package/docs/guides/advanced-patterns/publishing.md +0 -186
- package/docs/guides/context-compaction.md +0 -96
- package/docs/guides/error-handling-patterns.md +0 -578
- package/docs/guides/getting-started/README.md +0 -795
- package/docs/guides/migration/README.md +0 -101
- package/docs/guides/migration/flexible-routing-conditions.md +0 -375
- package/docs/guides/migration/multi-step-execution.md +0 -393
- package/docs/guides/migration/response-modal-refactor.md +0 -518
- package/docs/guides/prompt-optimization.md +0 -164
- package/examples/advanced-patterns/context-compaction.ts +0 -223
- package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
- package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
- package/examples/advanced-patterns/streaming-responses.ts +0 -656
- package/examples/ai-providers/anthropic-integration.ts +0 -388
- package/examples/ai-providers/openai-integration.ts +0 -228
- package/examples/condition-patterns/function-only-conditions.ts +0 -365
- package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
- package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +0 -296
- package/examples/conversation-flows/completion-transitions.ts +0 -318
- package/examples/core-concepts/basic-agent.ts +0 -503
- package/examples/core-concepts/modern-streaming-api.ts +0 -309
- package/examples/core-concepts/schema-driven-extraction.ts +0 -332
- package/examples/core-concepts/session-management.ts +0 -494
- package/examples/integrations/database-integration.ts +0 -631
- package/examples/integrations/healthcare-integration.ts +0 -595
- package/examples/integrations/search-integration.ts +0 -530
- package/examples/integrations/server-session-management.ts +0 -307
- package/examples/persistence/custom-adapter.ts +0 -526
- package/examples/persistence/database-persistence.ts +0 -583
- package/examples/persistence/memory-sessions.ts +0 -495
- package/examples/persistence/prisma-schema.example.prisma +0 -74
- package/examples/persistence/redis-persistence.ts +0 -488
- package/examples/tools/basic-tools.ts +0 -765
- package/examples/tools/data-enrichment-tools.ts +0 -593
- package/examples/tools/enhanced-tool-metadata.ts +0 -268
- package/examples/tools/streaming-tool-execution.ts +0 -283
- package/src/core/BatchExecutor.ts +0 -1187
- package/src/core/BatchPromptBuilder.ts +0 -299
- package/src/core/Route.ts +0 -678
- 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 };
|