@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,595 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Healthcare agent example demonstrating route-based
|
|
3
|
-
* Updated for v2 architecture with session step management and schema-first data extraction
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
Agent,
|
|
8
|
-
type Tool,
|
|
9
|
-
AnthropicProvider,
|
|
10
|
-
END_ROUTE,
|
|
11
|
-
} from "../../src";
|
|
12
|
-
|
|
13
|
-
// Context type
|
|
14
|
-
interface HealthcareContext {
|
|
15
|
-
patientId: string;
|
|
16
|
-
patientName: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// Data extraction types for healthcare scenarios
|
|
20
|
-
interface AppointmentData {
|
|
21
|
-
appointmentReason?: string;
|
|
22
|
-
urgency?: "low" | "medium" | "high";
|
|
23
|
-
preferredTime?: string;
|
|
24
|
-
preferredDate?: string;
|
|
25
|
-
appointmentType?: "checkup" | "consultation" | "followup";
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
interface LabResultsData {
|
|
29
|
-
testType?: string;
|
|
30
|
-
testDate?: string;
|
|
31
|
-
resultsNeeded?: boolean;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
interface SatisfactionData {
|
|
35
|
-
rating?: number;
|
|
36
|
-
easeOfScheduling?: number;
|
|
37
|
-
comments?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Tools
|
|
41
|
-
|
|
42
|
-
const getUpcomingSlots: Tool<HealthcareContext, HealthcareData> = {
|
|
43
|
-
id: "get_upcoming_slots",
|
|
44
|
-
name: "Available Appointment Slots",
|
|
45
|
-
description: "Get upcoming appointment slots",
|
|
46
|
-
parameters: {
|
|
47
|
-
type: "object",
|
|
48
|
-
properties: {},
|
|
49
|
-
},
|
|
50
|
-
handler: (context, args) => {
|
|
51
|
-
return { data: "Available slots: Monday 10 AM, Tuesday 2 PM, Wednesday 1 PM" };
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const getLaterSlots: Tool<HealthcareContext, HealthcareData> = {
|
|
56
|
-
id: "get_later_slots",
|
|
57
|
-
name: "Extended Appointment Slots",
|
|
58
|
-
description: "Get later appointment slots",
|
|
59
|
-
parameters: {
|
|
60
|
-
type: "object",
|
|
61
|
-
properties: {},
|
|
62
|
-
},
|
|
63
|
-
handler: (context, args) => {
|
|
64
|
-
return { data: "Later slots: November 3, 11:30 AM, November 12, 3 PM" };
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const scheduleAppointment: Tool<HealthcareContext, HealthcareData> = {
|
|
69
|
-
id: "schedule_appointment",
|
|
70
|
-
name: "Appointment Scheduler",
|
|
71
|
-
description: "Schedule an appointment with a healthcare provider",
|
|
72
|
-
parameters: {
|
|
73
|
-
type: "object",
|
|
74
|
-
properties: {
|
|
75
|
-
datetime: { type: "string", description: "Appointment date and time" },
|
|
76
|
-
},
|
|
77
|
-
required: ["datetime"],
|
|
78
|
-
},
|
|
79
|
-
handler: (context, args) => {
|
|
80
|
-
if (!context.data?.preferredDate || !context.data?.preferredTime) {
|
|
81
|
-
return {
|
|
82
|
-
data: "Please specify preferred date and time for the appointment",
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
return {
|
|
86
|
-
data: `Appointment scheduled for ${context.data.preferredDate} at ${
|
|
87
|
-
context.data.preferredTime
|
|
88
|
-
} for ${context.data.appointmentReason || "consultation"}`,
|
|
89
|
-
};
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const getLabResults: Tool<HealthcareContext, HealthcareData> = {
|
|
94
|
-
id: "get_lab_results",
|
|
95
|
-
name: "Lab Results Retriever",
|
|
96
|
-
description: "Get lab test results",
|
|
97
|
-
parameters: {
|
|
98
|
-
type: "object",
|
|
99
|
-
properties: {},
|
|
100
|
-
},
|
|
101
|
-
handler: (context, args) => {
|
|
102
|
-
return {
|
|
103
|
-
data: `Lab results for ${context.data?.testType || "general"} tests: All tests are within the valid range for ${context.context.patientName}`,
|
|
104
|
-
};
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
// Define unified healthcare data schema
|
|
109
|
-
interface HealthcareData extends AppointmentData, LabResultsData, SatisfactionData {}
|
|
110
|
-
|
|
111
|
-
const healthcareSchema = {
|
|
112
|
-
type: "object",
|
|
113
|
-
properties: {
|
|
114
|
-
// Appointment fields
|
|
115
|
-
appointmentReason: {
|
|
116
|
-
type: "string",
|
|
117
|
-
description: "Reason for the appointment",
|
|
118
|
-
},
|
|
119
|
-
urgency: {
|
|
120
|
-
type: "string",
|
|
121
|
-
enum: ["low", "medium", "high"],
|
|
122
|
-
default: "medium",
|
|
123
|
-
},
|
|
124
|
-
preferredTime: {
|
|
125
|
-
type: "string",
|
|
126
|
-
description: "Preferred time slot",
|
|
127
|
-
},
|
|
128
|
-
preferredDate: {
|
|
129
|
-
type: "string",
|
|
130
|
-
description: "Preferred date",
|
|
131
|
-
},
|
|
132
|
-
appointmentType: {
|
|
133
|
-
type: "string",
|
|
134
|
-
enum: ["checkup", "consultation", "followup"],
|
|
135
|
-
default: "consultation",
|
|
136
|
-
},
|
|
137
|
-
// Lab results fields
|
|
138
|
-
testType: {
|
|
139
|
-
type: "string",
|
|
140
|
-
description: "Type of lab test",
|
|
141
|
-
},
|
|
142
|
-
testDate: {
|
|
143
|
-
type: "string",
|
|
144
|
-
description: "Date of the lab test",
|
|
145
|
-
},
|
|
146
|
-
resultsNeeded: {
|
|
147
|
-
type: "boolean",
|
|
148
|
-
default: true,
|
|
149
|
-
description: "Whether detailed results are needed",
|
|
150
|
-
},
|
|
151
|
-
// Satisfaction fields
|
|
152
|
-
rating: {
|
|
153
|
-
type: "number",
|
|
154
|
-
description: "Overall satisfaction rating 1-5",
|
|
155
|
-
},
|
|
156
|
-
easeOfScheduling: {
|
|
157
|
-
type: "number",
|
|
158
|
-
description: "Ease of scheduling process 1-5",
|
|
159
|
-
},
|
|
160
|
-
comments: {
|
|
161
|
-
type: "string",
|
|
162
|
-
description: "Optional feedback comments",
|
|
163
|
-
},
|
|
164
|
-
},
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
function createHealthcareAgent() {
|
|
168
|
-
const provider = new AnthropicProvider({
|
|
169
|
-
apiKey: process.env.ANTHROPIC_API_KEY || "test-key",
|
|
170
|
-
model: "claude-sonnet-4-5",
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
const agent = new Agent<HealthcareContext, HealthcareData>({
|
|
174
|
-
name: "Healthcare Agent",
|
|
175
|
-
description: "Is empathetic and calming to the patient.",
|
|
176
|
-
identity:
|
|
177
|
-
"I am the Healthcare Agent, a compassionate AI assistant dedicated to providing excellent patient care. With deep knowledge of medical procedures and a focus on patient comfort, I'm here to help you navigate your healthcare journey with empathy and expertise.",
|
|
178
|
-
provider: provider,
|
|
179
|
-
// NEW: Agent-level schema
|
|
180
|
-
schema: healthcareSchema,
|
|
181
|
-
|
|
182
|
-
// Knowledge base with healthcare-specific information
|
|
183
|
-
knowledgeBase: {
|
|
184
|
-
medicalProcedures: {
|
|
185
|
-
checkup: {
|
|
186
|
-
duration: "30 minutes",
|
|
187
|
-
preparation: "No special preparation needed",
|
|
188
|
-
frequency: "Annual or as recommended by doctor",
|
|
189
|
-
},
|
|
190
|
-
consultation: {
|
|
191
|
-
duration: "45-60 minutes",
|
|
192
|
-
preparation: "Bring medical history and current medications",
|
|
193
|
-
frequency: "As needed",
|
|
194
|
-
},
|
|
195
|
-
followup: {
|
|
196
|
-
duration: "15-30 minutes",
|
|
197
|
-
preparation: "Review previous visit notes",
|
|
198
|
-
frequency: "2-4 weeks after initial treatment",
|
|
199
|
-
},
|
|
200
|
-
},
|
|
201
|
-
insurancePolicies: {
|
|
202
|
-
acceptedProviders: ["Mega Insurance", "Acme Insurance", "Blue Cross"],
|
|
203
|
-
coverageTypes: ["HMO", "PPO", "Medicare"],
|
|
204
|
-
requirements: {
|
|
205
|
-
referral: "Required for specialist visits",
|
|
206
|
-
copay: "$25 per visit",
|
|
207
|
-
deductible: "$500 annual",
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
emergencyGuidelines: [
|
|
211
|
-
"Call 911 for life-threatening emergencies",
|
|
212
|
-
"Go to nearest ER for severe symptoms",
|
|
213
|
-
"Contact office for urgent but non-life-threatening issues",
|
|
214
|
-
"Use telemedicine for minor concerns during office hours",
|
|
215
|
-
],
|
|
216
|
-
patientResources: {
|
|
217
|
-
patientPortal: "Available 24/7 for appointments and records",
|
|
218
|
-
educationalMaterials: "Available in English, Spanish, and Portuguese",
|
|
219
|
-
supportGroups: "Weekly sessions for chronic conditions",
|
|
220
|
-
},
|
|
221
|
-
},
|
|
222
|
-
context: {
|
|
223
|
-
patientId: "patient-123",
|
|
224
|
-
patientName: "Test Patient",
|
|
225
|
-
},
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
// Add domain glossary
|
|
229
|
-
agent.createTerm({
|
|
230
|
-
name: "Office Phone Number",
|
|
231
|
-
description: "The phone number of our office, at +1-234-567-8900",
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
agent.createTerm({
|
|
235
|
-
name: "Office Hours",
|
|
236
|
-
description: "Office hours are Monday to Friday, 9 AM to 5 PM",
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
agent.createTerm({
|
|
240
|
-
name: "Charles Xavier",
|
|
241
|
-
synonyms: ["Professor X"],
|
|
242
|
-
description:
|
|
243
|
-
"The doctor who specializes in neurology and is available on Mondays and Tuesdays.",
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
// Create scheduling route with data extraction schema
|
|
247
|
-
// NEW: Added onComplete to automatically transition to satisfaction survey after booking
|
|
248
|
-
const schedulingRoute = agent.createRoute({
|
|
249
|
-
title: "Schedule an Appointment",
|
|
250
|
-
description: "Helps the patient find a time for their appointment.",
|
|
251
|
-
when: ["The patient wants to schedule an appointment"],
|
|
252
|
-
// Route-level identity for healthcare scheduling
|
|
253
|
-
identity:
|
|
254
|
-
"You are a compassionate healthcare scheduling assistant who helps patients book appointments. Be empathetic, prioritize urgent cases, and ensure patients feel supported throughout the process.",
|
|
255
|
-
// Healthcare-specific terms
|
|
256
|
-
terms: [
|
|
257
|
-
{
|
|
258
|
-
name: "HIPAA",
|
|
259
|
-
description:
|
|
260
|
-
"Health Insurance Portability and Accountability Act - protects patient privacy and medical records",
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
name: "PHI",
|
|
264
|
-
description:
|
|
265
|
-
"Protected Health Information - any medical data that can identify a patient",
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
name: "Telemedicine",
|
|
269
|
-
description: "Remote healthcare consultation via video call or phone",
|
|
270
|
-
},
|
|
271
|
-
],
|
|
272
|
-
// NEW: Required fields for route completion
|
|
273
|
-
requiredFields: ["appointmentReason"],
|
|
274
|
-
// NEW: Optional fields that enhance the experience
|
|
275
|
-
optionalFields: ["urgency", "preferredTime", "preferredDate", "appointmentType"],
|
|
276
|
-
// NEW: Automatically collect feedback after successful scheduling
|
|
277
|
-
onComplete: "Satisfaction Survey",
|
|
278
|
-
});
|
|
279
|
-
|
|
280
|
-
// Step 1: Collect appointment reason
|
|
281
|
-
const collectReason = schedulingRoute.initialStep.nextStep({
|
|
282
|
-
prompt: "Ask what the patient needs an appointment for",
|
|
283
|
-
collect: ["appointmentReason"],
|
|
284
|
-
skipIf: (ctx) => !!ctx.data?.appointmentReason,
|
|
285
|
-
when: "Patient hasn't specified reason for appointment yet",
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
// Step 2: Check urgency and show available slots
|
|
289
|
-
const checkUrgency = collectReason.nextStep({
|
|
290
|
-
prompt: "Check if this is urgent and show available slots",
|
|
291
|
-
collect: ["urgency"],
|
|
292
|
-
skipIf: (ctx) => !!ctx.data?.urgency,
|
|
293
|
-
requires: ["appointmentReason"],
|
|
294
|
-
when: "Reason provided, now assess urgency level",
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
const showSlots = checkUrgency.nextStep({
|
|
298
|
-
tools: [getUpcomingSlots],
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
// Step 3: Present available times
|
|
302
|
-
const presentTimes = showSlots.nextStep({
|
|
303
|
-
prompt: "List available times and ask which one works for them",
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
// Step 4: Collect preferred time and date
|
|
307
|
-
const collectPreferences = presentTimes.nextStep({
|
|
308
|
-
prompt: "Collect preferred time and date",
|
|
309
|
-
collect: ["preferredTime", "preferredDate"],
|
|
310
|
-
skipIf: (ctx) => !!ctx.data?.preferredTime && !!ctx.data?.preferredDate,
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
// Step 5: Confirm details and schedule
|
|
314
|
-
const confirmDetails = collectPreferences.nextStep({
|
|
315
|
-
prompt: "Confirm the details with the patient before scheduling",
|
|
316
|
-
collect: ["appointmentType"],
|
|
317
|
-
skipIf: (ctx) => !!ctx.data?.appointmentType,
|
|
318
|
-
requires: ["appointmentReason", "preferredTime", "preferredDate"],
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
const schedule = confirmDetails.nextStep({
|
|
322
|
-
tools: [scheduleAppointment],
|
|
323
|
-
requires: ["appointmentReason", "preferredTime", "preferredDate"],
|
|
324
|
-
when: "All details confirmed, book the appointment",
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
const confirmation = schedule.nextStep({
|
|
328
|
-
prompt: "Confirm the appointment has been scheduled",
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
confirmation.nextStep({
|
|
332
|
-
step: END_ROUTE,
|
|
333
|
-
when: "Appointment booked successfully",
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
// Alternative path: no times work - show later slots
|
|
337
|
-
const laterSlots = presentTimes.nextStep({
|
|
338
|
-
tools: [getLaterSlots],
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
laterSlots.nextStep({
|
|
342
|
-
prompt: "List later times and ask if any of them works",
|
|
343
|
-
});
|
|
344
|
-
|
|
345
|
-
// If no times work at all, end route
|
|
346
|
-
laterSlots
|
|
347
|
-
.nextStep({
|
|
348
|
-
prompt: "Ask the patient to call the office to schedule an appointment",
|
|
349
|
-
})
|
|
350
|
-
.nextStep({ step: END_ROUTE });
|
|
351
|
-
|
|
352
|
-
schedulingRoute.createGuideline({
|
|
353
|
-
condition: "The patient says their visit is urgent",
|
|
354
|
-
action: "Tell them to call the office immediately",
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
// Create lab results route with data extraction schema
|
|
358
|
-
const labResultsRoute = agent.createRoute({
|
|
359
|
-
title: "Lab Results",
|
|
360
|
-
description: "Retrieves the patient's lab results and explains them.",
|
|
361
|
-
when: ["The patient wants to see their lab results"],
|
|
362
|
-
// NEW: Required fields for route completion
|
|
363
|
-
requiredFields: ["testType"],
|
|
364
|
-
// NEW: Optional fields
|
|
365
|
-
optionalFields: ["testDate", "resultsNeeded"],
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
// Step 1: Collect test information
|
|
369
|
-
const collectTestInfo = labResultsRoute.initialStep.nextStep({
|
|
370
|
-
prompt: "Ask what type of test results they want to see",
|
|
371
|
-
collect: ["testType"],
|
|
372
|
-
skipIf: (ctx) => !!ctx.data?.testType,
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
// Step 2: Optional: collect test date
|
|
376
|
-
const collectTestDate = collectTestInfo.nextStep({
|
|
377
|
-
prompt: "Ask for the test date if they remember it",
|
|
378
|
-
collect: ["testDate"],
|
|
379
|
-
skipIf: (ctx) => !!ctx.data?.testDate,
|
|
380
|
-
requires: ["testType"],
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
// Step 3: Get lab results
|
|
384
|
-
const getResults = collectTestDate.nextStep({
|
|
385
|
-
tools: [getLabResults],
|
|
386
|
-
requires: ["testType"],
|
|
387
|
-
});
|
|
388
|
-
|
|
389
|
-
// Step 4: Present results based on status
|
|
390
|
-
const presentResults = getResults.nextStep({
|
|
391
|
-
prompt: "Present the lab results and explain what they mean",
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
presentResults.nextStep({ step: END_ROUTE });
|
|
395
|
-
|
|
396
|
-
labResultsRoute.createGuideline({
|
|
397
|
-
condition:
|
|
398
|
-
"The patient presses you for more conclusions about the lab results",
|
|
399
|
-
action:
|
|
400
|
-
"Assertively tell them that you cannot help and they should call the office",
|
|
401
|
-
});
|
|
402
|
-
|
|
403
|
-
// NEW: Satisfaction Survey route - collects feedback after appointment scheduling
|
|
404
|
-
const satisfactionRoute = agent.createRoute({
|
|
405
|
-
title: "Satisfaction Survey",
|
|
406
|
-
description: "Quick satisfaction survey after scheduling",
|
|
407
|
-
when: ["Collect patient satisfaction feedback"],
|
|
408
|
-
|
|
409
|
-
// Route-specific knowledge base for patient feedback
|
|
410
|
-
knowledgeBase: {
|
|
411
|
-
surveyBestPractices: [
|
|
412
|
-
"Keep surveys short (3-5 questions maximum)",
|
|
413
|
-
"Use clear rating scales (1-5 stars)",
|
|
414
|
-
"Ask specific questions about what can be improved",
|
|
415
|
-
"Always thank patients for their feedback",
|
|
416
|
-
"Follow up on critical feedback within 24 hours",
|
|
417
|
-
],
|
|
418
|
-
commonFeedbackThemes: {
|
|
419
|
-
positive: ["Friendly staff", "Quick response", "Easy scheduling"],
|
|
420
|
-
improvement: ["Wait times", "Communication", "Facility cleanliness"],
|
|
421
|
-
urgent: ["Medical errors", "Billing issues", "Privacy concerns"],
|
|
422
|
-
},
|
|
423
|
-
npsCalculation: {
|
|
424
|
-
promoters: "9-10 rating",
|
|
425
|
-
passives: "7-8 rating",
|
|
426
|
-
detractors: "0-6 rating",
|
|
427
|
-
formula: "(Promoters - Detractors) / Total Responses * 100",
|
|
428
|
-
},
|
|
429
|
-
followUpActions: {
|
|
430
|
-
critical: "Immediate review by practice manager",
|
|
431
|
-
improvement: "Add to quarterly improvement plan",
|
|
432
|
-
positive: "Share with staff as recognition",
|
|
433
|
-
},
|
|
434
|
-
},
|
|
435
|
-
// NEW: Required fields for route completion
|
|
436
|
-
requiredFields: ["rating"],
|
|
437
|
-
// NEW: Optional fields
|
|
438
|
-
optionalFields: ["easeOfScheduling", "comments"],
|
|
439
|
-
});
|
|
440
|
-
|
|
441
|
-
const askRating = satisfactionRoute.initialStep.nextStep({
|
|
442
|
-
prompt:
|
|
443
|
-
"Ask for overall satisfaction rating from 1 to 5 with the scheduling experience",
|
|
444
|
-
collect: ["rating"],
|
|
445
|
-
skipIf: (ctx) => !!ctx.data?.rating,
|
|
446
|
-
});
|
|
447
|
-
|
|
448
|
-
const askComments = askRating.nextStep({
|
|
449
|
-
prompt: "Ask if they have any additional comments or feedback (optional)",
|
|
450
|
-
collect: ["comments"],
|
|
451
|
-
});
|
|
452
|
-
|
|
453
|
-
const thankYou = askComments.nextStep({
|
|
454
|
-
prompt:
|
|
455
|
-
"Thank them for their feedback and confirm their appointment details one more time",
|
|
456
|
-
});
|
|
457
|
-
|
|
458
|
-
thankYou.nextStep({ step: END_ROUTE });
|
|
459
|
-
|
|
460
|
-
// Global guidelines
|
|
461
|
-
agent.createGuideline({
|
|
462
|
-
condition: "The patient asks about insurance",
|
|
463
|
-
action:
|
|
464
|
-
"List the insurance providers we accept, and tell them to call the office for more details",
|
|
465
|
-
});
|
|
466
|
-
|
|
467
|
-
agent.createGuideline({
|
|
468
|
-
condition: "The patient asks to talk to a human agent",
|
|
469
|
-
action: "Ask them to call the office, providing the phone number",
|
|
470
|
-
});
|
|
471
|
-
|
|
472
|
-
agent.createGuideline({
|
|
473
|
-
condition:
|
|
474
|
-
"The patient inquires about something that has nothing to do with our healthcare",
|
|
475
|
-
action:
|
|
476
|
-
"Kindly tell them you cannot assist with off-topic inquiries - do not engage with their request.",
|
|
477
|
-
});
|
|
478
|
-
|
|
479
|
-
return agent;
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
// Example usage with session step management
|
|
483
|
-
async function main() {
|
|
484
|
-
const agent = createHealthcareAgent();
|
|
485
|
-
|
|
486
|
-
// Session is automatically managed by the agent
|
|
487
|
-
console.log("✨ Session ready:", agent.session.id);
|
|
488
|
-
|
|
489
|
-
console.log("Agent:", agent.name);
|
|
490
|
-
console.log("Description:", agent.description);
|
|
491
|
-
console.log("\nRoutes:", agent.getRoutes().length);
|
|
492
|
-
console.log("Terms:", agent.getTerms().length);
|
|
493
|
-
console.log("Guidelines:", agent.getGuidelines().length);
|
|
494
|
-
|
|
495
|
-
// Print routes
|
|
496
|
-
const routes = agent.getRoutes();
|
|
497
|
-
for (const route of routes) {
|
|
498
|
-
console.log("\n" + route.describe());
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
// Example conversation with session management
|
|
502
|
-
console.log("\n=== EXAMPLE CONVERSATION ===");
|
|
503
|
-
|
|
504
|
-
// Turn 1: Patient wants to follow up
|
|
505
|
-
await agent.session.addMessage("user", "Hi, I need to follow up on my visit", "Patient");
|
|
506
|
-
|
|
507
|
-
const history = agent.session.getHistory()
|
|
508
|
-
const response1 = await agent.respond({
|
|
509
|
-
history,
|
|
510
|
-
});
|
|
511
|
-
|
|
512
|
-
console.log("Patient: Hi, I need to follow up on my visit");
|
|
513
|
-
console.log("Agent:", response1.message);
|
|
514
|
-
console.log("Route:", response1.session?.currentRoute?.title);
|
|
515
|
-
console.log("Data:", agent.session.getData());
|
|
516
|
-
|
|
517
|
-
await agent.session.addMessage("assistant", response1.message);
|
|
518
|
-
|
|
519
|
-
// Turn 2: Patient specifies they want to schedule an appointment
|
|
520
|
-
if (response1.session?.currentRoute?.title === "Schedule an Appointment") {
|
|
521
|
-
const history2 = [
|
|
522
|
-
...history,
|
|
523
|
-
{
|
|
524
|
-
role: "user" as const,
|
|
525
|
-
content: "I need to schedule a checkup for next week",
|
|
526
|
-
name: "Patient",
|
|
527
|
-
},
|
|
528
|
-
];
|
|
529
|
-
|
|
530
|
-
const response2 = await agent.respond({ history: history2 });
|
|
531
|
-
console.log("\nPatient: I need to schedule a checkup for next week");
|
|
532
|
-
console.log("Agent:", response2.message);
|
|
533
|
-
console.log("Updated data:", response2.session?.data);
|
|
534
|
-
console.log("Current step:", response2.session?.currentStep?.id);
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
// NEW: Check if route is complete - will auto-transition to satisfaction survey
|
|
538
|
-
if (response2.isRouteComplete) {
|
|
539
|
-
console.log("\n✓ Appointment scheduling complete!");
|
|
540
|
-
console.log("Pending transition:", response2.session?.pendingTransition);
|
|
541
|
-
console.log(
|
|
542
|
-
"Next respond() will auto-transition to:",
|
|
543
|
-
response2.session?.pendingTransition?.targetRouteId
|
|
544
|
-
);
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
// Turn 3: Patient provides final details
|
|
548
|
-
const history3 = [
|
|
549
|
-
...history2,
|
|
550
|
-
{
|
|
551
|
-
role: "user" as const,
|
|
552
|
-
content: "Tuesday at 2 PM works for me.",
|
|
553
|
-
name: "Patient",
|
|
554
|
-
},
|
|
555
|
-
];
|
|
556
|
-
|
|
557
|
-
const response3 = await agent.respond({ history: history3 });
|
|
558
|
-
console.log("\nPatient: Tuesday at 2 PM works for me.");
|
|
559
|
-
console.log("Agent:", response3.message);
|
|
560
|
-
console.log("Updated data:", response3.session?.data);
|
|
561
|
-
console.log("Current step:", response3.session?.currentStep?.id);
|
|
562
|
-
|
|
563
|
-
// Check for route completion
|
|
564
|
-
if (response3.isRouteComplete) {
|
|
565
|
-
console.log("\n✅ Appointment scheduling complete!");
|
|
566
|
-
await sendAppointmentReminder(
|
|
567
|
-
agent.getCollectedData() as HealthcareData
|
|
568
|
-
);
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
/**
|
|
574
|
-
* Mock function to send an appointment reminder.
|
|
575
|
-
* @param data - The healthcare data.
|
|
576
|
-
*/
|
|
577
|
-
async function sendAppointmentReminder(data: HealthcareData) {
|
|
578
|
-
console.log("\n" + "=".repeat(60));
|
|
579
|
-
console.log("🚀 Sending Appointment Reminder...");
|
|
580
|
-
console.log("=".repeat(60));
|
|
581
|
-
console.log("Appointment Details:", JSON.stringify(data, null, 2));
|
|
582
|
-
console.log(
|
|
583
|
-
` - Sending reminder for ${data.appointmentReason} on ${data.preferredDate} at ${data.preferredTime}.`
|
|
584
|
-
);
|
|
585
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
586
|
-
console.log("✨ Reminder sent!");
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
590
|
-
main().catch(console.error);
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
export { createHealthcareAgent };
|
|
594
|
-
|
|
595
|
-
main().catch(console.error);
|