panel: a message typed mid-turn reaches her
Souveraine.send returns false for a busy turn exactly as it does for a dead
server, and the sidebar rendered every false as "server unreachable" — so
typing while she worked showed the words, then a lie, and dropped the text.
The verbs existed on both sides since 93fe30a and nothing called them.
Type-while-busy now interjects, as the TUI has always done
(src/ui/app/mod.rs:1006). Esc with nothing attached raises a hand. A queued
count sits in the status row and says sent, not read, because 202 from
/interject means only that it was taken.
Deliberately unchanged: the two drain sites and their system/user registers.
Providers disagree about which one they want and that choice is not ready to
be made. Latency is unchanged too — turn.rs:600 runs a whole tool round
without looking, so a note sent into a fifteen-call round waits for it.
This commit is contained in:
parent
b3bbfeeac4
commit
da8d69af2f
2 changed files with 59 additions and 2 deletions
|
|
@ -425,6 +425,15 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\)
|
|||
? Translation.tr("Waiting on the agent\nSent at %1").arg(root.formatClockTime(Souveraine.turnStartedAt))
|
||||
: Translation.tr("Last turn took %1\nSent at %2").arg(root.formatTurnDuration(Souveraine.turnElapsedMs)).arg(root.formatClockTime(Souveraine.turnStartedAt))
|
||||
}
|
||||
StatusSeparator {
|
||||
visible: Ai.queuedInterjections > 0
|
||||
}
|
||||
StatusItem {
|
||||
visible: Ai.queuedInterjections > 0
|
||||
icon: "pan_tool"
|
||||
statusText: Translation.tr("%1 queued").arg(Ai.queuedInterjections)
|
||||
description: Translation.tr("Notes handed to the turn in flight.\nShe reads them at the next round boundary — a long tool round finishes first.\nQueued means sent, not yet read.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -790,10 +799,19 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\)
|
|||
}
|
||||
event.accepted = false; // No image, let text pasting proceed
|
||||
} else if (event.key === Qt.Key_Escape) {
|
||||
// Esc to detach file
|
||||
// Esc detaches a file first — that is the
|
||||
// older, narrower meaning and it keeps it.
|
||||
if (Ai.pendingFilePath.length > 0) {
|
||||
Ai.attachFile("");
|
||||
event.accepted = true;
|
||||
} else if (Souveraine.turnActive) {
|
||||
// Nothing attached and a turn is running:
|
||||
// Esc is the raised hand. Cancellation is
|
||||
// read at a round boundary, not mid-tool
|
||||
// (`src/server/turn.rs:248`), so partial
|
||||
// work survives.
|
||||
Souveraine.cancelTurn();
|
||||
event.accepted = true;
|
||||
} else {
|
||||
event.accepted = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue