flavor-code 1.4.0-beta.10 → 1.4.0-beta.11
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.
|
@@ -34,13 +34,15 @@ import {
|
|
|
34
34
|
instances_default,
|
|
35
35
|
osc,
|
|
36
36
|
shiftAnchor,
|
|
37
|
+
stringWidth,
|
|
37
38
|
stripAnsi,
|
|
38
39
|
useStdout,
|
|
39
40
|
use_app_default,
|
|
40
41
|
use_input_default
|
|
41
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-26T23AKR.js";
|
|
42
43
|
import {
|
|
43
|
-
execFileNoThrow
|
|
44
|
+
execFileNoThrow,
|
|
45
|
+
getGraphemeSegmenter
|
|
44
46
|
} from "./chunk-ZJCAQXA7.js";
|
|
45
47
|
import "./chunk-S32JRDZK.js";
|
|
46
48
|
|
|
@@ -969,7 +971,12 @@ function wrapPromptInput(input, codePointCursor, options) {
|
|
|
969
971
|
// src/ui/task-progress.tsx
|
|
970
972
|
import { useRef as useRef3 } from "react";
|
|
971
973
|
import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
972
|
-
function TaskStatusLine({
|
|
974
|
+
function TaskStatusLine({
|
|
975
|
+
block,
|
|
976
|
+
interactive,
|
|
977
|
+
textWidth,
|
|
978
|
+
maxTextLines
|
|
979
|
+
}) {
|
|
973
980
|
const running = block.state === "running";
|
|
974
981
|
const { stdout } = useStdout();
|
|
975
982
|
const foreground = interactive && (block.activity === "model" || block.task?.role === "main");
|
|
@@ -1007,8 +1014,20 @@ function TaskStatusLine({ block, interactive }) {
|
|
|
1007
1014
|
thinkingScroll.current = { start: state.start, lastTime: time };
|
|
1008
1015
|
return state.text;
|
|
1009
1016
|
})() : void 0;
|
|
1017
|
+
const textSegments = [
|
|
1018
|
+
{ text: `${presentation.glyph} `, color: presentation.color },
|
|
1019
|
+
...presentation.badge ? [{ text: `${presentation.badge} `, color: presentation.badgeColor }] : [],
|
|
1020
|
+
{ text: before, color: presentation.color },
|
|
1021
|
+
...statusLabel === void 0 ? [] : [
|
|
1022
|
+
{ text: " \xB7 ", color: presentation.color },
|
|
1023
|
+
{ text: statusLabel, color: statusColor ?? presentation.color }
|
|
1024
|
+
],
|
|
1025
|
+
...after ? [{ text: after, color: presentation.color }] : [],
|
|
1026
|
+
...metaLabel === void 0 ? [] : [{ text: ` ${metaLabel}`, color: metaColor ?? "ansi:blackBright" }]
|
|
1027
|
+
];
|
|
1028
|
+
const boundedText = textWidth === void 0 || maxTextLines === void 0 ? void 0 : limitTaskTextSegments(textSegments, textWidth, maxTextLines).segments;
|
|
1010
1029
|
return /* @__PURE__ */ jsxs2(Box_default, { flexDirection: "column", width: "100%", children: [
|
|
1011
|
-
/* @__PURE__ */
|
|
1030
|
+
/* @__PURE__ */ jsx3(Box_default, { ref, flexDirection: "row", width: "100%", children: boundedText === void 0 ? /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
1012
1031
|
/* @__PURE__ */ jsxs2(Text, { ...presentation.color === void 0 ? {} : { color: presentation.color }, children: [
|
|
1013
1032
|
presentation.glyph,
|
|
1014
1033
|
" "
|
|
@@ -1027,10 +1046,69 @@ function TaskStatusLine({ block, interactive }) {
|
|
|
1027
1046
|
" ",
|
|
1028
1047
|
metaLabel
|
|
1029
1048
|
] })
|
|
1030
|
-
] }),
|
|
1049
|
+
] }) : /* @__PURE__ */ jsx3(Text, { children: boundedText.map((segment, index) => /* @__PURE__ */ jsx3(Text, { ...segment.color === void 0 ? {} : { color: segment.color }, children: segment.text }, index)) }) }),
|
|
1031
1050
|
thinkingLine === void 0 ? null : /* @__PURE__ */ jsx3(ThinkingLineView, { text: thinkingLine })
|
|
1032
1051
|
] });
|
|
1033
1052
|
}
|
|
1053
|
+
function limitTaskTextSegments(segments, width, maxLines = 3) {
|
|
1054
|
+
const lineWidth = Math.max(3, Math.floor(width));
|
|
1055
|
+
const lineLimit = Math.max(1, Math.floor(maxLines));
|
|
1056
|
+
const lines = [[]];
|
|
1057
|
+
const widths = [0];
|
|
1058
|
+
let truncated = false;
|
|
1059
|
+
outer: for (let segmentIndex = 0; segmentIndex < segments.length; segmentIndex += 1) {
|
|
1060
|
+
const segment = segments[segmentIndex];
|
|
1061
|
+
for (const { segment: grapheme } of getGraphemeSegmenter().segment(segment.text)) {
|
|
1062
|
+
if (grapheme === "\n" || grapheme === "\r" || grapheme === "\r\n") {
|
|
1063
|
+
if (lines.length >= lineLimit) {
|
|
1064
|
+
truncated = true;
|
|
1065
|
+
break outer;
|
|
1066
|
+
}
|
|
1067
|
+
lines.push([]);
|
|
1068
|
+
widths.push(0);
|
|
1069
|
+
continue;
|
|
1070
|
+
}
|
|
1071
|
+
const glyphWidth = stringWidth(grapheme);
|
|
1072
|
+
const lineIndex = lines.length - 1;
|
|
1073
|
+
if (glyphWidth > 0 && widths[lineIndex] + glyphWidth > lineWidth && lines[lineIndex].length > 0) {
|
|
1074
|
+
if (lines.length >= lineLimit) {
|
|
1075
|
+
truncated = true;
|
|
1076
|
+
break outer;
|
|
1077
|
+
}
|
|
1078
|
+
lines.push([]);
|
|
1079
|
+
widths.push(0);
|
|
1080
|
+
}
|
|
1081
|
+
const target = lines.length - 1;
|
|
1082
|
+
lines[target].push({ value: grapheme, width: glyphWidth, segmentIndex });
|
|
1083
|
+
widths[target] = widths[target] + glyphWidth;
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
if (truncated) {
|
|
1087
|
+
const lastIndex = lines.length - 1;
|
|
1088
|
+
const last = lines[lastIndex];
|
|
1089
|
+
while (last.length > 0 && widths[lastIndex] > lineWidth - 3) {
|
|
1090
|
+
widths[lastIndex] = widths[lastIndex] - last.pop().width;
|
|
1091
|
+
}
|
|
1092
|
+
while (last.length > 0 && /^\s$/u.test(last.at(-1).value)) {
|
|
1093
|
+
widths[lastIndex] = widths[lastIndex] - last.pop().width;
|
|
1094
|
+
}
|
|
1095
|
+
last.push({ value: "...", width: 3, segmentIndex: last.at(-1)?.segmentIndex ?? 0 });
|
|
1096
|
+
}
|
|
1097
|
+
const output = [];
|
|
1098
|
+
const append = (value, segmentIndex) => {
|
|
1099
|
+
const previous = output.at(-1);
|
|
1100
|
+
if (previous?.segmentIndex === segmentIndex) previous.text += value;
|
|
1101
|
+
else output.push({ text: value, color: segments[segmentIndex]?.color, segmentIndex });
|
|
1102
|
+
};
|
|
1103
|
+
lines.forEach((line, lineIndex) => {
|
|
1104
|
+
if (lineIndex > 0) append("\n", line[0]?.segmentIndex ?? output.at(-1)?.segmentIndex ?? 0);
|
|
1105
|
+
for (const token of line) append(token.value, token.segmentIndex);
|
|
1106
|
+
});
|
|
1107
|
+
return {
|
|
1108
|
+
truncated,
|
|
1109
|
+
segments: output.map(({ text, color }) => ({ text, ...color === void 0 ? {} : { color } }))
|
|
1110
|
+
};
|
|
1111
|
+
}
|
|
1034
1112
|
var THINKING_RAIL = "#416f84";
|
|
1035
1113
|
var THINKING_TEXT = "#91a0a8";
|
|
1036
1114
|
function ThinkingLineView({ text }) {
|
|
@@ -1045,7 +1123,8 @@ function TaskProgressPanel({
|
|
|
1045
1123
|
interactive,
|
|
1046
1124
|
maxHeight = 8,
|
|
1047
1125
|
columns = 80,
|
|
1048
|
-
|
|
1126
|
+
mainScrollRef,
|
|
1127
|
+
subagentScrollRef,
|
|
1049
1128
|
onHoverChange
|
|
1050
1129
|
}) {
|
|
1051
1130
|
if (blocks.length === 0 || maxHeight <= 0) return null;
|
|
@@ -1054,54 +1133,203 @@ function TaskProgressPanel({
|
|
|
1054
1133
|
const hasTasks = taskBlocks.length > 0;
|
|
1055
1134
|
const hasSubagents = subagentBlocks.length > 0;
|
|
1056
1135
|
const split = hasTasks && hasSubagents && columns >= SPLIT_TRACK_MIN_COLUMNS;
|
|
1057
|
-
|
|
1136
|
+
const hoverProps = (track) => ({
|
|
1137
|
+
onMouseEnter: () => onHoverChange?.(track)
|
|
1138
|
+
});
|
|
1139
|
+
return /* @__PURE__ */ jsx3(
|
|
1058
1140
|
Box_default,
|
|
1059
1141
|
{
|
|
1060
1142
|
flexDirection: "column",
|
|
1061
1143
|
flexShrink: 0,
|
|
1062
1144
|
width: "100%",
|
|
1063
1145
|
maxHeight,
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1146
|
+
onMouseLeave: () => onHoverChange?.(null),
|
|
1147
|
+
children: split ? /* @__PURE__ */ jsx3(
|
|
1148
|
+
SplitTracks,
|
|
1149
|
+
{
|
|
1150
|
+
taskBlocks,
|
|
1151
|
+
subagentBlocks,
|
|
1152
|
+
interactive,
|
|
1153
|
+
height: maxHeight,
|
|
1154
|
+
columns,
|
|
1155
|
+
mainScrollRef,
|
|
1156
|
+
subagentScrollRef,
|
|
1157
|
+
hoverProps
|
|
1158
|
+
}
|
|
1159
|
+
) : hasTasks && hasSubagents ? /* @__PURE__ */ jsx3(
|
|
1160
|
+
StackedTracks,
|
|
1161
|
+
{
|
|
1162
|
+
taskBlocks,
|
|
1163
|
+
subagentBlocks,
|
|
1164
|
+
interactive,
|
|
1165
|
+
height: maxHeight,
|
|
1166
|
+
columns,
|
|
1167
|
+
mainScrollRef,
|
|
1168
|
+
subagentScrollRef,
|
|
1169
|
+
hoverProps
|
|
1170
|
+
}
|
|
1171
|
+
) : /* @__PURE__ */ jsx3(
|
|
1172
|
+
SingleTrack,
|
|
1173
|
+
{
|
|
1174
|
+
role: hasTasks ? "main" : "subagent",
|
|
1175
|
+
blocks: hasTasks ? taskBlocks : subagentBlocks,
|
|
1176
|
+
interactive,
|
|
1177
|
+
height: maxHeight,
|
|
1178
|
+
width: columns,
|
|
1179
|
+
scrollRef: hasTasks ? mainScrollRef : subagentScrollRef,
|
|
1180
|
+
hoverProps
|
|
1181
|
+
}
|
|
1182
|
+
)
|
|
1087
1183
|
}
|
|
1088
1184
|
);
|
|
1089
1185
|
}
|
|
1090
|
-
function
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1186
|
+
function SplitTracks({
|
|
1187
|
+
taskBlocks,
|
|
1188
|
+
subagentBlocks,
|
|
1189
|
+
interactive,
|
|
1190
|
+
height,
|
|
1191
|
+
columns,
|
|
1192
|
+
mainScrollRef,
|
|
1193
|
+
subagentScrollRef,
|
|
1194
|
+
hoverProps
|
|
1195
|
+
}) {
|
|
1196
|
+
const contentHeight = Math.max(0, height - 1);
|
|
1197
|
+
const leftWidth = Math.max(1, Math.floor((columns - 1) / 2));
|
|
1198
|
+
const rightWidth = Math.max(1, columns - leftWidth - 1);
|
|
1199
|
+
return /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
1200
|
+
/* @__PURE__ */ jsxs2(Box_default, { flexDirection: "row", width: "100%", children: [
|
|
1201
|
+
/* @__PURE__ */ jsx3(Box_default, { width: leftWidth, ...hoverProps("main"), children: /* @__PURE__ */ jsx3(TrackHeader, { role: "main", width: leftWidth }) }),
|
|
1202
|
+
/* @__PURE__ */ jsx3(Text, { color: "ansi:white", children: "\u252C" }),
|
|
1203
|
+
/* @__PURE__ */ jsx3(Box_default, { width: rightWidth, ...hoverProps("subagent"), children: /* @__PURE__ */ jsx3(TrackHeader, { role: "subagent", width: rightWidth }) })
|
|
1204
|
+
] }),
|
|
1205
|
+
contentHeight <= 0 ? null : /* @__PURE__ */ jsxs2(Box_default, { flexDirection: "row", width: "100%", height: contentHeight, children: [
|
|
1206
|
+
/* @__PURE__ */ jsx3(Box_default, { width: leftWidth, minWidth: 0, flexDirection: "column", ...hoverProps("main"), children: /* @__PURE__ */ jsx3(
|
|
1207
|
+
TrackScrollBox,
|
|
1208
|
+
{
|
|
1209
|
+
ref: mainScrollRef,
|
|
1210
|
+
blocks: taskBlocks,
|
|
1211
|
+
interactive,
|
|
1212
|
+
height: contentHeight,
|
|
1213
|
+
width: leftWidth
|
|
1214
|
+
}
|
|
1215
|
+
) }),
|
|
1216
|
+
/* @__PURE__ */ jsx3(TrackDivider, { height: contentHeight }),
|
|
1217
|
+
/* @__PURE__ */ jsx3(Box_default, { width: rightWidth, minWidth: 0, flexDirection: "column", ...hoverProps("subagent"), children: /* @__PURE__ */ jsx3(
|
|
1218
|
+
TrackScrollBox,
|
|
1219
|
+
{
|
|
1220
|
+
ref: subagentScrollRef,
|
|
1221
|
+
blocks: subagentBlocks,
|
|
1222
|
+
interactive,
|
|
1223
|
+
height: contentHeight,
|
|
1224
|
+
width: rightWidth
|
|
1225
|
+
}
|
|
1226
|
+
) })
|
|
1227
|
+
] })
|
|
1228
|
+
] });
|
|
1229
|
+
}
|
|
1230
|
+
function StackedTracks({
|
|
1231
|
+
taskBlocks,
|
|
1232
|
+
subagentBlocks,
|
|
1233
|
+
interactive,
|
|
1234
|
+
height,
|
|
1235
|
+
columns,
|
|
1236
|
+
mainScrollRef,
|
|
1237
|
+
subagentScrollRef,
|
|
1238
|
+
hoverProps
|
|
1239
|
+
}) {
|
|
1240
|
+
if (height <= 1) {
|
|
1241
|
+
return /* @__PURE__ */ jsx3(Box_default, { ...hoverProps("main"), children: /* @__PURE__ */ jsx3(TrackHeader, { role: "main", width: columns }) });
|
|
1242
|
+
}
|
|
1243
|
+
const mainHeight = Math.ceil(height / 2);
|
|
1244
|
+
const subagentHeight = Math.floor(height / 2);
|
|
1245
|
+
return /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
1246
|
+
/* @__PURE__ */ jsx3(
|
|
1247
|
+
SingleTrack,
|
|
1248
|
+
{
|
|
1249
|
+
role: "main",
|
|
1250
|
+
blocks: taskBlocks,
|
|
1251
|
+
interactive,
|
|
1252
|
+
height: mainHeight,
|
|
1253
|
+
width: columns,
|
|
1254
|
+
scrollRef: mainScrollRef,
|
|
1255
|
+
hoverProps
|
|
1256
|
+
}
|
|
1257
|
+
),
|
|
1258
|
+
/* @__PURE__ */ jsx3(
|
|
1259
|
+
SingleTrack,
|
|
1260
|
+
{
|
|
1261
|
+
role: "subagent",
|
|
1262
|
+
blocks: subagentBlocks,
|
|
1263
|
+
interactive,
|
|
1264
|
+
height: subagentHeight,
|
|
1265
|
+
width: columns,
|
|
1266
|
+
scrollRef: subagentScrollRef,
|
|
1267
|
+
hoverProps
|
|
1268
|
+
}
|
|
1269
|
+
)
|
|
1095
1270
|
] });
|
|
1096
1271
|
}
|
|
1097
|
-
function
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1272
|
+
function SingleTrack({
|
|
1273
|
+
role,
|
|
1274
|
+
blocks,
|
|
1275
|
+
interactive,
|
|
1276
|
+
height,
|
|
1277
|
+
width,
|
|
1278
|
+
scrollRef,
|
|
1279
|
+
hoverProps
|
|
1280
|
+
}) {
|
|
1281
|
+
const contentHeight = Math.max(0, height - 1);
|
|
1282
|
+
return /* @__PURE__ */ jsxs2(Box_default, { flexDirection: "column", width: "100%", height, ...hoverProps(role), children: [
|
|
1283
|
+
/* @__PURE__ */ jsx3(TrackHeader, { role, width }),
|
|
1284
|
+
contentHeight <= 0 ? null : /* @__PURE__ */ jsx3(
|
|
1285
|
+
TrackScrollBox,
|
|
1286
|
+
{
|
|
1287
|
+
ref: scrollRef,
|
|
1288
|
+
blocks,
|
|
1289
|
+
interactive,
|
|
1290
|
+
height: contentHeight,
|
|
1291
|
+
width
|
|
1292
|
+
}
|
|
1293
|
+
)
|
|
1101
1294
|
] });
|
|
1102
1295
|
}
|
|
1103
|
-
function
|
|
1104
|
-
|
|
1296
|
+
function TrackScrollBox({
|
|
1297
|
+
ref,
|
|
1298
|
+
blocks,
|
|
1299
|
+
interactive,
|
|
1300
|
+
height,
|
|
1301
|
+
width
|
|
1302
|
+
}) {
|
|
1303
|
+
return /* @__PURE__ */ jsx3(
|
|
1304
|
+
ScrollBox_default,
|
|
1305
|
+
{
|
|
1306
|
+
...ref === void 0 ? {} : { ref },
|
|
1307
|
+
flexDirection: "column",
|
|
1308
|
+
flexShrink: 1,
|
|
1309
|
+
width: "100%",
|
|
1310
|
+
height,
|
|
1311
|
+
maxHeight: height,
|
|
1312
|
+
children: blocks.map((block) => /* @__PURE__ */ jsx3(
|
|
1313
|
+
TaskStatusLine,
|
|
1314
|
+
{
|
|
1315
|
+
block,
|
|
1316
|
+
interactive,
|
|
1317
|
+
textWidth: width,
|
|
1318
|
+
maxTextLines: 3
|
|
1319
|
+
},
|
|
1320
|
+
block.id
|
|
1321
|
+
))
|
|
1322
|
+
}
|
|
1323
|
+
);
|
|
1324
|
+
}
|
|
1325
|
+
function TrackHeader({ role, width }) {
|
|
1326
|
+
const label = role === "main" ? "task plan" : "subagent exploration";
|
|
1327
|
+
const prefix = `\u2500\u2500 ${label} `;
|
|
1328
|
+
const line = prefix.length >= width ? prefix.slice(0, Math.max(0, width)) : `${prefix}${"\u2500".repeat(width - prefix.length)}`;
|
|
1329
|
+
return /* @__PURE__ */ jsx3(Text, { color: "ansi:white", wrap: "truncate-end", children: line });
|
|
1330
|
+
}
|
|
1331
|
+
function TrackDivider({ height }) {
|
|
1332
|
+
return /* @__PURE__ */ jsx3(Box_default, { flexDirection: "column", width: 1, flexShrink: 0, children: Array.from({ length: height }, (_, index) => /* @__PURE__ */ jsx3(Text, { color: "ansi:white", children: "\u2502" }, index)) });
|
|
1105
1333
|
}
|
|
1106
1334
|
|
|
1107
1335
|
// src/ui/file-diff-style.ts
|
|
@@ -1799,8 +2027,9 @@ function App({ workspace, home, resumeSession, instanceId, palAlias }) {
|
|
|
1799
2027
|
const [updateTo, setUpdateTo] = useState2();
|
|
1800
2028
|
const [transcript, dispatch] = useReducer(transcriptReducer, void 0, createTranscriptState);
|
|
1801
2029
|
const scrollRef = useRef4(null);
|
|
1802
|
-
const
|
|
1803
|
-
const
|
|
2030
|
+
const mainTaskScrollRef = useRef4(null);
|
|
2031
|
+
const subagentTaskScrollRef = useRef4(null);
|
|
2032
|
+
const hoveredTaskTrack = useRef4(null);
|
|
1804
2033
|
const runtimeRef = useRef4(void 0);
|
|
1805
2034
|
const pendingPromptRef = useRef4(void 0);
|
|
1806
2035
|
pendingPromptRef.current ??= new SinglePendingPrompt();
|
|
@@ -2097,7 +2326,12 @@ function App({ workspace, home, resumeSession, instanceId, palAlias }) {
|
|
|
2097
2326
|
use_input_default((character, key, event) => {
|
|
2098
2327
|
const terminalAction = classifyTerminalInput(key);
|
|
2099
2328
|
if (terminalAction?.type === "scroll") {
|
|
2100
|
-
const scroll = selectWheelScrollTarget(
|
|
2329
|
+
const scroll = selectWheelScrollTarget(
|
|
2330
|
+
scrollRef.current,
|
|
2331
|
+
mainTaskScrollRef.current,
|
|
2332
|
+
subagentTaskScrollRef.current,
|
|
2333
|
+
hoveredTaskTrack.current
|
|
2334
|
+
);
|
|
2101
2335
|
if (scroll !== null) {
|
|
2102
2336
|
if (terminalAction.rows < 0) scrollUp(scroll, -terminalAction.rows);
|
|
2103
2337
|
else scrollDown(scroll, terminalAction.rows);
|
|
@@ -2388,9 +2622,10 @@ function App({ workspace, home, resumeSession, instanceId, palAlias }) {
|
|
|
2388
2622
|
...ideContext === void 0 ? {} : { ideContext },
|
|
2389
2623
|
completedSlashTokenLength: completedTokenLength,
|
|
2390
2624
|
scrollRef,
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2625
|
+
mainTaskScrollRef,
|
|
2626
|
+
subagentTaskScrollRef,
|
|
2627
|
+
onTaskPanelHoverChange: (track) => {
|
|
2628
|
+
hoveredTaskTrack.current = track;
|
|
2394
2629
|
},
|
|
2395
2630
|
...slashCompletion === null ? {} : { completion: slashCompletion },
|
|
2396
2631
|
...mentionCompletion === null ? {} : { mentionCompletion, onMentionSelect: selectMention },
|
|
@@ -2524,7 +2759,8 @@ function TerminalLayout({
|
|
|
2524
2759
|
onMentionSelect,
|
|
2525
2760
|
completedSlashTokenLength: tokenLength = 0,
|
|
2526
2761
|
scrollRef,
|
|
2527
|
-
|
|
2762
|
+
mainTaskScrollRef,
|
|
2763
|
+
subagentTaskScrollRef,
|
|
2528
2764
|
onTaskPanelHoverChange,
|
|
2529
2765
|
onPromptCursorChange,
|
|
2530
2766
|
ideContext
|
|
@@ -2583,7 +2819,8 @@ function TerminalLayout({
|
|
|
2583
2819
|
interactive: activeSession,
|
|
2584
2820
|
maxHeight: taskPanelRows,
|
|
2585
2821
|
columns,
|
|
2586
|
-
...
|
|
2822
|
+
...mainTaskScrollRef === void 0 ? {} : { mainScrollRef: mainTaskScrollRef },
|
|
2823
|
+
...subagentTaskScrollRef === void 0 ? {} : { subagentScrollRef: subagentTaskScrollRef },
|
|
2587
2824
|
...onTaskPanelHoverChange === void 0 ? {} : { onHoverChange: onTaskPanelHoverChange }
|
|
2588
2825
|
}
|
|
2589
2826
|
),
|
|
@@ -2804,8 +3041,10 @@ function jumpScroll(scroll, delta) {
|
|
|
2804
3041
|
scroll.scrollTo(Math.max(0, target));
|
|
2805
3042
|
}
|
|
2806
3043
|
}
|
|
2807
|
-
function selectWheelScrollTarget(transcript,
|
|
2808
|
-
|
|
3044
|
+
function selectWheelScrollTarget(transcript, mainTasks, subagentTasks, hoveredTrack) {
|
|
3045
|
+
if (hoveredTrack === "main" && mainTasks !== null) return mainTasks;
|
|
3046
|
+
if (hoveredTrack === "subagent" && subagentTasks !== null) return subagentTasks;
|
|
3047
|
+
return transcript;
|
|
2809
3048
|
}
|
|
2810
3049
|
function taskPanelViewportRows(rows, reservedBottomRows, hasTasks) {
|
|
2811
3050
|
if (!hasTasks) return 0;
|
|
@@ -21447,6 +21447,7 @@ export {
|
|
|
21447
21447
|
Box_default,
|
|
21448
21448
|
Text,
|
|
21449
21449
|
stripAnsi,
|
|
21450
|
+
stringWidth,
|
|
21450
21451
|
ScrollBox_default,
|
|
21451
21452
|
instances_default,
|
|
21452
21453
|
osc,
|
package/dist/cli-main.js
CHANGED
|
@@ -919,9 +919,9 @@ async function runInteractiveCli(props) {
|
|
|
919
919
|
const disposeUserTimingSweeper = installUiUserTimingSweeper();
|
|
920
920
|
try {
|
|
921
921
|
const [{ render, AlternateScreen }, { createElement }, { App }] = await Promise.all([
|
|
922
|
-
import("./claude-ink-
|
|
922
|
+
import("./claude-ink-C24UQAL7.js"),
|
|
923
923
|
import("react"),
|
|
924
|
-
import("./app-
|
|
924
|
+
import("./app-PXXQOEWP.js")
|
|
925
925
|
]);
|
|
926
926
|
const instance = await render(createElement(
|
|
927
927
|
AlternateScreen,
|