@quatcode/agent 0.2.7 → 0.2.9
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/dist/cli.js +1 -1
- package/dist/persona.d.ts +26 -0
- package/dist/persona.d.ts.map +1 -0
- package/dist/persona.js +186 -0
- package/dist/persona.js.map +1 -0
- package/dist/picker.d.ts +4 -0
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +41 -8
- package/dist/picker.js.map +1 -1
- package/dist/screen.js +1 -1
- package/dist/screen.js.map +1 -1
- package/dist/store.d.ts +2 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js.map +1 -1
- package/dist/theme.d.ts +16 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +49 -5
- package/dist/theme.js.map +1 -1
- package/dist/tui.d.ts +7 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +181 -23
- package/dist/tui.js.map +1 -1
- package/dist/turn.d.ts +2 -0
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +7 -4
- package/dist/turn.js.map +1 -1
- package/package.json +3 -3
package/dist/theme.js
CHANGED
|
@@ -44,13 +44,41 @@ export const THEMES = [
|
|
|
44
44
|
];
|
|
45
45
|
let activeId = "quatcode";
|
|
46
46
|
function mix(base, toward, t) {
|
|
47
|
+
const k = Math.max(0, Math.min(1, t));
|
|
47
48
|
const [br, bgc, bb] = hexToRgb(base);
|
|
48
49
|
const [tr, tg, tb] = hexToRgb(toward);
|
|
49
|
-
const channel = (a, b) => Math.round(a + (b - a) *
|
|
50
|
+
const channel = (a, b) => Math.round(a + (b - a) * k)
|
|
50
51
|
.toString(16)
|
|
51
52
|
.padStart(2, "0");
|
|
52
53
|
return `#${channel(br, tr)}${channel(bgc, tg)}${channel(bb, tb)}`;
|
|
53
54
|
}
|
|
55
|
+
export { mix };
|
|
56
|
+
/** Smooth 0→1→0 breathe value for time-based pulses. */
|
|
57
|
+
export function pulse(nowMs, periodMs = 900) {
|
|
58
|
+
return 0.5 + 0.5 * Math.sin((nowMs / periodMs) * Math.PI * 2);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A highlight sweeping across the text, letters near the head brightening
|
|
62
|
+
* toward `highlight`. Gives loading labels a premium "shimmer" instead of a
|
|
63
|
+
* static word. `phase` is a continuous position (chars per call unit).
|
|
64
|
+
*/
|
|
65
|
+
export function shimmer(text, phase, options = {}) {
|
|
66
|
+
if (!colorEnabled || text === "")
|
|
67
|
+
return text;
|
|
68
|
+
const base = options.base ?? palette.silver;
|
|
69
|
+
const highlight = options.highlight ?? palette.bone;
|
|
70
|
+
const tail = Math.max(1, options.tail ?? 4);
|
|
71
|
+
const chars = [...text];
|
|
72
|
+
const span = chars.length + tail * 2 + 1;
|
|
73
|
+
const head = (((phase % span) + span) % span) - tail;
|
|
74
|
+
let out = "";
|
|
75
|
+
for (let i = 0; i < chars.length; i++) {
|
|
76
|
+
const distance = Math.abs(i - head);
|
|
77
|
+
const t = distance >= tail ? 0 : 1 - distance / tail;
|
|
78
|
+
out += fg(mix(base, highlight, t * t * (3 - 2 * t)), chars[i]);
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
54
82
|
export function getThemes() {
|
|
55
83
|
return THEMES;
|
|
56
84
|
}
|
|
@@ -172,16 +200,30 @@ const ANSI_RE = /\u001b\[[0-9;?]*[A-Za-z]/g;
|
|
|
172
200
|
export function stripAnsi(text) {
|
|
173
201
|
return text.replace(ANSI_RE, "");
|
|
174
202
|
}
|
|
175
|
-
const ASCII_MODE = process.env.QUATCODE_ASCII === "1";
|
|
203
|
+
export const ASCII_MODE = process.env.QUATCODE_ASCII === "1";
|
|
204
|
+
/**
|
|
205
|
+
* Glyphs that live inside emoji blocks but render one column wide in terminal
|
|
206
|
+
* fonts (our own chrome uses them: ★ ✓ ✕ ✎ ❯).
|
|
207
|
+
*/
|
|
208
|
+
const NARROW_GLYPHS = new Set([0x2605, 0x2606, 0x270e, 0x2713, 0x2715, 0x2727, 0x276f]);
|
|
176
209
|
function isWide(cp) {
|
|
210
|
+
if (NARROW_GLYPHS.has(cp))
|
|
211
|
+
return false;
|
|
177
212
|
return ((cp >= 0x1100 && cp <= 0x115f) ||
|
|
213
|
+
(cp >= 0x231a && cp <= 0x231b) ||
|
|
214
|
+
(cp >= 0x23e9 && cp <= 0x23ec) ||
|
|
215
|
+
cp === 0x23f0 ||
|
|
216
|
+
cp === 0x23f3 ||
|
|
217
|
+
(cp >= 0x25fd && cp <= 0x25fe) ||
|
|
218
|
+
(cp >= 0x2600 && cp <= 0x27bf) ||
|
|
219
|
+
(cp >= 0x2b00 && cp <= 0x2bff) ||
|
|
178
220
|
(cp >= 0x2e80 && cp <= 0xa4cf) ||
|
|
179
221
|
(cp >= 0xac00 && cp <= 0xd7a3) ||
|
|
180
222
|
(cp >= 0xf900 && cp <= 0xfaff) ||
|
|
181
223
|
(cp >= 0xfe30 && cp <= 0xfe4f) ||
|
|
182
224
|
(cp >= 0xff00 && cp <= 0xff60) ||
|
|
183
225
|
(cp >= 0xffe0 && cp <= 0xffe6) ||
|
|
184
|
-
(cp >=
|
|
226
|
+
(cp >= 0x1f000 && cp <= 0x1faff) ||
|
|
185
227
|
(cp >= 0x20000 && cp <= 0x3fffd));
|
|
186
228
|
}
|
|
187
229
|
function isCombining(cp) {
|
|
@@ -261,9 +303,10 @@ export const glyphs = ASCII_MODE
|
|
|
261
303
|
bullet: "*",
|
|
262
304
|
pin: "*",
|
|
263
305
|
arrow: "->",
|
|
306
|
+
arrowLeft: "<-",
|
|
264
307
|
arrowDown: "v",
|
|
265
308
|
ellipsis: "...",
|
|
266
|
-
spinner: ["
|
|
309
|
+
spinner: ["-", "\\", "|", "/"],
|
|
267
310
|
box: {
|
|
268
311
|
tl: "+",
|
|
269
312
|
tr: "+",
|
|
@@ -287,9 +330,10 @@ export const glyphs = ASCII_MODE
|
|
|
287
330
|
bullet: "•",
|
|
288
331
|
pin: "★",
|
|
289
332
|
arrow: "→",
|
|
333
|
+
arrowLeft: "←",
|
|
290
334
|
arrowDown: "↓",
|
|
291
335
|
ellipsis: "…",
|
|
292
|
-
spinner: ["{
|
|
336
|
+
spinner: ["{◜}", "{◝}", "{◞}", "{◟}"],
|
|
293
337
|
box: {
|
|
294
338
|
tl: "┌",
|
|
295
339
|
tr: "┐",
|
package/dist/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;CAClB,CAAC;AAiBF,MAAM,CAAC,MAAM,MAAM,GAAsB;IACvC;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,EAAE,EAAE,SAAS;QACb,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;KACpB;IACD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACjJ,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACzH,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACrJ,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACjJ,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACzH,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnJ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC7I,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACzH,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC3H,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC7I,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACjJ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC7I,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnJ,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC/I,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC/I,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;CACtJ,CAAC;AAEF,IAAI,QAAQ,GAAG,UAAU,CAAC;AAE1B,SAAS,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,CAAS;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SACxB,QAAQ,CAAC,EAAE,CAAC;SACZ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtB,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,OAAO,EAAE,GAAG,EAAE,CAAC;AAEf,wDAAwD;AACxD,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,QAAQ,GAAG,GAAG;IACjD,OAAO,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CACrB,IAAY,EACZ,KAAa,EACb,OAAO,GAAyD,EAAE;IAElE,IAAI,CAAC,YAAY,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;QACrD,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,IAAK,MAAM,CAAC,CAAC,CAAqB,CAAC;IACxF,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrF,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7E,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAClF,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IACxB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9B,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,KAAc;IAC7D,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAyB,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAA8B;IACtE,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC3F,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,IAAI,YAAY,GAAG,WAAW,EAAE,CAAC;AAEjC,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,YAAY,GAAG,OAAO,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO;QACL,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,GAAW,EAAE,IAAY;IAC1C,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,GAAW,EAAE,IAAY;IAC1C,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,YAAY,IAAI,YAAY,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAY;IAC9B,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,YAAY,IAAI,YAAY,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,YAAY,IAAI,YAAY,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,YAAY,IAAI,YAAY,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;CAC/D,CAAC;AAEF,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAE5C,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC;AAE7D;;;GAGG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAExF,SAAS,MAAM,CAAC,EAAU;IACxB,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,CACL,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,EAAE,KAAK,MAAM;QACb,EAAE,KAAK,MAAM;QACb,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC;QAChC,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC,CACjC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,CACL,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM;YAAE,SAAS;QAChE,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,KAAa;IAClD,MAAM,IAAI,GAAG,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAa;IACpD,MAAM,IAAI,GAAG,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,GAAW;IAChD,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,MAAM;YACtB,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAC9B,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACZ,SAAS;QACX,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YAAE,MAAM;QAC/B,GAAG,IAAI,EAAE,CAAC;QACV,KAAK,IAAI,CAAC,CAAC;QACX,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,GAAW;IAChD,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAuB;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU;IAC9B,CAAC,CAAC;QACE,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,GAAG;QAChB,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,GAAG,EAAE,GAAG;QACR,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;QAC9B,GAAG,EAAE;YACH,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,GAAG;YACP,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX;KACF;IACH,CAAC,CAAC;QACE,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,GAAG;QAChB,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,GAAG,EAAE,GAAG;QACR,KAAK,EAAE,GAAG;QACV,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QACrC,GAAG,EAAE;YACH,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,GAAG;YACP,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX;KACF,CAAC;AAEN,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IAClC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IACjC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IAChC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IAC9B,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IACnC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IAC3B,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IACvC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IAClC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;IACpC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;CACpC,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC;AAC5B,CAAC"}
|
package/dist/tui.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ImagePart } from "@quatcode/core";
|
|
1
|
+
import type { ChatMessage, ImagePart } from "@quatcode/core";
|
|
2
2
|
export type TuiOptions = {
|
|
3
3
|
dir: string;
|
|
4
4
|
model?: string;
|
|
@@ -14,6 +14,12 @@ export type TuiOptions = {
|
|
|
14
14
|
};
|
|
15
15
|
};
|
|
16
16
|
export declare function runTui(options: TuiOptions): Promise<number>;
|
|
17
|
+
/**
|
|
18
|
+
* A side-channel (/btw) request can run while a tool call is still in flight,
|
|
19
|
+
* so the transcript may end with an assistant tool_call that has no tool result
|
|
20
|
+
* yet. Providers reject such a sequence (400), so drop unanswered tool_calls.
|
|
21
|
+
*/
|
|
22
|
+
export declare function sideChannelMessages(messages: readonly ChatMessage[]): ChatMessage[];
|
|
17
23
|
export declare function nextImageIndex(text: string): number;
|
|
18
24
|
export declare function extractInputImages(text: string, images: ReadonlyMap<number, ImagePart>): {
|
|
19
25
|
text: string;
|
package/dist/tui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAMV,MAAM,gBAAgB,CAAC;AAwFxB,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAA;KAAE,CAAC;CAC/D,CAAC;AA4CF,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAWjE;AAmpGD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,EAAE,CAiBnF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnD;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,CAavC"}
|
package/dist/tui.js
CHANGED
|
@@ -12,10 +12,11 @@ import { TurnController, fmtCost, fmtDuration, fmtTokens, toolArg, toolResultBlo
|
|
|
12
12
|
import { renderBanner } from "./logo.js";
|
|
13
13
|
import { renderMarkdown, wrapSegments } from "./markdown.js";
|
|
14
14
|
import { ADD_PROVIDER, allProviders, buildProvider, defaultModelFor, effortsForModel, hasKey, keyEnvFor, probeProviderModels, providerEnvKey, providerHasModel, providerMeta, providerSlug, registerCustomProvider, removeCustomProvider, resolveProviderForModel, } from "./models.js";
|
|
15
|
-
import { activeThemeId, bg, bold, buildColorRemap, clipAnsi, fg, getThemes, glyphs, padEndTo, palette, remapColors, setTheme, stringWidth, stripAnsi, tone, toolGlyph, } from "./theme.js";
|
|
16
|
-
import { listSessionsForDir, loadConfig, makeSessionId, saveConfig, saveSession, deleteSession } from "./store.js";
|
|
17
|
-
import { configFile, conversationKey, deleteConversation, displayTitle, latestPerConversation, messagesForStorage, sortConversations, updateConversation
|
|
15
|
+
import { ASCII_MODE, activeThemeId, bg, bold, buildColorRemap, clipAnsi, fg, getThemes, glyphs, mix, padEndTo, palette, pulse, remapColors, setTheme, shimmer, stringWidth, stripAnsi, tone, toolGlyph, } from "./theme.js";
|
|
16
|
+
import { listSessions, listSessionsForDir, loadConfig, makeSessionId, saveConfig, saveSession, deleteSession } from "./store.js";
|
|
17
|
+
import { configFile, conversationKey, deleteConversation, displayTitle, latestPerConversation, messagesForStorage, sameDir, sortConversations, updateConversation } from "./store.js";
|
|
18
18
|
import { MCP_USAGE, isMcpUrl, mcpInstructionsSection, parseMcpAdd } from "./mcp.js";
|
|
19
|
+
import { AUTO, PERSONA_SETTINGS, personaSection, personaSummary, } from "./persona.js";
|
|
19
20
|
import { copyToClipboard, readClipboardImage, readClipboardText, } from "./clipboard.js";
|
|
20
21
|
import { createLoadSkillTool, fetchSkillFromUrl, importSkillFile, listSkills, parseSkill, removeSkill, saveSkill, skillsRoot, skillsSystemSection, } from "./skills.js";
|
|
21
22
|
import { VERSION } from "./version.js";
|
|
@@ -27,13 +28,14 @@ const COMMAND_INFO = [
|
|
|
27
28
|
{ name: "/btw", args: "<question>", desc: "ask a side question without interrupting the task" },
|
|
28
29
|
{ name: "/effort", args: "[level]", desc: "reasoning effort (minimal…high)" },
|
|
29
30
|
{ name: "/key", desc: "enter the API key for the current provider" },
|
|
30
|
-
{ name: "/dir", args: "[path]", desc: "
|
|
31
|
+
{ name: "/dir", args: "[path]", desc: "move this session to another project directory" },
|
|
31
32
|
{ name: "/context", desc: "project summary" },
|
|
32
33
|
{ name: "/usage", desc: "tokens, cost and time" },
|
|
33
34
|
{ name: "/sessions", desc: "list and resume recent sessions" },
|
|
34
35
|
{ name: "/timeline", desc: "jump to a sent message" },
|
|
35
36
|
{ name: "/undo", desc: "take back the last message" },
|
|
36
37
|
{ name: "/verbose", desc: "toggle full tool output" },
|
|
38
|
+
{ name: "/settings", desc: "tune the agent's persona: character, tone, verbosity…" },
|
|
37
39
|
{ name: "/skills", args: "[add|remove|list]", desc: "manage agent skills" },
|
|
38
40
|
{ name: "/mcp", args: "[list|add|remove]", desc: "manage MCP servers" },
|
|
39
41
|
{ name: "/theme", args: "[id]", desc: "change the color theme" },
|
|
@@ -75,6 +77,7 @@ class TuiApp {
|
|
|
75
77
|
model = "";
|
|
76
78
|
effort = null;
|
|
77
79
|
config = {};
|
|
80
|
+
persona = {};
|
|
78
81
|
summary = null;
|
|
79
82
|
skills = [];
|
|
80
83
|
system = "";
|
|
@@ -137,6 +140,8 @@ class TuiApp {
|
|
|
137
140
|
modeBadgeWidth = 0;
|
|
138
141
|
modeBadgeHover = false;
|
|
139
142
|
versionNotice = null;
|
|
143
|
+
sessionDir;
|
|
144
|
+
conversationTitle = null;
|
|
140
145
|
bottomHintStart = -1;
|
|
141
146
|
bottomHintWidth = 0;
|
|
142
147
|
bottomHintRow = -1;
|
|
@@ -148,6 +153,7 @@ class TuiApp {
|
|
|
148
153
|
constructor(options, input, output) {
|
|
149
154
|
this.opts = options;
|
|
150
155
|
this.dir = path.resolve(options.dir);
|
|
156
|
+
this.sessionDir = this.dir;
|
|
151
157
|
this.gateMode = options.allowAll ? "always" : "ask";
|
|
152
158
|
this.out = output;
|
|
153
159
|
this.kb = new Keyboard(input, output);
|
|
@@ -182,6 +188,7 @@ class TuiApp {
|
|
|
182
188
|
process.exit(143);
|
|
183
189
|
});
|
|
184
190
|
this.config = await loadConfig().catch(() => ({}));
|
|
191
|
+
this.persona = this.config.persona ? { ...this.config.persona } : {};
|
|
185
192
|
for (const [name, value] of Object.entries(this.config.keys ?? {})) {
|
|
186
193
|
if (value && process.env[name] === undefined)
|
|
187
194
|
process.env[name] = value;
|
|
@@ -748,9 +755,15 @@ class TuiApp {
|
|
|
748
755
|
try {
|
|
749
756
|
const response = await provider.complete({
|
|
750
757
|
model: this.model,
|
|
751
|
-
system:
|
|
758
|
+
system: [
|
|
759
|
+
this.system,
|
|
760
|
+
personaSection(this.persona),
|
|
761
|
+
"# side channel\nThe user is asking a quick side question while the main task runs. Answer briefly and directly. Do not use tools, do not change the main task, and do not ask to run anything.",
|
|
762
|
+
]
|
|
763
|
+
.filter(Boolean)
|
|
764
|
+
.join("\n\n"),
|
|
752
765
|
messages: [
|
|
753
|
-
...this.session.getMessages(),
|
|
766
|
+
...sideChannelMessages(this.session.getMessages()),
|
|
754
767
|
{ role: "user", content: [{ type: "text", text }] },
|
|
755
768
|
],
|
|
756
769
|
maxTokens: 2048,
|
|
@@ -995,6 +1008,10 @@ class TuiApp {
|
|
|
995
1008
|
return;
|
|
996
1009
|
}
|
|
997
1010
|
if (this.mode === "picker" && this.picker) {
|
|
1011
|
+
if (this.picker.backAt(row - this.lastHeaderRows)) {
|
|
1012
|
+
this.closePicker(null);
|
|
1013
|
+
return;
|
|
1014
|
+
}
|
|
998
1015
|
const value = this.picker.pickAt(row - this.lastHeaderRows);
|
|
999
1016
|
if (value !== null)
|
|
1000
1017
|
this.closePicker(value);
|
|
@@ -1218,7 +1235,7 @@ class TuiApp {
|
|
|
1218
1235
|
this.bottomHintStart >= 0 ? this.lastHeaderRows + viewport + footer.length - 1 : -1;
|
|
1219
1236
|
let content;
|
|
1220
1237
|
if (this.mode === "picker" && this.picker) {
|
|
1221
|
-
content = this.picker.render(this.contentWidth()
|
|
1238
|
+
content = this.picker.render(this.contentWidth(), viewport);
|
|
1222
1239
|
}
|
|
1223
1240
|
else {
|
|
1224
1241
|
content = this.visibleTranscript(viewport);
|
|
@@ -1348,8 +1365,9 @@ class TuiApp {
|
|
|
1348
1365
|
return [rule, "", bottom];
|
|
1349
1366
|
}
|
|
1350
1367
|
statusLine() {
|
|
1351
|
-
const
|
|
1352
|
-
const
|
|
1368
|
+
const now = performance.now();
|
|
1369
|
+
const elapsedMs = now - this.statusStartedAt;
|
|
1370
|
+
const elapsed = (elapsedMs / 1000).toFixed(1);
|
|
1353
1371
|
const meta = [
|
|
1354
1372
|
this.status?.meta,
|
|
1355
1373
|
`${elapsed}s`,
|
|
@@ -1357,13 +1375,27 @@ class TuiApp {
|
|
|
1357
1375
|
]
|
|
1358
1376
|
.filter(Boolean)
|
|
1359
1377
|
.join(" · ");
|
|
1360
|
-
|
|
1378
|
+
const frames = glyphs.spinner;
|
|
1379
|
+
const glyph = frames[this.spinnerFrame % frames.length] ?? glyphs.diamond;
|
|
1380
|
+
const icon = fg(mix(palette.accent, palette.bone, pulse(now, 900)), glyph);
|
|
1381
|
+
const base = mix(palette.silver, palette.mist, 0.35);
|
|
1382
|
+
let label;
|
|
1383
|
+
if (this.status?.phase === "tool") {
|
|
1384
|
+
const name = this.status.label;
|
|
1385
|
+
label = `${tone.accent(toolGlyph(name))} ${shimmer(name, now / 55, { base, highlight: palette.bone })}`;
|
|
1386
|
+
}
|
|
1387
|
+
else {
|
|
1388
|
+
label = shimmer(this.status?.label ?? "", now / 55, { base, highlight: palette.bone });
|
|
1389
|
+
}
|
|
1390
|
+
return ` ${icon} ${label} ${tone.mist(meta)}`;
|
|
1361
1391
|
}
|
|
1362
1392
|
visibleTranscript(viewport) {
|
|
1363
|
-
|
|
1364
|
-
|
|
1393
|
+
let contentEnd = this.transcript.length;
|
|
1394
|
+
while (contentEnd > 0 && this.transcript[contentEnd - 1] === "")
|
|
1395
|
+
contentEnd -= 1;
|
|
1396
|
+
const maxOffset = Math.max(0, contentEnd - viewport);
|
|
1365
1397
|
this.scrollOffset = Math.max(0, Math.min(this.scrollOffset, maxOffset));
|
|
1366
|
-
const end =
|
|
1398
|
+
const end = contentEnd - this.scrollOffset;
|
|
1367
1399
|
const start = Math.max(0, end - viewport);
|
|
1368
1400
|
this.lastVisibleStart = start;
|
|
1369
1401
|
return this.transcript.slice(start, end);
|
|
@@ -1418,7 +1450,7 @@ class TuiApp {
|
|
|
1418
1450
|
this.spinnerTimer = setInterval(() => {
|
|
1419
1451
|
this.spinnerFrame += 1;
|
|
1420
1452
|
this.scheduleRender();
|
|
1421
|
-
},
|
|
1453
|
+
}, 75);
|
|
1422
1454
|
if (typeof this.spinnerTimer.unref === "function")
|
|
1423
1455
|
this.spinnerTimer.unref();
|
|
1424
1456
|
}
|
|
@@ -1564,7 +1596,7 @@ class TuiApp {
|
|
|
1564
1596
|
this.agentMode = this.agentMode === "build" ? "plan" : "build";
|
|
1565
1597
|
this.rebuildTools();
|
|
1566
1598
|
this.append([
|
|
1567
|
-
` ${tone.accent(glyphs.diamond)} ${tone.mist(`// MODE → ${this.agentMode.toUpperCase()}`)}${this.agentMode === "plan" ? `
|
|
1599
|
+
` ${tone.accent(glyphs.diamond)} ${tone.mist(`// MODE → ${this.agentMode.toUpperCase()}`)}${this.agentMode === "plan" ? ` ${tone.amber("· no edits")}` : ""}`,
|
|
1568
1600
|
]);
|
|
1569
1601
|
}
|
|
1570
1602
|
ensureProvider() {
|
|
@@ -2012,6 +2044,9 @@ class TuiApp {
|
|
|
2012
2044
|
const mcpSection = mcpInstructionsSection(this.mcp.instructions());
|
|
2013
2045
|
if (mcpSection)
|
|
2014
2046
|
system = system ? `${system}\n\n${mcpSection}` : mcpSection;
|
|
2047
|
+
const persona = personaSection(this.persona);
|
|
2048
|
+
if (persona)
|
|
2049
|
+
system = system ? `${system}\n\n${persona}` : persona;
|
|
2015
2050
|
if (this.agentMode === "plan") {
|
|
2016
2051
|
system = `${system ? `${system}\n\n` : ""}# mode\nYou are in PLAN mode: analyze the codebase and propose a plan. You may run read-only commands with run_command to inspect the project (each command is approved by the user), but never modify files, install packages or run mutating commands. When the plan is ready, present it and tell the user to press Tab to switch to BUILD mode.`;
|
|
2017
2052
|
}
|
|
@@ -2118,6 +2153,8 @@ class TuiApp {
|
|
|
2118
2153
|
this.session = new Session(this.system);
|
|
2119
2154
|
this.conversationId = makeSessionId();
|
|
2120
2155
|
this.providerSessionId = makeSessionId();
|
|
2156
|
+
this.sessionDir = this.dir;
|
|
2157
|
+
this.conversationTitle = null;
|
|
2121
2158
|
this.lastTurn = null;
|
|
2122
2159
|
this.pendingImages = new Map();
|
|
2123
2160
|
this.transcript = [];
|
|
@@ -2179,6 +2216,9 @@ class TuiApp {
|
|
|
2179
2216
|
` ${tone.mist(`// VERBOSE ${this.verbose ? "ON — FULL TOOL OUTPUT" : "OFF"}`)}`,
|
|
2180
2217
|
]);
|
|
2181
2218
|
return false;
|
|
2219
|
+
case "settings":
|
|
2220
|
+
await this.openSettings();
|
|
2221
|
+
return false;
|
|
2182
2222
|
case "theme":
|
|
2183
2223
|
await this.changeTheme(arg);
|
|
2184
2224
|
return false;
|
|
@@ -2199,6 +2239,45 @@ class TuiApp {
|
|
|
2199
2239
|
return false;
|
|
2200
2240
|
}
|
|
2201
2241
|
}
|
|
2242
|
+
async openSettings() {
|
|
2243
|
+
const before = JSON.stringify(this.persona);
|
|
2244
|
+
for (;;) {
|
|
2245
|
+
const entries = PERSONA_SETTINGS.map((setting) => ({
|
|
2246
|
+
kind: "item",
|
|
2247
|
+
value: setting.id,
|
|
2248
|
+
label: `${ASCII_MODE ? setting.asciiIcon : setting.icon} ${setting.label}`,
|
|
2249
|
+
hint: this.persona[setting.id] ?? AUTO,
|
|
2250
|
+
}));
|
|
2251
|
+
const id = await this.openPicker(new Picker({ title: "settings", entries, filterable: false }));
|
|
2252
|
+
if (!id)
|
|
2253
|
+
break;
|
|
2254
|
+
const setting = PERSONA_SETTINGS.find((entry) => entry.id === id);
|
|
2255
|
+
if (!setting)
|
|
2256
|
+
break;
|
|
2257
|
+
const current = this.persona[setting.id] ?? AUTO;
|
|
2258
|
+
const valueEntries = setting.options.map((option) => ({
|
|
2259
|
+
kind: "item",
|
|
2260
|
+
value: option.value,
|
|
2261
|
+
label: option.value === current ? `${glyphs.check} ${option.label}` : ` ${option.label}`,
|
|
2262
|
+
hint: option.description,
|
|
2263
|
+
}));
|
|
2264
|
+
const value = await this.openPicker(new Picker({ title: setting.label, entries: valueEntries, filterable: false }));
|
|
2265
|
+
if (value === null)
|
|
2266
|
+
continue;
|
|
2267
|
+
if (value === AUTO)
|
|
2268
|
+
delete this.persona[setting.id];
|
|
2269
|
+
else
|
|
2270
|
+
this.persona[setting.id] = value;
|
|
2271
|
+
}
|
|
2272
|
+
if (JSON.stringify(this.persona) !== before) {
|
|
2273
|
+
this.config.persona = this.persona;
|
|
2274
|
+
void saveConfig({ ...this.config }).catch(() => undefined);
|
|
2275
|
+
this.append([
|
|
2276
|
+
` ${tone.accent(glyphs.diamond)} ${tone.mist(`// SETTINGS → ${personaSummary(this.persona)}`)}`,
|
|
2277
|
+
"",
|
|
2278
|
+
]);
|
|
2279
|
+
}
|
|
2280
|
+
}
|
|
2202
2281
|
async changeTheme(arg) {
|
|
2203
2282
|
const current = activeThemeId();
|
|
2204
2283
|
if (arg) {
|
|
@@ -2235,7 +2314,14 @@ class TuiApp {
|
|
|
2235
2314
|
const records = await listSessionsForDir(this.dir, max);
|
|
2236
2315
|
const conversations = sortConversations(latestPerConversation(records));
|
|
2237
2316
|
if (conversations.length === 0) {
|
|
2238
|
-
|
|
2317
|
+
const lines = [
|
|
2318
|
+
` ${tone.mist(`// NO SESSIONS YET IN ${shortenHome(this.dir).toUpperCase()}`)}`,
|
|
2319
|
+
];
|
|
2320
|
+
const elsewhere = await this.latestSessionElsewhere();
|
|
2321
|
+
if (elsewhere) {
|
|
2322
|
+
lines.push(` ${tone.mist(`// latest: "${clipAnsi(displayTitle(elsewhere), 48)}" in ${shortenHome(elsewhere.cwd)}`)}`, ` ${tone.mist(`// resume it with: /dir ${shortenHome(elsewhere.cwd)} then /sessions`)}`);
|
|
2323
|
+
}
|
|
2324
|
+
this.append(lines);
|
|
2239
2325
|
return;
|
|
2240
2326
|
}
|
|
2241
2327
|
const labelWidth = Math.max(20, this.contentWidth() - 62);
|
|
@@ -2243,7 +2329,7 @@ class TuiApp {
|
|
|
2243
2329
|
kind: "item",
|
|
2244
2330
|
value: conversationKey(record),
|
|
2245
2331
|
label: `${record.pinned ? `${glyphs.pin} ` : ""}${clipAnsi(displayTitle(record), labelWidth)}`,
|
|
2246
|
-
hint: `${record.pinned ? "pinned · " : ""}${record.
|
|
2332
|
+
hint: `${record.pinned ? "pinned · " : ""}${record.provider ? `${record.provider} · ` : ""}${record.model} · ${record.createdAt.slice(0, 16).replace("T", " ")}`,
|
|
2247
2333
|
}));
|
|
2248
2334
|
const chosen = await this.openPicker(new Picker({
|
|
2249
2335
|
title: "sessions · enter resumes",
|
|
@@ -2299,6 +2385,7 @@ class TuiApp {
|
|
|
2299
2385
|
if (!title)
|
|
2300
2386
|
return;
|
|
2301
2387
|
await updateConversation(conversationKey(record), { title });
|
|
2388
|
+
this.conversationTitle = title;
|
|
2302
2389
|
this.append([
|
|
2303
2390
|
` ${tone.accent(glyphs.diamond)} ${tone.mist(`// SESSION RENAMED → ${clipAnsi(title, 60)}`)}`,
|
|
2304
2391
|
]);
|
|
@@ -2307,6 +2394,8 @@ class TuiApp {
|
|
|
2307
2394
|
const messages = record.messages ?? [];
|
|
2308
2395
|
this.session = new Session(this.system, messages);
|
|
2309
2396
|
this.conversationId = conversationKey(record);
|
|
2397
|
+
this.sessionDir = record.cwd ?? this.dir;
|
|
2398
|
+
this.conversationTitle = record.title ?? null;
|
|
2310
2399
|
this.providerSessionId = makeSessionId();
|
|
2311
2400
|
if (record.model) {
|
|
2312
2401
|
const resolved = record.provider && providerHasModel(record.provider, record.model)
|
|
@@ -2786,28 +2875,56 @@ class TuiApp {
|
|
|
2786
2875
|
this.scheduleRender();
|
|
2787
2876
|
return choice === "allow" || choice === "always";
|
|
2788
2877
|
}
|
|
2878
|
+
async latestSessionElsewhere() {
|
|
2879
|
+
const records = await listSessions(50).catch(() => []);
|
|
2880
|
+
return (records.find((record) => record.cwd && !sameDir(record.cwd, this.dir)) ?? null);
|
|
2881
|
+
}
|
|
2882
|
+
/**
|
|
2883
|
+
* On Windows a leading "/" is the drive root, so "/Downloads" resolves to
|
|
2884
|
+
* C:\Downloads instead of the user's Downloads folder. Treat it (and "~")
|
|
2885
|
+
* as home-relative so Unix-style paths do what users expect.
|
|
2886
|
+
*/
|
|
2887
|
+
resolveDirArg(arg) {
|
|
2888
|
+
let target = arg.trim();
|
|
2889
|
+
if (target === "~") {
|
|
2890
|
+
target = homedir();
|
|
2891
|
+
}
|
|
2892
|
+
else if (target.startsWith("~/") || target.startsWith("~\\")) {
|
|
2893
|
+
target = path.join(homedir(), target.slice(2));
|
|
2894
|
+
}
|
|
2895
|
+
else if (process.platform === "win32" &&
|
|
2896
|
+
target.startsWith("/") &&
|
|
2897
|
+
!target.startsWith("//")) {
|
|
2898
|
+
target = path.join(homedir(), target);
|
|
2899
|
+
}
|
|
2900
|
+
return path.resolve(this.dir, target);
|
|
2901
|
+
}
|
|
2789
2902
|
async changeDir(arg) {
|
|
2790
2903
|
if (!arg) {
|
|
2791
2904
|
this.append([` ${tone.mist(`// DIR ${this.dir}`)}`]);
|
|
2792
2905
|
return;
|
|
2793
2906
|
}
|
|
2794
|
-
const next =
|
|
2907
|
+
const next = this.resolveDirArg(arg);
|
|
2795
2908
|
if (next === this.dir) {
|
|
2796
2909
|
this.append([` ${tone.mist("// already in this directory")}`]);
|
|
2797
2910
|
return;
|
|
2798
2911
|
}
|
|
2912
|
+
const messages = this.session.getMessages().map((message) => ({ ...message }));
|
|
2799
2913
|
this.dir = next;
|
|
2800
2914
|
this.rebuildTools();
|
|
2801
|
-
this.
|
|
2915
|
+
this.lastTurn = null;
|
|
2802
2916
|
try {
|
|
2803
2917
|
const meta = await this.loadProject();
|
|
2804
|
-
this.session = new Session(this.system);
|
|
2918
|
+
this.session = new Session(this.system, messages);
|
|
2805
2919
|
this.append([
|
|
2806
|
-
` ${tone.mist(`//
|
|
2920
|
+
` ${tone.accent(glyphs.diamond)} ${tone.mist(`// SESSION MOVED → ${shortenHome(this.dir)}`)}`,
|
|
2807
2921
|
` ${tone.mist("// PROJECT")} ${meta}`,
|
|
2922
|
+
` ${tone.mist(`// ${messages.length} message${messages.length === 1 ? "" : "s"} carried over`)}`,
|
|
2923
|
+
` ${tone.mist("// in-memory only — the session keeps its original history")}`,
|
|
2808
2924
|
]);
|
|
2809
2925
|
}
|
|
2810
2926
|
catch (err) {
|
|
2927
|
+
this.session = new Session(this.system, messages);
|
|
2811
2928
|
this.append([` ${tone.red(`// failed to scan project: ${errorMessage(err)}`)}`]);
|
|
2812
2929
|
}
|
|
2813
2930
|
}
|
|
@@ -2902,6 +3019,7 @@ class TuiApp {
|
|
|
2902
3019
|
["mouse drag", "select text · ctrl+c copies"],
|
|
2903
3020
|
["click in input", "place the cursor"],
|
|
2904
3021
|
["permission card", "← → select · enter confirm · mouse click"],
|
|
3022
|
+
["pickers", "↑↓ move · enter select · ← or esc back · click rows and the ← back button"],
|
|
2905
3023
|
["sessions picker", "ctrl+r rename · ctrl+p pin · ctrl+d delete"],
|
|
2906
3024
|
["↑ ↓", "input history — previous / next message"],
|
|
2907
3025
|
["wheel", "scroll the conversation"],
|
|
@@ -2942,7 +3060,7 @@ class TuiApp {
|
|
|
2942
3060
|
continue;
|
|
2943
3061
|
}
|
|
2944
3062
|
const prefix = index === 0 ? `${tone.accent(glyphs.prompt)} ` : " ";
|
|
2945
|
-
const kind =
|
|
3063
|
+
const kind = "bold";
|
|
2946
3064
|
out.push(...wrapSegments([{ text: line, kind }], prefix, " ", width));
|
|
2947
3065
|
}
|
|
2948
3066
|
if (imageCount > 0) {
|
|
@@ -2955,8 +3073,9 @@ class TuiApp {
|
|
|
2955
3073
|
const record = {
|
|
2956
3074
|
id: makeSessionId(),
|
|
2957
3075
|
createdAt: new Date().toISOString(),
|
|
2958
|
-
cwd: this.
|
|
3076
|
+
cwd: this.sessionDir,
|
|
2959
3077
|
task: input,
|
|
3078
|
+
title: this.conversationTitle ?? this.sessionTitleFromMessages(),
|
|
2960
3079
|
provider: this.providerId,
|
|
2961
3080
|
model: this.model,
|
|
2962
3081
|
status: result.status,
|
|
@@ -2980,6 +3099,22 @@ class TuiApp {
|
|
|
2980
3099
|
}
|
|
2981
3100
|
return record.id;
|
|
2982
3101
|
}
|
|
3102
|
+
sessionTitleFromMessages() {
|
|
3103
|
+
for (const message of this.session.getMessages()) {
|
|
3104
|
+
if (message.role !== "user")
|
|
3105
|
+
continue;
|
|
3106
|
+
const text = message.content
|
|
3107
|
+
.map((part) => (part.type === "text" ? part.text : ""))
|
|
3108
|
+
.join(" ")
|
|
3109
|
+
.replace(/\[Image \d+\]/g, " ")
|
|
3110
|
+
.replace(/\s+/g, " ")
|
|
3111
|
+
.trim();
|
|
3112
|
+
if (!text)
|
|
3113
|
+
continue;
|
|
3114
|
+
return text.length > 60 ? `${text.slice(0, 59)}…` : text;
|
|
3115
|
+
}
|
|
3116
|
+
return "(untitled)";
|
|
3117
|
+
}
|
|
2983
3118
|
printGoodbye() {
|
|
2984
3119
|
this.append(["", ` ${tone.mist(`// SESSION CLOSED · ${this.summaryLine()}`)}`]);
|
|
2985
3120
|
}
|
|
@@ -3037,6 +3172,29 @@ const IMAGE_EXTENSIONS = {
|
|
|
3037
3172
|
".bmp": "image/bmp",
|
|
3038
3173
|
};
|
|
3039
3174
|
const IMAGE_MARKER_RE = /\[Image (\d+)\]/g;
|
|
3175
|
+
/**
|
|
3176
|
+
* A side-channel (/btw) request can run while a tool call is still in flight,
|
|
3177
|
+
* so the transcript may end with an assistant tool_call that has no tool result
|
|
3178
|
+
* yet. Providers reject such a sequence (400), so drop unanswered tool_calls.
|
|
3179
|
+
*/
|
|
3180
|
+
export function sideChannelMessages(messages) {
|
|
3181
|
+
const answered = new Set();
|
|
3182
|
+
for (const message of messages) {
|
|
3183
|
+
if (message.role === "tool")
|
|
3184
|
+
answered.add(message.toolCallId);
|
|
3185
|
+
}
|
|
3186
|
+
const out = [];
|
|
3187
|
+
for (const message of messages) {
|
|
3188
|
+
if (message.role !== "assistant" || !message.content.some((part) => part.type === "tool_call")) {
|
|
3189
|
+
out.push(message);
|
|
3190
|
+
continue;
|
|
3191
|
+
}
|
|
3192
|
+
const content = message.content.filter((part) => part.type !== "tool_call" || answered.has(part.id));
|
|
3193
|
+
if (content.length > 0)
|
|
3194
|
+
out.push({ ...message, content });
|
|
3195
|
+
}
|
|
3196
|
+
return out;
|
|
3197
|
+
}
|
|
3040
3198
|
export function nextImageIndex(text) {
|
|
3041
3199
|
const used = new Set();
|
|
3042
3200
|
for (const match of text.matchAll(IMAGE_MARKER_RE)) {
|