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,273 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Concepts"
|
|
3
|
+
weight = 5
|
|
4
|
+
sort_by = "weight"
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# Core Concepts
|
|
8
|
+
|
|
9
|
+
Understanding Enact's architecture and design.
|
|
10
|
+
|
|
11
|
+
## Architecture Overview
|
|
12
|
+
|
|
13
|
+
Enact is built on a modular crate architecture:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
17
|
+
│ enact-cli │
|
|
18
|
+
│ doctor │ run │ serve │ version │
|
|
19
|
+
└───────────────────────────────┬─────────────────────────────────┘
|
|
20
|
+
│
|
|
21
|
+
┌───────────────────────────────▼─────────────────────────────────┐
|
|
22
|
+
│ enact-runner │
|
|
23
|
+
│ DefaultAgentRunner │ LoopOutcome │ Retry │
|
|
24
|
+
└───────────────────────────────┬─────────────────────────────────┘
|
|
25
|
+
│
|
|
26
|
+
┌───────────────────────────────▼─────────────────────────────────┐
|
|
27
|
+
│ enact-core │
|
|
28
|
+
│ LlmCallable │ Callable trait │ Graph System │
|
|
29
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
30
|
+
│
|
|
31
|
+
┌───────────────┬───────────┼───────────┬───────────────┐
|
|
32
|
+
▼ ▼ ▼ ▼ ▼
|
|
33
|
+
┌─────────┐ ┌───────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
34
|
+
│ skills │ │ providers │ │ gateway │ │channels │ │ mcp │
|
|
35
|
+
│ TOML/MD │ │ OpenAI, │ │ HTTP │ │WhatsApp │ │ Stdio │
|
|
36
|
+
│ tools │ │ Azure,etc │ │ Axum │ │Telegram │ │JSON-RPC │
|
|
37
|
+
└─────────┘ └───────────┘ └─────────┘ └─────────┘ └─────────┘
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Callable
|
|
41
|
+
|
|
42
|
+
The `Callable` trait is the core abstraction for anything that can process input:
|
|
43
|
+
|
|
44
|
+
```rust
|
|
45
|
+
#[async_trait]
|
|
46
|
+
pub trait Callable: Send + Sync {
|
|
47
|
+
fn name(&self) -> &str;
|
|
48
|
+
async fn run(&self, input: &str) -> anyhow::Result<String>;
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### LlmCallable
|
|
53
|
+
|
|
54
|
+
LLM-powered callable with system prompt:
|
|
55
|
+
|
|
56
|
+
```rust
|
|
57
|
+
let callable = LlmCallable::with_provider(
|
|
58
|
+
"assistant",
|
|
59
|
+
"You are a helpful assistant.",
|
|
60
|
+
provider,
|
|
61
|
+
);
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Runner
|
|
65
|
+
|
|
66
|
+
The `DefaultAgentRunner` executes callables with production features:
|
|
67
|
+
|
|
68
|
+
```rust
|
|
69
|
+
let mut runner = DefaultAgentRunner::default_new();
|
|
70
|
+
let outcome = runner.run(&callable, "Hello!").await?;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### LoopOutcome
|
|
74
|
+
|
|
75
|
+
Execution results:
|
|
76
|
+
|
|
77
|
+
```rust
|
|
78
|
+
enum LoopOutcome {
|
|
79
|
+
Completed(String), // Success
|
|
80
|
+
MaxIterationsReached { last_output, iterations },
|
|
81
|
+
Cancelled,
|
|
82
|
+
TimedOut { elapsed_secs },
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Gateway
|
|
87
|
+
|
|
88
|
+
The HTTP gateway connects channels to the runner:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
WhatsApp Message → WhatsAppChannel → RunnerResponder → DefaultAgentRunner → Response
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### InboundResponder
|
|
95
|
+
|
|
96
|
+
Custom message handling:
|
|
97
|
+
|
|
98
|
+
```rust
|
|
99
|
+
#[async_trait]
|
|
100
|
+
pub trait InboundResponder: Send + Sync {
|
|
101
|
+
async fn handle(&self, message: &ChannelMessage) -> anyhow::Result<Option<String>>;
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Built-in implementations:
|
|
106
|
+
- `EchoResponder` - Returns input as output
|
|
107
|
+
- `RunnerResponder` - Routes through `DefaultAgentRunner`
|
|
108
|
+
|
|
109
|
+
### Gateway Features
|
|
110
|
+
|
|
111
|
+
| Feature | Description |
|
|
112
|
+
|---------|-------------|
|
|
113
|
+
| Rate Limiting | Sliding window, 120/min per client |
|
|
114
|
+
| Idempotency | 5-minute TTL, SHA-256 deduplication |
|
|
115
|
+
| Signature Verification | HMAC-SHA256 validation |
|
|
116
|
+
| Request Limits | 64KB body, 30s timeout |
|
|
117
|
+
|
|
118
|
+
## Channels
|
|
119
|
+
|
|
120
|
+
Channels connect external messaging platforms:
|
|
121
|
+
|
|
122
|
+
```rust
|
|
123
|
+
#[async_trait]
|
|
124
|
+
pub trait Channel: Send + Sync {
|
|
125
|
+
fn channel_id(&self) -> &str;
|
|
126
|
+
async fn receive(&self) -> Result<IncomingMessage>;
|
|
127
|
+
async fn send(&self, message: OutgoingMessage) -> Result<MessageId>;
|
|
128
|
+
async fn run(&self) -> Result<()>;
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### WhatsAppChannel
|
|
133
|
+
|
|
134
|
+
```rust
|
|
135
|
+
let channel = WhatsAppChannel::new(
|
|
136
|
+
access_token,
|
|
137
|
+
endpoint_id,
|
|
138
|
+
verify_token,
|
|
139
|
+
allowed_numbers,
|
|
140
|
+
);
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Providers
|
|
144
|
+
|
|
145
|
+
LLM providers implement `ModelProvider`:
|
|
146
|
+
|
|
147
|
+
```rust
|
|
148
|
+
#[async_trait]
|
|
149
|
+
pub trait ModelProvider: Send + Sync {
|
|
150
|
+
async fn complete(&self, request: ChatRequest) -> Result<ChatResponse>;
|
|
151
|
+
fn requires_network(&self) -> bool { true }
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### OpenAICompatible
|
|
156
|
+
|
|
157
|
+
Works with OpenAI, Azure, Ollama, OpenRouter:
|
|
158
|
+
|
|
159
|
+
```rust
|
|
160
|
+
let provider = OpenAICompatible::new(
|
|
161
|
+
"https://api.openai.com",
|
|
162
|
+
"gpt-4o-mini",
|
|
163
|
+
Some(api_key),
|
|
164
|
+
);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## YAML Agent Schema
|
|
168
|
+
|
|
169
|
+
Agents can be defined as YAML DAGs:
|
|
170
|
+
|
|
171
|
+
```yaml
|
|
172
|
+
name: my-agent
|
|
173
|
+
version: "1.0"
|
|
174
|
+
|
|
175
|
+
nodes:
|
|
176
|
+
process:
|
|
177
|
+
type: llm
|
|
178
|
+
system_prompt: "You are helpful."
|
|
179
|
+
edges:
|
|
180
|
+
_default: END
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Node Types
|
|
184
|
+
|
|
185
|
+
| Type | Description |
|
|
186
|
+
|------|-------------|
|
|
187
|
+
| `llm` | LLM processing with system prompt |
|
|
188
|
+
| `function` | Execute shell command |
|
|
189
|
+
| `condition` | Branch based on expression |
|
|
190
|
+
| `graph` | Execute sub-graph |
|
|
191
|
+
|
|
192
|
+
## Configuration
|
|
193
|
+
|
|
194
|
+
Environment-based configuration:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# LLM Provider
|
|
198
|
+
OPENAI_API_KEY=sk-...
|
|
199
|
+
OPENAI_MODEL=gpt-4o-mini
|
|
200
|
+
OPENAI_BASE_URL=https://api.openai.com
|
|
201
|
+
|
|
202
|
+
# WhatsApp
|
|
203
|
+
WHATSAPP_ACCESS_TOKEN=...
|
|
204
|
+
WHATSAPP_ENDPOINT_ID=...
|
|
205
|
+
WHATSAPP_VERIFY_TOKEN=...
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Skills System
|
|
209
|
+
|
|
210
|
+
Skills are user-defined or community-built capabilities. They live in `~/.enact/skills/<name>/` or in your workspace `skills/` directory.
|
|
211
|
+
|
|
212
|
+
### Skill Formats
|
|
213
|
+
|
|
214
|
+
**SKILL.toml** - Structured format with tools:
|
|
215
|
+
|
|
216
|
+
```toml
|
|
217
|
+
[skill]
|
|
218
|
+
name = "my-skill"
|
|
219
|
+
description = "What this skill does"
|
|
220
|
+
version = "0.1.0"
|
|
221
|
+
author = "your-name"
|
|
222
|
+
tags = ["productivity", "automation"]
|
|
223
|
+
|
|
224
|
+
[[tools]]
|
|
225
|
+
name = "my_tool"
|
|
226
|
+
description = "What this tool does"
|
|
227
|
+
kind = "shell"
|
|
228
|
+
command = "echo hello"
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**SKILL.md** - Simple markdown with instructions for the agent.
|
|
232
|
+
|
|
233
|
+
### Open-Skills Integration
|
|
234
|
+
|
|
235
|
+
Enact automatically syncs with the [open-skills](https://github.com/besoeasy/open-skills) community repository.
|
|
236
|
+
|
|
237
|
+
## MCP Client
|
|
238
|
+
|
|
239
|
+
The Model Context Protocol (MCP) client connects to MCP servers via stdio transport.
|
|
240
|
+
|
|
241
|
+
### Connecting to an MCP Server
|
|
242
|
+
|
|
243
|
+
```rust
|
|
244
|
+
use enact_mcp::McpStdioClient;
|
|
245
|
+
|
|
246
|
+
let mut client = McpStdioClient::new("mcp-server", &["--arg"]).await?;
|
|
247
|
+
|
|
248
|
+
// List available tools
|
|
249
|
+
let tools = client.list_tools().await?;
|
|
250
|
+
|
|
251
|
+
// Call a tool
|
|
252
|
+
let result = client.call_tool("tool_name", json!({"arg": "value"})).await?;
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### MCP Features
|
|
256
|
+
|
|
257
|
+
- **JSON-RPC 2.0 protocol**
|
|
258
|
+
- **Stdio transport** (subprocess communication)
|
|
259
|
+
- **Tool discovery** via `tools/list`
|
|
260
|
+
- **Tool execution** via `tools/call`
|
|
261
|
+
- **Async/await support**
|
|
262
|
+
|
|
263
|
+
## Future Concepts
|
|
264
|
+
|
|
265
|
+
### OAuth Token Lifecycle (Phase 1)
|
|
266
|
+
- Token management
|
|
267
|
+
- Automatic refresh
|
|
268
|
+
- Secure storage
|
|
269
|
+
|
|
270
|
+
### Multi-Agent (Phase 2)
|
|
271
|
+
- Agent communication
|
|
272
|
+
- Orchestration
|
|
273
|
+
- Shared state
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Configuration"
|
|
3
|
+
weight = 4
|
|
4
|
+
sort_by = "weight"
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# Configuration
|
|
8
|
+
|
|
9
|
+
Enact configuration via environment variables and `.env` files.
|
|
10
|
+
|
|
11
|
+
## Status
|
|
12
|
+
|
|
13
|
+
| Feature | Status |
|
|
14
|
+
|---------|--------|
|
|
15
|
+
| `.env` file loading | ✅ Implemented |
|
|
16
|
+
| Environment variables | ✅ Implemented |
|
|
17
|
+
| Config struct | ✅ Implemented |
|
|
18
|
+
| CLI config commands | 🚧 Future |
|
|
19
|
+
| Encrypted settings | 🚧 Future |
|
|
20
|
+
| Config TUI | 🚧 Future |
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
Create a `.env` file in your project root:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# .env
|
|
28
|
+
OPENAI_API_KEY=sk-...
|
|
29
|
+
TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Load configuration in Rust:
|
|
33
|
+
|
|
34
|
+
```rust
|
|
35
|
+
use enact_config::Config;
|
|
36
|
+
|
|
37
|
+
let config = Config::load()?;
|
|
38
|
+
let api_key = config.openai_api_key()?;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Environment Variables
|
|
42
|
+
|
|
43
|
+
### LLM Providers
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Azure OpenAI
|
|
47
|
+
AZURE_OPENAI_API_KEY=your-key
|
|
48
|
+
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
|
|
49
|
+
AZURE_OPENAI_DEPLOYMENT=gpt-4
|
|
50
|
+
AZURE_OPENAI_API_VERSION=2024-02-01
|
|
51
|
+
|
|
52
|
+
# OpenAI
|
|
53
|
+
OPENAI_API_KEY=sk-...
|
|
54
|
+
OPENAI_ORG_ID=org-... # Optional
|
|
55
|
+
|
|
56
|
+
# Anthropic
|
|
57
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
58
|
+
|
|
59
|
+
# Google
|
|
60
|
+
GOOGLE_API_KEY=...
|
|
61
|
+
|
|
62
|
+
# OpenRouter
|
|
63
|
+
OPENROUTER_API_KEY=sk-or-...
|
|
64
|
+
|
|
65
|
+
# Ollama (local)
|
|
66
|
+
OLLAMA_ENDPOINT=http://localhost:11434
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Channels
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Telegram
|
|
73
|
+
TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
|
|
74
|
+
|
|
75
|
+
# Teams
|
|
76
|
+
TEAMS_APP_ID=your-azure-ad-app-id
|
|
77
|
+
TEAMS_APP_SECRET=your-client-secret
|
|
78
|
+
TEAMS_TENANT_ID=your-tenant-id # or "common" for multi-tenant
|
|
79
|
+
|
|
80
|
+
# WhatsApp
|
|
81
|
+
WHATSAPP_PHONE_NUMBER_ID=123456789012345
|
|
82
|
+
WHATSAPP_ACCESS_TOKEN=EAABc...
|
|
83
|
+
WHATSAPP_WEBHOOK_VERIFY_TOKEN=your-secret-token
|
|
84
|
+
WHATSAPP_APP_SECRET=your-app-secret # Optional, for signature verification
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Using Configuration
|
|
88
|
+
|
|
89
|
+
### In Rust Code
|
|
90
|
+
|
|
91
|
+
```rust
|
|
92
|
+
use enact_config::Config;
|
|
93
|
+
use enact_providers::azure::AzureOpenAiProvider;
|
|
94
|
+
|
|
95
|
+
// Load config from .env and environment
|
|
96
|
+
let config = Config::load()?;
|
|
97
|
+
|
|
98
|
+
// Create provider from config
|
|
99
|
+
let provider = AzureOpenAiProvider::from_config(&config)?;
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Config Struct
|
|
103
|
+
|
|
104
|
+
```rust
|
|
105
|
+
pub struct Config {
|
|
106
|
+
// Azure OpenAI
|
|
107
|
+
pub azure_openai_api_key: Option<String>,
|
|
108
|
+
pub azure_openai_endpoint: Option<String>,
|
|
109
|
+
pub azure_openai_deployment: Option<String>,
|
|
110
|
+
pub azure_openai_api_version: Option<String>,
|
|
111
|
+
|
|
112
|
+
// OpenAI
|
|
113
|
+
pub openai_api_key: Option<String>,
|
|
114
|
+
pub openai_org_id: Option<String>,
|
|
115
|
+
|
|
116
|
+
// Anthropic
|
|
117
|
+
pub anthropic_api_key: Option<String>,
|
|
118
|
+
|
|
119
|
+
// Google
|
|
120
|
+
pub google_api_key: Option<String>,
|
|
121
|
+
|
|
122
|
+
// OpenRouter
|
|
123
|
+
pub openrouter_api_key: Option<String>,
|
|
124
|
+
|
|
125
|
+
// Ollama
|
|
126
|
+
pub ollama_endpoint: Option<String>,
|
|
127
|
+
|
|
128
|
+
// Telegram
|
|
129
|
+
pub telegram_bot_token: Option<String>,
|
|
130
|
+
|
|
131
|
+
// Teams
|
|
132
|
+
pub teams_app_id: Option<String>,
|
|
133
|
+
pub teams_app_secret: Option<String>,
|
|
134
|
+
pub teams_tenant_id: Option<String>,
|
|
135
|
+
|
|
136
|
+
// WhatsApp
|
|
137
|
+
pub whatsapp_phone_number_id: Option<String>,
|
|
138
|
+
pub whatsapp_access_token: Option<String>,
|
|
139
|
+
pub whatsapp_webhook_verify_token: Option<String>,
|
|
140
|
+
pub whatsapp_app_secret: Option<String>,
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Configuration Priority
|
|
145
|
+
|
|
146
|
+
Configuration values are loaded in this order (later overrides earlier):
|
|
147
|
+
|
|
148
|
+
1. Default values
|
|
149
|
+
2. `.env` file in current directory
|
|
150
|
+
3. Environment variables
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Environment variable overrides .env file
|
|
154
|
+
export OPENAI_API_KEY=sk-override...
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Security Best Practices
|
|
158
|
+
|
|
159
|
+
### Never Commit Secrets
|
|
160
|
+
|
|
161
|
+
Add `.env` to `.gitignore`:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# .gitignore
|
|
165
|
+
.env
|
|
166
|
+
.env.local
|
|
167
|
+
.env.*.local
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Use Different Keys per Environment
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# .env.development
|
|
174
|
+
OPENAI_API_KEY=sk-dev-...
|
|
175
|
+
|
|
176
|
+
# .env.production
|
|
177
|
+
OPENAI_API_KEY=sk-prod-...
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Validate Required Config
|
|
181
|
+
|
|
182
|
+
```rust
|
|
183
|
+
let config = Config::load()?;
|
|
184
|
+
|
|
185
|
+
// These will error if not set
|
|
186
|
+
let api_key = config.openai_api_key()
|
|
187
|
+
.ok_or_else(|| anyhow::anyhow!("OPENAI_API_KEY not set"))?;
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Future Configuration (🚧 Planned)
|
|
193
|
+
|
|
194
|
+
### CLI Config Commands (🚧 Future)
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Open interactive configuration TUI
|
|
198
|
+
enact config
|
|
199
|
+
|
|
200
|
+
# Or set values via CLI
|
|
201
|
+
enact config set runtime.mode local
|
|
202
|
+
enact config get runtime.mode
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Encrypted Settings (🚧 Future)
|
|
206
|
+
|
|
207
|
+
Non-sensitive settings will be stored encrypted:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
enact config set runtime.stepTimeoutMs 30000
|
|
211
|
+
enact config set storage.vectorStore.type qdrant
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Storage location (planned):
|
|
215
|
+
- macOS: `~/.config/enact/config.encrypted`
|
|
216
|
+
- Linux: `~/.config/enact/config.encrypted`
|
|
217
|
+
- Windows: `%APPDATA%\enact\config.encrypted`
|
|
218
|
+
|
|
219
|
+
### Runtime Modes (🚧 Future)
|
|
220
|
+
|
|
221
|
+
| Mode | Network | Cloud Sync | Use Case |
|
|
222
|
+
|------|---------|------------|----------|
|
|
223
|
+
| `local` | ✅ Full | ❌ Off | Development, personal use |
|
|
224
|
+
| `airgapped` | ❌ Blocked | ❌ Off | Enterprise, secure environments |
|
|
225
|
+
| `cloud` | ✅ Full | ✅ On | Team collaboration |
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# Set mode (Future)
|
|
229
|
+
enact config set runtime.mode airgapped
|
|
230
|
+
|
|
231
|
+
# Or via CLI flag (Future)
|
|
232
|
+
enact serve --air-gapped
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Air-Gapped Mode (🚧 Future)
|
|
236
|
+
|
|
237
|
+
When `runtime.mode = airgapped`:
|
|
238
|
+
- All outbound network calls are blocked
|
|
239
|
+
- Only local features available (Ollama, local storage)
|
|
240
|
+
- Telemetry exporters are disabled
|
|
241
|
+
- Cloud sync is disabled
|