Skip to content

feat(acp): support non-blocking Codex questions with turn-bound answers #2286

Closed

Description

@mrmans0n

Part of #2283. Batch 1, delivery position 3/15. Recommended sequence: after #2285. This ordering is not a hard technical dependency unless a shared contract is required.

Problem

Upstream Codex maps request_user_input_async to form elicitation with _meta.codex.delivery: async. Alas has forms and request cancellation, but no dedicated interpretation of this optional-input contract.

Scope and acceptance criteria

  • Preserve and classify async question metadata separately from blocking questions. Keep work running and avoid mandatory-input notifications or queue/child blockers.
  • Render optional questions with supported choices and free-text answers; no automatic default submission.
  • Bind answers to the exact request/session/connection. Let the adapter steer into the originating turn; do not emulate with a fresh prompt.
  • Cancel/expire UI on $/cancel_request, turn end, session close and observation loss. Late answers cannot reach a successor turn. Preserve meaningful question/answer history without duplicating adapter replay.

Validation

Cover running state with an open form, optional partial answers, decline/cancel, end-turn/answer races, reconnect and repeated questions. Verify adapter late-answer warning behavior and both supported wire versions. This feature landed after the audited 2.5.0 release; verify release/backport before adopting.

Starting points

Paths were checked during the 2026-10-31 audit; relocate them if main has moved.

  • Packages/AlasCore/Sources/AlasACP/ACP/Protocol/ACPElicitation.swift
  • Packages/AlasCore/Sources/AlasACP/ACP/Session/ACPUserInput.swift
  • Packages/AlasCore/Sources/AlasSessions/ACP/Session/ACPElicitationCoordinator.swift
  • Alas/Sources/ACP/UI/ACPUserInputPrompt.swift

Delivery constraints

Keep Alas identified as Alas; never declare _meta.jetbrains.air to unlock this feature. Prefer standard ACP, otherwise add an explicitly negotiated client-neutral or Alas-specific extension in mrmans0n/codex-acp:alas and/or mrmans0n/claude-agent-acp:alas. Verify source inclusion, focused fork tests, immutable package publication and live feature behavior before updating Alas. Preserve unsupported behavior through an explicit fallback.

Follow repository testing policy: extend existing suites, keep decision/protocol logic in UI-free AlasCore, run affected package tests first and focused app checks where needed. Use event-gated concurrency fixtures, not fixed sleeps. Report source, fixture, live and CI evidence separately. Audit findings describe source gaps, not reproduced runtime failures.

ACP2 activation remains in #2213. This feature can ship on supported ACP1 paths independently; record exact adapter/version/protocol support and do not silently drop configured behavior on v2.

Primary sources

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions