@sagmans/dsh-tui 0.1.2 → 0.3.0
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.
- package/README.md +196 -17
- package/cordis.patch.yml +4 -2
- package/lib/agent/host.d.ts +14 -0
- package/lib/agent/host.d.ts.map +1 -1
- package/lib/agent/host.js +20 -4
- package/lib/agent/host.js.map +1 -1
- package/lib/agent/model.d.ts +50 -0
- package/lib/agent/model.d.ts.map +1 -1
- package/lib/agent/model.js +87 -1
- package/lib/agent/model.js.map +1 -1
- package/lib/agent/present.d.ts +7 -1
- package/lib/agent/present.d.ts.map +1 -1
- package/lib/agent/present.js +33 -4
- package/lib/agent/present.js.map +1 -1
- package/lib/agent/presets.d.ts +7 -1
- package/lib/agent/presets.d.ts.map +1 -1
- package/lib/agent/presets.js +7 -3
- package/lib/agent/presets.js.map +1 -1
- package/lib/agent/status.d.ts +10 -0
- package/lib/agent/status.d.ts.map +1 -1
- package/lib/agent/status.js +2 -0
- package/lib/agent/status.js.map +1 -1
- package/lib/cards.d.ts +127 -7
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +381 -52
- package/lib/cards.js.map +1 -1
- package/lib/export.d.ts +5 -4
- package/lib/export.d.ts.map +1 -1
- package/lib/export.js +62 -13
- package/lib/export.js.map +1 -1
- package/lib/fold-cursor.d.ts +23 -0
- package/lib/fold-cursor.d.ts.map +1 -0
- package/lib/fold-cursor.js +31 -0
- package/lib/fold-cursor.js.map +1 -0
- package/lib/gates.d.ts +145 -2
- package/lib/gates.d.ts.map +1 -1
- package/lib/gates.js +335 -40
- package/lib/gates.js.map +1 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +651 -92
- package/lib/index.js.map +1 -1
- package/lib/input/actions.d.ts +136 -0
- package/lib/input/actions.d.ts.map +1 -0
- package/lib/input/actions.js +740 -0
- package/lib/input/actions.js.map +1 -0
- package/lib/input/keymap-settings.d.ts +21 -0
- package/lib/input/keymap-settings.d.ts.map +1 -0
- package/lib/input/keymap-settings.js +28 -0
- package/lib/input/keymap-settings.js.map +1 -0
- package/lib/input/keymap.d.ts +91 -0
- package/lib/input/keymap.d.ts.map +1 -0
- package/lib/input/keymap.js +170 -0
- package/lib/input/keymap.js.map +1 -0
- package/lib/input/match.d.ts +10 -0
- package/lib/input/match.d.ts.map +1 -0
- package/lib/input/match.js +83 -0
- package/lib/input/match.js.map +1 -0
- package/lib/input/submission.d.ts +8 -1
- package/lib/input/submission.d.ts.map +1 -1
- package/lib/input/submission.js +9 -2
- package/lib/input/submission.js.map +1 -1
- package/lib/input.d.ts +17 -0
- package/lib/input.d.ts.map +1 -0
- package/lib/input.js +27 -0
- package/lib/input.js.map +1 -0
- package/lib/keys-command.d.ts +16 -0
- package/lib/keys-command.d.ts.map +1 -0
- package/lib/keys-command.js +60 -0
- package/lib/keys-command.js.map +1 -0
- package/lib/queue.d.ts +6 -0
- package/lib/queue.d.ts.map +1 -0
- package/lib/queue.js +68 -0
- package/lib/queue.js.map +1 -0
- package/lib/settings-notice.d.ts +19 -0
- package/lib/settings-notice.d.ts.map +1 -0
- package/lib/settings-notice.js +30 -0
- package/lib/settings-notice.js.map +1 -0
- package/lib/terminal/warning-screen.d.ts +8 -0
- package/lib/terminal/warning-screen.d.ts.map +1 -0
- package/lib/terminal/warning-screen.js +66 -0
- package/lib/terminal/warning-screen.js.map +1 -0
- package/lib/theme-capability.d.ts +36 -0
- package/lib/theme-capability.d.ts.map +1 -0
- package/lib/theme-capability.js +190 -0
- package/lib/theme-capability.js.map +1 -0
- package/lib/theme-command.d.ts +10 -0
- package/lib/theme-command.d.ts.map +1 -0
- package/lib/theme-command.js +61 -0
- package/lib/theme-command.js.map +1 -0
- package/lib/theme-settings.d.ts +196 -0
- package/lib/theme-settings.d.ts.map +1 -0
- package/lib/theme-settings.js +229 -0
- package/lib/theme-settings.js.map +1 -0
- package/lib/theme-tokens.d.ts +110 -0
- package/lib/theme-tokens.d.ts.map +1 -0
- package/lib/theme-tokens.js +427 -0
- package/lib/theme-tokens.js.map +1 -0
- package/lib/theme.d.ts +32 -35
- package/lib/theme.d.ts.map +1 -1
- package/lib/theme.js +112 -63
- package/lib/theme.js.map +1 -1
- package/lib/tokens.d.ts +15 -0
- package/lib/tokens.d.ts.map +1 -0
- package/lib/tokens.js +29 -0
- package/lib/tokens.js.map +1 -0
- package/lib/transcript.d.ts +26 -1
- package/lib/transcript.d.ts.map +1 -1
- package/lib/transcript.js +153 -25
- package/lib/transcript.js.map +1 -1
- package/lib/ui/dock.d.ts.map +1 -1
- package/lib/ui/dock.js +67 -28
- package/lib/ui/dock.js.map +1 -1
- package/lib/ui/editor.d.ts +51 -0
- package/lib/ui/editor.d.ts.map +1 -0
- package/lib/ui/editor.js +159 -0
- package/lib/ui/editor.js.map +1 -0
- package/lib/ui/frame.d.ts +54 -0
- package/lib/ui/frame.d.ts.map +1 -0
- package/lib/ui/frame.js +79 -0
- package/lib/ui/frame.js.map +1 -0
- package/lib/ui/gate-input.d.ts +20 -0
- package/lib/ui/gate-input.d.ts.map +1 -0
- package/lib/ui/gate-input.js +96 -0
- package/lib/ui/gate-input.js.map +1 -0
- package/lib/ui/markdown.d.ts +19 -2
- package/lib/ui/markdown.d.ts.map +1 -1
- package/lib/ui/markdown.js +37 -6
- package/lib/ui/markdown.js.map +1 -1
- package/lib/ui/mermaid.d.ts +44 -0
- package/lib/ui/mermaid.d.ts.map +1 -0
- package/lib/ui/mermaid.js +178 -0
- package/lib/ui/mermaid.js.map +1 -0
- package/lib/ui/picker.d.ts +66 -7
- package/lib/ui/picker.d.ts.map +1 -1
- package/lib/ui/picker.js +112 -19
- package/lib/ui/picker.js.map +1 -1
- package/lib/ui/prompt.d.ts +30 -0
- package/lib/ui/prompt.d.ts.map +1 -0
- package/lib/ui/prompt.js +45 -0
- package/lib/ui/prompt.js.map +1 -0
- package/lib/ui/queue.d.ts +24 -0
- package/lib/ui/queue.d.ts.map +1 -0
- package/lib/ui/queue.js +57 -0
- package/lib/ui/queue.js.map +1 -0
- package/lib/ui/status.d.ts +7 -1
- package/lib/ui/status.d.ts.map +1 -1
- package/lib/ui/status.js +84 -24
- package/lib/ui/status.js.map +1 -1
- package/lib/ui/view.d.ts +65 -2
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +319 -59
- package/lib/ui/view.js.map +1 -1
- package/lib/work.d.ts +48 -0
- package/lib/work.d.ts.map +1 -1
- package/lib/work.js +44 -0
- package/lib/work.js.map +1 -1
- package/package.json +5 -2
package/lib/ui/view.js
CHANGED
|
@@ -1,10 +1,56 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { cardDetailRows } from "../cards.js";
|
|
1
|
+
import { visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
|
|
2
|
+
import { cardDetailRows, shellFoldHint, shellRetentionHint } from "../cards.js";
|
|
3
|
+
import { defaultKeymap, hintKeys } from "../input/actions.js";
|
|
4
|
+
import { CUSTOM_ROW_NUMBER } from "../gates.js";
|
|
3
5
|
import { displayText } from "../text.js";
|
|
6
|
+
import { CARD_ROW_TOKEN } from "../theme-tokens.js";
|
|
7
|
+
import { canFrame, frameText } from "./frame.js";
|
|
4
8
|
import { RowCache } from "./rows.js";
|
|
5
9
|
const DETAIL_INDENT = ' ';
|
|
6
10
|
const OPTION_INDENT = ' ';
|
|
7
|
-
|
|
11
|
+
/** A nested call is a signpost under its card, so it sits one step shallower than that card's detail. */
|
|
12
|
+
const SUBCALL_INDENT = ' ';
|
|
13
|
+
/** The mark a cursor falls back to when the reader has not set one, so no literal lives in a template. */
|
|
14
|
+
const CURSOR_MARK = '❯';
|
|
15
|
+
const APPROVAL_MARK = '⚠';
|
|
16
|
+
const QUESTION_MARK = '?';
|
|
17
|
+
const CHECKBOX_ON = '[x]';
|
|
18
|
+
const CHECKBOX_OFF = '[ ]';
|
|
19
|
+
/** A row that a card's kind does not map draws as generic detail. */
|
|
20
|
+
const FALLBACK_ROW_TOKEN = 'tool.detail';
|
|
21
|
+
/** An unselected row has no cursor, and a blank column is not a value to configure. */
|
|
22
|
+
const NO_CURSOR = ' ';
|
|
23
|
+
/** The words an opened card uses when retention, not the fold, dropped rows. */
|
|
24
|
+
const CARD_HINT_RETAINED = 'more lines not shown';
|
|
25
|
+
/** What a hint names when the reader has unbound the key it would advertise. */
|
|
26
|
+
const REASONING_FOLD_FALLBACK = 'shift+tab';
|
|
27
|
+
const CARD_OPEN_FALLBACK = 'ctrl+o';
|
|
28
|
+
/** What separates a card's header from its measured facts, and the facts from each other. */
|
|
29
|
+
const STAT_LEAD = ' ';
|
|
30
|
+
const STAT_SEPARATOR = ' · ';
|
|
31
|
+
/** The symbol that says what a fact counts; a size needs none. */
|
|
32
|
+
const STAT_SYMBOL = {
|
|
33
|
+
added: '+',
|
|
34
|
+
changed: '~',
|
|
35
|
+
removed: '-',
|
|
36
|
+
size: '',
|
|
37
|
+
};
|
|
38
|
+
/** Which colour draws each fact, so added, changed, and removed never share one. */
|
|
39
|
+
const STAT_TOKEN = {
|
|
40
|
+
added: 'tool.stat.added',
|
|
41
|
+
changed: 'tool.stat.changed',
|
|
42
|
+
removed: 'tool.stat.removed',
|
|
43
|
+
size: 'tool.stat.size',
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* The state a reader gets before opening anything, and the view's own fallback.
|
|
47
|
+
*
|
|
48
|
+
* Cards and thoughts start folded because either can be long enough to push the
|
|
49
|
+
* answer off the screen. A program's calls are the opposite case: one clipped
|
|
50
|
+
* line each, under a header that already names them, so folding them costs a
|
|
51
|
+
* reader the very thing the card stands for.
|
|
52
|
+
*/
|
|
53
|
+
export const DEFAULT_VIEW_STATE = { expandCards: false, expandReasoning: false, expandSubCalls: true };
|
|
8
54
|
export class TranscriptView {
|
|
9
55
|
model;
|
|
10
56
|
theme;
|
|
@@ -19,7 +65,7 @@ export class TranscriptView {
|
|
|
19
65
|
this.rows = options.rows ?? new RowCache();
|
|
20
66
|
}
|
|
21
67
|
get viewState() {
|
|
22
|
-
return this.options.state?.() ??
|
|
68
|
+
return this.options.state?.() ?? DEFAULT_VIEW_STATE;
|
|
23
69
|
}
|
|
24
70
|
/** The cache's own account of the work it avoided; a test reads this. */
|
|
25
71
|
rowStats() {
|
|
@@ -36,95 +82,290 @@ export class TranscriptView {
|
|
|
36
82
|
const indent = ' '.repeat(lead);
|
|
37
83
|
const wrapped = wrapTextWithAnsi(displayText(text), Math.max(1, width - lead));
|
|
38
84
|
wrapped.forEach((line, index) => {
|
|
39
|
-
lines.push(style(
|
|
85
|
+
lines.push(style(this.theme.cut(`${index === 0 ? prefix : indent}${line}`, width, '')));
|
|
40
86
|
});
|
|
41
87
|
}
|
|
42
|
-
/**
|
|
43
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Wrap one already-styled block under a prefix.
|
|
90
|
+
*
|
|
91
|
+
* A card header mixes tokens — title, argument, stats — in a single string, so
|
|
92
|
+
* it cannot go through {@link pushWrapped}, which escapes and restyles plain
|
|
93
|
+
* text. Its width still has to fold at the screen edge rather than be cut,
|
|
94
|
+
* because the argument is the part a reader scans for and a silently dropped
|
|
95
|
+
* command is worse than a taller card.
|
|
96
|
+
*/
|
|
97
|
+
pushStyledWrapped(lines, content, width, prefix) {
|
|
44
98
|
const lead = visibleWidth(prefix);
|
|
45
99
|
const indent = ' '.repeat(lead);
|
|
46
|
-
const
|
|
47
|
-
|
|
100
|
+
const wrapped = wrapTextWithAnsi(content, Math.max(1, width - lead));
|
|
101
|
+
wrapped.forEach((line, index) => {
|
|
102
|
+
lines.push(this.theme.cut(`${index === 0 ? prefix : indent}${line}`, width, ''));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** Render assistant text as markdown: the model writes structure, the reader reads it. */
|
|
106
|
+
pushMarkdown(lines, text, width, live) {
|
|
107
|
+
const rendered = this.markdown.render(displayText(text), Math.max(1, width), live);
|
|
108
|
+
rendered.forEach(line => {
|
|
48
109
|
// The renderer pads to its width for background styling we do not use.
|
|
49
110
|
const trimmed = line.replace(/[ \t]+$/u, '');
|
|
50
|
-
// A blank markdown line stays blank:
|
|
51
|
-
// spaces in the frame for a row that shows nothing.
|
|
111
|
+
// A blank markdown line stays blank: it shows nothing, so it holds nothing.
|
|
52
112
|
if (trimmed === '') {
|
|
53
113
|
lines.push('');
|
|
54
114
|
return;
|
|
55
115
|
}
|
|
56
|
-
lines.push(
|
|
116
|
+
lines.push(this.theme.cut(trimmed, width, '…'));
|
|
57
117
|
});
|
|
58
118
|
}
|
|
119
|
+
/** The live map, or the shipped one for a caller that did not lend one. */
|
|
120
|
+
keymap() {
|
|
121
|
+
return this.options.keys?.() ?? defaultKeymap();
|
|
122
|
+
}
|
|
123
|
+
reasoningFoldHint() {
|
|
124
|
+
return hintKeys(this.keymap(), 'surface.reasoning') || REASONING_FOLD_FALLBACK;
|
|
125
|
+
}
|
|
59
126
|
pushReasoning(lines, entry, width) {
|
|
60
|
-
|
|
127
|
+
if (!this.theme.visible('transcript.reasoning.summary'))
|
|
128
|
+
return;
|
|
129
|
+
const glyph = this.theme.glyph('transcript.reasoning.summary');
|
|
130
|
+
const lead = glyph === '' ? '' : `${glyph} `;
|
|
131
|
+
// A folded row carries the key that opens it, because a count with no way to
|
|
132
|
+
// reach the text reads the same as the text never having arrived. The key
|
|
133
|
+
// rides the row rather than a line of its own, so naming the hidden body
|
|
134
|
+
// costs no vertical space.
|
|
135
|
+
const suffix = !this.viewState.expandReasoning && entry.body !== '' && this.theme.visible('transcript.reasoning.hint')
|
|
136
|
+
? ` (${this.reasoningFoldHint()})`
|
|
137
|
+
: '';
|
|
138
|
+
// The key is kept whole: the summary is the part that gives up room.
|
|
139
|
+
const room = Math.max(1, width - visibleWidth(suffix));
|
|
140
|
+
const summary = this.theme.style('transcript.reasoning.summary', this.theme.cut(`${lead}${displayText(entry.summary)}`, room, ''));
|
|
141
|
+
lines.push(suffix === '' ? summary : `${summary}${this.theme.style('transcript.reasoning.hint', suffix)}`);
|
|
61
142
|
if (!this.viewState.expandReasoning)
|
|
62
143
|
return;
|
|
144
|
+
if (!this.theme.visible('transcript.reasoning.body'))
|
|
145
|
+
return;
|
|
63
146
|
for (const line of entry.body.split('\n')) {
|
|
64
|
-
this.pushWrapped(lines, line, width, DETAIL_INDENT, this.theme.
|
|
147
|
+
this.pushWrapped(lines, line, width, DETAIL_INDENT, text => this.theme.style('transcript.reasoning.body', text));
|
|
65
148
|
}
|
|
66
149
|
}
|
|
67
150
|
pushCard(lines, card, width) {
|
|
68
151
|
const expanded = this.viewState.expandCards;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
152
|
+
// A card whose kind declares its call IS a command keeps its output tail
|
|
153
|
+
// while folded: that output is the answer the reader asked for, so it
|
|
154
|
+
// outranks the one-line rule every other card follows. Its command is drawn
|
|
155
|
+
// outside the fold entirely, because what ran is never a detail.
|
|
156
|
+
const preview = expanded
|
|
157
|
+
? { expanded: true }
|
|
158
|
+
: { expanded: false, preview: card.kind === 'terminal' ? 'shellTail' : 'title' };
|
|
159
|
+
const { lines: detail, hidden } = cardDetailRows(card, preview);
|
|
160
|
+
const titleToken = card.failed ? 'tool.failed.title' : 'tool.title';
|
|
161
|
+
const glyphToken = card.failed ? 'tool.failed.glyph' : 'tool.glyph';
|
|
162
|
+
const { lead, body } = this.renderHead(card, titleToken, glyphToken);
|
|
163
|
+
// A header that folds keeps the argument and its stats; a terminal command
|
|
164
|
+
// can be longer than the screen, so it wraps under its own indent.
|
|
165
|
+
if (body !== '')
|
|
166
|
+
this.pushStyledWrapped(lines, body, width, lead);
|
|
167
|
+
if (this.viewState.expandSubCalls)
|
|
168
|
+
this.pushSubCalls(lines, card, width);
|
|
169
|
+
if (card.kind === 'terminal' && card.argument !== undefined && card.argument !== '' && this.theme.visible('tool.args')) {
|
|
170
|
+
this.pushStyledWrapped(lines, this.theme.style('tool.args', displayText(card.argument)), width, DETAIL_INDENT);
|
|
171
|
+
}
|
|
72
172
|
for (const row of detail) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
173
|
+
// The row says what it is, so the renderer never guesses from the text:
|
|
174
|
+
// a diff line beginning with "+" is an addition because the presenter
|
|
175
|
+
// said so, not because of its first character.
|
|
176
|
+
const drawn = row.parts
|
|
177
|
+
.map(part => {
|
|
178
|
+
const token = CARD_ROW_TOKEN[card.kind]?.[part.class] ?? FALLBACK_ROW_TOKEN;
|
|
179
|
+
return this.theme.visible(token) ? this.theme.style(token, displayText(part.text)) : '';
|
|
180
|
+
})
|
|
181
|
+
.join('');
|
|
182
|
+
// A row whose every part is hidden draws nothing, and nothing must not
|
|
183
|
+
// cost a line: the indent would read as an empty row the card does not have.
|
|
184
|
+
if (drawn === '')
|
|
185
|
+
continue;
|
|
186
|
+
lines.push(this.theme.cut(`${DETAIL_INDENT}${drawn}`, width, ''));
|
|
77
187
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
188
|
+
// The pill is not output, so it draws after the preview window rather than
|
|
189
|
+
// inside it: a run bounded to its tail still reports how it ended.
|
|
190
|
+
if (card.kind === 'terminal' && card.status !== undefined && this.theme.visible('tool.terminal.status')) {
|
|
191
|
+
lines.push(this.theme.cut(`${DETAIL_INDENT}${this.theme.style('tool.terminal.status', displayText(card.status))}`, width, ''));
|
|
81
192
|
}
|
|
193
|
+
if (hidden <= 0 || !this.theme.visible('tool.hint'))
|
|
194
|
+
return;
|
|
195
|
+
// A shell card's rows are kept from the end, so a hidden count always names
|
|
196
|
+
// the rows *before* what is on screen and the hint has to say so; every
|
|
197
|
+
// other card keeps its head, where a neutral count is enough. A folded shell
|
|
198
|
+
// card is bounded by its preview window, an opened one by retention, so the
|
|
199
|
+
// opened hint promises no more than memory kept.
|
|
200
|
+
const hint = card.kind === 'terminal'
|
|
201
|
+
? preview.expanded
|
|
202
|
+
? shellRetentionHint(hidden)
|
|
203
|
+
: shellFoldHint(hidden, hintKeys(this.keymap(), 'surface.toolDetail') || CARD_OPEN_FALLBACK)
|
|
204
|
+
: preview.expanded ? `${hidden} ${CARD_HINT_RETAINED}` : undefined;
|
|
205
|
+
if (hint === undefined)
|
|
206
|
+
return;
|
|
207
|
+
lines.push(this.theme.style('tool.hint', this.theme.cut(`${DETAIL_INDENT}${hint}`, width, '')));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* The calls one card dispatched, one entry each.
|
|
211
|
+
*
|
|
212
|
+
* A nested call is a signpost rather than a card of its own, so it keeps one
|
|
213
|
+
* entry per call; a long argument still wraps under that entry rather than
|
|
214
|
+
* being cut, because the argument is the part a reader scans for and a
|
|
215
|
+
* silently shortened path reads as the one that ran.
|
|
216
|
+
*/
|
|
217
|
+
pushSubCalls(lines, card, width) {
|
|
218
|
+
const subCalls = card.subCalls ?? [];
|
|
219
|
+
for (const call of subCalls) {
|
|
220
|
+
const titleToken = call.failed ? 'tool.failed.title' : 'tool.subcall.title';
|
|
221
|
+
const title = this.theme.visible(titleToken) ? this.theme.style(titleToken, displayText(call.title)) : '';
|
|
222
|
+
const argument = call.argument === undefined || !this.theme.visible('tool.subcall.args')
|
|
223
|
+
? ''
|
|
224
|
+
: ` ${this.theme.style('tool.subcall.args', displayText(call.argument))}`;
|
|
225
|
+
const drawn = `${title}${argument}`;
|
|
226
|
+
// A row whose every part is hidden draws nothing, and nothing must not
|
|
227
|
+
// cost a line the card does not have.
|
|
228
|
+
if (drawn === '')
|
|
229
|
+
continue;
|
|
230
|
+
this.pushStyledWrapped(lines, drawn, width, SUBCALL_INDENT);
|
|
231
|
+
}
|
|
232
|
+
const hidden = (card.subCallsTotal ?? subCalls.length) - subCalls.length;
|
|
233
|
+
if (hidden > 0 && this.theme.visible('tool.hint')) {
|
|
234
|
+
lines.push(this.theme.style('tool.hint', this.theme.cut(`${SUBCALL_INDENT}… ${hidden} more calls`, width, '')));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* A card's header: its label, its argument, and its measured facts.
|
|
239
|
+
*
|
|
240
|
+
* The glyph is returned apart from the body so a wrapped continuation can
|
|
241
|
+
* align under the label rather than under the mark. A terminal's argument is
|
|
242
|
+
* left out because it needs a row of its own — it is the one argument that can
|
|
243
|
+
* be a whole command rather than a word.
|
|
244
|
+
*/
|
|
245
|
+
renderHead(card, titleToken, glyphToken) {
|
|
246
|
+
const glyph = this.theme.visible(titleToken) ? this.theme.glyph(glyphToken) : '';
|
|
247
|
+
const lead = glyph === '' ? '' : `${glyph} `;
|
|
248
|
+
let body = this.theme.visible(titleToken) ? this.theme.style(titleToken, displayText(card.title)) : '';
|
|
249
|
+
if (card.kind !== 'terminal' && card.argument !== undefined && card.argument !== '' && this.theme.visible('tool.args')) {
|
|
250
|
+
body += `${body === '' ? '' : ' '}${this.theme.style('tool.args', displayText(card.argument))}`;
|
|
251
|
+
}
|
|
252
|
+
return { lead, body: body + this.renderStats(card.stats) };
|
|
253
|
+
}
|
|
254
|
+
/** The measured facts, each in its own colour, or nothing when none is visible. */
|
|
255
|
+
renderStats(stats) {
|
|
256
|
+
if (stats === undefined || stats.length === 0)
|
|
257
|
+
return '';
|
|
258
|
+
const drawn = stats
|
|
259
|
+
.filter(stat => this.theme.visible(STAT_TOKEN[stat.kind]))
|
|
260
|
+
.map(stat => this.theme.style(STAT_TOKEN[stat.kind], `${STAT_SYMBOL[stat.kind]}${displayText(stat.text)}`));
|
|
261
|
+
if (drawn.length === 0)
|
|
262
|
+
return '';
|
|
263
|
+
return `${STAT_LEAD}${drawn.join(this.theme.style('tool.stat.separator', STAT_SEPARATOR))}`;
|
|
82
264
|
}
|
|
83
265
|
pushPicker(lines, picker, width) {
|
|
84
266
|
lines.push('');
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
267
|
+
if (this.theme.visible('picker.title')) {
|
|
268
|
+
const glyph = this.theme.glyph('picker.glyph');
|
|
269
|
+
const lead = glyph === '' ? '' : `${glyph} `;
|
|
270
|
+
lines.push(this.theme.style('picker.title', this.theme.cut(`${lead}${displayText(picker.title)}`, width, '')));
|
|
88
271
|
}
|
|
89
|
-
if (picker.
|
|
90
|
-
|
|
272
|
+
if (picker.note !== undefined && this.theme.visible('picker.note')) {
|
|
273
|
+
this.pushWrapped(lines, picker.note, width, DETAIL_INDENT, text => this.theme.style('picker.note', text));
|
|
91
274
|
}
|
|
92
|
-
if (picker.
|
|
93
|
-
lines.push(this.theme.
|
|
275
|
+
if (picker.filter !== '' && this.theme.visible('picker.filter')) {
|
|
276
|
+
lines.push(this.theme.style('picker.filter', this.theme.cut(`${DETAIL_INDENT}filter: ${displayText(picker.filter)}`, width, '')));
|
|
277
|
+
}
|
|
278
|
+
if (picker.above > 0 && this.theme.visible('picker.scrollNewer')) {
|
|
279
|
+
lines.push(this.theme.style('picker.scrollNewer', this.theme.cut(`${OPTION_INDENT}… ${picker.above} newer`, width, '')));
|
|
94
280
|
}
|
|
95
281
|
for (const row of picker.rows) {
|
|
96
|
-
const
|
|
282
|
+
const token = row.current ? 'picker.rowCurrent' : 'picker.row';
|
|
283
|
+
if (!this.theme.visible(token))
|
|
284
|
+
continue;
|
|
285
|
+
const cursor = row.current ? this.theme.glyph('picker.cursor') || CURSOR_MARK : NO_CURSOR;
|
|
97
286
|
const text = row.description === undefined
|
|
98
287
|
? `${cursor} ${row.label}`
|
|
99
288
|
: `${cursor} ${row.label} — ${row.description}`;
|
|
100
|
-
|
|
101
|
-
lines.push(style(truncateToWidth(`${OPTION_INDENT}${displayText(text)}`, width, '')));
|
|
289
|
+
lines.push(this.theme.style(token, this.theme.cut(`${OPTION_INDENT}${displayText(text)}`, width, '')));
|
|
102
290
|
}
|
|
103
|
-
if (picker.below > 0) {
|
|
104
|
-
lines.push(this.theme.
|
|
291
|
+
if (picker.below > 0 && this.theme.visible('picker.scrollOlder')) {
|
|
292
|
+
lines.push(this.theme.style('picker.scrollOlder', this.theme.cut(`${OPTION_INDENT}… ${picker.below} older`, width, '')));
|
|
293
|
+
}
|
|
294
|
+
if (this.theme.visible('picker.hint')) {
|
|
295
|
+
lines.push(this.theme.style('picker.hint', this.theme.cut(`${OPTION_INDENT}${displayText(picker.hint)}`, width, '')));
|
|
105
296
|
}
|
|
106
|
-
lines.push(this.theme.dim(truncateToWidth(`${OPTION_INDENT}${displayText(picker.hint)}`, width, '')));
|
|
107
297
|
}
|
|
108
298
|
pushGate(lines, gate, width) {
|
|
109
299
|
lines.push('');
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
300
|
+
if (this.theme.visible('gate.title')) {
|
|
301
|
+
const glyphToken = gate.kind === 'approval' ? 'gate.glyphApproval' : 'gate.glyphQuestion';
|
|
302
|
+
const glyph = this.theme.glyph(glyphToken) || (gate.kind === 'approval' ? APPROVAL_MARK : QUESTION_MARK);
|
|
303
|
+
// The question is the thing being decided, so it wraps rather than being
|
|
304
|
+
// cut: a reader cannot answer a sentence they were not shown.
|
|
305
|
+
this.pushWrapped(lines, gate.title, width, `${glyph} `, text => this.theme.style('gate.title', text));
|
|
306
|
+
}
|
|
307
|
+
if (this.theme.visible('gate.detail')) {
|
|
308
|
+
for (const detail of gate.detail) {
|
|
309
|
+
this.pushWrapped(lines, detail, width, DETAIL_INDENT, text => this.theme.style('gate.detail', text));
|
|
310
|
+
}
|
|
113
311
|
}
|
|
114
312
|
gate.options.forEach((option, position) => {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
:
|
|
121
|
-
|
|
122
|
-
lines.push(style(truncateToWidth(`${OPTION_INDENT}${text}`, width, '')));
|
|
313
|
+
this.pushGateRow(lines, width, {
|
|
314
|
+
number: gate.optionOffset + position + 1,
|
|
315
|
+
label: option.label,
|
|
316
|
+
description: option.description,
|
|
317
|
+
current: option.current,
|
|
318
|
+
selected: option.selected,
|
|
319
|
+
});
|
|
123
320
|
});
|
|
124
|
-
|
|
321
|
+
// The free-text row is drawn under the window rather than inside it: it is
|
|
322
|
+
// the one row that must never scroll out of reach, and the window's own
|
|
323
|
+
// numbering is left running 1..n above it.
|
|
324
|
+
if (gate.custom !== undefined) {
|
|
325
|
+
this.pushGateRow(lines, width, {
|
|
326
|
+
number: CUSTOM_ROW_NUMBER,
|
|
327
|
+
label: gate.custom.label,
|
|
328
|
+
description: gate.custom.description,
|
|
329
|
+
current: gate.custom.current,
|
|
330
|
+
selected: gate.custom.selected,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
// The answer belongs to the row it fills: the free-text row, or the question
|
|
334
|
+
// itself when typing is the only way to answer it. The rows come from the
|
|
335
|
+
// surface's own editor, so they are placed rather than restyled — it draws
|
|
336
|
+
// its frame, its padding, and its cursor for the width it is given.
|
|
337
|
+
if (gate.answerInput !== undefined) {
|
|
338
|
+
const room = Math.max(1, width - visibleWidth(OPTION_INDENT));
|
|
339
|
+
for (const row of gate.answerInput.render(room))
|
|
340
|
+
lines.push(`${OPTION_INDENT}${row}`);
|
|
341
|
+
}
|
|
342
|
+
// The keys are how the gate is answered at all, so they wrap rather than
|
|
343
|
+
// lose their tail at a narrow edge.
|
|
344
|
+
if (this.theme.visible('gate.hint')) {
|
|
345
|
+
this.pushWrapped(lines, gate.hint, width, OPTION_INDENT, text => this.theme.style('gate.hint', text));
|
|
346
|
+
}
|
|
125
347
|
}
|
|
126
|
-
/**
|
|
127
|
-
|
|
348
|
+
/**
|
|
349
|
+
* One row a reader can choose: the cursor, the box, the number, the label.
|
|
350
|
+
*
|
|
351
|
+
* The row wraps under the label it belongs to rather than at the screen edge,
|
|
352
|
+
* because the label and its description together are what tells two rows
|
|
353
|
+
* apart, and a mark on a continuation line reads as another row.
|
|
354
|
+
*/
|
|
355
|
+
pushGateRow(lines, width, row) {
|
|
356
|
+
const token = row.current ? 'gate.optionCurrent' : 'gate.option';
|
|
357
|
+
if (!this.theme.visible(token))
|
|
358
|
+
return;
|
|
359
|
+
const cursor = row.current ? this.theme.glyph('gate.cursor') || CURSOR_MARK : NO_CURSOR;
|
|
360
|
+
const box = row.selected ? CHECKBOX_ON : CHECKBOX_OFF;
|
|
361
|
+
const lead = `${OPTION_INDENT}${cursor} ${box} ${row.number}. `;
|
|
362
|
+
const text = row.description === undefined ? row.label : `${row.label} — ${row.description}`;
|
|
363
|
+
// The text reaches pushWrapped unescaped: it escapes once, and escaping a
|
|
364
|
+
// second time would show the reader the escape instead of the character.
|
|
365
|
+
this.pushWrapped(lines, text, width, lead, body => this.theme.style(token, body));
|
|
366
|
+
}
|
|
367
|
+
/** The rows one transcript entry becomes; `live` marks the entry the turn is still writing. */
|
|
368
|
+
renderEntry(entry, lines, width, live) {
|
|
128
369
|
switch (entry.kind) {
|
|
129
370
|
case 'tool':
|
|
130
371
|
this.pushCard(lines, entry.card, width);
|
|
@@ -133,25 +374,44 @@ export class TranscriptView {
|
|
|
133
374
|
this.pushReasoning(lines, entry, width);
|
|
134
375
|
return;
|
|
135
376
|
case 'assistant':
|
|
136
|
-
this.pushMarkdown(lines, entry.text, width,
|
|
377
|
+
this.pushMarkdown(lines, entry.text, width, live);
|
|
137
378
|
return;
|
|
138
379
|
case 'user':
|
|
139
|
-
this.
|
|
380
|
+
if (!this.theme.visible('transcript.user'))
|
|
381
|
+
return;
|
|
382
|
+
// A prompt is boxed wherever it is read, so the row it left in the queue
|
|
383
|
+
// and the row it becomes here are recognisably the same object.
|
|
384
|
+
lines.push(...frameText(entry.text, width, {
|
|
385
|
+
text: text => this.theme.style('transcript.user', text),
|
|
386
|
+
border: rule => this.theme.editor.borderColor(rule),
|
|
387
|
+
framed: canFrame(width, this.theme.visible('editor.border')),
|
|
388
|
+
}));
|
|
140
389
|
return;
|
|
141
390
|
case 'notice':
|
|
142
|
-
|
|
391
|
+
if (!this.theme.visible('transcript.notice'))
|
|
392
|
+
return;
|
|
393
|
+
this.pushWrapped(lines, entry.text, width, this.elementLead('transcript.notice'), text => this.theme.style('transcript.notice', text));
|
|
143
394
|
return;
|
|
144
395
|
case 'marker':
|
|
145
|
-
|
|
396
|
+
if (!this.theme.visible('transcript.marker'))
|
|
397
|
+
return;
|
|
398
|
+
this.pushWrapped(lines, entry.text, width, this.elementLead('transcript.marker'), text => this.theme.style('transcript.marker', text));
|
|
146
399
|
return;
|
|
147
400
|
}
|
|
148
401
|
}
|
|
402
|
+
/** The mark and the space that introduce an element, empty when it has none. */
|
|
403
|
+
elementLead(token) {
|
|
404
|
+
const glyph = this.theme.visible(token) ? this.theme.glyph(token) : '';
|
|
405
|
+
return glyph === '' ? '' : `${glyph} `;
|
|
406
|
+
}
|
|
149
407
|
render(width) {
|
|
150
408
|
if (width <= 0)
|
|
151
409
|
return [];
|
|
152
|
-
const { glyphs } = this.theme;
|
|
153
410
|
const state = this.viewState;
|
|
154
|
-
|
|
411
|
+
// The revision is part of the key: rows drawn under an older theme table
|
|
412
|
+
// must miss, or a settings change would restyle only the rows that happened
|
|
413
|
+
// to be redrawn for another reason.
|
|
414
|
+
const tag = `${width}|${state.expandCards ? 'c' : '-'}${state.expandReasoning ? 'r' : '-'}${state.expandSubCalls ? 'p' : '-'}|${this.theme.revision}`;
|
|
155
415
|
const lines = [];
|
|
156
416
|
const settled = this.model.settledCount();
|
|
157
417
|
const entries = this.model.entries();
|
|
@@ -159,7 +419,7 @@ export class TranscriptView {
|
|
|
159
419
|
// The in-flight rows change on every frame, so caching them would only
|
|
160
420
|
// fill the cache with objects nobody will ask for again.
|
|
161
421
|
if (index >= settled) {
|
|
162
|
-
this.renderEntry(entry, lines, width,
|
|
422
|
+
this.renderEntry(entry, lines, width, true);
|
|
163
423
|
continue;
|
|
164
424
|
}
|
|
165
425
|
const cached = this.rows.lookup(entry, tag);
|
|
@@ -168,7 +428,7 @@ export class TranscriptView {
|
|
|
168
428
|
continue;
|
|
169
429
|
}
|
|
170
430
|
const rendered = [];
|
|
171
|
-
this.renderEntry(entry, rendered, width,
|
|
431
|
+
this.renderEntry(entry, rendered, width, false);
|
|
172
432
|
this.rows.store(entry, tag, rendered);
|
|
173
433
|
lines.push(...rendered);
|
|
174
434
|
}
|
package/lib/ui/view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/ui/view.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/ui/view.ts"],"names":[],"mappings":"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"}
|
package/lib/work.d.ts
CHANGED
|
@@ -20,6 +20,54 @@ export interface WorkState {
|
|
|
20
20
|
export declare function orderTodos(todos: readonly TodoEntry[]): readonly TodoEntry[];
|
|
21
21
|
/** The todo list as plain lines, for a reader who asked for it by name. */
|
|
22
22
|
export declare function describeTodos(todos: readonly TodoEntry[] | undefined): string;
|
|
23
|
+
/**
|
|
24
|
+
* Plan mode as the package that owns it reports it.
|
|
25
|
+
*
|
|
26
|
+
* The surface keeps no flag of its own: a session it has forgotten — cleared,
|
|
27
|
+
* or one of several on screen — still answers for the agent being driven, and
|
|
28
|
+
* only the host knows which selection is waiting for the turn boundary.
|
|
29
|
+
*/
|
|
30
|
+
export interface PlanModeState {
|
|
31
|
+
/** The logged state. */
|
|
32
|
+
readonly active: boolean;
|
|
33
|
+
/** A selection waiting for the next turn boundary; absent once it is applied. */
|
|
34
|
+
readonly pending?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/** The plan controller, described structurally so the surface needs no import of it. */
|
|
37
|
+
export interface PlanModeController {
|
|
38
|
+
get(agent: unknown): unknown;
|
|
39
|
+
}
|
|
40
|
+
/** The name the plan package registers under, in the container and in a preset scope. */
|
|
41
|
+
export declare const PLAN_SERVICE = "planMode";
|
|
42
|
+
/**
|
|
43
|
+
* Where the surface asks for a service.
|
|
44
|
+
*
|
|
45
|
+
* A plugin a preset mounts behind `isolate` is invisible outside the group that
|
|
46
|
+
* declares it, the host included, so the agent's own composition has to be
|
|
47
|
+
* asked through its preset. The container is the fallback for a composition that
|
|
48
|
+
* mounts the package flat.
|
|
49
|
+
*/
|
|
50
|
+
export interface ServiceLookup {
|
|
51
|
+
readonly direct: (name: string) => unknown;
|
|
52
|
+
readonly forAgent: (agent: unknown, name: string) => unknown;
|
|
53
|
+
}
|
|
54
|
+
/** The plan state of one agent, read from whichever scope of the composition holds it. */
|
|
55
|
+
export declare function readPlanState(lookup: ServiceLookup, agent: unknown): PlanModeState | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Whether plan mode is the state the agent is in, or is about to be in.
|
|
58
|
+
*
|
|
59
|
+
* A selection made inside a turn waits for the next accepted pre-step, so a
|
|
60
|
+
* second press before that boundary has to read the selection: asking for the
|
|
61
|
+
* logged state again would be a no-op, which the reader reads as a dead key.
|
|
62
|
+
*/
|
|
63
|
+
export declare function planSelectedActive(state: PlanModeState | undefined, fallback: boolean): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* The command that asks for the other state.
|
|
66
|
+
*
|
|
67
|
+
* `/plan` enters and `/plan off` exits — neither toggles — so the surface names
|
|
68
|
+
* the one it wants rather than keeping a flag that can drift from the host's.
|
|
69
|
+
*/
|
|
70
|
+
export declare function planToggleLine(active: boolean): string;
|
|
23
71
|
/**
|
|
24
72
|
* Fold the agent's work state out of durable events.
|
|
25
73
|
*
|
package/lib/work.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../src/work.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAA;CACzD;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CACvC;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAAA;IAChD,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CACrC;AA6BD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE,CAG5E;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,GAAG,MAAM,CAK7E;AAED;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,IAAI,CAAuB;IAEnC,KAAK,IAAI,SAAS;IAMlB,KAAK,IAAI,IAAI;IAMb,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAkClC"}
|
|
1
|
+
{"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../src/work.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAA;CACzD;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CACvC;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAAA;IAChD,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;CACrC;AA6BD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE,CAG5E;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,GAAG,MAAM,CAK7E;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,iFAAiF;IACjF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,wFAAwF;AACxF,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B;AAED,yFAAyF;AACzF,eAAO,MAAM,YAAY,aAAa,CAAA;AAEtC;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CAC7D;AAgBD,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAI9F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAG/F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,IAAI,CAAuB;IAEnC,KAAK,IAAI,SAAS;IAMlB,KAAK,IAAI,IAAI;IAMb,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAkClC"}
|