gaunt-sloth 2.0.0-alpha.29 → 2.0.0-alpha.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/commands/prDiscovery.js +6 -1
  2. package/dist/commands/prDiscovery.js.map +1 -1
  3. package/dist/tui/components/App.js +210 -45
  4. package/dist/tui/components/App.js.map +1 -1
  5. package/dist/tui/components/ApprovalPrompt.d.ts +31 -13
  6. package/dist/tui/components/ApprovalPrompt.js +108 -17
  7. package/dist/tui/components/ApprovalPrompt.js.map +1 -1
  8. package/dist/tui/components/ApprovalsPicker.d.ts +41 -0
  9. package/dist/tui/components/ApprovalsPicker.js +49 -0
  10. package/dist/tui/components/ApprovalsPicker.js.map +1 -0
  11. package/dist/tui/components/AttackBanner.d.ts +54 -0
  12. package/dist/tui/components/AttackBanner.js +65 -0
  13. package/dist/tui/components/AttackBanner.js.map +1 -0
  14. package/dist/tui/components/DebugPanel.js +7 -1
  15. package/dist/tui/components/DebugPanel.js.map +1 -1
  16. package/dist/tui/components/FramedLines.d.ts +25 -0
  17. package/dist/tui/components/FramedLines.js +24 -0
  18. package/dist/tui/components/FramedLines.js.map +1 -0
  19. package/dist/tui/components/SelectList.d.ts +16 -2
  20. package/dist/tui/components/SelectList.js +8 -4
  21. package/dist/tui/components/SelectList.js.map +1 -1
  22. package/dist/tui/components/StatusBar.js +1 -1
  23. package/dist/tui/components/StatusBar.js.map +1 -1
  24. package/dist/tui/keyBindings.d.ts +37 -0
  25. package/dist/tui/keyBindings.js +119 -0
  26. package/dist/tui/keyBindings.js.map +1 -0
  27. package/dist/tui/mouseStdin.d.ts +50 -2
  28. package/dist/tui/mouseStdin.js +148 -20
  29. package/dist/tui/mouseStdin.js.map +1 -1
  30. package/dist/tui/tuiSessionModule.js +59 -2
  31. package/dist/tui/tuiSessionModule.js.map +1 -1
  32. package/dist/tui/types.d.ts +23 -1
  33. package/package.json +5 -5
@@ -118,7 +118,12 @@ export async function runPrDiscovery(config) {
118
118
  }
119
119
  const runner = new GthAgentRunner(defaultStatusCallback, createPrDiscoveryResolvers(config, state));
120
120
  try {
121
- await runner.init(undefined, getPrDiscoveryAgentConfig(config, discoveryConfig), undefined);
121
+ // `command` stays undefined so the discovery agent runs on the chat prompt and does NOT pick up
122
+ // `commands.pr`'s posture; `owningCommand` is label-only, so a notice about this run says "the
123
+ // pr command" rather than something the user cannot connect to what they typed (GS2-81).
124
+ await runner.init(undefined, getPrDiscoveryAgentConfig(config, discoveryConfig), undefined, {
125
+ owningCommand: 'pr',
126
+ });
122
127
  await runner.processMessages([
123
128
  ...buildSystemMessages(config, readPrDiscoveryPrompt(config)),
124
129
  new HumanMessage(buildPrDiscoveryUserMessage(state)),
@@ -1 +1 @@
1
- {"version":3,"file":"prDiscovery.js","sourceRoot":"","sources":["../../src/commands/prDiscovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prDiscovery.js","sourceRoot":"","sources":["../../src/commands/prDiscovery.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,10 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { Box, Text, useApp, useInput } from 'ink';
4
4
  import { foldEvents, foldSubagentEvents, initialSubagentTree, initialTurnViewModel, } from '#src/tui/viewModel.js';
5
5
  import { buildRejectionMessage } from '@gaunt-sloth/core/core/shell/rejection.js';
6
+ import { attackBannerCopy, grantsRunAnyway, } from '@gaunt-sloth/core/core/shell/escalationSeverity.js';
6
7
  import { TranscriptViewport } from '#src/tui/components/TranscriptViewport.js';
7
8
  import { ApprovalPrompt } from '#src/tui/components/ApprovalPrompt.js';
9
+ import { AttackBanner } from '#src/tui/components/AttackBanner.js';
8
10
  import { LiveTurn, ChecklistPanel } from '#src/tui/components/LiveTurn.js';
9
11
  import { extractActiveChecklist } from '#src/tui/viewModel.js';
10
12
  import { StatusBar } from '#src/tui/components/StatusBar.js';
@@ -15,11 +17,13 @@ import { ClearBanner } from '#src/tui/components/ClearBanner.js';
15
17
  import { LaunchBanner } from '#src/tui/components/LaunchBanner.js';
16
18
  import { MouseProvider } from '#src/tui/useMouse.js';
17
19
  import { DebugPanel, debugPanelLines, DEBUG_TABS, } from '#src/tui/components/DebugPanel.js';
18
- import { approvalsRungNotice, approvalsStatusNotice, approvalsTrustNotice, createCommandRegistry, dispatchSlashCommand, parseSlashCommand, toolsToggleNotice, } from '@gaunt-sloth/agent/modules/slashCommands.js';
20
+ import { approvalPostureChoices, approvalsRungNotice, approvalsStatusNotice, approvalsTrustNotice, createCommandRegistry, dispatchSlashCommand, parseSlashCommand, toolsToggleNotice, } from '@gaunt-sloth/agent/modules/slashCommands.js';
21
+ import { ApprovalsPicker } from '#src/tui/components/ApprovalsPicker.js';
19
22
  import { TerminalSizeProvider, useTerminalSize } from '#src/tui/useTerminalSize.js';
20
23
  import { findMatches, scrollOffsetForLine, stepMatch } from '#src/tui/debugSearch.js';
21
24
  import { useTranscriptScroll } from '#src/tui/useTranscriptScroll.js';
22
25
  import { isComposingKeystroke, WHEEL_ROWS_PER_NOTCH } from '#src/tui/transcriptScroll.js';
26
+ import { TUI_HINT_SUFFIX, TUI_KEY_BINDINGS } from '#src/tui/keyBindings.js';
23
27
  /** Rows of clipping viewport in the docked debug panel (default / restored size). */
24
28
  const DEBUG_VIEWPORT_HEIGHT = 8;
25
29
  /** Rows of chrome around the debug viewport we leave for when it is maximised (panel
@@ -85,6 +89,10 @@ export function App(props) {
85
89
  // Mirror for the synchronous approval useInput handler, so `y` can read the current posture
86
90
  // without a stale closure.
87
91
  const approvalsRef = useRef(props.initialApprovals);
92
+ // CFG-39 — the open `/approvals` picker's rows, or null when no picker is showing. Transient
93
+ // chrome: unlike the status notice it is never committed to the transcript, and it owns the
94
+ // keyboard while mounted (the prompt is suspended below, as it is for a pending approval).
95
+ const [approvalsPicker, setApprovalsPicker] = useState(null);
88
96
  // Whether to show the post-`/clear` "history cleared" banner. Hidden again the moment the next
89
97
  // user turn starts so it doesn't linger above a fresh conversation.
90
98
  const [clearedBanner, setClearedBanner] = useState(false);
@@ -96,6 +104,16 @@ export function App(props) {
96
104
  // The head is the approval on screen AND the one that owns the keyboard. Deriving both from this
97
105
  // single expression is what keeps those two facts from drifting apart.
98
106
  const pendingApproval = approvalQueue[0] ?? null;
107
+ // [[TUI-C68]] §6.1 — attack halts, queued exactly as approvals are, and for the same reason: the
108
+ // head is what is on screen AND what owns the keyboard, from one expression.
109
+ const [attackQueue, setAttackQueue] = useState([]);
110
+ const pendingAttack = attackQueue[0] ?? null;
111
+ // What the human has typed into the banner. Held in a ref BESIDE the state because Ink dispatches
112
+ // every keypress parsed out of one stdin chunk in a synchronous loop: typing `run` can run the
113
+ // handler three times before a single re-render, and reading the state would give all three the
114
+ // pre-`r` value, leaving the buffer as `n`. Every write below sets both.
115
+ const [attackTyped, setAttackTyped] = useState('');
116
+ const attackTypedRef = useRef('');
99
117
  // Mirror of toolsExpanded for the slash-command handler (memoized without it in deps), so
100
118
  // /verbose can compute the next state without a stale closure or a side effect in the updater.
101
119
  const toolsExpandedRef = useRef(false);
@@ -293,8 +311,13 @@ export function App(props) {
293
311
  },
294
312
  // eslint-disable-next-line react-hooks/exhaustive-deps
295
313
  [agent]);
296
- // CFG-26 — `/approvals` with no argument: DISPLAY the posture. Read-only by construction; it
297
- // never touches the runner's state.
314
+ // CFG-26/CFG-39 — `/approvals` with no argument: DISPLAY the posture, then OFFER the picker.
315
+ //
316
+ // Both halves, because they answer two different questions people ask at this moment: "what am I
317
+ // on right now" (the notice — with the rater profile, the grant counts and the deny count, none
318
+ // of which a picker row carries) and "what else could I be on" (the picker). The notice is
319
+ // committed to the transcript and stays; the picker is transient chrome that vanishes on Enter or
320
+ // Esc. Reading the posture never touches the runner's state — only a row selection does.
298
321
  const showApprovals = useCallback(() => {
299
322
  if (!agent.getApprovals) {
300
323
  push({
@@ -307,8 +330,15 @@ export function App(props) {
307
330
  const { approvals: current, allowlist, deny, grants, trust } = agent.getApprovals();
308
331
  approvalsRef.current = current;
309
332
  setApprovals(current);
310
- const { title, lines, tone } = approvalsStatusNotice(current, allowlist, deny, grants, trust);
333
+ // `interactive` suppresses the notice's TEXT copy of the mode list, because the picker below is
334
+ // about to render the same four rows. Every non-TTY surface leaves it unset and gets the text.
335
+ const { title, lines, tone } = approvalsStatusNotice(current, allowlist, deny, grants, trust, {
336
+ interactive: true,
337
+ });
311
338
  push({ kind: 'notice', title, lines, tone: tone ?? 'info' });
339
+ // Only offer to CHANGE the mode when this session can actually apply one.
340
+ if (agent.setApprovalRung)
341
+ setApprovalsPicker(approvalPostureChoices(current.rung));
312
342
  // eslint-disable-next-line react-hooks/exhaustive-deps
313
343
  }, [agent]);
314
344
  // EXT-70 §4.7.1 — `/approvals trust|untrust <server> <hint…>`: believe, or stop believing,
@@ -330,6 +360,29 @@ export function App(props) {
330
360
  },
331
361
  // eslint-disable-next-line react-hooks/exhaustive-deps
332
362
  [agent]);
363
+ // [[TUI-C68]] §6.1 — answer the attack banner and dequeue it. `run-anyway` runs exactly one
364
+ // command, so it is the only answer that gets a notice: what a user cannot otherwise observe is
365
+ // the SCOPE of what they granted (the command running is visible; only this one running is not),
366
+ // and the wording is core's so neither surface can promise a persistence the runner never
367
+ // performs. `stop` gets none — the runner throws the halt, whose message is the whole
368
+ // explanation and already reaches the transcript through runTurn's catch.
369
+ const resolveAttack = (answer) => {
370
+ const head = pendingAttack;
371
+ if (!head)
372
+ return;
373
+ head.resolve(answer);
374
+ attackTypedRef.current = '';
375
+ setAttackTyped('');
376
+ setAttackQueue((q) => q.slice(1));
377
+ if (answer !== 'run-anyway')
378
+ return;
379
+ push({
380
+ kind: 'notice',
381
+ title: 'Running a command the rater called an attack',
382
+ lines: [attackBannerCopy().granted],
383
+ tone: 'warn',
384
+ });
385
+ };
333
386
  // Resolve the currently-shown approval (the queue head) and commit a brief notice so the
334
387
  // decision reads in the transcript (TUI-C14 notice conventions). Dequeues the head so the next
335
388
  // queued approval (if any) surfaces. Approve carries the chosen scope; reject is fail-closed.
@@ -337,13 +390,19 @@ export function App(props) {
337
390
  const head = pendingApproval;
338
391
  if (!head)
339
392
  return;
340
- if (decision === 'reject') {
393
+ if (decision === 'reject' || decision === 'reject-always') {
394
+ // [[TUI-C26]] §6 — *always reject* is a rejection that is also REMEMBERED: the runner records
395
+ // a deny entry for this call, and the matcher consults it before anything else, so the next
396
+ // identical call never reaches a person. `once` is the ordinary refusal and the fallthrough
397
+ // every unbound key lands on.
398
+ const sticky = decision === 'reject-always';
341
399
  // EXT-58 (§7): hand the model the moves it has (re-call with a justification, a different
342
400
  // command, or ask the user) plus — when the rater named an already-granted alternative
343
401
  // (§4.4) — that tool and the clause saying it will not interrupt the user. This is the
344
402
  // message the MODEL sees; the on-screen notice below is unchanged.
345
403
  head.resolve({
346
404
  type: 'reject',
405
+ ...(sticky ? { scope: 'session' } : {}),
347
406
  message: buildRejectionMessage({
348
407
  source: 'user',
349
408
  toolName: head.pending.name,
@@ -352,38 +411,34 @@ export function App(props) {
352
411
  });
353
412
  push({
354
413
  kind: 'notice',
355
- title: 'Command rejected',
356
- lines: ['The shell command was not run; the agent was told you declined.'],
414
+ title: sticky ? 'Command refused for this session' : 'Command rejected',
415
+ lines: sticky
416
+ ? [
417
+ // Exactly what it does, and no more. There is no persisted deny store, so a line
418
+ // implying one would be §6's "offered and then refused" with the evidence hidden —
419
+ // and the refusal itself is real, which is what makes the honest wording affordable.
420
+ // The call is deliberately NOT quoted here: a transcript notice is painted raw, and
421
+ // the command is the untrusted string this whole dialog frames.
422
+ 'This call will be refused for the rest of this session, without asking again.',
423
+ 'Nothing was saved to the project, so a new session will ask about it again.',
424
+ ]
425
+ : ['The shell command was not run; the agent was told you declined.'],
357
426
  tone: 'warn',
358
427
  });
359
428
  }
360
429
  else {
361
430
  const scope = decision;
362
431
  head.resolve({ type: 'approve', scope });
363
- // CFG-28 (§4.2) — a `catastrophic` approval is NEVER sticky: the runner clamps the
364
- // allow-list write, so a `session`/`always` keypress grants exactly this one invocation and
365
- // the next variant prompts again. The scope is still sent unchanged (the clamp is core's,
366
- // and is the single chokepoint for every surface); the NOTICE is what has to be true, both
367
- // in its detail line and in the scope it names. §6: a control offered and then refused reads
368
- // as a bug, and a confirmation of a persistence that did not happen is the same failure with
369
- // the evidence hidden. Withdrawing `[a]lways` from the menu is [[TUI-C26]]'s.
370
- // EXT-70 §6 — the general form of the same rule. `grantPreview` is absent exactly where the
371
- // runner would store nothing, and `catastrophic` is one of its cases (the runner discards the
372
- // grant for that outcome), so the confirmation branches on WHAT WAS STORED rather than on the
373
- // one outcome. Without that, a command that does not statically resolve — or a tool call
374
- // nothing can attribute — was confirmed as remembered while the store stayed empty, which is
375
- // the same failure the catastrophic clamp exists to prevent, one case further along.
376
- const sticky = head.pending.grantPreview !== undefined;
377
- const catastrophic = head.pending.safetyVerdict?.outcome === 'catastrophic';
378
- const effectiveScope = sticky ? scope : 'once';
432
+ // CFG-28 (§4.2) / EXT-70 §6 — **a scope this dialog confirms is a scope the gate will
433
+ // honour.** A sticky approve is reachable only where `grantPreview` is present, which the
434
+ // runner attaches exactly where it would store something and withholds for a `catastrophic`
435
+ // verdict, a command it cannot statically resolve, and a call it cannot attribute. The keys
436
+ // are gated on the same value in `useInput`, so there is no keystroke that arrives here
437
+ // asking for a persistence the store will discard — which is why this says what the pressed
438
+ // scope means and needs no branch for a promise that could not be kept. **The gate is what
439
+ // carries that, not this text:** an honest confirmation does not make an approval the menu
440
+ // never offered safe, because the command runs either way.
379
441
  const describe = () => {
380
- if (!sticky && scope !== 'once') {
381
- return catastrophic
382
- ? 'Approved this once — a command rated catastrophic is never remembered, so the next ' +
383
- 'one like it will ask again.'
384
- : 'Approved this once — there is nothing about this call that can be remembered, so ' +
385
- 'the next one like it will ask again.';
386
- }
387
442
  // EXT-71 §3.1 — a grant is exactly the command the human saw, so the confirmation says
388
443
  // that and not "this operation". A longer command that merely starts with it asks again.
389
444
  if (scope === 'session')
@@ -394,7 +449,7 @@ export function App(props) {
394
449
  };
395
450
  push({
396
451
  kind: 'notice',
397
- title: `Command approved (${effectiveScope})`,
452
+ title: `Command approved (${scope})`,
398
453
  lines: [describe()],
399
454
  tone: 'info',
400
455
  });
@@ -451,6 +506,10 @@ export function App(props) {
451
506
  transcript,
452
507
  resolvedConfig: props.resolvedConfig,
453
508
  dumpDebugSession: props.dumpDebugSession,
509
+ // TUI-C63 — this surface's own keyboard, for the `/help` bindings section. The readline
510
+ // session dispatches through the same registry and passes none, so its `/help` never
511
+ // grows keys it does not have (GS2-87).
512
+ keyBindings: TUI_KEY_BINDINGS,
454
513
  }, { duringRun: running });
455
514
  if (result.clearTranscript) {
456
515
  setTranscript([]);
@@ -562,28 +621,119 @@ export function App(props) {
562
621
  // 3. While the panel is focused → Tab/Shift+Tab cycle sections, ↑/↓ scroll one line,
563
622
  // PageUp/PageDown page-step, m maximises, Esc unfocuses.
564
623
  useInput((input, key) => {
624
+ // [[TUI-C68]] §6.1 — the ATTACK BANNER owns the keyboard ahead of everything, including a
625
+ // pending approval. The two are separate questions and the run is blocked on both, but this one
626
+ // is the irreversible one, so it is answered first and the approval prompt stands down (it is
627
+ // not even rendered while a banner is up).
628
+ //
629
+ // **The safe action is the FALLTHROUGH, and a buffer is what threatens it.** The approval menu
630
+ // grants only on an offered key and rejects every other keystroke; a buffer inverts that by
631
+ // accumulating keystrokes instead of rejecting them. It is restored structurally, not by
632
+ // hoping:
633
+ //
634
+ // - **Enter is the only commit, and it grants only on `grantsRunAnyway`** — core's matcher,
635
+ // the same one the readline surface answers with, so what the banner says is answerable and
636
+ // what this handler accepts cannot drift. A prefix, a near miss, a bare Enter and whatever a
637
+ // cat leaves in the buffer all take the one `stop` path.
638
+ // - **One shot.** Enter on anything else resolves the halt; it never re-asks. A re-prompt turns
639
+ // a typo into another chance at an irreversible action.
640
+ // - **`q` and `Esc` abort with text already typed**, so someone who starts typing and thinks
641
+ // better of it is not trapped. `q` costs nothing to bind — the phrase contains no `q`.
642
+ // Ctrl+C aborts too, but never arrives here: Ink claims it before any `useInput` subscriber
643
+ // and unmounts the app, which ends the session and is a blunter abort than these two.
644
+ //
645
+ // **A chord is declined, not blanked.** The approval branch below maps a modified key to the
646
+ // empty string so a chord cannot stand in for an approval key; here the equivalent is refusing
647
+ // to BUFFER it, because blanking would silently type nothing while the user believes they
648
+ // pressed something. `shift` is excluded from the test for the same reason it is there: it is
649
+ // how a capital is typed, not a different key.
650
+ if (pendingAttack) {
651
+ const chord = key.ctrl || key.meta || key.super || key.hyper;
652
+ if (key.return) {
653
+ resolveAttack(grantsRunAnyway(attackTypedRef.current) ? 'run-anyway' : 'stop');
654
+ return;
655
+ }
656
+ if (key.escape || (!chord && input.toLowerCase() === 'q')) {
657
+ resolveAttack('stop');
658
+ return;
659
+ }
660
+ if (key.backspace || key.delete) {
661
+ attackTypedRef.current = attackTypedRef.current.slice(0, -1);
662
+ setAttackTyped(attackTypedRef.current);
663
+ return;
664
+ }
665
+ // Only plain, printable text is buffered. `input` is empty for the navigation keys ink
666
+ // reports as names, and control characters are refused outright rather than escaped: this
667
+ // buffer is compared against one exact phrase, so anything it cannot match is better dropped
668
+ // than repaired — and neutralising is the framing renderer's job, not a text field's.
669
+ if (!chord && input.length > 0 && !/[\p{Cc}]/u.test(input)) {
670
+ attackTypedRef.current += input;
671
+ setAttackTyped(attackTypedRef.current);
672
+ }
673
+ return;
674
+ }
565
675
  // Highest priority: a pending tool approval OWNS the keyboard (EXT-9 Phase B2). While one is
566
- // shown, o/s/a resolve approve with the matching scope; anything else (n, Esc, Enter, …)
567
- // resolves reject — fail-closed, mirroring the readline path. We swallow the key either way
568
- // so it can't fall through to abort/debug handling or get typed into the prompt.
676
+ // shown, `o` approves once, `s`/`a` approve with the matching scope and `d` refuses for the
677
+ // session — each where that control is on offer — and anything else (n, Esc, Enter, …)
678
+ // resolves reject, fail-closed, mirroring the readline path. We swallow the key either way so
679
+ // it can't fall through to abort/debug handling or get typed into the prompt.
680
+ //
681
+ // **The safe action is the FALLTHROUGH, and no key may erode it.** Doing nothing in
682
+ // particular — Enter, a stray keystroke, a cat on the keyboard — refuses this one call and
683
+ // writes nothing. §1.1's property is that everything the menu does not offer is a refusal, and
684
+ // it has two halves that are easy to do one of:
685
+ //
686
+ // - **Every key is bound only where its control was OFFERED.** `grantPreview`/`denyPreview` are
687
+ // absent exactly where the runner would store nothing, and they are separate questions — so
688
+ // `s`/`a` need `canGrant` and `d` needs `canDeny`. On a reduced menu (every `catastrophic`
689
+ // verdict, a command that does not statically resolve, an unattributable tool call) an
690
+ // ungated `a` would approve and RUN a command the dialog never offered to approve, which is
691
+ // what the reduction exists to prevent; an ungated `d` would turn a mistyped grant into a
692
+ // standing refusal. Off-menu keys take the one-shot path like any other.
693
+ // - **A chord is not the key it carries.** Ink reports Ctrl+D as the bare letter `d` with
694
+ // `key.ctrl` set, so without this guard every control here has a hidden second spelling that
695
+ // nothing advertises — Ctrl+A writing an allow-list entry, Ctrl+D a session refusal — reached
696
+ // by the keystroke a user presses to mean *get me out of this*. Modified is unbound.
697
+ //
698
+ // **The enumeration is complete against ink's five modifier flags**, and completeness is the
699
+ // point: this is a disjunction, so a flag left out of it is a live approval path, not a
700
+ // cosmetic omission. Ink sets `ctrl`, `meta`, `shift`, `super` and `hyper` (`use-input.js`);
701
+ // `capsLock` and `numLock` sit on the same object and are deliberately NOT here — they are
702
+ // lock states rather than modifiers, and refusing every key pressed with CapsLock on would be
703
+ // a new bug rather than a guard. `shift` is the one modifier deliberately excluded: it is how
704
+ // a capital `D` is typed, not a different key.
569
705
  //
570
- // CFG-27 removed the `y` key ("switch to auto-approve and approve this one"). Spec §6's
571
- // escalation menu offers five choices — ask to explain · approve · always approve · reject ·
572
- // always reject — and a per-prompt change of RUNG is not one of them: the ladder has no
573
- // "turn the gate down from here" action, so keeping the key would have meant inventing one.
574
- // [[TUI-C26]] builds the five-choice menu (and the §6.1 attack banner) on this seam.
706
+ // `super`/`hyper` reach `useInput` through the kitty keyboard protocol's CSI-u form, which
707
+ // ink's `parse-keypress` decodes whether or not the protocol was ever enabled — enabling it
708
+ // only makes a terminal SEND those bytes. Nothing here enables it, so the path is not
709
+ // reachable from a real terminal today; it is one option away from being reachable, and the
710
+ // spec drives it directly to prove each flag of this guard carries its own weight.
711
+ //
712
+ // There is no rung-switching key: §6's menu has no "turn the gate down from here" action, so
713
+ // binding one would have meant inventing it. §6's *ask to explain* is likewise unbound until it
714
+ // exists (EXT-104) — a key that does nothing is worse than an absent one.
575
715
  if (pendingApproval) {
576
- const ch = input.toLowerCase();
716
+ const ch = key.ctrl || key.meta || key.super || key.hyper ? '' : input.toLowerCase();
717
+ const canGrant = pendingApproval.pending.grantPreview !== undefined;
718
+ const canDeny = pendingApproval.pending.denyPreview !== undefined;
577
719
  if (ch === 'o')
578
720
  resolveApproval('once');
579
- else if (ch === 's')
721
+ else if (ch === 's' && canGrant)
580
722
  resolveApproval('session');
581
- else if (ch === 'a')
723
+ else if (ch === 'a' && canGrant)
582
724
  resolveApproval('always');
725
+ else if (ch === 'd' && canDeny)
726
+ resolveApproval('reject-always');
583
727
  else
584
728
  resolveApproval('reject');
585
729
  return;
586
730
  }
731
+ // CFG-39 — while the `/approvals` picker is open it OWNS the keyboard, exactly as a pending
732
+ // approval does. <SelectList> is a useInput subscriber too and Ink runs every subscriber, so
733
+ // without this the arrow keys would also scroll the transcript and Esc would both cancel the
734
+ // picker and jump to the newest output. Returning here leaves the picker the only claimant.
735
+ if (approvalsPicker)
736
+ return;
587
737
  if (key.escape && runningRef.current) {
588
738
  abortRef.current?.abort();
589
739
  return;
@@ -835,18 +985,33 @@ export function App(props) {
835
985
  });
836
986
  // eslint-disable-next-line react-hooks/exhaustive-deps
837
987
  }, []);
988
+ // [[TUI-C68]] §6.1 — attack halts bridged from the runner. Each one mounts the <AttackBanner>,
989
+ // which owns the keyboard until it is answered. Absent on the fixture path, where the runner
990
+ // halts on its own — an unsubscribed surface keeps the halt, which is what makes forgetting to
991
+ // wire this the safe failure.
992
+ useEffect(() => {
993
+ if (!props.subscribeAttackHalt)
994
+ return;
995
+ return props.subscribeAttackHalt((record) => {
996
+ setAttackQueue((q) => [...q, record]);
997
+ });
998
+ // eslint-disable-next-line react-hooks/exhaustive-deps
999
+ }, []);
838
1000
  // The greeting is an intro, not a permanent fixture: show it only before the first
839
1001
  // exchange, so it stops padding the bottom dock once the conversation is underway.
840
1002
  const showIntro = !initialMessage && transcript.length === 0 && !live;
841
1003
  // Extract active checklist items from live turn or transcript so it stays pinned at the bottom.
842
1004
  const activeChecklist = useMemo(() => extractActiveChecklist(live, transcript), [live, transcript]);
843
- return (_jsx(TerminalSizeProvider, { size: terminalSize, children: _jsx(MouseProvider, { subscribe: props.subscribeMouse, enabled: mouseEnabled, children: _jsxs(Box, { flexDirection: "column", height: terminalRows, children: [_jsxs(TranscriptViewport, { items: transcript, budgetRows: terminalRows, columns: terminalColumns, toolsExpanded: toolsExpanded, scroll: transcriptScroll, regionRows: transcriptRegionRows, geometry: transcriptGeometry, children: [clearedBanner ? _jsx(ClearBanner, {}) : null, showIntro && props.showLaunchBanner ? (_jsx(LaunchBanner, { model: modelDisplayName, provider: props.modelProviderType })) : null, showIntro ? _jsx(Text, { dimColor: true, children: readyMessage.trim() }) : null, live ? _jsx(LiveTurn, { turn: live, toolsExpanded: toolsExpanded, streaming: true }) : null] }), _jsxs(Box, { flexDirection: "column", flexShrink: 0, children: [debugVisible ? (_jsx(DebugPanel, { subagents: subagents, historyLines: debugHistory, systemLines: debugSystem, toolsLines: debugTools, mcpLines: debugMcp, responseLines: debugResponse, activeTab: debugTab, scrollOffset: debugScroll, focused: debugFocused, viewportHeight: debugViewport, maximized: debugMaximized, searchQuery: debugSearchQuery, searchActive: debugSearchInput, matchCount: debugMatches.length, currentMatchIndex: debugSearchCurrent, currentMatchLine: currentMatchLine })) : null, activeChecklist ? _jsx(ChecklistPanel, { items: activeChecklist }) : null, pendingApproval ? _jsx(ApprovalPrompt, { pending: pendingApproval.pending }) : null, _jsx(Rule, {}), _jsx(NoticeBar, { advisories: props.advisories }), _jsx(McpFailureBar, { failures: props.mcpFailures }), _jsx(StatusBar, { running: running, mode: mode, modelDisplayName: modelDisplayName, turnCount: turnCount, debugHint: debugVisible && !debugFocused, approvals: approvals
1005
+ return (_jsx(TerminalSizeProvider, { size: terminalSize, children: _jsx(MouseProvider, { subscribe: props.subscribeMouse, enabled: mouseEnabled, children: _jsxs(Box, { flexDirection: "column", height: terminalRows, children: [_jsxs(TranscriptViewport, { items: transcript, budgetRows: terminalRows, columns: terminalColumns, toolsExpanded: toolsExpanded, scroll: transcriptScroll, regionRows: transcriptRegionRows, geometry: transcriptGeometry, children: [clearedBanner ? _jsx(ClearBanner, {}) : null, showIntro && props.showLaunchBanner ? (_jsx(LaunchBanner, { model: modelDisplayName, provider: props.modelProviderType })) : null, showIntro ? _jsx(Text, { dimColor: true, children: readyMessage.trim() }) : null, live ? _jsx(LiveTurn, { turn: live, toolsExpanded: toolsExpanded, streaming: true }) : null] }), _jsxs(Box, { flexDirection: "column", flexShrink: 0, children: [debugVisible ? (_jsx(DebugPanel, { subagents: subagents, historyLines: debugHistory, systemLines: debugSystem, toolsLines: debugTools, mcpLines: debugMcp, responseLines: debugResponse, activeTab: debugTab, scrollOffset: debugScroll, focused: debugFocused, viewportHeight: debugViewport, maximized: debugMaximized, searchQuery: debugSearchQuery, searchActive: debugSearchInput, matchCount: debugMatches.length, currentMatchIndex: debugSearchCurrent, currentMatchLine: currentMatchLine })) : null, activeChecklist ? _jsx(ChecklistPanel, { items: activeChecklist }) : null, pendingAttack ? _jsx(AttackBanner, { halt: pendingAttack.halt, typed: attackTyped }) : null, pendingApproval && !pendingAttack ? (_jsx(ApprovalPrompt, { pending: pendingApproval.pending })) : null, approvalsPicker && !pendingApproval && !pendingAttack ? (_jsx(ApprovalsPicker, { choices: approvalsPicker, onSelect: (rung) => {
1006
+ setApprovalsPicker(null);
1007
+ applyApprovalRung(rung);
1008
+ }, onCancel: () => setApprovalsPicker(null) })) : null, _jsx(Rule, {}), _jsx(NoticeBar, { advisories: props.advisories }), _jsx(McpFailureBar, { failures: props.mcpFailures }), _jsx(StatusBar, { running: running, mode: mode, modelDisplayName: modelDisplayName, turnCount: turnCount, debugHint: debugVisible && !debugFocused, approvals: approvals
844
1009
  ? {
845
1010
  rung: approvals.rung,
846
1011
  raterProfile: approvals.rater,
847
1012
  }
848
- : undefined }), !debugFocused && !pendingApproval ? (_jsx(PromptInput, { onSubmit: handleSubmit, commands: registry, onMenuStateChange: (active) => {
1013
+ : undefined }), !debugFocused && !pendingApproval && !pendingAttack && !approvalsPicker ? (_jsx(PromptInput, { onSubmit: handleSubmit, commands: registry, onMenuStateChange: (active) => {
849
1014
  slashMenuActiveRef.current = active;
850
- } })) : null, _jsx(Text, { dimColor: true, children: exitMessage.trim() }), _jsx(Rule, {})] })] }) }) }));
1015
+ } })) : null, _jsx(Text, { dimColor: true, children: `${exitMessage.trim()}${TUI_HINT_SUFFIX}` }), _jsx(Rule, {})] })] }) }) }));
851
1016
  }
852
1017
  //# sourceMappingURL=App.js.map