@falai/agent 3.4.5 → 4.0.0-alpha.2
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 +11 -6
- 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/providers/ZaiProvider.d.ts +6 -4
- package/dist/cjs/providers/ZaiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/ZaiProvider.js +6 -4
- package/dist/cjs/providers/ZaiProvider.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 +11 -6
- 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/providers/ZaiProvider.d.ts +6 -4
- package/dist/providers/ZaiProvider.d.ts.map +1 -1
- package/dist/providers/ZaiProvider.js +6 -4
- package/dist/providers/ZaiProvider.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 +46 -13
- package/src/providers/ZaiProvider.ts +6 -4
- 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,397 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-step chain executor.
|
|
3
|
-
*
|
|
4
|
-
* Walks consecutive `auto: true` steps in a single turn without making LLM calls.
|
|
5
|
-
* Each auto-step runs its pre-LLM hooks (onEnter, prepare), evaluates skipIf/requires,
|
|
6
|
-
* applies state writes, resolves branches, and advances to the next step.
|
|
7
|
-
*
|
|
8
|
-
* The chain terminates when:
|
|
9
|
-
* - An interactive step (auto !== true) is reached → returned as `resolvedStep`
|
|
10
|
-
* - A `prepare` returns `{ halt: true, reply? }` → turn ends with verbatim reply
|
|
11
|
-
* - A position-changing directive (goTo, goToStep, complete) is returned
|
|
12
|
-
* - The last auto-step has no successor → flow is complete
|
|
13
|
-
* - The chain exceeds `maxAutoStepsPerTurn` → throws FlowConfigurationError
|
|
14
|
-
*
|
|
15
|
-
* Implements Algorithm 1 from `.kiro/specs/auto-steps/design.md`.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import type { Directive, SessionState } from "../types/index.js";
|
|
19
|
-
import type { Event } from "../types/history.js";
|
|
20
|
-
import { FlowConfigurationError, Step } from "./Step.js";
|
|
21
|
-
import { Flow } from "./Flow.js";
|
|
22
|
-
import { flow } from "./flow-namespace.js";
|
|
23
|
-
import { enterStep, mergeCollected, logger } from "../utils/index.js";
|
|
24
|
-
import { createTemplateContext } from "../utils/template.js";
|
|
25
|
-
import type {
|
|
26
|
-
StoppedReason,
|
|
27
|
-
BranchMap,
|
|
28
|
-
BranchEntry,
|
|
29
|
-
BranchPredicateContext,
|
|
30
|
-
} from "../types/flow.js";
|
|
31
|
-
import { evaluateIfPredicates } from "../utils/condition.js";
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* The directive-like object that `prepare` may return on auto-steps.
|
|
35
|
-
* A structural subset of Directive (pre-LLM + position fields), so results
|
|
36
|
-
* merge through the canonical Algorithm 4 (`flow.merge`).
|
|
37
|
-
*/
|
|
38
|
-
export type AutoStepPrepareResult<TContext = unknown, TData = unknown> = Pick<
|
|
39
|
-
Directive<TContext, TData>,
|
|
40
|
-
"dataUpdate" | "contextUpdate" | "halt" | "reply" | "goToStep" | "goTo" | "complete"
|
|
41
|
-
>;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Result of running the auto-chain.
|
|
45
|
-
*/
|
|
46
|
-
export interface AutoChainResult<TContext = unknown, TData = unknown> {
|
|
47
|
-
/** The interactive step to hand off to the LLM path (undefined if chain ended without one). */
|
|
48
|
-
resolvedStep?: Step<TContext, TData>;
|
|
49
|
-
/** The merged directive from the halting auto-step's prepare (only set when stoppedReason = 'halt'). */
|
|
50
|
-
mergedDirective?: AutoStepPrepareResult<TContext, TData>;
|
|
51
|
-
/** Why the chain stopped, if it didn't reach an interactive step normally. */
|
|
52
|
-
stoppedReason?: StoppedReason;
|
|
53
|
-
/** Updated session after all auto-step state writes. */
|
|
54
|
-
session: SessionState<TData>;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Configuration for AutoChainExecutor.
|
|
59
|
-
*/
|
|
60
|
-
export interface AutoChainExecutorOptions {
|
|
61
|
-
/** Maximum number of auto-steps walked in a single turn before throwing. */
|
|
62
|
-
maxAutoStepsPerTurn: number;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Parameters for a single chain run.
|
|
67
|
-
*/
|
|
68
|
-
export interface AutoChainRunParams<TContext, TData> {
|
|
69
|
-
session: SessionState<TData>;
|
|
70
|
-
context: TContext;
|
|
71
|
-
flow: Flow<TContext, TData>;
|
|
72
|
-
/** Conversation history (used for branch predicate context). Optional. */
|
|
73
|
-
history?: Event[];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Executes the auto-step chain for a single turn.
|
|
78
|
-
*
|
|
79
|
-
* Algorithm 1 from design.md — walks while `currentStep.auto === true`,
|
|
80
|
-
* executing skipIf → requires → onEnter/prepare → state writes →
|
|
81
|
-
* halt check → position directives → branches → linear advance.
|
|
82
|
-
*/
|
|
83
|
-
export class AutoChainExecutor<TContext = unknown, TData = unknown> {
|
|
84
|
-
constructor(private readonly options: AutoChainExecutorOptions) { }
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Run the auto-step chain starting from the current step on the session.
|
|
88
|
-
*/
|
|
89
|
-
async run(params: AutoChainRunParams<TContext, TData>): Promise<AutoChainResult<TContext, TData>> {
|
|
90
|
-
const { context, flow, history = [] } = params;
|
|
91
|
-
const { maxAutoStepsPerTurn } = this.options;
|
|
92
|
-
let { session } = params;
|
|
93
|
-
const visited: string[] = [];
|
|
94
|
-
|
|
95
|
-
while (true) {
|
|
96
|
-
// Resolve the current step from session
|
|
97
|
-
const currentStepId = session.currentStep?.id;
|
|
98
|
-
if (!currentStepId) {
|
|
99
|
-
// No current step — nothing to walk. Return undefined resolvedStep.
|
|
100
|
-
return { session };
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const step = flow.getStep(currentStepId);
|
|
104
|
-
if (!step) {
|
|
105
|
-
// Step not found in flow — shouldn't happen, but bail gracefully.
|
|
106
|
-
return { session };
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// If the step is not auto, hand off to the interactive path
|
|
110
|
-
if (!step.auto) {
|
|
111
|
-
return { resolvedStep: step, session };
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Track visited steps for cap/cycle detection
|
|
115
|
-
visited.push(step.id);
|
|
116
|
-
if (visited.length > maxAutoStepsPerTurn) {
|
|
117
|
-
throw new FlowConfigurationError(
|
|
118
|
-
`[FlowConfigurationError] Auto-step chain exceeded limit: visited ${visited.length} steps which exceeds maxAutoStepsPerTurn (${maxAutoStepsPerTurn}). ` +
|
|
119
|
-
`Break the cycle or increase maxAutoStepsPerTurn. Visited: ${visited.join(' → ')}.`
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
logger.debug(`[AutoChainExecutor] Processing auto-step: ${step.id} (${visited.length}/${maxAutoStepsPerTurn})`);
|
|
124
|
-
|
|
125
|
-
// STEP 1: skip evaluation (code-only predicates, OR semantics)
|
|
126
|
-
if (step.skip) {
|
|
127
|
-
const templateContext = createTemplateContext<TContext, TData>({
|
|
128
|
-
context,
|
|
129
|
-
data: session.data,
|
|
130
|
-
session,
|
|
131
|
-
history,
|
|
132
|
-
});
|
|
133
|
-
const skipResult = await step.evaluateSkip(templateContext);
|
|
134
|
-
|
|
135
|
-
if (skipResult.shouldSkip) {
|
|
136
|
-
logger.debug(`[AutoChainExecutor] Skipping auto-step ${step.id} due to skip condition`);
|
|
137
|
-
const nextSteps = step.getTransitions();
|
|
138
|
-
if (nextSteps.length === 0) {
|
|
139
|
-
// Last step was skipped and has no successor → flow complete
|
|
140
|
-
return { stoppedReason: 'last_step', session };
|
|
141
|
-
}
|
|
142
|
-
session = enterStep(session, nextSteps[0].id, nextSteps[0].description);
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// STEP 2: requires assertion
|
|
148
|
-
if (step.requires && step.requires.length > 0) {
|
|
149
|
-
const sessionData = (session.data || {}) as Record<string, unknown>;
|
|
150
|
-
const missing = step.requires.filter(
|
|
151
|
-
field => sessionData[String(field)] === undefined
|
|
152
|
-
);
|
|
153
|
-
if (missing.length > 0) {
|
|
154
|
-
throw new FlowConfigurationError(
|
|
155
|
-
`[FlowConfigurationError] Auto-step "${step.id}" missing required fields: fields [${missing.join(', ')}] must be populated before this step runs. ` +
|
|
156
|
-
`Ensure a preceding step or hook populates these fields.`
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// STEP 3: Run pre-LLM hooks (onEnter, prepare) and collect directives
|
|
162
|
-
const merged = await this.runStepHooks(step, session, context);
|
|
163
|
-
|
|
164
|
-
// Apply state writes immediately so subsequent steps see them
|
|
165
|
-
if (merged) {
|
|
166
|
-
if (merged.dataUpdate && Object.keys(merged.dataUpdate).length > 0) {
|
|
167
|
-
session = mergeCollected(session, merged.dataUpdate);
|
|
168
|
-
logger.debug(`[AutoChainExecutor] Applied dataUpdate from step ${step.id}`);
|
|
169
|
-
}
|
|
170
|
-
if (merged.contextUpdate && Object.keys(merged.contextUpdate).length > 0) {
|
|
171
|
-
// contextUpdate is reserved for future agent-level application.
|
|
172
|
-
// The caller can read mergedDirective.contextUpdate and apply it externally.
|
|
173
|
-
logger.debug(`[AutoChainExecutor] contextUpdate from step ${step.id} will be applied by caller`);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// STEP 4: halt short-circuit
|
|
177
|
-
if (merged.halt) {
|
|
178
|
-
logger.debug(`[AutoChainExecutor] Halt directive from step ${step.id}`);
|
|
179
|
-
return {
|
|
180
|
-
resolvedStep: step,
|
|
181
|
-
mergedDirective: merged,
|
|
182
|
-
stoppedReason: 'halt',
|
|
183
|
-
session,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// STEP 5: position-changing directive (goToStep, goTo, complete)
|
|
188
|
-
if (merged.goToStep) {
|
|
189
|
-
// String form targets the current flow; object form carrying
|
|
190
|
-
// a different `flow` defers to the pipeline for cross-flow
|
|
191
|
-
// resolution (same as goTo).
|
|
192
|
-
const goTarget = typeof merged.goToStep === "string"
|
|
193
|
-
? { step: merged.goToStep, flowId: undefined }
|
|
194
|
-
: { step: merged.goToStep.step, flowId: merged.goToStep.flow };
|
|
195
|
-
if (goTarget.flowId && goTarget.flowId !== flow.id) {
|
|
196
|
-
return {
|
|
197
|
-
resolvedStep: step,
|
|
198
|
-
mergedDirective: merged,
|
|
199
|
-
stoppedReason: 'goto',
|
|
200
|
-
session,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
const targetStep = flow.getStep(goTarget.step);
|
|
204
|
-
if (!targetStep) {
|
|
205
|
-
throw new FlowConfigurationError(
|
|
206
|
-
`[FlowConfigurationError] Auto-step "${step.id}" goToStep targets unknown step: "${goTarget.step}" does not exist in the current flow. ` +
|
|
207
|
-
`Check the step id or use goTo to target a different flow.`
|
|
208
|
-
);
|
|
209
|
-
}
|
|
210
|
-
session = enterStep(session, targetStep.id, targetStep.description);
|
|
211
|
-
logger.debug(`[AutoChainExecutor] Position directive goToStep → ${targetStep.id}`);
|
|
212
|
-
continue; // Re-enter loop at the new step (which may itself be auto)
|
|
213
|
-
}
|
|
214
|
-
if (merged.goTo) {
|
|
215
|
-
// goTo targets a flow — return to pipeline for cross-flow handling
|
|
216
|
-
return {
|
|
217
|
-
resolvedStep: step,
|
|
218
|
-
mergedDirective: merged,
|
|
219
|
-
stoppedReason: 'goto',
|
|
220
|
-
session,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
if (merged.complete) {
|
|
224
|
-
return {
|
|
225
|
-
resolvedStep: step,
|
|
226
|
-
mergedDirective: merged,
|
|
227
|
-
stoppedReason: 'completed',
|
|
228
|
-
session,
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// STEP 6: branches resolution (if step has branches)
|
|
234
|
-
if (step.branches && step.branches.length > 0) {
|
|
235
|
-
const branchTarget = await this.evaluateBranches(
|
|
236
|
-
step.branches,
|
|
237
|
-
session,
|
|
238
|
-
context,
|
|
239
|
-
history
|
|
240
|
-
);
|
|
241
|
-
if (branchTarget) {
|
|
242
|
-
// Check if it resolves to a step in this flow
|
|
243
|
-
const targetStep = flow.getStep(branchTarget);
|
|
244
|
-
if (targetStep) {
|
|
245
|
-
session = enterStep(session, targetStep.id, targetStep.description);
|
|
246
|
-
logger.debug(`[AutoChainExecutor] Branch resolved → ${targetStep.id}`);
|
|
247
|
-
continue;
|
|
248
|
-
}
|
|
249
|
-
// Not a step in this flow — treat as a flow id, return to pipeline
|
|
250
|
-
return {
|
|
251
|
-
resolvedStep: step,
|
|
252
|
-
mergedDirective: { goTo: branchTarget },
|
|
253
|
-
stoppedReason: 'goto',
|
|
254
|
-
session,
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
// No branch matched — fall through to linear advance
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// STEP 7: linear advance
|
|
261
|
-
const nextSteps = step.getTransitions();
|
|
262
|
-
if (nextSteps.length === 0) {
|
|
263
|
-
// Auto-step is the last step → flow completes
|
|
264
|
-
logger.debug(`[AutoChainExecutor] Auto-step ${step.id} is terminal — flow complete`);
|
|
265
|
-
return { stoppedReason: 'last_step', session };
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
// Take the first transition (linear advance)
|
|
269
|
-
session = enterStep(session, nextSteps[0].id, nextSteps[0].description);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Run the prepare hook for an auto-step, collecting any
|
|
275
|
-
* Directive return values (pre-LLM fields honored).
|
|
276
|
-
*/
|
|
277
|
-
private async runStepHooks(
|
|
278
|
-
step: Step<TContext, TData>,
|
|
279
|
-
session: SessionState<TData>,
|
|
280
|
-
context: TContext
|
|
281
|
-
): Promise<AutoStepPrepareResult<TContext, TData> | undefined> {
|
|
282
|
-
let merged: AutoStepPrepareResult<TContext, TData> | undefined;
|
|
283
|
-
|
|
284
|
-
// prepare hook — for auto-steps, prepare may return a Directive with pre-LLM fields
|
|
285
|
-
if (step.prepare) {
|
|
286
|
-
if (typeof step.prepare === 'function') {
|
|
287
|
-
const prepareResult = await (step.prepare as (
|
|
288
|
-
context: TContext,
|
|
289
|
-
data?: Partial<TData>
|
|
290
|
-
) => Promise<unknown>)(
|
|
291
|
-
context,
|
|
292
|
-
session.data
|
|
293
|
-
);
|
|
294
|
-
// prepare may return void or a directive-like object
|
|
295
|
-
if (prepareResult && typeof prepareResult === 'object') {
|
|
296
|
-
merged = this.mergeDirectives(merged, prepareResult as AutoStepPrepareResult<TContext, TData>);
|
|
297
|
-
}
|
|
298
|
-
} else {
|
|
299
|
-
// Tool reference (string or Tool object) — for auto-steps, tool-based
|
|
300
|
-
// prepare cannot return directives. Log a warning.
|
|
301
|
-
logger.warn(
|
|
302
|
-
`[FlowConfigurationError] Auto-step "${step.id}" has a tool-based prepare: tool-based prepare on auto-steps cannot return directives. ` +
|
|
303
|
-
`Use a function-based prepare hook instead.`
|
|
304
|
-
);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
return merged;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Merge two directive-like objects via the canonical Algorithm 4 merge —
|
|
313
|
-
* one algorithm shared with tools, hooks and signals.
|
|
314
|
-
*/
|
|
315
|
-
private mergeDirectives(
|
|
316
|
-
base: AutoStepPrepareResult<TContext, TData> | undefined,
|
|
317
|
-
incoming: AutoStepPrepareResult<TContext, TData>
|
|
318
|
-
): AutoStepPrepareResult<TContext, TData> {
|
|
319
|
-
if (!base) return { ...incoming };
|
|
320
|
-
// AutoStepPrepareResult is a structural subset of Directive, so both
|
|
321
|
-
// sides flow through the canonical merge directly — no casts needed.
|
|
322
|
-
return flow.merge<TContext, TData>(base, incoming);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Evaluate branches on an auto-step. Returns the target step/flow id
|
|
327
|
-
* if a branch matches, or undefined if no branch matched.
|
|
328
|
-
*
|
|
329
|
-
* This is a simplified evaluator for code-only (`if`) branches.
|
|
330
|
-
* AI-evaluated (`when`) branches are not supported in the auto-step
|
|
331
|
-
* context (no LLM call). If a branch entry has only `when`, it is skipped.
|
|
332
|
-
*/
|
|
333
|
-
private async evaluateBranches(
|
|
334
|
-
branches: BranchMap<TContext, TData>,
|
|
335
|
-
session: SessionState<TData>,
|
|
336
|
-
context: TContext,
|
|
337
|
-
history: Event[]
|
|
338
|
-
): Promise<string | undefined> {
|
|
339
|
-
for (let i = 0; i < branches.length; i++) {
|
|
340
|
-
const entry = branches[i];
|
|
341
|
-
|
|
342
|
-
// Unconditional entry (no `if` and no `when`) — must be last, always matches
|
|
343
|
-
if (!entry.if && !entry.when) {
|
|
344
|
-
return this.resolveBranchThen(entry.then);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// Code predicate evaluation
|
|
348
|
-
if (entry.if) {
|
|
349
|
-
const predicateContext: BranchPredicateContext<TContext, TData> = {
|
|
350
|
-
data: session.data, context, session, history,
|
|
351
|
-
};
|
|
352
|
-
const allPassed = await evaluateIfPredicates<BranchPredicateContext<TContext, TData>>(
|
|
353
|
-
entry.if, predicateContext, "AutoChainExecutor"
|
|
354
|
-
);
|
|
355
|
-
if (!allPassed) continue;
|
|
356
|
-
|
|
357
|
-
// If entry also has `when`, skip it in auto-step context (no LLM available)
|
|
358
|
-
if (entry.when) {
|
|
359
|
-
logger.debug(
|
|
360
|
-
`[AutoChainExecutor] Branch entry has 'when' condition — ` +
|
|
361
|
-
`skipping AI evaluation in auto-step context`
|
|
362
|
-
);
|
|
363
|
-
continue;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
return this.resolveBranchThen(entry.then);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
// Entry has only `when` (AI condition) — skip in auto-step context
|
|
370
|
-
if (entry.when && !entry.if) {
|
|
371
|
-
continue;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
return undefined;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
/**
|
|
379
|
-
* Resolve a branch entry's `then` value to a string target.
|
|
380
|
-
* Handles both string targets and Directive objects.
|
|
381
|
-
*/
|
|
382
|
-
private resolveBranchThen(then: BranchEntry<TContext, TData>["then"]): string | undefined {
|
|
383
|
-
if (typeof then === 'string') {
|
|
384
|
-
return then;
|
|
385
|
-
}
|
|
386
|
-
// Directive object — extract position field (string or object form)
|
|
387
|
-
if (then && typeof then === 'object') {
|
|
388
|
-
if (then.goToStep) {
|
|
389
|
-
return typeof then.goToStep === 'string' ? then.goToStep : then.goToStep.step;
|
|
390
|
-
}
|
|
391
|
-
if (then.goTo) {
|
|
392
|
-
return typeof then.goTo === 'string' ? then.goTo : then.goTo.flow;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
return undefined;
|
|
396
|
-
}
|
|
397
|
-
}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Branch Evaluator — Resolution Algorithm (Algorithm 2 from design.md)
|
|
3
|
-
*
|
|
4
|
-
* Pure function that evaluates a BranchMap in declaration order.
|
|
5
|
-
* Code-first evaluation: `if` predicates run before `when` (AI) conditions
|
|
6
|
-
* to save tokens. First matching entry wins.
|
|
7
|
-
*
|
|
8
|
-
* @module BranchEvaluator
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type {
|
|
12
|
-
BranchMap,
|
|
13
|
-
BranchPredicateContext,
|
|
14
|
-
Directive,
|
|
15
|
-
} from "../types/flow.js";
|
|
16
|
-
import type { AiProvider } from "../types/ai.js";
|
|
17
|
-
import type { Event } from "../types/history.js";
|
|
18
|
-
import { eventsToHistory, logger } from "../utils/index.js";
|
|
19
|
-
import { splitWhenConditions, evaluateIfPredicates, type WhenConditionGroups } from "../utils/condition.js";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* The AI condition evaluator function signature.
|
|
23
|
-
* Accepts split condition strings and returns whether the condition passes:
|
|
24
|
-
* (no positives OR any positive is satisfied) AND no exclusion is satisfied.
|
|
25
|
-
*
|
|
26
|
-
* This is the same evaluation mechanism used by `step.when` — condition
|
|
27
|
-
* strings are evaluated by the AI provider against the conversation context.
|
|
28
|
-
*/
|
|
29
|
-
export type AiConditionEvaluator = (conditions: WhenConditionGroups) => Promise<boolean>;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Creates an `AiConditionEvaluator` bound to a provider and conversation context.
|
|
33
|
-
*
|
|
34
|
-
* Reuses the same evaluation pattern as `step.when` array forms: condition
|
|
35
|
-
* strings are passed to the AI provider for evaluation against the conversation
|
|
36
|
-
* history. No new prompt scaffolding — the provider evaluates whether the
|
|
37
|
-
* conditions are met based on the conversation so far.
|
|
38
|
-
*
|
|
39
|
-
* String form (`when: "some condition"`) is normalized to a single-element
|
|
40
|
-
* array by the caller (`evaluateBranches`) for uniformity before reaching
|
|
41
|
-
* this function.
|
|
42
|
-
*
|
|
43
|
-
* @param provider - The AI provider to use for condition evaluation
|
|
44
|
-
* @param history - Conversation history (events) for context
|
|
45
|
-
* @param context - Agent-level context
|
|
46
|
-
* @returns An `AiConditionEvaluator` function
|
|
47
|
-
*/
|
|
48
|
-
export function createAiConditionEvaluator<TContext = unknown>(
|
|
49
|
-
provider: AiProvider,
|
|
50
|
-
history: Event[],
|
|
51
|
-
context: TContext,
|
|
52
|
-
): AiConditionEvaluator {
|
|
53
|
-
return async (conditions: WhenConditionGroups): Promise<boolean> => {
|
|
54
|
-
if (conditions.positive.length === 0 && conditions.negative.length === 0) {
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const positiveText = conditions.positive.length === 0
|
|
59
|
-
? "None. Treat the positive side as satisfied unless an exclusion matches."
|
|
60
|
-
: conditions.positive.map((c, i) => `${i + 1}. ${c}`).join("\n");
|
|
61
|
-
const negativeText = conditions.negative.length === 0
|
|
62
|
-
? "None."
|
|
63
|
-
: conditions.negative.map((c, i) => `${i + 1}. ${c}`).join("\n");
|
|
64
|
-
|
|
65
|
-
const prompt = [
|
|
66
|
-
"Evaluate whether the following condition rule passes based on the conversation so far.",
|
|
67
|
-
"",
|
|
68
|
-
"Positive condition(s) (OR):",
|
|
69
|
-
positiveText,
|
|
70
|
-
"",
|
|
71
|
-
"Exclusion condition(s) (OR, any match inhibits):",
|
|
72
|
-
negativeText,
|
|
73
|
-
"",
|
|
74
|
-
"Return JSON with a single boolean field `result`: true only when (there are no positive conditions OR ANY positive condition is satisfied) AND NO exclusion condition is satisfied.",
|
|
75
|
-
].join("\n");
|
|
76
|
-
|
|
77
|
-
const result = await provider.generateMessage<TContext, { result: boolean }>({
|
|
78
|
-
prompt,
|
|
79
|
-
history: eventsToHistory(history),
|
|
80
|
-
context,
|
|
81
|
-
parameters: {
|
|
82
|
-
jsonSchema: {
|
|
83
|
-
type: "object",
|
|
84
|
-
properties: {
|
|
85
|
-
result: {
|
|
86
|
-
type: "boolean",
|
|
87
|
-
description: "Whether the positive/exclusion condition rule passes based on the conversation context",
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
required: ["result"],
|
|
91
|
-
additionalProperties: false,
|
|
92
|
-
},
|
|
93
|
-
schemaName: "condition_evaluation",
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
return result.structured?.result ?? false;
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Evaluates a BranchMap in declaration order, returning the first matching
|
|
103
|
-
* entry's `then` value, or `undefined` if no entry matches.
|
|
104
|
-
*
|
|
105
|
-
* Resolution rules per entry:
|
|
106
|
-
* 1. Unconditional (no `when`, no `if`) → return `then` immediately.
|
|
107
|
-
* 2. `if` first: normalize to array, await each predicate, short-circuit on first falsy.
|
|
108
|
-
* 3. `when` second: only if `if` passed (or absent); call evaluateAi with condition strings.
|
|
109
|
-
* 4. Both passed (or only one set and it passed) → return `then`.
|
|
110
|
-
*
|
|
111
|
-
* Errors in predicates or AI evaluation are caught, logged at ERROR, and
|
|
112
|
-
* cause `evaluateBranches` to return `undefined` (graceful degradation).
|
|
113
|
-
*/
|
|
114
|
-
export async function evaluateBranches<TContext = unknown, TData = unknown>(
|
|
115
|
-
branches: BranchMap<TContext, TData>,
|
|
116
|
-
ctx: BranchPredicateContext<TContext, TData>,
|
|
117
|
-
evaluateAi: AiConditionEvaluator,
|
|
118
|
-
): Promise<string | Directive<TContext, TData> | undefined> {
|
|
119
|
-
try {
|
|
120
|
-
for (let i = 0; i < branches.length; i++) {
|
|
121
|
-
const entry = branches[i];
|
|
122
|
-
|
|
123
|
-
// Unconditional fallback: entry has neither `when` nor `if`.
|
|
124
|
-
// Validation guarantees this is the LAST entry.
|
|
125
|
-
if (!entry.when && !entry.if) {
|
|
126
|
-
return entry.then;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Code predicate first (free evaluation)
|
|
130
|
-
if (entry.if) {
|
|
131
|
-
const ifPassed = await evaluateIfPredicates<BranchPredicateContext<TContext, TData>>(
|
|
132
|
-
entry.if, ctx, "BranchEvaluator"
|
|
133
|
-
);
|
|
134
|
-
if (!ifPassed) {
|
|
135
|
-
continue; // skip this entry; do NOT evaluate `when`
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// AI condition (costs tokens — only reached if `if` passed or was absent)
|
|
140
|
-
if (entry.when) {
|
|
141
|
-
const conditions = splitWhenConditions(entry.when);
|
|
142
|
-
|
|
143
|
-
const aiResult = await evaluateAi(conditions);
|
|
144
|
-
if (!aiResult) {
|
|
145
|
-
continue; // skip this entry
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Both passed (or only one was set and it passed)
|
|
150
|
-
return entry.then;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// No entry matched
|
|
154
|
-
return undefined;
|
|
155
|
-
} catch (error) {
|
|
156
|
-
logger.error(
|
|
157
|
-
`[BranchEvaluator] Error during branch evaluation: ${error instanceof Error ? error.message : String(error)}`
|
|
158
|
-
);
|
|
159
|
-
return undefined;
|
|
160
|
-
}
|
|
161
|
-
}
|