@duetso/agent 0.1.45 → 0.1.47

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.
Files changed (37) hide show
  1. package/README.md +23 -0
  2. package/dist/package.json +2 -1
  3. package/dist/src/session/session.d.ts +7 -2
  4. package/dist/src/session/session.d.ts.map +1 -1
  5. package/dist/src/session/session.js +1 -0
  6. package/dist/src/session/session.js.map +1 -1
  7. package/dist/src/tui/app.d.ts.map +1 -1
  8. package/dist/src/tui/app.js +320 -43
  9. package/dist/src/tui/app.js.map +1 -1
  10. package/dist/src/tui/autocomplete.d.ts +18 -3
  11. package/dist/src/tui/autocomplete.d.ts.map +1 -1
  12. package/dist/src/tui/autocomplete.js +36 -1
  13. package/dist/src/tui/autocomplete.js.map +1 -1
  14. package/dist/src/tui/history.js +3 -3
  15. package/dist/src/tui/history.js.map +1 -1
  16. package/dist/src/tui/paste.d.ts +113 -0
  17. package/dist/src/tui/paste.d.ts.map +1 -0
  18. package/dist/src/tui/paste.js +505 -0
  19. package/dist/src/tui/paste.js.map +1 -0
  20. package/dist/src/tui/sidebar.d.ts +11 -3
  21. package/dist/src/tui/sidebar.d.ts.map +1 -1
  22. package/dist/src/tui/sidebar.js +28 -5
  23. package/dist/src/tui/sidebar.js.map +1 -1
  24. package/dist/src/tui/tool-formatters.d.ts +29 -4
  25. package/dist/src/tui/tool-formatters.d.ts.map +1 -1
  26. package/dist/src/tui/tool-formatters.js +65 -16
  27. package/dist/src/tui/tool-formatters.js.map +1 -1
  28. package/dist/src/turn-runner/skills.d.ts.map +1 -1
  29. package/dist/src/turn-runner/skills.js +22 -8
  30. package/dist/src/turn-runner/skills.js.map +1 -1
  31. package/dist/src/turn-runner/turn-runner.d.ts +15 -2
  32. package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
  33. package/dist/src/turn-runner/turn-runner.js +59 -32
  34. package/dist/src/turn-runner/turn-runner.js.map +1 -1
  35. package/dist/src/types/protocol.d.ts +36 -4
  36. package/dist/src/types/protocol.d.ts.map +1 -1
  37. package/package.json +2 -1
@@ -0,0 +1,505 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { mkdir, readFile, unlink, writeFile } from "node:fs/promises";
4
+ import { homedir, platform, tmpdir } from "node:os";
5
+ import { extname, isAbsolute, join, resolve } from "node:path";
6
+ /**
7
+ * Hard cap on accepted image size. Larger images are refused outright so we
8
+ * do not silently send oversized blobs to the model API.
9
+ *
10
+ * Aligned with the web composer's 20MB cap to keep CLI/web behavior consistent.
11
+ */
12
+ export const MAX_IMAGE_BYTES = 20 * 1024 * 1024;
13
+ /** Recognized image MIME types we will accept from clipboard or file paste. */
14
+ const SUPPORTED_MIME_TYPES = new Set(["image/png", "image/jpeg", "image/gif", "image/webp"]);
15
+ /**
16
+ * Sniff a few magic byte sequences to identify common web-safe image formats.
17
+ *
18
+ * Terminal paste events do not always carry a `mimeType`, so we fall back to
19
+ * the bytes themselves before refusing the paste.
20
+ */
21
+ export function sniffImageMimeType(bytes) {
22
+ if (bytes.length < 4)
23
+ return undefined;
24
+ // PNG: 89 50 4E 47 0D 0A 1A 0A
25
+ if (bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47) {
26
+ return "image/png";
27
+ }
28
+ // JPEG: FF D8 FF
29
+ if (bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {
30
+ return "image/jpeg";
31
+ }
32
+ // GIF: "GIF87a" / "GIF89a"
33
+ if (bytes.length >= 6 &&
34
+ bytes[0] === 0x47 &&
35
+ bytes[1] === 0x49 &&
36
+ bytes[2] === 0x46 &&
37
+ bytes[3] === 0x38 &&
38
+ (bytes[4] === 0x37 || bytes[4] === 0x39) &&
39
+ bytes[5] === 0x61) {
40
+ return "image/gif";
41
+ }
42
+ // WebP: "RIFF" .... "WEBP"
43
+ if (bytes.length >= 12 &&
44
+ bytes[0] === 0x52 &&
45
+ bytes[1] === 0x49 &&
46
+ bytes[2] === 0x46 &&
47
+ bytes[3] === 0x46 &&
48
+ bytes[8] === 0x57 &&
49
+ bytes[9] === 0x45 &&
50
+ bytes[10] === 0x42 &&
51
+ bytes[11] === 0x50) {
52
+ return "image/webp";
53
+ }
54
+ return undefined;
55
+ }
56
+ /**
57
+ * Map a file extension to one of the accepted image MIME types.
58
+ *
59
+ * Used as a fallback when callers paste a file path and we want to skip the
60
+ * extra `readFile + sniff` round-trip on obvious cases. The actual bytes are
61
+ * still validated through `sniffImageMimeType` before sending.
62
+ */
63
+ export function mimeTypeFromExtension(path) {
64
+ const ext = extname(path).toLowerCase();
65
+ if (ext === ".png")
66
+ return "image/png";
67
+ if (ext === ".jpg" || ext === ".jpeg")
68
+ return "image/jpeg";
69
+ if (ext === ".gif")
70
+ return "image/gif";
71
+ if (ext === ".webp")
72
+ return "image/webp";
73
+ return undefined;
74
+ }
75
+ /** Filename suffix used when persisting cached pastes. */
76
+ function extensionForMimeType(mimeType) {
77
+ if (mimeType === "image/png")
78
+ return ".png";
79
+ if (mimeType === "image/jpeg")
80
+ return ".jpg";
81
+ if (mimeType === "image/gif")
82
+ return ".gif";
83
+ if (mimeType === "image/webp")
84
+ return ".webp";
85
+ return ".bin";
86
+ }
87
+ /**
88
+ * Resolve the per-session paste cache directory inside `~/.duet/cache/paste/`.
89
+ *
90
+ * The directory is created lazily (and only when actually used) so non-paste
91
+ * sessions do not litter the cache root with empty subdirectories.
92
+ */
93
+ export function pasteCacheDir(sessionId) {
94
+ return resolve(homedir(), ".duet", "cache", "paste", sessionId);
95
+ }
96
+ /**
97
+ * Persist pasted image bytes under the session cache directory and return the
98
+ * `PendingImage` shape the TUI tracks alongside the input buffer.
99
+ *
100
+ * The id and label are caller-supplied so the TUI can drive monotonic
101
+ * `[Image #N]` numbering even when individual attachments are removed mid-edit.
102
+ */
103
+ export async function persistPastedImage(input) {
104
+ if (!SUPPORTED_MIME_TYPES.has(input.mimeType)) {
105
+ throw new Error(`Unsupported image type: ${input.mimeType}`);
106
+ }
107
+ if (input.bytes.length === 0) {
108
+ throw new Error("Empty image bytes");
109
+ }
110
+ if (input.bytes.length > MAX_IMAGE_BYTES) {
111
+ const mb = (input.bytes.length / (1024 * 1024)).toFixed(1);
112
+ throw new Error(`Image is too large (${mb} MB; max 20 MB)`);
113
+ }
114
+ const dir = pasteCacheDir(input.sessionId);
115
+ await mkdir(dir, { recursive: true });
116
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
117
+ const filename = `paste-${stamp}-${input.id}${extensionForMimeType(input.mimeType)}`;
118
+ const path = resolve(dir, filename);
119
+ await writeFile(path, input.bytes);
120
+ // Buffer.from(Uint8Array).toString('base64') round-trips reliably across
121
+ // both Bun and Node runtimes; pi-ai expects raw base64 (no `data:` prefix).
122
+ const data = Buffer.from(input.bytes).toString("base64");
123
+ return {
124
+ id: input.id,
125
+ label: `[Image #${input.id}]`,
126
+ path,
127
+ attachment: { data, mimeType: input.mimeType },
128
+ };
129
+ }
130
+ /**
131
+ * Load an image from disk into a `PendingImage`, verifying it is one of the
132
+ * supported MIME types via byte sniffing.
133
+ *
134
+ * Used for the `/image <path>` slash command and for the auto-attach path
135
+ * triggered when a clipboard paste turns out to be a single file path.
136
+ */
137
+ export async function loadImageFromPath(input) {
138
+ const expanded = expandUserPath(input.rawPath);
139
+ const absolute = isAbsolute(expanded) ? expanded : resolve(input.cwd, expanded);
140
+ if (!existsSync(absolute)) {
141
+ throw new Error(`No file at ${absolute}`);
142
+ }
143
+ const bytes = new Uint8Array(await readFile(absolute));
144
+ if (bytes.length === 0) {
145
+ throw new Error(`File is empty: ${absolute}`);
146
+ }
147
+ if (bytes.length > MAX_IMAGE_BYTES) {
148
+ const mb = (bytes.length / (1024 * 1024)).toFixed(1);
149
+ throw new Error(`Image is too large (${mb} MB; max 20 MB)`);
150
+ }
151
+ // Sniff is authoritative — a file's extension cannot be trusted to match
152
+ // the actual content-type header we send to the vision model.
153
+ const mimeType = sniffImageMimeType(bytes);
154
+ if (!mimeType || !SUPPORTED_MIME_TYPES.has(mimeType)) {
155
+ throw new Error(`Unsupported image type for ${absolute}`);
156
+ }
157
+ const data = Buffer.from(bytes).toString("base64");
158
+ return {
159
+ id: input.id,
160
+ label: `[Image #${input.id}]`,
161
+ path: absolute,
162
+ attachment: { data, mimeType },
163
+ };
164
+ }
165
+ /**
166
+ * Heuristic: detect whether a chunk of pasted text is a single existing image
167
+ * file path the user expects us to auto-attach. Real-world clipboards do
168
+ * not deliver one canonical shape — we normalize the three we have seen in
169
+ * the wild before matching:
170
+ *
171
+ * 1. raw absolute path e.g. /Users/me/Pictures/cat.png
172
+ * 2. shell-escaped path e.g. /Users/me/Desktop/Frame\ 2147228872.png
173
+ * (Ghostty/iTerm/Terminal use this when dragging a file into the prompt)
174
+ * 3. file:// URL e.g. file:///Users/me/Desktop/cat%20one.png
175
+ * (Finder copy-as-URL, browsers, some shells)
176
+ *
177
+ * Any surrounding whitespace or matched quotes are stripped first.
178
+ */
179
+ export function looksLikeImageFilePath(text) {
180
+ const trimmed = text.trim();
181
+ if (!trimmed)
182
+ return undefined;
183
+ if (trimmed.includes("\n"))
184
+ return undefined;
185
+ if (trimmed.length > 4096)
186
+ return undefined;
187
+ const unquoted = stripMatchedQuotes(trimmed);
188
+ const candidate = normalizeFilePath(unquoted);
189
+ if (!candidate)
190
+ return undefined;
191
+ if (!mimeTypeFromExtension(candidate))
192
+ return undefined;
193
+ return candidate;
194
+ }
195
+ /** Strip matching outer single or double quotes; leaves unquoted strings intact. */
196
+ function stripMatchedQuotes(input) {
197
+ if (input.length < 2)
198
+ return input;
199
+ const first = input[0];
200
+ const last = input[input.length - 1];
201
+ if ((first === '"' || first === "'") && last === first) {
202
+ return input.slice(1, -1);
203
+ }
204
+ return input;
205
+ }
206
+ /**
207
+ * Convert a clipboard-shaped path string into the absolute path on disk.
208
+ *
209
+ * Returns `undefined` when the input still does not resemble a single path
210
+ * after normalization (e.g. multi-token shell input, no path separators, or
211
+ * a string with internal whitespace that is also not absolute).
212
+ */
213
+ function normalizeFilePath(input) {
214
+ let value = input;
215
+ // file:// URLs need percent-decoding; the host portion (always empty for
216
+ // local files in practice) is dropped.
217
+ if (/^file:\/\//i.test(value)) {
218
+ try {
219
+ value = decodeURIComponent(value.replace(/^file:\/\/[^/]*/i, ""));
220
+ }
221
+ catch {
222
+ return undefined;
223
+ }
224
+ }
225
+ // Shell-escaped spaces and parens come from drag-and-drop in most macOS
226
+ // terminals. Reverse the escaping so the result matches what the OS sees.
227
+ if (/\\[ ()'"\\&$;]/.test(value)) {
228
+ value = value.replace(/\\([ ()'"\\&$;])/g, "$1");
229
+ }
230
+ value = value.trim();
231
+ if (!value)
232
+ return undefined;
233
+ // After unescaping, an absolute path is always acceptable. A relative
234
+ // path with internal whitespace is too ambiguous to treat as one token —
235
+ // could be a sentence the user intends to type — so we bail.
236
+ if (!isAbsolute(value) && /\s/.test(value))
237
+ return undefined;
238
+ return value;
239
+ }
240
+ function expandUserPath(input) {
241
+ if (input.startsWith("~/"))
242
+ return resolve(homedir(), input.slice(2));
243
+ if (input === "~")
244
+ return homedir();
245
+ return input;
246
+ }
247
+ /**
248
+ * Read the operating system clipboard as plain text. Used as a fallback when
249
+ * the keystroke trigger (Cmd+V / Ctrl+V) intercepts a paste but no image is
250
+ * present on the clipboard — we should still let the user's text paste land
251
+ * in the prompt rather than silently swallowing it.
252
+ *
253
+ * Returns `undefined` when no probe succeeds or the clipboard is empty.
254
+ */
255
+ export async function tryReadClipboardText() {
256
+ const probes = textClipboardProbesForPlatform();
257
+ for (const probe of probes) {
258
+ try {
259
+ const text = await probe();
260
+ if (text && text.length > 0)
261
+ return text;
262
+ }
263
+ catch {
264
+ // try next probe
265
+ }
266
+ }
267
+ return undefined;
268
+ }
269
+ function textClipboardProbesForPlatform() {
270
+ const os = platform();
271
+ if (os === "darwin") {
272
+ return [
273
+ async () => {
274
+ const r = await runCommand("pbpaste", []);
275
+ return r.code === 0 ? r.stdout : undefined;
276
+ },
277
+ ];
278
+ }
279
+ if (os === "linux") {
280
+ return [
281
+ async () => {
282
+ const r = await runCommand("wl-paste", ["--no-newline"]);
283
+ return r.code === 0 ? r.stdout : undefined;
284
+ },
285
+ async () => {
286
+ const r = await runCommand("xclip", ["-selection", "clipboard", "-o"]);
287
+ return r.code === 0 ? r.stdout : undefined;
288
+ },
289
+ ];
290
+ }
291
+ if (os === "win32") {
292
+ return [
293
+ async () => {
294
+ const r = await runCommand("powershell", ["-NoProfile", "-Command", "Get-Clipboard"]);
295
+ return r.code === 0 ? r.stdout : undefined;
296
+ },
297
+ ];
298
+ }
299
+ return [];
300
+ }
301
+ /**
302
+ * Probe the operating system clipboard for an image and return its raw bytes.
303
+ *
304
+ * Most terminals do not forward binary clipboard contents on Cmd+V — even when
305
+ * the OS pasteboard holds a real PNG (e.g. "Copy as PNG" in Figma, copying a
306
+ * screenshot). The TUI calls this whenever a paste event fires without
307
+ * delivering image bytes itself, so the user gets the same Claude-Code-style
308
+ * inline attachment regardless of what the terminal stripped.
309
+ *
310
+ * Returns `undefined` when no image is on the clipboard or no probe succeeds.
311
+ * Does not throw — we never want a clipboard probe to break the prompt.
312
+ */
313
+ export async function tryReadClipboardImage() {
314
+ const probes = clipboardProbesForPlatform();
315
+ for (const probe of probes) {
316
+ try {
317
+ const bytes = await probe();
318
+ if (bytes && bytes.length > 0) {
319
+ const mimeType = sniffImageMimeType(bytes);
320
+ if (mimeType && SUPPORTED_MIME_TYPES.has(mimeType)) {
321
+ return { bytes, mimeType };
322
+ }
323
+ }
324
+ }
325
+ catch {
326
+ // Try the next probe — the only known cause on macOS is that `swift`
327
+ // is missing (Xcode CLT not installed). Linux/Windows differ by which
328
+ // helper tool the user happens to have available.
329
+ }
330
+ }
331
+ return undefined;
332
+ }
333
+ function clipboardProbesForPlatform() {
334
+ const os = platform();
335
+ if (os === "darwin") {
336
+ // Swift one-liner. Runs inside a real NSApplication-backed Cocoa
337
+ // process, which is the only env in which Chromium-based apps
338
+ // (Figma, Slack desktop, browsers) actually fulfill their
339
+ // NSPasteboard promise items. AppleScript class-code reads and
340
+ // JXA via osascript both run without an NSApplication and silently
341
+ // get nil for promise-backed UTIs.
342
+ //
343
+ // Swift's NSImage(pasteboard:) handles every input AppKit
344
+ // recognizes — PNG, TIFF, JPEG, GIF, BMP, PDF, file URLs, and
345
+ // promise items — so we do not need any further fallback probes.
346
+ // Requires Xcode Command Line Tools (`xcode-select --install`),
347
+ // which is a near-universal prerequisite on macOS dev machines.
348
+ return [readMacClipboardViaSwift];
349
+ }
350
+ if (os === "linux") {
351
+ return [
352
+ // Wayland first; falls through to X11 when wl-paste is missing.
353
+ readClipboardViaCommand("wl-paste", ["--type", "image/png"]),
354
+ readClipboardViaCommand("xclip", ["-selection", "clipboard", "-t", "image/png", "-o"]),
355
+ ];
356
+ }
357
+ if (os === "win32") {
358
+ return [readWindowsClipboardViaPowerShell];
359
+ }
360
+ return [];
361
+ }
362
+ /**
363
+ * macOS clipboard → PNG via a tiny Swift program executed in-process by
364
+ * `swift -e`. Unlike `osascript -l JavaScript`, the swift binary launches
365
+ * a real NSApplication-backed process, so NSPasteboard promise providers
366
+ * (Figma, Slack desktop, browser image copies) actually deliver bytes.
367
+ *
368
+ * Strategy:
369
+ * 1. NSImage(pasteboard:) — fulfills any image promise on the pasteboard.
370
+ * 2. Re-encode via NSBitmapImageRep PNG output so we always hand back PNG.
371
+ *
372
+ * Returns undefined when `swift` is not installed (Xcode CLT missing) or
373
+ * when the clipboard has no image at all. There is no fallback probe —
374
+ * Swift covers every NSImage-representable input AppKit recognizes.
375
+ */
376
+ async function readMacClipboardViaSwift() {
377
+ const stamp = `${Date.now()}-${process.pid}`;
378
+ const outPath = join(tmpdir(), `duet-swift-${stamp}.png`);
379
+ const program = [
380
+ "import AppKit",
381
+ "let pb = NSPasteboard.general",
382
+ "guard let img = NSImage(pasteboard: pb),",
383
+ " let tiff = img.tiffRepresentation,",
384
+ " let rep = NSBitmapImageRep(data: tiff),",
385
+ ` let png = rep.representation(using: .png, properties: [:]) else { exit(2) }`,
386
+ `try png.write(to: URL(fileURLWithPath: ${JSON.stringify(outPath)}))`,
387
+ 'print("ok")',
388
+ ].join("\n");
389
+ try {
390
+ const result = await runCommand("swift", ["-e", program]);
391
+ if (result.code !== 0)
392
+ return undefined;
393
+ if (!result.stdout.includes("ok"))
394
+ return undefined;
395
+ return new Uint8Array(await readFile(outPath));
396
+ }
397
+ catch {
398
+ return undefined;
399
+ }
400
+ finally {
401
+ try {
402
+ await unlink(outPath);
403
+ }
404
+ catch {
405
+ /* ignore */
406
+ }
407
+ }
408
+ }
409
+ /**
410
+ * Diagnostic: list the UTI types currently on the macOS clipboard. Surfaced
411
+ * via the TUI when a probe round comes up empty so users can see what their
412
+ * source app actually put on the pasteboard.
413
+ */
414
+ export async function describeMacClipboardTypes() {
415
+ if (platform() !== "darwin")
416
+ return undefined;
417
+ // Prefer JXA: NSPasteboard.types returns the real UTI list, including
418
+ // `public.png`, `org.chromium.*`, and any custom UTIs the source app
419
+ // advertised. AppleScript's `clipboard info` only surfaces the legacy
420
+ // four-letter class codes and misses Chromium-style promise items.
421
+ try {
422
+ const jxa = await runCommand("osascript", [
423
+ "-l",
424
+ "JavaScript",
425
+ "-e",
426
+ "ObjC.import('AppKit'); JSON.stringify(ObjC.deepUnwrap($.NSPasteboard.generalPasteboard.types))",
427
+ ]);
428
+ if (jxa.code === 0 && jxa.stdout && jxa.stdout.startsWith("[")) {
429
+ return jxa.stdout;
430
+ }
431
+ }
432
+ catch {
433
+ /* fall through to AppleScript */
434
+ }
435
+ try {
436
+ const result = await runCommand("osascript", [
437
+ "-e",
438
+ 'try\nreturn (clipboard info) as text\non error e\nreturn "err:" & e\nend try',
439
+ ]);
440
+ if (result.code !== 0 || !result.stdout || result.stdout.startsWith("err:")) {
441
+ return undefined;
442
+ }
443
+ return result.stdout;
444
+ }
445
+ catch {
446
+ return undefined;
447
+ }
448
+ }
449
+ /**
450
+ * Generic stdout-collecting probe for tools that emit raw image bytes
451
+ * directly (pngpaste, xclip, wl-paste). Throws on non-zero exit so the outer
452
+ * loop falls through to the next probe.
453
+ */
454
+ function readClipboardViaCommand(cmd, args) {
455
+ return async () => {
456
+ const result = await runCommandRaw(cmd, args);
457
+ if (result.code !== 0 || result.stdout.length === 0)
458
+ return undefined;
459
+ return result.stdout;
460
+ };
461
+ }
462
+ async function readWindowsClipboardViaPowerShell() {
463
+ const tmp = join(tmpdir(), `duet-clipboard-${Date.now()}-${process.pid}.png`);
464
+ const script = [
465
+ "Add-Type -AssemblyName System.Windows.Forms;",
466
+ "$img = [System.Windows.Forms.Clipboard]::GetImage();",
467
+ "if ($img) {",
468
+ ` $img.Save('${tmp.replace(/\\/g, "\\\\")}', [System.Drawing.Imaging.ImageFormat]::Png);`,
469
+ " Write-Output ok;",
470
+ "} else {",
471
+ " Write-Output none;",
472
+ "}",
473
+ ].join(" ");
474
+ try {
475
+ const result = await runCommand("powershell", ["-NoProfile", "-Command", script]);
476
+ if (!result.stdout.startsWith("ok"))
477
+ return undefined;
478
+ return new Uint8Array(await readFile(tmp));
479
+ }
480
+ finally {
481
+ try {
482
+ await unlink(tmp);
483
+ }
484
+ catch {
485
+ /* ignore */
486
+ }
487
+ }
488
+ }
489
+ async function runCommand(cmd, args) {
490
+ const result = await runCommandRaw(cmd, args);
491
+ return { stdout: Buffer.from(result.stdout).toString("utf8").trim(), code: result.code };
492
+ }
493
+ function runCommandRaw(cmd, args) {
494
+ return new Promise((resolveResult, rejectResult) => {
495
+ const child = spawn(cmd, args, { stdio: ["ignore", "pipe", "pipe"] });
496
+ const chunks = [];
497
+ child.stdout.on("data", (chunk) => chunks.push(chunk));
498
+ child.on("error", rejectResult);
499
+ child.on("close", (code) => {
500
+ const buffer = Buffer.concat(chunks);
501
+ resolveResult({ stdout: new Uint8Array(buffer), code: code ?? 0 });
502
+ });
503
+ });
504
+ }
505
+ //# sourceMappingURL=paste.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste.js","sourceRoot":"","sources":["../../../src/tui/paste.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { BoxRenderable, type CliRenderer } from "@opentui/core";
2
- import type { TurnContextUsageEvent, TurnTodo } from "../types/protocol.js";
2
+ import type { TurnContextUsageEvent, TurnFollowUpQueueEntry, TurnTodo } from "../types/protocol.js";
3
3
  import type { StateMachineSession } from "../types/state-machine.js";
4
4
  /**
5
5
  * Right-hand sidebar that surfaces the runner's todos, queued follow-ups,
@@ -12,12 +12,20 @@ export interface Sidebar {
12
12
  readonly view: BoxRenderable;
13
13
  /** Replace the rendered todo list with the runner's current todos. */
14
14
  setTodos(todos: readonly TurnTodo[]): void;
15
- /** Replace the rendered follow-up queue with the runner's pending prompts. */
16
- setFollowUpQueue(prompts: readonly string[]): void;
15
+ /** Replace the rendered follow-up queue with the runner's pending entries. */
16
+ setFollowUpQueue(entries: readonly TurnFollowUpQueueEntry[]): void;
17
17
  /** Mirror the active state-machine pipeline; pass undefined to clear. */
18
18
  setStateMachine(session: StateMachineSession | undefined): void;
19
19
  /** Render the latest context-usage progress bar; pass undefined to clear. */
20
20
  setContextUsage(usage: TurnContextUsageEvent | undefined): void;
21
+ /** Cumulative USD cost across all turns in the current session. */
22
+ setSessionCost(cost: number): void;
21
23
  }
24
+ /**
25
+ * Fixed sidebar column width in terminal cells. Exported so the transcript
26
+ * column can compute the available width for tool-block clamping without
27
+ * waiting on yoga layout.
28
+ */
29
+ export declare const SIDEBAR_WIDTH = 36;
22
30
  export declare function createSidebar(renderer: CliRenderer): Sidebar;
23
31
  //# sourceMappingURL=sidebar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/tui/sidebar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAkB,MAAM,eAAe,CAAC;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC3C,8EAA8E;IAC9E,gBAAgB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnD,yEAAyE;IACzE,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAAC;IAChE,6EAA6E;IAC7E,eAAe,CAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAAC;CACjE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAmF5D"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/tui/sidebar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAkB,MAAM,eAAe,CAAC;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC3C,8EAA8E;IAC9E,gBAAgB,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,GAAG,IAAI,CAAC;IACnE,yEAAyE;IACzE,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAAC;IAChE,6EAA6E;IAC7E,eAAe,CAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAAC;IAChE,mEAAmE;IACnE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAoG5D"}
@@ -1,18 +1,33 @@
1
1
  import { BoxRenderable, TextRenderable } from "@opentui/core";
2
2
  import { COLORS } from "./theme.js";
3
+ /**
4
+ * Fixed sidebar column width in terminal cells. Exported so the transcript
5
+ * column can compute the available width for tool-block clamping without
6
+ * waiting on yoga layout.
7
+ */
8
+ export const SIDEBAR_WIDTH = 36;
3
9
  export function createSidebar(renderer) {
4
10
  // Fixed width keeps the sidebar legible on narrow terminals without
5
11
  // squashing the transcript. The three panels stack vertically inside.
6
12
  const view = new BoxRenderable(renderer, {
7
13
  flexDirection: "column",
8
- width: 36,
14
+ width: SIDEBAR_WIDTH,
9
15
  height: "100%",
10
16
  flexShrink: 0,
11
17
  });
12
18
  const { panel: todoPanel, body: todoBody } = createPanel(renderer, "todos", "(none)");
13
19
  const { panel: followUpPanel, body: followUpBody } = createPanel(renderer, "follow-ups", "(none)");
14
20
  const { panel: smPanel, body: smBody } = createPanel(renderer, "state machine", "(inactive)");
15
- const { panel: contextPanel, body: contextBody } = createPanel(renderer, "context", "(waiting for usage)", { fixedHeight: 5, grow: false });
21
+ const { panel: contextPanel, body: contextBody } = createPanel(renderer, "context", "(waiting for usage)", { fixedHeight: 6, grow: false });
22
+ // Cumulative session cost rendered as a separate node so it can stay grey
23
+ // even when the context bar above flips to red on overflow.
24
+ const costLine = new TextRenderable(renderer, {
25
+ content: "",
26
+ fg: COLORS.hint,
27
+ height: 1,
28
+ flexShrink: 0,
29
+ });
30
+ contextPanel.add(costLine);
16
31
  view.add(todoPanel);
17
32
  view.add(followUpPanel);
18
33
  view.add(smPanel);
@@ -30,13 +45,18 @@ export function createSidebar(renderer) {
30
45
  .join("\n");
31
46
  todoBody.fg = COLORS.agent;
32
47
  },
33
- setFollowUpQueue(prompts) {
34
- if (prompts.length === 0) {
48
+ setFollowUpQueue(entries) {
49
+ if (entries.length === 0) {
35
50
  followUpBody.content = "(none)";
36
51
  followUpBody.fg = COLORS.hint;
37
52
  return;
38
53
  }
39
- followUpBody.content = prompts.map((prompt, index) => `${index + 1}. ${prompt}`).join("\n");
54
+ followUpBody.content = entries
55
+ .map((entry, index) => {
56
+ const attachments = entry.images?.length ? ` 📎${entry.images.length}` : "";
57
+ return `${index + 1}. ${entry.message}${attachments}`;
58
+ })
59
+ .join("\n");
40
60
  followUpBody.fg = COLORS.agent;
41
61
  },
42
62
  setStateMachine(session) {
@@ -70,6 +90,9 @@ export function createSidebar(renderer) {
70
90
  ].join("\n");
71
91
  contextBody.fg = usedTokens >= usage.contextWindow ? COLORS.error : COLORS.agent;
72
92
  },
93
+ setSessionCost(cost) {
94
+ costLine.content = cost > 0 ? `cost: $${cost.toFixed(4)}` : "";
95
+ },
73
96
  };
74
97
  }
75
98
  function createPanel(renderer, title, initialBody, options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/tui/sidebar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/tui/sidebar.ts"],"names":[],"mappings":"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"}