@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
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma Store over a generated Prisma client.
|
|
3
|
+
*
|
|
4
|
+
* The model (default `agentSession`) needs five fields, renameable through
|
|
5
|
+
* `fieldMappings.sessions`:
|
|
6
|
+
*
|
|
7
|
+
* ```prisma
|
|
8
|
+
* model AgentSession {
|
|
9
|
+
* id String @id
|
|
10
|
+
* version Int
|
|
11
|
+
* blob Json
|
|
12
|
+
* createdAt DateTime @default(now())
|
|
13
|
+
* updatedAt DateTime @updatedAt
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* A first save is `create`, and Prisma's unique violation (`P2002`) is the
|
|
18
|
+
* conflict; later saves are `updateMany` filtered on `{ id, version }`, and
|
|
19
|
+
* `count === 0` is the conflict. 3.x read, checked and wrote in three steps
|
|
20
|
+
* and tolerated a model without `version`; neither survives.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { isRecord } from "../utils/json.js";
|
|
24
|
+
import { SessionConflictError } from "../types/errors.js";
|
|
25
|
+
import type { Session, Store } from "../types/session.js";
|
|
26
|
+
import { readBlob, toBlob } from "./sessionRow.js";
|
|
27
|
+
|
|
28
|
+
/** The delegate a generated client exposes per model. */
|
|
29
|
+
export interface PrismaSessionModel {
|
|
30
|
+
create(params: { data: Record<string, unknown> }): Promise<Record<string, unknown>>;
|
|
31
|
+
findUnique(params: { where: Record<string, unknown> }): Promise<Record<string, unknown> | null>;
|
|
32
|
+
updateMany(params: { where: Record<string, unknown>; data: Record<string, unknown> }): Promise<{ count: number }>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Matches a generated Prisma client: model delegates by name, plus `$disconnect`. */
|
|
36
|
+
export interface PrismaClient {
|
|
37
|
+
[model: string]: unknown;
|
|
38
|
+
$disconnect?: () => Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type PrismaSessionField = "id" | "version" | "blob" | "createdAt" | "updatedAt";
|
|
42
|
+
|
|
43
|
+
export interface PrismaStoreOptions {
|
|
44
|
+
prisma: PrismaClient;
|
|
45
|
+
/** Model name on the client. Default `agentSession`. */
|
|
46
|
+
tables?: { sessions?: string };
|
|
47
|
+
/** Field names when the model uses other names. */
|
|
48
|
+
fieldMappings?: { sessions?: Partial<Record<PrismaSessionField, string>> };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export class PrismaStore<D = unknown> implements Store<D> {
|
|
52
|
+
private readonly prisma: PrismaClient;
|
|
53
|
+
private readonly model: PrismaSessionModel;
|
|
54
|
+
private readonly field: Record<PrismaSessionField, string>;
|
|
55
|
+
|
|
56
|
+
constructor(options: PrismaStoreOptions) {
|
|
57
|
+
const name = options.tables?.sessions ?? "agentSession";
|
|
58
|
+
const model = options.prisma[name];
|
|
59
|
+
if (!isSessionModel(model)) {
|
|
60
|
+
throw new TypeError(
|
|
61
|
+
`[TypeError] PrismaStore cannot use model "${name}": the client has no such delegate with create, findUnique and updateMany. ` +
|
|
62
|
+
`Add the model to schema.prisma and run prisma generate, or pass tables.sessions with its name.`,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
this.prisma = options.prisma;
|
|
66
|
+
this.model = model;
|
|
67
|
+
const custom = options.fieldMappings?.sessions ?? {};
|
|
68
|
+
this.field = {
|
|
69
|
+
id: custom.id ?? "id",
|
|
70
|
+
version: custom.version ?? "version",
|
|
71
|
+
blob: custom.blob ?? "blob",
|
|
72
|
+
createdAt: custom.createdAt ?? "createdAt",
|
|
73
|
+
updatedAt: custom.updatedAt ?? "updatedAt",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async disconnect(): Promise<void> {
|
|
78
|
+
await this.prisma.$disconnect?.();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async load(id: string): Promise<Session<D> | null> {
|
|
82
|
+
const row = await this.model.findUnique({ where: { [this.field.id]: id } });
|
|
83
|
+
return row ? readBlob<D>(row[this.field.blob], id) : null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
|
|
87
|
+
const next = expectedVersion + 1;
|
|
88
|
+
const blob = toBlob(session, next);
|
|
89
|
+
const now = new Date();
|
|
90
|
+
const { field } = this;
|
|
91
|
+
if (expectedVersion === 0) {
|
|
92
|
+
try {
|
|
93
|
+
await this.model.create({
|
|
94
|
+
data: { [field.id]: session.id, [field.version]: next, [field.blob]: blob, [field.createdAt]: now, [field.updatedAt]: now },
|
|
95
|
+
});
|
|
96
|
+
} catch (error) {
|
|
97
|
+
if (!isUniqueViolation(error)) throw error;
|
|
98
|
+
throw new SessionConflictError(session.id, 0, await this.storedVersion(session.id));
|
|
99
|
+
}
|
|
100
|
+
return blob;
|
|
101
|
+
}
|
|
102
|
+
const { count } = await this.model.updateMany({
|
|
103
|
+
where: { [field.id]: session.id, [field.version]: expectedVersion },
|
|
104
|
+
data: { [field.version]: next, [field.blob]: blob, [field.updatedAt]: now },
|
|
105
|
+
});
|
|
106
|
+
if (count === 0) throw new SessionConflictError(session.id, expectedVersion, await this.storedVersion(session.id));
|
|
107
|
+
return blob;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private async storedVersion(id: string): Promise<number | undefined> {
|
|
111
|
+
const row = await this.model.findUnique({ where: { [this.field.id]: id } });
|
|
112
|
+
const version = row?.[this.field.version];
|
|
113
|
+
return typeof version === "number" ? version : undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function isSessionModel(value: unknown): value is PrismaSessionModel {
|
|
118
|
+
return (
|
|
119
|
+
isRecord(value) &&
|
|
120
|
+
typeof value.create === "function" &&
|
|
121
|
+
typeof value.findUnique === "function" &&
|
|
122
|
+
typeof value.updateMany === "function"
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Prisma's `PrismaClientKnownRequestError` for a unique constraint hit. */
|
|
127
|
+
const isUniqueViolation = (error: unknown): boolean => isRecord(error) && error.code === "P2002";
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis Store over an ioredis-shaped client.
|
|
3
|
+
*
|
|
4
|
+
* One hash per session at `${keyPrefix}session:${id}` with the fields
|
|
5
|
+
* `version`, `blob` (the v4 session as JSON text), `createdAt`, `updatedAt`.
|
|
6
|
+
* The compare-and-swap is one Lua script, so two writers on a shared client
|
|
7
|
+
* cannot interleave between the read and the write (3.x checked, then set;
|
|
8
|
+
* WATCH/MULTI would not do either, since WATCH is per connection).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { SessionConflictError } from "../types/errors.js";
|
|
12
|
+
import type { Session, Store } from "../types/session.js";
|
|
13
|
+
import { readBlob, toBlob } from "./sessionRow.js";
|
|
14
|
+
|
|
15
|
+
/** Matches ioredis. node-redis users wrap `eval` to this positional form. */
|
|
16
|
+
export interface RedisClient {
|
|
17
|
+
hgetall(key: string): Promise<Record<string, string>>;
|
|
18
|
+
eval(script: string, numKeys: number, ...args: (string | number)[]): Promise<unknown>;
|
|
19
|
+
quit(): Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface RedisStoreOptions {
|
|
23
|
+
redis: RedisClient;
|
|
24
|
+
/** Prefix of every key. Default `agent:`. */
|
|
25
|
+
keyPrefix?: string;
|
|
26
|
+
/** Seconds a session lives after its last save; `0` keeps it forever. Default 7 days. */
|
|
27
|
+
sessionTTL?: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* KEYS[1] the session hash; ARGV: expected version, next version, blob, now, ttl.
|
|
32
|
+
* Returns nil on success, the stored version on a conflict, `missing` when
|
|
33
|
+
* the hash is gone.
|
|
34
|
+
*/
|
|
35
|
+
const CAS_SCRIPT = `
|
|
36
|
+
local current = redis.call('HGET', KEYS[1], 'version')
|
|
37
|
+
if ARGV[1] == '0' then
|
|
38
|
+
if current then return current end
|
|
39
|
+
elseif current ~= ARGV[1] then
|
|
40
|
+
return current or 'missing'
|
|
41
|
+
end
|
|
42
|
+
redis.call('HSET', KEYS[1], 'version', ARGV[2], 'blob', ARGV[3], 'updatedAt', ARGV[4])
|
|
43
|
+
redis.call('HSETNX', KEYS[1], 'createdAt', ARGV[4])
|
|
44
|
+
if tonumber(ARGV[5]) > 0 then redis.call('EXPIRE', KEYS[1], ARGV[5]) end
|
|
45
|
+
return nil
|
|
46
|
+
`;
|
|
47
|
+
|
|
48
|
+
export class RedisStore<D = unknown> implements Store<D> {
|
|
49
|
+
private readonly redis: RedisClient;
|
|
50
|
+
private readonly keyPrefix: string;
|
|
51
|
+
private readonly ttl: number;
|
|
52
|
+
|
|
53
|
+
constructor(options: RedisStoreOptions) {
|
|
54
|
+
this.redis = options.redis;
|
|
55
|
+
this.keyPrefix = options.keyPrefix ?? "agent:";
|
|
56
|
+
this.ttl = options.sessionTTL ?? 7 * 24 * 60 * 60;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async disconnect(): Promise<void> {
|
|
60
|
+
await this.redis.quit();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async load(id: string): Promise<Session<D> | null> {
|
|
64
|
+
const row = await this.redis.hgetall(this.key(id));
|
|
65
|
+
if (Object.keys(row).length === 0) return null;
|
|
66
|
+
return readBlob<D>(row.blob, id);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
|
|
70
|
+
const next = expectedVersion + 1;
|
|
71
|
+
const blob = toBlob(session, next);
|
|
72
|
+
const result = await this.redis.eval(
|
|
73
|
+
CAS_SCRIPT,
|
|
74
|
+
1,
|
|
75
|
+
this.key(session.id),
|
|
76
|
+
String(expectedVersion),
|
|
77
|
+
String(next),
|
|
78
|
+
JSON.stringify(blob),
|
|
79
|
+
new Date().toISOString(),
|
|
80
|
+
String(this.ttl),
|
|
81
|
+
);
|
|
82
|
+
if (result === null || result === undefined) return blob;
|
|
83
|
+
const actual = typeof result === "string" && result !== "missing" ? Number(result) : undefined;
|
|
84
|
+
throw new SessionConflictError(session.id, expectedVersion, actual);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private key(id: string): string {
|
|
88
|
+
return `${this.keyPrefix}session:${id}`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Store over a better-sqlite3-shaped database (bun:sqlite fits too).
|
|
3
|
+
*
|
|
4
|
+
* One row per session: `id`, `version`, `blob` (the v4 session as JSON text),
|
|
5
|
+
* `created_at`, `updated_at`. The compare-and-swap is the statement itself:
|
|
6
|
+
* `INSERT OR IGNORE` for a first save, `UPDATE … WHERE version = ?` after,
|
|
7
|
+
* and `changes === 0` means someone else got there first.
|
|
8
|
+
*
|
|
9
|
+
* A 3.x `agent_sessions` table has different columns. Point `tables.sessions`
|
|
10
|
+
* at a fresh table; 3.x blobs move through `migrateSession` at the host's
|
|
11
|
+
* choke point, not through this table.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { SessionConflictError } from "../types/errors.js";
|
|
15
|
+
import type { Session, Store } from "../types/session.js";
|
|
16
|
+
import { asPromise, readBlob, toBlob } from "./sessionRow.js";
|
|
17
|
+
|
|
18
|
+
/** Matches better-sqlite3 and bun:sqlite statements. */
|
|
19
|
+
export interface SqliteStatement {
|
|
20
|
+
run(...params: unknown[]): { changes: number };
|
|
21
|
+
get(...params: unknown[]): unknown;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Matches better-sqlite3 and bun:sqlite databases. */
|
|
25
|
+
export interface SqliteDatabase {
|
|
26
|
+
prepare(sql: string): SqliteStatement;
|
|
27
|
+
exec(sql: string): unknown;
|
|
28
|
+
close(): void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface SQLiteStoreOptions {
|
|
32
|
+
db: SqliteDatabase;
|
|
33
|
+
/** Table name. Default `agent_sessions`. */
|
|
34
|
+
tables?: { sessions?: string };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export class SQLiteStore<D = unknown> implements Store<D> {
|
|
38
|
+
private readonly db: SqliteDatabase;
|
|
39
|
+
private readonly table: string;
|
|
40
|
+
|
|
41
|
+
constructor(options: SQLiteStoreOptions) {
|
|
42
|
+
this.db = options.db;
|
|
43
|
+
this.table = options.tables?.sessions ?? "agent_sessions";
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Create the table when it is missing. */
|
|
47
|
+
initialize(): Promise<void> {
|
|
48
|
+
return asPromise(() => {
|
|
49
|
+
this.db.exec(
|
|
50
|
+
`CREATE TABLE IF NOT EXISTS ${this.table} (
|
|
51
|
+
id TEXT PRIMARY KEY,
|
|
52
|
+
version INTEGER NOT NULL,
|
|
53
|
+
blob TEXT NOT NULL,
|
|
54
|
+
created_at TEXT NOT NULL,
|
|
55
|
+
updated_at TEXT NOT NULL
|
|
56
|
+
)`,
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
disconnect(): Promise<void> {
|
|
62
|
+
return asPromise(() => this.db.close());
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
load(id: string): Promise<Session<D> | null> {
|
|
66
|
+
return asPromise(() => {
|
|
67
|
+
const row = this.db.prepare(`SELECT blob FROM ${this.table} WHERE id = ?`).get(id);
|
|
68
|
+
if (row === undefined || row === null) return null;
|
|
69
|
+
return readBlob<D>(column(row, "blob"), id);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
save(session: Session<D>, expectedVersion: number): Promise<Session<D>> {
|
|
74
|
+
return asPromise(() => {
|
|
75
|
+
const next = expectedVersion + 1;
|
|
76
|
+
const blob = toBlob(session, next);
|
|
77
|
+
const json = JSON.stringify(blob);
|
|
78
|
+
const now = new Date().toISOString();
|
|
79
|
+
const result =
|
|
80
|
+
expectedVersion === 0
|
|
81
|
+
? this.db
|
|
82
|
+
.prepare(
|
|
83
|
+
`INSERT OR IGNORE INTO ${this.table} (id, version, blob, created_at, updated_at) VALUES (?, ?, ?, ?, ?)`,
|
|
84
|
+
)
|
|
85
|
+
.run(session.id, next, json, now, now)
|
|
86
|
+
: this.db
|
|
87
|
+
.prepare(`UPDATE ${this.table} SET version = ?, blob = ?, updated_at = ? WHERE id = ? AND version = ?`)
|
|
88
|
+
.run(next, json, now, session.id, expectedVersion);
|
|
89
|
+
if (result.changes === 0) throw new SessionConflictError(session.id, expectedVersion, this.storedVersion(session.id));
|
|
90
|
+
return blob;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
private storedVersion(id: string): number | undefined {
|
|
95
|
+
const row = this.db.prepare(`SELECT version FROM ${this.table} WHERE id = ?`).get(id);
|
|
96
|
+
const version = row === undefined || row === null ? undefined : column(row, "version");
|
|
97
|
+
return typeof version === "number" ? version : undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function column(row: unknown, name: string): unknown {
|
|
102
|
+
return typeof row === "object" && row !== null && name in row ? (row as Record<string, unknown>)[name] : undefined;
|
|
103
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What every store writes and reads: the v4 session blob, and nothing else.
|
|
3
|
+
* One place so the seven stores cannot drift on what a row means.
|
|
4
|
+
* PostgreSQL hands JSONB back parsed, SQLite and Redis hand back text; both
|
|
5
|
+
* arrive here.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { assertSession, InvalidSessionError } from "../core/Migrate.js";
|
|
9
|
+
import type { Session } from "../types/session.js";
|
|
10
|
+
|
|
11
|
+
/** The blob to persist, stamped with the version it is saved as. Optional keys are written only when set. */
|
|
12
|
+
export function toBlob<D>(session: Session<D>, version: number): Session<D> {
|
|
13
|
+
const blob: Session<D> = {
|
|
14
|
+
id: session.id,
|
|
15
|
+
v: 4,
|
|
16
|
+
version,
|
|
17
|
+
data: session.data,
|
|
18
|
+
runs: session.runs,
|
|
19
|
+
claims: session.claims,
|
|
20
|
+
inputs: session.inputs,
|
|
21
|
+
metadata: session.metadata,
|
|
22
|
+
};
|
|
23
|
+
if (session.lastUserAt !== undefined) blob.lastUserAt = session.lastUserAt;
|
|
24
|
+
if (session.lastAssistantAt !== undefined) blob.lastAssistantAt = session.lastAssistantAt;
|
|
25
|
+
if (session.history !== undefined) blob.history = session.history;
|
|
26
|
+
return blob;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A stored blob (parsed, or JSON text) back to a Session. Anything not v4-shaped throws. */
|
|
30
|
+
export function readBlob<D>(raw: unknown, sessionId: string): Session<D> {
|
|
31
|
+
let blob: unknown = raw;
|
|
32
|
+
if (typeof raw === "string") {
|
|
33
|
+
try {
|
|
34
|
+
blob = JSON.parse(raw);
|
|
35
|
+
} catch {
|
|
36
|
+
throw new InvalidSessionError(sessionId, "blob is not valid JSON");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return assertSession<D>(blob, sessionId);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Runs synchronous store work as a promise, so a thrown error is a rejection like everywhere else. */
|
|
43
|
+
export function asPromise<T>(work: () => T): Promise<T> {
|
|
44
|
+
return new Promise((resolve) => resolve(work()));
|
|
45
|
+
}
|
|
@@ -43,7 +43,8 @@ export class DeepSeekProvider extends OpenAICompatibleProvider {
|
|
|
43
43
|
public readonly name = "deepseek";
|
|
44
44
|
public readonly capabilities: ProviderCapabilities = {
|
|
45
45
|
supportsTools: true,
|
|
46
|
-
|
|
46
|
+
// JSON yes, a schema no — see `structuredOutput` below.
|
|
47
|
+
supportsNativeJsonSchema: false,
|
|
47
48
|
supportsStreaming: true,
|
|
48
49
|
supportsStreamingToolCalls: true,
|
|
49
50
|
supportsPromptCaching: true,
|
|
@@ -60,8 +61,12 @@ export class DeepSeekProvider extends OpenAICompatibleProvider {
|
|
|
60
61
|
apiKey: options.apiKey,
|
|
61
62
|
baseUrl: options.baseURL ?? "https://api.deepseek.com",
|
|
62
63
|
model: options.model,
|
|
63
|
-
//
|
|
64
|
-
|
|
64
|
+
// DeepSeek serves `response_format: { type: 'json_object' }` and nothing
|
|
65
|
+
// else: a `json_schema` format answers
|
|
66
|
+
// `400 "This response_format type is unavailable now"` on every call.
|
|
67
|
+
// So the endpoint guarantees JSON and the prompt carries the shape, which
|
|
68
|
+
// is the path the parser already tolerates.
|
|
69
|
+
structuredOutput: "json_object",
|
|
65
70
|
...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
|
|
66
71
|
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
67
72
|
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* hits and the thinking levels are all in `@providerkit/core`, written against
|
|
6
6
|
* the REST API rather than the SDK.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* On Gemini 3 a response schema and tools travel on the same call. On Gemini 2
|
|
9
|
+
* they cannot: the API answers `400 "Function calling with a response mime
|
|
10
|
+
* type: 'application/json' is unsupported"`, so the schema rides in the prompt
|
|
11
|
+
* instead. `@providerkit/core` reads the model id and picks; nothing to set.
|
|
11
12
|
*/
|
|
12
13
|
|
|
13
14
|
import { createGeminiProvider, type FallbackOptions, type Provider } from "@providerkit/core";
|
|
@@ -52,6 +52,10 @@ export interface OpenAICompatibleProviderInit
|
|
|
52
52
|
/** Names the provider in errors, and picks core's effort dialect. */
|
|
53
53
|
id: string;
|
|
54
54
|
headers?: Record<string, string>;
|
|
55
|
+
/** App attribution for OpenRouter's rankings — sent as `HTTP-Referer`. */
|
|
56
|
+
siteUrl?: string;
|
|
57
|
+
/** App name for OpenRouter's rankings — sent as `X-Title`. */
|
|
58
|
+
siteName?: string;
|
|
55
59
|
config?: RequestConfig;
|
|
56
60
|
structuredOutput?: StructuredOutputMode;
|
|
57
61
|
/** See {@link JsonWithTools}. Only affects calls that carry tools. */
|
|
@@ -101,6 +105,8 @@ function buildProvider(init: OpenAICompatibleProviderInit, mode: StructuredOutpu
|
|
|
101
105
|
...(init.jsonWithTools ? { jsonWithTools: init.jsonWithTools } : {}),
|
|
102
106
|
...(init.baseUrl ? { baseUrl: init.baseUrl } : {}),
|
|
103
107
|
...(init.headers ? { headers: init.headers } : {}),
|
|
108
|
+
...(init.siteUrl ? { siteUrl: init.siteUrl } : {}),
|
|
109
|
+
...(init.siteName ? { siteName: init.siteName } : {}),
|
|
104
110
|
...(init.config?.maxTokens ? { maxTokens: init.config.maxTokens } : {}),
|
|
105
111
|
...(init.config?.effort ? { effort: init.config.effort } : {}),
|
|
106
112
|
...(init.providerOrder ? { providerOrder: init.providerOrder } : {}),
|
|
@@ -71,10 +71,8 @@ export class OpenRouterProvider extends OpenAICompatibleProvider {
|
|
|
71
71
|
// json_schema passthrough is what its models actually support.
|
|
72
72
|
structuredOutput: "json_schema",
|
|
73
73
|
...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
...(options.siteName ? { "X-Title": options.siteName } : {}),
|
|
77
|
-
},
|
|
74
|
+
...(options.siteUrl ? { siteUrl: options.siteUrl } : {}),
|
|
75
|
+
...(options.siteName ? { siteName: options.siteName } : {}),
|
|
78
76
|
...(options.providerOrder ? { providerOrder: options.providerOrder } : {}),
|
|
79
77
|
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
80
78
|
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
@@ -22,6 +22,8 @@ import {
|
|
|
22
22
|
ProviderError,
|
|
23
23
|
classify,
|
|
24
24
|
isBackupEligible,
|
|
25
|
+
isCompleteJson,
|
|
26
|
+
parseToolArgs,
|
|
25
27
|
probeJsonWithTools,
|
|
26
28
|
requireContent,
|
|
27
29
|
streamWatch,
|
|
@@ -99,11 +101,16 @@ export interface RequestConfig {
|
|
|
99
101
|
maxTokens?: number;
|
|
100
102
|
stopSequences?: string[];
|
|
101
103
|
/**
|
|
102
|
-
* How hard the model thinks, bound as this provider's default.
|
|
103
|
-
* the
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
104
|
+
* How hard the model thinks, bound as this provider's default. What absent
|
|
105
|
+
* means is the shape's own business, not one rule: on Gemini it is the
|
|
106
|
+
* model's dynamic thinking; on the OpenAI and OpenRouter dialects nothing is
|
|
107
|
+
* sent and not thinking is the default anyway; on the Anthropic shape — so
|
|
108
|
+
* `AnthropicProvider` and `ZaiProvider` — `@providerkit/core` resolves an
|
|
109
|
+
* absent effort to `"none"`, and Z.ai is sent an explicit disabled marker
|
|
110
|
+
* because its endpoint reads silence as thinking ON. Set a level to ask for
|
|
111
|
+
* thinking where it is off; it matters most under a small `maxTokens`, where
|
|
112
|
+
* thinking tokens come out of the same budget as the answer and can consume
|
|
113
|
+
* all of it.
|
|
107
114
|
*/
|
|
108
115
|
effort?: Effort;
|
|
109
116
|
}
|
|
@@ -145,8 +152,13 @@ function shouldTryBackup(error: unknown): boolean {
|
|
|
145
152
|
}
|
|
146
153
|
|
|
147
154
|
/** History plus the composed prompt, as the seam's messages. */
|
|
148
|
-
export function toMessages(history: HistoryItem[], prompt: string): ChatMessage[] {
|
|
155
|
+
export function toMessages(history: HistoryItem[], prompt: string, system?: string): ChatMessage[] {
|
|
149
156
|
const out: ChatMessage[] = [];
|
|
157
|
+
// First, and before any history: a cached prefix is only a prefix if nothing
|
|
158
|
+
// precedes it. Anthropic-shape hoists every system item into one top-level
|
|
159
|
+
// block, so a host that also puts system items in its history joins them to
|
|
160
|
+
// this one — fine while those are stable, and the host's to keep stable.
|
|
161
|
+
if (system?.trim()) out.push({ role: "system", content: system });
|
|
150
162
|
for (const item of history) {
|
|
151
163
|
switch (item.role) {
|
|
152
164
|
case "system":
|
|
@@ -159,6 +171,11 @@ export function toMessages(history: HistoryItem[], prompt: string): ChatMessage[
|
|
|
159
171
|
out.push({
|
|
160
172
|
role: "assistant",
|
|
161
173
|
content: item.content ?? "",
|
|
174
|
+
// Anthropic-shape drops these on purpose (its thinking blocks are
|
|
175
|
+
// signed); OpenAI-shape replays them, which is what DeepSeek and the
|
|
176
|
+
// GLM endpoints require on a turn that called a tool.
|
|
177
|
+
...(item.reasoning ? { reasoning: item.reasoning } : {}),
|
|
178
|
+
...(item.reasoningDetails?.length ? { reasoningDetails: item.reasoningDetails } : {}),
|
|
162
179
|
...(item.tool_calls?.length
|
|
163
180
|
? {
|
|
164
181
|
toolCalls: item.tool_calls.map((call) => ({
|
|
@@ -212,6 +229,8 @@ function toJsonOutput(input: GenerateMessageInput<unknown>): StreamOptions["json
|
|
|
212
229
|
interface Accumulator {
|
|
213
230
|
text: string;
|
|
214
231
|
model: string;
|
|
232
|
+
reasoning: string;
|
|
233
|
+
reasoningDetails?: unknown[];
|
|
215
234
|
finishReason?: string;
|
|
216
235
|
promptTokens?: number;
|
|
217
236
|
completionTokens?: number;
|
|
@@ -229,6 +248,8 @@ function fold(acc: Accumulator, chunk: ProviderChunk): string {
|
|
|
229
248
|
acc.cachedInputTokens = chunk.usage.cachedInputTokens;
|
|
230
249
|
}
|
|
231
250
|
if (chunk.finishReason) acc.finishReason = chunk.finishReason;
|
|
251
|
+
if (chunk.reasoning) acc.reasoning += chunk.reasoning;
|
|
252
|
+
if (chunk.reasoningDetails?.length) acc.reasoningDetails = chunk.reasoningDetails;
|
|
232
253
|
for (const call of chunk.toolCalls ?? []) {
|
|
233
254
|
const entry = acc.calls.get(call.index) ?? { name: "", arguments: "" };
|
|
234
255
|
if (call.name) entry.name = call.name;
|
|
@@ -246,11 +267,18 @@ function toolCallsOf(acc: Accumulator, label: string): ToolCallList {
|
|
|
246
267
|
const out: ToolCallList = [];
|
|
247
268
|
for (const [, entry] of [...acc.calls.entries()].sort(([a], [b]) => a - b)) {
|
|
248
269
|
if (!entry.name) continue;
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
270
|
+
// Arguments arrive in fragments and the last one can be cut: a stream that
|
|
271
|
+
// ended early, a model at its `max_tokens`, a gateway that double-escaped.
|
|
272
|
+
// `JSON.parse` on that string throws, and the tool then ran with NOTHING —
|
|
273
|
+
// a lookup with no id, a send with no recipient, behind one warn line.
|
|
274
|
+
// `parseToolArgs` recovers what the model did send, closing an open string
|
|
275
|
+
// rather than dropping it — so a cut value arrives short instead of absent,
|
|
276
|
+
// and the tool's own `validateInput` decides whether that is enough.
|
|
277
|
+
const args = entry.arguments ? parseToolArgs(entry.arguments) : {};
|
|
278
|
+
if (entry.arguments && !isCompleteJson(entry.arguments)) {
|
|
279
|
+
logger.warn(
|
|
280
|
+
`[${label}] ${entry.name}: arguments were cut mid-stream; kept ${Object.keys(args).length} field(s).`,
|
|
281
|
+
);
|
|
254
282
|
}
|
|
255
283
|
out.push({ toolName: entry.name, arguments: args });
|
|
256
284
|
}
|
|
@@ -333,10 +361,10 @@ export abstract class ProviderAdapter implements AiProvider {
|
|
|
333
361
|
async *generateMessageStream<TContext = unknown, TStructured = AgentStructuredResponse>(
|
|
334
362
|
input: GenerateMessageInput<TContext>,
|
|
335
363
|
): AsyncGenerator<GenerateMessageStreamChunk<TStructured>> {
|
|
336
|
-
const messages = toMessages(input.history, input.prompt);
|
|
364
|
+
const messages = toMessages(input.history, input.prompt, input.system);
|
|
337
365
|
const tools = toTools(input.tools);
|
|
338
366
|
const json = toJsonOutput(input);
|
|
339
|
-
const acc: Accumulator = { text: "", model: this.primaryModel, calls: new Map() };
|
|
367
|
+
const acc: Accumulator = { text: "", model: this.primaryModel, reasoning: "", calls: new Map() };
|
|
340
368
|
|
|
341
369
|
const opts: StreamOptions = {
|
|
342
370
|
...this.defaults,
|
|
@@ -409,10 +437,15 @@ export abstract class ProviderAdapter implements AiProvider {
|
|
|
409
437
|
const text = json && !structured && isJSONShaped(acc.text) ? "" : acc.text;
|
|
410
438
|
|
|
411
439
|
if (toolCalls.length > 0) {
|
|
440
|
+
// The reasoning rides out with the tool calls it produced. A thinking
|
|
441
|
+
// provider rejects the next round when the assistant turn that called the
|
|
442
|
+
// tool comes back without it, so the caller has to be able to replay it.
|
|
412
443
|
structured = {
|
|
413
444
|
...(structured ?? {}),
|
|
414
445
|
message: (structured as AgentStructuredResponse | undefined)?.message || text,
|
|
415
446
|
toolCalls,
|
|
447
|
+
...(acc.reasoning ? { reasoning: acc.reasoning } : {}),
|
|
448
|
+
...(acc.reasoningDetails ? { reasoningDetails: acc.reasoningDetails } : {}),
|
|
416
449
|
} as TStructured;
|
|
417
450
|
}
|
|
418
451
|
|
|
@@ -6,10 +6,12 @@
|
|
|
6
6
|
* `@providerkit/core` (adapter + preset); this file is the constructor, the
|
|
7
7
|
* family default for cheap high-volume work.
|
|
8
8
|
*
|
|
9
|
-
* Dialect notes (
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Dialect notes (see the core preset for detail): model ids are BARE
|
|
10
|
+
* (`glm-5.3-flash`, not `z-ai/glm-5.3-flash`), and the endpoint reads an
|
|
11
|
+
* absent `thinking` field as thinking ON, so the preset says "no" out loud.
|
|
12
|
+
* That makes thinking OFF here by default (measured 2026-09-21: a call with no
|
|
13
|
+
* `config.effort` sends `thinking: { type: "disabled" }`); ask for it with
|
|
14
|
+
* `config: { effort: 'high' }`.
|
|
13
15
|
*/
|
|
14
16
|
|
|
15
17
|
import { createZaiCodingProvider, type FallbackOptions, type Provider } from "@providerkit/core";
|