Repository navigation
fix(acp-registry): map OMP ask forms to single questions with choices - #29964
Closed
luminousify wants to merge 1 commit into
Closed
luminousify wants to merge 1 commit into
luminousify wants to merge 1 commit into
Conversation
omp's askDialog elicits q{N} fields with the question in title, the
header in description, oneOf consts as option labels, and an
unconditional q{N}__other free-text companion. The generic ACP
fallback reads options only from enum, promotes every property to its
own question, and maps the title/description pair the other way, so
the card loses its options, doubles every question into a phantom
"Other (type your own)" step, and swaps the header with the question
text. Typed custom answers land in q{N}, which omp drops because it
only accepts option labels there.
Add extractOmpElicitationForm at the existing provider flavor boundary
(mirrors droidAcp.ts), selected when the registry agent is omp or a
local omp/omp.exe/omp.cmd command. It folds the companion into the
question's native custom answer, maps the fields correctly, and
responds with the selected label in q{N} or custom text in
q{N}__other. Unrecognized forms keep the generic fallback.
Verified against omp 18.16.0 acp-agent.ts askDialog on the wire;
replay tests fail without the flavor wiring and pass with it.
Contributor
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — OMP ask forms now display choices as single questions and translate custom answers into OMP’s expected response fields. The change is provider-scoped, preserves fallback handling, and retains explicit user input before sending responses. You can add or adjust custom eligibility rules. Learn more. |
CoultonF
added a commit
to CoultonF/dotfiles
that referenced
this pull request
Nov 5, 2026
T3 Code doesn't handle OMP's ask tool correctly yet. It may work in a future release, so drop this rule once these are fixed: Fixes in progress (none merged): - pingdotgg/t3code#24012 preserve OMP single-choice questions and custom answers (main one to watch) - pingdotgg/t3code#21770 show titled options sent by any ACP agent - pingdotgg/t3code#29964 earlier OMP fix, closed unmerged Related open issues: - pingdotgg/t3code#27054 2 questions become 4 steps; placeholders sent - pingdotgg/t3code#27053 question panel omits the question text - pingdotgg/t3code#31495 multi: true questions rejected (OMP 18.16) - pingdotgg/t3code#26339 same question shown twice via ACP Registry Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
omp (oh-my-pi)
askDialogelicits a JSON-schema form the generic ACP fallback cannot read, so itsasktool breaks in three visible ways (#23505). This adds an OMP form handler at the existing provider flavor boundary, mirroringdroidAcp.ts.Selected when the registry agent is
ompor the local command basename isomp/omp.exe/omp.cmd. Unrecognized forms keep the generic fallback; other providers are untouched.Why the answer routing matters: omp reads
q{N}as one of the option labels andq{N}__otheras the custom text, and drops aq{N}value that is not a label - so on current main a typed custom answer is silently discarded, not just mis-rendered.Evidence
Before (flavor wiring disabled, tests added first):
Tests 3 failed | 1 passed- option-label, custom-answer, and cancellation scenarios fail; only the unrelated-form fallback passes.After (wiring restored):
Tests 4 passed-OMP elicitation $scenarioreplay cases.Full
AcpAdapterV2.test.ts:91 passed | 1 failed; the one failure (native session forks) reproduces on cleanmainin this environment and is unrelated.vp lintclean on the three files;tsc --noEmitclean forprovider-acp-registryandapps/server; commit hooks (fmt, lint, knip) passed.Wire shape verified against omp 18.16.0
packages/coding-agent/src/modes/acp/acp-agent.ts(askDialog->unstable_createElicitation), live-reproduced beforehand: card showed2/2, no options, header/question swapped, custom answer dropped.Scope limits: multi-select forms (
items.anyOf) are not recognized - the generated ACP decoder rejects that schema upstream of the flavor hook, so they never reachextractElicitationForm. An attachment-appended option selection degrades to a custom answer; omp resolves attachment references in custom input.Fixes #23505 (single-choice case). Independently implemented from the omp wire contract; happy to defer to #24012 if maintainers prefer that branch - the tests here cover selected labels, custom-answer routing, cancellation, and generic fallback either way.
Merge Danger
Door: two-way - one new file, a six-line wiring change, additive tests; deleting the wiring reverts behavior for everyone except local omp installs.
Blast Radius: narrow - only OMP-detected instances change; the generic fallback and every other provider keep their exact current path.