docs: update CHANGELOG, plan CLI reference, and MCP API docs for recent PRs #3083

Closed
freemo wants to merge 1 commits from docs/ca-docs-writer-2026-04-05 into master
3 changed files with 74 additions and 2 deletions
+33
View File
@@ -86,6 +86,21 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
This eliminates redundant Alembic migrations across all test suites and reduces
total test suite wall-clock time. (#2334)
- **CI — Nox output captured as CI artifacts**: All 8 nox-running CI jobs
(`lint`, `typecheck`, `security`, `quality`, `unit_tests`, `integration_tests`,
`e2e_tests`, `coverage`) now pipe their output through `tee` to named log files
and upload them as Forgejo artifacts (`ci-logs-<job>`) with `if: always()` so
logs are available even on failure. Multi-session jobs append to a single combined
log. Artifacts are retained for 30 days. Seven agent definition files updated to
reference the artifact download API for CI diagnostics. (#2782)
- **Benchmarks — ASV performance benchmark suite for providers module**: Added 5
new ASV benchmark files under `benchmarks/` covering all performance-sensitive
paths in the `providers` module: `ProviderCostTable` construction and iteration,
`CostTracker` accumulation, `FallbackSelector` selection, `ProviderRegistry`
enumeration and lookup, and LLM adapter instantiation for all 5 built-in
providers. 68 benchmark methods total. (#3022)
### Fixed
- Fixed session leak in all `AutomationProfileRepository` public methods
@@ -160,6 +175,24 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- `ThoughtBlockWidget` background corrected from `$primary 20%` to `$primary-muted 20%`,
making thought blocks visually lighter and more subtle per spec §29811. (#1448)
- **CLI — `agents plan list` gains `--namespace`/`-n` filter**: The `plan list`
command now accepts `--namespace`/`-n` to filter plans by namespace, bringing it
into alignment with the specification and achieving parity with `agents action list`.
The service layer already supported namespace filtering; only the CLI layer was
missing the option. The Filters panel in rich output displays `Namespace: <value>`
when the flag is active. (#2616)
- **MCP — Error message extraction corrected for MCP 1.4.0**: `MCPToolAdapter.invoke()`
now reads error messages from `content[0].text` per the MCP 1.4.0 protocol
specification, replacing the previous non-standard `error` key lookup that silently
returned `"unknown error"` for all real MCP 1.4.0 servers. Safe guards prevent
`IndexError` on absent or malformed `content` arrays. (#2600)
- **CI — All quality gates restored to passing on master**: Resolved format
violations, incomplete A2A JSON-RPC 2.0 migration in test step files, stale
session CLI output format assertions, plan list output format regressions, and
stale plan apply test data. No quality gates were suppressed or bypassed. (#2629)
## [3.7.0] — 2026-04-02
### Added
+21
View File
@@ -68,6 +68,27 @@ await adapter.disconnect()
| `invoke(name, arguments)` | Call a tool with input validation |
| `register_tools(registry)` | Bulk-register discovered tools |
### Error Handling in `invoke()`
`MCPToolAdapter.invoke()` complies with the **MCP 1.4.0** protocol for error
responses. When a tool call returns `isError: true`, the error message is
extracted from `content[0].text`:
```python
# MCP 1.4.0 error response shape
{
"isError": True,
"content": [{"type": "text", "text": "Tool execution failed: ..."}]
}
```
Safe guards prevent `IndexError` when `content` is absent or empty — the
adapter falls back to `"unknown error"` in those cases.
> **Note (v3.7.0+):** Prior to this fix, `invoke()` read from a non-standard
> `error` key that no real MCP 1.4.0 server populates, causing all error
> messages to silently appear as `"unknown error"`. (#2600)
---
## `MCPToolDescriptor`
+20 -2
View File
@@ -109,6 +109,7 @@ agents plan list [REGEX] [OPTIONS]
| Flag | Description |
|-------------------------|--------------------------------------------------|
| `--namespace`, `-n` | Filter by namespace |
| `--phase` | Filter by phase (strategize, execute, apply) |
| `--state` | Filter by processing state |
| `--processing-state` | Alias for `--state` |
@@ -116,6 +117,22 @@ agents plan list [REGEX] [OPTIONS]
| `--action` | Filter by action name |
| `--format`, `-f` | Output format |
### Examples
```bash
# Filter by namespace
agents plan list --namespace myteam
# Short form
agents plan list -n myteam
# Combined namespace + state filter
agents plan list --namespace myteam --state processing
# Namespace filter with no results
agents plan list --namespace nonexistent
```
### Rich Output
The `rich` format renders a **Plans** table with columns:
@@ -131,8 +148,9 @@ The `rich` format renders a **Plans** table with columns:
After the table:
- **Filters** panel — shown only when at least one filter (`--phase`, `--state`,
`--project`, `--action`) is active. Lists the active filter values.
- **Filters** panel — shown only when at least one filter (`--namespace`, `--phase`,
`--state`, `--project`, `--action`) is active. Lists the active filter values,
with `Namespace: <value>` displayed first when `--namespace` is provided.
- **Summary** panel — total plans, processing count, completed count, and errored count.
Followed by a `✓ OK N plan(s) listed` success message.