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
|
+
{% extends "base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %}{{ section.title }}{% endblock %}
|
|
4
|
+
|
|
5
|
+
{% set mode = config.extra.mode | default(value="site") %}
|
|
6
|
+
|
|
7
|
+
{% block sidebar %}
|
|
8
|
+
{% if mode == "docs" %}
|
|
9
|
+
{% include "partials/sidebar.html" %}
|
|
10
|
+
{% endif %}
|
|
11
|
+
{% endblock %}
|
|
12
|
+
|
|
13
|
+
{% block content %}
|
|
14
|
+
{% if mode == "site" or mode == "blog" %}
|
|
15
|
+
{# raskell.io style articles listing #}
|
|
16
|
+
<header>
|
|
17
|
+
<div class="container">
|
|
18
|
+
<h1>{{ section.title }}</h1>
|
|
19
|
+
{% if section.extra.subtitle %}
|
|
20
|
+
<p class="subtitle">{{ section.extra.subtitle }}</p>
|
|
21
|
+
{% endif %}
|
|
22
|
+
</div>
|
|
23
|
+
</header>
|
|
24
|
+
|
|
25
|
+
<section>
|
|
26
|
+
<div class="container">
|
|
27
|
+
<div class="search-container">
|
|
28
|
+
<input
|
|
29
|
+
id="search-query"
|
|
30
|
+
type="search"
|
|
31
|
+
placeholder="Search articles..."
|
|
32
|
+
autocomplete="off"
|
|
33
|
+
/>
|
|
34
|
+
<div class="search-shortcuts">
|
|
35
|
+
<kbd>/</kbd>
|
|
36
|
+
<kbd>⌘K</kbd>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<section id="articles-list"></section>
|
|
41
|
+
</div>
|
|
42
|
+
</section>
|
|
43
|
+
|
|
44
|
+
<script>
|
|
45
|
+
// Render articles with yyyy-mm-dd prefix
|
|
46
|
+
const articlesList = document.getElementById('articles-list');
|
|
47
|
+
const articles = [
|
|
48
|
+
{% for page in section.pages %}
|
|
49
|
+
{
|
|
50
|
+
title: {{ page.title | json_encode | safe }},
|
|
51
|
+
permalink: {{ page.permalink | json_encode | safe }},
|
|
52
|
+
date: {{ page.date | json_encode | safe }},
|
|
53
|
+
dateFormatted: {{ page.date | date(format="%Y-%m-%d") | json_encode | safe }},
|
|
54
|
+
description: {{ page.description | default(value="") | json_encode | safe }}
|
|
55
|
+
}{% if not loop.last %},{% endif %}
|
|
56
|
+
{% endfor %}
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
function renderArticles(articlesToRender) {
|
|
60
|
+
// Sort by date descending
|
|
61
|
+
const sorted = [...articlesToRender].sort((a, b) => new Date(b.date) - new Date(a.date));
|
|
62
|
+
|
|
63
|
+
let html = '<div class="posts">';
|
|
64
|
+
sorted.forEach(article => {
|
|
65
|
+
html += `
|
|
66
|
+
<div class="post" data-title="${article.title.toLowerCase()}" data-date="${article.dateFormatted}" data-description="${article.description.toLowerCase()}">
|
|
67
|
+
<a href="${article.permalink}">
|
|
68
|
+
<div class="post-row">
|
|
69
|
+
<time>${article.dateFormatted}</time>
|
|
70
|
+
<h3>${article.title}</h3>
|
|
71
|
+
</div>
|
|
72
|
+
</a>
|
|
73
|
+
</div>
|
|
74
|
+
`;
|
|
75
|
+
});
|
|
76
|
+
html += '</div>';
|
|
77
|
+
|
|
78
|
+
articlesList.innerHTML = html;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
renderArticles(articles);
|
|
82
|
+
</script>
|
|
83
|
+
|
|
84
|
+
<script>
|
|
85
|
+
const searchInput = document.getElementById("search-query");
|
|
86
|
+
|
|
87
|
+
// Simple search filtering
|
|
88
|
+
searchInput.addEventListener("input", function () {
|
|
89
|
+
const query = this.value.trim().toLowerCase();
|
|
90
|
+
const posts = articlesList.querySelectorAll(".post");
|
|
91
|
+
|
|
92
|
+
if (query.length === 0) {
|
|
93
|
+
// Show all posts
|
|
94
|
+
posts.forEach((post) => (post.style.display = ""));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Filter posts by title, date, or description
|
|
99
|
+
posts.forEach((post) => {
|
|
100
|
+
const title = post.getAttribute("data-title") || "";
|
|
101
|
+
const date = post.getAttribute("data-date") || "";
|
|
102
|
+
const description = post.getAttribute("data-description") || "";
|
|
103
|
+
|
|
104
|
+
const searchText = `${title} ${date} ${description}`;
|
|
105
|
+
|
|
106
|
+
if (searchText.includes(query)) {
|
|
107
|
+
post.style.display = "";
|
|
108
|
+
} else {
|
|
109
|
+
post.style.display = "none";
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Keyboard shortcuts
|
|
115
|
+
document.addEventListener("keydown", function (e) {
|
|
116
|
+
// Cmd+K or Ctrl+K
|
|
117
|
+
if ((e.ctrlKey || e.metaKey) && e.key === "k") {
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
searchInput.focus();
|
|
120
|
+
searchInput.select();
|
|
121
|
+
}
|
|
122
|
+
// Forward slash (/) when not in an input
|
|
123
|
+
else if (
|
|
124
|
+
e.key === "/" &&
|
|
125
|
+
!["INPUT", "TEXTAREA"].includes(document.activeElement.tagName)
|
|
126
|
+
) {
|
|
127
|
+
e.preventDefault();
|
|
128
|
+
searchInput.focus();
|
|
129
|
+
}
|
|
130
|
+
// Escape to clear search
|
|
131
|
+
else if (e.key === "Escape" && document.activeElement === searchInput) {
|
|
132
|
+
searchInput.value = "";
|
|
133
|
+
searchInput.dispatchEvent(new Event("input"));
|
|
134
|
+
searchInput.blur();
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
</script>
|
|
138
|
+
|
|
139
|
+
{% else %}
|
|
140
|
+
{# Original tanuki section layout for docs/book modes #}
|
|
141
|
+
<article class="section-page">
|
|
142
|
+
<header class="section-page__header">
|
|
143
|
+
<h1>{{ section.title }}</h1>
|
|
144
|
+
{% if section.description %}
|
|
145
|
+
<p class="section-page__description">{{ section.description }}</p>
|
|
146
|
+
{% endif %}
|
|
147
|
+
</header>
|
|
148
|
+
|
|
149
|
+
{% if section.content %}
|
|
150
|
+
<div class="section-page__content">
|
|
151
|
+
{{ section.content | safe }}
|
|
152
|
+
</div>
|
|
153
|
+
{% endif %}
|
|
154
|
+
|
|
155
|
+
{% if section.pages %}
|
|
156
|
+
<ul class="page-list">
|
|
157
|
+
{% for page in section.pages %}
|
|
158
|
+
<li>
|
|
159
|
+
<a href="{{ page.permalink | safe }}">{{ page.title }}</a>
|
|
160
|
+
{% if page.description %}
|
|
161
|
+
<p>{{ page.description }}</p>
|
|
162
|
+
{% endif %}
|
|
163
|
+
</li>
|
|
164
|
+
{% endfor %}
|
|
165
|
+
</ul>
|
|
166
|
+
{% endif %}
|
|
167
|
+
|
|
168
|
+
{# Subsections #}
|
|
169
|
+
{% if section.subsections %}
|
|
170
|
+
{% for subsection_path in section.subsections %}
|
|
171
|
+
{% set subsection = get_section(path=subsection_path) %}
|
|
172
|
+
<section class="subsection">
|
|
173
|
+
<h2>{{ subsection.title }}</h2>
|
|
174
|
+
<ul class="page-list">
|
|
175
|
+
{% for page in subsection.pages %}
|
|
176
|
+
<li>
|
|
177
|
+
<a href="{{ page.permalink | safe }}">{{ page.title }}</a>
|
|
178
|
+
</li>
|
|
179
|
+
{% endfor %}
|
|
180
|
+
</ul>
|
|
181
|
+
</section>
|
|
182
|
+
{% endfor %}
|
|
183
|
+
{% endif %}
|
|
184
|
+
</article>
|
|
185
|
+
{% endif %}
|
|
186
|
+
{% endblock %}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{% extends "base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %}{{ taxonomy.name | title }}{% endblock %}
|
|
4
|
+
|
|
5
|
+
{% block content %}
|
|
6
|
+
<div class="taxonomy-list">
|
|
7
|
+
<h1 class="taxonomy-list__title">{{ taxonomy.name | title }}</h1>
|
|
8
|
+
|
|
9
|
+
<div class="taxonomy-list__items">
|
|
10
|
+
{% for term in terms %}
|
|
11
|
+
<a href="{{ term.permalink | safe }}" class="taxonomy-item">
|
|
12
|
+
<span class="taxonomy-item__name">{{ term.name }}</span>
|
|
13
|
+
<span class="taxonomy-item__count">{{ term.pages | length }}</span>
|
|
14
|
+
</a>
|
|
15
|
+
{% endfor %}
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
{% endblock %}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{% extends "base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %}{{ term.name | title }}{% endblock %}
|
|
4
|
+
|
|
5
|
+
{% block content %}
|
|
6
|
+
<div class="taxonomy-single">
|
|
7
|
+
<h1 class="taxonomy-single__title">Posts tagged "{{ term.name }}"</h1>
|
|
8
|
+
|
|
9
|
+
<div class="blog-posts">
|
|
10
|
+
{% for page in term.pages %}
|
|
11
|
+
<article class="blog-card">
|
|
12
|
+
<div class="blog-card__content">
|
|
13
|
+
<h2 class="blog-card__title">
|
|
14
|
+
<a href="{{ page.permalink | safe }}">{{ page.title }}</a>
|
|
15
|
+
</h2>
|
|
16
|
+
{% if page.description %}
|
|
17
|
+
<p class="blog-card__description">{{ page.description }}</p>
|
|
18
|
+
{% endif %}
|
|
19
|
+
<div class="blog-card__meta">
|
|
20
|
+
{% if page.date %}
|
|
21
|
+
<time datetime="{{ page.date }}">{{ page.date | date(format="%B %d, %Y") }}</time>
|
|
22
|
+
{% endif %}
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</article>
|
|
26
|
+
{% endfor %}
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<a href="{{ get_url(path='tags') }}" class="btn btn--secondary">View all tags</a>
|
|
31
|
+
{% endblock %}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Tanuki Theme for Zola (タヌキ)
|
|
2
|
+
# A versatile, Catppuccin-themed Zola theme for documentation, e-books, blogs, and product landing pages
|
|
3
|
+
|
|
4
|
+
name = "tanuki"
|
|
5
|
+
description = "A whimsical, Nintendo-inspired Zola theme with Catppuccin colors, Geist typography, and Lucide icons. Supports documentation (with versioning), e-books, blog/landing pages, and product landing pages. Named after the playful Japanese raccoon dog (タヌキ)."
|
|
6
|
+
license = "MIT"
|
|
7
|
+
homepage = "https://github.com/raskell-io/tanuki"
|
|
8
|
+
repository = "https://github.com/raskell-io/tanuki"
|
|
9
|
+
min_version = "0.19.0"
|
|
10
|
+
demo = "https://tanuki.raskell.io"
|
|
11
|
+
|
|
12
|
+
[author]
|
|
13
|
+
name = "Raffael Schneider"
|
|
14
|
+
homepage = "https://raskell.io"
|
|
15
|
+
|
|
16
|
+
[extra]
|
|
17
|
+
# Theme mode: "docs", "book", "site", or "product"
|
|
18
|
+
mode = "site"
|
|
19
|
+
|
|
20
|
+
[extra.docs]
|
|
21
|
+
# Documentation-specific settings
|
|
22
|
+
versioned = true
|
|
23
|
+
default_version = "latest"
|
|
24
|
+
|
|
25
|
+
[extra.book]
|
|
26
|
+
# E-book-specific settings
|
|
27
|
+
show_landing = true
|
|
28
|
+
|
|
29
|
+
[extra.site]
|
|
30
|
+
# Blog/landing page settings
|
|
31
|
+
show_hero = true
|
|
32
|
+
|
|
33
|
+
[extra.product]
|
|
34
|
+
# Product landing page settings
|
|
35
|
+
# Example configuration for a Raskell product:
|
|
36
|
+
#
|
|
37
|
+
# icon = "assets/product-icon.png"
|
|
38
|
+
# tagline = "A powerful tool for modern developers"
|
|
39
|
+
# footer_description = "Built with care by the Raskell team."
|
|
40
|
+
# license = "Licensed under Apache 2.0."
|
|
41
|
+
# install_command = "curl -fsSL https://get.raskell.io/myproduct | sh"
|
|
42
|
+
# install_alternatives = "Or download from <a href='https://github.com/raskell-io/myproduct/releases'>GitHub Releases</a>"
|
|
43
|
+
# features_title = "Features"
|
|
44
|
+
# features = [
|
|
45
|
+
# { title = "Fast", description = "Optimized for speed and efficiency.", icon = "<svg>...</svg>" },
|
|
46
|
+
# { title = "Secure", description = "Built with security best practices.", icon = "<svg>...</svg>" },
|
|
47
|
+
# { title = "Simple", description = "Easy to install and configure.", icon = "<svg>...</svg>" }
|
|
48
|
+
# ]
|
|
49
|
+
# footer_links = [
|
|
50
|
+
# { title = "Resources", links = [
|
|
51
|
+
# { text = "Documentation", url = "/docs" },
|
|
52
|
+
# { text = "GitHub", url = "https://github.com/raskell-io/myproduct" }
|
|
53
|
+
# ]},
|
|
54
|
+
# { title = "Community", links = [
|
|
55
|
+
# { text = "Issues", url = "https://github.com/raskell-io/myproduct/issues" },
|
|
56
|
+
# { text = "Discussions", url = "https://github.com/raskell-io/myproduct/discussions" }
|
|
57
|
+
# ]}
|
|
58
|
+
# ]
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
use anyhow::Result;
|
|
2
|
+
use enact_core::graph::{Graph, Node};
|
|
3
|
+
use enact_core::kernel::ExecutionKernel;
|
|
4
|
+
use enact_providers::azure::AzureOpenAiProvider;
|
|
5
|
+
use enact_runner::loop_driver::AgentRunner;
|
|
6
|
+
use enact_runner::config::RunnerConfig;
|
|
7
|
+
use std::sync::Arc;
|
|
8
|
+
use dotenv::dotenv;
|
|
9
|
+
|
|
10
|
+
#[tokio::main]
|
|
11
|
+
async fn main() -> Result<()> {
|
|
12
|
+
// 1. Load environment variables from .env
|
|
13
|
+
dotenv().ok();
|
|
14
|
+
|
|
15
|
+
// 2. Setup the LLM Provider (Azure used in this example)
|
|
16
|
+
// Values are pulled from environment variables defined in .env
|
|
17
|
+
let config = enact_config::Config::load()?;
|
|
18
|
+
let provider = AzureOpenAiProvider::from_config(&config)?;
|
|
19
|
+
let provider = Arc::new(provider);
|
|
20
|
+
|
|
21
|
+
// 3. Define a simple agent graph
|
|
22
|
+
let mut graph = Graph::new("hello-agent");
|
|
23
|
+
|
|
24
|
+
// Add a basic node that uses the provider
|
|
25
|
+
let node = Node::new("chat")
|
|
26
|
+
.with_instruction("You are a helpful assistant. Keep your responses concise.")
|
|
27
|
+
.with_llm(provider);
|
|
28
|
+
|
|
29
|
+
graph.add_node(node);
|
|
30
|
+
|
|
31
|
+
// 4. Initialize the Kernel and Runner
|
|
32
|
+
let kernel = ExecutionKernel::new(graph);
|
|
33
|
+
let runner_config = RunnerConfig::default();
|
|
34
|
+
|
|
35
|
+
// Use the default runner (handles event emission, cancellation tokens, etc.)
|
|
36
|
+
let mut runner = AgentRunner::default_new()
|
|
37
|
+
.with_config(runner_config);
|
|
38
|
+
|
|
39
|
+
// 5. Run the agent loop
|
|
40
|
+
println!("Starting Agent Loop...");
|
|
41
|
+
let input = "Hello! Who are you and what can you do?";
|
|
42
|
+
|
|
43
|
+
// In a real scenario, you'd pass a Callable (like the provider) to run
|
|
44
|
+
// For this example, we demonstrate the structural components.
|
|
45
|
+
// Note: This requires valid API configuration to actually execute a network call.
|
|
46
|
+
println!("User: {}", input);
|
|
47
|
+
|
|
48
|
+
// let outcome = runner.run(&*provider, input).await?;
|
|
49
|
+
// println!("Agent: {}", outcome.output().unwrap_or("No response"));
|
|
50
|
+
|
|
51
|
+
println!("\n[Note] This example shows the bare-minimum setup.");
|
|
52
|
+
println!("To run fully, ensure your .env file is populated with valid Azure OpenAI credentials.");
|
|
53
|
+
|
|
54
|
+
Ok(())
|
|
55
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "enya-agent",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Enact CLI - Graph-Native AI agents",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/adl-tan-theta/enactai.git"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://www.enactai.now",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"ai",
|
|
12
|
+
"agent",
|
|
13
|
+
"cli",
|
|
14
|
+
"llm",
|
|
15
|
+
"graph-native",
|
|
16
|
+
"gpt",
|
|
17
|
+
"claude"
|
|
18
|
+
],
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"os": [
|
|
21
|
+
"darwin",
|
|
22
|
+
"linux",
|
|
23
|
+
"win32"
|
|
24
|
+
],
|
|
25
|
+
"cpu": [
|
|
26
|
+
"x64",
|
|
27
|
+
"arm64"
|
|
28
|
+
],
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=14"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public",
|
|
34
|
+
"registry": "https://registry.npmjs.org"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package enact.config.v1;
|
|
4
|
+
|
|
5
|
+
// For Rust: use tonic-build to generate from this proto
|
|
6
|
+
// option go_package = "github.com/enact/proto/gen/enact/config/v1";
|
|
7
|
+
|
|
8
|
+
// Config service for syncing configuration and retrieving secrets
|
|
9
|
+
service ConfigService {
|
|
10
|
+
// GetSecret retrieves a secret value from keychain
|
|
11
|
+
rpc GetSecret(GetSecretRequest) returns (GetSecretResponse);
|
|
12
|
+
|
|
13
|
+
// SetSecret stores a secret value in keychain
|
|
14
|
+
rpc SetSecret(SetSecretRequest) returns (SetSecretResponse);
|
|
15
|
+
|
|
16
|
+
// GetConfig retrieves the current configuration
|
|
17
|
+
rpc GetConfig(GetConfigRequest) returns (GetConfigResponse);
|
|
18
|
+
|
|
19
|
+
// SyncConfig syncs configuration between client and server
|
|
20
|
+
rpc SyncConfig(SyncConfigRequest) returns (SyncConfigResponse);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
message GetSecretRequest {
|
|
24
|
+
string key = 1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
message GetSecretResponse {
|
|
28
|
+
string value = 1;
|
|
29
|
+
bool found = 2;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
message SetSecretRequest {
|
|
33
|
+
string key = 1;
|
|
34
|
+
string value = 2;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
message SetSecretResponse {
|
|
38
|
+
bool success = 1;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
message GetConfigRequest {
|
|
42
|
+
// Empty for now, could add filters later
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
message GetConfigResponse {
|
|
46
|
+
bytes config_json = 1; // JSON-encoded config
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
message SyncConfigRequest {
|
|
50
|
+
string tenant_id = 1;
|
|
51
|
+
bytes config_json = 2; // JSON-encoded config
|
|
52
|
+
int64 timestamp = 3;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
message SyncConfigResponse {
|
|
56
|
+
bytes config_json = 1; // JSON-encoded config
|
|
57
|
+
int64 timestamp = 2;
|
|
58
|
+
repeated string conflicts = 3;
|
|
59
|
+
}
|
|
60
|
+
|
|
File without changes
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package enact.runtime.v1;
|
|
4
|
+
|
|
5
|
+
// For Rust: use tonic-build to generate from this proto
|
|
6
|
+
// option go_package = "github.com/enact/proto/gen/enact/runtime/v1";
|
|
7
|
+
|
|
8
|
+
// Runtime service - main entry point for agent execution
|
|
9
|
+
service RuntimeService {
|
|
10
|
+
// Run an agent with input
|
|
11
|
+
rpc RunAgent(RunAgentRequest) returns (RunAgentResponse);
|
|
12
|
+
|
|
13
|
+
// Run an agent with streaming output
|
|
14
|
+
rpc RunAgentStream(RunAgentRequest) returns (stream StreamEvent);
|
|
15
|
+
|
|
16
|
+
// Resume from checkpoint
|
|
17
|
+
rpc ResumeFromCheckpoint(ResumeRequest) returns (stream StreamEvent);
|
|
18
|
+
|
|
19
|
+
// Get agent info
|
|
20
|
+
rpc GetAgentInfo(GetAgentInfoRequest) returns (AgentInfo);
|
|
21
|
+
|
|
22
|
+
// List available agents
|
|
23
|
+
rpc ListAgents(ListAgentsRequest) returns (ListAgentsResponse);
|
|
24
|
+
|
|
25
|
+
// Health check
|
|
26
|
+
rpc HealthCheck(HealthCheckRequest) returns (HealthCheckResponse);
|
|
27
|
+
|
|
28
|
+
// ============================================================
|
|
29
|
+
// Control signals - for abort, pause, resume
|
|
30
|
+
// ============================================================
|
|
31
|
+
|
|
32
|
+
// Cancel a running execution
|
|
33
|
+
rpc Cancel(CancelRequest) returns (CancelResponse);
|
|
34
|
+
|
|
35
|
+
// Pause a running execution
|
|
36
|
+
rpc Pause(PauseRequest) returns (PauseResponse);
|
|
37
|
+
|
|
38
|
+
// Resume a paused execution
|
|
39
|
+
rpc Resume(ResumeExecutionRequest) returns (stream StreamEvent);
|
|
40
|
+
|
|
41
|
+
// Approve a pending plan
|
|
42
|
+
rpc ApprovePlan(ApprovePlanRequest) returns (ApprovePlanResponse);
|
|
43
|
+
|
|
44
|
+
// Reject a pending plan
|
|
45
|
+
rpc RejectPlan(RejectPlanRequest) returns (RejectPlanResponse);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Run agent request
|
|
49
|
+
message RunAgentRequest {
|
|
50
|
+
string agent_name = 1;
|
|
51
|
+
string input = 2;
|
|
52
|
+
map<string, string> context = 3;
|
|
53
|
+
optional string checkpoint_id = 4;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Run agent response
|
|
57
|
+
message RunAgentResponse {
|
|
58
|
+
string run_id = 1;
|
|
59
|
+
string output = 2;
|
|
60
|
+
int32 iterations = 3;
|
|
61
|
+
repeated ToolCallRecord tool_calls = 4;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Tool call record
|
|
65
|
+
message ToolCallRecord {
|
|
66
|
+
string tool_name = 1;
|
|
67
|
+
string arguments = 2; // JSON string
|
|
68
|
+
string result = 3; // JSON string
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Stream event
|
|
72
|
+
message StreamEvent {
|
|
73
|
+
string run_id = 1;
|
|
74
|
+
oneof event {
|
|
75
|
+
RunStarted run_started = 2;
|
|
76
|
+
NodeStarted node_started = 3;
|
|
77
|
+
ContentDelta content_delta = 4;
|
|
78
|
+
ToolCallStarted tool_call_started = 5;
|
|
79
|
+
ToolCallCompleted tool_call_completed = 6;
|
|
80
|
+
NodeCompleted node_completed = 7;
|
|
81
|
+
RunCompleted run_completed = 8;
|
|
82
|
+
ErrorEvent error = 9;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
message RunStarted {}
|
|
87
|
+
|
|
88
|
+
message NodeStarted {
|
|
89
|
+
string node_id = 1;
|
|
90
|
+
string node_name = 2;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
message ContentDelta {
|
|
94
|
+
string content = 1;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
message ToolCallStarted {
|
|
98
|
+
string tool_name = 1;
|
|
99
|
+
string arguments = 2; // JSON
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
message ToolCallCompleted {
|
|
103
|
+
string tool_name = 1;
|
|
104
|
+
string result = 2; // JSON
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
message NodeCompleted {
|
|
108
|
+
string node_id = 1;
|
|
109
|
+
string output = 2;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
message RunCompleted {
|
|
113
|
+
string final_output = 1;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
message ErrorEvent {
|
|
117
|
+
string message = 1;
|
|
118
|
+
string code = 2;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Resume from checkpoint request
|
|
122
|
+
message ResumeRequest {
|
|
123
|
+
string checkpoint_id = 1;
|
|
124
|
+
optional string new_input = 2;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Agent info
|
|
128
|
+
message AgentInfo {
|
|
129
|
+
string name = 1;
|
|
130
|
+
string description = 2;
|
|
131
|
+
repeated ToolInfo tools = 3;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
message ToolInfo {
|
|
135
|
+
string name = 1;
|
|
136
|
+
string description = 2;
|
|
137
|
+
string parameters_schema = 3; // JSON schema
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
message GetAgentInfoRequest {
|
|
141
|
+
string agent_name = 1;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
message ListAgentsRequest {}
|
|
145
|
+
|
|
146
|
+
message ListAgentsResponse {
|
|
147
|
+
repeated AgentInfo agents = 1;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
message HealthCheckRequest {}
|
|
151
|
+
|
|
152
|
+
message HealthCheckResponse {
|
|
153
|
+
bool healthy = 1;
|
|
154
|
+
string version = 2;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ============================================================
|
|
158
|
+
// Control signal messages
|
|
159
|
+
// ============================================================
|
|
160
|
+
|
|
161
|
+
// Cancel request
|
|
162
|
+
message CancelRequest {
|
|
163
|
+
string run_id = 1;
|
|
164
|
+
optional string reason = 2;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Cancel response
|
|
168
|
+
message CancelResponse {
|
|
169
|
+
bool success = 1;
|
|
170
|
+
string run_id = 2;
|
|
171
|
+
optional string message = 3;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Pause request
|
|
175
|
+
message PauseRequest {
|
|
176
|
+
string run_id = 1;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Pause response
|
|
180
|
+
message PauseResponse {
|
|
181
|
+
bool success = 1;
|
|
182
|
+
string run_id = 2;
|
|
183
|
+
optional string checkpoint_id = 3; // Checkpoint created for resume
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Resume execution request (different from ResumeFromCheckpoint)
|
|
187
|
+
message ResumeExecutionRequest {
|
|
188
|
+
string run_id = 1;
|
|
189
|
+
optional string checkpoint_id = 2;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Approve plan request
|
|
193
|
+
message ApprovePlanRequest {
|
|
194
|
+
string run_id = 1;
|
|
195
|
+
reserved 2;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Approve plan response
|
|
199
|
+
message ApprovePlanResponse {
|
|
200
|
+
bool success = 1;
|
|
201
|
+
string run_id = 2;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Reject plan request
|
|
205
|
+
message RejectPlanRequest {
|
|
206
|
+
string run_id = 1;
|
|
207
|
+
optional string reason = 3;
|
|
208
|
+
reserved 2;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Reject plan response
|
|
212
|
+
message RejectPlanResponse {
|
|
213
|
+
bool success = 1;
|
|
214
|
+
string run_id = 2;
|
|
215
|
+
}
|