@falai/agent 1.2.8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -886
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +9 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +5 -5
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +30 -11
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +5 -5
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/constants/index.d.ts +0 -9
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +2 -11
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +119 -153
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +471 -324
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/cjs/core/AutoChainExecutor.js +297 -0
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
- package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/BranchEvaluator.js +130 -0
- package/dist/cjs/core/BranchEvaluator.js.map +1 -0
- package/dist/cjs/core/DirectiveBus.d.ts +88 -0
- package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveBus.js +196 -0
- package/dist/cjs/core/DirectiveBus.js.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.js +121 -0
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
- package/dist/cjs/core/Flow.d.ts +186 -0
- package/dist/cjs/core/Flow.d.ts.map +1 -0
- package/dist/cjs/core/Flow.js +550 -0
- package/dist/cjs/core/Flow.js.map +1 -0
- package/dist/cjs/core/FlowRouter.d.ts +182 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
- package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
- package/dist/cjs/core/FlowRouter.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.d.ts +2 -2
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +7 -7
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +21 -8
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +182 -105
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
- package/dist/cjs/core/PromptSectionCache.js +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +18 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +38 -36
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +73 -56
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +1191 -1014
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +509 -136
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/SignalEvaluator.js +333 -0
- package/dist/cjs/core/SignalEvaluator.js.map +1 -0
- package/dist/cjs/core/SignalProcessor.d.ts +152 -0
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
- package/dist/cjs/core/SignalProcessor.js +562 -0
- package/dist/cjs/core/SignalProcessor.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +43 -32
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +221 -126
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +44 -13
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +174 -91
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/core/flow-namespace.d.ts +49 -0
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
- package/dist/cjs/core/flow-namespace.js +171 -0
- package/dist/cjs/core/flow-namespace.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +183 -54
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +0 -6
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/ai.d.ts +3 -3
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +15 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +22 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/flow.d.ts +513 -0
- package/dist/cjs/types/flow.d.ts.map +1 -0
- package/dist/cjs/types/{route.js → flow.js} +2 -2
- package/dist/cjs/types/flow.js.map +1 -0
- package/dist/cjs/types/index.d.ts +7 -6
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +6 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +11 -7
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/routing.d.ts +1 -1
- package/dist/cjs/types/routing.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +24 -23
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +248 -0
- package/dist/cjs/types/signals.d.ts.map +1 -0
- package/dist/cjs/types/signals.js +11 -0
- package/dist/cjs/types/signals.js.map +1 -0
- package/dist/cjs/types/template.d.ts +2 -8
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +36 -29
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +7 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/id.d.ts +13 -5
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +24 -10
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -2
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +44 -5
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +197 -38
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/constants/index.d.ts +0 -9
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -9
- package/dist/constants/index.js.map +1 -1
- package/dist/core/Agent.d.ts +119 -153
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +472 -325
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +107 -0
- package/dist/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/core/AutoChainExecutor.js +293 -0
- package/dist/core/AutoChainExecutor.js.map +1 -0
- package/dist/core/BranchEvaluator.d.ts +54 -0
- package/dist/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/core/BranchEvaluator.js +126 -0
- package/dist/core/BranchEvaluator.js.map +1 -0
- package/dist/core/DirectiveBus.d.ts +88 -0
- package/dist/core/DirectiveBus.d.ts.map +1 -0
- package/dist/core/DirectiveBus.js +192 -0
- package/dist/core/DirectiveBus.js.map +1 -0
- package/dist/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/core/DirectiveChainTracker.js +117 -0
- package/dist/core/DirectiveChainTracker.js.map +1 -0
- package/dist/core/Flow.d.ts +186 -0
- package/dist/core/Flow.d.ts.map +1 -0
- package/dist/core/Flow.js +546 -0
- package/dist/core/Flow.js.map +1 -0
- package/dist/core/FlowRouter.d.ts +182 -0
- package/dist/core/FlowRouter.d.ts.map +1 -0
- package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
- package/dist/core/FlowRouter.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts +2 -2
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +7 -7
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +21 -8
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +183 -106
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +1 -1
- package/dist/core/PromptSectionCache.js +1 -1
- package/dist/core/ResponseEngine.d.ts +18 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +38 -36
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +73 -56
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +1193 -1016
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +124 -26
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +509 -137
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +86 -0
- package/dist/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/core/SignalEvaluator.js +326 -0
- package/dist/core/SignalEvaluator.js.map +1 -0
- package/dist/core/SignalProcessor.d.ts +152 -0
- package/dist/core/SignalProcessor.d.ts.map +1 -0
- package/dist/core/SignalProcessor.js +555 -0
- package/dist/core/SignalProcessor.js.map +1 -0
- package/dist/core/Step.d.ts +43 -32
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +220 -126
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +44 -13
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +174 -91
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +35 -0
- package/dist/core/createAgent.d.ts.map +1 -0
- package/dist/core/createAgent.js +36 -0
- package/dist/core/createAgent.js.map +1 -0
- package/dist/core/flow-namespace.d.ts +49 -0
- package/dist/core/flow-namespace.d.ts.map +1 -0
- package/dist/core/flow-namespace.js +168 -0
- package/dist/core/flow-namespace.js.map +1 -0
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/types/agent.d.ts +183 -54
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/ai.d.ts +3 -3
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +18 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/flow.d.ts +513 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +5 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +7 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +11 -7
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/routing.d.ts +1 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -23
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +248 -0
- package/dist/types/signals.d.ts.map +1 -0
- package/dist/types/signals.js +10 -0
- package/dist/types/signals.js.map +1 -0
- package/dist/types/template.d.ts +2 -8
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +36 -29
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +7 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/id.d.ts +13 -5
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +44 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +193 -37
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +15 -202
- package/docs/concepts/architecture.md +281 -0
- package/docs/concepts/directives.md +400 -0
- package/docs/concepts/pipeline.md +399 -0
- package/docs/guides/branching.md +263 -0
- package/docs/guides/compaction.md +163 -0
- package/docs/guides/conditions.md +167 -0
- package/docs/guides/error-handling.md +176 -0
- package/docs/guides/flow-control.md +409 -0
- package/docs/guides/instructions.md +210 -0
- package/docs/guides/persistence.md +182 -0
- package/docs/guides/streaming.md +137 -0
- package/docs/migration/README.md +15 -0
- package/docs/migration/route-to-flow.md +560 -0
- package/docs/migration/v1-to-v2.md +909 -0
- package/docs/reference/adapters.md +481 -0
- package/docs/reference/branches.md +241 -0
- package/docs/reference/create-agent.md +186 -0
- package/docs/reference/directive.md +243 -0
- package/docs/reference/errors.md +122 -0
- package/docs/reference/flow.md +238 -0
- package/docs/reference/instruction.md +177 -0
- package/docs/reference/pre-directive.md +131 -0
- package/docs/reference/providers.md +227 -0
- package/docs/reference/signals.md +356 -0
- package/docs/reference/step.md +339 -0
- package/docs/reference/tool.md +269 -0
- package/docs/start/01-install.md +81 -0
- package/docs/start/02-first-agent.md +196 -0
- package/docs/start/03-collect-data.md +222 -0
- package/docs/start/04-add-tools.md +276 -0
- package/docs/start/05-go-to-production.md +216 -0
- package/examples/01-quickstart.ts +20 -0
- package/examples/02-data-extraction.ts +90 -0
- package/examples/03-tools.ts +136 -0
- package/examples/04-instructions.ts +100 -0
- package/examples/05-branching.ts +140 -0
- package/examples/06-flow-control.ts +103 -0
- package/examples/07-streaming.ts +69 -0
- package/examples/08-persistence.ts +98 -0
- package/examples/09-signals.ts +144 -0
- package/examples/tsconfig.json +30 -0
- package/package.json +2 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +10 -8
- package/src/adapters/PostgreSQLAdapter.ts +26 -10
- package/src/adapters/PrismaAdapter.ts +6 -6
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +31 -12
- package/src/constants/index.ts +2 -10
- package/src/core/Agent.ts +585 -374
- package/src/core/AutoChainExecutor.ts +440 -0
- package/src/core/BranchEvaluator.ts +167 -0
- package/src/core/DirectiveBus.ts +248 -0
- package/src/core/DirectiveChainTracker.ts +144 -0
- package/src/core/Flow.ts +666 -0
- package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
- package/src/core/PersistenceManager.ts +8 -8
- package/src/core/PromptComposer.ts +209 -140
- package/src/core/PromptSectionCache.ts +1 -1
- package/src/core/ResponseEngine.ts +61 -46
- package/src/core/ResponseModal.ts +1453 -1240
- package/src/core/ResponsePipeline.ts +655 -175
- package/src/core/SignalEvaluator.ts +420 -0
- package/src/core/SignalProcessor.ts +723 -0
- package/src/core/Step.ts +279 -176
- package/src/core/StreamingToolExecutor.ts +4 -4
- package/src/core/ToolManager.ts +200 -97
- package/src/core/createAgent.ts +40 -0
- package/src/core/flow-namespace.ts +219 -0
- package/src/index.ts +42 -36
- package/src/types/agent.ts +182 -53
- package/src/types/ai.ts +3 -3
- package/src/types/errors.ts +18 -0
- package/src/types/flow.ts +590 -0
- package/src/types/index.ts +43 -16
- package/src/types/persistence.ts +12 -8
- package/src/types/routing.ts +1 -1
- package/src/types/session.ts +26 -23
- package/src/types/signals.ts +321 -0
- package/src/types/template.ts +3 -11
- package/src/types/tool.ts +50 -42
- package/src/utils/condition.ts +13 -4
- package/src/utils/id.ts +27 -9
- package/src/utils/index.ts +6 -2
- package/src/utils/session.ts +238 -42
- package/dist/cjs/core/BatchExecutor.d.ts +0 -359
- package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
- package/dist/cjs/core/BatchExecutor.js +0 -861
- package/dist/cjs/core/BatchExecutor.js.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.js +0 -223
- package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -180
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -542
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -185
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -336
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/route.js.map +0 -1
- package/dist/core/BatchExecutor.d.ts +0 -359
- package/dist/core/BatchExecutor.d.ts.map +0 -1
- package/dist/core/BatchExecutor.js +0 -856
- package/dist/core/BatchExecutor.js.map +0 -1
- package/dist/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/core/BatchPromptBuilder.js +0 -219
- package/dist/core/BatchPromptBuilder.js.map +0 -1
- package/dist/core/Route.d.ts +0 -180
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -538
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -185
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/types/route.d.ts +0 -336
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/route.js +0 -5
- package/dist/types/route.js.map +0 -1
- package/docs/CONTRIBUTING.md +0 -521
- package/docs/api/README.md +0 -3299
- package/docs/api/overview.md +0 -1410
- package/docs/architecture/data-extraction-flow.md +0 -360
- package/docs/architecture/multi-step-execution.md +0 -277
- package/docs/core/agent/README.md +0 -938
- package/docs/core/agent/context-management.md +0 -796
- package/docs/core/agent/rules-and-prohibitions.md +0 -113
- package/docs/core/agent/session-management.md +0 -693
- package/docs/core/ai-integration/prompt-composition.md +0 -355
- package/docs/core/ai-integration/providers.md +0 -515
- package/docs/core/ai-integration/response-processing.md +0 -433
- package/docs/core/conversation-flows/data-collection.md +0 -772
- package/docs/core/conversation-flows/route-dsl.md +0 -509
- package/docs/core/conversation-flows/routes.md +0 -249
- package/docs/core/conversation-flows/step-transitions.md +0 -731
- package/docs/core/conversation-flows/steps.md +0 -268
- package/docs/core/error-handling.md +0 -830
- package/docs/core/persistence/adapters.md +0 -255
- package/docs/core/persistence/session-storage.md +0 -656
- package/docs/core/routing/intelligent-routing.md +0 -470
- package/docs/core/tools/enhanced-tool.md +0 -186
- package/docs/core/tools/streaming-execution.md +0 -161
- package/docs/core/tools/tool-definition.md +0 -970
- package/docs/core/tools/tool-scoping.md +0 -819
- package/docs/guides/advanced-patterns/publishing.md +0 -186
- package/docs/guides/context-compaction.md +0 -96
- package/docs/guides/error-handling-patterns.md +0 -578
- package/docs/guides/getting-started/README.md +0 -795
- package/docs/guides/migration/README.md +0 -101
- package/docs/guides/migration/flexible-routing-conditions.md +0 -375
- package/docs/guides/migration/multi-step-execution.md +0 -393
- package/docs/guides/migration/response-modal-refactor.md +0 -518
- package/docs/guides/prompt-optimization.md +0 -164
- package/examples/advanced-patterns/context-compaction.ts +0 -223
- package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
- package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
- package/examples/advanced-patterns/streaming-responses.ts +0 -656
- package/examples/ai-providers/anthropic-integration.ts +0 -388
- package/examples/ai-providers/openai-integration.ts +0 -228
- package/examples/condition-patterns/function-only-conditions.ts +0 -365
- package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
- package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +0 -296
- package/examples/conversation-flows/completion-transitions.ts +0 -318
- package/examples/core-concepts/basic-agent.ts +0 -503
- package/examples/core-concepts/modern-streaming-api.ts +0 -309
- package/examples/core-concepts/schema-driven-extraction.ts +0 -332
- package/examples/core-concepts/session-management.ts +0 -494
- package/examples/integrations/database-integration.ts +0 -631
- package/examples/integrations/healthcare-integration.ts +0 -595
- package/examples/integrations/search-integration.ts +0 -530
- package/examples/integrations/server-session-management.ts +0 -307
- package/examples/persistence/custom-adapter.ts +0 -526
- package/examples/persistence/database-persistence.ts +0 -583
- package/examples/persistence/memory-sessions.ts +0 -495
- package/examples/persistence/prisma-schema.example.prisma +0 -74
- package/examples/persistence/redis-persistence.ts +0 -488
- package/examples/tools/basic-tools.ts +0 -765
- package/examples/tools/data-enrichment-tools.ts +0 -593
- package/examples/tools/enhanced-tool-metadata.ts +0 -268
- package/examples/tools/streaming-tool-execution.ts +0 -283
- package/src/core/BatchExecutor.ts +0 -1187
- package/src/core/BatchPromptBuilder.ts +0 -299
- package/src/core/Route.ts +0 -678
- package/src/types/route.ts +0 -392
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Route → Flow rename"
|
|
3
|
+
description: "Rename the Route domain noun to Flow across symbols, config, persistence, and generated IDs, with per-adapter data migration steps."
|
|
4
|
+
type: migration
|
|
5
|
+
order: 2
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Migration Guide: Route → Flow Rename
|
|
9
|
+
|
|
10
|
+
**Version:** Minor breaking bump (ships before v2 overhaul)
|
|
11
|
+
**CHANGELOG:** See the [breaking-change entry in CHANGELOG.md](../../CHANGELOG.md)
|
|
12
|
+
|
|
13
|
+
## Summary
|
|
14
|
+
|
|
15
|
+
The `Route` domain noun has been renamed to `Flow` across the entire `@falai/agent` package. This is a clean break with no compatibility shims, no dual-naming layer, and no runtime fallback for legacy field names. Every public symbol, configuration option, persisted column/field, adapter method, constant, error class, and utility function that referenced "Route" as a noun now uses "Flow". The verb form `route()` and the gerund "routing" (as used in prose and the `routing.ts` module) are preserved — routing-as-an-action remains the correct verb for selecting a flow.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Symbol Rename Table
|
|
20
|
+
|
|
21
|
+
| Old | New | Layer | Action |
|
|
22
|
+
|-----|-----|-------|--------|
|
|
23
|
+
| `Route` (class) | `Flow` | Core | Update imports and instantiation |
|
|
24
|
+
| `RouteOptions` | `FlowOptions` | Type | Update type annotations |
|
|
25
|
+
| `RouteRef` | `FlowRef` | Type | Update type annotations |
|
|
26
|
+
| `RouteTransitionConfig` | `FlowTransitionConfig` | Type | Update type annotations |
|
|
27
|
+
| `RouteCompletionHandler` | `FlowCompletionHandler` | Type | Update type annotations |
|
|
28
|
+
| `RouteLifecycleHooks` | `FlowLifecycleHooks` | Type | Update type annotations |
|
|
29
|
+
| `RoutingEngine` | `FlowRouter` | Core | Update imports and references |
|
|
30
|
+
| `RoutingEngineOptions` | `FlowRouterOptions` | Type | Update type annotations |
|
|
31
|
+
| `RoutingDecisionOutput` | `FlowRoutingDecisionOutput` | Type | Update type annotations |
|
|
32
|
+
| `RouteConfigurationError` | `FlowConfigurationError` | Error | Update catch blocks |
|
|
33
|
+
| `END_ROUTE` | Removed | Constant | Implicit terminus — remove all references |
|
|
34
|
+
| `END_ROUTE_ID` | Removed | Constant | Implicit terminus — remove all references |
|
|
35
|
+
| `generateRouteId` | `generateFlowId` | Utility | Update calls |
|
|
36
|
+
| `enterRoute` | `enterFlow` | Utility | Update calls |
|
|
37
|
+
| `StepRef.routeId` | `StepRef.flowId` | Type | Update field access |
|
|
38
|
+
|
|
39
|
+
### Preserved (verb-form carve-outs)
|
|
40
|
+
|
|
41
|
+
These are **not** renamed:
|
|
42
|
+
|
|
43
|
+
- `route()` method on `FlowRouter` (verb form)
|
|
44
|
+
- `RoutingDecision` type (describes the act of routing)
|
|
45
|
+
- `RoutingSchemaOptions` type
|
|
46
|
+
- `buildRoutingPrompt` method
|
|
47
|
+
- `getCandidateStepsWithConditions` method (returns Steps)
|
|
48
|
+
- `src/types/routing.ts` file path
|
|
49
|
+
- All "routing" prose in documentation
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Configuration Rename Table
|
|
54
|
+
|
|
55
|
+
| Old | New | Location |
|
|
56
|
+
|-----|-----|----------|
|
|
57
|
+
| `AgentOptions.routes` | `AgentOptions.flows` | Agent constructor |
|
|
58
|
+
| `AgentOptions.routeSwitchMargin` | `AgentOptions.flowSwitchMargin` | Agent constructor |
|
|
59
|
+
| `agent.routeSwitchMargin` | `agent.flowSwitchMargin` | Getter/setter |
|
|
60
|
+
| `agent.createRoute(...)` | `agent.createFlow(...)` | Method call |
|
|
61
|
+
| `agent.getRoutes()` | `agent.getFlows()` | Method call |
|
|
62
|
+
| `agent.nextStepRoute(...)` | `agent.nextStepFlow(...)` | Method call |
|
|
63
|
+
| `agent.getRoutingEngine()` | `agent.getFlowRouter()` | Method call |
|
|
64
|
+
| `agent.routes` | `agent.flows` | Getter |
|
|
65
|
+
| `Guideline.scope: 'route'` | `Guideline.scope: 'flow'` | Guideline config |
|
|
66
|
+
| `Guideline.route` | `Guideline.flow` | Guideline config |
|
|
67
|
+
| `RoutingDecision.routes` | `RoutingDecision.flows` | Field access |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Session State Rename Table
|
|
72
|
+
|
|
73
|
+
| Old | New | Notes |
|
|
74
|
+
|-----|-----|-------|
|
|
75
|
+
| `SessionState.currentRoute` | `SessionState.currentFlow` | Runtime shape |
|
|
76
|
+
| `SessionState.routeHistory` | `SessionState.flowHistory` | Runtime shape |
|
|
77
|
+
| `flowHistory[].routeId` | `flowHistory[].flowId` | History item shape |
|
|
78
|
+
| `PendingTransition.targetRouteId` | `PendingTransition.targetFlowId` | Transition config |
|
|
79
|
+
| `PendingTransition.reason: "route_complete"` | `PendingTransition.reason: "flow_complete"` | String literal |
|
|
80
|
+
| `SessionData.currentRoute` | `SessionData.currentFlow` | Persistence shape |
|
|
81
|
+
| `CollectedStateData.routeHistory` | `CollectedStateData.flowHistory` | Persistence shape |
|
|
82
|
+
| `CollectedStateData.currentRouteTitle` | `CollectedStateData.currentFlowTitle` | Persistence shape |
|
|
83
|
+
| `MessageData.route` | `MessageData.flow` | Persistence shape |
|
|
84
|
+
| `SaveMessageOptions.route` | `SaveMessageOptions.flow` | Persistence shape |
|
|
85
|
+
|
|
86
|
+
### StoppedReason Literals
|
|
87
|
+
|
|
88
|
+
| Old | New |
|
|
89
|
+
|-----|-----|
|
|
90
|
+
| `'end_route'` | Removed — use `'last_step'` or `'completed'` |
|
|
91
|
+
| `'route_complete'` | `'last_step'` (no successor) or `'completed'` (explicit directive) |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Adapter Method Rename Table
|
|
96
|
+
|
|
97
|
+
| Adapter | Old Method | New Method |
|
|
98
|
+
|---------|-----------|------------|
|
|
99
|
+
| `MemoryAdapter` | `updateRouteStep()` | `updateFlowStep()` |
|
|
100
|
+
| `PrismaAdapter` | `updateRouteStep()` | `updateFlowStep()` |
|
|
101
|
+
| `RedisAdapter` | `updateRouteStep()` | `updateFlowStep()` |
|
|
102
|
+
| `MongoAdapter` | `updateRouteStep()` | `updateFlowStep()` |
|
|
103
|
+
| `PostgreSQLAdapter` | `updateRouteStep()` | `updateFlowStep()` |
|
|
104
|
+
| `SQLiteAdapter` | `updateRouteStep()` | `updateFlowStep()` |
|
|
105
|
+
| `OpenSearchAdapter` | `updateRouteStep()` | `updateFlowStep()` |
|
|
106
|
+
| `PersistenceManager` | `updateRouteStep()` | `updateFlowStep()` |
|
|
107
|
+
| `SessionRepository` (interface) | `updateRouteStep()` | `updateFlowStep()` |
|
|
108
|
+
|
|
109
|
+
If you implement a custom adapter, rename your `updateRouteStep` method to `updateFlowStep`.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Per-Adapter Data Migration
|
|
114
|
+
|
|
115
|
+
The framework no longer reads or writes the legacy field/column names. You must migrate your persisted data before deploying the new version.
|
|
116
|
+
|
|
117
|
+
### PostgreSQL
|
|
118
|
+
|
|
119
|
+
```sql
|
|
120
|
+
-- Sessions table
|
|
121
|
+
ALTER TABLE sessions RENAME COLUMN current_route TO current_flow;
|
|
122
|
+
|
|
123
|
+
-- Messages table
|
|
124
|
+
ALTER TABLE messages RENAME COLUMN route TO flow;
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### SQLite
|
|
128
|
+
|
|
129
|
+
SQLite 3.25+ supports `ALTER TABLE ... RENAME COLUMN`:
|
|
130
|
+
|
|
131
|
+
```sql
|
|
132
|
+
-- Sessions table
|
|
133
|
+
ALTER TABLE sessions RENAME COLUMN current_route TO current_flow;
|
|
134
|
+
|
|
135
|
+
-- Messages table
|
|
136
|
+
ALTER TABLE messages RENAME COLUMN route TO flow;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
For SQLite versions older than 3.25, use the copy-and-rename pattern:
|
|
140
|
+
|
|
141
|
+
```sql
|
|
142
|
+
-- 1. Create new table with correct column names
|
|
143
|
+
CREATE TABLE sessions_new (
|
|
144
|
+
id TEXT PRIMARY KEY,
|
|
145
|
+
user_id TEXT,
|
|
146
|
+
agent_name TEXT,
|
|
147
|
+
status TEXT DEFAULT 'active',
|
|
148
|
+
current_flow TEXT,
|
|
149
|
+
current_step TEXT,
|
|
150
|
+
collected_data TEXT,
|
|
151
|
+
message_count INTEGER DEFAULT 0,
|
|
152
|
+
last_message_at TEXT,
|
|
153
|
+
completed_at TEXT,
|
|
154
|
+
created_at TEXT NOT NULL,
|
|
155
|
+
updated_at TEXT NOT NULL
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
-- 2. Copy data
|
|
159
|
+
INSERT INTO sessions_new SELECT
|
|
160
|
+
id, user_id, agent_name, status,
|
|
161
|
+
current_route AS current_flow,
|
|
162
|
+
current_step, collected_data, message_count,
|
|
163
|
+
last_message_at, completed_at, created_at, updated_at
|
|
164
|
+
FROM sessions;
|
|
165
|
+
|
|
166
|
+
-- 3. Drop old table and rename
|
|
167
|
+
DROP TABLE sessions;
|
|
168
|
+
ALTER TABLE sessions_new RENAME TO sessions;
|
|
169
|
+
|
|
170
|
+
-- Repeat for messages table (route → flow column)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Prisma
|
|
174
|
+
|
|
175
|
+
Update your Prisma schema model fields:
|
|
176
|
+
|
|
177
|
+
```diff
|
|
178
|
+
model Session {
|
|
179
|
+
id String @id
|
|
180
|
+
userId String?
|
|
181
|
+
agentName String?
|
|
182
|
+
status String @default("active")
|
|
183
|
+
- currentRoute String? @map("current_route")
|
|
184
|
+
+ currentFlow String? @map("current_flow")
|
|
185
|
+
currentStep String? @map("current_step")
|
|
186
|
+
collectedData Json? @map("collected_data")
|
|
187
|
+
// ...
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
model Message {
|
|
191
|
+
id String @id
|
|
192
|
+
sessionId String @map("session_id")
|
|
193
|
+
// ...
|
|
194
|
+
- route String?
|
|
195
|
+
+ flow String?
|
|
196
|
+
step String?
|
|
197
|
+
// ...
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Then generate and apply the migration:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
npx prisma migrate dev --name route-to-flow-rename
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
If you use a custom `fieldMappings` config in `PrismaAdapter`, update the key from `currentRoute` to `currentFlow`:
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
// Before
|
|
211
|
+
fieldMappings: { currentRoute: 'currentRoute', ... }
|
|
212
|
+
|
|
213
|
+
// After
|
|
214
|
+
fieldMappings: { currentFlow: 'currentFlow', ... }
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### MongoDB
|
|
218
|
+
|
|
219
|
+
```javascript
|
|
220
|
+
// Rename session fields
|
|
221
|
+
db.sessions.updateMany({}, {
|
|
222
|
+
$rename: {
|
|
223
|
+
"currentRoute": "currentFlow"
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
// Rename collected state fields (if stored at top level)
|
|
228
|
+
db.sessions.updateMany({}, {
|
|
229
|
+
$rename: {
|
|
230
|
+
"collectedData.routeHistory": "collectedData.flowHistory",
|
|
231
|
+
"collectedData.currentRouteTitle": "collectedData.currentFlowTitle"
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
// Rename message fields
|
|
236
|
+
db.messages.updateMany({}, {
|
|
237
|
+
$rename: {
|
|
238
|
+
"route": "flow"
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Redis
|
|
244
|
+
|
|
245
|
+
Redis stores sessions as serialized JSON. Use a Lua script to rewrite the payload in-place:
|
|
246
|
+
|
|
247
|
+
```lua
|
|
248
|
+
-- redis-migrate-route-to-flow.lua
|
|
249
|
+
-- Run with: redis-cli --eval redis-migrate-route-to-flow.lua
|
|
250
|
+
|
|
251
|
+
local cursor = "0"
|
|
252
|
+
repeat
|
|
253
|
+
local result = redis.call("SCAN", cursor, "MATCH", "session:*", "COUNT", 100)
|
|
254
|
+
cursor = result[1]
|
|
255
|
+
local keys = result[2]
|
|
256
|
+
for _, key in ipairs(keys) do
|
|
257
|
+
local val = redis.call("GET", key)
|
|
258
|
+
if val then
|
|
259
|
+
-- Replace field names in JSON payload
|
|
260
|
+
val = val:gsub('"currentRoute"', '"currentFlow"')
|
|
261
|
+
val = val:gsub('"routeHistory"', '"flowHistory"')
|
|
262
|
+
val = val:gsub('"currentRouteTitle"', '"currentFlowTitle"')
|
|
263
|
+
redis.call("SET", key, val)
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
until cursor == "0"
|
|
267
|
+
|
|
268
|
+
-- If using hash layout instead of JSON:
|
|
269
|
+
-- Rename hash fields per session key
|
|
270
|
+
local cursor2 = "0"
|
|
271
|
+
repeat
|
|
272
|
+
local result = redis.call("SCAN", cursor2, "MATCH", "session:*", "COUNT", 100)
|
|
273
|
+
cursor2 = result[1]
|
|
274
|
+
local keys = result[2]
|
|
275
|
+
for _, key in ipairs(keys) do
|
|
276
|
+
local typ = redis.call("TYPE", key)["ok"]
|
|
277
|
+
if typ == "hash" then
|
|
278
|
+
local oldVal = redis.call("HGET", key, "currentRoute")
|
|
279
|
+
if oldVal then
|
|
280
|
+
redis.call("HSET", key, "currentFlow", oldVal)
|
|
281
|
+
redis.call("HDEL", key, "currentRoute")
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
until cursor2 == "0"
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
For message keys, apply the same pattern replacing `"route"` with `"flow"` in the JSON payload or hash field.
|
|
289
|
+
|
|
290
|
+
### OpenSearch
|
|
291
|
+
|
|
292
|
+
Use the `_reindex` API with a painless script to rename fields:
|
|
293
|
+
|
|
294
|
+
```json
|
|
295
|
+
POST _reindex
|
|
296
|
+
{
|
|
297
|
+
"source": {
|
|
298
|
+
"index": "sessions"
|
|
299
|
+
},
|
|
300
|
+
"dest": {
|
|
301
|
+
"index": "sessions_v2"
|
|
302
|
+
},
|
|
303
|
+
"script": {
|
|
304
|
+
"source": """
|
|
305
|
+
// Rename currentRoute → currentFlow
|
|
306
|
+
if (ctx._source.containsKey('currentRoute')) {
|
|
307
|
+
ctx._source.currentFlow = ctx._source.remove('currentRoute');
|
|
308
|
+
}
|
|
309
|
+
// Rename routeHistory → flowHistory in collectedData
|
|
310
|
+
if (ctx._source.containsKey('collectedData') && ctx._source.collectedData.containsKey('routeHistory')) {
|
|
311
|
+
ctx._source.collectedData.flowHistory = ctx._source.collectedData.remove('routeHistory');
|
|
312
|
+
}
|
|
313
|
+
if (ctx._source.containsKey('collectedData') && ctx._source.collectedData.containsKey('currentRouteTitle')) {
|
|
314
|
+
ctx._source.collectedData.currentFlowTitle = ctx._source.collectedData.remove('currentRouteTitle');
|
|
315
|
+
}
|
|
316
|
+
""",
|
|
317
|
+
"lang": "painless"
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
Then swap the alias:
|
|
323
|
+
|
|
324
|
+
```json
|
|
325
|
+
POST _aliases
|
|
326
|
+
{
|
|
327
|
+
"actions": [
|
|
328
|
+
{ "remove": { "index": "sessions", "alias": "sessions_active" } },
|
|
329
|
+
{ "add": { "index": "sessions_v2", "alias": "sessions_active" } }
|
|
330
|
+
]
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
For the messages index, apply the same reindex pattern renaming the `route` field to `flow`:
|
|
335
|
+
|
|
336
|
+
```json
|
|
337
|
+
POST _reindex
|
|
338
|
+
{
|
|
339
|
+
"source": {
|
|
340
|
+
"index": "messages"
|
|
341
|
+
},
|
|
342
|
+
"dest": {
|
|
343
|
+
"index": "messages_v2"
|
|
344
|
+
},
|
|
345
|
+
"script": {
|
|
346
|
+
"source": """
|
|
347
|
+
if (ctx._source.containsKey('route')) {
|
|
348
|
+
ctx._source.flow = ctx._source.remove('route');
|
|
349
|
+
}
|
|
350
|
+
""",
|
|
351
|
+
"lang": "painless"
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## ID Prefix Migration
|
|
359
|
+
|
|
360
|
+
The `generateFlowId()` function now produces IDs with the prefix `flow_` instead of `route_`. Existing sessions stored under the legacy `route_*` prefix will not be recognized by the framework's flow-matching logic unless migrated.
|
|
361
|
+
|
|
362
|
+
**Run this migration during a maintenance window.** In-flight sessions will lose their step pointer if the rename is not atomic with the adapter restart.
|
|
363
|
+
|
|
364
|
+
### PostgreSQL / SQLite
|
|
365
|
+
|
|
366
|
+
```sql
|
|
367
|
+
UPDATE sessions
|
|
368
|
+
SET current_flow = REPLACE(current_flow, 'route_', 'flow_')
|
|
369
|
+
WHERE current_flow LIKE 'route\_%' ESCAPE '\';
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
If your `collected_data` JSON contains `flowHistory` entries with old IDs (stored as `routeId` before the field rename), update those as well:
|
|
373
|
+
|
|
374
|
+
```sql
|
|
375
|
+
-- PostgreSQL (JSONB)
|
|
376
|
+
UPDATE sessions
|
|
377
|
+
SET collected_data = REPLACE(collected_data::text, '"route_', '"flow_')::jsonb
|
|
378
|
+
WHERE collected_data::text LIKE '%"route_%';
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### MongoDB
|
|
382
|
+
|
|
383
|
+
```javascript
|
|
384
|
+
db.sessions.updateMany(
|
|
385
|
+
{ currentFlow: { $regex: "^route_" } },
|
|
386
|
+
[{
|
|
387
|
+
$set: {
|
|
388
|
+
currentFlow: {
|
|
389
|
+
$replaceOne: {
|
|
390
|
+
input: "$currentFlow",
|
|
391
|
+
find: "route_",
|
|
392
|
+
replacement: "flow_"
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}]
|
|
397
|
+
);
|
|
398
|
+
|
|
399
|
+
// Also update flowHistory entries
|
|
400
|
+
db.sessions.updateMany(
|
|
401
|
+
{ "collectedData.flowHistory.flowId": { $regex: "^route_" } },
|
|
402
|
+
[{
|
|
403
|
+
$set: {
|
|
404
|
+
"collectedData.flowHistory": {
|
|
405
|
+
$map: {
|
|
406
|
+
input: "$collectedData.flowHistory",
|
|
407
|
+
as: "entry",
|
|
408
|
+
in: {
|
|
409
|
+
$mergeObjects: [
|
|
410
|
+
"$$entry",
|
|
411
|
+
{
|
|
412
|
+
flowId: {
|
|
413
|
+
$replaceOne: {
|
|
414
|
+
input: "$$entry.flowId",
|
|
415
|
+
find: "route_",
|
|
416
|
+
replacement: "flow_"
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
]
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}]
|
|
426
|
+
);
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### Redis
|
|
430
|
+
|
|
431
|
+
Extend the Lua script above to also replace ID prefixes in the JSON payload:
|
|
432
|
+
|
|
433
|
+
```lua
|
|
434
|
+
-- Add to the existing migration script
|
|
435
|
+
val = val:gsub('"route_', '"flow_')
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### OpenSearch
|
|
439
|
+
|
|
440
|
+
Include the prefix replacement in the reindex painless script:
|
|
441
|
+
|
|
442
|
+
```json
|
|
443
|
+
POST _reindex
|
|
444
|
+
{
|
|
445
|
+
"source": { "index": "sessions_v2" },
|
|
446
|
+
"dest": { "index": "sessions_v3" },
|
|
447
|
+
"script": {
|
|
448
|
+
"source": """
|
|
449
|
+
if (ctx._source.containsKey('currentFlow') && ctx._source.currentFlow != null && ctx._source.currentFlow.startsWith('route_')) {
|
|
450
|
+
ctx._source.currentFlow = 'flow_' + ctx._source.currentFlow.substring(6);
|
|
451
|
+
}
|
|
452
|
+
""",
|
|
453
|
+
"lang": "painless"
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## Code-Side Migration Recipe
|
|
461
|
+
|
|
462
|
+
For downstream TypeScript consumers, here's a sed/codemod summary covering the most common public-API touchpoints:
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
# Symbol renames (imports and references)
|
|
466
|
+
sed -i '' 's/\bRoute\b/Flow/g; s/\bRouteOptions\b/FlowOptions/g; s/\bRouteRef\b/FlowRef/g' src/**/*.ts
|
|
467
|
+
sed -i '' 's/\bRouteTransitionConfig\b/FlowTransitionConfig/g' src/**/*.ts
|
|
468
|
+
sed -i '' 's/\bRouteCompletionHandler\b/FlowCompletionHandler/g' src/**/*.ts
|
|
469
|
+
sed -i '' 's/\bRouteLifecycleHooks\b/FlowLifecycleHooks/g' src/**/*.ts
|
|
470
|
+
sed -i '' 's/\bRouteConfigurationError\b/FlowConfigurationError/g' src/**/*.ts
|
|
471
|
+
sed -i '' 's/\bRoutingEngine\b/FlowRouter/g' src/**/*.ts
|
|
472
|
+
|
|
473
|
+
# Constants (END_ROUTE removed — delete all references)
|
|
474
|
+
# END_ROUTE/END_FLOW are no longer needed. Remove imports and usages.
|
|
475
|
+
# The last step in a flow is the implicit terminus.
|
|
476
|
+
sed -i '' '/END_ROUTE/d; /END_FLOW/d' src/**/*.ts
|
|
477
|
+
|
|
478
|
+
# Methods and fields
|
|
479
|
+
sed -i '' 's/\.createRoute(/\.createFlow(/g' src/**/*.ts
|
|
480
|
+
sed -i '' 's/\.getRoutes(/\.getFlows(/g' src/**/*.ts
|
|
481
|
+
sed -i '' 's/\.nextStepRoute(/\.nextStepFlow(/g' src/**/*.ts
|
|
482
|
+
sed -i '' 's/\.getRoutingEngine(/\.getFlowRouter(/g' src/**/*.ts
|
|
483
|
+
sed -i '' 's/\brouteSwitchMargin\b/flowSwitchMargin/g' src/**/*.ts
|
|
484
|
+
sed -i '' 's/\bgenerateRouteId\b/generateFlowId/g' src/**/*.ts
|
|
485
|
+
sed -i '' 's/\benterRoute\b/enterFlow/g' src/**/*.ts
|
|
486
|
+
|
|
487
|
+
# Session state fields
|
|
488
|
+
sed -i '' 's/\.currentRoute/\.currentFlow/g' src/**/*.ts
|
|
489
|
+
sed -i '' 's/\.routeHistory/\.flowHistory/g' src/**/*.ts
|
|
490
|
+
sed -i '' 's/\btargetRouteId\b/targetFlowId/g' src/**/*.ts
|
|
491
|
+
|
|
492
|
+
# String literals
|
|
493
|
+
sed -i '' "s/'end_route'/'last_step'/g" src/**/*.ts
|
|
494
|
+
sed -i '' "s/'route_complete'/'completed'/g" src/**/*.ts
|
|
495
|
+
|
|
496
|
+
# Configuration
|
|
497
|
+
sed -i '' 's/routes:/flows:/g' src/**/*.ts # Be careful — review matches manually
|
|
498
|
+
|
|
499
|
+
# Import paths (if importing from @falai/agent internals)
|
|
500
|
+
sed -i '' 's/core\/Route/core\/Flow/g' src/**/*.ts
|
|
501
|
+
sed -i '' 's/core\/RoutingEngine/core\/FlowRouter/g' src/**/*.ts
|
|
502
|
+
sed -i '' 's/types\/route/types\/flow/g' src/**/*.ts
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Important:** These sed commands are aggressive. Run them, then use `tsc --noEmit` to catch any false positives (e.g., `routes` in an HTTP router context). Review the diff before committing.
|
|
506
|
+
|
|
507
|
+
For a safer approach, use a TypeScript-aware codemod tool like [jscodeshift](https://github.com/facebook/jscodeshift) or rely on your IDE's "Find and Replace with Regex" with word-boundary matching.
|
|
508
|
+
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
## Verification
|
|
512
|
+
|
|
513
|
+
After migrating your code, run this ripgrep command to confirm no legacy references remain:
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
rg -n '\b(Route|RouteOptions|RouteRef|RouteConfigurationError|RoutingEngine|END_ROUTE|currentRoute|routeHistory|createRoute|generateRouteId|enterRoute|nextStepRoute|getRoutes|routeSwitchMargin)\b' \
|
|
517
|
+
--glob '**/*.ts' \
|
|
518
|
+
--glob '**/*.tsx' \
|
|
519
|
+
--glob '!node_modules/**' \
|
|
520
|
+
--glob '!dist/**'
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
Expected output: **zero matches**.
|
|
524
|
+
|
|
525
|
+
If you have historical migration notes or changelog entries that reference the old names, exclude them:
|
|
526
|
+
|
|
527
|
+
```bash
|
|
528
|
+
rg -n '\b(Route|RouteOptions|RouteRef|RouteConfigurationError|RoutingEngine|END_ROUTE|currentRoute|routeHistory|createRoute|generateRouteId|enterRoute|nextStepRoute|getRoutes|routeSwitchMargin)\b' \
|
|
529
|
+
--glob '**/*.ts' \
|
|
530
|
+
--glob '**/*.tsx' \
|
|
531
|
+
--glob '!node_modules/**' \
|
|
532
|
+
--glob '!dist/**' \
|
|
533
|
+
--glob '!**/CHANGELOG*' \
|
|
534
|
+
--glob '!**/migration/**'
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
Then run your type checker to confirm everything compiles:
|
|
538
|
+
|
|
539
|
+
```bash
|
|
540
|
+
npx tsc --noEmit
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
---
|
|
544
|
+
|
|
545
|
+
## FAQ
|
|
546
|
+
|
|
547
|
+
**Q: Is there a compatibility shim or deprecation period?**
|
|
548
|
+
No. This is a clean break. The old names are removed entirely.
|
|
549
|
+
|
|
550
|
+
**Q: Do I need to migrate my database before deploying?**
|
|
551
|
+
Yes. The framework no longer reads or writes the legacy column/field names. Deploy the data migration first, then deploy the new code.
|
|
552
|
+
|
|
553
|
+
**Q: What about the `route()` method I see on `FlowRouter`?**
|
|
554
|
+
That's the verb form — it means "to route a message to a flow." It is intentionally preserved.
|
|
555
|
+
|
|
556
|
+
**Q: My tests assert on `'end_route'` or `'route_complete'` — what do I do?**
|
|
557
|
+
`'end_route'` has been removed entirely (implicit terminus replaces it). Update to `'last_step'`. `'route_complete'` becomes `'last_step'` (no successor) or `'completed'` (explicit directive). TypeScript will flag these as type errors if you miss any.
|
|
558
|
+
|
|
559
|
+
**Q: I have custom IDs that don't use the `route_` prefix — do I need to migrate them?**
|
|
560
|
+
Only IDs generated by `generateRouteId()` (now `generateFlowId()`) use the prefix. If you set custom IDs on your flows, they are unaffected by the prefix change.
|