@falai/agent 1.2.7 → 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 +1196 -1015
- 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 +524 -134
- 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/GeminiProvider.d.ts +3 -3
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +16 -14
- package/dist/cjs/providers/GeminiProvider.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 +1198 -1017
- 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 +524 -135
- 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/GeminiProvider.d.ts +3 -3
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +16 -14
- package/dist/providers/GeminiProvider.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 +1458 -1241
- package/src/core/ResponsePipeline.ts +675 -173
- 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/GeminiProvider.ts +17 -15
- 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
package/src/types/persistence.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface SessionData<TData = Record<string, unknown>> {
|
|
|
19
19
|
userId?: string;
|
|
20
20
|
agentName?: string;
|
|
21
21
|
status: SessionStatus;
|
|
22
|
-
|
|
22
|
+
currentFlow?: string;
|
|
23
23
|
currentStep?: string;
|
|
24
24
|
collectedData?: CollectedStateData<TData>;
|
|
25
25
|
messageCount?: number;
|
|
@@ -45,11 +45,15 @@ export type CreateSessionData<TData = Record<string, unknown>> = Omit<
|
|
|
45
45
|
*/
|
|
46
46
|
export interface CollectedStateData<TData = Record<string, unknown>> {
|
|
47
47
|
data: Partial<TData>;
|
|
48
|
-
|
|
48
|
+
flowHistory: SessionState<TData>["flowHistory"];
|
|
49
49
|
history?: SessionState<TData>["history"];
|
|
50
|
-
|
|
50
|
+
currentFlowTitle?: string;
|
|
51
51
|
currentStepDescription?: string;
|
|
52
52
|
metadata: SessionState<TData>["metadata"];
|
|
53
|
+
/** Pending directive — included only when a directive is actually present. */
|
|
54
|
+
pendingDirective?: SessionState<TData>["pendingDirective"];
|
|
55
|
+
/** Reserved for v2.x Signals. Passed through bit-identical. */
|
|
56
|
+
signals?: SessionState<TData>["signals"];
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
/**
|
|
@@ -61,7 +65,7 @@ export interface MessageData {
|
|
|
61
65
|
userId?: string;
|
|
62
66
|
role: MessageRole;
|
|
63
67
|
content: string;
|
|
64
|
-
|
|
68
|
+
flow?: string;
|
|
65
69
|
step?: string;
|
|
66
70
|
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
67
71
|
event?: Event; // Optional: store full event data
|
|
@@ -119,11 +123,11 @@ export interface SessionRepository<TData = Record<string, unknown>> {
|
|
|
119
123
|
): Promise<SessionData<TData> | null>;
|
|
120
124
|
|
|
121
125
|
/**
|
|
122
|
-
* Update current
|
|
126
|
+
* Update current flow and step
|
|
123
127
|
*/
|
|
124
|
-
|
|
128
|
+
updateFlowStep(
|
|
125
129
|
id: string,
|
|
126
|
-
|
|
130
|
+
flow?: string,
|
|
127
131
|
step?: string
|
|
128
132
|
): Promise<SessionData<TData> | null>;
|
|
129
133
|
|
|
@@ -244,7 +248,7 @@ export interface SaveMessageOptions {
|
|
|
244
248
|
userId?: string;
|
|
245
249
|
role: MessageRole;
|
|
246
250
|
content: string;
|
|
247
|
-
|
|
251
|
+
flow?: string;
|
|
248
252
|
step?: string;
|
|
249
253
|
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
250
254
|
event?: Event;
|
package/src/types/routing.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { StructuredSchema } from "./schema";
|
|
|
2
2
|
|
|
3
3
|
export interface RoutingDecision {
|
|
4
4
|
context: string;
|
|
5
|
-
|
|
5
|
+
flows: Record<string, number>;
|
|
6
6
|
responseDirectives?: string[];
|
|
7
7
|
extractions?: unknown;
|
|
8
8
|
contextUpdate?: Record<string, unknown>;
|
package/src/types/session.ts
CHANGED
|
@@ -3,35 +3,28 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import type { History } from "./history";
|
|
6
|
+
import type { Directive } from "./flow";
|
|
7
|
+
import type { SignalsState } from "./signals";
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
export interface PendingTransition {
|
|
11
|
-
/** Target route ID to transition to */
|
|
12
|
-
targetRouteId: string;
|
|
13
|
-
/** Optional AI-evaluated condition for the transition */
|
|
14
|
-
condition?: string;
|
|
15
|
-
/** Reason for the transition */
|
|
16
|
-
reason: "route_complete" | "manual";
|
|
17
|
-
}
|
|
9
|
+
// Re-export for backward compatibility — canonical declarations live in ./signals.ts
|
|
10
|
+
export type { SignalsState, SignalTriggerState } from "./signals";
|
|
18
11
|
|
|
19
12
|
/**
|
|
20
13
|
* Session state tracks the current position in the conversation flow
|
|
21
|
-
* and data collected at the agent level across all
|
|
14
|
+
* and data collected at the agent level across all flows
|
|
22
15
|
*/
|
|
23
16
|
export interface SessionState<TData = unknown> {
|
|
24
17
|
/** Unique session identifier (useful for persistence) */
|
|
25
18
|
id: string;
|
|
26
19
|
|
|
27
|
-
/** Current
|
|
28
|
-
|
|
20
|
+
/** Current flow the conversation is in */
|
|
21
|
+
currentFlow?: {
|
|
29
22
|
id: string;
|
|
30
23
|
title: string;
|
|
31
24
|
enteredAt?: Date;
|
|
32
25
|
};
|
|
33
26
|
|
|
34
|
-
/** Current step within the
|
|
27
|
+
/** Current step within the flow */
|
|
35
28
|
currentStep?: {
|
|
36
29
|
id: string;
|
|
37
30
|
description?: string;
|
|
@@ -39,25 +32,35 @@ export interface SessionState<TData = unknown> {
|
|
|
39
32
|
};
|
|
40
33
|
|
|
41
34
|
/**
|
|
42
|
-
* Agent-level data collected across all
|
|
35
|
+
* Agent-level data collected across all flows
|
|
43
36
|
* This is the single source of truth for all collected data
|
|
44
|
-
*
|
|
37
|
+
* Flows can access and contribute to this shared data structure
|
|
45
38
|
*/
|
|
46
39
|
data: Partial<TData>;
|
|
47
40
|
|
|
48
|
-
/** History of
|
|
49
|
-
|
|
50
|
-
|
|
41
|
+
/** History of flows visited in this session */
|
|
42
|
+
flowHistory?: Array<{
|
|
43
|
+
flowId: string;
|
|
51
44
|
enteredAt?: Date;
|
|
52
45
|
exitedAt?: Date;
|
|
53
46
|
completed: boolean;
|
|
54
47
|
}>;
|
|
55
48
|
|
|
56
49
|
/**
|
|
57
|
-
* Pending
|
|
58
|
-
*
|
|
50
|
+
* Pending directive to apply at the start of the next turn.
|
|
51
|
+
* Replaces the v1 `pendingTransition` field. When set, the turn pipeline
|
|
52
|
+
* applies this directive and skips `FlowRouter.decideFlowAndStep`.
|
|
53
|
+
*
|
|
54
|
+
* Cleared after application unless `complete.next` chains another directive.
|
|
55
|
+
*/
|
|
56
|
+
pendingDirective?: Directive<unknown, TData>;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Reserved for v2.x Signals feature. v2.0 does not read or mutate this
|
|
60
|
+
* field at runtime — persistence adapters preserve it bit-identical through
|
|
61
|
+
* save → load roundtrips. See Decision D-Q6 in design.md.
|
|
59
62
|
*/
|
|
60
|
-
|
|
63
|
+
signals?: SignalsState;
|
|
61
64
|
|
|
62
65
|
/**
|
|
63
66
|
* Conversation history managed by the session
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signals types for v2.x.
|
|
3
|
+
*
|
|
4
|
+
* This is the canonical location for all signals-related types.
|
|
5
|
+
* `SignalsState` and `SignalTriggerState` originated in `session.ts` as v2.0
|
|
6
|
+
* forward-compat reservations and are re-exported from there for backward
|
|
7
|
+
* compatibility within the same major.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { SessionState } from "./session";
|
|
11
|
+
import type { PreDirective } from "./flow";
|
|
12
|
+
import type { Event } from "./history";
|
|
13
|
+
|
|
14
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
// Persistence types (shape locked in v2.0 — DO NOT modify)
|
|
16
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Per-signal trigger tracking state.
|
|
20
|
+
* Shape is locked to enable forward-compatible persistence in v2.0.
|
|
21
|
+
*/
|
|
22
|
+
export interface SignalTriggerState {
|
|
23
|
+
/** When this signal first fired. */
|
|
24
|
+
firstTriggeredAt: Date;
|
|
25
|
+
/** When this signal last fired. */
|
|
26
|
+
lastTriggeredAt: Date;
|
|
27
|
+
/** Total number of times this signal has fired. */
|
|
28
|
+
count: number;
|
|
29
|
+
/** Free-text reason from the last trigger (if the signal supplied one). */
|
|
30
|
+
lastReason?: string;
|
|
31
|
+
/** Which phase the signal last fired in. */
|
|
32
|
+
lastPhase?: 'pre' | 'post';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Aggregated signals state stored on the session.
|
|
37
|
+
* Shape is locked to enable forward-compatible persistence in v2.0.
|
|
38
|
+
*/
|
|
39
|
+
export interface SignalsState {
|
|
40
|
+
/** Per-signal trigger tracking; keyed by signal id. */
|
|
41
|
+
triggers: Record<string, SignalTriggerState>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
45
|
+
// Schema types
|
|
46
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Schema for extraction signals. JSON Schema subset or Zod-compatible shape.
|
|
50
|
+
* The framework uses this to build the per-signal `extracted` field in the
|
|
51
|
+
* classifier response schema.
|
|
52
|
+
*
|
|
53
|
+
* When set on a signal, the signal operates in extraction mode: the classifier
|
|
54
|
+
* call includes this schema in the response format, and the handler receives
|
|
55
|
+
* `extracted: TExtract` when the signal matches.
|
|
56
|
+
*
|
|
57
|
+
* The type parameter `_T` is a phantom type that carries the extraction shape
|
|
58
|
+
* for downstream inference — the runtime value is always a JSON Schema object.
|
|
59
|
+
*/
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
61
|
+
export type SignalSchema<_T = unknown> = Record<string, unknown>;
|
|
62
|
+
|
|
63
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
64
|
+
// Predicate types
|
|
65
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Context passed to signal `if` predicates.
|
|
69
|
+
* Symmetric with `BranchPredicateContext` used by branches.
|
|
70
|
+
*/
|
|
71
|
+
export interface SignalPredicateContext<TContext = unknown, TData = unknown> {
|
|
72
|
+
/** Collected data (partial — null-check fields not guaranteed). */
|
|
73
|
+
data: Partial<TData>;
|
|
74
|
+
/** Agent-level context. */
|
|
75
|
+
context: TContext;
|
|
76
|
+
/** Full session state. */
|
|
77
|
+
session: SessionState<TData>;
|
|
78
|
+
/** Conversation history as events. */
|
|
79
|
+
history: Event[];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Code-evaluated predicate for signal `if` conditions.
|
|
84
|
+
* Returns `true` to pass (signal proceeds to `when` evaluation or fires),
|
|
85
|
+
* `false` to skip (signal is not evaluated this turn).
|
|
86
|
+
*
|
|
87
|
+
* Predicates evaluate BEFORE `when` conditions — code-first short-circuit.
|
|
88
|
+
* If `if` returns false, `when` is NOT evaluated (token-saving).
|
|
89
|
+
*
|
|
90
|
+
* If a predicate throws, the signal is treated as non-match and other
|
|
91
|
+
* signals continue evaluation.
|
|
92
|
+
*/
|
|
93
|
+
export type SignalPredicate<TContext = unknown, TData = unknown> = (
|
|
94
|
+
ctx: SignalPredicateContext<TContext, TData>,
|
|
95
|
+
) => boolean | Promise<boolean>;
|
|
96
|
+
|
|
97
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
98
|
+
// Signal directive
|
|
99
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* SignalDirective — what signal handlers return.
|
|
103
|
+
* Extends `PreDirective` (which extends `Directive`). Adds signal-specific
|
|
104
|
+
* fields: `stopOtherSignals` and `replyWith`.
|
|
105
|
+
*
|
|
106
|
+
* All position-control (`goTo`, `goToStep`, `complete`, `abort`, `reset`),
|
|
107
|
+
* state writes (`dataUpdate`, `contextUpdate`), prompt augmentation
|
|
108
|
+
* (`appendPrompt`, `injectTools`), `reply`, and `halt` are inherited unchanged.
|
|
109
|
+
*
|
|
110
|
+
* Post-phase drop rules: when returned in the post-phase, `appendPrompt`,
|
|
111
|
+
* `injectTools`, and `halt` are dropped with a debug warning — they have
|
|
112
|
+
* no meaning after the LLM call has already completed.
|
|
113
|
+
*/
|
|
114
|
+
export interface SignalDirective<TContext = unknown, TData = unknown>
|
|
115
|
+
extends PreDirective<TContext, TData> {
|
|
116
|
+
/**
|
|
117
|
+
* Stop processing remaining signals for this phase after this handler.
|
|
118
|
+
* Does not affect the other phase.
|
|
119
|
+
*/
|
|
120
|
+
stopOtherSignals?: boolean;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Verbatim reply with optional late-binding (function form).
|
|
124
|
+
* - String: same as `Directive.reply`.
|
|
125
|
+
* - Function: evaluated at emit time; result projects onto `Directive.reply`.
|
|
126
|
+
*
|
|
127
|
+
* The field is resolved and stripped before reaching the directive merge bus.
|
|
128
|
+
*/
|
|
129
|
+
replyWith?: string | ((ctx: SignalContext<TContext, TData>) => string);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
133
|
+
// Signal context (handler argument)
|
|
134
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Context passed to signal handlers when a signal fires.
|
|
138
|
+
* Symmetric with `ToolContext` — provides session state and writer methods.
|
|
139
|
+
*
|
|
140
|
+
* The `updateContext` and `updateData` writers follow the same D-Q12 contract
|
|
141
|
+
* as `ToolContext` writers.
|
|
142
|
+
*/
|
|
143
|
+
export interface SignalContext<
|
|
144
|
+
TContext = unknown,
|
|
145
|
+
TData = unknown,
|
|
146
|
+
TExtract = void,
|
|
147
|
+
> {
|
|
148
|
+
/** The signal definition that fired. */
|
|
149
|
+
signal: Signal<TContext, TData, TExtract>;
|
|
150
|
+
|
|
151
|
+
/** Phase in which this signal fired. */
|
|
152
|
+
phase: 'pre' | 'post';
|
|
153
|
+
|
|
154
|
+
/** Whether the signal matched (always `true` when handler runs). */
|
|
155
|
+
matched: true;
|
|
156
|
+
|
|
157
|
+
/** AI rationale when `when` matched, or `'code-only'` / `'unconditional'`. */
|
|
158
|
+
reason: string;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Extracted data when the signal has `extract` set. Typed via the
|
|
162
|
+
* TExtract generic. Undefined for detection-only signals.
|
|
163
|
+
*/
|
|
164
|
+
extracted: TExtract extends void ? undefined : TExtract;
|
|
165
|
+
|
|
166
|
+
/** Session state. Use writers below for mutations. */
|
|
167
|
+
session: SessionState<TData>;
|
|
168
|
+
/** Agent-level context. */
|
|
169
|
+
context: TContext;
|
|
170
|
+
/** Collected data (partial). */
|
|
171
|
+
data: Partial<TData>;
|
|
172
|
+
/** Conversation history as events. */
|
|
173
|
+
history: Event[];
|
|
174
|
+
|
|
175
|
+
/** Last user message (convenience). */
|
|
176
|
+
lastUserMessage?: string;
|
|
177
|
+
|
|
178
|
+
/** Timestamp when the signal fired. */
|
|
179
|
+
triggeredAt: Date;
|
|
180
|
+
|
|
181
|
+
/** Update agent context (same signature as ToolContext.updateContext). */
|
|
182
|
+
updateContext: (updates: Partial<TContext>) => Promise<void>;
|
|
183
|
+
/** Update collected data (same signature as ToolContext.updateData). */
|
|
184
|
+
updateData: (updates: Partial<TData>) => Promise<void>;
|
|
185
|
+
|
|
186
|
+
/** Imperative directive emission onto the per-turn bus. */
|
|
187
|
+
dispatch(directive: SignalDirective<TContext, TData>): void;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
191
|
+
// Signal definition
|
|
192
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* A signal: a typed event detector (and optional data extractor) that runs
|
|
196
|
+
* around an LLM turn.
|
|
197
|
+
*
|
|
198
|
+
* Conditions use the v2 `when` / `if` split:
|
|
199
|
+
* - `when`: AI-evaluated string(s). Entries prefixed with `!` are exclusion
|
|
200
|
+
* conditions rendered under "DO NOT TRIGGER WHEN" in the classifier prompt.
|
|
201
|
+
* Non-prefixed entries render under "TRIGGER WHEN". Positive entries use AND
|
|
202
|
+
* semantics (all must match). Negative entries use OR semantics (any match
|
|
203
|
+
* inhibits firing).
|
|
204
|
+
* - `if`: Code-evaluated function(s). Free. AND semantics.
|
|
205
|
+
*
|
|
206
|
+
* When both `if` and `when` are set, `if` evaluates first. If `if` returns
|
|
207
|
+
* false, `when` is not evaluated (token-saving).
|
|
208
|
+
*
|
|
209
|
+
* Signals with neither `when` nor `if` are unconditional — they always fire
|
|
210
|
+
* (subject to behavior gating). If `extract` is set on an unconditional signal,
|
|
211
|
+
* the extraction runs every turn.
|
|
212
|
+
*/
|
|
213
|
+
export interface Signal<
|
|
214
|
+
TContext = unknown,
|
|
215
|
+
TData = unknown,
|
|
216
|
+
TExtract = void,
|
|
217
|
+
> {
|
|
218
|
+
/** Unique identifier. Auto-generated if omitted (stable within session). */
|
|
219
|
+
id?: string;
|
|
220
|
+
|
|
221
|
+
/** Display title (shown in logs and traces). */
|
|
222
|
+
title?: string;
|
|
223
|
+
|
|
224
|
+
/** Free-text description of what this signal detects. */
|
|
225
|
+
description?: string;
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* AI-evaluated trigger condition(s). String or array of strings.
|
|
229
|
+
* - Non-prefixed entries: AND semantics. All must match to trigger.
|
|
230
|
+
* - `!`-prefixed entries: OR exclusion. Any match inhibits firing.
|
|
231
|
+
*
|
|
232
|
+
* At prompt-render time, the framework splits entries by prefix:
|
|
233
|
+
* - Non-`!` → rendered under "TRIGGER WHEN"
|
|
234
|
+
* - `!` → stripped of prefix, rendered under "DO NOT TRIGGER WHEN"
|
|
235
|
+
*/
|
|
236
|
+
when?: string | string[];
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Code predicate(s). Function or array of functions (AND).
|
|
240
|
+
* Free to evaluate; runs before `when`. If `if` returns false, the
|
|
241
|
+
* signal is skipped — `when` is not evaluated.
|
|
242
|
+
*/
|
|
243
|
+
if?: SignalPredicate<TContext, TData> | SignalPredicate<TContext, TData>[];
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Optional structured extraction schema. When set, the signal operates
|
|
247
|
+
* in extraction mode: the classifier call includes this schema in the
|
|
248
|
+
* response format, and the handler receives `extracted: TExtract` when
|
|
249
|
+
* the signal matches.
|
|
250
|
+
*
|
|
251
|
+
* Extraction signals participate in the same batched classifier call as
|
|
252
|
+
* detection signals. The merged response schema includes each signal's
|
|
253
|
+
* extraction fields alongside the standard `matched` / `reason`.
|
|
254
|
+
*
|
|
255
|
+
* When absent, the signal operates in detection mode (boolean match).
|
|
256
|
+
*/
|
|
257
|
+
extract?: SignalSchema<TExtract>;
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* When this signal evaluates relative to the LLM call.
|
|
261
|
+
* - `'pre'`: before the LLM call (parallel with routing).
|
|
262
|
+
* - `'post'`: after the LLM call (sequential, after finalize).
|
|
263
|
+
* - `'both'`: evaluated in both phases.
|
|
264
|
+
*/
|
|
265
|
+
phase: 'pre' | 'post' | 'both';
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Handler invoked when the signal fires. Receives match info and
|
|
269
|
+
* extracted data (if applicable). Returns void or a SignalDirective.
|
|
270
|
+
*/
|
|
271
|
+
handler: (ctx: SignalContext<TContext, TData, TExtract>)
|
|
272
|
+
=> void
|
|
273
|
+
| SignalDirective<TContext, TData>
|
|
274
|
+
| Promise<void | SignalDirective<TContext, TData>>;
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Rate-limit / dedup behavior:
|
|
278
|
+
* - `'once'`: fire once per session.
|
|
279
|
+
* - `'always'`: fire every match (default).
|
|
280
|
+
* - `'cooldown'`: fire, then suppress for `cooldownMs`.
|
|
281
|
+
*/
|
|
282
|
+
behavior?: 'once' | 'always' | 'cooldown';
|
|
283
|
+
|
|
284
|
+
/** Cooldown duration in ms. Required when `behavior === 'cooldown'`. */
|
|
285
|
+
cooldownMs?: number;
|
|
286
|
+
|
|
287
|
+
/** Whether this signal is currently enabled. @default true */
|
|
288
|
+
enabled?: boolean;
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Higher priority signals fire first within a phase. Default 0.
|
|
292
|
+
* Tie: declaration order in `agent.signals`.
|
|
293
|
+
*/
|
|
294
|
+
priority?: number;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
298
|
+
// Observability types
|
|
299
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Observability record for a signal that fired during a turn.
|
|
303
|
+
* Populated in fire order across both pre- and post-phases.
|
|
304
|
+
* Mirrors the observability framing of `executedSteps` and `appliedGuidelines`.
|
|
305
|
+
*/
|
|
306
|
+
export interface SignalFiring<TContext = unknown, TData = unknown> {
|
|
307
|
+
/** The signal's unique identifier. */
|
|
308
|
+
id: string;
|
|
309
|
+
/** Which phase the signal fired in. */
|
|
310
|
+
phase: 'pre' | 'post';
|
|
311
|
+
/** AI rationale when `when` matched, or 'code-only' / 'unconditional'. */
|
|
312
|
+
reason?: string;
|
|
313
|
+
/** Extracted data when the signal operates in extraction mode. */
|
|
314
|
+
extracted?: unknown;
|
|
315
|
+
/** The directive returned by the signal handler (if any). */
|
|
316
|
+
directive?: SignalDirective<TContext, TData>;
|
|
317
|
+
/** Error message if the handler threw. */
|
|
318
|
+
handlerError?: string;
|
|
319
|
+
/** Wall-clock duration of the handler invocation in milliseconds. */
|
|
320
|
+
durationMs?: number;
|
|
321
|
+
}
|
package/src/types/template.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface TemplateContext<TContext = unknown, TData = unknown> {
|
|
|
21
21
|
history?: Event[];
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* The data collected in the current
|
|
24
|
+
* The data collected in the current flow.
|
|
25
25
|
* A convenience alias for `session.data`.
|
|
26
26
|
*/
|
|
27
27
|
data: Partial<TData>;
|
|
@@ -29,7 +29,7 @@ export interface TemplateContext<TContext = unknown, TData = unknown> {
|
|
|
29
29
|
/**
|
|
30
30
|
* Helper methods for working with history and context.
|
|
31
31
|
*/
|
|
32
|
-
helpers
|
|
32
|
+
helpers?: {
|
|
33
33
|
/**
|
|
34
34
|
* Get the last message from history, optionally filtered by role.
|
|
35
35
|
* @param role - Optional role to filter by (user, assistant, etc.)
|
|
@@ -74,15 +74,7 @@ export type Template<TContext = unknown, TData = unknown> =
|
|
|
74
74
|
| string
|
|
75
75
|
| ((params: TemplateContext<TContext, TData>) => string | Promise<string>);
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
* Represents a condition that can be used for routing decisions.
|
|
79
|
-
* Supports strings (AI context only), boolean functions (programmatic evaluation),
|
|
80
|
-
* and arrays of either for complex condition logic.
|
|
81
|
-
*/
|
|
82
|
-
export type ConditionTemplate<TContext = unknown, TData = unknown> =
|
|
83
|
-
| string // AI context only - not evaluated programmatically
|
|
84
|
-
| ((params: TemplateContext<TContext, TData>) => boolean | Promise<boolean>) // Programmatic evaluation
|
|
85
|
-
| ConditionTemplate<TContext, TData>[]; // Array of either
|
|
77
|
+
|
|
86
78
|
|
|
87
79
|
/**
|
|
88
80
|
* Result of condition evaluation containing both programmatic results
|
package/src/types/tool.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { Event, StepRef, ValidationResult } from "./index";
|
|
7
|
+
import type { Directive } from "./flow";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Context provided to tool handlers
|
|
@@ -15,7 +16,7 @@ export interface ToolContext<TContext = any, TData = any> {
|
|
|
15
16
|
data: Partial<TData>;
|
|
16
17
|
/** Interaction history */
|
|
17
18
|
history: Event[];
|
|
18
|
-
/** Current step reference (if in a
|
|
19
|
+
/** Current step reference (if in a flow) */
|
|
19
20
|
step?: StepRef;
|
|
20
21
|
/** Additional metadata */
|
|
21
22
|
metadata?: Record<string, unknown>;
|
|
@@ -30,6 +31,16 @@ export interface ToolContext<TContext = any, TData = any> {
|
|
|
30
31
|
setField<K extends keyof TData>(key: K, value: TData[K]): Promise<void>;
|
|
31
32
|
/** Check if a field exists in collected data */
|
|
32
33
|
hasField<K extends keyof TData>(key: K): boolean;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Emit a directive into the per-turn bus. Identical effect to returning
|
|
37
|
+
* `{ directive }` from the tool handler, but usable mid-handler (e.g.,
|
|
38
|
+
* after an early-exit branch decides the rest of the turn is moot).
|
|
39
|
+
*
|
|
40
|
+
* Multiple `dispatch()` calls in one handler are allowed; they are merged
|
|
41
|
+
* by Algorithm 4 along with directives from other tools/hooks this turn.
|
|
42
|
+
*/
|
|
43
|
+
dispatch(directive: Directive<TContext, TData>): void;
|
|
33
44
|
}
|
|
34
45
|
|
|
35
46
|
/**
|
|
@@ -52,6 +63,8 @@ export interface ToolResult<
|
|
|
52
63
|
error?: string;
|
|
53
64
|
/** Optional metadata about the execution */
|
|
54
65
|
meta?: Record<string, unknown>;
|
|
66
|
+
/** Emit a directive declaratively (alternative to ctx.dispatch). */
|
|
67
|
+
directive?: Directive<TContext, TData>;
|
|
55
68
|
}
|
|
56
69
|
|
|
57
70
|
/**
|
|
@@ -70,7 +83,11 @@ export type ToolHandler<
|
|
|
70
83
|
| ToolResult<TResult, TContext, TData>;
|
|
71
84
|
|
|
72
85
|
/**
|
|
73
|
-
* Tool definition -
|
|
86
|
+
* Tool definition - single unified type (v2).
|
|
87
|
+
*
|
|
88
|
+
* In v1 there were two tool types: `Tool` (basic) and `EnhancedTool`
|
|
89
|
+
* (with metadata). v2 merges these into a single `Tool` type with all
|
|
90
|
+
* metadata fields optional. `EnhancedTool` is removed from the public surface.
|
|
74
91
|
*/
|
|
75
92
|
export interface Tool<
|
|
76
93
|
TContext = any,
|
|
@@ -79,14 +96,38 @@ export interface Tool<
|
|
|
79
96
|
> {
|
|
80
97
|
/** Tool identifier */
|
|
81
98
|
id: string;
|
|
82
|
-
/** Tool display name (shown to AI models) */
|
|
83
|
-
name?: string;
|
|
84
99
|
/** Tool handler function */
|
|
85
100
|
handler: ToolHandler<TContext, TData, TResult>;
|
|
86
101
|
/** Description of what the tool does (for AI discovery) */
|
|
87
102
|
description?: string;
|
|
88
103
|
/** Parameter schema or description */
|
|
89
104
|
parameters?: unknown;
|
|
105
|
+
|
|
106
|
+
// ── Optional metadata (merged from EnhancedTool in v2) ──
|
|
107
|
+
|
|
108
|
+
/** Whether this tool is safe to run concurrently with other concurrent-safe tools */
|
|
109
|
+
isConcurrencySafe?(input?: Record<string, unknown>): boolean;
|
|
110
|
+
/** Whether this tool only reads data without side effects */
|
|
111
|
+
isReadOnly?(input?: Record<string, unknown>): boolean;
|
|
112
|
+
/** Whether this tool performs destructive/irreversible operations */
|
|
113
|
+
isDestructive?(input?: Record<string, unknown>): boolean;
|
|
114
|
+
|
|
115
|
+
/** How the tool responds to abort signals: 'cancel' = immediate abort, 'block' = allow completion */
|
|
116
|
+
interruptBehavior?(): 'cancel' | 'block';
|
|
117
|
+
/** Maximum characters for the tool result before truncation */
|
|
118
|
+
maxResultSizeChars?: number;
|
|
119
|
+
|
|
120
|
+
/** Validate input before execution */
|
|
121
|
+
validateInput?(
|
|
122
|
+
input: Record<string, unknown>,
|
|
123
|
+
context: ToolContext<TContext, TData>
|
|
124
|
+
): Promise<ToolValidationResult> | ToolValidationResult;
|
|
125
|
+
|
|
126
|
+
/** Check permissions before execution — when denied, handler is NOT invoked */
|
|
127
|
+
checkPermissions?(
|
|
128
|
+
input: Record<string, unknown>,
|
|
129
|
+
context: ToolContext<TContext, TData>
|
|
130
|
+
): Promise<ToolPermissionResult> | ToolPermissionResult;
|
|
90
131
|
}
|
|
91
132
|
|
|
92
133
|
|
|
@@ -101,6 +142,8 @@ export interface ToolExecutionResult {
|
|
|
101
142
|
contextUpdate?: Record<string, unknown>;
|
|
102
143
|
dataUpdate?: Record<string, unknown>;
|
|
103
144
|
metadata?: Record<string, unknown>;
|
|
145
|
+
/** Directives collected during tool execution (from ctx.dispatch and/or result.directive). */
|
|
146
|
+
directives?: Directive[];
|
|
104
147
|
}
|
|
105
148
|
|
|
106
149
|
/**
|
|
@@ -108,7 +151,7 @@ export interface ToolExecutionResult {
|
|
|
108
151
|
*/
|
|
109
152
|
export enum ToolScope {
|
|
110
153
|
AGENT = 'agent',
|
|
111
|
-
|
|
154
|
+
FLOW = 'flow',
|
|
112
155
|
STEP = 'step',
|
|
113
156
|
REGISTERED = 'registered',
|
|
114
157
|
ALL = 'all'
|
|
@@ -116,7 +159,7 @@ export enum ToolScope {
|
|
|
116
159
|
|
|
117
160
|
|
|
118
161
|
|
|
119
|
-
// --- EnhancedTool
|
|
162
|
+
// --- EnhancedTool (deprecated internal alias — use Tool directly) ---
|
|
120
163
|
|
|
121
164
|
/**
|
|
122
165
|
* Result of input validation on a tool call
|
|
@@ -177,7 +220,7 @@ export type ToolStatus = 'queued' | 'executing' | 'completed' | 'yielded';
|
|
|
177
220
|
export interface TrackedTool<TContext = unknown, TData = unknown> {
|
|
178
221
|
id: string;
|
|
179
222
|
toolCall: ToolCallRequest;
|
|
180
|
-
tool:
|
|
223
|
+
tool: Tool<TContext, TData>;
|
|
181
224
|
status: ToolStatus;
|
|
182
225
|
isConcurrencySafe: boolean;
|
|
183
226
|
promise?: Promise<void>;
|
|
@@ -185,42 +228,7 @@ export interface TrackedTool<TContext = unknown, TData = unknown> {
|
|
|
185
228
|
pendingProgress: string[];
|
|
186
229
|
}
|
|
187
230
|
|
|
188
|
-
/**
|
|
189
|
-
* Extended tool interface with rich metadata for concurrency control,
|
|
190
|
-
* permission gating, input validation, and result size management.
|
|
191
|
-
*
|
|
192
|
-
* All additional methods/properties are optional — plain `Tool` objects
|
|
193
|
-
* remain fully compatible.
|
|
194
|
-
*/
|
|
195
|
-
export interface EnhancedTool<
|
|
196
|
-
TContext = any,
|
|
197
|
-
TData = any,
|
|
198
|
-
TResult = any
|
|
199
|
-
> extends Tool<TContext, TData, TResult> {
|
|
200
|
-
/** Whether this tool is safe to run concurrently with other concurrent-safe tools */
|
|
201
|
-
isConcurrencySafe?(input?: Record<string, unknown>): boolean;
|
|
202
|
-
/** Whether this tool only reads data without side effects */
|
|
203
|
-
isReadOnly?(input?: Record<string, unknown>): boolean;
|
|
204
|
-
/** Whether this tool performs destructive/irreversible operations */
|
|
205
|
-
isDestructive?(input?: Record<string, unknown>): boolean;
|
|
206
231
|
|
|
207
|
-
/** How the tool responds to abort signals: 'cancel' = immediate abort, 'block' = allow completion */
|
|
208
|
-
interruptBehavior?(): 'cancel' | 'block';
|
|
209
|
-
/** Maximum characters for the tool result before truncation */
|
|
210
|
-
maxResultSizeChars?: number;
|
|
211
|
-
|
|
212
|
-
/** Validate input before execution */
|
|
213
|
-
validateInput?(
|
|
214
|
-
input: Record<string, unknown>,
|
|
215
|
-
context: ToolContext<TContext, TData>
|
|
216
|
-
): Promise<ToolValidationResult> | ToolValidationResult;
|
|
217
|
-
|
|
218
|
-
/** Check permissions before execution */
|
|
219
|
-
checkPermissions?(
|
|
220
|
-
input: Record<string, unknown>,
|
|
221
|
-
context: ToolContext<TContext, TData>
|
|
222
|
-
): Promise<ToolPermissionResult> | ToolPermissionResult;
|
|
223
|
-
}
|
|
224
232
|
|
|
225
233
|
// --- Existing tool configuration types ---
|
|
226
234
|
|