@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,656 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example: Streaming Responses
|
|
3
|
-
* Updated for ResponseModal architecture with modern streaming APIs
|
|
4
|
-
*
|
|
5
|
-
* This example demonstrates both the new modern stream() API and the legacy
|
|
6
|
-
* respondStream() method for streaming AI responses in real-time.
|
|
7
|
-
*
|
|
8
|
-
* NEW: The modern stream() API provides automatic session management and
|
|
9
|
-
* a simpler interface similar to chat() but with streaming.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
Agent,
|
|
14
|
-
AnthropicProvider,
|
|
15
|
-
OpenAIProvider,
|
|
16
|
-
GeminiProvider,
|
|
17
|
-
type EnhancedTool,
|
|
18
|
-
} from "../../src/index";
|
|
19
|
-
|
|
20
|
-
// Custom context type
|
|
21
|
-
interface ConversationContext {
|
|
22
|
-
userId: string;
|
|
23
|
-
sessionId: string;
|
|
24
|
-
preferences: {
|
|
25
|
-
streamingEnabled: boolean;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async function modernStreamingWithAnthropic() {
|
|
30
|
-
console.log("\nš¤ Example 1: Modern Streaming API with Anthropic (Claude)\n");
|
|
31
|
-
|
|
32
|
-
// Initialize Anthropic provider
|
|
33
|
-
const provider = new AnthropicProvider({
|
|
34
|
-
apiKey: process.env.ANTHROPIC_API_KEY || "",
|
|
35
|
-
model: "claude-sonnet-4-5",
|
|
36
|
-
config: {
|
|
37
|
-
temperature: 0.7,
|
|
38
|
-
max_tokens: 1000,
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
// Create agent
|
|
43
|
-
const agent = new Agent<ConversationContext, unknown>({
|
|
44
|
-
name: "StreamingAssistant",
|
|
45
|
-
description: "An AI assistant that streams responses in real-time",
|
|
46
|
-
goal: "Provide helpful information with streaming responses",
|
|
47
|
-
context: {
|
|
48
|
-
userId: "user123",
|
|
49
|
-
sessionId: "session456",
|
|
50
|
-
preferences: {
|
|
51
|
-
streamingEnabled: true,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
provider: provider,
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
// Add guidelines
|
|
58
|
-
agent.createGuideline({
|
|
59
|
-
action: "Be concise but informative in your responses",
|
|
60
|
-
enabled: true,
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
try {
|
|
64
|
-
console.log("š¤ Modern streaming API - automatic session management...\n");
|
|
65
|
-
console.log("Response: ");
|
|
66
|
-
|
|
67
|
-
// Session is automatically managed by the agent
|
|
68
|
-
console.log("⨠Session ready:", agent.session.id);
|
|
69
|
-
|
|
70
|
-
// NEW: Modern stream() API - automatically manages session history
|
|
71
|
-
for await (const chunk of agent.stream("Explain quantum computing in simple terms.")) {
|
|
72
|
-
// chunk.delta contains the new text
|
|
73
|
-
// chunk.accumulated contains the full text so far
|
|
74
|
-
// chunk.done indicates if this is the final chunk
|
|
75
|
-
|
|
76
|
-
if (chunk.delta) {
|
|
77
|
-
process.stdout.write(chunk.delta);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (chunk.done) {
|
|
81
|
-
console.log("\n\nā
Stream complete!");
|
|
82
|
-
console.log(`\nš Metadata:`);
|
|
83
|
-
console.log(
|
|
84
|
-
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
85
|
-
);
|
|
86
|
-
console.log(` - Data:`, agent.session.getData() || "None");
|
|
87
|
-
console.log(` - Tool Calls: ${chunk.toolCalls?.length || 0}`);
|
|
88
|
-
|
|
89
|
-
// Session history is automatically updated - no manual management needed!
|
|
90
|
-
console.log(` - Session Messages: ${agent.session.getHistory().length}`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
console.log("\nš” Benefits of modern stream() API:");
|
|
95
|
-
console.log(" - Automatic session management");
|
|
96
|
-
console.log(" - Simple interface: agent.stream('message')");
|
|
97
|
-
console.log(" - No need to manually manage history");
|
|
98
|
-
console.log(" - Same performance as respondStream()");
|
|
99
|
-
|
|
100
|
-
} catch (error) {
|
|
101
|
-
console.error("ā Error:", error);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
async function legacyStreamingWithAnthropic() {
|
|
106
|
-
console.log("\nš¤ Example 2: Legacy Streaming API (respondStream) - Still Supported\n");
|
|
107
|
-
|
|
108
|
-
// Initialize Anthropic provider
|
|
109
|
-
const provider = new AnthropicProvider({
|
|
110
|
-
apiKey: process.env.ANTHROPIC_API_KEY || "",
|
|
111
|
-
model: "claude-sonnet-4-5",
|
|
112
|
-
config: {
|
|
113
|
-
temperature: 0.7,
|
|
114
|
-
max_tokens: 1000,
|
|
115
|
-
},
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// Create agent
|
|
119
|
-
const agent = new Agent<ConversationContext, unknown>({
|
|
120
|
-
name: "LegacyStreamingAssistant",
|
|
121
|
-
description: "An AI assistant using legacy streaming API",
|
|
122
|
-
goal: "Demonstrate backward compatibility",
|
|
123
|
-
context: {
|
|
124
|
-
userId: "user123",
|
|
125
|
-
sessionId: "session456-legacy",
|
|
126
|
-
preferences: {
|
|
127
|
-
streamingEnabled: true,
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
provider: provider,
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
try {
|
|
134
|
-
console.log("š¤ Legacy respondStream API - manual session management...\n");
|
|
135
|
-
console.log("Response: ");
|
|
136
|
-
|
|
137
|
-
// Session is automatically managed by the agent
|
|
138
|
-
console.log("⨠Session ready:", agent.session.id);
|
|
139
|
-
|
|
140
|
-
// Add user message to session history manually
|
|
141
|
-
await agent.session.addMessage("user", "What's the weather like today?");
|
|
142
|
-
|
|
143
|
-
// Legacy respondStream API - requires manual session management
|
|
144
|
-
let fullMessage = "";
|
|
145
|
-
for await (const chunk of agent.respondStream({
|
|
146
|
-
history: agent.session.getHistory()
|
|
147
|
-
})) {
|
|
148
|
-
if (chunk.delta) {
|
|
149
|
-
process.stdout.write(chunk.delta);
|
|
150
|
-
fullMessage += chunk.delta;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (chunk.done) {
|
|
154
|
-
console.log("\n\nā
Stream complete!");
|
|
155
|
-
console.log(`\nš Metadata:`);
|
|
156
|
-
console.log(
|
|
157
|
-
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
158
|
-
);
|
|
159
|
-
console.log(` - Data:`, agent.session.getData() || "None");
|
|
160
|
-
console.log(` - Tool Calls: ${chunk.toolCalls?.length || 0}`);
|
|
161
|
-
|
|
162
|
-
// Manual session history management required
|
|
163
|
-
await agent.session.addMessage("assistant", fullMessage);
|
|
164
|
-
console.log(` - Session Messages: ${agent.session.getHistory().length}`);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
console.log("\nš” Legacy respondStream() API characteristics:");
|
|
169
|
-
console.log(" - Manual session management required");
|
|
170
|
-
console.log(" - More complex parameter structure");
|
|
171
|
-
console.log(" - Full backward compatibility maintained");
|
|
172
|
-
console.log(" - Still fully supported for existing code");
|
|
173
|
-
|
|
174
|
-
} catch (error) {
|
|
175
|
-
console.error("ā Error:", error);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
async function modernStreamingWithOpenAI() {
|
|
180
|
-
console.log("\nš¤ Example 3: Modern Streaming with OpenAI\n");
|
|
181
|
-
|
|
182
|
-
const provider = new OpenAIProvider({
|
|
183
|
-
apiKey: process.env.OPENAI_API_KEY || "",
|
|
184
|
-
model: "gpt-4",
|
|
185
|
-
config: {
|
|
186
|
-
temperature: 0.8,
|
|
187
|
-
},
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
const agent = new Agent<ConversationContext, unknown>({
|
|
191
|
-
name: "CreativeAssistant",
|
|
192
|
-
description: "A creative AI assistant",
|
|
193
|
-
context: {
|
|
194
|
-
userId: "user123",
|
|
195
|
-
sessionId: "session789",
|
|
196
|
-
preferences: {
|
|
197
|
-
streamingEnabled: true,
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
provider: provider,
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
try {
|
|
204
|
-
console.log("š¤ Modern streaming with OpenAI...\n");
|
|
205
|
-
console.log("Response: ");
|
|
206
|
-
|
|
207
|
-
// Session is automatically managed by the agent
|
|
208
|
-
console.log("⨠Session ready:", agent.session.id);
|
|
209
|
-
|
|
210
|
-
// NEW: Modern stream() API with context override
|
|
211
|
-
for await (const chunk of agent.stream("Write a short poem about TypeScript", {
|
|
212
|
-
contextOverride: { preferences: { streamingEnabled: true } }
|
|
213
|
-
})) {
|
|
214
|
-
if (chunk.delta) {
|
|
215
|
-
process.stdout.write(chunk.delta);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if (chunk.done) {
|
|
219
|
-
console.log("\n\nā
Stream complete!");
|
|
220
|
-
console.log(
|
|
221
|
-
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
222
|
-
);
|
|
223
|
-
console.log(` - Data:`, agent.session.getData() || "None");
|
|
224
|
-
|
|
225
|
-
// Session automatically updated - no manual work needed!
|
|
226
|
-
console.log(` - Session Messages: ${agent.session.getHistory().length}`);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
} catch (error) {
|
|
230
|
-
console.error("ā Error:", error);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
async function modernStreamingComparison() {
|
|
235
|
-
console.log("\nš¤ Example 4: Side-by-Side API Comparison\n");
|
|
236
|
-
|
|
237
|
-
const provider = new GeminiProvider({
|
|
238
|
-
apiKey: process.env.GEMINI_API_KEY || "",
|
|
239
|
-
model: "models/gemini-2.5-flash",
|
|
240
|
-
config: {
|
|
241
|
-
temperature: 0.7,
|
|
242
|
-
},
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
const agent = new Agent<ConversationContext, unknown>({
|
|
246
|
-
name: "ComparisonAssistant",
|
|
247
|
-
description: "Demonstrates API differences",
|
|
248
|
-
context: {
|
|
249
|
-
userId: "user123",
|
|
250
|
-
sessionId: "session101",
|
|
251
|
-
preferences: {
|
|
252
|
-
streamingEnabled: true,
|
|
253
|
-
},
|
|
254
|
-
},
|
|
255
|
-
provider: provider,
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
const userMessage = "What are the key differences between REST and GraphQL?";
|
|
259
|
-
|
|
260
|
-
try {
|
|
261
|
-
console.log("š¤ Comparing old vs new streaming APIs...\n");
|
|
262
|
-
|
|
263
|
-
// ========================================================================
|
|
264
|
-
// OLD WAY: respondStream() - Manual session management
|
|
265
|
-
// ========================================================================
|
|
266
|
-
console.log("šø OLD WAY: respondStream() with manual session management");
|
|
267
|
-
console.log("Response: ");
|
|
268
|
-
|
|
269
|
-
// Manual session management
|
|
270
|
-
await agent.session.addMessage("user", userMessage);
|
|
271
|
-
|
|
272
|
-
let oldWayMessage = "";
|
|
273
|
-
for await (const chunk of agent.respondStream({
|
|
274
|
-
history: agent.session.getHistory()
|
|
275
|
-
})) {
|
|
276
|
-
if (chunk.delta) {
|
|
277
|
-
process.stdout.write(chunk.delta);
|
|
278
|
-
oldWayMessage += chunk.delta;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
if (chunk.done) {
|
|
282
|
-
// Manual history update required
|
|
283
|
-
await agent.session.addMessage("assistant", oldWayMessage);
|
|
284
|
-
console.log("\n ā
Manual session update completed");
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
console.log("\n" + "=".repeat(60));
|
|
289
|
-
|
|
290
|
-
// ========================================================================
|
|
291
|
-
// NEW WAY: stream() - Automatic session management
|
|
292
|
-
// ========================================================================
|
|
293
|
-
console.log("šø NEW WAY: stream() with automatic session management");
|
|
294
|
-
console.log("Response: ");
|
|
295
|
-
|
|
296
|
-
// Automatic session management - just pass the message!
|
|
297
|
-
for await (const chunk of agent.stream("Can you explain that in more detail?")) {
|
|
298
|
-
if (chunk.delta) {
|
|
299
|
-
process.stdout.write(chunk.delta);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
if (chunk.done) {
|
|
303
|
-
console.log("\n ā
Automatic session update - no manual work needed!");
|
|
304
|
-
console.log(` š Total messages in session: ${agent.session.getHistory().length}`);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
console.log("\nš” Key Differences:");
|
|
309
|
-
console.log(" OLD: agent.respondStream({ history: agent.session.getHistory() })");
|
|
310
|
-
console.log(" NEW: agent.stream('message')");
|
|
311
|
-
console.log(" ");
|
|
312
|
-
console.log(" OLD: Manual session.addMessage() calls required");
|
|
313
|
-
console.log(" NEW: Automatic session management");
|
|
314
|
-
console.log(" ");
|
|
315
|
-
console.log(" OLD: Complex parameter structure");
|
|
316
|
-
console.log(" NEW: Simple message + optional options");
|
|
317
|
-
|
|
318
|
-
} catch (error) {
|
|
319
|
-
console.error("ā Error:", error);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
async function modernStreamingWithRoutes() {
|
|
324
|
-
console.log("\nš¤ Example 5: Modern Streaming with Routes and Steps\n");
|
|
325
|
-
|
|
326
|
-
const provider = new AnthropicProvider({
|
|
327
|
-
apiKey: process.env.ANTHROPIC_API_KEY || "",
|
|
328
|
-
model: "claude-sonnet-4-5",
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
// Define feedback data schema
|
|
332
|
-
interface FeedbackData {
|
|
333
|
-
rating: number;
|
|
334
|
-
comments: string;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
const feedbackSchema = {
|
|
338
|
-
type: "object",
|
|
339
|
-
properties: {
|
|
340
|
-
rating: { type: "number", minimum: 1, maximum: 5 },
|
|
341
|
-
comments: { type: "string" },
|
|
342
|
-
},
|
|
343
|
-
required: ["rating"],
|
|
344
|
-
};
|
|
345
|
-
|
|
346
|
-
const agent = new Agent<ConversationContext, FeedbackData>({
|
|
347
|
-
name: "SupportAgent",
|
|
348
|
-
description: "A customer support agent with conversation routes",
|
|
349
|
-
context: {
|
|
350
|
-
userId: "user123",
|
|
351
|
-
sessionId: "session202",
|
|
352
|
-
preferences: {
|
|
353
|
-
streamingEnabled: true,
|
|
354
|
-
},
|
|
355
|
-
},
|
|
356
|
-
provider: provider,
|
|
357
|
-
// NEW: Agent-level schema
|
|
358
|
-
schema: feedbackSchema,
|
|
359
|
-
});
|
|
360
|
-
|
|
361
|
-
// Create a route
|
|
362
|
-
const supportRoute = agent.createRoute({
|
|
363
|
-
title: "Product Support",
|
|
364
|
-
description: "Help users with product questions",
|
|
365
|
-
when: ["User asks about product features or issues"],
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
supportRoute.initialStep.nextStep({
|
|
369
|
-
prompt: "Understand the user's product question",
|
|
370
|
-
});
|
|
371
|
-
|
|
372
|
-
// Create a feedback route
|
|
373
|
-
agent.createRoute({
|
|
374
|
-
title: "Collect Feedback",
|
|
375
|
-
description: "Collect user feedback on their support experience",
|
|
376
|
-
when: ["User wants to provide feedback"],
|
|
377
|
-
// NEW: Required fields for route completion
|
|
378
|
-
requiredFields: ["rating"],
|
|
379
|
-
// NEW: Optional fields
|
|
380
|
-
optionalFields: ["comments"],
|
|
381
|
-
steps: [
|
|
382
|
-
{
|
|
383
|
-
prompt: "How would you rate your support experience from 1 to 5?",
|
|
384
|
-
collect: ["rating"],
|
|
385
|
-
},
|
|
386
|
-
{
|
|
387
|
-
prompt: "Thanks for the rating! Any other comments?",
|
|
388
|
-
collect: ["comments"],
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
prompt: "We appreciate your feedback!",
|
|
392
|
-
},
|
|
393
|
-
],
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
const history = [
|
|
397
|
-
{
|
|
398
|
-
role: "user" as const,
|
|
399
|
-
content: "How do I reset my password?",
|
|
400
|
-
name: "User",
|
|
401
|
-
},
|
|
402
|
-
];
|
|
403
|
-
|
|
404
|
-
try {
|
|
405
|
-
console.log("š¤ Streaming response with route detection...\n");
|
|
406
|
-
console.log("Response: ");
|
|
407
|
-
|
|
408
|
-
// Session is automatically managed by the agent
|
|
409
|
-
console.log("⨠Session ready:", agent.session.id);
|
|
410
|
-
|
|
411
|
-
// NEW: Modern stream() API with routes - automatic session management
|
|
412
|
-
for await (const chunk of agent.stream("How do I reset my password?")) {
|
|
413
|
-
if (chunk.delta) {
|
|
414
|
-
process.stdout.write(chunk.delta);
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
if (chunk.done) {
|
|
418
|
-
console.log("\n\nā
Stream complete!");
|
|
419
|
-
console.log(`\nš Metadata:`);
|
|
420
|
-
console.log(
|
|
421
|
-
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
422
|
-
);
|
|
423
|
-
console.log(` - Data:`, agent.session.getData() || "None");
|
|
424
|
-
|
|
425
|
-
// Check for route completion
|
|
426
|
-
if (chunk.isRouteComplete) {
|
|
427
|
-
console.log("\nā
Route complete!");
|
|
428
|
-
if (chunk.session?.currentRoute?.title === "Collect Feedback") {
|
|
429
|
-
await logFeedback(agent.session.getData() as FeedbackData);
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// Session is automatically updated by the modern stream() API
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
} catch (error) {
|
|
437
|
-
console.error("ā Error:", error);
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
async function modernStreamingWithAbortSignal() {
|
|
442
|
-
console.log("\nš¤ Example 6: Modern Streaming with Abort Control\n");
|
|
443
|
-
|
|
444
|
-
const provider = new AnthropicProvider({
|
|
445
|
-
apiKey: process.env.ANTHROPIC_API_KEY || "",
|
|
446
|
-
model: "claude-sonnet-4-5",
|
|
447
|
-
});
|
|
448
|
-
|
|
449
|
-
const agent = new Agent<ConversationContext, unknown>({
|
|
450
|
-
name: "Assistant",
|
|
451
|
-
description: "An assistant that can be interrupted",
|
|
452
|
-
context: {
|
|
453
|
-
userId: "user123",
|
|
454
|
-
sessionId: "session303",
|
|
455
|
-
preferences: {
|
|
456
|
-
streamingEnabled: true,
|
|
457
|
-
},
|
|
458
|
-
},
|
|
459
|
-
provider: provider,
|
|
460
|
-
});
|
|
461
|
-
|
|
462
|
-
const history = [
|
|
463
|
-
{
|
|
464
|
-
role: "user" as const,
|
|
465
|
-
content: "Tell me a very long story about space exploration.",
|
|
466
|
-
name: "User",
|
|
467
|
-
},
|
|
468
|
-
];
|
|
469
|
-
|
|
470
|
-
// Create an AbortController to cancel the stream
|
|
471
|
-
const abortController = new AbortController();
|
|
472
|
-
|
|
473
|
-
// Automatically abort after 3 seconds
|
|
474
|
-
const timeout = setTimeout(() => {
|
|
475
|
-
console.log("\n\nā ļø Aborting stream after 3 seconds...");
|
|
476
|
-
abortController.abort();
|
|
477
|
-
}, 3000);
|
|
478
|
-
|
|
479
|
-
try {
|
|
480
|
-
console.log("š¤ Streaming response (will abort after 3s)...\n");
|
|
481
|
-
console.log("Response: ");
|
|
482
|
-
|
|
483
|
-
// Session is automatically managed by the agent
|
|
484
|
-
console.log("⨠Session ready:", agent.session.id);
|
|
485
|
-
|
|
486
|
-
// NEW: Modern stream() API with abort signal
|
|
487
|
-
for await (const chunk of agent.stream("Tell me a very long story about space exploration.", {
|
|
488
|
-
signal: abortController.signal,
|
|
489
|
-
})) {
|
|
490
|
-
if (chunk.delta) {
|
|
491
|
-
process.stdout.write(chunk.delta);
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
if (chunk.done) {
|
|
495
|
-
console.log("\n\nā
Stream complete!");
|
|
496
|
-
console.log(`\nš Metadata:`);
|
|
497
|
-
console.log(
|
|
498
|
-
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
499
|
-
);
|
|
500
|
-
console.log(` - Data:`, agent.session.getData() || "None");
|
|
501
|
-
|
|
502
|
-
// Session is automatically updated by the modern stream() API - no manual work needed!
|
|
503
|
-
|
|
504
|
-
clearTimeout(timeout);
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
} catch (error) {
|
|
508
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
509
|
-
console.log("\n\nš Stream was aborted successfully!");
|
|
510
|
-
} else {
|
|
511
|
-
console.error("ā Error:", error);
|
|
512
|
-
}
|
|
513
|
-
clearTimeout(timeout);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
/**
|
|
518
|
-
* Mock function to log feedback.
|
|
519
|
-
* @param data - The feedback data.
|
|
520
|
-
*/
|
|
521
|
-
async function logFeedback(data: { rating: number; comments: string }) {
|
|
522
|
-
console.log("\n" + "=".repeat(60));
|
|
523
|
-
console.log("š Logging Feedback...");
|
|
524
|
-
console.log("=".repeat(60));
|
|
525
|
-
console.log("Feedback Details:", JSON.stringify(data, null, 2));
|
|
526
|
-
console.log(` - Rating: ${data.rating}`);
|
|
527
|
-
console.log(` - Comments: ${data.comments}`);
|
|
528
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
529
|
-
console.log("⨠Feedback logged successfully!");
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
async function streamingWithToolExecution() {
|
|
533
|
-
console.log("\nš¤ Example 7: Streaming with Tool Execution\n");
|
|
534
|
-
|
|
535
|
-
const provider = new AnthropicProvider({
|
|
536
|
-
apiKey: process.env.ANTHROPIC_API_KEY || "",
|
|
537
|
-
model: "claude-sonnet-4-5",
|
|
538
|
-
});
|
|
539
|
-
|
|
540
|
-
// Define EnhancedTools with concurrency metadata
|
|
541
|
-
const readFileTool: EnhancedTool = {
|
|
542
|
-
id: "read_file",
|
|
543
|
-
name: "Read File",
|
|
544
|
-
description: "Read a file from disk",
|
|
545
|
-
parameters: {
|
|
546
|
-
type: "object",
|
|
547
|
-
properties: { path: { type: "string" } },
|
|
548
|
-
required: ["path"],
|
|
549
|
-
},
|
|
550
|
-
handler: async (_ctx, args) => {
|
|
551
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
552
|
-
return { data: `Contents of ${args?.path}`, success: true };
|
|
553
|
-
},
|
|
554
|
-
isConcurrencySafe: () => true,
|
|
555
|
-
isReadOnly: () => true,
|
|
556
|
-
interruptBehavior: () => "cancel",
|
|
557
|
-
};
|
|
558
|
-
|
|
559
|
-
const writeFileTool: EnhancedTool = {
|
|
560
|
-
id: "write_file",
|
|
561
|
-
name: "Write File",
|
|
562
|
-
description: "Write content to a file",
|
|
563
|
-
parameters: {
|
|
564
|
-
type: "object",
|
|
565
|
-
properties: { path: { type: "string" }, content: { type: "string" } },
|
|
566
|
-
required: ["path", "content"],
|
|
567
|
-
},
|
|
568
|
-
handler: async (_ctx, args) => {
|
|
569
|
-
await new Promise((r) => setTimeout(r, 150));
|
|
570
|
-
return { data: `Wrote to ${args?.path}`, success: true };
|
|
571
|
-
},
|
|
572
|
-
isConcurrencySafe: () => false,
|
|
573
|
-
isDestructive: () => true,
|
|
574
|
-
interruptBehavior: () => "block",
|
|
575
|
-
maxResultSizeChars: 1_000,
|
|
576
|
-
};
|
|
577
|
-
|
|
578
|
-
const agent = new Agent({
|
|
579
|
-
name: "ToolStreamingAssistant",
|
|
580
|
-
description: "Demonstrates streaming with concurrent tool execution",
|
|
581
|
-
provider,
|
|
582
|
-
tools: [readFileTool, writeFileTool],
|
|
583
|
-
});
|
|
584
|
-
|
|
585
|
-
try {
|
|
586
|
-
console.log("š¤ Streaming with tool execution...\n");
|
|
587
|
-
console.log("When the LLM calls multiple read-only tools, they execute in parallel.");
|
|
588
|
-
console.log("Write tools wait for exclusive access.\n");
|
|
589
|
-
console.log("Response: ");
|
|
590
|
-
|
|
591
|
-
for await (const chunk of agent.stream("Read index.ts and utils.ts, then write output.ts")) {
|
|
592
|
-
if (chunk.delta) {
|
|
593
|
-
process.stdout.write(chunk.delta);
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
if (chunk.done) {
|
|
597
|
-
console.log("\n\nā
Stream complete!");
|
|
598
|
-
console.log(` Tool Calls: ${chunk.toolCalls?.length || 0}`);
|
|
599
|
-
console.log(` Session Messages: ${agent.session.getHistory().length}`);
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
} catch (error) {
|
|
603
|
-
console.error("ā Error:", error);
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
async function main() {
|
|
608
|
-
console.log("š Starting Streaming Examples\n");
|
|
609
|
-
console.log("=".repeat(60));
|
|
610
|
-
|
|
611
|
-
const examples = [
|
|
612
|
-
{ name: "Modern Streaming API (Anthropic)", fn: modernStreamingWithAnthropic },
|
|
613
|
-
{ name: "Legacy Streaming API (Anthropic)", fn: legacyStreamingWithAnthropic },
|
|
614
|
-
{ name: "Modern Streaming (OpenAI)", fn: modernStreamingWithOpenAI },
|
|
615
|
-
{ name: "API Comparison (Gemini)", fn: modernStreamingComparison },
|
|
616
|
-
{ name: "Modern Streaming with Routes", fn: modernStreamingWithRoutes },
|
|
617
|
-
{ name: "Modern Streaming with Abort", fn: modernStreamingWithAbortSignal },
|
|
618
|
-
{ name: "Streaming with Tool Execution", fn: streamingWithToolExecution },
|
|
619
|
-
];
|
|
620
|
-
|
|
621
|
-
console.log("\nAvailable Examples:");
|
|
622
|
-
examples.forEach((ex, i) => {
|
|
623
|
-
console.log(` ${i + 1}. ${ex.name}`);
|
|
624
|
-
});
|
|
625
|
-
|
|
626
|
-
console.log("\nš” Tips:");
|
|
627
|
-
console.log(" - Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GEMINI_API_KEY");
|
|
628
|
-
console.log(" - NEW: Use agent.stream('message') for automatic session management");
|
|
629
|
-
console.log(" - OLD: agent.respondStream() still supported for backward compatibility");
|
|
630
|
-
console.log(" - Streaming provides real-time responses for better UX");
|
|
631
|
-
console.log(" - Use AbortSignal to cancel long-running streams");
|
|
632
|
-
console.log(" - Access chunk.route and chunk.step for flow information");
|
|
633
|
-
console.log(" - NEW: EnhancedTool metadata enables parallel read-only tool execution");
|
|
634
|
-
|
|
635
|
-
console.log("\n" + "=".repeat(60));
|
|
636
|
-
|
|
637
|
-
// Run modern streaming example if API key is available
|
|
638
|
-
if (process.env.ANTHROPIC_API_KEY) {
|
|
639
|
-
await modernStreamingWithAnthropic();
|
|
640
|
-
} else if (process.env.OPENAI_API_KEY) {
|
|
641
|
-
await modernStreamingWithOpenAI();
|
|
642
|
-
} else if (process.env.GEMINI_API_KEY) {
|
|
643
|
-
await modernStreamingComparison();
|
|
644
|
-
} else {
|
|
645
|
-
console.log(
|
|
646
|
-
"\nā ļø No API keys found. Set one of the environment variables to run examples."
|
|
647
|
-
);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
// Run if executed directly
|
|
652
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
653
|
-
main().catch(console.error);
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
export { main };
|