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,99 @@
|
|
|
1
|
+
//! Invocation Context - Context for agent/tool invocation
|
|
2
|
+
//!
|
|
3
|
+
//! Extends RuntimeContext with invocation-specific fields like input
|
|
4
|
+
//! and available services.
|
|
5
|
+
|
|
6
|
+
use super::execution_context::RuntimeContext;
|
|
7
|
+
use crate::kernel::{ExecutionId, StepId};
|
|
8
|
+
use serde::{Deserialize, Serialize};
|
|
9
|
+
|
|
10
|
+
/// Services available during invocation
|
|
11
|
+
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
|
12
|
+
pub struct InvocationServices {
|
|
13
|
+
/// Memory service available
|
|
14
|
+
pub memory: bool,
|
|
15
|
+
/// Artifact storage available
|
|
16
|
+
pub artifacts: bool,
|
|
17
|
+
/// Tool registry available
|
|
18
|
+
pub tools: bool,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
impl InvocationServices {
|
|
22
|
+
/// Create with all services enabled
|
|
23
|
+
pub fn all() -> Self {
|
|
24
|
+
Self {
|
|
25
|
+
memory: true,
|
|
26
|
+
artifacts: true,
|
|
27
|
+
tools: true,
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/// Create with no services
|
|
32
|
+
pub fn none() -> Self {
|
|
33
|
+
Self::default()
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// InvocationContext - Context for invoking an agent or tool
|
|
38
|
+
///
|
|
39
|
+
/// Extends RuntimeContext with invocation-specific fields like input
|
|
40
|
+
/// and available services.
|
|
41
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
42
|
+
pub struct InvocationContext {
|
|
43
|
+
/// Runtime context
|
|
44
|
+
pub runtime: RuntimeContext,
|
|
45
|
+
|
|
46
|
+
/// Invocation input
|
|
47
|
+
pub input: serde_json::Value,
|
|
48
|
+
|
|
49
|
+
/// Services available to the invocation
|
|
50
|
+
pub services: InvocationServices,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
impl InvocationContext {
|
|
54
|
+
/// Create a new InvocationContext
|
|
55
|
+
pub fn new(runtime: RuntimeContext, input: serde_json::Value) -> Self {
|
|
56
|
+
Self {
|
|
57
|
+
runtime,
|
|
58
|
+
input,
|
|
59
|
+
services: InvocationServices::default(),
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/// Enable all services
|
|
64
|
+
pub fn with_all_services(mut self) -> Self {
|
|
65
|
+
self.services = InvocationServices::all();
|
|
66
|
+
self
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// Enable specific services
|
|
70
|
+
pub fn with_services(mut self, services: InvocationServices) -> Self {
|
|
71
|
+
self.services = services;
|
|
72
|
+
self
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/// Get the execution ID
|
|
76
|
+
pub fn execution_id(&self) -> &ExecutionId {
|
|
77
|
+
&self.runtime.execution_id
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/// Get the step ID
|
|
81
|
+
pub fn step_id(&self) -> Option<&StepId> {
|
|
82
|
+
self.runtime.step_id.as_ref()
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/// Get the runtime context
|
|
86
|
+
pub fn runtime(&self) -> &RuntimeContext {
|
|
87
|
+
&self.runtime
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// Get the input
|
|
91
|
+
pub fn input(&self) -> &serde_json::Value {
|
|
92
|
+
&self.input
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// Get input as string (convenience method)
|
|
96
|
+
pub fn input_str(&self) -> Option<&str> {
|
|
97
|
+
self.input.as_str()
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//! Context module - Execution context types
|
|
2
|
+
//!
|
|
3
|
+
//! This module provides the context types passed through all execution:
|
|
4
|
+
//!
|
|
5
|
+
//! - **TenantContext**: Multi-tenant isolation boundary (REQUIRED)
|
|
6
|
+
//! - **RuntimeContext**: The execution spine
|
|
7
|
+
//! - **TraceContext**: W3C distributed tracing
|
|
8
|
+
//! - **InvocationContext**: Agent/tool invocation context
|
|
9
|
+
//!
|
|
10
|
+
//! ## Key Invariant: TenantContext is Required
|
|
11
|
+
//!
|
|
12
|
+
//! Every execution MUST have a TenantContext. This ensures:
|
|
13
|
+
//! - Multi-tenant isolation
|
|
14
|
+
//! - Resource limit enforcement
|
|
15
|
+
//! - Audit compliance
|
|
16
|
+
//! - Billing attribution
|
|
17
|
+
//!
|
|
18
|
+
//! ## Usage
|
|
19
|
+
//! ```ignore
|
|
20
|
+
//! use enact_core::context::{TenantContext, RuntimeContext};
|
|
21
|
+
//! use enact_core::kernel::{ExecutionId, ParentLink, TenantId, UserId};
|
|
22
|
+
//!
|
|
23
|
+
//! // Create tenant context (REQUIRED)
|
|
24
|
+
//! let tenant = TenantContext::new(TenantId::from("tenant_acme"))
|
|
25
|
+
//! .with_user(UserId::from("usr_alice"));
|
|
26
|
+
//!
|
|
27
|
+
//! // Create runtime context with tenant
|
|
28
|
+
//! let ctx = RuntimeContext::new(
|
|
29
|
+
//! ExecutionId::new(),
|
|
30
|
+
//! ParentLink::from_user_message("msg_123"),
|
|
31
|
+
//! tenant,
|
|
32
|
+
//! );
|
|
33
|
+
//! ```
|
|
34
|
+
|
|
35
|
+
mod execution_context;
|
|
36
|
+
mod invocation;
|
|
37
|
+
mod tenant;
|
|
38
|
+
mod trace;
|
|
39
|
+
|
|
40
|
+
// Tenant context (REQUIRED for every execution)
|
|
41
|
+
pub use tenant::{ResourceLimits, TenantContext};
|
|
42
|
+
|
|
43
|
+
// Runtime context (the spine)
|
|
44
|
+
pub use execution_context::{RuntimeContext, RuntimeContextBuilder, SessionContext};
|
|
45
|
+
|
|
46
|
+
// Trace context (OpenTelemetry)
|
|
47
|
+
pub use trace::TraceContext;
|
|
48
|
+
|
|
49
|
+
// Invocation context
|
|
50
|
+
pub use invocation::{InvocationContext, InvocationServices};
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
//! Tenant Context - Multi-tenant isolation boundary
|
|
2
|
+
//!
|
|
3
|
+
//! TenantContext is a **required** component for every execution.
|
|
4
|
+
//! Every invocation must run within a tenant boundary for:
|
|
5
|
+
//! - Resource isolation
|
|
6
|
+
//! - Billing attribution
|
|
7
|
+
//! - Audit compliance
|
|
8
|
+
//! - Data segregation
|
|
9
|
+
//!
|
|
10
|
+
//! ## Usage
|
|
11
|
+
//! ```ignore
|
|
12
|
+
//! let tenant = TenantContext::new(TenantId::from("tenant_acme"))
|
|
13
|
+
//! .with_user(UserId::from("usr_alice"))
|
|
14
|
+
//! .with_limits(ResourceLimits::default());
|
|
15
|
+
//! ```
|
|
16
|
+
|
|
17
|
+
use crate::kernel::{TenantId, UserId};
|
|
18
|
+
use serde::{Deserialize, Serialize};
|
|
19
|
+
use std::collections::HashMap;
|
|
20
|
+
|
|
21
|
+
/// Resource limits enforced by the runtime per tenant
|
|
22
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
23
|
+
pub struct ResourceLimits {
|
|
24
|
+
/// Maximum number of steps in an execution
|
|
25
|
+
pub max_steps: u32,
|
|
26
|
+
/// Maximum total tokens for LLM calls
|
|
27
|
+
pub max_tokens: u32,
|
|
28
|
+
/// Maximum wall time in milliseconds
|
|
29
|
+
pub max_wall_time_ms: u64,
|
|
30
|
+
/// Maximum memory in megabytes (optional)
|
|
31
|
+
pub max_memory_mb: Option<u32>,
|
|
32
|
+
/// Maximum concurrent executions
|
|
33
|
+
pub max_concurrent_executions: Option<u32>,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
impl Default for ResourceLimits {
|
|
37
|
+
fn default() -> Self {
|
|
38
|
+
Self {
|
|
39
|
+
max_steps: 100,
|
|
40
|
+
max_tokens: 100_000,
|
|
41
|
+
max_wall_time_ms: 300_000, // 5 minutes
|
|
42
|
+
max_memory_mb: None,
|
|
43
|
+
max_concurrent_executions: None,
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// TenantContext - Required context for every execution
|
|
49
|
+
///
|
|
50
|
+
/// This is the multi-tenant isolation boundary. Every execution MUST
|
|
51
|
+
/// have a TenantContext with a valid TenantId.
|
|
52
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
53
|
+
pub struct TenantContext {
|
|
54
|
+
/// Tenant ID (REQUIRED)
|
|
55
|
+
pub tenant_id: TenantId,
|
|
56
|
+
|
|
57
|
+
/// User ID (optional - system executions may not have a user)
|
|
58
|
+
pub user_id: Option<UserId>,
|
|
59
|
+
|
|
60
|
+
/// Resource limits for this tenant
|
|
61
|
+
pub limits: ResourceLimits,
|
|
62
|
+
|
|
63
|
+
/// Tenant-specific feature flags
|
|
64
|
+
pub features: HashMap<String, bool>,
|
|
65
|
+
|
|
66
|
+
/// Tenant metadata
|
|
67
|
+
pub metadata: HashMap<String, serde_json::Value>,
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
impl TenantContext {
|
|
71
|
+
/// Create a new TenantContext (TenantId is required)
|
|
72
|
+
pub fn new(tenant_id: TenantId) -> Self {
|
|
73
|
+
Self {
|
|
74
|
+
tenant_id,
|
|
75
|
+
user_id: None,
|
|
76
|
+
limits: ResourceLimits::default(),
|
|
77
|
+
features: HashMap::new(),
|
|
78
|
+
metadata: HashMap::new(),
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/// Add user context
|
|
83
|
+
pub fn with_user(mut self, user_id: UserId) -> Self {
|
|
84
|
+
self.user_id = Some(user_id);
|
|
85
|
+
self
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/// Set resource limits
|
|
89
|
+
pub fn with_limits(mut self, limits: ResourceLimits) -> Self {
|
|
90
|
+
self.limits = limits;
|
|
91
|
+
self
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/// Enable a feature flag
|
|
95
|
+
pub fn with_feature(mut self, feature: impl Into<String>, enabled: bool) -> Self {
|
|
96
|
+
self.features.insert(feature.into(), enabled);
|
|
97
|
+
self
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/// Add metadata
|
|
101
|
+
pub fn with_metadata(mut self, key: impl Into<String>, value: serde_json::Value) -> Self {
|
|
102
|
+
self.metadata.insert(key.into(), value);
|
|
103
|
+
self
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/// Check if a feature is enabled
|
|
107
|
+
pub fn is_feature_enabled(&self, feature: &str) -> bool {
|
|
108
|
+
self.features.get(feature).copied().unwrap_or(false)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/// Get the tenant ID
|
|
112
|
+
pub fn tenant_id(&self) -> &TenantId {
|
|
113
|
+
&self.tenant_id
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/// Get the user ID
|
|
117
|
+
pub fn user_id(&self) -> Option<&UserId> {
|
|
118
|
+
self.user_id.as_ref()
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/// Create a child TenantContext for sub-agent execution
|
|
122
|
+
/// (inherits tenant, limits, features but can override user)
|
|
123
|
+
pub fn child_context(&self, user_id: Option<UserId>) -> Self {
|
|
124
|
+
Self {
|
|
125
|
+
tenant_id: self.tenant_id.clone(),
|
|
126
|
+
user_id: user_id.or_else(|| self.user_id.clone()),
|
|
127
|
+
limits: self.limits.clone(),
|
|
128
|
+
features: self.features.clone(),
|
|
129
|
+
metadata: HashMap::new(), // Child starts fresh
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
#[cfg(test)]
|
|
135
|
+
mod tests {
|
|
136
|
+
use super::*;
|
|
137
|
+
|
|
138
|
+
#[test]
|
|
139
|
+
fn test_tenant_context_required_id() {
|
|
140
|
+
let tenant = TenantContext::new(TenantId::from("tenant_123"));
|
|
141
|
+
assert_eq!(tenant.tenant_id().as_str(), "tenant_123");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
#[test]
|
|
145
|
+
fn test_tenant_context_with_user() {
|
|
146
|
+
let tenant = TenantContext::new(TenantId::from("tenant_123"))
|
|
147
|
+
.with_user(UserId::from("usr_456"));
|
|
148
|
+
|
|
149
|
+
assert_eq!(tenant.user_id().unwrap().as_str(), "usr_456");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
#[test]
|
|
153
|
+
fn test_feature_flags() {
|
|
154
|
+
let tenant = TenantContext::new(TenantId::from("tenant_123"))
|
|
155
|
+
.with_feature("beta_tools", true)
|
|
156
|
+
.with_feature("experimental", false);
|
|
157
|
+
|
|
158
|
+
assert!(tenant.is_feature_enabled("beta_tools"));
|
|
159
|
+
assert!(!tenant.is_feature_enabled("experimental"));
|
|
160
|
+
assert!(!tenant.is_feature_enabled("nonexistent"));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
#[test]
|
|
164
|
+
fn test_child_context() {
|
|
165
|
+
let parent = TenantContext::new(TenantId::from("tenant_123"))
|
|
166
|
+
.with_user(UserId::from("usr_456"))
|
|
167
|
+
.with_feature("beta", true);
|
|
168
|
+
|
|
169
|
+
let child = parent.child_context(Some(UserId::from("usr_789")));
|
|
170
|
+
|
|
171
|
+
assert_eq!(child.tenant_id().as_str(), "tenant_123");
|
|
172
|
+
assert_eq!(child.user_id().unwrap().as_str(), "usr_789");
|
|
173
|
+
assert!(child.is_feature_enabled("beta"));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
//! Trace Context - W3C Trace Context for distributed tracing
|
|
2
|
+
//!
|
|
3
|
+
//! Implements W3C Trace Context propagation for OpenTelemetry integration.
|
|
4
|
+
//!
|
|
5
|
+
//! @see https://www.w3.org/TR/trace-context/
|
|
6
|
+
|
|
7
|
+
use serde::{Deserialize, Serialize};
|
|
8
|
+
|
|
9
|
+
/// TraceContext - W3C Trace Context for distributed tracing
|
|
10
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
11
|
+
pub struct TraceContext {
|
|
12
|
+
/// Trace ID (32 hex chars)
|
|
13
|
+
pub trace_id: String,
|
|
14
|
+
/// Span ID (16 hex chars)
|
|
15
|
+
pub span_id: String,
|
|
16
|
+
/// Sampling flags
|
|
17
|
+
pub trace_flags: Option<u8>,
|
|
18
|
+
/// Vendor-specific state
|
|
19
|
+
pub trace_state: Option<String>,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
impl TraceContext {
|
|
23
|
+
/// Create a new TraceContext with generated IDs
|
|
24
|
+
pub fn new() -> Self {
|
|
25
|
+
Self {
|
|
26
|
+
trace_id: Self::generate_trace_id(),
|
|
27
|
+
span_id: Self::generate_span_id(),
|
|
28
|
+
trace_flags: Some(1), // sampled
|
|
29
|
+
trace_state: None,
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// Create a child span context (same trace, new span)
|
|
34
|
+
pub fn child_span(&self) -> Self {
|
|
35
|
+
Self {
|
|
36
|
+
trace_id: self.trace_id.clone(),
|
|
37
|
+
span_id: Self::generate_span_id(),
|
|
38
|
+
trace_flags: self.trace_flags,
|
|
39
|
+
trace_state: self.trace_state.clone(),
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/// Parse from W3C traceparent header
|
|
44
|
+
pub fn from_traceparent(header: &str) -> Option<Self> {
|
|
45
|
+
let parts: Vec<&str> = header.split('-').collect();
|
|
46
|
+
if parts.len() >= 3 {
|
|
47
|
+
Some(Self {
|
|
48
|
+
trace_id: parts[1].to_string(),
|
|
49
|
+
span_id: parts[2].to_string(),
|
|
50
|
+
trace_flags: parts.get(3).and_then(|f| u8::from_str_radix(f, 16).ok()),
|
|
51
|
+
trace_state: None,
|
|
52
|
+
})
|
|
53
|
+
} else {
|
|
54
|
+
None
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/// Format as W3C traceparent header
|
|
59
|
+
pub fn to_traceparent(&self) -> String {
|
|
60
|
+
format!(
|
|
61
|
+
"00-{}-{}-{:02x}",
|
|
62
|
+
self.trace_id,
|
|
63
|
+
self.span_id,
|
|
64
|
+
self.trace_flags.unwrap_or(0)
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
fn generate_trace_id() -> String {
|
|
69
|
+
use std::time::{SystemTime, UNIX_EPOCH};
|
|
70
|
+
let now = SystemTime::now()
|
|
71
|
+
.duration_since(UNIX_EPOCH)
|
|
72
|
+
.unwrap()
|
|
73
|
+
.as_nanos();
|
|
74
|
+
format!("{:032x}", now)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
fn generate_span_id() -> String {
|
|
78
|
+
use std::time::{SystemTime, UNIX_EPOCH};
|
|
79
|
+
use std::sync::atomic::{AtomicU64, Ordering};
|
|
80
|
+
static COUNTER: AtomicU64 = AtomicU64::new(0);
|
|
81
|
+
|
|
82
|
+
let now = SystemTime::now()
|
|
83
|
+
.duration_since(UNIX_EPOCH)
|
|
84
|
+
.unwrap()
|
|
85
|
+
.as_nanos() as u64;
|
|
86
|
+
let counter = COUNTER.fetch_add(1, Ordering::Relaxed);
|
|
87
|
+
// Mix timestamp with counter to ensure uniqueness
|
|
88
|
+
format!("{:016x}", now ^ (counter << 48))
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
impl Default for TraceContext {
|
|
93
|
+
fn default() -> Self {
|
|
94
|
+
Self::new()
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
#[cfg(test)]
|
|
99
|
+
mod tests {
|
|
100
|
+
use super::*;
|
|
101
|
+
|
|
102
|
+
#[test]
|
|
103
|
+
fn test_trace_context_new() {
|
|
104
|
+
let ctx = TraceContext::new();
|
|
105
|
+
assert_eq!(ctx.trace_id.len(), 32);
|
|
106
|
+
assert_eq!(ctx.span_id.len(), 16);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
#[test]
|
|
110
|
+
fn test_child_span() {
|
|
111
|
+
let parent = TraceContext::new();
|
|
112
|
+
let child = parent.child_span();
|
|
113
|
+
|
|
114
|
+
assert_eq!(child.trace_id, parent.trace_id);
|
|
115
|
+
assert_ne!(child.span_id, parent.span_id);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
#[test]
|
|
119
|
+
fn test_traceparent_roundtrip() {
|
|
120
|
+
let ctx = TraceContext::new();
|
|
121
|
+
let header = ctx.to_traceparent();
|
|
122
|
+
let parsed = TraceContext::from_traceparent(&header).unwrap();
|
|
123
|
+
|
|
124
|
+
assert_eq!(parsed.trace_id, ctx.trace_id);
|
|
125
|
+
assert_eq!(parsed.span_id, ctx.span_id);
|
|
126
|
+
}
|
|
127
|
+
}
|