enya-agent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +20 -0
- package/.github/workflows/ci.yml +70 -0
- package/.github/workflows/publish.yml +250 -0
- package/.gitmodules +3 -0
- package/Cargo.lock +3584 -0
- package/Cargo.toml +97 -0
- package/crates/enact/Cargo.toml +27 -0
- package/crates/enact/src/lib.rs +60 -0
- package/crates/enact-a2a/Cargo.toml +25 -0
- package/crates/enact-a2a/src/lib.rs +411 -0
- package/crates/enact-channels/Cargo.toml +64 -0
- package/crates/enact-channels/examples/README.md +80 -0
- package/crates/enact-channels/examples/channel_bot.rs +169 -0
- package/crates/enact-channels/examples/telegram-echo.rs +34 -0
- package/crates/enact-channels/examples/whatsapp-echo.rs +142 -0
- package/crates/enact-channels/src/config.rs +213 -0
- package/crates/enact-channels/src/lib.rs +25 -0
- package/crates/enact-channels/src/runtime.rs +237 -0
- package/crates/enact-channels/src/security/mod.rs +5 -0
- package/crates/enact-channels/src/security/pairing.rs +205 -0
- package/crates/enact-channels/src/teams.rs +601 -0
- package/crates/enact-channels/src/telegram.rs +2833 -0
- package/crates/enact-channels/src/traits.rs +200 -0
- package/crates/enact-channels/src/webhook.rs +262 -0
- package/crates/enact-channels/src/whatsapp.rs +310 -0
- package/crates/enact-cli/Cargo.toml +40 -0
- package/crates/enact-cli/src/commands/doctor.rs +62 -0
- package/crates/enact-cli/src/commands/mod.rs +3 -0
- package/crates/enact-cli/src/commands/run.rs +69 -0
- package/crates/enact-cli/src/commands/serve.rs +81 -0
- package/crates/enact-cli/src/config.rs +2 -0
- package/crates/enact-cli/src/main.rs +79 -0
- package/crates/enact-config/Cargo.toml +36 -0
- package/crates/enact-config/ENV_VAR_MAPPING.md +135 -0
- package/crates/enact-config/QUICK_REFERENCE.md +92 -0
- package/crates/enact-config/README.md +107 -0
- package/crates/enact-config/TESTING.md +161 -0
- package/crates/enact-config/examples/test-env-vars.rs +100 -0
- package/crates/enact-config/src/config.rs +399 -0
- package/crates/enact-config/src/encrypted_store.rs +211 -0
- package/crates/enact-config/src/lib.rs +298 -0
- package/crates/enact-config/src/secrets.rs +149 -0
- package/crates/enact-config/src/sync.rs +260 -0
- package/crates/enact-config/test-env-vars.sh +34 -0
- package/crates/enact-config/tests/README.md +99 -0
- package/crates/enact-config/tests/config_integration_test.rs +202 -0
- package/crates/enact-config/tests/security_test.rs +140 -0
- package/crates/enact-context/Cargo.toml +41 -0
- package/crates/enact-context/src/budget.rs +314 -0
- package/crates/enact-context/src/calibrator.rs +535 -0
- package/crates/enact-context/src/compactor.rs +392 -0
- package/crates/enact-context/src/condenser.rs +826 -0
- package/crates/enact-context/src/lib.rs +94 -0
- package/crates/enact-context/src/segment.rs +238 -0
- package/crates/enact-context/src/step_context.rs +645 -0
- package/crates/enact-context/src/token_counter.rs +148 -0
- package/crates/enact-context/src/window.rs +372 -0
- package/crates/enact-core/Cargo.toml +42 -0
- package/crates/enact-core/README.md +98 -0
- package/crates/enact-core/src/background/executor.rs +524 -0
- package/crates/enact-core/src/background/mod.rs +48 -0
- package/crates/enact-core/src/background/target_binding.rs +390 -0
- package/crates/enact-core/src/background/trigger.rs +511 -0
- package/crates/enact-core/src/callable/callable.rs +152 -0
- package/crates/enact-core/src/callable/composite.rs +817 -0
- package/crates/enact-core/src/callable/graph.rs +104 -0
- package/crates/enact-core/src/callable/llm.rs +211 -0
- package/crates/enact-core/src/callable/mod.rs +64 -0
- package/crates/enact-core/src/callable/registry.rs +206 -0
- package/crates/enact-core/src/context/execution_context.rs +757 -0
- package/crates/enact-core/src/context/invocation.rs +99 -0
- package/crates/enact-core/src/context/mod.rs +50 -0
- package/crates/enact-core/src/context/tenant.rs +175 -0
- package/crates/enact-core/src/context/trace.rs +127 -0
- package/crates/enact-core/src/flow/conditional.rs +293 -0
- package/crates/enact-core/src/flow/mod.rs +43 -0
- package/crates/enact-core/src/flow/parallel.rs +437 -0
- package/crates/enact-core/src/flow/repeat.rs +534 -0
- package/crates/enact-core/src/flow/sequential.rs +248 -0
- package/crates/enact-core/src/graph/checkpoint.rs +79 -0
- package/crates/enact-core/src/graph/checkpoint_store.rs +76 -0
- package/crates/enact-core/src/graph/compiled.rs +189 -0
- package/crates/enact-core/src/graph/edge.rs +59 -0
- package/crates/enact-core/src/graph/graph_schema.rs +218 -0
- package/crates/enact-core/src/graph/loader.rs +155 -0
- package/crates/enact-core/src/graph/mod.rs +18 -0
- package/crates/enact-core/src/graph/node/function.rs +49 -0
- package/crates/enact-core/src/graph/node/mod.rs +48 -0
- package/crates/enact-core/src/graph/schema.rs +62 -0
- package/crates/enact-core/src/inbox/message.rs +405 -0
- package/crates/enact-core/src/inbox/mod.rs +31 -0
- package/crates/enact-core/src/inbox/store.rs +355 -0
- package/crates/enact-core/src/kernel/artifact/filesystem.rs +546 -0
- package/crates/enact-core/src/kernel/artifact/metadata.rs +283 -0
- package/crates/enact-core/src/kernel/artifact/mod.rs +27 -0
- package/crates/enact-core/src/kernel/artifact/store.rs +427 -0
- package/crates/enact-core/src/kernel/enforcement.rs +1315 -0
- package/crates/enact-core/src/kernel/error.rs +1200 -0
- package/crates/enact-core/src/kernel/event.rs +1394 -0
- package/crates/enact-core/src/kernel/execution_model.rs +831 -0
- package/crates/enact-core/src/kernel/execution_state.rs +189 -0
- package/crates/enact-core/src/kernel/execution_strategy.rs +117 -0
- package/crates/enact-core/src/kernel/ids.rs +2086 -0
- package/crates/enact-core/src/kernel/interrupt.rs +125 -0
- package/crates/enact-core/src/kernel/kernel.rs +1283 -0
- package/crates/enact-core/src/kernel/mod.rs +205 -0
- package/crates/enact-core/src/kernel/persistence/event_store.rs +270 -0
- package/crates/enact-core/src/kernel/persistence/message_store.rs +908 -0
- package/crates/enact-core/src/kernel/persistence/mod.rs +102 -0
- package/crates/enact-core/src/kernel/persistence/state_store.rs +228 -0
- package/crates/enact-core/src/kernel/persistence/vector_store.rs +299 -0
- package/crates/enact-core/src/kernel/reducer.rs +808 -0
- package/crates/enact-core/src/kernel/replay.rs +153 -0
- package/crates/enact-core/src/lib.rs +413 -0
- package/crates/enact-core/src/memory/episodic.rs +0 -0
- package/crates/enact-core/src/memory/mod.rs +6 -0
- package/crates/enact-core/src/memory/semantic.rs +0 -0
- package/crates/enact-core/src/memory/trait.rs +0 -0
- package/crates/enact-core/src/memory/vector_db.rs +0 -0
- package/crates/enact-core/src/memory/working.rs +0 -0
- package/crates/enact-core/src/policy/execution_policy.rs +292 -0
- package/crates/enact-core/src/policy/filters.rs +458 -0
- package/crates/enact-core/src/policy/input_processor.rs +407 -0
- package/crates/enact-core/src/policy/long_running.rs +134 -0
- package/crates/enact-core/src/policy/mod.rs +193 -0
- package/crates/enact-core/src/policy/pii_input.rs +274 -0
- package/crates/enact-core/src/policy/tenant_policy.rs +453 -0
- package/crates/enact-core/src/policy/tool_policy.rs +407 -0
- package/crates/enact-core/src/providers/mod.rs +63 -0
- package/crates/enact-core/src/providers/trait.rs +292 -0
- package/crates/enact-core/src/runner/callbacks.rs +6 -0
- package/crates/enact-core/src/runner/execution_runner.rs +476 -0
- package/crates/enact-core/src/runner/loop.rs +117 -0
- package/crates/enact-core/src/runner/mod.rs +58 -0
- package/crates/enact-core/src/runner/protected_runner.rs +280 -0
- package/crates/enact-core/src/signal/inmemory.rs +231 -0
- package/crates/enact-core/src/signal/mod.rs +108 -0
- package/crates/enact-core/src/streaming/event_logger.rs +195 -0
- package/crates/enact-core/src/streaming/event_stream.rs +1423 -0
- package/crates/enact-core/src/streaming/mod.rs +108 -0
- package/crates/enact-core/src/streaming/pause_cancel.rs +0 -0
- package/crates/enact-core/src/streaming/protected_emitter.rs +173 -0
- package/crates/enact-core/src/streaming/protection/context.rs +136 -0
- package/crates/enact-core/src/streaming/protection/encryption.rs +289 -0
- package/crates/enact-core/src/streaming/protection/mod.rs +43 -0
- package/crates/enact-core/src/streaming/protection/pii_protection.rs +243 -0
- package/crates/enact-core/src/streaming/protection/processor.rs +166 -0
- package/crates/enact-core/src/streaming/sse.rs +0 -0
- package/crates/enact-core/src/telemetry/exporter.rs +0 -0
- package/crates/enact-core/src/telemetry/init.rs +0 -0
- package/crates/enact-core/src/telemetry/mod.rs +49 -0
- package/crates/enact-core/src/telemetry/spans.rs +245 -0
- package/crates/enact-core/src/tool/agent_tool.rs +177 -0
- package/crates/enact-core/src/tool/browser/mod.rs +0 -0
- package/crates/enact-core/src/tool/browser/webdriver.rs +0 -0
- package/crates/enact-core/src/tool/cost.rs +247 -0
- package/crates/enact-core/src/tool/discovery.rs +0 -0
- package/crates/enact-core/src/tool/dispatcher.rs +347 -0
- package/crates/enact-core/src/tool/filesystem.rs +231 -0
- package/crates/enact-core/src/tool/function.rs +99 -0
- package/crates/enact-core/src/tool/git.rs +162 -0
- package/crates/enact-core/src/tool/http.rs +214 -0
- package/crates/enact-core/src/tool/mcp/client.rs +0 -0
- package/crates/enact-core/src/tool/mcp/mod.rs +0 -0
- package/crates/enact-core/src/tool/mod.rs +51 -0
- package/crates/enact-core/src/tool/reasoning/debugging.rs +0 -0
- package/crates/enact-core/src/tool/reasoning/mcts.rs +0 -0
- package/crates/enact-core/src/tool/reasoning/mod.rs +0 -0
- package/crates/enact-core/src/tool/reasoning/sequential.rs +0 -0
- package/crates/enact-core/src/tool/sandbox/dagger.rs +0 -0
- package/crates/enact-core/src/tool/sandbox/mod.rs +0 -0
- package/crates/enact-core/src/tool/shell.rs +147 -0
- package/crates/enact-core/src/tool/trait.rs +33 -0
- package/crates/enact-core/src/tool/web_search.rs +277 -0
- package/crates/enact-core/src/util/config.rs +0 -0
- package/crates/enact-core/src/util/errors.rs +0 -0
- package/crates/enact-core/src/util/mod.rs +6 -0
- package/crates/enact-core/tests/airgapped_e2e_test.rs +291 -0
- package/crates/enact-core/tests/e2e_agentic_loop.rs +119 -0
- package/crates/enact-core/tests/e2e_test.rs +259 -0
- package/crates/enact-core/tests/graph_test.rs +130 -0
- package/crates/enact-core/tests/stream_event_id_validation.rs +435 -0
- package/crates/enact-cron/Cargo.toml +28 -0
- package/crates/enact-cron/src/lib.rs +44 -0
- package/crates/enact-cron/src/schedule.rs +156 -0
- package/crates/enact-cron/src/store.rs +589 -0
- package/crates/enact-cron/src/types.rs +148 -0
- package/crates/enact-gateway/Cargo.toml +31 -0
- package/crates/enact-gateway/README.md +30 -0
- package/crates/enact-gateway/examples/whatsapp-gateway-runner-mock.rs +59 -0
- package/crates/enact-gateway/examples/whatsapp-gateway.rs +42 -0
- package/crates/enact-gateway/src/lib.rs +582 -0
- package/crates/enact-mcp/Cargo.toml +24 -0
- package/crates/enact-mcp/src/lib.rs +178 -0
- package/crates/enact-memory/Cargo.toml +25 -0
- package/crates/enact-memory/src/backend.rs +20 -0
- package/crates/enact-memory/src/chunker.rs +230 -0
- package/crates/enact-memory/src/embeddings.rs +221 -0
- package/crates/enact-memory/src/lib.rs +67 -0
- package/crates/enact-memory/src/markdown.rs +127 -0
- package/crates/enact-memory/src/none.rs +61 -0
- package/crates/enact-memory/src/sqlite.rs +276 -0
- package/crates/enact-memory/src/traits.rs +65 -0
- package/crates/enact-memory/src/vector.rs +198 -0
- package/crates/enact-oauth/Cargo.toml +27 -0
- package/crates/enact-oauth/src/lib.rs +584 -0
- package/crates/enact-observability/Cargo.toml +22 -0
- package/crates/enact-observability/src/lib.rs +197 -0
- package/crates/enact-providers/Cargo.toml +33 -0
- package/crates/enact-providers/examples/hello-agent.rs +33 -0
- package/crates/enact-providers/src/anthropic.rs +182 -0
- package/crates/enact-providers/src/azure.rs +96 -0
- package/crates/enact-providers/src/bridge.rs +221 -0
- package/crates/enact-providers/src/gemini.rs +227 -0
- package/crates/enact-providers/src/http.rs +78 -0
- package/crates/enact-providers/src/lib.rs +53 -0
- package/crates/enact-providers/src/openai_compatible.rs +167 -0
- package/crates/enact-providers/src/openrouter.rs +33 -0
- package/crates/enact-runner/Cargo.toml +24 -0
- package/crates/enact-runner/README.md +76 -0
- package/crates/enact-runner/src/compaction.rs +225 -0
- package/crates/enact-runner/src/config.rs +118 -0
- package/crates/enact-runner/src/lib.rs +63 -0
- package/crates/enact-runner/src/loop_driver.rs +414 -0
- package/crates/enact-runner/src/parser.rs +421 -0
- package/crates/enact-runner/src/retry.rs +262 -0
- package/crates/enact-runner/tests/integration.rs +278 -0
- package/crates/enact-security/Cargo.toml +22 -0
- package/crates/enact-security/src/audit.rs +375 -0
- package/crates/enact-security/src/lib.rs +37 -0
- package/crates/enact-security/src/policy.rs +406 -0
- package/crates/enact-skills/Cargo.toml +25 -0
- package/crates/enact-skills/src/lib.rs +506 -0
- package/crates/enact-tools/Cargo.toml +22 -0
- package/crates/enact-tools/src/file_read.rs +166 -0
- package/crates/enact-tools/src/file_write.rs +216 -0
- package/crates/enact-tools/src/git_operations.rs +513 -0
- package/crates/enact-tools/src/http_request.rs +417 -0
- package/crates/enact-tools/src/lib.rs +104 -0
- package/crates/enact-tools/src/security.rs +227 -0
- package/crates/enact-tools/src/shell.rs +191 -0
- package/crates/enact-tools/src/traits.rs +159 -0
- package/docs/Makefile +74 -0
- package/docs/config.toml +62 -0
- package/docs/content/_index.md +174 -0
- package/docs/content/a2a/_index.md +431 -0
- package/docs/content/api/_index.md +323 -0
- package/docs/content/channels/_index.md +160 -0
- package/docs/content/channels/teams.md +205 -0
- package/docs/content/channels/telegram.md +182 -0
- package/docs/content/channels/webhook.md +423 -0
- package/docs/content/channels/whatsapp.md +240 -0
- package/docs/content/cli/_index.md +261 -0
- package/docs/content/concepts/_index.md +273 -0
- package/docs/content/configuration/_index.md +241 -0
- package/docs/content/cron/_index.md +248 -0
- package/docs/content/developers/_index.md +278 -0
- package/docs/content/getting-started/_index.md +180 -0
- package/docs/content/installation/_index.md +186 -0
- package/docs/content/installation/uninstall.md +101 -0
- package/docs/content/installation/updating.md +120 -0
- package/docs/content/mcp/_index.md +215 -0
- package/docs/content/memory/_index.md +163 -0
- package/docs/content/oauth/_index.md +515 -0
- package/docs/content/providers/_index.md +206 -0
- package/docs/content/roadmap/_index.md +199 -0
- package/docs/content/security/_index.md +219 -0
- package/docs/content/skills/_index.md +228 -0
- package/docs/content/tools/_index.md +485 -0
- package/docs/content/troubleshooting/_index.md +259 -0
- package/docs/content/yaml-schema/_index.md +294 -0
- package/docs/static/giallo-dark.css +91 -0
- package/docs/static/giallo-light.css +91 -0
- package/docs/themes/tanuki/.github/workflows/deploy.yml +44 -0
- package/docs/themes/tanuki/LICENSE +21 -0
- package/docs/themes/tanuki/README.md +166 -0
- package/docs/themes/tanuki/examples/blog/config.toml +58 -0
- package/docs/themes/tanuki/examples/blog/content/_index.md +4 -0
- package/docs/themes/tanuki/examples/blog/content/about.md +33 -0
- package/docs/themes/tanuki/examples/blog/content/blog/_index.md +7 -0
- package/docs/themes/tanuki/examples/blog/content/blog/api-design-best-practices.md +245 -0
- package/docs/themes/tanuki/examples/blog/content/blog/building-accessible-websites.md +147 -0
- package/docs/themes/tanuki/examples/blog/content/blog/css-grid-vs-flexbox.md +165 -0
- package/docs/themes/tanuki/examples/blog/content/blog/customizing-catppuccin-colors.md +137 -0
- package/docs/themes/tanuki/examples/blog/content/blog/dark-mode-best-practices.md +82 -0
- package/docs/themes/tanuki/examples/blog/content/blog/docker-essentials.md +301 -0
- package/docs/themes/tanuki/examples/blog/content/blog/getting-started-with-zola.md +129 -0
- package/docs/themes/tanuki/examples/blog/content/blog/git-workflow-for-content.md +112 -0
- package/docs/themes/tanuki/examples/blog/content/blog/introduction-to-webassembly.md +183 -0
- package/docs/themes/tanuki/examples/blog/content/blog/modern-javascript-features.md +234 -0
- package/docs/themes/tanuki/examples/blog/content/blog/testing-strategies.md +311 -0
- package/docs/themes/tanuki/examples/blog/content/blog/typography-for-developers.md +104 -0
- package/docs/themes/tanuki/examples/blog/content/blog/welcome-to-tanuki.md +67 -0
- package/docs/themes/tanuki/examples/blog/content/blog/why-static-sites.md +85 -0
- package/docs/themes/tanuki/examples/blog/content/projects.md +64 -0
- package/docs/themes/tanuki/examples/book/config.toml +17 -0
- package/docs/themes/tanuki/examples/book/content/_index.md +12 -0
- package/docs/themes/tanuki/examples/book/content/chapter-1.md +90 -0
- package/docs/themes/tanuki/examples/book/content/chapter-2.md +143 -0
- package/docs/themes/tanuki/examples/book/content/chapter-3.md +217 -0
- package/docs/themes/tanuki/examples/book/content/chapter-4.md +224 -0
- package/docs/themes/tanuki/examples/book/content/chapter-5.md +297 -0
- package/docs/themes/tanuki/examples/book/content/print.md +6 -0
- package/docs/themes/tanuki/examples/docs/config.toml +28 -0
- package/docs/themes/tanuki/examples/docs/content/_index.md +20 -0
- package/docs/themes/tanuki/examples/docs/content/components.md +156 -0
- package/docs/themes/tanuki/examples/docs/content/configuration.md +94 -0
- package/docs/themes/tanuki/examples/docs/content/customization.md +202 -0
- package/docs/themes/tanuki/examples/docs/content/deployment.md +204 -0
- package/docs/themes/tanuki/examples/docs/content/installation.md +59 -0
- package/docs/themes/tanuki/examples/docs/content/print.md +6 -0
- package/docs/themes/tanuki/examples/docs/static/img/tanuki-icon.avif +0 -0
- package/docs/themes/tanuki/examples/index.html +2104 -0
- package/docs/themes/tanuki/mise.toml +108 -0
- package/docs/themes/tanuki/sass/base/_catppuccin.scss +164 -0
- package/docs/themes/tanuki/sass/base/_fonts.scss +64 -0
- package/docs/themes/tanuki/sass/base/_reset.scss +152 -0
- package/docs/themes/tanuki/sass/base/_typography.scss +523 -0
- package/docs/themes/tanuki/sass/components/_buttons.scss +209 -0
- package/docs/themes/tanuki/sass/components/_code.scss +457 -0
- package/docs/themes/tanuki/sass/components/_landing.scss +633 -0
- package/docs/themes/tanuki/sass/components/_layout.scss +294 -0
- package/docs/themes/tanuki/sass/components/_navigation.scss +1200 -0
- package/docs/themes/tanuki/sass/components/_print.scss +237 -0
- package/docs/themes/tanuki/sass/components/_search.scss +224 -0
- package/docs/themes/tanuki/sass/components/_sidebar.scss +473 -0
- package/docs/themes/tanuki/sass/components/_theme-toggle.scss +186 -0
- package/docs/themes/tanuki/sass/modes/_blog.scss +366 -0
- package/docs/themes/tanuki/sass/modes/_product.scss +875 -0
- package/docs/themes/tanuki/sass/modes/_raskell.scss +1696 -0
- package/docs/themes/tanuki/sass/patterns/_buttons.scss +183 -0
- package/docs/themes/tanuki/sass/patterns/_cards.scss +144 -0
- package/docs/themes/tanuki/sass/patterns/_index.scss +9 -0
- package/docs/themes/tanuki/sass/patterns/_lists.scss +259 -0
- package/docs/themes/tanuki/sass/patterns/_sections.scss +243 -0
- package/docs/themes/tanuki/sass/style.scss +47 -0
- package/docs/themes/tanuki/sass/tokens/_colors.scss +139 -0
- package/docs/themes/tanuki/sass/tokens/_spacing.scss +100 -0
- package/docs/themes/tanuki/sass/tokens/_typography.scss +186 -0
- package/docs/themes/tanuki/screenshot.png +0 -0
- package/docs/themes/tanuki/sentinel.kdl +59 -0
- package/docs/themes/tanuki/static/elasticlunr.min.js +10 -0
- package/docs/themes/tanuki/static/fonts/GEIST-LICENSE.txt +92 -0
- package/docs/themes/tanuki/static/fonts/Geist-Variable.woff2 +0 -0
- package/docs/themes/tanuki/static/fonts/GeistMono-Variable.woff2 +0 -0
- package/docs/themes/tanuki/static/img/tanuki-icon.avif +0 -0
- package/docs/themes/tanuki/static/img/tanuki-icon.png +0 -0
- package/docs/themes/tanuki/static/js/anchors.js +18 -0
- package/docs/themes/tanuki/static/js/app.js +274 -0
- package/docs/themes/tanuki/static/js/code.js +394 -0
- package/docs/themes/tanuki/static/js/navigation.js +778 -0
- package/docs/themes/tanuki/static/js/scroll-to-top.js +33 -0
- package/docs/themes/tanuki/static/js/search-raskell.js +240 -0
- package/docs/themes/tanuki/static/js/search.js +215 -0
- package/docs/themes/tanuki/static/js/theme.js +169 -0
- package/docs/themes/tanuki/static/syntax-dark.css +151 -0
- package/docs/themes/tanuki/static/syntax-light.css +151 -0
- package/docs/themes/tanuki/static/wasm/sentinel_playground_wasm.js +486 -0
- package/docs/themes/tanuki/static/wasm/sentinel_playground_wasm_bg.wasm +0 -0
- package/docs/themes/tanuki/templates/404.html +52 -0
- package/docs/themes/tanuki/templates/base.html +428 -0
- package/docs/themes/tanuki/templates/blog.html +66 -0
- package/docs/themes/tanuki/templates/home.html +108 -0
- package/docs/themes/tanuki/templates/index.html +178 -0
- package/docs/themes/tanuki/templates/landing.html +168 -0
- package/docs/themes/tanuki/templates/macros/nav.html +128 -0
- package/docs/themes/tanuki/templates/macros/posts.html +101 -0
- package/docs/themes/tanuki/templates/macros/ui.html +159 -0
- package/docs/themes/tanuki/templates/page.html +135 -0
- package/docs/themes/tanuki/templates/partials/footer.html +38 -0
- package/docs/themes/tanuki/templates/partials/header.html +366 -0
- package/docs/themes/tanuki/templates/partials/nav-buttons.html +55 -0
- package/docs/themes/tanuki/templates/partials/nav-overlay.html +81 -0
- package/docs/themes/tanuki/templates/partials/page-toc-panel.html +43 -0
- package/docs/themes/tanuki/templates/partials/search.html +52 -0
- package/docs/themes/tanuki/templates/partials/sidebar.html +107 -0
- package/docs/themes/tanuki/templates/partials/theme-toggle.html +35 -0
- package/docs/themes/tanuki/templates/partials/toc-overlay.html +146 -0
- package/docs/themes/tanuki/templates/partials/version-picker.html +38 -0
- package/docs/themes/tanuki/templates/print.html +244 -0
- package/docs/themes/tanuki/templates/section.html +186 -0
- package/docs/themes/tanuki/templates/taxonomy_list.html +18 -0
- package/docs/themes/tanuki/templates/taxonomy_single.html +31 -0
- package/docs/themes/tanuki/theme.toml +58 -0
- package/examples/hello-agent.rs +55 -0
- package/package.json +36 -0
- package/proto/config.proto +60 -0
- package/proto/events.proto +0 -0
- package/proto/runtime.proto +215 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
//! Model provider trait and capabilities
|
|
2
|
+
//!
|
|
3
|
+
//! This module defines the `ModelProvider` trait and related types. Provider implementations
|
|
4
|
+
//! are in the separate `enact-providers` crate to enable independent release cadence.
|
|
5
|
+
//!
|
|
6
|
+
//! ## ⚠️ CODE OWNERSHIP & FORBIDDEN PATTERNS
|
|
7
|
+
//!
|
|
8
|
+
//! **Providers are replaceable adapters - execution semantics must never depend on provider behavior.**
|
|
9
|
+
//!
|
|
10
|
+
//! ### Code Ownership
|
|
11
|
+
//! - Provider implementations live in `enact-providers` crate
|
|
12
|
+
//! - This module contains only the trait and types (`ChatRequest`, `ChatResponse`, `ModelCapabilities`)
|
|
13
|
+
//! - `enact-providers` depends on `enact-core` (for the trait), but `enact-core` must NOT depend on `enact-providers`
|
|
14
|
+
//! - Providers are thin HTTP adapters
|
|
15
|
+
//! - They should only see `ChatRequest`/`ChatResponse` and tool schemas
|
|
16
|
+
//! - If providers need kernel types, that logic belongs in the kernel
|
|
17
|
+
//!
|
|
18
|
+
//! ### Explicitly Forbidden Patterns
|
|
19
|
+
//!
|
|
20
|
+
//! These patterns are **forbidden forever**. If any of these happen, Enact loses its "Now" guarantee.
|
|
21
|
+
//!
|
|
22
|
+
//! 1. **Providers enforcing policy** – Policy enforcement belongs to kernel, not providers.
|
|
23
|
+
//! - Providers are thin adapters, not policy engines
|
|
24
|
+
//! - No policy checks in provider implementations
|
|
25
|
+
//! - No quota enforcement in providers
|
|
26
|
+
//!
|
|
27
|
+
//! 2. **Providers importing kernel/flow/policy** – Providers must not import kernel types.
|
|
28
|
+
//! - `enact-providers` must NOT import `enact_core::kernel`, `enact_core::flow`, or `enact_core::policy`
|
|
29
|
+
//! - Providers should only see `ChatRequest`/`ChatResponse` and tool schemas
|
|
30
|
+
//! - If providers need kernel types, that logic belongs in the kernel
|
|
31
|
+
//! - No circular dependencies: `enact-core` must NOT depend on `enact-providers`
|
|
32
|
+
//!
|
|
33
|
+
//! 3. **Global registries or dynamic discovery in kernel** – Providers are resolved before kernel execution.
|
|
34
|
+
//! - The kernel receives resolved providers via `ExecutionRequest`, not provider names or registry lookups
|
|
35
|
+
//! - Provider resolution happens outside kernel (in runner/control plane)
|
|
36
|
+
//! - No provider registry in kernel
|
|
37
|
+
//!
|
|
38
|
+
//! 4. **Execution semantics depending on provider behavior** – Providers are replaceable adapters.
|
|
39
|
+
//! - Execution semantics must never depend on provider-specific behavior
|
|
40
|
+
//! - All providers must implement the same trait interface
|
|
41
|
+
//! - No provider-specific logic in kernel
|
|
42
|
+
//!
|
|
43
|
+
//! ### Invariants Enforced
|
|
44
|
+
//!
|
|
45
|
+
//! - **Providers are replaceable adapters**: Execution semantics must never depend on provider behavior
|
|
46
|
+
//! - **No global registries or dynamic discovery in kernel**: Providers are resolved before kernel execution
|
|
47
|
+
//! - **Provider resolution happens outside kernel**: Resolution belongs in runner/control plane, not in the kernel
|
|
48
|
+
//! - **Providers must not import kernel/flow/policy**: `enact-providers` must NOT import `enact_core::kernel`, `enact_core::flow`, or `enact_core::policy`
|
|
49
|
+
//! - **Crate boundary separation**: Provider implementations in `enact-providers`, trait in `enact-core`, one-way dependency only
|
|
50
|
+
//!
|
|
51
|
+
//! @see docs/TECHNICAL/04-KERNEL_INVARIANTS.md
|
|
52
|
+
|
|
53
|
+
use async_trait::async_trait;
|
|
54
|
+
use serde::{Deserialize, Serialize};
|
|
55
|
+
|
|
56
|
+
// =============================================================================
|
|
57
|
+
// Model Capabilities - What a model can do
|
|
58
|
+
// =============================================================================
|
|
59
|
+
|
|
60
|
+
/// Model capabilities - declares what a model supports
|
|
61
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
62
|
+
pub struct ModelCapabilities {
|
|
63
|
+
/// Maximum context window (tokens)
|
|
64
|
+
pub max_tokens: u32,
|
|
65
|
+
/// Maximum output tokens
|
|
66
|
+
pub max_output_tokens: u32,
|
|
67
|
+
/// Supports streaming responses
|
|
68
|
+
pub supports_streaming: bool,
|
|
69
|
+
/// Supports tool/function calling
|
|
70
|
+
pub supports_tools: bool,
|
|
71
|
+
/// Supports vision/images
|
|
72
|
+
pub supports_vision: bool,
|
|
73
|
+
/// Supports structured output (JSON mode)
|
|
74
|
+
pub supports_json_mode: bool,
|
|
75
|
+
/// Supports embedding generation
|
|
76
|
+
pub supports_embeddings: bool,
|
|
77
|
+
/// Is PII-safe (no data retention)
|
|
78
|
+
pub pii_safe: bool,
|
|
79
|
+
/// Cost per 1K input tokens (USD)
|
|
80
|
+
pub cost_per_1k_input: Option<f64>,
|
|
81
|
+
/// Cost per 1K output tokens (USD)
|
|
82
|
+
pub cost_per_1k_output: Option<f64>,
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
impl Default for ModelCapabilities {
|
|
86
|
+
fn default() -> Self {
|
|
87
|
+
Self {
|
|
88
|
+
max_tokens: 4096,
|
|
89
|
+
max_output_tokens: 4096,
|
|
90
|
+
supports_streaming: true,
|
|
91
|
+
supports_tools: false,
|
|
92
|
+
supports_vision: false,
|
|
93
|
+
supports_json_mode: false,
|
|
94
|
+
supports_embeddings: false,
|
|
95
|
+
pii_safe: false,
|
|
96
|
+
cost_per_1k_input: None,
|
|
97
|
+
cost_per_1k_output: None,
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
impl ModelCapabilities {
|
|
103
|
+
/// GPT-4 capabilities
|
|
104
|
+
pub fn gpt4() -> Self {
|
|
105
|
+
Self {
|
|
106
|
+
max_tokens: 128_000,
|
|
107
|
+
max_output_tokens: 4096,
|
|
108
|
+
supports_streaming: true,
|
|
109
|
+
supports_tools: true,
|
|
110
|
+
supports_vision: true,
|
|
111
|
+
supports_json_mode: true,
|
|
112
|
+
supports_embeddings: true,
|
|
113
|
+
pii_safe: false,
|
|
114
|
+
cost_per_1k_input: Some(0.03),
|
|
115
|
+
cost_per_1k_output: Some(0.06),
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// Claude 3 Opus capabilities
|
|
120
|
+
pub fn claude3_opus() -> Self {
|
|
121
|
+
Self {
|
|
122
|
+
max_tokens: 200_000,
|
|
123
|
+
max_output_tokens: 4096,
|
|
124
|
+
supports_streaming: true,
|
|
125
|
+
supports_tools: true,
|
|
126
|
+
supports_vision: true,
|
|
127
|
+
supports_json_mode: true,
|
|
128
|
+
supports_embeddings: true,
|
|
129
|
+
pii_safe: false,
|
|
130
|
+
cost_per_1k_input: Some(0.015),
|
|
131
|
+
cost_per_1k_output: Some(0.075),
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/// Gemini Pro capabilities
|
|
136
|
+
pub fn gemini_pro() -> Self {
|
|
137
|
+
Self {
|
|
138
|
+
max_tokens: 1_000_000,
|
|
139
|
+
max_output_tokens: 8192,
|
|
140
|
+
supports_streaming: true,
|
|
141
|
+
supports_tools: true,
|
|
142
|
+
supports_vision: true,
|
|
143
|
+
supports_json_mode: true,
|
|
144
|
+
supports_embeddings: true,
|
|
145
|
+
pii_safe: false,
|
|
146
|
+
cost_per_1k_input: Some(0.00125),
|
|
147
|
+
cost_per_1k_output: Some(0.005),
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// =============================================================================
|
|
153
|
+
// Chat Types
|
|
154
|
+
// =============================================================================
|
|
155
|
+
|
|
156
|
+
/// Chat message
|
|
157
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
158
|
+
pub struct ChatMessage {
|
|
159
|
+
pub role: String,
|
|
160
|
+
pub content: String,
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
impl ChatMessage {
|
|
164
|
+
pub fn system(content: impl Into<String>) -> Self {
|
|
165
|
+
Self {
|
|
166
|
+
role: "system".to_string(),
|
|
167
|
+
content: content.into(),
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
pub fn user(content: impl Into<String>) -> Self {
|
|
172
|
+
Self {
|
|
173
|
+
role: "user".to_string(),
|
|
174
|
+
content: content.into(),
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
pub fn assistant(content: impl Into<String>) -> Self {
|
|
179
|
+
Self {
|
|
180
|
+
role: "assistant".to_string(),
|
|
181
|
+
content: content.into(),
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/// Chat completion request
|
|
187
|
+
#[derive(Debug, Clone, Serialize)]
|
|
188
|
+
pub struct ChatRequest {
|
|
189
|
+
pub messages: Vec<ChatMessage>,
|
|
190
|
+
#[serde(skip_serializing_if = "Option::is_none")]
|
|
191
|
+
pub max_tokens: Option<u32>,
|
|
192
|
+
#[serde(skip_serializing_if = "Option::is_none")]
|
|
193
|
+
pub temperature: Option<f32>,
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// Chat completion response
|
|
197
|
+
#[derive(Debug, Clone, Deserialize)]
|
|
198
|
+
pub struct ChatResponse {
|
|
199
|
+
pub id: String,
|
|
200
|
+
pub choices: Vec<ChatChoice>,
|
|
201
|
+
pub usage: Option<ChatUsage>,
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
#[derive(Debug, Clone, Deserialize)]
|
|
205
|
+
pub struct ChatChoice {
|
|
206
|
+
pub index: u32,
|
|
207
|
+
pub message: ChatMessage,
|
|
208
|
+
pub finish_reason: Option<String>,
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
#[derive(Debug, Clone, Deserialize)]
|
|
212
|
+
pub struct ChatUsage {
|
|
213
|
+
pub prompt_tokens: u32,
|
|
214
|
+
pub completion_tokens: u32,
|
|
215
|
+
pub total_tokens: u32,
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// =============================================================================
|
|
219
|
+
// Embedding Types
|
|
220
|
+
// =============================================================================
|
|
221
|
+
|
|
222
|
+
/// Embedding request
|
|
223
|
+
#[derive(Debug, Clone, Serialize)]
|
|
224
|
+
pub struct EmbeddingRequest {
|
|
225
|
+
/// Text to embed (single string or array of strings for batch)
|
|
226
|
+
pub input: String,
|
|
227
|
+
/// Optional model override
|
|
228
|
+
#[serde(skip_serializing_if = "Option::is_none")]
|
|
229
|
+
pub model: Option<String>,
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/// Embedding response
|
|
233
|
+
#[derive(Debug, Clone, Deserialize)]
|
|
234
|
+
pub struct EmbeddingResponse {
|
|
235
|
+
/// Embedding data (one per input)
|
|
236
|
+
pub data: Vec<EmbeddingData>,
|
|
237
|
+
/// Model used for embedding
|
|
238
|
+
pub model: String,
|
|
239
|
+
/// Token usage information
|
|
240
|
+
pub usage: Option<EmbeddingUsage>,
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
#[derive(Debug, Clone, Deserialize)]
|
|
244
|
+
pub struct EmbeddingData {
|
|
245
|
+
/// The embedding vector
|
|
246
|
+
pub embedding: Vec<f32>,
|
|
247
|
+
/// Index of the embedding in the batch
|
|
248
|
+
pub index: u32,
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
#[derive(Debug, Clone, Deserialize)]
|
|
252
|
+
pub struct EmbeddingUsage {
|
|
253
|
+
/// Number of tokens in the input
|
|
254
|
+
pub prompt_tokens: u32,
|
|
255
|
+
/// Total tokens used
|
|
256
|
+
pub total_tokens: u32,
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/// Model provider trait
|
|
260
|
+
#[async_trait]
|
|
261
|
+
pub trait ModelProvider: Send + Sync {
|
|
262
|
+
/// Provider name
|
|
263
|
+
fn name(&self) -> &str;
|
|
264
|
+
|
|
265
|
+
/// Model name being used
|
|
266
|
+
fn model(&self) -> &str {
|
|
267
|
+
"default"
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/// Get model capabilities
|
|
271
|
+
fn capabilities(&self) -> ModelCapabilities {
|
|
272
|
+
ModelCapabilities::default()
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/// Whether this provider requires network access.
|
|
276
|
+
/// Default is `true` for cloud LLM providers.
|
|
277
|
+
/// Override to `false` for local providers (e.g., Ollama).
|
|
278
|
+
fn requires_network(&self) -> bool {
|
|
279
|
+
true
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/// Create a chat completion
|
|
283
|
+
async fn chat(&self, request: ChatRequest) -> anyhow::Result<ChatResponse>;
|
|
284
|
+
|
|
285
|
+
/// Generate embeddings (if supported)
|
|
286
|
+
///
|
|
287
|
+
/// Default implementation returns an error. Providers that support embeddings
|
|
288
|
+
/// should override this method.
|
|
289
|
+
async fn embed(&self, _request: EmbeddingRequest) -> anyhow::Result<EmbeddingResponse> {
|
|
290
|
+
anyhow::bail!("Embeddings not supported by this provider")
|
|
291
|
+
}
|
|
292
|
+
}
|