donkey-kit 0.1.0__tar.gz
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.
- donkey_kit-0.1.0/.gitignore +61 -0
- donkey_kit-0.1.0/PKG-INFO +229 -0
- donkey_kit-0.1.0/README.md +133 -0
- donkey_kit-0.1.0/examples/adk/README.md +61 -0
- donkey_kit-0.1.0/examples/adk/main.py +68 -0
- donkey_kit-0.1.0/examples/agent_framework/README.md +65 -0
- donkey_kit-0.1.0/examples/agent_framework/main.py +73 -0
- donkey_kit-0.1.0/examples/anthropic/README.md +71 -0
- donkey_kit-0.1.0/examples/anthropic/main.py +68 -0
- donkey_kit-0.1.0/examples/crewai/README.md +59 -0
- donkey_kit-0.1.0/examples/crewai/main.py +68 -0
- donkey_kit-0.1.0/examples/langgraph/README.md +121 -0
- donkey_kit-0.1.0/examples/langgraph/collector.py +119 -0
- donkey_kit-0.1.0/examples/langgraph/main.py +283 -0
- donkey_kit-0.1.0/examples/llamaindex/README.md +63 -0
- donkey_kit-0.1.0/examples/llamaindex/main.py +72 -0
- donkey_kit-0.1.0/examples/openai_agents/README.md +63 -0
- donkey_kit-0.1.0/examples/openai_agents/main.py +68 -0
- donkey_kit-0.1.0/examples/quickstart/README.md +60 -0
- donkey_kit-0.1.0/examples/quickstart/main.py +164 -0
- donkey_kit-0.1.0/examples/strands/README.md +64 -0
- donkey_kit-0.1.0/examples/strands/main.py +68 -0
- donkey_kit-0.1.0/pyproject.toml +282 -0
- donkey_kit-0.1.0/scripts/verify_frameworks.py +317 -0
- donkey_kit-0.1.0/src/donkey_kit/__init__.py +92 -0
- donkey_kit-0.1.0/src/donkey_kit/conformance/__init__.py +83 -0
- donkey_kit-0.1.0/src/donkey_kit/conformance/gateway.py +217 -0
- donkey_kit-0.1.0/src/donkey_kit/conformance/harness.py +320 -0
- donkey_kit-0.1.0/src/donkey_kit/conformance/plugin.py +274 -0
- donkey_kit-0.1.0/src/donkey_kit/conformance/report.py +85 -0
- donkey_kit-0.1.0/src/donkey_kit/conformance/suite.py +256 -0
- donkey_kit-0.1.0/src/donkey_kit/core/__init__.py +88 -0
- donkey_kit-0.1.0/src/donkey_kit/core/_verify.py +264 -0
- donkey_kit-0.1.0/src/donkey_kit/core/auth.py +158 -0
- donkey_kit-0.1.0/src/donkey_kit/core/budget.py +264 -0
- donkey_kit-0.1.0/src/donkey_kit/core/cache.py +57 -0
- donkey_kit-0.1.0/src/donkey_kit/core/cachecontrol.py +208 -0
- donkey_kit-0.1.0/src/donkey_kit/core/config.py +357 -0
- donkey_kit-0.1.0/src/donkey_kit/core/cost.py +139 -0
- donkey_kit-0.1.0/src/donkey_kit/core/errors.py +835 -0
- donkey_kit-0.1.0/src/donkey_kit/core/lastcall.py +688 -0
- donkey_kit-0.1.0/src/donkey_kit/core/telemetry.py +754 -0
- donkey_kit-0.1.0/src/donkey_kit/core/toolspec.py +103 -0
- donkey_kit-0.1.0/src/donkey_kit/core/transport.py +1117 -0
- donkey_kit-0.1.0/src/donkey_kit/donkey.py +606 -0
- donkey_kit-0.1.0/src/donkey_kit/governance.py +196 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/__init__.py +75 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/_base.py +103 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/adk.py +57 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/agent_framework.py +103 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/anthropic.py +72 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/crewai.py +57 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/langgraph.py +136 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/llamaindex.py +55 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/openai_agents.py +72 -0
- donkey_kit-0.1.0/src/donkey_kit/integrations/strands.py +48 -0
- donkey_kit-0.1.0/src/donkey_kit/llm/__init__.py +6 -0
- donkey_kit-0.1.0/src/donkey_kit/llm/catalog.py +55 -0
- donkey_kit-0.1.0/src/donkey_kit/llm/client.py +169 -0
- donkey_kit-0.1.0/src/donkey_kit/provisioning/__init__.py +38 -0
- donkey_kit-0.1.0/src/donkey_kit/provisioning/applier.py +56 -0
- donkey_kit-0.1.0/src/donkey_kit/provisioning/cli.py +461 -0
- donkey_kit-0.1.0/src/donkey_kit/provisioning/doctor.py +272 -0
- donkey_kit-0.1.0/src/donkey_kit/provisioning/lint.py +48 -0
- donkey_kit-0.1.0/src/donkey_kit/provisioning/planner.py +52 -0
- donkey_kit-0.1.0/src/donkey_kit/provisioning/publish.py +41 -0
- donkey_kit-0.1.0/src/donkey_kit/provisioning/spec.py +77 -0
- donkey_kit-0.1.0/src/donkey_kit/py.typed +0 -0
- donkey_kit-0.1.0/src/donkey_kit/registry/__init__.py +32 -0
- donkey_kit-0.1.0/src/donkey_kit/registry/exchange.py +93 -0
- donkey_kit-0.1.0/src/donkey_kit/registry/governance.py +78 -0
- donkey_kit-0.1.0/src/donkey_kit/registry/introspect.py +40 -0
- donkey_kit-0.1.0/src/donkey_kit/registry/models.py +65 -0
- donkey_kit-0.1.0/src/donkey_kit/registry/publication.py +134 -0
- donkey_kit-0.1.0/src/donkey_kit/simulator/__init__.py +22 -0
- donkey_kit-0.1.0/src/donkey_kit/simulator/app.py +283 -0
- donkey_kit-0.1.0/src/donkey_kit/simulator/fixtures.py +435 -0
- donkey_kit-0.1.0/src/donkey_kit/simulator/inject.py +212 -0
- donkey_kit-0.1.0/src/donkey_kit/simulator/scenarios.py +333 -0
- donkey_kit-0.1.0/src/donkey_kit/simulator/server.py +38 -0
- donkey_kit-0.1.0/src/donkey_kit/tools/__init__.py +6 -0
- donkey_kit-0.1.0/src/donkey_kit/tools/filter.py +61 -0
- donkey_kit-0.1.0/src/donkey_kit/tools/session.py +118 -0
- donkey_kit-0.1.0/tests/benchmark/test_span_overhead.py +107 -0
- donkey_kit-0.1.0/tests/conformance/conftest.py +57 -0
- donkey_kit-0.1.0/tests/conformance/suite.py +127 -0
- donkey_kit-0.1.0/tests/conformance/test_budget_pacing_e2e.py +159 -0
- donkey_kit-0.1.0/tests/conformance/test_gateway_fixture.py +92 -0
- donkey_kit-0.1.0/tests/conformance/test_langgraph_conformance.py +66 -0
- donkey_kit-0.1.0/tests/conformance/test_simulator_boot.py +35 -0
- donkey_kit-0.1.0/tests/conformance/test_stock_openai_honesty.py +97 -0
- donkey_kit-0.1.0/tests/conformance/test_transport_exemptions.py +134 -0
- donkey_kit-0.1.0/tests/conftest.py +11 -0
- donkey_kit-0.1.0/tests/fixtures/a2d/README.md +30 -0
- donkey_kit-0.1.0/tests/fixtures/a2d/environments.sample.json +94 -0
- donkey_kit-0.1.0/tests/fixtures/a2d/mcp_server_spec.account_management.json +94 -0
- donkey_kit-0.1.0/tests/fixtures/a2d/mcp_servers.list.json +28 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/README.md +35 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/anthropic_inbound/README.md +79 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/anthropic_inbound/reject.client-id-missing.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/anthropic_inbound/reject.client-id-missing.headers.txt +10 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/anthropic_inbound/reject.openai-shape.body.json +0 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/anthropic_inbound/reject.openai-shape.headers.txt +19 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/anthropic_inbound/request.success.http +8 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/anthropic_inbound/responses.success.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/anthropic_inbound/responses.success.headers.txt +38 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/api_describe.product-catalog-mcp.json +108 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/api_list.sandbox.json +176 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/gemini_inbound/README.md +67 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/gemini_inbound/reject.client-id-missing.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/gemini_inbound/reject.client-id-missing.headers.txt +9 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/gemini_inbound/reject.openai-shape.body.json +9 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/gemini_inbound/reject.openai-shape.headers.txt +17 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/gemini_inbound/request.success.http +7 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/gemini_inbound/responses.success.body.json +31 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/gemini_inbound/responses.success.headers.txt +18 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/README.md +79 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/api_describe.openai-sdk.json +120 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/models.notfound.headers.txt +2 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/policy_list.openai-sdk.json +62 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/reject.client-id-missing.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/reject.client-id-missing.headers.txt +3 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/reject.model-not-found.body.json +8 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/reject.pii-detected.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/reject.pii-detected.headers.txt +15 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/reject.token-rate-limit.body.empty +0 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/reject.token-rate-limit.headers.txt +16 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/responses.stream.headers.txt +5 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/responses.stream.sample.sse +2 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/responses.success.body.json +93 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/responses.success.headers.txt +33 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/llm_proxy/responses.success.policy-applied.headers.txt +7 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/README.md +88 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/jwt.claims.json +18 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/reject.jwt-invalid.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/reject.jwt-invalid.headers.txt +9 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/reject.jwt-missing.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/reject.jwt-missing.headers.txt +9 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/request.success.http +7 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/responses.success.body.json +35 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/responses.success.headers.txt +36 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/model_wallet/wallet.definition.json +28 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/policy_list.product-catalog-mcp.json +32 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/README.md +90 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/request.success.http +33 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.bypass.headers.txt +36 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.hit.body.json +35 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.hit.headers.txt +22 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.miss.body.json +35 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.miss.headers.txt +38 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.no-store-proof.headers.txt +38 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.no-store.body.json +35 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.no-store.headers.txt +39 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.principal-id.headers.txt +39 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.threshold-override.headers.txt +22 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_cache/responses.ttl-override.headers.txt +22 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_routing/README.md +62 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_routing/request.success.http +18 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_routing/responses.code.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_routing/responses.code.headers.txt +24 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_routing/responses.finance.body.json +35 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_routing/responses.finance.headers.txt +36 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_routing/responses.offtopic.body.json +35 -0
- donkey_kit-0.1.0/tests/fixtures/anypoint/semantic_routing/responses.offtopic.headers.txt +36 -0
- donkey_kit-0.1.0/tests/fixtures/fixtures.lock +22 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/README.md +82 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.content-moderation.body.empty +0 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.content-moderation.headers.txt +2 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.content-safety-bedrock.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.content-safety-bedrock.headers.txt +4 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.content-safety.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.content-safety.headers.txt +5 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.injection-protection.body.empty +0 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.injection-protection.headers.txt +3 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.regex-prompt-guard.body.json +1 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.regex-prompt-guard.headers.txt +2 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.upstream-5xx.body.empty +0 -0
- donkey_kit-0.1.0/tests/fixtures/rejections/reject.upstream-5xx.headers.txt +2 -0
- donkey_kit-0.1.0/tests/sandbox/README.md +71 -0
- donkey_kit-0.1.0/tests/sandbox/conftest.py +136 -0
- donkey_kit-0.1.0/tests/sandbox/proxies.toml.example +57 -0
- donkey_kit-0.1.0/tests/sandbox/test_proxy_contracts.py +122 -0
- donkey_kit-0.1.0/tests/typecheck/asset_type_contract.py +25 -0
- donkey_kit-0.1.0/tests/unit/test_adapter_ergonomics.py +463 -0
- donkey_kit-0.1.0/tests/unit/test_auth.py +176 -0
- donkey_kit-0.1.0/tests/unit/test_budget.py +316 -0
- donkey_kit-0.1.0/tests/unit/test_budget_pacing.py +313 -0
- donkey_kit-0.1.0/tests/unit/test_cli_doctor.py +131 -0
- donkey_kit-0.1.0/tests/unit/test_cli_help.py +17 -0
- donkey_kit-0.1.0/tests/unit/test_cli_init.py +197 -0
- donkey_kit-0.1.0/tests/unit/test_cli_mock.py +112 -0
- donkey_kit-0.1.0/tests/unit/test_cli_provisioning.py +97 -0
- donkey_kit-0.1.0/tests/unit/test_cli_test.py +121 -0
- donkey_kit-0.1.0/tests/unit/test_config.py +282 -0
- donkey_kit-0.1.0/tests/unit/test_conformance.py +319 -0
- donkey_kit-0.1.0/tests/unit/test_conformance_base_only.py +63 -0
- donkey_kit-0.1.0/tests/unit/test_conformance_plugin.py +192 -0
- donkey_kit-0.1.0/tests/unit/test_cost.py +113 -0
- donkey_kit-0.1.0/tests/unit/test_decorators.py +209 -0
- donkey_kit-0.1.0/tests/unit/test_doctor.py +181 -0
- donkey_kit-0.1.0/tests/unit/test_donkey_surface.py +333 -0
- donkey_kit-0.1.0/tests/unit/test_errors.py +430 -0
- donkey_kit-0.1.0/tests/unit/test_fixture_integrity.py +72 -0
- donkey_kit-0.1.0/tests/unit/test_gateway.py +103 -0
- donkey_kit-0.1.0/tests/unit/test_governed_state_shapes.py +96 -0
- donkey_kit-0.1.0/tests/unit/test_langgraph_correlation.py +61 -0
- donkey_kit-0.1.0/tests/unit/test_langgraph_typed_refusals.py +171 -0
- donkey_kit-0.1.0/tests/unit/test_lastcall.py +819 -0
- donkey_kit-0.1.0/tests/unit/test_llm_client_jwt.py +74 -0
- donkey_kit-0.1.0/tests/unit/test_llm_client_openai3_injection.py +121 -0
- donkey_kit-0.1.0/tests/unit/test_llm_proxy_contract.py +156 -0
- donkey_kit-0.1.0/tests/unit/test_model_wallet_contract.py +107 -0
- donkey_kit-0.1.0/tests/unit/test_otlp_export.py +263 -0
- donkey_kit-0.1.0/tests/unit/test_product_description.py +49 -0
- donkey_kit-0.1.0/tests/unit/test_pure_logic.py +93 -0
- donkey_kit-0.1.0/tests/unit/test_registry_shapes.py +166 -0
- donkey_kit-0.1.0/tests/unit/test_rejection_contract.py +137 -0
- donkey_kit-0.1.0/tests/unit/test_semantic_cache.py +398 -0
- donkey_kit-0.1.0/tests/unit/test_simulate.py +205 -0
- donkey_kit-0.1.0/tests/unit/test_simulator_app.py +243 -0
- donkey_kit-0.1.0/tests/unit/test_simulator_base_only.py +55 -0
- donkey_kit-0.1.0/tests/unit/test_simulator_fixtures.py +118 -0
- donkey_kit-0.1.0/tests/unit/test_simulator_scenarios.py +163 -0
- donkey_kit-0.1.0/tests/unit/test_simulator_scenarios_app.py +115 -0
- donkey_kit-0.1.0/tests/unit/test_telemetry.py +522 -0
- donkey_kit-0.1.0/tests/unit/test_transport.py +2090 -0
- donkey_kit-0.1.0/tests/unit/test_verification_blocked_surfaces.py +105 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.eggs/
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
.venv/
|
|
9
|
+
venv/
|
|
10
|
+
.mypy_cache/
|
|
11
|
+
.pytest_cache/
|
|
12
|
+
.ruff_cache/
|
|
13
|
+
.coverage
|
|
14
|
+
htmlcov/
|
|
15
|
+
.env/
|
|
16
|
+
env/
|
|
17
|
+
.env.local
|
|
18
|
+
.env.development.local
|
|
19
|
+
.env.test.local
|
|
20
|
+
.env.production.local
|
|
21
|
+
|
|
22
|
+
# Node / TS
|
|
23
|
+
node_modules/
|
|
24
|
+
*.tsbuildinfo
|
|
25
|
+
|
|
26
|
+
# OS
|
|
27
|
+
.DS_Store
|
|
28
|
+
|
|
29
|
+
# Editors
|
|
30
|
+
.vscode/
|
|
31
|
+
|
|
32
|
+
# Claude Code worktrees (isolated agent workspaces)
|
|
33
|
+
.claude/worktrees/
|
|
34
|
+
|
|
35
|
+
# AI agent config & skills — live in the private donkey-development-kit-ai-config
|
|
36
|
+
# repo and are symlinked in locally; never track them here (keeps internal IP out
|
|
37
|
+
# of this public repo). Clone donkey-development-kit-ai-config as a sibling dir.
|
|
38
|
+
/AGENTS.md
|
|
39
|
+
/CLAUDE.md
|
|
40
|
+
/.claude/skills
|
|
41
|
+
/.claude/settings.json
|
|
42
|
+
/.claude/workflows
|
|
43
|
+
/.claude/commands
|
|
44
|
+
|
|
45
|
+
# Playwright MCP scratch output (local agent tooling)
|
|
46
|
+
.playwright-mcp/
|
|
47
|
+
|
|
48
|
+
# Rebrand issue/PR sweep dry-run report (#338) — generated artifact, not source
|
|
49
|
+
scripts/rebrand/sweep-report/
|
|
50
|
+
|
|
51
|
+
# Local donkey config (secrets / dev creds — never commit)
|
|
52
|
+
.donkey-kit.local.toml
|
|
53
|
+
donkey.lock.local
|
|
54
|
+
|
|
55
|
+
# Sandbox suite manifest — real proxy base URLs / cred env-var wiring (#400).
|
|
56
|
+
# The committed proxies.toml.example is the template; the filled file stays local.
|
|
57
|
+
python/tests/sandbox/proxies.toml
|
|
58
|
+
|
|
59
|
+
# Env
|
|
60
|
+
.env
|
|
61
|
+
.envrc
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: donkey-kit
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: An SDK for consuming Agent Fabric capabilities (governed model and tool access) from your own agent framework.
|
|
5
|
+
Project-URL: Homepage, https://github.com/Donkey-Development-Kit/donkey-development-kit
|
|
6
|
+
Project-URL: Documentation, https://donkey-development-kit.github.io/donkey-development-kit
|
|
7
|
+
Project-URL: Repository, https://github.com/Donkey-Development-Kit/donkey-development-kit
|
|
8
|
+
Project-URL: Issues, https://github.com/Donkey-Development-Kit/donkey-development-kit/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/Donkey-Development-Kit/donkey-development-kit/releases
|
|
10
|
+
Author: See README for maintainer + support statement
|
|
11
|
+
License: Apache-2.0
|
|
12
|
+
Keywords: agent,anypoint,donkey-kit,gateway,llm,mcp,mulesoft
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Typing :: Typed
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Requires-Dist: httpx>=0.27
|
|
18
|
+
Requires-Dist: pydantic>=2.6
|
|
19
|
+
Requires-Dist: tomli>=2.0; python_version < '3.11'
|
|
20
|
+
Requires-Dist: typing-extensions>=4.10; python_version < '3.12'
|
|
21
|
+
Provides-Extra: a2a
|
|
22
|
+
Requires-Dist: a2a-sdk>=0.1; extra == 'a2a'
|
|
23
|
+
Provides-Extra: adk
|
|
24
|
+
Requires-Dist: google-adk>=0.2; extra == 'adk'
|
|
25
|
+
Requires-Dist: litellm>=1.84; extra == 'adk'
|
|
26
|
+
Provides-Extra: agent-framework
|
|
27
|
+
Requires-Dist: agent-framework>=0.1; extra == 'agent-framework'
|
|
28
|
+
Provides-Extra: all
|
|
29
|
+
Requires-Dist: agent-framework>=0.1; extra == 'all'
|
|
30
|
+
Requires-Dist: anthropic>=0.40; extra == 'all'
|
|
31
|
+
Requires-Dist: crewai>=0.80; extra == 'all'
|
|
32
|
+
Requires-Dist: google-adk>=0.2; extra == 'all'
|
|
33
|
+
Requires-Dist: langchain-core>=0.2; extra == 'all'
|
|
34
|
+
Requires-Dist: langchain-openai>=0.1; extra == 'all'
|
|
35
|
+
Requires-Dist: langgraph>=0.3; extra == 'all'
|
|
36
|
+
Requires-Dist: litellm>=1.84; extra == 'all'
|
|
37
|
+
Requires-Dist: llama-index-llms-openai-like>=0.1; extra == 'all'
|
|
38
|
+
Requires-Dist: mcp>=1.2; extra == 'all'
|
|
39
|
+
Requires-Dist: openai-agents>=0.1; extra == 'all'
|
|
40
|
+
Requires-Dist: openai>=1.30; extra == 'all'
|
|
41
|
+
Requires-Dist: opentelemetry-api>=1.24; extra == 'all'
|
|
42
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.24; extra == 'all'
|
|
43
|
+
Requires-Dist: opentelemetry-sdk>=1.24; extra == 'all'
|
|
44
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'all'
|
|
45
|
+
Requires-Dist: pytest>=8.0; extra == 'all'
|
|
46
|
+
Requires-Dist: pyyaml>=6.0; extra == 'all'
|
|
47
|
+
Requires-Dist: rich>=13.0; extra == 'all'
|
|
48
|
+
Requires-Dist: starlette>=0.37; extra == 'all'
|
|
49
|
+
Requires-Dist: strands-agents>=0.1; extra == 'all'
|
|
50
|
+
Requires-Dist: typer>=0.12; extra == 'all'
|
|
51
|
+
Requires-Dist: uvicorn>=0.30; extra == 'all'
|
|
52
|
+
Provides-Extra: anthropic
|
|
53
|
+
Requires-Dist: anthropic>=0.40; extra == 'anthropic'
|
|
54
|
+
Provides-Extra: cli
|
|
55
|
+
Requires-Dist: pyyaml>=6.0; extra == 'cli'
|
|
56
|
+
Requires-Dist: rich>=13.0; extra == 'cli'
|
|
57
|
+
Requires-Dist: typer>=0.12; extra == 'cli'
|
|
58
|
+
Provides-Extra: crewai
|
|
59
|
+
Requires-Dist: crewai>=0.80; extra == 'crewai'
|
|
60
|
+
Provides-Extra: dev
|
|
61
|
+
Requires-Dist: import-linter>=2.0; extra == 'dev'
|
|
62
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
63
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
64
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
65
|
+
Requires-Dist: pyyaml>=6.0; extra == 'dev'
|
|
66
|
+
Requires-Dist: respx>=0.21; extra == 'dev'
|
|
67
|
+
Requires-Dist: ruff>=0.5; extra == 'dev'
|
|
68
|
+
Requires-Dist: typer>=0.12; extra == 'dev'
|
|
69
|
+
Requires-Dist: types-pyyaml>=6.0; extra == 'dev'
|
|
70
|
+
Provides-Extra: langgraph
|
|
71
|
+
Requires-Dist: langchain-core>=0.2; extra == 'langgraph'
|
|
72
|
+
Requires-Dist: langchain-openai>=0.1; extra == 'langgraph'
|
|
73
|
+
Requires-Dist: langgraph>=0.3; extra == 'langgraph'
|
|
74
|
+
Provides-Extra: llamaindex
|
|
75
|
+
Requires-Dist: llama-index-llms-openai-like>=0.1; extra == 'llamaindex'
|
|
76
|
+
Provides-Extra: llm
|
|
77
|
+
Requires-Dist: openai>=1.30; extra == 'llm'
|
|
78
|
+
Provides-Extra: local
|
|
79
|
+
Requires-Dist: starlette>=0.37; extra == 'local'
|
|
80
|
+
Requires-Dist: uvicorn>=0.30; extra == 'local'
|
|
81
|
+
Provides-Extra: mcp
|
|
82
|
+
Requires-Dist: mcp>=1.2; extra == 'mcp'
|
|
83
|
+
Provides-Extra: openai-agents
|
|
84
|
+
Requires-Dist: openai-agents>=0.1; extra == 'openai-agents'
|
|
85
|
+
Requires-Dist: openai>=1.30; extra == 'openai-agents'
|
|
86
|
+
Provides-Extra: otel
|
|
87
|
+
Requires-Dist: opentelemetry-api>=1.24; extra == 'otel'
|
|
88
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.24; extra == 'otel'
|
|
89
|
+
Requires-Dist: opentelemetry-sdk>=1.24; extra == 'otel'
|
|
90
|
+
Provides-Extra: strands
|
|
91
|
+
Requires-Dist: strands-agents>=0.1; extra == 'strands'
|
|
92
|
+
Provides-Extra: test
|
|
93
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'test'
|
|
94
|
+
Requires-Dist: pytest>=8.0; extra == 'test'
|
|
95
|
+
Description-Content-Type: text/markdown
|
|
96
|
+
|
|
97
|
+
<p align="center">
|
|
98
|
+
<img src="https://raw.githubusercontent.com/Donkey-Development-Kit/donkey-development-kit/main/brand/ddk-logo-stacked-black.png" alt="Donkey Development Kit (DDK)" width="180" />
|
|
99
|
+
</p>
|
|
100
|
+
|
|
101
|
+
# Donkey Development Kit
|
|
102
|
+
|
|
103
|
+
An SDK for consuming **Agent Fabric** capabilities — governed model and tool
|
|
104
|
+
access — from your own agent framework, in your own IDE, without adopting Mule.
|
|
105
|
+
|
|
106
|
+
> **Project status — alpha.** This is `v0.1.0`, the first release
|
|
107
|
+
> (`Development Status :: 3 - Alpha`). The **LLM data plane is live-verified**;
|
|
108
|
+
> most other surfaces are verification-gated (see
|
|
109
|
+
> [What's verified](#whats-verified-verification-discipline) below). Install it
|
|
110
|
+
> from PyPI with `pip install donkey-kit` — see [Install](#install).
|
|
111
|
+
> **Unofficial:** an independent project,
|
|
112
|
+
> **not** affiliated with or endorsed by Salesforce or MuleSoft.
|
|
113
|
+
|
|
114
|
+
> **Already integrated the pre-rebrand SDK?** The move to Donkey Development Kit
|
|
115
|
+
> is a clean break — no import shims, env fallbacks, or OpenTelemetry dual-emit.
|
|
116
|
+
> The [migration guide](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/MIGRATION.md)
|
|
117
|
+
> maps every renamed import, class, CLI, config key, and environment variable,
|
|
118
|
+
> and calls out the breaking OpenTelemetry attribute-namespace change.
|
|
119
|
+
|
|
120
|
+
> ### Support & trademark statement (please read)
|
|
121
|
+
>
|
|
122
|
+
> **"Agent Fabric" is a MuleSoft (Salesforce) product name, not a generic
|
|
123
|
+
> term.** `MuleSoft`, `Anypoint`, `Omni Gateway`, and `Agent Fabric` are
|
|
124
|
+
> Salesforce trademarks.
|
|
125
|
+
>
|
|
126
|
+
> **Maintainer & support.** This is an **independent, community-maintained**
|
|
127
|
+
> project, published under the org-scoped `Donkey-Development-Kit` name — it is **not**
|
|
128
|
+
> affiliated with, endorsed by, or supported by Salesforce or MuleSoft. It is
|
|
129
|
+
> provided **as-is, without warranty of any kind**; the maintainers triage issues
|
|
130
|
+
> and pull requests on a **best-effort basis, with no SLA**. Because it ships
|
|
131
|
+
> under a distinct, org-scoped name, only the descriptive form ("an SDK for
|
|
132
|
+
> MuleSoft Agent Fabric") appears in prose — the package does not represent itself
|
|
133
|
+
> as a first-party, official-status SDK.
|
|
134
|
+
>
|
|
135
|
+
> Licensed under [Apache-2.0](LICENSE). See
|
|
136
|
+
> [`docs/unsupported-boundary.md`](docs/unsupported-boundary.md) for exactly
|
|
137
|
+
> which platform APIs this SDK calls and their support classification.
|
|
138
|
+
|
|
139
|
+
## Documentation
|
|
140
|
+
|
|
141
|
+
Two audiences, two doc sets:
|
|
142
|
+
|
|
143
|
+
- **Use the SDK** → the documentation site:
|
|
144
|
+
**<https://donkey-development-kit.github.io/donkey-development-kit/>**. Install and
|
|
145
|
+
configure, per-framework model access, the governed error taxonomy, and what
|
|
146
|
+
to trust today — everything you need to point your agent at a governed proxy.
|
|
147
|
+
- **See it run** → runnable demos live in the companion repo
|
|
148
|
+
**[donkey-development-kit-demos](https://github.com/Donkey-Development-Kit/donkey-development-kit-demos)**:
|
|
149
|
+
the framework-free client, native framework objects, the governed error
|
|
150
|
+
taxonomy, and the screen-recording scripts.
|
|
151
|
+
- **Understand or contribute to the repo:**
|
|
152
|
+
- [`ARCHITECTURE.md`](ARCHITECTURE.md) — how the SDK is built: the layered
|
|
153
|
+
stack, the framework-free core, verification discipline, the error taxonomy,
|
|
154
|
+
and framework tiering.
|
|
155
|
+
- [`CONTRIBUTING.md`](CONTRIBUTING.md) — how to work in the repo: the
|
|
156
|
+
branch/PR/release workflow, the testing strategy, coding conventions, and
|
|
157
|
+
the docs-sync rule.
|
|
158
|
+
- [`docs/verified-apis.md`](docs/verified-apis.md) — the verification ledger:
|
|
159
|
+
the single source of truth for what is confirmed against a real sandbox and
|
|
160
|
+
what is still blocked.
|
|
161
|
+
|
|
162
|
+
## Install
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
pip install "donkey-kit[llm,langgraph]" # base + raw client + one framework
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
To work on the SDK itself, install from source instead:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
git clone https://github.com/Donkey-Development-Kit/donkey-development-kit.git
|
|
172
|
+
cd donkey-development-kit/python
|
|
173
|
+
pip install -e ".[llm,langgraph]"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Extras are one per framework (`langgraph`, `adk`, `strands`, `agent_framework`,
|
|
177
|
+
`openai-agents`, `anthropic`, `crewai`, `llamaindex`) plus `mcp`, `a2a`, `otel`, `cli`,
|
|
178
|
+
`local`, `test` (the [conformance pytest plugin](https://donkey-development-kit.github.io/donkey-development-kit/testing) —
|
|
179
|
+
`pytest --donkey-conformance --agent=my_app.agent:build`), and `all`.
|
|
180
|
+
Configuration and first-agent walkthroughs live on the
|
|
181
|
+
[documentation site](https://donkey-development-kit.github.io/donkey-development-kit/).
|
|
182
|
+
|
|
183
|
+
## Framework support
|
|
184
|
+
|
|
185
|
+
The roster is deliberately **one deep, seven shallow** (`BG §1.8`): one adapter
|
|
186
|
+
held to the full conformance bar, the rest supported through the three-line
|
|
187
|
+
`connection_kwargs()` escape hatch. Every framework below returns its framework's
|
|
188
|
+
**own native object** — never a wrapper.
|
|
189
|
+
|
|
190
|
+
| Tier | Frameworks | What it means |
|
|
191
|
+
| --- | --- | --- |
|
|
192
|
+
| **Conformance-tested** | The raw client (`donkey.llm.client()`) and **LangGraph** | Held to the conformance suite in CI — the governed contract is proven end to end. |
|
|
193
|
+
| **Supported via `connection_kwargs()`** | Google ADK, Strands, Microsoft Agent Framework, OpenAI Agents SDK, Anthropic SDK, CrewAI, LlamaIndex | Governed kwargs verified at the `connection_kwargs()` level, not conformance-tested. |
|
|
194
|
+
|
|
195
|
+
`connection_kwargs()` works for all eight; a second deep adapter is promoted from
|
|
196
|
+
demand evidence, one at a time (#223/#244) — never guessed up front. See the
|
|
197
|
+
[framework pages](https://donkey-development-kit.github.io/donkey-development-kit/frameworks/)
|
|
198
|
+
for each.
|
|
199
|
+
|
|
200
|
+
## What's verified (verification discipline)
|
|
201
|
+
|
|
202
|
+
The **LLM data plane** — governed model access through the Omni Gateway proxy —
|
|
203
|
+
is live-verified against a real Anypoint sandbox, and both the framework-free
|
|
204
|
+
client and the framework adapters are wired to that verified contract — LangGraph
|
|
205
|
+
is held to the conformance suite, the other seven are supported at the
|
|
206
|
+
`connection_kwargs()` level (see [Framework support](#framework-support)).
|
|
207
|
+
Everything still gated raises `NotImplementedError("blocked on verification: …")`
|
|
208
|
+
rather than guessing at an unverified endpoint, header, or class name — that
|
|
209
|
+
currently includes Exchange→MCP tool discovery, the provisioning control-plane,
|
|
210
|
+
and the exact framework adapter class names/kwargs.
|
|
211
|
+
|
|
212
|
+
The discipline behind this is documented in
|
|
213
|
+
[`ARCHITECTURE.md` → Verification discipline](ARCHITECTURE.md#verification-discipline);
|
|
214
|
+
the row-by-row worklist is [`docs/verified-apis.md`](docs/verified-apis.md).
|
|
215
|
+
|
|
216
|
+
## Conformance exemptions
|
|
217
|
+
|
|
218
|
+
The [conformance plugin](https://donkey-development-kit.github.io/donkey-development-kit/testing)
|
|
219
|
+
holds the SDK to the same bar it asks of your agent. Where a framework
|
|
220
|
+
legitimately cannot satisfy a scenario, the reason is asserted in code
|
|
221
|
+
(`KNOWN_LIMITATIONS`) and published here as credibility — never a silent skip
|
|
222
|
+
(the conformance kit):
|
|
223
|
+
|
|
224
|
+
| Framework | Scenario | Why it's exempt |
|
|
225
|
+
| --- | --- | --- |
|
|
226
|
+
| ADK, CrewAI | correlation ID propagated | LiteLLM owns the transport, so the SDK's `httpx` client cannot be injected — the correlation ID ends up per-client, not per-run. A LiteLLM logger callback may recover trace correlation later. |
|
|
227
|
+
| LlamaIndex, Microsoft Agent Framework | correlation ID propagated | These adapters receive a static `default_headers` snapshot, which deliberately excludes the per-run correlation ID. Without the SDK's `httpx` client, `donkey.run(id=...)` cannot update their request headers. |
|
|
228
|
+
| ADK, CrewAI | gateway identity observed | LiteLLM owns the transport, so no response reaches the SDK's `_on_response` hook. When every resolved adapter is non-observing, `donkey.last_call` reports `UNAVAILABLE` and names them in `surface`. |
|
|
229
|
+
| LlamaIndex, Microsoft Agent Framework | gateway identity observed | These adapters receive `default_headers`, not the SDK's `httpx` client, so no response reaches `_on_response`. When every resolved adapter is non-observing, `donkey.last_call` reports `UNAVAILABLE` and names them in `surface`. |
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/Donkey-Development-Kit/donkey-development-kit/main/brand/ddk-logo-stacked-black.png" alt="Donkey Development Kit (DDK)" width="180" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# Donkey Development Kit
|
|
6
|
+
|
|
7
|
+
An SDK for consuming **Agent Fabric** capabilities — governed model and tool
|
|
8
|
+
access — from your own agent framework, in your own IDE, without adopting Mule.
|
|
9
|
+
|
|
10
|
+
> **Project status — alpha.** This is `v0.1.0`, the first release
|
|
11
|
+
> (`Development Status :: 3 - Alpha`). The **LLM data plane is live-verified**;
|
|
12
|
+
> most other surfaces are verification-gated (see
|
|
13
|
+
> [What's verified](#whats-verified-verification-discipline) below). Install it
|
|
14
|
+
> from PyPI with `pip install donkey-kit` — see [Install](#install).
|
|
15
|
+
> **Unofficial:** an independent project,
|
|
16
|
+
> **not** affiliated with or endorsed by Salesforce or MuleSoft.
|
|
17
|
+
|
|
18
|
+
> **Already integrated the pre-rebrand SDK?** The move to Donkey Development Kit
|
|
19
|
+
> is a clean break — no import shims, env fallbacks, or OpenTelemetry dual-emit.
|
|
20
|
+
> The [migration guide](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/MIGRATION.md)
|
|
21
|
+
> maps every renamed import, class, CLI, config key, and environment variable,
|
|
22
|
+
> and calls out the breaking OpenTelemetry attribute-namespace change.
|
|
23
|
+
|
|
24
|
+
> ### Support & trademark statement (please read)
|
|
25
|
+
>
|
|
26
|
+
> **"Agent Fabric" is a MuleSoft (Salesforce) product name, not a generic
|
|
27
|
+
> term.** `MuleSoft`, `Anypoint`, `Omni Gateway`, and `Agent Fabric` are
|
|
28
|
+
> Salesforce trademarks.
|
|
29
|
+
>
|
|
30
|
+
> **Maintainer & support.** This is an **independent, community-maintained**
|
|
31
|
+
> project, published under the org-scoped `Donkey-Development-Kit` name — it is **not**
|
|
32
|
+
> affiliated with, endorsed by, or supported by Salesforce or MuleSoft. It is
|
|
33
|
+
> provided **as-is, without warranty of any kind**; the maintainers triage issues
|
|
34
|
+
> and pull requests on a **best-effort basis, with no SLA**. Because it ships
|
|
35
|
+
> under a distinct, org-scoped name, only the descriptive form ("an SDK for
|
|
36
|
+
> MuleSoft Agent Fabric") appears in prose — the package does not represent itself
|
|
37
|
+
> as a first-party, official-status SDK.
|
|
38
|
+
>
|
|
39
|
+
> Licensed under [Apache-2.0](LICENSE). See
|
|
40
|
+
> [`docs/unsupported-boundary.md`](docs/unsupported-boundary.md) for exactly
|
|
41
|
+
> which platform APIs this SDK calls and their support classification.
|
|
42
|
+
|
|
43
|
+
## Documentation
|
|
44
|
+
|
|
45
|
+
Two audiences, two doc sets:
|
|
46
|
+
|
|
47
|
+
- **Use the SDK** → the documentation site:
|
|
48
|
+
**<https://donkey-development-kit.github.io/donkey-development-kit/>**. Install and
|
|
49
|
+
configure, per-framework model access, the governed error taxonomy, and what
|
|
50
|
+
to trust today — everything you need to point your agent at a governed proxy.
|
|
51
|
+
- **See it run** → runnable demos live in the companion repo
|
|
52
|
+
**[donkey-development-kit-demos](https://github.com/Donkey-Development-Kit/donkey-development-kit-demos)**:
|
|
53
|
+
the framework-free client, native framework objects, the governed error
|
|
54
|
+
taxonomy, and the screen-recording scripts.
|
|
55
|
+
- **Understand or contribute to the repo:**
|
|
56
|
+
- [`ARCHITECTURE.md`](ARCHITECTURE.md) — how the SDK is built: the layered
|
|
57
|
+
stack, the framework-free core, verification discipline, the error taxonomy,
|
|
58
|
+
and framework tiering.
|
|
59
|
+
- [`CONTRIBUTING.md`](CONTRIBUTING.md) — how to work in the repo: the
|
|
60
|
+
branch/PR/release workflow, the testing strategy, coding conventions, and
|
|
61
|
+
the docs-sync rule.
|
|
62
|
+
- [`docs/verified-apis.md`](docs/verified-apis.md) — the verification ledger:
|
|
63
|
+
the single source of truth for what is confirmed against a real sandbox and
|
|
64
|
+
what is still blocked.
|
|
65
|
+
|
|
66
|
+
## Install
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pip install "donkey-kit[llm,langgraph]" # base + raw client + one framework
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
To work on the SDK itself, install from source instead:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
git clone https://github.com/Donkey-Development-Kit/donkey-development-kit.git
|
|
76
|
+
cd donkey-development-kit/python
|
|
77
|
+
pip install -e ".[llm,langgraph]"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Extras are one per framework (`langgraph`, `adk`, `strands`, `agent_framework`,
|
|
81
|
+
`openai-agents`, `anthropic`, `crewai`, `llamaindex`) plus `mcp`, `a2a`, `otel`, `cli`,
|
|
82
|
+
`local`, `test` (the [conformance pytest plugin](https://donkey-development-kit.github.io/donkey-development-kit/testing) —
|
|
83
|
+
`pytest --donkey-conformance --agent=my_app.agent:build`), and `all`.
|
|
84
|
+
Configuration and first-agent walkthroughs live on the
|
|
85
|
+
[documentation site](https://donkey-development-kit.github.io/donkey-development-kit/).
|
|
86
|
+
|
|
87
|
+
## Framework support
|
|
88
|
+
|
|
89
|
+
The roster is deliberately **one deep, seven shallow** (`BG §1.8`): one adapter
|
|
90
|
+
held to the full conformance bar, the rest supported through the three-line
|
|
91
|
+
`connection_kwargs()` escape hatch. Every framework below returns its framework's
|
|
92
|
+
**own native object** — never a wrapper.
|
|
93
|
+
|
|
94
|
+
| Tier | Frameworks | What it means |
|
|
95
|
+
| --- | --- | --- |
|
|
96
|
+
| **Conformance-tested** | The raw client (`donkey.llm.client()`) and **LangGraph** | Held to the conformance suite in CI — the governed contract is proven end to end. |
|
|
97
|
+
| **Supported via `connection_kwargs()`** | Google ADK, Strands, Microsoft Agent Framework, OpenAI Agents SDK, Anthropic SDK, CrewAI, LlamaIndex | Governed kwargs verified at the `connection_kwargs()` level, not conformance-tested. |
|
|
98
|
+
|
|
99
|
+
`connection_kwargs()` works for all eight; a second deep adapter is promoted from
|
|
100
|
+
demand evidence, one at a time (#223/#244) — never guessed up front. See the
|
|
101
|
+
[framework pages](https://donkey-development-kit.github.io/donkey-development-kit/frameworks/)
|
|
102
|
+
for each.
|
|
103
|
+
|
|
104
|
+
## What's verified (verification discipline)
|
|
105
|
+
|
|
106
|
+
The **LLM data plane** — governed model access through the Omni Gateway proxy —
|
|
107
|
+
is live-verified against a real Anypoint sandbox, and both the framework-free
|
|
108
|
+
client and the framework adapters are wired to that verified contract — LangGraph
|
|
109
|
+
is held to the conformance suite, the other seven are supported at the
|
|
110
|
+
`connection_kwargs()` level (see [Framework support](#framework-support)).
|
|
111
|
+
Everything still gated raises `NotImplementedError("blocked on verification: …")`
|
|
112
|
+
rather than guessing at an unverified endpoint, header, or class name — that
|
|
113
|
+
currently includes Exchange→MCP tool discovery, the provisioning control-plane,
|
|
114
|
+
and the exact framework adapter class names/kwargs.
|
|
115
|
+
|
|
116
|
+
The discipline behind this is documented in
|
|
117
|
+
[`ARCHITECTURE.md` → Verification discipline](ARCHITECTURE.md#verification-discipline);
|
|
118
|
+
the row-by-row worklist is [`docs/verified-apis.md`](docs/verified-apis.md).
|
|
119
|
+
|
|
120
|
+
## Conformance exemptions
|
|
121
|
+
|
|
122
|
+
The [conformance plugin](https://donkey-development-kit.github.io/donkey-development-kit/testing)
|
|
123
|
+
holds the SDK to the same bar it asks of your agent. Where a framework
|
|
124
|
+
legitimately cannot satisfy a scenario, the reason is asserted in code
|
|
125
|
+
(`KNOWN_LIMITATIONS`) and published here as credibility — never a silent skip
|
|
126
|
+
(the conformance kit):
|
|
127
|
+
|
|
128
|
+
| Framework | Scenario | Why it's exempt |
|
|
129
|
+
| --- | --- | --- |
|
|
130
|
+
| ADK, CrewAI | correlation ID propagated | LiteLLM owns the transport, so the SDK's `httpx` client cannot be injected — the correlation ID ends up per-client, not per-run. A LiteLLM logger callback may recover trace correlation later. |
|
|
131
|
+
| LlamaIndex, Microsoft Agent Framework | correlation ID propagated | These adapters receive a static `default_headers` snapshot, which deliberately excludes the per-run correlation ID. Without the SDK's `httpx` client, `donkey.run(id=...)` cannot update their request headers. |
|
|
132
|
+
| ADK, CrewAI | gateway identity observed | LiteLLM owns the transport, so no response reaches the SDK's `_on_response` hook. When every resolved adapter is non-observing, `donkey.last_call` reports `UNAVAILABLE` and names them in `surface`. |
|
|
133
|
+
| LlamaIndex, Microsoft Agent Framework | gateway identity observed | These adapters receive `default_headers`, not the SDK's `httpx` client, so no response reaches `_on_response`. When every resolved adapter is non-observing, `donkey.last_call` reports `UNAVAILABLE` and names them in `surface`. |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Google ADK example
|
|
2
|
+
|
|
3
|
+
Supported at connection_kwargs() — not conformance-tested (BG §1.8).
|
|
4
|
+
|
|
5
|
+
**What this shows.** A one-line factory call gets you a *native*
|
|
6
|
+
`google.adk.models.lite_llm.LiteLlm` pointed at the governed Agent Fabric LLM
|
|
7
|
+
proxy — correct `api_base`, `client_id`/`client_secret` auth via
|
|
8
|
+
`extra_headers` (not bearer), and the model id auto-prefixed with `openai/`
|
|
9
|
+
so LiteLLM routes it correctly. The returned object is ADK's own class, not
|
|
10
|
+
a wrapper. Note: LiteLLM owns its own HTTP transport, so (unlike LangGraph)
|
|
11
|
+
the SDK's shared http client/retry hooks are not injected here — this is a
|
|
12
|
+
documented conformance exemption, not an oversight. This example only
|
|
13
|
+
constructs the object; it deliberately does not attempt a live inference
|
|
14
|
+
call, since ADK drives models through its own `Runner`/`Agent` session
|
|
15
|
+
machinery rather than a simple method call.
|
|
16
|
+
|
|
17
|
+
> 📖 **Prefer reading to running?** The canonical walkthrough — install,
|
|
18
|
+
> configure, and the manual equivalent — is in the docs:
|
|
19
|
+
> **[Google ADK](https://donkey-development-kit.github.io/donkey-development-kit/frameworks/adk)**.
|
|
20
|
+
> This README duplicates the runnable essentials on purpose so you can run it in
|
|
21
|
+
> place; if the two ever differ, the docs page is canonical.
|
|
22
|
+
|
|
23
|
+
## Run
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pip install "donkey-kit[adk]"
|
|
27
|
+
|
|
28
|
+
export DONKEY_LLM_PROXY_URL="https://<ingress-gw>/<instance>/" # note: no /v1
|
|
29
|
+
export DONKEY_LLM_PROXY_CLIENT_ID="<consumer client id>"
|
|
30
|
+
export DONKEY_LLM_PROXY_CLIENT_SECRET="<consumer client secret>"
|
|
31
|
+
|
|
32
|
+
python examples/adk/main.py
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## The manual equivalent
|
|
36
|
+
|
|
37
|
+
The factory call is equivalent to building `LiteLlm` yourself with the
|
|
38
|
+
governed connection values (BG §1.8):
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from google.adk.models.lite_llm import LiteLlm
|
|
42
|
+
|
|
43
|
+
m = LiteLlm(
|
|
44
|
+
model="openai/gpt-4o", # LiteLLM's OpenAI-compatible route needs this prefix
|
|
45
|
+
api_base=DONKEY_LLM_PROXY_URL,
|
|
46
|
+
api_key="unused", # the proxy enforces client_id/client_secret headers instead
|
|
47
|
+
extra_headers={
|
|
48
|
+
"client_id": DONKEY_LLM_PROXY_CLIENT_ID,
|
|
49
|
+
"client_secret": DONKEY_LLM_PROXY_CLIENT_SECRET,
|
|
50
|
+
},
|
|
51
|
+
)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The factory (`donkey_kit.integrations.adk.model`) fills in `api_base`,
|
|
55
|
+
`api_key`, `extra_headers`, and the `openai/` prefix from one governed
|
|
56
|
+
config source.
|
|
57
|
+
|
|
58
|
+
## Links
|
|
59
|
+
|
|
60
|
+
- Google Agent Development Kit (ADK) docs: see the framework's official
|
|
61
|
+
documentation
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Google ADK adapter example (BG §1.8).
|
|
2
|
+
|
|
3
|
+
Supported at connection_kwargs() — not conformance-tested (BG §1.8).
|
|
4
|
+
|
|
5
|
+
Demonstrates constructing a native ``google.adk.models.lite_llm.LiteLlm``
|
|
6
|
+
pointed at the governed Agent Fabric LLM proxy with a single factory call:
|
|
7
|
+
|
|
8
|
+
from donkey_kit.integrations.adk import model
|
|
9
|
+
m = model("gpt-4o") # sent to LiteLLM as "openai/gpt-4o"
|
|
10
|
+
|
|
11
|
+
Honest status (verification discipline / docs/verified-apis.md §8): the proxy *contract* (base URL,
|
|
12
|
+
client_id/secret auth, attribution headers) is live-verified, and ``LiteLlm``/its kwargs are
|
|
13
|
+
verified per the FACTS table. What is NOT attempted here is a live
|
|
14
|
+
inference call: ADK drives models through its own ``Runner``/``Agent``
|
|
15
|
+
session machinery, not a simple one-line method on the model object, and
|
|
16
|
+
guessing that call risks inventing an API (verification discipline). Construction is this
|
|
17
|
+
example's verified surface — once you have ``m``, wire it into your own ADK
|
|
18
|
+
``Agent``/``Runner`` per ADK's own docs.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import os
|
|
24
|
+
|
|
25
|
+
from donkey_kit.core.errors import ConfigError
|
|
26
|
+
from donkey_kit.integrations.adk import model
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _missing_env() -> list[str]:
|
|
30
|
+
names = (
|
|
31
|
+
"DONKEY_LLM_PROXY_URL",
|
|
32
|
+
"DONKEY_LLM_PROXY_CLIENT_ID",
|
|
33
|
+
"DONKEY_LLM_PROXY_CLIENT_SECRET",
|
|
34
|
+
)
|
|
35
|
+
return [n for n in names if not os.environ.get(n)]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def main() -> None:
|
|
39
|
+
missing = _missing_env()
|
|
40
|
+
if missing:
|
|
41
|
+
print("Set the following environment variables and re-run:")
|
|
42
|
+
print(' export DONKEY_LLM_PROXY_URL="https://<ingress-gw>/<instance>/" # no /v1')
|
|
43
|
+
print(' export DONKEY_LLM_PROXY_CLIENT_ID="<consumer client id>"')
|
|
44
|
+
print(' export DONKEY_LLM_PROXY_CLIENT_SECRET="<consumer client secret>"')
|
|
45
|
+
return
|
|
46
|
+
|
|
47
|
+
model_id = os.environ.get("DEMO_MODEL", "gpt-4o")
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
m = model(model_id)
|
|
51
|
+
except ImportError:
|
|
52
|
+
print("Google ADK not installed. Install it with:")
|
|
53
|
+
print(' pip install "donkey-kit[adk]"')
|
|
54
|
+
return
|
|
55
|
+
except ConfigError as e:
|
|
56
|
+
print(f"Config error: {e}")
|
|
57
|
+
return
|
|
58
|
+
|
|
59
|
+
print(f"Constructed native object: {type(m).__module__}.{type(m).__name__}")
|
|
60
|
+
print(
|
|
61
|
+
"Construction is the SDK's verified surface; drive this object with "
|
|
62
|
+
"ADK's own Agent/Runner API (see this example's README) — that "
|
|
63
|
+
"runtime call is UNVERIFIED here and deliberately not guessed (verification discipline)."
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
if __name__ == "__main__":
|
|
68
|
+
main()
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Microsoft Agent Framework example
|
|
2
|
+
|
|
3
|
+
Supported at connection_kwargs() — not conformance-tested (BG §1.8).
|
|
4
|
+
|
|
5
|
+
**What this shows.** A one-line factory call attempts to build a native
|
|
6
|
+
Agent Framework OpenAI-compatible chat client pointed at the governed
|
|
7
|
+
Agent Fabric LLM proxy. The proxy *contract* (base URL, `client_id`/
|
|
8
|
+
`client_secret` header auth, attribution headers) is live-verified. The
|
|
9
|
+
chat-client class name/path itself — `agent_framework.openai.OpenAIChatClient`
|
|
10
|
+
— and its base-URL kwarg (`model_id`) are **UNVERIFIED** (docs/verified-apis.md §8): Agent
|
|
11
|
+
Framework is a young package that has renamed classes recently. If the
|
|
12
|
+
import fails, the factory raises a `NotImplementedError` ("blocked on
|
|
13
|
+
verification") rather than guessing further; this example catches that and
|
|
14
|
+
prints it plainly. This example only constructs the object; it deliberately
|
|
15
|
+
does not attempt a live inference call, since Agent Framework drives chat
|
|
16
|
+
clients through its own `Agent` object rather than a method on the client
|
|
17
|
+
itself.
|
|
18
|
+
|
|
19
|
+
> 📖 **Prefer reading to running?** The canonical walkthrough — install,
|
|
20
|
+
> configure, and the manual equivalent — is in the docs:
|
|
21
|
+
> **[Microsoft Agent Framework](https://donkey-development-kit.github.io/donkey-development-kit/frameworks/agent-framework)**.
|
|
22
|
+
> This README duplicates the runnable essentials on purpose so you can run it in
|
|
23
|
+
> place; if the two ever differ, the docs page is canonical.
|
|
24
|
+
|
|
25
|
+
## Run
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pip install "donkey-kit[agent_framework]"
|
|
29
|
+
|
|
30
|
+
export DONKEY_LLM_PROXY_URL="https://<ingress-gw>/<instance>/" # note: no /v1
|
|
31
|
+
export DONKEY_LLM_PROXY_CLIENT_ID="<consumer client id>"
|
|
32
|
+
export DONKEY_LLM_PROXY_CLIENT_SECRET="<consumer client secret>"
|
|
33
|
+
|
|
34
|
+
python examples/agent_framework/main.py
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## The manual equivalent
|
|
38
|
+
|
|
39
|
+
The factory call is equivalent to attempting to build the chat client
|
|
40
|
+
yourself with the governed connection values (BG §1.8) — **class name and
|
|
41
|
+
kwarg UNVERIFIED (docs/verified-apis.md §8), confirm against your installed version**:
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
# CLASS NAME/PATH AND KWARG NAMES UNVERIFIED (docs/verified-apis.md §8) — confirm before relying on this
|
|
45
|
+
from agent_framework.openai import OpenAIChatClient
|
|
46
|
+
|
|
47
|
+
client = OpenAIChatClient(
|
|
48
|
+
model_id="gpt-4o", # kwarg name UNVERIFIED
|
|
49
|
+
base_url=DONKEY_LLM_PROXY_URL,
|
|
50
|
+
api_key="unused", # the proxy enforces client_id/client_secret headers instead
|
|
51
|
+
default_headers={
|
|
52
|
+
"client_id": DONKEY_LLM_PROXY_CLIENT_ID,
|
|
53
|
+
"client_secret": DONKEY_LLM_PROXY_CLIENT_SECRET,
|
|
54
|
+
},
|
|
55
|
+
)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The factory (`donkey_kit.integrations.agent_framework.chat_client`) fills
|
|
59
|
+
in `base_url`, `api_key`, and `default_headers` from one governed config
|
|
60
|
+
source, and raises a clear "blocked on verification" error instead of
|
|
61
|
+
silently guessing if the class import fails.
|
|
62
|
+
|
|
63
|
+
## Links
|
|
64
|
+
|
|
65
|
+
- Microsoft Agent Framework docs: see the framework's official documentation
|