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.
@@ -8,8 +8,8 @@ import {
8
8
  } from "./chunk-G7HTVVFL.js";
9
9
  import {
10
10
  runAgentCreateCommand
11
- } from "./chunk-XLUTBJYU.js";
12
- import "./chunk-4LSQNSXE.js";
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-7RE5KJRG.js");
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-XLUTBJYU.js";
6
- import "./chunk-4LSQNSXE.js";
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-MIN2TNAM.js";
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-4LSQNSXE.js";
15
+ import "./chunk-OZOFURV5.js";
16
16
  import "./chunk-IEHZHWN7.js";
17
17
  import "./chunk-UNHKVD2N.js";
18
18
  import "./chunk-BY53PPQ2.js";
@@ -20,7 +20,7 @@ import {
20
20
  parseAgentRunEvent,
21
21
  t,
22
22
  toolLabel
23
- } from "./chunk-4LSQNSXE.js";
23
+ } from "./chunk-OZOFURV5.js";
24
24
  import {
25
25
  getReadableCliDb
26
26
  } from "./chunk-UNHKVD2N.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createCliLocalRuntimeAdapter,
3
3
  summarizeEndpoint
4
- } from "./chunk-4LSQNSXE.js";
4
+ } from "./chunk-OZOFURV5.js";
5
5
  import {
6
6
  clipMultilineText
7
7
  } from "./chunk-R7UWXBVG.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 or /copy view",
427
- zh: "\u7528\u6CD5\uFF1A/copy \u6216 /copy view"
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",
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearCliLocalRuntimePreparedAgentCache
3
- } from "./chunk-4LSQNSXE.js";
3
+ } from "./chunk-OZOFURV5.js";
4
4
  import {
5
5
  getReadableCliDb
6
6
  } from "./chunk-UNHKVD2N.js";
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-G55YHYDL.js");
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-DNEOXRTE.js");
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-DNEOXRTE.js");
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-DNEOXRTE.js");
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-M22DG56U.js");
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-M22DG56U.js");
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-M22DG56U.js");
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-M22DG56U.js");
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-B7HAFERS.js");
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-B7HAFERS.js");
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-B7HAFERS.js");
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-IJL73WA5.js");
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-IJL73WA5.js");
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-IJL73WA5.js");
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-EGSZ26XS.js");
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-O3LO3MRU.js";
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-4LSQNSXE.js";
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-O3LO3MRU.js";
15
- import "./chunk-4LSQNSXE.js";
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolo-cli",
3
- "version": "0.33.0-alpha.23",
3
+ "version": "0.33.0-alpha.24",
4
4
  "type": "module",
5
5
  "description": "Agent-first terminal workspace for Nolo",
6
6
  "bin": {
@@ -61,7 +61,7 @@ import {
61
61
  wrapTextToLines,
62
62
  wrapTranscriptLine,
63
63
  wrapTranscriptLineWithLayout
64
- } from "./chunk-MIN2TNAM.js";
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-4LSQNSXE.js";
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() || copyViewExitResolver) {
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();