You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Pi chat: ask_user from @eko24ive/pi-ask shows no prompt card, answerable only in the terminal #1202
In a pi pane with the @eko24ive/pi-ask extension installed, the agent calls the ask_user tool.
In the terminal, pi shows the interactive question form (options, multi-select, preview pane).
In the web UI chat view, only the tool call line > ask_user appears. No prompt card is shown, and the question can't be seen or answered from the browser. I have to switch to the terminal to answer.
Expected: a prompt card with the question and its options, like for pi's built-in select/confirm/input dialogs or OmO's ask_user_question.
Likely cause:server/prompt.tsparsePiDialog only recognizes pi's built-in dialogs by their hint line (↑↓ navigate enter select escape/ctrl+c cancel / enter submit …). pi-ask renders its own component through ctx.ui.custom() with a different layout and hint line, so the parser never matches. Support could come from parsing pi-ask's form, or from reading the open ask_user tool call from the pi session file (the way omo-ask.ts does for OmO).
Triage notes (2026-10-23). Deferred from this fix wave; no code change yet.
Cause confirmed.@eko24ive/pi-ask draws its own form through ctx.ui.custom(). No dialog reader recognizes it: parsePiDialog only knows pi's built-in dialogs. So the chat shows only the ask_user tool line.
What a fix can rely on (checked in the 1.2.0 source):
Pending call.src/pending-ask.ts treats an ask_user call as open when all of these hold:
It is in an assistant message with stopReason: "toolUse".
No toolResult with that toolCallId follows it.
No custom entry of type ask:pending-dismissed names it.
The arguments are { title?, questions: [{ id, label?, prompt, type?: "single"|"multi"|"preview", options: [{ value, label, description?, preview?, recommended? }] }] }. Every question also gets an internal Type your own option.
Answer channel.docs/remote-events.md says: "Do not use terminal keystroke automation." The supported way to answer is pi.events from an extension in the same pi process:
@eko24ive/pi-ask:started carries flowId, toolCallId and the questions.
@eko24ive/pi-ask:submit takes answers by question id and option value.
Its keymaps are user-configurable (src/constants/keymaps.ts).
Why it is not a small change:
A card answered by keys needs a new responder in server/dialogs/shared.ts and a reader in server/dialogs/index.ts.
It overlaps open PR fix(prompt): support Pi rpiv question cards and safe navigation #1714 (rpiv ask_user_question). That PR changes the same readKnownPrompt path in server/prompt.ts, server/dialogs/shared.ts and server/dialogs/index.ts. It also already uses server/dialogs/pi-ask.ts for rpiv and adds the pi transcript lookup (piTranscriptPath + OmoAskReader).
A small Ovis pi extension that bridges pi.events, installed the way scripts/install-gjc-integration.ts installs the GJC extension. This is the path pi-ask supports and the sturdier one, but it is a larger feature.
Activity
bstu-j-yang commentedon Oct 16, 2026
devswha commentedon Oct 23, 2026
Triage notes (2026-10-23). Deferred from this fix wave; no code change yet.
Cause confirmed.
@eko24ive/pi-askdraws its own form throughctx.ui.custom(). No dialog reader recognizes it:parsePiDialogonly knows pi's built-in dialogs. So the chat shows only theask_usertool line.What a fix can rely on (checked in the 1.2.0 source):
Pending call.
src/pending-ask.tstreats anask_usercall as open when all of these hold:stopReason: "toolUse".toolResultwith thattoolCallIdfollows it.customentry of typeask:pending-dismissednames it.The arguments are
{ title?, questions: [{ id, label?, prompt, type?: "single"|"multi"|"preview", options: [{ value, label, description?, preview?, recommended? }] }] }. Every question also gets an internalType your ownoption.Answer channel.
docs/remote-events.mdsays: "Do not use terminal keystroke automation." The supported way to answer ispi.eventsfrom an extension in the same pi process:@eko24ive/pi-ask:startedcarriesflowId,toolCallIdand the questions.@eko24ive/pi-ask:submittakes answers by question id and option value.Its keymaps are user-configurable (
src/constants/keymaps.ts).Why it is not a small change:
server/dialogs/shared.tsand a reader inserver/dialogs/index.ts.ask_user_question). That PR changes the samereadKnownPromptpath inserver/prompt.ts,server/dialogs/shared.tsandserver/dialogs/index.ts. It also already usesserver/dialogs/pi-ask.tsfor rpiv and adds the pi transcript lookup (piTranscriptPath+OmoAskReader).Two possible directions:
server/dialogs/pi-ask-user.ts, reusing fix(prompt): support Pi rpiv question cards and safe navigation #1714's transcript plumbing. Users install nothing extra, but this goes against pi-ask's stated contract, and remapped keys break it.pi.events, installed the wayscripts/install-gjc-integration.tsinstalls the GJC extension. This is the path pi-ask supports and the sturdier one, but it is a larger feature.perf(prompt): read pi-ask's open calls only where a fallback card cou…
fix(prompt): keep pi-ask's forms off key-driven cards, rebind before …
docs(guide): say the pi-ask card follows pi's current branch and no g…
fix(prompt): ask the pane's pi for an open pi-ask form even before it…
fix(prompt): never send keys into a pi pane while a pi-ask form is op…
fix(prompt): offer no key-driven pi card while pi-ask holds the keys (#…
fix(prompt): let the extension's live answer outrank a session file /…
fix(prompt): count an ask_user call open on pi's live branch as an op…
fix(prompt): give a pi pane no generic card of guessed keys (#1202)
fix(prompt): keep the generic card for an OmO pane herdr labels pi (#…
fix(prompt): leave pi's own dialogs to the terminal where the pi-ask …
test(prompt): say why a pane the pi-ask extension serves gets no card…
feat(prompt): answer pi-ask's ask_user form from a chat card through …