@xingular/harness 1.6.0-unstable → 2.0.1-unstable

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 (56) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/cli.js +23375 -19883
  3. package/dist/sdk/cli.js +16 -1
  4. package/dist/sdk/harness.js +2 -1
  5. package/dist/sdk/prompt/reporting.d.ts +1 -1
  6. package/dist/sdk/prompt/reporting.js +8 -3
  7. package/dist/sdk/server/methods.js +12 -3
  8. package/dist/sdk/server/serve.d.ts +5 -2
  9. package/dist/sdk/server/serve.js +10 -3
  10. package/dist/sdk/server/socket.d.ts +28 -0
  11. package/dist/sdk/server/socket.js +122 -0
  12. package/dist/sdk/sessions/contracts.d.ts +14 -1
  13. package/dist/sdk/sessions/contracts.js +9 -0
  14. package/dist/sdk/sessions/extensionUi.js +4 -4
  15. package/dist/sdk/sessions/live.d.ts +101 -0
  16. package/dist/sdk/sessions/live.js +265 -0
  17. package/dist/sdk/sessions/registry.d.ts +12 -0
  18. package/dist/sdk/sessions/registry.js +3 -0
  19. package/dist/sdk/sessions/runner.d.ts +25 -3
  20. package/dist/sdk/sessions/runner.js +171 -31
  21. package/dist/sdk/sessions/sessions.d.ts +49 -0
  22. package/dist/sdk/sessions/sessions.js +165 -8
  23. package/dist/sdk/{terminal → sessions}/stallWatch.d.ts +4 -0
  24. package/dist/sdk/{terminal → sessions}/stallWatch.js +10 -4
  25. package/dist/sdk/sessions/subagentService.js +1 -1
  26. package/dist/sdk/terminal/controller.js +1 -3
  27. package/dist/sdk/terminal/daemon.d.ts +44 -0
  28. package/dist/sdk/terminal/daemon.js +264 -0
  29. package/dist/sdk/terminal/liveTerminal.d.ts +96 -0
  30. package/dist/sdk/terminal/liveTerminal.js +436 -0
  31. package/dist/sdk/terminal/standalone.d.ts +19 -1
  32. package/dist/sdk/terminal/standalone.js +75 -25
  33. package/dist/sdk/terminal/terminals.d.ts +43 -0
  34. package/dist/sdk/terminal/terminals.js +171 -14
  35. package/dist/sdk/terminal/tui/commands.d.ts +2 -0
  36. package/dist/sdk/terminal/tui/commands.js +24 -2
  37. package/dist/sdk/terminal/tui/harnessRuntime.d.ts +8 -0
  38. package/dist/sdk/terminal/tui/harnessRuntime.js +771 -0
  39. package/dist/sdk/terminal/tui/thinkingLevels.d.ts +11 -0
  40. package/dist/sdk/terminal/tui/thinkingLevels.js +31 -0
  41. package/dist/terminal-opentui.js +2013 -975
  42. package/dist/terminal-pi.js +9 -0
  43. package/docs/architecture/02-sessions-and-runs.md +61 -3
  44. package/docs/architecture/04-prompt.md +8 -6
  45. package/docs/architecture/10-server-protocol.md +23 -1
  46. package/docs/architecture/11-terminal.md +67 -3
  47. package/docs/architecture/12-storage.md +3 -1
  48. package/docs/architecture/14-surfaces-and-parity.md +4 -0
  49. package/docs/architecture/15-remote-control.md +3 -1
  50. package/docs/architecture/README.md +5 -0
  51. package/docs/decisions/ADR-0001-owned-terminal.md +9 -2
  52. package/docs/decisions/ADR-0083-one-live-session-runtime.md +256 -0
  53. package/docs/parity.md +4 -3
  54. package/docs/releases/2.0.1-unstable.md +63 -0
  55. package/docs/terminal-tui.md +10 -5
  56. package/package.json +1 -1
@@ -9,10 +9,10 @@ var DEFAULT_PRODUCT_NAME = "Xingular Agent";
9
9
 
10
10
  // src/terminal/opentui/app.ts
11
11
  import { execFile as execFile2, spawn as spawn4 } from "child_process";
12
- import { existsSync as existsSync12 } from "fs";
12
+ import { existsSync as existsSync14 } from "fs";
13
13
  import { mkdtemp as mkdtemp2, readFile as readFile2, rm as rm2, writeFile } from "fs/promises";
14
14
  import { tmpdir as tmpdir3 } from "os";
15
- import { join as join24 } from "path";
15
+ import { join as join26 } from "path";
16
16
  import { randomUUID as randomUUID6 } from "crypto";
17
17
  import { promisify as promisify2 } from "util";
18
18
  import {
@@ -358,7 +358,8 @@ function splitColumns(left, right, leftWidth, width, rows, theme) {
358
358
  }
359
359
 
360
360
  // src/terminal/tui/commands.ts
361
- import { isAbsolute as isAbsolute3, relative as relative2, resolve } from "path";
361
+ import { existsSync as existsSync10, readdirSync as readdirSync8, readFileSync as readFileSync8 } from "fs";
362
+ import { isAbsolute as isAbsolute3, join as join17, relative as relative2, resolve } from "path";
362
363
  import { SessionManager } from "@earendil-works/pi-coding-agent";
363
364
 
364
365
  // src/commands/registry.ts
@@ -1173,6 +1174,14 @@ var questionRequestedPayload = z.object({
1173
1174
  multiSelect: z.boolean(),
1174
1175
  allowText: z.boolean(),
1175
1176
  userOnly: z.boolean().optional(),
1177
+ dialog: z.object({
1178
+ kind: z.enum(["select", "confirm", "input", "editor"]),
1179
+ title: z.string().max(4000),
1180
+ message: z.string().max(4000).optional(),
1181
+ placeholder: z.string().max(4000).optional(),
1182
+ prefill: z.string().max(1e5).optional(),
1183
+ options: z.array(z.string().max(4000)).max(200).optional()
1184
+ }).optional(),
1176
1185
  ...questionBatchFields
1177
1186
  }).superRefine(questionBatchRefinement).superRefine((value, context) => {
1178
1187
  const error = questionSketchError(value.uiSketch, value.options);
@@ -16141,7 +16150,7 @@ function createTerminalCommands(host) {
16141
16150
  break;
16142
16151
  path = selected;
16143
16152
  }
16144
- const target = resolve(host.cwd(), path);
16153
+ const target = sessionFileFor(path, host.cwd(), host.sessionDirectory());
16145
16154
  const within = relative2(host.sessionDirectory(), target);
16146
16155
  if (within === ".." || within.startsWith("../") || within.startsWith("..\\") || isAbsolute3(within)) {
16147
16156
  throw new Error("Resume sessions from this account history folder.");
@@ -16364,6 +16373,23 @@ function createTerminalCommands(host) {
16364
16373
  }
16365
16374
  return { execute, completions, skills, legacyAliases };
16366
16375
  }
16376
+ function sessionFileFor(argument, cwd, sessionDirectory) {
16377
+ const named = resolve(cwd, argument);
16378
+ if (existsSync10(named) || /[\\/]|\.jsonl$/u.test(argument))
16379
+ return named;
16380
+ try {
16381
+ for (const name of readdirSync8(sessionDirectory)) {
16382
+ if (!name.endsWith(".jsonl"))
16383
+ continue;
16384
+ const file = join17(sessionDirectory, name);
16385
+ const header = JSON.parse(readFileSync8(file, "utf8").split(`
16386
+ `, 1)[0]);
16387
+ if (header.type === "session" && header.id === argument)
16388
+ return file;
16389
+ }
16390
+ } catch {}
16391
+ return named;
16392
+ }
16367
16393
 
16368
16394
  // src/sessions/goal.ts
16369
16395
  import { randomUUID as randomUUID3 } from "crypto";
@@ -17521,8 +17547,8 @@ class TerminalDialogs {
17521
17547
  }
17522
17548
 
17523
17549
  // src/terminal/tui/keybindings.ts
17524
- import { readFileSync as readFileSync8 } from "fs";
17525
- import { join as join17 } from "path";
17550
+ import { readFileSync as readFileSync9 } from "fs";
17551
+ import { join as join18 } from "path";
17526
17552
  import { KeybindingsManager, TUI_KEYBINDINGS } from "@earendil-works/pi-tui";
17527
17553
  var actions = {
17528
17554
  "app.commands": "ctrl+k",
@@ -17579,7 +17605,7 @@ var HARNESS_KEYBINDINGS = {
17579
17605
  function readBindings(agentDir) {
17580
17606
  let bindings = {};
17581
17607
  try {
17582
- const source = JSON.parse(readFileSync8(join17(agentDir, "keybindings.json"), "utf8"));
17608
+ const source = JSON.parse(readFileSync9(join18(agentDir, "keybindings.json"), "utf8"));
17583
17609
  if (source && typeof source === "object" && !Array.isArray(source)) {
17584
17610
  bindings = Object.fromEntries(Object.entries(source).filter(([, value]) => typeof value === "string" || Array.isArray(value) && value.every((key) => typeof key === "string")));
17585
17611
  }
@@ -17594,7 +17620,7 @@ function terminalKeybindings(agentDir) {
17594
17620
  }
17595
17621
 
17596
17622
  // src/terminal/tui/piAdapter.ts
17597
- import { join as join18 } from "path";
17623
+ import { join as join19 } from "path";
17598
17624
  import { pathToFileURL as pathToFileURL2 } from "url";
17599
17625
  var adapter;
17600
17626
  var loading;
@@ -17608,10 +17634,10 @@ function loadPiAdapter() {
17608
17634
  assertPiAdapterVersion(pi.VERSION);
17609
17635
  const root = pi.getPackageDir();
17610
17636
  const [theme, renderers, clipboard, images] = await Promise.all([
17611
- import(pathToFileURL2(join18(root, "dist/modes/interactive/theme/theme.js")).href),
17612
- import(pathToFileURL2(join18(root, "dist/core/tools/renderers/index.js")).href),
17613
- import(pathToFileURL2(join18(root, "dist/utils/clipboard.js")).href),
17614
- import(pathToFileURL2(join18(root, "dist/utils/clipboard-image.js")).href)
17637
+ import(pathToFileURL2(join19(root, "dist/modes/interactive/theme/theme.js")).href),
17638
+ import(pathToFileURL2(join19(root, "dist/core/tools/renderers/index.js")).href),
17639
+ import(pathToFileURL2(join19(root, "dist/utils/clipboard.js")).href),
17640
+ import(pathToFileURL2(join19(root, "dist/utils/clipboard-image.js")).href)
17615
17641
  ]);
17616
17642
  if (typeof theme.setThemeInstance !== "function" || typeof renderers.withBuiltInRenderers !== "function" || typeof clipboard.readClipboardText !== "function" || typeof clipboard.readClipboardFilePaths !== "function" || typeof images.readClipboardImage !== "function" || typeof images.extensionForImageMimeType !== "function") {
17617
17643
  throw new Error("The pinned Pi terminal adapter no longer exposes its required presentation hooks.");
@@ -17644,11 +17670,11 @@ import {
17644
17670
  SessionManager as SessionManager2,
17645
17671
  SettingsManager
17646
17672
  } from "@earendil-works/pi-coding-agent";
17647
- import { closeSync as closeSync2, existsSync as existsSync11, openSync as openSync2, readSync, realpathSync as realpathSync4 } from "fs";
17648
- import { isAbsolute as isAbsolute5, join as join22, relative as relative4, resolve as resolve8, sep as sep8 } from "path";
17673
+ import { closeSync as closeSync2, existsSync as existsSync12, openSync as openSync2, readSync, realpathSync as realpathSync4 } from "fs";
17674
+ import { isAbsolute as isAbsolute5, join as join23, relative as relative4, resolve as resolve8, sep as sep8 } from "path";
17649
17675
 
17650
17676
  // src/terminal/piExtension.ts
17651
- import { readFileSync as readFileSync9 } from "fs";
17677
+ import { readFileSync as readFileSync10 } from "fs";
17652
17678
  import { createBashTool, createEditTool, createEditToolDefinition, createPowerShellTool, createWriteTool, createWriteToolDefinition } from "@earendil-works/pi-coding-agent";
17653
17679
  import { Type as Type2 } from "typebox";
17654
17680
 
@@ -18344,9 +18370,9 @@ function skillInvocations(text, skills) {
18344
18370
  // src/core/workspace.ts
18345
18371
  import { lstatSync as lstatSync2, realpathSync, statSync as statSync6 } from "fs";
18346
18372
  import { homedir as homedir2 } from "os";
18347
- import { basename as basename6, dirname as dirname7, isAbsolute as isAbsolute4, join as join19, relative as relative3, resolve as resolve2, sep as sep4 } from "path";
18373
+ import { basename as basename6, dirname as dirname7, isAbsolute as isAbsolute4, join as join20, relative as relative3, resolve as resolve2, sep as sep4 } from "path";
18348
18374
  function resolveWritePath(candidate, cwd = process.cwd()) {
18349
- const expanded = candidate === "~" ? homedir2() : candidate.startsWith("~/") || candidate.startsWith("~\\") ? join19(homedir2(), candidate.slice(2)) : candidate;
18375
+ const expanded = candidate === "~" ? homedir2() : candidate.startsWith("~/") || candidate.startsWith("~\\") ? join20(homedir2(), candidate.slice(2)) : candidate;
18350
18376
  const absoluteCandidate = isAbsolute4(expanded) ? resolve2(expanded) : resolve2(cwd, expanded);
18351
18377
  return canonicalizeTarget(absoluteCandidate);
18352
18378
  }
@@ -18475,9 +18501,9 @@ function isFile(path) {
18475
18501
  import { AsyncLocalStorage } from "async_hooks";
18476
18502
  import { spawn } from "child_process";
18477
18503
  import { randomUUID as randomUUID4 } from "crypto";
18478
- import { accessSync as accessSync3, constants as constants3, existsSync as existsSync10, lstatSync as lstatSync3, mkdtempSync, realpathSync as realpathSync2, readdirSync as readdirSync8, rmSync as rmSync6, statSync as statSync8 } from "fs";
18504
+ import { accessSync as accessSync3, constants as constants3, existsSync as existsSync11, lstatSync as lstatSync3, mkdtempSync, realpathSync as realpathSync2, readdirSync as readdirSync9, rmSync as rmSync6, statSync as statSync8 } from "fs";
18479
18505
  import { tmpdir } from "os";
18480
- import { join as join20 } from "path";
18506
+ import { join as join21 } from "path";
18481
18507
  import { spawnSync } from "child_process";
18482
18508
  var MARKER_PREFIX = "__XINGULAR_WORKSPACE_SANDBOX_STARTED_";
18483
18509
  var bashWriteScope = new AsyncLocalStorage;
@@ -18504,7 +18530,7 @@ function systemExecutable(candidates) {
18504
18530
  return null;
18505
18531
  }
18506
18532
  function shellPath() {
18507
- const shell = ["/bin/bash", "/usr/bin/bash"].find((candidate) => existsSync10(candidate));
18533
+ const shell = ["/bin/bash", "/usr/bin/bash"].find((candidate) => existsSync11(candidate));
18508
18534
  if (!shell)
18509
18535
  throw new Error("The workspace write-boundary sandbox requires Bash, but no Bash executable was found.");
18510
18536
  return shell;
@@ -18734,7 +18760,7 @@ function assertNoExternalHardlinks(workspaceRoot) {
18734
18760
  const visit = (directory) => {
18735
18761
  let entries;
18736
18762
  try {
18737
- entries = readdirSync8(directory, { withFileTypes: true });
18763
+ entries = readdirSync9(directory, { withFileTypes: true });
18738
18764
  } catch (error) {
18739
18765
  throw new Error(`Workspace hard-link inspection failed at ${directory}; Bash was not run: ${error instanceof Error ? error.message : String(error)}`);
18740
18766
  }
@@ -18785,7 +18811,7 @@ function createWorkspaceBashOperations(workspaceRoot, options = {}) {
18785
18811
  if (scope === "read-only") {
18786
18812
  if (platform === "win32")
18787
18813
  throw new Error("Plan-mode Bash needs a read-only sandbox, which Windows does not have. Bash was not run.");
18788
- const tempRoot = realpathSync2(mkdtempSync(join20(tmpdir(), "harness-read-only-bash-")));
18814
+ const tempRoot = realpathSync2(mkdtempSync(join21(tmpdir(), "harness-read-only-bash-")));
18789
18815
  try {
18790
18816
  const spec = workspaceSandboxCommand(platform, root, canonicalCwd, command, [], tempRoot);
18791
18817
  const env = { ...execOptions.env ?? process.env, TMPDIR: tempRoot };
@@ -19465,7 +19491,7 @@ async function piExtension_default(pi, planRun, getSession, goal) {
19465
19491
  const entries = names.map((name) => {
19466
19492
  const skill = skills.find((candidate) => candidate.name === name);
19467
19493
  try {
19468
- return { name, path: skill.path, baseDir: skill.baseDir, body: bodyOf(readFileSync9(skill.path, "utf8")) };
19494
+ return { name, path: skill.path, baseDir: skill.baseDir, body: bodyOf(readFileSync10(skill.path, "utf8")) };
19469
19495
  } catch {
19470
19496
  return { name, path: skill.path, body: "" };
19471
19497
  }
@@ -19973,8 +19999,8 @@ function limitHeaders(input) {
19973
19999
  }
19974
20000
 
19975
20001
  // src/commands/promptLoader.ts
19976
- import { readdirSync as readdirSync9, statSync as statSync10 } from "fs";
19977
- import { dirname as dirname9, join as join21, resolve as resolve5 } from "path";
20002
+ import { readdirSync as readdirSync10, statSync as statSync10 } from "fs";
20003
+ import { dirname as dirname9, join as join22, resolve as resolve5 } from "path";
19978
20004
 
19979
20005
  // src/commands/promptRoutes.ts
19980
20006
  import { resolve as resolve4, sep as sep5 } from "path";
@@ -20022,7 +20048,7 @@ async function wrapPromptLoader(pi, loader, found, paths, cwd, agentDir, extensi
20022
20048
  const scan = async (paths) => {
20023
20049
  const files = paths.flatMap((path) => {
20024
20050
  try {
20025
- return statSync10(path).isDirectory() ? readdirSync9(path).filter((name) => name.endsWith(".md") && !name.startsWith(".")).sort().map((name) => join21(path, name)) : [path];
20051
+ return statSync10(path).isDirectory() ? readdirSync10(path).filter((name) => name.endsWith(".md") && !name.startsWith(".")).sort().map((name) => join22(path, name)) : [path];
20026
20052
  } catch {
20027
20053
  return [];
20028
20054
  }
@@ -20373,7 +20399,7 @@ async function createTerminalRuntime(args, host) {
20373
20399
  throw new Error("The Harness terminal requires its isolated account directory.");
20374
20400
  const agentDir = realpathSync4(agentDirValue);
20375
20401
  const sessionDirectory = realpathSync4(resolve8(cwd, prepared.sessionDir));
20376
- const resume = prepared.session && existsSync11(resolve8(cwd, prepared.session)) ? resolve8(cwd, prepared.session) : null;
20402
+ const resume = prepared.session && existsSync12(resolve8(cwd, prepared.session)) ? resolve8(cwd, prepared.session) : null;
20377
20403
  if (resume) {
20378
20404
  assertTerminalHistoryPath(resume, sessionDirectory);
20379
20405
  assertTerminalSessionScope(resume, cwd);
@@ -20383,7 +20409,7 @@ async function createTerminalRuntime(args, host) {
20383
20409
  const identity = await controlCall("accounts.session").catch(() => null);
20384
20410
  const account = identity && typeof identity.accountId === "string" && typeof identity.label === "string" ? Object.freeze({ accountId: identity.accountId, label: identity.label }) : null;
20385
20411
  await loadPiAdapter();
20386
- const modelRuntime = await ModelRuntime.create({ credentials: terminalCredentialStore(), modelsPath: join22(agentDir, "models.json") });
20412
+ const modelRuntime = await ModelRuntime.create({ credentials: terminalCredentialStore(), modelsPath: join23(agentDir, "models.json") });
20387
20413
  observeProviderResponses(modelRuntime, (provider, response) => {
20388
20414
  const headers = limitHeaders(response.headers);
20389
20415
  if (!Object.keys(headers).length)
@@ -20745,78 +20771,953 @@ async function createTerminalRuntime(args, host) {
20745
20771
  }),
20746
20772
  goal,
20747
20773
  async interrupt() {
20748
- if (goal.active() && !native.session.isIdle)
20774
+ if (goal.active() && !native.session.isIdle)
20775
+ goal.pause();
20776
+ native.session.abortBash();
20777
+ await controlCall("terminal.interrupt", {}, 15000).catch(() => {});
20778
+ await native.session.abort();
20779
+ },
20780
+ async dispose() {
20781
+ if (disposed)
20782
+ return;
20783
+ disposed = true;
20784
+ try {
20785
+ await runtime.interrupt();
20786
+ await native.dispose();
20787
+ } finally {
20788
+ unsubscribe?.();
20789
+ listeners.clear();
20790
+ changes.clear();
20791
+ beforeChanges.clear();
20792
+ }
20793
+ }
20794
+ };
20795
+ const observeSession = () => {
20796
+ unsubscribe?.();
20797
+ unsubscribe = native.session.subscribe((event) => {
20798
+ if (event.type === "thinking_level_changed")
20799
+ modeChoices.record(recordingMode(), { effort: event.level });
20800
+ if (event.type === "agent_settled" && pendingApply && !planRun.active) {
20801
+ pendingApply = false;
20802
+ applyMode().catch(() => {
20803
+ return;
20804
+ });
20805
+ }
20806
+ for (const listener of listeners)
20807
+ listener(event);
20808
+ host.changed();
20809
+ });
20810
+ };
20811
+ const bind = async () => {
20812
+ const session = native.session;
20813
+ observeSession();
20814
+ await session.bindExtensions({
20815
+ uiContext: currentUi(),
20816
+ mode: "tui",
20817
+ shutdownHandler: () => host.shutdown(),
20818
+ abortHandler: () => {
20819
+ runtime.interrupt().catch((error) => host.notify(error instanceof Error ? error.message : String(error)));
20820
+ },
20821
+ onError: (error) => host.notify(`${error.event}: ${error.error}`),
20822
+ commandContextActions: {
20823
+ waitForIdle: () => native.session.waitForIdle(),
20824
+ newSession: (options) => runtime.newSession(options),
20825
+ switchSession: (path, options) => runtime.switchSession(path, options),
20826
+ fork: (entryId, options) => runtime.fork(entryId, options),
20827
+ navigateTree: (targetId, options) => runtime.navigateTree(targetId, options),
20828
+ reload: () => runtime.reload()
20829
+ }
20830
+ });
20831
+ const recovered = await recoverModel(session);
20832
+ await announce();
20833
+ if (recovered) {
20834
+ const effort = recovered.effort ? ` at ${recovered.effort} effort` : "";
20835
+ host.notify(`This account cannot use ${recovered.recorded}. Started on ${recovered.reference}${effort}, your latest choice on this account.`);
20836
+ } else if (native.modelFallbackMessage)
20837
+ host.notify(native.modelFallbackMessage);
20838
+ };
20839
+ native.setBeforeSessionInvalidate(before);
20840
+ native.setRebindSession(bind);
20841
+ try {
20842
+ await bind();
20843
+ } catch (error) {
20844
+ await runtime.dispose();
20845
+ throw error;
20846
+ }
20847
+ return runtime;
20848
+ }
20849
+
20850
+ // src/terminal/tui/harnessRuntime.ts
20851
+ import {
20852
+ DefaultResourceLoader as DefaultResourceLoader2,
20853
+ ModelRuntime as ModelRuntime2,
20854
+ resolveCliModel as resolveCliModel2,
20855
+ SessionManager as SessionManager3,
20856
+ SettingsManager as SettingsManager2
20857
+ } from "@earendil-works/pi-coding-agent";
20858
+ import { appendFileSync as appendFileSync2, copyFileSync as copyFileSync3, existsSync as existsSync13, readdirSync as readdirSync11, readFileSync as readFileSync11, realpathSync as realpathSync5 } from "fs";
20859
+ import { basename as basename7, isAbsolute as isAbsolute6, join as join24, resolve as resolve9 } from "path";
20860
+
20861
+ // src/terminal/tui/thinkingLevels.ts
20862
+ function supportedLevels(model) {
20863
+ if (!model?.reasoning)
20864
+ return ["off"];
20865
+ return EFFORTS.filter((level) => {
20866
+ const mapped = model.thinkingLevelMap?.[level];
20867
+ if (mapped === null)
20868
+ return false;
20869
+ return level === "xhigh" || level === "max" ? mapped !== undefined : true;
20870
+ });
20871
+ }
20872
+ function clampLevel(model, level) {
20873
+ const available = supportedLevels(model);
20874
+ if (available.includes(level))
20875
+ return level;
20876
+ const requested = EFFORTS.indexOf(level);
20877
+ if (requested === -1)
20878
+ return available[0] ?? "off";
20879
+ for (let index = requested;index < EFFORTS.length; index++)
20880
+ if (available.includes(EFFORTS[index]))
20881
+ return EFFORTS[index];
20882
+ for (let index = requested - 1;index >= 0; index--)
20883
+ if (available.includes(EFFORTS[index]))
20884
+ return EFFORTS[index];
20885
+ return available[0] ?? "off";
20886
+ }
20887
+
20888
+ // src/terminal/tui/harnessRuntime.ts
20889
+ var HARNESS_RUNTIME_ENV = "XINGULAR_TERMINAL_RUNTIME";
20890
+ var harnessRuntimeSelected = (env = process.env) => env[HARNESS_RUNTIME_ENV]?.trim().toLowerCase() !== "inprocess";
20891
+ var DEFAULT_TOOLS = ["read", "bash", "edit", "write", "grep", "find", "ls"];
20892
+ function headerId(path) {
20893
+ try {
20894
+ const header = JSON.parse(readFileSync11(path, "utf8").split(`
20895
+ `, 1)[0]);
20896
+ return header.type === "session" && typeof header.id === "string" ? header.id : null;
20897
+ } catch {
20898
+ return null;
20899
+ }
20900
+ }
20901
+ function textOf2(message) {
20902
+ if (!message)
20903
+ return "";
20904
+ if (typeof message.content === "string")
20905
+ return message.content;
20906
+ return Array.isArray(message.content) ? message.content.map((part) => part.type === "text" ? part.text ?? "" : "").join("") : "";
20907
+ }
20908
+ function trace(text) {
20909
+ const file = process.env.XINGULAR_CLIENT_TRACE;
20910
+ if (!file)
20911
+ return;
20912
+ try {
20913
+ appendFileSync2(file, `${new Date().toISOString()} ${text}
20914
+ `);
20915
+ } catch {}
20916
+ }
20917
+ async function createHarnessTerminalRuntime(args, host) {
20918
+ const prepared = parseTerminalArguments(args);
20919
+ const cwd = realpathSync5(process.cwd());
20920
+ const agentDirValue = process.env.PI_CODING_AGENT_DIR;
20921
+ if (!agentDirValue || !isAbsolute6(agentDirValue))
20922
+ throw new Error("The Harness terminal requires its isolated account directory.");
20923
+ const agentDir = realpathSync5(agentDirValue);
20924
+ const sessionDirectory = realpathSync5(resolve9(cwd, prepared.sessionDir));
20925
+ let sessionFile = prepared.session && existsSync13(resolve9(cwd, prepared.session)) ? resolve9(cwd, prepared.session) : null;
20926
+ if (sessionFile) {
20927
+ assertTerminalHistoryPath(sessionFile, sessionDirectory);
20928
+ assertTerminalSessionScope(sessionFile, cwd);
20929
+ }
20930
+ await claimTerminalControl();
20931
+ const identity = await controlCall("accounts.session").catch(() => null);
20932
+ const account = identity && typeof identity.accountId === "string" && typeof identity.label === "string" ? Object.freeze({ accountId: identity.accountId, label: identity.label }) : null;
20933
+ const modelRuntime = await ModelRuntime2.create({ credentials: terminalCredentialStore(), modelsPath: join24(agentDir, "models.json") });
20934
+ const settingsManager = SettingsManager2.create(cwd, agentDir);
20935
+ const resourceLoader = new DefaultResourceLoader2({
20936
+ cwd,
20937
+ agentDir,
20938
+ settingsManager: SettingsManager2.inMemory({}),
20939
+ noExtensions: true,
20940
+ noSkills: true,
20941
+ noPromptTemplates: true,
20942
+ noThemes: true,
20943
+ additionalSkillPaths: prepared.skills,
20944
+ additionalPromptTemplatePaths: prepared.prompts,
20945
+ additionalThemePaths: prepared.themes
20946
+ });
20947
+ await resourceLoader.reload();
20948
+ const services = { cwd, agentDir, modelRuntime, settingsManager, resourceLoader, diagnostics: [] };
20949
+ const choiceStore = {
20950
+ read: () => controlCall("accounts.choices.get"),
20951
+ write: (mode, patch) => controlCall("accounts.choices.set", { mode, ...patch })
20952
+ };
20953
+ const modeChoices = new ModeChoices(choiceStore);
20954
+ await modeChoices.load();
20955
+ let currentMode = "normal";
20956
+ let planActive = false;
20957
+ const recordingMode = () => planActive ? "plan" : currentMode;
20958
+ const modelFor = (reference) => resolveCliModel2({ cliModel: reference, modelRuntime }).model;
20959
+ const usableModel = async (reference) => {
20960
+ const found = modelFor(reference);
20961
+ return found && await modelRuntime.checkAuth(found.provider) ? found : undefined;
20962
+ };
20963
+ const goal = new GoalController;
20964
+ const listeners = new Set;
20965
+ const changes = new Set;
20966
+ const beforeChanges = new Set;
20967
+ let disposed = false;
20968
+ let seq = 0;
20969
+ let live = { seq: 0, activeRunId: null, live: null, session: null };
20970
+ let manager = null;
20971
+ let messages = [];
20972
+ const state = { messages, pendingToolCalls: new Set };
20973
+ let streaming = false;
20974
+ let pendingApply = false;
20975
+ let fresh = !sessionFile;
20976
+ const steering = [];
20977
+ const followUps = [];
20978
+ const pendingNotes = [];
20979
+ let model;
20980
+ let thinkingLevel = "medium";
20981
+ let sessionName;
20982
+ const idleWaiters = new Set;
20983
+ const reloadHistory = () => {
20984
+ manager = sessionFile ? SessionManager3.open(sessionFile, sessionDirectory) : null;
20985
+ messages = manager ? manager.buildSessionContext().messages : [];
20986
+ state.messages = messages;
20987
+ sessionName = manager?.getSessionName() ?? sessionName;
20988
+ };
20989
+ reloadHistory();
20990
+ const startChoice = modeChoices.resolve("normal");
20991
+ const recorded = () => {
20992
+ const context = manager?.buildSessionContext();
20993
+ return context?.model ? `${context.model.provider}/${context.model.modelId}` : undefined;
20994
+ };
20995
+ const defaultEffort = () => (model ? settingsManager.getModelThinkingLevel(model.provider, model.id) : undefined) ?? settingsManager.getDefaultThinkingLevel() ?? "medium";
20996
+ const initial = prepared.model ?? recorded() ?? startChoice.model;
20997
+ if (initial)
20998
+ model = modelFor(initial);
20999
+ thinkingLevel = startChoice.effort ?? defaultEffort();
21000
+ const stale = prepared.model ? undefined : recorded();
21001
+ let recovered = null;
21002
+ if (stale && !await usableModel(stale).then(Boolean, () => true)) {
21003
+ const asSession = { get model() {
21004
+ return model;
21005
+ }, setModel: async (next) => {
21006
+ model = next;
21007
+ }, setThinkingLevel: (level) => {
21008
+ thinkingLevel = level;
21009
+ } };
21010
+ const applied = await modeChoices.useFallback(asSession, "normal", usableModel, defaultEffort()).catch(() => null);
21011
+ if (applied)
21012
+ recovered = { recorded: stale, ...applied };
21013
+ else
21014
+ model = undefined;
21015
+ }
21016
+ const reference = () => model ? `${model.provider}/${model.id}` : null;
21017
+ const lastAssistant = () => [...messages].reverse().find((message) => message.role === "assistant");
21018
+ const emit = (event) => {
21019
+ for (const listener of listeners)
21020
+ listener(event);
21021
+ host.changed();
21022
+ };
21023
+ const dialogs = new Map;
21024
+ const showDialog = async (request) => {
21025
+ if (dialogs.has(request.requestId))
21026
+ return;
21027
+ const done = new AbortController;
21028
+ dialogs.set(request.requestId, done);
21029
+ const { dialog } = request;
21030
+ try {
21031
+ const options = { signal: done.signal };
21032
+ let answer;
21033
+ if (dialog.kind === "select") {
21034
+ const chosen = await host.ui.select(dialog.title, dialog.options ?? [], options);
21035
+ answer = { selected: chosen === undefined ? [] : [chosen] };
21036
+ } else if (dialog.kind === "confirm") {
21037
+ answer = { selected: [await host.ui.confirm(dialog.title, dialog.message ?? "", options) ? "Yes" : "No"] };
21038
+ } else {
21039
+ const text = dialog.kind === "input" ? await host.ui.input(dialog.title, dialog.placeholder, options) : await host.ui.editor(dialog.title, dialog.prefill);
21040
+ answer = text === undefined ? { selected: [] } : { selected: [], text };
21041
+ }
21042
+ if (done.signal.aborted)
21043
+ return;
21044
+ await controlCall("terminal.live.answer", { requestId: request.requestId, answer }).catch(() => {
21045
+ return;
21046
+ });
21047
+ } finally {
21048
+ dialogs.delete(request.requestId);
21049
+ }
21050
+ };
21051
+ const apply = (event) => {
21052
+ const bash = event;
21053
+ if (bash.type === "bash_execution_update" && bash.id?.endsWith(":initial-bash"))
21054
+ event = { ...event, id: `initial-bash:${bash.id.slice(0, -":initial-bash".length)}` };
21055
+ const loose = event;
21056
+ switch (loose.type) {
21057
+ case "agent_start":
21058
+ streaming = true;
21059
+ break;
21060
+ case "message_update":
21061
+ if (loose.message?.role === "assistant")
21062
+ state.streamingMessage = loose.message;
21063
+ break;
21064
+ case "message_end":
21065
+ if (loose.message) {
21066
+ if (state.streamingMessage && loose.message.role === "assistant")
21067
+ state.streamingMessage = undefined;
21068
+ messages.push(loose.message);
21069
+ if (loose.message.role === "user" && steering.length)
21070
+ steering.shift();
21071
+ }
21072
+ break;
21073
+ case "tool_execution_start":
21074
+ if (loose.toolCallId)
21075
+ state.pendingToolCalls.add(loose.toolCallId);
21076
+ break;
21077
+ case "tool_execution_end":
21078
+ if (loose.toolCallId)
21079
+ state.pendingToolCalls.delete(loose.toolCallId);
21080
+ break;
21081
+ case "compaction_end":
21082
+ reloadHistory();
21083
+ break;
21084
+ case "harness_settled": {
21085
+ const settled = event;
21086
+ if (settled.goalMode)
21087
+ goal.restore(settled.goalMode);
21088
+ if (!sessionFile && settled.sessionFile) {
21089
+ sessionFile = settled.sessionFile;
21090
+ fresh = false;
21091
+ reloadHistory();
21092
+ }
21093
+ if (streaming)
21094
+ apply({ type: "agent_settled", aborted: settled.status === "interrupted" });
21095
+ host.changed();
21096
+ return;
21097
+ }
21098
+ case "harness_dialog": {
21099
+ showDialog(event.request);
21100
+ return;
21101
+ }
21102
+ case "harness_dialog_done": {
21103
+ dialogs.get(event.requestId)?.abort();
21104
+ return;
21105
+ }
21106
+ case "harness_notice": {
21107
+ const notice = event.notice;
21108
+ if (notice.kind === "notify" || notice.kind === "error")
21109
+ host.ui.notify(notice.text, notice.kind === "error" ? "error" : notice.level ?? "info");
21110
+ else if (notice.kind === "status" && notice.key)
21111
+ host.ui.setStatus(notice.key, notice.text || undefined);
21112
+ else if (notice.kind === "widget" && notice.key)
21113
+ host.ui.setWidget(notice.key, notice.text ? notice.text.split(`
21114
+ `) : undefined);
21115
+ else if (notice.kind === "title")
21116
+ host.ui.setTitle(notice.text);
21117
+ host.changed();
21118
+ return;
21119
+ }
21120
+ case "agent_settled": {
21121
+ streaming = false;
21122
+ if (pendingApply) {
21123
+ pendingApply = false;
21124
+ modeChoices.apply(session, currentMode, modelFor, defaultEffort()).then(() => host.changed());
21125
+ }
21126
+ state.streamingMessage = undefined;
21127
+ state.pendingToolCalls.clear();
21128
+ steering.length = 0;
21129
+ if (sessionFile)
21130
+ reloadHistory();
21131
+ for (const wake of idleWaiters)
21132
+ wake();
21133
+ idleWaiters.clear();
21134
+ break;
21135
+ }
21136
+ }
21137
+ emit(event);
21138
+ };
21139
+ let generation = 0;
21140
+ const refreshState = async () => {
21141
+ const asked = generation;
21142
+ const read = await controlCall("terminal.live.state");
21143
+ if (asked !== generation)
21144
+ return;
21145
+ live = read;
21146
+ if (live.live?.sessionFile && !sessionFile && !streaming) {
21147
+ sessionFile = live.live.sessionFile;
21148
+ fresh = false;
21149
+ reloadHistory();
21150
+ host.changed();
21151
+ }
21152
+ if (live.session?.sessionName)
21153
+ sessionName = live.session.sessionName;
21154
+ followUps.splice(0, followUps.length, ...live.live?.followUps ?? []);
21155
+ };
21156
+ await refreshState();
21157
+ seq = live.seq;
21158
+ if (live.activeRunId)
21159
+ streaming = true;
21160
+ const stopReading = new AbortController;
21161
+ let unreachable = 0;
21162
+ const pump = async () => {
21163
+ while (!disposed) {
21164
+ try {
21165
+ const read = await controlCall("terminal.live.events", { after: seq }, 30000, stopReading.signal);
21166
+ if (disposed)
21167
+ return;
21168
+ if (read.reset) {
21169
+ reloadHistory();
21170
+ host.changed();
21171
+ }
21172
+ if (read.events.length)
21173
+ trace(`events ${read.events.length} last=${read.events.at(-1).event.type}`);
21174
+ for (const entry of read.events) {
21175
+ seq = entry.seq;
21176
+ apply(entry.event);
21177
+ }
21178
+ unreachable = 0;
21179
+ if (!read.events.length)
21180
+ seq = Math.max(seq, read.seq);
21181
+ if (read.events.some((entry) => entry.event.type === "agent_settled" || entry.event.type === "agent_start"))
21182
+ await refreshState().catch(() => {
21183
+ return;
21184
+ });
21185
+ } catch (error) {
21186
+ if (disposed)
21187
+ return;
21188
+ if (error instanceof SocketError && error.code === "unavailable" && ++unreachable >= 2) {
21189
+ host.notify("The harness for this window stopped; closing.");
21190
+ host.shutdown();
21191
+ return;
21192
+ }
21193
+ if (unreachable === 0)
21194
+ host.notify(`The harness session stream stopped: ${error instanceof Error ? error.message : String(error)}`);
21195
+ await new Promise((wait) => setTimeout(wait, 1000));
21196
+ }
21197
+ }
21198
+ };
21199
+ const requiredSkills = (text) => {
21200
+ if (/^\s*!/u.test(text) || settingsManager.getEnableSkillCommands?.() === false)
21201
+ return [];
21202
+ const skills = resourceLoader.getSkills().skills;
21203
+ const names = skillInvocations(text, new Set(skills.map((skill) => skill.name)));
21204
+ if (!names.length)
21205
+ return [];
21206
+ const entries = names.map((name) => {
21207
+ const skill = skills.find((candidate) => candidate.name === name);
21208
+ try {
21209
+ return { name, path: skill.filePath, baseDir: skill.baseDir, body: bodyOf(readFileSync11(skill.filePath, "utf8")) };
21210
+ } catch {
21211
+ return { name, path: skill.filePath, body: "" };
21212
+ }
21213
+ });
21214
+ const content = requiredSkillsText(entries);
21215
+ return content ? [{ customType: "xingular-required-skills", content }] : [];
21216
+ };
21217
+ const startRun = async (text, options = {}) => {
21218
+ if (disposed)
21219
+ throw new Error("The terminal runtime has closed.");
21220
+ const mode = options.mode ?? (options.plan ? "plan" : currentMode);
21221
+ const saved = mode === currentMode ? {} : modeChoices.resolve(mode);
21222
+ const choice = { model: (saved.model && modelFor(saved.model) ? saved.model : undefined) ?? reference() ?? undefined, effort: saved.effort ?? thinkingLevel };
21223
+ const notes = [...pendingNotes.splice(0), ...requiredSkills(text)];
21224
+ const bash = /^!\s*([\s\S]+)$/u.exec(text.trimStart())?.[1];
21225
+ trace(`run asked ${JSON.stringify(text.slice(0, 40))}`);
21226
+ streaming = true;
21227
+ host.changed();
21228
+ try {
21229
+ await controlCall("terminal.live.run", {
21230
+ text,
21231
+ ...choice.model ? { model: choice.model } : {},
21232
+ ...choice.effort ? { effort: choice.effort } : {},
21233
+ ...sessionFile ? { resume: { sessionFile, nativeSessionId: headerId(sessionFile) } } : { newHistory: fresh },
21234
+ ...options.images?.length ? { images: options.images.map((image) => ({ mediaType: image.mimeType, data: image.data })) } : {},
21235
+ ...options.plan ? { plan: true } : {},
21236
+ ...options.command ? { command: options.command } : {},
21237
+ ...options.goal ? { goal: options.goal } : {},
21238
+ ...bash && !options.plan ? { initialBashCommand: bash } : {},
21239
+ ...notes.length ? { hiddenNotes: notes } : {}
21240
+ }, 60000);
21241
+ } catch (error) {
21242
+ streaming = false;
21243
+ host.changed();
21244
+ throw error;
21245
+ }
21246
+ };
21247
+ const setModel = async (next, options = {}) => {
21248
+ model = next;
21249
+ thinkingLevel = clampLevel(next, thinkingLevel);
21250
+ if (options.persist !== false)
21251
+ await modeChoices.record(recordingMode(), { model: `${next.provider}/${next.id}` });
21252
+ host.changed();
21253
+ };
21254
+ const setThinkingLevel = (level, options = {}) => {
21255
+ thinkingLevel = clampLevel(model, level);
21256
+ if (options.persist !== false)
21257
+ modeChoices.record(recordingMode(), { effort: thinkingLevel });
21258
+ host.changed();
21259
+ };
21260
+ const availableLevels = () => supportedLevels(model);
21261
+ const commandsNow = () => live.session?.commands ?? live.commands ?? [];
21262
+ const extensionRunner = {
21263
+ getRegisteredCommands: () => commandsNow().map((command) => ({ ...command, sourceInfo: command.sourceInfo ?? { path: "", source: "harness" } })),
21264
+ getCommand: (name) => {
21265
+ const command = commandsNow().find((entry) => entry.invocationName === name || entry.name === name);
21266
+ if (!command)
21267
+ return;
21268
+ const route = `${pluginCommandPrefix(command.sourceInfo ?? { path: "" })}:${command.invocationName}`;
21269
+ return { ...command, handler: async (argument) => {
21270
+ await startRun(`/${route}${argument ? ` ${argument}` : ""}`);
21271
+ } };
21272
+ },
21273
+ createCommandContext: () => ({}),
21274
+ createContext: () => ({}),
21275
+ createToolContext: () => ({}),
21276
+ getShortcuts: () => new Map,
21277
+ getExtensionPaths: () => [],
21278
+ setUIContext: () => {
21279
+ return;
21280
+ },
21281
+ emitToolCall: async () => {
21282
+ return;
21283
+ }
21284
+ };
21285
+ const session = {
21286
+ get sessionId() {
21287
+ return live.session?.sessionId ?? (sessionFile ? headerId(sessionFile) ?? "" : "");
21288
+ },
21289
+ get sessionFile() {
21290
+ return sessionFile ?? undefined;
21291
+ },
21292
+ get sessionName() {
21293
+ return sessionName;
21294
+ },
21295
+ setSessionName: (name) => {
21296
+ sessionName = name;
21297
+ controlCall("terminal.live.rename", { name, ...sessionFile ? { sessionFile } : {} }).catch((error) => host.notify(error instanceof Error ? error.message : String(error)));
21298
+ host.changed();
21299
+ },
21300
+ get messages() {
21301
+ return messages;
21302
+ },
21303
+ get state() {
21304
+ return state;
21305
+ },
21306
+ get model() {
21307
+ return model;
21308
+ },
21309
+ get thinkingLevel() {
21310
+ return thinkingLevel;
21311
+ },
21312
+ get isStreaming() {
21313
+ return streaming;
21314
+ },
21315
+ get isIdle() {
21316
+ return !streaming;
21317
+ },
21318
+ get systemPrompt() {
21319
+ return live.session?.systemPrompt ?? "";
21320
+ },
21321
+ get settingsManager() {
21322
+ return settingsManager;
21323
+ },
21324
+ get resourceLoader() {
21325
+ return resourceLoader;
21326
+ },
21327
+ get modelRuntime() {
21328
+ return modelRuntime;
21329
+ },
21330
+ get sessionManager() {
21331
+ return manager ?? SessionManager3.inMemory(cwd);
21332
+ },
21333
+ get extensionRunner() {
21334
+ return extensionRunner;
21335
+ },
21336
+ get scopedModels() {
21337
+ return [];
21338
+ },
21339
+ get steeringMode() {
21340
+ return "one-at-a-time";
21341
+ },
21342
+ get followUpMode() {
21343
+ return "one-at-a-time";
21344
+ },
21345
+ get autoCompactionEnabled() {
21346
+ return settingsManager.getCompactionSettings().enabled;
21347
+ },
21348
+ get autoRetryEnabled() {
21349
+ return true;
21350
+ },
21351
+ setSteeringMode: () => {
21352
+ return;
21353
+ },
21354
+ setFollowUpMode: () => {
21355
+ return;
21356
+ },
21357
+ setAutoCompactionEnabled: (enabled) => settingsManager.setCompactionEnabled?.(enabled),
21358
+ setAutoRetryEnabled: () => {
21359
+ return;
21360
+ },
21361
+ supportsThinking: () => !!model?.reasoning,
21362
+ getAvailableThinkingLevels: availableLevels,
21363
+ cycleThinkingLevel: () => {
21364
+ const levels = availableLevels();
21365
+ const next = levels[(levels.indexOf(thinkingLevel) + 1) % levels.length];
21366
+ setThinkingLevel(next);
21367
+ return next;
21368
+ },
21369
+ cycleModel: async () => {
21370
+ return;
21371
+ },
21372
+ setModel,
21373
+ setThinkingLevel,
21374
+ getActiveToolNames: () => live.session?.activeTools.length ? [...live.session.activeTools] : DEFAULT_TOOLS,
21375
+ getAllTools: () => live.session?.tools.length ? live.session.tools : DEFAULT_TOOLS.map((name) => ({ name, description: "" })),
21376
+ setActiveToolsByName: () => {
21377
+ return;
21378
+ },
21379
+ getToolDefinition: () => {
21380
+ return;
21381
+ },
21382
+ getSteeringMessages: () => [...steering],
21383
+ getFollowUpMessages: () => [...followUps],
21384
+ clearQueue: () => {
21385
+ const removed = { steering: [...steering], followUp: [...followUps] };
21386
+ steering.length = 0;
21387
+ followUps.length = 0;
21388
+ controlCall("terminal.live.followUp.clear").catch(() => {
21389
+ return;
21390
+ });
21391
+ host.changed();
21392
+ return removed;
21393
+ },
21394
+ getContextUsage: () => {
21395
+ const usage = lastAssistant()?.usage;
21396
+ const window = model?.contextWindow ?? 0;
21397
+ const tokens = usage ? usage.totalTokens ?? (usage.input ?? 0) + (usage.output ?? 0) + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) : null;
21398
+ return { tokens, contextWindow: window, percent: tokens !== null && window ? tokens / window * 100 : null };
21399
+ },
21400
+ getSessionStats: () => {
21401
+ const assistant = messages.filter((message) => message.role === "assistant");
21402
+ const sum = (key) => assistant.reduce((total, message) => total + (message.usage?.[key] ?? 0), 0);
21403
+ return {
21404
+ sessionFile: sessionFile ?? undefined,
21405
+ sessionId: session.sessionId,
21406
+ userMessages: messages.filter((message) => message.role === "user").length,
21407
+ assistantMessages: assistant.length,
21408
+ toolCalls: 0,
21409
+ toolResults: messages.filter((message) => message.role === "toolResult").length,
21410
+ totalMessages: messages.length,
21411
+ tokens: { input: sum("input"), output: sum("output"), cacheRead: sum("cacheRead"), cacheWrite: sum("cacheWrite"), total: sum("input") + sum("output") + sum("cacheRead") + sum("cacheWrite") },
21412
+ cost: assistant.reduce((total, message) => total + (message.usage?.cost?.total ?? 0), 0)
21413
+ };
21414
+ },
21415
+ getLastAssistantText: () => textOf2(lastAssistant()) || undefined,
21416
+ getUserMessagesForForking: () => (manager?.getEntries() ?? []).filter((entry) => entry.type === "message" && entry.message?.role === "user").map((entry) => ({ entryId: entry.id, text: textOf2(entry.message) })),
21417
+ subscribe: (listener) => {
21418
+ listeners.add(listener);
21419
+ return () => {
21420
+ listeners.delete(listener);
21421
+ };
21422
+ },
21423
+ prompt: async (text, options = {}) => {
21424
+ await runtime.submit(text, options.streamingBehavior === "followUp", options.images);
21425
+ },
21426
+ sendCustomMessage: async (message, options = {}) => {
21427
+ if (options.deliverAs === "steer" && streaming) {
21428
+ await controlCall("terminal.live.steer", { text: message.content });
21429
+ return;
21430
+ }
21431
+ if (options.triggerTurn && message.customType === GOAL_CUSTOM_TYPE) {
21432
+ const current = goal.get();
21433
+ if (current)
21434
+ await startRun(current.objective, { goal: { objective: current.objective, rounds: current.limits.rounds, hours: current.limits.hours } });
21435
+ return;
21436
+ }
21437
+ pendingNotes.push({ customType: message.customType.replace(/[^a-z0-9-]/g, "-").toLowerCase(), content: message.content });
21438
+ },
21439
+ abort: async () => {
21440
+ await runtime.interrupt();
21441
+ },
21442
+ abortBash: () => {
21443
+ return;
21444
+ },
21445
+ waitForIdle: async () => {
21446
+ if (!streaming)
21447
+ return;
21448
+ await new Promise((wake) => idleWaiters.add(wake));
21449
+ },
21450
+ compact: async (instructions) => {
21451
+ if (!sessionFile)
21452
+ throw new Error("There is no saved conversation to compact yet.");
21453
+ await startRun("/compact", { command: { name: "compact", ...instructions ? { instructions } : {} } });
21454
+ },
21455
+ navigateTree: async (targetId, options = {}) => {
21456
+ if (!sessionFile)
21457
+ return { cancelled: true };
21458
+ const entry = manager?.getEntries().find((candidate) => candidate.id === targetId);
21459
+ await startRun("/tree", { command: { name: "navigate", entryId: targetId, summarize: !!options.summarize, ...options.customInstructions ? { instructions: options.customInstructions } : {} } });
21460
+ await session.waitForIdle();
21461
+ return { cancelled: false, ...entry?.message?.role === "user" ? { editorText: textOf2(entry.message) } : {} };
21462
+ },
21463
+ exportToHtml: async (path) => {
21464
+ const target = path ? resolve9(cwd, path) : join24(cwd, `${basename7(sessionFile ?? "session", ".jsonl")}.html`);
21465
+ await startRun("/export", { command: { name: "export", path: target } });
21466
+ return target;
21467
+ },
21468
+ exportToJsonl: async (path) => {
21469
+ if (!sessionFile)
21470
+ throw new Error("There is no saved conversation to export yet.");
21471
+ copyFileSync3(sessionFile, resolve9(cwd, path));
21472
+ return resolve9(cwd, path);
21473
+ },
21474
+ bindExtensions: async () => {
21475
+ return;
21476
+ },
21477
+ reload: async () => {
21478
+ return;
21479
+ },
21480
+ dispose: () => {
21481
+ return;
21482
+ }
21483
+ };
21484
+ const replying = async () => {
21485
+ if (!streaming)
21486
+ return false;
21487
+ await refreshState().catch(() => {
21488
+ return;
21489
+ });
21490
+ if (live.activeRunId)
21491
+ return true;
21492
+ await Promise.race([
21493
+ new Promise((wake) => idleWaiters.add(wake)),
21494
+ new Promise((wait) => setTimeout(wait, 2000))
21495
+ ]);
21496
+ if (streaming)
21497
+ apply({ type: "agent_settled", aborted: false });
21498
+ return false;
21499
+ };
21500
+ const announce = async () => {
21501
+ for (const listener of changes)
21502
+ await listener(session);
21503
+ host.changed();
21504
+ };
21505
+ const replace = async (file) => {
21506
+ if (await replying())
21507
+ throw new Error("Stop the current response before changing or reloading this session.");
21508
+ for (const listener of beforeChanges)
21509
+ listener();
21510
+ generation += 1;
21511
+ await controlCall("terminal.live.close", { forget: true }).catch(() => {
21512
+ return;
21513
+ });
21514
+ live = { ...live, live: null, session: null };
21515
+ sessionFile = file;
21516
+ fresh = !file;
21517
+ sessionName = undefined;
21518
+ reloadHistory();
21519
+ await announce();
21520
+ };
21521
+ const runtime = {
21522
+ async pending() {
21523
+ if (disposed)
21524
+ return [];
21525
+ return (await controlCall("terminal.live.pending")).requests;
21526
+ },
21527
+ approve: async (requestId, decision, alwaysAllowTool = false) => {
21528
+ await controlCall("terminal.live.approve", { requestId, decision, alwaysAllow: alwaysAllowTool });
21529
+ },
21530
+ permissions: async () => disposed ? { full: false, globalTools: [] } : controlCall("terminal.permissions.get"),
21531
+ setFullPermission: async (enabled) => {
21532
+ await controlCall("terminal.permissions.setFull", { enabled });
21533
+ },
21534
+ setGlobalTool: async (tool, allowed) => {
21535
+ await controlCall("terminal.permissions.setTool", { tool, allowed });
21536
+ },
21537
+ answer: async (requestId, answer) => {
21538
+ await controlCall("terminal.live.answer", { requestId, answer });
21539
+ },
21540
+ answerBatch: async (batchId, answers) => {
21541
+ await controlCall("terminal.live.answers", { batchId, answers });
21542
+ },
21543
+ snapshot() {
21544
+ const usage = session.getContextUsage();
21545
+ return Object.freeze({
21546
+ sessionId: session.sessionId,
21547
+ sessionFile: sessionFile ?? undefined,
21548
+ name: sessionName,
21549
+ cwd,
21550
+ account,
21551
+ model: model ? Object.freeze({ id: model.id, provider: model.provider, name: model.name, reasoning: model.reasoning, contextWindow: model.contextWindow }) : undefined,
21552
+ thinkingLevel,
21553
+ isStreaming: streaming,
21554
+ idle: !streaming,
21555
+ hasUserMessages: messages.some((message) => message.role === "user"),
21556
+ hideThinking: settingsManager.getHideThinkingBlock(),
21557
+ context: Object.freeze({ percent: usage.percent, window: usage.contextWindow }),
21558
+ costUsd: session.getSessionStats().cost,
21559
+ subscription: model ? modelRuntime.isUsingSubscription(model.provider) : false,
21560
+ queue: Object.freeze({ steering: Object.freeze([...steering]), followUp: Object.freeze([...followUps]) })
21561
+ });
21562
+ },
21563
+ async submit(text, followUp = false, images) {
21564
+ if (disposed)
21565
+ throw new Error("The terminal runtime has closed.");
21566
+ const input = text.trimStart().startsWith("/") ? text.trimStart() : text;
21567
+ if (await replying()) {
21568
+ if (followUp) {
21569
+ const result = await controlCall("terminal.live.followUp", { text: input });
21570
+ if (result.queued)
21571
+ followUps.push(input);
21572
+ } else {
21573
+ steering.push(input);
21574
+ await controlCall("terminal.live.steer", { text: input }).catch((error) => {
21575
+ steering.splice(steering.indexOf(input), 1);
21576
+ throw error;
21577
+ });
21578
+ }
21579
+ host.changed();
21580
+ return;
21581
+ }
21582
+ await startRun(input, { images });
21583
+ },
21584
+ async submitPlan(text, images) {
21585
+ if (!text.trim())
21586
+ throw new Error("Use /plan <plan brief>.");
21587
+ if (await replying())
21588
+ throw new Error("A plan request must wait until the current response settles.");
21589
+ const previous = { model, effort: thinkingLevel };
21590
+ const oneShot = currentMode !== "plan";
21591
+ if (oneShot)
21592
+ await modeChoices.apply(session, "plan", modelFor, defaultEffort());
21593
+ planActive = true;
21594
+ try {
21595
+ await startRun(text, { images, plan: true, mode: "plan" });
21596
+ await session.waitForIdle();
21597
+ } finally {
21598
+ planActive = false;
21599
+ if (oneShot && !disposed) {
21600
+ model = previous.model;
21601
+ thinkingLevel = previous.effort;
21602
+ if (pendingApply) {
21603
+ pendingApply = false;
21604
+ await modeChoices.apply(session, currentMode, modelFor, defaultEffort());
21605
+ }
21606
+ host.changed();
21607
+ }
21608
+ }
21609
+ },
21610
+ async setMode(mode) {
21611
+ currentMode = mode;
21612
+ if (streaming) {
21613
+ pendingApply = true;
21614
+ return;
21615
+ }
21616
+ await modeChoices.apply(session, mode, modelFor, defaultEffort());
21617
+ host.changed();
21618
+ },
21619
+ get session() {
21620
+ return session;
21621
+ },
21622
+ get services() {
21623
+ return services;
21624
+ },
21625
+ cwd,
21626
+ sessionDirectory,
21627
+ subscribe(listener) {
21628
+ listeners.add(listener);
21629
+ return () => {
21630
+ listeners.delete(listener);
21631
+ };
21632
+ },
21633
+ onSessionChange(listener) {
21634
+ changes.add(listener);
21635
+ return () => {
21636
+ changes.delete(listener);
21637
+ };
21638
+ },
21639
+ onBeforeSessionChange(listener) {
21640
+ beforeChanges.add(listener);
21641
+ return () => {
21642
+ beforeChanges.delete(listener);
21643
+ };
21644
+ },
21645
+ newSession: async () => {
21646
+ await modeChoices.load();
21647
+ await replace(null);
21648
+ return { cancelled: false };
21649
+ },
21650
+ switchSession: async (path, options) => {
21651
+ const named = resolve9(cwd, path);
21652
+ const byId = () => readdirSync11(sessionDirectory).filter((name) => name.endsWith(".jsonl")).map((name) => join24(sessionDirectory, name)).find((file) => headerId(file) === path);
21653
+ const target = existsSync13(named) ? named : byId() ?? named;
21654
+ assertTerminalHistoryPath(target, sessionDirectory);
21655
+ assertTerminalSessionScope(target, cwd, options?.cwdOverride);
21656
+ await replace(target);
21657
+ return { cancelled: false };
21658
+ },
21659
+ fork: async (entryId) => {
21660
+ if (!sessionFile)
21661
+ throw new Error("There is no saved conversation to fork yet.");
21662
+ const source = SessionManager3.open(sessionFile, sessionDirectory);
21663
+ const entry = source.getEntries().find((candidate) => candidate.id === entryId);
21664
+ const leaf = entry?.message?.role === "user" ? entry.parentId ?? null : entryId;
21665
+ const forked = leaf ? source.createBranchedSession(leaf) : undefined;
21666
+ if (!forked)
21667
+ throw new Error("This conversation could not be forked at that message.");
21668
+ await replace(forked);
21669
+ return { cancelled: false, ...entry?.message?.role === "user" ? { selectedText: textOf2(entry.message) } : {} };
21670
+ },
21671
+ navigateTree: (targetId, options) => session.navigateTree(targetId, options),
21672
+ importFromJsonl: async (path, cwdOverride) => {
21673
+ const target = resolve9(cwd, path);
21674
+ assertTerminalSessionScope(target, cwd, cwdOverride);
21675
+ const copy = join24(sessionDirectory, basename7(target));
21676
+ if (!existsSync13(copy))
21677
+ copyFileSync3(target, copy);
21678
+ await replace(copy);
21679
+ return { cancelled: false };
21680
+ },
21681
+ installationDeviceId: () => controlCall("accounts.deviceId"),
21682
+ reload: async () => {
21683
+ if (await replying())
21684
+ throw new Error("Stop the current response before changing or reloading this session.");
21685
+ await controlCall("terminal.resources", {}, 30000);
21686
+ await controlCall("terminal.live.close", { reload: true }).catch(() => {
21687
+ return;
21688
+ });
21689
+ await refreshState().catch(() => {
21690
+ return;
21691
+ });
21692
+ await resourceLoader.reload();
21693
+ await announce();
21694
+ },
21695
+ goal,
21696
+ async interrupt() {
21697
+ if (goal.active() && streaming)
20749
21698
  goal.pause();
20750
- native.session.abortBash();
20751
- await controlCall("terminal.interrupt", {}, 15000).catch(() => {});
20752
- await native.session.abort();
21699
+ trace(`interrupt asked streaming=${streaming}`);
21700
+ await controlCall("terminal.live.interrupt", {}, 15000).then((result) => trace(`interrupt answered ${JSON.stringify(result)}`)).catch((error) => trace(`interrupt failed ${String(error)}`));
20753
21701
  },
20754
21702
  async dispose() {
20755
21703
  if (disposed)
20756
21704
  return;
20757
21705
  disposed = true;
20758
- try {
20759
- await runtime.interrupt();
20760
- await native.dispose();
20761
- } finally {
20762
- unsubscribe?.();
20763
- listeners.clear();
20764
- changes.clear();
20765
- beforeChanges.clear();
20766
- }
21706
+ stopReading.abort();
21707
+ for (const wake of idleWaiters)
21708
+ wake();
21709
+ for (const dialog of dialogs.values())
21710
+ dialog.abort();
21711
+ listeners.clear();
21712
+ changes.clear();
21713
+ beforeChanges.clear();
20767
21714
  }
20768
21715
  };
20769
- const observeSession = () => {
20770
- unsubscribe?.();
20771
- unsubscribe = native.session.subscribe((event) => {
20772
- if (event.type === "thinking_level_changed")
20773
- modeChoices.record(recordingMode(), { effort: event.level });
20774
- if (event.type === "agent_settled" && pendingApply && !planRun.active) {
20775
- pendingApply = false;
20776
- applyMode().catch(() => {
20777
- return;
20778
- });
20779
- }
20780
- for (const listener of listeners)
20781
- listener(event);
20782
- host.changed();
20783
- });
20784
- };
20785
- const bind = async () => {
20786
- const session = native.session;
20787
- observeSession();
20788
- await session.bindExtensions({
20789
- uiContext: currentUi(),
20790
- mode: "tui",
20791
- shutdownHandler: () => host.shutdown(),
20792
- abortHandler: () => {
20793
- runtime.interrupt().catch((error) => host.notify(error instanceof Error ? error.message : String(error)));
20794
- },
20795
- onError: (error) => host.notify(`${error.event}: ${error.error}`),
20796
- commandContextActions: {
20797
- waitForIdle: () => native.session.waitForIdle(),
20798
- newSession: (options) => runtime.newSession(options),
20799
- switchSession: (path, options) => runtime.switchSession(path, options),
20800
- fork: (entryId, options) => runtime.fork(entryId, options),
20801
- navigateTree: (targetId, options) => runtime.navigateTree(targetId, options),
20802
- reload: () => runtime.reload()
20803
- }
20804
- });
20805
- const recovered = await recoverModel(session);
20806
- await announce();
20807
- if (recovered) {
20808
- const effort = recovered.effort ? ` at ${recovered.effort} effort` : "";
20809
- host.notify(`This account cannot use ${recovered.recorded}. Started on ${recovered.reference}${effort}, your latest choice on this account.`);
20810
- } else if (native.modelFallbackMessage)
20811
- host.notify(native.modelFallbackMessage);
20812
- };
20813
- native.setBeforeSessionInvalidate(before);
20814
- native.setRebindSession(bind);
20815
- try {
20816
- await bind();
20817
- } catch (error) {
20818
- await runtime.dispose();
20819
- throw error;
21716
+ pump();
21717
+ await announce();
21718
+ if (recovered) {
21719
+ const effort = recovered.effort ? ` at ${recovered.effort} effort` : "";
21720
+ host.notify(`This account cannot use ${recovered.recorded}. Started on ${recovered.reference}${effort}, your latest choice on this account.`);
20820
21721
  }
20821
21722
  return runtime;
20822
21723
  }
@@ -21366,7 +22267,7 @@ import { execFile } from "child_process";
21366
22267
  import { chmod, mkdtemp, open, rm, stat as stat2 } from "fs/promises";
21367
22268
  import { randomUUID as randomUUID5 } from "crypto";
21368
22269
  import { tmpdir as tmpdir2 } from "os";
21369
- import { basename as basename7, join as join23 } from "path";
22270
+ import { basename as basename8, join as join25 } from "path";
21370
22271
  import { promisify } from "util";
21371
22272
  var exec = promisify(execFile);
21372
22273
  var PNG_SIGNATURE = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);
@@ -21399,20 +22300,20 @@ async function stageClipboardFiles(paths, options = {}) {
21399
22300
  return { paths };
21400
22301
  let directory;
21401
22302
  try {
21402
- directory = await mkdtemp(join23(options.tempRoot ?? tmpdir2(), "harness-clipboard-"));
22303
+ directory = await mkdtemp(join25(options.tempRoot ?? tmpdir2(), "harness-clipboard-"));
21403
22304
  const stagedPaths = [];
21404
22305
  for (const [index, path] of paths.entries()) {
21405
22306
  if (!isHeicPath(path)) {
21406
22307
  stagedPaths.push(path);
21407
22308
  continue;
21408
22309
  }
21409
- const output = join23(directory, `${index}-${randomUUID5()}.png`);
22310
+ const output = join25(directory, `${index}-${randomUUID5()}.png`);
21410
22311
  try {
21411
22312
  await (options.convert ?? convertWithSips)(path, output);
21412
22313
  await chmod(output, 384);
21413
22314
  await assertPng(output);
21414
22315
  } catch {
21415
- throw new Error(`Could not prepare HEIC image "${basename7(path)}" for the terminal.`);
22316
+ throw new Error(`Could not prepare HEIC image "${basename8(path)}" for the terminal.`);
21416
22317
  }
21417
22318
  stagedPaths.push(output);
21418
22319
  }
@@ -22589,7 +23490,7 @@ function matchPalette(items, filter) {
22589
23490
  // src/terminal/opentui/pathCompletion.ts
22590
23491
  import { readdir } from "fs/promises";
22591
23492
  import { homedir as homedir3 } from "os";
22592
- import { resolve as resolve9 } from "path";
23493
+ import { resolve as resolve10 } from "path";
22593
23494
  function consume(character, state) {
22594
23495
  if (state.escaped) {
22595
23496
  state.escaped = false;
@@ -22653,7 +23554,7 @@ async function completeFilePaths(text, cursorOffset, cwd, limit = 8) {
22653
23554
  const slash = Math.max(typedPrefix.lastIndexOf("/"), typedPrefix.lastIndexOf("\\"));
22654
23555
  const parent = slash < 0 ? "" : typedPrefix.slice(0, slash + 1);
22655
23556
  const namePrefix = typedPrefix.slice(slash + 1);
22656
- const diskParent = parent.startsWith("~/") ? resolve9(homedir3(), parent.slice(2)) : resolve9(cwd, parent || ".");
23557
+ const diskParent = parent.startsWith("~/") ? resolve10(homedir3(), parent.slice(2)) : resolve10(cwd, parent || ".");
22657
23558
  const separator = parent.endsWith("\\") ? "\\" : "/";
22658
23559
  const caseSensitive = process.platform !== "win32";
22659
23560
  const compare = (value) => caseSensitive ? value : value.toLocaleLowerCase();
@@ -23043,8 +23944,8 @@ class QuestionDockState {
23043
23944
 
23044
23945
  // src/core/links.ts
23045
23946
  import { spawn as spawn3 } from "child_process";
23046
- import { lstatSync as lstatSync4, realpathSync as realpathSync5 } from "fs";
23047
- import { isAbsolute as isAbsolute6, resolve as resolve10 } from "path";
23947
+ import { lstatSync as lstatSync4, realpathSync as realpathSync6 } from "fs";
23948
+ import { isAbsolute as isAbsolute7, resolve as resolve11 } from "path";
23048
23949
  var MAX_LENGTH = 4096;
23049
23950
  var CONTROL_CHARACTERS = /[\x00-\x1f\x7f-\x9f]/u;
23050
23951
  var WEB_ADDRESS = /^https?:/iu;
@@ -23097,13 +23998,13 @@ function filePath(value, base) {
23097
23998
  }
23098
23999
  if (!decoded || decoded.includes("\x00") || decoded.startsWith("~") || decoded.startsWith("//"))
23099
24000
  return null;
23100
- if (isAbsolute6(decoded))
24001
+ if (isAbsolute7(decoded))
23101
24002
  return decoded;
23102
24003
  if (SCHEME.test(decoded))
23103
24004
  return null;
23104
- if (!base || !isAbsolute6(base))
24005
+ if (!base || !isAbsolute7(base))
23105
24006
  return null;
23106
- return resolve10(base, decoded);
24007
+ return resolve11(base, decoded);
23107
24008
  }
23108
24009
  function openableTarget(target) {
23109
24010
  if (target.kind !== "path")
@@ -23112,7 +24013,7 @@ function openableTarget(target) {
23112
24013
  let path = target.path;
23113
24014
  if (stats.isSymbolicLink()) {
23114
24015
  try {
23115
- path = realpathSync5(target.path);
24016
+ path = realpathSync6(target.path);
23116
24017
  } catch {
23117
24018
  throw unopenable("That link points at a file that is not there.");
23118
24019
  }
@@ -23798,7 +24699,8 @@ class OpenTuiApplication {
23798
24699
  process.off("SIGCONT", onContinue);
23799
24700
  });
23800
24701
  this.notify("Starting session\u2026");
23801
- this.runtime = await createTerminalRuntime(this.args, {
24702
+ const createRuntime = harnessRuntimeSelected() ? createHarnessTerminalRuntime : createTerminalRuntime;
24703
+ this.runtime = await createRuntime(this.args, {
23802
24704
  ui: this.ui,
23803
24705
  shutdown: () => {
23804
24706
  this.shutdown();
@@ -24325,7 +25227,7 @@ class OpenTuiApplication {
24325
25227
  let revision;
24326
25228
  while (!signal.aborted && !this.stopped) {
24327
25229
  try {
24328
- const snapshot = await controlCall("terminal.pending.wait", { revision }, 25000, signal);
25230
+ const snapshot = await controlCall("terminal.pending.wait", { revision, ownDialogs: true }, 25000, signal);
24329
25231
  revision = snapshot.revision;
24330
25232
  this.decisions(snapshot.requests);
24331
25233
  } catch (error) {
@@ -25662,7 +26564,7 @@ class OpenTuiApplication {
25662
26564
  async handlePaste(text) {
25663
26565
  if (!text.trim())
25664
26566
  return this.pasteClipboard();
25665
- const paths = parsePastedImagePaths(text, existsSync12);
26567
+ const paths = parsePastedImagePaths(text, existsSync14);
25666
26568
  if (paths)
25667
26569
  return this.attachImageFiles(paths);
25668
26570
  this.pasteText(text);
@@ -25687,7 +26589,7 @@ class OpenTuiApplication {
25687
26589
  return this.attachImage(image.bytes, image.mimeType);
25688
26590
  const text = await adapter.readClipboardText();
25689
26591
  if (text?.trim()) {
25690
- const paths = parsePastedImagePaths(text, existsSync12);
26592
+ const paths = parsePastedImagePaths(text, existsSync14);
25691
26593
  if (paths)
25692
26594
  return this.attachImageFiles(paths);
25693
26595
  this.pasteText(text);
@@ -25765,8 +26667,8 @@ class OpenTuiApplication {
25765
26667
  }
25766
26668
  }
25767
26669
  async externalEditor() {
25768
- const directory = await mkdtemp2(join24(tmpdir3(), "harness-editor-"));
25769
- const file = join24(directory, "prompt.md");
26670
+ const directory = await mkdtemp2(join26(tmpdir3(), "harness-editor-"));
26671
+ const file = join26(directory, "prompt.md");
25770
26672
  try {
25771
26673
  await writeFile(file, this.customEditor?.getExpandedText?.() ?? this.draft, { mode: 384 });
25772
26674
  await this.editFile(file);
@@ -26818,6 +27720,152 @@ function QuestionDock(props) {
26818
27720
  }
26819
27721
 
26820
27722
  // src/terminal/opentui/markdown.ts
27723
+ import { BoxRenderable, CodeRenderable } from "@opentui/core";
27724
+ var codeAliases = {
27725
+ js: "javascript",
27726
+ jsx: "javascriptreact",
27727
+ py: "python",
27728
+ python3: "python",
27729
+ sh: "bash",
27730
+ shell: "bash",
27731
+ zsh: "bash",
27732
+ ts: "typescript",
27733
+ tsx: "typescriptreact",
27734
+ yml: "yaml",
27735
+ jsonc: "json"
27736
+ };
27737
+ var fallbackKeywords = {
27738
+ python: new Set("False None True and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield".split(" ")),
27739
+ bash: new Set("case coproc do done elif else esac fi for function if in select then time until while".split(" ")),
27740
+ json: new Set(["false", "null", "true"])
27741
+ };
27742
+ function codeFenceLanguageInfo(language) {
27743
+ const token = language?.trim().split(/\s+/u)[0]?.replace(/\x1B\[[0-?]*[ -/]*[@-~]/gu, "").replace(/[\u0000-\u001f\u007f-\u009f]/gu, "").replace(/[^a-z0-9_+#.-]/giu, "").toLowerCase() ?? "";
27744
+ const filetype = codeAliases[token] ?? token;
27745
+ const fallback = fallbackKeywords[filetype] ? filetype : undefined;
27746
+ const labels = { javascriptreact: "JSX", typescriptreact: "TSX", javascript: "JAVASCRIPT", typescript: "TYPESCRIPT", python: "PYTHON", bash: "BASH", yaml: "YAML", json: "JSON" };
27747
+ return {
27748
+ label: labels[filetype] ?? (filetype ? filetype.toUpperCase() : "CODE"),
27749
+ ...filetype ? { filetype } : {},
27750
+ ...fallback ? { fallback } : {}
27751
+ };
27752
+ }
27753
+ function fallbackCodeHighlights(content, language) {
27754
+ const comments = language === "python" || language === "bash" ? String.raw`#[^\n]*` : String.raw`//[^\n]*|/\*[\s\S]*?\*/`;
27755
+ const strings = String.raw`"""[\s\S]*?"""|'''[\s\S]*?'''|\x60(?:\\.|[^\x60\\])*\x60|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'`;
27756
+ const tokens = new RegExp(String.raw`${strings}|${comments}|\b\d+(?:\.\d+)?\b|[A-Za-z_$][\w$]*`, "gu");
27757
+ const highlights = [];
27758
+ const keywords = fallbackKeywords[language];
27759
+ for (const match of content.matchAll(tokens)) {
27760
+ const text = match[0];
27761
+ const start = match.index;
27762
+ const end = start + text.length;
27763
+ let group;
27764
+ if (/^(?:"|')/u.test(text) || text.startsWith("`"))
27765
+ group = "string";
27766
+ else if ((language === "python" || language === "bash") && text.startsWith("#"))
27767
+ group = "comment";
27768
+ else if (language === "json" && (text.startsWith("//") || text.startsWith("/*")))
27769
+ group = "comment";
27770
+ else if (/^\d/u.test(text))
27771
+ group = "number";
27772
+ else if (keywords.has(text))
27773
+ group = "keyword";
27774
+ else {
27775
+ const before = content.slice(0, start).match(/\b(def|class)\s+$/u)?.[1];
27776
+ if (before === "class" || /^[A-Z][A-Za-z0-9_]*$/u.test(text))
27777
+ group = "type";
27778
+ else if (before === "def" || /^\s*\(/u.test(content.slice(end)))
27779
+ group = "function";
27780
+ else if (language === "bash" && /(?:^|[;|&]\s*|\b(?:then|do)\s+)$/u.test(content.slice(0, start)))
27781
+ group = "function";
27782
+ }
27783
+ if (group)
27784
+ highlights.push([start, end, group]);
27785
+ }
27786
+ return highlights;
27787
+ }
27788
+ function alignListItems(token, list) {
27789
+ const start = typeof token.start === "number" ? token.start : 1;
27790
+ const gutter = Math.max(2, ...token.items.map((_, index) => token.ordered ? String(start + index).length + 2 : 2));
27791
+ const rows = list.getChildren();
27792
+ token.items.forEach((item, index) => {
27793
+ const row = rows[index];
27794
+ if (!(row instanceof BoxRenderable))
27795
+ return;
27796
+ const body = row.getChildren()[1];
27797
+ if (!(body instanceof BoxRenderable))
27798
+ return;
27799
+ body.marginLeft = -gutter;
27800
+ body.paddingLeft = gutter;
27801
+ const bodyChildren = body.getChildren();
27802
+ item.tokens.forEach((childToken, childIndex) => {
27803
+ const child = bodyChildren[childIndex];
27804
+ if (childToken.type === "list" && child instanceof BoxRenderable) {
27805
+ alignListItems(childToken, child);
27806
+ }
27807
+ });
27808
+ });
27809
+ }
27810
+ function createTranscriptMarkdownRenderer(theme) {
27811
+ const panels = new Map;
27812
+ const renderNode = (token, context) => {
27813
+ if (token.type === "list") {
27814
+ const rendered = context.defaultRender();
27815
+ if (rendered instanceof BoxRenderable)
27816
+ alignListItems(token, rendered);
27817
+ return rendered;
27818
+ }
27819
+ if (token.type !== "code")
27820
+ return;
27821
+ const rendered = context.defaultRender();
27822
+ if (!(rendered instanceof CodeRenderable))
27823
+ return rendered;
27824
+ const info = codeFenceLanguageInfo(token.lang);
27825
+ if (info.filetype)
27826
+ rendered.filetype = info.filetype;
27827
+ rendered.bg = theme.panel;
27828
+ if (info.fallback) {
27829
+ const fallback = info.fallback;
27830
+ rendered.onHighlight = (highlights, { content }) => highlights.length > 0 ? highlights : fallbackCodeHighlights(content, fallback);
27831
+ }
27832
+ let panel = panels.get(rendered.id);
27833
+ if (!panel || panel.isDestroyed) {
27834
+ panel = new BoxRenderable(rendered.ctx, {
27835
+ id: `${rendered.id}-fence-panel`,
27836
+ width: "100%",
27837
+ flexDirection: "column",
27838
+ flexShrink: 0,
27839
+ border: true,
27840
+ borderColor: theme.borderFocus,
27841
+ backgroundColor: theme.panel,
27842
+ paddingLeft: 1,
27843
+ paddingRight: 1,
27844
+ title: ` ${info.label} `,
27845
+ titleColor: theme.accent
27846
+ });
27847
+ panel.add(rendered);
27848
+ panels.set(rendered.id, panel);
27849
+ } else {
27850
+ const existing = panel.getChildren()[0];
27851
+ if (existing !== rendered) {
27852
+ if (existing) {
27853
+ panel.remove(existing);
27854
+ existing.destroyRecursively();
27855
+ }
27856
+ panel.add(rendered);
27857
+ }
27858
+ panel.title = ` ${info.label} `;
27859
+ panel.titleColor = theme.accent;
27860
+ panel.borderColor = theme.borderFocus;
27861
+ panel.backgroundColor = theme.panel;
27862
+ }
27863
+ panel.marginBottom = rendered.marginBottom;
27864
+ return panel;
27865
+ };
27866
+ renderNode.codeBlockOnly = true;
27867
+ return renderNode;
27868
+ }
26821
27869
  function headingOne(line, previousLine) {
26822
27870
  if (/^ {0,3}#(?:[ \t]+|$)/u.test(line))
26823
27871
  return true;
@@ -27317,6 +28365,34 @@ function labelledRule(label, width) {
27317
28365
  const left = Math.floor(room / 2);
27318
28366
  return `${"\u2500".repeat(left)}${text}${"\u2500".repeat(room - left)}`;
27319
28367
  }
28368
+ function TranscriptMarkdown(props) {
28369
+ const renderNode = createTranscriptMarkdownRenderer(theme2);
28370
+ return (() => {
28371
+ var _el$4 = _$createElement2("markdown");
28372
+ _$setProp2(_el$4, "bg", "transparent");
28373
+ _$setProp2(_el$4, "conceal", true);
28374
+ _$setProp2(_el$4, "renderNode", renderNode);
28375
+ _$effect2((_p$) => {
28376
+ var _v$ = addHeadingOneSpacing(props.content), { streaming: _v$2, syntax: _v$3 } = props, _v$4 = theme2.text, _v$5 = {
28377
+ borderColor: theme2.dim,
28378
+ cellPaddingX: 1
28379
+ };
28380
+ _v$ !== _p$.e && (_p$.e = _$setProp2(_el$4, "content", _v$, _p$.e));
28381
+ _v$2 !== _p$.t && (_p$.t = _$setProp2(_el$4, "streaming", _v$2, _p$.t));
28382
+ _v$3 !== _p$.a && (_p$.a = _$setProp2(_el$4, "syntaxStyle", _v$3, _p$.a));
28383
+ _v$4 !== _p$.o && (_p$.o = _$setProp2(_el$4, "fg", _v$4, _p$.o));
28384
+ _v$5 !== _p$.i && (_p$.i = _$setProp2(_el$4, "tableOptions", _v$5, _p$.i));
28385
+ return _p$;
28386
+ }, {
28387
+ e: undefined,
28388
+ t: undefined,
28389
+ a: undefined,
28390
+ o: undefined,
28391
+ i: undefined
28392
+ });
28393
+ return _el$4;
28394
+ })();
28395
+ }
27320
28396
  function CompactionTranscriptItem(props) {
27321
28397
  const [hidden, setHidden] = createSignal2(false);
27322
28398
  createEffect2(on2(() => props.expanded, () => setHidden(false), {
@@ -27334,49 +28410,38 @@ function CompactionTranscriptItem(props) {
27334
28410
  return choices.find((choice) => Array.from(choice).length + 6 <= ruleWidth()) ?? choices.at(-1);
27335
28411
  };
27336
28412
  return (() => {
27337
- var _el$4 = _$createElement2("box"), _el$5 = _$createElement2("box"), _el$6 = _$createElement2("text");
27338
- _$insertNode2(_el$4, _el$5);
27339
- _$setProp2(_el$4, "width", "100%");
27340
- _$setProp2(_el$4, "flexDirection", "column");
27341
- _$setProp2(_el$4, "rowGap", 1);
27342
- _$setProp2(_el$4, "flexShrink", 0);
28413
+ var _el$5 = _$createElement2("box"), _el$6 = _$createElement2("box"), _el$7 = _$createElement2("text");
27343
28414
  _$insertNode2(_el$5, _el$6);
28415
+ _$setProp2(_el$5, "width", "100%");
28416
+ _$setProp2(_el$5, "flexDirection", "column");
28417
+ _$setProp2(_el$5, "rowGap", 1);
27344
28418
  _$setProp2(_el$5, "flexShrink", 0);
27345
- _$setProp2(_el$5, "onMouseUp", toggle);
27346
- _$setProp2(_el$6, "wrapMode", "none");
27347
- _$setProp2(_el$6, "truncate", true);
27348
- _$setProp2(_el$6, "selectable", false);
27349
- _$insert2(_el$6, () => labelledRule(title(), ruleWidth()));
27350
- _$insert2(_el$4, _$createComponent2(Show2, {
28419
+ _$insertNode2(_el$6, _el$7);
28420
+ _$setProp2(_el$6, "flexShrink", 0);
28421
+ _$setProp2(_el$6, "onMouseUp", toggle);
28422
+ _$setProp2(_el$7, "wrapMode", "none");
28423
+ _$setProp2(_el$7, "truncate", true);
28424
+ _$setProp2(_el$7, "selectable", false);
28425
+ _$insert2(_el$7, () => labelledRule(title(), ruleWidth()));
28426
+ _$insert2(_el$5, _$createComponent2(Show2, {
27351
28427
  get when() {
27352
28428
  return !hidden();
27353
28429
  },
27354
28430
  get children() {
27355
28431
  return [(() => {
27356
- var _el$7 = _$createElement2("box"), _el$8 = _$createElement2("markdown");
27357
- _$insertNode2(_el$7, _el$8);
27358
- _$setProp2(_el$7, "flexDirection", "column");
27359
- _$setProp2(_el$7, "paddingLeft", 1);
27360
- _$setProp2(_el$7, "flexShrink", 0);
27361
- _$setProp2(_el$8, "bg", "transparent");
27362
- _$setProp2(_el$8, "conceal", true);
27363
- _$effect2((_p$) => {
27364
- var _v$ = addHeadingOneSpacing(props.item.summary), _v$2 = props.syntax, _v$3 = theme2.text, _v$4 = {
27365
- borderColor: theme2.dim,
27366
- cellPaddingX: 1
27367
- };
27368
- _v$ !== _p$.e && (_p$.e = _$setProp2(_el$8, "content", _v$, _p$.e));
27369
- _v$2 !== _p$.t && (_p$.t = _$setProp2(_el$8, "syntaxStyle", _v$2, _p$.t));
27370
- _v$3 !== _p$.a && (_p$.a = _$setProp2(_el$8, "fg", _v$3, _p$.a));
27371
- _v$4 !== _p$.o && (_p$.o = _$setProp2(_el$8, "tableOptions", _v$4, _p$.o));
27372
- return _p$;
27373
- }, {
27374
- e: undefined,
27375
- t: undefined,
27376
- a: undefined,
27377
- o: undefined
27378
- });
27379
- return _el$7;
28432
+ var _el$8 = _$createElement2("box");
28433
+ _$setProp2(_el$8, "flexDirection", "column");
28434
+ _$setProp2(_el$8, "paddingLeft", 1);
28435
+ _$setProp2(_el$8, "flexShrink", 0);
28436
+ _$insert2(_el$8, _$createComponent2(TranscriptMarkdown, {
28437
+ get content() {
28438
+ return props.item.summary;
28439
+ },
28440
+ get syntax() {
28441
+ return props.syntax;
28442
+ }
28443
+ }));
28444
+ return _el$8;
27380
28445
  })(), (() => {
27381
28446
  var _el$9 = _$createElement2("box"), _el$0 = _$createElement2("text");
27382
28447
  _$insertNode2(_el$9, _el$0);
@@ -27391,8 +28456,8 @@ function CompactionTranscriptItem(props) {
27391
28456
  })()];
27392
28457
  }
27393
28458
  }), null);
27394
- _$effect2((_$p) => _$setProp2(_el$6, "fg", theme2.accent, _$p));
27395
- return _el$4;
28459
+ _$effect2((_$p) => _$setProp2(_el$7, "fg", theme2.accent, _$p));
28460
+ return _el$5;
27396
28461
  })();
27397
28462
  }
27398
28463
  function CommandHelpTranscriptItem(props) {
@@ -27452,11 +28517,11 @@ function CommandHelpTranscriptItem(props) {
27452
28517
  }
27453
28518
  }));
27454
28519
  _$effect2((_p$) => {
27455
- var _v$7 = commandWidth(), _v$8 = commandWidth(), _v$9 = theme2.text, _v$0 = TextAttributes2.BOLD;
27456
- _v$7 !== _p$.e && (_p$.e = _$setProp2(_el$13, "width", _v$7, _p$.e));
27457
- _v$8 !== _p$.t && (_p$.t = _$setProp2(_el$13, "minWidth", _v$8, _p$.t));
27458
- _v$9 !== _p$.a && (_p$.a = _$setProp2(_el$14, "fg", _v$9, _p$.a));
27459
- _v$0 !== _p$.o && (_p$.o = _$setProp2(_el$14, "attributes", _v$0, _p$.o));
28520
+ var _v$8 = commandWidth(), _v$9 = commandWidth(), _v$0 = theme2.text, _v$1 = TextAttributes2.BOLD;
28521
+ _v$8 !== _p$.e && (_p$.e = _$setProp2(_el$13, "width", _v$8, _p$.e));
28522
+ _v$9 !== _p$.t && (_p$.t = _$setProp2(_el$13, "minWidth", _v$9, _p$.t));
28523
+ _v$0 !== _p$.a && (_p$.a = _$setProp2(_el$14, "fg", _v$0, _p$.a));
28524
+ _v$1 !== _p$.o && (_p$.o = _$setProp2(_el$14, "attributes", _v$1, _p$.o));
27460
28525
  return _p$;
27461
28526
  }, {
27462
28527
  e: undefined,
@@ -27468,9 +28533,9 @@ function CommandHelpTranscriptItem(props) {
27468
28533
  })()
27469
28534
  }), null);
27470
28535
  _$effect2((_p$) => {
27471
- var _v$5 = theme2.accent, _v$6 = TextAttributes2.BOLD;
27472
- _v$5 !== _p$.e && (_p$.e = _$setProp2(_el$11, "fg", _v$5, _p$.e));
27473
- _v$6 !== _p$.t && (_p$.t = _$setProp2(_el$11, "attributes", _v$6, _p$.t));
28536
+ var _v$6 = theme2.accent, _v$7 = TextAttributes2.BOLD;
28537
+ _v$6 !== _p$.e && (_p$.e = _$setProp2(_el$11, "fg", _v$6, _p$.e));
28538
+ _v$7 !== _p$.t && (_p$.t = _$setProp2(_el$11, "attributes", _v$7, _p$.t));
27474
28539
  return _p$;
27475
28540
  }, {
27476
28541
  e: undefined,
@@ -27542,9 +28607,9 @@ function TranscriptItemView(props) {
27542
28607
  }
27543
28608
  }), null);
27544
28609
  _$effect2((_p$) => {
27545
- var { primary: _v$1, panel: _v$10 } = t;
27546
- _v$1 !== _p$.e && (_p$.e = _$setProp2(_el$19, "borderColor", _v$1, _p$.e));
27547
- _v$10 !== _p$.t && (_p$.t = _$setProp2(_el$19, "backgroundColor", _v$10, _p$.t));
28610
+ var { primary: _v$10, panel: _v$11 } = t;
28611
+ _v$10 !== _p$.e && (_p$.e = _$setProp2(_el$19, "borderColor", _v$10, _p$.e));
28612
+ _v$11 !== _p$.t && (_p$.t = _$setProp2(_el$19, "backgroundColor", _v$11, _p$.t));
27548
28613
  return _p$;
27549
28614
  }, {
27550
28615
  e: undefined,
@@ -27555,31 +28620,21 @@ function TranscriptItemView(props) {
27555
28620
  }
27556
28621
  if (item.kind === "assistant") {
27557
28622
  return (() => {
27558
- var _el$21 = _$createElement2("box"), _el$22 = _$createElement2("markdown");
27559
- _$insertNode2(_el$21, _el$22);
28623
+ var _el$21 = _$createElement2("box");
27560
28624
  _$setProp2(_el$21, "flexDirection", "column");
27561
28625
  _$setProp2(_el$21, "paddingLeft", 1);
27562
28626
  _$setProp2(_el$21, "flexShrink", 0);
27563
- _$setProp2(_el$22, "bg", "transparent");
27564
- _$setProp2(_el$22, "conceal", true);
27565
- _$effect2((_p$) => {
27566
- var _v$11 = addHeadingOneSpacing(item.text), _v$12 = item.streaming, _v$13 = props.syntax, _v$14 = t.text, _v$15 = {
27567
- borderColor: t.dim,
27568
- cellPaddingX: 1
27569
- };
27570
- _v$11 !== _p$.e && (_p$.e = _$setProp2(_el$22, "content", _v$11, _p$.e));
27571
- _v$12 !== _p$.t && (_p$.t = _$setProp2(_el$22, "streaming", _v$12, _p$.t));
27572
- _v$13 !== _p$.a && (_p$.a = _$setProp2(_el$22, "syntaxStyle", _v$13, _p$.a));
27573
- _v$14 !== _p$.o && (_p$.o = _$setProp2(_el$22, "fg", _v$14, _p$.o));
27574
- _v$15 !== _p$.i && (_p$.i = _$setProp2(_el$22, "tableOptions", _v$15, _p$.i));
27575
- return _p$;
27576
- }, {
27577
- e: undefined,
27578
- t: undefined,
27579
- a: undefined,
27580
- o: undefined,
27581
- i: undefined
27582
- });
28627
+ _$insert2(_el$21, _$createComponent2(TranscriptMarkdown, {
28628
+ get content() {
28629
+ return item.text;
28630
+ },
28631
+ get streaming() {
28632
+ return item.streaming;
28633
+ },
28634
+ get syntax() {
28635
+ return props.syntax;
28636
+ }
28637
+ }));
27583
28638
  return _el$21;
27584
28639
  })();
27585
28640
  }
@@ -27607,20 +28662,19 @@ function TranscriptItemView(props) {
27607
28662
  }
27608
28663
  if (item.kind === "plan") {
27609
28664
  return (() => {
27610
- var _el$23 = _$createElement2("box"), _el$24 = _$createElement2("text"), _el$25 = _$createElement2("box"), _el$26 = _$createElement2("markdown");
27611
- _$insertNode2(_el$23, _el$24);
27612
- _$insertNode2(_el$23, _el$25);
27613
- _$insertNode2(_el$23, _el$26);
27614
- _$setProp2(_el$23, "border", ["left"]);
27615
- _$setProp2(_el$23, "flexDirection", "column");
27616
- _$setProp2(_el$23, "paddingLeft", 1);
27617
- _$setProp2(_el$23, "paddingRight", 1);
27618
- _$setProp2(_el$23, "paddingTop", 1);
27619
- _$setProp2(_el$23, "paddingBottom", 1);
27620
- _$setProp2(_el$23, "flexShrink", 0);
27621
- _$setProp2(_el$24, "wrapMode", "word");
27622
- _$insert2(_el$24, () => item.title, null);
27623
- _$insert2(_el$24, _$createComponent2(Show2, {
28665
+ var _el$22 = _$createElement2("box"), _el$23 = _$createElement2("text"), _el$24 = _$createElement2("box");
28666
+ _$insertNode2(_el$22, _el$23);
28667
+ _$insertNode2(_el$22, _el$24);
28668
+ _$setProp2(_el$22, "border", ["left"]);
28669
+ _$setProp2(_el$22, "flexDirection", "column");
28670
+ _$setProp2(_el$22, "paddingLeft", 1);
28671
+ _$setProp2(_el$22, "paddingRight", 1);
28672
+ _$setProp2(_el$22, "paddingTop", 1);
28673
+ _$setProp2(_el$22, "paddingBottom", 1);
28674
+ _$setProp2(_el$22, "flexShrink", 0);
28675
+ _$setProp2(_el$23, "wrapMode", "word");
28676
+ _$insert2(_el$23, () => item.title, null);
28677
+ _$insert2(_el$23, _$createComponent2(Show2, {
27624
28678
  get when() {
27625
28679
  return item.streaming;
27626
28680
  },
@@ -27634,50 +28688,46 @@ function TranscriptItemView(props) {
27634
28688
  });
27635
28689
  }
27636
28690
  }), null);
27637
- _$setProp2(_el$25, "height", 1);
27638
- _$setProp2(_el$25, "flexShrink", 0);
27639
- _$setProp2(_el$26, "bg", "transparent");
27640
- _$setProp2(_el$26, "conceal", true);
28691
+ _$setProp2(_el$24, "height", 1);
28692
+ _$setProp2(_el$24, "flexShrink", 0);
28693
+ _$insert2(_el$22, _$createComponent2(TranscriptMarkdown, {
28694
+ get content() {
28695
+ return item.body;
28696
+ },
28697
+ get streaming() {
28698
+ return item.streaming;
28699
+ },
28700
+ get syntax() {
28701
+ return props.syntax;
28702
+ }
28703
+ }), null);
27641
28704
  _$effect2((_p$) => {
27642
- var { planMode: _v$16, panel: _v$17, planMode: _v$18 } = t, _v$19 = TextAttributes2.BOLD | TextAttributes2.UNDERLINE, _v$20 = addHeadingOneSpacing(item.body), _v$21 = item.streaming, _v$22 = props.syntax, _v$23 = t.text, _v$24 = {
27643
- borderColor: t.dim,
27644
- cellPaddingX: 1
27645
- };
27646
- _v$16 !== _p$.e && (_p$.e = _$setProp2(_el$23, "borderColor", _v$16, _p$.e));
27647
- _v$17 !== _p$.t && (_p$.t = _$setProp2(_el$23, "backgroundColor", _v$17, _p$.t));
27648
- _v$18 !== _p$.a && (_p$.a = _$setProp2(_el$24, "fg", _v$18, _p$.a));
27649
- _v$19 !== _p$.o && (_p$.o = _$setProp2(_el$24, "attributes", _v$19, _p$.o));
27650
- _v$20 !== _p$.i && (_p$.i = _$setProp2(_el$26, "content", _v$20, _p$.i));
27651
- _v$21 !== _p$.n && (_p$.n = _$setProp2(_el$26, "streaming", _v$21, _p$.n));
27652
- _v$22 !== _p$.s && (_p$.s = _$setProp2(_el$26, "syntaxStyle", _v$22, _p$.s));
27653
- _v$23 !== _p$.h && (_p$.h = _$setProp2(_el$26, "fg", _v$23, _p$.h));
27654
- _v$24 !== _p$.r && (_p$.r = _$setProp2(_el$26, "tableOptions", _v$24, _p$.r));
28705
+ var { planMode: _v$12, panel: _v$13, planMode: _v$14 } = t, _v$15 = TextAttributes2.BOLD | TextAttributes2.UNDERLINE;
28706
+ _v$12 !== _p$.e && (_p$.e = _$setProp2(_el$22, "borderColor", _v$12, _p$.e));
28707
+ _v$13 !== _p$.t && (_p$.t = _$setProp2(_el$22, "backgroundColor", _v$13, _p$.t));
28708
+ _v$14 !== _p$.a && (_p$.a = _$setProp2(_el$23, "fg", _v$14, _p$.a));
28709
+ _v$15 !== _p$.o && (_p$.o = _$setProp2(_el$23, "attributes", _v$15, _p$.o));
27655
28710
  return _p$;
27656
28711
  }, {
27657
28712
  e: undefined,
27658
28713
  t: undefined,
27659
28714
  a: undefined,
27660
- o: undefined,
27661
- i: undefined,
27662
- n: undefined,
27663
- s: undefined,
27664
- h: undefined,
27665
- r: undefined
28715
+ o: undefined
27666
28716
  });
27667
- return _el$23;
28717
+ return _el$22;
27668
28718
  })();
27669
28719
  }
27670
28720
  if (item.kind === "todo") {
27671
28721
  const done = () => item.items.filter((entry) => entry.status === "completed").length;
27672
28722
  return (() => {
27673
- var _el$27 = _$createElement2("box"), _el$28 = _$createElement2("text"), _el$29 = _$createElement2("box");
27674
- _$insertNode2(_el$27, _el$28);
27675
- _$insertNode2(_el$27, _el$29);
27676
- _$setProp2(_el$27, "flexDirection", "column");
27677
- _$setProp2(_el$27, "paddingLeft", 1);
27678
- _$setProp2(_el$27, "flexShrink", 0);
27679
- _$setProp2(_el$28, "wrapMode", "none");
27680
- _$insert2(_el$28, _$createComponent2(Show2, {
28723
+ var _el$25 = _$createElement2("box"), _el$26 = _$createElement2("text"), _el$27 = _$createElement2("box");
28724
+ _$insertNode2(_el$25, _el$26);
28725
+ _$insertNode2(_el$25, _el$27);
28726
+ _$setProp2(_el$25, "flexDirection", "column");
28727
+ _$setProp2(_el$25, "paddingLeft", 1);
28728
+ _$setProp2(_el$25, "flexShrink", 0);
28729
+ _$setProp2(_el$26, "wrapMode", "none");
28730
+ _$insert2(_el$26, _$createComponent2(Show2, {
27681
28731
  get when() {
27682
28732
  return _$memo2(() => item.origin === "tool")() && item.status;
27683
28733
  },
@@ -27692,7 +28742,7 @@ function TranscriptItemView(props) {
27692
28742
  });
27693
28743
  }
27694
28744
  }), null);
27695
- _$insert2(_el$28, _$createComponent2(Span, {
28745
+ _$insert2(_el$26, _$createComponent2(Span, {
27696
28746
  get fg() {
27697
28747
  return t.text;
27698
28748
  },
@@ -27701,7 +28751,7 @@ function TranscriptItemView(props) {
27701
28751
  },
27702
28752
  children: " Todo"
27703
28753
  }), null);
27704
- _$insert2(_el$28, _$createComponent2(Span, {
28754
+ _$insert2(_el$26, _$createComponent2(Span, {
27705
28755
  get fg() {
27706
28756
  return t.muted;
27707
28757
  },
@@ -27709,27 +28759,27 @@ function TranscriptItemView(props) {
27709
28759
  return [" \xB7 ", _$memo2(() => todoProgress(done(), item.items.length))];
27710
28760
  }
27711
28761
  }), null);
27712
- _$setProp2(_el$29, "flexDirection", "column");
27713
- _$setProp2(_el$29, "paddingLeft", 2);
27714
- _$setProp2(_el$29, "flexShrink", 0);
27715
- _$insert2(_el$29, _$createComponent2(For2, {
28762
+ _$setProp2(_el$27, "flexDirection", "column");
28763
+ _$setProp2(_el$27, "paddingLeft", 2);
28764
+ _$setProp2(_el$27, "flexShrink", 0);
28765
+ _$insert2(_el$27, _$createComponent2(For2, {
27716
28766
  get each() {
27717
28767
  return item.items;
27718
28768
  },
27719
28769
  children: (entry) => (() => {
27720
- var _el$30 = _$createElement2("box"), _el$31 = _$createElement2("box"), _el$32 = _$createElement2("text"), _el$33 = _$createElement2("box"), _el$34 = _$createElement2("text");
27721
- _$insertNode2(_el$30, _el$31);
27722
- _$insertNode2(_el$30, _el$33);
27723
- _$insertNode2(_el$30, _el$34);
27724
- _$setProp2(_el$30, "width", "100%");
27725
- _$setProp2(_el$30, "flexDirection", "row");
27726
- _$setProp2(_el$30, "flexShrink", 0);
27727
- _$insertNode2(_el$31, _el$32);
27728
- _$setProp2(_el$31, "width", 1);
27729
- _$setProp2(_el$31, "minWidth", 1);
27730
- _$setProp2(_el$31, "flexShrink", 0);
27731
- _$setProp2(_el$32, "wrapMode", "none");
27732
- _$insert2(_el$32, _$createComponent2(Span, {
28770
+ var _el$28 = _$createElement2("box"), _el$29 = _$createElement2("box"), _el$30 = _$createElement2("text"), _el$31 = _$createElement2("box"), _el$32 = _$createElement2("text");
28771
+ _$insertNode2(_el$28, _el$29);
28772
+ _$insertNode2(_el$28, _el$31);
28773
+ _$insertNode2(_el$28, _el$32);
28774
+ _$setProp2(_el$28, "width", "100%");
28775
+ _$setProp2(_el$28, "flexDirection", "row");
28776
+ _$setProp2(_el$28, "flexShrink", 0);
28777
+ _$insertNode2(_el$29, _el$30);
28778
+ _$setProp2(_el$29, "width", 1);
28779
+ _$setProp2(_el$29, "minWidth", 1);
28780
+ _$setProp2(_el$29, "flexShrink", 0);
28781
+ _$setProp2(_el$30, "wrapMode", "none");
28782
+ _$insert2(_el$30, _$createComponent2(Span, {
27733
28783
  get fg() {
27734
28784
  return todoMarkColor(t, entry.status);
27735
28785
  },
@@ -27737,13 +28787,13 @@ function TranscriptItemView(props) {
27737
28787
  return todoMark(entry.status);
27738
28788
  }
27739
28789
  }));
27740
- _$setProp2(_el$33, "width", 1);
27741
- _$setProp2(_el$33, "minWidth", 1);
27742
- _$setProp2(_el$33, "flexShrink", 0);
27743
- _$setProp2(_el$34, "flexGrow", 1);
27744
- _$setProp2(_el$34, "minWidth", 0);
27745
- _$setProp2(_el$34, "wrapMode", "word");
27746
- _$insert2(_el$34, _$createComponent2(Span, {
28790
+ _$setProp2(_el$31, "width", 1);
28791
+ _$setProp2(_el$31, "minWidth", 1);
28792
+ _$setProp2(_el$31, "flexShrink", 0);
28793
+ _$setProp2(_el$32, "flexGrow", 1);
28794
+ _$setProp2(_el$32, "minWidth", 0);
28795
+ _$setProp2(_el$32, "wrapMode", "word");
28796
+ _$insert2(_el$32, _$createComponent2(Span, {
27747
28797
  get fg() {
27748
28798
  return _$memo2(() => entry.status === "in_progress")() ? t.text : t.muted;
27749
28799
  },
@@ -27754,21 +28804,21 @@ function TranscriptItemView(props) {
27754
28804
  return entry.text;
27755
28805
  }
27756
28806
  }));
27757
- return _el$30;
28807
+ return _el$28;
27758
28808
  })()
27759
28809
  }));
27760
- return _el$27;
28810
+ return _el$25;
27761
28811
  })();
27762
28812
  }
27763
28813
  if (item.kind === "thinking") {
27764
28814
  return (() => {
27765
- var _el$35 = _$createElement2("box"), _el$36 = _$createElement2("text");
27766
- _$insertNode2(_el$35, _el$36);
27767
- _$setProp2(_el$35, "paddingLeft", 2);
27768
- _$setProp2(_el$35, "flexShrink", 0);
27769
- _$setProp2(_el$36, "wrapMode", "word");
27770
- _$insert2(_el$36, () => thinkingText(item.text, props.expanded), null);
27771
- _$insert2(_el$36, _$createComponent2(Show2, {
28815
+ var _el$33 = _$createElement2("box"), _el$34 = _$createElement2("text");
28816
+ _$insertNode2(_el$33, _el$34);
28817
+ _$setProp2(_el$33, "paddingLeft", 2);
28818
+ _$setProp2(_el$33, "flexShrink", 0);
28819
+ _$setProp2(_el$34, "wrapMode", "word");
28820
+ _$insert2(_el$34, () => thinkingText(item.text, props.expanded), null);
28821
+ _$insert2(_el$34, _$createComponent2(Show2, {
27772
28822
  get when() {
27773
28823
  return item.streaming;
27774
28824
  },
@@ -27781,81 +28831,69 @@ function TranscriptItemView(props) {
27781
28831
  });
27782
28832
  }
27783
28833
  }), null);
27784
- _$effect2((_$p) => _$setProp2(_el$36, "fg", t.muted, _$p));
27785
- return _el$35;
28834
+ _$effect2((_$p) => _$setProp2(_el$34, "fg", t.muted, _$p));
28835
+ return _el$33;
27786
28836
  })();
27787
28837
  }
27788
28838
  if (item.kind === "image-result") {
27789
28839
  return (() => {
27790
- var _el$37 = _$createElement2("box"), _el$38 = _$createElement2("text"), _el$39 = _$createTextNode2(`Image result \xB7 `), _el$40 = _$createTextNode2(` image`);
27791
- _$insertNode2(_el$37, _el$38);
27792
- _$setProp2(_el$37, "border", ["left"]);
27793
- _$setProp2(_el$37, "flexDirection", "column");
27794
- _$setProp2(_el$37, "paddingLeft", 1);
27795
- _$setProp2(_el$37, "paddingRight", 1);
27796
- _$setProp2(_el$37, "flexShrink", 0);
27797
- _$insertNode2(_el$38, _el$39);
27798
- _$insertNode2(_el$38, _el$40);
27799
- _$insert2(_el$38, () => item.imageCount, _el$40);
27800
- _$insert2(_el$38, () => item.imageCount === 1 ? "" : "s", null);
27801
- _$insert2(_el$37, _$createComponent2(Show2, {
28840
+ var _el$35 = _$createElement2("box"), _el$36 = _$createElement2("text"), _el$37 = _$createTextNode2(`Image result \xB7 `), _el$38 = _$createTextNode2(` image`);
28841
+ _$insertNode2(_el$35, _el$36);
28842
+ _$setProp2(_el$35, "border", ["left"]);
28843
+ _$setProp2(_el$35, "flexDirection", "column");
28844
+ _$setProp2(_el$35, "paddingLeft", 1);
28845
+ _$setProp2(_el$35, "paddingRight", 1);
28846
+ _$setProp2(_el$35, "flexShrink", 0);
28847
+ _$insertNode2(_el$36, _el$37);
28848
+ _$insertNode2(_el$36, _el$38);
28849
+ _$insert2(_el$36, () => item.imageCount, _el$38);
28850
+ _$insert2(_el$36, () => item.imageCount === 1 ? "" : "s", null);
28851
+ _$insert2(_el$35, _$createComponent2(Show2, {
27802
28852
  get when() {
27803
28853
  return item.text;
27804
28854
  },
27805
28855
  get children() {
27806
- var _el$41 = _$createElement2("markdown");
27807
- _$setProp2(_el$41, "bg", "transparent");
27808
- _$setProp2(_el$41, "conceal", true);
27809
- _$effect2((_p$) => {
27810
- var _v$25 = addHeadingOneSpacing(item.text), _v$26 = props.syntax, _v$27 = t.text, _v$28 = {
27811
- borderColor: t.dim,
27812
- cellPaddingX: 1
27813
- };
27814
- _v$25 !== _p$.e && (_p$.e = _$setProp2(_el$41, "content", _v$25, _p$.e));
27815
- _v$26 !== _p$.t && (_p$.t = _$setProp2(_el$41, "syntaxStyle", _v$26, _p$.t));
27816
- _v$27 !== _p$.a && (_p$.a = _$setProp2(_el$41, "fg", _v$27, _p$.a));
27817
- _v$28 !== _p$.o && (_p$.o = _$setProp2(_el$41, "tableOptions", _v$28, _p$.o));
27818
- return _p$;
27819
- }, {
27820
- e: undefined,
27821
- t: undefined,
27822
- a: undefined,
27823
- o: undefined
28856
+ return _$createComponent2(TranscriptMarkdown, {
28857
+ get content() {
28858
+ return item.text;
28859
+ },
28860
+ get syntax() {
28861
+ return props.syntax;
28862
+ }
27824
28863
  });
27825
- return _el$41;
27826
28864
  }
27827
28865
  }), null);
27828
- _$insert2(_el$37, _$createComponent2(For2, {
28866
+ _$insert2(_el$35, _$createComponent2(For2, {
27829
28867
  get each() {
27830
28868
  return item.images;
27831
28869
  },
27832
28870
  children: (image) => (() => {
27833
- var _el$43 = _$createElement2("image");
27834
- _$setProp2(_el$43, "width", "100%");
27835
- _$setProp2(_el$43, "height", 12);
27836
- _$setProp2(_el$43, "fit", "fit");
27837
- _$effect2((_$p) => _$setProp2(_el$43, "source", Buffer.from(image.data, "base64"), _$p));
27838
- return _el$43;
28871
+ var _el$40 = _$createElement2("image");
28872
+ _$setProp2(_el$40, "width", "100%");
28873
+ _$setProp2(_el$40, "height", 12);
28874
+ _$setProp2(_el$40, "fit", "fit");
28875
+ _$effect2((_$p) => _$setProp2(_el$40, "source", Buffer.from(image.data, "base64"), _$p));
28876
+ return _el$40;
27839
28877
  })()
27840
28878
  }), null);
27841
- _$insert2(_el$37, _$createComponent2(Show2, {
28879
+ _$insert2(_el$35, _$createComponent2(Show2, {
27842
28880
  get when() {
27843
28881
  return item.imageCount > item.images.length;
27844
28882
  },
27845
28883
  get children() {
27846
- var _el$42 = _$createElement2("text");
27847
- _$setProp2(_el$42, "wrapMode", "word");
27848
- _$insert2(_el$42, () => item.showImages ? "Some image output could not be displayed." : "Image output hidden. Enable Show images in /settings.");
27849
- _$effect2((_$p) => _$setProp2(_el$42, "fg", t.muted, _$p));
27850
- return _el$42;
28884
+ var _el$39 = _$createElement2("text");
28885
+ _$setProp2(_el$39, "wrapMode", "word");
28886
+ _$insert2(_el$39, () => item.showImages ? "Some image output could not be displayed." : "Image output hidden. Enable Show images in /settings.");
28887
+ _$effect2((_$p) => _$setProp2(_el$39, "fg", t.muted, _$p));
28888
+ return _el$39;
27851
28889
  }
27852
28890
  }), null);
27853
28891
  _$effect2((_p$) => {
27854
- var { accent: _v$29, panel: _v$30, accent: _v$31 } = t, _v$32 = TextAttributes2.BOLD;
27855
- _v$29 !== _p$.e && (_p$.e = _$setProp2(_el$37, "borderColor", _v$29, _p$.e));
27856
- _v$30 !== _p$.t && (_p$.t = _$setProp2(_el$37, "backgroundColor", _v$30, _p$.t));
27857
- _v$31 !== _p$.a && (_p$.a = _$setProp2(_el$38, "fg", _v$31, _p$.a));
27858
- _v$32 !== _p$.o && (_p$.o = _$setProp2(_el$38, "attributes", _v$32, _p$.o));
28892
+ var { accent: _v$16, panel: _v$17, accent: _v$18 } = t, _v$19 = TextAttributes2.BOLD;
28893
+ _v$16 !== _p$.e && (_p$.e = _$setProp2(_el$35, "borderColor", _v$16, _p$.e));
28894
+ _v$17 !== _p$.t && (_p$.t = _$setProp2(_el$35, "backgroundColor", _v$17, _p$.t));
28895
+ _v$18 !== _p$.a && (_p$.a = _$setProp2(_el$36, "fg", _v$18, _p$.a));
28896
+ _v$19 !== _p$.o && (_p$.o = _$setProp2(_el$36, "attributes", _v$19, _p$.o));
27859
28897
  return _p$;
27860
28898
  }, {
27861
28899
  e: undefined,
@@ -27863,20 +28901,20 @@ function TranscriptItemView(props) {
27863
28901
  a: undefined,
27864
28902
  o: undefined
27865
28903
  });
27866
- return _el$37;
28904
+ return _el$35;
27867
28905
  })();
27868
28906
  }
27869
28907
  if (item.kind === "tool") {
27870
28908
  const color = () => toolColor(t, item.status);
27871
28909
  const outputLimit = () => props.expanded ? 30 : item.status === "error" ? 6 : 2;
27872
28910
  return (() => {
27873
- var _el$44 = _$createElement2("box"), _el$45 = _$createElement2("text");
27874
- _$insertNode2(_el$44, _el$45);
27875
- _$setProp2(_el$44, "flexDirection", "column");
27876
- _$setProp2(_el$44, "paddingLeft", 1);
27877
- _$setProp2(_el$44, "flexShrink", 0);
27878
- _$setProp2(_el$45, "wrapMode", "none");
27879
- _$insert2(_el$45, _$createComponent2(Span, {
28911
+ var _el$41 = _$createElement2("box"), _el$42 = _$createElement2("text");
28912
+ _$insertNode2(_el$41, _el$42);
28913
+ _$setProp2(_el$41, "flexDirection", "column");
28914
+ _$setProp2(_el$41, "paddingLeft", 1);
28915
+ _$setProp2(_el$41, "flexShrink", 0);
28916
+ _$setProp2(_el$42, "wrapMode", "none");
28917
+ _$insert2(_el$42, _$createComponent2(Span, {
27880
28918
  get fg() {
27881
28919
  return color();
27882
28920
  },
@@ -27884,7 +28922,7 @@ function TranscriptItemView(props) {
27884
28922
  return toolStatusIcon(item.status);
27885
28923
  }
27886
28924
  }), null);
27887
- _$insert2(_el$45, _$createComponent2(Span, {
28925
+ _$insert2(_el$42, _$createComponent2(Span, {
27888
28926
  get fg() {
27889
28927
  return t.text;
27890
28928
  },
@@ -27895,7 +28933,7 @@ function TranscriptItemView(props) {
27895
28933
  return [" ", _$memo2(() => toolDisplayName(item.name))];
27896
28934
  }
27897
28935
  }), null);
27898
- _$insert2(_el$45, _$createComponent2(Show2, {
28936
+ _$insert2(_el$42, _$createComponent2(Show2, {
27899
28937
  get when() {
27900
28938
  return item.summary;
27901
28939
  },
@@ -27910,7 +28948,7 @@ function TranscriptItemView(props) {
27910
28948
  });
27911
28949
  }
27912
28950
  }), null);
27913
- _$insert2(_el$45, _$createComponent2(Show2, {
28951
+ _$insert2(_el$42, _$createComponent2(Show2, {
27914
28952
  get when() {
27915
28953
  return duration2(item.durationMs);
27916
28954
  },
@@ -27925,60 +28963,60 @@ function TranscriptItemView(props) {
27925
28963
  });
27926
28964
  }
27927
28965
  }), null);
27928
- _$insert2(_el$44, _$createComponent2(Show2, {
28966
+ _$insert2(_el$41, _$createComponent2(Show2, {
27929
28967
  get when() {
27930
28968
  return _$memo2(() => !!item.output)() && (props.expanded || item.status === "error");
27931
28969
  },
27932
28970
  get fallback() {
27933
28971
  return (() => {
27934
- var _el$48 = _$createElement2("box");
27935
- _$setProp2(_el$48, "height", 0);
27936
- _$setProp2(_el$48, "flexShrink", 0);
27937
- return _el$48;
28972
+ var _el$45 = _$createElement2("box");
28973
+ _$setProp2(_el$45, "height", 0);
28974
+ _$setProp2(_el$45, "flexShrink", 0);
28975
+ return _el$45;
27938
28976
  })();
27939
28977
  },
27940
28978
  get children() {
27941
- var _el$46 = _$createElement2("box"), _el$47 = _$createElement2("text");
27942
- _$insertNode2(_el$46, _el$47);
27943
- _$setProp2(_el$46, "paddingLeft", 2);
27944
- _$setProp2(_el$46, "flexShrink", 0);
27945
- _$setProp2(_el$47, "wrapMode", "none");
27946
- _$insert2(_el$47, () => capLines(item.output, outputLimit()));
27947
- _$effect2((_$p) => _$setProp2(_el$47, "fg", item.status === "error" ? t.error : t.muted, _$p));
27948
- return _el$46;
28979
+ var _el$43 = _$createElement2("box"), _el$44 = _$createElement2("text");
28980
+ _$insertNode2(_el$43, _el$44);
28981
+ _$setProp2(_el$43, "paddingLeft", 2);
28982
+ _$setProp2(_el$43, "flexShrink", 0);
28983
+ _$setProp2(_el$44, "wrapMode", "none");
28984
+ _$insert2(_el$44, () => capLines(item.output, outputLimit()));
28985
+ _$effect2((_$p) => _$setProp2(_el$44, "fg", item.status === "error" ? t.error : t.muted, _$p));
28986
+ return _el$43;
27949
28987
  }
27950
28988
  }), null);
27951
- return _el$44;
28989
+ return _el$41;
27952
28990
  })();
27953
28991
  }
27954
28992
  if (item.kind === "notice") {
27955
28993
  return (() => {
27956
- var _el$49 = _$createElement2("box"), _el$50 = _$createElement2("text");
27957
- _$insertNode2(_el$49, _el$50);
27958
- _$setProp2(_el$49, "width", "100%");
27959
- _$setProp2(_el$49, "paddingLeft", 1);
27960
- _$setProp2(_el$49, "flexShrink", 0);
27961
- _$setProp2(_el$50, "wrapMode", "none");
27962
- _$setProp2(_el$50, "truncate", true);
27963
- _$insert2(_el$50, () => item.level === "error" || item.level === "warning" ? "! " : "\xB7 ", null);
27964
- _$insert2(_el$50, () => item.text, null);
27965
- _$effect2((_$p) => _$setProp2(_el$50, "fg", noticeColor(t, item.level), _$p));
27966
- return _el$49;
28994
+ var _el$46 = _$createElement2("box"), _el$47 = _$createElement2("text");
28995
+ _$insertNode2(_el$46, _el$47);
28996
+ _$setProp2(_el$46, "width", "100%");
28997
+ _$setProp2(_el$46, "paddingLeft", 1);
28998
+ _$setProp2(_el$46, "flexShrink", 0);
28999
+ _$setProp2(_el$47, "wrapMode", "none");
29000
+ _$setProp2(_el$47, "truncate", true);
29001
+ _$insert2(_el$47, () => item.level === "error" || item.level === "warning" ? "! " : "\xB7 ", null);
29002
+ _$insert2(_el$47, () => item.text, null);
29003
+ _$effect2((_$p) => _$setProp2(_el$47, "fg", noticeColor(t, item.level), _$p));
29004
+ return _el$46;
27967
29005
  })();
27968
29006
  }
27969
29007
  if (item.kind === "bash") {
27970
29008
  return (() => {
27971
- var _el$51 = _$createElement2("box"), _el$52 = _$createElement2("text"), _el$53 = _$createTextNode2(`! `);
27972
- _$insertNode2(_el$51, _el$52);
27973
- _$setProp2(_el$51, "flexDirection", "column");
27974
- _$setProp2(_el$51, "paddingLeft", 1);
27975
- _$setProp2(_el$51, "paddingTop", 1);
27976
- _$setProp2(_el$51, "paddingBottom", 1);
27977
- _$setProp2(_el$51, "flexShrink", 0);
27978
- _$insertNode2(_el$52, _el$53);
27979
- _$setProp2(_el$52, "wrapMode", "word");
27980
- _$insert2(_el$52, () => item.command, null);
27981
- _$insert2(_el$52, _$createComponent2(Show2, {
29009
+ var _el$48 = _$createElement2("box"), _el$49 = _$createElement2("text"), _el$50 = _$createTextNode2(`! `);
29010
+ _$insertNode2(_el$48, _el$49);
29011
+ _$setProp2(_el$48, "flexDirection", "column");
29012
+ _$setProp2(_el$48, "paddingLeft", 1);
29013
+ _$setProp2(_el$48, "paddingTop", 1);
29014
+ _$setProp2(_el$48, "paddingBottom", 1);
29015
+ _$setProp2(_el$48, "flexShrink", 0);
29016
+ _$insertNode2(_el$49, _el$50);
29017
+ _$setProp2(_el$49, "wrapMode", "word");
29018
+ _$insert2(_el$49, () => item.command, null);
29019
+ _$insert2(_el$49, _$createComponent2(Show2, {
27982
29020
  get when() {
27983
29021
  return item.running;
27984
29022
  },
@@ -27991,86 +29029,86 @@ function TranscriptItemView(props) {
27991
29029
  });
27992
29030
  }
27993
29031
  }), null);
27994
- _$insert2(_el$51, _$createComponent2(Show2, {
29032
+ _$insert2(_el$48, _$createComponent2(Show2, {
27995
29033
  get when() {
27996
29034
  return item.output;
27997
29035
  },
27998
29036
  get fallback() {
27999
29037
  return (() => {
28000
- var _el$56 = _$createElement2("box");
28001
- _$setProp2(_el$56, "height", 0);
28002
- _$setProp2(_el$56, "flexShrink", 0);
28003
- return _el$56;
29038
+ var _el$53 = _$createElement2("box");
29039
+ _$setProp2(_el$53, "height", 0);
29040
+ _$setProp2(_el$53, "flexShrink", 0);
29041
+ return _el$53;
28004
29042
  })();
28005
29043
  },
28006
29044
  get children() {
28007
- var _el$54 = _$createElement2("box"), _el$55 = _$createElement2("text");
28008
- _$insertNode2(_el$54, _el$55);
28009
- _$setProp2(_el$54, "paddingLeft", 2);
28010
- _$setProp2(_el$55, "wrapMode", "char");
28011
- _$insert2(_el$55, () => capLines(item.output, props.expanded ? 30 : 6));
28012
- _$effect2((_$p) => _$setProp2(_el$55, "fg", item.cancelled || item.exitCode !== undefined && item.exitCode !== 0 ? t.error : t.muted, _$p));
28013
- return _el$54;
29045
+ var _el$51 = _$createElement2("box"), _el$52 = _$createElement2("text");
29046
+ _$insertNode2(_el$51, _el$52);
29047
+ _$setProp2(_el$51, "paddingLeft", 2);
29048
+ _$setProp2(_el$52, "wrapMode", "char");
29049
+ _$insert2(_el$52, () => capLines(item.output, props.expanded ? 30 : 6));
29050
+ _$effect2((_$p) => _$setProp2(_el$52, "fg", item.cancelled || item.exitCode !== undefined && item.exitCode !== 0 ? t.error : t.muted, _$p));
29051
+ return _el$51;
28014
29052
  }
28015
29053
  }), null);
28016
- _$effect2((_$p) => _$setProp2(_el$52, "fg", t.success, _$p));
28017
- return _el$51;
29054
+ _$effect2((_$p) => _$setProp2(_el$49, "fg", t.success, _$p));
29055
+ return _el$48;
28018
29056
  })();
28019
29057
  }
28020
29058
  if (item.kind === "custom") {
28021
29059
  return (() => {
28022
- var _el$57 = _$createElement2("box"), _el$58 = _$createElement2("text"), _el$59 = _$createElement2("text");
28023
- _$insertNode2(_el$57, _el$58);
28024
- _$insertNode2(_el$57, _el$59);
28025
- _$setProp2(_el$57, "flexDirection", "column");
28026
- _$setProp2(_el$57, "paddingLeft", 1);
28027
- _$setProp2(_el$57, "flexShrink", 0);
28028
- _$insert2(_el$58, () => item.label);
28029
- _$setProp2(_el$59, "wrapMode", "word");
28030
- _$insert2(_el$59, () => item.text);
29060
+ var _el$54 = _$createElement2("box"), _el$55 = _$createElement2("text"), _el$56 = _$createElement2("text");
29061
+ _$insertNode2(_el$54, _el$55);
29062
+ _$insertNode2(_el$54, _el$56);
29063
+ _$setProp2(_el$54, "flexDirection", "column");
29064
+ _$setProp2(_el$54, "paddingLeft", 1);
29065
+ _$setProp2(_el$54, "flexShrink", 0);
29066
+ _$insert2(_el$55, () => item.label);
29067
+ _$setProp2(_el$56, "wrapMode", "word");
29068
+ _$insert2(_el$56, () => item.text);
28031
29069
  _$effect2((_p$) => {
28032
- var { purple: _v$33, text: _v$34 } = t;
28033
- _v$33 !== _p$.e && (_p$.e = _$setProp2(_el$58, "fg", _v$33, _p$.e));
28034
- _v$34 !== _p$.t && (_p$.t = _$setProp2(_el$59, "fg", _v$34, _p$.t));
29070
+ var { purple: _v$20, text: _v$21 } = t;
29071
+ _v$20 !== _p$.e && (_p$.e = _$setProp2(_el$55, "fg", _v$20, _p$.e));
29072
+ _v$21 !== _p$.t && (_p$.t = _$setProp2(_el$56, "fg", _v$21, _p$.t));
28035
29073
  return _p$;
28036
29074
  }, {
28037
29075
  e: undefined,
28038
29076
  t: undefined
28039
29077
  });
28040
- return _el$57;
29078
+ return _el$54;
28041
29079
  })();
28042
29080
  }
28043
29081
  return (() => {
28044
- var _el$60 = _$createElement2("box"), _el$61 = _$createElement2("text"), _el$62 = _$createTextNode2(`\u25C7 `), _el$63 = _$createElement2("text");
28045
- _$insertNode2(_el$60, _el$61);
28046
- _$insertNode2(_el$60, _el$63);
28047
- _$setProp2(_el$60, "flexDirection", "column");
28048
- _$setProp2(_el$60, "paddingLeft", 1);
28049
- _$setProp2(_el$60, "flexShrink", 0);
28050
- _$insertNode2(_el$61, _el$62);
28051
- _$insert2(_el$61, () => item.label, null);
28052
- _$setProp2(_el$63, "wrapMode", "word");
28053
- _$insert2(_el$63, () => capLines(item.text, props.expanded ? 30 : 6));
29082
+ var _el$57 = _$createElement2("box"), _el$58 = _$createElement2("text"), _el$59 = _$createTextNode2(`\u25C7 `), _el$60 = _$createElement2("text");
29083
+ _$insertNode2(_el$57, _el$58);
29084
+ _$insertNode2(_el$57, _el$60);
29085
+ _$setProp2(_el$57, "flexDirection", "column");
29086
+ _$setProp2(_el$57, "paddingLeft", 1);
29087
+ _$setProp2(_el$57, "flexShrink", 0);
29088
+ _$insertNode2(_el$58, _el$59);
29089
+ _$insert2(_el$58, () => item.label, null);
29090
+ _$setProp2(_el$60, "wrapMode", "word");
29091
+ _$insert2(_el$60, () => capLines(item.text, props.expanded ? 30 : 6));
28054
29092
  _$effect2((_p$) => {
28055
- var { accent: _v$35, muted: _v$36 } = t;
28056
- _v$35 !== _p$.e && (_p$.e = _$setProp2(_el$61, "fg", _v$35, _p$.e));
28057
- _v$36 !== _p$.t && (_p$.t = _$setProp2(_el$63, "fg", _v$36, _p$.t));
29093
+ var { accent: _v$22, muted: _v$23 } = t;
29094
+ _v$22 !== _p$.e && (_p$.e = _$setProp2(_el$58, "fg", _v$22, _p$.e));
29095
+ _v$23 !== _p$.t && (_p$.t = _$setProp2(_el$60, "fg", _v$23, _p$.t));
28058
29096
  return _p$;
28059
29097
  }, {
28060
29098
  e: undefined,
28061
29099
  t: undefined
28062
29100
  });
28063
- return _el$60;
29101
+ return _el$57;
28064
29102
  })();
28065
29103
  }
28066
29104
  function TranscriptItems(props) {
28067
29105
  return (() => {
28068
- var _el$64 = _$createElement2("box");
28069
- _$setProp2(_el$64, "flexDirection", "column");
28070
- _$setProp2(_el$64, "flexShrink", 0);
28071
- _$setProp2(_el$64, "paddingX", 1);
28072
- _$setProp2(_el$64, "rowGap", 1);
28073
- _$insert2(_el$64, _$createComponent2(For2, {
29106
+ var _el$61 = _$createElement2("box");
29107
+ _$setProp2(_el$61, "flexDirection", "column");
29108
+ _$setProp2(_el$61, "flexShrink", 0);
29109
+ _$setProp2(_el$61, "paddingX", 1);
29110
+ _$setProp2(_el$61, "rowGap", 1);
29111
+ _$insert2(_el$61, _$createComponent2(For2, {
28074
29112
  get each() {
28075
29113
  return props.items;
28076
29114
  },
@@ -28082,10 +29120,10 @@ function TranscriptItems(props) {
28082
29120
  children: () => _$createComponent2(ErrorBoundary, {
28083
29121
  get fallback() {
28084
29122
  return (() => {
28085
- var _el$65 = _$createElement2("text");
28086
- _$insertNode2(_el$65, _$createTextNode2(`\xB7 This item could not be drawn.`));
28087
- _$effect2((_$p) => _$setProp2(_el$65, "fg", theme2.muted, _$p));
28088
- return _el$65;
29123
+ var _el$62 = _$createElement2("text");
29124
+ _$insertNode2(_el$62, _$createTextNode2(`\xB7 This item could not be drawn.`));
29125
+ _$effect2((_$p) => _$setProp2(_el$62, "fg", theme2.muted, _$p));
29126
+ return _el$62;
28089
29127
  })();
28090
29128
  },
28091
29129
  get children() {
@@ -28108,7 +29146,7 @@ function TranscriptItems(props) {
28108
29146
  })
28109
29147
  })
28110
29148
  }));
28111
- return _el$64;
29149
+ return _el$61;
28112
29150
  })();
28113
29151
  }
28114
29152
  function Palette(props) {
@@ -28131,85 +29169,85 @@ function Palette(props) {
28131
29169
  onCleanup2(() => clearTimeout(timer));
28132
29170
  }));
28133
29171
  return (() => {
28134
- var _el$67 = _$createElement2("box"), _el$68 = _$createElement2("scrollbox");
28135
- _$insertNode2(_el$67, _el$68);
28136
- _$setProp2(_el$67, "width", "100%");
28137
- _$setProp2(_el$67, "flexDirection", "column");
28138
- _$setProp2(_el$67, "border", ["top"]);
28139
- _$setProp2(_el$67, "paddingX", 1);
28140
- _$setProp2(_el$67, "marginTop", 0);
28141
- _$setProp2(_el$67, "flexShrink", 0);
29172
+ var _el$64 = _$createElement2("box"), _el$65 = _$createElement2("scrollbox");
29173
+ _$insertNode2(_el$64, _el$65);
29174
+ _$setProp2(_el$64, "width", "100%");
29175
+ _$setProp2(_el$64, "flexDirection", "column");
29176
+ _$setProp2(_el$64, "border", ["top"]);
29177
+ _$setProp2(_el$64, "paddingX", 1);
29178
+ _$setProp2(_el$64, "marginTop", 0);
29179
+ _$setProp2(_el$64, "flexShrink", 0);
28142
29180
  _$use2((value) => {
28143
29181
  scroll = value;
28144
- }, _el$68);
28145
- _$setProp2(_el$68, "scrollY", true);
28146
- _$insert2(_el$68, _$createComponent2(For2, {
29182
+ }, _el$65);
29183
+ _$setProp2(_el$65, "scrollY", true);
29184
+ _$insert2(_el$65, _$createComponent2(For2, {
28147
29185
  get each() {
28148
29186
  return props.palette.items;
28149
29187
  },
28150
29188
  children: (_item, index) => {
28151
29189
  const selected = () => index() === props.palette.index;
28152
29190
  return (() => {
28153
- var _el$69 = _$createElement2("box"), _el$70 = _$createElement2("box"), _el$71 = _$createElement2("box"), _el$72 = _$createElement2("box");
28154
- _$insertNode2(_el$69, _el$70);
28155
- _$insertNode2(_el$69, _el$71);
28156
- _$insertNode2(_el$69, _el$72);
28157
- _$setProp2(_el$69, "width", "100%");
28158
- _$setProp2(_el$69, "flexDirection", "row");
28159
- _$setProp2(_el$69, "paddingX", 1);
28160
- _$setProp2(_el$69, "onMouseOver", () => props.app.selectPaletteItem(index()));
28161
- _$setProp2(_el$69, "onMouseUp", (event) => {
29191
+ var _el$66 = _$createElement2("box"), _el$67 = _$createElement2("box"), _el$68 = _$createElement2("box"), _el$69 = _$createElement2("box");
29192
+ _$insertNode2(_el$66, _el$67);
29193
+ _$insertNode2(_el$66, _el$68);
29194
+ _$insertNode2(_el$66, _el$69);
29195
+ _$setProp2(_el$66, "width", "100%");
29196
+ _$setProp2(_el$66, "flexDirection", "row");
29197
+ _$setProp2(_el$66, "paddingX", 1);
29198
+ _$setProp2(_el$66, "onMouseOver", () => props.app.selectPaletteItem(index()));
29199
+ _$setProp2(_el$66, "onMouseUp", (event) => {
28162
29200
  if (event.button !== 0)
28163
29201
  return;
28164
29202
  event.stopPropagation();
28165
29203
  props.app.activatePaletteItem(index());
28166
29204
  });
28167
- _$setProp2(_el$70, "flexShrink", 0);
28168
- _$setProp2(_el$70, "flexDirection", "column");
28169
- _$insert2(_el$70, _$createComponent2(For2, {
29205
+ _$setProp2(_el$67, "flexShrink", 0);
29206
+ _$setProp2(_el$67, "flexDirection", "column");
29207
+ _$insert2(_el$67, _$createComponent2(For2, {
28170
29208
  get each() {
28171
29209
  return rows()[index()]?.label ?? [];
28172
29210
  },
28173
29211
  children: (line) => (() => {
28174
- var _el$73 = _$createElement2("text");
28175
- _$setProp2(_el$73, "wrapMode", "none");
28176
- _$insert2(_el$73, line);
29212
+ var _el$70 = _$createElement2("text");
29213
+ _$setProp2(_el$70, "wrapMode", "none");
29214
+ _$insert2(_el$70, line);
28177
29215
  _$effect2((_p$) => {
28178
- var _v$44 = selected() ? theme2.selectionText : theme2.text, _v$45 = selected() ? TextAttributes2.BOLD : 0;
28179
- _v$44 !== _p$.e && (_p$.e = _$setProp2(_el$73, "fg", _v$44, _p$.e));
28180
- _v$45 !== _p$.t && (_p$.t = _$setProp2(_el$73, "attributes", _v$45, _p$.t));
29216
+ var _v$31 = selected() ? theme2.selectionText : theme2.text, _v$32 = selected() ? TextAttributes2.BOLD : 0;
29217
+ _v$31 !== _p$.e && (_p$.e = _$setProp2(_el$70, "fg", _v$31, _p$.e));
29218
+ _v$32 !== _p$.t && (_p$.t = _$setProp2(_el$70, "attributes", _v$32, _p$.t));
28181
29219
  return _p$;
28182
29220
  }, {
28183
29221
  e: undefined,
28184
29222
  t: undefined
28185
29223
  });
28186
- return _el$73;
29224
+ return _el$70;
28187
29225
  })()
28188
29226
  }));
28189
- _$setProp2(_el$71, "width", 2);
28190
- _$setProp2(_el$71, "minWidth", 2);
28191
- _$setProp2(_el$71, "flexShrink", 0);
28192
- _$setProp2(_el$72, "flexDirection", "column");
28193
- _$setProp2(_el$72, "flexGrow", 1);
28194
- _$setProp2(_el$72, "minWidth", 0);
28195
- _$insert2(_el$72, _$createComponent2(For2, {
29227
+ _$setProp2(_el$68, "width", 2);
29228
+ _$setProp2(_el$68, "minWidth", 2);
29229
+ _$setProp2(_el$68, "flexShrink", 0);
29230
+ _$setProp2(_el$69, "flexDirection", "column");
29231
+ _$setProp2(_el$69, "flexGrow", 1);
29232
+ _$setProp2(_el$69, "minWidth", 0);
29233
+ _$insert2(_el$69, _$createComponent2(For2, {
28196
29234
  get each() {
28197
29235
  return rows()[index()]?.description ?? [];
28198
29236
  },
28199
29237
  children: (line) => (() => {
28200
- var _el$74 = _$createElement2("text");
28201
- _$setProp2(_el$74, "wrapMode", "none");
28202
- _$insert2(_el$74, line);
28203
- _$effect2((_$p) => _$setProp2(_el$74, "fg", selected() ? theme2.selectionMuted : theme2.muted, _$p));
28204
- return _el$74;
29238
+ var _el$71 = _$createElement2("text");
29239
+ _$setProp2(_el$71, "wrapMode", "none");
29240
+ _$insert2(_el$71, line);
29241
+ _$effect2((_$p) => _$setProp2(_el$71, "fg", selected() ? theme2.selectionMuted : theme2.muted, _$p));
29242
+ return _el$71;
28205
29243
  })()
28206
29244
  }));
28207
29245
  _$effect2((_p$) => {
28208
- var _v$40 = `palette-item-${index()}`, _v$41 = selected() ? theme2.selectionBg : undefined, _v$42 = commandWidth(), _v$43 = commandWidth();
28209
- _v$40 !== _p$.e && (_p$.e = _$setProp2(_el$69, "id", _v$40, _p$.e));
28210
- _v$41 !== _p$.t && (_p$.t = _$setProp2(_el$69, "backgroundColor", _v$41, _p$.t));
28211
- _v$42 !== _p$.a && (_p$.a = _$setProp2(_el$70, "width", _v$42, _p$.a));
28212
- _v$43 !== _p$.o && (_p$.o = _$setProp2(_el$70, "minWidth", _v$43, _p$.o));
29246
+ var _v$27 = `palette-item-${index()}`, _v$28 = selected() ? theme2.selectionBg : undefined, _v$29 = commandWidth(), _v$30 = commandWidth();
29247
+ _v$27 !== _p$.e && (_p$.e = _$setProp2(_el$66, "id", _v$27, _p$.e));
29248
+ _v$28 !== _p$.t && (_p$.t = _$setProp2(_el$66, "backgroundColor", _v$28, _p$.t));
29249
+ _v$29 !== _p$.a && (_p$.a = _$setProp2(_el$67, "width", _v$29, _p$.a));
29250
+ _v$30 !== _p$.o && (_p$.o = _$setProp2(_el$67, "minWidth", _v$30, _p$.o));
28213
29251
  return _p$;
28214
29252
  }, {
28215
29253
  e: undefined,
@@ -28217,146 +29255,146 @@ function Palette(props) {
28217
29255
  a: undefined,
28218
29256
  o: undefined
28219
29257
  });
28220
- return _el$69;
29258
+ return _el$66;
28221
29259
  })();
28222
29260
  }
28223
29261
  }));
28224
29262
  _$effect2((_p$) => {
28225
- var { panel: _v$37, dim: _v$38 } = theme2, _v$39 = menuHeight();
28226
- _v$37 !== _p$.e && (_p$.e = _$setProp2(_el$67, "backgroundColor", _v$37, _p$.e));
28227
- _v$38 !== _p$.t && (_p$.t = _$setProp2(_el$67, "borderColor", _v$38, _p$.t));
28228
- _v$39 !== _p$.a && (_p$.a = _$setProp2(_el$68, "height", _v$39, _p$.a));
29263
+ var { panel: _v$24, dim: _v$25 } = theme2, _v$26 = menuHeight();
29264
+ _v$24 !== _p$.e && (_p$.e = _$setProp2(_el$64, "backgroundColor", _v$24, _p$.e));
29265
+ _v$25 !== _p$.t && (_p$.t = _$setProp2(_el$64, "borderColor", _v$25, _p$.t));
29266
+ _v$26 !== _p$.a && (_p$.a = _$setProp2(_el$65, "height", _v$26, _p$.a));
28229
29267
  return _p$;
28230
29268
  }, {
28231
29269
  e: undefined,
28232
29270
  t: undefined,
28233
29271
  a: undefined
28234
29272
  });
28235
- return _el$67;
29273
+ return _el$64;
28236
29274
  })();
28237
29275
  }
28238
29276
  function FileCompletionList(props) {
28239
29277
  return (() => {
28240
- var _el$75 = _$createElement2("box");
28241
- _$setProp2(_el$75, "flexDirection", "column");
28242
- _$setProp2(_el$75, "border", ["top"]);
28243
- _$setProp2(_el$75, "paddingX", 1);
28244
- _$setProp2(_el$75, "marginTop", 0);
28245
- _$setProp2(_el$75, "flexShrink", 0);
28246
- _$insert2(_el$75, _$createComponent2(For2, {
29278
+ var _el$72 = _$createElement2("box");
29279
+ _$setProp2(_el$72, "flexDirection", "column");
29280
+ _$setProp2(_el$72, "border", ["top"]);
29281
+ _$setProp2(_el$72, "paddingX", 1);
29282
+ _$setProp2(_el$72, "marginTop", 0);
29283
+ _$setProp2(_el$72, "flexShrink", 0);
29284
+ _$insert2(_el$72, _$createComponent2(For2, {
28247
29285
  get each() {
28248
29286
  return props.completion.items;
28249
29287
  },
28250
29288
  children: (item, index) => {
28251
29289
  const selected = () => index() === props.completion.index;
28252
29290
  return (() => {
28253
- var _el$76 = _$createElement2("box"), _el$77 = _$createElement2("text");
28254
- _$insertNode2(_el$76, _el$77);
28255
- _$setProp2(_el$76, "flexDirection", "row");
28256
- _$setProp2(_el$76, "paddingX", 1);
28257
- _$setProp2(_el$76, "onMouseOver", () => props.app.selectFileCompletion(index()));
28258
- _$setProp2(_el$76, "onMouseUp", (event) => {
29291
+ var _el$73 = _$createElement2("box"), _el$74 = _$createElement2("text");
29292
+ _$insertNode2(_el$73, _el$74);
29293
+ _$setProp2(_el$73, "flexDirection", "row");
29294
+ _$setProp2(_el$73, "paddingX", 1);
29295
+ _$setProp2(_el$73, "onMouseOver", () => props.app.selectFileCompletion(index()));
29296
+ _$setProp2(_el$73, "onMouseUp", (event) => {
28259
29297
  if (event.button !== 0)
28260
29298
  return;
28261
29299
  event.stopPropagation();
28262
29300
  props.app.activateFileCompletion(index());
28263
29301
  });
28264
- _$setProp2(_el$77, "wrapMode", "none");
28265
- _$setProp2(_el$77, "truncate", true);
28266
- _$insert2(_el$77, () => item.path);
29302
+ _$setProp2(_el$74, "wrapMode", "none");
29303
+ _$setProp2(_el$74, "truncate", true);
29304
+ _$insert2(_el$74, () => item.path);
28267
29305
  _$effect2((_p$) => {
28268
- var _v$48 = selected() ? theme2.selectionBg : undefined, _v$49 = selected() ? theme2.selectionText : theme2.text, _v$50 = selected() ? TextAttributes2.BOLD : 0;
28269
- _v$48 !== _p$.e && (_p$.e = _$setProp2(_el$76, "backgroundColor", _v$48, _p$.e));
28270
- _v$49 !== _p$.t && (_p$.t = _$setProp2(_el$77, "fg", _v$49, _p$.t));
28271
- _v$50 !== _p$.a && (_p$.a = _$setProp2(_el$77, "attributes", _v$50, _p$.a));
29306
+ var _v$35 = selected() ? theme2.selectionBg : undefined, _v$36 = selected() ? theme2.selectionText : theme2.text, _v$37 = selected() ? TextAttributes2.BOLD : 0;
29307
+ _v$35 !== _p$.e && (_p$.e = _$setProp2(_el$73, "backgroundColor", _v$35, _p$.e));
29308
+ _v$36 !== _p$.t && (_p$.t = _$setProp2(_el$74, "fg", _v$36, _p$.t));
29309
+ _v$37 !== _p$.a && (_p$.a = _$setProp2(_el$74, "attributes", _v$37, _p$.a));
28272
29310
  return _p$;
28273
29311
  }, {
28274
29312
  e: undefined,
28275
29313
  t: undefined,
28276
29314
  a: undefined
28277
29315
  });
28278
- return _el$76;
29316
+ return _el$73;
28279
29317
  })();
28280
29318
  }
28281
29319
  }));
28282
29320
  _$effect2((_p$) => {
28283
- var { panel: _v$46, dim: _v$47 } = theme2;
28284
- _v$46 !== _p$.e && (_p$.e = _$setProp2(_el$75, "backgroundColor", _v$46, _p$.e));
28285
- _v$47 !== _p$.t && (_p$.t = _$setProp2(_el$75, "borderColor", _v$47, _p$.t));
29321
+ var { panel: _v$33, dim: _v$34 } = theme2;
29322
+ _v$33 !== _p$.e && (_p$.e = _$setProp2(_el$72, "backgroundColor", _v$33, _p$.e));
29323
+ _v$34 !== _p$.t && (_p$.t = _$setProp2(_el$72, "borderColor", _v$34, _p$.t));
28286
29324
  return _p$;
28287
29325
  }, {
28288
29326
  e: undefined,
28289
29327
  t: undefined
28290
29328
  });
28291
- return _el$75;
29329
+ return _el$72;
28292
29330
  })();
28293
29331
  }
28294
29332
  function PlanChoiceBlock(props) {
28295
29333
  const rows = () => [`Implement "${props.choice.title}"`, "Edit the plan"];
28296
29334
  return (() => {
28297
- var _el$78 = _$createElement2("box"), _el$79 = _$createElement2("text"), _el$81 = _$createElement2("box"), _el$82 = _$createElement2("box"), _el$83 = _$createElement2("text");
28298
- _$insertNode2(_el$78, _el$79);
28299
- _$insertNode2(_el$78, _el$81);
28300
- _$insertNode2(_el$78, _el$82);
28301
- _$insertNode2(_el$78, _el$83);
28302
- _$setProp2(_el$78, "flexDirection", "column");
28303
- _$setProp2(_el$78, "border", ["top"]);
28304
- _$setProp2(_el$78, "paddingX", 1);
28305
- _$setProp2(_el$78, "marginTop", 0);
29335
+ var _el$75 = _$createElement2("box"), _el$76 = _$createElement2("text"), _el$78 = _$createElement2("box"), _el$79 = _$createElement2("box"), _el$80 = _$createElement2("text");
29336
+ _$insertNode2(_el$75, _el$76);
29337
+ _$insertNode2(_el$75, _el$78);
29338
+ _$insertNode2(_el$75, _el$79);
29339
+ _$insertNode2(_el$75, _el$80);
29340
+ _$setProp2(_el$75, "flexDirection", "column");
29341
+ _$setProp2(_el$75, "border", ["top"]);
29342
+ _$setProp2(_el$75, "paddingX", 1);
29343
+ _$setProp2(_el$75, "marginTop", 0);
29344
+ _$setProp2(_el$75, "flexShrink", 0);
29345
+ _$insertNode2(_el$76, _$createTextNode2(`Plan ready`));
29346
+ _$setProp2(_el$76, "wrapMode", "none");
29347
+ _$setProp2(_el$76, "truncate", true);
29348
+ _$setProp2(_el$78, "height", 1);
28306
29349
  _$setProp2(_el$78, "flexShrink", 0);
28307
- _$insertNode2(_el$79, _$createTextNode2(`Plan ready`));
28308
- _$setProp2(_el$79, "wrapMode", "none");
28309
- _$setProp2(_el$79, "truncate", true);
28310
- _$setProp2(_el$81, "height", 1);
28311
- _$setProp2(_el$81, "flexShrink", 0);
28312
- _$insert2(_el$78, _$createComponent2(For2, {
29350
+ _$insert2(_el$75, _$createComponent2(For2, {
28313
29351
  get each() {
28314
29352
  return rows();
28315
29353
  },
28316
29354
  children: (label, index) => {
28317
29355
  const selected = () => index() === props.choice.index;
28318
29356
  return (() => {
28319
- var _el$85 = _$createElement2("box"), _el$86 = _$createElement2("text");
28320
- _$insertNode2(_el$85, _el$86);
28321
- _$setProp2(_el$85, "flexDirection", "row");
28322
- _$setProp2(_el$85, "paddingX", 1);
28323
- _$setProp2(_el$85, "onMouseOver", () => props.app.selectPlanChoice(index()));
28324
- _$setProp2(_el$85, "onMouseUp", (event) => {
29357
+ var _el$82 = _$createElement2("box"), _el$83 = _$createElement2("text");
29358
+ _$insertNode2(_el$82, _el$83);
29359
+ _$setProp2(_el$82, "flexDirection", "row");
29360
+ _$setProp2(_el$82, "paddingX", 1);
29361
+ _$setProp2(_el$82, "onMouseOver", () => props.app.selectPlanChoice(index()));
29362
+ _$setProp2(_el$82, "onMouseUp", (event) => {
28325
29363
  if (event.button !== 0)
28326
29364
  return;
28327
29365
  event.stopPropagation();
28328
29366
  props.app.activatePlanChoice(index());
28329
29367
  });
28330
- _$setProp2(_el$86, "wrapMode", "none");
28331
- _$setProp2(_el$86, "truncate", true);
28332
- _$insert2(_el$86, label);
29368
+ _$setProp2(_el$83, "wrapMode", "none");
29369
+ _$setProp2(_el$83, "truncate", true);
29370
+ _$insert2(_el$83, label);
28333
29371
  _$effect2((_p$) => {
28334
- var _v$56 = selected() ? theme2.selectionBg : undefined, _v$57 = selected() ? theme2.selectionText : theme2.text, _v$58 = selected() ? TextAttributes2.BOLD : 0;
28335
- _v$56 !== _p$.e && (_p$.e = _$setProp2(_el$85, "backgroundColor", _v$56, _p$.e));
28336
- _v$57 !== _p$.t && (_p$.t = _$setProp2(_el$86, "fg", _v$57, _p$.t));
28337
- _v$58 !== _p$.a && (_p$.a = _$setProp2(_el$86, "attributes", _v$58, _p$.a));
29372
+ var _v$43 = selected() ? theme2.selectionBg : undefined, _v$44 = selected() ? theme2.selectionText : theme2.text, _v$45 = selected() ? TextAttributes2.BOLD : 0;
29373
+ _v$43 !== _p$.e && (_p$.e = _$setProp2(_el$82, "backgroundColor", _v$43, _p$.e));
29374
+ _v$44 !== _p$.t && (_p$.t = _$setProp2(_el$83, "fg", _v$44, _p$.t));
29375
+ _v$45 !== _p$.a && (_p$.a = _$setProp2(_el$83, "attributes", _v$45, _p$.a));
28338
29376
  return _p$;
28339
29377
  }, {
28340
29378
  e: undefined,
28341
29379
  t: undefined,
28342
29380
  a: undefined
28343
29381
  });
28344
- return _el$85;
29382
+ return _el$82;
28345
29383
  })();
28346
29384
  }
28347
- }), _el$82);
28348
- _$setProp2(_el$82, "height", 1);
28349
- _$setProp2(_el$82, "flexShrink", 0);
28350
- _$insertNode2(_el$83, _$createTextNode2(`\u2191\u2193 choose \xB7 Enter confirm \xB7 Esc dismiss`));
28351
- _$setProp2(_el$83, "wrapMode", "none");
28352
- _$setProp2(_el$83, "truncate", true);
29385
+ }), _el$79);
29386
+ _$setProp2(_el$79, "height", 1);
29387
+ _$setProp2(_el$79, "flexShrink", 0);
29388
+ _$insertNode2(_el$80, _$createTextNode2(`\u2191\u2193 choose \xB7 Enter confirm \xB7 Esc dismiss`));
29389
+ _$setProp2(_el$80, "wrapMode", "none");
29390
+ _$setProp2(_el$80, "truncate", true);
28353
29391
  _$effect2((_p$) => {
28354
- var { panel: _v$51, dim: _v$52, planMode: _v$53 } = theme2, _v$54 = TextAttributes2.BOLD, _v$55 = theme2.dim;
28355
- _v$51 !== _p$.e && (_p$.e = _$setProp2(_el$78, "backgroundColor", _v$51, _p$.e));
28356
- _v$52 !== _p$.t && (_p$.t = _$setProp2(_el$78, "borderColor", _v$52, _p$.t));
28357
- _v$53 !== _p$.a && (_p$.a = _$setProp2(_el$79, "fg", _v$53, _p$.a));
28358
- _v$54 !== _p$.o && (_p$.o = _$setProp2(_el$79, "attributes", _v$54, _p$.o));
28359
- _v$55 !== _p$.i && (_p$.i = _$setProp2(_el$83, "fg", _v$55, _p$.i));
29392
+ var { panel: _v$38, dim: _v$39, planMode: _v$40 } = theme2, _v$41 = TextAttributes2.BOLD, _v$42 = theme2.dim;
29393
+ _v$38 !== _p$.e && (_p$.e = _$setProp2(_el$75, "backgroundColor", _v$38, _p$.e));
29394
+ _v$39 !== _p$.t && (_p$.t = _$setProp2(_el$75, "borderColor", _v$39, _p$.t));
29395
+ _v$40 !== _p$.a && (_p$.a = _$setProp2(_el$76, "fg", _v$40, _p$.a));
29396
+ _v$41 !== _p$.o && (_p$.o = _$setProp2(_el$76, "attributes", _v$41, _p$.o));
29397
+ _v$42 !== _p$.i && (_p$.i = _$setProp2(_el$80, "fg", _v$42, _p$.i));
28360
29398
  return _p$;
28361
29399
  }, {
28362
29400
  e: undefined,
@@ -28365,17 +29403,17 @@ function PlanChoiceBlock(props) {
28365
29403
  o: undefined,
28366
29404
  i: undefined
28367
29405
  });
28368
- return _el$78;
29406
+ return _el$75;
28369
29407
  })();
28370
29408
  }
28371
29409
  function StatusBar(props) {
28372
29410
  return (() => {
28373
- var _el$87 = _$createElement2("box"), _el$88 = _$createElement2("text");
28374
- _$insertNode2(_el$87, _el$88);
28375
- _$setProp2(_el$87, "paddingX", 1);
28376
- _$setProp2(_el$87, "flexShrink", 0);
28377
- _$setProp2(_el$88, "wrapMode", "word");
28378
- _$insert2(_el$88, _$createComponent2(For2, {
29411
+ var _el$84 = _$createElement2("box"), _el$85 = _$createElement2("text");
29412
+ _$insertNode2(_el$84, _el$85);
29413
+ _$setProp2(_el$84, "paddingX", 1);
29414
+ _$setProp2(_el$84, "flexShrink", 0);
29415
+ _$setProp2(_el$85, "wrapMode", "word");
29416
+ _$insert2(_el$85, _$createComponent2(For2, {
28379
29417
  get each() {
28380
29418
  return statusBarPieces(props.view);
28381
29419
  },
@@ -28388,8 +29426,8 @@ function StatusBar(props) {
28388
29426
  }
28389
29427
  })
28390
29428
  }));
28391
- _$effect2((_$p) => _$setProp2(_el$88, "fg", theme2.muted, _$p));
28392
- return _el$87;
29429
+ _$effect2((_$p) => _$setProp2(_el$85, "fg", theme2.muted, _$p));
29430
+ return _el$84;
28393
29431
  })();
28394
29432
  }
28395
29433
  function PendingMessages(props) {
@@ -28399,12 +29437,12 @@ function PendingMessages(props) {
28399
29437
  return rows().length > 0;
28400
29438
  },
28401
29439
  get children() {
28402
- var _el$89 = _$createElement2("box");
28403
- _$setProp2(_el$89, "width", "100%");
28404
- _$setProp2(_el$89, "paddingX", 1);
28405
- _$setProp2(_el$89, "flexDirection", "column");
28406
- _$setProp2(_el$89, "flexShrink", 0);
28407
- _$insert2(_el$89, _$createComponent2(For2, {
29440
+ var _el$86 = _$createElement2("box");
29441
+ _$setProp2(_el$86, "width", "100%");
29442
+ _$setProp2(_el$86, "paddingX", 1);
29443
+ _$setProp2(_el$86, "flexDirection", "column");
29444
+ _$setProp2(_el$86, "flexShrink", 0);
29445
+ _$insert2(_el$86, _$createComponent2(For2, {
28408
29446
  get each() {
28409
29447
  return rows();
28410
29448
  },
@@ -28412,22 +29450,22 @@ function PendingMessages(props) {
28412
29450
  const actionable = row.kind === "followUp" || row.kind === "steering";
28413
29451
  const [hovered, setHovered] = createSignal2(false);
28414
29452
  return (() => {
28415
- var _el$90 = _$createElement2("box"), _el$91 = _$createElement2("text");
28416
- _$insertNode2(_el$90, _el$91);
28417
- _$setProp2(_el$90, "onMouseOver", () => {
29453
+ var _el$87 = _$createElement2("box"), _el$88 = _$createElement2("text");
29454
+ _$insertNode2(_el$87, _el$88);
29455
+ _$setProp2(_el$87, "onMouseOver", () => {
28418
29456
  if (actionable)
28419
29457
  setHovered(true);
28420
29458
  });
28421
- _$setProp2(_el$90, "onMouseOut", () => setHovered(false));
28422
- _$setProp2(_el$90, "onMouseUp", (event) => {
29459
+ _$setProp2(_el$87, "onMouseOut", () => setHovered(false));
29460
+ _$setProp2(_el$87, "onMouseUp", (event) => {
28423
29461
  if (!actionable || event.button !== 0 || event.isDragging)
28424
29462
  return;
28425
29463
  event.stopPropagation();
28426
29464
  props.app.openFollowUpQueue();
28427
29465
  });
28428
- _$setProp2(_el$91, "wrapMode", "none");
28429
- _$setProp2(_el$91, "truncate", true);
28430
- _$insert2(_el$91, _$createComponent2(Show2, {
29466
+ _$setProp2(_el$88, "wrapMode", "none");
29467
+ _$setProp2(_el$88, "truncate", true);
29468
+ _$insert2(_el$88, _$createComponent2(Show2, {
28431
29469
  get when() {
28432
29470
  return row.label;
28433
29471
  },
@@ -28442,7 +29480,7 @@ function PendingMessages(props) {
28442
29480
  });
28443
29481
  }
28444
29482
  }), null);
28445
- _$insert2(_el$91, _$createComponent2(Span, {
29483
+ _$insert2(_el$88, _$createComponent2(Span, {
28446
29484
  get fg() {
28447
29485
  return theme2.muted;
28448
29486
  },
@@ -28450,7 +29488,7 @@ function PendingMessages(props) {
28450
29488
  return row.text;
28451
29489
  }
28452
29490
  }), null);
28453
- _$insert2(_el$91, _$createComponent2(Show2, {
29491
+ _$insert2(_el$88, _$createComponent2(Show2, {
28454
29492
  when: actionable,
28455
29493
  get children() {
28456
29494
  return _$createComponent2(Span, {
@@ -28462,19 +29500,19 @@ function PendingMessages(props) {
28462
29500
  }
28463
29501
  }), null);
28464
29502
  _$effect2((_p$) => {
28465
- var _v$59 = hovered() && actionable ? theme2.selectionBg : undefined, _v$60 = hovered() && actionable ? theme2.selectionText : theme2.muted;
28466
- _v$59 !== _p$.e && (_p$.e = _$setProp2(_el$90, "backgroundColor", _v$59, _p$.e));
28467
- _v$60 !== _p$.t && (_p$.t = _$setProp2(_el$91, "fg", _v$60, _p$.t));
29503
+ var _v$46 = hovered() && actionable ? theme2.selectionBg : undefined, _v$47 = hovered() && actionable ? theme2.selectionText : theme2.muted;
29504
+ _v$46 !== _p$.e && (_p$.e = _$setProp2(_el$87, "backgroundColor", _v$46, _p$.e));
29505
+ _v$47 !== _p$.t && (_p$.t = _$setProp2(_el$88, "fg", _v$47, _p$.t));
28468
29506
  return _p$;
28469
29507
  }, {
28470
29508
  e: undefined,
28471
29509
  t: undefined
28472
29510
  });
28473
- return _el$90;
29511
+ return _el$87;
28474
29512
  })();
28475
29513
  }
28476
29514
  }));
28477
- return _el$89;
29515
+ return _el$86;
28478
29516
  }
28479
29517
  });
28480
29518
  }
@@ -28491,22 +29529,22 @@ function WorkingLine(props) {
28491
29529
  },
28492
29530
  get fallback() {
28493
29531
  return (() => {
28494
- var _el$94 = _$createElement2("box");
28495
- _$setProp2(_el$94, "height", 0);
28496
- _$setProp2(_el$94, "flexShrink", 0);
28497
- return _el$94;
29532
+ var _el$91 = _$createElement2("box");
29533
+ _$setProp2(_el$91, "height", 0);
29534
+ _$setProp2(_el$91, "flexShrink", 0);
29535
+ return _el$91;
28498
29536
  })();
28499
29537
  },
28500
29538
  get children() {
28501
- var _el$92 = _$createElement2("box"), _el$93 = _$createElement2("text");
28502
- _$insertNode2(_el$92, _el$93);
28503
- _$setProp2(_el$92, "width", "100%");
28504
- _$setProp2(_el$92, "paddingX", 1);
28505
- _$setProp2(_el$92, "marginTop", 1);
28506
- _$setProp2(_el$92, "flexShrink", 0);
28507
- _$setProp2(_el$93, "wrapMode", "none");
28508
- _$setProp2(_el$93, "truncate", true);
28509
- _$insert2(_el$93, _$createComponent2(Span, {
29539
+ var _el$89 = _$createElement2("box"), _el$90 = _$createElement2("text");
29540
+ _$insertNode2(_el$89, _el$90);
29541
+ _$setProp2(_el$89, "width", "100%");
29542
+ _$setProp2(_el$89, "paddingX", 1);
29543
+ _$setProp2(_el$89, "marginTop", 1);
29544
+ _$setProp2(_el$89, "flexShrink", 0);
29545
+ _$setProp2(_el$90, "wrapMode", "none");
29546
+ _$setProp2(_el$90, "truncate", true);
29547
+ _$insert2(_el$90, _$createComponent2(Span, {
28510
29548
  get fg() {
28511
29549
  return statusColor();
28512
29550
  },
@@ -28514,7 +29552,7 @@ function WorkingLine(props) {
28514
29552
  return parts().prefix;
28515
29553
  }
28516
29554
  }), null);
28517
- _$insert2(_el$93, _$createComponent2(For2, {
29555
+ _$insert2(_el$90, _$createComponent2(For2, {
28518
29556
  get each() {
28519
29557
  return Array.from(parts().label);
28520
29558
  },
@@ -28525,7 +29563,7 @@ function WorkingLine(props) {
28525
29563
  children: character
28526
29564
  })
28527
29565
  }), null);
28528
- _$insert2(_el$93, _$createComponent2(Span, {
29566
+ _$insert2(_el$90, _$createComponent2(Span, {
28529
29567
  get fg() {
28530
29568
  return statusColor();
28531
29569
  },
@@ -28533,8 +29571,8 @@ function WorkingLine(props) {
28533
29571
  return parts().suffix;
28534
29572
  }
28535
29573
  }), null);
28536
- _$effect2((_$p) => _$setProp2(_el$93, "fg", statusColor(), _$p));
28537
- return _el$92;
29574
+ _$effect2((_$p) => _$setProp2(_el$90, "fg", statusColor(), _$p));
29575
+ return _el$89;
28538
29576
  }
28539
29577
  });
28540
29578
  }
@@ -28580,20 +29618,20 @@ function subagentToneColor(t, tone) {
28580
29618
  function SubagentRoster(props) {
28581
29619
  const t = theme2;
28582
29620
  return (() => {
28583
- var _el$95 = _$createElement2("box");
28584
- _$setProp2(_el$95, "flexDirection", "column");
28585
- _$setProp2(_el$95, "marginTop", 1);
28586
- _$setProp2(_el$95, "paddingX", 1);
28587
- _$setProp2(_el$95, "flexShrink", 0);
28588
- _$insert2(_el$95, _$createComponent2(For2, {
29621
+ var _el$92 = _$createElement2("box");
29622
+ _$setProp2(_el$92, "flexDirection", "column");
29623
+ _$setProp2(_el$92, "marginTop", 1);
29624
+ _$setProp2(_el$92, "paddingX", 1);
29625
+ _$setProp2(_el$92, "flexShrink", 0);
29626
+ _$insert2(_el$92, _$createComponent2(For2, {
28589
29627
  get each() {
28590
29628
  return props.roster.rows;
28591
29629
  },
28592
29630
  children: (row) => (() => {
28593
- var _el$97 = _$createElement2("text");
28594
- _$setProp2(_el$97, "wrapMode", "none");
28595
- _$setProp2(_el$97, "truncate", true);
28596
- _$insert2(_el$97, _$createComponent2(Span, {
29631
+ var _el$94 = _$createElement2("text");
29632
+ _$setProp2(_el$94, "wrapMode", "none");
29633
+ _$setProp2(_el$94, "truncate", true);
29634
+ _$insert2(_el$94, _$createComponent2(Span, {
28597
29635
  get fg() {
28598
29636
  return _$memo2(() => !!(row.tone === "warning" && row.color))() ? profileColor(t, row.color) : subagentToneColor(t, row.tone);
28599
29637
  },
@@ -28601,7 +29639,7 @@ function SubagentRoster(props) {
28601
29639
  return row.mark;
28602
29640
  }
28603
29641
  }), null);
28604
- _$insert2(_el$97, _$createComponent2(Span, {
29642
+ _$insert2(_el$94, _$createComponent2(Span, {
28605
29643
  get fg() {
28606
29644
  return _$memo2(() => !!row.color)() ? profileColor(t, row.color) : t.muted;
28607
29645
  },
@@ -28612,7 +29650,7 @@ function SubagentRoster(props) {
28612
29650
  return ` ${row.profile}`;
28613
29651
  }
28614
29652
  }), null);
28615
- _$insert2(_el$97, _$createComponent2(Span, {
29653
+ _$insert2(_el$94, _$createComponent2(Span, {
28616
29654
  get fg() {
28617
29655
  return t.text;
28618
29656
  },
@@ -28620,7 +29658,7 @@ function SubagentRoster(props) {
28620
29658
  return ` ${row.title}`;
28621
29659
  }
28622
29660
  }), null);
28623
- _$insert2(_el$97, _$createComponent2(Show2, {
29661
+ _$insert2(_el$94, _$createComponent2(Show2, {
28624
29662
  get when() {
28625
29663
  return row.tasks;
28626
29664
  },
@@ -28635,23 +29673,23 @@ function SubagentRoster(props) {
28635
29673
  });
28636
29674
  }
28637
29675
  }), null);
28638
- return _el$97;
29676
+ return _el$94;
28639
29677
  })()
28640
29678
  }), null);
28641
- _$insert2(_el$95, _$createComponent2(Show2, {
29679
+ _$insert2(_el$92, _$createComponent2(Show2, {
28642
29680
  get when() {
28643
29681
  return props.roster.overflow;
28644
29682
  },
28645
29683
  get children() {
28646
- var _el$96 = _$createElement2("text");
28647
- _$setProp2(_el$96, "wrapMode", "none");
28648
- _$setProp2(_el$96, "truncate", true);
28649
- _$insert2(_el$96, () => props.roster.overflow);
28650
- _$effect2((_$p) => _$setProp2(_el$96, "fg", t.muted, _$p));
28651
- return _el$96;
29684
+ var _el$93 = _$createElement2("text");
29685
+ _$setProp2(_el$93, "wrapMode", "none");
29686
+ _$setProp2(_el$93, "truncate", true);
29687
+ _$insert2(_el$93, () => props.roster.overflow);
29688
+ _$effect2((_$p) => _$setProp2(_el$93, "fg", t.muted, _$p));
29689
+ return _el$93;
28652
29690
  }
28653
29691
  }), null);
28654
- return _el$95;
29692
+ return _el$92;
28655
29693
  })();
28656
29694
  }
28657
29695
  function Prompt(props) {
@@ -28717,98 +29755,98 @@ function Prompt(props) {
28717
29755
  overlay: Boolean(view().overlay)
28718
29756
  });
28719
29757
  return (() => {
28720
- var _el$98 = _$createElement2("box");
28721
- _$setProp2(_el$98, "flexDirection", "column");
28722
- _$setProp2(_el$98, "flexShrink", 0);
28723
- _$insert2(_el$98, _$createComponent2(Show2, {
29758
+ var _el$95 = _$createElement2("box");
29759
+ _$setProp2(_el$95, "flexDirection", "column");
29760
+ _$setProp2(_el$95, "flexShrink", 0);
29761
+ _$insert2(_el$95, _$createComponent2(Show2, {
28724
29762
  get when() {
28725
29763
  return view().customEditor;
28726
29764
  },
28727
29765
  get fallback() {
28728
29766
  return (() => {
28729
- var _el$99 = _$createElement2("box"), _el$100 = _$createElement2("box"), _el$101 = _$createElement2("box"), _el$105 = _$createElement2("box"), _el$106 = _$createElement2("box"), _el$107 = _$createElement2("textarea");
28730
- _$insertNode2(_el$99, _el$100);
28731
- _$insertNode2(_el$99, _el$105);
28732
- _$setProp2(_el$99, "flexDirection", "column");
28733
- _$setProp2(_el$99, "border", ["bottom"]);
28734
- _$setProp2(_el$99, "borderStyle", "single");
28735
- _$setProp2(_el$99, "backgroundColor", "transparent");
28736
- _$setProp2(_el$99, "flexShrink", 0);
28737
- _$insertNode2(_el$100, _el$101);
28738
- _$setProp2(_el$100, "flexDirection", "row");
28739
- _$setProp2(_el$100, "width", "100%");
28740
- _$setProp2(_el$100, "height", 1);
28741
- _$setProp2(_el$100, "flexShrink", 0);
28742
- _$setProp2(_el$101, "flexGrow", 1);
28743
- _$setProp2(_el$101, "minWidth", 0);
28744
- _$setProp2(_el$101, "height", 1);
28745
- _$setProp2(_el$101, "border", ["top"]);
28746
- _$setProp2(_el$101, "borderStyle", "single");
28747
- _$setProp2(_el$101, "backgroundColor", "transparent");
28748
- _$insert2(_el$100, _$createComponent2(Show2, {
29767
+ var _el$96 = _$createElement2("box"), _el$97 = _$createElement2("box"), _el$98 = _$createElement2("box"), _el$102 = _$createElement2("box"), _el$103 = _$createElement2("box"), _el$104 = _$createElement2("textarea");
29768
+ _$insertNode2(_el$96, _el$97);
29769
+ _$insertNode2(_el$96, _el$102);
29770
+ _$setProp2(_el$96, "flexDirection", "column");
29771
+ _$setProp2(_el$96, "border", ["bottom"]);
29772
+ _$setProp2(_el$96, "borderStyle", "single");
29773
+ _$setProp2(_el$96, "backgroundColor", "transparent");
29774
+ _$setProp2(_el$96, "flexShrink", 0);
29775
+ _$insertNode2(_el$97, _el$98);
29776
+ _$setProp2(_el$97, "flexDirection", "row");
29777
+ _$setProp2(_el$97, "width", "100%");
29778
+ _$setProp2(_el$97, "height", 1);
29779
+ _$setProp2(_el$97, "flexShrink", 0);
29780
+ _$setProp2(_el$98, "flexGrow", 1);
29781
+ _$setProp2(_el$98, "minWidth", 0);
29782
+ _$setProp2(_el$98, "height", 1);
29783
+ _$setProp2(_el$98, "border", ["top"]);
29784
+ _$setProp2(_el$98, "borderStyle", "single");
29785
+ _$setProp2(_el$98, "backgroundColor", "transparent");
29786
+ _$insert2(_el$97, _$createComponent2(Show2, {
28749
29787
  get when() {
28750
29788
  return plan();
28751
29789
  },
28752
29790
  get children() {
28753
29791
  return [(() => {
28754
- var _el$102 = _$createElement2("text");
28755
- _$insertNode2(_el$102, _$createTextNode2(` plan mode `));
28756
- _$setProp2(_el$102, "wrapMode", "none");
29792
+ var _el$99 = _$createElement2("text");
29793
+ _$insertNode2(_el$99, _$createTextNode2(` plan mode `));
29794
+ _$setProp2(_el$99, "wrapMode", "none");
28757
29795
  _$effect2((_p$) => {
28758
- var _v$61 = composerColor(), _v$62 = TextAttributes2.BOLD;
28759
- _v$61 !== _p$.e && (_p$.e = _$setProp2(_el$102, "fg", _v$61, _p$.e));
28760
- _v$62 !== _p$.t && (_p$.t = _$setProp2(_el$102, "attributes", _v$62, _p$.t));
29796
+ var _v$48 = composerColor(), _v$49 = TextAttributes2.BOLD;
29797
+ _v$48 !== _p$.e && (_p$.e = _$setProp2(_el$99, "fg", _v$48, _p$.e));
29798
+ _v$49 !== _p$.t && (_p$.t = _$setProp2(_el$99, "attributes", _v$49, _p$.t));
28761
29799
  return _p$;
28762
29800
  }, {
28763
29801
  e: undefined,
28764
29802
  t: undefined
28765
29803
  });
28766
- return _el$102;
29804
+ return _el$99;
28767
29805
  })(), (() => {
28768
- var _el$104 = _$createElement2("box");
28769
- _$setProp2(_el$104, "width", 1);
28770
- _$setProp2(_el$104, "minWidth", 1);
28771
- _$setProp2(_el$104, "height", 1);
28772
- _$setProp2(_el$104, "border", ["top"]);
28773
- _$setProp2(_el$104, "borderStyle", "single");
28774
- _$setProp2(_el$104, "backgroundColor", "transparent");
28775
- _$effect2((_$p) => _$setProp2(_el$104, "borderColor", composerColor(), _$p));
28776
- return _el$104;
29806
+ var _el$101 = _$createElement2("box");
29807
+ _$setProp2(_el$101, "width", 1);
29808
+ _$setProp2(_el$101, "minWidth", 1);
29809
+ _$setProp2(_el$101, "height", 1);
29810
+ _$setProp2(_el$101, "border", ["top"]);
29811
+ _$setProp2(_el$101, "borderStyle", "single");
29812
+ _$setProp2(_el$101, "backgroundColor", "transparent");
29813
+ _$effect2((_$p) => _$setProp2(_el$101, "borderColor", composerColor(), _$p));
29814
+ return _el$101;
28777
29815
  })()];
28778
29816
  }
28779
29817
  }), null);
28780
- _$insertNode2(_el$105, _el$106);
28781
- _$insertNode2(_el$105, _el$107);
28782
- _$setProp2(_el$105, "flexDirection", "row");
28783
- _$setProp2(_el$105, "paddingX", 1);
28784
- _$setProp2(_el$105, "alignItems", "stretch");
28785
- _$setProp2(_el$106, "width", 2);
28786
- _$setProp2(_el$106, "minWidth", 2);
28787
- _$setProp2(_el$106, "flexDirection", "column");
28788
- _$setProp2(_el$106, "flexShrink", 0);
28789
- _$insert2(_el$106, _$createComponent2(For2, {
29818
+ _$insertNode2(_el$102, _el$103);
29819
+ _$insertNode2(_el$102, _el$104);
29820
+ _$setProp2(_el$102, "flexDirection", "row");
29821
+ _$setProp2(_el$102, "paddingX", 1);
29822
+ _$setProp2(_el$102, "alignItems", "stretch");
29823
+ _$setProp2(_el$103, "width", 2);
29824
+ _$setProp2(_el$103, "minWidth", 2);
29825
+ _$setProp2(_el$103, "flexDirection", "column");
29826
+ _$setProp2(_el$103, "flexShrink", 0);
29827
+ _$insert2(_el$103, _$createComponent2(For2, {
28790
29828
  get each() {
28791
29829
  return Array.from({
28792
29830
  length: inputHeight()
28793
29831
  }, (_, index) => index);
28794
29832
  },
28795
29833
  children: (_, index) => (() => {
28796
- var _el$108 = _$createElement2("text");
28797
- _$setProp2(_el$108, "wrapMode", "none");
28798
- _$insert2(_el$108, (() => {
29834
+ var _el$105 = _$createElement2("text");
29835
+ _$setProp2(_el$105, "wrapMode", "none");
29836
+ _$insert2(_el$105, (() => {
28799
29837
  var _c$2 = _$memo2(() => index() === 0);
28800
29838
  return () => _c$2() ? bash() ? "! " : "\u276F " : " ";
28801
29839
  })());
28802
29840
  _$effect2((_p$) => {
28803
- var _v$72 = composerColor(), _v$73 = TextAttributes2.BOLD;
28804
- _v$72 !== _p$.e && (_p$.e = _$setProp2(_el$108, "fg", _v$72, _p$.e));
28805
- _v$73 !== _p$.t && (_p$.t = _$setProp2(_el$108, "attributes", _v$73, _p$.t));
29841
+ var _v$59 = composerColor(), _v$60 = TextAttributes2.BOLD;
29842
+ _v$59 !== _p$.e && (_p$.e = _$setProp2(_el$105, "fg", _v$59, _p$.e));
29843
+ _v$60 !== _p$.t && (_p$.t = _$setProp2(_el$105, "attributes", _v$60, _p$.t));
28806
29844
  return _p$;
28807
29845
  }, {
28808
29846
  e: undefined,
28809
29847
  t: undefined
28810
29848
  });
28811
- return _el$108;
29849
+ return _el$105;
28812
29850
  })()
28813
29851
  }));
28814
29852
  _$use2((value) => {
@@ -28816,38 +29854,38 @@ function Prompt(props) {
28816
29854
  if (value)
28817
29855
  value.syntaxStyle = props.syntax;
28818
29856
  props.promptRef(value);
28819
- }, _el$107);
28820
- _$setProp2(_el$107, "flexGrow", 1);
28821
- _$setProp2(_el$107, "minHeight", 1);
28822
- _$setProp2(_el$107, "maxHeight", 8);
28823
- _$setProp2(_el$107, "wrapMode", "word");
28824
- _$setProp2(_el$107, "backgroundColor", "transparent");
28825
- _$setProp2(_el$107, "focusedBackgroundColor", "transparent");
28826
- _$setProp2(_el$107, "keyBindings", promptKeyBindings);
28827
- _$setProp2(_el$107, "onPaste", (event) => {
29857
+ }, _el$104);
29858
+ _$setProp2(_el$104, "flexGrow", 1);
29859
+ _$setProp2(_el$104, "minHeight", 1);
29860
+ _$setProp2(_el$104, "maxHeight", 8);
29861
+ _$setProp2(_el$104, "wrapMode", "word");
29862
+ _$setProp2(_el$104, "backgroundColor", "transparent");
29863
+ _$setProp2(_el$104, "focusedBackgroundColor", "transparent");
29864
+ _$setProp2(_el$104, "keyBindings", promptKeyBindings);
29865
+ _$setProp2(_el$104, "onPaste", (event) => {
28828
29866
  event.preventDefault();
28829
29867
  props.app.paste(pastedText(event.bytes));
28830
29868
  });
28831
- _$setProp2(_el$107, "onSubmit", () => {
29869
+ _$setProp2(_el$104, "onSubmit", () => {
28832
29870
  reportDraft();
28833
29871
  props.app.submitPrompt();
28834
29872
  });
28835
- _$setProp2(_el$107, "onContentChange", () => {
29873
+ _$setProp2(_el$104, "onContentChange", () => {
28836
29874
  measure();
28837
29875
  reportDraft();
28838
29876
  });
28839
- _$setProp2(_el$107, "onSizeChange", () => measure());
29877
+ _$setProp2(_el$104, "onSizeChange", () => measure());
28840
29878
  _$effect2((_p$) => {
28841
- var _v$63 = composerColor(), _v$64 = composerColor(), _v$65 = inputHeight(), _v$66 = inputHeight(), { text: _v$67, text: _v$68 } = theme2, _v$69 = bash() ? "Run a shell command\u2026" : view().questionDock ? "Or reply directly to this question\u2026" : plan() ? "Describe a plan\u2026" : view().home ? "Ask anything\u2026" : "Reply\u2026", _v$70 = theme2.dim, _v$71 = composerFocused();
28842
- _v$63 !== _p$.e && (_p$.e = _$setProp2(_el$99, "borderColor", _v$63, _p$.e));
28843
- _v$64 !== _p$.t && (_p$.t = _$setProp2(_el$101, "borderColor", _v$64, _p$.t));
28844
- _v$65 !== _p$.a && (_p$.a = _$setProp2(_el$106, "height", _v$65, _p$.a));
28845
- _v$66 !== _p$.o && (_p$.o = _$setProp2(_el$107, "height", _v$66, _p$.o));
28846
- _v$67 !== _p$.i && (_p$.i = _$setProp2(_el$107, "textColor", _v$67, _p$.i));
28847
- _v$68 !== _p$.n && (_p$.n = _$setProp2(_el$107, "focusedTextColor", _v$68, _p$.n));
28848
- _v$69 !== _p$.s && (_p$.s = _$setProp2(_el$107, "placeholder", _v$69, _p$.s));
28849
- _v$70 !== _p$.h && (_p$.h = _$setProp2(_el$107, "placeholderColor", _v$70, _p$.h));
28850
- _v$71 !== _p$.r && (_p$.r = _$setProp2(_el$107, "focused", _v$71, _p$.r));
29879
+ var _v$50 = composerColor(), _v$51 = composerColor(), _v$52 = inputHeight(), _v$53 = inputHeight(), { text: _v$54, text: _v$55 } = theme2, _v$56 = bash() ? "Run a shell command\u2026" : view().questionDock ? "Or reply directly to this question\u2026" : plan() ? "Describe a plan\u2026" : view().home ? "Ask anything\u2026" : "Reply\u2026", _v$57 = theme2.dim, _v$58 = composerFocused();
29880
+ _v$50 !== _p$.e && (_p$.e = _$setProp2(_el$96, "borderColor", _v$50, _p$.e));
29881
+ _v$51 !== _p$.t && (_p$.t = _$setProp2(_el$98, "borderColor", _v$51, _p$.t));
29882
+ _v$52 !== _p$.a && (_p$.a = _$setProp2(_el$103, "height", _v$52, _p$.a));
29883
+ _v$53 !== _p$.o && (_p$.o = _$setProp2(_el$104, "height", _v$53, _p$.o));
29884
+ _v$54 !== _p$.i && (_p$.i = _$setProp2(_el$104, "textColor", _v$54, _p$.i));
29885
+ _v$55 !== _p$.n && (_p$.n = _$setProp2(_el$104, "focusedTextColor", _v$55, _p$.n));
29886
+ _v$56 !== _p$.s && (_p$.s = _$setProp2(_el$104, "placeholder", _v$56, _p$.s));
29887
+ _v$57 !== _p$.h && (_p$.h = _$setProp2(_el$104, "placeholderColor", _v$57, _p$.h));
29888
+ _v$58 !== _p$.r && (_p$.r = _$setProp2(_el$104, "focused", _v$58, _p$.r));
28851
29889
  return _p$;
28852
29890
  }, {
28853
29891
  e: undefined,
@@ -28860,14 +29898,14 @@ function Prompt(props) {
28860
29898
  h: undefined,
28861
29899
  r: undefined
28862
29900
  });
28863
- return _el$99;
29901
+ return _el$96;
28864
29902
  })();
28865
29903
  },
28866
29904
  children: (lines) => (() => {
28867
- var _el$109 = _$createElement2("box");
28868
- _$setProp2(_el$109, "flexDirection", "column");
28869
- _$setProp2(_el$109, "flexShrink", 0);
28870
- _$insert2(_el$109, _$createComponent2(AnsiView, {
29905
+ var _el$106 = _$createElement2("box");
29906
+ _$setProp2(_el$106, "flexDirection", "column");
29907
+ _$setProp2(_el$106, "flexShrink", 0);
29908
+ _$insert2(_el$106, _$createComponent2(AnsiView, {
28871
29909
  get lines() {
28872
29910
  return lines();
28873
29911
  },
@@ -28875,15 +29913,15 @@ function Prompt(props) {
28875
29913
  return theme2.text;
28876
29914
  }
28877
29915
  }));
28878
- return _el$109;
29916
+ return _el$106;
28879
29917
  })()
28880
29918
  }), null);
28881
- _$insert2(_el$98, _$createComponent2(StatusBar, {
29919
+ _$insert2(_el$95, _$createComponent2(StatusBar, {
28882
29920
  get view() {
28883
29921
  return view();
28884
29922
  }
28885
29923
  }), null);
28886
- return _el$98;
29924
+ return _el$95;
28887
29925
  })();
28888
29926
  }
28889
29927
  function cut2(text, limit) {
@@ -28901,10 +29939,10 @@ function Footer(props) {
28901
29939
  },
28902
29940
  get fallback() {
28903
29941
  return (() => {
28904
- var _el$110 = _$createElement2("box");
28905
- _$setProp2(_el$110, "height", 0);
28906
- _$setProp2(_el$110, "flexShrink", 0);
28907
- return _el$110;
29942
+ var _el$107 = _$createElement2("box");
29943
+ _$setProp2(_el$107, "height", 0);
29944
+ _$setProp2(_el$107, "flexShrink", 0);
29945
+ return _el$107;
28908
29946
  })();
28909
29947
  },
28910
29948
  get children() {
@@ -28914,37 +29952,37 @@ function Footer(props) {
28914
29952
  },
28915
29953
  get fallback() {
28916
29954
  return (() => {
28917
- var _el$111 = _$createElement2("box"), _el$112 = _$createElement2("text");
28918
- _$insertNode2(_el$111, _el$112);
28919
- _$setProp2(_el$111, "flexDirection", "row");
28920
- _$setProp2(_el$111, "justifyContent", "flex-end");
28921
- _$setProp2(_el$111, "flexShrink", 0);
28922
- _$setProp2(_el$111, "paddingX", 1);
28923
- _$setProp2(_el$111, "height", 1);
28924
- _$setProp2(_el$112, "wrapMode", "none");
28925
- _$insert2(_el$112, right);
28926
- _$effect2((_$p) => _$setProp2(_el$112, "fg", theme2.dim, _$p));
28927
- return _el$111;
29955
+ var _el$108 = _$createElement2("box"), _el$109 = _$createElement2("text");
29956
+ _$insertNode2(_el$108, _el$109);
29957
+ _$setProp2(_el$108, "flexDirection", "row");
29958
+ _$setProp2(_el$108, "justifyContent", "flex-end");
29959
+ _$setProp2(_el$108, "flexShrink", 0);
29960
+ _$setProp2(_el$108, "paddingX", 1);
29961
+ _$setProp2(_el$108, "height", 1);
29962
+ _$setProp2(_el$109, "wrapMode", "none");
29963
+ _$insert2(_el$109, right);
29964
+ _$effect2((_$p) => _$setProp2(_el$109, "fg", theme2.dim, _$p));
29965
+ return _el$108;
28928
29966
  })();
28929
29967
  },
28930
29968
  children: (lines) => (() => {
28931
- var _el$113 = _$createElement2("box"), _el$114 = _$createElement2("text");
28932
- _$insertNode2(_el$113, _el$114);
28933
- _$setProp2(_el$113, "flexDirection", "column");
28934
- _$setProp2(_el$113, "flexShrink", 0);
28935
- _$setProp2(_el$113, "paddingX", 1);
28936
- _$insert2(_el$113, _$createComponent2(AnsiView, {
29969
+ var _el$110 = _$createElement2("box"), _el$111 = _$createElement2("text");
29970
+ _$insertNode2(_el$110, _el$111);
29971
+ _$setProp2(_el$110, "flexDirection", "column");
29972
+ _$setProp2(_el$110, "flexShrink", 0);
29973
+ _$setProp2(_el$110, "paddingX", 1);
29974
+ _$insert2(_el$110, _$createComponent2(AnsiView, {
28937
29975
  get lines() {
28938
29976
  return lines();
28939
29977
  },
28940
29978
  get fg() {
28941
29979
  return theme2.muted;
28942
29980
  }
28943
- }), _el$114);
28944
- _$setProp2(_el$114, "wrapMode", "none");
28945
- _$insert2(_el$114, right);
28946
- _$effect2((_$p) => _$setProp2(_el$114, "fg", theme2.dim, _$p));
28947
- return _el$113;
29981
+ }), _el$111);
29982
+ _$setProp2(_el$111, "wrapMode", "none");
29983
+ _$insert2(_el$111, right);
29984
+ _$effect2((_$p) => _$setProp2(_el$111, "fg", theme2.dim, _$p));
29985
+ return _el$110;
28948
29986
  })()
28949
29987
  });
28950
29988
  }
@@ -28953,35 +29991,35 @@ function Footer(props) {
28953
29991
  function JumpToLatestBadge(props) {
28954
29992
  const [hovered, setHovered] = createSignal2(false);
28955
29993
  return (() => {
28956
- var _el$115 = _$createElement2("box"), _el$116 = _$createElement2("text");
28957
- _$insertNode2(_el$115, _el$116);
28958
- _$setProp2(_el$115, "position", "absolute");
28959
- _$setProp2(_el$115, "right", 1);
28960
- _$setProp2(_el$115, "bottom", 1);
28961
- _$setProp2(_el$115, "zIndex", 2);
28962
- _$setProp2(_el$115, "paddingX", 1);
28963
- _$setProp2(_el$115, "onMouseOver", () => setHovered(true));
28964
- _$setProp2(_el$115, "onMouseOut", () => setHovered(false));
28965
- _$setProp2(_el$115, "onMouseDown", (event) => {
29994
+ var _el$112 = _$createElement2("box"), _el$113 = _$createElement2("text");
29995
+ _$insertNode2(_el$112, _el$113);
29996
+ _$setProp2(_el$112, "position", "absolute");
29997
+ _$setProp2(_el$112, "right", 1);
29998
+ _$setProp2(_el$112, "bottom", 1);
29999
+ _$setProp2(_el$112, "zIndex", 2);
30000
+ _$setProp2(_el$112, "paddingX", 1);
30001
+ _$setProp2(_el$112, "onMouseOver", () => setHovered(true));
30002
+ _$setProp2(_el$112, "onMouseOut", () => setHovered(false));
30003
+ _$setProp2(_el$112, "onMouseDown", (event) => {
28966
30004
  if (event.button !== 0 || event.isDragging)
28967
30005
  return;
28968
30006
  event.stopPropagation();
28969
30007
  props.activate();
28970
30008
  });
28971
- _$insertNode2(_el$116, _$createTextNode2(`\u2193 Jump to latest`));
28972
- _$setProp2(_el$116, "wrapMode", "none");
30009
+ _$insertNode2(_el$113, _$createTextNode2(`\u2193 Jump to latest`));
30010
+ _$setProp2(_el$113, "wrapMode", "none");
28973
30011
  _$effect2((_p$) => {
28974
- var _v$74 = hovered() ? theme2.selectionBg : theme2.panel, _v$75 = hovered() ? theme2.selectionText : theme2.accent, _v$76 = TextAttributes2.BOLD;
28975
- _v$74 !== _p$.e && (_p$.e = _$setProp2(_el$115, "backgroundColor", _v$74, _p$.e));
28976
- _v$75 !== _p$.t && (_p$.t = _$setProp2(_el$116, "fg", _v$75, _p$.t));
28977
- _v$76 !== _p$.a && (_p$.a = _$setProp2(_el$116, "attributes", _v$76, _p$.a));
30012
+ var _v$61 = hovered() ? theme2.selectionBg : theme2.panel, _v$62 = hovered() ? theme2.selectionText : theme2.accent, _v$63 = TextAttributes2.BOLD;
30013
+ _v$61 !== _p$.e && (_p$.e = _$setProp2(_el$112, "backgroundColor", _v$61, _p$.e));
30014
+ _v$62 !== _p$.t && (_p$.t = _$setProp2(_el$113, "fg", _v$62, _p$.t));
30015
+ _v$63 !== _p$.a && (_p$.a = _$setProp2(_el$113, "attributes", _v$63, _p$.a));
28978
30016
  return _p$;
28979
30017
  }, {
28980
30018
  e: undefined,
28981
30019
  t: undefined,
28982
30020
  a: undefined
28983
30021
  });
28984
- return _el$115;
30022
+ return _el$112;
28985
30023
  })();
28986
30024
  }
28987
30025
  function Toast(props) {
@@ -28991,22 +30029,22 @@ function Toast(props) {
28991
30029
  return layout();
28992
30030
  },
28993
30031
  children: (value) => (() => {
28994
- var _el$118 = _$createElement2("box"), _el$119 = _$createElement2("text");
28995
- _$insertNode2(_el$118, _el$119);
28996
- _$setProp2(_el$118, "position", "absolute");
28997
- _$setProp2(_el$118, "height", 1);
28998
- _$setProp2(_el$118, "zIndex", 200);
28999
- _$setProp2(_el$118, "paddingX", 1);
29000
- _$setProp2(_el$119, "wrapMode", "none");
29001
- _$setProp2(_el$119, "truncate", true);
29002
- _$insert2(_el$119, () => value().message);
30032
+ var _el$115 = _$createElement2("box"), _el$116 = _$createElement2("text");
30033
+ _$insertNode2(_el$115, _el$116);
30034
+ _$setProp2(_el$115, "position", "absolute");
30035
+ _$setProp2(_el$115, "height", 1);
30036
+ _$setProp2(_el$115, "zIndex", 200);
30037
+ _$setProp2(_el$115, "paddingX", 1);
30038
+ _$setProp2(_el$116, "wrapMode", "none");
30039
+ _$setProp2(_el$116, "truncate", true);
30040
+ _$insert2(_el$116, () => value().message);
29003
30041
  _$effect2((_p$) => {
29004
- var _v$77 = value().top, _v$78 = value().right, _v$79 = value().width, { selectionBg: _v$80, selectionText: _v$81 } = theme2;
29005
- _v$77 !== _p$.e && (_p$.e = _$setProp2(_el$118, "top", _v$77, _p$.e));
29006
- _v$78 !== _p$.t && (_p$.t = _$setProp2(_el$118, "right", _v$78, _p$.t));
29007
- _v$79 !== _p$.a && (_p$.a = _$setProp2(_el$118, "width", _v$79, _p$.a));
29008
- _v$80 !== _p$.o && (_p$.o = _$setProp2(_el$118, "backgroundColor", _v$80, _p$.o));
29009
- _v$81 !== _p$.i && (_p$.i = _$setProp2(_el$119, "fg", _v$81, _p$.i));
30042
+ var _v$64 = value().top, _v$65 = value().right, _v$66 = value().width, { selectionBg: _v$67, selectionText: _v$68 } = theme2;
30043
+ _v$64 !== _p$.e && (_p$.e = _$setProp2(_el$115, "top", _v$64, _p$.e));
30044
+ _v$65 !== _p$.t && (_p$.t = _$setProp2(_el$115, "right", _v$65, _p$.t));
30045
+ _v$66 !== _p$.a && (_p$.a = _$setProp2(_el$115, "width", _v$66, _p$.a));
30046
+ _v$67 !== _p$.o && (_p$.o = _$setProp2(_el$115, "backgroundColor", _v$67, _p$.o));
30047
+ _v$68 !== _p$.i && (_p$.i = _$setProp2(_el$116, "fg", _v$68, _p$.i));
29010
30048
  return _p$;
29011
30049
  }, {
29012
30050
  e: undefined,
@@ -29015,110 +30053,110 @@ function Toast(props) {
29015
30053
  o: undefined,
29016
30054
  i: undefined
29017
30055
  });
29018
- return _el$118;
30056
+ return _el$115;
29019
30057
  })()
29020
30058
  });
29021
30059
  }
29022
30060
  function Home(props) {
29023
30061
  return (() => {
29024
- var _el$120 = _$createElement2("box"), _el$121 = _$createElement2("box"), _el$122 = _$createElement2("ascii_font"), _el$124 = _$createElement2("box"), _el$125 = _$createElement2("text"), _el$127 = _$createElement2("text"), _el$129 = _$createElement2("text"), _el$130 = _$createTextNode2(`Ask anything, or `), _el$132 = _$createTextNode2(` for commands`);
29025
- _$insertNode2(_el$120, _el$121);
29026
- _$insertNode2(_el$120, _el$124);
29027
- _$insertNode2(_el$120, _el$125);
29028
- _$insertNode2(_el$120, _el$127);
29029
- _$insertNode2(_el$120, _el$129);
29030
- _$setProp2(_el$120, "flexGrow", 1);
29031
- _$setProp2(_el$120, "flexDirection", "column");
29032
- _$setProp2(_el$120, "alignItems", "center");
29033
- _$setProp2(_el$120, "justifyContent", "center");
29034
- _$setProp2(_el$120, "minHeight", 0);
29035
- _$insertNode2(_el$121, _el$122);
29036
- _$setProp2(_el$121, "height", 7);
29037
- _$setProp2(_el$121, "minHeight", 7);
29038
- _$setProp2(_el$121, "flexShrink", 0);
29039
- _$setProp2(_el$122, "font", "block");
29040
- _$setProp2(_el$122, "backgroundColor", "transparent");
29041
- _$setProp2(_el$122, "selectable", false);
29042
- _$insert2(_el$120, _$createComponent2(Show2, {
30062
+ var _el$117 = _$createElement2("box"), _el$118 = _$createElement2("box"), _el$119 = _$createElement2("ascii_font"), _el$121 = _$createElement2("box"), _el$122 = _$createElement2("text"), _el$124 = _$createElement2("text"), _el$126 = _$createElement2("text"), _el$127 = _$createTextNode2(`Ask anything, or `), _el$129 = _$createTextNode2(` for commands`);
30063
+ _$insertNode2(_el$117, _el$118);
30064
+ _$insertNode2(_el$117, _el$121);
30065
+ _$insertNode2(_el$117, _el$122);
30066
+ _$insertNode2(_el$117, _el$124);
30067
+ _$insertNode2(_el$117, _el$126);
30068
+ _$setProp2(_el$117, "flexGrow", 1);
30069
+ _$setProp2(_el$117, "flexDirection", "column");
30070
+ _$setProp2(_el$117, "alignItems", "center");
30071
+ _$setProp2(_el$117, "justifyContent", "center");
30072
+ _$setProp2(_el$117, "minHeight", 0);
30073
+ _$insertNode2(_el$118, _el$119);
30074
+ _$setProp2(_el$118, "height", 7);
30075
+ _$setProp2(_el$118, "minHeight", 7);
30076
+ _$setProp2(_el$118, "flexShrink", 0);
30077
+ _$setProp2(_el$119, "font", "block");
30078
+ _$setProp2(_el$119, "backgroundColor", "transparent");
30079
+ _$setProp2(_el$119, "selectable", false);
30080
+ _$insert2(_el$117, _$createComponent2(Show2, {
29043
30081
  get when() {
29044
30082
  return productSubline();
29045
30083
  },
29046
30084
  get fallback() {
29047
30085
  return (() => {
29048
- var _el$135 = _$createElement2("box");
29049
- _$setProp2(_el$135, "height", 0);
29050
- _$setProp2(_el$135, "flexShrink", 0);
29051
- return _el$135;
30086
+ var _el$132 = _$createElement2("box");
30087
+ _$setProp2(_el$132, "height", 0);
30088
+ _$setProp2(_el$132, "flexShrink", 0);
30089
+ return _el$132;
29052
30090
  })();
29053
30091
  },
29054
30092
  get children() {
29055
- var _el$123 = _$createElement2("text");
29056
- _$setProp2(_el$123, "wrapMode", "none");
29057
- _$setProp2(_el$123, "truncate", true);
29058
- _$insert2(_el$123, productSubline);
30093
+ var _el$120 = _$createElement2("text");
30094
+ _$setProp2(_el$120, "wrapMode", "none");
30095
+ _$setProp2(_el$120, "truncate", true);
30096
+ _$insert2(_el$120, productSubline);
29059
30097
  _$effect2((_p$) => {
29060
- var _v$82 = theme2.accent, _v$83 = TextAttributes2.BOLD;
29061
- _v$82 !== _p$.e && (_p$.e = _$setProp2(_el$123, "fg", _v$82, _p$.e));
29062
- _v$83 !== _p$.t && (_p$.t = _$setProp2(_el$123, "attributes", _v$83, _p$.t));
30098
+ var _v$69 = theme2.accent, _v$70 = TextAttributes2.BOLD;
30099
+ _v$69 !== _p$.e && (_p$.e = _$setProp2(_el$120, "fg", _v$69, _p$.e));
30100
+ _v$70 !== _p$.t && (_p$.t = _$setProp2(_el$120, "attributes", _v$70, _p$.t));
29063
30101
  return _p$;
29064
30102
  }, {
29065
30103
  e: undefined,
29066
30104
  t: undefined
29067
30105
  });
29068
- return _el$123;
29069
- }
29070
- }), _el$124);
29071
- _$setProp2(_el$124, "height", 1);
29072
- _$insertNode2(_el$125, _$createTextNode2(`Welcome.`));
29073
- _$setProp2(_el$125, "wrapMode", "none");
29074
- _$setProp2(_el$125, "truncate", true);
29075
- _$insertNode2(_el$127, _$createTextNode2(`One run, done well.`));
29076
- _$setProp2(_el$127, "wrapMode", "none");
29077
- _$setProp2(_el$127, "truncate", true);
29078
- _$insertNode2(_el$129, _el$130);
29079
- _$insertNode2(_el$129, _el$132);
29080
- _$setProp2(_el$129, "wrapMode", "none");
29081
- _$setProp2(_el$129, "truncate", true);
29082
- _$insert2(_el$129, _$createComponent2(Span, {
30106
+ return _el$120;
30107
+ }
30108
+ }), _el$121);
30109
+ _$setProp2(_el$121, "height", 1);
30110
+ _$insertNode2(_el$122, _$createTextNode2(`Welcome.`));
30111
+ _$setProp2(_el$122, "wrapMode", "none");
30112
+ _$setProp2(_el$122, "truncate", true);
30113
+ _$insertNode2(_el$124, _$createTextNode2(`One run, done well.`));
30114
+ _$setProp2(_el$124, "wrapMode", "none");
30115
+ _$setProp2(_el$124, "truncate", true);
30116
+ _$insertNode2(_el$126, _el$127);
30117
+ _$insertNode2(_el$126, _el$129);
30118
+ _$setProp2(_el$126, "wrapMode", "none");
30119
+ _$setProp2(_el$126, "truncate", true);
30120
+ _$insert2(_el$126, _$createComponent2(Span, {
29083
30121
  get fg() {
29084
30122
  return theme2.accent;
29085
30123
  },
29086
30124
  children: "/help"
29087
- }), _el$132);
29088
- _$insert2(_el$120, _$createComponent2(Show2, {
30125
+ }), _el$129);
30126
+ _$insert2(_el$117, _$createComponent2(Show2, {
29089
30127
  get when() {
29090
30128
  return props.view.model;
29091
30129
  },
29092
30130
  get fallback() {
29093
30131
  return (() => {
29094
- var _el$136 = _$createElement2("box");
29095
- _$setProp2(_el$136, "height", 0);
29096
- _$setProp2(_el$136, "flexShrink", 0);
29097
- return _el$136;
30132
+ var _el$133 = _$createElement2("box");
30133
+ _$setProp2(_el$133, "height", 0);
30134
+ _$setProp2(_el$133, "flexShrink", 0);
30135
+ return _el$133;
29098
30136
  })();
29099
30137
  },
29100
30138
  get children() {
29101
- var _el$133 = _$createElement2("text"), _el$134 = _$createTextNode2(` \xB7 `);
29102
- _$insertNode2(_el$133, _el$134);
29103
- _$setProp2(_el$133, "wrapMode", "none");
29104
- _$setProp2(_el$133, "truncate", true);
29105
- _$insert2(_el$133, () => props.view.model.name, _el$134);
29106
- _$insert2(_el$133, (() => {
30139
+ var _el$130 = _$createElement2("text"), _el$131 = _$createTextNode2(` \xB7 `);
30140
+ _$insertNode2(_el$130, _el$131);
30141
+ _$setProp2(_el$130, "wrapMode", "none");
30142
+ _$setProp2(_el$130, "truncate", true);
30143
+ _$insert2(_el$130, () => props.view.model.name, _el$131);
30144
+ _$insert2(_el$130, (() => {
29107
30145
  var _c$3 = _$memo2(() => props.view.thinking === "off");
29108
30146
  return () => _c$3() ? "thinking off" : `thinking ${props.view.thinking}`;
29109
30147
  })(), null);
29110
- _$effect2((_$p) => _$setProp2(_el$133, "fg", theme2.dim, _$p));
29111
- return _el$133;
30148
+ _$effect2((_$p) => _$setProp2(_el$130, "fg", theme2.dim, _$p));
30149
+ return _el$130;
29112
30150
  }
29113
30151
  }), null);
29114
30152
  _$effect2((_p$) => {
29115
- var _v$84 = productMark(), { primary: _v$85, text: _v$86 } = theme2, _v$87 = TextAttributes2.BOLD, { muted: _v$88, muted: _v$89 } = theme2;
29116
- _v$84 !== _p$.e && (_p$.e = _$setProp2(_el$122, "text", _v$84, _p$.e));
29117
- _v$85 !== _p$.t && (_p$.t = _$setProp2(_el$122, "color", _v$85, _p$.t));
29118
- _v$86 !== _p$.a && (_p$.a = _$setProp2(_el$125, "fg", _v$86, _p$.a));
29119
- _v$87 !== _p$.o && (_p$.o = _$setProp2(_el$125, "attributes", _v$87, _p$.o));
29120
- _v$88 !== _p$.i && (_p$.i = _$setProp2(_el$127, "fg", _v$88, _p$.i));
29121
- _v$89 !== _p$.n && (_p$.n = _$setProp2(_el$129, "fg", _v$89, _p$.n));
30153
+ var _v$71 = productMark(), { primary: _v$72, text: _v$73 } = theme2, _v$74 = TextAttributes2.BOLD, { muted: _v$75, muted: _v$76 } = theme2;
30154
+ _v$71 !== _p$.e && (_p$.e = _$setProp2(_el$119, "text", _v$71, _p$.e));
30155
+ _v$72 !== _p$.t && (_p$.t = _$setProp2(_el$119, "color", _v$72, _p$.t));
30156
+ _v$73 !== _p$.a && (_p$.a = _$setProp2(_el$122, "fg", _v$73, _p$.a));
30157
+ _v$74 !== _p$.o && (_p$.o = _$setProp2(_el$122, "attributes", _v$74, _p$.o));
30158
+ _v$75 !== _p$.i && (_p$.i = _$setProp2(_el$124, "fg", _v$75, _p$.i));
30159
+ _v$76 !== _p$.n && (_p$.n = _$setProp2(_el$126, "fg", _v$76, _p$.n));
29122
30160
  return _p$;
29123
30161
  }, {
29124
30162
  e: undefined,
@@ -29128,18 +30166,18 @@ function Home(props) {
29128
30166
  i: undefined,
29129
30167
  n: undefined
29130
30168
  });
29131
- return _el$120;
30169
+ return _el$117;
29132
30170
  })();
29133
30171
  }
29134
30172
  function PageDialog(props) {
29135
30173
  const rect = () => centeredRect(props.width, props.height, props.value().width, Math.min(props.value().lines.length, Math.max(1, props.height - 2)));
29136
30174
  return (() => {
29137
- var _el$137 = _$createElement2("box");
29138
- _$setProp2(_el$137, "position", "absolute");
29139
- _$setProp2(_el$137, "zIndex", 100);
29140
- _$setProp2(_el$137, "flexDirection", "column");
29141
- _$setProp2(_el$137, "overflow", "hidden");
29142
- _$insert2(_el$137, _$createComponent2(AnsiView, {
30175
+ var _el$134 = _$createElement2("box");
30176
+ _$setProp2(_el$134, "position", "absolute");
30177
+ _$setProp2(_el$134, "zIndex", 100);
30178
+ _$setProp2(_el$134, "flexDirection", "column");
30179
+ _$setProp2(_el$134, "overflow", "hidden");
30180
+ _$insert2(_el$134, _$createComponent2(AnsiView, {
29143
30181
  get lines() {
29144
30182
  return props.value().lines;
29145
30183
  },
@@ -29148,15 +30186,15 @@ function PageDialog(props) {
29148
30186
  }
29149
30187
  }));
29150
30188
  _$effect2((_p$) => {
29151
- var _v$90 = rect().top, _v$91 = rect().left, _v$92 = rect().width, _v$93 = rect().height, _v$94 = theme2.panel, { routeMouse: _v$95, routeMouse: _v$96, routeMouse: _v$97 } = props;
29152
- _v$90 !== _p$.e && (_p$.e = _$setProp2(_el$137, "top", _v$90, _p$.e));
29153
- _v$91 !== _p$.t && (_p$.t = _$setProp2(_el$137, "left", _v$91, _p$.t));
29154
- _v$92 !== _p$.a && (_p$.a = _$setProp2(_el$137, "width", _v$92, _p$.a));
29155
- _v$93 !== _p$.o && (_p$.o = _$setProp2(_el$137, "height", _v$93, _p$.o));
29156
- _v$94 !== _p$.i && (_p$.i = _$setProp2(_el$137, "backgroundColor", _v$94, _p$.i));
29157
- _v$95 !== _p$.n && (_p$.n = _$setProp2(_el$137, "onMouseMove", _v$95, _p$.n));
29158
- _v$96 !== _p$.s && (_p$.s = _$setProp2(_el$137, "onMouseUp", _v$96, _p$.s));
29159
- _v$97 !== _p$.h && (_p$.h = _$setProp2(_el$137, "onMouseScroll", _v$97, _p$.h));
30189
+ var _v$77 = rect().top, _v$78 = rect().left, _v$79 = rect().width, _v$80 = rect().height, _v$81 = theme2.panel, { routeMouse: _v$82, routeMouse: _v$83, routeMouse: _v$84 } = props;
30190
+ _v$77 !== _p$.e && (_p$.e = _$setProp2(_el$134, "top", _v$77, _p$.e));
30191
+ _v$78 !== _p$.t && (_p$.t = _$setProp2(_el$134, "left", _v$78, _p$.t));
30192
+ _v$79 !== _p$.a && (_p$.a = _$setProp2(_el$134, "width", _v$79, _p$.a));
30193
+ _v$80 !== _p$.o && (_p$.o = _$setProp2(_el$134, "height", _v$80, _p$.o));
30194
+ _v$81 !== _p$.i && (_p$.i = _$setProp2(_el$134, "backgroundColor", _v$81, _p$.i));
30195
+ _v$82 !== _p$.n && (_p$.n = _$setProp2(_el$134, "onMouseMove", _v$82, _p$.n));
30196
+ _v$83 !== _p$.s && (_p$.s = _$setProp2(_el$134, "onMouseUp", _v$83, _p$.s));
30197
+ _v$84 !== _p$.h && (_p$.h = _$setProp2(_el$134, "onMouseScroll", _v$84, _p$.h));
29160
30198
  return _p$;
29161
30199
  }, {
29162
30200
  e: undefined,
@@ -29168,7 +30206,7 @@ function PageDialog(props) {
29168
30206
  s: undefined,
29169
30207
  h: undefined
29170
30208
  });
29171
- return _el$137;
30209
+ return _el$134;
29172
30210
  })();
29173
30211
  }
29174
30212
  function OverlayView(props) {
@@ -29194,10 +30232,10 @@ function OverlayView(props) {
29194
30232
  },
29195
30233
  get fallback() {
29196
30234
  return (() => {
29197
- var _el$138 = _$createElement2("box");
29198
- _$setProp2(_el$138, "height", 0);
29199
- _$setProp2(_el$138, "flexShrink", 0);
29200
- return _el$138;
30235
+ var _el$135 = _$createElement2("box");
30236
+ _$setProp2(_el$135, "height", 0);
30237
+ _$setProp2(_el$135, "flexShrink", 0);
30238
+ return _el$135;
29201
30239
  })();
29202
30240
  },
29203
30241
  children: (value) => _$createComponent2(Show2, {
@@ -29211,18 +30249,18 @@ function OverlayView(props) {
29211
30249
  },
29212
30250
  get fallback() {
29213
30251
  return (() => {
29214
- var _el$141 = _$createElement2("box");
29215
- _$setProp2(_el$141, "position", "absolute");
29216
- _$setProp2(_el$141, "zIndex", 100);
29217
- _$setProp2(_el$141, "border", true);
29218
- _$setProp2(_el$141, "borderStyle", "rounded");
29219
- _$setProp2(_el$141, "padding", 1);
29220
- _$setProp2(_el$141, "flexDirection", "column");
29221
- _$setProp2(_el$141, "overflow", "hidden");
29222
- _$setProp2(_el$141, "onMouseMove", routeMouse);
29223
- _$setProp2(_el$141, "onMouseUp", routeMouse);
29224
- _$setProp2(_el$141, "onMouseScroll", routeMouse);
29225
- _$insert2(_el$141, _$createComponent2(AnsiView, {
30252
+ var _el$138 = _$createElement2("box");
30253
+ _$setProp2(_el$138, "position", "absolute");
30254
+ _$setProp2(_el$138, "zIndex", 100);
30255
+ _$setProp2(_el$138, "border", true);
30256
+ _$setProp2(_el$138, "borderStyle", "rounded");
30257
+ _$setProp2(_el$138, "padding", 1);
30258
+ _$setProp2(_el$138, "flexDirection", "column");
30259
+ _$setProp2(_el$138, "overflow", "hidden");
30260
+ _$setProp2(_el$138, "onMouseMove", routeMouse);
30261
+ _$setProp2(_el$138, "onMouseUp", routeMouse);
30262
+ _$setProp2(_el$138, "onMouseScroll", routeMouse);
30263
+ _$insert2(_el$138, _$createComponent2(AnsiView, {
29226
30264
  get lines() {
29227
30265
  return value().lines;
29228
30266
  },
@@ -29231,13 +30269,13 @@ function OverlayView(props) {
29231
30269
  }
29232
30270
  }));
29233
30271
  _$effect2((_p$) => {
29234
- var _v$98 = value().bounds.row, _v$99 = value().bounds.col, _v$100 = value().bounds.width, _v$101 = value().bounds.height, { panel: _v$102, borderFocus: _v$103 } = theme2;
29235
- _v$98 !== _p$.e && (_p$.e = _$setProp2(_el$141, "top", _v$98, _p$.e));
29236
- _v$99 !== _p$.t && (_p$.t = _$setProp2(_el$141, "left", _v$99, _p$.t));
29237
- _v$100 !== _p$.a && (_p$.a = _$setProp2(_el$141, "width", _v$100, _p$.a));
29238
- _v$101 !== _p$.o && (_p$.o = _$setProp2(_el$141, "height", _v$101, _p$.o));
29239
- _v$102 !== _p$.i && (_p$.i = _$setProp2(_el$141, "backgroundColor", _v$102, _p$.i));
29240
- _v$103 !== _p$.n && (_p$.n = _$setProp2(_el$141, "borderColor", _v$103, _p$.n));
30272
+ var _v$85 = value().bounds.row, _v$86 = value().bounds.col, _v$87 = value().bounds.width, _v$88 = value().bounds.height, { panel: _v$89, borderFocus: _v$90 } = theme2;
30273
+ _v$85 !== _p$.e && (_p$.e = _$setProp2(_el$138, "top", _v$85, _p$.e));
30274
+ _v$86 !== _p$.t && (_p$.t = _$setProp2(_el$138, "left", _v$86, _p$.t));
30275
+ _v$87 !== _p$.a && (_p$.a = _$setProp2(_el$138, "width", _v$87, _p$.a));
30276
+ _v$88 !== _p$.o && (_p$.o = _$setProp2(_el$138, "height", _v$88, _p$.o));
30277
+ _v$89 !== _p$.i && (_p$.i = _$setProp2(_el$138, "backgroundColor", _v$89, _p$.i));
30278
+ _v$90 !== _p$.n && (_p$.n = _$setProp2(_el$138, "borderColor", _v$90, _p$.n));
29241
30279
  return _p$;
29242
30280
  }, {
29243
30281
  e: undefined,
@@ -29247,22 +30285,22 @@ function OverlayView(props) {
29247
30285
  i: undefined,
29248
30286
  n: undefined
29249
30287
  });
29250
- return _el$141;
30288
+ return _el$138;
29251
30289
  })();
29252
30290
  },
29253
30291
  get children() {
29254
- var _el$140 = _$createElement2("box");
29255
- _$setProp2(_el$140, "position", "absolute");
29256
- _$setProp2(_el$140, "top", 0);
29257
- _$setProp2(_el$140, "left", 0);
29258
- _$setProp2(_el$140, "width", "100%");
29259
- _$setProp2(_el$140, "height", "100%");
29260
- _$setProp2(_el$140, "zIndex", 100);
29261
- _$setProp2(_el$140, "flexDirection", "column");
29262
- _$setProp2(_el$140, "onMouseMove", routeMouse);
29263
- _$setProp2(_el$140, "onMouseUp", routeMouse);
29264
- _$setProp2(_el$140, "onMouseScroll", routeMouse);
29265
- _$insert2(_el$140, _$createComponent2(AnsiView, {
30292
+ var _el$137 = _$createElement2("box");
30293
+ _$setProp2(_el$137, "position", "absolute");
30294
+ _$setProp2(_el$137, "top", 0);
30295
+ _$setProp2(_el$137, "left", 0);
30296
+ _$setProp2(_el$137, "width", "100%");
30297
+ _$setProp2(_el$137, "height", "100%");
30298
+ _$setProp2(_el$137, "zIndex", 100);
30299
+ _$setProp2(_el$137, "flexDirection", "column");
30300
+ _$setProp2(_el$137, "onMouseMove", routeMouse);
30301
+ _$setProp2(_el$137, "onMouseUp", routeMouse);
30302
+ _$setProp2(_el$137, "onMouseScroll", routeMouse);
30303
+ _$insert2(_el$137, _$createComponent2(AnsiView, {
29266
30304
  get lines() {
29267
30305
  return value().lines;
29268
30306
  },
@@ -29270,25 +30308,25 @@ function OverlayView(props) {
29270
30308
  return theme2.text;
29271
30309
  }
29272
30310
  }));
29273
- _$effect2((_$p) => _$setProp2(_el$140, "backgroundColor", theme2.background, _$p));
29274
- return _el$140;
30311
+ _$effect2((_$p) => _$setProp2(_el$137, "backgroundColor", theme2.background, _$p));
30312
+ return _el$137;
29275
30313
  }
29276
30314
  });
29277
30315
  },
29278
30316
  get children() {
29279
30317
  return [(() => {
29280
- var _el$139 = _$createElement2("box");
29281
- _$setProp2(_el$139, "position", "absolute");
29282
- _$setProp2(_el$139, "top", 0);
29283
- _$setProp2(_el$139, "left", 0);
29284
- _$setProp2(_el$139, "width", "100%");
29285
- _$setProp2(_el$139, "height", "100%");
29286
- _$setProp2(_el$139, "zIndex", 99);
29287
- _$setProp2(_el$139, "onMouseMove", routeMouse);
29288
- _$setProp2(_el$139, "onMouseUp", routeMouse);
29289
- _$setProp2(_el$139, "onMouseScroll", routeMouse);
29290
- _$effect2((_$p) => _$setProp2(_el$139, "backgroundColor", theme2.scrim, _$p));
29291
- return _el$139;
30318
+ var _el$136 = _$createElement2("box");
30319
+ _$setProp2(_el$136, "position", "absolute");
30320
+ _$setProp2(_el$136, "top", 0);
30321
+ _$setProp2(_el$136, "left", 0);
30322
+ _$setProp2(_el$136, "width", "100%");
30323
+ _$setProp2(_el$136, "height", "100%");
30324
+ _$setProp2(_el$136, "zIndex", 99);
30325
+ _$setProp2(_el$136, "onMouseMove", routeMouse);
30326
+ _$setProp2(_el$136, "onMouseUp", routeMouse);
30327
+ _$setProp2(_el$136, "onMouseScroll", routeMouse);
30328
+ _$effect2((_$p) => _$setProp2(_el$136, "backgroundColor", theme2.scrim, _$p));
30329
+ return _el$136;
29292
30330
  })(), _$createComponent2(PageDialog, {
29293
30331
  value,
29294
30332
  get width() {
@@ -29521,29 +30559,29 @@ function OpenTuiRoot(props) {
29521
30559
  }
29522
30560
  });
29523
30561
  return (() => {
29524
- var _el$142 = _$createElement2("box"), _el$143 = _$createElement2("box");
29525
- _$insertNode2(_el$142, _el$143);
29526
- _$setProp2(_el$142, "position", "relative");
29527
- _$setProp2(_el$142, "flexDirection", "column");
29528
- _$setProp2(_el$142, "width", "100%");
29529
- _$setProp2(_el$142, "height", "100%");
29530
- _$setProp2(_el$142, "backgroundColor", "transparent");
29531
- _$setProp2(_el$142, "onMouseMove", (event) => props.app.updateLinkHover(event.x, event.y));
29532
- _$setProp2(_el$142, "onMouseUp", handleRootMouseUp);
29533
- _$setProp2(_el$143, "flexDirection", "column");
29534
- _$setProp2(_el$143, "flexGrow", 1);
29535
- _$setProp2(_el$143, "minHeight", 0);
29536
- _$setProp2(_el$143, "paddingX", 1);
29537
- _$insert2(_el$143, _$createComponent2(Show2, {
30562
+ var _el$139 = _$createElement2("box"), _el$140 = _$createElement2("box");
30563
+ _$insertNode2(_el$139, _el$140);
30564
+ _$setProp2(_el$139, "position", "relative");
30565
+ _$setProp2(_el$139, "flexDirection", "column");
30566
+ _$setProp2(_el$139, "width", "100%");
30567
+ _$setProp2(_el$139, "height", "100%");
30568
+ _$setProp2(_el$139, "backgroundColor", "transparent");
30569
+ _$setProp2(_el$139, "onMouseMove", (event) => props.app.updateLinkHover(event.x, event.y));
30570
+ _$setProp2(_el$139, "onMouseUp", handleRootMouseUp);
30571
+ _$setProp2(_el$140, "flexDirection", "column");
30572
+ _$setProp2(_el$140, "flexGrow", 1);
30573
+ _$setProp2(_el$140, "minHeight", 0);
30574
+ _$setProp2(_el$140, "paddingX", 1);
30575
+ _$insert2(_el$140, _$createComponent2(Show2, {
29538
30576
  get when() {
29539
30577
  return view().header;
29540
30578
  },
29541
30579
  get fallback() {
29542
30580
  return (() => {
29543
- var _el$146 = _$createElement2("box");
29544
- _$setProp2(_el$146, "height", 0);
29545
- _$setProp2(_el$146, "flexShrink", 0);
29546
- return _el$146;
30581
+ var _el$143 = _$createElement2("box");
30582
+ _$setProp2(_el$143, "height", 0);
30583
+ _$setProp2(_el$143, "flexShrink", 0);
30584
+ return _el$143;
29547
30585
  })();
29548
30586
  },
29549
30587
  children: (lines) => _$createComponent2(AnsiView, {
@@ -29555,22 +30593,22 @@ function OpenTuiRoot(props) {
29555
30593
  }
29556
30594
  })
29557
30595
  }), null);
29558
- _$insert2(_el$143, _$createComponent2(Show2, {
30596
+ _$insert2(_el$140, _$createComponent2(Show2, {
29559
30597
  get when() {
29560
30598
  return !view().home;
29561
30599
  },
29562
30600
  get fallback() {
29563
30601
  return (() => {
29564
- var _el$147 = _$createElement2("box");
29565
- _$setProp2(_el$147, "flexGrow", 1);
29566
- _$setProp2(_el$147, "minHeight", 0);
29567
- _$setProp2(_el$147, "flexDirection", "column");
29568
- _$insert2(_el$147, _$createComponent2(Home, {
30602
+ var _el$144 = _$createElement2("box");
30603
+ _$setProp2(_el$144, "flexGrow", 1);
30604
+ _$setProp2(_el$144, "minHeight", 0);
30605
+ _$setProp2(_el$144, "flexDirection", "column");
30606
+ _$insert2(_el$144, _$createComponent2(Home, {
29569
30607
  get view() {
29570
30608
  return view();
29571
30609
  }
29572
30610
  }), null);
29573
- _$insert2(_el$147, _$createComponent2(TranscriptItems, {
30611
+ _$insert2(_el$144, _$createComponent2(TranscriptItems, {
29574
30612
  get items() {
29575
30613
  return view().items;
29576
30614
  },
@@ -29585,38 +30623,38 @@ function OpenTuiRoot(props) {
29585
30623
  return view().slashCommandNames;
29586
30624
  }
29587
30625
  }), null);
29588
- return _el$147;
30626
+ return _el$144;
29589
30627
  })();
29590
30628
  },
29591
30629
  get children() {
29592
- var _el$144 = _$createElement2("box"), _el$145 = _$createElement2("scrollbox");
29593
- _$insertNode2(_el$144, _el$145);
29594
- _$setProp2(_el$144, "position", "relative");
29595
- _$setProp2(_el$144, "flexDirection", "column");
29596
- _$setProp2(_el$144, "flexGrow", 1);
29597
- _$setProp2(_el$144, "minHeight", 0);
30630
+ var _el$141 = _$createElement2("box"), _el$142 = _$createElement2("scrollbox");
30631
+ _$insertNode2(_el$141, _el$142);
30632
+ _$setProp2(_el$141, "position", "relative");
30633
+ _$setProp2(_el$141, "flexDirection", "column");
30634
+ _$setProp2(_el$141, "flexGrow", 1);
30635
+ _$setProp2(_el$141, "minHeight", 0);
29598
30636
  _$use2((value) => {
29599
30637
  scroll = value;
29600
- }, _el$145);
29601
- _$setProp2(_el$145, "flexGrow", 1);
29602
- _$setProp2(_el$145, "minHeight", 0);
29603
- _$setProp2(_el$145, "stickyScroll", true);
29604
- _$setProp2(_el$145, "stickyStart", "bottom");
29605
- _$setProp2(_el$145, "scrollY", true);
29606
- _$setProp2(_el$145, "verticalScrollbarOptions", {
30638
+ }, _el$142);
30639
+ _$setProp2(_el$142, "flexGrow", 1);
30640
+ _$setProp2(_el$142, "minHeight", 0);
30641
+ _$setProp2(_el$142, "stickyScroll", true);
30642
+ _$setProp2(_el$142, "stickyStart", "bottom");
30643
+ _$setProp2(_el$142, "scrollY", true);
30644
+ _$setProp2(_el$142, "verticalScrollbarOptions", {
29607
30645
  width: 1,
29608
30646
  trackOptions: {
29609
30647
  backgroundColor: "transparent",
29610
30648
  foregroundColor: "transparent"
29611
30649
  }
29612
30650
  });
29613
- _$setProp2(_el$145, "renderAfter", (buffer) => drawTranscriptScrollbar(buffer, scroll));
29614
- _$setProp2(_el$145, "backgroundColor", "transparent");
29615
- _$setProp2(_el$145, "paddingBottom", 1);
29616
- _$setProp2(_el$145, "onMouseScroll", scheduleTranscriptScrollState);
29617
- _$setProp2(_el$145, "onMouseDrag", scheduleTranscriptScrollState);
29618
- _$setProp2(_el$145, "onMouseUp", scheduleTranscriptScrollState);
29619
- _$insert2(_el$145, _$createComponent2(TranscriptItems, {
30651
+ _$setProp2(_el$142, "renderAfter", (buffer) => drawTranscriptScrollbar(buffer, scroll));
30652
+ _$setProp2(_el$142, "backgroundColor", "transparent");
30653
+ _$setProp2(_el$142, "paddingBottom", 1);
30654
+ _$setProp2(_el$142, "onMouseScroll", scheduleTranscriptScrollState);
30655
+ _$setProp2(_el$142, "onMouseDrag", scheduleTranscriptScrollState);
30656
+ _$setProp2(_el$142, "onMouseUp", scheduleTranscriptScrollState);
30657
+ _$insert2(_el$142, _$createComponent2(TranscriptItems, {
29620
30658
  get items() {
29621
30659
  return view().items;
29622
30660
  },
@@ -29631,7 +30669,7 @@ function OpenTuiRoot(props) {
29631
30669
  return view().slashCommandNames;
29632
30670
  }
29633
30671
  }));
29634
- _$insert2(_el$144, _$createComponent2(Show2, {
30672
+ _$insert2(_el$141, _$createComponent2(Show2, {
29635
30673
  get when() {
29636
30674
  return showJumpToLatest();
29637
30675
  },
@@ -29641,10 +30679,10 @@ function OpenTuiRoot(props) {
29641
30679
  });
29642
30680
  }
29643
30681
  }), null);
29644
- return _el$144;
30682
+ return _el$141;
29645
30683
  }
29646
30684
  }), null);
29647
- _$insert2(_el$143, _$createComponent2(PendingMessages, {
30685
+ _$insert2(_el$140, _$createComponent2(PendingMessages, {
29648
30686
  get messages() {
29649
30687
  return view().pendingMessages ?? [];
29650
30688
  },
@@ -29658,7 +30696,7 @@ function OpenTuiRoot(props) {
29658
30696
  return props.app;
29659
30697
  }
29660
30698
  }), null);
29661
- _$insert2(_el$143, _$createComponent2(WorkingLine, {
30699
+ _$insert2(_el$140, _$createComponent2(WorkingLine, {
29662
30700
  get view() {
29663
30701
  return view();
29664
30702
  },
@@ -29666,7 +30704,7 @@ function OpenTuiRoot(props) {
29666
30704
  return Math.max(0, dimensions().width - 4);
29667
30705
  }
29668
30706
  }), null);
29669
- _$insert2(_el$143, _$createComponent2(For2, {
30707
+ _$insert2(_el$140, _$createComponent2(For2, {
29670
30708
  get each() {
29671
30709
  return view().widgets.above;
29672
30710
  },
@@ -29677,29 +30715,29 @@ function OpenTuiRoot(props) {
29677
30715
  }
29678
30716
  })
29679
30717
  }), null);
29680
- _$insert2(_el$143, _$createComponent2(Show2, {
30718
+ _$insert2(_el$140, _$createComponent2(Show2, {
29681
30719
  get when() {
29682
30720
  return view().sideQuestionDock;
29683
30721
  },
29684
30722
  get fallback() {
29685
30723
  return (() => {
29686
- var _el$148 = _$createElement2("box");
29687
- _$setProp2(_el$148, "height", 0);
29688
- _$setProp2(_el$148, "flexShrink", 0);
29689
- return _el$148;
30724
+ var _el$145 = _$createElement2("box");
30725
+ _$setProp2(_el$145, "height", 0);
30726
+ _$setProp2(_el$145, "flexShrink", 0);
30727
+ return _el$145;
29690
30728
  })();
29691
30729
  },
29692
30730
  children: (lines) => (() => {
29693
- var _el$149 = _$createElement2("box");
29694
- _$setProp2(_el$149, "flexShrink", 0);
29695
- _$setProp2(_el$149, "onMouseScroll", (event) => {
30731
+ var _el$146 = _$createElement2("box");
30732
+ _$setProp2(_el$146, "flexShrink", 0);
30733
+ _$setProp2(_el$146, "onMouseScroll", (event) => {
29696
30734
  const direction = event.scroll?.direction;
29697
30735
  if (direction !== "up" && direction !== "down")
29698
30736
  return;
29699
30737
  if (props.app.scrollSideQuestion(direction))
29700
30738
  event.stopPropagation();
29701
30739
  });
29702
- _$insert2(_el$149, _$createComponent2(AnsiView, {
30740
+ _$insert2(_el$146, _$createComponent2(AnsiView, {
29703
30741
  get lines() {
29704
30742
  return lines();
29705
30743
  },
@@ -29707,19 +30745,19 @@ function OpenTuiRoot(props) {
29707
30745
  return theme2.text;
29708
30746
  }
29709
30747
  }));
29710
- return _el$149;
30748
+ return _el$146;
29711
30749
  })()
29712
30750
  }), null);
29713
- _$insert2(_el$143, _$createComponent2(Show2, {
30751
+ _$insert2(_el$140, _$createComponent2(Show2, {
29714
30752
  get when() {
29715
30753
  return view().planChoice;
29716
30754
  },
29717
30755
  get fallback() {
29718
30756
  return (() => {
29719
- var _el$150 = _$createElement2("box");
29720
- _$setProp2(_el$150, "height", 0);
29721
- _$setProp2(_el$150, "flexShrink", 0);
29722
- return _el$150;
30757
+ var _el$147 = _$createElement2("box");
30758
+ _$setProp2(_el$147, "height", 0);
30759
+ _$setProp2(_el$147, "flexShrink", 0);
30760
+ return _el$147;
29723
30761
  })();
29724
30762
  },
29725
30763
  children: (choice) => _$createComponent2(PlanChoiceBlock, {
@@ -29731,16 +30769,16 @@ function OpenTuiRoot(props) {
29731
30769
  }
29732
30770
  })
29733
30771
  }), null);
29734
- _$insert2(_el$143, _$createComponent2(Show2, {
30772
+ _$insert2(_el$140, _$createComponent2(Show2, {
29735
30773
  get when() {
29736
30774
  return view().fileCompletion;
29737
30775
  },
29738
30776
  get fallback() {
29739
30777
  return (() => {
29740
- var _el$151 = _$createElement2("box");
29741
- _$setProp2(_el$151, "height", 0);
29742
- _$setProp2(_el$151, "flexShrink", 0);
29743
- return _el$151;
30778
+ var _el$148 = _$createElement2("box");
30779
+ _$setProp2(_el$148, "height", 0);
30780
+ _$setProp2(_el$148, "flexShrink", 0);
30781
+ return _el$148;
29744
30782
  })();
29745
30783
  },
29746
30784
  children: (completion) => _$createComponent2(FileCompletionList, {
@@ -29752,16 +30790,16 @@ function OpenTuiRoot(props) {
29752
30790
  }
29753
30791
  })
29754
30792
  }), null);
29755
- _$insert2(_el$143, _$createComponent2(Show2, {
30793
+ _$insert2(_el$140, _$createComponent2(Show2, {
29756
30794
  get when() {
29757
30795
  return view().palette;
29758
30796
  },
29759
30797
  get fallback() {
29760
30798
  return (() => {
29761
- var _el$152 = _$createElement2("box");
29762
- _$setProp2(_el$152, "height", 0);
29763
- _$setProp2(_el$152, "flexShrink", 0);
29764
- return _el$152;
30799
+ var _el$149 = _$createElement2("box");
30800
+ _$setProp2(_el$149, "height", 0);
30801
+ _$setProp2(_el$149, "flexShrink", 0);
30802
+ return _el$149;
29765
30803
  })();
29766
30804
  },
29767
30805
  children: (palette) => _$createComponent2(Palette, {
@@ -29776,16 +30814,16 @@ function OpenTuiRoot(props) {
29776
30814
  }
29777
30815
  })
29778
30816
  }), null);
29779
- _$insert2(_el$143, _$createComponent2(Show2, {
30817
+ _$insert2(_el$140, _$createComponent2(Show2, {
29780
30818
  get when() {
29781
30819
  return view().questionDock;
29782
30820
  },
29783
30821
  get fallback() {
29784
30822
  return (() => {
29785
- var _el$153 = _$createElement2("box");
29786
- _$setProp2(_el$153, "height", 0);
29787
- _$setProp2(_el$153, "flexShrink", 0);
29788
- return _el$153;
30823
+ var _el$150 = _$createElement2("box");
30824
+ _$setProp2(_el$150, "height", 0);
30825
+ _$setProp2(_el$150, "flexShrink", 0);
30826
+ return _el$150;
29789
30827
  })();
29790
30828
  },
29791
30829
  children: (question) => _$createComponent2(QuestionDock, {
@@ -29797,16 +30835,16 @@ function OpenTuiRoot(props) {
29797
30835
  }
29798
30836
  })
29799
30837
  }), null);
29800
- _$insert2(_el$143, _$createComponent2(Show2, {
30838
+ _$insert2(_el$140, _$createComponent2(Show2, {
29801
30839
  get when() {
29802
30840
  return !view().questionDock;
29803
30841
  },
29804
30842
  get fallback() {
29805
30843
  return (() => {
29806
- var _el$154 = _$createElement2("box");
29807
- _$setProp2(_el$154, "height", 0);
29808
- _$setProp2(_el$154, "flexShrink", 0);
29809
- return _el$154;
30844
+ var _el$151 = _$createElement2("box");
30845
+ _$setProp2(_el$151, "height", 0);
30846
+ _$setProp2(_el$151, "flexShrink", 0);
30847
+ return _el$151;
29810
30848
  })();
29811
30849
  },
29812
30850
  get children() {
@@ -29824,16 +30862,16 @@ function OpenTuiRoot(props) {
29824
30862
  });
29825
30863
  }
29826
30864
  }), null);
29827
- _$insert2(_el$143, _$createComponent2(Show2, {
30865
+ _$insert2(_el$140, _$createComponent2(Show2, {
29828
30866
  get when() {
29829
30867
  return view().subagents;
29830
30868
  },
29831
30869
  get fallback() {
29832
30870
  return (() => {
29833
- var _el$155 = _$createElement2("box");
29834
- _$setProp2(_el$155, "height", 0);
29835
- _$setProp2(_el$155, "flexShrink", 0);
29836
- return _el$155;
30871
+ var _el$152 = _$createElement2("box");
30872
+ _$setProp2(_el$152, "height", 0);
30873
+ _$setProp2(_el$152, "flexShrink", 0);
30874
+ return _el$152;
29837
30875
  })();
29838
30876
  },
29839
30877
  children: (roster) => _$createComponent2(SubagentRoster, {
@@ -29842,7 +30880,7 @@ function OpenTuiRoot(props) {
29842
30880
  }
29843
30881
  })
29844
30882
  }), null);
29845
- _$insert2(_el$143, _$createComponent2(For2, {
30883
+ _$insert2(_el$140, _$createComponent2(For2, {
29846
30884
  get each() {
29847
30885
  return view().widgets.below;
29848
30886
  },
@@ -29853,7 +30891,7 @@ function OpenTuiRoot(props) {
29853
30891
  }
29854
30892
  })
29855
30893
  }), null);
29856
- _$insert2(_el$143, _$createComponent2(Footer, {
30894
+ _$insert2(_el$140, _$createComponent2(Footer, {
29857
30895
  get view() {
29858
30896
  return view();
29859
30897
  },
@@ -29861,7 +30899,7 @@ function OpenTuiRoot(props) {
29861
30899
  return dimensions().width;
29862
30900
  }
29863
30901
  }), null);
29864
- _$insert2(_el$142, _$createComponent2(OverlayView, {
30902
+ _$insert2(_el$139, _$createComponent2(OverlayView, {
29865
30903
  get app() {
29866
30904
  return props.app;
29867
30905
  },
@@ -29875,7 +30913,7 @@ function OpenTuiRoot(props) {
29875
30913
  return dimensions().height;
29876
30914
  }
29877
30915
  }), null);
29878
- _$insert2(_el$142, _$createComponent2(Toast, {
30916
+ _$insert2(_el$139, _$createComponent2(Toast, {
29879
30917
  get message() {
29880
30918
  return view().toast;
29881
30919
  },
@@ -29883,7 +30921,7 @@ function OpenTuiRoot(props) {
29883
30921
  return dimensions().width;
29884
30922
  }
29885
30923
  }), null);
29886
- return _el$142;
30924
+ return _el$139;
29887
30925
  })();
29888
30926
  }
29889
30927