diff --git a/harness/.pi/extensions/gate/__tests__/fake_pi_runtime.js b/harness/.pi/extensions/gate/__tests__/fake_pi_runtime.js index a4c037b5..488ff155 100644 --- a/harness/.pi/extensions/gate/__tests__/fake_pi_runtime.js +++ b/harness/.pi/extensions/gate/__tests__/fake_pi_runtime.js @@ -6,6 +6,7 @@ function createFakePi() { const tools = new Map(); const ctx = { hasUI: true, + mode: "tui", cwd: "/tmp/fake-pi-session", notifications: [], uiCalls: [], diff --git a/harness/.pi/extensions/tht-gate.js b/harness/.pi/extensions/tht-gate.js index 83f78ca9..a36486e4 100644 --- a/harness/.pi/extensions/tht-gate.js +++ b/harness/.pi/extensions/tht-gate.js @@ -316,7 +316,10 @@ export async function emitAndWait(ctx, descriptor) { } async function reLoop(ctx) { - if (ctx.hasUI) + // TUI-only: "Esc"/terminal navigation has no meaning in RPC (the browser + // renders widget buttons). Guard on ctx.mode, NOT ctx.hasUI — on pi >=0.80 + // hasUI is true in RPC too, so this warning would leak to the frontend. + if (ctx.mode === "tui") await ctx.ui.notify( "Esc non chiude il gate: usa Torna indietro / Esci / Altro dalle opzioni.", "warning", @@ -648,7 +651,7 @@ export default function (pi) { const resp = await emitAndWait(ctx, widget); outcome = resolveConfirmOutcome(resp); if (outcome.kind !== "unknown") break; - await ctx.ui.notify("Scegli «Conferma e prosegui» o «Rifiuta».", "warning"); + await ctx.ui.notify("Scegli «Salva e procedi» o «Rifiuta».", "warning"); } if (outcome.kind === "freetext") return textResult(