## Summary
- Adds `_fix_messages_for_bedrock()` static method to
`CopilotKitMiddleware` that sanitizes messages before model invocation
- Strips unanswered `tool_calls` (no matching `ToolMessage`) — Bedrock
rejects `toolUse` blocks without a corresponding `toolResult`
- Syncs `msg.content` tool_use blocks with `msg.tool_calls` to remove
stale content blocks left behind in checkpoints
- Fixes string-typed `args`/`input` in tool_calls and tool_use content
blocks (Bedrock requires dict)
## Context
When using CopilotKit with Amazon Bedrock's Converse API, `after_agent`
restores frontend tool_calls to the checkpoint. This creates three
problems that cause Bedrock to reject the request:
1. AIMessages contain `toolUse` blocks without matching `toolResult`
messages
2. Content blocks and `tool_calls` can get out of sync after
`after_model` strips calls but leaves content blocks
3. Tool call arguments can be serialized as strings instead of dicts
This fix runs automatically in `awrap_model_call` before every model
invocation.
## Test plan
- [ ] Verify existing CopilotKit tests still pass
- [ ] Test with Bedrock Converse API (Claude models) with frontend tool
injection
- [ ] Test multi-turn conversations where frontend tool_calls are
restored from checkpoints
## Summary
- Removes the \`astral-sh/setup-uv@v6\` step from 8 CI workflows that
install uv but never use it
- Keeps uv in \`e2e_dojo.yml\` which actually needs it (dojo scripts use
\`uv sync\`/\`uv run\` for Python agents)
### Workflows cleaned up
| Workflow | What it does |
|---|---|
| \`test_unit-v1.yml\` | Unit tests (pnpm/node only) |
| \`test_unit-v2.yml\` | Unit tests (pnpm/node only) |
| \`static_quality.yml\` | Prettier, ESLint, publint (3 jobs, all node)
|
| \`static_commitlint.yml\` | Commitlint (node only) |
| \`static_danger.yml\` | Danger (node only) |
| \`e2e_examples.yml\` | Example e2e tests (node only) |
| \`publish_release.yml\` | Changeset publish (node only) |
| \`publish_custom-pre.yml\` | Snapshot publish (node only) |
### Workflow kept unchanged
- \`e2e_dojo.yml\` — \`prep-dojo-everything.js\` and
\`run-dojo-everything.js\` use \`uv sync\`/\`uv run\` for Python agent
suites
## Test plan
- [x] Verified \`e2e_dojo.yml\` is the only workflow where \`uv\` is
actually invoked
- [x] Verified no \`postinstall\` scripts in core packages call \`uv\`
- [x] Confirmed \`setup-uv\` only remains in \`e2e_dojo.yml\`
- [ ] CI should pass on this PR — all affected workflows are node-only
These 8 workflows install uv but never invoke it. Only e2e_dojo.yml
actually needs uv (the dojo scripts use uv sync/run for Python agents).
Removing the unnecessary step saves CI time and reduces confusion.
The repo migrated to lefthook but leftover .husky/_/ files from the
old husky install can confuse agents into thinking husky is the hook
runner. Adding .husky/ to .gitignore prevents these from reappearing.
## Summary
- Adds a Claude Code `PreToolUse` hook that blocks `git commit` calls
containing `--no-verify`, `-n`, `LEFTHOOK=0`, or `--no-gpg-sign` —
preventing agents from silently skipping lefthook pre-commit hooks
- Adds commit grouping convention to the git guidelines docs (commits
should be separated by area of concern)
## Test plan
- [x] Verified hook blocks `git commit --no-verify` (blocked live in
session)
- [x] Verified hook blocks `LEFTHOOK=0 git commit` (blocked live in
session)
- [x] Verified hook allows normal `git commit` (passed through)
- [x] Verified hook ignores blocked keywords inside commit messages
(e.g. mentioning "--no-verify" in message text)
Agents and subagents sometimes skip pre-commit hooks by passing
bypass flags to git commit. This adds a PreToolUse hook that blocks
those attempts, ensuring lefthook always runs.
Add _fix_messages_for_bedrock() to handle three issues caused by
after_agent restoring frontend tool_calls to the checkpoint:
1. Strip unanswered tool_calls without matching ToolMessages (Bedrock
rejects toolUse without a corresponding toolResult)
2. Sync msg.content tool_use blocks with msg.tool_calls
3. Fix tool_use/tool_call blocks with string input/args (must be dict)
Neither built-in-agent nor agent-spec are valid CLI framework options.
Remove "Start from scratch" CLI paths, keep manual setup only.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Agent-spec: remove invalid CLI `-f agent-spec` option, link to manual setup
- A2A: fix env var (GEMINI_API_KEY) and port (10002) to match starter template
- AWS Strands: fix useRenderTool to use Zod schema and correct render props
- LangGraph: add auth guide cross-reference in configurable docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>