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,186 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Installation"
|
|
3
|
+
weight = 1
|
|
4
|
+
sort_by = "weight"
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# Installation
|
|
8
|
+
|
|
9
|
+
Enact can be installed via multiple methods. Choose the one that works best for you.
|
|
10
|
+
|
|
11
|
+
## Status
|
|
12
|
+
|
|
13
|
+
| Installation Method | Status |
|
|
14
|
+
|---------------------|--------|
|
|
15
|
+
| Build from Source | ✅ Available |
|
|
16
|
+
| Cargo (crates.io) | ✅ Available |
|
|
17
|
+
| npm | ✅ Available |
|
|
18
|
+
| Homebrew | 🚧 Future |
|
|
19
|
+
| Docker | 🚧 Future |
|
|
20
|
+
| Install Script | 🚧 Future |
|
|
21
|
+
|
|
22
|
+
## Quick Install
|
|
23
|
+
|
|
24
|
+
Choose your preferred package manager:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Using Cargo (recommended for Rust users)
|
|
28
|
+
cargo install enact
|
|
29
|
+
|
|
30
|
+
# Using npm (recommended for Node.js users)
|
|
31
|
+
npm install -g enact
|
|
32
|
+
|
|
33
|
+
# Using Homebrew (macOS/Linux)
|
|
34
|
+
brew install enact
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Cargo (crates.io)
|
|
38
|
+
|
|
39
|
+
Install from crates.io:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
cargo install enact
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This downloads pre-built binaries. To build from source instead:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
cargo install enact --force --git https://github.com/adl-tan-theta/enactai
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## npm
|
|
52
|
+
|
|
53
|
+
Install pre-built binaries via npm:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Global installation
|
|
57
|
+
npm install -g enact
|
|
58
|
+
|
|
59
|
+
# Verify installation
|
|
60
|
+
enact --version
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The npm package includes binaries for:
|
|
64
|
+
- macOS (Intel & Apple Silicon)
|
|
65
|
+
- Linux (x64 & ARM64)
|
|
66
|
+
- Windows
|
|
67
|
+
|
|
68
|
+
## Build from Source
|
|
69
|
+
|
|
70
|
+
If you need the latest development version or want to contribute:
|
|
71
|
+
|
|
72
|
+
### Prerequisites
|
|
73
|
+
|
|
74
|
+
- **Rust**: 1.75+ (install via [rustup](https://rustup.rs))
|
|
75
|
+
- **Git**: For cloning the repository
|
|
76
|
+
|
|
77
|
+
### Steps
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# 1. Clone the repository
|
|
81
|
+
git clone https://github.com/adl-tan-theta/enactai.git
|
|
82
|
+
cd enya/enact-agent
|
|
83
|
+
|
|
84
|
+
# 2. Build all crates
|
|
85
|
+
cargo build --release
|
|
86
|
+
|
|
87
|
+
# 3. (Optional) Run tests
|
|
88
|
+
cargo test
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Development Build
|
|
92
|
+
|
|
93
|
+
For faster iteration during development:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Build with debug symbols
|
|
97
|
+
cargo build
|
|
98
|
+
|
|
99
|
+
# Run a specific crate
|
|
100
|
+
cargo run -p enact-runner
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Verify Build
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Check that crates compile
|
|
107
|
+
cargo check --workspace
|
|
108
|
+
|
|
109
|
+
# Run tests
|
|
110
|
+
cargo test --workspace
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Requirements
|
|
114
|
+
|
|
115
|
+
### System Requirements
|
|
116
|
+
|
|
117
|
+
- **OS**: macOS 12+, Linux (glibc 2.31+), Windows 10+
|
|
118
|
+
- **Memory**: 256MB minimum, 512MB recommended
|
|
119
|
+
- **Disk**: ~500MB for build artifacts (source build only)
|
|
120
|
+
|
|
121
|
+
### Runtime Dependencies
|
|
122
|
+
|
|
123
|
+
- **API Keys**: At least one LLM provider (OpenAI, Anthropic, Azure, etc.)
|
|
124
|
+
- **Network**: Outbound HTTPS for API calls (unless using Ollama locally)
|
|
125
|
+
|
|
126
|
+
## Using as a Library
|
|
127
|
+
|
|
128
|
+
Since Enact is a workspace of crates, you can use individual crates as dependencies:
|
|
129
|
+
|
|
130
|
+
```toml
|
|
131
|
+
# Cargo.toml
|
|
132
|
+
[dependencies]
|
|
133
|
+
enact-core = "0.0.1"
|
|
134
|
+
enact-providers = "0.0.1"
|
|
135
|
+
enact-channels = "0.0.1"
|
|
136
|
+
enact-config = "0.0.1"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Or with git:
|
|
140
|
+
|
|
141
|
+
```toml
|
|
142
|
+
[dependencies]
|
|
143
|
+
enact-core = { git = "https://github.com/adl-tan-theta/enactai", package = "enact-core" }
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Next Steps
|
|
147
|
+
|
|
148
|
+
- [Quick Start](/getting-started/) - Configure and run your first agent
|
|
149
|
+
- [Configuration](/configuration/) - Set up API keys and channels
|
|
150
|
+
- [YAML Schema](/yaml-schema/) - Learn the agent definition format
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Future Installation Methods (🚧 Planned)
|
|
155
|
+
|
|
156
|
+
### Homebrew (macOS)
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
brew install enact
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Docker
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Pull the image
|
|
166
|
+
docker pull ghcr.io/adl-tan-theta/enya/enact:latest
|
|
167
|
+
|
|
168
|
+
# Run with config mounted
|
|
169
|
+
docker run -d \
|
|
170
|
+
--name enact \
|
|
171
|
+
-v ~/.enact:/root/.enact \
|
|
172
|
+
-p 18789:18789 \
|
|
173
|
+
ghcr.io/adl-tan-theta/enya/enact:latest serve
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Binary Downloads
|
|
177
|
+
|
|
178
|
+
Pre-built binaries from GitHub Releases:
|
|
179
|
+
|
|
180
|
+
| Platform | Architecture | Download |
|
|
181
|
+
|----------|--------------|----------|
|
|
182
|
+
| macOS | Apple Silicon (M1/M2) | `enact-aarch64-apple-darwin.tar.gz` |
|
|
183
|
+
| macOS | Intel | `enact-x86_64-apple-darwin.tar.gz` |
|
|
184
|
+
| Linux | x64 | `enact-x86_64-unknown-linux-gnu.tar.gz` |
|
|
185
|
+
| Linux | ARM64 | `enact-aarch64-unknown-linux-gnu.tar.gz` |
|
|
186
|
+
| Windows | x64 | `enact-x86_64-pc-windows-msvc.exe` |
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Uninstalling"
|
|
3
|
+
weight = 3
|
|
4
|
+
+++
|
|
5
|
+
|
|
6
|
+
# Uninstalling Enact
|
|
7
|
+
|
|
8
|
+
Since Enact is currently built from source, uninstalling means removing the source directory and any build artifacts.
|
|
9
|
+
|
|
10
|
+
## Remove Source Directory
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# Remove the cloned repository
|
|
14
|
+
rm -rf /path/to/enact-agent
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Remove Cargo Artifacts
|
|
18
|
+
|
|
19
|
+
If you installed any crates globally:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# List installed binaries (if any)
|
|
23
|
+
ls ~/.cargo/bin/ | grep enact
|
|
24
|
+
|
|
25
|
+
# Remove if present
|
|
26
|
+
rm ~/.cargo/bin/enact
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Remove Configuration
|
|
30
|
+
|
|
31
|
+
If you created any configuration files:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Remove .env files in your project directories
|
|
35
|
+
rm /path/to/your-project/.env
|
|
36
|
+
|
|
37
|
+
# Remove any Enact-specific config (future)
|
|
38
|
+
rm -rf ~/.config/enact/
|
|
39
|
+
rm -rf ~/.enact/
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Clean Cargo Cache
|
|
43
|
+
|
|
44
|
+
To free up disk space from cached dependencies:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Remove cached crates used by Enact
|
|
48
|
+
cargo cache -r # requires cargo-cache
|
|
49
|
+
# or
|
|
50
|
+
rm -rf ~/.cargo/registry/cache/*/enact*
|
|
51
|
+
rm -rf ~/.cargo/git/checkouts/*enact*
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Revoke Channel Access
|
|
55
|
+
|
|
56
|
+
If you configured messaging channels, you may want to revoke access:
|
|
57
|
+
|
|
58
|
+
### Telegram
|
|
59
|
+
1. Open [@BotFather](https://t.me/botfather)
|
|
60
|
+
2. Send `/deletebot`
|
|
61
|
+
3. Select your bot
|
|
62
|
+
|
|
63
|
+
### Teams
|
|
64
|
+
1. Go to Azure Portal > App registrations
|
|
65
|
+
2. Delete the app registration
|
|
66
|
+
|
|
67
|
+
### WhatsApp
|
|
68
|
+
1. Go to Meta Business Suite
|
|
69
|
+
2. Remove the WhatsApp business account
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Future Uninstall Methods (🚧 Planned)
|
|
74
|
+
|
|
75
|
+
When official installation methods are available:
|
|
76
|
+
|
|
77
|
+
### Cargo (🚧 Future)
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
cargo uninstall enact
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Homebrew (🚧 Future)
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
brew uninstall enact
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### npm (🚧 Future)
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
npm uninstall -g @enact/cli
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Docker (🚧 Future)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
docker stop enact
|
|
99
|
+
docker rm enact
|
|
100
|
+
docker rmi ghcr.io/your-org/enact:latest
|
|
101
|
+
```
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "Updating"
|
|
3
|
+
weight = 2
|
|
4
|
+
+++
|
|
5
|
+
|
|
6
|
+
# Updating Enact
|
|
7
|
+
|
|
8
|
+
Keep Enact up to date by pulling the latest source code.
|
|
9
|
+
|
|
10
|
+
## Check Current Version
|
|
11
|
+
|
|
12
|
+
Since Enact is currently built from source, check your git commit:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
cd enact-agent
|
|
16
|
+
git log -1 --oneline
|
|
17
|
+
# e.g., abc1234 Add WhatsApp channel support
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Update from Source
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
cd enact-agent
|
|
24
|
+
|
|
25
|
+
# Fetch latest changes
|
|
26
|
+
git fetch origin
|
|
27
|
+
|
|
28
|
+
# Pull latest main branch
|
|
29
|
+
git pull origin main
|
|
30
|
+
|
|
31
|
+
# Rebuild
|
|
32
|
+
cargo build --release
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Handling Conflicts
|
|
36
|
+
|
|
37
|
+
If you have local changes:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Option 1: Stash your changes
|
|
41
|
+
git stash
|
|
42
|
+
git pull origin main
|
|
43
|
+
git stash pop
|
|
44
|
+
|
|
45
|
+
# Option 2: Create a branch for your changes
|
|
46
|
+
git checkout -b my-changes
|
|
47
|
+
git checkout main
|
|
48
|
+
git pull origin main
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Clean Rebuild
|
|
52
|
+
|
|
53
|
+
If you encounter build issues after updating:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Clean build artifacts
|
|
57
|
+
cargo clean
|
|
58
|
+
|
|
59
|
+
# Rebuild everything
|
|
60
|
+
cargo build --release
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Future Update Methods (🚧 Planned)
|
|
66
|
+
|
|
67
|
+
### Self-Update Command (🚧 Future)
|
|
68
|
+
|
|
69
|
+
When the CLI is fully implemented:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Check for updates
|
|
73
|
+
enact update --check
|
|
74
|
+
|
|
75
|
+
# Update to latest
|
|
76
|
+
enact update
|
|
77
|
+
|
|
78
|
+
# Update to specific version
|
|
79
|
+
enact update --version 0.1.0
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Cargo (🚧 Future)
|
|
83
|
+
|
|
84
|
+
When published to crates.io:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
cargo install enact --force
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Homebrew (🚧 Future)
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
brew upgrade enact
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### npm (🚧 Future)
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm update -g @enact/cli
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Docker (🚧 Future)
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
docker pull ghcr.io/your-org/enact:latest
|
|
106
|
+
docker-compose up -d
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Changelog
|
|
110
|
+
|
|
111
|
+
See the [Changelog](https://github.com/your-org/enact-agent/blob/main/CHANGELOG.md) for what's new in each release.
|
|
112
|
+
|
|
113
|
+
## Migration Notes
|
|
114
|
+
|
|
115
|
+
When updating, check for:
|
|
116
|
+
- Changes to YAML schema format
|
|
117
|
+
- New required configuration options
|
|
118
|
+
- API changes in library code
|
|
119
|
+
|
|
120
|
+
The project is still in early development, so breaking changes may occur between versions.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
+++
|
|
2
|
+
title = "MCP Client"
|
|
3
|
+
weight = 8
|
|
4
|
+
sort_by = "weight"
|
|
5
|
+
+++
|
|
6
|
+
|
|
7
|
+
# MCP Client
|
|
8
|
+
|
|
9
|
+
The Model Context Protocol (MCP) client allows Enact to connect to MCP servers and use their tools.
|
|
10
|
+
|
|
11
|
+
## Status
|
|
12
|
+
|
|
13
|
+
| Feature | Status |
|
|
14
|
+
|---------|--------|
|
|
15
|
+
| Stdio transport support | ✅ Complete |
|
|
16
|
+
| JSON-RPC protocol | ✅ Complete |
|
|
17
|
+
| Tool listing | ✅ Complete |
|
|
18
|
+
| Tool calling | ✅ Complete |
|
|
19
|
+
| Async/await support | ✅ Complete |
|
|
20
|
+
|
|
21
|
+
## What is MCP?
|
|
22
|
+
|
|
23
|
+
The [Model Context Protocol](https://modelcontextprotocol.io/) is a standard for connecting AI models to external tools and data sources. It enables:
|
|
24
|
+
|
|
25
|
+
- **Tool discovery**: Dynamically discover available tools from servers
|
|
26
|
+
- **Tool execution**: Call tools with structured arguments
|
|
27
|
+
- **Standardized communication**: JSON-RPC 2.0 over various transports
|
|
28
|
+
|
|
29
|
+
## Quick Start
|
|
30
|
+
|
|
31
|
+
### Connect to an MCP Server
|
|
32
|
+
|
|
33
|
+
```rust
|
|
34
|
+
use enact_mcp::McpStdioClient;
|
|
35
|
+
|
|
36
|
+
#[tokio::main]
|
|
37
|
+
async fn main() -> anyhow::Result<()> {
|
|
38
|
+
// Connect to an MCP server via stdio
|
|
39
|
+
let mut client = McpStdioClient::new(
|
|
40
|
+
"npx",
|
|
41
|
+
&["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
|
|
42
|
+
).await?;
|
|
43
|
+
|
|
44
|
+
// List available tools
|
|
45
|
+
let tools = client.list_tools().await?;
|
|
46
|
+
for tool in &tools {
|
|
47
|
+
println!("{}: {}", tool.name, tool.description);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Call a tool
|
|
51
|
+
let result = client.call_tool(
|
|
52
|
+
"read_file",
|
|
53
|
+
serde_json::json!({"path": "/tmp/test.txt"})
|
|
54
|
+
).await?;
|
|
55
|
+
|
|
56
|
+
println!("Result: {}", result);
|
|
57
|
+
Ok(())
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Stdio Transport
|
|
62
|
+
|
|
63
|
+
The MCP client uses stdio transport to communicate with servers:
|
|
64
|
+
|
|
65
|
+
1. **Spawns subprocess**: The MCP server runs as a child process
|
|
66
|
+
2. **Stdin/Stdout**: Communication via standard input/output
|
|
67
|
+
3. **JSON-RPC**: Messages are JSON-RPC 2.0 formatted
|
|
68
|
+
4. **Automatic cleanup**: Process is killed when client is dropped
|
|
69
|
+
|
|
70
|
+
## API Reference
|
|
71
|
+
|
|
72
|
+
### McpStdioClient
|
|
73
|
+
|
|
74
|
+
```rust
|
|
75
|
+
pub struct McpStdioClient {
|
|
76
|
+
// Internal fields
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
impl McpStdioClient {
|
|
80
|
+
/// Create a new MCP client connected to a command via stdio
|
|
81
|
+
pub async fn new(command: &str, args: &[&str]) -> Result<Self>;
|
|
82
|
+
|
|
83
|
+
/// List available tools from the MCP server
|
|
84
|
+
pub async fn list_tools(&mut self) -> Result<Vec<McpTool>>;
|
|
85
|
+
|
|
86
|
+
/// Call a tool on the MCP server
|
|
87
|
+
pub async fn call_tool(
|
|
88
|
+
&mut self,
|
|
89
|
+
name: &str,
|
|
90
|
+
arguments: serde_json::Value
|
|
91
|
+
) -> Result<String>;
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### McpTool
|
|
96
|
+
|
|
97
|
+
```rust
|
|
98
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
99
|
+
pub struct McpTool {
|
|
100
|
+
pub name: String,
|
|
101
|
+
pub description: String,
|
|
102
|
+
pub parameters: serde_json::Value,
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## JSON-RPC Protocol
|
|
107
|
+
|
|
108
|
+
The client uses JSON-RPC 2.0 for communication:
|
|
109
|
+
|
|
110
|
+
### Initialize
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"jsonrpc": "2.0",
|
|
115
|
+
"id": 1,
|
|
116
|
+
"method": "initialize",
|
|
117
|
+
"params": {
|
|
118
|
+
"protocolVersion": "2024-11-05",
|
|
119
|
+
"capabilities": {},
|
|
120
|
+
"clientInfo": {
|
|
121
|
+
"name": "enact-mcp",
|
|
122
|
+
"version": "0.1.0"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### List Tools
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"jsonrpc": "2.0",
|
|
133
|
+
"id": 2,
|
|
134
|
+
"method": "tools/list"
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Call Tool
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"jsonrpc": "2.0",
|
|
143
|
+
"id": 3,
|
|
144
|
+
"method": "tools/call",
|
|
145
|
+
"params": {
|
|
146
|
+
"name": "tool_name",
|
|
147
|
+
"arguments": { "arg1": "value1" }
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Example MCP Servers
|
|
153
|
+
|
|
154
|
+
### Filesystem Server
|
|
155
|
+
|
|
156
|
+
```rust
|
|
157
|
+
let mut client = McpStdioClient::new(
|
|
158
|
+
"npx",
|
|
159
|
+
&["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
|
|
160
|
+
).await?;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Custom Server
|
|
164
|
+
|
|
165
|
+
```rust
|
|
166
|
+
let mut client = McpStdioClient::new(
|
|
167
|
+
"./my-mcp-server",
|
|
168
|
+
&["--config", "config.json"]
|
|
169
|
+
).await?;
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Error Handling
|
|
173
|
+
|
|
174
|
+
```rust
|
|
175
|
+
let result = client.call_tool("tool_name", args).await;
|
|
176
|
+
|
|
177
|
+
match result {
|
|
178
|
+
Ok(output) => println!("Success: {}", output),
|
|
179
|
+
Err(e) => eprintln!("Tool error: {}", e),
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Tool errors from the MCP server are returned as `anyhow::Error` with the error message from the server.
|
|
184
|
+
|
|
185
|
+
## Integration with Enact
|
|
186
|
+
|
|
187
|
+
The MCP client can be used with Enact's agent system:
|
|
188
|
+
|
|
189
|
+
```rust
|
|
190
|
+
use enact_mcp::McpStdioClient;
|
|
191
|
+
use enact_core::callable::LlmCallable;
|
|
192
|
+
|
|
193
|
+
// Create MCP client
|
|
194
|
+
let mut mcp = McpStdioClient::new("mcp-server", &[]).await?;
|
|
195
|
+
|
|
196
|
+
// Get available tools
|
|
197
|
+
let tools = mcp.list_tools().await?;
|
|
198
|
+
|
|
199
|
+
// Tools can be exposed to the LLM as functions
|
|
200
|
+
// (integration with tool-use coming in future releases)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Lifecycle
|
|
204
|
+
|
|
205
|
+
1. **Create client**: `McpStdioClient::new()` spawns the server process
|
|
206
|
+
2. **Initialize**: Automatic handshake with the server
|
|
207
|
+
3. **Use tools**: `list_tools()` and `call_tool()`
|
|
208
|
+
4. **Cleanup**: Server process is killed when client is dropped
|
|
209
|
+
|
|
210
|
+
```rust
|
|
211
|
+
{
|
|
212
|
+
let mut client = McpStdioClient::new("server", &[]).await?;
|
|
213
|
+
// Use client...
|
|
214
|
+
} // Client dropped here, server process killed
|
|
215
|
+
```
|