nolo-cli 0.33.0-alpha.23 → 0.33.0-alpha.24
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/{agentEmailCommands-M22DG56U.js → agentEmailCommands-EE2S7WNV.js} +2 -2
- package/{agentMachineCommands-B7HAFERS.js → agentMachineCommands-S6MADFIP.js} +1 -1
- package/{agentRecordCommands-DNEOXRTE.js → agentRecordCommands-VKFILXWT.js} +2 -2
- package/{agentRunCommand-G55YHYDL.js → agentRunCommand-456FHZFM.js} +2 -2
- package/{chunk-MIN2TNAM.js → chunk-6GC52AIA.js} +1 -1
- package/{chunk-O3LO3MRU.js → chunk-JJXFG5VL.js} +1 -1
- package/{chunk-4LSQNSXE.js → chunk-OZOFURV5.js} +2 -12
- package/{chunk-XLUTBJYU.js → chunk-RQZXG6FA.js} +1 -1
- package/index.js +15 -15
- package/{machineCommands-IJL73WA5.js → machineCommands-MGXSN5HO.js} +2 -2
- package/{machineWsRunDispatch-7RE5KJRG.js → machineWsRunDispatch-ZTNURCBC.js} +2 -2
- package/package.json +1 -1
- package/{readlineWorkspace-EGSZ26XS.js → readlineWorkspace-ZUIYPUZO.js} +6 -145
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
} from "./chunk-G7HTVVFL.js";
|
|
9
9
|
import {
|
|
10
10
|
runAgentCreateCommand
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-RQZXG6FA.js";
|
|
12
|
+
import "./chunk-OZOFURV5.js";
|
|
13
13
|
import "./chunk-IEHZHWN7.js";
|
|
14
14
|
import {
|
|
15
15
|
getReadableCliDb
|
|
@@ -86,7 +86,7 @@ async function defaultExecuteCli(provider, prompt, options) {
|
|
|
86
86
|
return executeCli(provider, prompt, options);
|
|
87
87
|
}
|
|
88
88
|
async function forwardConnectorRunMessage(machine, message, pushMessage, executeCli, env, fetchImpl) {
|
|
89
|
-
const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-
|
|
89
|
+
const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-ZTNURCBC.js");
|
|
90
90
|
return handleConnectorRunMessage(message, pushMessage, executeCli, env, fetchImpl);
|
|
91
91
|
}
|
|
92
92
|
async function detectLaunchableMachineInfo() {
|
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
runAgentCreateCommand,
|
|
3
3
|
runAgentReadCommand,
|
|
4
4
|
runAgentUpdateCommand
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-RQZXG6FA.js";
|
|
6
|
+
import "./chunk-OZOFURV5.js";
|
|
7
7
|
import "./chunk-IEHZHWN7.js";
|
|
8
8
|
import "./chunk-UNHKVD2N.js";
|
|
9
9
|
import "./chunk-BY53PPQ2.js";
|
|
@@ -7,12 +7,12 @@ import {
|
|
|
7
7
|
prependSubjectDialogMarker,
|
|
8
8
|
resolveWorkflowReference,
|
|
9
9
|
runAgentRunCommand
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6GC52AIA.js";
|
|
11
11
|
import "./chunk-ESHYE7WU.js";
|
|
12
12
|
import {
|
|
13
13
|
parseAgentRunArgs
|
|
14
14
|
} from "./chunk-G7HTVVFL.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-OZOFURV5.js";
|
|
16
16
|
import "./chunk-IEHZHWN7.js";
|
|
17
17
|
import "./chunk-UNHKVD2N.js";
|
|
18
18
|
import "./chunk-BY53PPQ2.js";
|
|
@@ -423,16 +423,8 @@ var STRINGS = {
|
|
|
423
423
|
zh: "\u5F53\u524D\u73AF\u5883\u6CA1\u6709\u53EF\u7528\u7684\u526A\u8D34\u677F\u3002\u6700\u540E\u4E00\u6761\u56DE\u590D\u5DF2\u6253\u5370\u5728\u4E0A\u65B9\uFF0C\u53EF\u624B\u52A8\u590D\u5236\u3002"
|
|
424
424
|
},
|
|
425
425
|
copyUsage: {
|
|
426
|
-
en: "Usage: /copy
|
|
427
|
-
zh: "\u7528\u6CD5\uFF1A/copy
|
|
428
|
-
},
|
|
429
|
-
copyViewTitle: {
|
|
430
|
-
en: "Copy view \u2014 conversation history",
|
|
431
|
-
zh: "\u590D\u5236\u89C6\u56FE \u2014 \u5BF9\u8BDD\u5386\u53F2"
|
|
432
|
-
},
|
|
433
|
-
copyViewHint: {
|
|
434
|
-
en: "Drag to select. Use PageUp/PageDown, Home/End, or the mouse wheel to scroll. Press Esc or Enter to return.",
|
|
435
|
-
zh: "\u76F4\u63A5\u62D6\u9009\u3002\u53EF\u7528 PageUp/PageDown\u3001Home/End \u6216\u9F20\u6807\u6EDA\u8F6E\u6EDA\u52A8\u3002\u6309 Esc \u6216 Enter \u8FD4\u56DE\u3002"
|
|
426
|
+
en: "Usage: /copy",
|
|
427
|
+
zh: "\u7528\u6CD5\uFF1A/copy"
|
|
436
428
|
},
|
|
437
429
|
historyNoToken: {
|
|
438
430
|
en: "History requires an auth token. Run `nolo login` or set AUTH_TOKEN.",
|
|
@@ -714,7 +706,6 @@ var STRINGS = {
|
|
|
714
706
|
" /resume <dialogId> Resume a dialog directly by id",
|
|
715
707
|
" /lang <zh|en> Switch interface language",
|
|
716
708
|
" /copy Copy the last reply to the clipboard",
|
|
717
|
-
" /copy view Open native scrollback for partial selection (Ctrl+O)",
|
|
718
709
|
" /mouse <on|off> Toggle mouse mode (off = drag to select text)",
|
|
719
710
|
" /altscreen <on|off> Toggle the terminal alternate screen (default on; off shares shell scrollback)",
|
|
720
711
|
" Shift+drag Select text natively even while mouse mode is on (terminal bypass)",
|
|
@@ -751,7 +742,6 @@ var STRINGS = {
|
|
|
751
742
|
" /resume <dialogId> \u6309 id \u76F4\u63A5\u6062\u590D\u5BF9\u8BDD",
|
|
752
743
|
" /lang <zh|en> \u5207\u6362\u754C\u9762\u8BED\u8A00",
|
|
753
744
|
" /copy \u590D\u5236\u6700\u540E\u4E00\u6761\u56DE\u590D\u5230\u526A\u8D34\u677F",
|
|
754
|
-
" /copy view \u6253\u5F00\u539F\u751F\u56DE\u6EDA\u8FDB\u884C\u8DE8\u5C4F\u62D6\u9009\uFF08Ctrl+O\uFF09",
|
|
755
745
|
" /mouse <on|off> \u5207\u6362\u9F20\u6807\u6A21\u5F0F\uFF08off \u540E\u53EF\u76F4\u63A5\u62D6\u9009\u6587\u672C\uFF09",
|
|
756
746
|
" /altscreen <on|off> \u5207\u6362\u7EC8\u7AEF\u5907\u7528\u5C4F\uFF08\u9ED8\u8BA4 on\uFF1Boff \u6539\u4E3A\u4E0E shell \u5171\u7528\u56DE\u6EDA\uFF09",
|
|
757
747
|
" Shift+\u62D6\u62FD \u9F20\u6807\u6A21\u5F0F\u5F00\u542F\u65F6\u4E5F\u53EF\u539F\u751F\u9009\u4E2D\u6587\u672C\uFF08\u7EC8\u7AEF\u7ED5\u8FC7\u4FEE\u9970\u952E\uFF09",
|
package/index.js
CHANGED
|
@@ -126,7 +126,7 @@ function createDaemonShortcutCommand(path, description, command2) {
|
|
|
126
126
|
// packages/cli/agentInternalCommandEntries.ts
|
|
127
127
|
function getAgentInternalCommandEntries() {
|
|
128
128
|
const createAgentRunCommand = (path, description) => createContextCommand(path, description, async (args2, ctx) => {
|
|
129
|
-
const { runAgentRunCommand } = await import("./agentRunCommand-
|
|
129
|
+
const { runAgentRunCommand } = await import("./agentRunCommand-456FHZFM.js");
|
|
130
130
|
return runAgentRunCommand(args2, {
|
|
131
131
|
env: ctx.env,
|
|
132
132
|
scriptDir: ctx.scriptDir,
|
|
@@ -142,7 +142,7 @@ function getAgentInternalCommandEntries() {
|
|
|
142
142
|
return runAgentListCommand(args2, deps);
|
|
143
143
|
}),
|
|
144
144
|
createEnvCommand(["agent", "create"], "Create a new agent", async (args2, deps) => {
|
|
145
|
-
const { runAgentCreateCommand } = await import("./agentRecordCommands-
|
|
145
|
+
const { runAgentCreateCommand } = await import("./agentRecordCommands-VKFILXWT.js");
|
|
146
146
|
return runAgentCreateCommand(args2, deps);
|
|
147
147
|
}),
|
|
148
148
|
createEnvCommand(["agent", "pull"], "Cache an agent for local runs", async (args2, deps) => {
|
|
@@ -150,7 +150,7 @@ function getAgentInternalCommandEntries() {
|
|
|
150
150
|
return runAgentPullCommand(args2, deps);
|
|
151
151
|
}),
|
|
152
152
|
createEnvCommand(["agent", "read"], "Read a single agent", async (args2, deps) => {
|
|
153
|
-
const { runAgentReadCommand } = await import("./agentRecordCommands-
|
|
153
|
+
const { runAgentReadCommand } = await import("./agentRecordCommands-VKFILXWT.js");
|
|
154
154
|
return runAgentReadCommand(args2, deps);
|
|
155
155
|
}),
|
|
156
156
|
createAgentRunCommand(["agent", "run"], "Run an agent"),
|
|
@@ -179,26 +179,26 @@ function getAgentInternalCommandEntries() {
|
|
|
179
179
|
return runSetupOfflineMarxistsAgentCommand(args2, deps);
|
|
180
180
|
}),
|
|
181
181
|
createEnvCommand(["agent", "update"], "Update agent fields", async (args2, deps) => {
|
|
182
|
-
const { runAgentUpdateCommand } = await import("./agentRecordCommands-
|
|
182
|
+
const { runAgentUpdateCommand } = await import("./agentRecordCommands-VKFILXWT.js");
|
|
183
183
|
return runAgentUpdateCommand(args2, deps);
|
|
184
184
|
}),
|
|
185
185
|
createEnvCommand(["agent", "email", "provision"], "Provision a controlled inbox for an agent", async (args2, deps) => {
|
|
186
|
-
const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-
|
|
186
|
+
const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-EE2S7WNV.js");
|
|
187
187
|
return runAgentEmailProvisionCommand(args2, deps);
|
|
188
188
|
}),
|
|
189
189
|
createEnvCommand(["agent", "email", "bind"], "Bind an existing email address to an agent", async (args2, deps) => {
|
|
190
|
-
const { runAgentEmailBindCommand } = await import("./agentEmailCommands-
|
|
190
|
+
const { runAgentEmailBindCommand } = await import("./agentEmailCommands-EE2S7WNV.js");
|
|
191
191
|
return runAgentEmailBindCommand(args2, deps);
|
|
192
192
|
}),
|
|
193
193
|
createEnvCommand(["agent", "email", "transfer"], "Transfer an email identity from one agent to another (cross-account)", async (args2, deps) => {
|
|
194
|
-
const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-
|
|
194
|
+
const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-EE2S7WNV.js");
|
|
195
195
|
return runAgentEmailTransferCommand(args2, deps);
|
|
196
196
|
}),
|
|
197
197
|
createEnvCommand(
|
|
198
198
|
["agent", "email", "create-and-provision"],
|
|
199
199
|
"Create an agent and provision its controlled inbox",
|
|
200
200
|
async (args2, deps) => {
|
|
201
|
-
const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-
|
|
201
|
+
const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-EE2S7WNV.js");
|
|
202
202
|
return runAgentEmailCreateAndProvisionCommand(args2, deps);
|
|
203
203
|
}
|
|
204
204
|
),
|
|
@@ -219,15 +219,15 @@ function getAgentInternalCommandEntries() {
|
|
|
219
219
|
return runAgentRevokeGrantCommand(args2, deps);
|
|
220
220
|
}),
|
|
221
221
|
createEnvCommand(["agent", "bind-current"], "Bind an agent to this machine", async (args2, deps) => {
|
|
222
|
-
const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-
|
|
222
|
+
const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-S6MADFIP.js");
|
|
223
223
|
return runAgentBindCurrentCommand(args2, deps);
|
|
224
224
|
}),
|
|
225
225
|
createEnvCommand(["agent", "smoke-current"], "Smoke test a bound agent through this machine", async (args2, deps) => {
|
|
226
|
-
const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-
|
|
226
|
+
const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-S6MADFIP.js");
|
|
227
227
|
return runAgentSmokeCurrentCommand(args2, deps);
|
|
228
228
|
}),
|
|
229
229
|
createEnvCommand(["agent", "runtime-doctor"], "Diagnose current machine runtime compatibility", async (args2, deps) => {
|
|
230
|
-
const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-
|
|
230
|
+
const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-S6MADFIP.js");
|
|
231
231
|
return runAgentRuntimeDoctorCommand(args2, deps);
|
|
232
232
|
}),
|
|
233
233
|
createAgentRunCommand(["agent", "chat"], "Chat with an agent")
|
|
@@ -408,15 +408,15 @@ function getSystemInternalCommandEntries(renderHelpText2) {
|
|
|
408
408
|
return runWhoamiCommand({ args: args2, env: ctx.env });
|
|
409
409
|
}),
|
|
410
410
|
createEntrypointEnvCommand(["connect"], "Send machine heartbeats or hold a connector websocket", async (args2, deps) => {
|
|
411
|
-
const { runMachineConnectCommand } = await import("./machineCommands-
|
|
411
|
+
const { runMachineConnectCommand } = await import("./machineCommands-MGXSN5HO.js");
|
|
412
412
|
return runMachineConnectCommand(args2, deps);
|
|
413
413
|
}),
|
|
414
414
|
createDaemonShortcutCommand(["daemon"], "Run the connector daemon shortcut", async (args2, deps) => {
|
|
415
|
-
const { runMachineConnectCommand } = await import("./machineCommands-
|
|
415
|
+
const { runMachineConnectCommand } = await import("./machineCommands-MGXSN5HO.js");
|
|
416
416
|
return runMachineConnectCommand(args2, deps);
|
|
417
417
|
}),
|
|
418
418
|
createEnvCommand(["machine", "status"], "List machines registered to the current profile", async (args2, deps) => {
|
|
419
|
-
const { runMachineStatusCommand } = await import("./machineCommands-
|
|
419
|
+
const { runMachineStatusCommand } = await import("./machineCommands-MGXSN5HO.js");
|
|
420
420
|
return runMachineStatusCommand(args2, deps);
|
|
421
421
|
}),
|
|
422
422
|
createEnvCommand(["doctor", "runtime"], "Diagnose local-first agent runtime selection", async (args2, deps) => {
|
|
@@ -796,7 +796,7 @@ async function runScript(script, forwardedArgs, env) {
|
|
|
796
796
|
return proc.exited;
|
|
797
797
|
}
|
|
798
798
|
async function launchTuiWorkspace(args2) {
|
|
799
|
-
const { startTuiWorkspace } = await import("./readlineWorkspace-
|
|
799
|
+
const { startTuiWorkspace } = await import("./readlineWorkspace-ZUIYPUZO.js");
|
|
800
800
|
const { createTuiSummaryLlmCaller } = await import("./tuiSummaryLlmCaller-LAOHMDTM.js");
|
|
801
801
|
return startTuiWorkspace({
|
|
802
802
|
...args2,
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
buildMachinePermissionPromptBlock,
|
|
3
3
|
handleConnectorRunMessage,
|
|
4
4
|
resolveMachineRunPermissionPolicy
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-JJXFG5VL.js";
|
|
6
6
|
import {
|
|
7
7
|
isConnectorWebSocketAuthError,
|
|
8
8
|
isConnectorWebSocketRetryableError,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
detectMachineInfo
|
|
13
13
|
} from "./chunk-ESHYE7WU.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-OZOFURV5.js";
|
|
15
15
|
import "./chunk-IEHZHWN7.js";
|
|
16
16
|
import "./chunk-X2DAEZ3X.js";
|
|
17
17
|
import "./chunk-EKLRRZIN.js";
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
runtimeWorkspacePermissionPolicy,
|
|
12
12
|
scopePermissionPolicyToRuntimeWorkspace,
|
|
13
13
|
summarizeAgentConfigForLogs
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-JJXFG5VL.js";
|
|
15
|
+
import "./chunk-OZOFURV5.js";
|
|
16
16
|
import "./chunk-IEHZHWN7.js";
|
|
17
17
|
import "./chunk-X2DAEZ3X.js";
|
|
18
18
|
import "./chunk-EKLRRZIN.js";
|
package/package.json
CHANGED
|
@@ -61,7 +61,7 @@ import {
|
|
|
61
61
|
wrapTextToLines,
|
|
62
62
|
wrapTranscriptLine,
|
|
63
63
|
wrapTranscriptLineWithLayout
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-6GC52AIA.js";
|
|
65
65
|
import "./chunk-ESHYE7WU.js";
|
|
66
66
|
import {
|
|
67
67
|
listFavoriteAgentIdsAcrossServers,
|
|
@@ -79,7 +79,7 @@ import {
|
|
|
79
79
|
readTimestamp,
|
|
80
80
|
setCliLocale,
|
|
81
81
|
t
|
|
82
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-OZOFURV5.js";
|
|
83
83
|
import "./chunk-IEHZHWN7.js";
|
|
84
84
|
import {
|
|
85
85
|
listUserRecordsFromServers,
|
|
@@ -2334,26 +2334,6 @@ function getAllTurnEntries(history, contentWidth) {
|
|
|
2334
2334
|
function currentTurnSeparator(history, density) {
|
|
2335
2335
|
return density === "spacious" && (history.turns.length > 0 || history.currentRole === "user") ? 1 : 0;
|
|
2336
2336
|
}
|
|
2337
|
-
function buildCopyViewLines(history) {
|
|
2338
|
-
const turns = [...history.turns];
|
|
2339
|
-
if (history.currentRole !== null) {
|
|
2340
|
-
turns.push({ role: history.currentRole, content: history.currentContent });
|
|
2341
|
-
}
|
|
2342
|
-
const lines = [];
|
|
2343
|
-
for (const [index, turn] of turns.entries()) {
|
|
2344
|
-
if (index > 0) lines.push("");
|
|
2345
|
-
const normalized = stripAnsi(turn.content).replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
2346
|
-
if (turn.role === "local") {
|
|
2347
|
-
if (turn.command) {
|
|
2348
|
-
lines.push(`\u203A ${stripAnsi(turn.command)}`);
|
|
2349
|
-
}
|
|
2350
|
-
lines.push(...normalized.split("\n"));
|
|
2351
|
-
} else {
|
|
2352
|
-
lines.push(...normalized.split("\n"));
|
|
2353
|
-
}
|
|
2354
|
-
}
|
|
2355
|
-
return lines;
|
|
2356
|
-
}
|
|
2357
2337
|
function buildHistoryLayoutRows(history, contentWidth) {
|
|
2358
2338
|
const colorEnabled = resolveCliColorEnabled();
|
|
2359
2339
|
const density = getActiveDensity();
|
|
@@ -4322,12 +4302,12 @@ function applyTuiInputKey(buffer, sequence, key = {}, cursorPos, options) {
|
|
|
4322
4302
|
if (seq === "" || key.ctrl && key.name === "c") {
|
|
4323
4303
|
return { buffer, cursorPos: curPos, abort: true };
|
|
4324
4304
|
}
|
|
4325
|
-
if (seq === "" || key.ctrl && key.name === "o") {
|
|
4326
|
-
return { buffer, cursorPos: curPos, copyView: true };
|
|
4327
|
-
}
|
|
4328
4305
|
if (seq === "\f" || key.ctrl && key.name === "l") {
|
|
4329
4306
|
return { buffer, cursorPos: curPos, redraw: true };
|
|
4330
4307
|
}
|
|
4308
|
+
if (seq === "" || key.ctrl && key.name === "o") {
|
|
4309
|
+
return { buffer, cursorPos: curPos };
|
|
4310
|
+
}
|
|
4331
4311
|
if (seq === "\x1B[13;2~" || seq === "\x1B[27;2;13~" || seq === "\x1B\r" || key.shift && (key.name === "enter" || key.name === "return") || seq === "\n" || key.ctrl && key.name === "j") {
|
|
4332
4312
|
const insertAt2 = snapCursorOutsidePasteChip(buffer, curPos);
|
|
4333
4313
|
const nextBuf2 = buffer.slice(0, insertAt2) + "\n" + buffer.slice(insertAt2);
|
|
@@ -4974,13 +4954,6 @@ function handleTuiInput(input, state) {
|
|
|
4974
4954
|
action: { type: "pick-dialog" }
|
|
4975
4955
|
};
|
|
4976
4956
|
case "/copy":
|
|
4977
|
-
if (argText === "view") {
|
|
4978
|
-
return {
|
|
4979
|
-
nextState: state,
|
|
4980
|
-
output: "",
|
|
4981
|
-
action: { type: "copy-view" }
|
|
4982
|
-
};
|
|
4983
|
-
}
|
|
4984
4957
|
if (argText) {
|
|
4985
4958
|
return { nextState: state, output: t("copyUsage") };
|
|
4986
4959
|
}
|
|
@@ -6504,9 +6477,6 @@ async function startTuiWorkspace(options) {
|
|
|
6504
6477
|
reconcile: (runId) => checkStaleRun(runId, { env: process.env }),
|
|
6505
6478
|
onRecordsPolled: (records) => runCompletionWatcher.observe(records)
|
|
6506
6479
|
});
|
|
6507
|
-
let copyViewExitResolver = null;
|
|
6508
|
-
let copyViewRender = null;
|
|
6509
|
-
let copyViewScrollTop = 0;
|
|
6510
6480
|
const history = createTurnHistory();
|
|
6511
6481
|
const dialogHost = createDialogHost({
|
|
6512
6482
|
composer: {
|
|
@@ -6633,53 +6603,6 @@ async function startTuiWorkspace(options) {
|
|
|
6633
6603
|
const text = lastReply ? stripAnsi(lastReply).trim() : "";
|
|
6634
6604
|
return text || null;
|
|
6635
6605
|
};
|
|
6636
|
-
const openCopyView = async () => {
|
|
6637
|
-
const lines = buildCopyViewLines(history);
|
|
6638
|
-
if (lines.length === 0) return false;
|
|
6639
|
-
if (!isInteractiveInput(input)) {
|
|
6640
|
-
output.write(`${lines.join("\n")}
|
|
6641
|
-
`);
|
|
6642
|
-
return true;
|
|
6643
|
-
}
|
|
6644
|
-
const tty = output;
|
|
6645
|
-
const renderCopyView = () => {
|
|
6646
|
-
const rows = Math.max(1, tty.rows ?? 24);
|
|
6647
|
-
const columns = Math.max(1, tty.columns ?? 80);
|
|
6648
|
-
const copyLines = buildCopyViewLines(history);
|
|
6649
|
-
const visibleHeight = Math.max(1, rows - 3);
|
|
6650
|
-
const maxScrollTop = Math.max(0, copyLines.length - visibleHeight);
|
|
6651
|
-
copyViewScrollTop = Math.max(0, Math.min(copyViewScrollTop, maxScrollTop));
|
|
6652
|
-
let frame = "\x1B[2J\x1B[H";
|
|
6653
|
-
frame += `${t("copyViewTitle")}
|
|
6654
|
-
`;
|
|
6655
|
-
for (let index = 0; index < visibleHeight; index++) {
|
|
6656
|
-
frame += `${fitAnsiLine(copyLines[copyViewScrollTop + index] ?? "", columns)}
|
|
6657
|
-
`;
|
|
6658
|
-
}
|
|
6659
|
-
frame += `${t("copyViewHint")}
|
|
6660
|
-
`;
|
|
6661
|
-
output.write(frame);
|
|
6662
|
-
};
|
|
6663
|
-
fixedInput.pause();
|
|
6664
|
-
copyViewScrollTop = 0;
|
|
6665
|
-
copyViewRender = renderCopyView;
|
|
6666
|
-
try {
|
|
6667
|
-
renderCopyView();
|
|
6668
|
-
await new Promise((resolve2) => {
|
|
6669
|
-
copyViewExitResolver = resolve2;
|
|
6670
|
-
});
|
|
6671
|
-
} finally {
|
|
6672
|
-
copyViewExitResolver = null;
|
|
6673
|
-
copyViewRender = null;
|
|
6674
|
-
output.write("\x1B[2J\x1B[H");
|
|
6675
|
-
resetHistoryFrameDiffCache(output);
|
|
6676
|
-
fixedInput.resumeFromDialog();
|
|
6677
|
-
flushPendingRender();
|
|
6678
|
-
renderHistoryToOutput();
|
|
6679
|
-
fixedInput.repaint(buffer, cursorPos);
|
|
6680
|
-
}
|
|
6681
|
-
return true;
|
|
6682
|
-
};
|
|
6683
6606
|
let modalOwnsKeyboard = false;
|
|
6684
6607
|
let rawActionGateTokenHandler = null;
|
|
6685
6608
|
const AUTO_THEME_POLL_MS = 3e4;
|
|
@@ -7151,10 +7074,6 @@ async function startTuiWorkspace(options) {
|
|
|
7151
7074
|
renderHistoryToOutput();
|
|
7152
7075
|
fixedInput.repaint(buffer, cursorPos);
|
|
7153
7076
|
}
|
|
7154
|
-
if (result.action?.type === "copy-view") {
|
|
7155
|
-
const opened = await openCopyView();
|
|
7156
|
-
if (!opened) emitCommandOutput(t("copyNothing"));
|
|
7157
|
-
}
|
|
7158
7077
|
if (result.action?.type === "copy-last") {
|
|
7159
7078
|
const text = readLatestAssistantReply() ?? "";
|
|
7160
7079
|
if (!text) {
|
|
@@ -7378,10 +7297,6 @@ ${err.message}` : ""}`
|
|
|
7378
7297
|
const onResize = () => {
|
|
7379
7298
|
if (done) return;
|
|
7380
7299
|
clearSelection();
|
|
7381
|
-
if (copyViewExitResolver) {
|
|
7382
|
-
copyViewRender?.();
|
|
7383
|
-
return;
|
|
7384
|
-
}
|
|
7385
7300
|
if (fixedInput.isPaused()) {
|
|
7386
7301
|
renderHistory(output, history, fixedInput.getInputLines());
|
|
7387
7302
|
fixedInput.repaint(buffer, cursorPos);
|
|
@@ -7475,7 +7390,7 @@ ${err.message}` : ""}`
|
|
|
7475
7390
|
};
|
|
7476
7391
|
runWakeHandler = (event) => {
|
|
7477
7392
|
if (done) return;
|
|
7478
|
-
if (busy || fixedInput.isPaused()
|
|
7393
|
+
if (busy || fixedInput.isPaused()) {
|
|
7479
7394
|
const { actionGateHandler, confirmDestructiveAction } = buildInteractiveTurnHandlers();
|
|
7480
7395
|
ensureChatQueueBinding(actionGateHandler, confirmDestructiveAction).enqueue(event);
|
|
7481
7396
|
if (fixedInput.active && !fixedInput.isPaused()) {
|
|
@@ -7537,49 +7452,6 @@ ${err.message}` : ""}`
|
|
|
7537
7452
|
};
|
|
7538
7453
|
const handleInputToken = async (sequence) => {
|
|
7539
7454
|
if (done) return;
|
|
7540
|
-
if (copyViewExitResolver) {
|
|
7541
|
-
const tty = output;
|
|
7542
|
-
const visibleHeight = Math.max(1, (tty.rows ?? 24) - 3);
|
|
7543
|
-
const lines = buildCopyViewLines(history);
|
|
7544
|
-
const maxScrollTop = Math.max(0, lines.length - visibleHeight);
|
|
7545
|
-
const scrollAction2 = parseScrollAction(sequence);
|
|
7546
|
-
if (scrollAction2) {
|
|
7547
|
-
switch (scrollAction2) {
|
|
7548
|
-
case "page-up":
|
|
7549
|
-
copyViewScrollTop = Math.max(0, copyViewScrollTop - visibleHeight);
|
|
7550
|
-
break;
|
|
7551
|
-
case "page-down":
|
|
7552
|
-
copyViewScrollTop = Math.min(maxScrollTop, copyViewScrollTop + visibleHeight);
|
|
7553
|
-
break;
|
|
7554
|
-
case "half-page-up":
|
|
7555
|
-
copyViewScrollTop = Math.max(0, copyViewScrollTop - Math.max(1, Math.floor(visibleHeight / 2)));
|
|
7556
|
-
break;
|
|
7557
|
-
case "wheel-up":
|
|
7558
|
-
copyViewScrollTop = Math.max(0, copyViewScrollTop - WHEEL_SCROLL_LINES);
|
|
7559
|
-
break;
|
|
7560
|
-
case "half-page-down":
|
|
7561
|
-
copyViewScrollTop = Math.min(maxScrollTop, copyViewScrollTop + Math.max(1, Math.floor(visibleHeight / 2)));
|
|
7562
|
-
break;
|
|
7563
|
-
case "wheel-down":
|
|
7564
|
-
copyViewScrollTop = Math.min(maxScrollTop, copyViewScrollTop + WHEEL_SCROLL_LINES);
|
|
7565
|
-
break;
|
|
7566
|
-
case "top":
|
|
7567
|
-
copyViewScrollTop = 0;
|
|
7568
|
-
break;
|
|
7569
|
-
case "bottom":
|
|
7570
|
-
copyViewScrollTop = maxScrollTop;
|
|
7571
|
-
break;
|
|
7572
|
-
}
|
|
7573
|
-
copyViewRender?.();
|
|
7574
|
-
return;
|
|
7575
|
-
}
|
|
7576
|
-
if (sequence === "\x1B" || sequence === "\r" || sequence === "\n" || sequence === "") {
|
|
7577
|
-
const exitCopyView = copyViewExitResolver;
|
|
7578
|
-
copyViewExitResolver = null;
|
|
7579
|
-
exitCopyView();
|
|
7580
|
-
}
|
|
7581
|
-
return;
|
|
7582
|
-
}
|
|
7583
7455
|
if (modalOwnsKeyboard) {
|
|
7584
7456
|
rawActionGateTokenHandler?.(sequence);
|
|
7585
7457
|
return;
|
|
@@ -7742,17 +7614,6 @@ ${merged}` : merged;
|
|
|
7742
7614
|
const result = applyTuiInputKey(buffer, sequence, {}, cursorPos, {
|
|
7743
7615
|
pasteStore
|
|
7744
7616
|
});
|
|
7745
|
-
if (result.copyView) {
|
|
7746
|
-
const opened = await openCopyView();
|
|
7747
|
-
if (!opened) {
|
|
7748
|
-
history.followBottom = true;
|
|
7749
|
-
startTurn(history, "assistant");
|
|
7750
|
-
appendToCurrentTurn(history, t("copyNothing"));
|
|
7751
|
-
finalizeCurrentTurn(history);
|
|
7752
|
-
paintFrame(buffer);
|
|
7753
|
-
}
|
|
7754
|
-
return;
|
|
7755
|
-
}
|
|
7756
7617
|
if (result.redraw) {
|
|
7757
7618
|
resetHistoryFrameDiffCache(output);
|
|
7758
7619
|
renderHistoryToOutput();
|