@sagmans/dsh-tui 0.11.2 → 0.12.1
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 +49 -2
- package/cordis.patch.yml +4 -0
- package/lib/agent/status.d.ts +5 -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/index.d.ts.map +1 -1
- package/lib/index.js +14 -1
- package/lib/index.js.map +1 -1
- package/lib/input/action-catalog.d.ts +3 -1
- package/lib/input/action-catalog.d.ts.map +1 -1
- package/lib/input/action-catalog.js +7 -2
- package/lib/input/action-catalog.js.map +1 -1
- package/lib/input/actions.d.ts +8 -3
- package/lib/input/actions.d.ts.map +1 -1
- package/lib/input/actions.js +22 -12
- package/lib/input/actions.js.map +1 -1
- package/lib/input/keymap-conflicts.d.ts +5 -4
- package/lib/input/keymap-conflicts.d.ts.map +1 -1
- package/lib/input/keymap-conflicts.js +12 -12
- package/lib/input/keymap-conflicts.js.map +1 -1
- package/lib/input/keymap-settings.d.ts +4 -7
- package/lib/input/keymap-settings.d.ts.map +1 -1
- package/lib/input/keymap-settings.js +6 -5
- package/lib/input/keymap-settings.js.map +1 -1
- package/lib/input/keymap.d.ts.map +1 -1
- package/lib/input/keymap.js +6 -6
- package/lib/input/keymap.js.map +1 -1
- package/lib/input/submission.d.ts +3 -0
- package/lib/input/submission.d.ts.map +1 -1
- package/lib/input/submission.js.map +1 -1
- package/lib/keymaps.d.ts +56 -0
- package/lib/keymaps.d.ts.map +1 -0
- package/lib/keymaps.js +106 -0
- package/lib/keymaps.js.map +1 -0
- package/lib/keys-command.d.ts.map +1 -1
- package/lib/keys-command.js +4 -4
- package/lib/keys-command.js.map +1 -1
- package/lib/surface/appearance.d.ts +3 -0
- package/lib/surface/appearance.d.ts.map +1 -1
- package/lib/surface/appearance.js +15 -3
- package/lib/surface/appearance.js.map +1 -1
- package/lib/surface/commands.d.ts +2 -0
- package/lib/surface/commands.d.ts.map +1 -1
- package/lib/surface/commands.js +3 -0
- package/lib/surface/commands.js.map +1 -1
- package/lib/surface/model-choice.d.ts +5 -0
- package/lib/surface/model-choice.d.ts.map +1 -1
- package/lib/surface/model-choice.js +6 -2
- package/lib/surface/model-choice.js.map +1 -1
- package/lib/surface/plugin-actions.d.ts +18 -0
- package/lib/surface/plugin-actions.d.ts.map +1 -0
- package/lib/surface/plugin-actions.js +45 -0
- package/lib/surface/plugin-actions.js.map +1 -0
- package/lib/surface/prompt-input.d.ts.map +1 -1
- package/lib/surface/prompt-input.js +4 -0
- package/lib/surface/prompt-input.js.map +1 -1
- package/lib/theme-settings.d.ts +2 -10
- package/lib/theme-settings.d.ts.map +1 -1
- package/lib/ui/copy.js +3 -0
- package/lib/ui/copy.js.map +1 -1
- package/lib/ui/editor.d.ts +15 -10
- package/lib/ui/editor.d.ts.map +1 -1
- package/lib/ui/editor.js +48 -33
- package/lib/ui/editor.js.map +1 -1
- package/lib/ui/frame.d.ts +11 -5
- package/lib/ui/frame.d.ts.map +1 -1
- package/lib/ui/frame.js +23 -7
- package/lib/ui/frame.js.map +1 -1
- package/lib/ui/layout.d.ts +3 -4
- package/lib/ui/layout.d.ts.map +1 -1
- package/lib/ui/layout.js +14 -6
- package/lib/ui/layout.js.map +1 -1
- package/lib/ui/queue.d.ts +1 -1
- package/lib/ui/queue.d.ts.map +1 -1
- package/lib/ui/queue.js +3 -2
- package/lib/ui/queue.js.map +1 -1
- package/lib/ui/status.d.ts +2 -0
- package/lib/ui/status.d.ts.map +1 -1
- package/lib/ui/status.js +4 -3
- package/lib/ui/status.js.map +1 -1
- package/lib/ui/view/transcript-message.d.ts.map +1 -1
- package/lib/ui/view/transcript-message.js +4 -3
- package/lib/ui/view/transcript-message.js.map +1 -1
- package/lib/ui/view.js +2 -2
- package/lib/ui/view.js.map +1 -1
- package/package.json +5 -1
package/lib/ui/editor.js
CHANGED
|
@@ -4,7 +4,7 @@ import { ENTER_KEY } from "../input/key-press.js";
|
|
|
4
4
|
import { ghostDisplayLine, ghostGraphemes, isCursorAtTextEnd, nextGhostWord } from "../input/ghost.js";
|
|
5
5
|
import { promptKeys } from "../input/keymap.js";
|
|
6
6
|
import { renderTerminalText } from "../terminal-text.js";
|
|
7
|
-
import { FRAME_COLUMNS, FRAME_GLYPHS, MIN_BOX_WIDTH, PADDING_X } from "./frame.js";
|
|
7
|
+
import { FRAME_COLUMNS, RAIL_COLUMNS, FRAME_GLYPHS, MIN_BOX_WIDTH, MIN_RAIL_WIDTH, PADDING_X, textRow } from "./frame.js";
|
|
8
8
|
/**
|
|
9
9
|
* Marks the rule that closes the input while one render is in flight.
|
|
10
10
|
*
|
|
@@ -47,12 +47,11 @@ const KITTY_CTRL_J = '\u001b[106;5u';
|
|
|
47
47
|
*/
|
|
48
48
|
const CURSOR_AT_END = '\u001b[7m \u001b[0m';
|
|
49
49
|
/**
|
|
50
|
-
* The input bar
|
|
50
|
+
* The input bar shares the messages' left rail without enclosing the draft.
|
|
51
51
|
*
|
|
52
|
-
* The editor
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* while writing: a list that grows upward never covers the line being typed.
|
|
52
|
+
* The base editor still owns wrapping and scrolling, so only its enclosing
|
|
53
|
+
* rules are removed. Completion stays above the draft to avoid covering the
|
|
54
|
+
* line being typed, and scroll counts keep clipped text discoverable.
|
|
56
55
|
*/
|
|
57
56
|
export class BoxedEditor extends Editor {
|
|
58
57
|
keymap;
|
|
@@ -61,8 +60,14 @@ export class BoxedEditor extends Editor {
|
|
|
61
60
|
menuRows = 0;
|
|
62
61
|
/** Rows between the rules in the last render; how the base editor counts its own. */
|
|
63
62
|
textRows = 0;
|
|
64
|
-
/**
|
|
65
|
-
|
|
63
|
+
/** Pointer translation is safe only after recognizing the base layout. */
|
|
64
|
+
mapped = false;
|
|
65
|
+
/** Hidden rows stay discoverable after removing the enclosing rules. */
|
|
66
|
+
hiddenAbove = 0;
|
|
67
|
+
hiddenBelow = 0;
|
|
68
|
+
/** Pointer offsets follow only the furniture actually drawn. */
|
|
69
|
+
railColumns = 0;
|
|
70
|
+
topIndicatorRows = 0;
|
|
66
71
|
constructor(tui, theme, keymap = defaultKeymap, ghost) {
|
|
67
72
|
super(tui, theme, { paddingX: PADDING_X });
|
|
68
73
|
this.keymap = keymap;
|
|
@@ -113,11 +118,13 @@ export class BoxedEditor extends Editor {
|
|
|
113
118
|
}
|
|
114
119
|
/** Tag the closing rule so {@link render} can find where the box ends. */
|
|
115
120
|
renderBottomBorder(width, hiddenLineCount) {
|
|
121
|
+
this.hiddenBelow = hiddenLineCount;
|
|
116
122
|
return `${super.renderBottomBorder(width, hiddenLineCount)}${CLOSING_TAG}`;
|
|
117
123
|
}
|
|
118
|
-
/**
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
/** The base owns scrolling; its count survives without its top rule. */
|
|
125
|
+
renderTopBorder(width, hiddenLineCount) {
|
|
126
|
+
this.hiddenAbove = hiddenLineCount;
|
|
127
|
+
return super.renderTopBorder(width, hiddenLineCount);
|
|
121
128
|
}
|
|
122
129
|
/**
|
|
123
130
|
* Rewrite one row of the text before it is framed, so a subclass can hide
|
|
@@ -206,32 +213,40 @@ export class BoxedEditor extends Editor {
|
|
|
206
213
|
return true;
|
|
207
214
|
}
|
|
208
215
|
render(width) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
216
|
+
// Borrowed question editors remain dialog furniture, not conversation messages.
|
|
217
|
+
const enclosed = this.disableSubmit;
|
|
218
|
+
const minimum = enclosed ? MIN_BOX_WIDTH : MIN_RAIL_WIDTH;
|
|
219
|
+
const side = width >= minimum ? this.borderColor(FRAME_GLYPHS.side) : '';
|
|
220
|
+
this.railColumns = side === '' ? 0 : enclosed ? FRAME_COLUMNS : RAIL_COLUMNS;
|
|
221
|
+
const boxed = enclosed && this.railColumns > 0;
|
|
222
|
+
const inside = width - this.railColumns;
|
|
213
223
|
const ghost = this.disableSubmit ? undefined : this.currentGhostSuffix();
|
|
214
|
-
|
|
215
|
-
this.boxed = false;
|
|
216
|
-
return super.render(width).map(row => this.decorateText(this.ghostRow(row, ghost)));
|
|
217
|
-
}
|
|
218
|
-
const rows = super.render(width - FRAME_COLUMNS);
|
|
224
|
+
const rows = super.render(inside);
|
|
219
225
|
const closing = rows.findIndex(row => row.includes(CLOSING_TAG));
|
|
220
|
-
//
|
|
221
|
-
|
|
222
|
-
|
|
226
|
+
// An unfamiliar base layout must not receive guessed pointer offsets.
|
|
227
|
+
if (closing < 0) {
|
|
228
|
+
this.mapped = false;
|
|
223
229
|
return rows.map(row => row.replace(CLOSING_TAG, ''));
|
|
230
|
+
}
|
|
224
231
|
const menu = rows.slice(closing + 1);
|
|
225
232
|
const text = rows.slice(1, closing);
|
|
226
233
|
this.menuRows = menu.length;
|
|
227
234
|
this.textRows = text.length;
|
|
228
|
-
this.
|
|
229
|
-
|
|
230
|
-
const lines = menu.map(row => row + ' '.repeat(
|
|
231
|
-
|
|
235
|
+
this.mapped = true;
|
|
236
|
+
this.topIndicatorRows = boxed || this.hiddenAbove > 0 ? 1 : 0;
|
|
237
|
+
const lines = menu.map(row => row + ' '.repeat(this.railColumns));
|
|
238
|
+
const indicator = (direction, count) => side + textRow(this.borderColor(`${direction} ${count} more`), inside);
|
|
239
|
+
const edge = (open, row, close) => this.borderColor(open + stripTerminalSequences(row) + close);
|
|
240
|
+
if (boxed)
|
|
241
|
+
lines.push(edge(FRAME_GLYPHS.topLeft, rows[0] ?? '', FRAME_GLYPHS.topRight));
|
|
242
|
+
else if (this.hiddenAbove > 0)
|
|
243
|
+
lines.push(indicator('↑', this.hiddenAbove));
|
|
232
244
|
for (const row of text)
|
|
233
|
-
lines.push(
|
|
234
|
-
|
|
245
|
+
lines.push(side + this.decorateText(this.ghostRow(row, ghost)) + (boxed ? side : ''));
|
|
246
|
+
if (boxed)
|
|
247
|
+
lines.push(edge(FRAME_GLYPHS.bottomLeft, rows[closing].replace(CLOSING_TAG, ''), FRAME_GLYPHS.bottomRight));
|
|
248
|
+
else if (this.hiddenBelow > 0)
|
|
249
|
+
lines.push(indicator('↓', this.hiddenBelow));
|
|
235
250
|
return lines;
|
|
236
251
|
}
|
|
237
252
|
/**
|
|
@@ -240,17 +255,17 @@ export class BoxedEditor extends Editor {
|
|
|
240
255
|
* The base editor hit-tests the rows it painted in its own order — the input
|
|
241
256
|
* under the top rule, the menu after the bottom one — and measures columns
|
|
242
257
|
* from the edge of the width it was asked for. This subclass draws the menu
|
|
243
|
-
* first
|
|
258
|
+
* first, removes the rules, and adds a rail, so clicks must be translated
|
|
244
259
|
* back before that hit test can say what it hit.
|
|
245
260
|
*/
|
|
246
261
|
handleMouse(event) {
|
|
247
|
-
if (!this.
|
|
262
|
+
if (!this.mapped)
|
|
248
263
|
return super.handleMouse(event);
|
|
249
|
-
const width = event.width -
|
|
264
|
+
const width = event.width - this.railColumns;
|
|
250
265
|
if (event.y < this.menuRows) {
|
|
251
266
|
return super.handleMouse({ ...event, width, y: event.y + this.textRows + 2 });
|
|
252
267
|
}
|
|
253
|
-
return super.handleMouse({ ...event, width, x: event.x -
|
|
268
|
+
return super.handleMouse({ ...event, width, x: event.x - (this.railColumns > 0 ? RAIL_COLUMNS : 0), y: event.y - this.menuRows + 1 - this.topIndicatorRows });
|
|
254
269
|
}
|
|
255
270
|
}
|
|
256
271
|
//# sourceMappingURL=editor.js.map
|
package/lib/ui/editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/ui/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,sBAAsB,EACtB,YAAY,GAKb,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAqB,MAAM,mBAAmB,CAAA;AACzH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/ui/editor.ts"],"names":[],"mappings":"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"}
|
package/lib/ui/frame.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
2
|
+
* The shared furniture keeps prompts recognizable through their whole life.
|
|
3
3
|
*
|
|
4
4
|
* The editor, the prompts queued above it, and the prompts already submitted
|
|
5
5
|
* draw the same glyphs at the same width, so one prompt reads as the same object
|
|
@@ -15,10 +15,14 @@ export declare const FRAME_GLYPHS: {
|
|
|
15
15
|
};
|
|
16
16
|
/** The frame costs one column each side, so the text wraps that much narrower. */
|
|
17
17
|
export declare const FRAME_COLUMNS = 2;
|
|
18
|
+
/** A message rail leaves the right edge open without changing boxed pickers. */
|
|
19
|
+
export declare const RAIL_COLUMNS = 1;
|
|
18
20
|
/** One column of air inside the frame, so a full line never touches the border. */
|
|
19
21
|
export declare const PADDING_X = 1;
|
|
20
22
|
/** A box needs both edges, both paddings, and one column left to type in. */
|
|
21
23
|
export declare const MIN_BOX_WIDTH: number;
|
|
24
|
+
/** Narrow rails still need padding and one writable cell. */
|
|
25
|
+
export declare const MIN_RAIL_WIDTH: number;
|
|
22
26
|
/** The columns the text of a bar owns, given the width of everything inside its frame. */
|
|
23
27
|
export declare function textWidth(innerWidth: number): number;
|
|
24
28
|
/** One text row of a bar: the air, the text, and the rest of the inside width. */
|
|
@@ -35,10 +39,12 @@ export declare function frameRule(innerWidth: number, hiddenRows: number): strin
|
|
|
35
39
|
export interface FrameFaces {
|
|
36
40
|
/** Paints one row of the block's own text. */
|
|
37
41
|
readonly text: (line: string) => string;
|
|
38
|
-
/**
|
|
42
|
+
/** One border face keeps rails and enclosed picker edges theme-compatible. */
|
|
39
43
|
readonly border: (rule: string) => string;
|
|
40
44
|
/** Whether the frame may be drawn at all. */
|
|
41
45
|
readonly framed: boolean;
|
|
46
|
+
/** Messages share a quiet left edge; picker dialogs retain their enclosure. */
|
|
47
|
+
readonly rail?: boolean;
|
|
42
48
|
}
|
|
43
49
|
/**
|
|
44
50
|
* One row a frame drew, as a copy of it comes back from the terminal.
|
|
@@ -65,7 +71,7 @@ export interface FrameBlock {
|
|
|
65
71
|
readonly copy: readonly FrameRow[];
|
|
66
72
|
}
|
|
67
73
|
/** Whether a bar has the width, and the visible border, to close a frame. */
|
|
68
|
-
export declare function canFrame(width: number, borderVisible: boolean): boolean;
|
|
74
|
+
export declare function canFrame(width: number, borderVisible: boolean, rail?: boolean): boolean;
|
|
69
75
|
/**
|
|
70
76
|
* One block of already-rendered rows as a bar draws it: padded to the frame's
|
|
71
77
|
* own text width, and closed into it when the frame can be drawn.
|
|
@@ -73,8 +79,8 @@ export declare function canFrame(width: number, borderVisible: boolean): boolean
|
|
|
73
79
|
* Markdown lays itself out to the width it is given, so its rows may not be
|
|
74
80
|
* wrapped again here: a second pass would break a fence or a table the markdown
|
|
75
81
|
* just drew. A block with a limit is a preview, and the rows it drops are
|
|
76
|
-
* counted on the closing rule: a
|
|
77
|
-
*
|
|
82
|
+
* counted beside the rail or on the closing rule: a clipped preview must still
|
|
83
|
+
* tell the reader that it continues.
|
|
78
84
|
*
|
|
79
85
|
* The copy of a block reads the same rows back as text: the frame's own rows
|
|
80
86
|
* carry no text at all, and a row the frame holds names the columns of it that
|
package/lib/ui/frame.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/ui/frame.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;;;;;;CAAyF,CAAA;AAElH,kFAAkF;AAClF,eAAO,MAAM,aAAa,IAAI,CAAA;AAC9B,mFAAmF;AACnF,eAAO,MAAM,SAAS,IAAI,CAAA;AAG1B,6EAA6E;AAC7E,eAAO,MAAM,aAAa,QAAoC,CAAA;AAE9D,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAgBxE;AAED,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/ui/frame.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;;;;;;CAAyF,CAAA;AAElH,kFAAkF;AAClF,eAAO,MAAM,aAAa,IAAI,CAAA;AAC9B,gFAAgF;AAChF,eAAO,MAAM,YAAY,IAAI,CAAA;AAC7B,mFAAmF;AACnF,eAAO,MAAM,SAAS,IAAI,CAAA;AAG1B,6EAA6E;AAC7E,eAAO,MAAM,aAAa,QAAoC,CAAA;AAC9D,6DAA6D;AAC7D,eAAO,MAAM,cAAc,QAAmC,CAAA;AAE9D,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAgBxE;AAED,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,iGAAiG;IACjG,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACnE;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAA;CACnC;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,UAAQ,GAAG,OAAO,CAErF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,SAA2B,GAAG,UAAU,CAmCnI;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,SAA2B,GAAG,MAAM,EAAE,CAEjI;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,SAA2B,GAAG,MAAM,EAAE,CAIpH"}
|
package/lib/ui/frame.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { stripTerminalSequences, truncateToWidth, visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
|
|
2
2
|
import { renderTerminalText } from "../terminal-text.js";
|
|
3
3
|
/**
|
|
4
|
-
* The
|
|
4
|
+
* The shared furniture keeps prompts recognizable through their whole life.
|
|
5
5
|
*
|
|
6
6
|
* The editor, the prompts queued above it, and the prompts already submitted
|
|
7
7
|
* draw the same glyphs at the same width, so one prompt reads as the same object
|
|
@@ -11,12 +11,16 @@ import { renderTerminalText } from "../terminal-text.js";
|
|
|
11
11
|
export const FRAME_GLYPHS = { topLeft: '╭', topRight: '╮', bottomLeft: '╰', bottomRight: '╯', side: '│' };
|
|
12
12
|
/** The frame costs one column each side, so the text wraps that much narrower. */
|
|
13
13
|
export const FRAME_COLUMNS = 2;
|
|
14
|
+
/** A message rail leaves the right edge open without changing boxed pickers. */
|
|
15
|
+
export const RAIL_COLUMNS = 1;
|
|
14
16
|
/** One column of air inside the frame, so a full line never touches the border. */
|
|
15
17
|
export const PADDING_X = 1;
|
|
16
18
|
/** The frame's own column, the one `FRAME_GLYPHS.side` is drawn in. */
|
|
17
19
|
const SIDE_COLUMNS = 1;
|
|
18
20
|
/** A box needs both edges, both paddings, and one column left to type in. */
|
|
19
21
|
export const MIN_BOX_WIDTH = FRAME_COLUMNS + PADDING_X * 2 + 1;
|
|
22
|
+
/** Narrow rails still need padding and one writable cell. */
|
|
23
|
+
export const MIN_RAIL_WIDTH = RAIL_COLUMNS + PADDING_X * 2 + 1;
|
|
20
24
|
/** The columns the text of a bar owns, given the width of everything inside its frame. */
|
|
21
25
|
export function textWidth(innerWidth) {
|
|
22
26
|
return Math.max(1, innerWidth - PADDING_X * 2);
|
|
@@ -58,8 +62,8 @@ export function frameRule(innerWidth, hiddenRows) {
|
|
|
58
62
|
return indicator.slice(0, Math.max(0, width - ellipsis.length)) + ellipsis;
|
|
59
63
|
}
|
|
60
64
|
/** Whether a bar has the width, and the visible border, to close a frame. */
|
|
61
|
-
export function canFrame(width, borderVisible) {
|
|
62
|
-
return borderVisible && width >= MIN_BOX_WIDTH;
|
|
65
|
+
export function canFrame(width, borderVisible, rail = false) {
|
|
66
|
+
return borderVisible && width >= (rail ? MIN_RAIL_WIDTH : MIN_BOX_WIDTH);
|
|
63
67
|
}
|
|
64
68
|
/**
|
|
65
69
|
* One block of already-rendered rows as a bar draws it: padded to the frame's
|
|
@@ -68,8 +72,8 @@ export function canFrame(width, borderVisible) {
|
|
|
68
72
|
* Markdown lays itself out to the width it is given, so its rows may not be
|
|
69
73
|
* wrapped again here: a second pass would break a fence or a table the markdown
|
|
70
74
|
* just drew. A block with a limit is a preview, and the rows it drops are
|
|
71
|
-
* counted on the closing rule: a
|
|
72
|
-
*
|
|
75
|
+
* counted beside the rail or on the closing rule: a clipped preview must still
|
|
76
|
+
* tell the reader that it continues.
|
|
73
77
|
*
|
|
74
78
|
* The copy of a block reads the same rows back as text: the frame's own rows
|
|
75
79
|
* carry no text at all, and a row the frame holds names the columns of it that
|
|
@@ -77,7 +81,7 @@ export function canFrame(width, borderVisible) {
|
|
|
77
81
|
* rather than as the shape that held them.
|
|
78
82
|
*/
|
|
79
83
|
export function frameBlock(lines, width, faces, limit = Number.POSITIVE_INFINITY) {
|
|
80
|
-
const inside = faces.framed ? width - FRAME_COLUMNS : width;
|
|
84
|
+
const inside = faces.framed ? width - (faces.rail ? RAIL_COLUMNS : FRAME_COLUMNS) : width;
|
|
81
85
|
const body = lines.slice(0, Math.max(0, limit));
|
|
82
86
|
const rows = body.map(line => textRow(faces.text(line), inside));
|
|
83
87
|
// The row is kept as the frame laid it out rather than as a copy trims it: the
|
|
@@ -88,6 +92,18 @@ export function frameBlock(lines, width, faces, limit = Number.POSITIVE_INFINITY
|
|
|
88
92
|
if (!faces.framed)
|
|
89
93
|
return { drawn: rows, copy: rows.map(row => ({ ...read(row), frame: { lead: PADDING_X, trail: PADDING_X } })) };
|
|
90
94
|
const side = faces.border(FRAME_GLYPHS.side);
|
|
95
|
+
if (faces.rail) {
|
|
96
|
+
const drawn = rows.map(row => `${side}${row}`);
|
|
97
|
+
const copy = drawn.map(row => ({ ...read(row), frame: { lead: RAIL_COLUMNS + PADDING_X, trail: PADDING_X } }));
|
|
98
|
+
const hiddenRows = lines.length - body.length;
|
|
99
|
+
// A preview must disclose omitted content even without a closing rule.
|
|
100
|
+
if (hiddenRows > 0) {
|
|
101
|
+
const indicator = `${side}${textRow(faces.border(`↓ ${hiddenRows} more`), inside)}`;
|
|
102
|
+
drawn.push(indicator);
|
|
103
|
+
copy.push(read(indicator));
|
|
104
|
+
}
|
|
105
|
+
return { drawn, copy };
|
|
106
|
+
}
|
|
91
107
|
const drawn = [
|
|
92
108
|
faces.border(`${FRAME_GLYPHS.topLeft}${frameRule(inside, 0)}${FRAME_GLYPHS.topRight}`),
|
|
93
109
|
...rows.map(row => `${side}${row}${side}`),
|
|
@@ -114,7 +130,7 @@ export function frameLines(lines, width, faces, limit = Number.POSITIVE_INFINITY
|
|
|
114
130
|
* the frame's, and a sequence that reached one would fight the frame that owns it.
|
|
115
131
|
*/
|
|
116
132
|
export function frameText(text, width, faces, limit = Number.POSITIVE_INFINITY) {
|
|
117
|
-
const inside = faces.framed ? width - FRAME_COLUMNS : width;
|
|
133
|
+
const inside = faces.framed ? width - (faces.rail ? RAIL_COLUMNS : FRAME_COLUMNS) : width;
|
|
118
134
|
const drawn = renderTerminalText(text, { color: 'none' });
|
|
119
135
|
return frameLines(wrapTextWithAnsi(drawn, textWidth(inside)), width, faces, limit);
|
|
120
136
|
}
|
package/lib/ui/frame.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/ui/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAChH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAW,CAAA;AAElH,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAA;AAC9B,mFAAmF;AACnF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAA;AAC1B,uEAAuE;AACvE,MAAM,YAAY,GAAG,CAAC,CAAA;AACtB,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAA;AAE9D,0FAA0F;AAC1F,MAAM,UAAU,SAAS,CAAC,UAAkB;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,UAAkB;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/D,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAA;IACxF,+EAA+E;IAC/E,2EAA2E;IAC3E,0EAA0E;IAC1E,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;AAC3E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,UAAkB,EAAE,UAAkB;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;IACrC,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,KAAK,GAAG,MAAM,UAAU,QAAQ,CAAA;IACtC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IACtC,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;QACjD,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9E,CAAC;IACD,uEAAuE;IACvE,8EAA8E;IAC9E,uCAAuC;IACvC,MAAM,SAAS,GAAG,SAAS,UAAU,QAAQ,CAAA;IAC7C,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK;QAAE,OAAO,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;IACpG,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACtC,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAA;AAC5E,CAAC;
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/ui/frame.ts"],"names":[],"mappings":"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"}
|
package/lib/ui/layout.d.ts
CHANGED
|
@@ -2,11 +2,10 @@ import { VStack, type Component } from '@earendil-works/pi-tui';
|
|
|
2
2
|
/**
|
|
3
3
|
* The rows the input bar keeps when every other row is contested.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* summary is allowed a row.
|
|
5
|
+
* One writable row remains visible even when work summaries compete for space;
|
|
6
|
+
* visual spacing gives up its rows before the input does.
|
|
8
7
|
*/
|
|
9
|
-
export declare const PROMPT_MIN_ROWS =
|
|
8
|
+
export declare const PROMPT_MIN_ROWS = 1;
|
|
10
9
|
/** The parts of the surface the root layout stacks, top to bottom. */
|
|
11
10
|
export interface SurfaceParts {
|
|
12
11
|
/** The transcript viewport, which takes every row nothing else claims. */
|
package/lib/ui/layout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/ui/layout.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/ui/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAG/E;;;;;GAKG;AACH,eAAO,MAAM,eAAe,IAAI,CAAA;AAKhC,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAA;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,kBAAkB;IAClB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAC3B;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAA;AA2BxC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,GAAE,aAAuB,GAAG,MAAM,CAiB1F"}
|
package/lib/ui/layout.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { HStack, VStack } from '@earendil-works/pi-tui';
|
|
1
|
+
import { HStack, Spacer, VStack } from '@earendil-works/pi-tui';
|
|
2
2
|
import { Gutter } from "./gutter.js";
|
|
3
3
|
/**
|
|
4
4
|
* The rows the input bar keeps when every other row is contested.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* summary is allowed a row.
|
|
6
|
+
* One writable row remains visible even when work summaries compete for space;
|
|
7
|
+
* visual spacing gives up its rows before the input does.
|
|
9
8
|
*/
|
|
10
|
-
export const PROMPT_MIN_ROWS =
|
|
9
|
+
export const PROMPT_MIN_ROWS = 1;
|
|
10
|
+
/** Separate input from queued prompts and session status without adding typed newlines. */
|
|
11
|
+
const PROMPT_SPACING_ROWS = 1;
|
|
11
12
|
/** The conversation and the work boards under it, which are what a margin insets. */
|
|
12
13
|
function insetColumn(parts) {
|
|
13
14
|
return new VStack([
|
|
@@ -52,7 +53,14 @@ export function surfaceLayout(parts, margin = () => 0) {
|
|
|
52
53
|
// them up before the editor does: the bar being typed in outranks what is
|
|
53
54
|
// waiting behind it.
|
|
54
55
|
{ component: parts.queue, basis: 'auto', shrink: 2, minSize: 0 },
|
|
55
|
-
{
|
|
56
|
+
{
|
|
57
|
+
component: new VStack([
|
|
58
|
+
{ component: new Spacer(PROMPT_SPACING_ROWS), basis: 'auto', shrink: 2, minSize: 0 },
|
|
59
|
+
{ component: parts.prompt, basis: 'auto', shrink: 1, minSize: PROMPT_MIN_ROWS },
|
|
60
|
+
{ component: new Spacer(PROMPT_SPACING_ROWS), basis: 'auto', shrink: 2, minSize: 0 },
|
|
61
|
+
]),
|
|
62
|
+
basis: 'auto', shrink: 1, minSize: PROMPT_MIN_ROWS,
|
|
63
|
+
},
|
|
56
64
|
{ component: parts.status, basis: 'auto', shrink: 0, minSize: 1 },
|
|
57
65
|
]);
|
|
58
66
|
}
|
package/lib/ui/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/ui/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/ui/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAA;AAEhC,2FAA2F;AAC3F,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAwB7B,qFAAqF;AACrF,SAAS,WAAW,CAAC,KAAmB;IACtC,OAAO,IAAI,MAAM,CAAC;QAChB,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QAC9D,6EAA6E;QAC7E,uEAAuE;QACvE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;KAChE,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,KAAK,CAAC,KAAmB,EAAE,MAAqB;IACvD,OAAO,IAAI,MAAM,CAAC;QAChB,EAAE,SAAS,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;QAC5D,EAAE,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QAChE,EAAE,SAAS,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;KAC7D,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,SAAwB,GAAG,EAAE,CAAC,CAAC;IAChF,OAAO,IAAI,MAAM,CAAC;QAChB,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QAClE,wEAAwE;QACxE,0EAA0E;QAC1E,qBAAqB;QACrB,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QAChE;YACE,SAAS,EAAE,IAAI,MAAM,CAAC;gBACpB,EAAE,SAAS,EAAE,IAAI,MAAM,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;gBACpF,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE;gBAC/E,EAAE,SAAS,EAAE,IAAI,MAAM,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;aACrF,CAAC;YACF,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe;SACnD;QACD,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;KAClE,CAAC,CAAA;AACJ,CAAC"}
|
package/lib/ui/queue.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare class QueueBar implements Component {
|
|
|
13
13
|
private readonly theme;
|
|
14
14
|
constructor(prompts: () => readonly string[], theme: TuiTheme);
|
|
15
15
|
invalidate(): void;
|
|
16
|
-
/**
|
|
16
|
+
/** Matching rails keep a submitted draft recognizable while it waits. */
|
|
17
17
|
private box;
|
|
18
18
|
render(width: number): string[];
|
|
19
19
|
}
|
package/lib/ui/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/ui/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAQ3C;;;;;;;GAOG;AACH,qBAAa,QAAS,YAAW,SAAS;IAEtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,OAAO,EAAE,MAAM,SAAS,MAAM,EAAE,EAChC,KAAK,EAAE,QAAQ;IAGlC,UAAU,IAAI,IAAI;IAIlB
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/ui/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAQ3C;;;;;;;GAOG;AACH,qBAAa,QAAS,YAAW,SAAS;IAEtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,OAAO,EAAE,MAAM,SAAS,MAAM,EAAE,EAChC,KAAK,EAAE,QAAQ;IAGlC,UAAU,IAAI,IAAI;IAIlB,yEAAyE;IACzE,OAAO,CAAC,GAAG;IAWX,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAkBhC"}
|
package/lib/ui/queue.js
CHANGED
|
@@ -21,7 +21,7 @@ export class QueueBar {
|
|
|
21
21
|
invalidate() {
|
|
22
22
|
// Nothing is cached: the prompts are read fresh on every frame.
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
24
|
+
/** Matching rails keep a submitted draft recognizable while it waits. */
|
|
25
25
|
box(text, width, framed) {
|
|
26
26
|
// A prompt can be longer than the screen; the reader needs to see that it is
|
|
27
27
|
// waiting, not to re-read all of it, so the first rows stand for the whole.
|
|
@@ -29,6 +29,7 @@ export class QueueBar {
|
|
|
29
29
|
text: line => this.theme.style('editor.queued', line),
|
|
30
30
|
border: rule => this.theme.editor.borderColor(rule),
|
|
31
31
|
framed,
|
|
32
|
+
rail: true,
|
|
32
33
|
}, QUEUE_TEXT_ROWS);
|
|
33
34
|
}
|
|
34
35
|
render(width) {
|
|
@@ -41,7 +42,7 @@ export class QueueBar {
|
|
|
41
42
|
// would look like an empty prompt waiting to be typed into.
|
|
42
43
|
if (!this.theme.visible('editor.queued'))
|
|
43
44
|
return [];
|
|
44
|
-
const framed = canFrame(width, this.theme.visible('editor.border'));
|
|
45
|
+
const framed = canFrame(width, this.theme.visible('editor.border'), true);
|
|
45
46
|
const shown = prompts.slice(-QUEUE_LIMIT);
|
|
46
47
|
const lines = [];
|
|
47
48
|
// The reader typed the newest prompt last, so that is the row that must stay
|
package/lib/ui/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/ui/queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEhD,mFAAmF;AACnF,MAAM,WAAW,GAAG,CAAC,CAAA;AACrB,yEAAyE;AACzE,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB;;;;;;;GAOG;AACH,MAAM,OAAO,QAAQ;IAEA;IACA;IAFnB,YACmB,OAAgC,EAChC,KAAe;QADf,YAAO,GAAP,OAAO,CAAyB;QAChC,UAAK,GAAL,KAAK,CAAU;IAC/B,CAAC;IAEJ,UAAU;QACR,gEAAgE;IAClE,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/ui/queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEhD,mFAAmF;AACnF,MAAM,WAAW,GAAG,CAAC,CAAA;AACrB,yEAAyE;AACzE,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB;;;;;;;GAOG;AACH,MAAM,OAAO,QAAQ;IAEA;IACA;IAFnB,YACmB,OAAgC,EAChC,KAAe;QADf,YAAO,GAAP,OAAO,CAAyB;QAChC,UAAK,GAAL,KAAK,CAAU;IAC/B,CAAC;IAEJ,UAAU;QACR,gEAAgE;IAClE,CAAC;IAED,yEAAyE;IACjE,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,MAAe;QACtD,6EAA6E;QAC7E,4EAA4E;QAC5E,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;YAC5B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC;YACrD,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YACnD,MAAM;YACN,IAAI,EAAE,IAAI;SACX,EAAE,eAAe,CAAC,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAA;QACnC,6EAA6E;QAC7E,4DAA4D;QAC5D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;YAAE,OAAO,EAAE,CAAA;QACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAA;QACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAA;QACzC,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,6EAA6E;QAC7E,0EAA0E;QAC1E,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,iBAAiB,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;QACrI,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;QAC1E,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
|
package/lib/ui/status.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface StatusFacts {
|
|
|
12
12
|
readonly provider: string | undefined;
|
|
13
13
|
readonly model: string | undefined;
|
|
14
14
|
readonly effort: string | undefined;
|
|
15
|
+
/** Optional route owners qualify the model, not unrelated session or permission facts. */
|
|
16
|
+
readonly modelHints?: readonly string[] | undefined;
|
|
15
17
|
/** The agent preset (mode) the session runs; fixed once it has a turn. */
|
|
16
18
|
readonly agentPreset: string | undefined;
|
|
17
19
|
/** The permission preset, which is a sandbox policy and a different thing. */
|
package/lib/ui/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/ui/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,wBAAwB,CAAA;AAKrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,4EAA4E;IAC5E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAA;IAChD,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC;AAwBD,wFAAwF;AAExF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQxE;AAOD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/ui/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,wBAAwB,CAAA;AAKrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IACnD,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,4EAA4E;IAC5E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAA;IAChD,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC;AAwBD,wFAAwF;AAExF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQxE;AAOD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAkDvF;AAsCD,yDAAyD;AACzD,qBAAa,SAAU,YAAW,SAAS;IAEvC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,KAAK,EAAE,MAAM,WAAW,EACxB,KAAK,EAAE,QAAQ;IAGlC,UAAU,IAAI,IAAI;IAIlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAGhC"}
|
package/lib/ui/status.js
CHANGED
|
@@ -82,9 +82,10 @@ export function formatStatus(facts, width, theme) {
|
|
|
82
82
|
if (facts.model !== undefined && facts.model !== '') {
|
|
83
83
|
const route = facts.provider === undefined || facts.provider === '' ? facts.model : `${facts.provider}/${facts.model}`;
|
|
84
84
|
push('status.model', route);
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
// Effort and addon hints qualify the same route, so they share one attached group.
|
|
86
|
+
const qualifiers = [facts.effort, ...(facts.modelHints ?? [])].filter(value => value !== undefined && value !== '');
|
|
87
|
+
if (qualifiers.length > 0)
|
|
88
|
+
push('status.effort', ` (${qualifiers.join(SEPARATOR_TEXT)})`, true);
|
|
88
89
|
}
|
|
89
90
|
if (facts.preset !== undefined && facts.preset !== '')
|
|
90
91
|
push('status.permission', facts.preset);
|
package/lib/ui/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/ui/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/ui/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-message.d.ts","sourceRoot":"","sources":["../../../src/ui/view/transcript-message.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,OAAO,
|
|
1
|
+
{"version":3,"file":"transcript-message.d.ts","sourceRoot":"","sources":["../../../src/ui/view/transcript-message.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,OAAO,EAAiD,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE1F,OAAO,EAAe,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAsC3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,KAAK,OAAO,CAAA;IAC3F,QAAQ,CAAC,iBAAiB,EAAE,MAAM,MAAM,CAAA;IACxC,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IACzD,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;CAC9G;AAED,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,eAAe;IAErD;;;;;SAKK;IACH,OAAO,CAAC,aAAa;IAKvB;;;;;SAKK;IACH,OAAO,CAAC,YAAY;IAkBtB;;;;;;;;;;SAUK;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI;IAkB5I;;;;;;SAMK;IACH,OAAO,CAAC,aAAa;IAIvB,0GAA0G;IACxG,QAAQ,IAAI,YAAY;IAG1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IA2B/H,gFAAgF;IAC9E,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAIvC"}
|
|
@@ -12,7 +12,7 @@ import {} from "../../transcript.js";
|
|
|
12
12
|
import {} from "../../theme-tokens.js";
|
|
13
13
|
import {} from "../../theme.js";
|
|
14
14
|
import { codeBlockLines } from "../diff.js";
|
|
15
|
-
import { canFrame, frameBlock,
|
|
15
|
+
import { canFrame, frameBlock, RAIL_COLUMNS, textWidth } from "../frame.js";
|
|
16
16
|
import { gapRows } from "../gap.js";
|
|
17
17
|
import { ANSWER_FACE } from "../markdown.js";
|
|
18
18
|
import {} from "../view.js";
|
|
@@ -96,13 +96,14 @@ export class Messages {
|
|
|
96
96
|
* only the drawing knows which columns of a row are the frame's.
|
|
97
97
|
*/
|
|
98
98
|
pushFramed(lines, copy, text, width, live, face, borderToken) {
|
|
99
|
-
const framed = canFrame(width, this.context.theme.visible(borderToken));
|
|
100
|
-
const inside = framed ? width -
|
|
99
|
+
const framed = canFrame(width, this.context.theme.visible(borderToken), true);
|
|
100
|
+
const inside = framed ? width - RAIL_COLUMNS : width;
|
|
101
101
|
const body = this.markdownLines(text, textWidth(inside), live, face);
|
|
102
102
|
const block = frameBlock(body, width, {
|
|
103
103
|
text: line => line,
|
|
104
104
|
border: rule => this.context.theme.style(borderToken, rule),
|
|
105
105
|
framed,
|
|
106
|
+
rail: true,
|
|
106
107
|
});
|
|
107
108
|
// A card is an object of the transcript rather than a paragraph of it, so it
|
|
108
109
|
// opens and closes with air: the prompt and the reply of one exchange stop
|