donkey-kit 0.1.3__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.
Files changed (858) hide show
  1. donkey_kit-0.2.0/.gitignore +72 -0
  2. donkey_kit-0.2.0/PKG-INFO +316 -0
  3. donkey_kit-0.2.0/README.md +231 -0
  4. donkey_kit-0.2.0/dependency_allowlist.toml +206 -0
  5. donkey_kit-0.2.0/examples/adk/README.md +87 -0
  6. donkey_kit-0.2.0/examples/adk/main.py +126 -0
  7. donkey_kit-0.2.0/examples/openai_agents/README.md +124 -0
  8. donkey_kit-0.2.0/examples/openai_agents/collector.py +116 -0
  9. donkey_kit-0.2.0/examples/openai_agents/main.py +276 -0
  10. donkey_kit-0.2.0/pyproject.toml +771 -0
  11. donkey_kit-0.2.0/scripts/capture_descriptor_fixtures.py +277 -0
  12. donkey_kit-0.2.0/scripts/check_docs_sync.py +200 -0
  13. donkey_kit-0.2.0/scripts/check_verification_claims.py +80 -0
  14. donkey_kit-0.2.0/scripts/compile_constraints.py +409 -0
  15. donkey_kit-0.2.0/scripts/generate_docs.py +1659 -0
  16. donkey_kit-0.2.0/scripts/mcp_binding/README.md +123 -0
  17. donkey_kit-0.2.0/scripts/mcp_binding/_harness.py +176 -0
  18. donkey_kit-0.2.0/scripts/mcp_binding/bind_live.py +104 -0
  19. donkey_kit-0.2.0/scripts/mcp_binding/bind_toolset.py +324 -0
  20. donkey_kit-0.2.0/scripts/mcp_binding/probe_adk.py +157 -0
  21. donkey_kit-0.2.0/scripts/mcp_binding/probe_agent_framework.py +101 -0
  22. donkey_kit-0.2.0/scripts/mcp_binding/probe_anthropic.py +131 -0
  23. donkey_kit-0.2.0/scripts/mcp_binding/probe_ciba.py +70 -0
  24. donkey_kit-0.2.0/scripts/mcp_binding/probe_crewai.py +83 -0
  25. donkey_kit-0.2.0/scripts/mcp_binding/probe_denial.py +275 -0
  26. donkey_kit-0.2.0/scripts/mcp_binding/probe_langgraph.py +109 -0
  27. donkey_kit-0.2.0/scripts/mcp_binding/probe_llamaindex.py +100 -0
  28. donkey_kit-0.2.0/scripts/mcp_binding/probe_mcp_sdk.py +83 -0
  29. donkey_kit-0.2.0/scripts/mcp_binding/probe_openai_agents.py +113 -0
  30. donkey_kit-0.2.0/scripts/mcp_binding/probe_strands.py +104 -0
  31. donkey_kit-0.2.0/scripts/mcp_binding/server.py +297 -0
  32. donkey_kit-0.2.0/scripts/verify_frameworks.py +604 -0
  33. donkey_kit-0.2.0/src/donkey_kit/__init__.py +279 -0
  34. donkey_kit-0.2.0/src/donkey_kit/_testing.py +86 -0
  35. donkey_kit-0.2.0/src/donkey_kit/a2a/__init__.py +21 -0
  36. donkey_kit-0.2.0/src/donkey_kit/a2a/_server.py +383 -0
  37. donkey_kit-0.2.0/src/donkey_kit/a2a/types.py +54 -0
  38. donkey_kit-0.2.0/src/donkey_kit/cli/__init__.py +40 -0
  39. donkey_kit-0.2.0/src/donkey_kit/cli/_app.py +99 -0
  40. donkey_kit-0.2.0/src/donkey_kit/cli/_blocked.py +37 -0
  41. donkey_kit-0.2.0/src/donkey_kit/cli/_common.py +46 -0
  42. donkey_kit-0.2.0/src/donkey_kit/cli/dev.py +133 -0
  43. donkey_kit-0.2.0/src/donkey_kit/cli/doctor.py +537 -0
  44. donkey_kit-0.2.0/src/donkey_kit/cli/expose.py +186 -0
  45. donkey_kit-0.2.0/src/donkey_kit/cli/init.py +159 -0
  46. donkey_kit-0.2.0/src/donkey_kit/cli/mock.py +67 -0
  47. donkey_kit-0.2.0/src/donkey_kit/cli/publish.py +184 -0
  48. donkey_kit-0.2.0/src/donkey_kit/cli/scan.py +78 -0
  49. donkey_kit-0.2.0/src/donkey_kit/cli/test.py +49 -0
  50. donkey_kit-0.2.0/src/donkey_kit/cli/verify.py +185 -0
  51. donkey_kit-0.2.0/src/donkey_kit/conformance/__init__.py +88 -0
  52. donkey_kit-0.2.0/src/donkey_kit/conformance/gateway.py +221 -0
  53. donkey_kit-0.2.0/src/donkey_kit/conformance/harness.py +620 -0
  54. donkey_kit-0.2.0/src/donkey_kit/conformance/plugin.py +390 -0
  55. donkey_kit-0.2.0/src/donkey_kit/conformance/suite.py +319 -0
  56. donkey_kit-0.2.0/src/donkey_kit/core/__init__.py +127 -0
  57. donkey_kit-0.2.0/src/donkey_kit/core/_budget_headers.py +109 -0
  58. donkey_kit-0.2.0/src/donkey_kit/core/_policy_spec.py +488 -0
  59. donkey_kit-0.2.0/src/donkey_kit/core/_refusal_body.py +270 -0
  60. donkey_kit-0.2.0/src/donkey_kit/core/_verify.py +236 -0
  61. donkey_kit-0.2.0/src/donkey_kit/core/_window.py +93 -0
  62. donkey_kit-0.2.0/src/donkey_kit/core/_wire.py +126 -0
  63. donkey_kit-0.2.0/src/donkey_kit/core/approval_types.py +187 -0
  64. donkey_kit-0.2.0/src/donkey_kit/core/approvals.py +468 -0
  65. donkey_kit-0.2.0/src/donkey_kit/core/auth.py +324 -0
  66. donkey_kit-0.2.0/src/donkey_kit/core/budget.py +494 -0
  67. donkey_kit-0.2.0/src/donkey_kit/core/classifier.py +207 -0
  68. donkey_kit-0.2.0/src/donkey_kit/core/config.py +1097 -0
  69. donkey_kit-0.2.0/src/donkey_kit/core/correlation.py +431 -0
  70. donkey_kit-0.2.0/src/donkey_kit/core/cost.py +143 -0
  71. donkey_kit-0.2.0/src/donkey_kit/core/endpoints.py +125 -0
  72. donkey_kit-0.2.0/src/donkey_kit/core/errors.py +1030 -0
  73. donkey_kit-0.2.0/src/donkey_kit/core/header_names.py +178 -0
  74. donkey_kit-0.2.0/src/donkey_kit/core/identity.py +301 -0
  75. donkey_kit-0.2.0/src/donkey_kit/core/inbound.py +160 -0
  76. donkey_kit-0.2.0/src/donkey_kit/core/masking.py +108 -0
  77. donkey_kit-0.2.0/src/donkey_kit/core/reactions.py +460 -0
  78. donkey_kit-0.2.0/src/donkey_kit/core/runledger.py +318 -0
  79. donkey_kit-0.2.0/src/donkey_kit/core/runtime.py +259 -0
  80. donkey_kit-0.2.0/src/donkey_kit/core/spanflush.py +82 -0
  81. donkey_kit-0.2.0/src/donkey_kit/core/step_up.py +148 -0
  82. donkey_kit-0.2.0/src/donkey_kit/core/telemetry.py +629 -0
  83. donkey_kit-0.2.0/src/donkey_kit/core/tool_access.py +139 -0
  84. donkey_kit-0.2.0/src/donkey_kit/core/toolspec.py +231 -0
  85. donkey_kit-0.2.0/src/donkey_kit/core/transport/__init__.py +103 -0
  86. donkey_kit-0.2.0/src/donkey_kit/core/transport/async_client.py +396 -0
  87. donkey_kit-0.2.0/src/donkey_kit/core/transport/governed.py +270 -0
  88. donkey_kit-0.2.0/src/donkey_kit/core/transport/headers.py +431 -0
  89. donkey_kit-0.2.0/src/donkey_kit/core/transport/httpx2.py +296 -0
  90. donkey_kit-0.2.0/src/donkey_kit/core/transport/observe.py +169 -0
  91. donkey_kit-0.2.0/src/donkey_kit/core/transport/pipeline.py +273 -0
  92. donkey_kit-0.2.0/src/donkey_kit/core/transport/policy.py +256 -0
  93. donkey_kit-0.2.0/src/donkey_kit/core/transport/streaming.py +265 -0
  94. donkey_kit-0.2.0/src/donkey_kit/core/transport/sync_client.py +290 -0
  95. donkey_kit-0.2.0/src/donkey_kit/donkey.py +1505 -0
  96. donkey_kit-0.2.0/src/donkey_kit/experimental.py +84 -0
  97. donkey_kit-0.2.0/src/donkey_kit/integrations/__init__.py +265 -0
  98. donkey_kit-0.2.0/src/donkey_kit/integrations/adk.py +821 -0
  99. donkey_kit-0.2.0/src/donkey_kit/integrations/agent_framework.py +274 -0
  100. donkey_kit-0.2.0/src/donkey_kit/integrations/crewai.py +215 -0
  101. donkey_kit-0.2.0/src/donkey_kit/integrations/langgraph.py +435 -0
  102. donkey_kit-0.2.0/src/donkey_kit/integrations/openai_agents.py +566 -0
  103. donkey_kit-0.2.0/src/donkey_kit/integrations/strands.py +535 -0
  104. donkey_kit-0.2.0/src/donkey_kit/registry/_scopes.py +45 -0
  105. donkey_kit-0.2.0/src/donkey_kit/registry/criteria.py +81 -0
  106. donkey_kit-0.2.0/src/donkey_kit/registry/exchange.py +752 -0
  107. donkey_kit-0.2.0/src/donkey_kit/registry/exchange_page.py +188 -0
  108. donkey_kit-0.2.0/src/donkey_kit/registry/exchange_publish.py +837 -0
  109. donkey_kit-0.2.0/src/donkey_kit/registry/expose.py +640 -0
  110. donkey_kit-0.2.0/src/donkey_kit/registry/expose_plan.py +330 -0
  111. donkey_kit-0.2.0/src/donkey_kit/registry/introspect.py +323 -0
  112. donkey_kit-0.2.0/src/donkey_kit/registry/models.py +81 -0
  113. donkey_kit-0.2.0/src/donkey_kit/registry/publication.py +379 -0
  114. donkey_kit-0.2.0/src/donkey_kit/registry/publish_plan.py +480 -0
  115. donkey_kit-0.2.0/src/donkey_kit/registry/scan.py +856 -0
  116. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/fixtures.lock +37 -0
  117. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/README.md +193 -0
  118. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.ciba-denied.body.json +1 -0
  119. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.ciba-pending.body.json +1 -0
  120. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.ciba-pending.headers.txt +3 -0
  121. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-crowdstrike-aidr.body.json +1 -0
  122. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-crowdstrike-aidr.headers.txt +5 -0
  123. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-model-armor.body.json +1 -0
  124. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-model-armor.headers.txt +5 -0
  125. donkey_kit-0.2.0/src/donkey_kit/simulator/_fixtures/rejections/reject.regex-prompt-guard.headers.txt +2 -0
  126. donkey_kit-0.2.0/src/donkey_kit/simulator/app.py +339 -0
  127. donkey_kit-0.2.0/src/donkey_kit/simulator/fixtures.py +565 -0
  128. donkey_kit-0.2.0/src/donkey_kit/simulator/ingress.py +246 -0
  129. donkey_kit-0.2.0/src/donkey_kit/simulator/inject.py +246 -0
  130. donkey_kit-0.2.0/src/donkey_kit/simulator/scenarios.py +479 -0
  131. donkey_kit-0.2.0/src/donkey_kit/tools/__init__.py +8 -0
  132. donkey_kit-0.2.0/src/donkey_kit/tools/approval.py +150 -0
  133. donkey_kit-0.2.0/src/donkey_kit/tools/auth.py +157 -0
  134. donkey_kit-0.2.0/src/donkey_kit/tools/discovery.py +404 -0
  135. donkey_kit-0.2.0/src/donkey_kit/tools/filter.py +175 -0
  136. donkey_kit-0.2.0/src/donkey_kit/tools/mcp.py +187 -0
  137. donkey_kit-0.2.0/src/donkey_kit/tools/session.py +1116 -0
  138. donkey_kit-0.2.0/tests/conformance/contract_drivers.py +287 -0
  139. donkey_kit-0.2.0/tests/conformance/contract_gateway.py +210 -0
  140. donkey_kit-0.2.0/tests/conformance/suite.py +420 -0
  141. donkey_kit-0.2.0/tests/conformance/test_agent_killed_stops_cleanly.py +122 -0
  142. donkey_kit-0.2.0/tests/conformance/test_approval_round_trip.py +439 -0
  143. donkey_kit-0.2.0/tests/conformance/test_custom_policy_typed.py +121 -0
  144. donkey_kit-0.2.0/tests/conformance/test_gateway_fixture.py +110 -0
  145. donkey_kit-0.2.0/tests/conformance/test_handlers_cannot_unrefuse.py +145 -0
  146. donkey_kit-0.2.0/tests/conformance/test_openai_agents_conformance.py +64 -0
  147. donkey_kit-0.2.0/tests/conformance/test_readme_exemptions_table.py +156 -0
  148. donkey_kit-0.2.0/tests/conformance/test_tool_binding.py +602 -0
  149. donkey_kit-0.2.0/tests/conformance/test_typed_refusal_bridge.py +326 -0
  150. donkey_kit-0.2.0/tests/conformance/transport_surfaces.py +192 -0
  151. donkey_kit-0.2.0/tests/conftest.py +240 -0
  152. donkey_kit-0.2.0/tests/fixtures/anypoint/README.md +38 -0
  153. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/README.md +55 -0
  154. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/a2a-card.stored.json +38 -0
  155. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/agent-metadata.stored.json +6 -0
  156. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/api.describe.json +109 -0
  157. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/apis.by-asset.json +85 -0
  158. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/graphql.files.json +66 -0
  159. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/traffic.card.contracted.200.json +9 -0
  160. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/traffic.card.no-client-id.401.json +10 -0
  161. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/traffic.card.no-policy.200.json +9 -0
  162. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/traffic.card.uncontracted.401.json +10 -0
  163. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_card/upstream.agent-card.json +63 -0
  164. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/README.md +55 -0
  165. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/api_describe.200.json +109 -0
  166. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/contracts.200.json +4 -0
  167. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/create.201.json +48 -0
  168. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/create.a2a-v1-protocol.400.json +1 -0
  169. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/create.request.json +16 -0
  170. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/deployment-status.applied.json +5 -0
  171. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/deployment-status.applying.json +5 -0
  172. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/deployment.201.json +46 -0
  173. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/deployment.request.json +8 -0
  174. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/outbound-policies.get.405.json +13 -0
  175. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/outbound-policy.201.json +27 -0
  176. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/outbound-policy.request.json +15 -0
  177. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/policies.200.json +32 -0
  178. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/policy-inbound.400.json +4 -0
  179. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/policy-inbound.request.json +12 -0
  180. donkey_kit-0.2.0/tests/fixtures/anypoint/a2a_instance/upstreams.200.json +17 -0
  181. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/README.md +114 -0
  182. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.a2a-v1-card.stored.json +41 -0
  183. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.agent-metadata.stored.json +11 -0
  184. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.graphql.latest.json +1 -0
  185. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.pom.xml +21 -0
  186. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/agent.publish.201.json +1 -0
  187. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.absent.json +1 -0
  188. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.files.json +34 -0
  189. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.latest.json +1 -0
  190. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.renamed.json +1 -0
  191. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/graphql.version.json +1 -0
  192. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/instance.201.json +1 -0
  193. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/mcp-metadata.stored.json +34 -0
  194. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/page.201.json +5 -0
  195. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/page.409.json +1 -0
  196. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/pom.xml +19 -0
  197. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/portal-draft.200.json +19 -0
  198. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/publish.201.json +1 -0
  199. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_publish/publish.409.json +1 -0
  200. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/README.md +40 -0
  201. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.api-types.json +5 -0
  202. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.description-term.json +120 -0
  203. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.page1.json +176 -0
  204. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.page2.json +162 -0
  205. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.tags-derived.json +318 -0
  206. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.tags-two.json +5 -0
  207. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.tags.json +44 -0
  208. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.term.json +20 -0
  209. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.types-mcp.json +20 -0
  210. donkey_kit-0.2.0/tests/fixtures/anypoint/exchange_search/search.unknown-field.400.json +20 -0
  211. donkey_kit-0.2.0/tests/fixtures/anypoint/gateway/README.md +23 -0
  212. donkey_kit-0.2.0/tests/fixtures/anypoint/gateway/gateway.200.json +48 -0
  213. donkey_kit-0.2.0/tests/fixtures/anypoint/gateway/gateways.by-name.json +15 -0
  214. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/README.md +25 -0
  215. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/tools-call.abac-denied.body.json +1 -0
  216. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/tools-call.abac-denied.headers.txt +4 -0
  217. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/tools-call.global-access-denied.body.json +1 -0
  218. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_access/tools-call.global-access-denied.headers.txt +3 -0
  219. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/README.md +60 -0
  220. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/api.describe.governed.json +106 -0
  221. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/apis.by-asset.governed.json +82 -0
  222. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/apis.by-asset.none.json +4 -0
  223. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/apis.by-asset.undeployed.json +73 -0
  224. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/apis.by-asset.ungoverned.json +82 -0
  225. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/asset.version.json +11 -0
  226. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/asset.version.tagged.json +13 -0
  227. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/governance.reports.conformant.json +19 -0
  228. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/governance.reports.none.json +4 -0
  229. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/governance.reports.root-org.json +4 -0
  230. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/policies.governed.json +54 -0
  231. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_explain/policies.none.json +3 -0
  232. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/README.md +54 -0
  233. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/api_describe.200.json +106 -0
  234. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/apis-list.by-label.json +51 -0
  235. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/contracts.200.json +4 -0
  236. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/create.201.json +44 -0
  237. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/create.409.json +4 -0
  238. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/create.request.json +16 -0
  239. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/deployment-status.applied.json +5 -0
  240. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/deployment-status.applying.json +5 -0
  241. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/deployment.201.json +46 -0
  242. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/deployment.request.json +8 -0
  243. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policies.200.json +40 -0
  244. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policy-client-id-enforcement.201.json +23 -0
  245. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policy-client-id-enforcement.request.json +11 -0
  246. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policy-mcp-support.201.json +21 -0
  247. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_instance/policy-mcp-support.request.json +9 -0
  248. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/README.md +43 -0
  249. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/api.describe.json +106 -0
  250. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/apis.by-asset.json +82 -0
  251. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/apis.by-asset.none.json +4 -0
  252. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/apis.by-asset.undeployed-and-deployed.json +131 -0
  253. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/environments.json +23 -0
  254. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/gateway.json +48 -0
  255. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/traffic.no-slash.404.json +8 -0
  256. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/traffic.slash.401.json +10 -0
  257. donkey_kit-0.2.0/tests/fixtures/anypoint/mcp_resolve/traffic.unknown-path.404.json +8 -0
  258. donkey_kit-0.2.0/tests/fixtures/anypoint/missing_scope/README.md +17 -0
  259. donkey_kit-0.2.0/tests/fixtures/anypoint/missing_scope/responses.json +56 -0
  260. donkey_kit-0.2.0/tests/fixtures/descriptor/README.md +25 -0
  261. donkey_kit-0.2.0/tests/fixtures/descriptor/adk.json +57 -0
  262. donkey_kit-0.2.0/tests/fixtures/descriptor/agent_framework.json +57 -0
  263. donkey_kit-0.2.0/tests/fixtures/descriptor/anthropic.json +61 -0
  264. donkey_kit-0.2.0/tests/fixtures/descriptor/crewai.json +57 -0
  265. donkey_kit-0.2.0/tests/fixtures/descriptor/langchain.json +59 -0
  266. donkey_kit-0.2.0/tests/fixtures/descriptor/llamaindex.json +55 -0
  267. donkey_kit-0.2.0/tests/fixtures/descriptor/mcp-1.json +57 -0
  268. donkey_kit-0.2.0/tests/fixtures/descriptor/mcp-2.json +57 -0
  269. donkey_kit-0.2.0/tests/fixtures/descriptor/openai_agents.json +65 -0
  270. donkey_kit-0.2.0/tests/fixtures/descriptor/strands.json +55 -0
  271. donkey_kit-0.2.0/tests/fixtures/fixtures.lock +267 -0
  272. donkey_kit-0.2.0/tests/fixtures/mcp_binding/adk.json +34 -0
  273. donkey_kit-0.2.0/tests/fixtures/mcp_binding/agent_framework.json +34 -0
  274. donkey_kit-0.2.0/tests/fixtures/mcp_binding/anthropic.json +39 -0
  275. donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-adk.json +28 -0
  276. donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-af.json +52 -0
  277. donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-lg.json +230 -0
  278. donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-li.json +157 -0
  279. donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-mcp1.json +85 -0
  280. donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-mcp2.json +59 -0
  281. donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-oa.json +60 -0
  282. donkey_kit-0.2.0/tests/fixtures/mcp_binding/ciba-st.json +28 -0
  283. donkey_kit-0.2.0/tests/fixtures/mcp_binding/crewai.json +43 -0
  284. donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-adk.json +40 -0
  285. donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-agent_framework.json +98 -0
  286. donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-mcp1.json +79 -0
  287. donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-mcp2.json +103 -0
  288. donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-openai_agents.json +56 -0
  289. donkey_kit-0.2.0/tests/fixtures/mcp_binding/denial-strands.json +40 -0
  290. donkey_kit-0.2.0/tests/fixtures/mcp_binding/langgraph.json +41 -0
  291. donkey_kit-0.2.0/tests/fixtures/mcp_binding/llamaindex.json +34 -0
  292. donkey_kit-0.2.0/tests/fixtures/mcp_binding/mcp_sdk.json +33 -0
  293. donkey_kit-0.2.0/tests/fixtures/mcp_binding/openai_agents.json +36 -0
  294. donkey_kit-0.2.0/tests/fixtures/mcp_binding/strands.json +33 -0
  295. donkey_kit-0.2.0/tests/typecheck/headline_api_v0_2_contract.py +333 -0
  296. donkey_kit-0.2.0/tests/unit/_fake_anypoint.py +253 -0
  297. donkey_kit-0.2.0/tests/unit/_fake_exchange.py +240 -0
  298. donkey_kit-0.2.0/tests/unit/_json_shapes.py +49 -0
  299. donkey_kit-0.2.0/tests/unit/test_a2a_governed_inbound.py +369 -0
  300. donkey_kit-0.2.0/tests/unit/test_a2a_serve.py +290 -0
  301. donkey_kit-0.2.0/tests/unit/test_action.py +449 -0
  302. donkey_kit-0.2.0/tests/unit/test_adapter_async_last_call.py +538 -0
  303. donkey_kit-0.2.0/tests/unit/test_adapter_ergonomics.py +824 -0
  304. donkey_kit-0.2.0/tests/unit/test_adapter_jwt_mode.py +176 -0
  305. donkey_kit-0.2.0/tests/unit/test_adapter_roster.py +241 -0
  306. donkey_kit-0.2.0/tests/unit/test_adk_approval_bookkeeping.py +537 -0
  307. donkey_kit-0.2.0/tests/unit/test_adk_approvals.py +228 -0
  308. donkey_kit-0.2.0/tests/unit/test_agent_framework_policy_middleware.py +319 -0
  309. donkey_kit-0.2.0/tests/unit/test_approval_requester.py +449 -0
  310. donkey_kit-0.2.0/tests/unit/test_approvals.py +581 -0
  311. donkey_kit-0.2.0/tests/unit/test_architecture.py +499 -0
  312. donkey_kit-0.2.0/tests/unit/test_as_user_endpoint_trust.py +245 -0
  313. donkey_kit-0.2.0/tests/unit/test_auth.py +261 -0
  314. donkey_kit-0.2.0/tests/unit/test_budget.py +426 -0
  315. donkey_kit-0.2.0/tests/unit/test_budget_upstream.py +314 -0
  316. donkey_kit-0.2.0/tests/unit/test_check_verification_claims.py +92 -0
  317. donkey_kit-0.2.0/tests/unit/test_ci_workflows.py +214 -0
  318. donkey_kit-0.2.0/tests/unit/test_classifier.py +669 -0
  319. donkey_kit-0.2.0/tests/unit/test_cli_blocked_commands.py +61 -0
  320. donkey_kit-0.2.0/tests/unit/test_cli_dev.py +145 -0
  321. donkey_kit-0.2.0/tests/unit/test_cli_entrypoint.py +172 -0
  322. donkey_kit-0.2.0/tests/unit/test_cli_expose.py +227 -0
  323. donkey_kit-0.2.0/tests/unit/test_cli_publish.py +293 -0
  324. donkey_kit-0.2.0/tests/unit/test_cli_scan.py +113 -0
  325. donkey_kit-0.2.0/tests/unit/test_cli_verify.py +350 -0
  326. donkey_kit-0.2.0/tests/unit/test_concurrency_contract.py +352 -0
  327. donkey_kit-0.2.0/tests/unit/test_conformance.py +695 -0
  328. donkey_kit-0.2.0/tests/unit/test_conformance_plugin.py +339 -0
  329. donkey_kit-0.2.0/tests/unit/test_connected_app_scopes.py +135 -0
  330. donkey_kit-0.2.0/tests/unit/test_credential_planes.py +351 -0
  331. donkey_kit-0.2.0/tests/unit/test_custom_policies_page.py +83 -0
  332. donkey_kit-0.2.0/tests/unit/test_decorators.py +318 -0
  333. donkey_kit-0.2.0/tests/unit/test_descriptor_derivation.py +274 -0
  334. donkey_kit-0.2.0/tests/unit/test_discover.py +544 -0
  335. donkey_kit-0.2.0/tests/unit/test_discover_default.py +117 -0
  336. donkey_kit-0.2.0/tests/unit/test_discover_registry_cache.py +130 -0
  337. donkey_kit-0.2.0/tests/unit/test_endpoints.py +248 -0
  338. donkey_kit-0.2.0/tests/unit/test_error_taxonomy.py +116 -0
  339. donkey_kit-0.2.0/tests/unit/test_errors.py +886 -0
  340. donkey_kit-0.2.0/tests/unit/test_exchange_page.py +163 -0
  341. donkey_kit-0.2.0/tests/unit/test_exchange_publish.py +930 -0
  342. donkey_kit-0.2.0/tests/unit/test_exchange_search.py +221 -0
  343. donkey_kit-0.2.0/tests/unit/test_explain.py +341 -0
  344. donkey_kit-0.2.0/tests/unit/test_expose.py +578 -0
  345. donkey_kit-0.2.0/tests/unit/test_expose_plan.py +286 -0
  346. donkey_kit-0.2.0/tests/unit/test_fixture_integrity.py +215 -0
  347. donkey_kit-0.2.0/tests/unit/test_gateway_credential_endpoint_trust.py +343 -0
  348. donkey_kit-0.2.0/tests/unit/test_gemini_inbound_contract.py +152 -0
  349. donkey_kit-0.2.0/tests/unit/test_generated_docs.py +384 -0
  350. donkey_kit-0.2.0/tests/unit/test_governed_state_shapes.py +94 -0
  351. donkey_kit-0.2.0/tests/unit/test_house_style_config.py +237 -0
  352. donkey_kit-0.2.0/tests/unit/test_identity.py +420 -0
  353. donkey_kit-0.2.0/tests/unit/test_inbound_correlation.py +242 -0
  354. donkey_kit-0.2.0/tests/unit/test_integration_checklist.py +233 -0
  355. donkey_kit-0.2.0/tests/unit/test_kill_switch.py +334 -0
  356. donkey_kit-0.2.0/tests/unit/test_langgraph_approvals.py +638 -0
  357. donkey_kit-0.2.0/tests/unit/test_lastcall.py +925 -0
  358. donkey_kit-0.2.0/tests/unit/test_logging.py +239 -0
  359. donkey_kit-0.2.0/tests/unit/test_mcp_client.py +270 -0
  360. donkey_kit-0.2.0/tests/unit/test_mcp_redirects.py +308 -0
  361. donkey_kit-0.2.0/tests/unit/test_missing_framework_error.py +343 -0
  362. donkey_kit-0.2.0/tests/unit/test_noxfile.py +300 -0
  363. donkey_kit-0.2.0/tests/unit/test_openai_agents_approval_bookkeeping.py +391 -0
  364. donkey_kit-0.2.0/tests/unit/test_openai_agents_approvals.py +773 -0
  365. donkey_kit-0.2.0/tests/unit/test_openai_agents_correlation.py +96 -0
  366. donkey_kit-0.2.0/tests/unit/test_openai_gemini_stream_contract.py +155 -0
  367. donkey_kit-0.2.0/tests/unit/test_otlp_export.py +499 -0
  368. donkey_kit-0.2.0/tests/unit/test_per_request_business_group.py +280 -0
  369. donkey_kit-0.2.0/tests/unit/test_pre_commit_lock_sync.py +134 -0
  370. donkey_kit-0.2.0/tests/unit/test_proxy_key_header.py +271 -0
  371. donkey_kit-0.2.0/tests/unit/test_public_api_snapshot.py +284 -0
  372. donkey_kit-0.2.0/tests/unit/test_public_api_surface.py +306 -0
  373. donkey_kit-0.2.0/tests/unit/test_publication_verify.py +285 -0
  374. donkey_kit-0.2.0/tests/unit/test_publish_plan.py +258 -0
  375. donkey_kit-0.2.0/tests/unit/test_refusal_handlers.py +615 -0
  376. donkey_kit-0.2.0/tests/unit/test_registry_shapes.py +146 -0
  377. donkey_kit-0.2.0/tests/unit/test_rejection_contract.py +276 -0
  378. donkey_kit-0.2.0/tests/unit/test_release_workflows.py +122 -0
  379. donkey_kit-0.2.0/tests/unit/test_resolve_mcp.py +310 -0
  380. donkey_kit-0.2.0/tests/unit/test_run_ledger.py +342 -0
  381. donkey_kit-0.2.0/tests/unit/test_scan.py +717 -0
  382. donkey_kit-0.2.0/tests/unit/test_simulate.py +223 -0
  383. donkey_kit-0.2.0/tests/unit/test_simulator_app.py +336 -0
  384. donkey_kit-0.2.0/tests/unit/test_simulator_fixtures.py +132 -0
  385. donkey_kit-0.2.0/tests/unit/test_simulator_ingress.py +200 -0
  386. donkey_kit-0.2.0/tests/unit/test_simulator_scenarios.py +247 -0
  387. donkey_kit-0.2.0/tests/unit/test_simulator_scenarios_app.py +190 -0
  388. donkey_kit-0.2.0/tests/unit/test_smoke_example.py +62 -0
  389. donkey_kit-0.2.0/tests/unit/test_smoke_test_wheel.py +114 -0
  390. donkey_kit-0.2.0/tests/unit/test_step_up_wait.py +330 -0
  391. donkey_kit-0.2.0/tests/unit/test_strands_approval_bookkeeping.py +405 -0
  392. donkey_kit-0.2.0/tests/unit/test_strands_approvals.py +671 -0
  393. donkey_kit-0.2.0/tests/unit/test_telemetry.py +491 -0
  394. donkey_kit-0.2.0/tests/unit/test_tool_access.py +162 -0
  395. donkey_kit-0.2.0/tests/unit/test_toolset_approval.py +332 -0
  396. donkey_kit-0.2.0/tests/unit/test_toolset_as_user.py +315 -0
  397. donkey_kit-0.2.0/tests/unit/test_toolset_descriptor_cost.py +338 -0
  398. donkey_kit-0.2.0/tests/unit/test_toolset_filter.py +155 -0
  399. donkey_kit-0.2.0/tests/unit/test_transport.py +2591 -0
  400. donkey_kit-0.2.0/tests/unit/test_transport_both_clients.py +398 -0
  401. donkey_kit-0.2.0/tests/unit/test_transport_proxy_mounts.py +219 -0
  402. donkey_kit-0.2.0/tests/unit/test_ungoverned_binding.py +166 -0
  403. donkey_kit-0.2.0/tests/unit/test_verification_blocked_surfaces.py +74 -0
  404. donkey_kit-0.2.0/tests/unit/test_verify_agent_card.py +354 -0
  405. donkey_kit-0.2.0/tests/unit/test_workflow_supply_chain.py +176 -0
  406. donkey_kit-0.2.0/vulture_whitelist.py +191 -0
  407. donkey_kit-0.1.3/.gitignore +0 -70
  408. donkey_kit-0.1.3/PKG-INFO +0 -266
  409. donkey_kit-0.1.3/README.md +0 -188
  410. donkey_kit-0.1.3/dependency_allowlist.toml +0 -181
  411. donkey_kit-0.1.3/examples/adk/README.md +0 -87
  412. donkey_kit-0.1.3/examples/adk/main.py +0 -126
  413. donkey_kit-0.1.3/examples/openai_agents/README.md +0 -73
  414. donkey_kit-0.1.3/examples/openai_agents/main.py +0 -112
  415. donkey_kit-0.1.3/pyproject.toml +0 -689
  416. donkey_kit-0.1.3/scripts/check_docs_sync.py +0 -199
  417. donkey_kit-0.1.3/scripts/check_verification_claims.py +0 -71
  418. donkey_kit-0.1.3/scripts/compile_constraints.py +0 -327
  419. donkey_kit-0.1.3/scripts/generate_docs.py +0 -1624
  420. donkey_kit-0.1.3/scripts/verify_frameworks.py +0 -603
  421. donkey_kit-0.1.3/src/donkey_kit/__init__.py +0 -208
  422. donkey_kit-0.1.3/src/donkey_kit/_testing.py +0 -63
  423. donkey_kit-0.1.3/src/donkey_kit/cli/__init__.py +0 -33
  424. donkey_kit-0.1.3/src/donkey_kit/cli/_app.py +0 -83
  425. donkey_kit-0.1.3/src/donkey_kit/cli/_blocked.py +0 -44
  426. donkey_kit-0.1.3/src/donkey_kit/cli/doctor.py +0 -539
  427. donkey_kit-0.1.3/src/donkey_kit/cli/init.py +0 -159
  428. donkey_kit-0.1.3/src/donkey_kit/cli/mock.py +0 -69
  429. donkey_kit-0.1.3/src/donkey_kit/cli/test.py +0 -51
  430. donkey_kit-0.1.3/src/donkey_kit/conformance/__init__.py +0 -83
  431. donkey_kit-0.1.3/src/donkey_kit/conformance/gateway.py +0 -214
  432. donkey_kit-0.1.3/src/donkey_kit/conformance/harness.py +0 -478
  433. donkey_kit-0.1.3/src/donkey_kit/conformance/plugin.py +0 -317
  434. donkey_kit-0.1.3/src/donkey_kit/conformance/suite.py +0 -309
  435. donkey_kit-0.1.3/src/donkey_kit/core/__init__.py +0 -107
  436. donkey_kit-0.1.3/src/donkey_kit/core/_refusal_body.py +0 -142
  437. donkey_kit-0.1.3/src/donkey_kit/core/_verify.py +0 -228
  438. donkey_kit-0.1.3/src/donkey_kit/core/_wire.py +0 -107
  439. donkey_kit-0.1.3/src/donkey_kit/core/auth.py +0 -324
  440. donkey_kit-0.1.3/src/donkey_kit/core/budget.py +0 -388
  441. donkey_kit-0.1.3/src/donkey_kit/core/config.py +0 -1101
  442. donkey_kit-0.1.3/src/donkey_kit/core/correlation.py +0 -198
  443. donkey_kit-0.1.3/src/donkey_kit/core/cost.py +0 -142
  444. donkey_kit-0.1.3/src/donkey_kit/core/endpoints.py +0 -107
  445. donkey_kit-0.1.3/src/donkey_kit/core/errors.py +0 -1087
  446. donkey_kit-0.1.3/src/donkey_kit/core/header_names.py +0 -104
  447. donkey_kit-0.1.3/src/donkey_kit/core/masking.py +0 -93
  448. donkey_kit-0.1.3/src/donkey_kit/core/runtime.py +0 -247
  449. donkey_kit-0.1.3/src/donkey_kit/core/telemetry.py +0 -657
  450. donkey_kit-0.1.3/src/donkey_kit/core/toolspec.py +0 -105
  451. donkey_kit-0.1.3/src/donkey_kit/core/transport/__init__.py +0 -101
  452. donkey_kit-0.1.3/src/donkey_kit/core/transport/async_client.py +0 -324
  453. donkey_kit-0.1.3/src/donkey_kit/core/transport/governed.py +0 -266
  454. donkey_kit-0.1.3/src/donkey_kit/core/transport/headers.py +0 -377
  455. donkey_kit-0.1.3/src/donkey_kit/core/transport/httpx2.py +0 -296
  456. donkey_kit-0.1.3/src/donkey_kit/core/transport/observe.py +0 -159
  457. donkey_kit-0.1.3/src/donkey_kit/core/transport/pipeline.py +0 -231
  458. donkey_kit-0.1.3/src/donkey_kit/core/transport/policy.py +0 -244
  459. donkey_kit-0.1.3/src/donkey_kit/core/transport/streaming.py +0 -263
  460. donkey_kit-0.1.3/src/donkey_kit/core/transport/sync_client.py +0 -235
  461. donkey_kit-0.1.3/src/donkey_kit/donkey.py +0 -730
  462. donkey_kit-0.1.3/src/donkey_kit/experimental.py +0 -44
  463. donkey_kit-0.1.3/src/donkey_kit/integrations/__init__.py +0 -264
  464. donkey_kit-0.1.3/src/donkey_kit/integrations/adk.py +0 -235
  465. donkey_kit-0.1.3/src/donkey_kit/integrations/agent_framework.py +0 -263
  466. donkey_kit-0.1.3/src/donkey_kit/integrations/crewai.py +0 -213
  467. donkey_kit-0.1.3/src/donkey_kit/integrations/langgraph.py +0 -216
  468. donkey_kit-0.1.3/src/donkey_kit/integrations/openai_agents.py +0 -89
  469. donkey_kit-0.1.3/src/donkey_kit/integrations/strands.py +0 -199
  470. donkey_kit-0.1.3/src/donkey_kit/registry/criteria.py +0 -81
  471. donkey_kit-0.1.3/src/donkey_kit/registry/exchange.py +0 -128
  472. donkey_kit-0.1.3/src/donkey_kit/registry/introspect.py +0 -40
  473. donkey_kit-0.1.3/src/donkey_kit/registry/models.py +0 -73
  474. donkey_kit-0.1.3/src/donkey_kit/registry/publication.py +0 -193
  475. donkey_kit-0.1.3/src/donkey_kit/simulator/_fixtures/fixtures.lock +0 -33
  476. donkey_kit-0.1.3/src/donkey_kit/simulator/_fixtures/rejections/README.md +0 -144
  477. donkey_kit-0.1.3/src/donkey_kit/simulator/app.py +0 -331
  478. donkey_kit-0.1.3/src/donkey_kit/simulator/fixtures.py +0 -543
  479. donkey_kit-0.1.3/src/donkey_kit/simulator/inject.py +0 -211
  480. donkey_kit-0.1.3/src/donkey_kit/simulator/scenarios.py +0 -435
  481. donkey_kit-0.1.3/src/donkey_kit/tools/__init__.py +0 -8
  482. donkey_kit-0.1.3/src/donkey_kit/tools/filter.py +0 -66
  483. donkey_kit-0.1.3/src/donkey_kit/tools/session.py +0 -169
  484. donkey_kit-0.1.3/tests/conformance/contract_drivers.py +0 -287
  485. donkey_kit-0.1.3/tests/conformance/contract_gateway.py +0 -207
  486. donkey_kit-0.1.3/tests/conformance/suite.py +0 -167
  487. donkey_kit-0.1.3/tests/conformance/test_gateway_fixture.py +0 -92
  488. donkey_kit-0.1.3/tests/conformance/test_readme_exemptions_table.py +0 -100
  489. donkey_kit-0.1.3/tests/conformance/test_typed_refusal_bridge.py +0 -346
  490. donkey_kit-0.1.3/tests/conftest.py +0 -218
  491. donkey_kit-0.1.3/tests/fixtures/anypoint/README.md +0 -35
  492. donkey_kit-0.1.3/tests/fixtures/fixtures.lock +0 -126
  493. donkey_kit-0.1.3/tests/unit/test_adapter_async_last_call.py +0 -254
  494. donkey_kit-0.1.3/tests/unit/test_adapter_ergonomics.py +0 -824
  495. donkey_kit-0.1.3/tests/unit/test_adapter_jwt_mode.py +0 -162
  496. donkey_kit-0.1.3/tests/unit/test_adapter_roster.py +0 -188
  497. donkey_kit-0.1.3/tests/unit/test_agent_framework_policy_middleware.py +0 -296
  498. donkey_kit-0.1.3/tests/unit/test_architecture.py +0 -460
  499. donkey_kit-0.1.3/tests/unit/test_auth.py +0 -261
  500. donkey_kit-0.1.3/tests/unit/test_budget.py +0 -324
  501. donkey_kit-0.1.3/tests/unit/test_check_verification_claims.py +0 -87
  502. donkey_kit-0.1.3/tests/unit/test_ci_workflows.py +0 -202
  503. donkey_kit-0.1.3/tests/unit/test_cli_blocked_commands.py +0 -56
  504. donkey_kit-0.1.3/tests/unit/test_cli_entrypoint.py +0 -159
  505. donkey_kit-0.1.3/tests/unit/test_conformance.py +0 -560
  506. donkey_kit-0.1.3/tests/unit/test_conformance_plugin.py +0 -246
  507. donkey_kit-0.1.3/tests/unit/test_credential_planes.py +0 -351
  508. donkey_kit-0.1.3/tests/unit/test_decorators.py +0 -203
  509. donkey_kit-0.1.3/tests/unit/test_error_taxonomy.py +0 -99
  510. donkey_kit-0.1.3/tests/unit/test_errors.py +0 -688
  511. donkey_kit-0.1.3/tests/unit/test_fixture_integrity.py +0 -214
  512. donkey_kit-0.1.3/tests/unit/test_gemini_inbound_contract.py +0 -152
  513. donkey_kit-0.1.3/tests/unit/test_generated_docs.py +0 -362
  514. donkey_kit-0.1.3/tests/unit/test_governed_state_shapes.py +0 -96
  515. donkey_kit-0.1.3/tests/unit/test_house_style_config.py +0 -235
  516. donkey_kit-0.1.3/tests/unit/test_integration_checklist.py +0 -218
  517. donkey_kit-0.1.3/tests/unit/test_lastcall.py +0 -925
  518. donkey_kit-0.1.3/tests/unit/test_logging.py +0 -224
  519. donkey_kit-0.1.3/tests/unit/test_missing_framework_error.py +0 -235
  520. donkey_kit-0.1.3/tests/unit/test_noxfile.py +0 -283
  521. donkey_kit-0.1.3/tests/unit/test_openai_gemini_stream_contract.py +0 -155
  522. donkey_kit-0.1.3/tests/unit/test_otlp_export.py +0 -390
  523. donkey_kit-0.1.3/tests/unit/test_public_api_surface.py +0 -211
  524. donkey_kit-0.1.3/tests/unit/test_registry_shapes.py +0 -166
  525. donkey_kit-0.1.3/tests/unit/test_rejection_contract.py +0 -189
  526. donkey_kit-0.1.3/tests/unit/test_release_workflows.py +0 -105
  527. donkey_kit-0.1.3/tests/unit/test_simulate.py +0 -220
  528. donkey_kit-0.1.3/tests/unit/test_simulator_app.py +0 -333
  529. donkey_kit-0.1.3/tests/unit/test_simulator_fixtures.py +0 -130
  530. donkey_kit-0.1.3/tests/unit/test_simulator_scenarios.py +0 -219
  531. donkey_kit-0.1.3/tests/unit/test_simulator_scenarios_app.py +0 -172
  532. donkey_kit-0.1.3/tests/unit/test_smoke_example.py +0 -61
  533. donkey_kit-0.1.3/tests/unit/test_smoke_test_wheel.py +0 -105
  534. donkey_kit-0.1.3/tests/unit/test_telemetry.py +0 -473
  535. donkey_kit-0.1.3/tests/unit/test_transport.py +0 -2538
  536. donkey_kit-0.1.3/tests/unit/test_transport_both_clients.py +0 -343
  537. donkey_kit-0.1.3/tests/unit/test_transport_proxy_mounts.py +0 -211
  538. donkey_kit-0.1.3/tests/unit/test_verification_blocked_surfaces.py +0 -74
  539. donkey_kit-0.1.3/tests/unit/test_workflow_supply_chain.py +0 -160
  540. donkey_kit-0.1.3/vulture_whitelist.py +0 -145
  541. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/LICENSE +0 -0
  542. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/agent_framework/README.md +0 -0
  543. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/agent_framework/main.py +0 -0
  544. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/anthropic/README.md +0 -0
  545. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/anthropic/main.py +0 -0
  546. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/crewai/README.md +0 -0
  547. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/crewai/main.py +0 -0
  548. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/langgraph/README.md +0 -0
  549. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/langgraph/collector.py +0 -0
  550. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/langgraph/main.py +0 -0
  551. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/llamaindex/README.md +0 -0
  552. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/llamaindex/main.py +0 -0
  553. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/quickstart/README.md +0 -0
  554. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/quickstart/main.py +0 -0
  555. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/strands/README.md +0 -0
  556. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/examples/strands/main.py +0 -0
  557. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/capture_fixture.py +0 -0
  558. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/check_commit_identities.py +0 -0
  559. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/check_doc_links.py +0 -0
  560. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/check_doc_snippets.py +0 -0
  561. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/check_floors.py +0 -0
  562. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/check_framework_releases.py +0 -0
  563. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/check_new_dependencies.py +0 -0
  564. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/check_release_version.py +0 -0
  565. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/coinstall_matrix.py +0 -0
  566. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/compare_benchmark_trend.py +0 -0
  567. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/review_framework_release.py +0 -0
  568. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/scrub_fixtures.py +0 -0
  569. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/smoke_example.py +0 -0
  570. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/scripts/smoke_test_wheel.py +0 -0
  571. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/conformance/report.py +0 -0
  572. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/core/_response.py +0 -0
  573. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/core/cache.py +0 -0
  574. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/core/cachecontrol.py +0 -0
  575. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/core/lastcall.py +0 -0
  576. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/core/refusals.py +0 -0
  577. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/core/transport/failures.py +0 -0
  578. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/core/transport/views.py +0 -0
  579. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/integrations/_base.py +0 -0
  580. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/integrations/anthropic.py +0 -0
  581. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/integrations/llamaindex.py +0 -0
  582. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/llm/__init__.py +0 -0
  583. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/llm/catalog.py +0 -0
  584. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/llm/client.py +0 -0
  585. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/py.typed +0 -0
  586. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/registry/__init__.py +0 -0
  587. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/registry/governance.py +0 -0
  588. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/__init__.py +0 -0
  589. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/README.md +0 -0
  590. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/reject.responses-not-served.body.json +0 -0
  591. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/reject.responses-not-served.headers.txt +0 -0
  592. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/reject.unserved-base-path.headers.txt +0 -0
  593. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/request.success.http +0 -0
  594. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/responses.chat-completions.success.body.json +0 -0
  595. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/azure_openai_routing/responses.chat-completions.success.headers.txt +0 -0
  596. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/README.md +0 -0
  597. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/api_describe.openai-sdk.json +0 -0
  598. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/models.notfound.headers.txt +0 -0
  599. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/policy_list.openai-sdk.json +0 -0
  600. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.client-id-missing.body.json +0 -0
  601. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.client-id-missing.headers.txt +0 -0
  602. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.model-not-found.body.json +0 -0
  603. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.model-not-routable.body.json +0 -0
  604. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.model-not-routable.headers.txt +0 -0
  605. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.pii-detected.body.json +0 -0
  606. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.pii-detected.headers.txt +0 -0
  607. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.token-rate-limit.body.empty +0 -0
  608. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/reject.token-rate-limit.headers.txt +0 -0
  609. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.stream.headers.txt +0 -0
  610. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.stream.sample.sse +0 -0
  611. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.success.body.json +0 -0
  612. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.success.headers.txt +0 -0
  613. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/llm_proxy/responses.success.policy-applied.headers.txt +0 -0
  614. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/request_rate_limit/README.md +0 -0
  615. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/request_rate_limit/reject.request-rate-limit.body.json +0 -0
  616. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/request_rate_limit/reject.request-rate-limit.headers.txt +0 -0
  617. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/README.md +0 -0
  618. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/request.success.http +0 -0
  619. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.code.body.json +0 -0
  620. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.code.headers.txt +0 -0
  621. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.finance.body.json +0 -0
  622. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.finance.headers.txt +0 -0
  623. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.offtopic.body.json +0 -0
  624. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/anypoint/semantic_routing/responses.offtopic.headers.txt +0 -0
  625. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/openai_public/README.md +0 -0
  626. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/openai_public/chat-completions.stream.headers.txt +0 -0
  627. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/openai_public/chat-completions.stream.sse +0 -0
  628. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.agent-killed.body.json +0 -0
  629. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.agent-killed.headers.txt +0 -0
  630. /donkey_kit-0.1.3/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
  631. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-moderation.body.empty +0 -0
  632. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-moderation.headers.txt +0 -0
  633. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-bedrock.body.json +0 -0
  634. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety-bedrock.headers.txt +0 -0
  635. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety.body.json +0 -0
  636. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.content-safety.headers.txt +0 -0
  637. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.injection-protection.body.json +0 -0
  638. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.injection-protection.headers.txt +0 -0
  639. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.regex-prompt-guard.body.json +0 -0
  640. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.upstream-5xx.body.empty +0 -0
  641. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/_fixtures/rejections/reject.upstream-5xx.headers.txt +0 -0
  642. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/src/donkey_kit/simulator/server.py +0 -0
  643. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/benchmark/test_span_overhead.py +0 -0
  644. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/conformance/conftest.py +0 -0
  645. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/conformance/test_adapter_contract.py +0 -0
  646. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/conformance/test_budget_pacing_e2e.py +0 -0
  647. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/conformance/test_langgraph_conformance.py +0 -0
  648. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/conformance/test_simulator_boot.py +0 -0
  649. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/conformance/test_stock_openai_honesty.py +0 -0
  650. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/conformance/test_transport_exemptions.py +0 -0
  651. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/a2d/README.md +0 -0
  652. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/a2d/environments.sample.json +0 -0
  653. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/a2d/mcp_server_spec.account_management.json +0 -0
  654. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/a2d/mcp_servers.list.json +0 -0
  655. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/README.md +0 -0
  656. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/reject.client-id-missing.body.json +0 -0
  657. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/reject.client-id-missing.headers.txt +0 -0
  658. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/reject.openai-shape.body.json +0 -0
  659. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/reject.openai-shape.headers.txt +0 -0
  660. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/request.success.http +0 -0
  661. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/responses.success.body.json +0 -0
  662. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/anthropic_inbound/responses.success.headers.txt +0 -0
  663. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/api_describe.product-catalog-mcp.json +0 -0
  664. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/api_list.sandbox.json +0 -0
  665. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/README.md +0 -0
  666. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.client-id-missing.body.json +0 -0
  667. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.client-id-missing.headers.txt +0 -0
  668. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.openai-shape.body.json +0 -0
  669. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.openai-shape.headers.txt +0 -0
  670. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.unknown-model.body.json +0 -0
  671. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/reject.unknown-model.headers.txt +0 -0
  672. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/request.stream.http +0 -0
  673. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/request.success.http +0 -0
  674. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/request.unknown-model.http +0 -0
  675. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/responses.stream.body.txt +0 -0
  676. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/responses.stream.headers.txt +0 -0
  677. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/responses.success.body.json +0 -0
  678. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/gemini_inbound/responses.success.headers.txt +0 -0
  679. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/README.md +0 -0
  680. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/jwt.claims.json +0 -0
  681. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/mw-policies.json +0 -0
  682. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/probe.exhaustion-run.json +0 -0
  683. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.jwt-invalid.body.json +0 -0
  684. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.jwt-invalid.headers.txt +0 -0
  685. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.jwt-missing.body.json +0 -0
  686. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.jwt-missing.headers.txt +0 -0
  687. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.wallet-exhausted.body.json +0 -0
  688. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/reject.wallet-exhausted.headers.txt +0 -0
  689. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/request.success.http +0 -0
  690. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/responses.exhaustion-run.first.headers.txt +0 -0
  691. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/responses.exhaustion-run.last.headers.txt +0 -0
  692. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/responses.success.body.json +0 -0
  693. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/responses.success.headers.txt +0 -0
  694. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/model_wallet/wallet.definition.json +0 -0
  695. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/README.md +0 -0
  696. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/request.stream-tool-call.http +0 -0
  697. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/request.stream.http +0 -0
  698. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/request.stream.request-compression.http +0 -0
  699. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream-tool-call.body.txt +0 -0
  700. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream-tool-call.headers.txt +0 -0
  701. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream.body.txt +0 -0
  702. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream.headers.txt +0 -0
  703. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream.request-compression.body.txt +0 -0
  704. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/openai_gemini_stream/responses.stream.request-compression.headers.txt +0 -0
  705. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/policy_list.product-catalog-mcp.json +0 -0
  706. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/README.md +0 -0
  707. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/reject.request-rate-limit.repeat.headers.txt +0 -0
  708. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/responses.after-reset.headers.txt +0 -0
  709. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/responses.success.body.json +0 -0
  710. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/responses.success.headers.txt +0 -0
  711. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/request_rate_limit/responses.window-exhausted.headers.txt +0 -0
  712. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/README.md +0 -0
  713. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.reject.body.json +0 -0
  714. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.reject.headers.txt +0 -0
  715. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.stream.body.txt +0 -0
  716. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.stream.headers.txt +0 -0
  717. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.success.body.json +0 -0
  718. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.chat_completions.success.headers.txt +0 -0
  719. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.reject.body.json +0 -0
  720. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.reject.headers.txt +0 -0
  721. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.stream.body.json +0 -0
  722. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.stream.headers.txt +0 -0
  723. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.success.body.json +0 -0
  724. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/azureopenai.responses.success.headers.txt +0 -0
  725. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.reject.body.json +0 -0
  726. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.reject.headers.txt +0 -0
  727. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.stream.body.txt +0 -0
  728. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.stream.headers.txt +0 -0
  729. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.success.body.json +0 -0
  730. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.chat_completions.success.headers.txt +0 -0
  731. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.reject.body.json +0 -0
  732. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.reject.headers.txt +0 -0
  733. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.stream.body.txt +0 -0
  734. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.stream.headers.txt +0 -0
  735. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.success.body.json +0 -0
  736. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/bedrockanthropic.responses.success.headers.txt +0 -0
  737. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.reject.body.json +0 -0
  738. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.reject.headers.txt +0 -0
  739. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.stream.body.txt +0 -0
  740. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.stream.headers.txt +0 -0
  741. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.success.body.json +0 -0
  742. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.chat_completions.success.headers.txt +0 -0
  743. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.reject.body.json +0 -0
  744. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.reject.headers.txt +0 -0
  745. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.stream.body.txt +0 -0
  746. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.stream.headers.txt +0 -0
  747. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.success.body.json +0 -0
  748. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/gemini.responses.success.headers.txt +0 -0
  749. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.reject.body.json +0 -0
  750. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.reject.headers.txt +0 -0
  751. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.stream.body.txt +0 -0
  752. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.stream.headers.txt +0 -0
  753. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.success.body.json +0 -0
  754. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.chat_completions.success.headers.txt +0 -0
  755. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.reject.body.json +0 -0
  756. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.reject.headers.txt +0 -0
  757. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.stream.body.txt +0 -0
  758. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.stream.headers.txt +0 -0
  759. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.success.body.json +0 -0
  760. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/routes/openai.responses.success.headers.txt +0 -0
  761. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/README.md +0 -0
  762. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/request.success.http +0 -0
  763. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.bypass.headers.txt +0 -0
  764. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.hit.body.json +0 -0
  765. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.hit.headers.txt +0 -0
  766. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.miss.body.json +0 -0
  767. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.miss.headers.txt +0 -0
  768. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.no-store-proof.headers.txt +0 -0
  769. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.no-store.body.json +0 -0
  770. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.no-store.headers.txt +0 -0
  771. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.principal-id.headers.txt +0 -0
  772. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.threshold-override.headers.txt +0 -0
  773. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/fixtures/anypoint/semantic_cache/responses.ttl-override.headers.txt +0 -0
  774. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/sandbox/README.md +0 -0
  775. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/sandbox/conftest.py +0 -0
  776. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/sandbox/proxies.toml.example +0 -0
  777. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/sandbox/test_proxy_contracts.py +0 -0
  778. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/typecheck/asset_type_contract.py +0 -0
  779. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/typecheck/classify_response_contract.py +0 -0
  780. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/typecheck/headline_api_contract.py +0 -0
  781. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/_anthropic_wire.py +0 -0
  782. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_adapter_capabilities.py +0 -0
  783. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_adapter_openai3_bridge.py +0 -0
  784. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_anthropic_client_stacks.py +0 -0
  785. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_anthropic_httpx2_bridge.py +0 -0
  786. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_base_install_deps.py +0 -0
  787. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_budget_pacing.py +0 -0
  788. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_budget_requests.py +0 -0
  789. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_capture_fixture.py +0 -0
  790. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_check_commit_identities.py +0 -0
  791. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_check_doc_links.py +0 -0
  792. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_check_doc_snippets.py +0 -0
  793. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_check_docs_sync.py +0 -0
  794. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_check_framework_releases.py +0 -0
  795. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_check_new_dependencies.py +0 -0
  796. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_cli_doctor.py +0 -0
  797. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_cli_help.py +0 -0
  798. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_cli_init.py +0 -0
  799. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_cli_mock.py +0 -0
  800. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_cli_test.py +0 -0
  801. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_compare_benchmark_trend.py +0 -0
  802. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_config.py +0 -0
  803. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_config_endpoint_trust.py +0 -0
  804. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_config_env_vars.py +0 -0
  805. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_config_header_names.py +0 -0
  806. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_config_precedence.py +0 -0
  807. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_config_validation.py +0 -0
  808. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_conformance_base_only.py +0 -0
  809. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_connection_kwargs_rendering.py +0 -0
  810. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_constraints_lock.py +0 -0
  811. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_contract_extra_skip_guard.py +0 -0
  812. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_cost.py +0 -0
  813. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_credential_binding_planes.py +0 -0
  814. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_data_plane_only_headers.py +0 -0
  815. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_default_runtime.py +0 -0
  816. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_docs_config_table.py +0 -0
  817. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_docs_from_env_kwargs.py +0 -0
  818. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_doctor.py +0 -0
  819. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_donkey_surface.py +0 -0
  820. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_endpoint_overrides.py +0 -0
  821. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_framework_redirects.py +0 -0
  822. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_framework_retries.py +0 -0
  823. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_gateway.py +0 -0
  824. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_hermetic_suite.py +0 -0
  825. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_langgraph_correlation.py +0 -0
  826. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_langgraph_sync_transport.py +0 -0
  827. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_langgraph_typed_refusals.py +0 -0
  828. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_llamaindex_model_defaults.py +0 -0
  829. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_llm_bearer_mode.py +0 -0
  830. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_llm_catalog.py +0 -0
  831. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_llm_client_jwt.py +0 -0
  832. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_llm_client_openai3_injection.py +0 -0
  833. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_llm_proxy_contract.py +0 -0
  834. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_model_wallet_contract.py +0 -0
  835. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_product_description.py +0 -0
  836. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_public_docstrings.py +0 -0
  837. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_pure_logic.py +0 -0
  838. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_refusal_bridge.py +0 -0
  839. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_refusal_capture.py +0 -0
  840. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_refusal_groups.py +0 -0
  841. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_refusal_tracebacks.py +0 -0
  842. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_release_version.py +0 -0
  843. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_review_framework_release.py +0 -0
  844. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_route_upstream_contract.py +0 -0
  845. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_scrub_fixtures.py +0 -0
  846. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_semantic_cache.py +0 -0
  847. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_sensitive_output.py +0 -0
  848. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_shared_client_views.py +0 -0
  849. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_simulator_base_only.py +0 -0
  850. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_strands_terminal_refusal.py +0 -0
  851. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_support_matrix.py +0 -0
  852. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_transport_event_loops.py +0 -0
  853. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_transport_injection.py +0 -0
  854. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_transport_origin_guard.py +0 -0
  855. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_typed_refusals_example.py +0 -0
  856. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_verify_frameworks.py +0 -0
  857. {donkey_kit-0.1.3 → donkey_kit-0.2.0}/tests/unit/test_wire_names.py +0 -0
  858. {donkey_kit-0.1.3 → 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. -->