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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//! **The acts the conversation offers on its turn** (bl-f251), as a compact
//! row of glyph-and-word controls under the field, and the one control that
//! opens the strip of acts it does not offer every day.
//!
//! # Only what the conversation offers is on the row
//!
//! The engine's own row for a conversation carries `offers` — *what may be
//! done to this conversation* (REMOTE §9.4's four gates, read as one set by
//! `crate::reply::agent`) — and this row reads it. A driver at rest is
//! offered `nudge`; a driver running is offered `stop`, and with it
//! `interrupt`, which is the stop that says something in the same gesture and
//! degrades to a plain send where nothing was running (REMOTE §8.2) — so it
//! stands beside `stop` and not beside `send`. Until the engine has answered
//! about the conversation at all, every act is offered: an absent reading is
//! not a refusal, and a control withheld on a guess would be this seat
//! predicting one the engine has not made.
//!
//! That reverses the records header's older ruling that the composer's
//! controls do not read the gates (`crate::ui::records::header`). The
//! reasoning there was that a control greyed on a snapshot predicts a refusal;
//! what stands here is not a prediction but the engine's own answer, read off
//! the same row the header paints, and a row that offered `nudge` on a
//! streaming conversation was a control whose every press was a refusal.
//!
//! # The strip is behind one control
//!
//! `records…` leads the row because it spends nothing — it only looks. After
//! it, [`MORE`] opens [`super::acts`]: the floor pair, the retarget, the flag
//! with its reason and the deletion with its arming. They are the acts on the
//! conversation as an object rather than on its turn, and a row of nine
//! controls under every conversation was the form the pane read as
//! (`docs/STYLE.md` §2). The strip opens on the control and on a row menu's
//! *flag…* or *delete…*, which lands the cursor in the box it named
//! (`crate::ui::model::fill`) — a box the operator was sent to cannot be
//! behind a fold they have not opened.
use crateOffer;
use crate;
use ;
/// The word that kills the driver. `nudge`'s opposite, offered where the
/// engine says the driver is running.
pub const STOP: &str = "stop";
/// The control that opens the strip. The ellipsis is
/// `crate::ui::convs::menu::leads_to`'s convention with no word before it:
/// what it leads to is every act that is not on this row.
pub const MORE: &str = "…";
/// **The word on the start mode's one control** (DESIGN §4.39): the role the
/// conversation is born on, asked for as the mode it puts the conversation in
/// rather than as the role's own name.
///
/// It is a WORD and not a picker or a box, and the reasoning is
/// `crate::ui::records::spine`'s own one noun over. A role resolves against
/// the governing config, this seat cannot list what that config declares, and
/// *"a picker over a list this seat cannot obtain would be capability
/// theatre"*. What it can do honestly is offer the one role choice the wire
/// itself names — REMOTE §9.21: *"the seat deposits the body back as
/// `/prompt` with `"role": "planner"`"* — which is a choice an operator
/// already has a word for and which claims to enumerate nothing. The day a
/// standing read lists a wall's roles, this control is where they go.
pub const PLAN: &str = "plan";
/// Whether the strip is open — the toolkit's memory rather than the model's,
/// for the reason a folded tool result's is (`crate::ui::chat`): a view state
/// no wire gesture corresponds to and no other fact can be asked for.
const OPEN_ID: &str = "the composer's strip";
/// Whether the engine offers `act` on the selected conversation — and every
/// act where it has not answered about it yet.
/// One glyph-and-word control, tagged with the op it fires.
/// **The same row under the composer's other mode** (DESIGN §4.39), carrying
/// what applies to a conversation that does not exist yet.
///
/// That is one thing: the start's own parameter. Every act [`render`] offers
/// is an act on a conversation's turn and every act behind [`MORE`] is an act
/// on a conversation as an object, so none of them is offered here — absent
/// and not greyed, which is this row's own rule read on a row with nothing to
/// read it against.
///
/// **It carries no `act:` token**, and that is the parity ledger holding
/// rather than moving (§4.16): this control fires no op. It states a field of
/// the `prompt` the start control is already tagged for, so a token here would
/// be a second control claiming one op — which is what the ledger counts.
/// Paint the row and take what it was given.