Tianyi Cui 172005e0e6 fix(scope): align merged agent event contracts 2 mesi fa
..
acp 56e34619d7 Merge remote-tracking branch 'origin/master' into codex/pr224-rfc-rewrite 2 mesi fa
acp-agent 172005e0e6 fix(scope): align merged agent event contracts 2 mesi fa
app-boot cd9737d569 Gate JSDoc completeness on every package export 2 mesi fa
stdio-agent 172005e0e6 fix(scope): align merged agent event contracts 2 mesi fa
tool-ask-user 1e06fdbb86 refactor: colocate user interaction with ui packages 2 mesi fa
user-approval 56e34619d7 Merge remote-tracking branch 'origin/master' into codex/pr224-rfc-rewrite 2 mesi fa
user-interaction 1e06fdbb86 refactor: colocate user interaction with ui packages 2 mesi fa
README.md b29a8eca71 fix(review): reconcile sandbox and approval contracts 2 mesi fa

README.md

ui/ — editor/client integration surfaces

Integrations that expose the agent to an external editor or client. These are product packages: a real surface a user drives the harness through.

Package Role ctx key
acp/ Agent Client Protocol bridge: serves the agent to an ACP editor (Zed) over JSON-RPC stdio (drives ctx.agents/ctx.sessions)
user-approval/ One-shot user-approval mechanism, closed outcome vocabulary, audit events, and per-session approval policy ctx.approval
user-interaction/ Abstract human question/answer seam used by UI-backed confirmation tools ctx.userInteraction
tool-ask-user/ Model-facing ask_user_question tool over ctx.userInteraction (registers on ctx.tools)
stdio-agent/ Terminal stdio chat APP: the agent-core spine + console logger + readline UI + a pre-created main agent, with a bin (composition + bin)
acp-agent/ ACP server APP: the agent-core spine + JSONL persistence + the acp bridge (no stdout logger), with a bin (composition + bin)
app-boot/ Shared boot glue for the two app bins: .env loading, fail-loud Loader guards, snapshot-aware config resolution, the settle-the-tree boot sequence (library for the bins)

A UI integration is a client-driver plugin, not a loop change and not a capability seam: it consumes the existing agent/* event taxonomy and the dsh-agent factory. The readline UI is the unstructured analogue of the acp bridge and lives INSIDE the stdio app (the stdio-chat module of stdio-agent/): it is scaffolding for that one front door, not an independently swappable integration, so it carries no package boundary of its own.

user-approval, user-interaction, and tool-ask-user live here because asking a human is a UI-backed product affordance, not part of the providerless core spine. user-approval owns the one-shot ctx.approval decision mechanism and its policy tier; answerers remain with their UI channel owners. user-interaction remains provider-neutral (ctx.userInteraction), while tool-ask-user is its model-facing consumer and the app/bridge packages provide concrete providers.

stdio-agent and acp-agent are the two app packages: each composes the core/agent-core spine with its coupled front-door cluster (and owns the boot bin), so a leaf cordis.yml is the swappable backends plus one app entry plus any optional product tools. They live in ui/ because each IS a user-facing front door; the stdout-purity coupling (logger vs. no logger) becomes a property of the artifact rather than a leaf convention.