@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.
- package/CHANGELOG.md +43 -0
- package/dist/cli.js +23375 -19883
- package/dist/sdk/cli.js +16 -1
- package/dist/sdk/harness.js +2 -1
- package/dist/sdk/prompt/reporting.d.ts +1 -1
- package/dist/sdk/prompt/reporting.js +8 -3
- package/dist/sdk/server/methods.js +12 -3
- package/dist/sdk/server/serve.d.ts +5 -2
- package/dist/sdk/server/serve.js +10 -3
- package/dist/sdk/server/socket.d.ts +28 -0
- package/dist/sdk/server/socket.js +122 -0
- package/dist/sdk/sessions/contracts.d.ts +14 -1
- package/dist/sdk/sessions/contracts.js +9 -0
- package/dist/sdk/sessions/extensionUi.js +4 -4
- package/dist/sdk/sessions/live.d.ts +101 -0
- package/dist/sdk/sessions/live.js +265 -0
- package/dist/sdk/sessions/registry.d.ts +12 -0
- package/dist/sdk/sessions/registry.js +3 -0
- package/dist/sdk/sessions/runner.d.ts +25 -3
- package/dist/sdk/sessions/runner.js +171 -31
- package/dist/sdk/sessions/sessions.d.ts +49 -0
- package/dist/sdk/sessions/sessions.js +165 -8
- package/dist/sdk/{terminal → sessions}/stallWatch.d.ts +4 -0
- package/dist/sdk/{terminal → sessions}/stallWatch.js +10 -4
- package/dist/sdk/sessions/subagentService.js +1 -1
- package/dist/sdk/terminal/controller.js +1 -3
- package/dist/sdk/terminal/daemon.d.ts +44 -0
- package/dist/sdk/terminal/daemon.js +264 -0
- package/dist/sdk/terminal/liveTerminal.d.ts +96 -0
- package/dist/sdk/terminal/liveTerminal.js +436 -0
- package/dist/sdk/terminal/standalone.d.ts +19 -1
- package/dist/sdk/terminal/standalone.js +75 -25
- package/dist/sdk/terminal/terminals.d.ts +43 -0
- package/dist/sdk/terminal/terminals.js +171 -14
- package/dist/sdk/terminal/tui/commands.d.ts +2 -0
- package/dist/sdk/terminal/tui/commands.js +24 -2
- package/dist/sdk/terminal/tui/harnessRuntime.d.ts +8 -0
- package/dist/sdk/terminal/tui/harnessRuntime.js +771 -0
- package/dist/sdk/terminal/tui/thinkingLevels.d.ts +11 -0
- package/dist/sdk/terminal/tui/thinkingLevels.js +31 -0
- package/dist/terminal-opentui.js +2013 -975
- package/dist/terminal-pi.js +9 -0
- package/docs/architecture/02-sessions-and-runs.md +61 -3
- package/docs/architecture/04-prompt.md +8 -6
- package/docs/architecture/10-server-protocol.md +23 -1
- package/docs/architecture/11-terminal.md +67 -3
- package/docs/architecture/12-storage.md +3 -1
- package/docs/architecture/14-surfaces-and-parity.md +4 -0
- package/docs/architecture/15-remote-control.md +3 -1
- package/docs/architecture/README.md +5 -0
- package/docs/decisions/ADR-0001-owned-terminal.md +9 -2
- package/docs/decisions/ADR-0083-one-live-session-runtime.md +256 -0
- package/docs/parity.md +4 -3
- package/docs/releases/2.0.1-unstable.md +63 -0
- package/docs/terminal-tui.md +10 -5
- package/package.json +1 -1
package/dist/terminal-opentui.js
CHANGED
|
@@ -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
|
|
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
|
|
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 {
|
|
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 =
|
|
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
|
|
17525
|
-
import { join as
|
|
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(
|
|
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
|
|
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(
|
|
17612
|
-
import(pathToFileURL2(
|
|
17613
|
-
import(pathToFileURL2(
|
|
17614
|
-
import(pathToFileURL2(
|
|
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
|
|
17648
|
-
import { isAbsolute as isAbsolute5, join as
|
|
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
|
|
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
|
|
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("~\\") ?
|
|
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
|
|
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
|
|
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) =>
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
|
19977
|
-
import { dirname as dirname9, join as
|
|
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() ?
|
|
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 &&
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
20759
|
-
|
|
20760
|
-
|
|
20761
|
-
|
|
20762
|
-
|
|
20763
|
-
|
|
20764
|
-
|
|
20765
|
-
|
|
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
|
-
|
|
20770
|
-
|
|
20771
|
-
|
|
20772
|
-
|
|
20773
|
-
|
|
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
|
|
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(
|
|
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 =
|
|
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 "${
|
|
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
|
|
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("~/") ?
|
|
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
|
|
23047
|
-
import { isAbsolute as
|
|
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 (
|
|
24001
|
+
if (isAbsolute7(decoded))
|
|
23101
24002
|
return decoded;
|
|
23102
24003
|
if (SCHEME.test(decoded))
|
|
23103
24004
|
return null;
|
|
23104
|
-
if (!base || !
|
|
24005
|
+
if (!base || !isAbsolute7(base))
|
|
23105
24006
|
return null;
|
|
23106
|
-
return
|
|
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 =
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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(
|
|
25769
|
-
const file =
|
|
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$
|
|
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
|
-
_$
|
|
27346
|
-
_$setProp2(_el$6, "
|
|
27347
|
-
_$setProp2(_el$6, "
|
|
27348
|
-
_$setProp2(_el$
|
|
27349
|
-
_$
|
|
27350
|
-
_$
|
|
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$
|
|
27357
|
-
_$
|
|
27358
|
-
_$setProp2(_el$
|
|
27359
|
-
_$setProp2(_el$
|
|
27360
|
-
_$
|
|
27361
|
-
|
|
27362
|
-
|
|
27363
|
-
|
|
27364
|
-
|
|
27365
|
-
|
|
27366
|
-
|
|
27367
|
-
|
|
27368
|
-
|
|
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$
|
|
27395
|
-
return _el$
|
|
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$
|
|
27456
|
-
_v$
|
|
27457
|
-
_v$
|
|
27458
|
-
_v$
|
|
27459
|
-
_v$
|
|
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$
|
|
27472
|
-
_v$
|
|
27473
|
-
_v$
|
|
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$
|
|
27546
|
-
_v$
|
|
27547
|
-
_v$
|
|
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")
|
|
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
|
-
_$
|
|
27564
|
-
|
|
27565
|
-
|
|
27566
|
-
|
|
27567
|
-
|
|
27568
|
-
|
|
27569
|
-
}
|
|
27570
|
-
|
|
27571
|
-
|
|
27572
|
-
|
|
27573
|
-
|
|
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$
|
|
27611
|
-
_$insertNode2(_el$
|
|
27612
|
-
_$insertNode2(_el$
|
|
27613
|
-
_$
|
|
27614
|
-
_$setProp2(_el$
|
|
27615
|
-
_$setProp2(_el$
|
|
27616
|
-
_$setProp2(_el$
|
|
27617
|
-
_$setProp2(_el$
|
|
27618
|
-
_$setProp2(_el$
|
|
27619
|
-
_$setProp2(_el$
|
|
27620
|
-
_$setProp2(_el$23, "
|
|
27621
|
-
_$
|
|
27622
|
-
_$insert2(_el$
|
|
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$
|
|
27638
|
-
_$setProp2(_el$
|
|
27639
|
-
_$
|
|
27640
|
-
|
|
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$
|
|
27643
|
-
|
|
27644
|
-
|
|
27645
|
-
|
|
27646
|
-
_v$
|
|
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$
|
|
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$
|
|
27674
|
-
_$insertNode2(_el$
|
|
27675
|
-
_$insertNode2(_el$
|
|
27676
|
-
_$setProp2(_el$
|
|
27677
|
-
_$setProp2(_el$
|
|
27678
|
-
_$setProp2(_el$
|
|
27679
|
-
_$setProp2(_el$
|
|
27680
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
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$
|
|
27713
|
-
_$setProp2(_el$
|
|
27714
|
-
_$setProp2(_el$
|
|
27715
|
-
_$insert2(_el$
|
|
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$
|
|
27721
|
-
_$insertNode2(_el$
|
|
27722
|
-
_$insertNode2(_el$
|
|
27723
|
-
_$insertNode2(_el$
|
|
27724
|
-
_$setProp2(_el$
|
|
27725
|
-
_$setProp2(_el$
|
|
27726
|
-
_$setProp2(_el$
|
|
27727
|
-
_$insertNode2(_el$
|
|
27728
|
-
_$setProp2(_el$
|
|
27729
|
-
_$setProp2(_el$
|
|
27730
|
-
_$setProp2(_el$
|
|
27731
|
-
_$setProp2(_el$
|
|
27732
|
-
_$insert2(_el$
|
|
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$
|
|
27741
|
-
_$setProp2(_el$
|
|
27742
|
-
_$setProp2(_el$
|
|
27743
|
-
_$setProp2(_el$
|
|
27744
|
-
_$setProp2(_el$
|
|
27745
|
-
_$setProp2(_el$
|
|
27746
|
-
_$insert2(_el$
|
|
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$
|
|
28807
|
+
return _el$28;
|
|
27758
28808
|
})()
|
|
27759
28809
|
}));
|
|
27760
|
-
return _el$
|
|
28810
|
+
return _el$25;
|
|
27761
28811
|
})();
|
|
27762
28812
|
}
|
|
27763
28813
|
if (item.kind === "thinking") {
|
|
27764
28814
|
return (() => {
|
|
27765
|
-
var _el$
|
|
27766
|
-
_$insertNode2(_el$
|
|
27767
|
-
_$setProp2(_el$
|
|
27768
|
-
_$setProp2(_el$
|
|
27769
|
-
_$setProp2(_el$
|
|
27770
|
-
_$insert2(_el$
|
|
27771
|
-
_$insert2(_el$
|
|
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$
|
|
27785
|
-
return _el$
|
|
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$
|
|
27791
|
-
_$insertNode2(_el$
|
|
27792
|
-
_$setProp2(_el$
|
|
27793
|
-
_$setProp2(_el$
|
|
27794
|
-
_$setProp2(_el$
|
|
27795
|
-
_$setProp2(_el$
|
|
27796
|
-
_$setProp2(_el$
|
|
27797
|
-
_$insertNode2(_el$
|
|
27798
|
-
_$insertNode2(_el$
|
|
27799
|
-
_$insert2(_el$
|
|
27800
|
-
_$insert2(_el$
|
|
27801
|
-
_$insert2(_el$
|
|
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
|
-
|
|
27807
|
-
|
|
27808
|
-
|
|
27809
|
-
|
|
27810
|
-
|
|
27811
|
-
|
|
27812
|
-
|
|
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$
|
|
28866
|
+
_$insert2(_el$35, _$createComponent2(For2, {
|
|
27829
28867
|
get each() {
|
|
27830
28868
|
return item.images;
|
|
27831
28869
|
},
|
|
27832
28870
|
children: (image) => (() => {
|
|
27833
|
-
var _el$
|
|
27834
|
-
_$setProp2(_el$
|
|
27835
|
-
_$setProp2(_el$
|
|
27836
|
-
_$setProp2(_el$
|
|
27837
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
27838
|
-
return _el$
|
|
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$
|
|
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$
|
|
27847
|
-
_$setProp2(_el$
|
|
27848
|
-
_$insert2(_el$
|
|
27849
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
27850
|
-
return _el$
|
|
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$
|
|
27855
|
-
_v$
|
|
27856
|
-
_v$
|
|
27857
|
-
_v$
|
|
27858
|
-
_v$
|
|
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$
|
|
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$
|
|
27874
|
-
_$insertNode2(_el$
|
|
27875
|
-
_$setProp2(_el$
|
|
27876
|
-
_$setProp2(_el$
|
|
27877
|
-
_$setProp2(_el$
|
|
27878
|
-
_$setProp2(_el$
|
|
27879
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
27935
|
-
_$setProp2(_el$
|
|
27936
|
-
_$setProp2(_el$
|
|
27937
|
-
return _el$
|
|
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$
|
|
27942
|
-
_$insertNode2(_el$
|
|
27943
|
-
_$setProp2(_el$
|
|
27944
|
-
_$setProp2(_el$
|
|
27945
|
-
_$setProp2(_el$
|
|
27946
|
-
_$insert2(_el$
|
|
27947
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
27948
|
-
return _el$
|
|
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$
|
|
28989
|
+
return _el$41;
|
|
27952
28990
|
})();
|
|
27953
28991
|
}
|
|
27954
28992
|
if (item.kind === "notice") {
|
|
27955
28993
|
return (() => {
|
|
27956
|
-
var _el$
|
|
27957
|
-
_$insertNode2(_el$
|
|
27958
|
-
_$setProp2(_el$
|
|
27959
|
-
_$setProp2(_el$
|
|
27960
|
-
_$setProp2(_el$
|
|
27961
|
-
_$setProp2(_el$
|
|
27962
|
-
_$setProp2(_el$
|
|
27963
|
-
_$insert2(_el$
|
|
27964
|
-
_$insert2(_el$
|
|
27965
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
27966
|
-
return _el$
|
|
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$
|
|
27972
|
-
_$insertNode2(_el$
|
|
27973
|
-
_$setProp2(_el$
|
|
27974
|
-
_$setProp2(_el$
|
|
27975
|
-
_$setProp2(_el$
|
|
27976
|
-
_$setProp2(_el$
|
|
27977
|
-
_$setProp2(_el$
|
|
27978
|
-
_$insertNode2(_el$
|
|
27979
|
-
_$setProp2(_el$
|
|
27980
|
-
_$insert2(_el$
|
|
27981
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
28001
|
-
_$setProp2(_el$
|
|
28002
|
-
_$setProp2(_el$
|
|
28003
|
-
return _el$
|
|
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$
|
|
28008
|
-
_$insertNode2(_el$
|
|
28009
|
-
_$setProp2(_el$
|
|
28010
|
-
_$setProp2(_el$
|
|
28011
|
-
_$insert2(_el$
|
|
28012
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
28013
|
-
return _el$
|
|
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$
|
|
28017
|
-
return _el$
|
|
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$
|
|
28023
|
-
_$insertNode2(_el$
|
|
28024
|
-
_$insertNode2(_el$
|
|
28025
|
-
_$setProp2(_el$
|
|
28026
|
-
_$setProp2(_el$
|
|
28027
|
-
_$setProp2(_el$
|
|
28028
|
-
_$insert2(_el$
|
|
28029
|
-
_$setProp2(_el$
|
|
28030
|
-
_$insert2(_el$
|
|
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$
|
|
28033
|
-
_v$
|
|
28034
|
-
_v$
|
|
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$
|
|
29078
|
+
return _el$54;
|
|
28041
29079
|
})();
|
|
28042
29080
|
}
|
|
28043
29081
|
return (() => {
|
|
28044
|
-
var _el$
|
|
28045
|
-
_$insertNode2(_el$
|
|
28046
|
-
_$insertNode2(_el$
|
|
28047
|
-
_$setProp2(_el$
|
|
28048
|
-
_$setProp2(_el$
|
|
28049
|
-
_$setProp2(_el$
|
|
28050
|
-
_$insertNode2(_el$
|
|
28051
|
-
_$insert2(_el$
|
|
28052
|
-
_$setProp2(_el$
|
|
28053
|
-
_$insert2(_el$
|
|
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$
|
|
28056
|
-
_v$
|
|
28057
|
-
_v$
|
|
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$
|
|
29101
|
+
return _el$57;
|
|
28064
29102
|
})();
|
|
28065
29103
|
}
|
|
28066
29104
|
function TranscriptItems(props) {
|
|
28067
29105
|
return (() => {
|
|
28068
|
-
var _el$
|
|
28069
|
-
_$setProp2(_el$
|
|
28070
|
-
_$setProp2(_el$
|
|
28071
|
-
_$setProp2(_el$
|
|
28072
|
-
_$setProp2(_el$
|
|
28073
|
-
_$insert2(_el$
|
|
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$
|
|
28086
|
-
_$insertNode2(_el$
|
|
28087
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
28088
|
-
return _el$
|
|
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$
|
|
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$
|
|
28135
|
-
_$insertNode2(_el$
|
|
28136
|
-
_$setProp2(_el$
|
|
28137
|
-
_$setProp2(_el$
|
|
28138
|
-
_$setProp2(_el$
|
|
28139
|
-
_$setProp2(_el$
|
|
28140
|
-
_$setProp2(_el$
|
|
28141
|
-
_$setProp2(_el$
|
|
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$
|
|
28145
|
-
_$setProp2(_el$
|
|
28146
|
-
_$insert2(_el$
|
|
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$
|
|
28154
|
-
_$insertNode2(_el$
|
|
28155
|
-
_$insertNode2(_el$
|
|
28156
|
-
_$insertNode2(_el$
|
|
28157
|
-
_$setProp2(_el$
|
|
28158
|
-
_$setProp2(_el$
|
|
28159
|
-
_$setProp2(_el$
|
|
28160
|
-
_$setProp2(_el$
|
|
28161
|
-
_$setProp2(_el$
|
|
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$
|
|
28168
|
-
_$setProp2(_el$
|
|
28169
|
-
_$insert2(_el$
|
|
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$
|
|
28175
|
-
_$setProp2(_el$
|
|
28176
|
-
_$insert2(_el$
|
|
29212
|
+
var _el$70 = _$createElement2("text");
|
|
29213
|
+
_$setProp2(_el$70, "wrapMode", "none");
|
|
29214
|
+
_$insert2(_el$70, line);
|
|
28177
29215
|
_$effect2((_p$) => {
|
|
28178
|
-
var _v$
|
|
28179
|
-
_v$
|
|
28180
|
-
_v$
|
|
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$
|
|
29224
|
+
return _el$70;
|
|
28187
29225
|
})()
|
|
28188
29226
|
}));
|
|
28189
|
-
_$setProp2(_el$
|
|
28190
|
-
_$setProp2(_el$
|
|
28191
|
-
_$setProp2(_el$
|
|
28192
|
-
_$setProp2(_el$
|
|
28193
|
-
_$setProp2(_el$
|
|
28194
|
-
_$setProp2(_el$
|
|
28195
|
-
_$insert2(_el$
|
|
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$
|
|
28201
|
-
_$setProp2(_el$
|
|
28202
|
-
_$insert2(_el$
|
|
28203
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
28204
|
-
return _el$
|
|
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$
|
|
28209
|
-
_v$
|
|
28210
|
-
_v$
|
|
28211
|
-
_v$
|
|
28212
|
-
_v$
|
|
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$
|
|
29258
|
+
return _el$66;
|
|
28221
29259
|
})();
|
|
28222
29260
|
}
|
|
28223
29261
|
}));
|
|
28224
29262
|
_$effect2((_p$) => {
|
|
28225
|
-
var { panel: _v$
|
|
28226
|
-
_v$
|
|
28227
|
-
_v$
|
|
28228
|
-
_v$
|
|
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$
|
|
29273
|
+
return _el$64;
|
|
28236
29274
|
})();
|
|
28237
29275
|
}
|
|
28238
29276
|
function FileCompletionList(props) {
|
|
28239
29277
|
return (() => {
|
|
28240
|
-
var _el$
|
|
28241
|
-
_$setProp2(_el$
|
|
28242
|
-
_$setProp2(_el$
|
|
28243
|
-
_$setProp2(_el$
|
|
28244
|
-
_$setProp2(_el$
|
|
28245
|
-
_$setProp2(_el$
|
|
28246
|
-
_$insert2(_el$
|
|
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$
|
|
28254
|
-
_$insertNode2(_el$
|
|
28255
|
-
_$setProp2(_el$
|
|
28256
|
-
_$setProp2(_el$
|
|
28257
|
-
_$setProp2(_el$
|
|
28258
|
-
_$setProp2(_el$
|
|
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$
|
|
28265
|
-
_$setProp2(_el$
|
|
28266
|
-
_$insert2(_el$
|
|
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$
|
|
28269
|
-
_v$
|
|
28270
|
-
_v$
|
|
28271
|
-
_v$
|
|
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$
|
|
29316
|
+
return _el$73;
|
|
28279
29317
|
})();
|
|
28280
29318
|
}
|
|
28281
29319
|
}));
|
|
28282
29320
|
_$effect2((_p$) => {
|
|
28283
|
-
var { panel: _v$
|
|
28284
|
-
_v$
|
|
28285
|
-
_v$
|
|
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$
|
|
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$
|
|
28298
|
-
_$insertNode2(_el$
|
|
28299
|
-
_$insertNode2(_el$
|
|
28300
|
-
_$insertNode2(_el$
|
|
28301
|
-
_$insertNode2(_el$
|
|
28302
|
-
_$setProp2(_el$
|
|
28303
|
-
_$setProp2(_el$
|
|
28304
|
-
_$setProp2(_el$
|
|
28305
|
-
_$setProp2(_el$
|
|
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
|
-
_$
|
|
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$
|
|
28320
|
-
_$insertNode2(_el$
|
|
28321
|
-
_$setProp2(_el$
|
|
28322
|
-
_$setProp2(_el$
|
|
28323
|
-
_$setProp2(_el$
|
|
28324
|
-
_$setProp2(_el$
|
|
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$
|
|
28331
|
-
_$setProp2(_el$
|
|
28332
|
-
_$insert2(_el$
|
|
29368
|
+
_$setProp2(_el$83, "wrapMode", "none");
|
|
29369
|
+
_$setProp2(_el$83, "truncate", true);
|
|
29370
|
+
_$insert2(_el$83, label);
|
|
28333
29371
|
_$effect2((_p$) => {
|
|
28334
|
-
var _v$
|
|
28335
|
-
_v$
|
|
28336
|
-
_v$
|
|
28337
|
-
_v$
|
|
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$
|
|
29382
|
+
return _el$82;
|
|
28345
29383
|
})();
|
|
28346
29384
|
}
|
|
28347
|
-
}), _el$
|
|
28348
|
-
_$setProp2(_el$
|
|
28349
|
-
_$setProp2(_el$
|
|
28350
|
-
_$insertNode2(_el$
|
|
28351
|
-
_$setProp2(_el$
|
|
28352
|
-
_$setProp2(_el$
|
|
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$
|
|
28355
|
-
_v$
|
|
28356
|
-
_v$
|
|
28357
|
-
_v$
|
|
28358
|
-
_v$
|
|
28359
|
-
_v$
|
|
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$
|
|
29406
|
+
return _el$75;
|
|
28369
29407
|
})();
|
|
28370
29408
|
}
|
|
28371
29409
|
function StatusBar(props) {
|
|
28372
29410
|
return (() => {
|
|
28373
|
-
var _el$
|
|
28374
|
-
_$insertNode2(_el$
|
|
28375
|
-
_$setProp2(_el$
|
|
28376
|
-
_$setProp2(_el$
|
|
28377
|
-
_$setProp2(_el$
|
|
28378
|
-
_$insert2(_el$
|
|
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$
|
|
28392
|
-
return _el$
|
|
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$
|
|
28403
|
-
_$setProp2(_el$
|
|
28404
|
-
_$setProp2(_el$
|
|
28405
|
-
_$setProp2(_el$
|
|
28406
|
-
_$setProp2(_el$
|
|
28407
|
-
_$insert2(_el$
|
|
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$
|
|
28416
|
-
_$insertNode2(_el$
|
|
28417
|
-
_$setProp2(_el$
|
|
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$
|
|
28422
|
-
_$setProp2(_el$
|
|
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$
|
|
28429
|
-
_$setProp2(_el$
|
|
28430
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
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$
|
|
28466
|
-
_v$
|
|
28467
|
-
_v$
|
|
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$
|
|
29511
|
+
return _el$87;
|
|
28474
29512
|
})();
|
|
28475
29513
|
}
|
|
28476
29514
|
}));
|
|
28477
|
-
return _el$
|
|
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$
|
|
28495
|
-
_$setProp2(_el$
|
|
28496
|
-
_$setProp2(_el$
|
|
28497
|
-
return _el$
|
|
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$
|
|
28502
|
-
_$insertNode2(_el$
|
|
28503
|
-
_$setProp2(_el$
|
|
28504
|
-
_$setProp2(_el$
|
|
28505
|
-
_$setProp2(_el$
|
|
28506
|
-
_$setProp2(_el$
|
|
28507
|
-
_$setProp2(_el$
|
|
28508
|
-
_$setProp2(_el$
|
|
28509
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
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$
|
|
28537
|
-
return _el$
|
|
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$
|
|
28584
|
-
_$setProp2(_el$
|
|
28585
|
-
_$setProp2(_el$
|
|
28586
|
-
_$setProp2(_el$
|
|
28587
|
-
_$setProp2(_el$
|
|
28588
|
-
_$insert2(_el$
|
|
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$
|
|
28594
|
-
_$setProp2(_el$
|
|
28595
|
-
_$setProp2(_el$
|
|
28596
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
29676
|
+
return _el$94;
|
|
28639
29677
|
})()
|
|
28640
29678
|
}), null);
|
|
28641
|
-
_$insert2(_el$
|
|
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$
|
|
28647
|
-
_$setProp2(_el$
|
|
28648
|
-
_$setProp2(_el$
|
|
28649
|
-
_$insert2(_el$
|
|
28650
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
28651
|
-
return _el$
|
|
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$
|
|
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$
|
|
28721
|
-
_$setProp2(_el$
|
|
28722
|
-
_$setProp2(_el$
|
|
28723
|
-
_$insert2(_el$
|
|
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$
|
|
28730
|
-
_$insertNode2(_el$
|
|
28731
|
-
_$insertNode2(_el$
|
|
28732
|
-
_$setProp2(_el$
|
|
28733
|
-
_$setProp2(_el$
|
|
28734
|
-
_$setProp2(_el$
|
|
28735
|
-
_$setProp2(_el$
|
|
28736
|
-
_$setProp2(_el$
|
|
28737
|
-
_$insertNode2(_el$
|
|
28738
|
-
_$setProp2(_el$
|
|
28739
|
-
_$setProp2(_el$
|
|
28740
|
-
_$setProp2(_el$
|
|
28741
|
-
_$setProp2(_el$
|
|
28742
|
-
_$setProp2(_el$
|
|
28743
|
-
_$setProp2(_el$
|
|
28744
|
-
_$setProp2(_el$
|
|
28745
|
-
_$setProp2(_el$
|
|
28746
|
-
_$setProp2(_el$
|
|
28747
|
-
_$setProp2(_el$
|
|
28748
|
-
_$insert2(_el$
|
|
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$
|
|
28755
|
-
_$insertNode2(_el$
|
|
28756
|
-
_$setProp2(_el$
|
|
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$
|
|
28759
|
-
_v$
|
|
28760
|
-
_v$
|
|
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$
|
|
29804
|
+
return _el$99;
|
|
28767
29805
|
})(), (() => {
|
|
28768
|
-
var _el$
|
|
28769
|
-
_$setProp2(_el$
|
|
28770
|
-
_$setProp2(_el$
|
|
28771
|
-
_$setProp2(_el$
|
|
28772
|
-
_$setProp2(_el$
|
|
28773
|
-
_$setProp2(_el$
|
|
28774
|
-
_$setProp2(_el$
|
|
28775
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
28776
|
-
return _el$
|
|
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$
|
|
28781
|
-
_$insertNode2(_el$
|
|
28782
|
-
_$setProp2(_el$
|
|
28783
|
-
_$setProp2(_el$
|
|
28784
|
-
_$setProp2(_el$
|
|
28785
|
-
_$setProp2(_el$
|
|
28786
|
-
_$setProp2(_el$
|
|
28787
|
-
_$setProp2(_el$
|
|
28788
|
-
_$setProp2(_el$
|
|
28789
|
-
_$insert2(_el$
|
|
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$
|
|
28797
|
-
_$setProp2(_el$
|
|
28798
|
-
_$insert2(_el$
|
|
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$
|
|
28804
|
-
_v$
|
|
28805
|
-
_v$
|
|
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$
|
|
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$
|
|
28820
|
-
_$setProp2(_el$
|
|
28821
|
-
_$setProp2(_el$
|
|
28822
|
-
_$setProp2(_el$
|
|
28823
|
-
_$setProp2(_el$
|
|
28824
|
-
_$setProp2(_el$
|
|
28825
|
-
_$setProp2(_el$
|
|
28826
|
-
_$setProp2(_el$
|
|
28827
|
-
_$setProp2(_el$
|
|
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$
|
|
29869
|
+
_$setProp2(_el$104, "onSubmit", () => {
|
|
28832
29870
|
reportDraft();
|
|
28833
29871
|
props.app.submitPrompt();
|
|
28834
29872
|
});
|
|
28835
|
-
_$setProp2(_el$
|
|
29873
|
+
_$setProp2(_el$104, "onContentChange", () => {
|
|
28836
29874
|
measure();
|
|
28837
29875
|
reportDraft();
|
|
28838
29876
|
});
|
|
28839
|
-
_$setProp2(_el$
|
|
29877
|
+
_$setProp2(_el$104, "onSizeChange", () => measure());
|
|
28840
29878
|
_$effect2((_p$) => {
|
|
28841
|
-
var _v$
|
|
28842
|
-
_v$
|
|
28843
|
-
_v$
|
|
28844
|
-
_v$
|
|
28845
|
-
_v$
|
|
28846
|
-
_v$
|
|
28847
|
-
_v$
|
|
28848
|
-
_v$
|
|
28849
|
-
_v$
|
|
28850
|
-
_v$
|
|
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$
|
|
29901
|
+
return _el$96;
|
|
28864
29902
|
})();
|
|
28865
29903
|
},
|
|
28866
29904
|
children: (lines) => (() => {
|
|
28867
|
-
var _el$
|
|
28868
|
-
_$setProp2(_el$
|
|
28869
|
-
_$setProp2(_el$
|
|
28870
|
-
_$insert2(_el$
|
|
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$
|
|
29916
|
+
return _el$106;
|
|
28879
29917
|
})()
|
|
28880
29918
|
}), null);
|
|
28881
|
-
_$insert2(_el$
|
|
29919
|
+
_$insert2(_el$95, _$createComponent2(StatusBar, {
|
|
28882
29920
|
get view() {
|
|
28883
29921
|
return view();
|
|
28884
29922
|
}
|
|
28885
29923
|
}), null);
|
|
28886
|
-
return _el$
|
|
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$
|
|
28905
|
-
_$setProp2(_el$
|
|
28906
|
-
_$setProp2(_el$
|
|
28907
|
-
return _el$
|
|
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$
|
|
28918
|
-
_$insertNode2(_el$
|
|
28919
|
-
_$setProp2(_el$
|
|
28920
|
-
_$setProp2(_el$
|
|
28921
|
-
_$setProp2(_el$
|
|
28922
|
-
_$setProp2(_el$
|
|
28923
|
-
_$setProp2(_el$
|
|
28924
|
-
_$setProp2(_el$
|
|
28925
|
-
_$insert2(_el$
|
|
28926
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
28927
|
-
return _el$
|
|
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$
|
|
28932
|
-
_$insertNode2(_el$
|
|
28933
|
-
_$setProp2(_el$
|
|
28934
|
-
_$setProp2(_el$
|
|
28935
|
-
_$setProp2(_el$
|
|
28936
|
-
_$insert2(_el$
|
|
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$
|
|
28944
|
-
_$setProp2(_el$
|
|
28945
|
-
_$insert2(_el$
|
|
28946
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
28947
|
-
return _el$
|
|
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$
|
|
28957
|
-
_$insertNode2(_el$
|
|
28958
|
-
_$setProp2(_el$
|
|
28959
|
-
_$setProp2(_el$
|
|
28960
|
-
_$setProp2(_el$
|
|
28961
|
-
_$setProp2(_el$
|
|
28962
|
-
_$setProp2(_el$
|
|
28963
|
-
_$setProp2(_el$
|
|
28964
|
-
_$setProp2(_el$
|
|
28965
|
-
_$setProp2(_el$
|
|
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$
|
|
28972
|
-
_$setProp2(_el$
|
|
30009
|
+
_$insertNode2(_el$113, _$createTextNode2(`\u2193 Jump to latest`));
|
|
30010
|
+
_$setProp2(_el$113, "wrapMode", "none");
|
|
28973
30011
|
_$effect2((_p$) => {
|
|
28974
|
-
var _v$
|
|
28975
|
-
_v$
|
|
28976
|
-
_v$
|
|
28977
|
-
_v$
|
|
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$
|
|
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$
|
|
28995
|
-
_$insertNode2(_el$
|
|
28996
|
-
_$setProp2(_el$
|
|
28997
|
-
_$setProp2(_el$
|
|
28998
|
-
_$setProp2(_el$
|
|
28999
|
-
_$setProp2(_el$
|
|
29000
|
-
_$setProp2(_el$
|
|
29001
|
-
_$setProp2(_el$
|
|
29002
|
-
_$insert2(_el$
|
|
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$
|
|
29005
|
-
_v$
|
|
29006
|
-
_v$
|
|
29007
|
-
_v$
|
|
29008
|
-
_v$
|
|
29009
|
-
_v$
|
|
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$
|
|
30056
|
+
return _el$115;
|
|
29019
30057
|
})()
|
|
29020
30058
|
});
|
|
29021
30059
|
}
|
|
29022
30060
|
function Home(props) {
|
|
29023
30061
|
return (() => {
|
|
29024
|
-
var _el$
|
|
29025
|
-
_$insertNode2(_el$
|
|
29026
|
-
_$insertNode2(_el$
|
|
29027
|
-
_$insertNode2(_el$
|
|
29028
|
-
_$insertNode2(_el$
|
|
29029
|
-
_$insertNode2(_el$
|
|
29030
|
-
_$setProp2(_el$
|
|
29031
|
-
_$setProp2(_el$
|
|
29032
|
-
_$setProp2(_el$
|
|
29033
|
-
_$setProp2(_el$
|
|
29034
|
-
_$setProp2(_el$
|
|
29035
|
-
_$insertNode2(_el$
|
|
29036
|
-
_$setProp2(_el$
|
|
29037
|
-
_$setProp2(_el$
|
|
29038
|
-
_$setProp2(_el$
|
|
29039
|
-
_$setProp2(_el$
|
|
29040
|
-
_$setProp2(_el$
|
|
29041
|
-
_$setProp2(_el$
|
|
29042
|
-
_$insert2(_el$
|
|
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$
|
|
29049
|
-
_$setProp2(_el$
|
|
29050
|
-
_$setProp2(_el$
|
|
29051
|
-
return _el$
|
|
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$
|
|
29056
|
-
_$setProp2(_el$
|
|
29057
|
-
_$setProp2(_el$
|
|
29058
|
-
_$insert2(_el$
|
|
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$
|
|
29061
|
-
_v$
|
|
29062
|
-
_v$
|
|
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$
|
|
29069
|
-
}
|
|
29070
|
-
}), _el$
|
|
29071
|
-
_$setProp2(_el$
|
|
29072
|
-
_$insertNode2(_el$
|
|
29073
|
-
_$setProp2(_el$
|
|
29074
|
-
_$setProp2(_el$
|
|
29075
|
-
_$insertNode2(_el$
|
|
29076
|
-
_$setProp2(_el$
|
|
29077
|
-
_$setProp2(_el$
|
|
29078
|
-
_$insertNode2(_el$
|
|
29079
|
-
_$insertNode2(_el$
|
|
29080
|
-
_$setProp2(_el$
|
|
29081
|
-
_$setProp2(_el$
|
|
29082
|
-
_$insert2(_el$
|
|
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$
|
|
29088
|
-
_$insert2(_el$
|
|
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$
|
|
29095
|
-
_$setProp2(_el$
|
|
29096
|
-
_$setProp2(_el$
|
|
29097
|
-
return _el$
|
|
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$
|
|
29102
|
-
_$insertNode2(_el$
|
|
29103
|
-
_$setProp2(_el$
|
|
29104
|
-
_$setProp2(_el$
|
|
29105
|
-
_$insert2(_el$
|
|
29106
|
-
_$insert2(_el$
|
|
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$
|
|
29111
|
-
return _el$
|
|
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$
|
|
29116
|
-
_v$
|
|
29117
|
-
_v$
|
|
29118
|
-
_v$
|
|
29119
|
-
_v$
|
|
29120
|
-
_v$
|
|
29121
|
-
_v$
|
|
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$
|
|
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$
|
|
29138
|
-
_$setProp2(_el$
|
|
29139
|
-
_$setProp2(_el$
|
|
29140
|
-
_$setProp2(_el$
|
|
29141
|
-
_$setProp2(_el$
|
|
29142
|
-
_$insert2(_el$
|
|
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$
|
|
29152
|
-
_v$
|
|
29153
|
-
_v$
|
|
29154
|
-
_v$
|
|
29155
|
-
_v$
|
|
29156
|
-
_v$
|
|
29157
|
-
_v$
|
|
29158
|
-
_v$
|
|
29159
|
-
_v$
|
|
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$
|
|
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$
|
|
29198
|
-
_$setProp2(_el$
|
|
29199
|
-
_$setProp2(_el$
|
|
29200
|
-
return _el$
|
|
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$
|
|
29215
|
-
_$setProp2(_el$
|
|
29216
|
-
_$setProp2(_el$
|
|
29217
|
-
_$setProp2(_el$
|
|
29218
|
-
_$setProp2(_el$
|
|
29219
|
-
_$setProp2(_el$
|
|
29220
|
-
_$setProp2(_el$
|
|
29221
|
-
_$setProp2(_el$
|
|
29222
|
-
_$setProp2(_el$
|
|
29223
|
-
_$setProp2(_el$
|
|
29224
|
-
_$setProp2(_el$
|
|
29225
|
-
_$insert2(_el$
|
|
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$
|
|
29235
|
-
_v$
|
|
29236
|
-
_v$
|
|
29237
|
-
_v$
|
|
29238
|
-
_v$
|
|
29239
|
-
_v$
|
|
29240
|
-
_v$
|
|
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$
|
|
30288
|
+
return _el$138;
|
|
29251
30289
|
})();
|
|
29252
30290
|
},
|
|
29253
30291
|
get children() {
|
|
29254
|
-
var _el$
|
|
29255
|
-
_$setProp2(_el$
|
|
29256
|
-
_$setProp2(_el$
|
|
29257
|
-
_$setProp2(_el$
|
|
29258
|
-
_$setProp2(_el$
|
|
29259
|
-
_$setProp2(_el$
|
|
29260
|
-
_$setProp2(_el$
|
|
29261
|
-
_$setProp2(_el$
|
|
29262
|
-
_$setProp2(_el$
|
|
29263
|
-
_$setProp2(_el$
|
|
29264
|
-
_$setProp2(_el$
|
|
29265
|
-
_$insert2(_el$
|
|
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$
|
|
29274
|
-
return _el$
|
|
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$
|
|
29281
|
-
_$setProp2(_el$
|
|
29282
|
-
_$setProp2(_el$
|
|
29283
|
-
_$setProp2(_el$
|
|
29284
|
-
_$setProp2(_el$
|
|
29285
|
-
_$setProp2(_el$
|
|
29286
|
-
_$setProp2(_el$
|
|
29287
|
-
_$setProp2(_el$
|
|
29288
|
-
_$setProp2(_el$
|
|
29289
|
-
_$setProp2(_el$
|
|
29290
|
-
_$effect2((_$p) => _$setProp2(_el$
|
|
29291
|
-
return _el$
|
|
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$
|
|
29525
|
-
_$insertNode2(_el$
|
|
29526
|
-
_$setProp2(_el$
|
|
29527
|
-
_$setProp2(_el$
|
|
29528
|
-
_$setProp2(_el$
|
|
29529
|
-
_$setProp2(_el$
|
|
29530
|
-
_$setProp2(_el$
|
|
29531
|
-
_$setProp2(_el$
|
|
29532
|
-
_$setProp2(_el$
|
|
29533
|
-
_$setProp2(_el$
|
|
29534
|
-
_$setProp2(_el$
|
|
29535
|
-
_$setProp2(_el$
|
|
29536
|
-
_$setProp2(_el$
|
|
29537
|
-
_$insert2(_el$
|
|
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$
|
|
29544
|
-
_$setProp2(_el$
|
|
29545
|
-
_$setProp2(_el$
|
|
29546
|
-
return _el$
|
|
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$
|
|
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$
|
|
29565
|
-
_$setProp2(_el$
|
|
29566
|
-
_$setProp2(_el$
|
|
29567
|
-
_$setProp2(_el$
|
|
29568
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
30626
|
+
return _el$144;
|
|
29589
30627
|
})();
|
|
29590
30628
|
},
|
|
29591
30629
|
get children() {
|
|
29592
|
-
var _el$
|
|
29593
|
-
_$insertNode2(_el$
|
|
29594
|
-
_$setProp2(_el$
|
|
29595
|
-
_$setProp2(_el$
|
|
29596
|
-
_$setProp2(_el$
|
|
29597
|
-
_$setProp2(_el$
|
|
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$
|
|
29601
|
-
_$setProp2(_el$
|
|
29602
|
-
_$setProp2(_el$
|
|
29603
|
-
_$setProp2(_el$
|
|
29604
|
-
_$setProp2(_el$
|
|
29605
|
-
_$setProp2(_el$
|
|
29606
|
-
_$setProp2(_el$
|
|
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$
|
|
29614
|
-
_$setProp2(_el$
|
|
29615
|
-
_$setProp2(_el$
|
|
29616
|
-
_$setProp2(_el$
|
|
29617
|
-
_$setProp2(_el$
|
|
29618
|
-
_$setProp2(_el$
|
|
29619
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
30682
|
+
return _el$141;
|
|
29645
30683
|
}
|
|
29646
30684
|
}), null);
|
|
29647
|
-
_$insert2(_el$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
29687
|
-
_$setProp2(_el$
|
|
29688
|
-
_$setProp2(_el$
|
|
29689
|
-
return _el$
|
|
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$
|
|
29694
|
-
_$setProp2(_el$
|
|
29695
|
-
_$setProp2(_el$
|
|
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$
|
|
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$
|
|
30748
|
+
return _el$146;
|
|
29711
30749
|
})()
|
|
29712
30750
|
}), null);
|
|
29713
|
-
_$insert2(_el$
|
|
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$
|
|
29720
|
-
_$setProp2(_el$
|
|
29721
|
-
_$setProp2(_el$
|
|
29722
|
-
return _el$
|
|
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$
|
|
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$
|
|
29741
|
-
_$setProp2(_el$
|
|
29742
|
-
_$setProp2(_el$
|
|
29743
|
-
return _el$
|
|
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$
|
|
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$
|
|
29762
|
-
_$setProp2(_el$
|
|
29763
|
-
_$setProp2(_el$
|
|
29764
|
-
return _el$
|
|
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$
|
|
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$
|
|
29786
|
-
_$setProp2(_el$
|
|
29787
|
-
_$setProp2(_el$
|
|
29788
|
-
return _el$
|
|
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$
|
|
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$
|
|
29807
|
-
_$setProp2(_el$
|
|
29808
|
-
_$setProp2(_el$
|
|
29809
|
-
return _el$
|
|
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$
|
|
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$
|
|
29834
|
-
_$setProp2(_el$
|
|
29835
|
-
_$setProp2(_el$
|
|
29836
|
-
return _el$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
30924
|
+
return _el$139;
|
|
29887
30925
|
})();
|
|
29888
30926
|
}
|
|
29889
30927
|
|