1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//! The §8.2 short-verb invocations the shell shares across its three carriers:
//! the composer's buttons ([`super::input_bar`]), the §11 key bindings
//! ([`super::keys`]), and the conversation-row accelerator menu
//! ([`super::menus`]). Each verb comes in two spellings — one that resolves the
//! *focused* selection, and one that names its target outright, so the
//! pointer path never touches the focus.
//!
//! Coverage-excluded glue like the rest of `src/shell/*`: every body here
//! **constructs a boundary [`Action`] and posts it** (§8.5, REMOTE §9.8) — the
//! chokepoint and the enablement predicates it honours are tested; this file
//! only routes.
//!
//! **All five cross the wire** (bl-4841, completed bl-1747). Stop, Scan, Nudge
//! and the §8.6 hold answer read no receipt and never did — their durable
//! record is the `ops.jsonl` line — so they post and hold nothing. `Message`
//! was the last one held back, because its reply gated two frame-side facts in
//! the same breath: the draft clearing and the §3.4 pending echo. Both now hang
//! off the **receipt** ([`super::acting`]) rather than a synchronous `Ok`, so
//! this file constructs the variant and hands it over like every other verb,
//! and the `Cli` pair went with the last dispatch.
//!
//! No error is ever printed and dropped (INV-2): every outcome is the durable
//! `ops.jsonl` line the activity pane and the §7.3 banner read back per frame.
use crateAppModel;
use crateAction;
use Path;
use ShellState;
/// Stop the **selected conversation** (§8.2) — the §11 `x` binding and the Stop
/// button's one implementation. Re-derives its target from the focus, so it is
/// refused exactly where the button is disabled: no workspace, no selection, or
/// an agent the §11 seat's own `stoppable` gate says is not stoppable.
pub
/// Stop **one named agent** (§8.2) — the body [`stop_selected`] runs once it has
/// resolved the selection, and the same call the §11 conversation-row menu makes
/// on the row under the pointer (`super::menus`). The target is a parameter, not
/// a re-derivation, so the pointer path never touches the focus.
pub
/// Flush the focused workspace's inbox — `lernie scan` (§8.2): the §11 `f`
/// binding and the Scan button's one implementation.
pub
/// Flush **one named workspace's** inbox (§8.2) — [`scan_focused`]'s body, shared
/// with the conversation-row menu's Flush, which names the row's workspace rather
/// than the focus.
pub
/// Send one message (§8.2's resume gesture) — the composer's Message button
/// and Enter, one body: the boundary variant, posted, with the draft `key` it
/// was composed in held for the receipt. **Whether the words leave the screen
/// is the engine's answer, not the click's** (§5.3, REMOTE §9.8): a clean
/// deposit clears the draft and raises the §3.4 echo; anything else leaves them
/// where they can be fixed.
pub
/// Fire inference on one conversation from where it already stands (§8.2,
/// bl-9bef) — the composer's Nudge button, one body. It carries no payload at
/// all: the target is the parameter and the conversation's own state is the
/// prompt, so there is nothing here to clear and nothing to echo.
pub
/// Answer the invocation parked at one conversation's capability boundary
/// (§8.6) — the composer's two hold buttons, one body. The held `tool_use` id
/// is the executor's to derive; this seat says only *which conversation* and
/// *which verdict*, exactly as the line does.
pub