Skip to content

feat(acp): implement Providers API and Elicitation protocol#4473

Merged
bug-ops merged 2 commits into
mainfrom
acp-elicitation-providers
May 19, 2026
Merged

feat(acp): implement Providers API and Elicitation protocol#4473
bug-ops merged 2 commits into
mainfrom
acp-elicitation-providers

Conversation

@bug-ops
Copy link
Copy Markdown
Owner

@bug-ops bug-ops commented May 19, 2026

Summary

  • Add ACP schema 0.13.2 Providers API (providers/list, providers/set, providers/disable) as session-scoped overrides — no vault keys exposed in responses, no persistent config mutation
  • Add Elicitation protocol infrastructure: elicitation/createelicitation/response flow via per-session bridge task with cancel-signal awareness and configurable timeout
  • Replace all hardcoded 120s timeouts in terminal.rs and mcp_bridge.rs with configurable [acp.timeouts] config section
  • Add agent-client-protocol-schema = "0.13.2" as direct workspace dep for unstable-elicitation and unstable-llm-providers feature gates

What is NOT in this PR

  • Agent loop calling elicit() from tier_loop (follow-up PR)
  • Provider override routing to LLM at turn time (follow-up PR)
  • TUI spinner for "Waiting for IDE input" (follow-up PR)

Security

  • providers/list response contains only api_type + base_url — vault-resolved API keys are never serialized
  • providers/set validates req.id against known provider names before inserting into override map (SEC-1 fix)
  • Provider state is connection-scoped (known limitation: tracked in SEC-2 follow-up issue)

Test plan

  • cargo build -p zeph-acp --features "unstable-elicitation,unstable-llm-providers" — clean
  • cargo clippy --workspace -- -D warnings — 0 warnings
  • cargo nextest run --workspace --lib --bins — 10019 passed
  • 73 unit tests in zeph-acp including 8 providers tests and 6 elicitation timeout tests

Closes #4456
Closes #4455

@github-actions github-actions Bot added enhancement New feature or request documentation Improvements or additions to documentation rust Rust code changes dependencies Dependency updates size/XL Extra large PR (500+ lines) and removed enhancement New feature or request labels May 19, 2026
Add ACP schema 0.13.2 Providers API (providers/list, providers/set,
providers/disable) as session-scoped overrides that do not persist after
session/close. Vault-resolved API keys are never exposed in responses.

Add Elicitation protocol infrastructure: elicitation/create request and
response flow via per-session bridge task with cancel-signal awareness.
The agent loop integration (calling elicit() from tier_loop) is tracked
separately in follow-up issues.

Replace hardcoded 120s timeouts in terminal.rs and mcp_bridge.rs with
configurable [acp.timeouts] section (elicitation_secs, terminal_secs,
mcp_secs).

Add agent-client-protocol-schema = "0.13.2" as direct workspace dep to
gate unstable-elicitation and unstable-llm-providers features.

Closes #4456
Closes #4455
@bug-ops bug-ops force-pushed the acp-elicitation-providers branch from d38c423 to 0bc9a97 Compare May 19, 2026 00:27
@bug-ops bug-ops enabled auto-merge (squash) May 19, 2026 00:27
@github-actions github-actions Bot added the enhancement New feature or request label May 19, 2026
…nitializations

Wire AcpTimeoutsConfig into the stdio and HTTP ACP server config builders
in src/acp.rs. Fixes MSRV check failure (E0063: missing field timeouts).
@bug-ops bug-ops merged commit 0ab419e into main May 19, 2026
32 checks passed
@bug-ops bug-ops deleted the acp-elicitation-providers branch May 19, 2026 00:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency updates documentation Improvements or additions to documentation enhancement New feature or request rust Rust code changes size/XL Extra large PR (500+ lines)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(acp): implement structured Elicitation protocol feat(acp): implement Providers API (providers/list, providers/set, providers/disable)

1 participant