@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,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fields: what is known, what is still pending, what the model may see, and
|
|
3
|
+
* how a raw extracted value becomes a typed one.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { FlowConfigurationError } from "../types/errors.js";
|
|
7
|
+
import type { FieldDef, FieldDefs, ParamDef, ParamDefs, ScalarDef } from "../types/flow.js";
|
|
8
|
+
import type { StructuredSchema } from "../types/schema.js";
|
|
9
|
+
|
|
10
|
+
/** The default number of times a field is asked before it is skipped. */
|
|
11
|
+
export const DEFAULT_MAX_ASKS = 3;
|
|
12
|
+
|
|
13
|
+
/** A value counts as known unless it is `undefined`, `null` or `''`. */
|
|
14
|
+
export function isKnown(value: unknown): boolean {
|
|
15
|
+
return value !== undefined && value !== null && value !== "";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** The step's `collect` fields that are still unknown and not yet at `maxAsks`, in order. */
|
|
19
|
+
export function pendingFields(
|
|
20
|
+
step: { collect?: readonly string[]; maxAsks?: number },
|
|
21
|
+
data: Record<string, unknown>,
|
|
22
|
+
asked: Record<string, number>,
|
|
23
|
+
): string[] {
|
|
24
|
+
const maxAsks = step.maxAsks ?? DEFAULT_MAX_ASKS;
|
|
25
|
+
return (step.collect ?? []).filter((field) => !isKnown(data[field]) && (asked[field] ?? 0) < maxAsks);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** How a field may be harvested when the definition does not say: booleans only when asked. */
|
|
29
|
+
export function extractMode(def: FieldDef): "anywhere" | "asked" {
|
|
30
|
+
return def.extract ?? (def.type === "boolean" ? "asked" : "anywhere");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type Coerced = { ok: true; value: string | number | boolean } | { ok: false; code: "bad-value" | "not-in-enum" };
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Turn a raw value from the model into the field's type. Strings are coerced
|
|
37
|
+
* to numbers and booleans; enum membership is enforced. The `detail` is the
|
|
38
|
+
* outcome line the host shows when a value is dropped.
|
|
39
|
+
*/
|
|
40
|
+
export function coerceField(def: ScalarDef, raw: unknown): Coerced {
|
|
41
|
+
const value = coerceScalar(def, raw);
|
|
42
|
+
if (value === undefined) return { ok: false, code: "bad-value" };
|
|
43
|
+
if (def.enum && !def.enum.includes(value as string | number)) {
|
|
44
|
+
return { ok: false, code: "not-in-enum" };
|
|
45
|
+
}
|
|
46
|
+
return { ok: true, value };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function coerceScalar(def: ScalarDef, raw: unknown): string | number | boolean | undefined {
|
|
50
|
+
switch (def.type) {
|
|
51
|
+
case "string":
|
|
52
|
+
if (typeof raw === "string") return raw;
|
|
53
|
+
if (typeof raw === "number" || typeof raw === "boolean") return String(raw);
|
|
54
|
+
return undefined;
|
|
55
|
+
case "number":
|
|
56
|
+
case "integer": {
|
|
57
|
+
const n = typeof raw === "number" ? raw : typeof raw === "string" ? Number(raw.trim().replace(",", ".")) : NaN;
|
|
58
|
+
if (!Number.isFinite(n)) return undefined;
|
|
59
|
+
return def.type === "integer" ? Math.trunc(n) : n;
|
|
60
|
+
}
|
|
61
|
+
case "boolean":
|
|
62
|
+
if (typeof raw === "boolean") return raw;
|
|
63
|
+
if (typeof raw === "string") {
|
|
64
|
+
const s = raw.trim().toLowerCase();
|
|
65
|
+
if (["true", "sim", "yes", "1"].includes(s)) return true;
|
|
66
|
+
if (["false", "não", "nao", "no", "0"].includes(s)) return false;
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface WireOptions {
|
|
73
|
+
/** Every property is required and accepts `null`. The envelope style. */
|
|
74
|
+
nullable?: boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The JSON schema a provider sees: an allow-list of JSON-schema keys, with
|
|
79
|
+
* `ask`, `extract` and `optional` stripped. Closed (`additionalProperties:
|
|
80
|
+
* false`); every property required unless a parameter says `optional`.
|
|
81
|
+
*/
|
|
82
|
+
export function toWireSchema(defs: FieldDefs | ParamDefs, options: WireOptions = {}): StructuredSchema {
|
|
83
|
+
const properties: Record<string, StructuredSchema> = {};
|
|
84
|
+
const required: string[] = [];
|
|
85
|
+
const entries: Array<[string, FieldDef | ParamDef]> = Object.entries(defs);
|
|
86
|
+
for (const [name, def] of entries) {
|
|
87
|
+
properties[name] = wireProperty(def, options.nullable ?? false);
|
|
88
|
+
if (options.nullable || !("optional" in def && def.optional)) required.push(name);
|
|
89
|
+
}
|
|
90
|
+
return { type: "object", properties, required, additionalProperties: false };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function wireProperty(def: FieldDef | ParamDef, nullable: boolean): StructuredSchema {
|
|
94
|
+
const out: StructuredSchema = def.type === "array"
|
|
95
|
+
? { type: "array", items: wireProperty(def.items, false) }
|
|
96
|
+
: { type: def.type };
|
|
97
|
+
if (def.description) out.description = def.description;
|
|
98
|
+
if (def.type !== "array" && def.enum) out.enum = [...def.enum];
|
|
99
|
+
if (nullable) out.type = [def.type, "null"];
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Merge field rows authored per flow into the agent's one field set. Two
|
|
105
|
+
* rows for one slug must agree on type and enum; the first non-empty `ask`
|
|
106
|
+
* and `description` win.
|
|
107
|
+
*/
|
|
108
|
+
export function buildSchema(groups: Array<{ id: string; fields: FieldDefs }>): FieldDefs {
|
|
109
|
+
const merged: FieldDefs = {};
|
|
110
|
+
const owner: Record<string, string> = {};
|
|
111
|
+
for (const group of groups) {
|
|
112
|
+
for (const [slug, def] of Object.entries(group.fields)) {
|
|
113
|
+
const seen = merged[slug];
|
|
114
|
+
if (!seen) {
|
|
115
|
+
merged[slug] = { ...def };
|
|
116
|
+
owner[slug] = group.id;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (seen.type !== def.type) {
|
|
120
|
+
throw new FlowConfigurationError(
|
|
121
|
+
`[FlowConfigurationError] field "${slug}" has two types: "${seen.type}" in "${owner[slug]}", ` +
|
|
122
|
+
`"${def.type}" in "${group.id}". Give one slug one type.`,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
if (seen.enum && def.enum && !sameList(seen.enum, def.enum)) {
|
|
126
|
+
throw new FlowConfigurationError(
|
|
127
|
+
`[FlowConfigurationError] field "${slug}" has two option lists: in "${owner[slug]}" and "${group.id}". ` +
|
|
128
|
+
`Give one slug one list.`,
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
merged[slug] = {
|
|
132
|
+
...seen,
|
|
133
|
+
enum: seen.enum ?? def.enum,
|
|
134
|
+
ask: seen.ask ?? def.ask,
|
|
135
|
+
description: seen.description ?? def.description,
|
|
136
|
+
extract: seen.extract ?? def.extract,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return merged;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function sameList(a: readonly (string | number)[], b: readonly (string | number)[]): boolean {
|
|
144
|
+
return a.length === b.length && a.every((v, i) => v === b[i]);
|
|
145
|
+
}
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
* (tracking object depth and string context, so a nested decoy `"message"` key
|
|
14
14
|
* or a `"message"` substring inside another value is never mistaken for it),
|
|
15
15
|
* and is tolerant of truncation at any byte — a dangling escape sequence is
|
|
16
|
-
* held back rather than emitted half-decoded.
|
|
17
|
-
*
|
|
16
|
+
* held back rather than emitted half-decoded. A markdown fence around the
|
|
17
|
+
* object is skipped, and input that is not a JSON object (e.g. a provider
|
|
18
|
+
* streaming plain text) is passed through verbatim.
|
|
18
19
|
*/
|
|
19
20
|
|
|
20
21
|
const WHITESPACE = " \t\n\r";
|
|
@@ -140,6 +141,28 @@ function skipJsonValue(s: string, i: number): ValueSkip {
|
|
|
140
141
|
return j < n ? { end: j, complete: true } : { end: n, complete: false };
|
|
141
142
|
}
|
|
142
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Index just past a leading markdown fence, `i` when there is none, or -1 when
|
|
146
|
+
* the text starts with backticks whose opening line has not arrived yet.
|
|
147
|
+
*
|
|
148
|
+
* A schema the model was merely ASKED for — which is how one rides on any call
|
|
149
|
+
* that also carries tools — comes back fenced from some models:
|
|
150
|
+
* ```json\n{"message":"…"}\n```. The non-streaming parser strips that fence;
|
|
151
|
+
* without the same step here the whole envelope streams to the customer
|
|
152
|
+
* verbatim, which is the leak this module exists to prevent. While the opener
|
|
153
|
+
* is still arriving there is no telling a fence from prose, so the caller holds
|
|
154
|
+
* the text back rather than guess.
|
|
155
|
+
*/
|
|
156
|
+
function fenceEnd(s: string, i: number): number {
|
|
157
|
+
if (s[i] !== "`") return i;
|
|
158
|
+
let j = i;
|
|
159
|
+
while (j < s.length && s[j] === "`") j++;
|
|
160
|
+
if (j === s.length) return -1; // still arriving: "`", "``", "```"
|
|
161
|
+
if (j - i < 3) return i; // one or two backticks: inline code in prose
|
|
162
|
+
const newline = s.indexOf("\n", j);
|
|
163
|
+
return newline === -1 ? -1 : newline + 1;
|
|
164
|
+
}
|
|
165
|
+
|
|
143
166
|
/**
|
|
144
167
|
* Extract the decoded value of the top-level `message` string field from a
|
|
145
168
|
* (possibly partial) JSON object string, returning the text available so far.
|
|
@@ -154,8 +177,15 @@ export function extractMessageSoFar(accumulated: string): string {
|
|
|
154
177
|
let i = 0;
|
|
155
178
|
while (i < n && WHITESPACE.includes(s[i])) i++;
|
|
156
179
|
|
|
157
|
-
|
|
158
|
-
if (
|
|
180
|
+
const afterFence = fenceEnd(s, i);
|
|
181
|
+
if (afterFence === -1) return ""; // backticks arriving: a fence may be opening
|
|
182
|
+
const fenced = afterFence !== i;
|
|
183
|
+
i = afterFence;
|
|
184
|
+
while (i < n && WHITESPACE.includes(s[i])) i++;
|
|
185
|
+
|
|
186
|
+
// Not a JSON object — a plain-text stream; emit verbatim. Behind a fence it
|
|
187
|
+
// is an envelope whatever it holds, so nothing is emitted.
|
|
188
|
+
if (i >= n || s[i] !== "{") return fenced ? "" : accumulated;
|
|
159
189
|
i++; // skip '{'
|
|
160
190
|
|
|
161
191
|
while (i < n) {
|
package/src/utils/template.ts
CHANGED
|
@@ -1,442 +1,51 @@
|
|
|
1
|
-
import type { Template, TemplateContext } from "../types/index.js";
|
|
2
|
-
import type { Event, MessageEventData } from "../types/history.js";
|
|
3
|
-
import { MessageRole, EventKind } from "../types/history.js";
|
|
4
|
-
|
|
5
1
|
/**
|
|
6
|
-
*
|
|
7
|
-
* This function is asynchronous to support template functions that perform async operations.
|
|
8
|
-
*
|
|
9
|
-
* @param template - The template to render (string or function).
|
|
10
|
-
* @param params - The context object to pass to the template function.
|
|
11
|
-
* @returns A promise that resolves to the rendered string.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* // With a string template
|
|
16
|
-
* const result1 = await render("Hello {{name}}", { context: { name: "Alice" } });
|
|
17
|
-
* // Result: "Hello Alice"
|
|
2
|
+
* `{{path}}` substitution for prompts, `say` texts and action parameters.
|
|
18
3
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* ```
|
|
4
|
+
* The scope has three roots: `data` (collected fields), `context` (the host's
|
|
5
|
+
* per-turn context) and `input` (the run's trigger payload). A path that
|
|
6
|
+
* resolves to nothing keeps its placeholder, so a typo stays visible instead
|
|
7
|
+
* of vanishing into an empty string.
|
|
24
8
|
*/
|
|
25
|
-
export async function render<TContext = unknown, TData = unknown>(
|
|
26
|
-
template: Template<TContext, TData> | undefined,
|
|
27
|
-
params: TemplateContext<TContext, TData>
|
|
28
|
-
): Promise<string> {
|
|
29
|
-
if (typeof template === "function") {
|
|
30
|
-
// Execute the function and await the result if it's a promise
|
|
31
|
-
const result = await Promise.resolve(template(params));
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (typeof template === "string") {
|
|
36
|
-
// Fallback to the old renderTemplate logic for string-based templates
|
|
37
|
-
return renderTemplate(template, params.context as Record<string, unknown>);
|
|
38
|
-
}
|
|
39
9
|
|
|
40
|
-
|
|
41
|
-
|
|
10
|
+
export interface TemplateScope {
|
|
11
|
+
data?: unknown;
|
|
12
|
+
context?: unknown;
|
|
13
|
+
input?: unknown;
|
|
42
14
|
}
|
|
43
15
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
export async function renderMany<TContext = unknown, TData = unknown>(
|
|
52
|
-
templates: Template<TContext, TData>[] | undefined,
|
|
53
|
-
params: TemplateContext<TContext, TData>
|
|
54
|
-
): Promise<string[]> {
|
|
55
|
-
if (!templates) {
|
|
56
|
-
return [];
|
|
57
|
-
}
|
|
58
|
-
return Promise.all(templates.map((t) => render(t, params)));
|
|
16
|
+
const PLACEHOLDER = /\{\{\s*([^}\s]+)\s*\}\}/g;
|
|
17
|
+
|
|
18
|
+
export function render(template: string, scope: TemplateScope): string {
|
|
19
|
+
return template.replace(PLACEHOLDER, (match, path: string) => {
|
|
20
|
+
const value = lookup(scope, path.split("."));
|
|
21
|
+
return value === undefined || value === null ? match : stringify(value);
|
|
22
|
+
});
|
|
59
23
|
}
|
|
60
24
|
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
* @example
|
|
70
|
-
* ```typescript
|
|
71
|
-
* const template = "Hello {{user.name}}, welcome to {{company.name}}!";
|
|
72
|
-
* const context = {
|
|
73
|
-
* user: { name: "Alice", age: 30 },
|
|
74
|
-
* company: { name: "Acme Corp", location: "NYC" }
|
|
75
|
-
* };
|
|
76
|
-
* const result = renderTemplate(template, context);
|
|
77
|
-
* // Result: "Hello Alice, welcome to Acme Corp!"
|
|
78
|
-
*
|
|
79
|
-
* // Array handling
|
|
80
|
-
* const template2 = "Items: {{items}}";
|
|
81
|
-
* const context2 = { items: ["apple", "banana", "cherry"] };
|
|
82
|
-
* const result2 = renderTemplate(template2, context2);
|
|
83
|
-
* // Result: "Items: apple, banana, cherry"
|
|
84
|
-
* ```
|
|
85
|
-
*/
|
|
86
|
-
export function renderTemplate(
|
|
87
|
-
template: string,
|
|
88
|
-
context: Record<string, unknown> | undefined
|
|
89
|
-
): string {
|
|
90
|
-
if (!template || !context) {
|
|
91
|
-
return template;
|
|
25
|
+
/** `render` over every string inside a value, recursively. Non-strings pass through. */
|
|
26
|
+
export function renderDeep<T>(value: T, scope: TemplateScope): T {
|
|
27
|
+
if (typeof value === "string") return render(value, scope) as T;
|
|
28
|
+
if (Array.isArray(value)) return value.map((item: unknown) => renderDeep(item, scope)) as T;
|
|
29
|
+
if (value !== null && typeof value === "object") {
|
|
30
|
+
return Object.fromEntries(
|
|
31
|
+
Object.entries(value).map(([k, v]) => [k, renderDeep(v, scope)]),
|
|
32
|
+
) as T;
|
|
92
33
|
}
|
|
93
|
-
|
|
94
|
-
return template.replace(
|
|
95
|
-
/\{\{([^}]+)\}\}/g,
|
|
96
|
-
(match: string, path: string): string => {
|
|
97
|
-
const value = getValueByPath(context, path.trim());
|
|
98
|
-
if (value === undefined || value === null) {
|
|
99
|
-
return match; // Keep the original placeholder if value not found
|
|
100
|
-
}
|
|
101
|
-
return valueToString(value);
|
|
102
|
-
}
|
|
103
|
-
);
|
|
34
|
+
return value;
|
|
104
35
|
}
|
|
105
36
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
* Supports nested property access like "user.name" or "user.address.city".
|
|
109
|
-
*
|
|
110
|
-
* @param obj - The object to search in
|
|
111
|
-
* @param path - The dot-separated path to the property
|
|
112
|
-
* @returns The value at the path, or undefined if not found
|
|
113
|
-
*/
|
|
114
|
-
function getValueByPath(obj: Record<string, unknown>, path: string): unknown {
|
|
115
|
-
const keys = path.split(".");
|
|
116
|
-
let current: unknown = obj;
|
|
117
|
-
|
|
37
|
+
function lookup(root: unknown, keys: string[]): unknown {
|
|
38
|
+
let current = root;
|
|
118
39
|
for (const key of keys) {
|
|
119
|
-
if (
|
|
120
|
-
current === null ||
|
|
121
|
-
current === undefined ||
|
|
122
|
-
typeof current !== "object"
|
|
123
|
-
) {
|
|
124
|
-
return undefined;
|
|
125
|
-
}
|
|
40
|
+
if (current === null || typeof current !== "object") return undefined;
|
|
126
41
|
current = (current as Record<string, unknown>)[key];
|
|
127
42
|
}
|
|
128
|
-
|
|
129
43
|
return current;
|
|
130
44
|
}
|
|
131
45
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
* @param value - The value to convert to string
|
|
137
|
-
* @returns String representation of the value
|
|
138
|
-
*/
|
|
139
|
-
function valueToString(value: unknown): string {
|
|
140
|
-
if (value === null || value === undefined) {
|
|
141
|
-
return "";
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (typeof value === "string") {
|
|
145
|
-
return value;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (typeof value === "number" || typeof value === "boolean") {
|
|
149
|
-
return String(value);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (Array.isArray(value)) {
|
|
153
|
-
// For arrays, join with commas by default
|
|
154
|
-
// Users can override this by using JSON.stringify in their templates if needed
|
|
155
|
-
return value.map((item) => valueToString(item)).join(", ");
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
if (typeof value === "object") {
|
|
159
|
-
// For objects, convert to JSON string
|
|
160
|
-
// This provides a readable representation while being safe
|
|
161
|
-
try {
|
|
162
|
-
return JSON.stringify(value);
|
|
163
|
-
} catch {
|
|
164
|
-
return "[object Object]";
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Fallback for any other type
|
|
46
|
+
function stringify(value: unknown): string {
|
|
47
|
+
if (typeof value === "string") return value;
|
|
48
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
49
|
+
if (Array.isArray(value)) return value.map(stringify).join(", ");
|
|
169
50
|
return JSON.stringify(value);
|
|
170
51
|
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Renders template variables in an object recursively.
|
|
174
|
-
* Handles nested objects and arrays.
|
|
175
|
-
*
|
|
176
|
-
* @param obj - The object to render templates in
|
|
177
|
-
* @param context - The context object to pull values from
|
|
178
|
-
* @returns The object with all string templates rendered
|
|
179
|
-
*/
|
|
180
|
-
export function renderTemplateObject(
|
|
181
|
-
obj: unknown,
|
|
182
|
-
context: Record<string, unknown> | undefined
|
|
183
|
-
): unknown {
|
|
184
|
-
if (obj === null || obj === undefined) {
|
|
185
|
-
return obj;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (typeof obj === "string") {
|
|
189
|
-
return renderTemplate(obj, context);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
if (Array.isArray(obj)) {
|
|
193
|
-
return obj.map((item) => renderTemplateObject(item, context));
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if (typeof obj === "object") {
|
|
197
|
-
const result: Record<string, unknown> = {};
|
|
198
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
199
|
-
result[key] = renderTemplateObject(value, context);
|
|
200
|
-
}
|
|
201
|
-
return result;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return obj;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Creates helper functions for working with history and context in templates.
|
|
209
|
-
* These helpers make it easier to access message content and perform common operations.
|
|
210
|
-
*
|
|
211
|
-
* @param history - The event history array
|
|
212
|
-
* @returns Object containing helper functions
|
|
213
|
-
*/
|
|
214
|
-
export function createTemplateHelpers(history?: Event[]) {
|
|
215
|
-
const helpers = {
|
|
216
|
-
/**
|
|
217
|
-
* Get the last message from history, optionally filtered by role.
|
|
218
|
-
* @param role - Optional role to filter by (user, assistant, etc.)
|
|
219
|
-
* @returns The message content or undefined if not found
|
|
220
|
-
*/
|
|
221
|
-
getLastMessage(role?: MessageRole): string | undefined {
|
|
222
|
-
if (!history || history.length === 0) return undefined;
|
|
223
|
-
|
|
224
|
-
// Search backwards through history for the most recent message
|
|
225
|
-
for (let i = history.length - 1; i >= 0; i--) {
|
|
226
|
-
const event = history[i];
|
|
227
|
-
if (event.kind === EventKind.MESSAGE) {
|
|
228
|
-
// If no role specified, return the first message found
|
|
229
|
-
if (!role || event.source === role) {
|
|
230
|
-
const messageData = event.data as MessageEventData;
|
|
231
|
-
return messageData.message;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
return undefined;
|
|
236
|
-
},
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Get the last user message from history.
|
|
240
|
-
* @returns The user message content or undefined if not found
|
|
241
|
-
*/
|
|
242
|
-
getLastUserMessage(): string | undefined {
|
|
243
|
-
return helpers.getLastMessage(MessageRole.USER);
|
|
244
|
-
},
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* Get the last assistant message from history.
|
|
248
|
-
* @returns The assistant message content or undefined if not found
|
|
249
|
-
*/
|
|
250
|
-
getLastAssistantMessage(): string | undefined {
|
|
251
|
-
return helpers.getLastMessage(MessageRole.ASSISTANT);
|
|
252
|
-
},
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Get all messages from history, optionally filtered by role.
|
|
256
|
-
* @param role - Optional role to filter by
|
|
257
|
-
* @returns Array of message contents
|
|
258
|
-
*/
|
|
259
|
-
getMessages(role?: MessageRole): string[] {
|
|
260
|
-
if (!history || history.length === 0) return [];
|
|
261
|
-
|
|
262
|
-
const messages: string[] = [];
|
|
263
|
-
for (const event of history) {
|
|
264
|
-
if (event.kind === EventKind.MESSAGE) {
|
|
265
|
-
if (!role || event.source === role) {
|
|
266
|
-
const messageData = event.data as MessageEventData;
|
|
267
|
-
messages.push(messageData.message);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
return messages;
|
|
272
|
-
},
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Check if the last message contains any of the given keywords.
|
|
276
|
-
* @param keywords - Keywords to search for
|
|
277
|
-
* @param caseSensitive - Whether to perform case-sensitive search (default: false)
|
|
278
|
-
* @returns True if any keyword is found
|
|
279
|
-
*/
|
|
280
|
-
lastMessageContains(keywords: string | string[], caseSensitive: boolean = false): boolean {
|
|
281
|
-
const lastMessage = helpers.getLastMessage();
|
|
282
|
-
if (!lastMessage) return false;
|
|
283
|
-
|
|
284
|
-
const searchText = caseSensitive ? lastMessage : lastMessage.toLowerCase();
|
|
285
|
-
const keywordArray = Array.isArray(keywords) ? keywords : [keywords];
|
|
286
|
-
|
|
287
|
-
return keywordArray.some(keyword => {
|
|
288
|
-
const searchKeyword = caseSensitive ? keyword : keyword.toLowerCase();
|
|
289
|
-
return searchText.includes(searchKeyword);
|
|
290
|
-
});
|
|
291
|
-
},
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
return helpers;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Creates a complete TemplateContext with helpers included.
|
|
299
|
-
* This is a convenience function for creating template contexts with all the helper methods.
|
|
300
|
-
*
|
|
301
|
-
* @param params - The base template context parameters
|
|
302
|
-
* @returns Complete TemplateContext with helpers
|
|
303
|
-
*/
|
|
304
|
-
export function createTemplateContext<TContext = unknown, TData = unknown>(
|
|
305
|
-
params: Omit<Partial<TemplateContext<TContext, TData>>, 'helpers'>
|
|
306
|
-
): TemplateContext<TContext, TData> {
|
|
307
|
-
return {
|
|
308
|
-
...params,
|
|
309
|
-
data: params.data || {},
|
|
310
|
-
helpers: createTemplateHelpers(params.history),
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/**
|
|
315
|
-
* Formats a JSON structure into readable markdown format.
|
|
316
|
-
* Handles nested objects, arrays, and primitive values.
|
|
317
|
-
*
|
|
318
|
-
* @param data - The JSON data to format
|
|
319
|
-
* @param title - Optional title for the knowledge base section
|
|
320
|
-
* @param maxDepth - Maximum nesting depth (default: 3)
|
|
321
|
-
* @returns Formatted markdown string
|
|
322
|
-
*
|
|
323
|
-
* @example
|
|
324
|
-
* ```typescript
|
|
325
|
-
* const knowledge = {
|
|
326
|
-
* company: {
|
|
327
|
-
* name: "Acme Corp",
|
|
328
|
-
* products: ["Widget A", "Widget B"],
|
|
329
|
-
* locations: {
|
|
330
|
-
* headquarters: "NYC",
|
|
331
|
-
* branches: ["LA", "Chicago"]
|
|
332
|
-
* }
|
|
333
|
-
* }
|
|
334
|
-
* };
|
|
335
|
-
*
|
|
336
|
-
* const markdown = formatKnowledgeBase(knowledge, "Company Information");
|
|
337
|
-
* // Output:
|
|
338
|
-
* // ## Company Information
|
|
339
|
-
* //
|
|
340
|
-
* // ### company
|
|
341
|
-
* // - **name**: Acme Corp
|
|
342
|
-
* // - **products**:
|
|
343
|
-
* // - Widget A
|
|
344
|
-
* // - Widget B
|
|
345
|
-
* // - **locations**:
|
|
346
|
-
* // - **headquarters**: NYC
|
|
347
|
-
* // - **branches**:
|
|
348
|
-
* // - LA
|
|
349
|
-
* // - Chicago
|
|
350
|
-
* ```
|
|
351
|
-
*/
|
|
352
|
-
export function formatKnowledgeBase(
|
|
353
|
-
data: Record<string, unknown>,
|
|
354
|
-
title?: string,
|
|
355
|
-
maxDepth: number = 3
|
|
356
|
-
): string {
|
|
357
|
-
const lines: string[] = [];
|
|
358
|
-
|
|
359
|
-
if (title) {
|
|
360
|
-
lines.push(`## ${title}`);
|
|
361
|
-
lines.push("");
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
if (!data || typeof data !== "object") {
|
|
365
|
-
lines.push("*No knowledge base data available*");
|
|
366
|
-
return lines.join("\n");
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
formatObject(data, lines, 0, maxDepth);
|
|
370
|
-
|
|
371
|
-
return lines.join("\n");
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Recursively formats an object into markdown format
|
|
376
|
-
*/
|
|
377
|
-
function formatObject(
|
|
378
|
-
obj: Record<string, unknown>,
|
|
379
|
-
lines: string[],
|
|
380
|
-
depth: number,
|
|
381
|
-
maxDepth: number,
|
|
382
|
-
prefix: string = ""
|
|
383
|
-
): void {
|
|
384
|
-
const entries = Object.entries(obj);
|
|
385
|
-
|
|
386
|
-
if (entries.length === 0) {
|
|
387
|
-
lines.push(`${prefix}*Empty*`);
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
for (const [key, value] of entries) {
|
|
392
|
-
const currentPrefix = prefix ? `${prefix} ` : "";
|
|
393
|
-
|
|
394
|
-
if (value === null || value === undefined) {
|
|
395
|
-
lines.push(`${currentPrefix}- **${key}**: *Not specified*`);
|
|
396
|
-
} else if (
|
|
397
|
-
typeof value === "string" ||
|
|
398
|
-
typeof value === "number" ||
|
|
399
|
-
typeof value === "boolean"
|
|
400
|
-
) {
|
|
401
|
-
lines.push(`${currentPrefix}- **${key}**: ${value}`);
|
|
402
|
-
} else if (Array.isArray(value)) {
|
|
403
|
-
if (value.length === 0) {
|
|
404
|
-
lines.push(`${currentPrefix}- **${key}**: *Empty list*`);
|
|
405
|
-
} else {
|
|
406
|
-
lines.push(`${currentPrefix}- **${key}**:`);
|
|
407
|
-
for (const item of value) {
|
|
408
|
-
if (
|
|
409
|
-
typeof item === "string" ||
|
|
410
|
-
typeof item === "number" ||
|
|
411
|
-
typeof item === "boolean"
|
|
412
|
-
) {
|
|
413
|
-
lines.push(`${currentPrefix} - ${item}`);
|
|
414
|
-
} else if (
|
|
415
|
-
depth < maxDepth &&
|
|
416
|
-
typeof item === "object" &&
|
|
417
|
-
item !== null
|
|
418
|
-
) {
|
|
419
|
-
lines.push(`${currentPrefix} - ${JSON.stringify(item)}`);
|
|
420
|
-
} else {
|
|
421
|
-
lines.push(`${currentPrefix} - ${JSON.stringify(item)}`);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
} else if (typeof value === "object") {
|
|
426
|
-
if (depth < maxDepth) {
|
|
427
|
-
lines.push(`${currentPrefix}- **${key}**:`);
|
|
428
|
-
formatObject(
|
|
429
|
-
value as Record<string, unknown>,
|
|
430
|
-
lines,
|
|
431
|
-
depth + 1,
|
|
432
|
-
maxDepth,
|
|
433
|
-
currentPrefix
|
|
434
|
-
);
|
|
435
|
-
} else {
|
|
436
|
-
lines.push(`${currentPrefix}- **${key}**: ${JSON.stringify(value)}`);
|
|
437
|
-
}
|
|
438
|
-
} else {
|
|
439
|
-
lines.push(`${currentPrefix}- **${key}**: ${JSON.stringify(value)}`);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
}
|