[pull] main from CopilotKit:main#330
Merged
Merged
Conversation
…res (#5314) Upgrade of dependencies so the latest changes (mainly a2ui stuff) from ag-ui are reflected here
…command tabs
The /strands/deploy-agentcore and /langgraph/deploy-agentcore pages
rendered only their title — the body was empty. <Content> resolved to a
dead stub in the MDX component registry that rendered nothing, despite
the content being authored in the shared agentcore partial.
- mdx-registry.tsx: replace the dead Content stub with a dedicated
component that renders the agentcore partial via PartialLoader and
threads the page's framework into MDX scope.
- mdx-registry-loader.tsx: PartialLoader accepts an optional scope,
forwarded to MDXRemote options.scope so partials can read bare scope
identifiers (next-mdx-remote binds scope as module identifiers, not as
the rendered component's props).
- agentcore/index.mdx: reference {framework} (bare scope var) instead of
props.framework so AgentCoreCommandTabs collapses to the single
relevant framework per page.
…omote snapshot build_snapshot enumerates every project service and queries each one's serviceInstance. The only guard was `next if inst.nil?` — it handled a NULL result but not a THROWN `GraphQL: ServiceInstance not found` error (a half-deleted service that still appears in the project service list but has no instance in the env). That error bubbled to Railway.run's top-level `rescue GraphQL::Error` and aborted the ENTIRE promote with an opaque exit 2 before any preflight/divergence logic ran (run 27144525566 killed the docs promote this way). Scope the rescue narrowly to ONLY the per-service "ServiceInstance not found" message — log+skip that one service exactly like the nil case — so every other GraphQL failure (auth, rate-limit, schema drift) still propagates fail-loud. Adds red-green coverage: a single thrown not-found is skipped (healthy services still snapshot), while an unrelated GraphQL error still raises.
… never probed When a promote fails, the succeeded-service set is empty, so verify-prod hits its skip branch (`exit 0`). The GitHub job result is therefore `success`, and the notify step rendered `verify-prod=success` in the #oss-alerts Slack message — a misleading green, since prod was never probed. verify-prod now exports a `status` output: `success` after a real probe passes, `skipped` on the empty-CSV skip. notify reads that output (via the new bats-tested verify-prod-display.sh) instead of the raw job result, so the Slack line accurately reads `verify-prod=skipped` vs `success` vs `failure`. A genuine probe failure / contract violation exits non-zero (job result `failure`, status never written), and the display falls back to the job result. Slack formatting is unchanged. Extracts the display mapping into showcase/scripts/verify-prod-display.sh (mirroring promote-fleet.sh) with red-green bats coverage, and adds it to the showcase_validate.yml shellcheck step.
…sdk-python reasoning agents
…cript (+@ag-ui/client 0.0.48)
…reasoning demo docs
A single-service `promote <svc>` ran check_service_set_parity over the FULL staging vs FULL prod fleet and REFUSEd whenever staging carried any service prod lacks. The live staging fleet legitimately contains 13 staging-only services — harness-workers (SSOT-modeled) and 12 starter-* demos — so an otherwise-clean single-service promote (e.g. docs) is blocked with `REFUSE: services in staging not in prod`. Scope the "staging not in prod" REFUSE to the promote TARGET when a single-service promote is in effect (intersect the staging-only set with [target]). The target-absent-from-prod footgun still REFUSEs (target is in the intersection), the "prod not in staging" arm is unchanged, and full-fleet promotes (no --service) retain full strictness. Complements #5322.
check_service_set_parity scoped only the staging-only arm to the single-service target; the prod-only arm was still computed over the full fleet, so any prod-only service (e.g. a deprecated harness-legacy) REFUSEd every unrelated single-service promote — the exact mirror of the bug #5324 fixed. Scope both arms to the target for single-service promotes; full-fleet promotes (target nil) keep both arms at full strictness. Tests: add prod-only tolerance red-green test, strengthen the target-absent test to assert target-scoping (unrelated staging-only sibling ignored), rewrite the stale snapshot-narrowing comments to describe the real fleet_*/& [target] contract, drop the dead FLEET_PUBLIC_PROD_HOSTS constant, and renumber the ivar-lint allowlist for the one-line shift in bin/railway.
## Summary Closes the fleet-wide reasoning-emission gap: showcase reasoning demo cells now emit real AG-UI `REASONING_MESSAGE_*` (role `reasoning`) from each backend's native reasoning channel, so the d5/d6 reasoning cells render the thinking block. - **Real reasoning fixes (5 backends):** claude-sdk-python (Anthropic native `thinking_delta`, multi-block + redacted-thinking history replay for the tool loop), agno (`RunContentEvent.reasoning_content` tee), built-in-agent (chat-completions `reasoning_content` adapter), llamaindex (OpenAI **Responses API** + reasoning model, matching the langgraph-python gold standard), claude-sdk-typescript (`role: "reasoning"` fix + `@ag-ui/client` ^0.0.48). - **Documented genuine SDK limitations (3 backends):** ag2, crewai-crews, spring-ai cannot surface a model reasoning channel (bridge/SDK has no reasoning event) — documented in each `PARITY_NOTES.md`, not faked. - **Probe coverage restored:** agno + llamaindex reasoning demo ids renamed to `reasoning-custom`/`reasoning-default` (+ re-added missing manifest demo blocks) so the d5 reasoning-display probe fires for them. - Verified via aimock d5/d6 replay (native channel confirmed, not the inline-tag fallback). langgraph-python is the parity gold standard. ## Verification - Per-backend AG-UI event-level RED→GREEN (`REASONING_MESSAGE_START` 0→N) under aimock. - claude-sdk-python multi-block lifecycle + thinking-history signature replay verified via captured iteration-2 Anthropic request. - 7-agent CR with two fix rounds + three confirmation rounds → converged to zero blocking findings. ## Follow-ups (not in this PR) - Fleet-wide reasoning-id rename for the remaining backends (ag2/crewai-crews/spring-ai/langgraph-fastapi/langroid/mastra/strands) so their reasoning-display cells get probed. - aimock hardening filed upstream: CopilotKit/aimock#253 (validate Anthropic extended-thinking request invariants) and #254 (model-capability-aware reasoning emission). - Minor robustness: `id(block)`→monotonic counter for reasoning message ids; symmetric unparseable-reasoning warning on the chat-completions transport; reuse Anthropic SDK `*BlockParam` types. ## Test plan - [ ] CI green - [ ] Post-merge: showcase `:latest` rebuild + staging redeploy, then confirm the d5/d6 reasoning cells (chain + reasoning-display) render green on the dashboard for the 5 fixed backends; the 3 documented-limitation backends remain red-but-documented.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )