donkey-kit 0.1.0__tar.gz

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