Repository navigation
Release: Phase 1.1 — Stabilize the MVP (0.1.1) - #919
Merged
Merged
Conversation
…delines (#660) (#667) * docs(contributing): reconcile fork row-flip rule and add multi-PR sequencing (#660) Refs #660 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(contributing): codify live-capture recording, attribution and byte-exact rules (#660) Refs #660 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(contributing): add VERIFIED-flip sweep checklist and README-banner scope note (#660) Refs #660 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(site): note maintainer re-capture step in the fork flow (#660) Refs #660 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Plan for adding a PyPI-version badge and fixing the stale install banner in the Donkey-Development-Kit/.github org profile README. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Add a live shields.io PyPI-version badge under the logo in both README.md and python/README.md, and remove the hardcoded `v0.1.0` string from the alpha-status blockquote so the badge becomes the single source of the current version. Reuses the exact badge URL and link target already shipped in the docs-site navbar (#666). Closes #671 Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…pture (#669) (#673) * fix: replace empty injection-protection body with the live 79-byte capture (#669) Row 3 of the eight documented rejection shapes carried an honest empty placeholder because no Injection Protection proxy had been deployed to capture against. `ddk-injection-protection` (native Gemini ingress, instance 21200898, shared-omni-gateway) now exists and returned the real rejection: HTTP 400, `x-injection-protection: blocked`, and a 79-byte JSON body. - Add `reject.injection-protection.body.json` with the captured bytes; delete the `.body.empty` placeholder. - Edit `reject.injection-protection.headers.txt`: drop the now-false `content-length: 0`, add the `content-type` the JSON body requires (header breadth beyond this is #670's scope). - Wire the body into `simulator.fixtures.SHAPES` and relock `fixtures.lock`. - `classify()` is unchanged — injection is typed purely from the `x-injection-protection: blocked` header, independent of the body, which is still just carried on `err.response`. - Flip the verification status for row 3 from UNVERIFIED to VERIFIED (LIVE) across `docs/verified-apis.md`, the fixtures README, `ARCHITECTURE.md`, `docs/unsupported-boundary.md`, and the matching website wording, leaving only the content-moderation fall-through (row 4) as the residual keeping #253 open. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: regenerate llms artifacts for the #669 wording update npm run generate:llms was missed after editing errors.mdx and reference/unsupported-boundary.mdx; the docs-llms-drift CI check caught the stale mirrors in website/public/. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…#681, #682, #683) Demote the MS Agent Framework §8 row from a bare VERIFIED to the same "UNVERIFIED (signature confirmed; pending maintainer --live + sign-off)" tier as its seven peers, and align verify_frameworks.py's Result.verdict and emit_verified_rows() so the harness prints that same vocabulary instead of collapsing offline-only passes into VERIFIED / VERIFIED (signature) (#681). Fix the stale §4 cross-reference for the live LangGraph /responses data plane to §2, in both verified-apis.md and the adapter's connection_kwargs() comment (#682). Deduplicate the CrewAI return-class finding so §8.1 points at the §8 row as its single source of truth instead of repeating the finding (#683). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
….BaseLLM (#640, #684) crewai.LLM.__new__ is a documented factory that routes openai/-prefixed models to crewai.llms.providers.openai.completion.OpenAICompletion, a sibling BaseLLM subclass — not a class-rename incompatibility as PR #679 originally recorded. Retype CrewAIAdapter.llm()/llm() -> BaseLLM to match what is actually returned, update verify_frameworks.py's expected class, and record the corrected §8 evidence plus newly-captured offline §9/§10 CrewAI evidence (MCPServerAdapter.__init__, BaseTool.model_fields). Sync the website docs (frameworks/crewai.mdx, frameworks/index.mdx, feature-overview.mdx) that asserted the stale crewai.LLM return type. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
#640, #682, #684) Follow-ups from the PR #686 review: - Regenerate the website/public llms artifacts (llms.txt, llms-full.txt and the feature-overview / frameworks / frameworks/crewai pages) so the docs-llms-drift CI job passes. - crewai.LLM routes an openai/ model with an explicit base_url to CrewAI's native OpenAI provider (OpenAICompletion), which does not go through LiteLLM and strips the openai/ prefix before the request. Replace the "LiteLLM-backed" / "LiteLLM owns the transport" wording in the CrewAI page, the frameworks index, the adapter module and the example, and make the page's manual-equivalent snippet pass base_url like the adapter does. - Sync the remaining crewai.LLM return-type mentions (feature-overview card, examples/crewai, the adapter-ergonomics test name) to crewai.BaseLLM. - Finish #682: the adapter-ergonomics test still cited §4 for /responses. - docs/verified-apis.md §8: describe Check A as the isinstance check it is, record the CrewAI row's returned class (crewai.BaseLLM, concretely OpenAICompletion) and that extra_headers reaches the proxy through CrewAI's additional_params passthrough rather than a named parameter; fix the nested-backtick code span and the circular §8/§8.1 pointer. Co-authored-by: Cursor <cursoragent@cursor.com>
…INSTALLED (#640, #681) Follow-ups from the PR #686 review, fixed here instead of as new issues: - verify_frameworks.py decided "installed" by catching ImportError from the adapter's factory, so a renamed class ("cannot import name ...") and any native-provider construction error (crewai.LLM re-raises those as ImportError) read as NOT INSTALLED and exited 0, nightly matrix included. "Installed" now means the framework's distribution is present (a new FRAMEWORKS column, pinned to the pyproject extras by a unit test); an ImportError from an installed framework is a SIGNATURE FAIL. A missing agent-framework no longer reads as installed-but-BLOCKED. - Pin CrewAI's expected class to the concrete OpenAICompletion: every CrewAI provider is a crewai.BaseLLM, so the BaseLLM check passed on any routing change. The adapter's public annotation stays BaseLLM. - Replace the remaining "LiteLLM owns the transport" rationale for CrewAI (README exemption table, conformance KNOWN_LIMITATIONS reasons, ARCHITECTURE.md, the telemetry / last-call / budget / gateway-identity pages, and docstrings in donkey.py, lastcall.py, cachecontrol.py and _base.py). CrewAI's native provider builds its own sync and async OpenAI clients from one set of client params, so the SDK's async httpx client still cannot be injected: the exemptions stand, only their cause changes. - agent_framework.py still called its class path VERIFIED after b8619e0 demoted the section 8 row (#681); say "confirmed offline" to match. - Record the harness semantics and the OpenAICompletion pin in docs/verified-apis.md section 8; regenerate the website/public llms artifacts. Co-authored-by: Cursor <cursoragent@cursor.com>
#692) (#695) Render the cookie-less beacon from the root layout only when the build receives a well-formed 32-hex NEXT_PUBLIC_CF_WEB_ANALYTICS_TOKEN, supplied by the Pages workflow from the CF_WEB_ANALYTICS_TOKEN repository variable. Local and unconfigured builds ship no analytics. The gate is unit-tested with node --test and runs in the docs CI job. Refs Donkey-Development-Kit/donkey-development-kit-metrics#19 Co-authored-by: Cursor <cursoragent@cursor.com>
) Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 5.0.9 to 5.0.12. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](juliangruber/brace-expansion@v5.0.9...v5.0.12) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 5.0.12 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.15 to 3.4.16. - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](cure53/DOMPurify@3.4.15...3.4.16) --- updated-dependencies: - dependency-name: dompurify dependency-version: 3.4.16 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…tradictions (#892) - Replace the copied _missing_env() in the seven connection_kwargs() examples with DonkeyConfig.from_env().validated(need="llm"), printing the SDK's ConfigError (so jwt mode reports the wallet client id and .donkey-kit.toml is honoured) and the curated ImportError instead of local install hints. - Example docstrings/READMEs describe behaviour and cite docs/verified-apis.md §2/§8 instead of claiming "verified"; the Agent Framework example uses model=, not model_id. - Drop the Strands lifecycle-hooks policy-termination claim (nothing in src uses them) from the adapter and its website page. - Record the live /chat/completions captures in verified-apis.md §2 and which adapter uses which route; state the real reason LangGraph keeps /responses (the raw client's route and the only one the simulator serves). Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* fix(langgraph): report last_call after ChatOpenAI.ainvoke() (#850) LangChain's BaseChatModel.agenerate sends the request from a task that asyncio.gather spawns with a copy of the caller's context, so the transport recorded donkey.last_call into that copy and the caller read UNOBSERVED after ainvoke(). core/lastcall gains a LastCallBridge: opened in the caller's context, it is inherited by the spawned task, which records through it. It closes when the call ends, so tasks the caller spawns later never write back (hazard #2, fan-out isolation). The LangGraph adapter attaches a run_inline callback handler that opens the bridge in on_chat_model_start (awaited in the caller's context, before the gather) and closes it on on_llm_end / on_llm_error. Batches get no bridge, as their requests run side by side. BG §1.1 (last_call, #362). Closes #850 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(langgraph): keep the last_call handler typecheckable and stubbable without langchain (#850) CI jobs without the langgraph extra failed: mypy's disallow_subclassing_any rejected the BaseCallbackHandler subclass (Any when langchain_core is absent), and the factory-drift tests stubbed ChatOpenAI but not BaseCallbackHandler. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs(site): regenerate llms artifacts for the last_call bridge pages (#850) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The custom domain was enabled in Settings → Pages before #909 reached main, so the deploy still built with DOCS_BASE_PATH=/donkey-development-kit and every _next/ and /img/ asset 404'd on the root-served domain. Drop the sub-path from the Pages build and add public/CNAME. Hunks are taken verbatim from #909's branch so it rebases cleanly. Closes #910 (cherry picked from commit df2da5a) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…912) Build the Pages export for the domain root (drop DOCS_BASE_PATH from the workflow), add public/CNAME, point generate-llms.mjs's SITE at the custom domain so llms.txt sits at a real domain root, and replace the old github.io URL in pyproject, the READMEs, the example READMEs and use-with-your-agent.mdx. preview-pages.mjs now honours DOCS_BASE_PATH (root by default) instead of hard-coding the old sub-path. Refs #909 Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
) Name the hostname the Web Analytics site is registered for (docs.donkey-kit.dev), where the site token comes from, and that the beacon only goes live once the beacon code has reached main, the sole published branch. Add the devtools check that closes #692's last acceptance criterion. Refs #916 Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
amirkhan-ak-sf
had a problem deploying
to
github-pages
October 2, 2026 12:48 — with
GitHub Actions
Failure
This branch had an error being deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotion of
develop→mainfor 0.1.1 (milestone Phase 1.1 — Stabilize the MVP (0.1.1)). The version is already bumped to0.1.1ondevelop(#914;mainis at0.1.1.dev0).Notes
ModelNotRoutableis simulatable viasimulate()/donkey mock(feat(simulator): make ModelNotRoutable simulatable via simulate() and donkey mock #900), and a native Gemini factory for ADK onFormat=Geminiproxies (feat(adk): native Gemini factory for Format=Gemini proxies #693).allextra is scoped to extras that install together (Scope the all extra to extras that install together #700).interrupt()underainvoke()is recorded as needing Python 3.11+ (fix(langgraph): record interrupt() under ainvoke() as needing Python 3.11+ #876).ModelNotRoutablefix(errors): type the bare-model-name 400 as ModelNotRoutable #885, doctor/token/closed-client fix(errors): raise typed errors from doctor, the token fetch, and a closed client #860,ConfigErrorvalidation fix(config): validate config values and raise ConfigError (#809) #857). Adapters send the JWT or refuse jwt mode, never the placeholder (fix(adapters): send the JWT or refuse jwt mode, never the placeholder #889). LLM-proxy-only headers go only on data-plane requests (fix(transport): send LLM-proxy-only headers only on data-plane requests #875), and there is one connection pool per event loop (fix(transport): keep one connection pool per event loop #859).docs.donkey-kit.dev(Serve the docs site from the docs.donkey-kit.dev custom domain #912, fix(docs): build the Pages site for the docs.donkey-kit.dev root (cherry-pick #911) #913). The Docs site unstyled on docs.donkey-kit.dev: Pages build still uses the /donkey-development-kit basePath #910 hotfix is already onmain(fix(docs): build the Pages site for the docs.donkey-kit.dev root #911), and develop carries its cherry-pick (fix(docs): build the Pages site for the docs.donkey-kit.dev root (cherry-pick #911) #913).Included (89 commits)
Features
Fixes
Docs
Chores/CI
Other
After merge
--merge(no squash/rebase, no--delete-branch).v0.1.1and cut the GitHub Release (ddk-release).🤖 Generated with Claude Code