nolo-cli 0.14.0-alpha.1 → 0.14.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/{_executeModel-SQVV6CXR.js → _executeModel-KMUDFYY2.js} +16 -16
  2. package/{action-Q5CBVUV5.js → action-N3KXFO5V.js} +3 -3
  3. package/{addContentAction-ZCJJ3XOL.js → addContentAction-4Z762DMR.js} +2 -2
  4. package/{addDialogAgentAction-ROUQPBVI.js → addDialogAgentAction-FALLEKPR.js} +1 -1
  5. package/{agentDeleteCommand-TSY5OSG7.js → agentDeleteCommand-AZDVM4HQ.js} +8 -8
  6. package/{agentEmailCommands-YX57M3P7.js → agentEmailCommands-AP6MX4XN.js} +19 -19
  7. package/{agentListCommands-S65H4AVT.js → agentListCommands-OJLOXSKL.js} +9 -9
  8. package/{agentMachineCommands-ELNLSTE4.js → agentMachineCommands-G4T4GU42.js} +8 -8
  9. package/{agentRecordCommands-HVCGO2XK.js → agentRecordCommands-RNENEXQI.js} +19 -19
  10. package/{agentRunCommand-EOFDKKFI.js → agentRunCommand-2VTOTQWA.js} +19 -19
  11. package/{agentRuntimeLocal-F4FWS5Z4.js → agentRuntimeLocal-4CM3VHR3.js} +5 -5
  12. package/{agentSlice-R3WAV3VG.js → agentSlice-BLHSFM3Q.js} +2 -2
  13. package/{chunk-HXPBV44X.js → chunk-2Q5FTOQA.js} +34 -23
  14. package/{chunk-BRODTPXY.js → chunk-33K5FKRL.js} +1 -1
  15. package/{chunk-SJQVOEIV.js → chunk-3B2LFO6R.js} +5 -2
  16. package/{chunk-2MW6QFIQ.js → chunk-3FCSMQAC.js} +1 -1
  17. package/{chunk-YX4H7EP4.js → chunk-4UUJFFMK.js} +1 -1
  18. package/{chunk-TSJBYH7X.js → chunk-5R73BS7Y.js} +1 -1
  19. package/{chunk-V6PGKRZC.js → chunk-A5V7UEZJ.js} +1 -1
  20. package/{chunk-CFX7LP6W.js → chunk-BHK5ZAW7.js} +1 -1
  21. package/{chunk-3DKS6UER.js → chunk-BMZRD37B.js} +74 -34
  22. package/{chunk-BHKOPLWJ.js → chunk-CPGQAMHA.js} +4 -4
  23. package/{chunk-7ULBTAQK.js → chunk-DQUUZXUZ.js} +9 -9
  24. package/{chunk-O2S35KSZ.js → chunk-GGQW6DXG.js} +2 -2
  25. package/{chunk-AEMXZOAK.js → chunk-HJAMZQFI.js} +6 -6
  26. package/{chunk-ZEYSZ5WG.js → chunk-LVJFD5HS.js} +18 -18
  27. package/{chunk-K4S6CYKK.js → chunk-ONJIZ7UF.js} +13 -13
  28. package/{chunk-CANREHJB.js → chunk-RTHJF57Z.js} +1 -1
  29. package/{chunk-QRBZS6G4.js → chunk-RZALKBP4.js} +2 -2
  30. package/{chunk-EC2EU2F4.js → chunk-S5UACFUP.js} +54 -2
  31. package/{chunk-XZY4TCZO.js → chunk-S6V2Y72C.js} +1 -1
  32. package/{chunk-ACPNKI3V.js → chunk-SE4YDESE.js} +3 -3
  33. package/{chunk-DSCG2DY5.js → chunk-T3X232L6.js} +1 -1
  34. package/{chunk-AGUNTRZV.js → chunk-TLNEQI2R.js} +1 -1
  35. package/{chunk-FLY6L3KA.js → chunk-TQCONXQ3.js} +1 -1
  36. package/{chunk-QV25QXE2.js → chunk-V6VXDXGY.js} +2 -2
  37. package/{chunk-2KNEWIDU.js → chunk-VFGBWVXO.js} +2 -2
  38. package/{chunk-7H3O7ZA2.js → chunk-VQFY3VXW.js} +1 -1
  39. package/{chunk-IVOFAQ5R.js → chunk-XBZL4SGS.js} +3 -3
  40. package/{chunk-4GXQ74DF.js → chunk-XIDYAII4.js} +2 -2
  41. package/{createAgentAutomationAction-LL2UAZL3.js → createAgentAutomationAction-RIOI4YZI.js} +7 -7
  42. package/{createDialogAction-MSMUS4NO.js → createDialogAction-QBHFBWM4.js} +8 -8
  43. package/{createPageAction-MGN4CQWL.js → createPageAction-GHVLL7YQ.js} +7 -7
  44. package/{dbSlice-35VY6LYX.js → dbSlice-7Q23HSWH.js} +1 -1
  45. package/{dialogCommands-7EKKHEGO.js → dialogCommands-BQDGLVMO.js} +9 -9
  46. package/{dialogSlice-ZRYCGVVH.js → dialogSlice-VNKDTTHR.js} +7 -7
  47. package/{docCreateCommands-YCU2BINI.js → docCreateCommands-K2MPMXYF.js} +8 -8
  48. package/{docDeleteCommands-CEB54GNO.js → docDeleteCommands-NBAARB77.js} +9 -9
  49. package/{docReadCommands-Z2OZTAIA.js → docReadCommands-S3MO5RPS.js} +8 -8
  50. package/{docStore-AYLR7HES.js → docStore-W4KEEPCW.js} +8 -8
  51. package/{docUpdateCommands-VU2TNBPM.js → docUpdateCommands-EHEI7FCE.js} +8 -8
  52. package/{handleSendMessageAction-D4UALBU5.js → handleSendMessageAction-6BFLKGWQ.js} +7 -7
  53. package/index.js +35 -35
  54. package/{machineCommands-65QZPPET.js → machineCommands-R27VIC5L.js} +18 -18
  55. package/{machineWsRunDispatch-35QVFHKA.js → machineWsRunDispatch-5JH6QGHK.js} +18 -18
  56. package/package.json +1 -1
  57. package/{readlineWorkspace-U4PN6GH2.js → readlineWorkspace-RJ3TDGEK.js} +153 -39
  58. package/{removeDialogAgentAction-DPSDJL5F.js → removeDialogAgentAction-WKHZT6VJ.js} +3 -3
  59. package/{runAgentClientLoop-HND2XKNI.js → runAgentClientLoop-6D7FP7CK.js} +13 -13
  60. package/{setDialogExtraReferencesAction-6UPTOPJA.js → setDialogExtraReferencesAction-GCI5QU6E.js} +1 -1
  61. package/{setPrimaryDialogAgentAction-PFDHN53I.js → setPrimaryDialogAgentAction-NRO57AS6.js} +3 -3
  62. package/{settingSlice-6M2BKFW5.js → settingSlice-FTWZ5ZHT.js} +4 -2
  63. package/{spaceCommands-NP75DOJW.js → spaceCommands-4R63UST3.js} +8 -8
  64. package/{spaceSlice-J44RNCGS.js → spaceSlice-6PZEMRZM.js} +7 -7
  65. package/{streamAgentChatTurn-MNBTNJDU.js → streamAgentChatTurn-VW7433O6.js} +23 -17
  66. package/{tools-R2M77NZJ.js → tools-MWNK4RKM.js} +11 -11
  67. package/{updateDialogTitleAction-ERVV47T7.js → updateDialogTitleAction-3SKUPJIN.js} +7 -7
@@ -11,18 +11,18 @@ import {
11
11
  runtimeWorkspacePermissionPolicy,
12
12
  scopePermissionPolicyToRuntimeWorkspace,
13
13
  summarizeAgentConfigForLogs
14
- } from "./chunk-ACPNKI3V.js";
15
- import "./chunk-3DKS6UER.js";
14
+ } from "./chunk-SE4YDESE.js";
15
+ import "./chunk-BMZRD37B.js";
16
16
  import "./chunk-EHLHSX7R.js";
17
17
  import "./chunk-CMKUBIGW.js";
18
18
  import "./chunk-JBTJAPUF.js";
19
- import "./chunk-FLY6L3KA.js";
19
+ import "./chunk-TQCONXQ3.js";
20
20
  import "./chunk-VHBWHNVT.js";
21
- import "./chunk-DSCG2DY5.js";
21
+ import "./chunk-T3X232L6.js";
22
22
  import "./chunk-ATNTHIZI.js";
23
- import "./chunk-CANREHJB.js";
23
+ import "./chunk-RTHJF57Z.js";
24
24
  import "./chunk-OIMX7MM4.js";
25
- import "./chunk-HXPBV44X.js";
25
+ import "./chunk-2Q5FTOQA.js";
26
26
  import "./chunk-RQSOAMPJ.js";
27
27
  import "./chunk-OOIN7HSO.js";
28
28
  import "./chunk-KQHGZWSV.js";
@@ -31,30 +31,30 @@ import "./chunk-3LY4F7SV.js";
31
31
  import "./chunk-VP4WJWKW.js";
32
32
  import "./chunk-63W5N6P3.js";
33
33
  import "./chunk-VF4K2QE6.js";
34
- import "./chunk-IVOFAQ5R.js";
35
- import "./chunk-2KNEWIDU.js";
34
+ import "./chunk-XBZL4SGS.js";
35
+ import "./chunk-VFGBWVXO.js";
36
36
  import "./chunk-VC6OZXO5.js";
37
37
  import "./chunk-OWOHNGCN.js";
38
- import "./chunk-ZEYSZ5WG.js";
38
+ import "./chunk-LVJFD5HS.js";
39
39
  import "./chunk-V2J635L5.js";
40
40
  import "./chunk-MRC4Q34M.js";
41
41
  import "./chunk-MTU75CZ2.js";
42
42
  import "./chunk-CWMSB67P.js";
43
- import "./chunk-BHKOPLWJ.js";
44
- import "./chunk-QV25QXE2.js";
43
+ import "./chunk-CPGQAMHA.js";
44
+ import "./chunk-V6VXDXGY.js";
45
45
  import "./chunk-Z4NR32XR.js";
46
46
  import "./chunk-M76ECQRD.js";
47
47
  import "./chunk-WZSRQNQG.js";
48
- import "./chunk-BRODTPXY.js";
48
+ import "./chunk-33K5FKRL.js";
49
49
  import "./chunk-PB2DHBEQ.js";
50
50
  import "./chunk-ZNFJWEN4.js";
51
51
  import "./chunk-OIQPORYI.js";
52
- import "./chunk-7H3O7ZA2.js";
52
+ import "./chunk-VQFY3VXW.js";
53
53
  import "./chunk-3WGLLTK4.js";
54
54
  import "./chunk-UW3WOIWJ.js";
55
55
  import "./chunk-KTFJUPDW.js";
56
56
  import "./chunk-B4KT7RN2.js";
57
- import "./chunk-SJQVOEIV.js";
57
+ import "./chunk-3B2LFO6R.js";
58
58
  import "./chunk-5MMAK75Q.js";
59
59
  import "./chunk-OGGHETUE.js";
60
60
  import "./chunk-5CS33IBL.js";
@@ -74,12 +74,12 @@ import "./chunk-SOTZ6RDN.js";
74
74
  import "./chunk-IDZTNRP2.js";
75
75
  import "./chunk-IKXL2HZ3.js";
76
76
  import "./chunk-524BDL33.js";
77
- import "./chunk-CFX7LP6W.js";
78
- import "./chunk-EC2EU2F4.js";
77
+ import "./chunk-BHK5ZAW7.js";
78
+ import "./chunk-S5UACFUP.js";
79
79
  import "./chunk-Y5GCAMGP.js";
80
80
  import "./chunk-KX6YBIHG.js";
81
- import "./chunk-2MW6QFIQ.js";
82
- import "./chunk-V6PGKRZC.js";
81
+ import "./chunk-3FCSMQAC.js";
82
+ import "./chunk-A5V7UEZJ.js";
83
83
  import "./chunk-O4BU24WZ.js";
84
84
  import "./chunk-I42VC5KR.js";
85
85
  import "./chunk-WWC7I6TA.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolo-cli",
3
- "version": "0.14.0-alpha.1",
3
+ "version": "0.14.0-alpha.2",
4
4
  "type": "module",
5
5
  "description": "Agent-first terminal workspace for Nolo",
6
6
  "bin": {
@@ -3,7 +3,7 @@ import {
3
3
  normalizeDialogRecord,
4
4
  readDialogSnapshot,
5
5
  sortDialogs
6
- } from "./chunk-AGUNTRZV.js";
6
+ } from "./chunk-TLNEQI2R.js";
7
7
  import {
8
8
  ANSI_ESCAPE_REGEX,
9
9
  CLI_AUTO_TIER_AGENT_KEYS,
@@ -57,18 +57,18 @@ import {
57
57
  visibleWidth,
58
58
  wrapTextToLines,
59
59
  wrapTranscriptLine
60
- } from "./chunk-K4S6CYKK.js";
60
+ } from "./chunk-ONJIZ7UF.js";
61
61
  import "./chunk-6HYVJV7B.js";
62
62
  import {
63
63
  listFavoriteAgentIdsAcrossServers,
64
64
  listLocalCachedAgents,
65
65
  listRemoteAgents,
66
66
  listRemoteAgentsAcrossServers
67
- } from "./chunk-QRBZS6G4.js";
67
+ } from "./chunk-RZALKBP4.js";
68
68
  import "./chunk-ID4G2MAR.js";
69
69
  import {
70
70
  listUserRecordsFromServers
71
- } from "./chunk-YX4H7EP4.js";
71
+ } from "./chunk-4UUJFFMK.js";
72
72
  import "./chunk-3QAF2LTL.js";
73
73
  import {
74
74
  createCliLocalRuntimeAdapter,
@@ -76,7 +76,7 @@ import {
76
76
  parseCliLocale,
77
77
  setCliLocale,
78
78
  t
79
- } from "./chunk-3DKS6UER.js";
79
+ } from "./chunk-BMZRD37B.js";
80
80
  import "./chunk-EHLHSX7R.js";
81
81
  import "./chunk-CMKUBIGW.js";
82
82
  import "./chunk-JBTJAPUF.js";
@@ -84,24 +84,25 @@ import {
84
84
  getReadableCliDb
85
85
  } from "./chunk-W4NVOSFF.js";
86
86
  import {
87
+ deleteDbRecord,
87
88
  queryUserRecords,
88
89
  readDbRecord
89
- } from "./chunk-TSJBYH7X.js";
90
- import "./chunk-FLY6L3KA.js";
90
+ } from "./chunk-5R73BS7Y.js";
91
+ import "./chunk-TQCONXQ3.js";
91
92
  import {
92
93
  resolveCliAgentKeyInput
93
94
  } from "./chunk-VHBWHNVT.js";
94
95
  import "./chunk-LTRXGFMS.js";
95
- import "./chunk-DSCG2DY5.js";
96
+ import "./chunk-T3X232L6.js";
96
97
  import "./chunk-ATNTHIZI.js";
97
98
  import "./chunk-JEXVIMYZ.js";
98
99
  import {
99
100
  prepareTools
100
- } from "./chunk-CANREHJB.js";
101
+ } from "./chunk-RTHJF57Z.js";
101
102
  import "./chunk-OIMX7MM4.js";
102
103
  import {
103
104
  expandEnabledPacks
104
- } from "./chunk-HXPBV44X.js";
105
+ } from "./chunk-2Q5FTOQA.js";
105
106
  import "./chunk-RQSOAMPJ.js";
106
107
  import "./chunk-OOIN7HSO.js";
107
108
  import "./chunk-KQHGZWSV.js";
@@ -110,21 +111,21 @@ import "./chunk-3LY4F7SV.js";
110
111
  import "./chunk-VP4WJWKW.js";
111
112
  import "./chunk-63W5N6P3.js";
112
113
  import "./chunk-VF4K2QE6.js";
113
- import "./chunk-IVOFAQ5R.js";
114
- import "./chunk-2KNEWIDU.js";
114
+ import "./chunk-XBZL4SGS.js";
115
+ import "./chunk-VFGBWVXO.js";
115
116
  import "./chunk-VC6OZXO5.js";
116
117
  import "./chunk-OWOHNGCN.js";
117
118
  import {
118
119
  extractReferenceKeysFromMessage
119
- } from "./chunk-ZEYSZ5WG.js";
120
+ } from "./chunk-LVJFD5HS.js";
120
121
  import {
121
122
  buildBuiltinSummaryContent
122
123
  } from "./chunk-V2J635L5.js";
123
124
  import "./chunk-MRC4Q34M.js";
124
125
  import "./chunk-MTU75CZ2.js";
125
126
  import "./chunk-CWMSB67P.js";
126
- import "./chunk-BHKOPLWJ.js";
127
- import "./chunk-QV25QXE2.js";
127
+ import "./chunk-CPGQAMHA.js";
128
+ import "./chunk-V6VXDXGY.js";
128
129
  import "./chunk-Z4NR32XR.js";
129
130
  import "./chunk-M76ECQRD.js";
130
131
  import {
@@ -135,14 +136,14 @@ import {
135
136
  buildLocalWorkspaceOpenAiTools,
136
137
  buildLocalWorkspaceToolset,
137
138
  getProcessRegistry
138
- } from "./chunk-BRODTPXY.js";
139
+ } from "./chunk-33K5FKRL.js";
139
140
  import "./chunk-PB2DHBEQ.js";
140
141
  import "./chunk-ZNFJWEN4.js";
141
142
  import "./chunk-OIQPORYI.js";
142
143
  import {
143
144
  readCommandActionGatePayload,
144
145
  resolveAgentImageInputSupport
145
- } from "./chunk-7H3O7ZA2.js";
146
+ } from "./chunk-VQFY3VXW.js";
146
147
  import "./chunk-3WGLLTK4.js";
147
148
  import {
148
149
  buildCurrentTimeBlock,
@@ -159,7 +160,7 @@ import {
159
160
  getModelContextWindow,
160
161
  planCompression,
161
162
  serializeMessageContent
162
- } from "./chunk-SJQVOEIV.js";
163
+ } from "./chunk-3B2LFO6R.js";
163
164
  import {
164
165
  clipCompactText
165
166
  } from "./chunk-5MMAK75Q.js";
@@ -197,12 +198,12 @@ import {
197
198
  } from "./chunk-IDZTNRP2.js";
198
199
  import "./chunk-IKXL2HZ3.js";
199
200
  import "./chunk-524BDL33.js";
200
- import "./chunk-CFX7LP6W.js";
201
- import "./chunk-EC2EU2F4.js";
201
+ import "./chunk-BHK5ZAW7.js";
202
+ import "./chunk-S5UACFUP.js";
202
203
  import "./chunk-Y5GCAMGP.js";
203
204
  import "./chunk-KX6YBIHG.js";
204
- import "./chunk-2MW6QFIQ.js";
205
- import "./chunk-V6PGKRZC.js";
205
+ import "./chunk-3FCSMQAC.js";
206
+ import "./chunk-A5V7UEZJ.js";
206
207
  import "./chunk-O4BU24WZ.js";
207
208
  import "./chunk-I42VC5KR.js";
208
209
  import "./chunk-WWC7I6TA.js";
@@ -609,11 +610,18 @@ function consumeSgrMouseSequence(buffer) {
609
610
  if (!buffer.startsWith("\x1B[<")) {
610
611
  return null;
611
612
  }
612
- const endIndex = buffer.search(/[Mm]/);
613
- if (endIndex === -1) return void 0;
614
- const candidate = buffer.slice(0, endIndex + 1);
615
- if (SGR_MOUSE_REGEX.test(candidate)) return candidate;
616
- return null;
613
+ const body = buffer.slice(3);
614
+ for (let index = 0; index < body.length; index += 1) {
615
+ const character = body[index];
616
+ if (character === "M" || character === "m") {
617
+ if (index !== body.length - 1) return null;
618
+ return SGR_MOUSE_REGEX.test(buffer) ? buffer : null;
619
+ }
620
+ if ((character < "0" || character > "9") && character !== ";") {
621
+ return null;
622
+ }
623
+ }
624
+ return void 0;
617
625
  }
618
626
  function parseScrollAction(sequence) {
619
627
  const mouse = SGR_MOUSE_REGEX.exec(sequence);
@@ -2736,7 +2744,8 @@ function renderContextPanel(state, colorEnabled = resolveCliColorEnabled()) {
2736
2744
  next("/agents ", ` ${t("contextNextAgents")}`),
2737
2745
  next("/doc attach <doc> ", ` ${t("contextNextDoc")}`),
2738
2746
  next("/skill attach <ref>", ` ${t("contextNextSkill")}`),
2739
- next("/new ", ` ${t("contextNextNew")}`)
2747
+ next("/new ", ` ${t("contextNextNew")}`),
2748
+ next("/clear ", ` ${t("contextNextClear")}`)
2740
2749
  ].join("\n");
2741
2750
  }
2742
2751
  function renderKnownAgents(colorEnabled = resolveCliColorEnabled()) {
@@ -2965,6 +2974,7 @@ function isForwardDeleteSequence(seq, key) {
2965
2974
  var SLASH_COMMANDS = [
2966
2975
  "/help",
2967
2976
  "/new",
2977
+ "/clear",
2968
2978
  "/compact",
2969
2979
  "/theme",
2970
2980
  "/density",
@@ -3333,6 +3343,18 @@ function handleTuiInput(input, state) {
3333
3343
  case "/exit":
3334
3344
  case "/quit":
3335
3345
  return { nextState: state, output: t("bye"), action: { type: "exit" } };
3346
+ case "/clear":
3347
+ if (argText || !state.dialogId) {
3348
+ return {
3349
+ nextState: state,
3350
+ output: state.dialogId ? t("clearUsage") : t("clearNoDialog")
3351
+ };
3352
+ }
3353
+ return {
3354
+ nextState: state,
3355
+ output: t("clearingDialog"),
3356
+ action: { type: "clear", dialogId: state.dialogId }
3357
+ };
3336
3358
  case "/new":
3337
3359
  return {
3338
3360
  nextState: {
@@ -4019,6 +4041,19 @@ function renderTurnBlock(role, content, contentWidth, colorEnabled) {
4019
4041
  }
4020
4042
  return lines;
4021
4043
  }
4044
+ function buildCopyViewLines(history) {
4045
+ const turns = [...history.turns];
4046
+ if (history.currentRole !== null) {
4047
+ turns.push({ role: history.currentRole, content: history.currentContent });
4048
+ }
4049
+ const lines = [];
4050
+ for (const [index, turn] of turns.entries()) {
4051
+ if (index > 0) lines.push("");
4052
+ const normalized = stripAnsi(turn.content).replace(/\r\n/g, "\n").replace(/\r/g, "\n");
4053
+ lines.push(...normalized.split("\n"));
4054
+ }
4055
+ return lines;
4056
+ }
4022
4057
  function buildHistoryLines(history, contentWidth) {
4023
4058
  const colorEnabled = resolveCliColorEnabled();
4024
4059
  const density = getActiveDensity();
@@ -4558,6 +4593,7 @@ function createRawInputDecoder(onToken, options) {
4558
4593
  }
4559
4594
  if (!tail) return;
4560
4595
  if (forceCompleteOpenPaste) {
4596
+ if (consumeSgrMouseSequence(tail) === void 0) return;
4561
4597
  emitCodePoints(tail);
4562
4598
  return;
4563
4599
  }
@@ -4585,6 +4621,7 @@ function createRawInputDecoder(onToken, options) {
4585
4621
  for (const token of tokens) onToken(token);
4586
4622
  if (pendingBuffer.startsWith(PASTE_START)) return;
4587
4623
  if (pendingBuffer.length > 0) {
4624
+ if (consumeSgrMouseSequence(pendingBuffer) === void 0) return;
4588
4625
  timer = setTimeout(() => flushEscPending(true), timeoutMs);
4589
4626
  }
4590
4627
  return;
@@ -5066,6 +5103,7 @@ async function startTuiWorkspace(options) {
5066
5103
  prefetchAgentCatalog({ env: options.env ?? process.env });
5067
5104
  const input = options.input ?? defaultInput;
5068
5105
  const output = options.output ?? defaultOutput;
5106
+ const fetchImpl = options.fetchImpl ?? fetch;
5069
5107
  const spawnRunner = options.spawnRunner ?? spawnProcess;
5070
5108
  const selfUpdater = options.selfUpdater ?? ((target) => runSelfUpdate({ output: target }));
5071
5109
  if (output.isTTY) {
@@ -5110,6 +5148,8 @@ async function startTuiWorkspace(options) {
5110
5148
  const activityReporter = (label) => activityIndicator.report(label);
5111
5149
  let explicitAgentSwitch = false;
5112
5150
  let copyViewExitResolver = null;
5151
+ let copyViewRender = null;
5152
+ let copyViewScrollTop = 0;
5113
5153
  const history = createTurnHistory();
5114
5154
  const dialogHost = createDialogHost({
5115
5155
  composer: {
@@ -5182,27 +5222,43 @@ async function startTuiWorkspace(options) {
5182
5222
  return text || null;
5183
5223
  };
5184
5224
  const openCopyView = async () => {
5185
- const text = readLatestAssistantReply();
5186
- if (!text) return false;
5225
+ const lines = buildCopyViewLines(history);
5226
+ if (lines.length === 0) return false;
5187
5227
  if (!isInteractiveInput(input)) {
5188
- output.write(`${text}
5228
+ output.write(`${lines.join("\n")}
5189
5229
  `);
5190
5230
  return true;
5191
5231
  }
5232
+ const tty = output;
5233
+ const renderCopyView = () => {
5234
+ const rows = Math.max(1, tty.rows ?? 24);
5235
+ const columns = Math.max(1, tty.columns ?? 80);
5236
+ const copyLines = buildCopyViewLines(history);
5237
+ const visibleHeight = Math.max(1, rows - 3);
5238
+ const maxScrollTop = Math.max(0, copyLines.length - visibleHeight);
5239
+ copyViewScrollTop = Math.max(0, Math.min(copyViewScrollTop, maxScrollTop));
5240
+ let frame = "\x1B[2J\x1B[H";
5241
+ frame += `${t("copyViewTitle")}
5242
+ `;
5243
+ for (let index = 0; index < visibleHeight; index++) {
5244
+ frame += `${fitAnsiLine(copyLines[copyViewScrollTop + index] ?? "", columns)}
5245
+ `;
5246
+ }
5247
+ frame += `${t("copyViewHint")}
5248
+ `;
5249
+ output.write(frame);
5250
+ };
5192
5251
  fixedInput.pause();
5252
+ copyViewScrollTop = 0;
5253
+ copyViewRender = renderCopyView;
5193
5254
  try {
5194
- output.write("\x1B[2J\x1B[H");
5195
- output.write(`${t("copyViewTitle")}
5196
-
5197
- ${text}
5198
-
5199
- ${t("copyViewHint")}
5200
- `);
5255
+ renderCopyView();
5201
5256
  await new Promise((resolve2) => {
5202
5257
  copyViewExitResolver = resolve2;
5203
5258
  });
5204
5259
  } finally {
5205
5260
  copyViewExitResolver = null;
5261
+ copyViewRender = null;
5206
5262
  output.write("\x1B[2J\x1B[H");
5207
5263
  fixedInput.resumeFromDialog();
5208
5264
  flushPendingRender();
@@ -5386,6 +5442,25 @@ ${t("copyViewHint")}
5386
5442
  }
5387
5443
  if (result.action?.type === "exit") return true;
5388
5444
  if (result.action?.type === "clear") {
5445
+ if (result.action.dialogId) {
5446
+ const authToken = options.env?.AUTH_TOKEN ?? options.env?.AUTH ?? options.env?.BENCHMARK_AUTH_TOKEN ?? "";
5447
+ try {
5448
+ await deleteDbRecord({
5449
+ // The messages delete endpoint expects the bare dialogId; dialogKey
5450
+ // is the persisted dialog record key and has a different prefix.
5451
+ dbKey: result.action.dialogId,
5452
+ deleteOptions: { type: "messages" },
5453
+ authToken,
5454
+ fetchImpl,
5455
+ serverUrl: state.serverUrl
5456
+ });
5457
+ emitCommandOutput(t("clearedDialog"));
5458
+ } catch (error) {
5459
+ emitCommandOutput(`[nolo] Clear failed: ${toErrorMessage(error)}
5460
+ `);
5461
+ return false;
5462
+ }
5463
+ }
5389
5464
  clearCollapsedPasteStore(pasteStore);
5390
5465
  history.turns.length = 0;
5391
5466
  history.currentRole = null;
@@ -5737,7 +5812,11 @@ ${err.message}` : ""}`
5737
5812
  fixedInput.repaint(draft, cursorPos);
5738
5813
  };
5739
5814
  const onResize = () => {
5740
- if (done || copyViewExitResolver) return;
5815
+ if (done) return;
5816
+ if (copyViewExitResolver) {
5817
+ copyViewRender?.();
5818
+ return;
5819
+ }
5741
5820
  if (fixedInput.isPaused()) {
5742
5821
  renderHistory(output, history, fixedInput.getInputLines());
5743
5822
  fixedInput.repaint(buffer, cursorPos);
@@ -5764,6 +5843,41 @@ ${err.message}` : ""}`
5764
5843
  const handleInputToken = async (sequence) => {
5765
5844
  if (done) return;
5766
5845
  if (copyViewExitResolver) {
5846
+ const tty = output;
5847
+ const visibleHeight = Math.max(1, (tty.rows ?? 24) - 3);
5848
+ const lines = buildCopyViewLines(history);
5849
+ const maxScrollTop = Math.max(0, lines.length - visibleHeight);
5850
+ const scrollAction2 = parseScrollAction(sequence);
5851
+ if (scrollAction2) {
5852
+ switch (scrollAction2) {
5853
+ case "page-up":
5854
+ copyViewScrollTop = Math.max(0, copyViewScrollTop - visibleHeight);
5855
+ break;
5856
+ case "page-down":
5857
+ copyViewScrollTop = Math.min(maxScrollTop, copyViewScrollTop + visibleHeight);
5858
+ break;
5859
+ case "half-page-up":
5860
+ copyViewScrollTop = Math.max(0, copyViewScrollTop - Math.max(1, Math.floor(visibleHeight / 2)));
5861
+ break;
5862
+ case "wheel-up":
5863
+ copyViewScrollTop = Math.max(0, copyViewScrollTop - WHEEL_SCROLL_LINES);
5864
+ break;
5865
+ case "half-page-down":
5866
+ copyViewScrollTop = Math.min(maxScrollTop, copyViewScrollTop + Math.max(1, Math.floor(visibleHeight / 2)));
5867
+ break;
5868
+ case "wheel-down":
5869
+ copyViewScrollTop = Math.min(maxScrollTop, copyViewScrollTop + WHEEL_SCROLL_LINES);
5870
+ break;
5871
+ case "top":
5872
+ copyViewScrollTop = 0;
5873
+ break;
5874
+ case "bottom":
5875
+ copyViewScrollTop = maxScrollTop;
5876
+ break;
5877
+ }
5878
+ copyViewRender?.();
5879
+ return;
5880
+ }
5767
5881
  if (sequence === "\x1B" || sequence === "\r" || sequence === "\n" || sequence === "") {
5768
5882
  const exitCopyView = copyViewExitResolver;
5769
5883
  copyViewExitResolver = null;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cleanupCliSessionForDialog
3
- } from "./chunk-QV25QXE2.js";
3
+ } from "./chunk-V6VXDXGY.js";
4
4
  import {
5
5
  getPrimaryDialogAgentId,
6
6
  removeDialogAgentId
@@ -12,13 +12,13 @@ import "./chunk-BYXBJQAS.js";
12
12
  import {
13
13
  getActiveDialogKey
14
14
  } from "./chunk-3ASDTTEI.js";
15
- import "./chunk-EC2EU2F4.js";
15
+ import "./chunk-S5UACFUP.js";
16
16
  import "./chunk-Y5GCAMGP.js";
17
17
  import "./chunk-KX6YBIHG.js";
18
18
  import {
19
19
  patch,
20
20
  selectById
21
- } from "./chunk-V6PGKRZC.js";
21
+ } from "./chunk-A5V7UEZJ.js";
22
22
  import "./chunk-O4BU24WZ.js";
23
23
  import "./chunk-I42VC5KR.js";
24
24
  import "./chunk-WWC7I6TA.js";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  fetchAgentContexts
3
- } from "./chunk-XZY4TCZO.js";
3
+ } from "./chunk-S6V2Y72C.js";
4
4
  import {
5
5
  generateRequestBody,
6
6
  mergeReferences,
7
7
  performFetchRequest
8
- } from "./chunk-AEMXZOAK.js";
8
+ } from "./chunk-HJAMZQFI.js";
9
9
  import "./chunk-OIMX7MM4.js";
10
10
  import {
11
11
  findToolExecutor,
12
12
  getToolResultErrorData
13
- } from "./chunk-HXPBV44X.js";
13
+ } from "./chunk-2Q5FTOQA.js";
14
14
  import "./chunk-RQSOAMPJ.js";
15
15
  import "./chunk-OOIN7HSO.js";
16
16
  import "./chunk-KQHGZWSV.js";
@@ -19,18 +19,18 @@ import "./chunk-3LY4F7SV.js";
19
19
  import "./chunk-VP4WJWKW.js";
20
20
  import "./chunk-63W5N6P3.js";
21
21
  import "./chunk-VF4K2QE6.js";
22
- import "./chunk-IVOFAQ5R.js";
23
- import "./chunk-2KNEWIDU.js";
22
+ import "./chunk-XBZL4SGS.js";
23
+ import "./chunk-VFGBWVXO.js";
24
24
  import "./chunk-VC6OZXO5.js";
25
25
  import {
26
26
  updateTokensAction
27
- } from "./chunk-ZEYSZ5WG.js";
27
+ } from "./chunk-LVJFD5HS.js";
28
28
  import "./chunk-V2J635L5.js";
29
29
  import "./chunk-MRC4Q34M.js";
30
30
  import "./chunk-MTU75CZ2.js";
31
31
  import "./chunk-CWMSB67P.js";
32
- import "./chunk-BHKOPLWJ.js";
33
- import "./chunk-QV25QXE2.js";
32
+ import "./chunk-CPGQAMHA.js";
33
+ import "./chunk-V6VXDXGY.js";
34
34
  import "./chunk-Z4NR32XR.js";
35
35
  import "./chunk-M76ECQRD.js";
36
36
  import "./chunk-WZSRQNQG.js";
@@ -39,7 +39,7 @@ import "./chunk-KTFJUPDW.js";
39
39
  import {
40
40
  canonicalizeToolName
41
41
  } from "./chunk-B4KT7RN2.js";
42
- import "./chunk-SJQVOEIV.js";
42
+ import "./chunk-3B2LFO6R.js";
43
43
  import "./chunk-5MMAK75Q.js";
44
44
  import {
45
45
  getApiEndpoint
@@ -58,16 +58,16 @@ import "./chunk-HNMXYYJR.js";
58
58
  import "./chunk-SOTZ6RDN.js";
59
59
  import "./chunk-IKXL2HZ3.js";
60
60
  import "./chunk-524BDL33.js";
61
- import "./chunk-CFX7LP6W.js";
61
+ import "./chunk-BHK5ZAW7.js";
62
62
  import {
63
63
  selectCurrentServer
64
- } from "./chunk-EC2EU2F4.js";
64
+ } from "./chunk-S5UACFUP.js";
65
65
  import "./chunk-Y5GCAMGP.js";
66
66
  import "./chunk-KX6YBIHG.js";
67
- import "./chunk-2MW6QFIQ.js";
67
+ import "./chunk-3FCSMQAC.js";
68
68
  import {
69
69
  read
70
- } from "./chunk-V6PGKRZC.js";
70
+ } from "./chunk-A5V7UEZJ.js";
71
71
  import "./chunk-O4BU24WZ.js";
72
72
  import "./chunk-I42VC5KR.js";
73
73
  import "./chunk-WWC7I6TA.js";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  patch,
9
9
  selectById
10
- } from "./chunk-V6PGKRZC.js";
10
+ } from "./chunk-A5V7UEZJ.js";
11
11
  import "./chunk-O4BU24WZ.js";
12
12
  import "./chunk-I42VC5KR.js";
13
13
  import "./chunk-WWC7I6TA.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cleanupCliSessionForDialog
3
- } from "./chunk-QV25QXE2.js";
3
+ } from "./chunk-V6VXDXGY.js";
4
4
  import {
5
5
  getPrimaryDialogAgentId,
6
6
  replacePrimaryDialogAgentId
@@ -12,13 +12,13 @@ import "./chunk-BYXBJQAS.js";
12
12
  import {
13
13
  getActiveDialogKey
14
14
  } from "./chunk-3ASDTTEI.js";
15
- import "./chunk-EC2EU2F4.js";
15
+ import "./chunk-S5UACFUP.js";
16
16
  import "./chunk-Y5GCAMGP.js";
17
17
  import "./chunk-KX6YBIHG.js";
18
18
  import {
19
19
  patch,
20
20
  selectById
21
- } from "./chunk-V6PGKRZC.js";
21
+ } from "./chunk-A5V7UEZJ.js";
22
22
  import "./chunk-O4BU24WZ.js";
23
23
  import "./chunk-I42VC5KR.js";
24
24
  import "./chunk-WWC7I6TA.js";
@@ -57,6 +57,7 @@ import {
57
57
  selectSidebarWidth,
58
58
  selectSpaceContextLevel,
59
59
  selectSyncServers,
60
+ selectSystemBuiltinSkills,
60
61
  selectTheme,
61
62
  selectThemeFollowsSystem,
62
63
  selectThemeMode,
@@ -86,10 +87,10 @@ import {
86
87
  toggleEditorWordCount,
87
88
  toggleEnableReadCurrentSpace,
88
89
  toggleShowThinking
89
- } from "./chunk-EC2EU2F4.js";
90
+ } from "./chunk-S5UACFUP.js";
90
91
  import "./chunk-Y5GCAMGP.js";
91
92
  import "./chunk-KX6YBIHG.js";
92
- import "./chunk-V6PGKRZC.js";
93
+ import "./chunk-A5V7UEZJ.js";
93
94
  import "./chunk-O4BU24WZ.js";
94
95
  import "./chunk-I42VC5KR.js";
95
96
  import "./chunk-WWC7I6TA.js";
@@ -167,6 +168,7 @@ export {
167
168
  selectSidebarWidth,
168
169
  selectSpaceContextLevel,
169
170
  selectSyncServers,
171
+ selectSystemBuiltinSkills,
170
172
  selectTheme,
171
173
  selectThemeFollowsSystem,
172
174
  selectThemeMode,
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  readLiveDbRecordAfterTombstoneMerge
3
- } from "./chunk-YX4H7EP4.js";
3
+ } from "./chunk-4UUJFFMK.js";
4
4
  import {
5
5
  readDbRecord,
6
6
  writeAgentRecord
7
- } from "./chunk-TSJBYH7X.js";
8
- import "./chunk-FLY6L3KA.js";
7
+ } from "./chunk-5R73BS7Y.js";
8
+ import "./chunk-TQCONXQ3.js";
9
9
  import "./chunk-VHBWHNVT.js";
10
10
  import "./chunk-KQHGZWSV.js";
11
11
  import {
12
12
  authRoutes
13
13
  } from "./chunk-MRC4Q34M.js";
14
- import "./chunk-BRODTPXY.js";
14
+ import "./chunk-33K5FKRL.js";
15
15
  import "./chunk-PB2DHBEQ.js";
16
16
  import "./chunk-ZNFJWEN4.js";
17
17
  import "./chunk-OIQPORYI.js";
18
- import "./chunk-7H3O7ZA2.js";
18
+ import "./chunk-VQFY3VXW.js";
19
19
  import "./chunk-3WGLLTK4.js";
20
20
  import "./chunk-UW3WOIWJ.js";
21
21
  import "./chunk-KTFJUPDW.js";
22
22
  import "./chunk-B4KT7RN2.js";
23
- import "./chunk-SJQVOEIV.js";
23
+ import "./chunk-3B2LFO6R.js";
24
24
  import "./chunk-5MMAK75Q.js";
25
25
  import "./chunk-OGGHETUE.js";
26
26
  import "./chunk-5CS33IBL.js";
@@ -37,10 +37,10 @@ import "./chunk-KX6YBIHG.js";
37
37
  import {
38
38
  createSpaceKey,
39
39
  normalizeSpaceId
40
- } from "./chunk-2MW6QFIQ.js";
40
+ } from "./chunk-3FCSMQAC.js";
41
41
  import {
42
42
  resolveFileCategory
43
- } from "./chunk-V6PGKRZC.js";
43
+ } from "./chunk-A5V7UEZJ.js";
44
44
  import "./chunk-O4BU24WZ.js";
45
45
  import "./chunk-I42VC5KR.js";
46
46
  import "./chunk-WWC7I6TA.js";