donkey-kit 0.1.2__tar.gz → 0.2.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.2.0/.gitignore +72 -0
- donkey_kit-0.2.0/PKG-INFO +316 -0
- donkey_kit-0.2.0/README.md +231 -0
- donkey_kit-0.2.0/dependency_allowlist.toml +206 -0
- donkey_kit-0.2.0/examples/adk/README.md +87 -0
- donkey_kit-0.2.0/examples/adk/main.py +126 -0
- donkey_kit-0.2.0/examples/agent_framework/main.py +93 -0
- donkey_kit-0.2.0/examples/anthropic/README.md +87 -0
- donkey_kit-0.2.0/examples/anthropic/main.py +97 -0
- donkey_kit-0.2.0/examples/crewai/README.md +73 -0
- donkey_kit-0.2.0/examples/crewai/main.py +107 -0
- donkey_kit-0.2.0/examples/langgraph/collector.py +116 -0
- donkey_kit-0.2.0/examples/llamaindex/main.py +81 -0
- donkey_kit-0.2.0/examples/openai_agents/README.md +124 -0
- donkey_kit-0.2.0/examples/openai_agents/collector.py +116 -0
- donkey_kit-0.2.0/examples/openai_agents/main.py +276 -0
- donkey_kit-0.2.0/examples/strands/main.py +110 -0
- donkey_kit-0.2.0/pyproject.toml +771 -0
- donkey_kit-0.2.0/scripts/capture_descriptor_fixtures.py +277 -0
- donkey_kit-0.2.0/scripts/check_doc_snippets.py +669 -0
- donkey_kit-0.2.0/scripts/check_docs_sync.py +200 -0
- donkey_kit-0.2.0/scripts/check_floors.py +159 -0
- donkey_kit-0.2.0/scripts/check_framework_releases.py +732 -0
- donkey_kit-0.2.0/scripts/check_release_version.py +125 -0
- donkey_kit-0.2.0/scripts/check_verification_claims.py +80 -0
- donkey_kit-0.2.0/scripts/coinstall_matrix.py +219 -0
- donkey_kit-0.2.0/scripts/compile_constraints.py +409 -0
- donkey_kit-0.2.0/scripts/generate_docs.py +1659 -0
- donkey_kit-0.2.0/scripts/mcp_binding/README.md +123 -0
- donkey_kit-0.2.0/scripts/mcp_binding/_harness.py +176 -0
- donkey_kit-0.2.0/scripts/mcp_binding/bind_live.py +104 -0
- donkey_kit-0.2.0/scripts/mcp_binding/bind_toolset.py +324 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_adk.py +157 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_agent_framework.py +101 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_anthropic.py +131 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_ciba.py +70 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_crewai.py +83 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_denial.py +275 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_langgraph.py +109 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_llamaindex.py +100 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_mcp_sdk.py +83 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_openai_agents.py +113 -0
- donkey_kit-0.2.0/scripts/mcp_binding/probe_strands.py +104 -0
- donkey_kit-0.2.0/scripts/mcp_binding/server.py +297 -0
- donkey_kit-0.2.0/scripts/review_framework_release.py +406 -0
- donkey_kit-0.2.0/scripts/smoke_test_wheel.py +121 -0
- donkey_kit-0.2.0/scripts/verify_frameworks.py +604 -0
- donkey_kit-0.2.0/src/donkey_kit/__init__.py +279 -0
- donkey_kit-0.2.0/src/donkey_kit/_testing.py +86 -0
- donkey_kit-0.2.0/src/donkey_kit/a2a/__init__.py +21 -0
- donkey_kit-0.2.0/src/donkey_kit/a2a/_server.py +383 -0
- donkey_kit-0.2.0/src/donkey_kit/a2a/types.py +54 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/__init__.py +40 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/_app.py +99 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/_blocked.py +37 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/_common.py +46 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/dev.py +133 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/doctor.py +537 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/expose.py +186 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/init.py +159 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/mock.py +67 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/publish.py +184 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/scan.py +78 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/test.py +49 -0
- donkey_kit-0.2.0/src/donkey_kit/cli/verify.py +185 -0
- donkey_kit-0.2.0/src/donkey_kit/conformance/__init__.py +88 -0
- donkey_kit-0.2.0/src/donkey_kit/conformance/gateway.py +221 -0
- donkey_kit-0.2.0/src/donkey_kit/conformance/harness.py +620 -0
- donkey_kit-0.2.0/src/donkey_kit/conformance/plugin.py +390 -0
- donkey_kit-0.2.0/src/donkey_kit/conformance/suite.py +319 -0
- donkey_kit-0.2.0/src/donkey_kit/core/__init__.py +127 -0
- donkey_kit-0.2.0/src/donkey_kit/core/_budget_headers.py +109 -0
- donkey_kit-0.2.0/src/donkey_kit/core/_policy_spec.py +488 -0
- donkey_kit-0.2.0/src/donkey_kit/core/_refusal_body.py +270 -0
- donkey_kit-0.2.0/src/donkey_kit/core/_verify.py +236 -0
- donkey_kit-0.2.0/src/donkey_kit/core/_window.py +93 -0
- donkey_kit-0.2.0/src/donkey_kit/core/_wire.py +126 -0
- donkey_kit-0.2.0/src/donkey_kit/core/approval_types.py +187 -0
- donkey_kit-0.2.0/src/donkey_kit/core/approvals.py +468 -0
- donkey_kit-0.2.0/src/donkey_kit/core/auth.py +324 -0
- donkey_kit-0.2.0/src/donkey_kit/core/budget.py +494 -0
- donkey_kit-0.2.0/src/donkey_kit/core/cachecontrol.py +212 -0
- donkey_kit-0.2.0/src/donkey_kit/core/classifier.py +207 -0
- donkey_kit-0.2.0/src/donkey_kit/core/config.py +1097 -0
- donkey_kit-0.2.0/src/donkey_kit/core/correlation.py +431 -0
- donkey_kit-0.2.0/src/donkey_kit/core/cost.py +143 -0
- donkey_kit-0.2.0/src/donkey_kit/core/endpoints.py +125 -0
- donkey_kit-0.2.0/src/donkey_kit/core/errors.py +1030 -0
- donkey_kit-0.2.0/src/donkey_kit/core/header_names.py +178 -0
- donkey_kit-0.2.0/src/donkey_kit/core/identity.py +301 -0
- donkey_kit-0.2.0/src/donkey_kit/core/inbound.py +160 -0
- donkey_kit-0.2.0/src/donkey_kit/core/masking.py +108 -0
- donkey_kit-0.2.0/src/donkey_kit/core/reactions.py +460 -0
- donkey_kit-0.2.0/src/donkey_kit/core/refusals.py +459 -0
- donkey_kit-0.2.0/src/donkey_kit/core/runledger.py +318 -0
- donkey_kit-0.2.0/src/donkey_kit/core/runtime.py +259 -0
- donkey_kit-0.2.0/src/donkey_kit/core/spanflush.py +82 -0
- donkey_kit-0.2.0/src/donkey_kit/core/step_up.py +148 -0
- donkey_kit-0.2.0/src/donkey_kit/core/telemetry.py +629 -0
- donkey_kit-0.2.0/src/donkey_kit/core/tool_access.py +139 -0
- donkey_kit-0.2.0/src/donkey_kit/core/toolspec.py +231 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/__init__.py +103 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/async_client.py +396 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/governed.py +270 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/headers.py +431 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/httpx2.py +296 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/observe.py +169 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/pipeline.py +273 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/policy.py +256 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/streaming.py +265 -0
- donkey_kit-0.2.0/src/donkey_kit/core/transport/sync_client.py +290 -0
- donkey_kit-0.2.0/src/donkey_kit/donkey.py +1505 -0
- donkey_kit-0.2.0/src/donkey_kit/experimental.py +84 -0
- donkey_kit-0.2.0/src/donkey_kit/integrations/__init__.py +265 -0
- donkey_kit-0.2.0/src/donkey_kit/integrations/_base.py +352 -0
- donkey_kit-0.2.0/src/donkey_kit/integrations/adk.py +821 -0
- donkey_kit-0.2.0/src/donkey_kit/integrations/agent_framework.py +274 -0
- donkey_kit-0.2.0/src/donkey_kit/integrations/crewai.py +215 -0
- donkey_kit-0.2.0/src/donkey_kit/integrations/langgraph.py +435 -0
- donkey_kit-0.2.0/src/donkey_kit/integrations/openai_agents.py +566 -0
- donkey_kit-0.2.0/src/donkey_kit/integrations/strands.py +535 -0
- donkey_kit-0.2.0/src/donkey_kit/llm/__init__.py +8 -0
- donkey_kit-0.2.0/src/donkey_kit/llm/client.py +205 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/__init__.py +34 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/_scopes.py +45 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/criteria.py +81 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/exchange.py +752 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/exchange_page.py +188 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/exchange_publish.py +837 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/expose.py +640 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/expose_plan.py +330 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/introspect.py +323 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/models.py +81 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/publication.py +379 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/publish_plan.py +480 -0
- donkey_kit-0.2.0/src/donkey_kit/registry/scan.py +856 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/fixtures.lock +37 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/README.md +193 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.ciba-denied.body.json +1 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.ciba-pending.body.json +1 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.ciba-pending.headers.txt +3 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-crowdstrike-aidr.body.json +1 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-crowdstrike-aidr.headers.txt +5 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-model-armor.body.json +1 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-model-armor.headers.txt +5 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.regex-prompt-guard.headers.txt +2 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/app.py +339 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/fixtures.py +565 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/ingress.py +246 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/inject.py +246 -0
- donkey_kit-0.2.0/src/donkey_kit/simulator/scenarios.py +479 -0
- donkey_kit-0.2.0/src/donkey_kit/tools/__init__.py +8 -0
- donkey_kit-0.2.0/src/donkey_kit/tools/approval.py +150 -0
- donkey_kit-0.2.0/src/donkey_kit/tools/auth.py +157 -0
- donkey_kit-0.2.0/src/donkey_kit/tools/discovery.py +404 -0
- donkey_kit-0.2.0/src/donkey_kit/tools/filter.py +175 -0
- donkey_kit-0.2.0/src/donkey_kit/tools/mcp.py +187 -0
- donkey_kit-0.2.0/src/donkey_kit/tools/session.py +1116 -0
- donkey_kit-0.2.0/tests/conformance/contract_drivers.py +287 -0
- donkey_kit-0.2.0/tests/conformance/contract_gateway.py +210 -0
- donkey_kit-0.2.0/tests/conformance/suite.py +420 -0
- donkey_kit-0.2.0/tests/conformance/test_adapter_contract.py +257 -0
- donkey_kit-0.2.0/tests/conformance/test_agent_killed_stops_cleanly.py +122 -0
- donkey_kit-0.2.0/tests/conformance/test_approval_round_trip.py +439 -0
- donkey_kit-0.2.0/tests/conformance/test_custom_policy_typed.py +121 -0
- donkey_kit-0.2.0/tests/conformance/test_gateway_fixture.py +110 -0
- donkey_kit-0.2.0/tests/conformance/test_handlers_cannot_unrefuse.py +145 -0
- donkey_kit-0.2.0/tests/conformance/test_langgraph_conformance.py +64 -0
- donkey_kit-0.2.0/tests/conformance/test_openai_agents_conformance.py +64 -0
- donkey_kit-0.2.0/tests/conformance/test_readme_exemptions_table.py +156 -0
- donkey_kit-0.2.0/tests/conformance/test_stock_openai_honesty.py +95 -0
- donkey_kit-0.2.0/tests/conformance/test_tool_binding.py +602 -0
- donkey_kit-0.2.0/tests/conformance/test_transport_exemptions.py +153 -0
- donkey_kit-0.2.0/tests/conformance/test_typed_refusal_bridge.py +326 -0
- donkey_kit-0.2.0/tests/conformance/transport_surfaces.py +192 -0
- donkey_kit-0.2.0/tests/conftest.py +240 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/README.md +38 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/README.md +55 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/a2a-card.stored.json +38 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/agent-metadata.stored.json +6 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/api.describe.json +109 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/apis.by-asset.json +85 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/graphql.files.json +66 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/traffic.card.contracted.200.json +9 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/traffic.card.no-client-id.401.json +10 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/traffic.card.no-policy.200.json +9 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/traffic.card.uncontracted.401.json +10 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/upstream.agent-card.json +63 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/README.md +55 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/api_describe.200.json +109 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/contracts.200.json +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/create.201.json +48 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/create.a2a-v1-protocol.400.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/create.request.json +16 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/deployment-status.applied.json +5 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/deployment-status.applying.json +5 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/deployment.201.json +46 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/deployment.request.json +8 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/outbound-policies.get.405.json +13 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/outbound-policy.201.json +27 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/outbound-policy.request.json +15 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/policies.200.json +32 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/policy-inbound.400.json +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/policy-inbound.request.json +12 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/upstreams.200.json +17 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/README.md +114 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.a2a-v1-card.stored.json +41 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.agent-metadata.stored.json +11 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.graphql.latest.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.pom.xml +21 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.publish.201.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.absent.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.files.json +34 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.latest.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.renamed.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.version.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/instance.201.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/mcp-metadata.stored.json +34 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/page.201.json +5 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/page.409.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/pom.xml +19 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/portal-draft.200.json +19 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/publish.201.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/publish.409.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/README.md +40 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.api-types.json +5 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.description-term.json +120 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.page1.json +176 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.page2.json +162 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.tags-derived.json +318 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.tags-two.json +5 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.tags.json +44 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.term.json +20 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.types-mcp.json +20 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.unknown-field.400.json +20 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/gateway/README.md +23 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/gateway/gateway.200.json +48 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/gateway/gateways.by-name.json +15 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/README.md +25 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/tools-call.abac-denied.body.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/tools-call.abac-denied.headers.txt +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/tools-call.global-access-denied.body.json +1 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/tools-call.global-access-denied.headers.txt +3 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/README.md +60 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/api.describe.governed.json +106 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/apis.by-asset.governed.json +82 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/apis.by-asset.none.json +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/apis.by-asset.undeployed.json +73 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/apis.by-asset.ungoverned.json +82 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/asset.version.json +11 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/asset.version.tagged.json +13 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/governance.reports.conformant.json +19 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/governance.reports.none.json +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/governance.reports.root-org.json +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/policies.governed.json +54 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/policies.none.json +3 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/README.md +54 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/api_describe.200.json +106 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/apis-list.by-label.json +51 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/contracts.200.json +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/create.201.json +44 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/create.409.json +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/create.request.json +16 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/deployment-status.applied.json +5 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/deployment-status.applying.json +5 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/deployment.201.json +46 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/deployment.request.json +8 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policies.200.json +40 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policy-client-id-enforcement.201.json +23 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policy-client-id-enforcement.request.json +11 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policy-mcp-support.201.json +21 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policy-mcp-support.request.json +9 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/README.md +43 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/api.describe.json +106 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/apis.by-asset.json +82 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/apis.by-asset.none.json +4 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/apis.by-asset.undeployed-and-deployed.json +131 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/environments.json +23 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/gateway.json +48 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/traffic.no-slash.404.json +8 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/traffic.slash.401.json +10 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/traffic.unknown-path.404.json +8 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/missing_scope/README.md +17 -0
- donkey_kit-0.2.0/tests/fixtures/anypoint/missing_scope/responses.json +56 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/README.md +25 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/adk.json +57 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/agent_framework.json +57 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/anthropic.json +61 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/crewai.json +57 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/langchain.json +59 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/llamaindex.json +55 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/mcp-1.json +57 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/mcp-2.json +57 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/openai_agents.json +65 -0
- donkey_kit-0.2.0/tests/fixtures/descriptor/strands.json +55 -0
- donkey_kit-0.2.0/tests/fixtures/fixtures.lock +267 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/adk.json +34 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/agent_framework.json +34 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/anthropic.json +39 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-adk.json +28 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-af.json +52 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-lg.json +230 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-li.json +157 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-mcp1.json +85 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-mcp2.json +59 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-oa.json +60 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-st.json +28 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/crewai.json +43 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-adk.json +40 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-agent_framework.json +98 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-mcp1.json +79 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-mcp2.json +103 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-openai_agents.json +56 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-strands.json +40 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/langgraph.json +41 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/llamaindex.json +34 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/mcp_sdk.json +33 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/openai_agents.json +36 -0
- donkey_kit-0.2.0/tests/fixtures/mcp_binding/strands.json +33 -0
- donkey_kit-0.2.0/tests/typecheck/asset_type_contract.py +23 -0
- donkey_kit-0.2.0/tests/typecheck/headline_api_v0_2_contract.py +333 -0
- donkey_kit-0.2.0/tests/unit/_anthropic_wire.py +151 -0
- donkey_kit-0.2.0/tests/unit/_fake_anypoint.py +253 -0
- donkey_kit-0.2.0/tests/unit/_fake_exchange.py +240 -0
- donkey_kit-0.2.0/tests/unit/_json_shapes.py +49 -0
- donkey_kit-0.2.0/tests/unit/test_a2a_governed_inbound.py +369 -0
- donkey_kit-0.2.0/tests/unit/test_a2a_serve.py +290 -0
- donkey_kit-0.2.0/tests/unit/test_action.py +449 -0
- donkey_kit-0.2.0/tests/unit/test_adapter_async_last_call.py +538 -0
- donkey_kit-0.2.0/tests/unit/test_adapter_capabilities.py +343 -0
- donkey_kit-0.2.0/tests/unit/test_adapter_ergonomics.py +824 -0
- donkey_kit-0.2.0/tests/unit/test_adapter_jwt_mode.py +176 -0
- donkey_kit-0.2.0/tests/unit/test_adapter_openai3_bridge.py +279 -0
- donkey_kit-0.2.0/tests/unit/test_adapter_roster.py +241 -0
- donkey_kit-0.2.0/tests/unit/test_adk_approval_bookkeeping.py +537 -0
- donkey_kit-0.2.0/tests/unit/test_adk_approvals.py +228 -0
- donkey_kit-0.2.0/tests/unit/test_agent_framework_policy_middleware.py +319 -0
- donkey_kit-0.2.0/tests/unit/test_approval_requester.py +449 -0
- donkey_kit-0.2.0/tests/unit/test_approvals.py +581 -0
- donkey_kit-0.2.0/tests/unit/test_architecture.py +499 -0
- donkey_kit-0.2.0/tests/unit/test_as_user_endpoint_trust.py +245 -0
- donkey_kit-0.2.0/tests/unit/test_auth.py +261 -0
- donkey_kit-0.2.0/tests/unit/test_budget.py +426 -0
- donkey_kit-0.2.0/tests/unit/test_budget_upstream.py +314 -0
- donkey_kit-0.2.0/tests/unit/test_check_doc_snippets.py +216 -0
- donkey_kit-0.2.0/tests/unit/test_check_docs_sync.py +171 -0
- donkey_kit-0.2.0/tests/unit/test_check_framework_releases.py +575 -0
- donkey_kit-0.2.0/tests/unit/test_check_verification_claims.py +92 -0
- donkey_kit-0.2.0/tests/unit/test_ci_workflows.py +214 -0
- donkey_kit-0.2.0/tests/unit/test_classifier.py +669 -0
- donkey_kit-0.2.0/tests/unit/test_cli_blocked_commands.py +61 -0
- donkey_kit-0.2.0/tests/unit/test_cli_dev.py +145 -0
- donkey_kit-0.2.0/tests/unit/test_cli_doctor.py +221 -0
- donkey_kit-0.2.0/tests/unit/test_cli_entrypoint.py +172 -0
- donkey_kit-0.2.0/tests/unit/test_cli_expose.py +227 -0
- donkey_kit-0.2.0/tests/unit/test_cli_mock.py +106 -0
- donkey_kit-0.2.0/tests/unit/test_cli_publish.py +293 -0
- donkey_kit-0.2.0/tests/unit/test_cli_scan.py +113 -0
- donkey_kit-0.2.0/tests/unit/test_cli_verify.py +350 -0
- donkey_kit-0.2.0/tests/unit/test_concurrency_contract.py +352 -0
- donkey_kit-0.2.0/tests/unit/test_config.py +389 -0
- donkey_kit-0.2.0/tests/unit/test_config_endpoint_trust.py +1156 -0
- donkey_kit-0.2.0/tests/unit/test_config_precedence.py +370 -0
- donkey_kit-0.2.0/tests/unit/test_config_validation.py +220 -0
- donkey_kit-0.2.0/tests/unit/test_conformance.py +695 -0
- donkey_kit-0.2.0/tests/unit/test_conformance_plugin.py +339 -0
- donkey_kit-0.2.0/tests/unit/test_connected_app_scopes.py +135 -0
- donkey_kit-0.2.0/tests/unit/test_constraints_lock.py +251 -0
- donkey_kit-0.2.0/tests/unit/test_cost.py +113 -0
- donkey_kit-0.2.0/tests/unit/test_credential_binding_planes.py +353 -0
- donkey_kit-0.2.0/tests/unit/test_credential_planes.py +351 -0
- donkey_kit-0.2.0/tests/unit/test_custom_policies_page.py +83 -0
- donkey_kit-0.2.0/tests/unit/test_data_plane_only_headers.py +128 -0
- donkey_kit-0.2.0/tests/unit/test_decorators.py +318 -0
- donkey_kit-0.2.0/tests/unit/test_default_runtime.py +296 -0
- donkey_kit-0.2.0/tests/unit/test_descriptor_derivation.py +274 -0
- donkey_kit-0.2.0/tests/unit/test_discover.py +544 -0
- donkey_kit-0.2.0/tests/unit/test_discover_default.py +117 -0
- donkey_kit-0.2.0/tests/unit/test_discover_registry_cache.py +130 -0
- donkey_kit-0.2.0/tests/unit/test_docs_from_env_kwargs.py +73 -0
- donkey_kit-0.2.0/tests/unit/test_doctor.py +543 -0
- donkey_kit-0.2.0/tests/unit/test_donkey_surface.py +353 -0
- donkey_kit-0.2.0/tests/unit/test_endpoints.py +248 -0
- donkey_kit-0.2.0/tests/unit/test_error_taxonomy.py +116 -0
- donkey_kit-0.2.0/tests/unit/test_errors.py +886 -0
- donkey_kit-0.2.0/tests/unit/test_exchange_page.py +163 -0
- donkey_kit-0.2.0/tests/unit/test_exchange_publish.py +930 -0
- donkey_kit-0.2.0/tests/unit/test_exchange_search.py +221 -0
- donkey_kit-0.2.0/tests/unit/test_explain.py +341 -0
- donkey_kit-0.2.0/tests/unit/test_expose.py +578 -0
- donkey_kit-0.2.0/tests/unit/test_expose_plan.py +286 -0
- donkey_kit-0.2.0/tests/unit/test_fixture_integrity.py +215 -0
- donkey_kit-0.2.0/tests/unit/test_framework_retries.py +291 -0
- donkey_kit-0.2.0/tests/unit/test_gateway_credential_endpoint_trust.py +343 -0
- donkey_kit-0.2.0/tests/unit/test_gemini_inbound_contract.py +152 -0
- donkey_kit-0.2.0/tests/unit/test_generated_docs.py +384 -0
- donkey_kit-0.2.0/tests/unit/test_governed_state_shapes.py +94 -0
- donkey_kit-0.2.0/tests/unit/test_house_style_config.py +237 -0
- donkey_kit-0.2.0/tests/unit/test_identity.py +420 -0
- donkey_kit-0.2.0/tests/unit/test_inbound_correlation.py +242 -0
- donkey_kit-0.2.0/tests/unit/test_integration_checklist.py +233 -0
- donkey_kit-0.2.0/tests/unit/test_kill_switch.py +334 -0
- donkey_kit-0.2.0/tests/unit/test_langgraph_approvals.py +638 -0
- donkey_kit-0.2.0/tests/unit/test_langgraph_sync_transport.py +293 -0
- donkey_kit-0.2.0/tests/unit/test_langgraph_typed_refusals.py +247 -0
- donkey_kit-0.2.0/tests/unit/test_lastcall.py +925 -0
- donkey_kit-0.2.0/tests/unit/test_llm_client_openai3_injection.py +280 -0
- donkey_kit-0.2.0/tests/unit/test_llm_proxy_contract.py +188 -0
- donkey_kit-0.2.0/tests/unit/test_logging.py +239 -0
- donkey_kit-0.2.0/tests/unit/test_mcp_client.py +270 -0
- donkey_kit-0.2.0/tests/unit/test_mcp_redirects.py +308 -0
- donkey_kit-0.2.0/tests/unit/test_missing_framework_error.py +343 -0
- donkey_kit-0.2.0/tests/unit/test_model_wallet_contract.py +213 -0
- donkey_kit-0.2.0/tests/unit/test_noxfile.py +300 -0
- donkey_kit-0.2.0/tests/unit/test_openai_agents_approval_bookkeeping.py +391 -0
- donkey_kit-0.2.0/tests/unit/test_openai_agents_approvals.py +773 -0
- donkey_kit-0.2.0/tests/unit/test_openai_agents_correlation.py +96 -0
- donkey_kit-0.2.0/tests/unit/test_openai_gemini_stream_contract.py +155 -0
- donkey_kit-0.2.0/tests/unit/test_otlp_export.py +499 -0
- donkey_kit-0.2.0/tests/unit/test_per_request_business_group.py +280 -0
- donkey_kit-0.2.0/tests/unit/test_pre_commit_lock_sync.py +134 -0
- donkey_kit-0.2.0/tests/unit/test_product_description.py +51 -0
- donkey_kit-0.2.0/tests/unit/test_proxy_key_header.py +271 -0
- donkey_kit-0.2.0/tests/unit/test_public_api_snapshot.py +284 -0
- donkey_kit-0.2.0/tests/unit/test_public_api_surface.py +306 -0
- donkey_kit-0.2.0/tests/unit/test_publication_verify.py +285 -0
- donkey_kit-0.2.0/tests/unit/test_publish_plan.py +258 -0
- donkey_kit-0.2.0/tests/unit/test_pure_logic.py +142 -0
- donkey_kit-0.2.0/tests/unit/test_refusal_bridge.py +485 -0
- donkey_kit-0.2.0/tests/unit/test_refusal_capture.py +313 -0
- donkey_kit-0.2.0/tests/unit/test_refusal_handlers.py +615 -0
- donkey_kit-0.2.0/tests/unit/test_registry_shapes.py +146 -0
- donkey_kit-0.2.0/tests/unit/test_rejection_contract.py +276 -0
- donkey_kit-0.2.0/tests/unit/test_release_version.py +184 -0
- donkey_kit-0.2.0/tests/unit/test_release_workflows.py +122 -0
- donkey_kit-0.2.0/tests/unit/test_resolve_mcp.py +310 -0
- donkey_kit-0.2.0/tests/unit/test_review_framework_release.py +306 -0
- donkey_kit-0.2.0/tests/unit/test_run_ledger.py +342 -0
- donkey_kit-0.2.0/tests/unit/test_scan.py +717 -0
- donkey_kit-0.2.0/tests/unit/test_semantic_cache.py +397 -0
- donkey_kit-0.2.0/tests/unit/test_sensitive_output.py +391 -0
- donkey_kit-0.2.0/tests/unit/test_simulate.py +223 -0
- donkey_kit-0.2.0/tests/unit/test_simulator_app.py +336 -0
- donkey_kit-0.2.0/tests/unit/test_simulator_fixtures.py +132 -0
- donkey_kit-0.2.0/tests/unit/test_simulator_ingress.py +200 -0
- donkey_kit-0.2.0/tests/unit/test_simulator_scenarios.py +247 -0
- donkey_kit-0.2.0/tests/unit/test_simulator_scenarios_app.py +190 -0
- donkey_kit-0.2.0/tests/unit/test_smoke_example.py +62 -0
- donkey_kit-0.2.0/tests/unit/test_smoke_test_wheel.py +114 -0
- donkey_kit-0.2.0/tests/unit/test_step_up_wait.py +330 -0
- donkey_kit-0.2.0/tests/unit/test_strands_approval_bookkeeping.py +405 -0
- donkey_kit-0.2.0/tests/unit/test_strands_approvals.py +671 -0
- donkey_kit-0.2.0/tests/unit/test_support_matrix.py +226 -0
- donkey_kit-0.2.0/tests/unit/test_telemetry.py +491 -0
- donkey_kit-0.2.0/tests/unit/test_tool_access.py +162 -0
- donkey_kit-0.2.0/tests/unit/test_toolset_approval.py +332 -0
- donkey_kit-0.2.0/tests/unit/test_toolset_as_user.py +315 -0
- donkey_kit-0.2.0/tests/unit/test_toolset_descriptor_cost.py +338 -0
- donkey_kit-0.2.0/tests/unit/test_toolset_filter.py +155 -0
- donkey_kit-0.2.0/tests/unit/test_transport.py +2591 -0
- donkey_kit-0.2.0/tests/unit/test_transport_both_clients.py +398 -0
- donkey_kit-0.2.0/tests/unit/test_transport_proxy_mounts.py +219 -0
- donkey_kit-0.2.0/tests/unit/test_ungoverned_binding.py +166 -0
- donkey_kit-0.2.0/tests/unit/test_verification_blocked_surfaces.py +74 -0
- donkey_kit-0.2.0/tests/unit/test_verify_agent_card.py +354 -0
- donkey_kit-0.2.0/tests/unit/test_wire_names.py +86 -0
- donkey_kit-0.2.0/tests/unit/test_workflow_supply_chain.py +176 -0
- donkey_kit-0.2.0/vulture_whitelist.py +191 -0
- donkey_kit-0.1.2/.gitignore +0 -70
- donkey_kit-0.1.2/PKG-INFO +0 -228
- donkey_kit-0.1.2/README.md +0 -152
- donkey_kit-0.1.2/dependency_allowlist.toml +0 -163
- donkey_kit-0.1.2/examples/adk/README.md +0 -87
- donkey_kit-0.1.2/examples/adk/main.py +0 -125
- donkey_kit-0.1.2/examples/agent_framework/main.py +0 -92
- donkey_kit-0.1.2/examples/anthropic/README.md +0 -87
- donkey_kit-0.1.2/examples/anthropic/main.py +0 -96
- donkey_kit-0.1.2/examples/crewai/README.md +0 -73
- donkey_kit-0.1.2/examples/crewai/main.py +0 -106
- donkey_kit-0.1.2/examples/langgraph/collector.py +0 -120
- donkey_kit-0.1.2/examples/llamaindex/main.py +0 -80
- donkey_kit-0.1.2/examples/openai_agents/README.md +0 -73
- donkey_kit-0.1.2/examples/openai_agents/main.py +0 -113
- donkey_kit-0.1.2/examples/strands/main.py +0 -109
- donkey_kit-0.1.2/pyproject.toml +0 -625
- donkey_kit-0.1.2/scripts/check_verification_claims.py +0 -71
- donkey_kit-0.1.2/scripts/compile_constraints.py +0 -276
- donkey_kit-0.1.2/scripts/verify_frameworks.py +0 -428
- donkey_kit-0.1.2/src/donkey_kit/__init__.py +0 -205
- donkey_kit-0.1.2/src/donkey_kit/_testing.py +0 -63
- donkey_kit-0.1.2/src/donkey_kit/cli/__init__.py +0 -33
- donkey_kit-0.1.2/src/donkey_kit/cli/_app.py +0 -84
- donkey_kit-0.1.2/src/donkey_kit/cli/_blocked.py +0 -44
- donkey_kit-0.1.2/src/donkey_kit/cli/doctor.py +0 -522
- donkey_kit-0.1.2/src/donkey_kit/cli/init.py +0 -163
- donkey_kit-0.1.2/src/donkey_kit/cli/mock.py +0 -69
- donkey_kit-0.1.2/src/donkey_kit/cli/test.py +0 -51
- donkey_kit-0.1.2/src/donkey_kit/conformance/__init__.py +0 -83
- donkey_kit-0.1.2/src/donkey_kit/conformance/gateway.py +0 -220
- donkey_kit-0.1.2/src/donkey_kit/conformance/harness.py +0 -482
- donkey_kit-0.1.2/src/donkey_kit/conformance/plugin.py +0 -318
- donkey_kit-0.1.2/src/donkey_kit/conformance/suite.py +0 -317
- donkey_kit-0.1.2/src/donkey_kit/core/__init__.py +0 -106
- donkey_kit-0.1.2/src/donkey_kit/core/_refusal_body.py +0 -142
- donkey_kit-0.1.2/src/donkey_kit/core/_verify.py +0 -231
- donkey_kit-0.1.2/src/donkey_kit/core/_wire.py +0 -107
- donkey_kit-0.1.2/src/donkey_kit/core/auth.py +0 -324
- donkey_kit-0.1.2/src/donkey_kit/core/budget.py +0 -388
- donkey_kit-0.1.2/src/donkey_kit/core/cachecontrol.py +0 -210
- donkey_kit-0.1.2/src/donkey_kit/core/config.py +0 -1108
- donkey_kit-0.1.2/src/donkey_kit/core/correlation.py +0 -196
- donkey_kit-0.1.2/src/donkey_kit/core/cost.py +0 -142
- donkey_kit-0.1.2/src/donkey_kit/core/endpoints.py +0 -108
- donkey_kit-0.1.2/src/donkey_kit/core/errors.py +0 -1095
- donkey_kit-0.1.2/src/donkey_kit/core/header_names.py +0 -104
- donkey_kit-0.1.2/src/donkey_kit/core/masking.py +0 -93
- donkey_kit-0.1.2/src/donkey_kit/core/refusals.py +0 -364
- donkey_kit-0.1.2/src/donkey_kit/core/runtime.py +0 -247
- donkey_kit-0.1.2/src/donkey_kit/core/telemetry.py +0 -657
- donkey_kit-0.1.2/src/donkey_kit/core/toolspec.py +0 -105
- donkey_kit-0.1.2/src/donkey_kit/core/transport/__init__.py +0 -101
- donkey_kit-0.1.2/src/donkey_kit/core/transport/async_client.py +0 -324
- donkey_kit-0.1.2/src/donkey_kit/core/transport/governed.py +0 -266
- donkey_kit-0.1.2/src/donkey_kit/core/transport/headers.py +0 -379
- donkey_kit-0.1.2/src/donkey_kit/core/transport/httpx2.py +0 -296
- donkey_kit-0.1.2/src/donkey_kit/core/transport/observe.py +0 -161
- donkey_kit-0.1.2/src/donkey_kit/core/transport/pipeline.py +0 -198
- donkey_kit-0.1.2/src/donkey_kit/core/transport/policy.py +0 -244
- donkey_kit-0.1.2/src/donkey_kit/core/transport/streaming.py +0 -263
- donkey_kit-0.1.2/src/donkey_kit/core/transport/sync_client.py +0 -235
- donkey_kit-0.1.2/src/donkey_kit/donkey.py +0 -732
- donkey_kit-0.1.2/src/donkey_kit/experimental.py +0 -44
- donkey_kit-0.1.2/src/donkey_kit/integrations/__init__.py +0 -232
- donkey_kit-0.1.2/src/donkey_kit/integrations/_base.py +0 -354
- donkey_kit-0.1.2/src/donkey_kit/integrations/adk.py +0 -193
- donkey_kit-0.1.2/src/donkey_kit/integrations/agent_framework.py +0 -263
- donkey_kit-0.1.2/src/donkey_kit/integrations/crewai.py +0 -213
- donkey_kit-0.1.2/src/donkey_kit/integrations/langgraph.py +0 -216
- donkey_kit-0.1.2/src/donkey_kit/integrations/openai_agents.py +0 -89
- donkey_kit-0.1.2/src/donkey_kit/integrations/strands.py +0 -199
- donkey_kit-0.1.2/src/donkey_kit/llm/__init__.py +0 -7
- donkey_kit-0.1.2/src/donkey_kit/llm/client.py +0 -207
- donkey_kit-0.1.2/src/donkey_kit/registry/__init__.py +0 -33
- donkey_kit-0.1.2/src/donkey_kit/registry/criteria.py +0 -81
- donkey_kit-0.1.2/src/donkey_kit/registry/exchange.py +0 -128
- donkey_kit-0.1.2/src/donkey_kit/registry/introspect.py +0 -42
- donkey_kit-0.1.2/src/donkey_kit/registry/models.py +0 -73
- donkey_kit-0.1.2/src/donkey_kit/registry/publication.py +0 -195
- donkey_kit-0.1.2/src/donkey_kit/simulator/_fixtures/fixtures.lock +0 -33
- donkey_kit-0.1.2/src/donkey_kit/simulator/_fixtures/rejections/README.md +0 -144
- donkey_kit-0.1.2/src/donkey_kit/simulator/app.py +0 -332
- donkey_kit-0.1.2/src/donkey_kit/simulator/fixtures.py +0 -548
- donkey_kit-0.1.2/src/donkey_kit/simulator/inject.py +0 -211
- donkey_kit-0.1.2/src/donkey_kit/simulator/scenarios.py +0 -439
- donkey_kit-0.1.2/src/donkey_kit/tools/__init__.py +0 -7
- donkey_kit-0.1.2/src/donkey_kit/tools/filter.py +0 -66
- donkey_kit-0.1.2/src/donkey_kit/tools/session.py +0 -170
- donkey_kit-0.1.2/tests/conformance/contract_drivers.py +0 -248
- donkey_kit-0.1.2/tests/conformance/contract_gateway.py +0 -178
- donkey_kit-0.1.2/tests/conformance/suite.py +0 -173
- donkey_kit-0.1.2/tests/conformance/test_adapter_contract.py +0 -257
- donkey_kit-0.1.2/tests/conformance/test_gateway_fixture.py +0 -92
- donkey_kit-0.1.2/tests/conformance/test_langgraph_conformance.py +0 -66
- donkey_kit-0.1.2/tests/conformance/test_readme_exemptions_table.py +0 -101
- donkey_kit-0.1.2/tests/conformance/test_stock_openai_honesty.py +0 -97
- donkey_kit-0.1.2/tests/conformance/test_transport_exemptions.py +0 -155
- donkey_kit-0.1.2/tests/conformance/test_typed_refusal_bridge.py +0 -321
- donkey_kit-0.1.2/tests/conftest.py +0 -218
- donkey_kit-0.1.2/tests/fixtures/anypoint/README.md +0 -35
- donkey_kit-0.1.2/tests/fixtures/fixtures.lock +0 -126
- donkey_kit-0.1.2/tests/typecheck/asset_type_contract.py +0 -25
- donkey_kit-0.1.2/tests/unit/_anthropic_wire.py +0 -122
- donkey_kit-0.1.2/tests/unit/test_adapter_async_last_call.py +0 -254
- donkey_kit-0.1.2/tests/unit/test_adapter_capabilities.py +0 -339
- donkey_kit-0.1.2/tests/unit/test_adapter_ergonomics.py +0 -823
- donkey_kit-0.1.2/tests/unit/test_adapter_jwt_mode.py +0 -162
- donkey_kit-0.1.2/tests/unit/test_adapter_openai3_bridge.py +0 -281
- donkey_kit-0.1.2/tests/unit/test_adapter_roster.py +0 -188
- donkey_kit-0.1.2/tests/unit/test_agent_framework_policy_middleware.py +0 -296
- donkey_kit-0.1.2/tests/unit/test_architecture.py +0 -460
- donkey_kit-0.1.2/tests/unit/test_auth.py +0 -261
- donkey_kit-0.1.2/tests/unit/test_budget.py +0 -320
- donkey_kit-0.1.2/tests/unit/test_check_verification_claims.py +0 -87
- donkey_kit-0.1.2/tests/unit/test_ci_workflows.py +0 -62
- donkey_kit-0.1.2/tests/unit/test_cli_blocked_commands.py +0 -56
- donkey_kit-0.1.2/tests/unit/test_cli_doctor.py +0 -222
- donkey_kit-0.1.2/tests/unit/test_cli_entrypoint.py +0 -159
- donkey_kit-0.1.2/tests/unit/test_cli_mock.py +0 -112
- donkey_kit-0.1.2/tests/unit/test_config.py +0 -393
- donkey_kit-0.1.2/tests/unit/test_config_endpoint_trust.py +0 -1160
- donkey_kit-0.1.2/tests/unit/test_config_precedence.py +0 -372
- donkey_kit-0.1.2/tests/unit/test_config_validation.py +0 -214
- donkey_kit-0.1.2/tests/unit/test_conformance.py +0 -561
- donkey_kit-0.1.2/tests/unit/test_conformance_plugin.py +0 -246
- donkey_kit-0.1.2/tests/unit/test_constraints_lock.py +0 -176
- donkey_kit-0.1.2/tests/unit/test_cost.py +0 -113
- donkey_kit-0.1.2/tests/unit/test_credential_binding_planes.py +0 -349
- donkey_kit-0.1.2/tests/unit/test_credential_planes.py +0 -345
- donkey_kit-0.1.2/tests/unit/test_data_plane_only_headers.py +0 -126
- donkey_kit-0.1.2/tests/unit/test_decorators.py +0 -203
- donkey_kit-0.1.2/tests/unit/test_default_runtime.py +0 -302
- donkey_kit-0.1.2/tests/unit/test_docs_from_env_kwargs.py +0 -68
- donkey_kit-0.1.2/tests/unit/test_doctor.py +0 -542
- donkey_kit-0.1.2/tests/unit/test_donkey_surface.py +0 -359
- donkey_kit-0.1.2/tests/unit/test_error_taxonomy.py +0 -103
- donkey_kit-0.1.2/tests/unit/test_errors.py +0 -668
- donkey_kit-0.1.2/tests/unit/test_fixture_integrity.py +0 -214
- donkey_kit-0.1.2/tests/unit/test_framework_retries.py +0 -275
- donkey_kit-0.1.2/tests/unit/test_gemini_inbound_contract.py +0 -154
- donkey_kit-0.1.2/tests/unit/test_governed_state_shapes.py +0 -96
- donkey_kit-0.1.2/tests/unit/test_house_style_config.py +0 -205
- donkey_kit-0.1.2/tests/unit/test_integration_checklist.py +0 -205
- donkey_kit-0.1.2/tests/unit/test_langgraph_sync_transport.py +0 -291
- donkey_kit-0.1.2/tests/unit/test_langgraph_typed_refusals.py +0 -247
- donkey_kit-0.1.2/tests/unit/test_lastcall.py +0 -931
- donkey_kit-0.1.2/tests/unit/test_llm_client_openai3_injection.py +0 -282
- donkey_kit-0.1.2/tests/unit/test_llm_proxy_contract.py +0 -184
- donkey_kit-0.1.2/tests/unit/test_logging.py +0 -225
- donkey_kit-0.1.2/tests/unit/test_missing_framework_error.py +0 -235
- donkey_kit-0.1.2/tests/unit/test_model_wallet_contract.py +0 -211
- donkey_kit-0.1.2/tests/unit/test_openai_gemini_stream_contract.py +0 -157
- donkey_kit-0.1.2/tests/unit/test_otlp_export.py +0 -390
- donkey_kit-0.1.2/tests/unit/test_product_description.py +0 -49
- donkey_kit-0.1.2/tests/unit/test_public_api_surface.py +0 -212
- donkey_kit-0.1.2/tests/unit/test_pure_logic.py +0 -142
- donkey_kit-0.1.2/tests/unit/test_refusal_bridge.py +0 -480
- donkey_kit-0.1.2/tests/unit/test_registry_shapes.py +0 -166
- donkey_kit-0.1.2/tests/unit/test_rejection_contract.py +0 -189
- donkey_kit-0.1.2/tests/unit/test_semantic_cache.py +0 -396
- donkey_kit-0.1.2/tests/unit/test_sensitive_output.py +0 -387
- donkey_kit-0.1.2/tests/unit/test_simulate.py +0 -222
- donkey_kit-0.1.2/tests/unit/test_simulator_app.py +0 -341
- donkey_kit-0.1.2/tests/unit/test_simulator_fixtures.py +0 -136
- donkey_kit-0.1.2/tests/unit/test_simulator_scenarios.py +0 -219
- donkey_kit-0.1.2/tests/unit/test_simulator_scenarios_app.py +0 -178
- donkey_kit-0.1.2/tests/unit/test_smoke_example.py +0 -61
- donkey_kit-0.1.2/tests/unit/test_telemetry.py +0 -473
- donkey_kit-0.1.2/tests/unit/test_transport.py +0 -2547
- donkey_kit-0.1.2/tests/unit/test_transport_both_clients.py +0 -342
- donkey_kit-0.1.2/tests/unit/test_transport_proxy_mounts.py +0 -212
- donkey_kit-0.1.2/tests/unit/test_verification_blocked_surfaces.py +0 -78
- donkey_kit-0.1.2/tests/unit/test_wire_names.py +0 -88
- donkey_kit-0.1.2/vulture_whitelist.py +0 -145
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/LICENSE +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/examples/agent_framework/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/examples/langgraph/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/examples/langgraph/main.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/examples/llamaindex/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/examples/quickstart/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/examples/quickstart/main.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/examples/strands/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/scripts/capture_fixture.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/scripts/check_commit_identities.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/scripts/check_doc_links.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/scripts/check_new_dependencies.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/scripts/compare_benchmark_trend.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/scripts/scrub_fixtures.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/scripts/smoke_example.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/conformance/report.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/core/_response.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/core/cache.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/core/lastcall.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/core/transport/failures.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/core/transport/views.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/integrations/anthropic.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/integrations/llamaindex.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/llm/catalog.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/py.typed +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/registry/governance.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/__init__.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/reject.responses-not-served.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/reject.responses-not-served.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/reject.unserved-base-path.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/request.success.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/responses.chat-completions.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/responses.chat-completions.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/api_describe.openai-sdk.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/models.notfound.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/policy_list.openai-sdk.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.client-id-missing.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.client-id-missing.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.model-not-found.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.model-not-routable.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.model-not-routable.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.pii-detected.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.pii-detected.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.token-rate-limit.body.empty +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.token-rate-limit.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.stream.sample.sse +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.success.policy-applied.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/request_rate_limit/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/request_rate_limit/reject.request-rate-limit.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/request_rate_limit/reject.request-rate-limit.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/request.success.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.code.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.code.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.finance.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.finance.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.offtopic.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.offtopic.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/openai_public/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/openai_public/chat-completions.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/openai_public/chat-completions.stream.sse +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.agent-killed.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.agent-killed.headers.txt +0 -0
- /donkey_kit-0.1.2/src/donkey_kit/simulator/_fixtures/rejections/reject.regex-prompt-guard.headers.txt → /donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.ciba-denied.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-moderation.body.empty +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-moderation.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-bedrock.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-bedrock.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.injection-protection.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.injection-protection.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.regex-prompt-guard.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.upstream-5xx.body.empty +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.upstream-5xx.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/src/donkey_kit/simulator/server.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/benchmark/test_span_overhead.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/conformance/conftest.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/conformance/test_budget_pacing_e2e.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/conformance/test_simulator_boot.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/a2d/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/a2d/environments.sample.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/a2d/mcp_server_spec.account_management.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/a2d/mcp_servers.list.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/reject.client-id-missing.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/reject.client-id-missing.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/reject.openai-shape.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/reject.openai-shape.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/request.success.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/api_describe.product-catalog-mcp.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/api_list.sandbox.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.client-id-missing.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.client-id-missing.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.openai-shape.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.openai-shape.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.unknown-model.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.unknown-model.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/request.stream.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/request.success.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/request.unknown-model.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/responses.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/responses.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/jwt.claims.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/mw-policies.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/probe.exhaustion-run.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.jwt-invalid.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.jwt-invalid.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.jwt-missing.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.jwt-missing.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.wallet-exhausted.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.wallet-exhausted.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/request.success.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/responses.exhaustion-run.first.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/responses.exhaustion-run.last.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/wallet.definition.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/request.stream-tool-call.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/request.stream.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/request.stream.request-compression.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream-tool-call.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream-tool-call.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream.request-compression.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream.request-compression.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/policy_list.product-catalog-mcp.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/reject.request-rate-limit.repeat.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/responses.after-reset.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/responses.window-exhausted.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.reject.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.reject.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.reject.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.reject.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.stream.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.reject.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.reject.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.reject.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.reject.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.reject.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.reject.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.reject.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.reject.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.reject.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.reject.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.reject.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.reject.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.stream.body.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.stream.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.success.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.success.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/request.success.http +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.bypass.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.hit.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.hit.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.miss.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.miss.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.no-store-proof.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.no-store.body.json +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.no-store.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.principal-id.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.threshold-override.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.ttl-override.headers.txt +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/sandbox/README.md +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/sandbox/conftest.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/sandbox/proxies.toml.example +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/sandbox/test_proxy_contracts.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/typecheck/classify_response_contract.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/typecheck/headline_api_contract.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_anthropic_client_stacks.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_anthropic_httpx2_bridge.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_base_install_deps.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_budget_pacing.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_budget_requests.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_capture_fixture.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_check_commit_identities.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_check_doc_links.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_check_new_dependencies.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_cli_help.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_cli_init.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_cli_test.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_compare_benchmark_trend.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_config_env_vars.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_config_header_names.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_conformance_base_only.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_connection_kwargs_rendering.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_contract_extra_skip_guard.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_docs_config_table.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_endpoint_overrides.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_framework_redirects.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_gateway.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_hermetic_suite.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_langgraph_correlation.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_llamaindex_model_defaults.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_llm_bearer_mode.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_llm_catalog.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_llm_client_jwt.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_public_docstrings.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_refusal_groups.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_refusal_tracebacks.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_route_upstream_contract.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_scrub_fixtures.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_shared_client_views.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_simulator_base_only.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_strands_terminal_refusal.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_transport_event_loops.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_transport_injection.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_transport_origin_guard.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_typed_refusals_example.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_verify_frameworks.py +0 -0
- {donkey_kit-0.1.2 → donkey_kit-0.2.0}/tests/unit/test_workflow_bounds.py +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
.import_linter_cache/
|
|
14
|
+
.coverage
|
|
15
|
+
# parallel data files (`[tool.coverage.run] parallel`), until `coverage combine`
|
|
16
|
+
.coverage.*
|
|
17
|
+
htmlcov/
|
|
18
|
+
.env/
|
|
19
|
+
env/
|
|
20
|
+
.env.local
|
|
21
|
+
.env.development.local
|
|
22
|
+
.env.test.local
|
|
23
|
+
.env.production.local
|
|
24
|
+
|
|
25
|
+
# Node / TS
|
|
26
|
+
node_modules/
|
|
27
|
+
*.tsbuildinfo
|
|
28
|
+
|
|
29
|
+
# OS
|
|
30
|
+
.DS_Store
|
|
31
|
+
|
|
32
|
+
# Editors
|
|
33
|
+
.vscode/
|
|
34
|
+
# Local sandbox write paths (machine-specific absolute paths; do not commit)
|
|
35
|
+
.cursor/sandbox.json
|
|
36
|
+
|
|
37
|
+
# Claude Code worktrees (isolated agent workspaces)
|
|
38
|
+
.claude/worktrees/
|
|
39
|
+
|
|
40
|
+
# AI agent config & skills — live in the private donkey-development-kit-ai-config
|
|
41
|
+
# repo and are symlinked in locally; never track them here (keeps internal IP out
|
|
42
|
+
# of this public repo). Clone donkey-development-kit-ai-config as a sibling dir.
|
|
43
|
+
/AGENTS.md
|
|
44
|
+
/CLAUDE.md
|
|
45
|
+
/.claude/skills
|
|
46
|
+
/.claude/settings.json
|
|
47
|
+
/.claude/workflows
|
|
48
|
+
/.claude/commands
|
|
49
|
+
|
|
50
|
+
# Local tooling config that commonly carries credentials (#819). MCP client
|
|
51
|
+
# configs and local agent settings hold tokens inline; a shared MCP config uses
|
|
52
|
+
# ${ENV_VAR} interpolation and is committed under another name (see CONTRIBUTING).
|
|
53
|
+
.mcp.json
|
|
54
|
+
.claude/settings.local.json
|
|
55
|
+
|
|
56
|
+
# Local run output (captures, reports, transcripts) — may hold live responses
|
|
57
|
+
artifacts/
|
|
58
|
+
|
|
59
|
+
# Playwright MCP scratch output (local agent tooling)
|
|
60
|
+
.playwright-mcp/
|
|
61
|
+
|
|
62
|
+
# Local donkey config (secrets / dev creds — never commit)
|
|
63
|
+
.donkey-kit.local.toml
|
|
64
|
+
donkey.lock.local
|
|
65
|
+
|
|
66
|
+
# Sandbox suite manifest — real proxy base URLs / cred env-var wiring (#400).
|
|
67
|
+
# The committed proxies.toml.example is the template; the filled file stays local.
|
|
68
|
+
python/tests/sandbox/proxies.toml
|
|
69
|
+
|
|
70
|
+
# Env
|
|
71
|
+
.env
|
|
72
|
+
.envrc
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: donkey-kit
|
|
3
|
+
Version: 0.2.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://docs.donkey-kit.dev
|
|
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: Donkey Development Kit maintainers
|
|
11
|
+
Maintainer: Donkey Development Kit maintainers
|
|
12
|
+
License-Expression: Apache-2.0
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Keywords: agent,anypoint,donkey-kit,gateway,llm,mcp,mulesoft
|
|
15
|
+
Classifier: Development Status :: 3 - Alpha
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Python: >=3.10
|
|
27
|
+
Requires-Dist: httpx>=0.27
|
|
28
|
+
Requires-Dist: tomli>=2.0; python_version < '3.11'
|
|
29
|
+
Requires-Dist: typing-extensions>=4.10; python_version < '3.12'
|
|
30
|
+
Provides-Extra: a2a
|
|
31
|
+
Requires-Dist: a2a-sdk[http-server]>=1.2.0; extra == 'a2a'
|
|
32
|
+
Requires-Dist: uvicorn>=0.30; extra == 'a2a'
|
|
33
|
+
Provides-Extra: adk
|
|
34
|
+
Requires-Dist: google-adk>=2.4; extra == 'adk'
|
|
35
|
+
Requires-Dist: litellm[mcp]>=1.84; extra == 'adk'
|
|
36
|
+
Provides-Extra: agent-framework
|
|
37
|
+
Requires-Dist: agent-framework>=1.13; extra == 'agent-framework'
|
|
38
|
+
Provides-Extra: all
|
|
39
|
+
Requires-Dist: a2a-sdk[http-server]>=1.2.0; extra == 'all'
|
|
40
|
+
Requires-Dist: langchain-core>=0.3.45; extra == 'all'
|
|
41
|
+
Requires-Dist: langchain-openai>=0.3.9; extra == 'all'
|
|
42
|
+
Requires-Dist: langgraph>=0.4; extra == 'all'
|
|
43
|
+
Requires-Dist: mcp>=1.24; extra == 'all'
|
|
44
|
+
Requires-Dist: openai>=1.66; extra == 'all'
|
|
45
|
+
Requires-Dist: opentelemetry-api>=1.24; extra == 'all'
|
|
46
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.24; extra == 'all'
|
|
47
|
+
Requires-Dist: opentelemetry-sdk>=1.24; extra == 'all'
|
|
48
|
+
Requires-Dist: rich>=13.8.0; extra == 'all'
|
|
49
|
+
Requires-Dist: starlette>=0.37; extra == 'all'
|
|
50
|
+
Requires-Dist: typer>=0.26.0; extra == 'all'
|
|
51
|
+
Requires-Dist: uvicorn>=0.30; extra == 'all'
|
|
52
|
+
Provides-Extra: anthropic
|
|
53
|
+
Requires-Dist: anthropic>=0.116; extra == 'anthropic'
|
|
54
|
+
Provides-Extra: cli
|
|
55
|
+
Requires-Dist: rich>=13.8.0; extra == 'cli'
|
|
56
|
+
Requires-Dist: typer>=0.26.0; extra == 'cli'
|
|
57
|
+
Provides-Extra: crewai
|
|
58
|
+
Requires-Dist: crewai>=1.15.3; extra == 'crewai'
|
|
59
|
+
Provides-Extra: langgraph
|
|
60
|
+
Requires-Dist: langchain-core>=0.3.45; extra == 'langgraph'
|
|
61
|
+
Requires-Dist: langchain-openai>=0.3.9; extra == 'langgraph'
|
|
62
|
+
Requires-Dist: langgraph>=0.4; extra == 'langgraph'
|
|
63
|
+
Provides-Extra: llamaindex
|
|
64
|
+
Requires-Dist: llama-index-llms-openai-like>=0.8; extra == 'llamaindex'
|
|
65
|
+
Provides-Extra: llm
|
|
66
|
+
Requires-Dist: openai>=1.66; extra == 'llm'
|
|
67
|
+
Provides-Extra: local
|
|
68
|
+
Requires-Dist: starlette>=0.37; extra == 'local'
|
|
69
|
+
Requires-Dist: uvicorn>=0.30; extra == 'local'
|
|
70
|
+
Provides-Extra: mcp
|
|
71
|
+
Requires-Dist: mcp>=1.24; extra == 'mcp'
|
|
72
|
+
Provides-Extra: openai-agents
|
|
73
|
+
Requires-Dist: openai-agents>=0.20; extra == 'openai-agents'
|
|
74
|
+
Requires-Dist: openai>=2.45; extra == 'openai-agents'
|
|
75
|
+
Provides-Extra: otel
|
|
76
|
+
Requires-Dist: opentelemetry-api>=1.24; extra == 'otel'
|
|
77
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.24; extra == 'otel'
|
|
78
|
+
Requires-Dist: opentelemetry-sdk>=1.24; extra == 'otel'
|
|
79
|
+
Provides-Extra: strands
|
|
80
|
+
Requires-Dist: strands-agents[openai]>=1.57.1; extra == 'strands'
|
|
81
|
+
Provides-Extra: test
|
|
82
|
+
Requires-Dist: pytest-asyncio>=0.23.1; extra == 'test'
|
|
83
|
+
Requires-Dist: pytest>=8.0; extra == 'test'
|
|
84
|
+
Description-Content-Type: text/markdown
|
|
85
|
+
|
|
86
|
+
<p align="center">
|
|
87
|
+
<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" />
|
|
88
|
+
</p>
|
|
89
|
+
|
|
90
|
+
<p align="center">
|
|
91
|
+
<a href="https://pypi.org/project/donkey-kit/"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Fdonkey-kit%2Fjson&query=%24.info.version&prefix=v&label=PyPI&logo=pypi&logoColor=white&color=blue&cacheSeconds=300" alt="donkey-kit on PyPI" /></a>
|
|
92
|
+
<a href="https://pypi.org/project/donkey-kit/"><img src="https://img.shields.io/pypi/pyversions/donkey-kit?logo=python&logoColor=white" alt="Supported Python versions" /></a>
|
|
93
|
+
<a href="https://github.com/Donkey-Development-Kit/donkey-development-kit/actions/workflows/ci.yml?query=branch%3Adevelop"><img src="https://img.shields.io/github/actions/workflow/status/Donkey-Development-Kit/donkey-development-kit/ci.yml?branch=develop&label=CI&logo=githubactions&logoColor=white" alt="CI status" /></a>
|
|
94
|
+
<a href="https://pepy.tech/projects/donkey-kit"><img src="https://img.shields.io/pepy/dt/donkey-kit?label=downloads" alt="Total downloads" /></a>
|
|
95
|
+
<a href="https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/donkey-kit?color=green" alt="License: Apache-2.0" /></a>
|
|
96
|
+
<a href="https://docs.donkey-kit.dev"><img src="https://img.shields.io/badge/docs-docs.donkey--kit.dev-0A7BBB?logo=readthedocs&logoColor=white" alt="Documentation" /></a>
|
|
97
|
+
</p>
|
|
98
|
+
|
|
99
|
+
<p align="center">
|
|
100
|
+
<a href="https://docs.donkey-kit.dev/frameworks/langgraph"><img src="https://img.shields.io/badge/LangGraph-1C3C3C?logo=langgraph&logoColor=white" alt="LangGraph" /></a>
|
|
101
|
+
<a href="https://docs.donkey-kit.dev/frameworks/adk"><img src="https://img.shields.io/badge/Google_ADK-4285F4?logo=google&logoColor=white" alt="Google ADK" /></a>
|
|
102
|
+
<a href="https://docs.donkey-kit.dev/frameworks/openai"><img src="https://img.shields.io/badge/OpenAI_Agents_SDK-412991" alt="OpenAI Agents SDK" /></a>
|
|
103
|
+
<a href="https://docs.donkey-kit.dev/frameworks/agent-framework"><img src="https://img.shields.io/badge/Microsoft_Agent_Framework-5E5E5E" alt="Microsoft Agent Framework" /></a>
|
|
104
|
+
<a href="https://docs.donkey-kit.dev/frameworks/anthropic"><img src="https://img.shields.io/badge/Anthropic-191919?logo=anthropic&logoColor=white" alt="Anthropic" /></a>
|
|
105
|
+
<a href="https://docs.donkey-kit.dev/frameworks/crewai"><img src="https://img.shields.io/badge/CrewAI-FF5A50?logo=crewai&logoColor=white" alt="CrewAI" /></a>
|
|
106
|
+
<a href="https://docs.donkey-kit.dev/frameworks/llamaindex"><img src="https://img.shields.io/badge/LlamaIndex-8A2BE2" alt="LlamaIndex" /></a>
|
|
107
|
+
<a href="https://docs.donkey-kit.dev/frameworks/strands"><img src="https://img.shields.io/badge/Strands_Agents-FF9900" alt="Strands Agents" /></a>
|
|
108
|
+
<a href="https://docs.donkey-kit.dev/telemetry"><img src="https://img.shields.io/badge/OpenTelemetry-425CC7?logo=opentelemetry&logoColor=white" alt="OpenTelemetry" /></a>
|
|
109
|
+
</p>
|
|
110
|
+
|
|
111
|
+
# Donkey Development Kit
|
|
112
|
+
|
|
113
|
+
An SDK for consuming **Agent Fabric** capabilities — governed model and tool
|
|
114
|
+
access — from your own agent framework, in your own IDE, without adopting Mule.
|
|
115
|
+
|
|
116
|
+
> **Project status — alpha.** This is an early release
|
|
117
|
+
> (`Development Status :: 3 - Alpha`). The **LLM data plane is live-verified**;
|
|
118
|
+
> most other surfaces are verification-gated (see
|
|
119
|
+
> [What's verified](#whats-verified-verification-discipline) below). Install it
|
|
120
|
+
> from PyPI with `pip install donkey-kit` — see [Install](#install).
|
|
121
|
+
> **Unofficial:** an independent project,
|
|
122
|
+
> **not** affiliated with or endorsed by Salesforce or MuleSoft.
|
|
123
|
+
|
|
124
|
+
> ### Support & trademark statement (please read)
|
|
125
|
+
>
|
|
126
|
+
> **"Agent Fabric" is a MuleSoft (Salesforce) product name, not a generic
|
|
127
|
+
> term.** `MuleSoft`, `Anypoint`, `Omni Gateway`, and `Agent Fabric` are
|
|
128
|
+
> Salesforce trademarks.
|
|
129
|
+
>
|
|
130
|
+
> **Maintainer & support.** This is an **independent, community-maintained**
|
|
131
|
+
> project, published under the org-scoped `Donkey-Development-Kit` name — it is **not**
|
|
132
|
+
> affiliated with, endorsed by, or supported by Salesforce or MuleSoft. It is
|
|
133
|
+
> provided **as-is, without warranty of any kind**; the maintainers triage issues
|
|
134
|
+
> and pull requests on a **best-effort basis, with no SLA**. Because it ships
|
|
135
|
+
> under a distinct, org-scoped name, only the descriptive form ("an SDK for
|
|
136
|
+
> MuleSoft Agent Fabric") appears in prose — the package does not represent itself
|
|
137
|
+
> as a first-party, official-status SDK.
|
|
138
|
+
>
|
|
139
|
+
> Licensed under [Apache-2.0](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/LICENSE). See
|
|
140
|
+
> the [unsupported boundary](https://docs.donkey-kit.dev/reference/unsupported-boundary) for exactly
|
|
141
|
+
> which platform APIs this SDK calls and their support classification.
|
|
142
|
+
>
|
|
143
|
+
> **Security.** Report vulnerabilities privately, never in a public issue. See
|
|
144
|
+
> [`SECURITY.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/SECURITY.md) for supported versions and how to report.
|
|
145
|
+
>
|
|
146
|
+
> **Python versions.** CPython 3.10–3.14, each tested in CI; a version is
|
|
147
|
+
> dropped in the first minor release after its end of life. See
|
|
148
|
+
> [`docs/python-support.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/python-support.md).
|
|
149
|
+
|
|
150
|
+
<!-- toc -->
|
|
151
|
+
**Contents**
|
|
152
|
+
|
|
153
|
+
- [Documentation](#documentation)
|
|
154
|
+
- [Install](#install)
|
|
155
|
+
- [Framework support](#framework-support)
|
|
156
|
+
- [What's verified (verification discipline)](#whats-verified-verification-discipline)
|
|
157
|
+
- [Conformance exemptions](#conformance-exemptions)
|
|
158
|
+
<!-- tocstop -->
|
|
159
|
+
|
|
160
|
+
## Documentation
|
|
161
|
+
|
|
162
|
+
Two audiences, two doc sets:
|
|
163
|
+
|
|
164
|
+
- **Use the SDK** → the documentation site:
|
|
165
|
+
**<https://docs.donkey-kit.dev/>**. Install and
|
|
166
|
+
configure, per-framework model access, the governed error taxonomy, and what
|
|
167
|
+
to trust today — everything you need to point your agent at a governed proxy.
|
|
168
|
+
- **See it run** → runnable demos live in the companion repo
|
|
169
|
+
**[donkey-development-kit-demos](https://github.com/Donkey-Development-Kit/donkey-development-kit-demos)**:
|
|
170
|
+
the framework-free client, native framework objects, the governed error
|
|
171
|
+
taxonomy, and the screen-recording scripts.
|
|
172
|
+
- **Understand or contribute to the repo:**
|
|
173
|
+
- [`ARCHITECTURE.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/ARCHITECTURE.md) — how the SDK is built: the layered
|
|
174
|
+
stack, the framework-free core, verification discipline, the error taxonomy,
|
|
175
|
+
and framework tiering.
|
|
176
|
+
- [`CONTRIBUTING.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/CONTRIBUTING.md) — how to work in the repo: the
|
|
177
|
+
branch/PR/release workflow, the testing strategy, coding conventions, and
|
|
178
|
+
the docs-sync rule.
|
|
179
|
+
- [`docs/verified-apis.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/verified-apis.md) — the verification ledger:
|
|
180
|
+
the single source of truth for what is confirmed against a real sandbox and
|
|
181
|
+
what is still blocked.
|
|
182
|
+
|
|
183
|
+
## Install
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
pip install "donkey-kit[llm,langgraph]" # base + raw client + one framework
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
To work on the SDK itself, install from source with the contributor tooling
|
|
190
|
+
(the `dev` dependency group needs pip 25.1 or later):
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
git clone https://github.com/Donkey-Development-Kit/donkey-development-kit.git
|
|
194
|
+
cd donkey-development-kit/python
|
|
195
|
+
pip install -e ".[llm,cli]" --group dev
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Extras are one per framework (`langgraph`, `adk`, `strands`, `agent_framework`,
|
|
199
|
+
`openai-agents`, `anthropic`, `crewai`, `llamaindex`) plus `otel`, `cli`, `local`,
|
|
200
|
+
`a2a` (the official `a2a-sdk`, for `donkey.serve()`), `mcp` (the MCP client a
|
|
201
|
+
governed `ToolSet` binds with), `test` (the [conformance pytest plugin](https://docs.donkey-kit.dev/testing) —
|
|
202
|
+
`pytest --donkey-conformance --donkey-agent=my_app.agent:build`), and `all`. `all` is
|
|
203
|
+
everything a user runs that installs together — `llm`, `langgraph`, `otel`, `cli`,
|
|
204
|
+
`local`, `a2a`, `mcp` — with no test runner, so add `test` for the conformance plugin:
|
|
205
|
+
`donkey-kit[all,test]`. It leaves out the seven other framework extras, because
|
|
206
|
+
whether they install together depends on their upstream releases. The generated
|
|
207
|
+
[co-installability table](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/co-installability.md) shows which combinations resolve, re-checked
|
|
208
|
+
nightly. Add the one framework you use: `donkey-kit[all,crewai]`.
|
|
209
|
+
Configuration and first-agent walkthroughs live on the
|
|
210
|
+
[documentation site](https://docs.donkey-kit.dev/). Features that call the Anypoint
|
|
211
|
+
control plane (registry, tool discovery, `donkey publish`) need a connected app
|
|
212
|
+
with the scopes listed per operation in [`docs/scopes.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/scopes.md).
|
|
213
|
+
|
|
214
|
+
## Framework support
|
|
215
|
+
|
|
216
|
+
The roster is deliberately **two deep, six shallow** (`BG §1.8`): LangGraph and
|
|
217
|
+
the OpenAI Agents SDK are held to the full conformance bar, the rest supported
|
|
218
|
+
through the three-line `connection_kwargs()` escape hatch. Every framework below returns its framework's
|
|
219
|
+
**own native object** — never a wrapper.
|
|
220
|
+
|
|
221
|
+
<!-- BEGIN GENERATED: framework-status (edit docs/verified-apis.md §8, then run python/scripts/generate_docs.py) -->
|
|
222
|
+
Each factory's status is its constructor row in the [`docs/verified-apis.md` §8](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/verified-apis.md); its
|
|
223
|
+
depth is the adapter roster's `conformance_tested`.
|
|
224
|
+
|
|
225
|
+
| Framework | Factory | Depth | Ledger status |
|
|
226
|
+
|---|---|---|---|
|
|
227
|
+
| LangGraph | `donkey.langgraph.chat_model()` | **Conformance-tested** | **Live-verified** |
|
|
228
|
+
| Google ADK | `donkey.adk.model()` | `connection_kwargs()` | **Live-verified** |
|
|
229
|
+
| Google ADK | `donkey.adk.gemini()` | `connection_kwargs()` | **Live-verified** |
|
|
230
|
+
| Strands | `donkey.strands.model()` | `connection_kwargs()` | **Live-verified** |
|
|
231
|
+
| MS Agent Framework | `donkey.agent_framework.chat_client()` | `connection_kwargs()` | **Live-verified** |
|
|
232
|
+
| OpenAI Agents SDK | `donkey.openai_agents.model()` | **Conformance-tested** | **Live-verified** |
|
|
233
|
+
| Anthropic SDK | `donkey.anthropic.client()` | `connection_kwargs()` | **Live-verified** |
|
|
234
|
+
| CrewAI | `donkey.crewai.llm()` | `connection_kwargs()` | **Live-verified** |
|
|
235
|
+
| LlamaIndex | `donkey.llamaindex.llm()` | `connection_kwargs()` | **Live-verified** |
|
|
236
|
+
<!-- END GENERATED: framework-status -->
|
|
237
|
+
|
|
238
|
+
**Signature-confirmed** means the factory builds its native object against the
|
|
239
|
+
installed framework (`scripts/verify_frameworks.py`), with no live round-trip.
|
|
240
|
+
**Live-verified** means a real round-trip through a governed proxy. The raw
|
|
241
|
+
client (`donkey.llm.client()`) is conformance-tested too.
|
|
242
|
+
|
|
243
|
+
`connection_kwargs()` works for all eight; a deep adapter is promoted from demand
|
|
244
|
+
evidence, one at a time — never guessed up front. The OpenAI Agents SDK was the
|
|
245
|
+
second, on Phase 1 demand (#223); the next is #244. See the
|
|
246
|
+
[framework pages](https://docs.donkey-kit.dev/frameworks/)
|
|
247
|
+
for each. Which framework versions are supported and tested is on the site's
|
|
248
|
+
[version compatibility](https://docs.donkey-kit.dev/frameworks/compatibility)
|
|
249
|
+
page and in [`docs/framework-support.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/framework-support.md).
|
|
250
|
+
|
|
251
|
+
## What's verified (verification discipline)
|
|
252
|
+
|
|
253
|
+
The **LLM data plane** — governed model access through the Omni Gateway proxy —
|
|
254
|
+
is live-verified against a real Anypoint sandbox. The framework-free client and
|
|
255
|
+
the framework adapters are wired to that contract; the raw client is
|
|
256
|
+
conformance-tested against the simulator. For the adapters (each factory is
|
|
257
|
+
listed under [Framework support](#framework-support)):
|
|
258
|
+
|
|
259
|
+
<!-- BEGIN GENERATED: framework-status-summary (edit docs/verified-apis.md §8, then run python/scripts/generate_docs.py) -->
|
|
260
|
+
LangGraph and OpenAI Agents SDK are conformance-tested against the simulator in CI.
|
|
261
|
+
Each adapter factory's constructor row in §8 of the ledger reads **live-verified**.
|
|
262
|
+
<!-- END GENERATED: framework-status-summary -->
|
|
263
|
+
|
|
264
|
+
Everything still gated raises `NotImplementedError("blocked on verification: …")`
|
|
265
|
+
rather than guessing at an unverified endpoint, header, or class name. That
|
|
266
|
+
currently covers a `Publication`'s descriptor derivation (`preview()`, `export()`),
|
|
267
|
+
the lockfile (`donkey.tools.lock()`, `discover(locked=True)`), the governed-state
|
|
268
|
+
search filters (`search(governed=, environment=, domain=)`) and the hidden
|
|
269
|
+
`donkey status` command. Exchange search and the publication of scanned MCP
|
|
270
|
+
servers and agents (`donkey publish`, `donkey verify`) are verified against a
|
|
271
|
+
live sandbox. MCP tool discovery and every framework's `ToolSet` binding are
|
|
272
|
+
verified through the governed gateway: behind Client ID Enforcement all eight
|
|
273
|
+
frameworks called a bound tool (#1312); behind JWT Validation seven did and
|
|
274
|
+
ADK's tools were listed but not called (#221). Their types (`ToolSet`,
|
|
275
|
+
`GovernanceCriteria`, `UngovernedMcpServer`, …) are exported from `donkey_kit`. The SDK
|
|
276
|
+
does not ship a provisioning control plane (ADR 0008 in `docs/adr/`). The adapters build their framework's native object directly; they
|
|
277
|
+
refuse only when the installed framework version lacks the class or field the
|
|
278
|
+
adapter depends on.
|
|
279
|
+
|
|
280
|
+
The discipline behind this is documented in
|
|
281
|
+
[`ARCHITECTURE.md` → Verification discipline](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/ARCHITECTURE.md#verification-discipline);
|
|
282
|
+
the row-by-row worklist is [`docs/verified-apis.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/verified-apis.md).
|
|
283
|
+
|
|
284
|
+
## Conformance exemptions
|
|
285
|
+
|
|
286
|
+
The [conformance plugin](https://docs.donkey-kit.dev/testing)
|
|
287
|
+
holds the SDK to the same bar it asks of your agent. Where a framework
|
|
288
|
+
legitimately cannot satisfy a scenario, the reason is asserted in code
|
|
289
|
+
(`KNOWN_LIMITATIONS`) and published here as credibility — never a silent skip
|
|
290
|
+
(the conformance kit):
|
|
291
|
+
|
|
292
|
+
| Framework | Scenario | Why it's exempt |
|
|
293
|
+
| --- | --- | --- |
|
|
294
|
+
| CrewAI | correlation ID propagated | CrewAI's native OpenAI provider builds both its sync `OpenAI` and its `AsyncOpenAI` from one `client_params` dict, and with an interceptor set it replaces `http_client` with its own `httpx` client, so the SDK's async client cannot be injected and the correlation ID ends up per-client, not per-run. ADK (`model()` and `gemini()`), LlamaIndex and Microsoft Agent Framework send through the SDK's shared client and record no exemption (#691, #740). |
|
|
295
|
+
| CrewAI | gateway identity observed | For the same reason, 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`. |
|
|
296
|
+
| CrewAI | JWT refreshed per send | CrewAI's native OpenAI provider owns the transport and builds its own clients, so the rotating JWT the SDK adds per send never reaches its requests. `donkey.crewai.llm()` and `connection_kwargs()` raise `ConfigError` in `jwt` mode; use client-id auth with CrewAI. ADK's `model()` and `gemini()`, LlamaIndex and Microsoft Agent Framework send through the SDK's client and carry the rotating JWT on async calls ([`jwt` mode](https://docs.donkey-kit.dev/reference/configuration#jwt--model-wallet-auth-mode)). |
|
|
297
|
+
| CrewAI | budget refusal not retried | CrewAI wraps every LLM call in its own rate-limit retry (3 attempts) and treats any `429` as a rate limit, so a `TokenBudgetExceeded` or `RequestRateLimitExceeded` refusal is sent 3 times. CrewAI has no setting to turn it off; the OpenAI client underneath has `max_retries=0`. Every other adapter sends a budget refusal once (#734). |
|
|
298
|
+
| CrewAI | typed refusal bridged | CrewAI's native OpenAI provider owns the transport, so its errors come from a client the SDK never saw, and `donkey.run()` and `typed_refusals()` cannot tell a gateway refusal from any other failure there and pass those errors through (#724). ADK's `gemini()` and `model()` send through the SDK's transport and are bridged (conformance-tested in #955 and #969). LiteLLM, under `model()`, re-raises a refusal as its own exception, and the adapter's `llm_client` marks that exception with the refusal the SDK's transport received. |
|
|
299
|
+
| CrewAI | refusal handler cannot un-refuse | CrewAI's native OpenAI provider owns the transport, so its refusals never reach the SDK's `_on_refusal` hook and handlers registered with [`donkey.on(...)`](https://docs.donkey-kit.dev/refusal-handlers) do not run for its calls. Every other adapter runs them, and none can turn a refusal into a success (#208, #209). |
|
|
300
|
+
| CrewAI | custom policy typed | For the same reason, a refusal shape registered with [`classify.register()`](https://docs.donkey-kit.dev/custom-policies) is neither typed by `donkey.run()` nor seen by `donkey.on(...)` handlers for CrewAI's calls. Every other adapter raises the registered type, runs its handlers and records its slug as `donkey.policy.type` (#210). |
|
|
301
|
+
| CrewAI | agent kill stops cleanly | CrewAI's native OpenAI provider owns the transport, so a kill-switch refusal never reaches the SDK's transport: it does not stop [`donkey.budget.pace()`](https://docs.donkey-kit.dev/budget) loops or flush spans, and CrewAI's own rate-limit retry decides whether the call is re-sent. Every other adapter sends the kill once, stops every pace loop on the same `Donkey`, and flushes spans before the `AgentKilled` reaches your code (#220). |
|
|
302
|
+
| CrewAI | approval round trip | CrewAI's native OpenAI provider owns the transport, so when an approved [`@donkey.tool(approval="required")`](https://docs.donkey-kit.dev/hitl) resumes, its model call carries neither the approval's correlation ID nor a typed refusal. The pause and the approver's span event work as for any Python code. The round trip runs on the raw client and LangGraph (#211, #212), the OpenAI Agents SDK, which pauses on its own `needs_approval` and resumes from the `RunState` (#213), and Strands' and ADK's own pauses (#1234, #1235): each resumes the call under the decision's correlation ID, and the gateway still judges it, so a refusal comes back typed. |
|
|
303
|
+
| Google ADK | multi-server name collision | `ToolSet.adk()` binds each MCP server as one `McpToolset`, which takes an allow-list of tool names but cannot rename a single tool. When two servers expose a tool under the same name, the bind raises `ConfigError` before it connects; `filter(deny=["<server>__<tool>"])` keeps one of each. The LangGraph, LlamaIndex and Anthropic bindings bind each tool on its own and expose both as `<server>__<tool>` (#991). |
|
|
304
|
+
| Strands Agents | multi-server name collision | For the same reason: `ToolSet.strands()` binds each server as one `MCPClient`, filtered by `tool_filters`. |
|
|
305
|
+
| OpenAI Agents SDK | multi-server name collision | For the same reason: `ToolSet.openai_agents()` binds each server as one `MCPServerStreamableHttp`, filtered by a static `tool_filter`. Its model calls record no exemption. |
|
|
306
|
+
| Microsoft Agent Framework | multi-server name collision | For the same reason: `ToolSet.agent_framework()` binds each server as one `MCPStreamableHTTPTool`, filtered by `allowed_tools`. |
|
|
307
|
+
| CrewAI | multi-server name collision | For the same reason: `ToolSet.crewai()` binds each server as one `crewai_tools.MCPServerAdapter`, filtered by its `tool_names`. |
|
|
308
|
+
| Google ADK | MCP tool denial typed | `ToolSet.adk()` leaves each tool call to `McpToolset`, which turns the gateway's MCP access denial (JSON-RPC `-32008` "Unable to access") into an error result whose text has lost the code, so the SDK cannot raise [`ToolNotInProfile`](https://docs.donkey-kit.dev/tool-access/binding#tools-outside-your-access-profile) from it. |
|
|
309
|
+
| Strands Agents | MCP tool denial typed | For the same reason: `MCPClient` returns the denial as a `status: error` tool result without the code. |
|
|
310
|
+
| OpenAI Agents SDK | MCP tool denial typed | `ToolSet.openai_agents()` leaves each tool call to `MCPServerStreamableHttp`, which raises the `mcp` package's `McpError` with the code intact; `tool_access_denial(exc)` turns it into `ToolNotInProfile`. |
|
|
311
|
+
| Microsoft Agent Framework | MCP tool denial typed | For the same reason: `MCPStreamableHTTPTool` raises its `ToolExecutionException` with the `McpError` as its cause; `tool_access_denial(exc)` converts it. |
|
|
312
|
+
| CrewAI | MCP tool denial typed | For the same reason: `MCPServerAdapter`'s tools raise the `McpError`; `tool_access_denial(exc)` converts it. |
|
|
313
|
+
|
|
314
|
+
Each transport exemption matches what the adapter reports in `donkey.<framework>.capabilities()` (a frozen `AdapterCapabilities` per factory): an adapter is exempt from the transport scenarios exactly when it reports `transport="framework"`, from gateway identity exactly when `observes_last_call` is false, and from the typed-refusal bridge exactly when `typed_refusals` is false. A unit test keeps the two in step (#726). The refusal-handler, custom-policy and kill scenarios run against every factory that reports `transport="shared"`, and a factory added without a run fails the suite (#1441). The multi-server and MCP tool denial rows are about binding MCP tools with [`ToolSet`](https://docs.donkey-kit.dev/tool-access/binding), not the model transport, so `capabilities()` does not report them.
|
|
315
|
+
|
|
316
|
+
<!-- Generated from the repository README.md by python/scripts/generate_docs.py; edit that file, then run the script. -->
|
|
@@ -0,0 +1,231 @@
|
|
|
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
|
+
<p align="center">
|
|
6
|
+
<a href="https://pypi.org/project/donkey-kit/"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Fdonkey-kit%2Fjson&query=%24.info.version&prefix=v&label=PyPI&logo=pypi&logoColor=white&color=blue&cacheSeconds=300" alt="donkey-kit on PyPI" /></a>
|
|
7
|
+
<a href="https://pypi.org/project/donkey-kit/"><img src="https://img.shields.io/pypi/pyversions/donkey-kit?logo=python&logoColor=white" alt="Supported Python versions" /></a>
|
|
8
|
+
<a href="https://github.com/Donkey-Development-Kit/donkey-development-kit/actions/workflows/ci.yml?query=branch%3Adevelop"><img src="https://img.shields.io/github/actions/workflow/status/Donkey-Development-Kit/donkey-development-kit/ci.yml?branch=develop&label=CI&logo=githubactions&logoColor=white" alt="CI status" /></a>
|
|
9
|
+
<a href="https://pepy.tech/projects/donkey-kit"><img src="https://img.shields.io/pepy/dt/donkey-kit?label=downloads" alt="Total downloads" /></a>
|
|
10
|
+
<a href="https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/donkey-kit?color=green" alt="License: Apache-2.0" /></a>
|
|
11
|
+
<a href="https://docs.donkey-kit.dev"><img src="https://img.shields.io/badge/docs-docs.donkey--kit.dev-0A7BBB?logo=readthedocs&logoColor=white" alt="Documentation" /></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="https://docs.donkey-kit.dev/frameworks/langgraph"><img src="https://img.shields.io/badge/LangGraph-1C3C3C?logo=langgraph&logoColor=white" alt="LangGraph" /></a>
|
|
16
|
+
<a href="https://docs.donkey-kit.dev/frameworks/adk"><img src="https://img.shields.io/badge/Google_ADK-4285F4?logo=google&logoColor=white" alt="Google ADK" /></a>
|
|
17
|
+
<a href="https://docs.donkey-kit.dev/frameworks/openai"><img src="https://img.shields.io/badge/OpenAI_Agents_SDK-412991" alt="OpenAI Agents SDK" /></a>
|
|
18
|
+
<a href="https://docs.donkey-kit.dev/frameworks/agent-framework"><img src="https://img.shields.io/badge/Microsoft_Agent_Framework-5E5E5E" alt="Microsoft Agent Framework" /></a>
|
|
19
|
+
<a href="https://docs.donkey-kit.dev/frameworks/anthropic"><img src="https://img.shields.io/badge/Anthropic-191919?logo=anthropic&logoColor=white" alt="Anthropic" /></a>
|
|
20
|
+
<a href="https://docs.donkey-kit.dev/frameworks/crewai"><img src="https://img.shields.io/badge/CrewAI-FF5A50?logo=crewai&logoColor=white" alt="CrewAI" /></a>
|
|
21
|
+
<a href="https://docs.donkey-kit.dev/frameworks/llamaindex"><img src="https://img.shields.io/badge/LlamaIndex-8A2BE2" alt="LlamaIndex" /></a>
|
|
22
|
+
<a href="https://docs.donkey-kit.dev/frameworks/strands"><img src="https://img.shields.io/badge/Strands_Agents-FF9900" alt="Strands Agents" /></a>
|
|
23
|
+
<a href="https://docs.donkey-kit.dev/telemetry"><img src="https://img.shields.io/badge/OpenTelemetry-425CC7?logo=opentelemetry&logoColor=white" alt="OpenTelemetry" /></a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
# Donkey Development Kit
|
|
27
|
+
|
|
28
|
+
An SDK for consuming **Agent Fabric** capabilities — governed model and tool
|
|
29
|
+
access — from your own agent framework, in your own IDE, without adopting Mule.
|
|
30
|
+
|
|
31
|
+
> **Project status — alpha.** This is an early release
|
|
32
|
+
> (`Development Status :: 3 - Alpha`). The **LLM data plane is live-verified**;
|
|
33
|
+
> most other surfaces are verification-gated (see
|
|
34
|
+
> [What's verified](#whats-verified-verification-discipline) below). Install it
|
|
35
|
+
> from PyPI with `pip install donkey-kit` — see [Install](#install).
|
|
36
|
+
> **Unofficial:** an independent project,
|
|
37
|
+
> **not** affiliated with or endorsed by Salesforce or MuleSoft.
|
|
38
|
+
|
|
39
|
+
> ### Support & trademark statement (please read)
|
|
40
|
+
>
|
|
41
|
+
> **"Agent Fabric" is a MuleSoft (Salesforce) product name, not a generic
|
|
42
|
+
> term.** `MuleSoft`, `Anypoint`, `Omni Gateway`, and `Agent Fabric` are
|
|
43
|
+
> Salesforce trademarks.
|
|
44
|
+
>
|
|
45
|
+
> **Maintainer & support.** This is an **independent, community-maintained**
|
|
46
|
+
> project, published under the org-scoped `Donkey-Development-Kit` name — it is **not**
|
|
47
|
+
> affiliated with, endorsed by, or supported by Salesforce or MuleSoft. It is
|
|
48
|
+
> provided **as-is, without warranty of any kind**; the maintainers triage issues
|
|
49
|
+
> and pull requests on a **best-effort basis, with no SLA**. Because it ships
|
|
50
|
+
> under a distinct, org-scoped name, only the descriptive form ("an SDK for
|
|
51
|
+
> MuleSoft Agent Fabric") appears in prose — the package does not represent itself
|
|
52
|
+
> as a first-party, official-status SDK.
|
|
53
|
+
>
|
|
54
|
+
> Licensed under [Apache-2.0](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/LICENSE). See
|
|
55
|
+
> the [unsupported boundary](https://docs.donkey-kit.dev/reference/unsupported-boundary) for exactly
|
|
56
|
+
> which platform APIs this SDK calls and their support classification.
|
|
57
|
+
>
|
|
58
|
+
> **Security.** Report vulnerabilities privately, never in a public issue. See
|
|
59
|
+
> [`SECURITY.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/SECURITY.md) for supported versions and how to report.
|
|
60
|
+
>
|
|
61
|
+
> **Python versions.** CPython 3.10–3.14, each tested in CI; a version is
|
|
62
|
+
> dropped in the first minor release after its end of life. See
|
|
63
|
+
> [`docs/python-support.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/python-support.md).
|
|
64
|
+
|
|
65
|
+
<!-- toc -->
|
|
66
|
+
**Contents**
|
|
67
|
+
|
|
68
|
+
- [Documentation](#documentation)
|
|
69
|
+
- [Install](#install)
|
|
70
|
+
- [Framework support](#framework-support)
|
|
71
|
+
- [What's verified (verification discipline)](#whats-verified-verification-discipline)
|
|
72
|
+
- [Conformance exemptions](#conformance-exemptions)
|
|
73
|
+
<!-- tocstop -->
|
|
74
|
+
|
|
75
|
+
## Documentation
|
|
76
|
+
|
|
77
|
+
Two audiences, two doc sets:
|
|
78
|
+
|
|
79
|
+
- **Use the SDK** → the documentation site:
|
|
80
|
+
**<https://docs.donkey-kit.dev/>**. Install and
|
|
81
|
+
configure, per-framework model access, the governed error taxonomy, and what
|
|
82
|
+
to trust today — everything you need to point your agent at a governed proxy.
|
|
83
|
+
- **See it run** → runnable demos live in the companion repo
|
|
84
|
+
**[donkey-development-kit-demos](https://github.com/Donkey-Development-Kit/donkey-development-kit-demos)**:
|
|
85
|
+
the framework-free client, native framework objects, the governed error
|
|
86
|
+
taxonomy, and the screen-recording scripts.
|
|
87
|
+
- **Understand or contribute to the repo:**
|
|
88
|
+
- [`ARCHITECTURE.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/ARCHITECTURE.md) — how the SDK is built: the layered
|
|
89
|
+
stack, the framework-free core, verification discipline, the error taxonomy,
|
|
90
|
+
and framework tiering.
|
|
91
|
+
- [`CONTRIBUTING.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/CONTRIBUTING.md) — how to work in the repo: the
|
|
92
|
+
branch/PR/release workflow, the testing strategy, coding conventions, and
|
|
93
|
+
the docs-sync rule.
|
|
94
|
+
- [`docs/verified-apis.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/verified-apis.md) — the verification ledger:
|
|
95
|
+
the single source of truth for what is confirmed against a real sandbox and
|
|
96
|
+
what is still blocked.
|
|
97
|
+
|
|
98
|
+
## Install
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
pip install "donkey-kit[llm,langgraph]" # base + raw client + one framework
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
To work on the SDK itself, install from source with the contributor tooling
|
|
105
|
+
(the `dev` dependency group needs pip 25.1 or later):
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
git clone https://github.com/Donkey-Development-Kit/donkey-development-kit.git
|
|
109
|
+
cd donkey-development-kit/python
|
|
110
|
+
pip install -e ".[llm,cli]" --group dev
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Extras are one per framework (`langgraph`, `adk`, `strands`, `agent_framework`,
|
|
114
|
+
`openai-agents`, `anthropic`, `crewai`, `llamaindex`) plus `otel`, `cli`, `local`,
|
|
115
|
+
`a2a` (the official `a2a-sdk`, for `donkey.serve()`), `mcp` (the MCP client a
|
|
116
|
+
governed `ToolSet` binds with), `test` (the [conformance pytest plugin](https://docs.donkey-kit.dev/testing) —
|
|
117
|
+
`pytest --donkey-conformance --donkey-agent=my_app.agent:build`), and `all`. `all` is
|
|
118
|
+
everything a user runs that installs together — `llm`, `langgraph`, `otel`, `cli`,
|
|
119
|
+
`local`, `a2a`, `mcp` — with no test runner, so add `test` for the conformance plugin:
|
|
120
|
+
`donkey-kit[all,test]`. It leaves out the seven other framework extras, because
|
|
121
|
+
whether they install together depends on their upstream releases. The generated
|
|
122
|
+
[co-installability table](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/co-installability.md) shows which combinations resolve, re-checked
|
|
123
|
+
nightly. Add the one framework you use: `donkey-kit[all,crewai]`.
|
|
124
|
+
Configuration and first-agent walkthroughs live on the
|
|
125
|
+
[documentation site](https://docs.donkey-kit.dev/). Features that call the Anypoint
|
|
126
|
+
control plane (registry, tool discovery, `donkey publish`) need a connected app
|
|
127
|
+
with the scopes listed per operation in [`docs/scopes.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/scopes.md).
|
|
128
|
+
|
|
129
|
+
## Framework support
|
|
130
|
+
|
|
131
|
+
The roster is deliberately **two deep, six shallow** (`BG §1.8`): LangGraph and
|
|
132
|
+
the OpenAI Agents SDK are held to the full conformance bar, the rest supported
|
|
133
|
+
through the three-line `connection_kwargs()` escape hatch. Every framework below returns its framework's
|
|
134
|
+
**own native object** — never a wrapper.
|
|
135
|
+
|
|
136
|
+
<!-- BEGIN GENERATED: framework-status (edit docs/verified-apis.md §8, then run python/scripts/generate_docs.py) -->
|
|
137
|
+
Each factory's status is its constructor row in the [`docs/verified-apis.md` §8](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/verified-apis.md); its
|
|
138
|
+
depth is the adapter roster's `conformance_tested`.
|
|
139
|
+
|
|
140
|
+
| Framework | Factory | Depth | Ledger status |
|
|
141
|
+
|---|---|---|---|
|
|
142
|
+
| LangGraph | `donkey.langgraph.chat_model()` | **Conformance-tested** | **Live-verified** |
|
|
143
|
+
| Google ADK | `donkey.adk.model()` | `connection_kwargs()` | **Live-verified** |
|
|
144
|
+
| Google ADK | `donkey.adk.gemini()` | `connection_kwargs()` | **Live-verified** |
|
|
145
|
+
| Strands | `donkey.strands.model()` | `connection_kwargs()` | **Live-verified** |
|
|
146
|
+
| MS Agent Framework | `donkey.agent_framework.chat_client()` | `connection_kwargs()` | **Live-verified** |
|
|
147
|
+
| OpenAI Agents SDK | `donkey.openai_agents.model()` | **Conformance-tested** | **Live-verified** |
|
|
148
|
+
| Anthropic SDK | `donkey.anthropic.client()` | `connection_kwargs()` | **Live-verified** |
|
|
149
|
+
| CrewAI | `donkey.crewai.llm()` | `connection_kwargs()` | **Live-verified** |
|
|
150
|
+
| LlamaIndex | `donkey.llamaindex.llm()` | `connection_kwargs()` | **Live-verified** |
|
|
151
|
+
<!-- END GENERATED: framework-status -->
|
|
152
|
+
|
|
153
|
+
**Signature-confirmed** means the factory builds its native object against the
|
|
154
|
+
installed framework (`scripts/verify_frameworks.py`), with no live round-trip.
|
|
155
|
+
**Live-verified** means a real round-trip through a governed proxy. The raw
|
|
156
|
+
client (`donkey.llm.client()`) is conformance-tested too.
|
|
157
|
+
|
|
158
|
+
`connection_kwargs()` works for all eight; a deep adapter is promoted from demand
|
|
159
|
+
evidence, one at a time — never guessed up front. The OpenAI Agents SDK was the
|
|
160
|
+
second, on Phase 1 demand (#223); the next is #244. See the
|
|
161
|
+
[framework pages](https://docs.donkey-kit.dev/frameworks/)
|
|
162
|
+
for each. Which framework versions are supported and tested is on the site's
|
|
163
|
+
[version compatibility](https://docs.donkey-kit.dev/frameworks/compatibility)
|
|
164
|
+
page and in [`docs/framework-support.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/framework-support.md).
|
|
165
|
+
|
|
166
|
+
## What's verified (verification discipline)
|
|
167
|
+
|
|
168
|
+
The **LLM data plane** — governed model access through the Omni Gateway proxy —
|
|
169
|
+
is live-verified against a real Anypoint sandbox. The framework-free client and
|
|
170
|
+
the framework adapters are wired to that contract; the raw client is
|
|
171
|
+
conformance-tested against the simulator. For the adapters (each factory is
|
|
172
|
+
listed under [Framework support](#framework-support)):
|
|
173
|
+
|
|
174
|
+
<!-- BEGIN GENERATED: framework-status-summary (edit docs/verified-apis.md §8, then run python/scripts/generate_docs.py) -->
|
|
175
|
+
LangGraph and OpenAI Agents SDK are conformance-tested against the simulator in CI.
|
|
176
|
+
Each adapter factory's constructor row in §8 of the ledger reads **live-verified**.
|
|
177
|
+
<!-- END GENERATED: framework-status-summary -->
|
|
178
|
+
|
|
179
|
+
Everything still gated raises `NotImplementedError("blocked on verification: …")`
|
|
180
|
+
rather than guessing at an unverified endpoint, header, or class name. That
|
|
181
|
+
currently covers a `Publication`'s descriptor derivation (`preview()`, `export()`),
|
|
182
|
+
the lockfile (`donkey.tools.lock()`, `discover(locked=True)`), the governed-state
|
|
183
|
+
search filters (`search(governed=, environment=, domain=)`) and the hidden
|
|
184
|
+
`donkey status` command. Exchange search and the publication of scanned MCP
|
|
185
|
+
servers and agents (`donkey publish`, `donkey verify`) are verified against a
|
|
186
|
+
live sandbox. MCP tool discovery and every framework's `ToolSet` binding are
|
|
187
|
+
verified through the governed gateway: behind Client ID Enforcement all eight
|
|
188
|
+
frameworks called a bound tool (#1312); behind JWT Validation seven did and
|
|
189
|
+
ADK's tools were listed but not called (#221). Their types (`ToolSet`,
|
|
190
|
+
`GovernanceCriteria`, `UngovernedMcpServer`, …) are exported from `donkey_kit`. The SDK
|
|
191
|
+
does not ship a provisioning control plane (ADR 0008 in `docs/adr/`). The adapters build their framework's native object directly; they
|
|
192
|
+
refuse only when the installed framework version lacks the class or field the
|
|
193
|
+
adapter depends on.
|
|
194
|
+
|
|
195
|
+
The discipline behind this is documented in
|
|
196
|
+
[`ARCHITECTURE.md` → Verification discipline](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/ARCHITECTURE.md#verification-discipline);
|
|
197
|
+
the row-by-row worklist is [`docs/verified-apis.md`](https://github.com/Donkey-Development-Kit/donkey-development-kit/blob/main/docs/verified-apis.md).
|
|
198
|
+
|
|
199
|
+
## Conformance exemptions
|
|
200
|
+
|
|
201
|
+
The [conformance plugin](https://docs.donkey-kit.dev/testing)
|
|
202
|
+
holds the SDK to the same bar it asks of your agent. Where a framework
|
|
203
|
+
legitimately cannot satisfy a scenario, the reason is asserted in code
|
|
204
|
+
(`KNOWN_LIMITATIONS`) and published here as credibility — never a silent skip
|
|
205
|
+
(the conformance kit):
|
|
206
|
+
|
|
207
|
+
| Framework | Scenario | Why it's exempt |
|
|
208
|
+
| --- | --- | --- |
|
|
209
|
+
| CrewAI | correlation ID propagated | CrewAI's native OpenAI provider builds both its sync `OpenAI` and its `AsyncOpenAI` from one `client_params` dict, and with an interceptor set it replaces `http_client` with its own `httpx` client, so the SDK's async client cannot be injected and the correlation ID ends up per-client, not per-run. ADK (`model()` and `gemini()`), LlamaIndex and Microsoft Agent Framework send through the SDK's shared client and record no exemption (#691, #740). |
|
|
210
|
+
| CrewAI | gateway identity observed | For the same reason, 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`. |
|
|
211
|
+
| CrewAI | JWT refreshed per send | CrewAI's native OpenAI provider owns the transport and builds its own clients, so the rotating JWT the SDK adds per send never reaches its requests. `donkey.crewai.llm()` and `connection_kwargs()` raise `ConfigError` in `jwt` mode; use client-id auth with CrewAI. ADK's `model()` and `gemini()`, LlamaIndex and Microsoft Agent Framework send through the SDK's client and carry the rotating JWT on async calls ([`jwt` mode](https://docs.donkey-kit.dev/reference/configuration#jwt--model-wallet-auth-mode)). |
|
|
212
|
+
| CrewAI | budget refusal not retried | CrewAI wraps every LLM call in its own rate-limit retry (3 attempts) and treats any `429` as a rate limit, so a `TokenBudgetExceeded` or `RequestRateLimitExceeded` refusal is sent 3 times. CrewAI has no setting to turn it off; the OpenAI client underneath has `max_retries=0`. Every other adapter sends a budget refusal once (#734). |
|
|
213
|
+
| CrewAI | typed refusal bridged | CrewAI's native OpenAI provider owns the transport, so its errors come from a client the SDK never saw, and `donkey.run()` and `typed_refusals()` cannot tell a gateway refusal from any other failure there and pass those errors through (#724). ADK's `gemini()` and `model()` send through the SDK's transport and are bridged (conformance-tested in #955 and #969). LiteLLM, under `model()`, re-raises a refusal as its own exception, and the adapter's `llm_client` marks that exception with the refusal the SDK's transport received. |
|
|
214
|
+
| CrewAI | refusal handler cannot un-refuse | CrewAI's native OpenAI provider owns the transport, so its refusals never reach the SDK's `_on_refusal` hook and handlers registered with [`donkey.on(...)`](https://docs.donkey-kit.dev/refusal-handlers) do not run for its calls. Every other adapter runs them, and none can turn a refusal into a success (#208, #209). |
|
|
215
|
+
| CrewAI | custom policy typed | For the same reason, a refusal shape registered with [`classify.register()`](https://docs.donkey-kit.dev/custom-policies) is neither typed by `donkey.run()` nor seen by `donkey.on(...)` handlers for CrewAI's calls. Every other adapter raises the registered type, runs its handlers and records its slug as `donkey.policy.type` (#210). |
|
|
216
|
+
| CrewAI | agent kill stops cleanly | CrewAI's native OpenAI provider owns the transport, so a kill-switch refusal never reaches the SDK's transport: it does not stop [`donkey.budget.pace()`](https://docs.donkey-kit.dev/budget) loops or flush spans, and CrewAI's own rate-limit retry decides whether the call is re-sent. Every other adapter sends the kill once, stops every pace loop on the same `Donkey`, and flushes spans before the `AgentKilled` reaches your code (#220). |
|
|
217
|
+
| CrewAI | approval round trip | CrewAI's native OpenAI provider owns the transport, so when an approved [`@donkey.tool(approval="required")`](https://docs.donkey-kit.dev/hitl) resumes, its model call carries neither the approval's correlation ID nor a typed refusal. The pause and the approver's span event work as for any Python code. The round trip runs on the raw client and LangGraph (#211, #212), the OpenAI Agents SDK, which pauses on its own `needs_approval` and resumes from the `RunState` (#213), and Strands' and ADK's own pauses (#1234, #1235): each resumes the call under the decision's correlation ID, and the gateway still judges it, so a refusal comes back typed. |
|
|
218
|
+
| Google ADK | multi-server name collision | `ToolSet.adk()` binds each MCP server as one `McpToolset`, which takes an allow-list of tool names but cannot rename a single tool. When two servers expose a tool under the same name, the bind raises `ConfigError` before it connects; `filter(deny=["<server>__<tool>"])` keeps one of each. The LangGraph, LlamaIndex and Anthropic bindings bind each tool on its own and expose both as `<server>__<tool>` (#991). |
|
|
219
|
+
| Strands Agents | multi-server name collision | For the same reason: `ToolSet.strands()` binds each server as one `MCPClient`, filtered by `tool_filters`. |
|
|
220
|
+
| OpenAI Agents SDK | multi-server name collision | For the same reason: `ToolSet.openai_agents()` binds each server as one `MCPServerStreamableHttp`, filtered by a static `tool_filter`. Its model calls record no exemption. |
|
|
221
|
+
| Microsoft Agent Framework | multi-server name collision | For the same reason: `ToolSet.agent_framework()` binds each server as one `MCPStreamableHTTPTool`, filtered by `allowed_tools`. |
|
|
222
|
+
| CrewAI | multi-server name collision | For the same reason: `ToolSet.crewai()` binds each server as one `crewai_tools.MCPServerAdapter`, filtered by its `tool_names`. |
|
|
223
|
+
| Google ADK | MCP tool denial typed | `ToolSet.adk()` leaves each tool call to `McpToolset`, which turns the gateway's MCP access denial (JSON-RPC `-32008` "Unable to access") into an error result whose text has lost the code, so the SDK cannot raise [`ToolNotInProfile`](https://docs.donkey-kit.dev/tool-access/binding#tools-outside-your-access-profile) from it. |
|
|
224
|
+
| Strands Agents | MCP tool denial typed | For the same reason: `MCPClient` returns the denial as a `status: error` tool result without the code. |
|
|
225
|
+
| OpenAI Agents SDK | MCP tool denial typed | `ToolSet.openai_agents()` leaves each tool call to `MCPServerStreamableHttp`, which raises the `mcp` package's `McpError` with the code intact; `tool_access_denial(exc)` turns it into `ToolNotInProfile`. |
|
|
226
|
+
| Microsoft Agent Framework | MCP tool denial typed | For the same reason: `MCPStreamableHTTPTool` raises its `ToolExecutionException` with the `McpError` as its cause; `tool_access_denial(exc)` converts it. |
|
|
227
|
+
| CrewAI | MCP tool denial typed | For the same reason: `MCPServerAdapter`'s tools raise the `McpError`; `tool_access_denial(exc)` converts it. |
|
|
228
|
+
|
|
229
|
+
Each transport exemption matches what the adapter reports in `donkey.<framework>.capabilities()` (a frozen `AdapterCapabilities` per factory): an adapter is exempt from the transport scenarios exactly when it reports `transport="framework"`, from gateway identity exactly when `observes_last_call` is false, and from the typed-refusal bridge exactly when `typed_refusals` is false. A unit test keeps the two in step (#726). The refusal-handler, custom-policy and kill scenarios run against every factory that reports `transport="shared"`, and a factory added without a run fails the suite (#1441). The multi-server and MCP tool denial rows are about binding MCP tools with [`ToolSet`](https://docs.donkey-kit.dev/tool-access/binding), not the model transport, so `capabilities()` does not report them.
|
|
230
|
+
|
|
231
|
+
<!-- Generated from the repository README.md by python/scripts/generate_docs.py; edit that file, then run the script. -->
|