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,240 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "WhatsApp"
|
|
3
|
+
weight = 3
|
|
4
|
+
+++
|
|
5
|
+
|
|
6
|
+
# WhatsApp Channel
|
|
7
|
+
|
|
8
|
+
Deploy your Enact agent to WhatsApp via Meta Business API.
|
|
9
|
+
|
|
10
|
+
## Status
|
|
11
|
+
|
|
12
|
+
| Feature | Status |
|
|
13
|
+
|---------|--------|
|
|
14
|
+
| Cloud API Integration | ✅ Implemented |
|
|
15
|
+
| Text Messages | ✅ Implemented |
|
|
16
|
+
| Interactive Messages | ✅ Implemented |
|
|
17
|
+
| Message Templates | ✅ Implemented |
|
|
18
|
+
| Media Messages | ✅ Implemented |
|
|
19
|
+
| Webhook Handling | ✅ Implemented |
|
|
20
|
+
|
|
21
|
+
## Setup
|
|
22
|
+
|
|
23
|
+
### 1. Create Meta Business Account
|
|
24
|
+
|
|
25
|
+
1. Go to [Meta Business Suite](https://business.facebook.com)
|
|
26
|
+
2. Create or select a business account
|
|
27
|
+
3. Go to [Meta for Developers](https://developers.facebook.com)
|
|
28
|
+
4. Create a new app (type: Business)
|
|
29
|
+
|
|
30
|
+
### 2. Set Up WhatsApp
|
|
31
|
+
|
|
32
|
+
1. In your app dashboard, add the WhatsApp product
|
|
33
|
+
2. Complete business verification
|
|
34
|
+
3. Set up a test phone number or add your business number
|
|
35
|
+
|
|
36
|
+
### 3. Get Credentials
|
|
37
|
+
|
|
38
|
+
From WhatsApp > API Setup:
|
|
39
|
+
- **Phone Number ID**
|
|
40
|
+
- **Access Token**
|
|
41
|
+
- **Webhook Verify Token** (create your own)
|
|
42
|
+
|
|
43
|
+
### 4. Configure Environment
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# .env
|
|
47
|
+
WHATSAPP_PHONE_NUMBER_ID=123456789012345
|
|
48
|
+
WHATSAPP_ACCESS_TOKEN=EAABc...
|
|
49
|
+
WHATSAPP_WEBHOOK_VERIFY_TOKEN=your-secret-token
|
|
50
|
+
WHATSAPP_APP_SECRET=your-app-secret # For signature verification
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 5. Run Channel (Rust API)
|
|
54
|
+
|
|
55
|
+
```rust
|
|
56
|
+
use enact_channels::whatsapp::{WhatsAppChannel, WhatsAppConfig};
|
|
57
|
+
|
|
58
|
+
#[tokio::main]
|
|
59
|
+
async fn main() -> anyhow::Result<()> {
|
|
60
|
+
let config = WhatsAppConfig {
|
|
61
|
+
phone_number_id: std::env::var("WHATSAPP_PHONE_NUMBER_ID")?,
|
|
62
|
+
access_token: std::env::var("WHATSAPP_ACCESS_TOKEN")?,
|
|
63
|
+
webhook_verify_token: std::env::var("WHATSAPP_WEBHOOK_VERIFY_TOKEN")?,
|
|
64
|
+
app_secret: std::env::var("WHATSAPP_APP_SECRET").ok(),
|
|
65
|
+
..Default::default()
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
let channel = WhatsAppChannel::new(config)?;
|
|
69
|
+
channel.run().await?;
|
|
70
|
+
|
|
71
|
+
Ok(())
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Configuration Options
|
|
76
|
+
|
|
77
|
+
```rust
|
|
78
|
+
pub struct WhatsAppConfig {
|
|
79
|
+
/// WhatsApp Business Phone Number ID
|
|
80
|
+
pub phone_number_id: String,
|
|
81
|
+
|
|
82
|
+
/// Meta Graph API Access Token
|
|
83
|
+
pub access_token: String,
|
|
84
|
+
|
|
85
|
+
/// Webhook verification token
|
|
86
|
+
pub webhook_verify_token: String,
|
|
87
|
+
|
|
88
|
+
/// App secret for signature verification
|
|
89
|
+
pub app_secret: Option<String>,
|
|
90
|
+
|
|
91
|
+
/// Graph API version
|
|
92
|
+
pub api_version: String, // default: "v18.0"
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Features
|
|
97
|
+
|
|
98
|
+
### Text Messages
|
|
99
|
+
|
|
100
|
+
```rust
|
|
101
|
+
channel.send(OutgoingMessage {
|
|
102
|
+
to: recipient_phone.clone(),
|
|
103
|
+
message_type: MessageContent::Text {
|
|
104
|
+
body: "Hello from Enact!".to_string(),
|
|
105
|
+
preview_url: false,
|
|
106
|
+
},
|
|
107
|
+
}).await?;
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Interactive Messages
|
|
111
|
+
|
|
112
|
+
```rust
|
|
113
|
+
use enact_channels::whatsapp::{Interactive, Button};
|
|
114
|
+
|
|
115
|
+
// Button message (max 3 buttons)
|
|
116
|
+
let buttons = Interactive::Buttons {
|
|
117
|
+
body: "How can I help?".to_string(),
|
|
118
|
+
buttons: vec![
|
|
119
|
+
Button::new("btn_order", "Check Order"),
|
|
120
|
+
Button::new("btn_support", "Get Support"),
|
|
121
|
+
Button::new("btn_info", "More Info"),
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
channel.send(OutgoingMessage {
|
|
126
|
+
to: recipient_phone,
|
|
127
|
+
message_type: MessageContent::Interactive(buttons),
|
|
128
|
+
}).await?;
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### List Messages
|
|
132
|
+
|
|
133
|
+
```rust
|
|
134
|
+
let list = Interactive::List {
|
|
135
|
+
body: "Select a category:".to_string(),
|
|
136
|
+
button: "View Options".to_string(),
|
|
137
|
+
sections: vec![
|
|
138
|
+
ListSection {
|
|
139
|
+
title: "Products".to_string(),
|
|
140
|
+
rows: vec![
|
|
141
|
+
ListRow::new("prod_1", "Product A", Some("Description")),
|
|
142
|
+
ListRow::new("prod_2", "Product B", Some("Description")),
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Message Templates
|
|
150
|
+
|
|
151
|
+
For initiating conversations:
|
|
152
|
+
|
|
153
|
+
```rust
|
|
154
|
+
channel.send_template(SendTemplate {
|
|
155
|
+
to: customer_phone,
|
|
156
|
+
template_name: "order_confirmation".to_string(),
|
|
157
|
+
language_code: "en".to_string(),
|
|
158
|
+
components: vec![
|
|
159
|
+
TemplateComponent::Body {
|
|
160
|
+
parameters: vec![
|
|
161
|
+
Parameter::Text("John".to_string()),
|
|
162
|
+
Parameter::Text("ORD-12345".to_string()),
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
}).await?;
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Media Messages
|
|
170
|
+
|
|
171
|
+
```rust
|
|
172
|
+
// Send image
|
|
173
|
+
channel.send(OutgoingMessage {
|
|
174
|
+
to: recipient_phone,
|
|
175
|
+
message_type: MessageContent::Image {
|
|
176
|
+
link: "https://example.com/image.png".to_string(),
|
|
177
|
+
caption: Some("Check this out!".to_string()),
|
|
178
|
+
},
|
|
179
|
+
}).await?;
|
|
180
|
+
|
|
181
|
+
// Send document
|
|
182
|
+
channel.send(OutgoingMessage {
|
|
183
|
+
to: recipient_phone,
|
|
184
|
+
message_type: MessageContent::Document {
|
|
185
|
+
link: "https://example.com/report.pdf".to_string(),
|
|
186
|
+
filename: "report.pdf".to_string(),
|
|
187
|
+
caption: Some("Your report".to_string()),
|
|
188
|
+
},
|
|
189
|
+
}).await?;
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Webhook Setup
|
|
193
|
+
|
|
194
|
+
WhatsApp requires a webhook endpoint:
|
|
195
|
+
|
|
196
|
+
```rust
|
|
197
|
+
use axum::{Router, routing::{get, post}};
|
|
198
|
+
|
|
199
|
+
let app = Router::new()
|
|
200
|
+
.route("/webhook", get(webhook_verify))
|
|
201
|
+
.route("/webhook", post(webhook_handler));
|
|
202
|
+
|
|
203
|
+
async fn webhook_verify(Query(params): Query<VerifyParams>) -> impl IntoResponse {
|
|
204
|
+
if params.hub_verify_token == config.webhook_verify_token {
|
|
205
|
+
params.hub_challenge
|
|
206
|
+
} else {
|
|
207
|
+
"Invalid token".to_string()
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Configure in Meta:**
|
|
213
|
+
1. Go to WhatsApp > Configuration
|
|
214
|
+
2. Add webhook URL: `https://your-domain.com/webhook`
|
|
215
|
+
3. Enter your verify token
|
|
216
|
+
4. Subscribe to: `messages`
|
|
217
|
+
|
|
218
|
+
## Rate Limits
|
|
219
|
+
|
|
220
|
+
| Tier | Messages/day | Requirement |
|
|
221
|
+
|------|--------------|-------------|
|
|
222
|
+
| Unverified | 250 | Testing only |
|
|
223
|
+
| Tier 1 | 1,000 | Business verified |
|
|
224
|
+
| Tier 2 | 10,000 | High quality rating |
|
|
225
|
+
| Tier 3 | 100,000 | High quality rating |
|
|
226
|
+
| Tier 4 | Unlimited | High quality rating |
|
|
227
|
+
|
|
228
|
+
## Security
|
|
229
|
+
|
|
230
|
+
### Signature Verification
|
|
231
|
+
|
|
232
|
+
Verify webhook requests:
|
|
233
|
+
|
|
234
|
+
```rust
|
|
235
|
+
fn verify_signature(payload: &[u8], signature: &str, app_secret: &str) -> bool {
|
|
236
|
+
let expected = hmac_sha256(app_secret.as_bytes(), payload);
|
|
237
|
+
let expected_hex = format!("sha256={}", hex::encode(expected));
|
|
238
|
+
signature == expected_hex
|
|
239
|
+
}
|
|
240
|
+
```
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "CLI Reference"
|
|
3
|
+
weight = 3
|
|
4
|
+
sort_by = "weight"
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# CLI Reference
|
|
8
|
+
|
|
9
|
+
The `enact` command-line interface for running agents and managing the gateway.
|
|
10
|
+
|
|
11
|
+
## Status
|
|
12
|
+
|
|
13
|
+
| Command | Status |
|
|
14
|
+
|---------|--------|
|
|
15
|
+
| `enact --help` | ✅ Complete |
|
|
16
|
+
| `enact version` | ✅ Complete |
|
|
17
|
+
| `enact doctor` | ✅ Complete |
|
|
18
|
+
| `enact run` | ✅ Complete |
|
|
19
|
+
| `enact serve` | ✅ Complete |
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Build from source
|
|
25
|
+
git clone https://github.com/adl-tan-theta/enactai.git
|
|
26
|
+
cd enya/enact-agent
|
|
27
|
+
cargo build --release
|
|
28
|
+
|
|
29
|
+
# Binary is at ./target/release/enact
|
|
30
|
+
|
|
31
|
+
# OR install via Cargo (recommended)
|
|
32
|
+
cargo install enact
|
|
33
|
+
|
|
34
|
+
# OR via npm
|
|
35
|
+
npm install -g enact
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Commands
|
|
39
|
+
|
|
40
|
+
### `enact --help`
|
|
41
|
+
|
|
42
|
+
Show all available commands.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
./target/release/enact --help
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### `enact version`
|
|
49
|
+
|
|
50
|
+
Display version information.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
./target/release/enact version
|
|
54
|
+
# enact 0.0.1
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### `enact doctor`
|
|
58
|
+
|
|
59
|
+
Run system diagnostics and check configuration.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
./target/release/enact doctor
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Output:**
|
|
66
|
+
```
|
|
67
|
+
Enact System Check
|
|
68
|
+
|
|
69
|
+
┌───────────┬────────┬─────────────────────────────────────────┐
|
|
70
|
+
│ Component │ Status │ Details │
|
|
71
|
+
├───────────┼────────┼─────────────────────────────────────────┤
|
|
72
|
+
│ API Key │ ✓ │ Configured │
|
|
73
|
+
│ WhatsApp │ ○ │ Optional - not configured │
|
|
74
|
+
│ Model │ ✓ │ gpt-4o-mini (default) │
|
|
75
|
+
└───────────┴────────┴─────────────────────────────────────────┘
|
|
76
|
+
|
|
77
|
+
Environment Variables:
|
|
78
|
+
✓ set OPENAI_API_KEY
|
|
79
|
+
not set AZURE_OPENAI_API_KEY
|
|
80
|
+
not set OPENAI_BASE_URL
|
|
81
|
+
✓ set OPENAI_MODEL
|
|
82
|
+
not set WHATSAPP_ACCESS_TOKEN
|
|
83
|
+
not set WHATSAPP_ENDPOINT_ID
|
|
84
|
+
not set WHATSAPP_VERIFY_TOKEN
|
|
85
|
+
not set WHATSAPP_APP_SECRET
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### `enact run`
|
|
89
|
+
|
|
90
|
+
Execute an agent with the given input.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
./target/release/enact run --input "What is the capital of France?"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Options:**
|
|
97
|
+
- `--input <TEXT>` - The input to send to the agent (required)
|
|
98
|
+
- `--agent <NAME>` - Agent name (default: "default")
|
|
99
|
+
- `--system-prompt <TEXT>` - Override system prompt
|
|
100
|
+
|
|
101
|
+
**Environment Variables:**
|
|
102
|
+
- `OPENAI_API_KEY` or `AZURE_OPENAI_API_KEY` - API key (required)
|
|
103
|
+
- `OPENAI_BASE_URL` - API base URL (default: `https://api.openai.com`)
|
|
104
|
+
- `OPENAI_MODEL` - Model to use (default: `gpt-4o-mini`)
|
|
105
|
+
|
|
106
|
+
**Example:**
|
|
107
|
+
```bash
|
|
108
|
+
OPENAI_API_KEY="sk-..." ./target/release/enact run \
|
|
109
|
+
--input "Explain quantum computing in simple terms"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### `enact serve`
|
|
113
|
+
|
|
114
|
+
Start the HTTP gateway server.
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
./target/release/enact serve --http-port 8080
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Options:**
|
|
121
|
+
- `--http-port <PORT>` - Port to listen on (default: 8080)
|
|
122
|
+
- `--air-gapped` - Run in air-gapped mode (disable external network calls)
|
|
123
|
+
|
|
124
|
+
**Environment Variables:**
|
|
125
|
+
- `WHATSAPP_ACCESS_TOKEN` - WhatsApp API token (required for WhatsApp)
|
|
126
|
+
- `WHATSAPP_ENDPOINT_ID` - WhatsApp phone number ID (required for WhatsApp)
|
|
127
|
+
- `WHATSAPP_VERIFY_TOKEN` - Webhook verification token (required for WhatsApp)
|
|
128
|
+
- `WHATSAPP_APP_SECRET` - App secret for signature verification (optional)
|
|
129
|
+
- `WHATSAPP_ALLOWED_NUMBERS` - Comma-separated list of allowed phone numbers (default: `*`)
|
|
130
|
+
- `OPENAI_API_KEY` - API key for agent responses (optional, falls back to echo mode)
|
|
131
|
+
|
|
132
|
+
**Example:**
|
|
133
|
+
```bash
|
|
134
|
+
WHATSAPP_ACCESS_TOKEN="EAABc..." \
|
|
135
|
+
WHATSAPP_ENDPOINT_ID="123456789012345" \
|
|
136
|
+
WHATSAPP_VERIFY_TOKEN="my-secret-token" \
|
|
137
|
+
OPENAI_API_KEY="sk-..." \
|
|
138
|
+
./target/release/enact serve --http-port 8080
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Gateway Endpoints
|
|
142
|
+
|
|
143
|
+
When running `enact serve`, the following endpoints are available:
|
|
144
|
+
|
|
145
|
+
| Endpoint | Method | Description |
|
|
146
|
+
|----------|--------|-------------|
|
|
147
|
+
| `/health` | GET | Health check |
|
|
148
|
+
| `/webhook/whatsapp` | GET | WhatsApp webhook verification |
|
|
149
|
+
| `/webhook/whatsapp` | POST | WhatsApp message webhook |
|
|
150
|
+
|
|
151
|
+
### Health Check
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
curl http://localhost:8080/health
|
|
155
|
+
# {"status":"ok"}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### WhatsApp Webhook Verification
|
|
159
|
+
|
|
160
|
+
Meta sends a GET request to verify your webhook:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
GET /webhook/whatsapp?hub.mode=subscribe&hub.verify_token=YOUR_TOKEN&hub.challenge=CHALLENGE
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
The server responds with the challenge if the verify token matches.
|
|
167
|
+
|
|
168
|
+
### WhatsApp Message Webhook
|
|
169
|
+
|
|
170
|
+
POST requests from WhatsApp are processed with:
|
|
171
|
+
- **Rate limiting**: 120 requests/minute per client (sliding window)
|
|
172
|
+
- **Idempotency**: Duplicate messages are ignored (5-minute TTL)
|
|
173
|
+
- **Signature verification**: If `WHATSAPP_APP_SECRET` is set
|
|
174
|
+
- **Request limits**: Max 64KB body, 30-second timeout
|
|
175
|
+
|
|
176
|
+
## Configuration
|
|
177
|
+
|
|
178
|
+
### Environment Variables
|
|
179
|
+
|
|
180
|
+
| Variable | Required | Description |
|
|
181
|
+
|----------|----------|-------------|
|
|
182
|
+
| `OPENAI_API_KEY` | Yes* | OpenAI API key |
|
|
183
|
+
| `AZURE_OPENAI_API_KEY` | Yes* | Azure OpenAI API key |
|
|
184
|
+
| `OPENAI_BASE_URL` | No | API base URL |
|
|
185
|
+
| `OPENAI_MODEL` | No | Model name (default: gpt-4o-mini) |
|
|
186
|
+
| `WHATSAPP_ACCESS_TOKEN` | For serve | WhatsApp API token |
|
|
187
|
+
| `WHATSAPP_ENDPOINT_ID` | For serve | WhatsApp phone number ID |
|
|
188
|
+
| `WHATSAPP_VERIFY_TOKEN` | For serve | Webhook verify token |
|
|
189
|
+
| `WHATSAPP_APP_SECRET` | No | For signature verification |
|
|
190
|
+
| `WHATSAPP_ALLOWED_NUMBERS` | No | Allowed phone numbers (comma-separated, or `*`) |
|
|
191
|
+
|
|
192
|
+
*One of `OPENAI_API_KEY` or `AZURE_OPENAI_API_KEY` is required for `run` command.
|
|
193
|
+
|
|
194
|
+
### Using .env File
|
|
195
|
+
|
|
196
|
+
Create a `.env` file in your working directory:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# .env
|
|
200
|
+
OPENAI_API_KEY=sk-...
|
|
201
|
+
OPENAI_MODEL=gpt-4o-mini
|
|
202
|
+
|
|
203
|
+
WHATSAPP_ACCESS_TOKEN=EAABc...
|
|
204
|
+
WHATSAPP_ENDPOINT_ID=123456789012345
|
|
205
|
+
WHATSAPP_VERIFY_TOKEN=my-secret-token
|
|
206
|
+
WHATSAPP_APP_SECRET=abc123
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Examples
|
|
210
|
+
|
|
211
|
+
### Run a Simple Query
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
OPENAI_API_KEY="sk-..." ./target/release/enact run --input "Hello!"
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Run with Custom Model
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
OPENAI_API_KEY="sk-..." \
|
|
221
|
+
OPENAI_MODEL="gpt-4" \
|
|
222
|
+
./target/release/enact run --input "Explain Rust ownership"
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Run with Azure OpenAI
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
AZURE_OPENAI_API_KEY="..." \
|
|
229
|
+
OPENAI_BASE_URL="https://your-resource.openai.azure.com" \
|
|
230
|
+
OPENAI_MODEL="gpt-4" \
|
|
231
|
+
./target/release/enact run --input "Hello!"
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Start Gateway for Production
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# Load from .env file
|
|
238
|
+
source .env
|
|
239
|
+
|
|
240
|
+
./target/release/enact serve --http-port 8080
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Air-Gapped Mode
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
OLLAMA_BASE_URL="http://localhost:11434" \
|
|
247
|
+
OPENAI_MODEL="llama3" \
|
|
248
|
+
./target/release/enact serve --http-port 8080 --air-gapped
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Roadmap
|
|
252
|
+
|
|
253
|
+
### Phase 2 (Planned)
|
|
254
|
+
- [ ] `enact init` - Create new agent project
|
|
255
|
+
- [ ] `enact validate` - Validate YAML syntax
|
|
256
|
+
- [ ] `enact console` - Interactive TUI
|
|
257
|
+
|
|
258
|
+
### Phase 3 (Planned)
|
|
259
|
+
- [ ] `enact deploy` - Deploy to channels
|
|
260
|
+
- [ ] `enact logs` - View execution logs
|
|
261
|
+
- [ ] `enact eval` - Run evaluation suites
|