@falai/agent 1.2.8 → 2.0.1
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/providers/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +1 -1
- package/dist/cjs/providers/OpenAIProvider.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/providers/AnthropicProvider.d.ts +1 -1
- package/dist/providers/AnthropicProvider.js +1 -1
- package/dist/providers/GeminiProvider.d.ts +1 -1
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +1 -1
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +1 -1
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +1 -1
- package/dist/providers/OpenAIProvider.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 +22 -200
- 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 +14 -0
- package/docs/migration/route-to-flow.md +561 -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/providers/AnthropicProvider.ts +2 -2
- package/src/providers/GeminiProvider.ts +2 -2
- package/src/providers/OpenAIProvider.ts +2 -2
- 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,503 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example: Declarative Agent Configuration with Sequential Steps
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates how to configure an entire agent
|
|
5
|
-
* using declarative syntax in the constructor, including:
|
|
6
|
-
* - Terms (domain glossary)
|
|
7
|
-
* - Guidelines (behavior rules) with flexible ConditionTemplate patterns
|
|
8
|
-
* - Tools (capabilities)
|
|
9
|
-
* - Routes with data extraction schemas and sequential steps
|
|
10
|
-
* - Session management for multi-turn conversations
|
|
11
|
-
* - NEW: Flexible routing conditions with ConditionTemplate patterns:
|
|
12
|
-
* - String-only conditions: "user wants to book" (AI context only)
|
|
13
|
-
* - Function-only conditions: (ctx) => ctx.data?.hasPayment (programmatic only)
|
|
14
|
-
* - Mixed arrays: ["user wants to book", (ctx) => !ctx.data?.complete] (hybrid)
|
|
15
|
-
* - Route skipIf: Dynamic route exclusion based on conditions
|
|
16
|
-
* - Step skipIf: Enhanced conditional step skipping
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import {
|
|
20
|
-
Agent,
|
|
21
|
-
GeminiProvider,
|
|
22
|
-
Tool,
|
|
23
|
-
ValidationError,
|
|
24
|
-
type Term,
|
|
25
|
-
type Guideline,
|
|
26
|
-
} from "../../src/index";
|
|
27
|
-
|
|
28
|
-
// Context type
|
|
29
|
-
interface HealthcareContext {
|
|
30
|
-
patientId: string;
|
|
31
|
-
patientName: string;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Data extraction types
|
|
35
|
-
interface AppointmentData {
|
|
36
|
-
appointmentType: "checkup" | "consultation" | "followup";
|
|
37
|
-
preferredDate: string;
|
|
38
|
-
preferredTime: string;
|
|
39
|
-
symptoms?: string;
|
|
40
|
-
urgency: "low" | "medium" | "high";
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
interface LabData {
|
|
44
|
-
testType: string;
|
|
45
|
-
testDate: string;
|
|
46
|
-
resultsNeeded: boolean;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Define tools using unified Tool interface
|
|
50
|
-
const getInsuranceProvidersTool: Tool<HealthcareContext, HealthcareData> = {
|
|
51
|
-
id: "healthcare_insurance_providers",
|
|
52
|
-
description: "Retrieves list of accepted insurance providers",
|
|
53
|
-
parameters: {
|
|
54
|
-
type: "object",
|
|
55
|
-
properties: {},
|
|
56
|
-
},
|
|
57
|
-
handler: async (context, args) => {
|
|
58
|
-
return {
|
|
59
|
-
data: "Available insurance providers: MegaCare Insurance, HealthFirst, WellnessPlus",
|
|
60
|
-
};
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const getAvailableSlotsTool: Tool<HealthcareContext, HealthcareData> = {
|
|
65
|
-
id: "healthcare_available_slots",
|
|
66
|
-
description: "Gets available appointment slots",
|
|
67
|
-
parameters: {
|
|
68
|
-
type: "object",
|
|
69
|
-
properties: {},
|
|
70
|
-
},
|
|
71
|
-
handler: async (context, args) => {
|
|
72
|
-
return {
|
|
73
|
-
data: "Available slots: Oct 20 at 10:00 AM, Oct 20 at 2:00 PM, Oct 21 at 1:00 PM",
|
|
74
|
-
};
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const getLabResultsTool: Tool<HealthcareContext, HealthcareData> = {
|
|
79
|
-
id: "healthcare_lab_results",
|
|
80
|
-
description: "Retrieves patient lab results",
|
|
81
|
-
parameters: {
|
|
82
|
-
type: "object",
|
|
83
|
-
properties: {},
|
|
84
|
-
},
|
|
85
|
-
handler: async (toolContext, args) => {
|
|
86
|
-
// Tools can access collected data and context
|
|
87
|
-
if (toolContext.data?.testType) {
|
|
88
|
-
return {
|
|
89
|
-
data: `${toolContext.data.testType} results for ${toolContext.context.patientName}: All values within normal range`,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return {
|
|
94
|
-
data: `Lab results for ${toolContext.context.patientName}: All values within normal range`,
|
|
95
|
-
};
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const scheduleAppointmentTool: Tool<HealthcareContext, HealthcareData> = {
|
|
100
|
-
id: "healthcare_schedule_appointment",
|
|
101
|
-
description: "Schedules patient appointments",
|
|
102
|
-
parameters: {
|
|
103
|
-
type: "object",
|
|
104
|
-
properties: {},
|
|
105
|
-
},
|
|
106
|
-
handler: async (context, args) => {
|
|
107
|
-
// Tools access collected appointment data
|
|
108
|
-
if (!context.data?.preferredDate || !context.data?.preferredTime) {
|
|
109
|
-
return { data: "Please provide appointment details" };
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return {
|
|
113
|
-
data: `Appointment scheduled for ${context.data.preferredDate} at ${context.data.preferredTime}`,
|
|
114
|
-
};
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
// Declarative configuration
|
|
119
|
-
const terms: Term<HealthcareContext>[] = [
|
|
120
|
-
{
|
|
121
|
-
name: "Office Phone Number",
|
|
122
|
-
description: "The phone number of our office, at +1-234-567-8900",
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
name: "Office Hours",
|
|
126
|
-
description: "Office hours are Monday to Friday, 9 AM to 5 PM",
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
name: "Dr. Charles Xavier",
|
|
130
|
-
description: ({ context }) =>
|
|
131
|
-
`Neurologist specializing in brain disorders for patient ${context?.patientName}`,
|
|
132
|
-
synonyms: ["Professor X", "Dr. Xavier"],
|
|
133
|
-
},
|
|
134
|
-
];
|
|
135
|
-
|
|
136
|
-
const guidelines: Guideline<HealthcareContext>[] = [
|
|
137
|
-
{
|
|
138
|
-
// String-only condition for AI context
|
|
139
|
-
condition: "The patient asks about insurance",
|
|
140
|
-
action:
|
|
141
|
-
"List the insurance providers we accept and tell them to call the office for more details",
|
|
142
|
-
tags: ["insurance", "billing"],
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
// Mixed condition: AI context + programmatic check
|
|
146
|
-
condition: [
|
|
147
|
-
"The patient asks to talk to a human agent",
|
|
148
|
-
(ctx) => ctx.context?.patientName !== undefined // Only if we have patient info
|
|
149
|
-
],
|
|
150
|
-
action: ({ context }: { context?: HealthcareContext }) =>
|
|
151
|
-
`Of course. You can reach our office at +1-234-567-8900 during office hours (Monday to Friday, 9 AM to 5 PM). I've noted that you'd like to speak with someone, and I can have a representative call you back if you'd like, ${context?.patientName}.`,
|
|
152
|
-
tags: ["escalation"],
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
// Function-only condition for programmatic logic
|
|
156
|
-
condition: (ctx) => {
|
|
157
|
-
const event = ctx.history?.[ctx.history.length - 1]
|
|
158
|
-
if(event && "content" in event){
|
|
159
|
-
const message = (event.content as string).toLocaleLowerCase() || '';
|
|
160
|
-
return !message.includes('health') && !message.includes('medical') && !message.includes('appointment');
|
|
161
|
-
}
|
|
162
|
-
return false
|
|
163
|
-
},
|
|
164
|
-
action:
|
|
165
|
-
"Kindly tell them you cannot assist with off-topic inquiries - do not engage",
|
|
166
|
-
tags: ["off-topic"],
|
|
167
|
-
},
|
|
168
|
-
];
|
|
169
|
-
|
|
170
|
-
const routes = [
|
|
171
|
-
{
|
|
172
|
-
id: "route_schedule_appointment",
|
|
173
|
-
title: "Schedule Appointment",
|
|
174
|
-
description: "Helps the patient schedule an appointment",
|
|
175
|
-
// Mixed condition: AI context + programmatic check
|
|
176
|
-
when: [
|
|
177
|
-
"The patient wants to schedule an appointment",
|
|
178
|
-
(ctx) => !ctx.data?.orderId // Only if no existing order
|
|
179
|
-
],
|
|
180
|
-
// Skip if patient already has urgent medical needs
|
|
181
|
-
skipIf: [
|
|
182
|
-
"patient has urgent medical emergency",
|
|
183
|
-
(ctx) => ctx.data?.urgency === "high"
|
|
184
|
-
],
|
|
185
|
-
// NEW: Required fields for route completion (instead of schema)
|
|
186
|
-
requiredFields: ["appointmentType", "preferredDate", "preferredTime"],
|
|
187
|
-
// NEW: Optional fields that enhance the experience
|
|
188
|
-
optionalFields: ["symptoms", "urgency"],
|
|
189
|
-
guidelines: [
|
|
190
|
-
{
|
|
191
|
-
condition: "The patient says their visit is urgent",
|
|
192
|
-
action: "Tell them to call the office immediately",
|
|
193
|
-
tags: ["urgent"],
|
|
194
|
-
enabled: true,
|
|
195
|
-
},
|
|
196
|
-
],
|
|
197
|
-
// Sequential steps for a linear booking flow
|
|
198
|
-
steps: [
|
|
199
|
-
{
|
|
200
|
-
id: "ask_appointment_type",
|
|
201
|
-
description: "Ask for appointment type",
|
|
202
|
-
prompt:
|
|
203
|
-
"What type of appointment do you need? (checkup, consultation, or followup)",
|
|
204
|
-
collect: ["appointmentType"],
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
id: "ask_date_time",
|
|
208
|
-
description: "Ask for preferred date and time",
|
|
209
|
-
prompt: "When would you like to come in?",
|
|
210
|
-
collect: ["preferredDate", "preferredTime"],
|
|
211
|
-
requires: ["appointmentType"], // Must have appointment type first
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
id: "ask_symptoms",
|
|
215
|
-
description: "Ask about symptoms",
|
|
216
|
-
prompt: "Are you experiencing any symptoms?",
|
|
217
|
-
collect: ["symptoms"],
|
|
218
|
-
// Mixed skipIf: AI context + programmatic logic
|
|
219
|
-
skipIf: [
|
|
220
|
-
"routine checkup doesn't need symptom details",
|
|
221
|
-
(data: Partial<HealthcareData>) => data.appointmentType === "checkup"
|
|
222
|
-
],
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
id: "schedule_appointment",
|
|
226
|
-
description: "Schedule the appointment",
|
|
227
|
-
prompt: "I'll schedule your appointment now.",
|
|
228
|
-
tools: [scheduleAppointmentTool], // Inline tool - only available on this step
|
|
229
|
-
requires: ["preferredDate", "preferredTime"],
|
|
230
|
-
prepare: "healthcare_insurance_providers", // Reference by ID
|
|
231
|
-
finalize: "finalize_appointment", // Reference by ID - will be registered later
|
|
232
|
-
},
|
|
233
|
-
],
|
|
234
|
-
tools: ["healthcare_available_slots"], // Reference by ID
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
id: "route_check_lab_results",
|
|
238
|
-
title: "Check Lab Results",
|
|
239
|
-
description: "Retrieves and explains patient lab results",
|
|
240
|
-
// Function-only condition for programmatic logic
|
|
241
|
-
when: (ctx) => {
|
|
242
|
-
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
243
|
-
return message.includes('lab') || message.includes('test') || message.includes('results');
|
|
244
|
-
},
|
|
245
|
-
// Skip if no patient ID available
|
|
246
|
-
skipIf: (ctx) => !ctx.context?.patientId,
|
|
247
|
-
// NEW: Required fields for route completion
|
|
248
|
-
requiredFields: ["testType"],
|
|
249
|
-
// NEW: Optional fields
|
|
250
|
-
optionalFields: ["testDate", "resultsNeeded"],
|
|
251
|
-
guidelines: [
|
|
252
|
-
{
|
|
253
|
-
condition: "The patient presses for more conclusions about results",
|
|
254
|
-
action:
|
|
255
|
-
"Assertively tell them they should call the office to speak with a doctor",
|
|
256
|
-
tags: ["escalation"],
|
|
257
|
-
},
|
|
258
|
-
],
|
|
259
|
-
tools: ["healthcare_lab_results"], // Reference by ID
|
|
260
|
-
},
|
|
261
|
-
{
|
|
262
|
-
title: "General Healthcare Questions",
|
|
263
|
-
description: "Answer general healthcare questions",
|
|
264
|
-
// String-only condition for AI context
|
|
265
|
-
when: "Patient asks general healthcare questions",
|
|
266
|
-
// No required fields - conversational Q&A
|
|
267
|
-
},
|
|
268
|
-
];
|
|
269
|
-
|
|
270
|
-
// Define a unified data schema for all healthcare interactions
|
|
271
|
-
interface HealthcareData extends AppointmentData, LabData {}
|
|
272
|
-
|
|
273
|
-
const healthcareSchema = {
|
|
274
|
-
type: "object",
|
|
275
|
-
properties: {
|
|
276
|
-
// Appointment fields
|
|
277
|
-
appointmentType: {
|
|
278
|
-
type: "string",
|
|
279
|
-
enum: ["checkup", "consultation", "followup"],
|
|
280
|
-
description: "Type of appointment needed",
|
|
281
|
-
},
|
|
282
|
-
preferredDate: {
|
|
283
|
-
type: "string",
|
|
284
|
-
description: "Preferred appointment date",
|
|
285
|
-
},
|
|
286
|
-
preferredTime: {
|
|
287
|
-
type: "string",
|
|
288
|
-
description: "Preferred appointment time",
|
|
289
|
-
},
|
|
290
|
-
symptoms: {
|
|
291
|
-
type: "string",
|
|
292
|
-
description: "Description of symptoms (if applicable)",
|
|
293
|
-
},
|
|
294
|
-
urgency: {
|
|
295
|
-
type: "string",
|
|
296
|
-
enum: ["low", "medium", "high"],
|
|
297
|
-
default: "medium",
|
|
298
|
-
},
|
|
299
|
-
// Lab fields
|
|
300
|
-
testType: {
|
|
301
|
-
type: "string",
|
|
302
|
-
description: "Type of lab test",
|
|
303
|
-
},
|
|
304
|
-
testDate: {
|
|
305
|
-
type: "string",
|
|
306
|
-
description: "Date of the lab test",
|
|
307
|
-
},
|
|
308
|
-
resultsNeeded: {
|
|
309
|
-
type: "boolean",
|
|
310
|
-
default: true,
|
|
311
|
-
description: "Whether detailed results are needed",
|
|
312
|
-
},
|
|
313
|
-
},
|
|
314
|
-
};
|
|
315
|
-
|
|
316
|
-
// Create the fully configured agent with agent-level schema
|
|
317
|
-
const agent = new Agent<HealthcareContext, HealthcareData>({
|
|
318
|
-
name: "HealthBot",
|
|
319
|
-
description: "A compassionate healthcare assistant",
|
|
320
|
-
goal: "Provide helpful information and assist with appointments",
|
|
321
|
-
context: {
|
|
322
|
-
patientId: "p_12345",
|
|
323
|
-
patientName: "Alice Johnson",
|
|
324
|
-
},
|
|
325
|
-
provider: new GeminiProvider({
|
|
326
|
-
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
327
|
-
model: "models/gemini-2.5-flash",
|
|
328
|
-
}),
|
|
329
|
-
// NEW: Agent-level schema
|
|
330
|
-
schema: healthcareSchema,
|
|
331
|
-
// Declarative initialization
|
|
332
|
-
terms,
|
|
333
|
-
guidelines,
|
|
334
|
-
// Enable debug logging
|
|
335
|
-
debug: true,
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
// Demonstrate different tool registration approaches
|
|
339
|
-
|
|
340
|
-
// Method 1: Register tools for ID-based reference in routes
|
|
341
|
-
// Note: scheduleAppointmentTool is NOT registered globally - it's only available on the specific step
|
|
342
|
-
agent.tool.registerMany([
|
|
343
|
-
getInsuranceProvidersTool,
|
|
344
|
-
getAvailableSlotsTool,
|
|
345
|
-
getLabResultsTool,
|
|
346
|
-
// scheduleAppointmentTool, // Commented out - will be added to specific step only
|
|
347
|
-
]);
|
|
348
|
-
|
|
349
|
-
// Method 2: Create and register specialized tools
|
|
350
|
-
const appointmentValidator = agent.tool.createValidation({
|
|
351
|
-
id: "validate_appointment",
|
|
352
|
-
fields: ["appointmentType", "preferredDate", "preferredTime"] as const,
|
|
353
|
-
validator: async (context, data) => {
|
|
354
|
-
const errors: ValidationError[] = [];
|
|
355
|
-
if (!data.appointmentType) errors.push({
|
|
356
|
-
field: "appointmentType",
|
|
357
|
-
value: data.appointmentType,
|
|
358
|
-
message: "Appointment type is required",
|
|
359
|
-
schemaPath: "appointmentType"
|
|
360
|
-
});
|
|
361
|
-
if (!data.preferredDate) errors.push({
|
|
362
|
-
field: "preferredDate",
|
|
363
|
-
value: data.preferredDate,
|
|
364
|
-
message: "Preferred date is required",
|
|
365
|
-
schemaPath: "preferredDate"
|
|
366
|
-
});
|
|
367
|
-
if (!data.preferredTime) errors.push({
|
|
368
|
-
field: "preferredTime",
|
|
369
|
-
value: data.preferredTime,
|
|
370
|
-
message: "Preferred time is required",
|
|
371
|
-
schemaPath: "preferredTime"
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
return {
|
|
375
|
-
valid: errors.length === 0,
|
|
376
|
-
errors,
|
|
377
|
-
warnings: [],
|
|
378
|
-
};
|
|
379
|
-
},
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
// Method 3: Create data enrichment tool
|
|
383
|
-
const patientDataEnricher = agent.tool.createDataEnrichment({
|
|
384
|
-
id: "enrich_patient_data",
|
|
385
|
-
fields: ["appointmentType", "symptoms"] as const,
|
|
386
|
-
enricher: async (context, data) => {
|
|
387
|
-
// Add urgency classification based on symptoms - return fields that exist in HealthcareData
|
|
388
|
-
const urgentKeywords = ["chest pain", "difficulty breathing", "severe", "emergency"];
|
|
389
|
-
const hasUrgentSymptoms = data.symptoms && urgentKeywords.some(keyword =>
|
|
390
|
-
data.symptoms!.toLowerCase().includes(keyword)
|
|
391
|
-
);
|
|
392
|
-
|
|
393
|
-
return {
|
|
394
|
-
urgency: hasUrgentSymptoms ? "high" : "medium", // This matches the urgency field in HealthcareData
|
|
395
|
-
};
|
|
396
|
-
},
|
|
397
|
-
});
|
|
398
|
-
|
|
399
|
-
// Method 4: Create tool using tool.create()
|
|
400
|
-
const finalizeAppointmentTool = agent.tool.create({
|
|
401
|
-
id: "finalize_appointment",
|
|
402
|
-
description: "Complete the appointment booking process",
|
|
403
|
-
parameters: { type: "object", properties: {} },
|
|
404
|
-
handler: async (context, args) => {
|
|
405
|
-
console.log(`✅ Appointment finalized for ${context.context.patientName}`);
|
|
406
|
-
console.log(`📅 Details: ${JSON.stringify(context.data, null, 2)}`);
|
|
407
|
-
|
|
408
|
-
// Could send confirmation email, update calendar, etc.
|
|
409
|
-
return {
|
|
410
|
-
data: `Appointment confirmed for ${context.context.patientName}`,
|
|
411
|
-
};
|
|
412
|
-
},
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
// Add routes after tools are registered
|
|
416
|
-
routes.forEach((route: any) => {
|
|
417
|
-
agent.createRoute(route);
|
|
418
|
-
});
|
|
419
|
-
|
|
420
|
-
// You can still add more dynamically after construction
|
|
421
|
-
agent
|
|
422
|
-
.createGuideline({
|
|
423
|
-
condition: "The patient seems confused or distressed",
|
|
424
|
-
action: "Speak slowly, clearly, and offer to connect them with a human",
|
|
425
|
-
tags: ["empathy", "support"],
|
|
426
|
-
})
|
|
427
|
-
.createTerm({
|
|
428
|
-
name: "Telemedicine",
|
|
429
|
-
description: "Remote medical consultation via video call",
|
|
430
|
-
synonyms: ["virtual visit", "video appointment"],
|
|
431
|
-
});
|
|
432
|
-
|
|
433
|
-
// Example usage with session management
|
|
434
|
-
|
|
435
|
-
async function main() {
|
|
436
|
-
// Session is automatically managed by the agent
|
|
437
|
-
console.log("✨ Session ready:", agent.session.id);
|
|
438
|
-
|
|
439
|
-
// Turn 1 - Agent responds and routes to appropriate flow
|
|
440
|
-
console.log("🔄 Turn 1: Initial inquiry");
|
|
441
|
-
const response1 = await agent.chat("Hi, I need to follow up on my recent visit");
|
|
442
|
-
|
|
443
|
-
console.log("🤖 Agent:", response1.message);
|
|
444
|
-
console.log("🛤️ Route chosen:", response1.session?.currentRoute?.title);
|
|
445
|
-
|
|
446
|
-
// Turn 2 - User provides more details
|
|
447
|
-
console.log("\n🔄 Turn 2: Providing appointment details");
|
|
448
|
-
const response2 = await agent.chat("I need a checkup next Tuesday at 2 PM");
|
|
449
|
-
|
|
450
|
-
console.log("🤖 Agent:", response2.message);
|
|
451
|
-
console.log("📊 Collected data:", agent.session.getData());
|
|
452
|
-
console.log("📍 Current step:", response2.session?.currentStep?.id);
|
|
453
|
-
|
|
454
|
-
// Turn 3 - Continue the conversation flow
|
|
455
|
-
console.log("\n🔄 Turn 3: Continuing appointment booking");
|
|
456
|
-
const response3 = await agent.chat("I'm feeling a bit anxious about the visit");
|
|
457
|
-
|
|
458
|
-
console.log("🤖 Agent:", response3.message);
|
|
459
|
-
console.log("📊 Updated data:", agent.session.getData());
|
|
460
|
-
console.log("📍 Current step:", response3.session?.currentStep?.id);
|
|
461
|
-
|
|
462
|
-
// Check for route completion
|
|
463
|
-
if (response3.isRouteComplete && response3.session) {
|
|
464
|
-
console.log("\n✅ Appointment scheduling complete!");
|
|
465
|
-
await sendAppointmentConfirmation(
|
|
466
|
-
agent.getCollectedData() as HealthcareData
|
|
467
|
-
);
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
console.log("\n📋 Session Summary:");
|
|
471
|
-
console.log(
|
|
472
|
-
"- Agent-level tools:",
|
|
473
|
-
agent.getTools().map((t) => t.id)
|
|
474
|
-
);
|
|
475
|
-
console.log(
|
|
476
|
-
"- Available routes:",
|
|
477
|
-
agent.getRoutes().map((r) => r.title)
|
|
478
|
-
);
|
|
479
|
-
console.log("- Agent guidelines:", agent.getGuidelines().length);
|
|
480
|
-
console.log("- Agent terms:", agent.getTerms().length);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
/**
|
|
484
|
-
* Mock function to send an appointment confirmation.
|
|
485
|
-
* @param data - The healthcare data.
|
|
486
|
-
*/
|
|
487
|
-
async function sendAppointmentConfirmation(data: HealthcareData) {
|
|
488
|
-
console.log("\n" + "=".repeat(60));
|
|
489
|
-
console.log("🚀 Sending Appointment Confirmation...");
|
|
490
|
-
console.log("=".repeat(60));
|
|
491
|
-
console.log("Appointment Details:", JSON.stringify(data, null, 2));
|
|
492
|
-
console.log(
|
|
493
|
-
` - Confirmation sent for ${data.preferredDate} at ${data.preferredTime}`
|
|
494
|
-
);
|
|
495
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
496
|
-
console.log("✨ Confirmation delivered!");
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
export { agent };
|
|
500
|
-
|
|
501
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
502
|
-
main().catch(console.error);
|
|
503
|
-
}
|