nolo-cli 0.145.0-alpha.1 → 0.146.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-M3FASQ2Z.js → _executeModel-VI2ZFXGF.js} +16 -16
  2. package/{agentDeleteCommand-K7GCEEVS.js → agentDeleteCommand-6OGADD24.js} +8 -8
  3. package/{agentEmailCommands-MNXRO36L.js → agentEmailCommands-SKDSR6TX.js} +20 -20
  4. package/{agentListCommands-KMZR6VVM.js → agentListCommands-FRJZOOEG.js} +8 -8
  5. package/{agentMachineCommands-75TIBYDY.js → agentMachineCommands-JVHHRKJC.js} +9 -9
  6. package/{agentRecordCommands-RDO5L3N4.js → agentRecordCommands-RXABVKRC.js} +20 -20
  7. package/{agentRunCommand-FVJJPL27.js → agentRunCommand-4XJ3OGJ4.js} +21 -21
  8. package/{agentRunControl-MD72KLQA.js → agentRunControl-2SKCR4SB.js} +2 -2
  9. package/{agentRuntimeLocal-DAK7RCER.js → agentRuntimeLocal-QQCDFR7B.js} +8 -8
  10. package/{agentSlice-6MRJR2BJ.js → agentSlice-BBCMHUDH.js} +1 -1
  11. package/{appDeleteCommands-JMMXK3XT.js → appDeleteCommands-OGKQC2AM.js} +8 -8
  12. package/{appDeployCommands-JFU6GALI.js → appDeployCommands-Y2FV4JML.js} +8 -8
  13. package/{appDeployStatusCommands-AXTZ4GAN.js → appDeployStatusCommands-FNML5SUV.js} +8 -8
  14. package/{appGetCommands-CR2W3DCM.js → appGetCommands-4FOY7W5E.js} +8 -8
  15. package/{appListCommands-2TV6P3EU.js → appListCommands-E5SF6SIY.js} +8 -8
  16. package/{chatQueueReduxAdapter-CDOHVTSE.js → chatQueueReduxAdapter-JUUUM7BM.js} +5 -5
  17. package/{chunk-M76SRQ3H.js → chunk-27MYPW3V.js} +30 -12
  18. package/{chunk-L4KXQ6QP.js → chunk-4JMDLJAD.js} +0 -2
  19. package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
  20. package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
  21. package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
  22. package/{chunk-VZVTPDPL.js → chunk-6ECICFUL.js} +2 -2
  23. package/{chunk-I4A26N52.js → chunk-724HIKHT.js} +1 -1
  24. package/{chunk-QFPJEU36.js → chunk-CFT5HBGW.js} +1 -1
  25. package/{chunk-HKBFZONG.js → chunk-ECN5PIJP.js} +1 -1
  26. package/{chunk-F64B2W3R.js → chunk-ELYEQNUI.js} +9 -3
  27. package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
  28. package/{chunk-JLQKV2ZJ.js → chunk-HLUYTEBY.js} +1 -1
  29. package/{chunk-UMB7CHAY.js → chunk-HMYLUSAO.js} +3 -3
  30. package/{chunk-2TKVOEQF.js → chunk-IBHS2SAO.js} +5 -5
  31. package/{chunk-7YAK46ML.js → chunk-JGMAQ6M4.js} +2 -2
  32. package/{chunk-RHDOQWXZ.js → chunk-O7WXJIUI.js} +9 -9
  33. package/{chunk-62XHRZG4.js → chunk-OY5MN3QW.js} +2 -2
  34. package/{chunk-XNXNHAAP.js → chunk-QE6WT54C.js} +1 -1
  35. package/{chunk-A6FNUMCF.js → chunk-QIH323EV.js} +1 -1
  36. package/{chunk-5XYFIDFU.js → chunk-SX3H5GRF.js} +6 -6
  37. package/{chunk-ANX7Z7Z2.js → chunk-UE6THNRN.js} +11 -11
  38. package/{chunk-Y6XHJ4JJ.js → chunk-UUMOPF47.js} +13 -13
  39. package/{chunk-OKSJZ4UU.js → chunk-XTHMLDFS.js} +10 -10
  40. package/{chunk-QFZM5BFI.js → chunk-YB4IKYNP.js} +1 -1
  41. package/{chunk-VJ4FUWPC.js → chunk-YCHTTOE6.js} +3 -3
  42. package/{chunk-RVX32KGQ.js → chunk-ZSPC3ZTC.js} +1 -1
  43. package/{commandRegistry-ZF6YXQWV.js → commandRegistry-4OQNLR7J.js} +45 -45
  44. package/{contentThunks-6Y6ATG3A.js → contentThunks-UG5OLLTF.js} +6 -6
  45. package/{createAgentAutomationAction-OQTLA2FC.js → createAgentAutomationAction-NJD2PYVZ.js} +6 -6
  46. package/{createDialogAction-IF5EZMBD.js → createDialogAction-JURO7UNI.js} +7 -7
  47. package/{createPageAction-GU766R3L.js → createPageAction-66GF24KF.js} +6 -6
  48. package/{dialogCommands-QV7XAX2V.js → dialogCommands-KSPH6QOU.js} +8 -8
  49. package/{dialogSlice-CVHMDSVV.js → dialogSlice-ZUS3SSM7.js} +5 -5
  50. package/{docCreateCommands-FSBANQTO.js → docCreateCommands-B64BLZVJ.js} +8 -8
  51. package/{docDeleteCommands-4IR4YSGU.js → docDeleteCommands-UX2GXKUT.js} +8 -8
  52. package/{docReadCommands-4EYPGUE3.js → docReadCommands-5A6GF3XL.js} +8 -8
  53. package/{docStore-RQOWPNON.js → docStore-D7PX4CZE.js} +1 -1
  54. package/{docUpdateCommands-RW2BYLSE.js → docUpdateCommands-UTBGZPSR.js} +8 -8
  55. package/{handleSendMessageAction-UDTPG5WK.js → handleSendMessageAction-H3UDWSRC.js} +5 -5
  56. package/index.js +3 -3
  57. package/{machineCommands-WBQ4TCPD.js → machineCommands-6D7JZBWS.js} +20 -20
  58. package/{machineWsRunDispatch-7DNDXUOS.js → machineWsRunDispatch-YKFGCPFL.js} +20 -20
  59. package/package.json +1 -1
  60. package/{readlineWorkspace-LO6ZLFTO.js → readlineWorkspace-HZWPJELZ.js} +151 -175
  61. package/{runAgentClientLoop-KAYGKVTK.js → runAgentClientLoop-EX3DZPKM.js} +14 -14
  62. package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-ZBU76COE.js} +3 -3
  63. package/{spaceCommands-FA6RCZ2Y.js → spaceCommands-HZUAGZXH.js} +8 -8
  64. package/{streamAgentChatTurn-DFNDU2UY.js → streamAgentChatTurn-AWIN7723.js} +17 -17
  65. package/{tools-6HKH75NT.js → tools-6AILTEFE.js} +10 -10
  66. package/{tuiSummaryLlmCaller-CFFVXQWX.js → tuiSummaryLlmCaller-RVW6CJSK.js} +3 -3
  67. package/{updateDialogTitleAction-FFSYTLBC.js → updateDialogTitleAction-FX6HJK4R.js} +6 -6
@@ -76,7 +76,7 @@ import {
76
76
  wrapTextToLines,
77
77
  wrapTranscriptLine,
78
78
  wrapTranscriptLineWithLayout
79
- } from "./chunk-Y6XHJ4JJ.js";
79
+ } from "./chunk-UUMOPF47.js";
80
80
  import "./chunk-VJVNU77E.js";
81
81
  import "./chunk-BIDGLJQ3.js";
82
82
  import {
@@ -88,7 +88,7 @@ import {
88
88
  readTimestamp,
89
89
  setCliLocale,
90
90
  t
91
- } from "./chunk-M76SRQ3H.js";
91
+ } from "./chunk-27MYPW3V.js";
92
92
  import "./chunk-I4OPU5TK.js";
93
93
  import "./chunk-YUNJN43V.js";
94
94
  import "./chunk-62IL3KQV.js";
@@ -129,7 +129,7 @@ import {
129
129
  isRunRecordClaimed,
130
130
  listRunRecords,
131
131
  readRunRecord
132
- } from "./chunk-QFPJEU36.js";
132
+ } from "./chunk-CFT5HBGW.js";
133
133
  import "./chunk-EXAJ6DCR.js";
134
134
  import "./chunk-URMS4XY2.js";
135
135
  import "./chunk-ZOVKKMF6.js";
@@ -142,12 +142,12 @@ import "./chunk-ATNTHIZI.js";
142
142
  import "./chunk-JEXVIMYZ.js";
143
143
  import {
144
144
  prepareTools
145
- } from "./chunk-7YAK46ML.js";
145
+ } from "./chunk-JGMAQ6M4.js";
146
146
  import {
147
147
  buildResponseGuidelines
148
148
  } from "./chunk-EOARMOVD.js";
149
149
  import "./chunk-HS7MLR74.js";
150
- import "./chunk-OKSJZ4UU.js";
150
+ import "./chunk-XTHMLDFS.js";
151
151
  import "./chunk-2EE5UD3N.js";
152
152
  import "./chunk-5UTFL4QJ.js";
153
153
  import "./chunk-KQHGZWSV.js";
@@ -158,20 +158,18 @@ import {
158
158
  clipText,
159
159
  formatDuration,
160
160
  formatRunAge,
161
- getAgentRunStatusIcon,
162
161
  isAgentNameFallback,
163
162
  isAgentRunTerminalStatus,
164
163
  normalizeRunTitle,
165
164
  resolveRunLabel,
166
- runShowsLogTail,
167
165
  shortRunId
168
- } from "./chunk-L4KXQ6QP.js";
169
- import "./chunk-VZVTPDPL.js";
166
+ } from "./chunk-4JMDLJAD.js";
167
+ import "./chunk-6ECICFUL.js";
170
168
  import "./chunk-HNRASX3X.js";
171
169
  import "./chunk-YRRASA5Q.js";
172
170
  import "./chunk-63W5N6P3.js";
173
171
  import "./chunk-VF4K2QE6.js";
174
- import "./chunk-62XHRZG4.js";
172
+ import "./chunk-OY5MN3QW.js";
175
173
  import "./chunk-Z7IZQF56.js";
176
174
  import "./chunk-XPRWFQQK.js";
177
175
  import {
@@ -181,15 +179,15 @@ import {
181
179
  } from "./chunk-YPREESF4.js";
182
180
  import "./chunk-BJUDYFV5.js";
183
181
  import "./chunk-MEYIRKDN.js";
184
- import "./chunk-HKBFZONG.js";
182
+ import "./chunk-ECN5PIJP.js";
185
183
  import "./chunk-ZJ7UHBJS.js";
186
184
  import {
187
185
  extractReferenceKeysFromMessage
188
- } from "./chunk-ANX7Z7Z2.js";
189
- import "./chunk-MC4XLIJ7.js";
186
+ } from "./chunk-UE6THNRN.js";
187
+ import "./chunk-523DITKR.js";
190
188
  import "./chunk-YYLHWIW6.js";
191
189
  import "./chunk-6O4IK4V2.js";
192
- import "./chunk-UMB7CHAY.js";
190
+ import "./chunk-HMYLUSAO.js";
193
191
  import "./chunk-D76D3RTR.js";
194
192
  import "./chunk-5RGU3J7P.js";
195
193
  import "./chunk-M76ECQRD.js";
@@ -203,7 +201,7 @@ import "./chunk-GMVELWJG.js";
203
201
  import {
204
202
  buildSkillDiscoveryContextBlock,
205
203
  buildSkillDiscoveryContextLayer
206
- } from "./chunk-E4MARS3Q.js";
204
+ } from "./chunk-5GVBDNTO.js";
207
205
  import "./chunk-B2XUQXQX.js";
208
206
  import {
209
207
  expandEnabledPacks
@@ -216,12 +214,12 @@ import {
216
214
  formatToolOverflowMarker,
217
215
  getProcessRegistry,
218
216
  readCommandActionGatePayload
219
- } from "./chunk-RHDOQWXZ.js";
217
+ } from "./chunk-O7WXJIUI.js";
220
218
  import "./chunk-P6GMCCAT.js";
221
219
  import "./chunk-ZNFJWEN4.js";
222
- import "./chunk-A6FNUMCF.js";
220
+ import "./chunk-QIH323EV.js";
223
221
  import "./chunk-GMZLP5DV.js";
224
- import "./chunk-I4A26N52.js";
222
+ import "./chunk-724HIKHT.js";
225
223
  import "./chunk-5ZUL4CUO.js";
226
224
  import "./chunk-CQ3WA2NE.js";
227
225
  import "./chunk-2MBTWINN.js";
@@ -231,7 +229,7 @@ import {
231
229
  buildIdentityBlock,
232
230
  buildRuntimeGuidanceBlocks,
233
231
  resolveToolGuidedSections
234
- } from "./chunk-JLQKV2ZJ.js";
232
+ } from "./chunk-HLUYTEBY.js";
235
233
  import "./chunk-PUOC4YRO.js";
236
234
  import "./chunk-RGNEEJ3Y.js";
237
235
  import {
@@ -245,7 +243,7 @@ import {
245
243
  DEFAULT_CONTEXT_WINDOW,
246
244
  getModelContextWindow,
247
245
  normalizeUsage
248
- } from "./chunk-RVX32KGQ.js";
246
+ } from "./chunk-ZSPC3ZTC.js";
249
247
  import {
250
248
  buildCompactionMetricsFromPlan,
251
249
  buildCompactionUserContent,
@@ -255,7 +253,7 @@ import {
255
253
  formatMessagesForSummaryWithTruncation,
256
254
  planCompression,
257
255
  serializeMessageContent
258
- } from "./chunk-F64B2W3R.js";
256
+ } from "./chunk-ELYEQNUI.js";
259
257
  import {
260
258
  estimateTokenCount
261
259
  } from "./chunk-PSCNXBYA.js";
@@ -278,10 +276,10 @@ import {
278
276
  buildMemoryUseGuidanceLayer,
279
277
  partitionScopedBlocks,
280
278
  renderTurnContextBlocksWithScope
281
- } from "./chunk-DVINR3PL.js";
279
+ } from "./chunk-HDLLCBRF.js";
282
280
  import {
283
281
  buildUserResponseLanguageContext
284
- } from "./chunk-2GRGFCF6.js";
282
+ } from "./chunk-4VJAC32I.js";
285
283
  import {
286
284
  canonicalizeToolNames
287
285
  } from "./chunk-XUWRURDF.js";
@@ -3013,10 +3011,6 @@ function activeInFlight(snapshot) {
3013
3011
  if (isAgentRunTerminalStatus(snapshot.status)) return null;
3014
3012
  return snapshot.inFlight ?? null;
3015
3013
  }
3016
- function formatTerminalRunAge(snapshot, now) {
3017
- if (!isAgentRunTerminalStatus(snapshot.status)) return null;
3018
- return formatRunAge(snapshot, now);
3019
- }
3020
3014
  function formatUnassignedFact(snapshot) {
3021
3015
  return snapshot.unassigned ? "parent: ?" : null;
3022
3016
  }
@@ -3036,27 +3030,6 @@ function sanitizeRunSnapshotForNormal(snapshot) {
3036
3030
  }
3037
3031
 
3038
3032
  // packages/cli/tui/agentRunPanelLines.ts
3039
- function formatPanelProgress(snapshot, now) {
3040
- const parts = [];
3041
- if (typeof snapshot.toolCallCount === "number" && Number.isFinite(snapshot.toolCallCount)) {
3042
- parts.push(`${snapshot.toolCallCount} tools`);
3043
- }
3044
- const inFlight = activeInFlight(snapshot);
3045
- if (inFlight) {
3046
- parts.push(formatInFlightFact(inFlight, now));
3047
- } else if (snapshot.lastToolNames && snapshot.lastToolNames.length > 0) {
3048
- parts.push(snapshot.lastToolNames.join(", "));
3049
- }
3050
- return parts.length > 0 ? ` \xB7 ${parts.join(" \xB7 ")}` : "";
3051
- }
3052
- function formatPanelDetail(snapshot) {
3053
- const note = snapshot.lastAssistantText?.trim();
3054
- if (note) return note;
3055
- if (!runShowsLogTail(snapshot.status)) return "";
3056
- const lines = snapshot.logLines;
3057
- if (!lines || lines.length === 0) return "";
3058
- return lines[lines.length - 1]?.trim() ?? "";
3059
- }
3060
3033
  var AUTO_IDENTITY_PATTERNS = [
3061
3034
  /^agent-[0-9a-f]{8,}-[a-z0-9]/i,
3062
3035
  /^agent-pub-[a-z0-9]{10,}$/i,
@@ -3071,48 +3044,133 @@ function displayAgentName(snapshot) {
3071
3044
  if (isAutoGeneratedIdentity(raw)) return "Sub-agent";
3072
3045
  return raw;
3073
3046
  }
3074
- function formatAgentRunPanelLines(snapshot, colorEnabled, now = Date.now()) {
3075
- const lines = [];
3047
+
3048
+ // packages/cli/tui/runZoneLines.ts
3049
+ var RUN_ZONE_MAX_ROWS = 3;
3050
+ function runZoneLeadIcon(status) {
3051
+ if (!isAgentRunTerminalStatus(status)) return "\u2699";
3052
+ switch (status) {
3053
+ case "done":
3054
+ return "\u2713";
3055
+ case "killed":
3056
+ case "cancelled":
3057
+ return "\u2298";
3058
+ default:
3059
+ return "\u2717";
3060
+ }
3061
+ }
3062
+ function runZoneTerminalLabel(status) {
3063
+ switch (status) {
3064
+ case "done":
3065
+ return t("runZoneDone");
3066
+ case "killed":
3067
+ case "cancelled":
3068
+ return t("runZoneCancelled");
3069
+ default:
3070
+ return t("runZoneFailed");
3071
+ }
3072
+ }
3073
+ function runZoneLabel(snapshot, duplicateTitles) {
3076
3074
  const name = displayAgentName(snapshot);
3077
- const status = snapshot.status || "running";
3078
- const statusSymbol = getAgentRunStatusIcon(status);
3079
- const statusColor = runStatusTone(status);
3080
- const errPart = snapshot.errorMessage ? ` \xB7 ${snapshot.errorMessage}` : "";
3081
- const unassignedFact = formatUnassignedFact(snapshot);
3082
- const unassignedPart = unassignedFact ? ` \xB7 ${unassignedFact}` : "";
3083
- const progressPart = formatPanelProgress(snapshot, now);
3084
- const age = formatTerminalRunAge(snapshot, now);
3085
- const agePart = age ? ` \xB7 ${age}` : "";
3086
- const creditsPart = typeof snapshot.credits === "number" && Number.isFinite(snapshot.credits) ? ` \xB7 ${formatCreditsChip(snapshot.credits)}` : "";
3087
- if (!colorEnabled) {
3088
- lines.push(
3089
- `\u{1F916} ${name} \xB7 ${statusSymbol} ${status}${unassignedPart}${agePart}${progressPart}${creditsPart}${errPart}`
3090
- );
3075
+ const short = shortRunId(snapshot.runId);
3076
+ const idSuffix = short ? ` #${short}` : "";
3077
+ const title = snapshot.title?.trim();
3078
+ if (title) {
3079
+ return `${title}${duplicateTitles.has(title) ? idSuffix : ""} \xB7 ${name}`;
3080
+ }
3081
+ return `${name}${idSuffix}`;
3082
+ }
3083
+ function runZoneFacts(snapshot, now) {
3084
+ const facts = [];
3085
+ let time = null;
3086
+ if (isAgentRunTerminalStatus(snapshot.status)) {
3087
+ const age = formatRunAge(snapshot, now);
3088
+ const label = runZoneTerminalLabel(snapshot.status);
3089
+ time = age ? `${label} \xB7 ${t("runZoneTook", age)}` : label;
3091
3090
  } else {
3092
- const botIcon = themeText("\u{1F916}", "accent", true);
3093
- const nameText = themeText(` ${name}`, "chrome", true);
3094
- const statusText = themeText(` \xB7 ${statusSymbol} ${status}`, statusColor, true);
3095
- const unassignedText = unassignedPart ? themeText(unassignedPart, "muted") : "";
3096
- const ageText = agePart ? themeText(agePart, "chrome") : "";
3097
- const progressText = progressPart ? themeText(progressPart, "chrome") : "";
3098
- const creditsText = creditsPart ? themeText(creditsPart, "muted") : "";
3099
- const errorText = errPart ? themeText(errPart, "danger") : "";
3100
- lines.push(`${botIcon}${nameText}${statusText}${unassignedText}${ageText}${progressText}${creditsText}${errorText}`);
3101
- }
3102
- const detail = formatPanelDetail(snapshot);
3103
- if (detail) {
3091
+ const startedAt = snapshot.startedAt;
3092
+ if (typeof startedAt === "number" && Number.isFinite(startedAt) && startedAt > 0) {
3093
+ time = t("runZoneFor", formatDuration(Math.max(0, now - startedAt)));
3094
+ }
3095
+ }
3096
+ const unassigned = formatUnassignedFact(snapshot);
3097
+ if (unassigned) facts.push(unassigned);
3098
+ if (typeof snapshot.toolCallCount === "number" && Number.isFinite(snapshot.toolCallCount)) {
3099
+ facts.push(`${snapshot.toolCallCount} tools`);
3100
+ }
3101
+ if (typeof snapshot.credits === "number" && Number.isFinite(snapshot.credits)) {
3102
+ facts.push(formatCreditsChip(snapshot.credits, { compact: true }));
3103
+ }
3104
+ const inFlight = activeInFlight(snapshot);
3105
+ if (inFlight) {
3106
+ facts.push(formatInFlightFact(inFlight, now));
3107
+ } else {
3108
+ const lastTool = snapshot.lastToolNames?.[snapshot.lastToolNames.length - 1];
3109
+ if (lastTool) facts.push(clipText(lastTool, 20));
3110
+ }
3111
+ if (snapshot.errorMessage) facts.push(clipText(snapshot.errorMessage, 40));
3112
+ return { time, rest: facts };
3113
+ }
3114
+ var RUN_ZONE_COMPACT_ROWS = 16;
3115
+ var RUN_ZONE_TINY_ROWS = 10;
3116
+ function resolveRunZoneMaxRows(maxRows, rows) {
3117
+ if (typeof rows !== "number" || !Number.isFinite(rows)) return maxRows;
3118
+ if (rows < RUN_ZONE_TINY_ROWS) return Math.min(maxRows, 1);
3119
+ if (rows < RUN_ZONE_COMPACT_ROWS) return Math.min(maxRows, 2);
3120
+ return maxRows;
3121
+ }
3122
+ function formatRunZoneLines(snapshots, colorEnabled, now = Date.now(), maxRows = RUN_ZONE_MAX_ROWS, layout = {}) {
3123
+ if (snapshots.length === 0) return [];
3124
+ maxRows = resolveRunZoneMaxRows(maxRows, layout.rows);
3125
+ const columns = typeof layout.columns === "number" && layout.columns > 0 ? layout.columns : void 0;
3126
+ const display = snapshots.map(sanitizeRunSnapshotForNormal);
3127
+ const shown = display.slice(0, Math.max(1, maxRows));
3128
+ const titleCounts = /* @__PURE__ */ new Map();
3129
+ for (const snapshot of shown) {
3130
+ const title = snapshot.title?.trim();
3131
+ if (title) titleCounts.set(title, (titleCounts.get(title) ?? 0) + 1);
3132
+ }
3133
+ const duplicateTitles = new Set(
3134
+ [...titleCounts].filter(([, count]) => count > 1).map(([title]) => title)
3135
+ );
3136
+ const lines = [];
3137
+ for (const snapshot of shown) {
3138
+ const icon = runZoneLeadIcon(snapshot.status);
3139
+ const label = runZoneLabel(snapshot, duplicateTitles);
3140
+ const { time, rest } = runZoneFacts(snapshot, now);
3141
+ const hasError = Boolean(snapshot.errorMessage);
3142
+ let factList = [...time ? [time] : [], ...rest];
3143
+ let shownLabel = label;
3144
+ if (columns !== void 0) {
3145
+ const fixed = (l, f) => visibleWidth(`${icon} ${l}${f.length ? ` \xB7 ${f.join(" \xB7 ")}` : ""}`);
3146
+ const keep = time ? 1 : 0;
3147
+ while (factList.length > keep && fixed(label, factList) > columns) factList.pop();
3148
+ if (fixed(label, factList) > columns) {
3149
+ const tail = factList.length ? ` \xB7 ${factList.join(" \xB7 ")}` : "";
3150
+ const room = columns - visibleWidth(`${icon} `) - visibleWidth(tail);
3151
+ shownLabel = fitAnsiLine(label, Math.max(1, room));
3152
+ }
3153
+ }
3154
+ const factsPart = factList.length > 0 ? ` \xB7 ${factList.join(" \xB7 ")}` : "";
3104
3155
  if (!colorEnabled) {
3105
- lines.push(` \u2514 ${detail}`);
3106
- } else {
3107
- lines.push(`${themeText(" \u2514 ", "muted")}${themeText(detail, "chrome")}`);
3156
+ lines.push(`${icon} ${shownLabel}${factsPart}`);
3157
+ continue;
3108
3158
  }
3159
+ lines.push(
3160
+ themeText(icon, runStatusTone(snapshot.status), true) + " " + themeText(shownLabel, "chrome", true) + themeText(factsPart, hasError ? "danger" : "chrome")
3161
+ );
3162
+ }
3163
+ const hidden = display.length - shown.length;
3164
+ if (hidden > 0) {
3165
+ const more = t("runZoneMore", String(hidden));
3166
+ lines.push(colorEnabled ? themeText(` ${more}`, "chrome") : ` ${more}`);
3109
3167
  }
3110
3168
  return lines;
3111
3169
  }
3112
3170
 
3113
3171
  // packages/cli/tui/runDock.ts
3114
3172
  var RUN_DOCK_TICK_INTERVAL_MS = 1e3;
3115
- var RUN_DOCK_LINGER_MS = 8e3;
3173
+ var RUN_DOCK_LINGER_MS = 5e3;
3116
3174
  var RUN_DOCK_STALE_MS = 5 * 6e4;
3117
3175
  var RUN_DOCK_MAX_ROWS = 3;
3118
3176
  var RETIRED_MEMORY = 64;
@@ -3216,20 +3274,17 @@ function createRunDock(deps) {
3216
3274
  return a.seq - b.seq;
3217
3275
  });
3218
3276
  const getRuns = () => orderedEntries().map((entry) => entry.snapshot);
3219
- const getLines = (colorEnabled) => {
3277
+ const getLines = (colorEnabled, layout) => {
3220
3278
  prune();
3221
3279
  const ordered = orderedEntries();
3222
3280
  if (ordered.length === 0) return [];
3223
3281
  const at = now();
3224
- const displaySnapshots = ordered.map((entry) => sanitizeRunSnapshotForNormal(entry.snapshot));
3225
- if (displaySnapshots.length === 1) {
3226
- return formatAgentRunPanelLines(displaySnapshots[0], colorEnabled, at);
3227
- }
3228
- return formatRunDockLines(
3229
- displaySnapshots,
3282
+ return formatRunZoneLines(
3283
+ ordered.map((entry) => entry.snapshot),
3230
3284
  colorEnabled,
3231
3285
  at,
3232
- maxRows
3286
+ maxRows,
3287
+ layout
3233
3288
  );
3234
3289
  };
3235
3290
  return {
@@ -3246,80 +3301,6 @@ function createRunDock(deps) {
3246
3301
  }
3247
3302
  };
3248
3303
  }
3249
- function summarize(snapshots) {
3250
- let running = 0;
3251
- const terminal = /* @__PURE__ */ new Map();
3252
- for (const snapshot of snapshots) {
3253
- if (!isAgentRunTerminalStatus(snapshot.status)) {
3254
- running += 1;
3255
- continue;
3256
- }
3257
- terminal.set(snapshot.status, (terminal.get(snapshot.status) ?? 0) + 1);
3258
- }
3259
- const parts = [];
3260
- if (running > 0) parts.push(`${running} running`);
3261
- for (const [status, count] of terminal) parts.push(`${count} ${status}`);
3262
- return parts.join(" \xB7 ");
3263
- }
3264
- function formatRunDockLines(snapshots, colorEnabled, now = Date.now(), maxRows = RUN_DOCK_MAX_ROWS) {
3265
- if (snapshots.length === 0) return [];
3266
- const lines = [];
3267
- const summary = summarize(snapshots);
3268
- const header = `\u{1F916} runs \xB7 ${summary}`;
3269
- lines.push(colorEnabled ? themeText(header, "muted", true) : header);
3270
- const shown = snapshots.slice(0, Math.max(1, maxRows));
3271
- const titleCounts = /* @__PURE__ */ new Map();
3272
- for (const snapshot of shown) {
3273
- const title = snapshot.title?.trim();
3274
- if (title) titleCounts.set(title, (titleCounts.get(title) ?? 0) + 1);
3275
- }
3276
- const duplicateTitles = new Set(
3277
- [...titleCounts].filter(([, count]) => count > 1).map(([title]) => title)
3278
- );
3279
- for (const snapshot of shown) {
3280
- lines.push(formatRunDockRow(snapshot, colorEnabled, now, duplicateTitles));
3281
- }
3282
- const hidden = snapshots.length - shown.length;
3283
- if (hidden > 0) {
3284
- const more = ` +${hidden} more`;
3285
- lines.push(colorEnabled ? themeText(more, "chrome") : more);
3286
- }
3287
- return lines;
3288
- }
3289
- function formatRunDockRow(snapshot, colorEnabled, now, duplicateTitles = /* @__PURE__ */ new Set()) {
3290
- const name = displayAgentName(snapshot);
3291
- const short = shortRunId(snapshot.runId);
3292
- const icon = getAgentRunStatusIcon(snapshot.status);
3293
- const terminal = isAgentRunTerminalStatus(snapshot.status);
3294
- const statusColor = runStatusTone(snapshot.status);
3295
- const facts = [];
3296
- const age = formatTerminalRunAge(snapshot, now);
3297
- if (terminal) facts.push(age ? `${snapshot.status} ${age}` : snapshot.status);
3298
- else if (age) facts.push(age);
3299
- const unassigned = formatUnassignedFact(snapshot);
3300
- if (unassigned) facts.push(unassigned);
3301
- if (typeof snapshot.toolCallCount === "number" && Number.isFinite(snapshot.toolCallCount)) {
3302
- facts.push(`${snapshot.toolCallCount} tools`);
3303
- }
3304
- if (typeof snapshot.credits === "number" && Number.isFinite(snapshot.credits)) {
3305
- facts.push(formatCreditsChip(snapshot.credits, { compact: true }));
3306
- }
3307
- const inFlight = activeInFlight(snapshot);
3308
- if (inFlight) {
3309
- facts.push(formatInFlightFact(inFlight, now));
3310
- } else {
3311
- const lastTool = snapshot.lastToolNames?.[snapshot.lastToolNames.length - 1];
3312
- if (lastTool) facts.push(clipText(lastTool, 20));
3313
- }
3314
- if (snapshot.errorMessage) facts.push(clipText(snapshot.errorMessage, 40));
3315
- const title = snapshot.title?.trim();
3316
- const idSuffix = short ? ` #${short}` : "";
3317
- const label = title ? `${title}${duplicateTitles.has(title) ? idSuffix : ""} \xB7 ${name}` : `${name}${idSuffix}`;
3318
- const factsPart = facts.length > 0 ? ` \xB7 ${facts.join(" \xB7 ")}` : "";
3319
- if (!colorEnabled) return ` ${icon} ${label}${factsPart}`;
3320
- const errorTail = snapshot.errorMessage;
3321
- return themeText(" ", "chrome") + themeText(icon, statusColor, true) + " " + themeText(label, "chrome", true) + themeText(factsPart, errorTail ? "danger" : "chrome");
3322
- }
3323
3304
 
3324
3305
  // packages/cli/tui/activityIndicator.ts
3325
3306
  var ACTIVITY_FRAMES = ["\xB7", "~", "\u2248", "\u223F", "\u2248", "~"];
@@ -3419,7 +3400,7 @@ function createActivityIndicator(deps) {
3419
3400
  runDock.clear();
3420
3401
  };
3421
3402
  const getAgentRuns = () => runDock.getRuns();
3422
- const getActivityLines = (colorEnabled = resolveCliColorEnabled()) => {
3403
+ const getActivityLines = (colorEnabled = resolveCliColorEnabled(), layout) => {
3423
3404
  const lines = [];
3424
3405
  const baseView = getView();
3425
3406
  if (baseView && stopping) {
@@ -3438,7 +3419,7 @@ function createActivityIndicator(deps) {
3438
3419
  );
3439
3420
  }
3440
3421
  }
3441
- lines.push(...runDock.getLines(colorEnabled));
3422
+ lines.push(...runDock.getLines(colorEnabled, layout));
3442
3423
  return lines.length > 0 ? lines : null;
3443
3424
  };
3444
3425
  const stop = () => {
@@ -5666,10 +5647,9 @@ function renderStatusLine(state, maxWidth) {
5666
5647
  const creditsSegment = credits !== void 0 && credits > 0 ? themeText(formatCreditsChip(credits), "muted", colorEnabled) : "";
5667
5648
  parts.push(tokenSegment);
5668
5649
  if (creditsSegment) parts.push(creditsSegment);
5669
- const runningTaskCount = getProcessRegistry().listBackground().filter((p) => p.status === "running").length;
5670
- if (runningTaskCount > 0) {
5671
- parts.push(themeText(`\u2699 ${runningTaskCount} running`, "info", colorEnabled));
5672
- }
5650
+ const runningProcCount = getProcessRegistry().listBackground().filter((p) => p.status === "running").length;
5651
+ const procsSegment = runningProcCount > 0 ? themeText(`\u2699 ${runningProcCount} procs`, "info", colorEnabled) : "";
5652
+ if (procsSegment) parts.push(procsSegment);
5673
5653
  const pendingProcessCount = state.pendingProcessNotices?.length ?? 0;
5674
5654
  if (pendingProcessCount > 0) {
5675
5655
  parts.push(themeText(`\u2699 ${pendingProcessCount} finished`, "info", colorEnabled));
@@ -5680,7 +5660,7 @@ function renderStatusLine(state, maxWidth) {
5680
5660
  let visibleParts = parts;
5681
5661
  if (maxWidth && maxWidth > 0) {
5682
5662
  const widthOf = (segments) => displayWidth(stripAnsi(segments.join(" \xB7 "))) + 2;
5683
- for (const optional of [cwdSegment, agentSegment, tokenSegment, creditsSegment]) {
5663
+ for (const optional of [procsSegment, cwdSegment, agentSegment, tokenSegment, creditsSegment]) {
5684
5664
  if (!optional) continue;
5685
5665
  if (widthOf(visibleParts) <= maxWidth) break;
5686
5666
  visibleParts = visibleParts.filter((part) => part !== optional);
@@ -5702,10 +5682,6 @@ function renderStatusLine(state, maxWidth) {
5702
5682
  if (state.autoConfirm === true) {
5703
5683
  emergency.push(themeText("\u23F5", "warning", colorEnabled));
5704
5684
  }
5705
- const runningTotal = runningTaskCount;
5706
- if (runningTotal > 0) {
5707
- emergency.push(themeText(`\u2699${runningTotal}`, "info", colorEnabled));
5708
- }
5709
5685
  if (state.gitStatus) {
5710
5686
  const { modified, untracked } = state.gitStatus;
5711
5687
  emergency.push(themeText(
@@ -8336,7 +8312,7 @@ function createFixedInput(output, config) {
8336
8312
  if (completions.length > 0) {
8337
8313
  sections.push(fitAnsiLine(dimCliText(completions.join(" "), colorEnabled), cols));
8338
8314
  }
8339
- const rawActivity = config.getActivityLines ? config.getActivityLines() : config.getActivityLine ? config.getActivityLine() : null;
8315
+ const rawActivity = config.getActivityLines ? config.getActivityLines({ columns: cols, rows: getRows() }) : config.getActivityLine ? config.getActivityLine() : null;
8340
8316
  const activityLines = Array.isArray(rawActivity) ? rawActivity.filter((line) => line !== null && line !== void 0) : typeof rawActivity === "string" && rawActivity.length > 0 ? [rawActivity] : [];
8341
8317
  for (const actLine of activityLines) {
8342
8318
  sections.push(fitAnsiLine(actLine.replace(/\r?\n/g, " "), cols));
@@ -11482,7 +11458,7 @@ async function runTuiWorkspace(options) {
11482
11458
  getStatusLine: (maxWidth) => {
11483
11459
  return renderStatusLine(state, maxWidth);
11484
11460
  },
11485
- getActivityLines: () => activityIndicator.getActivityLines(resolveCliColorEnabled()),
11461
+ getActivityLines: (layout) => activityIndicator.getActivityLines(resolveCliColorEnabled(), layout),
11486
11462
  getQueueLines: () => {
11487
11463
  if (!chatQueueBinding || chatQueueBinding.queueLength() === 0) return [];
11488
11464
  const colorEnabled = resolveCliColorEnabled();
@@ -1,45 +1,45 @@
1
1
  import {
2
2
  fetchAgentContexts
3
- } from "./chunk-XNXNHAAP.js";
3
+ } from "./chunk-QE6WT54C.js";
4
4
  import {
5
5
  generateRequestBody,
6
6
  mergeReferences,
7
7
  performFetchRequest,
8
8
  sanitizeOutboundBody
9
- } from "./chunk-2TKVOEQF.js";
9
+ } from "./chunk-IBHS2SAO.js";
10
10
  import "./chunk-EOARMOVD.js";
11
11
  import "./chunk-HS7MLR74.js";
12
12
  import "./chunk-6OTOA5MH.js";
13
13
  import {
14
14
  findToolExecutor,
15
15
  getToolResultErrorData
16
- } from "./chunk-OKSJZ4UU.js";
16
+ } from "./chunk-XTHMLDFS.js";
17
17
  import "./chunk-2EE5UD3N.js";
18
18
  import "./chunk-5UTFL4QJ.js";
19
19
  import "./chunk-KQHGZWSV.js";
20
20
  import "./chunk-GOMR6S5Z.js";
21
21
  import "./chunk-NF64D32W.js";
22
22
  import "./chunk-3L2WKC3W.js";
23
- import "./chunk-L4KXQ6QP.js";
24
- import "./chunk-VZVTPDPL.js";
23
+ import "./chunk-4JMDLJAD.js";
24
+ import "./chunk-6ECICFUL.js";
25
25
  import "./chunk-HNRASX3X.js";
26
26
  import "./chunk-YRRASA5Q.js";
27
27
  import "./chunk-63W5N6P3.js";
28
28
  import "./chunk-VF4K2QE6.js";
29
- import "./chunk-62XHRZG4.js";
29
+ import "./chunk-OY5MN3QW.js";
30
30
  import "./chunk-Z7IZQF56.js";
31
31
  import "./chunk-XPRWFQQK.js";
32
32
  import "./chunk-BJUDYFV5.js";
33
33
  import "./chunk-MEYIRKDN.js";
34
- import "./chunk-HKBFZONG.js";
34
+ import "./chunk-ECN5PIJP.js";
35
35
  import "./chunk-ZJ7UHBJS.js";
36
36
  import {
37
37
  updateTokensAction
38
- } from "./chunk-ANX7Z7Z2.js";
39
- import "./chunk-MC4XLIJ7.js";
38
+ } from "./chunk-UE6THNRN.js";
39
+ import "./chunk-523DITKR.js";
40
40
  import "./chunk-YYLHWIW6.js";
41
41
  import "./chunk-6O4IK4V2.js";
42
- import "./chunk-UMB7CHAY.js";
42
+ import "./chunk-HMYLUSAO.js";
43
43
  import "./chunk-D76D3RTR.js";
44
44
  import "./chunk-5RGU3J7P.js";
45
45
  import "./chunk-M76ECQRD.js";
@@ -52,14 +52,14 @@ import "./chunk-B2XUQXQX.js";
52
52
  import "./chunk-6TPOEJMQ.js";
53
53
  import "./chunk-AUDNYVRC.js";
54
54
  import "./chunk-KHCLMKZZ.js";
55
- import "./chunk-JLQKV2ZJ.js";
55
+ import "./chunk-HLUYTEBY.js";
56
56
  import "./chunk-PUOC4YRO.js";
57
57
  import "./chunk-RGNEEJ3Y.js";
58
58
  import "./chunk-H6A6X4EK.js";
59
59
  import "./chunk-S5XGT6GB.js";
60
60
  import "./chunk-27ONFIEY.js";
61
- import "./chunk-RVX32KGQ.js";
62
- import "./chunk-F64B2W3R.js";
61
+ import "./chunk-ZSPC3ZTC.js";
62
+ import "./chunk-ELYEQNUI.js";
63
63
  import "./chunk-PSCNXBYA.js";
64
64
  import "./chunk-L36OWPP3.js";
65
65
  import "./chunk-BYXBJQAS.js";
@@ -73,7 +73,7 @@ import "./chunk-W7XHHYWM.js";
73
73
  import "./chunk-B7ANJQWZ.js";
74
74
  import "./chunk-UAD2WT54.js";
75
75
  import "./chunk-ZWQUWF6W.js";
76
- import "./chunk-2GRGFCF6.js";
76
+ import "./chunk-4VJAC32I.js";
77
77
  import {
78
78
  canonicalizeToolName
79
79
  } from "./chunk-XUWRURDF.js";
@@ -4,10 +4,10 @@ import {
4
4
  discoverSkills,
5
5
  parseSkillFrontmatter,
6
6
  resolveSkillByName
7
- } from "./chunk-E4MARS3Q.js";
7
+ } from "./chunk-5GVBDNTO.js";
8
8
  import "./chunk-KHCLMKZZ.js";
9
- import "./chunk-DVINR3PL.js";
10
- import "./chunk-2GRGFCF6.js";
9
+ import "./chunk-HDLLCBRF.js";
10
+ import "./chunk-4VJAC32I.js";
11
11
  import "./chunk-4VNS5WPM.js";
12
12
  export {
13
13
  buildSkillDiscoveryContextBlock,
@@ -11,24 +11,24 @@ import {
11
11
  import "./chunk-OTGFTBLI.js";
12
12
  import "./chunk-SV5IJK6K.js";
13
13
  import "./chunk-KQHGZWSV.js";
14
- import "./chunk-RHDOQWXZ.js";
14
+ import "./chunk-O7WXJIUI.js";
15
15
  import "./chunk-P6GMCCAT.js";
16
16
  import "./chunk-ZNFJWEN4.js";
17
- import "./chunk-A6FNUMCF.js";
17
+ import "./chunk-QIH323EV.js";
18
18
  import "./chunk-GMZLP5DV.js";
19
- import "./chunk-I4A26N52.js";
19
+ import "./chunk-724HIKHT.js";
20
20
  import "./chunk-5ZUL4CUO.js";
21
21
  import "./chunk-CQ3WA2NE.js";
22
22
  import "./chunk-2MBTWINN.js";
23
23
  import "./chunk-N7J63Q6C.js";
24
- import "./chunk-JLQKV2ZJ.js";
24
+ import "./chunk-HLUYTEBY.js";
25
25
  import "./chunk-PUOC4YRO.js";
26
26
  import "./chunk-RGNEEJ3Y.js";
27
27
  import "./chunk-H6A6X4EK.js";
28
28
  import "./chunk-S5XGT6GB.js";
29
29
  import "./chunk-27ONFIEY.js";
30
- import "./chunk-RVX32KGQ.js";
31
- import "./chunk-F64B2W3R.js";
30
+ import "./chunk-ZSPC3ZTC.js";
31
+ import "./chunk-ELYEQNUI.js";
32
32
  import "./chunk-PSCNXBYA.js";
33
33
  import "./chunk-L36OWPP3.js";
34
34
  import "./chunk-BYXBJQAS.js";
@@ -43,8 +43,8 @@ import {
43
43
  normalizeSpaceId
44
44
  } from "./chunk-UAD2WT54.js";
45
45
  import "./chunk-ZWQUWF6W.js";
46
- import "./chunk-DVINR3PL.js";
47
- import "./chunk-2GRGFCF6.js";
46
+ import "./chunk-HDLLCBRF.js";
47
+ import "./chunk-4VJAC32I.js";
48
48
  import "./chunk-XUWRURDF.js";
49
49
  import "./chunk-5J3PYNUP.js";
50
50
  import {