@falai/agent 3.4.5 → 4.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -34
- package/dist/cjs/core/Agent.d.ts +22 -378
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +104 -1178
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
- package/dist/cjs/core/CompactionEngine.js +5 -3
- package/dist/cjs/core/CompactionEngine.js.map +1 -1
- package/dist/cjs/core/FlowSpec.d.ts +136 -0
- package/dist/cjs/core/FlowSpec.d.ts.map +1 -0
- package/dist/cjs/core/FlowSpec.js +522 -0
- package/dist/cjs/core/FlowSpec.js.map +1 -0
- package/dist/cjs/core/Migrate.d.ts +38 -0
- package/dist/cjs/core/Migrate.d.ts.map +1 -0
- package/dist/cjs/core/Migrate.js +270 -0
- package/dist/cjs/core/Migrate.js.map +1 -0
- package/dist/cjs/core/Prompt.d.ts +54 -0
- package/dist/cjs/core/Prompt.d.ts.map +1 -0
- package/dist/cjs/core/Prompt.js +143 -0
- package/dist/cjs/core/Prompt.js.map +1 -0
- package/dist/cjs/core/Runner.d.ts +160 -0
- package/dist/cjs/core/Runner.d.ts.map +1 -0
- package/dist/cjs/core/Runner.js +1131 -0
- package/dist/cjs/core/Runner.js.map +1 -0
- package/dist/cjs/core/Speak.d.ts +37 -0
- package/dist/cjs/core/Speak.d.ts.map +1 -0
- package/dist/cjs/core/Speak.js +364 -0
- package/dist/cjs/core/Speak.js.map +1 -0
- package/dist/cjs/core/Understand.d.ts +28 -0
- package/dist/cjs/core/Understand.d.ts.map +1 -0
- package/dist/cjs/core/Understand.js +353 -0
- package/dist/cjs/core/Understand.js.map +1 -0
- package/dist/cjs/core/contracts.d.ts +122 -0
- package/dist/cjs/core/contracts.d.ts.map +1 -0
- package/dist/cjs/core/contracts.js +11 -0
- package/dist/cjs/core/contracts.js.map +1 -0
- package/dist/cjs/core/falai.d.ts +57 -0
- package/dist/cjs/core/falai.d.ts.map +1 -0
- package/dist/cjs/core/falai.js +43 -0
- package/dist/cjs/core/falai.js.map +1 -0
- package/dist/cjs/core/predicate.d.ts +9 -0
- package/dist/cjs/core/predicate.d.ts.map +1 -0
- package/dist/cjs/core/predicate.js +58 -0
- package/dist/cjs/core/predicate.js.map +1 -0
- package/dist/cjs/index.d.ts +26 -31
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +46 -68
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/persistence/MemoryStore.d.ts +15 -0
- package/dist/cjs/persistence/MemoryStore.d.ts.map +1 -0
- package/dist/cjs/persistence/MemoryStore.js +39 -0
- package/dist/cjs/persistence/MemoryStore.js.map +1 -0
- package/dist/cjs/persistence/MongoStore.d.ts +42 -0
- package/dist/cjs/persistence/MongoStore.d.ts.map +1 -0
- package/dist/cjs/persistence/MongoStore.js +60 -0
- package/dist/cjs/persistence/MongoStore.js.map +1 -0
- package/dist/cjs/persistence/OpenSearchStore.d.ts +86 -0
- package/dist/cjs/persistence/OpenSearchStore.d.ts.map +1 -0
- package/dist/cjs/persistence/OpenSearchStore.js +120 -0
- package/dist/cjs/persistence/OpenSearchStore.js.map +1 -0
- package/dist/cjs/persistence/PostgresStore.d.ts +41 -0
- package/dist/cjs/persistence/PostgresStore.d.ts.map +1 -0
- package/dist/cjs/persistence/PostgresStore.js +58 -0
- package/dist/cjs/persistence/PostgresStore.js.map +1 -0
- package/dist/cjs/persistence/PrismaStore.d.ts +65 -0
- package/dist/cjs/persistence/PrismaStore.d.ts.map +1 -0
- package/dist/cjs/persistence/PrismaStore.js +95 -0
- package/dist/cjs/persistence/PrismaStore.js.map +1 -0
- package/dist/cjs/persistence/RedisStore.d.ts +34 -0
- package/dist/cjs/persistence/RedisStore.d.ts.map +1 -0
- package/dist/cjs/persistence/RedisStore.js +61 -0
- package/dist/cjs/persistence/RedisStore.js.map +1 -0
- package/dist/cjs/persistence/SQLiteStore.d.ts +45 -0
- package/dist/cjs/persistence/SQLiteStore.d.ts.map +1 -0
- package/dist/cjs/persistence/SQLiteStore.js +74 -0
- package/dist/cjs/persistence/SQLiteStore.js.map +1 -0
- package/dist/cjs/persistence/sessionRow.d.ts +14 -0
- package/dist/cjs/persistence/sessionRow.d.ts.map +1 -0
- package/dist/cjs/persistence/sessionRow.js +50 -0
- package/dist/cjs/persistence/sessionRow.js.map +1 -0
- package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.js +8 -3
- package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +4 -3
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +4 -3
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +4 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.js +2 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.js +2 -4
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts +1 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.js +33 -10
- package/dist/cjs/providers/ProviderAdapter.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +153 -383
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +1 -1
- package/dist/cjs/types/ai.d.ts +32 -1
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/compaction.d.ts +3 -1
- package/dist/cjs/types/compaction.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +9 -12
- package/dist/cjs/types/errors.d.ts.map +1 -1
- package/dist/cjs/types/errors.js +14 -17
- package/dist/cjs/types/errors.js.map +1 -1
- package/dist/cjs/types/flow.d.ts +265 -513
- package/dist/cjs/types/flow.d.ts.map +1 -1
- package/dist/cjs/types/flow.js +7 -1
- package/dist/cjs/types/flow.js.map +1 -1
- package/dist/cjs/types/history.d.ts +7 -18
- package/dist/cjs/types/history.d.ts.map +1 -1
- package/dist/cjs/types/history.js.map +1 -1
- package/dist/cjs/types/index.d.ts +9 -15
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +4 -14
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/session.d.ts +94 -64
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/session.js +5 -1
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/cjs/types/tool.d.ts +37 -207
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +5 -14
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/clock.d.ts +28 -0
- package/dist/cjs/utils/clock.d.ts.map +1 -0
- package/dist/cjs/utils/clock.js +64 -0
- package/dist/cjs/utils/clock.js.map +1 -0
- package/dist/cjs/utils/duration.d.ts +11 -0
- package/dist/cjs/utils/duration.d.ts.map +1 -0
- package/dist/cjs/utils/duration.js +31 -0
- package/dist/cjs/utils/duration.js.map +1 -0
- package/dist/cjs/utils/history.d.ts +4 -1
- package/dist/cjs/utils/history.d.ts.map +1 -1
- package/dist/cjs/utils/history.js +2 -2
- package/dist/cjs/utils/history.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +4 -10
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +14 -61
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/json.d.ts +2 -0
- package/dist/cjs/utils/json.d.ts.map +1 -1
- package/dist/cjs/utils/json.js +5 -0
- package/dist/cjs/utils/json.js.map +1 -1
- package/dist/cjs/utils/outcomes.d.ts +48 -0
- package/dist/cjs/utils/outcomes.d.ts.map +1 -0
- package/dist/cjs/utils/outcomes.js +51 -0
- package/dist/cjs/utils/outcomes.js.map +1 -0
- package/dist/cjs/utils/schema.d.ts +50 -0
- package/dist/cjs/utils/schema.d.ts.map +1 -0
- package/dist/cjs/utils/schema.js +138 -0
- package/dist/cjs/utils/schema.js.map +1 -0
- package/dist/cjs/utils/streamingMessage.d.ts +3 -2
- package/dist/cjs/utils/streamingMessage.d.ts.map +1 -1
- package/dist/cjs/utils/streamingMessage.js +38 -4
- package/dist/cjs/utils/streamingMessage.js.map +1 -1
- package/dist/cjs/utils/template.d.ts +13 -149
- package/dist/cjs/utils/template.d.ts.map +1 -1
- package/dist/cjs/utils/template.js +31 -363
- package/dist/cjs/utils/template.js.map +1 -1
- package/dist/cjs/utils/usage.d.ts +19 -0
- package/dist/cjs/utils/usage.d.ts.map +1 -0
- package/dist/cjs/utils/usage.js +35 -0
- package/dist/cjs/utils/usage.js.map +1 -0
- package/dist/core/Agent.d.ts +22 -378
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +107 -1181
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/CompactionEngine.d.ts.map +1 -1
- package/dist/core/CompactionEngine.js +5 -3
- package/dist/core/CompactionEngine.js.map +1 -1
- package/dist/core/FlowSpec.d.ts +136 -0
- package/dist/core/FlowSpec.d.ts.map +1 -0
- package/dist/core/FlowSpec.js +516 -0
- package/dist/core/FlowSpec.js.map +1 -0
- package/dist/core/Migrate.d.ts +38 -0
- package/dist/core/Migrate.d.ts.map +1 -0
- package/dist/core/Migrate.js +264 -0
- package/dist/core/Migrate.js.map +1 -0
- package/dist/core/Prompt.d.ts +54 -0
- package/dist/core/Prompt.d.ts.map +1 -0
- package/dist/core/Prompt.js +133 -0
- package/dist/core/Prompt.js.map +1 -0
- package/dist/core/Runner.d.ts +160 -0
- package/dist/core/Runner.d.ts.map +1 -0
- package/dist/core/Runner.js +1127 -0
- package/dist/core/Runner.js.map +1 -0
- package/dist/core/Speak.d.ts +37 -0
- package/dist/core/Speak.d.ts.map +1 -0
- package/dist/core/Speak.js +360 -0
- package/dist/core/Speak.js.map +1 -0
- package/dist/core/Understand.d.ts +28 -0
- package/dist/core/Understand.d.ts.map +1 -0
- package/dist/core/Understand.js +349 -0
- package/dist/core/Understand.js.map +1 -0
- package/dist/core/contracts.d.ts +122 -0
- package/dist/core/contracts.d.ts.map +1 -0
- package/dist/core/contracts.js +10 -0
- package/dist/core/contracts.js.map +1 -0
- package/dist/core/falai.d.ts +57 -0
- package/dist/core/falai.d.ts.map +1 -0
- package/dist/core/falai.js +40 -0
- package/dist/core/falai.js.map +1 -0
- package/dist/core/predicate.d.ts +9 -0
- package/dist/core/predicate.d.ts.map +1 -0
- package/dist/core/predicate.js +54 -0
- package/dist/core/predicate.js.map +1 -0
- package/dist/index.d.ts +26 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -24
- package/dist/index.js.map +1 -1
- package/dist/persistence/MemoryStore.d.ts +15 -0
- package/dist/persistence/MemoryStore.d.ts.map +1 -0
- package/dist/persistence/MemoryStore.js +35 -0
- package/dist/persistence/MemoryStore.js.map +1 -0
- package/dist/persistence/MongoStore.d.ts +42 -0
- package/dist/persistence/MongoStore.d.ts.map +1 -0
- package/dist/persistence/MongoStore.js +56 -0
- package/dist/persistence/MongoStore.js.map +1 -0
- package/dist/persistence/OpenSearchStore.d.ts +86 -0
- package/dist/persistence/OpenSearchStore.d.ts.map +1 -0
- package/dist/persistence/OpenSearchStore.js +116 -0
- package/dist/persistence/OpenSearchStore.js.map +1 -0
- package/dist/persistence/PostgresStore.d.ts +41 -0
- package/dist/persistence/PostgresStore.d.ts.map +1 -0
- package/dist/persistence/PostgresStore.js +54 -0
- package/dist/persistence/PostgresStore.js.map +1 -0
- package/dist/persistence/PrismaStore.d.ts +65 -0
- package/dist/persistence/PrismaStore.d.ts.map +1 -0
- package/dist/persistence/PrismaStore.js +91 -0
- package/dist/persistence/PrismaStore.js.map +1 -0
- package/dist/persistence/RedisStore.d.ts +34 -0
- package/dist/persistence/RedisStore.d.ts.map +1 -0
- package/dist/persistence/RedisStore.js +57 -0
- package/dist/persistence/RedisStore.js.map +1 -0
- package/dist/persistence/SQLiteStore.d.ts +45 -0
- package/dist/persistence/SQLiteStore.d.ts.map +1 -0
- package/dist/persistence/SQLiteStore.js +70 -0
- package/dist/persistence/SQLiteStore.js.map +1 -0
- package/dist/persistence/sessionRow.d.ts +14 -0
- package/dist/persistence/sessionRow.d.ts.map +1 -0
- package/dist/persistence/sessionRow.js +45 -0
- package/dist/persistence/sessionRow.js.map +1 -0
- package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/DeepSeekProvider.js +8 -3
- package/dist/providers/DeepSeekProvider.js.map +1 -1
- package/dist/providers/GeminiProvider.d.ts +4 -3
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +4 -3
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.d.ts +4 -0
- package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.js +2 -0
- package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +2 -4
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/providers/ProviderAdapter.d.ts +1 -1
- package/dist/providers/ProviderAdapter.d.ts.map +1 -1
- package/dist/providers/ProviderAdapter.js +34 -11
- package/dist/providers/ProviderAdapter.js.map +1 -1
- package/dist/types/agent.d.ts +153 -383
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +1 -1
- package/dist/types/ai.d.ts +32 -1
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/compaction.d.ts +3 -1
- package/dist/types/compaction.d.ts.map +1 -1
- package/dist/types/errors.d.ts +9 -12
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +12 -15
- package/dist/types/errors.js.map +1 -1
- package/dist/types/flow.d.ts +265 -513
- package/dist/types/flow.d.ts.map +1 -1
- package/dist/types/flow.js +7 -1
- package/dist/types/flow.js.map +1 -1
- package/dist/types/history.d.ts +7 -18
- package/dist/types/history.d.ts.map +1 -1
- package/dist/types/history.js.map +1 -1
- package/dist/types/index.d.ts +9 -15
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -7
- package/dist/types/index.js.map +1 -1
- package/dist/types/session.d.ts +94 -64
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +5 -1
- package/dist/types/session.js.map +1 -1
- package/dist/types/tool.d.ts +37 -207
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +6 -13
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/clock.d.ts +28 -0
- package/dist/utils/clock.d.ts.map +1 -0
- package/dist/utils/clock.js +59 -0
- package/dist/utils/clock.js.map +1 -0
- package/dist/utils/duration.d.ts +11 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +26 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/history.d.ts +4 -1
- package/dist/utils/history.d.ts.map +1 -1
- package/dist/utils/history.js +2 -2
- package/dist/utils/history.js.map +1 -1
- package/dist/utils/index.d.ts +4 -10
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -21
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/json.d.ts +2 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +4 -0
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/outcomes.d.ts +48 -0
- package/dist/utils/outcomes.d.ts.map +1 -0
- package/dist/utils/outcomes.js +48 -0
- package/dist/utils/outcomes.js.map +1 -0
- package/dist/utils/schema.d.ts +50 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +129 -0
- package/dist/utils/schema.js.map +1 -0
- package/dist/utils/streamingMessage.d.ts +3 -2
- package/dist/utils/streamingMessage.d.ts.map +1 -1
- package/dist/utils/streamingMessage.js +38 -4
- package/dist/utils/streamingMessage.js.map +1 -1
- package/dist/utils/template.d.ts +13 -149
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +28 -355
- package/dist/utils/template.js.map +1 -1
- package/dist/utils/usage.d.ts +19 -0
- package/dist/utils/usage.d.ts.map +1 -0
- package/dist/utils/usage.js +31 -0
- package/dist/utils/usage.js.map +1 -0
- package/docs/README.md +37 -19
- package/docs/concepts/architecture.md +117 -239
- package/docs/concepts/collection.md +170 -0
- package/docs/concepts/pipeline.md +132 -378
- package/docs/concepts/runs-and-waits.md +192 -0
- package/docs/guides/actions-and-events.md +276 -0
- package/docs/guides/branching.md +119 -208
- package/docs/guides/compaction.md +63 -158
- package/docs/guides/conditions.md +164 -128
- package/docs/guides/error-handling.md +168 -164
- package/docs/guides/flow-control.md +210 -349
- package/docs/guides/flows-from-json.md +224 -0
- package/docs/guides/instructions.md +125 -161
- package/docs/guides/persistence.md +182 -206
- package/docs/guides/streaming.md +50 -114
- package/docs/guides/testing.md +284 -0
- package/docs/guides/triggers.md +401 -0
- package/docs/migration/README.md +8 -15
- package/docs/migration/v1-to-v2.md +1 -1
- package/docs/migration/v2-3-to-v2-4.md +2 -2
- package/docs/migration/v2-6-to-v2-7.md +4 -4
- package/docs/migration/v3-to-v4.md +452 -0
- package/docs/reference/actions-events-conditions.md +396 -0
- package/docs/reference/agent.md +244 -0
- package/docs/reference/branches.md +75 -203
- package/docs/reference/errors.md +188 -144
- package/docs/reference/fields.md +125 -0
- package/docs/reference/flow-spec.md +248 -0
- package/docs/reference/flow.md +104 -192
- package/docs/reference/instruction.md +83 -137
- package/docs/reference/outcomes.md +273 -0
- package/docs/reference/providers.md +525 -302
- package/docs/reference/session.md +210 -0
- package/docs/reference/step.md +194 -312
- package/docs/reference/stores.md +496 -0
- package/docs/reference/tool.md +162 -231
- package/docs/reference/trigger.md +180 -0
- package/docs/rfc/v4-one-flow.md +477 -0
- package/docs/start/01-install.md +59 -44
- package/docs/start/02-first-agent.md +97 -147
- package/docs/start/03-collect-data.md +78 -183
- package/docs/start/04-add-tools.md +159 -227
- package/docs/start/05-go-to-production.md +167 -164
- package/examples/01-quickstart.ts +26 -16
- package/examples/02-fields.ts +75 -0
- package/examples/03-tools.ts +79 -119
- package/examples/04-instructions.ts +60 -87
- package/examples/05-branches.ts +78 -0
- package/examples/06-triggers-and-waits.ts +148 -0
- package/examples/07-streaming.ts +34 -60
- package/examples/08-store-and-migration.ts +97 -0
- package/examples/09-flows-from-json.ts +107 -0
- package/package.json +9 -6
- package/src/core/Agent.ts +116 -1512
- package/src/core/CompactionEngine.ts +7 -4
- package/src/core/FlowSpec.ts +712 -0
- package/src/core/Migrate.ts +256 -0
- package/src/core/Prompt.ts +156 -0
- package/src/core/Runner.ts +1181 -0
- package/src/core/Speak.ts +451 -0
- package/src/core/Understand.ts +422 -0
- package/src/core/contracts.ts +111 -0
- package/src/core/falai.ts +86 -0
- package/src/core/predicate.ts +56 -0
- package/src/index.ts +119 -147
- package/src/persistence/MemoryStore.ts +37 -0
- package/src/persistence/MongoStore.ts +89 -0
- package/src/persistence/OpenSearchStore.ts +153 -0
- package/src/persistence/PostgresStore.ts +89 -0
- package/src/persistence/PrismaStore.ts +127 -0
- package/src/persistence/RedisStore.ts +90 -0
- package/src/persistence/SQLiteStore.ts +103 -0
- package/src/persistence/sessionRow.ts +45 -0
- package/src/providers/DeepSeekProvider.ts +8 -3
- package/src/providers/GeminiProvider.ts +4 -3
- package/src/providers/OpenAICompatibleProvider.ts +6 -0
- package/src/providers/OpenRouterProvider.ts +2 -4
- package/src/providers/ProviderAdapter.ts +36 -8
- package/src/types/agent.ts +124 -397
- package/src/types/ai.ts +33 -1
- package/src/types/compaction.ts +3 -1
- package/src/types/errors.ts +13 -16
- package/src/types/flow.ts +249 -550
- package/src/types/history.ts +7 -20
- package/src/types/index.ts +87 -139
- package/src/types/session.ts +135 -70
- package/src/types/tool.ts +42 -267
- package/src/utils/clock.ts +70 -0
- package/src/utils/duration.ts +33 -0
- package/src/utils/history.ts +3 -2
- package/src/utils/index.ts +8 -66
- package/src/utils/json.ts +5 -0
- package/src/utils/outcomes.ts +56 -0
- package/src/utils/schema.ts +145 -0
- package/src/utils/streamingMessage.ts +34 -4
- package/src/utils/template.ts +32 -423
- package/src/utils/usage.ts +37 -0
- package/dist/adapters/MemoryAdapter.d.ts +0 -47
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js +0 -204
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts +0 -97
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js +0 -196
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts +0 -169
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js +0 -471
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +0 -85
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js +0 -308
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts +0 -115
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js +0 -406
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts +0 -72
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js +0 -286
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts +0 -86
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js +0 -337
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -17
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -11
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/sessionRow.d.ts +0 -22
- package/dist/adapters/sessionRow.d.ts.map +0 -1
- package/dist/adapters/sessionRow.js +0 -48
- package/dist/adapters/sessionRow.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js +0 -208
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js +0 -200
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js +0 -410
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js +0 -290
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.d.ts +0 -17
- package/dist/cjs/adapters/index.d.ts.map +0 -1
- package/dist/cjs/adapters/index.js +0 -21
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/sessionRow.d.ts +0 -22
- package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
- package/dist/cjs/adapters/sessionRow.js +0 -52
- package/dist/cjs/adapters/sessionRow.js.map +0 -1
- package/dist/cjs/constants/index.d.ts +0 -1
- package/dist/cjs/constants/index.d.ts.map +0 -1
- package/dist/cjs/constants/index.js +0 -4
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +0 -97
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +0 -1
- package/dist/cjs/core/AutoChainExecutor.js +0 -288
- package/dist/cjs/core/AutoChainExecutor.js.map +0 -1
- package/dist/cjs/core/BranchEvaluator.d.ts +0 -55
- package/dist/cjs/core/BranchEvaluator.d.ts.map +0 -1
- package/dist/cjs/core/BranchEvaluator.js +0 -125
- package/dist/cjs/core/BranchEvaluator.js.map +0 -1
- package/dist/cjs/core/DirectiveChainTracker.d.ts +0 -49
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +0 -1
- package/dist/cjs/core/DirectiveChainTracker.js +0 -121
- package/dist/cjs/core/DirectiveChainTracker.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -26
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -144
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/Flow.d.ts +0 -183
- package/dist/cjs/core/Flow.d.ts.map +0 -1
- package/dist/cjs/core/Flow.js +0 -551
- package/dist/cjs/core/Flow.js.map +0 -1
- package/dist/cjs/core/FlowRouter.d.ts +0 -183
- package/dist/cjs/core/FlowRouter.d.ts.map +0 -1
- package/dist/cjs/core/FlowRouter.js +0 -1047
- package/dist/cjs/core/FlowRouter.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts +0 -114
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js +0 -336
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -47
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -397
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +0 -48
- package/dist/cjs/core/PromptSectionCache.d.ts.map +0 -1
- package/dist/cjs/core/PromptSectionCache.js +0 -108
- package/dist/cjs/core/PromptSectionCache.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -43
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -235
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/ResponseGenerationError.d.ts +0 -30
- package/dist/cjs/core/ResponseGenerationError.d.ts.map +0 -1
- package/dist/cjs/core/ResponseGenerationError.js +0 -35
- package/dist/cjs/core/ResponseGenerationError.js.map +0 -1
- package/dist/cjs/core/ResponseModal.d.ts +0 -305
- package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/core/ResponseModal.js +0 -1414
- package/dist/cjs/core/ResponseModal.js.map +0 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +0 -220
- package/dist/cjs/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/core/ResponsePipeline.js +0 -1040
- package/dist/cjs/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/core/SessionFinalizer.d.ts +0 -34
- package/dist/cjs/core/SessionFinalizer.d.ts.map +0 -1
- package/dist/cjs/core/SessionFinalizer.js +0 -88
- package/dist/cjs/core/SessionFinalizer.js.map +0 -1
- package/dist/cjs/core/SessionManager.d.ts +0 -112
- package/dist/cjs/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/core/SessionManager.js +0 -308
- package/dist/cjs/core/SessionManager.js.map +0 -1
- package/dist/cjs/core/SignalCoordinator.d.ts +0 -103
- package/dist/cjs/core/SignalCoordinator.d.ts.map +0 -1
- package/dist/cjs/core/SignalCoordinator.js +0 -207
- package/dist/cjs/core/SignalCoordinator.js.map +0 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +0 -86
- package/dist/cjs/core/SignalEvaluator.d.ts.map +0 -1
- package/dist/cjs/core/SignalEvaluator.js +0 -319
- package/dist/cjs/core/SignalEvaluator.js.map +0 -1
- package/dist/cjs/core/SignalProcessor.d.ts +0 -152
- package/dist/cjs/core/SignalProcessor.d.ts.map +0 -1
- package/dist/cjs/core/SignalProcessor.js +0 -505
- package/dist/cjs/core/SignalProcessor.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -184
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -599
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/StepLifecycle.d.ts +0 -43
- package/dist/cjs/core/StepLifecycle.d.ts.map +0 -1
- package/dist/cjs/core/StepLifecycle.js +0 -180
- package/dist/cjs/core/StepLifecycle.js.map +0 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +0 -142
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/StreamingToolExecutor.js +0 -490
- package/dist/cjs/core/StreamingToolExecutor.js.map +0 -1
- package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
- package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolLoopExecutor.js +0 -568
- package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
- package/dist/cjs/core/ToolManager.d.ts +0 -250
- package/dist/cjs/core/ToolManager.d.ts.map +0 -1
- package/dist/cjs/core/ToolManager.js +0 -1104
- package/dist/cjs/core/ToolManager.js.map +0 -1
- package/dist/cjs/core/createAgent.d.ts +0 -35
- package/dist/cjs/core/createAgent.d.ts.map +0 -1
- package/dist/cjs/core/createAgent.js +0 -39
- package/dist/cjs/core/createAgent.js.map +0 -1
- package/dist/cjs/core/flow-namespace.d.ts +0 -64
- package/dist/cjs/core/flow-namespace.d.ts.map +0 -1
- package/dist/cjs/core/flow-namespace.js +0 -182
- package/dist/cjs/core/flow-namespace.js.map +0 -1
- package/dist/cjs/core/toolGates.d.ts +0 -24
- package/dist/cjs/core/toolGates.d.ts.map +0 -1
- package/dist/cjs/core/toolGates.js +0 -52
- package/dist/cjs/core/toolGates.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts +0 -254
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js +0 -7
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/prompt-cache.d.ts +0 -15
- package/dist/cjs/types/prompt-cache.d.ts.map +0 -1
- package/dist/cjs/types/prompt-cache.js +0 -6
- package/dist/cjs/types/prompt-cache.js.map +0 -1
- package/dist/cjs/types/signals.d.ts +0 -263
- package/dist/cjs/types/signals.d.ts.map +0 -1
- package/dist/cjs/types/signals.js +0 -11
- package/dist/cjs/types/signals.js.map +0 -1
- package/dist/cjs/types/template.d.ts +0 -84
- package/dist/cjs/types/template.d.ts.map +0 -1
- package/dist/cjs/types/template.js +0 -3
- package/dist/cjs/types/template.js.map +0 -1
- package/dist/cjs/utils/condition.d.ts +0 -63
- package/dist/cjs/utils/condition.d.ts.map +0 -1
- package/dist/cjs/utils/condition.js +0 -239
- package/dist/cjs/utils/condition.js.map +0 -1
- package/dist/cjs/utils/event.d.ts +0 -6
- package/dist/cjs/utils/event.d.ts.map +0 -1
- package/dist/cjs/utils/event.js +0 -20
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.d.ts +0 -33
- package/dist/cjs/utils/id.d.ts.map +0 -1
- package/dist/cjs/utils/id.js +0 -84
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/serialize.d.ts +0 -36
- package/dist/cjs/utils/serialize.d.ts.map +0 -1
- package/dist/cjs/utils/serialize.js +0 -77
- package/dist/cjs/utils/serialize.js.map +0 -1
- package/dist/cjs/utils/session.d.ts +0 -124
- package/dist/cjs/utils/session.d.ts.map +0 -1
- package/dist/cjs/utils/session.js +0 -396
- package/dist/cjs/utils/session.js.map +0 -1
- package/dist/constants/index.d.ts +0 -2
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js +0 -4
- package/dist/constants/index.js.map +0 -1
- package/dist/core/AutoChainExecutor.d.ts +0 -97
- package/dist/core/AutoChainExecutor.d.ts.map +0 -1
- package/dist/core/AutoChainExecutor.js +0 -284
- package/dist/core/AutoChainExecutor.js.map +0 -1
- package/dist/core/BranchEvaluator.d.ts +0 -55
- package/dist/core/BranchEvaluator.d.ts.map +0 -1
- package/dist/core/BranchEvaluator.js +0 -121
- package/dist/core/BranchEvaluator.js.map +0 -1
- package/dist/core/DirectiveChainTracker.d.ts +0 -49
- package/dist/core/DirectiveChainTracker.d.ts.map +0 -1
- package/dist/core/DirectiveChainTracker.js +0 -117
- package/dist/core/DirectiveChainTracker.js.map +0 -1
- package/dist/core/Events.d.ts +0 -26
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -137
- package/dist/core/Events.js.map +0 -1
- package/dist/core/Flow.d.ts +0 -183
- package/dist/core/Flow.d.ts.map +0 -1
- package/dist/core/Flow.js +0 -547
- package/dist/core/Flow.js.map +0 -1
- package/dist/core/FlowRouter.d.ts +0 -183
- package/dist/core/FlowRouter.d.ts.map +0 -1
- package/dist/core/FlowRouter.js +0 -1043
- package/dist/core/FlowRouter.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts +0 -114
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js +0 -332
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -47
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -393
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/PromptSectionCache.d.ts +0 -48
- package/dist/core/PromptSectionCache.d.ts.map +0 -1
- package/dist/core/PromptSectionCache.js +0 -104
- package/dist/core/PromptSectionCache.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -43
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -231
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/ResponseGenerationError.d.ts +0 -30
- package/dist/core/ResponseGenerationError.d.ts.map +0 -1
- package/dist/core/ResponseGenerationError.js +0 -31
- package/dist/core/ResponseGenerationError.js.map +0 -1
- package/dist/core/ResponseModal.d.ts +0 -305
- package/dist/core/ResponseModal.d.ts.map +0 -1
- package/dist/core/ResponseModal.js +0 -1410
- package/dist/core/ResponseModal.js.map +0 -1
- package/dist/core/ResponsePipeline.d.ts +0 -220
- package/dist/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/core/ResponsePipeline.js +0 -1035
- package/dist/core/ResponsePipeline.js.map +0 -1
- package/dist/core/SessionFinalizer.d.ts +0 -34
- package/dist/core/SessionFinalizer.d.ts.map +0 -1
- package/dist/core/SessionFinalizer.js +0 -84
- package/dist/core/SessionFinalizer.js.map +0 -1
- package/dist/core/SessionManager.d.ts +0 -112
- package/dist/core/SessionManager.d.ts.map +0 -1
- package/dist/core/SessionManager.js +0 -301
- package/dist/core/SessionManager.js.map +0 -1
- package/dist/core/SignalCoordinator.d.ts +0 -103
- package/dist/core/SignalCoordinator.d.ts.map +0 -1
- package/dist/core/SignalCoordinator.js +0 -203
- package/dist/core/SignalCoordinator.js.map +0 -1
- package/dist/core/SignalEvaluator.d.ts +0 -86
- package/dist/core/SignalEvaluator.d.ts.map +0 -1
- package/dist/core/SignalEvaluator.js +0 -312
- package/dist/core/SignalEvaluator.js.map +0 -1
- package/dist/core/SignalProcessor.d.ts +0 -152
- package/dist/core/SignalProcessor.d.ts.map +0 -1
- package/dist/core/SignalProcessor.js +0 -498
- package/dist/core/SignalProcessor.js.map +0 -1
- package/dist/core/Step.d.ts +0 -184
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -594
- package/dist/core/Step.js.map +0 -1
- package/dist/core/StepLifecycle.d.ts +0 -43
- package/dist/core/StepLifecycle.d.ts.map +0 -1
- package/dist/core/StepLifecycle.js +0 -176
- package/dist/core/StepLifecycle.js.map +0 -1
- package/dist/core/StreamingToolExecutor.d.ts +0 -142
- package/dist/core/StreamingToolExecutor.d.ts.map +0 -1
- package/dist/core/StreamingToolExecutor.js +0 -483
- package/dist/core/StreamingToolExecutor.js.map +0 -1
- package/dist/core/ToolLoopExecutor.d.ts +0 -133
- package/dist/core/ToolLoopExecutor.d.ts.map +0 -1
- package/dist/core/ToolLoopExecutor.js +0 -564
- package/dist/core/ToolLoopExecutor.js.map +0 -1
- package/dist/core/ToolManager.d.ts +0 -250
- package/dist/core/ToolManager.d.ts.map +0 -1
- package/dist/core/ToolManager.js +0 -1098
- package/dist/core/ToolManager.js.map +0 -1
- package/dist/core/createAgent.d.ts +0 -35
- package/dist/core/createAgent.d.ts.map +0 -1
- package/dist/core/createAgent.js +0 -36
- package/dist/core/createAgent.js.map +0 -1
- package/dist/core/flow-namespace.d.ts +0 -64
- package/dist/core/flow-namespace.d.ts.map +0 -1
- package/dist/core/flow-namespace.js +0 -179
- package/dist/core/flow-namespace.js.map +0 -1
- package/dist/core/toolGates.d.ts +0 -24
- package/dist/core/toolGates.d.ts.map +0 -1
- package/dist/core/toolGates.js +0 -49
- package/dist/core/toolGates.js.map +0 -1
- package/dist/types/persistence.d.ts +0 -254
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js +0 -6
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/prompt-cache.d.ts +0 -15
- package/dist/types/prompt-cache.d.ts.map +0 -1
- package/dist/types/prompt-cache.js +0 -5
- package/dist/types/prompt-cache.js.map +0 -1
- package/dist/types/signals.d.ts +0 -263
- package/dist/types/signals.d.ts.map +0 -1
- package/dist/types/signals.js +0 -10
- package/dist/types/signals.js.map +0 -1
- package/dist/types/template.d.ts +0 -84
- package/dist/types/template.d.ts.map +0 -1
- package/dist/types/template.js +0 -2
- package/dist/types/template.js.map +0 -1
- package/dist/utils/condition.d.ts +0 -63
- package/dist/utils/condition.d.ts.map +0 -1
- package/dist/utils/condition.js +0 -230
- package/dist/utils/condition.js.map +0 -1
- package/dist/utils/event.d.ts +0 -6
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js +0 -17
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts +0 -33
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js +0 -77
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/serialize.d.ts +0 -36
- package/dist/utils/serialize.d.ts.map +0 -1
- package/dist/utils/serialize.js +0 -72
- package/dist/utils/serialize.js.map +0 -1
- package/dist/utils/session.d.ts +0 -124
- package/dist/utils/session.d.ts.map +0 -1
- package/dist/utils/session.js +0 -379
- package/dist/utils/session.js.map +0 -1
- package/docs/concepts/directives.md +0 -369
- package/docs/reference/adapters.md +0 -543
- package/docs/reference/create-agent.md +0 -216
- package/docs/reference/directive.md +0 -242
- package/docs/reference/signals.md +0 -368
- package/examples/02-data-extraction.ts +0 -90
- package/examples/05-branching.ts +0 -140
- package/examples/06-flow-control.ts +0 -103
- package/examples/08-persistence.ts +0 -98
- package/examples/09-signals.ts +0 -144
- package/src/adapters/MemoryAdapter.ts +0 -281
- package/src/adapters/MongoAdapter.ts +0 -341
- package/src/adapters/OpenSearchAdapter.ts +0 -693
- package/src/adapters/PostgreSQLAdapter.ts +0 -487
- package/src/adapters/PrismaAdapter.ts +0 -617
- package/src/adapters/RedisAdapter.ts +0 -439
- package/src/adapters/SQLiteAdapter.ts +0 -496
- package/src/adapters/index.ts +0 -43
- package/src/adapters/sessionRow.ts +0 -57
- package/src/constants/index.ts +0 -2
- package/src/core/AutoChainExecutor.ts +0 -397
- package/src/core/BranchEvaluator.ts +0 -161
- package/src/core/DirectiveChainTracker.ts +0 -144
- package/src/core/Events.ts +0 -164
- package/src/core/Flow.ts +0 -665
- package/src/core/FlowRouter.ts +0 -1540
- package/src/core/PersistenceManager.ts +0 -446
- package/src/core/PromptComposer.ts +0 -448
- package/src/core/PromptSectionCache.ts +0 -125
- package/src/core/ResponseEngine.ts +0 -338
- package/src/core/ResponseGenerationError.ts +0 -53
- package/src/core/ResponseModal.ts +0 -1902
- package/src/core/ResponsePipeline.ts +0 -1404
- package/src/core/SessionFinalizer.ts +0 -108
- package/src/core/SessionManager.ts +0 -372
- package/src/core/SignalCoordinator.ts +0 -263
- package/src/core/SignalEvaluator.ts +0 -404
- package/src/core/SignalProcessor.ts +0 -663
- package/src/core/Step.ts +0 -782
- package/src/core/StepLifecycle.ts +0 -242
- package/src/core/StreamingToolExecutor.ts +0 -609
- package/src/core/ToolLoopExecutor.ts +0 -749
- package/src/core/ToolManager.ts +0 -1379
- package/src/core/createAgent.ts +0 -40
- package/src/core/flow-namespace.ts +0 -227
- package/src/core/toolGates.ts +0 -72
- package/src/types/persistence.ts +0 -303
- package/src/types/prompt-cache.ts +0 -17
- package/src/types/signals.ts +0 -338
- package/src/types/template.ts +0 -98
- package/src/utils/condition.ts +0 -296
- package/src/utils/event.ts +0 -16
- package/src/utils/id.ts +0 -91
- package/src/utils/serialize.ts +0 -86
- package/src/utils/session.ts +0 -501
|
@@ -1,564 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ToolLoopExecutor owns dynamic tool execution during response generation:
|
|
3
|
-
*
|
|
4
|
-
* - `runLoop()` — the run-tools-then-ask-LLM-again follow-up loop used by the
|
|
5
|
-
* non-streaming path (and as the streaming fallback): executes the initial
|
|
6
|
-
* tool calls sequentially, asks the provider whether more tools are needed,
|
|
7
|
-
* reconstructs tool-result history items, and forces a final text response
|
|
8
|
-
* when tools ran but no message was produced.
|
|
9
|
-
* - `runStreamingBatch()` — the streaming path's initial batch execution via
|
|
10
|
-
* ToolManager.executeWithConcurrency (StreamingToolExecutor concurrency
|
|
11
|
-
* rules), yielding tool-progress chunks; falls back to `runLoop()` when
|
|
12
|
-
* concurrent execution fails.
|
|
13
|
-
*
|
|
14
|
-
* ToolManager remains the registry/resolver and single-tool executor.
|
|
15
|
-
*/
|
|
16
|
-
import { ResponseGenerationError } from "./ResponseGenerationError.js";
|
|
17
|
-
import { flow } from "./flow-namespace.js";
|
|
18
|
-
import { historyToEvents, logger, serializeToolResult, assistantMessage, toolMessage } from "../utils/index.js";
|
|
19
|
-
const executionFailure = (toolName, error) => JSON.stringify({
|
|
20
|
-
success: false,
|
|
21
|
-
error: `${toolName}: ${error instanceof Error ? error.message : String(error)}`,
|
|
22
|
-
});
|
|
23
|
-
const toolNotFoundFailure = (toolName) => JSON.stringify({ success: false, error: `Tool "${toolName}" is not registered in any scope.` });
|
|
24
|
-
export class ToolLoopExecutor {
|
|
25
|
-
constructor(deps) {
|
|
26
|
-
this.deps = deps;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Unified tool execution logic with loop handling.
|
|
30
|
-
* Consolidates the complex tool execution logic from both streaming and
|
|
31
|
-
* non-streaming responses.
|
|
32
|
-
*/
|
|
33
|
-
async runLoop(params) {
|
|
34
|
-
try {
|
|
35
|
-
const { context, history, selectedFlow, responsePrompt, availableTools, responseSchema, signal } = params;
|
|
36
|
-
// The follow-up loop (which reassigned toolCalls) now lives in
|
|
37
|
-
// runFollowUpLoop; here toolCalls is only read.
|
|
38
|
-
const { toolCalls } = params;
|
|
39
|
-
let { session } = params;
|
|
40
|
-
// Directives emitted by tools this turn — consumed by the caller
|
|
41
|
-
const collectedDirectives = [];
|
|
42
|
-
// Convert HistoryItem[] to Event[] for internal processing
|
|
43
|
-
const historyEvents = historyToEvents(history);
|
|
44
|
-
// Execution records keyed by call — shared with the follow-up loop
|
|
45
|
-
const records = [];
|
|
46
|
-
// Execute initial dynamic tool calls
|
|
47
|
-
if (toolCalls && toolCalls.length > 0) {
|
|
48
|
-
logger.debug(`[ToolLoopExecutor] Executing ${toolCalls.length} dynamic tool calls:`, toolCalls.map(tc => tc.toolName));
|
|
49
|
-
for (const [callIndex, toolCall] of toolCalls.entries()) {
|
|
50
|
-
const record = {
|
|
51
|
-
requestId: `init-${callIndex}-${toolCall.toolName}`,
|
|
52
|
-
toolName: toolCall.toolName,
|
|
53
|
-
arguments: toolCall.arguments,
|
|
54
|
-
round: 0,
|
|
55
|
-
};
|
|
56
|
-
records.push(record);
|
|
57
|
-
const tool = this.findAvailableTool(toolCall.toolName, selectedFlow);
|
|
58
|
-
if (!tool) {
|
|
59
|
-
logger.warn(`[ToolExecutionError] Tool not found: "${toolCall.toolName}" is not registered in any scope. Register the tool or check the tool name.`);
|
|
60
|
-
record.result = toolNotFoundFailure(toolCall.toolName);
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
// Use ToolManager for unified tool execution
|
|
65
|
-
const toolResult = await this.deps.toolManager.executeTool({
|
|
66
|
-
tool,
|
|
67
|
-
context,
|
|
68
|
-
updateContext: this.deps.updateContext,
|
|
69
|
-
updateData: this.deps.updateCollectedData,
|
|
70
|
-
history: historyEvents, // Use Event[] for tool execution
|
|
71
|
-
data: session.data,
|
|
72
|
-
toolArguments: toolCall.arguments,
|
|
73
|
-
});
|
|
74
|
-
// Store the actual tool result data for history
|
|
75
|
-
record.result = serializeToolResult(toolResult);
|
|
76
|
-
// Collect tool-emitted directives (ctx.dispatch / {directive})
|
|
77
|
-
if (toolResult.directives?.length) {
|
|
78
|
-
collectedDirectives.push(...toolResult.directives);
|
|
79
|
-
}
|
|
80
|
-
// Check if tool execution was successful
|
|
81
|
-
if (!toolResult.success) {
|
|
82
|
-
logger.error(`[ToolLoopExecutor] Tool execution failed: ${toolCall.toolName} - ${toolResult.error}`);
|
|
83
|
-
// Continue with other tools rather than failing completely
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
// Update context with tool results
|
|
87
|
-
if (toolResult.contextUpdate) {
|
|
88
|
-
try {
|
|
89
|
-
await this.deps.updateContext(toolResult.contextUpdate);
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
logger.error(`[ToolLoopExecutor] Failed to update context from tool ${toolCall.toolName}:`, error);
|
|
93
|
-
// Continue execution but log the error
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
// Update collected data with tool results
|
|
97
|
-
if (toolResult.dataUpdate) {
|
|
98
|
-
try {
|
|
99
|
-
session = await this.deps.updateSessionData(session, toolResult.dataUpdate);
|
|
100
|
-
logger.debug(`[ToolLoopExecutor] Tool updated collected data:`, toolResult.dataUpdate);
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
logger.error(`[ToolLoopExecutor] Failed to update data from tool ${toolCall.toolName}:`, error);
|
|
104
|
-
// Continue execution but log the error
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
logger.debug(`[ToolLoopExecutor] Executed dynamic tool: ${toolCall.toolName} (success: ${toolResult.success})`);
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
logger.error(`[ToolLoopExecutor] Tool execution error for ${toolCall.toolName}:`, error);
|
|
111
|
-
// A thrown handler must be visible to the model as a FAILED
|
|
112
|
-
// tool call — reporting success makes it confirm actions
|
|
113
|
-
// that never happened.
|
|
114
|
-
record.result = executionFailure(toolCall.toolName, error);
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// A tool spoke verbatim this turn: its reply IS the final message —
|
|
120
|
-
// skip the follow-up LLM call (documented dispatch semantics).
|
|
121
|
-
const preLoopDirectives = flow.mergeAll(collectedDirectives);
|
|
122
|
-
if (preLoopDirectives?.reply) {
|
|
123
|
-
logger.debug("[ToolLoopExecutor] Tool directive reply short-circuits follow-up LLM call");
|
|
124
|
-
return {
|
|
125
|
-
session,
|
|
126
|
-
finalToolCalls: toolCalls,
|
|
127
|
-
finalMessage: preLoopDirectives.reply,
|
|
128
|
-
structured: { message: preLoopDirectives.reply },
|
|
129
|
-
directives: preLoopDirectives,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
// Hand off to the multi-round follow-up loop shared with the
|
|
133
|
-
// streaming path. The initial batch above already executed
|
|
134
|
-
// sequentially and populated the result maps.
|
|
135
|
-
return await this.runFollowUpLoop({
|
|
136
|
-
toolCalls,
|
|
137
|
-
session,
|
|
138
|
-
records,
|
|
139
|
-
collectedDirectives,
|
|
140
|
-
context,
|
|
141
|
-
history,
|
|
142
|
-
selectedFlow,
|
|
143
|
-
responsePrompt,
|
|
144
|
-
availableTools,
|
|
145
|
-
responseSchema,
|
|
146
|
-
signal,
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
throw ResponseGenerationError.fromError(error, 'tool_execution', params, {
|
|
151
|
-
toolCallsCount: params.toolCalls?.length || 0,
|
|
152
|
-
availableToolsCount: params.availableTools.length
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* The multi-round follow-up loop shared by the non-streaming (`runLoop`) and
|
|
158
|
-
* streaming (`runStreamingBatch`) tool paths: re-prompt the model with the
|
|
159
|
-
* tool results (tools available on the first round so it can chain further
|
|
160
|
-
* calls), execute any further tool calls, repeat up to `maxToolLoops`, then
|
|
161
|
-
* force a result-aware closing message if the model never produced one.
|
|
162
|
-
* Callers run the *initial* batch — sequentially for `runLoop`, concurrently
|
|
163
|
-
* (with progress) for `runStreamingBatch` — and pass the populated result
|
|
164
|
-
* maps; from here both paths behave identically.
|
|
165
|
-
*/
|
|
166
|
-
async runFollowUpLoop(params) {
|
|
167
|
-
const { context, history, selectedFlow, responsePrompt, availableTools, responseSchema, signal, records, collectedDirectives = [] } = params;
|
|
168
|
-
let { toolCalls, session } = params;
|
|
169
|
-
try {
|
|
170
|
-
// TOOL LOOP: Allow AI to make follow-up tool calls after initial tool execution
|
|
171
|
-
// `??` so an explicit `maxToolLoops: 0` is honored instead of being
|
|
172
|
-
// clobbered to the default by a falsy-zero check.
|
|
173
|
-
const MAX_TOOL_LOOPS = this.deps.maxToolLoops ?? 5;
|
|
174
|
-
let toolLoopCount = 0;
|
|
175
|
-
let hasToolCalls = toolCalls && toolCalls.length > 0;
|
|
176
|
-
let finalMessage;
|
|
177
|
-
let followUpStructured;
|
|
178
|
-
while (hasToolCalls && toolLoopCount < MAX_TOOL_LOOPS) {
|
|
179
|
-
toolLoopCount++;
|
|
180
|
-
logger.debug(`[ToolLoopExecutor] Starting tool loop ${toolLoopCount}/${MAX_TOOL_LOOPS} with ${toolCalls?.length || 0} tool calls`);
|
|
181
|
-
// Create tool result history items for the PREVIOUS round's
|
|
182
|
-
// calls. Failures are reported as failures — never as success.
|
|
183
|
-
const previousRound = toolLoopCount - 1;
|
|
184
|
-
const roundRecords = records.filter((r) => r.round === previousRound);
|
|
185
|
-
const toolResultHistoryItems = [];
|
|
186
|
-
for (const record of roundRecords) {
|
|
187
|
-
toolResultHistoryItems.push(assistantMessage(null, [
|
|
188
|
-
{ id: record.requestId, name: record.toolName, arguments: record.arguments },
|
|
189
|
-
]), toolMessage(record.toolName, record.requestId, record.result ?? toolNotFoundFailure(record.toolName)));
|
|
190
|
-
}
|
|
191
|
-
// Create updated history with tool results
|
|
192
|
-
const updatedHistory = [...history, ...toolResultHistoryItems];
|
|
193
|
-
// Make follow-up AI call to see if more tools are needed.
|
|
194
|
-
// Tools are offered EVERY iteration — the loop is already bounded
|
|
195
|
-
// by MAX_TOOL_LOOPS, so withholding them after round only made
|
|
196
|
-
// maxToolLoops values above 2 unreachable.
|
|
197
|
-
const agentOptions = this.deps.getAgentOptions();
|
|
198
|
-
logger.debug(`[ToolLoopExecutor] Making follow-up AI call (loop ${toolLoopCount}):`, {
|
|
199
|
-
providingTools: true,
|
|
200
|
-
toolsCount: availableTools.length,
|
|
201
|
-
});
|
|
202
|
-
const followUpResult = await agentOptions.provider.generateMessage({
|
|
203
|
-
prompt: responsePrompt,
|
|
204
|
-
history: updatedHistory, // Use HistoryItem[] for AI provider
|
|
205
|
-
context,
|
|
206
|
-
tools: availableTools,
|
|
207
|
-
parameters: responseSchema ? {
|
|
208
|
-
jsonSchema: responseSchema,
|
|
209
|
-
schemaName: "tool_followup",
|
|
210
|
-
} : undefined,
|
|
211
|
-
signal,
|
|
212
|
-
});
|
|
213
|
-
// Check if follow-up call has more tool calls
|
|
214
|
-
const followUpToolCalls = followUpResult.structured?.toolCalls;
|
|
215
|
-
hasToolCalls = followUpToolCalls && followUpToolCalls.length > 0;
|
|
216
|
-
logger.debug(`[ToolLoopExecutor] Follow-up AI response (loop ${toolLoopCount}):`, {
|
|
217
|
-
hasMessage: !!followUpResult.message,
|
|
218
|
-
messageLength: followUpResult.message?.length || 0,
|
|
219
|
-
hasToolCalls,
|
|
220
|
-
toolCallsCount: followUpToolCalls?.length || 0,
|
|
221
|
-
toolNames: followUpToolCalls?.map(tc => tc.toolName) || [],
|
|
222
|
-
});
|
|
223
|
-
if (hasToolCalls) {
|
|
224
|
-
logger.debug(`[ToolLoopExecutor] Follow-up call produced ${followUpToolCalls.length} additional tool calls`);
|
|
225
|
-
// Execute the follow-up tool calls
|
|
226
|
-
for (const [callIndex, toolCall] of followUpToolCalls.entries()) {
|
|
227
|
-
const record = {
|
|
228
|
-
requestId: `fup-${toolLoopCount}-${callIndex}-${toolCall.toolName}`,
|
|
229
|
-
toolName: toolCall.toolName,
|
|
230
|
-
arguments: toolCall.arguments,
|
|
231
|
-
round: toolLoopCount,
|
|
232
|
-
};
|
|
233
|
-
records.push(record);
|
|
234
|
-
const tool = this.findAvailableTool(toolCall.toolName, selectedFlow);
|
|
235
|
-
if (!tool) {
|
|
236
|
-
logger.warn(`[ToolExecutionError] Tool not found in follow-up: "${toolCall.toolName}" is not registered in any scope. Register the tool or check the tool name.`);
|
|
237
|
-
record.result = toolNotFoundFailure(toolCall.toolName);
|
|
238
|
-
continue;
|
|
239
|
-
}
|
|
240
|
-
try {
|
|
241
|
-
// Use ToolManager for unified tool execution
|
|
242
|
-
const toolResult = await this.deps.toolManager.executeTool({
|
|
243
|
-
tool,
|
|
244
|
-
context,
|
|
245
|
-
updateContext: this.deps.updateContext,
|
|
246
|
-
updateData: this.deps.updateCollectedData,
|
|
247
|
-
history: historyToEvents(updatedHistory), // Convert to Event[] for tool execution
|
|
248
|
-
data: session.data,
|
|
249
|
-
toolArguments: toolCall.arguments,
|
|
250
|
-
});
|
|
251
|
-
// Check if tool execution was successful
|
|
252
|
-
if (!toolResult.success) {
|
|
253
|
-
logger.error(`[ToolLoopExecutor] Follow-up tool execution failed: ${toolCall.toolName} - ${toolResult.error}`);
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
|
-
// Update context with follow-up tool results
|
|
257
|
-
if (toolResult.contextUpdate) {
|
|
258
|
-
try {
|
|
259
|
-
await this.deps.updateContext(toolResult.contextUpdate);
|
|
260
|
-
}
|
|
261
|
-
catch (error) {
|
|
262
|
-
logger.error(`[ToolLoopExecutor] Failed to update context from follow-up tool ${toolCall.toolName}:`, error);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
if (toolResult.dataUpdate) {
|
|
266
|
-
try {
|
|
267
|
-
session = await this.deps.updateSessionData(session, toolResult.dataUpdate);
|
|
268
|
-
logger.debug(`[ToolLoopExecutor] Follow-up tool updated collected data:`, toolResult.dataUpdate);
|
|
269
|
-
}
|
|
270
|
-
catch (error) {
|
|
271
|
-
logger.error(`[ToolLoopExecutor] Failed to update data from follow-up tool ${toolCall.toolName}:`, error);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
// Store the follow-up tool result for potential next loop iteration
|
|
275
|
-
record.result = serializeToolResult(toolResult);
|
|
276
|
-
// Collect tool-emitted directives (ctx.dispatch / {directive})
|
|
277
|
-
if (toolResult.directives?.length) {
|
|
278
|
-
collectedDirectives.push(...toolResult.directives);
|
|
279
|
-
}
|
|
280
|
-
logger.debug(`[ToolLoopExecutor] Executed follow-up tool: ${toolCall.toolName} (success: ${toolResult.success})`);
|
|
281
|
-
}
|
|
282
|
-
catch (error) {
|
|
283
|
-
logger.error(`[ToolLoopExecutor] Follow-up tool execution error for ${toolCall.toolName}:`, error);
|
|
284
|
-
// Visible failure beats a fabricated success.
|
|
285
|
-
record.result = executionFailure(toolCall.toolName, error);
|
|
286
|
-
continue;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
// A tool emitted a verbatim reply this round: it IS the final
|
|
290
|
-
// message — stop looping and skip any further LLM call.
|
|
291
|
-
const roundDirectives = flow.mergeAll(collectedDirectives);
|
|
292
|
-
if (roundDirectives?.reply) {
|
|
293
|
-
logger.debug("[ToolLoopExecutor] Tool directive reply short-circuits remaining tool loop");
|
|
294
|
-
finalMessage = roundDirectives.reply;
|
|
295
|
-
followUpStructured = { message: roundDirectives.reply };
|
|
296
|
-
hasToolCalls = false;
|
|
297
|
-
toolCalls = undefined;
|
|
298
|
-
break;
|
|
299
|
-
}
|
|
300
|
-
// Update toolCalls for next iteration or final response
|
|
301
|
-
toolCalls = followUpToolCalls;
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
logger.debug(`[ToolLoopExecutor] Tool loop completed after ${toolLoopCount} iterations`);
|
|
305
|
-
// Update final message and toolCalls from follow-up result if no more tools
|
|
306
|
-
finalMessage = followUpResult.structured?.message || followUpResult.message;
|
|
307
|
-
followUpStructured = followUpResult.structured;
|
|
308
|
-
toolCalls = followUpToolCalls || [];
|
|
309
|
-
break;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
if (toolLoopCount >= MAX_TOOL_LOOPS) {
|
|
313
|
-
logger.warn(`[ResponseGenerationError] Tool loop limit reached: ${toolLoopCount} iterations hit the cap (${MAX_TOOL_LOOPS}). Stopping tool execution. Increase the agent's maxToolLoops option or reduce recursive tool calls.`);
|
|
314
|
-
}
|
|
315
|
-
// If tools were executed but no final text message was produced,
|
|
316
|
-
// make one more LLM call to generate a proper text response from tool
|
|
317
|
-
// results. This prevents the original tool-invocation message (e.g.
|
|
318
|
-
// "Let me check...") from being returned as the final user-facing
|
|
319
|
-
// response. Shared with the streaming path via forceFinalTextFromTools.
|
|
320
|
-
if (!finalMessage && toolLoopCount > 0) {
|
|
321
|
-
logger.debug(`[ToolLoopExecutor] No final message after tool loop, making additional LLM call for text response`);
|
|
322
|
-
const forced = await this.forceFinalTextFromTools({
|
|
323
|
-
history,
|
|
324
|
-
records,
|
|
325
|
-
responsePrompt,
|
|
326
|
-
responseSchema,
|
|
327
|
-
context,
|
|
328
|
-
signal,
|
|
329
|
-
});
|
|
330
|
-
if (forced.finalMessage) {
|
|
331
|
-
finalMessage = forced.finalMessage;
|
|
332
|
-
}
|
|
333
|
-
if (forced.structured) {
|
|
334
|
-
followUpStructured = forced.structured;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
logger.debug(`[ToolLoopExecutor] Tool loop completed:`, {
|
|
338
|
-
totalIterations: toolLoopCount,
|
|
339
|
-
hasFinalMessage: !!finalMessage,
|
|
340
|
-
finalMessageLength: finalMessage?.length || 0,
|
|
341
|
-
finalToolCallsCount: toolCalls?.length || 0,
|
|
342
|
-
});
|
|
343
|
-
return {
|
|
344
|
-
session,
|
|
345
|
-
finalToolCalls: toolCalls,
|
|
346
|
-
finalMessage,
|
|
347
|
-
structured: followUpStructured,
|
|
348
|
-
directives: flow.mergeAll(collectedDirectives),
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
catch (error) {
|
|
352
|
-
throw ResponseGenerationError.fromError(error, 'tool_execution', params, {
|
|
353
|
-
toolCallsCount: params.toolCalls?.length || 0,
|
|
354
|
-
availableToolsCount: params.availableTools.length
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
/**
|
|
359
|
-
* After tools have executed but the model produced no closing text, make one
|
|
360
|
-
* more LLM call (no tools) that turns the tool results into a user-facing
|
|
361
|
-
* message. Shared by the non-streaming tool loop and the streaming batch so
|
|
362
|
-
* both paths behave identically. Returns an empty object if the call fails
|
|
363
|
-
* or yields nothing, leaving the caller to fall back to its prior message.
|
|
364
|
-
*/
|
|
365
|
-
async forceFinalTextFromTools(params) {
|
|
366
|
-
const { history, records, responsePrompt, responseSchema, context, signal } = params;
|
|
367
|
-
// Reconstruct assistant tool_call + tool result pairs so the follow-up
|
|
368
|
-
// call can see what the tools returned — every executed call, keyed by
|
|
369
|
-
// its own request id.
|
|
370
|
-
const finalToolResultHistoryItems = [];
|
|
371
|
-
for (const record of records) {
|
|
372
|
-
if (!record.result)
|
|
373
|
-
continue;
|
|
374
|
-
finalToolResultHistoryItems.push(assistantMessage(null, [
|
|
375
|
-
{ id: record.requestId, name: record.toolName, arguments: record.arguments },
|
|
376
|
-
]), toolMessage(record.toolName, record.requestId, record.result));
|
|
377
|
-
}
|
|
378
|
-
const finalHistory = [...history, ...finalToolResultHistoryItems];
|
|
379
|
-
const agentOptions = this.deps.getAgentOptions();
|
|
380
|
-
try {
|
|
381
|
-
const textResult = await agentOptions.provider.generateMessage({
|
|
382
|
-
prompt: responsePrompt + "\n\nProvide a text response to the user based on the tool results. Do not call any tools.",
|
|
383
|
-
history: finalHistory,
|
|
384
|
-
context,
|
|
385
|
-
tools: [], // No tools - force text response
|
|
386
|
-
parameters: responseSchema ? {
|
|
387
|
-
jsonSchema: responseSchema,
|
|
388
|
-
schemaName: "tool_final_text",
|
|
389
|
-
} : undefined,
|
|
390
|
-
signal,
|
|
391
|
-
});
|
|
392
|
-
const finalMessage = textResult.structured?.message || textResult.message;
|
|
393
|
-
logger.debug(`[ToolLoopExecutor] Generated final text response from tool results:`, {
|
|
394
|
-
hasMessage: !!finalMessage,
|
|
395
|
-
messageLength: finalMessage?.length || 0,
|
|
396
|
-
});
|
|
397
|
-
return { finalMessage, structured: textResult.structured };
|
|
398
|
-
}
|
|
399
|
-
catch (error) {
|
|
400
|
-
logger.error(`[ToolLoopExecutor] Failed to generate final text response from tool results:`, error);
|
|
401
|
-
// Leave the caller to fall back to its prior message.
|
|
402
|
-
return {};
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Execute the streaming path's initial batch of tool calls concurrently
|
|
407
|
-
* via ToolManager.executeWithConcurrency, yielding tool-progress chunks.
|
|
408
|
-
* When tools ran but the model produced no closing text, forces a final
|
|
409
|
-
* text response from the tool results (mirroring `runLoop()`). Falls back
|
|
410
|
-
* to `runLoop()` when concurrent execution fails.
|
|
411
|
-
*
|
|
412
|
-
* Returns the updated session, final tool calls, and any forced closing
|
|
413
|
-
* message/structured response.
|
|
414
|
-
*/
|
|
415
|
-
async *runStreamingBatch(params) {
|
|
416
|
-
const { context, history, selectedFlow, step, accumulated, responsePrompt, availableTools, responseSchema, signal } = params;
|
|
417
|
-
let { session } = params;
|
|
418
|
-
let toolCalls = params.toolCalls;
|
|
419
|
-
// Directives emitted by tools this turn — surfaced to the caller
|
|
420
|
-
const collectedDirectives = [];
|
|
421
|
-
// Use concurrent execution for the initial batch of tool calls
|
|
422
|
-
const toolCallRequests = params.toolCalls.map((tc, i) => ({
|
|
423
|
-
id: `${tc.toolName}-${i}-${Date.now()}`,
|
|
424
|
-
toolName: tc.toolName,
|
|
425
|
-
arguments: tc.arguments,
|
|
426
|
-
}));
|
|
427
|
-
// Map request id -> request so completed results can be attributed back
|
|
428
|
-
// to their tool name/arguments for the forced final-text call.
|
|
429
|
-
// Execution records keyed by call id — seeded at queue time so results
|
|
430
|
-
// (and failures) attach to the right call even for same-name calls.
|
|
431
|
-
const records = toolCallRequests.map((req) => ({
|
|
432
|
-
requestId: req.id,
|
|
433
|
-
toolName: req.toolName,
|
|
434
|
-
arguments: req.arguments,
|
|
435
|
-
round: 0,
|
|
436
|
-
}));
|
|
437
|
-
const recordById = new Map(records.map((r) => [r.requestId, r]));
|
|
438
|
-
const historyEvents = historyToEvents(history);
|
|
439
|
-
let finalMessage;
|
|
440
|
-
let structured;
|
|
441
|
-
try {
|
|
442
|
-
for await (const update of this.deps.toolManager.executeWithConcurrency({
|
|
443
|
-
toolCalls: toolCallRequests,
|
|
444
|
-
context,
|
|
445
|
-
data: session.data,
|
|
446
|
-
history: historyEvents,
|
|
447
|
-
signal,
|
|
448
|
-
flow: selectedFlow,
|
|
449
|
-
step,
|
|
450
|
-
})) {
|
|
451
|
-
// Apply context updates
|
|
452
|
-
if (update.contextUpdate) {
|
|
453
|
-
try {
|
|
454
|
-
await this.deps.updateContext(update.contextUpdate);
|
|
455
|
-
}
|
|
456
|
-
catch (error) {
|
|
457
|
-
logger.error(`[ToolLoopExecutor] Failed to update context from concurrent tool:`, error);
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
// Apply data updates
|
|
461
|
-
if (update.dataUpdate) {
|
|
462
|
-
try {
|
|
463
|
-
session = await this.deps.updateSessionData(session, update.dataUpdate);
|
|
464
|
-
}
|
|
465
|
-
catch (error) {
|
|
466
|
-
logger.error(`[ToolLoopExecutor] Failed to update data from concurrent tool:`, error);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
// Capture tool results for the forced final-text call
|
|
470
|
-
if (update.result) {
|
|
471
|
-
const record = recordById.get(update.toolCallId);
|
|
472
|
-
if (record) {
|
|
473
|
-
record.result = serializeToolResult(update.result);
|
|
474
|
-
}
|
|
475
|
-
// Collect tool-emitted directives (ctx.dispatch / {directive})
|
|
476
|
-
if (update.result.directives?.length) {
|
|
477
|
-
collectedDirectives.push(...update.result.directives);
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
// Yield progress updates immediately
|
|
481
|
-
if (update.progress) {
|
|
482
|
-
yield {
|
|
483
|
-
delta: '',
|
|
484
|
-
accumulated,
|
|
485
|
-
done: false,
|
|
486
|
-
session,
|
|
487
|
-
toolCalls: undefined,
|
|
488
|
-
isFlowComplete: false,
|
|
489
|
-
metadata: { toolProgress: update.progress, toolCallId: update.toolCallId },
|
|
490
|
-
};
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
logger.debug(`[ToolLoopExecutor] Concurrent tool execution completed for ${toolCallRequests.length} tools`);
|
|
494
|
-
// Multi-round follow-up shared with the non-streaming path: re-prompt
|
|
495
|
-
// with the tool results so the model can chain further tool calls,
|
|
496
|
-
// then produce result-aware closing text (forced if it never does).
|
|
497
|
-
// Previously a single forced-text call — streaming now loops to parity
|
|
498
|
-
// with runLoop, so a streamed turn can chain tools across rounds.
|
|
499
|
-
const followUp = await this.runFollowUpLoop({
|
|
500
|
-
toolCalls,
|
|
501
|
-
session,
|
|
502
|
-
records,
|
|
503
|
-
collectedDirectives,
|
|
504
|
-
context,
|
|
505
|
-
history,
|
|
506
|
-
selectedFlow,
|
|
507
|
-
responsePrompt,
|
|
508
|
-
availableTools,
|
|
509
|
-
responseSchema,
|
|
510
|
-
signal,
|
|
511
|
-
});
|
|
512
|
-
session = followUp.session;
|
|
513
|
-
toolCalls = followUp.finalToolCalls;
|
|
514
|
-
finalMessage = followUp.finalMessage;
|
|
515
|
-
structured = followUp.structured;
|
|
516
|
-
}
|
|
517
|
-
catch (error) {
|
|
518
|
-
logger.error(`[ToolLoopExecutor] Concurrent batch failed:`, error);
|
|
519
|
-
const executedRecords = records.filter((r) => r.result !== undefined);
|
|
520
|
-
if (executedRecords.length > 0) {
|
|
521
|
-
// Some tools already executed — re-running them would duplicate
|
|
522
|
-
// real-world side effects (sends, writes, charges). Close the
|
|
523
|
-
// turn from the results we have instead.
|
|
524
|
-
logger.warn(`[ToolLoopExecutor] ${executedRecords.length} tool(s) already executed; closing the turn from their results rather than re-executing.`);
|
|
525
|
-
const forced = await this.forceFinalTextFromTools({
|
|
526
|
-
history,
|
|
527
|
-
records,
|
|
528
|
-
responsePrompt,
|
|
529
|
-
responseSchema,
|
|
530
|
-
context,
|
|
531
|
-
signal,
|
|
532
|
-
});
|
|
533
|
-
if (forced.finalMessage) {
|
|
534
|
-
finalMessage = forced.finalMessage;
|
|
535
|
-
}
|
|
536
|
-
structured = structured ?? forced.structured;
|
|
537
|
-
}
|
|
538
|
-
else {
|
|
539
|
-
// Nothing executed — safe to fall back to the unified loop.
|
|
540
|
-
const toolResult = await this.runLoop({
|
|
541
|
-
toolCalls, context, session, history, selectedFlow,
|
|
542
|
-
responsePrompt, availableTools, responseSchema, signal,
|
|
543
|
-
});
|
|
544
|
-
session = toolResult.session;
|
|
545
|
-
toolCalls = toolResult.finalToolCalls;
|
|
546
|
-
finalMessage = toolResult.finalMessage;
|
|
547
|
-
structured = toolResult.structured;
|
|
548
|
-
if (toolResult.directives) {
|
|
549
|
-
collectedDirectives.length = 0;
|
|
550
|
-
collectedDirectives.push(toolResult.directives);
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
return { session, toolCalls, finalMessage, structured, directives: flow.mergeAll(collectedDirectives) };
|
|
555
|
-
}
|
|
556
|
-
/**
|
|
557
|
-
* Find an available tool by name for the given flow.
|
|
558
|
-
* Delegates to ToolManager for unified tool resolution.
|
|
559
|
-
*/
|
|
560
|
-
findAvailableTool(toolName, flow) {
|
|
561
|
-
return this.deps.toolManager.find(toolName, undefined, undefined, flow);
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
//# sourceMappingURL=ToolLoopExecutor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ToolLoopExecutor.js","sourceRoot":"","sources":["../../src/core/ToolLoopExecutor.ts"],"names":[],"mappings":"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"}
|