@sma1lboy/kobe 0.5.25 → 0.5.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1704 -1075
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -5210,25 +5210,6 @@ function disarmCtrlC() {
|
|
|
5210
5210
|
}
|
|
5211
5211
|
setCtrlCArmed(false);
|
|
5212
5212
|
}
|
|
5213
|
-
function useBackgroundTasksArmed() {
|
|
5214
|
-
return bgTasksArmed;
|
|
5215
|
-
}
|
|
5216
|
-
function pressBackgroundTasksChord() {
|
|
5217
|
-
if (bgTasksArmTimer !== null) {
|
|
5218
|
-
clearTimeout(bgTasksArmTimer);
|
|
5219
|
-
bgTasksArmTimer = null;
|
|
5220
|
-
}
|
|
5221
|
-
if (bgTasksArmed()) {
|
|
5222
|
-
setBgTasksArmed(false);
|
|
5223
|
-
return "fire";
|
|
5224
|
-
}
|
|
5225
|
-
setBgTasksArmed(true);
|
|
5226
|
-
bgTasksArmTimer = setTimeout(() => {
|
|
5227
|
-
bgTasksArmTimer = null;
|
|
5228
|
-
setBgTasksArmed(false);
|
|
5229
|
-
}, BG_TASKS_DOUBLE_PRESS_MS);
|
|
5230
|
-
return "armed";
|
|
5231
|
-
}
|
|
5232
5213
|
function findBinding(id) {
|
|
5233
5214
|
return KobeKeymap.find((b) => b.id === id);
|
|
5234
5215
|
}
|
|
@@ -5314,14 +5295,13 @@ function useKobeKeybindings(opts) {
|
|
|
5314
5295
|
useBindings(() => ({ bindings: bindings() }));
|
|
5315
5296
|
useBindings(() => ({ enabled: focusCycleEnabled(), bindings: focusCycleBindings() }));
|
|
5316
5297
|
}
|
|
5317
|
-
var CTRL_C_QUIT_WINDOW_MS = 1500, ctrlCArmed, setCtrlCArmed, ctrlCArmTimer = null,
|
|
5298
|
+
var CTRL_C_QUIT_WINDOW_MS = 1500, ctrlCArmed, setCtrlCArmed, ctrlCArmTimer = null, KobeKeymap;
|
|
5318
5299
|
var init_keybindings = __esm(() => {
|
|
5319
5300
|
init_solid();
|
|
5320
5301
|
init_dev();
|
|
5321
5302
|
init_keymap();
|
|
5322
5303
|
init_command_palette();
|
|
5323
5304
|
[ctrlCArmed, setCtrlCArmed] = createSignal(false);
|
|
5324
|
-
[bgTasksArmed, setBgTasksArmed] = createSignal(false);
|
|
5325
5305
|
KobeKeymap = [
|
|
5326
5306
|
{
|
|
5327
5307
|
id: "palette.open",
|
|
@@ -5353,13 +5333,6 @@ var init_keybindings = __esm(() => {
|
|
|
5353
5333
|
category: "Global",
|
|
5354
5334
|
description: "Open active task worktree in editor"
|
|
5355
5335
|
},
|
|
5356
|
-
{
|
|
5357
|
-
id: "tasks.background",
|
|
5358
|
-
scope: "global",
|
|
5359
|
-
keys: ["ctrl+b"],
|
|
5360
|
-
category: "Global",
|
|
5361
|
-
description: "Open background tasks (double-press ctrl+b)"
|
|
5362
|
-
},
|
|
5363
5336
|
{
|
|
5364
5337
|
id: "settings.open",
|
|
5365
5338
|
scope: "global",
|
|
@@ -5579,7 +5552,8 @@ var init_keybindings = __esm(() => {
|
|
|
5579
5552
|
scope: "workspace",
|
|
5580
5553
|
keys: ["ctrl+t"],
|
|
5581
5554
|
category: "Workspace",
|
|
5582
|
-
description: "New chat tab"
|
|
5555
|
+
description: "New chat tab",
|
|
5556
|
+
hint: { keys: "ctrl+t", label: "new tab" }
|
|
5583
5557
|
},
|
|
5584
5558
|
{
|
|
5585
5559
|
id: "chat.fork.new",
|
|
@@ -5602,7 +5576,8 @@ var init_keybindings = __esm(() => {
|
|
|
5602
5576
|
scope: "workspace",
|
|
5603
5577
|
keys: ["ctrl+w"],
|
|
5604
5578
|
category: "Workspace",
|
|
5605
|
-
description: "Close chat tab"
|
|
5579
|
+
description: "Close chat tab",
|
|
5580
|
+
hint: { keys: "ctrl+w", label: "close tab" }
|
|
5606
5581
|
},
|
|
5607
5582
|
{
|
|
5608
5583
|
id: "chat.tab.rename",
|
|
@@ -5689,7 +5664,7 @@ var init_keybindings = __esm(() => {
|
|
|
5689
5664
|
scope: "files",
|
|
5690
5665
|
keys: ["[", "]"],
|
|
5691
5666
|
category: "Files",
|
|
5692
|
-
description: "Switch tab (cycle All / Changes
|
|
5667
|
+
description: "Switch tab (cycle All / Changes)",
|
|
5693
5668
|
hint: { keys: "[/]", label: "tab" }
|
|
5694
5669
|
},
|
|
5695
5670
|
{
|
|
@@ -5788,7 +5763,7 @@ var TAB_ORDER;
|
|
|
5788
5763
|
var init_keys = __esm(() => {
|
|
5789
5764
|
init_keybindings();
|
|
5790
5765
|
init_keymap();
|
|
5791
|
-
TAB_ORDER = ["all", "changes"
|
|
5766
|
+
TAB_ORDER = ["all", "changes"];
|
|
5792
5767
|
});
|
|
5793
5768
|
|
|
5794
5769
|
// src/tui/panes/filetree/open-external.ts
|
|
@@ -6173,10 +6148,10 @@ function FileTree(props) {
|
|
|
6173
6148
|
}
|
|
6174
6149
|
}));
|
|
6175
6150
|
return (() => {
|
|
6176
|
-
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("box"), _el$4 = createElement("text"), _el$
|
|
6151
|
+
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("box"), _el$4 = createElement("text"), _el$0 = createElement("scrollbox");
|
|
6177
6152
|
insertNode(_el$, _el$2);
|
|
6178
6153
|
insertNode(_el$, _el$3);
|
|
6179
|
-
insertNode(_el$, _el$
|
|
6154
|
+
insertNode(_el$, _el$0);
|
|
6180
6155
|
setProp(_el$, "flexDirection", "column");
|
|
6181
6156
|
setProp(_el$, "flexGrow", 1);
|
|
6182
6157
|
setProp(_el$, "paddingTop", 1);
|
|
@@ -6192,118 +6167,132 @@ function FileTree(props) {
|
|
|
6192
6167
|
children: (t) => {
|
|
6193
6168
|
const isActive = () => tab() === t;
|
|
6194
6169
|
return (() => {
|
|
6195
|
-
var _el$
|
|
6196
|
-
setProp(_el$
|
|
6197
|
-
setProp(_el$
|
|
6198
|
-
insert(_el$
|
|
6170
|
+
var _el$19 = createElement("text");
|
|
6171
|
+
setProp(_el$19, "wrapMode", "none");
|
|
6172
|
+
setProp(_el$19, "onMouseUp", () => setTab(t));
|
|
6173
|
+
insert(_el$19, () => TAB_LABEL[t]);
|
|
6199
6174
|
effect((_p$) => {
|
|
6200
6175
|
var _v$3 = isActive() ? theme.primary : theme.textMuted, _v$4 = isActive() ? TextAttributes3.BOLD : undefined;
|
|
6201
|
-
_v$3 !== _p$.e && (_p$.e = setProp(_el$
|
|
6202
|
-
_v$4 !== _p$.t && (_p$.t = setProp(_el$
|
|
6176
|
+
_v$3 !== _p$.e && (_p$.e = setProp(_el$19, "fg", _v$3, _p$.e));
|
|
6177
|
+
_v$4 !== _p$.t && (_p$.t = setProp(_el$19, "attributes", _v$4, _p$.t));
|
|
6203
6178
|
return _p$;
|
|
6204
6179
|
}, {
|
|
6205
6180
|
e: undefined,
|
|
6206
6181
|
t: undefined
|
|
6207
6182
|
});
|
|
6208
|
-
return _el$
|
|
6183
|
+
return _el$19;
|
|
6209
6184
|
})();
|
|
6210
6185
|
}
|
|
6211
6186
|
}));
|
|
6212
6187
|
insertNode(_el$3, _el$4);
|
|
6213
6188
|
setProp(_el$3, "flexDirection", "row");
|
|
6214
|
-
setProp(_el$3, "paddingBottom",
|
|
6189
|
+
setProp(_el$3, "paddingBottom", 0);
|
|
6215
6190
|
setProp(_el$3, "flexShrink", 0);
|
|
6216
6191
|
insertNode(_el$4, createTextNode(`enter open \xB7 o open externally \xB7 r refresh`));
|
|
6217
6192
|
setProp(_el$4, "wrapMode", "none");
|
|
6193
|
+
insert(_el$, createComponent2(Show, {
|
|
6194
|
+
get when() {
|
|
6195
|
+
return tab() === "changes";
|
|
6196
|
+
},
|
|
6197
|
+
get children() {
|
|
6198
|
+
var _el$6 = createElement("box"), _el$7 = createElement("text");
|
|
6199
|
+
insertNode(_el$6, _el$7);
|
|
6200
|
+
setProp(_el$6, "flexDirection", "row");
|
|
6201
|
+
setProp(_el$6, "paddingBottom", 1);
|
|
6202
|
+
setProp(_el$6, "flexShrink", 0);
|
|
6203
|
+
insertNode(_el$7, createTextNode(`M modified \xB7 A added \xB7 D deleted \xB7 ? untracked`));
|
|
6204
|
+
setProp(_el$7, "wrapMode", "none");
|
|
6205
|
+
effect((_$p) => setProp(_el$7, "fg", theme.textMuted, _$p));
|
|
6206
|
+
return _el$6;
|
|
6207
|
+
}
|
|
6208
|
+
}), _el$0);
|
|
6209
|
+
insert(_el$, createComponent2(Show, {
|
|
6210
|
+
get when() {
|
|
6211
|
+
return tab() !== "changes";
|
|
6212
|
+
},
|
|
6213
|
+
get children() {
|
|
6214
|
+
var _el$9 = createElement("box");
|
|
6215
|
+
setProp(_el$9, "flexDirection", "row");
|
|
6216
|
+
setProp(_el$9, "paddingBottom", 1);
|
|
6217
|
+
setProp(_el$9, "flexShrink", 0);
|
|
6218
|
+
return _el$9;
|
|
6219
|
+
}
|
|
6220
|
+
}), _el$0);
|
|
6218
6221
|
use((r) => {
|
|
6219
6222
|
scrollRef = r;
|
|
6220
|
-
}, _el$
|
|
6221
|
-
setProp(_el$
|
|
6222
|
-
setProp(_el$
|
|
6223
|
+
}, _el$0);
|
|
6224
|
+
setProp(_el$0, "flexGrow", 1);
|
|
6225
|
+
setProp(_el$0, "verticalScrollbarOptions", {
|
|
6223
6226
|
trackOptions: {
|
|
6224
6227
|
foregroundColor: "transparent"
|
|
6225
6228
|
}
|
|
6226
6229
|
});
|
|
6227
|
-
insert(_el$
|
|
6230
|
+
insert(_el$0, createComponent2(Show, {
|
|
6228
6231
|
get when() {
|
|
6229
6232
|
return props.worktreePath() == null;
|
|
6230
6233
|
},
|
|
6231
6234
|
get children() {
|
|
6232
|
-
var _el$
|
|
6233
|
-
insertNode(_el$
|
|
6234
|
-
setProp(_el$
|
|
6235
|
-
setProp(_el$
|
|
6236
|
-
insertNode(_el$
|
|
6237
|
-
effect((_$p) => setProp(_el$
|
|
6238
|
-
return _el$
|
|
6235
|
+
var _el$1 = createElement("box"), _el$10 = createElement("text");
|
|
6236
|
+
insertNode(_el$1, _el$10);
|
|
6237
|
+
setProp(_el$1, "paddingTop", 1);
|
|
6238
|
+
setProp(_el$1, "paddingLeft", 1);
|
|
6239
|
+
insertNode(_el$10, createTextNode(`(no task \u2014 press n to create)`));
|
|
6240
|
+
effect((_$p) => setProp(_el$10, "fg", theme.textMuted, _$p));
|
|
6241
|
+
return _el$1;
|
|
6239
6242
|
}
|
|
6240
6243
|
}), null);
|
|
6241
|
-
insert(_el$
|
|
6244
|
+
insert(_el$0, createComponent2(Show, {
|
|
6242
6245
|
get when() {
|
|
6243
6246
|
return memo2(() => props.worktreePath() != null)() && error() != null;
|
|
6244
6247
|
},
|
|
6245
6248
|
get children() {
|
|
6246
|
-
var _el$
|
|
6247
|
-
insertNode(_el$
|
|
6248
|
-
insertNode(_el$
|
|
6249
|
-
setProp(_el$
|
|
6250
|
-
setProp(_el$
|
|
6251
|
-
setProp(_el$
|
|
6252
|
-
setProp(_el$
|
|
6253
|
-
setProp(_el$
|
|
6254
|
-
insert(_el$
|
|
6255
|
-
insertNode(_el$
|
|
6256
|
-
setProp(_el$
|
|
6249
|
+
var _el$12 = createElement("box"), _el$13 = createElement("text"), _el$14 = createElement("text");
|
|
6250
|
+
insertNode(_el$12, _el$13);
|
|
6251
|
+
insertNode(_el$12, _el$14);
|
|
6252
|
+
setProp(_el$12, "paddingTop", 1);
|
|
6253
|
+
setProp(_el$12, "paddingLeft", 1);
|
|
6254
|
+
setProp(_el$12, "flexDirection", "column");
|
|
6255
|
+
setProp(_el$12, "gap", 0);
|
|
6256
|
+
setProp(_el$13, "wrapMode", "word");
|
|
6257
|
+
insert(_el$13, () => summarizeGitError(error() ?? ""));
|
|
6258
|
+
insertNode(_el$14, createTextNode(`press r to retry`));
|
|
6259
|
+
setProp(_el$14, "wrapMode", "word");
|
|
6257
6260
|
effect((_p$) => {
|
|
6258
6261
|
var { error: _v$, textMuted: _v$2 } = theme;
|
|
6259
|
-
_v$ !== _p$.e && (_p$.e = setProp(_el$
|
|
6260
|
-
_v$2 !== _p$.t && (_p$.t = setProp(_el$
|
|
6262
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$13, "fg", _v$, _p$.e));
|
|
6263
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$14, "fg", _v$2, _p$.t));
|
|
6261
6264
|
return _p$;
|
|
6262
6265
|
}, {
|
|
6263
6266
|
e: undefined,
|
|
6264
6267
|
t: undefined
|
|
6265
6268
|
});
|
|
6266
|
-
return _el$0;
|
|
6267
|
-
}
|
|
6268
|
-
}), null);
|
|
6269
|
-
insert(_el$6, createComponent2(Show, {
|
|
6270
|
-
get when() {
|
|
6271
|
-
return memo2(() => !!(props.worktreePath() != null && error() == null))() && tab() === "checks";
|
|
6272
|
-
},
|
|
6273
|
-
get children() {
|
|
6274
|
-
var _el$12 = createElement("box"), _el$13 = createElement("text");
|
|
6275
|
-
insertNode(_el$12, _el$13);
|
|
6276
|
-
setProp(_el$12, "paddingTop", 1);
|
|
6277
|
-
setProp(_el$12, "paddingLeft", 1);
|
|
6278
|
-
insertNode(_el$13, createTextNode(`(no checks yet \u2014 wave 4)`));
|
|
6279
|
-
effect((_$p) => setProp(_el$13, "fg", theme.textMuted, _$p));
|
|
6280
6269
|
return _el$12;
|
|
6281
6270
|
}
|
|
6282
6271
|
}), null);
|
|
6283
|
-
insert(_el$
|
|
6272
|
+
insert(_el$0, createComponent2(Show, {
|
|
6284
6273
|
get when() {
|
|
6285
|
-
return memo2(() => !!(props.worktreePath() != null && error() == null &&
|
|
6274
|
+
return memo2(() => !!(props.worktreePath() != null && error() == null && rows().length === 0))() && (tab() === "all" && allFiles() != null || tab() === "changes" && changes() != null);
|
|
6286
6275
|
},
|
|
6287
6276
|
get children() {
|
|
6288
|
-
var _el$
|
|
6289
|
-
insertNode(_el$
|
|
6290
|
-
setProp(_el$
|
|
6291
|
-
setProp(_el$
|
|
6292
|
-
insert(_el$
|
|
6293
|
-
effect((_$p) => setProp(_el$
|
|
6294
|
-
return _el$
|
|
6277
|
+
var _el$16 = createElement("box"), _el$17 = createElement("text");
|
|
6278
|
+
insertNode(_el$16, _el$17);
|
|
6279
|
+
setProp(_el$16, "paddingTop", 1);
|
|
6280
|
+
setProp(_el$16, "paddingLeft", 1);
|
|
6281
|
+
insert(_el$17, () => tab() === "all" ? "(empty worktree)" : "(no changes \u2014 clean worktree)");
|
|
6282
|
+
effect((_$p) => setProp(_el$17, "fg", theme.textMuted, _$p));
|
|
6283
|
+
return _el$16;
|
|
6295
6284
|
}
|
|
6296
6285
|
}), null);
|
|
6297
|
-
insert(_el$
|
|
6286
|
+
insert(_el$0, createComponent2(Show, {
|
|
6298
6287
|
get when() {
|
|
6299
6288
|
return memo2(() => !!(props.worktreePath() != null && error() == null))() && rows().length > 0;
|
|
6300
6289
|
},
|
|
6301
6290
|
get children() {
|
|
6302
|
-
var _el$
|
|
6303
|
-
setProp(_el$
|
|
6304
|
-
setProp(_el$
|
|
6305
|
-
setProp(_el$
|
|
6306
|
-
insert(_el$
|
|
6291
|
+
var _el$18 = createElement("box");
|
|
6292
|
+
setProp(_el$18, "flexShrink", 0);
|
|
6293
|
+
setProp(_el$18, "gap", 0);
|
|
6294
|
+
setProp(_el$18, "paddingRight", 1);
|
|
6295
|
+
insert(_el$18, createComponent2(For, {
|
|
6307
6296
|
get each() {
|
|
6308
6297
|
return rows();
|
|
6309
6298
|
},
|
|
@@ -6313,11 +6302,11 @@ function FileTree(props) {
|
|
|
6313
6302
|
const indent = " ".repeat(row.depth);
|
|
6314
6303
|
const marker = row.expanded ? "\u25BE" : "\u25B8";
|
|
6315
6304
|
return (() => {
|
|
6316
|
-
var _el$
|
|
6317
|
-
insertNode(_el$
|
|
6318
|
-
setProp(_el$
|
|
6319
|
-
setProp(_el$
|
|
6320
|
-
setProp(_el$
|
|
6305
|
+
var _el$20 = createElement("box"), _el$21 = createElement("text");
|
|
6306
|
+
insertNode(_el$20, _el$21);
|
|
6307
|
+
setProp(_el$20, "paddingLeft", 1);
|
|
6308
|
+
setProp(_el$20, "paddingRight", 1);
|
|
6309
|
+
setProp(_el$20, "onMouseUp", () => {
|
|
6321
6310
|
setCursorIndex(index());
|
|
6322
6311
|
setExpandedDirs((prev) => {
|
|
6323
6312
|
const next = new Set(prev);
|
|
@@ -6328,45 +6317,45 @@ function FileTree(props) {
|
|
|
6328
6317
|
return next;
|
|
6329
6318
|
});
|
|
6330
6319
|
});
|
|
6331
|
-
setProp(_el$
|
|
6332
|
-
insert(_el$
|
|
6320
|
+
setProp(_el$21, "wrapMode", "none");
|
|
6321
|
+
insert(_el$21, () => `${indent}${marker} ${row.name}/`);
|
|
6333
6322
|
effect((_p$) => {
|
|
6334
6323
|
var _v$5 = isCursor() ? theme.primary : undefined, _v$6 = isCursor() ? theme.selectedListItemText : theme.textMuted, _v$7 = TextAttributes3.BOLD;
|
|
6335
|
-
_v$5 !== _p$.e && (_p$.e = setProp(_el$
|
|
6336
|
-
_v$6 !== _p$.t && (_p$.t = setProp(_el$
|
|
6337
|
-
_v$7 !== _p$.a && (_p$.a = setProp(_el$
|
|
6324
|
+
_v$5 !== _p$.e && (_p$.e = setProp(_el$20, "backgroundColor", _v$5, _p$.e));
|
|
6325
|
+
_v$6 !== _p$.t && (_p$.t = setProp(_el$21, "fg", _v$6, _p$.t));
|
|
6326
|
+
_v$7 !== _p$.a && (_p$.a = setProp(_el$21, "attributes", _v$7, _p$.a));
|
|
6338
6327
|
return _p$;
|
|
6339
6328
|
}, {
|
|
6340
6329
|
e: undefined,
|
|
6341
6330
|
t: undefined,
|
|
6342
6331
|
a: undefined
|
|
6343
6332
|
});
|
|
6344
|
-
return _el$
|
|
6333
|
+
return _el$20;
|
|
6345
6334
|
})();
|
|
6346
6335
|
}
|
|
6347
6336
|
if (row.kind === "file") {
|
|
6348
6337
|
const indent = " ".repeat(row.depth);
|
|
6349
6338
|
return (() => {
|
|
6350
|
-
var _el$
|
|
6351
|
-
insertNode(_el$
|
|
6352
|
-
setProp(_el$
|
|
6353
|
-
setProp(_el$
|
|
6354
|
-
setProp(_el$
|
|
6339
|
+
var _el$22 = createElement("box"), _el$23 = createElement("text");
|
|
6340
|
+
insertNode(_el$22, _el$23);
|
|
6341
|
+
setProp(_el$22, "paddingLeft", 1);
|
|
6342
|
+
setProp(_el$22, "paddingRight", 1);
|
|
6343
|
+
setProp(_el$22, "onMouseUp", () => {
|
|
6355
6344
|
setCursorIndex(index());
|
|
6356
6345
|
props.onOpenFile(row.path);
|
|
6357
6346
|
});
|
|
6358
|
-
setProp(_el$
|
|
6359
|
-
insert(_el$
|
|
6347
|
+
setProp(_el$23, "wrapMode", "none");
|
|
6348
|
+
insert(_el$23, () => `${indent} ${row.name}`);
|
|
6360
6349
|
effect((_p$) => {
|
|
6361
6350
|
var _v$8 = isCursor() ? theme.primary : undefined, _v$9 = isCursor() ? theme.selectedListItemText : theme.text;
|
|
6362
|
-
_v$8 !== _p$.e && (_p$.e = setProp(_el$
|
|
6363
|
-
_v$9 !== _p$.t && (_p$.t = setProp(_el$
|
|
6351
|
+
_v$8 !== _p$.e && (_p$.e = setProp(_el$22, "backgroundColor", _v$8, _p$.e));
|
|
6352
|
+
_v$9 !== _p$.t && (_p$.t = setProp(_el$23, "fg", _v$9, _p$.t));
|
|
6364
6353
|
return _p$;
|
|
6365
6354
|
}, {
|
|
6366
6355
|
e: undefined,
|
|
6367
6356
|
t: undefined
|
|
6368
6357
|
});
|
|
6369
|
-
return _el$
|
|
6358
|
+
return _el$22;
|
|
6370
6359
|
})();
|
|
6371
6360
|
}
|
|
6372
6361
|
const tone = statusToken(row.status);
|
|
@@ -6388,62 +6377,62 @@ function FileTree(props) {
|
|
|
6388
6377
|
const addedText = row.added == null ? " ".repeat(w.added) : `+${row.added}`.padStart(w.added);
|
|
6389
6378
|
const deletedText = row.deleted == null ? " ".repeat(w.deleted) : `-${row.deleted}`.padStart(w.deleted);
|
|
6390
6379
|
return (() => {
|
|
6391
|
-
var _el$
|
|
6392
|
-
insertNode(_el$
|
|
6393
|
-
insertNode(_el$
|
|
6394
|
-
setProp(_el$
|
|
6395
|
-
setProp(_el$
|
|
6396
|
-
setProp(_el$
|
|
6397
|
-
setProp(_el$
|
|
6398
|
-
setProp(_el$
|
|
6380
|
+
var _el$24 = createElement("box"), _el$25 = createElement("text"), _el$26 = createElement("text");
|
|
6381
|
+
insertNode(_el$24, _el$25);
|
|
6382
|
+
insertNode(_el$24, _el$26);
|
|
6383
|
+
setProp(_el$24, "flexDirection", "row");
|
|
6384
|
+
setProp(_el$24, "gap", 1);
|
|
6385
|
+
setProp(_el$24, "paddingLeft", 1);
|
|
6386
|
+
setProp(_el$24, "paddingRight", 1);
|
|
6387
|
+
setProp(_el$24, "onMouseUp", () => {
|
|
6399
6388
|
setCursorIndex(index());
|
|
6400
6389
|
props.onOpenFile(row.path);
|
|
6401
6390
|
});
|
|
6402
|
-
setProp(_el$24, "wrapMode", "none");
|
|
6403
|
-
insert(_el$24, () => row.status);
|
|
6404
6391
|
setProp(_el$25, "wrapMode", "none");
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
|
|
6392
|
+
insert(_el$25, () => row.status);
|
|
6393
|
+
setProp(_el$26, "wrapMode", "none");
|
|
6394
|
+
setProp(_el$26, "flexGrow", 1);
|
|
6395
|
+
insert(_el$26, () => row.path);
|
|
6396
|
+
insert(_el$24, createComponent2(Show, {
|
|
6408
6397
|
get when() {
|
|
6409
6398
|
return w.added > 0;
|
|
6410
6399
|
},
|
|
6411
6400
|
get children() {
|
|
6412
|
-
var _el$
|
|
6413
|
-
setProp(_el$
|
|
6414
|
-
insert(_el$
|
|
6415
|
-
effect((_$p) => setProp(_el$
|
|
6416
|
-
return _el$
|
|
6401
|
+
var _el$27 = createElement("text");
|
|
6402
|
+
setProp(_el$27, "wrapMode", "none");
|
|
6403
|
+
insert(_el$27, addedText);
|
|
6404
|
+
effect((_$p) => setProp(_el$27, "fg", isCursor() ? theme.selectedListItemText : theme.success, _$p));
|
|
6405
|
+
return _el$27;
|
|
6417
6406
|
}
|
|
6418
6407
|
}), null);
|
|
6419
|
-
insert(_el$
|
|
6408
|
+
insert(_el$24, createComponent2(Show, {
|
|
6420
6409
|
get when() {
|
|
6421
6410
|
return w.deleted > 0;
|
|
6422
6411
|
},
|
|
6423
6412
|
get children() {
|
|
6424
|
-
var _el$
|
|
6425
|
-
setProp(_el$
|
|
6426
|
-
insert(_el$
|
|
6427
|
-
effect((_$p) => setProp(_el$
|
|
6428
|
-
return _el$
|
|
6413
|
+
var _el$28 = createElement("text");
|
|
6414
|
+
setProp(_el$28, "wrapMode", "none");
|
|
6415
|
+
insert(_el$28, deletedText);
|
|
6416
|
+
effect((_$p) => setProp(_el$28, "fg", isCursor() ? theme.selectedListItemText : theme.error, _$p));
|
|
6417
|
+
return _el$28;
|
|
6429
6418
|
}
|
|
6430
6419
|
}), null);
|
|
6431
6420
|
effect((_p$) => {
|
|
6432
6421
|
var _v$0 = isCursor() ? theme.primary : undefined, _v$1 = isCursor() ? theme.selectedListItemText : statusColor(), _v$10 = isCursor() ? theme.selectedListItemText : theme.text;
|
|
6433
|
-
_v$0 !== _p$.e && (_p$.e = setProp(_el$
|
|
6434
|
-
_v$1 !== _p$.t && (_p$.t = setProp(_el$
|
|
6435
|
-
_v$10 !== _p$.a && (_p$.a = setProp(_el$
|
|
6422
|
+
_v$0 !== _p$.e && (_p$.e = setProp(_el$24, "backgroundColor", _v$0, _p$.e));
|
|
6423
|
+
_v$1 !== _p$.t && (_p$.t = setProp(_el$25, "fg", _v$1, _p$.t));
|
|
6424
|
+
_v$10 !== _p$.a && (_p$.a = setProp(_el$26, "fg", _v$10, _p$.a));
|
|
6436
6425
|
return _p$;
|
|
6437
6426
|
}, {
|
|
6438
6427
|
e: undefined,
|
|
6439
6428
|
t: undefined,
|
|
6440
6429
|
a: undefined
|
|
6441
6430
|
});
|
|
6442
|
-
return _el$
|
|
6431
|
+
return _el$24;
|
|
6443
6432
|
})();
|
|
6444
6433
|
}
|
|
6445
6434
|
}));
|
|
6446
|
-
return _el$
|
|
6435
|
+
return _el$18;
|
|
6447
6436
|
}
|
|
6448
6437
|
}), null);
|
|
6449
6438
|
effect((_$p) => setProp(_el$4, "fg", theme.textMuted, _$p));
|
|
@@ -6466,11 +6455,10 @@ var init_FileTree = __esm(() => {
|
|
|
6466
6455
|
init_git();
|
|
6467
6456
|
init_keys();
|
|
6468
6457
|
init_open_external();
|
|
6469
|
-
TABS = ["all", "changes"
|
|
6458
|
+
TABS = ["all", "changes"];
|
|
6470
6459
|
TAB_LABEL = {
|
|
6471
6460
|
all: "All",
|
|
6472
|
-
changes: "Changes"
|
|
6473
|
-
checks: "Checks"
|
|
6461
|
+
changes: "Changes"
|
|
6474
6462
|
};
|
|
6475
6463
|
});
|
|
6476
6464
|
|
|
@@ -16734,7 +16722,8 @@ var init_capabilities = __esm(() => {
|
|
|
16734
16722
|
{ id: "plan", label: "plan mode" }
|
|
16735
16723
|
],
|
|
16736
16724
|
defaultModelId: resolveClaudeDefaultModelId,
|
|
16737
|
-
contextWindowFor: claudeContextWindowFor
|
|
16725
|
+
contextWindowFor: claudeContextWindowFor,
|
|
16726
|
+
smallFastModelId: () => "claude-haiku-4-5-20251001"
|
|
16738
16727
|
};
|
|
16739
16728
|
claudeIdentity = {
|
|
16740
16729
|
vendorId: "claude",
|
|
@@ -16824,7 +16813,8 @@ var init_capabilities2 = __esm(() => {
|
|
|
16824
16813
|
{ id: "plan", label: "plan mode" }
|
|
16825
16814
|
],
|
|
16826
16815
|
defaultModelId: resolveCodexDefaultModelId,
|
|
16827
|
-
contextWindowFor: codexContextWindowFor
|
|
16816
|
+
contextWindowFor: codexContextWindowFor,
|
|
16817
|
+
smallFastModelId: () => "gpt-5.4-mini"
|
|
16828
16818
|
};
|
|
16829
16819
|
codexIdentity = {
|
|
16830
16820
|
vendorId: "codex",
|
|
@@ -16907,7 +16897,8 @@ var init_capabilities3 = __esm(() => {
|
|
|
16907
16897
|
{ id: "plan", label: "plan mode" }
|
|
16908
16898
|
],
|
|
16909
16899
|
defaultModelId: resolveGeminiDefaultModelId,
|
|
16910
|
-
contextWindowFor: geminiContextWindowFor
|
|
16900
|
+
contextWindowFor: geminiContextWindowFor,
|
|
16901
|
+
smallFastModelId: () => "gemini-3-flash-preview"
|
|
16911
16902
|
};
|
|
16912
16903
|
geminiIdentity = {
|
|
16913
16904
|
vendorId: "gemini",
|
|
@@ -17490,7 +17481,7 @@ var init_package = __esm(() => {
|
|
|
17490
17481
|
package_default = {
|
|
17491
17482
|
$schema: "https://json.schemastore.org/package.json",
|
|
17492
17483
|
name: "@sma1lboy/kobe",
|
|
17493
|
-
version: "0.5.
|
|
17484
|
+
version: "0.5.27",
|
|
17494
17485
|
description: "TUI orchestrator for Claude Code (codename)",
|
|
17495
17486
|
type: "module",
|
|
17496
17487
|
packageManager: "bun@1.3.13",
|
|
@@ -22472,7 +22463,7 @@ class GeminiLocal {
|
|
|
22472
22463
|
async listSessions(cwd) {
|
|
22473
22464
|
return listSessionsForCwd3(cwd);
|
|
22474
22465
|
}
|
|
22475
|
-
async listCommands() {
|
|
22466
|
+
async listCommands(_opts) {
|
|
22476
22467
|
return [];
|
|
22477
22468
|
}
|
|
22478
22469
|
async stop(handle) {
|
|
@@ -23256,6 +23247,14 @@ class MetadataSuggester {
|
|
|
23256
23247
|
async suggestTitle(prompt, context) {
|
|
23257
23248
|
return this.runOneShot(buildTitleInstruction, sanitizeTitleText, prompt, context);
|
|
23258
23249
|
}
|
|
23250
|
+
async suggestRecap(history, context) {
|
|
23251
|
+
if (history.length === 0)
|
|
23252
|
+
return null;
|
|
23253
|
+
const transcript = renderRecapTranscript(history);
|
|
23254
|
+
if (!transcript)
|
|
23255
|
+
return null;
|
|
23256
|
+
return this.runOneShot(() => buildRecapInstruction(transcript), sanitizeRecapText, transcript, context);
|
|
23257
|
+
}
|
|
23259
23258
|
async runOneShot(builder, sanitize, prompt, context) {
|
|
23260
23259
|
const trimmed = prompt.trim();
|
|
23261
23260
|
if (!trimmed)
|
|
@@ -23359,6 +23358,59 @@ function sanitizeKebabSlug(raw) {
|
|
|
23359
23358
|
const cleaned = firstLine.toLowerCase().replace(/^["'`]+|["'`]+$/g, "").replace(/^(branch|slug|worktree)[:\s-]+/, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, MAX_SLUG_LEN).replace(/-+$/g, "");
|
|
23360
23359
|
return cleaned.length > 0 ? cleaned : null;
|
|
23361
23360
|
}
|
|
23361
|
+
function renderRecapTranscript(history) {
|
|
23362
|
+
const window2 = history.slice(-RECAP_MESSAGE_WINDOW);
|
|
23363
|
+
const lines = [];
|
|
23364
|
+
for (const m2 of window2) {
|
|
23365
|
+
let text = "";
|
|
23366
|
+
for (const b2 of m2.blocks) {
|
|
23367
|
+
if (b2.type === "text" && b2.text)
|
|
23368
|
+
text += text ? `
|
|
23369
|
+
${b2.text}` : b2.text;
|
|
23370
|
+
}
|
|
23371
|
+
const cleaned = text.trim();
|
|
23372
|
+
if (!cleaned)
|
|
23373
|
+
continue;
|
|
23374
|
+
const capped = cleaned.length > RECAP_PER_MESSAGE_CHAR_CAP ? `${cleaned.slice(0, RECAP_PER_MESSAGE_CHAR_CAP)}\u2026` : cleaned;
|
|
23375
|
+
lines.push(`${m2.role}: ${capped}`);
|
|
23376
|
+
}
|
|
23377
|
+
if (lines.length === 0)
|
|
23378
|
+
return null;
|
|
23379
|
+
return lines.join(`
|
|
23380
|
+
|
|
23381
|
+
`);
|
|
23382
|
+
}
|
|
23383
|
+
function buildRecapInstruction(transcript) {
|
|
23384
|
+
return [
|
|
23385
|
+
"The user stepped away and is coming back. Read the conversation transcript below and write a short recap.",
|
|
23386
|
+
"Rules:",
|
|
23387
|
+
"- Exactly 1-3 short sentences.",
|
|
23388
|
+
"- Start by stating the high-level task \u2014 what is being built or debugged, not implementation details.",
|
|
23389
|
+
"- Then state the concrete next step.",
|
|
23390
|
+
"- Skip status reports and commit recaps.",
|
|
23391
|
+
"- Reply with ONLY the recap sentences, no preamble, no quotes, no markdown.",
|
|
23392
|
+
"",
|
|
23393
|
+
"Transcript:",
|
|
23394
|
+
transcript,
|
|
23395
|
+
"",
|
|
23396
|
+
"Recap:"
|
|
23397
|
+
].join(`
|
|
23398
|
+
`);
|
|
23399
|
+
}
|
|
23400
|
+
function sanitizeRecapText(raw) {
|
|
23401
|
+
let cleaned = raw.replace(/\t+/g, " ").replace(/\r\n?/g, `
|
|
23402
|
+
`).replace(/\n{3,}/g, `
|
|
23403
|
+
|
|
23404
|
+
`).trim();
|
|
23405
|
+
if (!cleaned)
|
|
23406
|
+
return null;
|
|
23407
|
+
cleaned = cleaned.replace(/^["'`]+|["'`]+$/g, "").replace(/^(recap|summary)[:\s-]+/i, "").trim();
|
|
23408
|
+
if (!cleaned)
|
|
23409
|
+
return null;
|
|
23410
|
+
if (cleaned.length > MAX_RECAP_LEN)
|
|
23411
|
+
cleaned = `${cleaned.slice(0, MAX_RECAP_LEN).trimEnd()}\u2026`;
|
|
23412
|
+
return cleaned;
|
|
23413
|
+
}
|
|
23362
23414
|
function sanitizeTitleText(raw) {
|
|
23363
23415
|
const firstLine = raw.split(/\r?\n/).map((s2) => s2.trim()).find((s2) => s2.length > 0);
|
|
23364
23416
|
if (!firstLine)
|
|
@@ -23366,7 +23418,7 @@ function sanitizeTitleText(raw) {
|
|
|
23366
23418
|
const cleaned = firstLine.replace(/^["'`]+|["'`]+$/g, "").replace(/^title[:\s-]+/i, "").replace(/[\s.!]+$/g, "").slice(0, MAX_TITLE_LEN).trim();
|
|
23367
23419
|
return cleaned.length > 0 ? cleaned : null;
|
|
23368
23420
|
}
|
|
23369
|
-
var SUGGESTION_TIMEOUT_MS = 30000, MAX_SLUG_LEN = 32, MAX_TITLE_LEN = 60, NullMetadataSuggester;
|
|
23421
|
+
var SUGGESTION_TIMEOUT_MS = 30000, MAX_SLUG_LEN = 32, MAX_TITLE_LEN = 60, RECAP_MESSAGE_WINDOW = 30, RECAP_PER_MESSAGE_CHAR_CAP = 1200, MAX_RECAP_LEN = 600, NullMetadataSuggester;
|
|
23370
23422
|
var init_metadata_suggester = __esm(() => {
|
|
23371
23423
|
NullMetadataSuggester = class NullMetadataSuggester extends MetadataSuggester {
|
|
23372
23424
|
async suggestBranchSlug(_prompt) {
|
|
@@ -23378,6 +23430,9 @@ var init_metadata_suggester = __esm(() => {
|
|
|
23378
23430
|
async suggestTitle(_prompt) {
|
|
23379
23431
|
return null;
|
|
23380
23432
|
}
|
|
23433
|
+
async suggestRecap(_history) {
|
|
23434
|
+
return null;
|
|
23435
|
+
}
|
|
23381
23436
|
};
|
|
23382
23437
|
});
|
|
23383
23438
|
|
|
@@ -23595,7 +23650,7 @@ async function refreshPRStatus(task) {
|
|
|
23595
23650
|
if (!json) {
|
|
23596
23651
|
return {
|
|
23597
23652
|
provider: "github",
|
|
23598
|
-
lifecycle:
|
|
23653
|
+
lifecycle: "creating",
|
|
23599
23654
|
checkState: "unknown",
|
|
23600
23655
|
lastCheckedAt: new Date().toISOString(),
|
|
23601
23656
|
lastError: "No GitHub PR found for this branch yet."
|
|
@@ -24925,6 +24980,42 @@ class Orchestrator {
|
|
|
24925
24980
|
await this.setActiveTab(task.id, mergeTab.id);
|
|
24926
24981
|
await this.runTask(task.id, prompt, mergeTab.id);
|
|
24927
24982
|
}
|
|
24983
|
+
async generateRecap(id, tabId) {
|
|
24984
|
+
const task = this.requireTask(id);
|
|
24985
|
+
const tab = this.resolveTab(task, tabId);
|
|
24986
|
+
if (!tab.sessionId) {
|
|
24987
|
+
this.dispatchEvent(task.id, tab.id, {
|
|
24988
|
+
type: "system.info",
|
|
24989
|
+
text: "(/recap unavailable \u2014 send a prompt first to start a session)"
|
|
24990
|
+
});
|
|
24991
|
+
return;
|
|
24992
|
+
}
|
|
24993
|
+
const engine3 = this.engineForTab(task, tab);
|
|
24994
|
+
const messages = await engine3.readHistory(tab.sessionId).then((h2) => h2.messages).catch(() => []);
|
|
24995
|
+
if (messages.length === 0) {
|
|
24996
|
+
this.dispatchEvent(task.id, tab.id, {
|
|
24997
|
+
type: "system.info",
|
|
24998
|
+
text: "(/recap unavailable \u2014 no transcript yet)"
|
|
24999
|
+
});
|
|
25000
|
+
return;
|
|
25001
|
+
}
|
|
25002
|
+
const model = engine3.capabilities.smallFastModelId?.() ?? engine3.capabilities.defaultModelId();
|
|
25003
|
+
const ctx3 = {
|
|
25004
|
+
engine: engine3,
|
|
25005
|
+
cwd: task.worktreePath || task.repo,
|
|
25006
|
+
model,
|
|
25007
|
+
permissionMode: task.permissionMode
|
|
25008
|
+
};
|
|
25009
|
+
const text = await this.metadataSuggester.suggestRecap(messages, ctx3);
|
|
25010
|
+
if (!text) {
|
|
25011
|
+
this.dispatchEvent(task.id, tab.id, {
|
|
25012
|
+
type: "system.info",
|
|
25013
|
+
text: `(/recap failed \u2014 engine returned no summary; model="${model}")`
|
|
25014
|
+
});
|
|
25015
|
+
return;
|
|
25016
|
+
}
|
|
25017
|
+
this.dispatchEvent(task.id, tab.id, { type: "recap", text });
|
|
25018
|
+
}
|
|
24928
25019
|
async respondToInput(id, requestId, response) {
|
|
24929
25020
|
const task = this.requireTask(id);
|
|
24930
25021
|
const resolved = this.pendingInputBroker.resolve(task.id, requestId);
|
|
@@ -25111,8 +25202,7 @@ class Orchestrator {
|
|
|
25111
25202
|
await this.pauseTask(task.id);
|
|
25112
25203
|
} catch (err) {
|
|
25113
25204
|
console.error(`[kobe orchestrator] deleteTask: pauseTask failed for ${task.id}:`, err);
|
|
25114
|
-
this.
|
|
25115
|
-
this.bumpRunState();
|
|
25205
|
+
await this.stopAllTabsForTask(task.id);
|
|
25116
25206
|
}
|
|
25117
25207
|
}
|
|
25118
25208
|
if (task.worktreePath) {
|
|
@@ -26213,6 +26303,10 @@ async function startDaemonServer(orch, options = {}) {
|
|
|
26213
26303
|
await orch.steerTask(requireString2(payload, "taskId"), requireString2(payload, "text"), optionalString2(payload, "tabId"));
|
|
26214
26304
|
return {};
|
|
26215
26305
|
}
|
|
26306
|
+
case "chat.recap": {
|
|
26307
|
+
await orch.generateRecap(requireString2(payload, "taskId"), optionalString2(payload, "tabId"));
|
|
26308
|
+
return {};
|
|
26309
|
+
}
|
|
26216
26310
|
case "chat.input.pending": {
|
|
26217
26311
|
return { pending: orch.peekPendingInput(requireString2(payload, "taskId")) };
|
|
26218
26312
|
}
|
|
@@ -26239,8 +26333,9 @@ async function startDaemonServer(orch, options = {}) {
|
|
|
26239
26333
|
return {};
|
|
26240
26334
|
}
|
|
26241
26335
|
case "merge.local.request": {
|
|
26242
|
-
|
|
26243
|
-
|
|
26336
|
+
const taskId = requireString2(payload, "taskId");
|
|
26337
|
+
await orch.requestLocalMerge(taskId);
|
|
26338
|
+
const task = orch.getTask(taskId);
|
|
26244
26339
|
if (task) {
|
|
26245
26340
|
broadcastTaskUpdated(orch, clients, task.id);
|
|
26246
26341
|
broadcast(clients, {
|
|
@@ -26453,7 +26548,7 @@ function optionalModelEffort(payload, key) {
|
|
|
26453
26548
|
function optionalVendor(payload, key) {
|
|
26454
26549
|
const value = optionalString2(payload, key);
|
|
26455
26550
|
if (value !== undefined && value !== "claude" && value !== "codex" && value !== "gemini") {
|
|
26456
|
-
throw new Error(`${key}
|
|
26551
|
+
throw new Error(`${key} '${value}' is not a supported vendor (expected: claude, codex, gemini)`);
|
|
26457
26552
|
}
|
|
26458
26553
|
return value;
|
|
26459
26554
|
}
|
|
@@ -26929,6 +27024,9 @@ class RemoteOrchestrator {
|
|
|
26929
27024
|
await this.client.request("chat.steer", { taskId, text, tabId });
|
|
26930
27025
|
this.markRunState(taskId, tabId ?? this.getTask(taskId)?.activeTabId, "running");
|
|
26931
27026
|
}
|
|
27027
|
+
async generateRecap(taskId, tabId) {
|
|
27028
|
+
await this.client.request("chat.recap", { taskId, tabId });
|
|
27029
|
+
}
|
|
26932
27030
|
async setArchived(taskId, archived) {
|
|
26933
27031
|
await this.client.request("task.archive", { taskId, archived });
|
|
26934
27032
|
}
|
|
@@ -28637,10 +28735,6 @@ function useAppKeymap(deps) {
|
|
|
28637
28735
|
"task.openEditor": deps.openActiveTaskInEditor,
|
|
28638
28736
|
"settings.open": () => {
|
|
28639
28737
|
SettingsDialog.show(dialog, deps.kv, deps.orchestrator);
|
|
28640
|
-
},
|
|
28641
|
-
"tasks.background": () => {
|
|
28642
|
-
if (pressBackgroundTasksChord() === "fire")
|
|
28643
|
-
deps.openBackgroundTasks();
|
|
28644
28738
|
}
|
|
28645
28739
|
})
|
|
28646
28740
|
}));
|
|
@@ -28666,340 +28760,6 @@ var init_app_keymap = __esm(() => {
|
|
|
28666
28760
|
init_dialog_confirm();
|
|
28667
28761
|
});
|
|
28668
28762
|
|
|
28669
|
-
// src/tui/component/background-tasks-parts.ts
|
|
28670
|
-
function computeBackgroundRows(runState, tasks, visibleKey) {
|
|
28671
|
-
const out = [];
|
|
28672
|
-
for (const [key, state] of runState) {
|
|
28673
|
-
if (visibleKey && key === visibleKey)
|
|
28674
|
-
continue;
|
|
28675
|
-
const sep = key.indexOf(":");
|
|
28676
|
-
if (sep < 0)
|
|
28677
|
-
continue;
|
|
28678
|
-
const taskId = key.slice(0, sep);
|
|
28679
|
-
const tabId = key.slice(sep + 1);
|
|
28680
|
-
const task = tasks.find((t2) => t2.id === taskId);
|
|
28681
|
-
if (!task)
|
|
28682
|
-
continue;
|
|
28683
|
-
const tab = task.tabs.find((t2) => t2.id === tabId);
|
|
28684
|
-
out.push({
|
|
28685
|
-
taskId,
|
|
28686
|
-
tabId,
|
|
28687
|
-
taskTitle: task.title,
|
|
28688
|
-
tabLabel: tab?.title && tab.title.length > 0 ? tab.title : `chat ${tab?.seq ?? "?"}`,
|
|
28689
|
-
state
|
|
28690
|
-
});
|
|
28691
|
-
}
|
|
28692
|
-
out.sort((a2, b2) => {
|
|
28693
|
-
if (a2.state !== b2.state)
|
|
28694
|
-
return a2.state === "awaiting_input" ? -1 : 1;
|
|
28695
|
-
return a2.taskTitle.localeCompare(b2.taskTitle);
|
|
28696
|
-
});
|
|
28697
|
-
return out;
|
|
28698
|
-
}
|
|
28699
|
-
var BACKGROUND_TASKS_DIALOG_TITLE = "kobe \u2014 background tasks", BACKGROUND_TASKS_DIALOG_EMPTY = "No sessions running in the background.", BACKGROUND_TASKS_DIALOG_FOOTER = "j/k or \u2191\u2193 navigate \u2022 enter jump \u2022 x interrupt \u2022 esc dismiss";
|
|
28700
|
-
|
|
28701
|
-
// src/tui/component/background-tasks-dialog.tsx
|
|
28702
|
-
import { TextAttributes as TextAttributes11 } from "@opentui/core";
|
|
28703
|
-
function BackgroundTasksDialog(props) {
|
|
28704
|
-
const dialog = useDialog();
|
|
28705
|
-
const {
|
|
28706
|
-
theme
|
|
28707
|
-
} = useTheme();
|
|
28708
|
-
const [cursor, setCursor] = createSignal(0);
|
|
28709
|
-
const rows = createMemo(() => computeBackgroundRows(props.runState(), props.tasks(), props.visibleTabKey()));
|
|
28710
|
-
const safeCursor = createMemo(() => {
|
|
28711
|
-
const len = rows().length;
|
|
28712
|
-
if (len === 0)
|
|
28713
|
-
return 0;
|
|
28714
|
-
return Math.max(0, Math.min(len - 1, cursor()));
|
|
28715
|
-
});
|
|
28716
|
-
const move = (delta) => {
|
|
28717
|
-
const len = rows().length;
|
|
28718
|
-
if (len === 0)
|
|
28719
|
-
return;
|
|
28720
|
-
setCursor(Math.max(0, Math.min(len - 1, safeCursor() + delta)));
|
|
28721
|
-
};
|
|
28722
|
-
function jump() {
|
|
28723
|
-
const picked = rows()[safeCursor()];
|
|
28724
|
-
if (!picked)
|
|
28725
|
-
return;
|
|
28726
|
-
props.onJump(picked.taskId, picked.tabId);
|
|
28727
|
-
dialog.clear();
|
|
28728
|
-
}
|
|
28729
|
-
function interrupt() {
|
|
28730
|
-
const picked = rows()[safeCursor()];
|
|
28731
|
-
if (!picked)
|
|
28732
|
-
return;
|
|
28733
|
-
props.onInterrupt(picked.taskId, picked.tabId);
|
|
28734
|
-
}
|
|
28735
|
-
useBindings(() => ({
|
|
28736
|
-
bindings: [{
|
|
28737
|
-
key: "j",
|
|
28738
|
-
cmd: () => move(1)
|
|
28739
|
-
}, {
|
|
28740
|
-
key: "down",
|
|
28741
|
-
cmd: () => move(1)
|
|
28742
|
-
}, {
|
|
28743
|
-
key: "k",
|
|
28744
|
-
cmd: () => move(-1)
|
|
28745
|
-
}, {
|
|
28746
|
-
key: "up",
|
|
28747
|
-
cmd: () => move(-1)
|
|
28748
|
-
}, {
|
|
28749
|
-
key: "x",
|
|
28750
|
-
cmd: () => interrupt()
|
|
28751
|
-
}, {
|
|
28752
|
-
key: "enter",
|
|
28753
|
-
cmd: () => jump()
|
|
28754
|
-
}, {
|
|
28755
|
-
key: "return",
|
|
28756
|
-
cmd: () => jump()
|
|
28757
|
-
}]
|
|
28758
|
-
}));
|
|
28759
|
-
return (() => {
|
|
28760
|
-
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$4 = createElement("text"), _el$8 = createElement("box"), _el$9 = createElement("text");
|
|
28761
|
-
insertNode(_el$, _el$2);
|
|
28762
|
-
insertNode(_el$, _el$8);
|
|
28763
|
-
setProp(_el$, "paddingLeft", 2);
|
|
28764
|
-
setProp(_el$, "paddingRight", 2);
|
|
28765
|
-
setProp(_el$, "gap", 1);
|
|
28766
|
-
setProp(_el$, "flexShrink", 1);
|
|
28767
|
-
insertNode(_el$2, _el$3);
|
|
28768
|
-
insertNode(_el$2, _el$4);
|
|
28769
|
-
setProp(_el$2, "flexDirection", "row");
|
|
28770
|
-
setProp(_el$2, "justifyContent", "space-between");
|
|
28771
|
-
setProp(_el$2, "flexShrink", 0);
|
|
28772
|
-
insert(_el$3, BACKGROUND_TASKS_DIALOG_TITLE);
|
|
28773
|
-
insertNode(_el$4, createTextNode(`esc`));
|
|
28774
|
-
setProp(_el$4, "onMouseUp", () => dialog.clear());
|
|
28775
|
-
insert(_el$, createComponent2(Show, {
|
|
28776
|
-
get when() {
|
|
28777
|
-
return rows().length > 0;
|
|
28778
|
-
},
|
|
28779
|
-
get fallback() {
|
|
28780
|
-
return (() => {
|
|
28781
|
-
var _el$0 = createElement("box"), _el$1 = createElement("text");
|
|
28782
|
-
insertNode(_el$0, _el$1);
|
|
28783
|
-
setProp(_el$0, "paddingTop", 1);
|
|
28784
|
-
setProp(_el$0, "paddingBottom", 1);
|
|
28785
|
-
insert(_el$1, BACKGROUND_TASKS_DIALOG_EMPTY);
|
|
28786
|
-
effect((_$p) => setProp(_el$1, "fg", theme.textMuted, _$p));
|
|
28787
|
-
return _el$0;
|
|
28788
|
-
})();
|
|
28789
|
-
},
|
|
28790
|
-
get children() {
|
|
28791
|
-
var _el$6 = createElement("scrollbox"), _el$7 = createElement("box");
|
|
28792
|
-
insertNode(_el$6, _el$7);
|
|
28793
|
-
setProp(_el$6, "flexShrink", 1);
|
|
28794
|
-
setProp(_el$6, "flexGrow", 1);
|
|
28795
|
-
setProp(_el$6, "stickyScroll", false);
|
|
28796
|
-
setProp(_el$7, "paddingBottom", 1);
|
|
28797
|
-
setProp(_el$7, "gap", 0);
|
|
28798
|
-
setProp(_el$7, "paddingRight", 1);
|
|
28799
|
-
insert(_el$7, createComponent2(For, {
|
|
28800
|
-
get each() {
|
|
28801
|
-
return rows();
|
|
28802
|
-
},
|
|
28803
|
-
children: (row, idx) => {
|
|
28804
|
-
const selected = () => idx() === safeCursor();
|
|
28805
|
-
const awaiting = () => row.state === "awaiting_input";
|
|
28806
|
-
return (() => {
|
|
28807
|
-
var _el$10 = createElement("box"), _el$11 = createElement("box"), _el$12 = createElement("text"), _el$13 = createElement("box"), _el$14 = createElement("text"), _el$15 = createElement("box"), _el$16 = createElement("text");
|
|
28808
|
-
insertNode(_el$10, _el$11);
|
|
28809
|
-
insertNode(_el$10, _el$13);
|
|
28810
|
-
insertNode(_el$10, _el$15);
|
|
28811
|
-
setProp(_el$10, "flexDirection", "row");
|
|
28812
|
-
setProp(_el$10, "gap", 2);
|
|
28813
|
-
setProp(_el$10, "paddingLeft", 1);
|
|
28814
|
-
setProp(_el$10, "paddingRight", 1);
|
|
28815
|
-
setProp(_el$10, "onMouseDown", () => setCursor(idx()));
|
|
28816
|
-
setProp(_el$10, "onMouseUp", () => jump());
|
|
28817
|
-
insertNode(_el$11, _el$12);
|
|
28818
|
-
setProp(_el$11, "width", 14);
|
|
28819
|
-
setProp(_el$11, "flexShrink", 0);
|
|
28820
|
-
setProp(_el$12, "wrapMode", "none");
|
|
28821
|
-
insert(_el$12, () => awaiting() ? "\u25CF needs input" : "\u25CF running");
|
|
28822
|
-
insertNode(_el$13, _el$14);
|
|
28823
|
-
setProp(_el$13, "flexGrow", 1);
|
|
28824
|
-
setProp(_el$13, "flexShrink", 1);
|
|
28825
|
-
setProp(_el$14, "wrapMode", "none");
|
|
28826
|
-
insert(_el$14, () => row.taskTitle);
|
|
28827
|
-
insertNode(_el$15, _el$16);
|
|
28828
|
-
setProp(_el$15, "width", 18);
|
|
28829
|
-
setProp(_el$15, "flexShrink", 0);
|
|
28830
|
-
setProp(_el$16, "wrapMode", "none");
|
|
28831
|
-
insert(_el$16, () => row.tabLabel);
|
|
28832
|
-
effect((_p$) => {
|
|
28833
|
-
var _v$5 = selected() ? theme.primary : undefined, _v$6 = selected() ? theme.selectedListItemText : awaiting() ? theme.warning : theme.success, _v$7 = selected() ? theme.selectedListItemText : theme.text, _v$8 = selected() ? theme.selectedListItemText : theme.textMuted;
|
|
28834
|
-
_v$5 !== _p$.e && (_p$.e = setProp(_el$10, "backgroundColor", _v$5, _p$.e));
|
|
28835
|
-
_v$6 !== _p$.t && (_p$.t = setProp(_el$12, "fg", _v$6, _p$.t));
|
|
28836
|
-
_v$7 !== _p$.a && (_p$.a = setProp(_el$14, "fg", _v$7, _p$.a));
|
|
28837
|
-
_v$8 !== _p$.o && (_p$.o = setProp(_el$16, "fg", _v$8, _p$.o));
|
|
28838
|
-
return _p$;
|
|
28839
|
-
}, {
|
|
28840
|
-
e: undefined,
|
|
28841
|
-
t: undefined,
|
|
28842
|
-
a: undefined,
|
|
28843
|
-
o: undefined
|
|
28844
|
-
});
|
|
28845
|
-
return _el$10;
|
|
28846
|
-
})();
|
|
28847
|
-
}
|
|
28848
|
-
}));
|
|
28849
|
-
effect((_$p) => setProp(_el$6, "verticalScrollbarOptions", {
|
|
28850
|
-
trackOptions: {
|
|
28851
|
-
backgroundColor: theme.backgroundDialog,
|
|
28852
|
-
foregroundColor: theme.borderActive
|
|
28853
|
-
}
|
|
28854
|
-
}, _$p));
|
|
28855
|
-
return _el$6;
|
|
28856
|
-
}
|
|
28857
|
-
}), _el$8);
|
|
28858
|
-
insertNode(_el$8, _el$9);
|
|
28859
|
-
setProp(_el$8, "paddingTop", 0);
|
|
28860
|
-
setProp(_el$8, "paddingBottom", 1);
|
|
28861
|
-
insert(_el$9, BACKGROUND_TASKS_DIALOG_FOOTER);
|
|
28862
|
-
effect((_p$) => {
|
|
28863
|
-
var _v$ = TextAttributes11.BOLD, _v$2 = theme.text, _v$3 = theme.textMuted, _v$4 = theme.textMuted;
|
|
28864
|
-
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$, _p$.e));
|
|
28865
|
-
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$2, _p$.t));
|
|
28866
|
-
_v$3 !== _p$.a && (_p$.a = setProp(_el$4, "fg", _v$3, _p$.a));
|
|
28867
|
-
_v$4 !== _p$.o && (_p$.o = setProp(_el$9, "fg", _v$4, _p$.o));
|
|
28868
|
-
return _p$;
|
|
28869
|
-
}, {
|
|
28870
|
-
e: undefined,
|
|
28871
|
-
t: undefined,
|
|
28872
|
-
a: undefined,
|
|
28873
|
-
o: undefined
|
|
28874
|
-
});
|
|
28875
|
-
return _el$;
|
|
28876
|
-
})();
|
|
28877
|
-
}
|
|
28878
|
-
var init_background_tasks_dialog = __esm(() => {
|
|
28879
|
-
init_solid();
|
|
28880
|
-
init_solid();
|
|
28881
|
-
init_solid();
|
|
28882
|
-
init_solid();
|
|
28883
|
-
init_solid();
|
|
28884
|
-
init_solid();
|
|
28885
|
-
init_solid();
|
|
28886
|
-
init_solid();
|
|
28887
|
-
init_dev();
|
|
28888
|
-
init_theme();
|
|
28889
|
-
init_keymap();
|
|
28890
|
-
init_dialog();
|
|
28891
|
-
BackgroundTasksDialog.show = (dialog, props) => {
|
|
28892
|
-
dialog.replace(() => createComponent2(BackgroundTasksDialog, props));
|
|
28893
|
-
};
|
|
28894
|
-
});
|
|
28895
|
-
|
|
28896
|
-
// src/tui/component/background-tasks-indicator.tsx
|
|
28897
|
-
import { TextAttributes as TextAttributes12 } from "@opentui/core";
|
|
28898
|
-
function BackgroundTasksIndicator(props) {
|
|
28899
|
-
const {
|
|
28900
|
-
theme
|
|
28901
|
-
} = useTheme();
|
|
28902
|
-
const armed = useBackgroundTasksArmed();
|
|
28903
|
-
const rows = createMemo(() => computeBackgroundRows(props.runState(), props.tasks(), props.visibleTabKey()));
|
|
28904
|
-
const count = () => rows().length;
|
|
28905
|
-
const anyAwaiting = () => rows().some((r2) => r2.state === "awaiting_input");
|
|
28906
|
-
return createComponent2(Show, {
|
|
28907
|
-
get when() {
|
|
28908
|
-
return count() > 0 || armed();
|
|
28909
|
-
},
|
|
28910
|
-
get children() {
|
|
28911
|
-
var _el$ = createElement("box");
|
|
28912
|
-
setProp(_el$, "flexDirection", "row");
|
|
28913
|
-
setProp(_el$, "gap", 1);
|
|
28914
|
-
setProp(_el$, "flexShrink", 0);
|
|
28915
|
-
setProp(_el$, "onMouseUp", () => props.onActivate());
|
|
28916
|
-
insert(_el$, createComponent2(Show, {
|
|
28917
|
-
get when() {
|
|
28918
|
-
return armed();
|
|
28919
|
-
},
|
|
28920
|
-
get fallback() {
|
|
28921
|
-
return [(() => {
|
|
28922
|
-
var _el$5 = createElement("text"), _el$6 = createTextNode(`\u29BF `);
|
|
28923
|
-
insertNode(_el$5, _el$6);
|
|
28924
|
-
setProp(_el$5, "wrapMode", "none");
|
|
28925
|
-
insert(_el$5, count, null);
|
|
28926
|
-
effect((_p$) => {
|
|
28927
|
-
var _v$3 = anyAwaiting() ? theme.warning : theme.success, _v$4 = TextAttributes12.BOLD;
|
|
28928
|
-
_v$3 !== _p$.e && (_p$.e = setProp(_el$5, "fg", _v$3, _p$.e));
|
|
28929
|
-
_v$4 !== _p$.t && (_p$.t = setProp(_el$5, "attributes", _v$4, _p$.t));
|
|
28930
|
-
return _p$;
|
|
28931
|
-
}, {
|
|
28932
|
-
e: undefined,
|
|
28933
|
-
t: undefined
|
|
28934
|
-
});
|
|
28935
|
-
return _el$5;
|
|
28936
|
-
})(), (() => {
|
|
28937
|
-
var _el$7 = createElement("text");
|
|
28938
|
-
insertNode(_el$7, createTextNode(`background`));
|
|
28939
|
-
setProp(_el$7, "wrapMode", "none");
|
|
28940
|
-
effect((_$p) => setProp(_el$7, "fg", theme.textMuted, _$p));
|
|
28941
|
-
return _el$7;
|
|
28942
|
-
})(), (() => {
|
|
28943
|
-
var _el$9 = createElement("text");
|
|
28944
|
-
insertNode(_el$9, createTextNode(`[ctrl+b]`));
|
|
28945
|
-
setProp(_el$9, "wrapMode", "none");
|
|
28946
|
-
effect((_p$) => {
|
|
28947
|
-
var _v$5 = theme.accent, _v$6 = TextAttributes12.BOLD;
|
|
28948
|
-
_v$5 !== _p$.e && (_p$.e = setProp(_el$9, "fg", _v$5, _p$.e));
|
|
28949
|
-
_v$6 !== _p$.t && (_p$.t = setProp(_el$9, "attributes", _v$6, _p$.t));
|
|
28950
|
-
return _p$;
|
|
28951
|
-
}, {
|
|
28952
|
-
e: undefined,
|
|
28953
|
-
t: undefined
|
|
28954
|
-
});
|
|
28955
|
-
return _el$9;
|
|
28956
|
-
})()];
|
|
28957
|
-
},
|
|
28958
|
-
get children() {
|
|
28959
|
-
return [(() => {
|
|
28960
|
-
var _el$2 = createElement("text");
|
|
28961
|
-
insertNode(_el$2, createTextNode(`press ctrl+b again`));
|
|
28962
|
-
setProp(_el$2, "wrapMode", "none");
|
|
28963
|
-
effect((_p$) => {
|
|
28964
|
-
var _v$ = theme.warning, _v$2 = TextAttributes12.BOLD;
|
|
28965
|
-
_v$ !== _p$.e && (_p$.e = setProp(_el$2, "fg", _v$, _p$.e));
|
|
28966
|
-
_v$2 !== _p$.t && (_p$.t = setProp(_el$2, "attributes", _v$2, _p$.t));
|
|
28967
|
-
return _p$;
|
|
28968
|
-
}, {
|
|
28969
|
-
e: undefined,
|
|
28970
|
-
t: undefined
|
|
28971
|
-
});
|
|
28972
|
-
return _el$2;
|
|
28973
|
-
})(), (() => {
|
|
28974
|
-
var _el$4 = createElement("text");
|
|
28975
|
-
setProp(_el$4, "wrapMode", "none");
|
|
28976
|
-
insert(_el$4, (() => {
|
|
28977
|
-
var _c$ = memo2(() => count() > 0);
|
|
28978
|
-
return () => _c$() ? `for ${count()} background` : "for background tasks";
|
|
28979
|
-
})());
|
|
28980
|
-
effect((_$p) => setProp(_el$4, "fg", theme.textMuted, _$p));
|
|
28981
|
-
return _el$4;
|
|
28982
|
-
})()];
|
|
28983
|
-
}
|
|
28984
|
-
}));
|
|
28985
|
-
return _el$;
|
|
28986
|
-
}
|
|
28987
|
-
});
|
|
28988
|
-
}
|
|
28989
|
-
var init_background_tasks_indicator = __esm(() => {
|
|
28990
|
-
init_solid();
|
|
28991
|
-
init_solid();
|
|
28992
|
-
init_solid();
|
|
28993
|
-
init_solid();
|
|
28994
|
-
init_solid();
|
|
28995
|
-
init_solid();
|
|
28996
|
-
init_solid();
|
|
28997
|
-
init_solid();
|
|
28998
|
-
init_dev();
|
|
28999
|
-
init_keybindings();
|
|
29000
|
-
init_theme();
|
|
29001
|
-
});
|
|
29002
|
-
|
|
29003
28763
|
// src/tui/asset/pulse.wav
|
|
29004
28764
|
var pulse_default = "../pulse-n3cq1btw.wav";
|
|
29005
28765
|
var init_pulse = () => {};
|
|
@@ -29268,7 +29028,7 @@ function chatTabMarkerKind(input) {
|
|
|
29268
29028
|
|
|
29269
29029
|
// src/tui/component/center-tab-strip.tsx
|
|
29270
29030
|
import { basename as basename3 } from "path";
|
|
29271
|
-
import { TextAttributes as
|
|
29031
|
+
import { TextAttributes as TextAttributes11 } from "@opentui/core";
|
|
29272
29032
|
function CenterTabStrip(props) {
|
|
29273
29033
|
const {
|
|
29274
29034
|
theme
|
|
@@ -29295,7 +29055,7 @@ function CenterTabStrip(props) {
|
|
|
29295
29055
|
setProp(_el$2, "onMouseUp", () => props.onSelectChat());
|
|
29296
29056
|
insertNode(_el$3, createTextNode(`chat`));
|
|
29297
29057
|
effect((_p$) => {
|
|
29298
|
-
var _v$ = props.isChatActive() ? theme.primary : theme.backgroundElement, _v$2 = props.isChatActive() ? theme.selectedListItemText : theme.text, _v$3 = props.isChatActive() ?
|
|
29058
|
+
var _v$ = props.isChatActive() ? theme.primary : theme.backgroundElement, _v$2 = props.isChatActive() ? theme.selectedListItemText : theme.text, _v$3 = props.isChatActive() ? TextAttributes11.BOLD : undefined;
|
|
29299
29059
|
_v$ !== _p$.e && (_p$.e = setProp(_el$2, "backgroundColor", _v$, _p$.e));
|
|
29300
29060
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$2, _p$.t));
|
|
29301
29061
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$3, "attributes", _v$3, _p$.a));
|
|
@@ -29368,7 +29128,7 @@ function CenterTabStrip(props) {
|
|
|
29368
29128
|
setProp(_el$8, "wrapMode", "none");
|
|
29369
29129
|
insert(_el$8, () => chatTabLabel(tab));
|
|
29370
29130
|
effect((_p$) => {
|
|
29371
|
-
var _v$4 = isPrimary() ? theme.primary : theme.backgroundElement, _v$5 = isPrimary() ? theme.selectedListItemText : isVisibleButOther() ? theme.text : theme.textMuted, _v$6 = isPrimary() ?
|
|
29131
|
+
var _v$4 = isPrimary() ? theme.primary : theme.backgroundElement, _v$5 = isPrimary() ? theme.selectedListItemText : isVisibleButOther() ? theme.text : theme.textMuted, _v$6 = isPrimary() ? TextAttributes11.BOLD : undefined;
|
|
29372
29132
|
_v$4 !== _p$.e && (_p$.e = setProp(_el$5, "backgroundColor", _v$4, _p$.e));
|
|
29373
29133
|
_v$5 !== _p$.t && (_p$.t = setProp(_el$8, "fg", _v$5, _p$.t));
|
|
29374
29134
|
_v$6 !== _p$.a && (_p$.a = setProp(_el$8, "attributes", _v$6, _p$.a));
|
|
@@ -29404,7 +29164,7 @@ function CenterTabStrip(props) {
|
|
|
29404
29164
|
insertNode(_el$1, createTextNode(`x`));
|
|
29405
29165
|
setProp(_el$1, "onMouseUp", () => queueMicrotask(() => props.onCloseFile(file())));
|
|
29406
29166
|
effect((_p$) => {
|
|
29407
|
-
var _v$7 = isActive() ? theme.primary : theme.backgroundElement, _v$8 = isActive() ? theme.selectedListItemText : theme.text, _v$9 = isActive() ?
|
|
29167
|
+
var _v$7 = isActive() ? theme.primary : theme.backgroundElement, _v$8 = isActive() ? theme.selectedListItemText : theme.text, _v$9 = isActive() ? TextAttributes11.BOLD : undefined, _v$0 = isActive() ? theme.selectedListItemText : theme.textMuted;
|
|
29408
29168
|
_v$7 !== _p$.e && (_p$.e = setProp(_el$9, "backgroundColor", _v$7, _p$.e));
|
|
29409
29169
|
_v$8 !== _p$.t && (_p$.t = setProp(_el$0, "fg", _v$8, _p$.t));
|
|
29410
29170
|
_v$9 !== _p$.a && (_p$.a = setProp(_el$0, "attributes", _v$9, _p$.a));
|
|
@@ -29452,7 +29212,7 @@ function orderSlashes(slashes) {
|
|
|
29452
29212
|
}
|
|
29453
29213
|
|
|
29454
29214
|
// src/tui/component/help-dialog.tsx
|
|
29455
|
-
import { TextAttributes as
|
|
29215
|
+
import { TextAttributes as TextAttributes12 } from "@opentui/core";
|
|
29456
29216
|
function groupBindings(keymap) {
|
|
29457
29217
|
const groups = new Map;
|
|
29458
29218
|
const order = [];
|
|
@@ -29558,7 +29318,7 @@ function HelpDialog() {
|
|
|
29558
29318
|
}
|
|
29559
29319
|
}), null);
|
|
29560
29320
|
effect((_p$) => {
|
|
29561
|
-
var _v$8 = theme.accent, _v$9 =
|
|
29321
|
+
var _v$8 = theme.accent, _v$9 = TextAttributes12.BOLD;
|
|
29562
29322
|
_v$8 !== _p$.e && (_p$.e = setProp(_el$14, "fg", _v$8, _p$.e));
|
|
29563
29323
|
_v$9 !== _p$.t && (_p$.t = setProp(_el$14, "attributes", _v$9, _p$.t));
|
|
29564
29324
|
return _p$;
|
|
@@ -29607,12 +29367,12 @@ function HelpDialog() {
|
|
|
29607
29367
|
setProp(_el$10, "paddingTop", 1);
|
|
29608
29368
|
insertNode(_el$11, createTextNode(`(Type / in the composer to filter and tab-complete; user-defined commands appear there too)`));
|
|
29609
29369
|
effect((_p$) => {
|
|
29610
|
-
var _v$ =
|
|
29370
|
+
var _v$ = TextAttributes12.BOLD, _v$2 = theme.text, _v$3 = theme.textMuted, _v$4 = {
|
|
29611
29371
|
trackOptions: {
|
|
29612
29372
|
backgroundColor: theme.backgroundDialog,
|
|
29613
29373
|
foregroundColor: theme.borderActive
|
|
29614
29374
|
}
|
|
29615
|
-
}, _v$5 = theme.accent, _v$6 =
|
|
29375
|
+
}, _v$5 = theme.accent, _v$6 = TextAttributes12.BOLD, _v$7 = theme.textMuted;
|
|
29616
29376
|
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$, _p$.e));
|
|
29617
29377
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$2, _p$.t));
|
|
29618
29378
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$3, _p$.a));
|
|
@@ -29654,7 +29414,7 @@ var init_help_dialog = __esm(() => {
|
|
|
29654
29414
|
});
|
|
29655
29415
|
|
|
29656
29416
|
// src/tui/component/pane-header.tsx
|
|
29657
|
-
import { TextAttributes as
|
|
29417
|
+
import { TextAttributes as TextAttributes13 } from "@opentui/core";
|
|
29658
29418
|
function PaneHeader(props) {
|
|
29659
29419
|
const {
|
|
29660
29420
|
theme
|
|
@@ -29684,7 +29444,7 @@ function PaneHeader(props) {
|
|
|
29684
29444
|
setProp(_el$3, "wrapMode", "none");
|
|
29685
29445
|
insert(_el$3, () => props.ordinal);
|
|
29686
29446
|
effect((_p$) => {
|
|
29687
|
-
var _v$ = titleColor(), _v$2 =
|
|
29447
|
+
var _v$ = titleColor(), _v$2 = TextAttributes13.BOLD;
|
|
29688
29448
|
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "fg", _v$, _p$.e));
|
|
29689
29449
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "attributes", _v$2, _p$.t));
|
|
29690
29450
|
return _p$;
|
|
@@ -29735,7 +29495,7 @@ function PaneHeader(props) {
|
|
|
29735
29495
|
}
|
|
29736
29496
|
}), null);
|
|
29737
29497
|
effect((_p$) => {
|
|
29738
|
-
var _v$3 = titleColor(), _v$4 =
|
|
29498
|
+
var _v$3 = titleColor(), _v$4 = TextAttributes13.BOLD;
|
|
29739
29499
|
_v$3 !== _p$.e && (_p$.e = setProp(_el$4, "fg", _v$3, _p$.e));
|
|
29740
29500
|
_v$4 !== _p$.t && (_p$.t = setProp(_el$4, "attributes", _v$4, _p$.t));
|
|
29741
29501
|
return _p$;
|
|
@@ -29758,7 +29518,7 @@ var init_pane_header = __esm(() => {
|
|
|
29758
29518
|
});
|
|
29759
29519
|
|
|
29760
29520
|
// src/tui/component/rc-bridge-dialog.tsx
|
|
29761
|
-
import { TextAttributes as
|
|
29521
|
+
import { TextAttributes as TextAttributes14 } from "@opentui/core";
|
|
29762
29522
|
function RcBridgeDialog(props) {
|
|
29763
29523
|
const dialog = useDialog();
|
|
29764
29524
|
const {
|
|
@@ -29849,7 +29609,7 @@ function RcBridgeDialog(props) {
|
|
|
29849
29609
|
setProp(_el$16, "wrapMode", "none");
|
|
29850
29610
|
insert(_el$16, () => targetTask()?.worktreePath ?? "");
|
|
29851
29611
|
effect((_p$) => {
|
|
29852
|
-
var { textMuted: _v$, text: _v$2 } = theme, _v$3 =
|
|
29612
|
+
var { textMuted: _v$, text: _v$2 } = theme, _v$3 = TextAttributes14.BOLD, _v$4 = theme.textMuted, _v$5 = theme.text;
|
|
29853
29613
|
_v$ !== _p$.e && (_p$.e = setProp(_el$10, "fg", _v$, _p$.e));
|
|
29854
29614
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$13, "fg", _v$2, _p$.t));
|
|
29855
29615
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$13, "attributes", _v$3, _p$.a));
|
|
@@ -29957,7 +29717,7 @@ function RcBridgeDialog(props) {
|
|
|
29957
29717
|
insertNode(_el$36, _el$37);
|
|
29958
29718
|
insert(_el$36, () => props.status().bound?.sessionId, null);
|
|
29959
29719
|
effect((_p$) => {
|
|
29960
|
-
var { textMuted: _v$8, accent: _v$9 } = theme, _v$0 =
|
|
29720
|
+
var { textMuted: _v$8, accent: _v$9 } = theme, _v$0 = TextAttributes14.BOLD;
|
|
29961
29721
|
_v$8 !== _p$.e && (_p$.e = setProp(_el$34, "fg", _v$8, _p$.e));
|
|
29962
29722
|
_v$9 !== _p$.t && (_p$.t = setProp(_el$36, "fg", _v$9, _p$.t));
|
|
29963
29723
|
_v$0 !== _p$.a && (_p$.a = setProp(_el$36, "attributes", _v$0, _p$.a));
|
|
@@ -29971,7 +29731,7 @@ function RcBridgeDialog(props) {
|
|
|
29971
29731
|
}
|
|
29972
29732
|
}), null);
|
|
29973
29733
|
effect((_p$) => {
|
|
29974
|
-
var { textMuted: _v$1, text: _v$10 } = theme, _v$11 =
|
|
29734
|
+
var { textMuted: _v$1, text: _v$10 } = theme, _v$11 = TextAttributes14.BOLD;
|
|
29975
29735
|
_v$1 !== _p$.e && (_p$.e = setProp(_el$30, "fg", _v$1, _p$.e));
|
|
29976
29736
|
_v$10 !== _p$.t && (_p$.t = setProp(_el$32, "fg", _v$10, _p$.t));
|
|
29977
29737
|
_v$11 !== _p$.a && (_p$.a = setProp(_el$32, "attributes", _v$11, _p$.a));
|
|
@@ -30011,7 +29771,7 @@ function RcBridgeDialog(props) {
|
|
|
30011
29771
|
}
|
|
30012
29772
|
}), null);
|
|
30013
29773
|
effect((_p$) => {
|
|
30014
|
-
var { textMuted: _v$14, accent: _v$15 } = theme, _v$16 =
|
|
29774
|
+
var { textMuted: _v$14, accent: _v$15 } = theme, _v$16 = TextAttributes14.BOLD;
|
|
30015
29775
|
_v$14 !== _p$.e && (_p$.e = setProp(_el$21, "fg", _v$14, _p$.e));
|
|
30016
29776
|
_v$15 !== _p$.t && (_p$.t = setProp(_el$23, "fg", _v$15, _p$.t));
|
|
30017
29777
|
_v$16 !== _p$.a && (_p$.a = setProp(_el$23, "attributes", _v$16, _p$.a));
|
|
@@ -30056,7 +29816,7 @@ function RcBridgeDialog(props) {
|
|
|
30056
29816
|
}
|
|
30057
29817
|
}), null);
|
|
30058
29818
|
effect((_p$) => {
|
|
30059
|
-
var _v$17 = theme.error, _v$18 =
|
|
29819
|
+
var _v$17 = theme.error, _v$18 = TextAttributes14.BOLD;
|
|
30060
29820
|
_v$17 !== _p$.e && (_p$.e = setProp(_el$45, "fg", _v$17, _p$.e));
|
|
30061
29821
|
_v$18 !== _p$.t && (_p$.t = setProp(_el$45, "attributes", _v$18, _p$.t));
|
|
30062
29822
|
return _p$;
|
|
@@ -30125,7 +29885,7 @@ function RcBridgeDialog(props) {
|
|
|
30125
29885
|
}
|
|
30126
29886
|
}), null);
|
|
30127
29887
|
effect((_p$) => {
|
|
30128
|
-
var _v$19 =
|
|
29888
|
+
var _v$19 = TextAttributes14.BOLD, _v$20 = theme.text, _v$21 = theme.textMuted, _v$22 = theme.textMuted;
|
|
30129
29889
|
_v$19 !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$19, _p$.e));
|
|
30130
29890
|
_v$20 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$20, _p$.t));
|
|
30131
29891
|
_v$21 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$21, _p$.a));
|
|
@@ -30162,7 +29922,7 @@ function ActionButton(props) {
|
|
|
30162
29922
|
});
|
|
30163
29923
|
insert(_el$53, () => props.label);
|
|
30164
29924
|
effect((_p$) => {
|
|
30165
|
-
var _v$23 = theme.backgroundElement, _v$24 = fg(), _v$25 =
|
|
29925
|
+
var _v$23 = theme.backgroundElement, _v$24 = fg(), _v$25 = TextAttributes14.BOLD;
|
|
30166
29926
|
_v$23 !== _p$.e && (_p$.e = setProp(_el$52, "backgroundColor", _v$23, _p$.e));
|
|
30167
29927
|
_v$24 !== _p$.t && (_p$.t = setProp(_el$53, "fg", _v$24, _p$.t));
|
|
30168
29928
|
_v$25 !== _p$.a && (_p$.a = setProp(_el$53, "attributes", _v$25, _p$.a));
|
|
@@ -30362,7 +30122,7 @@ var init_focus = __esm(() => {
|
|
|
30362
30122
|
});
|
|
30363
30123
|
|
|
30364
30124
|
// src/tui/component/status-bar.tsx
|
|
30365
|
-
import { TextAttributes as
|
|
30125
|
+
import { TextAttributes as TextAttributes15 } from "@opentui/core";
|
|
30366
30126
|
function Hotkey(props) {
|
|
30367
30127
|
const {
|
|
30368
30128
|
theme
|
|
@@ -30381,7 +30141,7 @@ function Hotkey(props) {
|
|
|
30381
30141
|
setProp(_el$5, "wrapMode", "none");
|
|
30382
30142
|
insert(_el$5, () => props.label);
|
|
30383
30143
|
effect((_p$) => {
|
|
30384
|
-
var _v$ = theme.accent, _v$2 =
|
|
30144
|
+
var _v$ = theme.accent, _v$2 = TextAttributes15.BOLD, _v$3 = theme.textMuted;
|
|
30385
30145
|
_v$ !== _p$.e && (_p$.e = setProp(_el$2, "fg", _v$, _p$.e));
|
|
30386
30146
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$2, "attributes", _v$2, _p$.t));
|
|
30387
30147
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$3, _p$.a));
|
|
@@ -30394,7 +30154,7 @@ function Hotkey(props) {
|
|
|
30394
30154
|
return _el$;
|
|
30395
30155
|
})();
|
|
30396
30156
|
}
|
|
30397
|
-
function StatusBar(
|
|
30157
|
+
function StatusBar() {
|
|
30398
30158
|
const {
|
|
30399
30159
|
theme
|
|
30400
30160
|
} = useTheme();
|
|
@@ -30449,7 +30209,6 @@ function StatusBar(props = {}) {
|
|
|
30449
30209
|
setProp(_el$9, "flexDirection", "row");
|
|
30450
30210
|
setProp(_el$9, "gap", 2);
|
|
30451
30211
|
setProp(_el$9, "flexShrink", 0);
|
|
30452
|
-
insert(_el$9, () => props.indicator, null);
|
|
30453
30212
|
insert(_el$9, createComponent2(For, {
|
|
30454
30213
|
each: rightHints,
|
|
30455
30214
|
children: (b2) => createComponent2(Hotkey, {
|
|
@@ -30470,7 +30229,7 @@ function StatusBar(props = {}) {
|
|
|
30470
30229
|
insertNode(_el$0, createTextNode(`Press Ctrl+C again to exit`));
|
|
30471
30230
|
setProp(_el$0, "wrapMode", "none");
|
|
30472
30231
|
effect((_p$) => {
|
|
30473
|
-
var _v$4 = theme.warning, _v$5 =
|
|
30232
|
+
var _v$4 = theme.warning, _v$5 = TextAttributes15.BOLD;
|
|
30474
30233
|
_v$4 !== _p$.e && (_p$.e = setProp(_el$0, "fg", _v$4, _p$.e));
|
|
30475
30234
|
_v$5 !== _p$.t && (_p$.t = setProp(_el$0, "attributes", _v$5, _p$.t));
|
|
30476
30235
|
return _p$;
|
|
@@ -30482,7 +30241,7 @@ function StatusBar(props = {}) {
|
|
|
30482
30241
|
}
|
|
30483
30242
|
}), null);
|
|
30484
30243
|
effect((_p$) => {
|
|
30485
|
-
var _v$6 = theme.primary, _v$7 =
|
|
30244
|
+
var _v$6 = theme.primary, _v$7 = TextAttributes15.BOLD;
|
|
30486
30245
|
_v$6 !== _p$.e && (_p$.e = setProp(_el$8, "fg", _v$6, _p$.e));
|
|
30487
30246
|
_v$7 !== _p$.t && (_p$.t = setProp(_el$8, "attributes", _v$7, _p$.t));
|
|
30488
30247
|
return _p$;
|
|
@@ -30508,7 +30267,7 @@ var init_status_bar = __esm(() => {
|
|
|
30508
30267
|
});
|
|
30509
30268
|
|
|
30510
30269
|
// src/tui/component/toast-overlay.tsx
|
|
30511
|
-
import { TextAttributes as
|
|
30270
|
+
import { TextAttributes as TextAttributes16 } from "@opentui/core";
|
|
30512
30271
|
function ToastOverlay() {
|
|
30513
30272
|
const {
|
|
30514
30273
|
theme
|
|
@@ -30551,7 +30310,7 @@ function ToastOverlay() {
|
|
|
30551
30310
|
setProp(_el$4, "wrapMode", "none");
|
|
30552
30311
|
insert(_el$4, () => toast.title);
|
|
30553
30312
|
effect((_p$) => {
|
|
30554
|
-
var _v$3 = bg(), _v$4 = fg(), _v$5 =
|
|
30313
|
+
var _v$3 = bg(), _v$4 = fg(), _v$5 = TextAttributes16.BOLD, _v$6 = fg();
|
|
30555
30314
|
_v$3 !== _p$.e && (_p$.e = setProp(_el$2, "backgroundColor", _v$3, _p$.e));
|
|
30556
30315
|
_v$4 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$4, _p$.t));
|
|
30557
30316
|
_v$5 !== _p$.a && (_p$.a = setProp(_el$3, "attributes", _v$5, _p$.a));
|
|
@@ -30619,7 +30378,7 @@ function describePRChip(status) {
|
|
|
30619
30378
|
}
|
|
30620
30379
|
|
|
30621
30380
|
// src/tui/component/create-pr-button.tsx
|
|
30622
|
-
import { TextAttributes as
|
|
30381
|
+
import { TextAttributes as TextAttributes17 } from "@opentui/core";
|
|
30623
30382
|
function isEnabled(task) {
|
|
30624
30383
|
if (!task)
|
|
30625
30384
|
return false;
|
|
@@ -30694,7 +30453,7 @@ function CreatePRButton(props) {
|
|
|
30694
30453
|
setProp(_el$3, "wrapMode", "none");
|
|
30695
30454
|
insert(_el$3, () => state().label);
|
|
30696
30455
|
effect((_p$) => {
|
|
30697
|
-
var _v$ = enabled() ? onClick : undefined, _v$2 = bracketColor(), _v$3 =
|
|
30456
|
+
var _v$ = enabled() ? onClick : undefined, _v$2 = bracketColor(), _v$3 = TextAttributes17.BOLD, _v$4 = labelColor();
|
|
30698
30457
|
_v$ !== _p$.e && (_p$.e = setProp(_el$, "onMouseUp", _v$, _p$.e));
|
|
30699
30458
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$2, "fg", _v$2, _p$.t));
|
|
30700
30459
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$2, "attributes", _v$3, _p$.a));
|
|
@@ -30828,7 +30587,7 @@ var init_worktree_opener = __esm(() => {
|
|
|
30828
30587
|
});
|
|
30829
30588
|
|
|
30830
30589
|
// src/tui/component/open-worktree-button.tsx
|
|
30831
|
-
import { TextAttributes as
|
|
30590
|
+
import { TextAttributes as TextAttributes18 } from "@opentui/core";
|
|
30832
30591
|
function canOpen(task, opener) {
|
|
30833
30592
|
return Boolean(task?.worktreePath && opener);
|
|
30834
30593
|
}
|
|
@@ -30860,7 +30619,7 @@ function OpenWorktreeButton(props) {
|
|
|
30860
30619
|
setProp(_el$4, "wrapMode", "none");
|
|
30861
30620
|
insert(_el$4, label);
|
|
30862
30621
|
effect((_p$) => {
|
|
30863
|
-
var _v$ = enabled() ? onClick : undefined, _v$2 = color(), _v$3 =
|
|
30622
|
+
var _v$ = enabled() ? onClick : undefined, _v$2 = color(), _v$3 = TextAttributes18.BOLD, _v$4 = theme.textMuted;
|
|
30864
30623
|
_v$ !== _p$.e && (_p$.e = setProp(_el$, "onMouseUp", _v$, _p$.e));
|
|
30865
30624
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$2, "fg", _v$2, _p$.t));
|
|
30866
30625
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$2, "attributes", _v$3, _p$.a));
|
|
@@ -31168,7 +30927,7 @@ var init_markdown_parser = __esm(() => {
|
|
|
31168
30927
|
});
|
|
31169
30928
|
|
|
31170
30929
|
// src/tui/panes/chat/Markdown.tsx
|
|
31171
|
-
import { TextAttributes as
|
|
30930
|
+
import { TextAttributes as TextAttributes19 } from "@opentui/core";
|
|
31172
30931
|
function InlineSpans(props) {
|
|
31173
30932
|
const {
|
|
31174
30933
|
theme
|
|
@@ -31198,7 +30957,7 @@ function InlineSpans(props) {
|
|
|
31198
30957
|
insert(_el$3, () => t2.text, _el$5);
|
|
31199
30958
|
effect((_$p) => setProp(_el$3, "style", {
|
|
31200
30959
|
fg: theme.accent,
|
|
31201
|
-
attributes:
|
|
30960
|
+
attributes: TextAttributes19.DIM
|
|
31202
30961
|
}, _$p));
|
|
31203
30962
|
return _el$3;
|
|
31204
30963
|
})();
|
|
@@ -31210,7 +30969,7 @@ function InlineSpans(props) {
|
|
|
31210
30969
|
insert(_el$6, () => showUrl ? t2.text : t2.href);
|
|
31211
30970
|
effect((_$p) => setProp(_el$6, "style", {
|
|
31212
30971
|
fg: theme.accent,
|
|
31213
|
-
attributes:
|
|
30972
|
+
attributes: TextAttributes19.UNDERLINE
|
|
31214
30973
|
}, _$p));
|
|
31215
30974
|
return _el$6;
|
|
31216
30975
|
})(), createComponent2(Show, {
|
|
@@ -31222,7 +30981,7 @@ function InlineSpans(props) {
|
|
|
31222
30981
|
insert(_el$7, () => t2.href, _el$9);
|
|
31223
30982
|
effect((_$p) => setProp(_el$7, "style", {
|
|
31224
30983
|
fg: theme.textMuted,
|
|
31225
|
-
attributes:
|
|
30984
|
+
attributes: TextAttributes19.DIM
|
|
31226
30985
|
}, _$p));
|
|
31227
30986
|
return _el$7;
|
|
31228
30987
|
}
|
|
@@ -31399,7 +31158,7 @@ function VerticalTable(props) {
|
|
|
31399
31158
|
var _el$20 = createElement("text");
|
|
31400
31159
|
insertNode(_el$20, createTextNode(`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`));
|
|
31401
31160
|
effect((_p$) => {
|
|
31402
|
-
var _v$4 = theme.textMuted, _v$5 =
|
|
31161
|
+
var _v$4 = theme.textMuted, _v$5 = TextAttributes19.DIM;
|
|
31403
31162
|
_v$4 !== _p$.e && (_p$.e = setProp(_el$20, "fg", _v$4, _p$.e));
|
|
31404
31163
|
_v$5 !== _p$.t && (_p$.t = setProp(_el$20, "attributes", _v$5, _p$.t));
|
|
31405
31164
|
return _p$;
|
|
@@ -31490,7 +31249,7 @@ function BlockNode(props) {
|
|
|
31490
31249
|
})();
|
|
31491
31250
|
}
|
|
31492
31251
|
if (b2.kind === "heading") {
|
|
31493
|
-
const attrs = b2.level === 1 ?
|
|
31252
|
+
const attrs = b2.level === 1 ? TextAttributes19.BOLD | TextAttributes19.UNDERLINE : TextAttributes19.BOLD;
|
|
31494
31253
|
const fg = b2.level <= 2 ? theme.accent : theme.text;
|
|
31495
31254
|
const tokens = parseInline(b2.text);
|
|
31496
31255
|
return (() => {
|
|
@@ -31516,7 +31275,7 @@ function BlockNode(props) {
|
|
|
31516
31275
|
const checkbox = item.checked ? "[x] " : "[ ] ";
|
|
31517
31276
|
const bullet = b2.ordered ? `${b2.start + idx()}. ` : "\u2022 ";
|
|
31518
31277
|
const prefix = isTask ? checkbox : bullet;
|
|
31519
|
-
const labelAttrs = isTask && item.checked ?
|
|
31278
|
+
const labelAttrs = isTask && item.checked ? TextAttributes19.DIM : 0;
|
|
31520
31279
|
return (() => {
|
|
31521
31280
|
var _el$30 = createElement("text"), _el$31 = createElement("span");
|
|
31522
31281
|
insertNode(_el$30, _el$31);
|
|
@@ -31563,9 +31322,9 @@ function BlockNode(props) {
|
|
|
31563
31322
|
}
|
|
31564
31323
|
}), null);
|
|
31565
31324
|
effect((_p$) => {
|
|
31566
|
-
var _v$10 = theme.textMuted, _v$11 =
|
|
31325
|
+
var _v$10 = theme.textMuted, _v$11 = TextAttributes19.ITALIC, _v$12 = {
|
|
31567
31326
|
fg: theme.textMuted,
|
|
31568
|
-
attributes:
|
|
31327
|
+
attributes: TextAttributes19.DIM
|
|
31569
31328
|
};
|
|
31570
31329
|
_v$10 !== _p$.e && (_p$.e = setProp(_el$33, "fg", _v$10, _p$.e));
|
|
31571
31330
|
_v$11 !== _p$.t && (_p$.t = setProp(_el$33, "attributes", _v$11, _p$.t));
|
|
@@ -31607,7 +31366,7 @@ function BlockNode(props) {
|
|
|
31607
31366
|
var _el$37 = createElement("text");
|
|
31608
31367
|
insert(_el$37, () => b2.lang);
|
|
31609
31368
|
effect((_p$) => {
|
|
31610
|
-
var _v$13 = theme.textMuted, _v$14 =
|
|
31369
|
+
var _v$13 = theme.textMuted, _v$14 = TextAttributes19.DIM;
|
|
31611
31370
|
_v$13 !== _p$.e && (_p$.e = setProp(_el$37, "fg", _v$13, _p$.e));
|
|
31612
31371
|
_v$14 !== _p$.t && (_p$.t = setProp(_el$37, "attributes", _v$14, _p$.t));
|
|
31613
31372
|
return _p$;
|
|
@@ -31690,7 +31449,7 @@ function releaseDialogVersionChoices(info, releases, limit = 8) {
|
|
|
31690
31449
|
}
|
|
31691
31450
|
|
|
31692
31451
|
// src/tui/component/update-dialog.tsx
|
|
31693
|
-
import { TextAttributes as
|
|
31452
|
+
import { TextAttributes as TextAttributes20 } from "@opentui/core";
|
|
31694
31453
|
function UpdateDialog(props) {
|
|
31695
31454
|
const dialog = useDialog();
|
|
31696
31455
|
const {
|
|
@@ -31732,7 +31491,7 @@ function UpdateDialog(props) {
|
|
|
31732
31491
|
var _el$41 = createElement("text");
|
|
31733
31492
|
insertNode(_el$41, createTextNode(`up to date`));
|
|
31734
31493
|
effect((_p$) => {
|
|
31735
|
-
var _v$14 = theme.accent, _v$15 =
|
|
31494
|
+
var _v$14 = theme.accent, _v$15 = TextAttributes20.BOLD;
|
|
31736
31495
|
_v$14 !== _p$.e && (_p$.e = setProp(_el$41, "fg", _v$14, _p$.e));
|
|
31737
31496
|
_v$15 !== _p$.t && (_p$.t = setProp(_el$41, "attributes", _v$15, _p$.t));
|
|
31738
31497
|
return _p$;
|
|
@@ -31754,7 +31513,7 @@ function UpdateDialog(props) {
|
|
|
31754
31513
|
insertNode(_el$1, _el$10);
|
|
31755
31514
|
insert(_el$1, () => props.info.latest, null);
|
|
31756
31515
|
effect((_p$) => {
|
|
31757
|
-
var _v$ = theme.warning, _v$2 =
|
|
31516
|
+
var _v$ = theme.warning, _v$2 = TextAttributes20.BOLD;
|
|
31758
31517
|
_v$ !== _p$.e && (_p$.e = setProp(_el$1, "fg", _v$, _p$.e));
|
|
31759
31518
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$1, "attributes", _v$2, _p$.t));
|
|
31760
31519
|
return _p$;
|
|
@@ -31790,7 +31549,7 @@ function UpdateDialog(props) {
|
|
|
31790
31549
|
insertNode(_el$20, _el$21);
|
|
31791
31550
|
insert(_el$20, recommendedGlobalInstallCommand, null);
|
|
31792
31551
|
effect((_p$) => {
|
|
31793
|
-
var _v$3 = theme.warning, _v$4 =
|
|
31552
|
+
var _v$3 = theme.warning, _v$4 = TextAttributes20.BOLD, _v$5 = props.onUpdate, _v$6 = theme.textMuted, _v$7 = theme.accent, _v$8 = TextAttributes20.BOLD, _v$9 = theme.textMuted;
|
|
31794
31553
|
_v$3 !== _p$.e && (_p$.e = setProp(_el$13, "fg", _v$3, _p$.e));
|
|
31795
31554
|
_v$4 !== _p$.t && (_p$.t = setProp(_el$13, "attributes", _v$4, _p$.t));
|
|
31796
31555
|
_v$5 !== _p$.a && (_p$.a = setProp(_el$13, "onMouseUp", _v$5, _p$.a));
|
|
@@ -31830,7 +31589,7 @@ function UpdateDialog(props) {
|
|
|
31830
31589
|
setProp(_el$43, "onMouseUp", () => setSelectedVersion(version));
|
|
31831
31590
|
insert(_el$43, version, null);
|
|
31832
31591
|
effect((_p$) => {
|
|
31833
|
-
var _v$16 = selected() ? theme.accent : theme.textMuted, _v$17 = selected() ?
|
|
31592
|
+
var _v$16 = selected() ? theme.accent : theme.textMuted, _v$17 = selected() ? TextAttributes20.BOLD : undefined;
|
|
31834
31593
|
_v$16 !== _p$.e && (_p$.e = setProp(_el$43, "fg", _v$16, _p$.e));
|
|
31835
31594
|
_v$17 !== _p$.t && (_p$.t = setProp(_el$43, "attributes", _v$17, _p$.t));
|
|
31836
31595
|
return _p$;
|
|
@@ -31918,7 +31677,7 @@ function UpdateDialog(props) {
|
|
|
31918
31677
|
}
|
|
31919
31678
|
}));
|
|
31920
31679
|
effect((_p$) => {
|
|
31921
|
-
var _v$0 =
|
|
31680
|
+
var _v$0 = TextAttributes20.BOLD, _v$1 = theme.text, _v$10 = theme.textMuted, _v$11 = theme.textMuted, _v$12 = theme.textMuted, _v$13 = theme.textMuted;
|
|
31922
31681
|
_v$0 !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$0, _p$.e));
|
|
31923
31682
|
_v$1 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$1, _p$.t));
|
|
31924
31683
|
_v$10 !== _p$.a && (_p$.a = setProp(_el$4, "fg", _v$10, _p$.a));
|
|
@@ -31961,7 +31720,7 @@ var init_update_dialog = __esm(() => {
|
|
|
31961
31720
|
|
|
31962
31721
|
// src/tui/component/top-bar.tsx
|
|
31963
31722
|
import { spawnSync as spawnSync11 } from "child_process";
|
|
31964
|
-
import { TextAttributes as
|
|
31723
|
+
import { TextAttributes as TextAttributes21 } from "@opentui/core";
|
|
31965
31724
|
function TopBar(props) {
|
|
31966
31725
|
const {
|
|
31967
31726
|
theme
|
|
@@ -32050,7 +31809,7 @@ function TopBar(props) {
|
|
|
32050
31809
|
insertNode(_el$7, createTextNode(`[Update]`));
|
|
32051
31810
|
setProp(_el$7, "onMouseUp", openReleaseDialog);
|
|
32052
31811
|
effect((_p$) => {
|
|
32053
|
-
var _v$ = theme.warning, _v$2 =
|
|
31812
|
+
var _v$ = theme.warning, _v$2 = TextAttributes21.BOLD;
|
|
32054
31813
|
_v$ !== _p$.e && (_p$.e = setProp(_el$7, "fg", _v$, _p$.e));
|
|
32055
31814
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$7, "attributes", _v$2, _p$.t));
|
|
32056
31815
|
return _p$;
|
|
@@ -32087,7 +31846,7 @@ function TopBar(props) {
|
|
|
32087
31846
|
return () => _c$() ? rcBridge().bound?.taskTitle ?? rcBridge().envId ?? "RC" : "RC connecting\u2026";
|
|
32088
31847
|
})(), null);
|
|
32089
31848
|
effect((_p$) => {
|
|
32090
|
-
var _v$3 = theme.accent, _v$4 =
|
|
31849
|
+
var _v$3 = theme.accent, _v$4 = TextAttributes21.BOLD;
|
|
32091
31850
|
_v$3 !== _p$.e && (_p$.e = setProp(_el$10, "fg", _v$3, _p$.e));
|
|
32092
31851
|
_v$4 !== _p$.t && (_p$.t = setProp(_el$10, "attributes", _v$4, _p$.t));
|
|
32093
31852
|
return _p$;
|
|
@@ -32114,7 +31873,7 @@ function TopBar(props) {
|
|
|
32114
31873
|
insertNode(_el$15, createTextNode(`daemon disconnected`));
|
|
32115
31874
|
setProp(_el$15, "wrapMode", "none");
|
|
32116
31875
|
effect((_p$) => {
|
|
32117
|
-
var _v$8 = theme.error, _v$9 =
|
|
31876
|
+
var _v$8 = theme.error, _v$9 = TextAttributes21.BOLD;
|
|
32118
31877
|
_v$8 !== _p$.e && (_p$.e = setProp(_el$15, "fg", _v$8, _p$.e));
|
|
32119
31878
|
_v$9 !== _p$.t && (_p$.t = setProp(_el$15, "attributes", _v$9, _p$.t));
|
|
32120
31879
|
return _p$;
|
|
@@ -32144,7 +31903,7 @@ function TopBar(props) {
|
|
|
32144
31903
|
setProp(_el$18, "wrapMode", "none");
|
|
32145
31904
|
insert(_el$18, () => label().repoName);
|
|
32146
31905
|
effect((_p$) => {
|
|
32147
|
-
var _v$0 = label().branch ? theme.textMuted : theme.text, _v$1 = label().branch ? undefined :
|
|
31906
|
+
var _v$0 = label().branch ? theme.textMuted : theme.text, _v$1 = label().branch ? undefined : TextAttributes21.BOLD;
|
|
32148
31907
|
_v$0 !== _p$.e && (_p$.e = setProp(_el$18, "fg", _v$0, _p$.e));
|
|
32149
31908
|
_v$1 !== _p$.t && (_p$.t = setProp(_el$18, "attributes", _v$1, _p$.t));
|
|
32150
31909
|
return _p$;
|
|
@@ -32176,7 +31935,7 @@ function TopBar(props) {
|
|
|
32176
31935
|
setProp(_el$21, "wrapMode", "none");
|
|
32177
31936
|
insert(_el$21, () => label().branch);
|
|
32178
31937
|
effect((_p$) => {
|
|
32179
|
-
var _v$10 = theme.text, _v$11 =
|
|
31938
|
+
var _v$10 = theme.text, _v$11 = TextAttributes21.BOLD;
|
|
32180
31939
|
_v$10 !== _p$.e && (_p$.e = setProp(_el$21, "fg", _v$10, _p$.e));
|
|
32181
31940
|
_v$11 !== _p$.t && (_p$.t = setProp(_el$21, "attributes", _v$11, _p$.t));
|
|
32182
31941
|
return _p$;
|
|
@@ -32215,7 +31974,7 @@ function TopBar(props) {
|
|
|
32215
31974
|
}
|
|
32216
31975
|
}), null);
|
|
32217
31976
|
effect((_p$) => {
|
|
32218
|
-
var _v$5 = theme.primary, _v$6 =
|
|
31977
|
+
var _v$5 = theme.primary, _v$6 = TextAttributes21.BOLD, _v$7 = theme.textMuted;
|
|
32219
31978
|
_v$5 !== _p$.e && (_p$.e = setProp(_el$3, "fg", _v$5, _p$.e));
|
|
32220
31979
|
_v$6 !== _p$.t && (_p$.t = setProp(_el$3, "attributes", _v$6, _p$.t));
|
|
32221
31980
|
_v$7 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$7, _p$.a));
|
|
@@ -33184,7 +32943,7 @@ var DEFAULT_BASE_REF = "main", PICKER_MAX_VISIBLE = 8;
|
|
|
33184
32943
|
var init_state2 = () => {};
|
|
33185
32944
|
|
|
33186
32945
|
// src/tui/component/new-task-dialog/dialog.tsx
|
|
33187
|
-
import { TextAttributes as
|
|
32946
|
+
import { TextAttributes as TextAttributes22 } from "@opentui/core";
|
|
33188
32947
|
function NewTaskDialogView(props) {
|
|
33189
32948
|
const dialog = useDialog();
|
|
33190
32949
|
const {
|
|
@@ -33572,7 +33331,7 @@ function NewTaskDialogView(props) {
|
|
|
33572
33331
|
insert(_el$65, suffix, null);
|
|
33573
33332
|
insert(_el$65, tag, null);
|
|
33574
33333
|
effect((_p$) => {
|
|
33575
|
-
var _v$27 = isCursor() ? theme.primary : isSelected() ? theme.accent : theme.textMuted, _v$28 = isCursor() ?
|
|
33334
|
+
var _v$27 = isCursor() ? theme.primary : isSelected() ? theme.accent : theme.textMuted, _v$28 = isCursor() ? TextAttributes22.BOLD : undefined;
|
|
33576
33335
|
_v$27 !== _p$.e && (_p$.e = setProp(_el$65, "fg", _v$27, _p$.e));
|
|
33577
33336
|
_v$28 !== _p$.t && (_p$.t = setProp(_el$65, "attributes", _v$28, _p$.t));
|
|
33578
33337
|
return _p$;
|
|
@@ -33686,7 +33445,7 @@ function NewTaskDialogView(props) {
|
|
|
33686
33445
|
insert(_el$66, () => isCursor() ? "\u25B8 " : " ", null);
|
|
33687
33446
|
insert(_el$66, name, null);
|
|
33688
33447
|
effect((_p$) => {
|
|
33689
|
-
var _v$29 = isCursor() ? theme.primary : isSelected() ? theme.accent : theme.textMuted, _v$30 = isCursor() ?
|
|
33448
|
+
var _v$29 = isCursor() ? theme.primary : isSelected() ? theme.accent : theme.textMuted, _v$30 = isCursor() ? TextAttributes22.BOLD : undefined;
|
|
33690
33449
|
_v$29 !== _p$.e && (_p$.e = setProp(_el$66, "fg", _v$29, _p$.e));
|
|
33691
33450
|
_v$30 !== _p$.t && (_p$.t = setProp(_el$66, "attributes", _v$30, _p$.t));
|
|
33692
33451
|
return _p$;
|
|
@@ -33818,7 +33577,7 @@ function NewTaskDialogView(props) {
|
|
|
33818
33577
|
insert(_el$67, () => isCursor() ? "\u25B8 " : " ", _el$68);
|
|
33819
33578
|
insert(_el$67, name, _el$68);
|
|
33820
33579
|
effect((_p$) => {
|
|
33821
|
-
var _v$31 = isCursor() ? theme.primary : theme.textMuted, _v$32 = isCursor() ?
|
|
33580
|
+
var _v$31 = isCursor() ? theme.primary : theme.textMuted, _v$32 = isCursor() ? TextAttributes22.BOLD : undefined;
|
|
33822
33581
|
_v$31 !== _p$.e && (_p$.e = setProp(_el$67, "fg", _v$31, _p$.e));
|
|
33823
33582
|
_v$32 !== _p$.t && (_p$.t = setProp(_el$67, "attributes", _v$32, _p$.t));
|
|
33824
33583
|
return _p$;
|
|
@@ -33926,7 +33685,7 @@ function NewTaskDialogView(props) {
|
|
|
33926
33685
|
setProp(_el$62, "paddingBottom", 1);
|
|
33927
33686
|
insertNode(_el$63, createTextNode(`\u2191\u2193 pick \xB7 enter select \xB7 tab next field \xB7 ctrl+[/] switch \xB7 esc cancel`));
|
|
33928
33687
|
effect((_p$) => {
|
|
33929
|
-
var _v$18 =
|
|
33688
|
+
var _v$18 = TextAttributes22.BOLD, _v$19 = theme.text, _v$20 = field() === "confirm" ? theme.primary : theme.text, _v$21 = field() === "confirm" ? TextAttributes22.BOLD : undefined, _v$22 = tab() === "existing" ? theme.info : theme.textMuted, _v$23 = tab() === "existing" ? TextAttributes22.BOLD : undefined, _v$24 = tab() === "clone" ? theme.info : theme.textMuted, _v$25 = tab() === "clone" ? TextAttributes22.BOLD : undefined, _v$26 = theme.textMuted;
|
|
33930
33689
|
_v$18 !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$18, _p$.e));
|
|
33931
33690
|
_v$19 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$19, _p$.t));
|
|
33932
33691
|
_v$20 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$20, _p$.a));
|
|
@@ -34037,7 +33796,7 @@ function escapeRegExp(value) {
|
|
|
34037
33796
|
}
|
|
34038
33797
|
|
|
34039
33798
|
// src/tui/component/quick-fork-dialog/dialog.tsx
|
|
34040
|
-
import { TextAttributes as
|
|
33799
|
+
import { TextAttributes as TextAttributes23 } from "@opentui/core";
|
|
34041
33800
|
function QuickForkDialogView(props) {
|
|
34042
33801
|
const dialog = useDialog();
|
|
34043
33802
|
const {
|
|
@@ -34065,6 +33824,22 @@ function QuickForkDialogView(props) {
|
|
|
34065
33824
|
const [prompt, setPrompt] = createSignal("");
|
|
34066
33825
|
const [field, setField] = createSignal("prompt");
|
|
34067
33826
|
const [modelStep, setModelStep] = createSignal("summary");
|
|
33827
|
+
const [branchStep, setBranchStep] = createSignal("summary");
|
|
33828
|
+
const [baseRef, setBaseRef] = createSignal(props.baseRef);
|
|
33829
|
+
const [baseRefTouched, setBaseRefTouched] = createSignal(false);
|
|
33830
|
+
const branches = createMemo(() => listLocalBranches(props.repo));
|
|
33831
|
+
const branchFiltered = createMemo(() => filterBranches(branches(), baseRef()));
|
|
33832
|
+
const [branchCursor, setBranchCursor] = createSignal(0);
|
|
33833
|
+
const branchWindow = createMemo(() => windowAround(branchFiltered(), branchCursor()));
|
|
33834
|
+
createEffect(() => {
|
|
33835
|
+
const list = branchFiltered();
|
|
33836
|
+
if (baseRefTouched()) {
|
|
33837
|
+
setBranchCursor(0);
|
|
33838
|
+
return;
|
|
33839
|
+
}
|
|
33840
|
+
const idx = list.findIndex((b2) => b2 === props.baseRef);
|
|
33841
|
+
setBranchCursor(idx >= 0 ? idx : 0);
|
|
33842
|
+
});
|
|
34068
33843
|
const modelSummary = createMemo(() => {
|
|
34069
33844
|
const m2 = cursorModel();
|
|
34070
33845
|
if (!m2)
|
|
@@ -34080,25 +33855,36 @@ function QuickForkDialogView(props) {
|
|
|
34080
33855
|
if (!m2)
|
|
34081
33856
|
return;
|
|
34082
33857
|
const effort = effortOptions()[effortCursor()]?.effort;
|
|
33858
|
+
const finalBaseRef = resolveBaseRef(baseRef(), branchFiltered(), branchCursor());
|
|
34083
33859
|
props.onSubmit({
|
|
34084
33860
|
prompt: text,
|
|
34085
33861
|
modelId: m2.id,
|
|
34086
33862
|
effort,
|
|
34087
|
-
vendor: m2.vendor
|
|
33863
|
+
vendor: m2.vendor,
|
|
33864
|
+
baseRef: finalBaseRef
|
|
34088
33865
|
});
|
|
34089
33866
|
dialog.clear();
|
|
34090
33867
|
}
|
|
34091
33868
|
function focusPrompt() {
|
|
34092
33869
|
setField("prompt");
|
|
34093
33870
|
setModelStep("summary");
|
|
33871
|
+
setBranchStep("summary");
|
|
34094
33872
|
}
|
|
34095
33873
|
function focusModel() {
|
|
34096
33874
|
setField("model");
|
|
34097
33875
|
setModelStep("summary");
|
|
33876
|
+
setBranchStep("summary");
|
|
33877
|
+
}
|
|
33878
|
+
function focusBranch() {
|
|
33879
|
+
setField("branch");
|
|
33880
|
+
setModelStep("summary");
|
|
33881
|
+
setBranchStep("summary");
|
|
34098
33882
|
}
|
|
34099
33883
|
function switchField() {
|
|
34100
33884
|
if (field() === "prompt")
|
|
34101
33885
|
focusModel();
|
|
33886
|
+
else if (field() === "model")
|
|
33887
|
+
focusBranch();
|
|
34102
33888
|
else
|
|
34103
33889
|
focusPrompt();
|
|
34104
33890
|
}
|
|
@@ -34111,10 +33897,19 @@ function QuickForkDialogView(props) {
|
|
|
34111
33897
|
if (hasEffortChoice()) {
|
|
34112
33898
|
setModelStep("effort-pick");
|
|
34113
33899
|
} else {
|
|
34114
|
-
|
|
33900
|
+
focusBranch();
|
|
34115
33901
|
}
|
|
34116
33902
|
return;
|
|
34117
33903
|
}
|
|
33904
|
+
focusBranch();
|
|
33905
|
+
}
|
|
33906
|
+
function branchTabAdvance() {
|
|
33907
|
+
if (branchStep() === "summary") {
|
|
33908
|
+
setBranchStep("branch-pick");
|
|
33909
|
+
return;
|
|
33910
|
+
}
|
|
33911
|
+
setBaseRef(resolveBaseRef(baseRef(), branchFiltered(), branchCursor()));
|
|
33912
|
+
setBaseRefTouched(true);
|
|
34118
33913
|
focusPrompt();
|
|
34119
33914
|
}
|
|
34120
33915
|
useBindings(() => ({
|
|
@@ -34197,18 +33992,46 @@ function QuickForkDialogView(props) {
|
|
|
34197
33992
|
}
|
|
34198
33993
|
}]
|
|
34199
33994
|
}));
|
|
33995
|
+
useBindings(() => ({
|
|
33996
|
+
enabled: field() === "branch",
|
|
33997
|
+
bindings: [{
|
|
33998
|
+
key: "return",
|
|
33999
|
+
cmd: branchTabAdvance
|
|
34000
|
+
}, {
|
|
34001
|
+
key: "up",
|
|
34002
|
+
cmd: () => {
|
|
34003
|
+
if (branchStep() !== "branch-pick")
|
|
34004
|
+
return;
|
|
34005
|
+
const n2 = branchFiltered().length;
|
|
34006
|
+
if (!n2)
|
|
34007
|
+
return;
|
|
34008
|
+
setBranchCursor(clampCursor(branchCursor() - 1, n2));
|
|
34009
|
+
}
|
|
34010
|
+
}, {
|
|
34011
|
+
key: "down",
|
|
34012
|
+
cmd: () => {
|
|
34013
|
+
if (branchStep() !== "branch-pick")
|
|
34014
|
+
return;
|
|
34015
|
+
const n2 = branchFiltered().length;
|
|
34016
|
+
if (!n2)
|
|
34017
|
+
return;
|
|
34018
|
+
setBranchCursor(clampCursor(branchCursor() + 1, n2));
|
|
34019
|
+
}
|
|
34020
|
+
}]
|
|
34021
|
+
}));
|
|
34200
34022
|
const repoLabel = () => {
|
|
34201
34023
|
const trimmed = props.repo.replace(/\/+$/, "");
|
|
34202
34024
|
const last = trimmed.split("/").filter(Boolean).pop();
|
|
34203
34025
|
return last ?? props.repo;
|
|
34204
34026
|
};
|
|
34205
34027
|
return (() => {
|
|
34206
|
-
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("text"), _el$7 = createElement("box"), _el$8 = createElement("text"), _el$
|
|
34028
|
+
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("text"), _el$7 = createElement("box"), _el$8 = createElement("text"), _el$9 = createElement("text"), _el$1 = createElement("text"), _el$10 = createElement("box"), _el$26 = createElement("box"), _el$44 = createElement("box"), _el$45 = createElement("text"), _el$47 = createElement("input"), _el$48 = createElement("box"), _el$49 = createElement("text");
|
|
34207
34029
|
insertNode(_el$, _el$2);
|
|
34208
34030
|
insertNode(_el$, _el$7);
|
|
34209
|
-
insertNode(_el$, _el$
|
|
34210
|
-
insertNode(_el$, _el$
|
|
34211
|
-
insertNode(_el$, _el$
|
|
34031
|
+
insertNode(_el$, _el$10);
|
|
34032
|
+
insertNode(_el$, _el$26);
|
|
34033
|
+
insertNode(_el$, _el$44);
|
|
34034
|
+
insertNode(_el$, _el$48);
|
|
34212
34035
|
setProp(_el$, "paddingLeft", 2);
|
|
34213
34036
|
setProp(_el$, "paddingRight", 2);
|
|
34214
34037
|
setProp(_el$, "gap", 1);
|
|
@@ -34220,70 +34043,68 @@ function QuickForkDialogView(props) {
|
|
|
34220
34043
|
insertNode(_el$5, createTextNode(`esc`));
|
|
34221
34044
|
setProp(_el$5, "onMouseUp", () => props.onCancel());
|
|
34222
34045
|
insertNode(_el$7, _el$8);
|
|
34223
|
-
insertNode(_el$7, _el$
|
|
34046
|
+
insertNode(_el$7, _el$9);
|
|
34224
34047
|
insertNode(_el$7, _el$1);
|
|
34225
34048
|
setProp(_el$7, "flexDirection", "row");
|
|
34226
34049
|
setProp(_el$7, "gap", 1);
|
|
34227
|
-
insertNode(_el$8, createTextNode(`Forking from`));
|
|
34228
34050
|
setProp(_el$8, "wrapMode", "none");
|
|
34229
|
-
|
|
34230
|
-
|
|
34231
|
-
|
|
34232
|
-
insertNode(_el$1, _el$11);
|
|
34051
|
+
insert(_el$8, repoLabel);
|
|
34052
|
+
insertNode(_el$9, createTextNode(`>`));
|
|
34053
|
+
setProp(_el$9, "wrapMode", "none");
|
|
34233
34054
|
setProp(_el$1, "wrapMode", "none");
|
|
34234
|
-
insert(_el$1, () => props.baseRef
|
|
34235
|
-
setProp(_el$
|
|
34236
|
-
insert(_el$
|
|
34055
|
+
insert(_el$1, () => baseRef() || props.baseRef || DEFAULT_BASE_REF);
|
|
34056
|
+
setProp(_el$10, "flexDirection", "column");
|
|
34057
|
+
insert(_el$10, createComponent2(Show, {
|
|
34237
34058
|
get when() {
|
|
34238
34059
|
return modelStep() === "summary";
|
|
34239
34060
|
},
|
|
34240
34061
|
get children() {
|
|
34241
|
-
var _el$
|
|
34242
|
-
insertNode(_el$
|
|
34243
|
-
insertNode(_el$
|
|
34244
|
-
setProp(_el$
|
|
34245
|
-
setProp(_el$
|
|
34246
|
-
insertNode(_el$
|
|
34062
|
+
var _el$11 = createElement("box"), _el$12 = createElement("text"), _el$14 = createElement("text");
|
|
34063
|
+
insertNode(_el$11, _el$12);
|
|
34064
|
+
insertNode(_el$11, _el$14);
|
|
34065
|
+
setProp(_el$11, "flexDirection", "row");
|
|
34066
|
+
setProp(_el$11, "gap", 1);
|
|
34067
|
+
insertNode(_el$12, createTextNode(`model:`));
|
|
34068
|
+
setProp(_el$12, "wrapMode", "none");
|
|
34247
34069
|
setProp(_el$14, "wrapMode", "none");
|
|
34248
|
-
|
|
34249
|
-
insert(_el$16, modelSummary);
|
|
34070
|
+
insert(_el$14, modelSummary);
|
|
34250
34071
|
effect((_p$) => {
|
|
34251
|
-
var _v$ = field() === "model" ? theme.accent : theme.textMuted, _v$2 = field() === "model" ?
|
|
34252
|
-
_v$ !== _p$.e && (_p$.e = setProp(_el$
|
|
34253
|
-
_v$2 !== _p$.t && (_p$.t = setProp(_el$
|
|
34254
|
-
_v$3 !== _p$.a && (_p$.a = setProp(_el$
|
|
34072
|
+
var _v$ = field() === "model" ? theme.accent : theme.textMuted, _v$2 = field() === "model" ? TextAttributes23.BOLD : undefined, _v$3 = theme.text;
|
|
34073
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$12, "fg", _v$, _p$.e));
|
|
34074
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$12, "attributes", _v$2, _p$.t));
|
|
34075
|
+
_v$3 !== _p$.a && (_p$.a = setProp(_el$14, "fg", _v$3, _p$.a));
|
|
34255
34076
|
return _p$;
|
|
34256
34077
|
}, {
|
|
34257
34078
|
e: undefined,
|
|
34258
34079
|
t: undefined,
|
|
34259
34080
|
a: undefined
|
|
34260
34081
|
});
|
|
34261
|
-
return _el$
|
|
34082
|
+
return _el$11;
|
|
34262
34083
|
}
|
|
34263
34084
|
}), null);
|
|
34264
|
-
insert(_el$
|
|
34085
|
+
insert(_el$10, createComponent2(Show, {
|
|
34265
34086
|
get when() {
|
|
34266
34087
|
return modelStep() === "model-pick";
|
|
34267
34088
|
},
|
|
34268
34089
|
get children() {
|
|
34269
34090
|
return [(() => {
|
|
34270
|
-
var _el$
|
|
34271
|
-
insertNode(_el$
|
|
34091
|
+
var _el$15 = createElement("text");
|
|
34092
|
+
insertNode(_el$15, createTextNode(`model`));
|
|
34272
34093
|
effect((_p$) => {
|
|
34273
|
-
var _v$4 = theme.accent, _v$5 =
|
|
34274
|
-
_v$4 !== _p$.e && (_p$.e = setProp(_el$
|
|
34275
|
-
_v$5 !== _p$.t && (_p$.t = setProp(_el$
|
|
34094
|
+
var _v$4 = theme.accent, _v$5 = TextAttributes23.BOLD;
|
|
34095
|
+
_v$4 !== _p$.e && (_p$.e = setProp(_el$15, "fg", _v$4, _p$.e));
|
|
34096
|
+
_v$5 !== _p$.t && (_p$.t = setProp(_el$15, "attributes", _v$5, _p$.t));
|
|
34276
34097
|
return _p$;
|
|
34277
34098
|
}, {
|
|
34278
34099
|
e: undefined,
|
|
34279
34100
|
t: undefined
|
|
34280
34101
|
});
|
|
34281
|
-
return _el$
|
|
34102
|
+
return _el$15;
|
|
34282
34103
|
})(), (() => {
|
|
34283
|
-
var _el$
|
|
34284
|
-
setProp(_el$
|
|
34285
|
-
setProp(_el$
|
|
34286
|
-
insert(_el$
|
|
34104
|
+
var _el$17 = createElement("box");
|
|
34105
|
+
setProp(_el$17, "flexDirection", "column");
|
|
34106
|
+
setProp(_el$17, "paddingLeft", 2);
|
|
34107
|
+
insert(_el$17, createComponent2(For, {
|
|
34287
34108
|
get each() {
|
|
34288
34109
|
return models();
|
|
34289
34110
|
},
|
|
@@ -34291,47 +34112,47 @@ function QuickForkDialogView(props) {
|
|
|
34291
34112
|
const active = () => i2() === modelCursor();
|
|
34292
34113
|
const hasEfforts = () => modelPickerEffortOptions(model).some((c2) => c2.effort !== undefined);
|
|
34293
34114
|
return (() => {
|
|
34294
|
-
var _el$
|
|
34295
|
-
insertNode(_el$
|
|
34296
|
-
insertNode(_el$
|
|
34297
|
-
setProp(_el$
|
|
34298
|
-
setProp(_el$
|
|
34299
|
-
setProp(_el$
|
|
34300
|
-
setProp(_el$
|
|
34301
|
-
setProp(_el$
|
|
34115
|
+
var _el$50 = createElement("box"), _el$51 = createElement("text"), _el$52 = createElement("text");
|
|
34116
|
+
insertNode(_el$50, _el$51);
|
|
34117
|
+
insertNode(_el$50, _el$52);
|
|
34118
|
+
setProp(_el$50, "flexDirection", "row");
|
|
34119
|
+
setProp(_el$50, "gap", 2);
|
|
34120
|
+
setProp(_el$50, "paddingLeft", 1);
|
|
34121
|
+
setProp(_el$50, "paddingRight", 1);
|
|
34122
|
+
setProp(_el$50, "onMouseUp", () => {
|
|
34302
34123
|
setModelCursor(i2());
|
|
34303
34124
|
});
|
|
34304
|
-
setProp(_el$
|
|
34305
|
-
insert(_el$
|
|
34306
|
-
insert(_el$
|
|
34307
|
-
setProp(_el$
|
|
34308
|
-
insert(_el$
|
|
34309
|
-
insert(_el$
|
|
34125
|
+
setProp(_el$51, "wrapMode", "none");
|
|
34126
|
+
insert(_el$51, () => active() ? "\u25B8 " : " ", null);
|
|
34127
|
+
insert(_el$51, () => model.label, null);
|
|
34128
|
+
setProp(_el$52, "wrapMode", "none");
|
|
34129
|
+
insert(_el$52, () => model.vendor);
|
|
34130
|
+
insert(_el$50, (() => {
|
|
34310
34131
|
var _c$2 = memo2(() => !!hasEfforts());
|
|
34311
34132
|
return () => _c$2() ? (() => {
|
|
34312
|
-
var _el$
|
|
34313
|
-
insertNode(_el$
|
|
34314
|
-
setProp(_el$
|
|
34315
|
-
effect((_$p) => setProp(_el$
|
|
34316
|
-
return _el$
|
|
34133
|
+
var _el$53 = createElement("text");
|
|
34134
|
+
insertNode(_el$53, createTextNode(`effort\u2026`));
|
|
34135
|
+
setProp(_el$53, "wrapMode", "none");
|
|
34136
|
+
effect((_$p) => setProp(_el$53, "fg", active() ? theme.selectedListItemText : theme.textMuted, _$p));
|
|
34137
|
+
return _el$53;
|
|
34317
34138
|
})() : null;
|
|
34318
34139
|
})(), null);
|
|
34319
|
-
insert(_el$
|
|
34140
|
+
insert(_el$50, (() => {
|
|
34320
34141
|
var _c$3 = memo2(() => !!model.hint);
|
|
34321
34142
|
return () => _c$3() ? (() => {
|
|
34322
|
-
var _el$
|
|
34323
|
-
setProp(_el$
|
|
34324
|
-
insert(_el$
|
|
34325
|
-
effect((_$p) => setProp(_el$
|
|
34326
|
-
return _el$
|
|
34143
|
+
var _el$55 = createElement("text");
|
|
34144
|
+
setProp(_el$55, "wrapMode", "none");
|
|
34145
|
+
insert(_el$55, () => model.hint);
|
|
34146
|
+
effect((_$p) => setProp(_el$55, "fg", active() ? theme.selectedListItemText : theme.textMuted, _$p));
|
|
34147
|
+
return _el$55;
|
|
34327
34148
|
})() : null;
|
|
34328
34149
|
})(), null);
|
|
34329
34150
|
effect((_p$) => {
|
|
34330
|
-
var _v$
|
|
34331
|
-
_v$
|
|
34332
|
-
_v$
|
|
34333
|
-
_v$
|
|
34334
|
-
_v$
|
|
34151
|
+
var _v$28 = active() ? theme.primary : undefined, _v$29 = active() ? theme.selectedListItemText : theme.text, _v$30 = active() ? TextAttributes23.BOLD : undefined, _v$31 = active() ? theme.selectedListItemText : theme.textMuted;
|
|
34152
|
+
_v$28 !== _p$.e && (_p$.e = setProp(_el$50, "backgroundColor", _v$28, _p$.e));
|
|
34153
|
+
_v$29 !== _p$.t && (_p$.t = setProp(_el$51, "fg", _v$29, _p$.t));
|
|
34154
|
+
_v$30 !== _p$.a && (_p$.a = setProp(_el$51, "attributes", _v$30, _p$.a));
|
|
34155
|
+
_v$31 !== _p$.o && (_p$.o = setProp(_el$52, "fg", _v$31, _p$.o));
|
|
34335
34156
|
return _p$;
|
|
34336
34157
|
}, {
|
|
34337
34158
|
e: undefined,
|
|
@@ -34339,85 +34160,85 @@ function QuickForkDialogView(props) {
|
|
|
34339
34160
|
a: undefined,
|
|
34340
34161
|
o: undefined
|
|
34341
34162
|
});
|
|
34342
|
-
return _el$
|
|
34163
|
+
return _el$50;
|
|
34343
34164
|
})();
|
|
34344
34165
|
}
|
|
34345
34166
|
}));
|
|
34346
|
-
return _el$
|
|
34167
|
+
return _el$17;
|
|
34347
34168
|
})()];
|
|
34348
34169
|
}
|
|
34349
34170
|
}), null);
|
|
34350
|
-
insert(_el$
|
|
34171
|
+
insert(_el$10, createComponent2(Show, {
|
|
34351
34172
|
get when() {
|
|
34352
34173
|
return modelStep() === "effort-pick";
|
|
34353
34174
|
},
|
|
34354
34175
|
get children() {
|
|
34355
|
-
var _el$
|
|
34356
|
-
insertNode(_el$
|
|
34357
|
-
insertNode(_el$
|
|
34358
|
-
insertNode(_el$
|
|
34359
|
-
setProp(_el$
|
|
34360
|
-
insertNode(_el$
|
|
34361
|
-
insertNode(_el$
|
|
34362
|
-
setProp(_el$
|
|
34363
|
-
setProp(_el$
|
|
34364
|
-
insertNode(_el$
|
|
34176
|
+
var _el$18 = createElement("box"), _el$19 = createElement("box"), _el$20 = createElement("text"), _el$22 = createElement("text"), _el$23 = createElement("text"), _el$25 = createElement("box");
|
|
34177
|
+
insertNode(_el$18, _el$19);
|
|
34178
|
+
insertNode(_el$18, _el$23);
|
|
34179
|
+
insertNode(_el$18, _el$25);
|
|
34180
|
+
setProp(_el$18, "flexDirection", "column");
|
|
34181
|
+
insertNode(_el$19, _el$20);
|
|
34182
|
+
insertNode(_el$19, _el$22);
|
|
34183
|
+
setProp(_el$19, "flexDirection", "row");
|
|
34184
|
+
setProp(_el$19, "gap", 1);
|
|
34185
|
+
insertNode(_el$20, createTextNode(`model:`));
|
|
34186
|
+
setProp(_el$20, "wrapMode", "none");
|
|
34365
34187
|
setProp(_el$22, "wrapMode", "none");
|
|
34366
|
-
|
|
34367
|
-
|
|
34368
|
-
|
|
34369
|
-
setProp(_el$
|
|
34370
|
-
|
|
34371
|
-
insert(_el$27, createComponent2(For, {
|
|
34188
|
+
insert(_el$22, () => cursorModel()?.label);
|
|
34189
|
+
insertNode(_el$23, createTextNode(`effort`));
|
|
34190
|
+
setProp(_el$25, "flexDirection", "column");
|
|
34191
|
+
setProp(_el$25, "paddingLeft", 2);
|
|
34192
|
+
insert(_el$25, createComponent2(For, {
|
|
34372
34193
|
get each() {
|
|
34373
34194
|
return effortOptions();
|
|
34374
34195
|
},
|
|
34375
34196
|
children: (choice, i2) => {
|
|
34376
34197
|
const active = () => i2() === effortCursor();
|
|
34377
34198
|
return (() => {
|
|
34378
|
-
var _el$
|
|
34379
|
-
insertNode(_el$
|
|
34380
|
-
setProp(_el$
|
|
34381
|
-
setProp(_el$
|
|
34382
|
-
setProp(_el$
|
|
34383
|
-
setProp(_el$
|
|
34384
|
-
setProp(_el$
|
|
34199
|
+
var _el$56 = createElement("box"), _el$57 = createElement("text");
|
|
34200
|
+
insertNode(_el$56, _el$57);
|
|
34201
|
+
setProp(_el$56, "flexDirection", "row");
|
|
34202
|
+
setProp(_el$56, "gap", 2);
|
|
34203
|
+
setProp(_el$56, "paddingLeft", 1);
|
|
34204
|
+
setProp(_el$56, "paddingRight", 1);
|
|
34205
|
+
setProp(_el$56, "onMouseUp", () => {
|
|
34385
34206
|
setEffortCursor(i2());
|
|
34386
34207
|
});
|
|
34387
|
-
setProp(_el$
|
|
34388
|
-
insert(_el$
|
|
34389
|
-
insert(_el$
|
|
34390
|
-
insert(_el$
|
|
34208
|
+
setProp(_el$57, "wrapMode", "none");
|
|
34209
|
+
insert(_el$57, () => active() ? "\u25B8 " : " ", null);
|
|
34210
|
+
insert(_el$57, () => choice.label, null);
|
|
34211
|
+
insert(_el$56, (() => {
|
|
34391
34212
|
var _c$4 = memo2(() => !!choice.hint);
|
|
34392
34213
|
return () => _c$4() ? (() => {
|
|
34393
|
-
var _el$
|
|
34394
|
-
setProp(_el$
|
|
34395
|
-
insert(_el$
|
|
34396
|
-
effect((_$p) => setProp(_el$
|
|
34397
|
-
return _el$
|
|
34214
|
+
var _el$58 = createElement("text");
|
|
34215
|
+
setProp(_el$58, "wrapMode", "none");
|
|
34216
|
+
insert(_el$58, () => choice.hint);
|
|
34217
|
+
effect((_$p) => setProp(_el$58, "fg", active() ? theme.selectedListItemText : theme.textMuted, _$p));
|
|
34218
|
+
return _el$58;
|
|
34398
34219
|
})() : null;
|
|
34399
34220
|
})(), null);
|
|
34400
34221
|
effect((_p$) => {
|
|
34401
|
-
var _v$
|
|
34402
|
-
_v$
|
|
34403
|
-
_v$
|
|
34404
|
-
_v$
|
|
34222
|
+
var _v$32 = active() ? theme.primary : undefined, _v$33 = active() ? theme.selectedListItemText : theme.text, _v$34 = active() ? TextAttributes23.BOLD : undefined;
|
|
34223
|
+
_v$32 !== _p$.e && (_p$.e = setProp(_el$56, "backgroundColor", _v$32, _p$.e));
|
|
34224
|
+
_v$33 !== _p$.t && (_p$.t = setProp(_el$57, "fg", _v$33, _p$.t));
|
|
34225
|
+
_v$34 !== _p$.a && (_p$.a = setProp(_el$57, "attributes", _v$34, _p$.a));
|
|
34405
34226
|
return _p$;
|
|
34406
34227
|
}, {
|
|
34407
34228
|
e: undefined,
|
|
34408
34229
|
t: undefined,
|
|
34409
34230
|
a: undefined
|
|
34410
34231
|
});
|
|
34411
|
-
return _el$
|
|
34232
|
+
return _el$56;
|
|
34412
34233
|
})();
|
|
34413
34234
|
}
|
|
34414
34235
|
}));
|
|
34415
34236
|
effect((_p$) => {
|
|
34416
|
-
var { textMuted: _v$6, text: _v$7, accent: _v$8 } = theme, _v$9 =
|
|
34417
|
-
_v$6 !== _p$.e && (_p$.e = setProp(_el$
|
|
34418
|
-
_v$7 !== _p$.t && (_p$.t = setProp(_el$
|
|
34419
|
-
_v$8 !== _p$.a && (_p$.a = setProp(_el$
|
|
34420
|
-
_v$9 !== _p$.o && (_p$.o = setProp(_el$
|
|
34237
|
+
var { textMuted: _v$6, text: _v$7, accent: _v$8 } = theme, _v$9 = TextAttributes23.BOLD;
|
|
34238
|
+
_v$6 !== _p$.e && (_p$.e = setProp(_el$20, "fg", _v$6, _p$.e));
|
|
34239
|
+
_v$7 !== _p$.t && (_p$.t = setProp(_el$22, "fg", _v$7, _p$.t));
|
|
34240
|
+
_v$8 !== _p$.a && (_p$.a = setProp(_el$23, "fg", _v$8, _p$.a));
|
|
34241
|
+
_v$9 !== _p$.o && (_p$.o = setProp(_el$23, "attributes", _v$9, _p$.o));
|
|
34421
34242
|
return _p$;
|
|
34422
34243
|
}, {
|
|
34423
34244
|
e: undefined,
|
|
@@ -34425,36 +34246,184 @@ function QuickForkDialogView(props) {
|
|
|
34425
34246
|
a: undefined,
|
|
34426
34247
|
o: undefined
|
|
34427
34248
|
});
|
|
34428
|
-
return _el$
|
|
34249
|
+
return _el$18;
|
|
34429
34250
|
}
|
|
34430
34251
|
}), null);
|
|
34431
|
-
|
|
34432
|
-
|
|
34433
|
-
|
|
34434
|
-
|
|
34435
|
-
|
|
34436
|
-
|
|
34437
|
-
|
|
34438
|
-
|
|
34439
|
-
|
|
34440
|
-
|
|
34252
|
+
setProp(_el$26, "flexDirection", "column");
|
|
34253
|
+
insert(_el$26, createComponent2(Show, {
|
|
34254
|
+
get when() {
|
|
34255
|
+
return branchStep() === "summary";
|
|
34256
|
+
},
|
|
34257
|
+
get children() {
|
|
34258
|
+
var _el$27 = createElement("box"), _el$28 = createElement("text"), _el$30 = createElement("text");
|
|
34259
|
+
insertNode(_el$27, _el$28);
|
|
34260
|
+
insertNode(_el$27, _el$30);
|
|
34261
|
+
setProp(_el$27, "flexDirection", "row");
|
|
34262
|
+
setProp(_el$27, "gap", 1);
|
|
34263
|
+
insertNode(_el$28, createTextNode(`branch:`));
|
|
34264
|
+
setProp(_el$28, "wrapMode", "none");
|
|
34265
|
+
setProp(_el$30, "wrapMode", "none");
|
|
34266
|
+
insert(_el$30, () => baseRef() || props.baseRef || DEFAULT_BASE_REF);
|
|
34267
|
+
effect((_p$) => {
|
|
34268
|
+
var _v$0 = field() === "branch" ? theme.accent : theme.textMuted, _v$1 = field() === "branch" ? TextAttributes23.BOLD : undefined, _v$10 = theme.text;
|
|
34269
|
+
_v$0 !== _p$.e && (_p$.e = setProp(_el$28, "fg", _v$0, _p$.e));
|
|
34270
|
+
_v$1 !== _p$.t && (_p$.t = setProp(_el$28, "attributes", _v$1, _p$.t));
|
|
34271
|
+
_v$10 !== _p$.a && (_p$.a = setProp(_el$30, "fg", _v$10, _p$.a));
|
|
34272
|
+
return _p$;
|
|
34273
|
+
}, {
|
|
34274
|
+
e: undefined,
|
|
34275
|
+
t: undefined,
|
|
34276
|
+
a: undefined
|
|
34277
|
+
});
|
|
34278
|
+
return _el$27;
|
|
34279
|
+
}
|
|
34280
|
+
}), null);
|
|
34281
|
+
insert(_el$26, createComponent2(Show, {
|
|
34282
|
+
get when() {
|
|
34283
|
+
return branchStep() === "branch-pick";
|
|
34284
|
+
},
|
|
34285
|
+
get children() {
|
|
34286
|
+
var _el$31 = createElement("box"), _el$32 = createElement("text"), _el$34 = createElement("input");
|
|
34287
|
+
insertNode(_el$31, _el$32);
|
|
34288
|
+
insertNode(_el$31, _el$34);
|
|
34289
|
+
setProp(_el$31, "gap", 0);
|
|
34290
|
+
insertNode(_el$32, createTextNode(`branch`));
|
|
34291
|
+
setProp(_el$34, "onInput", (v2) => {
|
|
34292
|
+
setBaseRefTouched(true);
|
|
34293
|
+
setBaseRef(stripNewlines(v2));
|
|
34294
|
+
});
|
|
34295
|
+
setProp(_el$34, "onSubmit", () => branchTabAdvance());
|
|
34296
|
+
insert(_el$31, createComponent2(Show, {
|
|
34297
|
+
get when() {
|
|
34298
|
+
return branchFiltered().length === 0;
|
|
34299
|
+
},
|
|
34300
|
+
get children() {
|
|
34301
|
+
var _el$35 = createElement("box"), _el$36 = createElement("text");
|
|
34302
|
+
insertNode(_el$35, _el$36);
|
|
34303
|
+
setProp(_el$35, "gap", 0);
|
|
34304
|
+
setProp(_el$35, "paddingLeft", 2);
|
|
34305
|
+
setProp(_el$36, "wrapMode", "none");
|
|
34306
|
+
insert(_el$36, () => branches().length === 0 ? "(no local branches \u2014 typed text will be used as ref)" : "(no match \u2014 typed text will be used as ref)");
|
|
34307
|
+
effect((_$p) => setProp(_el$36, "fg", theme.textMuted, _$p));
|
|
34308
|
+
return _el$35;
|
|
34309
|
+
}
|
|
34310
|
+
}), null);
|
|
34311
|
+
insert(_el$31, createComponent2(Show, {
|
|
34312
|
+
get when() {
|
|
34313
|
+
return branchFiltered().length > 0;
|
|
34314
|
+
},
|
|
34315
|
+
get children() {
|
|
34316
|
+
var _el$37 = createElement("box");
|
|
34317
|
+
setProp(_el$37, "gap", 0);
|
|
34318
|
+
setProp(_el$37, "paddingLeft", 2);
|
|
34319
|
+
insert(_el$37, createComponent2(Show, {
|
|
34320
|
+
get when() {
|
|
34321
|
+
return branchWindow().start > 0;
|
|
34322
|
+
},
|
|
34323
|
+
get children() {
|
|
34324
|
+
var _el$38 = createElement("text"), _el$39 = createTextNode(`\u2191 `), _el$40 = createTextNode(` more`);
|
|
34325
|
+
insertNode(_el$38, _el$39);
|
|
34326
|
+
insertNode(_el$38, _el$40);
|
|
34327
|
+
setProp(_el$38, "wrapMode", "none");
|
|
34328
|
+
insert(_el$38, () => branchWindow().start, _el$40);
|
|
34329
|
+
effect((_$p) => setProp(_el$38, "fg", theme.textMuted, _$p));
|
|
34330
|
+
return _el$38;
|
|
34331
|
+
}
|
|
34332
|
+
}), null);
|
|
34333
|
+
insert(_el$37, createComponent2(For, {
|
|
34334
|
+
get each() {
|
|
34335
|
+
return branchWindow().items;
|
|
34336
|
+
},
|
|
34337
|
+
children: (name, i2) => {
|
|
34338
|
+
const absoluteIndex = () => branchWindow().start + i2();
|
|
34339
|
+
const isCursor = () => absoluteIndex() === branchCursor();
|
|
34340
|
+
const isSelected = () => baseRef().trim() === name;
|
|
34341
|
+
return (() => {
|
|
34342
|
+
var _el$59 = createElement("text");
|
|
34343
|
+
setProp(_el$59, "wrapMode", "none");
|
|
34344
|
+
setProp(_el$59, "onMouseUp", () => {
|
|
34345
|
+
setBaseRef(name);
|
|
34346
|
+
setBaseRefTouched(true);
|
|
34347
|
+
setBranchCursor(absoluteIndex());
|
|
34348
|
+
focusPrompt();
|
|
34349
|
+
});
|
|
34350
|
+
insert(_el$59, () => isCursor() ? "\u25B8 " : " ", null);
|
|
34351
|
+
insert(_el$59, name, null);
|
|
34352
|
+
effect((_p$) => {
|
|
34353
|
+
var _v$35 = isCursor() ? theme.primary : isSelected() ? theme.accent : theme.textMuted, _v$36 = isCursor() ? TextAttributes23.BOLD : undefined;
|
|
34354
|
+
_v$35 !== _p$.e && (_p$.e = setProp(_el$59, "fg", _v$35, _p$.e));
|
|
34355
|
+
_v$36 !== _p$.t && (_p$.t = setProp(_el$59, "attributes", _v$36, _p$.t));
|
|
34356
|
+
return _p$;
|
|
34357
|
+
}, {
|
|
34358
|
+
e: undefined,
|
|
34359
|
+
t: undefined
|
|
34360
|
+
});
|
|
34361
|
+
return _el$59;
|
|
34362
|
+
})();
|
|
34363
|
+
}
|
|
34364
|
+
}), null);
|
|
34365
|
+
insert(_el$37, createComponent2(Show, {
|
|
34366
|
+
get when() {
|
|
34367
|
+
return branchWindow().start + branchWindow().items.length < branchWindow().total;
|
|
34368
|
+
},
|
|
34369
|
+
get children() {
|
|
34370
|
+
var _el$41 = createElement("text"), _el$42 = createTextNode(`\u2193 `), _el$43 = createTextNode(` more`);
|
|
34371
|
+
insertNode(_el$41, _el$42);
|
|
34372
|
+
insertNode(_el$41, _el$43);
|
|
34373
|
+
setProp(_el$41, "wrapMode", "none");
|
|
34374
|
+
insert(_el$41, () => branchWindow().total - branchWindow().start - branchWindow().items.length, _el$43);
|
|
34375
|
+
effect((_$p) => setProp(_el$41, "fg", theme.textMuted, _$p));
|
|
34376
|
+
return _el$41;
|
|
34377
|
+
}
|
|
34378
|
+
}), null);
|
|
34379
|
+
return _el$37;
|
|
34380
|
+
}
|
|
34381
|
+
}), null);
|
|
34382
|
+
effect((_p$) => {
|
|
34383
|
+
var _v$11 = theme.accent, _v$12 = TextAttributes23.BOLD, _v$13 = baseRef(), _v$14 = props.baseRef || DEFAULT_BASE_REF, _v$15 = field() === "branch" && branchStep() === "branch-pick";
|
|
34384
|
+
_v$11 !== _p$.e && (_p$.e = setProp(_el$32, "fg", _v$11, _p$.e));
|
|
34385
|
+
_v$12 !== _p$.t && (_p$.t = setProp(_el$32, "attributes", _v$12, _p$.t));
|
|
34386
|
+
_v$13 !== _p$.a && (_p$.a = setProp(_el$34, "value", _v$13, _p$.a));
|
|
34387
|
+
_v$14 !== _p$.o && (_p$.o = setProp(_el$34, "placeholder", _v$14, _p$.o));
|
|
34388
|
+
_v$15 !== _p$.i && (_p$.i = setProp(_el$34, "focused", _v$15, _p$.i));
|
|
34389
|
+
return _p$;
|
|
34390
|
+
}, {
|
|
34391
|
+
e: undefined,
|
|
34392
|
+
t: undefined,
|
|
34393
|
+
a: undefined,
|
|
34394
|
+
o: undefined,
|
|
34395
|
+
i: undefined
|
|
34396
|
+
});
|
|
34397
|
+
return _el$31;
|
|
34398
|
+
}
|
|
34399
|
+
}), null);
|
|
34400
|
+
insertNode(_el$44, _el$45);
|
|
34401
|
+
insertNode(_el$44, _el$47);
|
|
34402
|
+
setProp(_el$44, "gap", 0);
|
|
34403
|
+
insertNode(_el$45, createTextNode(`prompt`));
|
|
34404
|
+
setProp(_el$47, "placeholder", "describe what the new task should do\u2026");
|
|
34405
|
+
setProp(_el$47, "onInput", (v2) => setPrompt(stripNewlines(v2)));
|
|
34406
|
+
setProp(_el$47, "onSubmit", () => commit());
|
|
34407
|
+
insertNode(_el$48, _el$49);
|
|
34408
|
+
setProp(_el$48, "paddingBottom", 1);
|
|
34409
|
+
insert(_el$49, (() => {
|
|
34441
34410
|
var _c$ = memo2(() => field() === "prompt");
|
|
34442
|
-
return () => _c$() ? "tab model \xB7 enter create \xB7 esc cancel" : memo2(() => modelStep() === "summary")() ? "enter pick \xB7 tab
|
|
34411
|
+
return () => _c$() ? "tab model \xB7 enter create \xB7 esc cancel" : memo2(() => field() === "branch")() ? branchStep() === "summary" ? "enter pick \xB7 tab prompt \xB7 esc cancel" : "\u2191\u2193 pick \xB7 enter done \xB7 tab prompt \xB7 esc cancel" : memo2(() => modelStep() === "summary")() ? "enter pick \xB7 tab branch \xB7 esc cancel" : memo2(() => modelStep() === "model-pick")() ? `\u2191\u2193 pick \xB7 enter ${hasEffortChoice() ? "effort" : "branch"} \xB7 esc cancel` : "\u2191\u2193 pick \xB7 enter branch \xB7 h back \xB7 esc cancel";
|
|
34443
34412
|
})());
|
|
34444
34413
|
effect((_p$) => {
|
|
34445
|
-
var _v$
|
|
34446
|
-
_v$
|
|
34447
|
-
_v$
|
|
34448
|
-
_v$
|
|
34449
|
-
_v$
|
|
34450
|
-
_v$
|
|
34451
|
-
_v$
|
|
34452
|
-
_v$
|
|
34453
|
-
_v$
|
|
34454
|
-
_v$
|
|
34455
|
-
_v$
|
|
34456
|
-
_v$
|
|
34457
|
-
_v$
|
|
34414
|
+
var _v$16 = TextAttributes23.BOLD, _v$17 = theme.text, _v$18 = theme.textMuted, _v$19 = theme.textMuted, _v$20 = theme.textMuted, _v$21 = theme.accent, _v$22 = TextAttributes23.BOLD, _v$23 = field() === "prompt" ? theme.accent : theme.textMuted, _v$24 = field() === "prompt" ? TextAttributes23.BOLD : undefined, _v$25 = prompt(), _v$26 = field() === "prompt", _v$27 = theme.textMuted;
|
|
34415
|
+
_v$16 !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$16, _p$.e));
|
|
34416
|
+
_v$17 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$17, _p$.t));
|
|
34417
|
+
_v$18 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$18, _p$.a));
|
|
34418
|
+
_v$19 !== _p$.o && (_p$.o = setProp(_el$8, "fg", _v$19, _p$.o));
|
|
34419
|
+
_v$20 !== _p$.i && (_p$.i = setProp(_el$9, "fg", _v$20, _p$.i));
|
|
34420
|
+
_v$21 !== _p$.n && (_p$.n = setProp(_el$1, "fg", _v$21, _p$.n));
|
|
34421
|
+
_v$22 !== _p$.s && (_p$.s = setProp(_el$1, "attributes", _v$22, _p$.s));
|
|
34422
|
+
_v$23 !== _p$.h && (_p$.h = setProp(_el$45, "fg", _v$23, _p$.h));
|
|
34423
|
+
_v$24 !== _p$.r && (_p$.r = setProp(_el$45, "attributes", _v$24, _p$.r));
|
|
34424
|
+
_v$25 !== _p$.d && (_p$.d = setProp(_el$47, "value", _v$25, _p$.d));
|
|
34425
|
+
_v$26 !== _p$.l && (_p$.l = setProp(_el$47, "focused", _v$26, _p$.l));
|
|
34426
|
+
_v$27 !== _p$.u && (_p$.u = setProp(_el$49, "fg", _v$27, _p$.u));
|
|
34458
34427
|
return _p$;
|
|
34459
34428
|
}, {
|
|
34460
34429
|
e: undefined,
|
|
@@ -34488,6 +34457,7 @@ var init_dialog3 = __esm(() => {
|
|
|
34488
34457
|
init_keymap();
|
|
34489
34458
|
init_dialog();
|
|
34490
34459
|
init_new_task_dialog();
|
|
34460
|
+
init_state2();
|
|
34491
34461
|
});
|
|
34492
34462
|
|
|
34493
34463
|
// src/tui/component/quick-fork-dialog/index.tsx
|
|
@@ -34522,7 +34492,7 @@ var init_quick_fork_dialog = __esm(() => {
|
|
|
34522
34492
|
});
|
|
34523
34493
|
|
|
34524
34494
|
// src/tui/component/rename-task-dialog/dialog.tsx
|
|
34525
|
-
import { TextAttributes as
|
|
34495
|
+
import { TextAttributes as TextAttributes24 } from "@opentui/core";
|
|
34526
34496
|
function RenameTaskDialogView(props) {
|
|
34527
34497
|
const dialog = useDialog();
|
|
34528
34498
|
const {
|
|
@@ -34562,7 +34532,7 @@ function RenameTaskDialogView(props) {
|
|
|
34562
34532
|
setProp(_el$0, "paddingBottom", 1);
|
|
34563
34533
|
insertNode(_el$1, createTextNode(`enter rename \xB7 esc cancel`));
|
|
34564
34534
|
effect((_p$) => {
|
|
34565
|
-
var _v$ =
|
|
34535
|
+
var _v$ = TextAttributes24.BOLD, _v$2 = theme.text, _v$3 = theme.textMuted, _v$4 = theme.accent, _v$5 = title(), _v$6 = props.currentTitle, _v$7 = theme.textMuted;
|
|
34566
34536
|
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$, _p$.e));
|
|
34567
34537
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$2, _p$.t));
|
|
34568
34538
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$4, "fg", _v$3, _p$.a));
|
|
@@ -34719,10 +34689,10 @@ function useTaskActions(deps) {
|
|
|
34719
34689
|
const inheritedModel = activeTab2?.model ?? source.model;
|
|
34720
34690
|
const inheritedEffort = activeTab2?.modelEffort ?? source.modelEffort;
|
|
34721
34691
|
const inheritedPermission = source.permissionMode;
|
|
34722
|
-
const
|
|
34692
|
+
const inheritedBaseRef = source.branch && source.branch.length > 0 ? source.branch : getCurrentBranch(source.worktreePath || source.repo) ?? "main";
|
|
34723
34693
|
const result = await QuickForkDialog.show(dialog, {
|
|
34724
34694
|
repo: source.repo,
|
|
34725
|
-
baseRef,
|
|
34695
|
+
baseRef: inheritedBaseRef,
|
|
34726
34696
|
modelId: inheritedModel,
|
|
34727
34697
|
effort: inheritedEffort
|
|
34728
34698
|
});
|
|
@@ -34731,7 +34701,7 @@ function useTaskActions(deps) {
|
|
|
34731
34701
|
try {
|
|
34732
34702
|
const created = await orchestrator.createTask({
|
|
34733
34703
|
repo: source.repo,
|
|
34734
|
-
baseRef,
|
|
34704
|
+
baseRef: result.baseRef,
|
|
34735
34705
|
title: result.prompt
|
|
34736
34706
|
});
|
|
34737
34707
|
const newTabId = created.activeTabId;
|
|
@@ -35042,90 +35012,6 @@ var init_use_workspace_tabs = __esm(() => {
|
|
|
35042
35012
|
EMPTY_TABS = { active: "chat" };
|
|
35043
35013
|
});
|
|
35044
35014
|
|
|
35045
|
-
// src/tui/panes/chat/BackgroundRunsLine.tsx
|
|
35046
|
-
import { TextAttributes as TextAttributes27 } from "@opentui/core";
|
|
35047
|
-
function BackgroundRunsLine(props) {
|
|
35048
|
-
const {
|
|
35049
|
-
theme
|
|
35050
|
-
} = useTheme();
|
|
35051
|
-
const shown = () => props.rows().slice(0, MAX_INLINE_PILLS);
|
|
35052
|
-
const overflow = () => Math.max(0, props.rows().length - MAX_INLINE_PILLS);
|
|
35053
|
-
return createComponent2(Show, {
|
|
35054
|
-
get when() {
|
|
35055
|
-
return props.rows().length > 0;
|
|
35056
|
-
},
|
|
35057
|
-
get children() {
|
|
35058
|
-
var _el$ = createElement("box"), _el$2 = createElement("text"), _el$6 = createElement("text");
|
|
35059
|
-
insertNode(_el$, _el$2);
|
|
35060
|
-
insertNode(_el$, _el$6);
|
|
35061
|
-
setProp(_el$, "flexDirection", "row");
|
|
35062
|
-
setProp(_el$, "gap", 1);
|
|
35063
|
-
setProp(_el$, "flexShrink", 0);
|
|
35064
|
-
setProp(_el$, "paddingLeft", 1);
|
|
35065
|
-
setProp(_el$, "paddingRight", 1);
|
|
35066
|
-
setProp(_el$, "onMouseUp", () => props.onActivate());
|
|
35067
|
-
insertNode(_el$2, createTextNode(`running in background`));
|
|
35068
|
-
setProp(_el$2, "wrapMode", "none");
|
|
35069
|
-
insert(_el$, createComponent2(For, {
|
|
35070
|
-
get each() {
|
|
35071
|
-
return shown();
|
|
35072
|
-
},
|
|
35073
|
-
children: (row) => {
|
|
35074
|
-
const awaiting = row.state === "awaiting_input";
|
|
35075
|
-
return (() => {
|
|
35076
|
-
var _el$8 = createElement("text"), _el$9 = createTextNode(`\u25AA `);
|
|
35077
|
-
insertNode(_el$8, _el$9);
|
|
35078
|
-
setProp(_el$8, "wrapMode", "none");
|
|
35079
|
-
insert(_el$8, () => row.taskTitle, null);
|
|
35080
|
-
insert(_el$8, awaiting ? " (needs input)" : "", null);
|
|
35081
|
-
effect((_$p) => setProp(_el$8, "fg", awaiting ? theme.warning : theme.success, _$p));
|
|
35082
|
-
return _el$8;
|
|
35083
|
-
})();
|
|
35084
|
-
}
|
|
35085
|
-
}), _el$6);
|
|
35086
|
-
insert(_el$, createComponent2(Show, {
|
|
35087
|
-
get when() {
|
|
35088
|
-
return overflow() > 0;
|
|
35089
|
-
},
|
|
35090
|
-
get children() {
|
|
35091
|
-
var _el$4 = createElement("text"), _el$5 = createTextNode(`+`);
|
|
35092
|
-
insertNode(_el$4, _el$5);
|
|
35093
|
-
setProp(_el$4, "wrapMode", "none");
|
|
35094
|
-
insert(_el$4, overflow, null);
|
|
35095
|
-
effect((_$p) => setProp(_el$4, "fg", theme.textMuted, _$p));
|
|
35096
|
-
return _el$4;
|
|
35097
|
-
}
|
|
35098
|
-
}), _el$6);
|
|
35099
|
-
insertNode(_el$6, createTextNode(`[ctrl+b]`));
|
|
35100
|
-
setProp(_el$6, "wrapMode", "none");
|
|
35101
|
-
effect((_p$) => {
|
|
35102
|
-
var { textMuted: _v$, accent: _v$2 } = theme, _v$3 = TextAttributes27.BOLD;
|
|
35103
|
-
_v$ !== _p$.e && (_p$.e = setProp(_el$2, "fg", _v$, _p$.e));
|
|
35104
|
-
_v$2 !== _p$.t && (_p$.t = setProp(_el$6, "fg", _v$2, _p$.t));
|
|
35105
|
-
_v$3 !== _p$.a && (_p$.a = setProp(_el$6, "attributes", _v$3, _p$.a));
|
|
35106
|
-
return _p$;
|
|
35107
|
-
}, {
|
|
35108
|
-
e: undefined,
|
|
35109
|
-
t: undefined,
|
|
35110
|
-
a: undefined
|
|
35111
|
-
});
|
|
35112
|
-
return _el$;
|
|
35113
|
-
}
|
|
35114
|
-
});
|
|
35115
|
-
}
|
|
35116
|
-
var MAX_INLINE_PILLS = 3;
|
|
35117
|
-
var init_BackgroundRunsLine = __esm(() => {
|
|
35118
|
-
init_solid();
|
|
35119
|
-
init_solid();
|
|
35120
|
-
init_solid();
|
|
35121
|
-
init_solid();
|
|
35122
|
-
init_solid();
|
|
35123
|
-
init_solid();
|
|
35124
|
-
init_solid();
|
|
35125
|
-
init_dev();
|
|
35126
|
-
init_theme();
|
|
35127
|
-
});
|
|
35128
|
-
|
|
35129
35015
|
// src/tui/panes/chat/composer/path-preview.ts
|
|
35130
35016
|
function hasStartBoundary(text, index) {
|
|
35131
35017
|
if (index === 0)
|
|
@@ -35195,7 +35081,7 @@ var init_path_preview = __esm(() => {
|
|
|
35195
35081
|
});
|
|
35196
35082
|
|
|
35197
35083
|
// src/tui/panes/chat/ComposerPathChips.tsx
|
|
35198
|
-
import { TextAttributes as
|
|
35084
|
+
import { TextAttributes as TextAttributes25 } from "@opentui/core";
|
|
35199
35085
|
function ComposerPathChips(props) {
|
|
35200
35086
|
const {
|
|
35201
35087
|
theme
|
|
@@ -35229,7 +35115,7 @@ function ComposerPathChips(props) {
|
|
|
35229
35115
|
setProp(_el$5, "wrapMode", "none");
|
|
35230
35116
|
insert(_el$5, () => formatPreviewPathLabel(ref.path, 34));
|
|
35231
35117
|
effect((_p$) => {
|
|
35232
|
-
var { backgroundPanel: _v$, primary: _v$2 } = theme, _v$3 =
|
|
35118
|
+
var { backgroundPanel: _v$, primary: _v$2 } = theme, _v$3 = TextAttributes25.UNDERLINE;
|
|
35233
35119
|
_v$ !== _p$.e && (_p$.e = setProp(_el$4, "backgroundColor", _v$, _p$.e));
|
|
35234
35120
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$5, "fg", _v$2, _p$.t));
|
|
35235
35121
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "attributes", _v$3, _p$.a));
|
|
@@ -35262,7 +35148,7 @@ var init_ComposerPathChips = __esm(() => {
|
|
|
35262
35148
|
});
|
|
35263
35149
|
|
|
35264
35150
|
// src/tui/panes/chat/ComposerQueue.tsx
|
|
35265
|
-
import { TextAttributes as
|
|
35151
|
+
import { TextAttributes as TextAttributes26 } from "@opentui/core";
|
|
35266
35152
|
function ComposerQueue(props) {
|
|
35267
35153
|
const {
|
|
35268
35154
|
theme
|
|
@@ -35332,7 +35218,7 @@ function ComposerQueue(props) {
|
|
|
35332
35218
|
insertNode(_el$17, createTextNode(`[e]`));
|
|
35333
35219
|
setProp(_el$17, "onMouseUp", onRowEdit);
|
|
35334
35220
|
effect((_p$) => {
|
|
35335
|
-
var _v$7 = theme.primary, _v$8 =
|
|
35221
|
+
var _v$7 = theme.primary, _v$8 = TextAttributes26.BOLD;
|
|
35336
35222
|
_v$7 !== _p$.e && (_p$.e = setProp(_el$17, "fg", _v$7, _p$.e));
|
|
35337
35223
|
_v$8 !== _p$.t && (_p$.t = setProp(_el$17, "attributes", _v$8, _p$.t));
|
|
35338
35224
|
return _p$;
|
|
@@ -35348,7 +35234,7 @@ function ComposerQueue(props) {
|
|
|
35348
35234
|
insertNode(_el$21, createTextNode(`[x]`));
|
|
35349
35235
|
setProp(_el$21, "onMouseUp", () => props.onCancelQueued?.(entry.id));
|
|
35350
35236
|
effect((_p$) => {
|
|
35351
|
-
var _v$9 = isEditing() ? theme.primary : theme.textMuted, _v$0 =
|
|
35237
|
+
var _v$9 = isEditing() ? theme.primary : theme.textMuted, _v$0 = TextAttributes26.BOLD, _v$1 = props.paused ? theme.warning : theme.textMuted, _v$10 = theme.text, _v$11 = theme.primary, _v$12 = TextAttributes26.BOLD, _v$13 = theme.error, _v$14 = TextAttributes26.BOLD;
|
|
35352
35238
|
_v$9 !== _p$.e && (_p$.e = setProp(_el$0, "fg", _v$9, _p$.e));
|
|
35353
35239
|
_v$0 !== _p$.t && (_p$.t = setProp(_el$0, "attributes", _v$0, _p$.t));
|
|
35354
35240
|
_v$1 !== _p$.a && (_p$.a = setProp(_el$10, "fg", _v$1, _p$.a));
|
|
@@ -35386,7 +35272,7 @@ function ComposerQueue(props) {
|
|
|
35386
35272
|
insertNode(_el$3, createTextNode(`+`));
|
|
35387
35273
|
insert(_el$5, () => `\u2026 ${props.queue.length - QUEUE_VISIBLE_CAP} more queued`);
|
|
35388
35274
|
effect((_p$) => {
|
|
35389
|
-
var _v$ = theme.textMuted, _v$2 =
|
|
35275
|
+
var _v$ = theme.textMuted, _v$2 = TextAttributes26.BOLD, _v$3 = theme.textMuted;
|
|
35390
35276
|
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "fg", _v$, _p$.e));
|
|
35391
35277
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "attributes", _v$2, _p$.t));
|
|
35392
35278
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$3, _p$.a));
|
|
@@ -35410,7 +35296,7 @@ function ComposerQueue(props) {
|
|
|
35410
35296
|
setProp(_el$7, "onMouseUp", () => props.onTogglePause?.());
|
|
35411
35297
|
insert(_el$7, () => props.paused ? "[resume queue] auto-drain paused" : "[pause queue]");
|
|
35412
35298
|
effect((_p$) => {
|
|
35413
|
-
var _v$4 = props.queue.length > QUEUE_VISIBLE_CAP ? 0 : 1, _v$5 = props.paused ? theme.warning : theme.textMuted, _v$6 = props.paused ?
|
|
35299
|
+
var _v$4 = props.queue.length > QUEUE_VISIBLE_CAP ? 0 : 1, _v$5 = props.paused ? theme.warning : theme.textMuted, _v$6 = props.paused ? TextAttributes26.BOLD : undefined;
|
|
35414
35300
|
_v$4 !== _p$.e && (_p$.e = setProp(_el$6, "paddingTop", _v$4, _p$.e));
|
|
35415
35301
|
_v$5 !== _p$.t && (_p$.t = setProp(_el$7, "fg", _v$5, _p$.t));
|
|
35416
35302
|
_v$6 !== _p$.a && (_p$.a = setProp(_el$7, "attributes", _v$6, _p$.a));
|
|
@@ -35472,7 +35358,7 @@ function formatSlashDescription(description) {
|
|
|
35472
35358
|
var SLASH_DESCRIPTION_MAX_CHARS = 72;
|
|
35473
35359
|
|
|
35474
35360
|
// src/tui/panes/chat/ComposerView.tsx
|
|
35475
|
-
import { TextAttributes as
|
|
35361
|
+
import { TextAttributes as TextAttributes27 } from "@opentui/core";
|
|
35476
35362
|
function ComposerView(props) {
|
|
35477
35363
|
const theme = props.theme;
|
|
35478
35364
|
return (() => {
|
|
@@ -35750,7 +35636,7 @@ function MentionDropdown(props) {
|
|
|
35750
35636
|
}
|
|
35751
35637
|
}), null);
|
|
35752
35638
|
effect((_p$) => {
|
|
35753
|
-
var _v$17 = active() ? theme.primary : theme.text, _v$18 = active() ?
|
|
35639
|
+
var _v$17 = active() ? theme.primary : theme.text, _v$18 = active() ? TextAttributes27.BOLD : undefined;
|
|
35754
35640
|
_v$17 !== _p$.e && (_p$.e = setProp(_el$16, "fg", _v$17, _p$.e));
|
|
35755
35641
|
_v$18 !== _p$.t && (_p$.t = setProp(_el$16, "attributes", _v$18, _p$.t));
|
|
35756
35642
|
return _p$;
|
|
@@ -35864,7 +35750,7 @@ function SlashDropdown(props) {
|
|
|
35864
35750
|
}
|
|
35865
35751
|
}), null);
|
|
35866
35752
|
effect((_p$) => {
|
|
35867
|
-
var _v$22 = active() ? theme.primary : theme.text, _v$23 = active() ?
|
|
35753
|
+
var _v$22 = active() ? theme.primary : theme.text, _v$23 = active() ? TextAttributes27.BOLD : undefined;
|
|
35868
35754
|
_v$22 !== _p$.e && (_p$.e = setProp(_el$26, "fg", _v$22, _p$.e));
|
|
35869
35755
|
_v$23 !== _p$.t && (_p$.t = setProp(_el$26, "attributes", _v$23, _p$.t));
|
|
35870
35756
|
return _p$;
|
|
@@ -35932,7 +35818,7 @@ function PromptGlyph(props) {
|
|
|
35932
35818
|
insertNode(_el$33, createTextNode(`\u2026`));
|
|
35933
35819
|
insertNode(_el$35, createTextNode(`!`));
|
|
35934
35820
|
effect((_p$) => {
|
|
35935
|
-
var { accent: _v$26, warning: _v$27 } = theme, _v$28 =
|
|
35821
|
+
var { accent: _v$26, warning: _v$27 } = theme, _v$28 = TextAttributes27.BOLD;
|
|
35936
35822
|
_v$26 !== _p$.e && (_p$.e = setProp(_el$33, "fg", _v$26, _p$.e));
|
|
35937
35823
|
_v$27 !== _p$.t && (_p$.t = setProp(_el$35, "fg", _v$27, _p$.t));
|
|
35938
35824
|
_v$28 !== _p$.a && (_p$.a = setProp(_el$35, "attributes", _v$28, _p$.a));
|
|
@@ -35950,7 +35836,7 @@ function PromptGlyph(props) {
|
|
|
35950
35836
|
var _el$30 = createElement("text");
|
|
35951
35837
|
insertNode(_el$30, createTextNode(`!`));
|
|
35952
35838
|
effect((_p$) => {
|
|
35953
|
-
var _v$24 = theme.warning, _v$25 =
|
|
35839
|
+
var _v$24 = theme.warning, _v$25 = TextAttributes27.BOLD;
|
|
35954
35840
|
_v$24 !== _p$.e && (_p$.e = setProp(_el$30, "fg", _v$24, _p$.e));
|
|
35955
35841
|
_v$25 !== _p$.t && (_p$.t = setProp(_el$30, "attributes", _v$25, _p$.t));
|
|
35956
35842
|
return _p$;
|
|
@@ -36326,7 +36212,7 @@ class PromptHistoryNavigator {
|
|
|
36326
36212
|
}
|
|
36327
36213
|
|
|
36328
36214
|
// src/tui/panes/chat/composer/HistoryPalette.tsx
|
|
36329
|
-
import { TextAttributes as
|
|
36215
|
+
import { TextAttributes as TextAttributes28 } from "@opentui/core";
|
|
36330
36216
|
function rowsFromEntries(entries, labelFor, currentProject) {
|
|
36331
36217
|
const filtered = currentProject === undefined ? entries : entries.filter((e2) => e2.project === currentProject || e2.project === undefined);
|
|
36332
36218
|
return filtered.map((e2) => {
|
|
@@ -36542,7 +36428,7 @@ function HistoryPaletteView(props) {
|
|
|
36542
36428
|
setProp(_el$13, "paddingBottom", 1);
|
|
36543
36429
|
insertNode(_el$14, createTextNode(`\u2191/\u2193 nav \xB7 enter recall \xB7 esc cancel`));
|
|
36544
36430
|
effect((_p$) => {
|
|
36545
|
-
var _v$ =
|
|
36431
|
+
var _v$ = TextAttributes28.BOLD, _v$2 = theme.text, _v$3 = theme.textMuted, _v$4 = theme.accent, _v$5 = query(), _v$6 = theme.textMuted;
|
|
36546
36432
|
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$, _p$.e));
|
|
36547
36433
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$2, _p$.t));
|
|
36548
36434
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$3, _p$.a));
|
|
@@ -37831,7 +37717,7 @@ var init_message_figures = __esm(() => {
|
|
|
37831
37717
|
});
|
|
37832
37718
|
|
|
37833
37719
|
// src/tui/panes/chat/MessageRows.tsx
|
|
37834
|
-
import { TextAttributes as
|
|
37720
|
+
import { TextAttributes as TextAttributes29 } from "@opentui/core";
|
|
37835
37721
|
function UserRow(props) {
|
|
37836
37722
|
const {
|
|
37837
37723
|
theme
|
|
@@ -37888,7 +37774,7 @@ function UserRow(props) {
|
|
|
37888
37774
|
})() : null;
|
|
37889
37775
|
})(), null);
|
|
37890
37776
|
effect((_p$) => {
|
|
37891
|
-
var _v$ = theme.accent, _v$2 =
|
|
37777
|
+
var _v$ = theme.accent, _v$2 = TextAttributes29.BOLD, _v$3 = theme.primary, _v$4 = TextAttributes29.BOLD;
|
|
37892
37778
|
_v$ !== _p$.e && (_p$.e = setProp(_el$2, "fg", _v$, _p$.e));
|
|
37893
37779
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$2, "attributes", _v$2, _p$.t));
|
|
37894
37780
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$3, _p$.a));
|
|
@@ -37968,7 +37854,7 @@ function UserRow(props) {
|
|
|
37968
37854
|
setProp(_el$21, "flexGrow", 1);
|
|
37969
37855
|
insert(_el$22, () => view.text);
|
|
37970
37856
|
effect((_p$) => {
|
|
37971
|
-
var _v$9 = theme.accent, _v$0 =
|
|
37857
|
+
var _v$9 = theme.accent, _v$0 = TextAttributes29.BOLD, _v$1 = theme.text;
|
|
37972
37858
|
_v$9 !== _p$.e && (_p$.e = setProp(_el$19, "fg", _v$9, _p$.e));
|
|
37973
37859
|
_v$0 !== _p$.t && (_p$.t = setProp(_el$19, "attributes", _v$0, _p$.t));
|
|
37974
37860
|
_v$1 !== _p$.a && (_p$.a = setProp(_el$22, "fg", _v$1, _p$.a));
|
|
@@ -38004,7 +37890,7 @@ function AssistantRow(props) {
|
|
|
38004
37890
|
}
|
|
38005
37891
|
}));
|
|
38006
37892
|
effect((_p$) => {
|
|
38007
|
-
var _v$10 = theme.accent, _v$11 =
|
|
37893
|
+
var _v$10 = theme.accent, _v$11 = TextAttributes29.BOLD;
|
|
38008
37894
|
_v$10 !== _p$.e && (_p$.e = setProp(_el$25, "fg", _v$10, _p$.e));
|
|
38009
37895
|
_v$11 !== _p$.t && (_p$.t = setProp(_el$25, "attributes", _v$11, _p$.t));
|
|
38010
37896
|
return _p$;
|
|
@@ -38040,7 +37926,7 @@ function ReasoningRow(props) {
|
|
|
38040
37926
|
}
|
|
38041
37927
|
}), null);
|
|
38042
37928
|
effect((_p$) => {
|
|
38043
|
-
var _v$12 = theme.success, _v$13 =
|
|
37929
|
+
var _v$12 = theme.success, _v$13 = TextAttributes29.BOLD, _v$14 = theme.textMuted, _v$15 = TextAttributes29.BOLD;
|
|
38044
37930
|
_v$12 !== _p$.e && (_p$.e = setProp(_el$29, "fg", _v$12, _p$.e));
|
|
38045
37931
|
_v$13 !== _p$.t && (_p$.t = setProp(_el$29, "attributes", _v$13, _p$.t));
|
|
38046
37932
|
_v$14 !== _p$.a && (_p$.a = setProp(_el$31, "fg", _v$14, _p$.a));
|
|
@@ -38152,7 +38038,7 @@ function BashRow(props) {
|
|
|
38152
38038
|
setProp(_el$41, "paddingLeft", 2);
|
|
38153
38039
|
insert(_el$42, statusText);
|
|
38154
38040
|
effect((_p$) => {
|
|
38155
|
-
var _v$16 = statusColor(), _v$17 =
|
|
38041
|
+
var _v$16 = statusColor(), _v$17 = TextAttributes29.DIM;
|
|
38156
38042
|
_v$16 !== _p$.e && (_p$.e = setProp(_el$42, "fg", _v$16, _p$.e));
|
|
38157
38043
|
_v$17 !== _p$.t && (_p$.t = setProp(_el$42, "attributes", _v$17, _p$.t));
|
|
38158
38044
|
return _p$;
|
|
@@ -38164,7 +38050,7 @@ function BashRow(props) {
|
|
|
38164
38050
|
}
|
|
38165
38051
|
}), null);
|
|
38166
38052
|
effect((_p$) => {
|
|
38167
|
-
var _v$18 = theme.warning, _v$19 =
|
|
38053
|
+
var _v$18 = theme.warning, _v$19 = TextAttributes29.BOLD, _v$20 = theme.text;
|
|
38168
38054
|
_v$18 !== _p$.e && (_p$.e = setProp(_el$35, "fg", _v$18, _p$.e));
|
|
38169
38055
|
_v$19 !== _p$.t && (_p$.t = setProp(_el$35, "attributes", _v$19, _p$.t));
|
|
38170
38056
|
_v$20 !== _p$.a && (_p$.a = setProp(_el$38, "fg", _v$20, _p$.a));
|
|
@@ -38194,7 +38080,7 @@ function SystemRow(props) {
|
|
|
38194
38080
|
setProp(_el$47, "flexGrow", 1);
|
|
38195
38081
|
insert(_el$48, () => props.text);
|
|
38196
38082
|
effect((_p$) => {
|
|
38197
|
-
var _v$21 = theme.textMuted, _v$22 =
|
|
38083
|
+
var _v$21 = theme.textMuted, _v$22 = TextAttributes29.DIM, _v$23 = isError() ? theme.error : theme.textMuted;
|
|
38198
38084
|
_v$21 !== _p$.e && (_p$.e = setProp(_el$46, "fg", _v$21, _p$.e));
|
|
38199
38085
|
_v$22 !== _p$.t && (_p$.t = setProp(_el$46, "attributes", _v$22, _p$.t));
|
|
38200
38086
|
_v$23 !== _p$.a && (_p$.a = setProp(_el$48, "fg", _v$23, _p$.a));
|
|
@@ -38207,6 +38093,47 @@ function SystemRow(props) {
|
|
|
38207
38093
|
return _el$45;
|
|
38208
38094
|
})();
|
|
38209
38095
|
}
|
|
38096
|
+
function RecapRow(props) {
|
|
38097
|
+
const {
|
|
38098
|
+
theme
|
|
38099
|
+
} = useTheme();
|
|
38100
|
+
return (() => {
|
|
38101
|
+
var _el$49 = createElement("box"), _el$50 = createElement("text"), _el$51 = createElement("box"), _el$52 = createElement("text"), _el$54 = createElement("box"), _el$55 = createElement("text");
|
|
38102
|
+
insertNode(_el$49, _el$50);
|
|
38103
|
+
insertNode(_el$49, _el$51);
|
|
38104
|
+
setProp(_el$49, "paddingTop", 1);
|
|
38105
|
+
setProp(_el$49, "flexDirection", "row");
|
|
38106
|
+
setProp(_el$49, "gap", 1);
|
|
38107
|
+
insert(_el$50, REFERENCE_MARK);
|
|
38108
|
+
insertNode(_el$51, _el$52);
|
|
38109
|
+
insertNode(_el$51, _el$54);
|
|
38110
|
+
setProp(_el$51, "flexGrow", 1);
|
|
38111
|
+
setProp(_el$51, "flexDirection", "row");
|
|
38112
|
+
setProp(_el$51, "gap", 1);
|
|
38113
|
+
insertNode(_el$52, createTextNode(`Recap:`));
|
|
38114
|
+
insertNode(_el$54, _el$55);
|
|
38115
|
+
setProp(_el$54, "flexGrow", 1);
|
|
38116
|
+
insert(_el$55, () => props.text);
|
|
38117
|
+
effect((_p$) => {
|
|
38118
|
+
var _v$24 = theme.textMuted, _v$25 = TextAttributes29.DIM, _v$26 = theme.textMuted, _v$27 = TextAttributes29.BOLD | TextAttributes29.DIM, _v$28 = theme.textMuted, _v$29 = TextAttributes29.DIM;
|
|
38119
|
+
_v$24 !== _p$.e && (_p$.e = setProp(_el$50, "fg", _v$24, _p$.e));
|
|
38120
|
+
_v$25 !== _p$.t && (_p$.t = setProp(_el$50, "attributes", _v$25, _p$.t));
|
|
38121
|
+
_v$26 !== _p$.a && (_p$.a = setProp(_el$52, "fg", _v$26, _p$.a));
|
|
38122
|
+
_v$27 !== _p$.o && (_p$.o = setProp(_el$52, "attributes", _v$27, _p$.o));
|
|
38123
|
+
_v$28 !== _p$.i && (_p$.i = setProp(_el$55, "fg", _v$28, _p$.i));
|
|
38124
|
+
_v$29 !== _p$.n && (_p$.n = setProp(_el$55, "attributes", _v$29, _p$.n));
|
|
38125
|
+
return _p$;
|
|
38126
|
+
}, {
|
|
38127
|
+
e: undefined,
|
|
38128
|
+
t: undefined,
|
|
38129
|
+
a: undefined,
|
|
38130
|
+
o: undefined,
|
|
38131
|
+
i: undefined,
|
|
38132
|
+
n: undefined
|
|
38133
|
+
});
|
|
38134
|
+
return _el$49;
|
|
38135
|
+
})();
|
|
38136
|
+
}
|
|
38210
38137
|
var init_MessageRows = __esm(() => {
|
|
38211
38138
|
init_solid();
|
|
38212
38139
|
init_solid();
|
|
@@ -38340,6 +38267,265 @@ function makeMultiEditHeader(filePath, count, adds, removes) {
|
|
|
38340
38267
|
}
|
|
38341
38268
|
var COLLAPSED_LINE_CAP = 10;
|
|
38342
38269
|
|
|
38270
|
+
// src/tui/panes/chat/todo-render.ts
|
|
38271
|
+
function parseTodos(input) {
|
|
38272
|
+
if (input == null || typeof input !== "object")
|
|
38273
|
+
return [];
|
|
38274
|
+
const todos = input.todos;
|
|
38275
|
+
if (!Array.isArray(todos))
|
|
38276
|
+
return [];
|
|
38277
|
+
const out = [];
|
|
38278
|
+
for (const t2 of todos) {
|
|
38279
|
+
if (!t2 || typeof t2 !== "object")
|
|
38280
|
+
continue;
|
|
38281
|
+
const obj = t2;
|
|
38282
|
+
const content = typeof obj.content === "string" ? obj.content : "";
|
|
38283
|
+
const activeForm = typeof obj.activeForm === "string" ? obj.activeForm : content;
|
|
38284
|
+
const status = typeof obj.status === "string" && V1_STATUSES.has(obj.status) ? obj.status : "pending";
|
|
38285
|
+
if (content.length === 0)
|
|
38286
|
+
continue;
|
|
38287
|
+
out.push({ content, status, activeForm });
|
|
38288
|
+
}
|
|
38289
|
+
return out;
|
|
38290
|
+
}
|
|
38291
|
+
function todoDisplayText(t2) {
|
|
38292
|
+
return t2.status === "in_progress" ? t2.activeForm : t2.content;
|
|
38293
|
+
}
|
|
38294
|
+
function parseTaskStatus(raw) {
|
|
38295
|
+
return typeof raw === "string" && TASK_STATUSES.has(raw) ? raw : "pending";
|
|
38296
|
+
}
|
|
38297
|
+
function parseTaskItem(obj) {
|
|
38298
|
+
const id = typeof obj.id === "string" ? obj.id : "";
|
|
38299
|
+
const subject = typeof obj.subject === "string" ? obj.subject : "";
|
|
38300
|
+
if (!id || !subject)
|
|
38301
|
+
return null;
|
|
38302
|
+
return {
|
|
38303
|
+
id,
|
|
38304
|
+
subject,
|
|
38305
|
+
status: parseTaskStatus(obj.status),
|
|
38306
|
+
owner: typeof obj.owner === "string" ? obj.owner : undefined,
|
|
38307
|
+
blockedBy: Array.isArray(obj.blockedBy) ? obj.blockedBy.filter((x2) => typeof x2 === "string") : undefined
|
|
38308
|
+
};
|
|
38309
|
+
}
|
|
38310
|
+
function parseTaskCreateInput(input) {
|
|
38311
|
+
if (input == null || typeof input !== "object")
|
|
38312
|
+
return null;
|
|
38313
|
+
const obj = input;
|
|
38314
|
+
const subject = typeof obj.subject === "string" ? obj.subject : "";
|
|
38315
|
+
if (!subject)
|
|
38316
|
+
return null;
|
|
38317
|
+
const description = typeof obj.description === "string" ? obj.description : "";
|
|
38318
|
+
const activeForm = typeof obj.activeForm === "string" ? obj.activeForm : subject;
|
|
38319
|
+
return { subject, description, activeForm };
|
|
38320
|
+
}
|
|
38321
|
+
function parseTaskUpdateInput(input) {
|
|
38322
|
+
if (input == null || typeof input !== "object")
|
|
38323
|
+
return null;
|
|
38324
|
+
const obj = input;
|
|
38325
|
+
const taskId = typeof obj.taskId === "string" ? obj.taskId : "";
|
|
38326
|
+
if (!taskId)
|
|
38327
|
+
return null;
|
|
38328
|
+
return {
|
|
38329
|
+
taskId,
|
|
38330
|
+
status: typeof obj.status === "string" && TASK_STATUSES.has(obj.status) ? obj.status : undefined,
|
|
38331
|
+
subject: typeof obj.subject === "string" ? obj.subject : undefined,
|
|
38332
|
+
activeForm: typeof obj.activeForm === "string" ? obj.activeForm : undefined,
|
|
38333
|
+
owner: typeof obj.owner === "string" ? obj.owner : undefined
|
|
38334
|
+
};
|
|
38335
|
+
}
|
|
38336
|
+
function parseTaskUpdateOutput(output) {
|
|
38337
|
+
if (output == null || typeof output !== "object")
|
|
38338
|
+
return null;
|
|
38339
|
+
const obj = output;
|
|
38340
|
+
const taskId = typeof obj.taskId === "string" ? obj.taskId : "";
|
|
38341
|
+
if (!taskId)
|
|
38342
|
+
return null;
|
|
38343
|
+
const updatedFields = Array.isArray(obj.updatedFields) ? obj.updatedFields.filter((x2) => typeof x2 === "string") : [];
|
|
38344
|
+
const sc = obj.statusChange;
|
|
38345
|
+
const statusChange = sc && typeof sc === "object" && typeof sc.from === "string" && typeof sc.to === "string" ? { from: sc.from, to: sc.to } : undefined;
|
|
38346
|
+
return {
|
|
38347
|
+
success: obj.success === true,
|
|
38348
|
+
taskId,
|
|
38349
|
+
updatedFields,
|
|
38350
|
+
statusChange,
|
|
38351
|
+
error: typeof obj.error === "string" ? obj.error : undefined
|
|
38352
|
+
};
|
|
38353
|
+
}
|
|
38354
|
+
function parseTaskListOutput(output) {
|
|
38355
|
+
const text = coerceToolResultText(output);
|
|
38356
|
+
if (text != null)
|
|
38357
|
+
return parseTaskListText(text);
|
|
38358
|
+
if (output != null && typeof output === "object") {
|
|
38359
|
+
const tasks = output.tasks;
|
|
38360
|
+
if (Array.isArray(tasks)) {
|
|
38361
|
+
const out = [];
|
|
38362
|
+
for (const t2 of tasks) {
|
|
38363
|
+
if (!t2 || typeof t2 !== "object")
|
|
38364
|
+
continue;
|
|
38365
|
+
const parsed = parseTaskItem(t2);
|
|
38366
|
+
if (parsed)
|
|
38367
|
+
out.push(parsed);
|
|
38368
|
+
}
|
|
38369
|
+
return out;
|
|
38370
|
+
}
|
|
38371
|
+
}
|
|
38372
|
+
return [];
|
|
38373
|
+
}
|
|
38374
|
+
function coerceToolResultText(output) {
|
|
38375
|
+
if (typeof output === "string")
|
|
38376
|
+
return output;
|
|
38377
|
+
if (Array.isArray(output)) {
|
|
38378
|
+
const parts = [];
|
|
38379
|
+
for (const b2 of output) {
|
|
38380
|
+
if (b2 && typeof b2 === "object" && b2.type === "text") {
|
|
38381
|
+
const t2 = b2.text;
|
|
38382
|
+
if (typeof t2 === "string")
|
|
38383
|
+
parts.push(t2);
|
|
38384
|
+
}
|
|
38385
|
+
}
|
|
38386
|
+
if (parts.length > 0)
|
|
38387
|
+
return parts.join(`
|
|
38388
|
+
`);
|
|
38389
|
+
}
|
|
38390
|
+
return null;
|
|
38391
|
+
}
|
|
38392
|
+
function parseTaskListText(text) {
|
|
38393
|
+
const out = [];
|
|
38394
|
+
const lineRe = /^#(\S+)\s+\[(pending|in_progress|completed|deleted)\]\s+(.+)$/;
|
|
38395
|
+
const blockedRe = /\s+\[blocked by [^\]]+\]\s*$/;
|
|
38396
|
+
const ownerRe = /\s+\(([^)]+)\)\s*$/;
|
|
38397
|
+
for (const raw of text.split(`
|
|
38398
|
+
`)) {
|
|
38399
|
+
const line = raw.trim();
|
|
38400
|
+
if (!line)
|
|
38401
|
+
continue;
|
|
38402
|
+
const m2 = lineRe.exec(line);
|
|
38403
|
+
if (!m2)
|
|
38404
|
+
continue;
|
|
38405
|
+
const id = m2[1] ?? "";
|
|
38406
|
+
const status = m2[2];
|
|
38407
|
+
let rest = m2[3] ?? "";
|
|
38408
|
+
const blocked = blockedRe.exec(rest);
|
|
38409
|
+
const blockedBy = [];
|
|
38410
|
+
if (blocked) {
|
|
38411
|
+
const inner = blocked[0].match(/#(\S+?)(?=[,\]])/g) ?? [];
|
|
38412
|
+
for (const tag of inner)
|
|
38413
|
+
blockedBy.push(tag.slice(1));
|
|
38414
|
+
rest = rest.slice(0, blocked.index).trim();
|
|
38415
|
+
}
|
|
38416
|
+
let owner;
|
|
38417
|
+
const ownerM = ownerRe.exec(rest);
|
|
38418
|
+
if (ownerM) {
|
|
38419
|
+
owner = ownerM[1];
|
|
38420
|
+
rest = rest.slice(0, ownerM.index).trim();
|
|
38421
|
+
}
|
|
38422
|
+
if (!id || !rest)
|
|
38423
|
+
continue;
|
|
38424
|
+
out.push({
|
|
38425
|
+
id,
|
|
38426
|
+
subject: rest,
|
|
38427
|
+
status,
|
|
38428
|
+
owner,
|
|
38429
|
+
blockedBy: blockedBy.length > 0 ? blockedBy : undefined
|
|
38430
|
+
});
|
|
38431
|
+
}
|
|
38432
|
+
return out;
|
|
38433
|
+
}
|
|
38434
|
+
function countTodos(items) {
|
|
38435
|
+
let done = 0;
|
|
38436
|
+
let inProgress = 0;
|
|
38437
|
+
let pending = 0;
|
|
38438
|
+
let total = 0;
|
|
38439
|
+
for (const t2 of items) {
|
|
38440
|
+
if (t2.status === "deleted")
|
|
38441
|
+
continue;
|
|
38442
|
+
total++;
|
|
38443
|
+
if (t2.status === "completed")
|
|
38444
|
+
done++;
|
|
38445
|
+
else if (t2.status === "in_progress")
|
|
38446
|
+
inProgress++;
|
|
38447
|
+
else
|
|
38448
|
+
pending++;
|
|
38449
|
+
}
|
|
38450
|
+
return { done, inProgress, pending, total };
|
|
38451
|
+
}
|
|
38452
|
+
function summarizeTodos(c2) {
|
|
38453
|
+
if (c2.total === 0)
|
|
38454
|
+
return "0 todos";
|
|
38455
|
+
const noun = c2.total === 1 ? "todo" : "todos";
|
|
38456
|
+
return `${c2.total} ${noun} \xB7 ${TODO_GLYPH.completed}${c2.done} ${TODO_GLYPH.in_progress}${c2.inProgress} ${TODO_GLYPH.pending}${c2.pending}`;
|
|
38457
|
+
}
|
|
38458
|
+
function extractSnapshotItems(row) {
|
|
38459
|
+
if (row.name === "TodoWrite") {
|
|
38460
|
+
return parseTodos(row.input).map((t2, i2) => ({
|
|
38461
|
+
key: `${i2}`,
|
|
38462
|
+
status: t2.status,
|
|
38463
|
+
displayText: todoDisplayText(t2)
|
|
38464
|
+
}));
|
|
38465
|
+
}
|
|
38466
|
+
if (row.name === "TaskList") {
|
|
38467
|
+
if (!row.done)
|
|
38468
|
+
return [];
|
|
38469
|
+
return parseTaskListOutput(row.output).map((t2) => ({
|
|
38470
|
+
key: t2.id,
|
|
38471
|
+
status: t2.status,
|
|
38472
|
+
displayText: `${t2.subject} [#${t2.id}]`
|
|
38473
|
+
}));
|
|
38474
|
+
}
|
|
38475
|
+
return [];
|
|
38476
|
+
}
|
|
38477
|
+
function computeRoundedSnapshots(messages) {
|
|
38478
|
+
const result = new Map;
|
|
38479
|
+
const baseline = new Set;
|
|
38480
|
+
for (let i2 = 0;i2 < messages.length; i2++) {
|
|
38481
|
+
const r2 = messages[i2];
|
|
38482
|
+
if (!r2 || r2.kind !== "tool")
|
|
38483
|
+
continue;
|
|
38484
|
+
if (r2.name !== "TodoWrite" && r2.name !== "TaskList")
|
|
38485
|
+
continue;
|
|
38486
|
+
const raw = extractSnapshotItems({
|
|
38487
|
+
name: r2.name,
|
|
38488
|
+
input: r2.input,
|
|
38489
|
+
output: r2.output,
|
|
38490
|
+
done: r2.done === true
|
|
38491
|
+
});
|
|
38492
|
+
if (raw.length === 0) {
|
|
38493
|
+
result.set(i2, []);
|
|
38494
|
+
continue;
|
|
38495
|
+
}
|
|
38496
|
+
const rawCompleted = [];
|
|
38497
|
+
const rawActive = [];
|
|
38498
|
+
for (const t2 of raw) {
|
|
38499
|
+
if (t2.status === "completed" || t2.status === "deleted")
|
|
38500
|
+
rawCompleted.push(t2);
|
|
38501
|
+
else
|
|
38502
|
+
rawActive.push(t2);
|
|
38503
|
+
}
|
|
38504
|
+
if (rawCompleted.length > 0 && rawActive.length > 0) {
|
|
38505
|
+
const completedIds = rawCompleted.map((t2) => Number.parseInt(t2.key, 10)).filter((n2) => !Number.isNaN(n2));
|
|
38506
|
+
const activeIds = rawActive.map((t2) => Number.parseInt(t2.key, 10)).filter((n2) => !Number.isNaN(n2));
|
|
38507
|
+
if (completedIds.length === rawCompleted.length && activeIds.length === rawActive.length && Math.max(...completedIds) < Math.min(...activeIds)) {
|
|
38508
|
+
for (const t2 of rawCompleted)
|
|
38509
|
+
baseline.add(t2.key);
|
|
38510
|
+
}
|
|
38511
|
+
}
|
|
38512
|
+
const visible = raw.filter((t2) => !baseline.has(t2.key));
|
|
38513
|
+
result.set(i2, visible);
|
|
38514
|
+
}
|
|
38515
|
+
return result;
|
|
38516
|
+
}
|
|
38517
|
+
var TASK_STATUSES, V1_STATUSES, TODO_GLYPH;
|
|
38518
|
+
var init_todo_render = __esm(() => {
|
|
38519
|
+
TASK_STATUSES = new Set(["pending", "in_progress", "completed", "deleted"]);
|
|
38520
|
+
V1_STATUSES = new Set(["pending", "in_progress", "completed"]);
|
|
38521
|
+
TODO_GLYPH = {
|
|
38522
|
+
completed: "\u2713",
|
|
38523
|
+
in_progress: "\u25FC",
|
|
38524
|
+
pending: "\u25FB",
|
|
38525
|
+
deleted: "\u2717"
|
|
38526
|
+
};
|
|
38527
|
+
});
|
|
38528
|
+
|
|
38343
38529
|
// src/tui/panes/chat/tool-banners.ts
|
|
38344
38530
|
function readStringField(input, key) {
|
|
38345
38531
|
if (input == null || typeof input !== "object")
|
|
@@ -38409,6 +38595,9 @@ function classifyTool(name, vendor = "claude") {
|
|
|
38409
38595
|
function isSubagentTool(name, vendor = "claude") {
|
|
38410
38596
|
return lookupToolMeta(name, vendor).body === "subagent";
|
|
38411
38597
|
}
|
|
38598
|
+
function isTodoSnapshotTool(name, vendor = "claude") {
|
|
38599
|
+
return lookupToolMeta(name, vendor).body === "todo-snapshot";
|
|
38600
|
+
}
|
|
38412
38601
|
var DEFAULT_META, claudeRegistry, registries;
|
|
38413
38602
|
var init_tool_registry = __esm(() => {
|
|
38414
38603
|
DEFAULT_META = {
|
|
@@ -38429,7 +38618,12 @@ var init_tool_registry = __esm(() => {
|
|
|
38429
38618
|
Glob: { bucket: "list", banner: "read-grep-glob", body: "read-grep-glob" },
|
|
38430
38619
|
LS: { bucket: "list", banner: "default", body: "default" },
|
|
38431
38620
|
Task: { bucket: "other", banner: "default", body: "subagent" },
|
|
38432
|
-
Agent: { bucket: "other", banner: "default", body: "subagent" }
|
|
38621
|
+
Agent: { bucket: "other", banner: "default", body: "subagent" },
|
|
38622
|
+
TodoWrite: { bucket: "other", banner: "default", body: "todo-snapshot" },
|
|
38623
|
+
TaskList: { bucket: "other", banner: "default", body: "todo-snapshot" },
|
|
38624
|
+
TaskCreate: { bucket: "other", banner: "task-action", body: "default" },
|
|
38625
|
+
TaskUpdate: { bucket: "other", banner: "task-action", body: "default" },
|
|
38626
|
+
TaskGet: { bucket: "other", banner: "task-action", body: "default" }
|
|
38433
38627
|
};
|
|
38434
38628
|
registries = {
|
|
38435
38629
|
claude: claudeRegistry,
|
|
@@ -38439,9 +38633,11 @@ var init_tool_registry = __esm(() => {
|
|
|
38439
38633
|
});
|
|
38440
38634
|
|
|
38441
38635
|
// src/tui/panes/chat/tool-fold.tsx
|
|
38442
|
-
import { TextAttributes as
|
|
38636
|
+
import { TextAttributes as TextAttributes30 } from "@opentui/core";
|
|
38443
38637
|
function isFoldableTool(row) {
|
|
38444
|
-
|
|
38638
|
+
if (row?.kind !== "tool")
|
|
38639
|
+
return false;
|
|
38640
|
+
return !isSubagentTool(row.name) && !isTodoSnapshotTool(row.name);
|
|
38445
38641
|
}
|
|
38446
38642
|
function groupRenderItems(messages, expandedFoldStartIndex = null) {
|
|
38447
38643
|
const items = [];
|
|
@@ -38572,7 +38768,7 @@ function ToolFoldRow(props) {
|
|
|
38572
38768
|
setProp(_el$3, "flexGrow", 1);
|
|
38573
38769
|
insert(_el$4, () => props.summary);
|
|
38574
38770
|
effect((_p$) => {
|
|
38575
|
-
var _v$ = fg(), _v$2 =
|
|
38771
|
+
var _v$ = fg(), _v$2 = TextAttributes30.DIM, _v$3 = theme.textMuted;
|
|
38576
38772
|
_v$ !== _p$.e && (_p$.e = setProp(_el$2, "fg", _v$, _p$.e));
|
|
38577
38773
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$2, "attributes", _v$2, _p$.t));
|
|
38578
38774
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$4, "fg", _v$3, _p$.a));
|
|
@@ -38597,7 +38793,7 @@ var init_tool_fold = __esm(() => {
|
|
|
38597
38793
|
});
|
|
38598
38794
|
|
|
38599
38795
|
// src/tui/panes/chat/ToolRow.tsx
|
|
38600
|
-
import { TextAttributes as
|
|
38796
|
+
import { TextAttributes as TextAttributes31 } from "@opentui/core";
|
|
38601
38797
|
function previewToolInput(input) {
|
|
38602
38798
|
if (input == null)
|
|
38603
38799
|
return "";
|
|
@@ -38642,16 +38838,26 @@ function ToolRow(props) {
|
|
|
38642
38838
|
theme
|
|
38643
38839
|
} = useTheme();
|
|
38644
38840
|
const r2 = () => props.row;
|
|
38645
|
-
const prefixGlyph = () =>
|
|
38646
|
-
|
|
38841
|
+
const prefixGlyph = () => {
|
|
38842
|
+
if (isTodoSnapshot())
|
|
38843
|
+
return props.expanded ? "\u25BC" : "\u25B6";
|
|
38844
|
+
return r2().done ? BLACK_CIRCLE : "\u273B";
|
|
38845
|
+
};
|
|
38846
|
+
const prefixColor = () => {
|
|
38847
|
+
if (isTodoSnapshot())
|
|
38848
|
+
return theme.success;
|
|
38849
|
+
return r2().done ? theme.success : theme.warning;
|
|
38850
|
+
};
|
|
38647
38851
|
const meta = () => lookupToolMeta(r2().name);
|
|
38648
38852
|
const isDiffTool = () => meta().body === "edit-diff";
|
|
38649
38853
|
const isMultiEdit = () => meta().body === "multi-edit-diff";
|
|
38650
38854
|
const isBash = () => meta().banner === "bash";
|
|
38651
38855
|
const isReadGrepGlob = () => meta().banner === "read-grep-glob";
|
|
38652
38856
|
const isSubagent = () => meta().body === "subagent";
|
|
38857
|
+
const isTodoSnapshot = () => meta().body === "todo-snapshot";
|
|
38858
|
+
const isTaskAction = () => meta().banner === "task-action";
|
|
38653
38859
|
const usesCustomBanner = () => meta().banner !== "default" || meta().body !== "default";
|
|
38654
|
-
const usesCustomBody = () => meta().body === "edit-diff" || meta().body === "multi-edit-diff" || meta().body === "bash-output" || meta().body === "subagent";
|
|
38860
|
+
const usesCustomBody = () => meta().body === "edit-diff" || meta().body === "multi-edit-diff" || meta().body === "bash-output" || meta().body === "subagent" || meta().body === "todo-snapshot";
|
|
38655
38861
|
const diff = () => {
|
|
38656
38862
|
if (r2().name === "Edit")
|
|
38657
38863
|
return formatEditDiff(r2().input);
|
|
@@ -38679,49 +38885,77 @@ function ToolRow(props) {
|
|
|
38679
38885
|
get fallback() {
|
|
38680
38886
|
return createComponent2(Show, {
|
|
38681
38887
|
get when() {
|
|
38682
|
-
return
|
|
38888
|
+
return isTodoSnapshot();
|
|
38683
38889
|
},
|
|
38684
38890
|
get fallback() {
|
|
38685
38891
|
return createComponent2(Show, {
|
|
38686
38892
|
get when() {
|
|
38687
|
-
return
|
|
38893
|
+
return isTaskAction();
|
|
38688
38894
|
},
|
|
38689
38895
|
get fallback() {
|
|
38690
|
-
return (
|
|
38691
|
-
|
|
38692
|
-
|
|
38693
|
-
|
|
38694
|
-
|
|
38695
|
-
|
|
38696
|
-
|
|
38697
|
-
|
|
38698
|
-
|
|
38699
|
-
|
|
38700
|
-
|
|
38701
|
-
|
|
38702
|
-
|
|
38703
|
-
|
|
38704
|
-
|
|
38705
|
-
|
|
38706
|
-
|
|
38707
|
-
|
|
38708
|
-
|
|
38709
|
-
|
|
38710
|
-
|
|
38711
|
-
|
|
38712
|
-
|
|
38713
|
-
|
|
38714
|
-
|
|
38715
|
-
|
|
38716
|
-
|
|
38717
|
-
|
|
38718
|
-
|
|
38719
|
-
|
|
38720
|
-
|
|
38721
|
-
|
|
38896
|
+
return createComponent2(Show, {
|
|
38897
|
+
get when() {
|
|
38898
|
+
return isReadGrepGlob();
|
|
38899
|
+
},
|
|
38900
|
+
get fallback() {
|
|
38901
|
+
return createComponent2(Show, {
|
|
38902
|
+
get when() {
|
|
38903
|
+
return isBash();
|
|
38904
|
+
},
|
|
38905
|
+
get fallback() {
|
|
38906
|
+
return (() => {
|
|
38907
|
+
var _el$16 = createElement("text"), _el$17 = createElement("span");
|
|
38908
|
+
insertNode(_el$16, _el$17);
|
|
38909
|
+
insert(_el$17, () => r2().name);
|
|
38910
|
+
insert(_el$16, createComponent2(Show, {
|
|
38911
|
+
get when() {
|
|
38912
|
+
return !usesCustomBanner();
|
|
38913
|
+
},
|
|
38914
|
+
get children() {
|
|
38915
|
+
var _el$18 = createElement("span"), _el$19 = createTextNode(`(`), _el$20 = createTextNode(`)`);
|
|
38916
|
+
insertNode(_el$18, _el$19);
|
|
38917
|
+
insertNode(_el$18, _el$20);
|
|
38918
|
+
insert(_el$18, () => previewToolInput(r2().input), _el$20);
|
|
38919
|
+
effect((_$p) => setProp(_el$18, "style", {
|
|
38920
|
+
fg: theme.textMuted
|
|
38921
|
+
}, _$p));
|
|
38922
|
+
return _el$18;
|
|
38923
|
+
}
|
|
38924
|
+
}), null);
|
|
38925
|
+
effect((_p$) => {
|
|
38926
|
+
var _v$7 = theme.text, _v$8 = {
|
|
38927
|
+
attributes: TextAttributes31.BOLD
|
|
38928
|
+
};
|
|
38929
|
+
_v$7 !== _p$.e && (_p$.e = setProp(_el$16, "fg", _v$7, _p$.e));
|
|
38930
|
+
_v$8 !== _p$.t && (_p$.t = setProp(_el$17, "style", _v$8, _p$.t));
|
|
38931
|
+
return _p$;
|
|
38932
|
+
}, {
|
|
38933
|
+
e: undefined,
|
|
38934
|
+
t: undefined
|
|
38935
|
+
});
|
|
38936
|
+
return _el$16;
|
|
38937
|
+
})();
|
|
38938
|
+
},
|
|
38939
|
+
get children() {
|
|
38940
|
+
return createComponent2(BashBanner, {
|
|
38941
|
+
get row() {
|
|
38942
|
+
return r2();
|
|
38943
|
+
}
|
|
38944
|
+
});
|
|
38945
|
+
}
|
|
38946
|
+
});
|
|
38947
|
+
},
|
|
38948
|
+
get children() {
|
|
38949
|
+
return createComponent2(ReadGrepGlobBanner, {
|
|
38950
|
+
get row() {
|
|
38951
|
+
return r2();
|
|
38952
|
+
}
|
|
38953
|
+
});
|
|
38954
|
+
}
|
|
38955
|
+
});
|
|
38722
38956
|
},
|
|
38723
38957
|
get children() {
|
|
38724
|
-
return createComponent2(
|
|
38958
|
+
return createComponent2(TaskActionBanner, {
|
|
38725
38959
|
get row() {
|
|
38726
38960
|
return r2();
|
|
38727
38961
|
}
|
|
@@ -38730,9 +38964,12 @@ function ToolRow(props) {
|
|
|
38730
38964
|
});
|
|
38731
38965
|
},
|
|
38732
38966
|
get children() {
|
|
38733
|
-
return createComponent2(
|
|
38734
|
-
get
|
|
38735
|
-
return
|
|
38967
|
+
return createComponent2(TodoSnapshotBanner, {
|
|
38968
|
+
get items() {
|
|
38969
|
+
return props.roundedItems ?? [];
|
|
38970
|
+
},
|
|
38971
|
+
get name() {
|
|
38972
|
+
return r2().name;
|
|
38736
38973
|
}
|
|
38737
38974
|
});
|
|
38738
38975
|
}
|
|
@@ -38818,6 +39055,24 @@ function ToolRow(props) {
|
|
|
38818
39055
|
});
|
|
38819
39056
|
}
|
|
38820
39057
|
}), null);
|
|
39058
|
+
insert(_el$, createComponent2(Show, {
|
|
39059
|
+
get when() {
|
|
39060
|
+
return isTodoSnapshot();
|
|
39061
|
+
},
|
|
39062
|
+
get children() {
|
|
39063
|
+
return createComponent2(TodoSnapshotBody, {
|
|
39064
|
+
get items() {
|
|
39065
|
+
return props.roundedItems ?? [];
|
|
39066
|
+
},
|
|
39067
|
+
get expanded() {
|
|
39068
|
+
return props.expanded;
|
|
39069
|
+
},
|
|
39070
|
+
get onToggle() {
|
|
39071
|
+
return props.onToggle;
|
|
39072
|
+
}
|
|
39073
|
+
});
|
|
39074
|
+
}
|
|
39075
|
+
}), null);
|
|
38821
39076
|
insert(_el$, createComponent2(Show, {
|
|
38822
39077
|
get when() {
|
|
38823
39078
|
return memo2(() => !!(!usesCustomBody() && !isReadGrepGlob() && !props.expanded && r2().done))() && r2().output !== undefined;
|
|
@@ -38903,7 +39158,7 @@ function ToolRow(props) {
|
|
|
38903
39158
|
}
|
|
38904
39159
|
}), null);
|
|
38905
39160
|
effect((_p$) => {
|
|
38906
|
-
var _v$5 = prefixColor(), _v$6 =
|
|
39161
|
+
var _v$5 = prefixColor(), _v$6 = TextAttributes31.BOLD;
|
|
38907
39162
|
_v$5 !== _p$.e && (_p$.e = setProp(_el$3, "fg", _v$5, _p$.e));
|
|
38908
39163
|
_v$6 !== _p$.t && (_p$.t = setProp(_el$3, "attributes", _v$6, _p$.t));
|
|
38909
39164
|
return _p$;
|
|
@@ -39142,7 +39397,7 @@ function BashBanner(props) {
|
|
|
39142
39397
|
}
|
|
39143
39398
|
}), null);
|
|
39144
39399
|
effect((_p$) => {
|
|
39145
|
-
var _v$15 = theme.accent, _v$16 =
|
|
39400
|
+
var _v$15 = theme.accent, _v$16 = TextAttributes31.BOLD, _v$17 = theme.text;
|
|
39146
39401
|
_v$15 !== _p$.e && (_p$.e = setProp(_el$42, "fg", _v$15, _p$.e));
|
|
39147
39402
|
_v$16 !== _p$.t && (_p$.t = setProp(_el$42, "attributes", _v$16, _p$.t));
|
|
39148
39403
|
_v$17 !== _p$.a && (_p$.a = setProp(_el$45, "fg", _v$17, _p$.a));
|
|
@@ -39230,7 +39485,7 @@ function ReadGrepGlobBanner(props) {
|
|
|
39230
39485
|
}), null);
|
|
39231
39486
|
effect((_p$) => {
|
|
39232
39487
|
var _v$18 = theme.text, _v$19 = {
|
|
39233
|
-
attributes:
|
|
39488
|
+
attributes: TextAttributes31.BOLD
|
|
39234
39489
|
};
|
|
39235
39490
|
_v$18 !== _p$.e && (_p$.e = setProp(_el$50, "fg", _v$18, _p$.e));
|
|
39236
39491
|
_v$19 !== _p$.t && (_p$.t = setProp(_el$51, "style", _v$19, _p$.t));
|
|
@@ -39275,7 +39530,7 @@ function SubagentBanner(props) {
|
|
|
39275
39530
|
}), null);
|
|
39276
39531
|
effect((_p$) => {
|
|
39277
39532
|
var _v$20 = theme.text, _v$21 = {
|
|
39278
|
-
attributes:
|
|
39533
|
+
attributes: TextAttributes31.BOLD
|
|
39279
39534
|
};
|
|
39280
39535
|
_v$20 !== _p$.e && (_p$.e = setProp(_el$53, "fg", _v$20, _p$.e));
|
|
39281
39536
|
_v$21 !== _p$.t && (_p$.t = setProp(_el$54, "style", _v$21, _p$.t));
|
|
@@ -39367,8 +39622,8 @@ function SubagentBody(props) {
|
|
|
39367
39622
|
insert(_el$63, () => ch.name);
|
|
39368
39623
|
insert(_el$64, () => `(${previewToolInput(ch.input)})`);
|
|
39369
39624
|
effect((_p$) => {
|
|
39370
|
-
var _v$22 = ch.done ? theme.success : theme.warning, _v$23 =
|
|
39371
|
-
attributes:
|
|
39625
|
+
var _v$22 = ch.done ? theme.success : theme.warning, _v$23 = TextAttributes31.BOLD, _v$24 = theme.text, _v$25 = {
|
|
39626
|
+
attributes: TextAttributes31.BOLD
|
|
39372
39627
|
}, _v$26 = {
|
|
39373
39628
|
fg: theme.textMuted
|
|
39374
39629
|
};
|
|
@@ -39395,6 +39650,158 @@ function SubagentBody(props) {
|
|
|
39395
39650
|
return _el$56;
|
|
39396
39651
|
})();
|
|
39397
39652
|
}
|
|
39653
|
+
function TodoSnapshotBanner(props) {
|
|
39654
|
+
const {
|
|
39655
|
+
theme
|
|
39656
|
+
} = useTheme();
|
|
39657
|
+
const summary = () => summarizeTodos(countTodos(props.items));
|
|
39658
|
+
return (() => {
|
|
39659
|
+
var _el$65 = createElement("text"), _el$66 = createElement("span"), _el$67 = createElement("span");
|
|
39660
|
+
insertNode(_el$65, _el$66);
|
|
39661
|
+
insertNode(_el$65, _el$67);
|
|
39662
|
+
setProp(_el$65, "wrapMode", "none");
|
|
39663
|
+
insert(_el$66, () => props.name);
|
|
39664
|
+
insert(_el$67, () => ` \xB7 ${summary()}`);
|
|
39665
|
+
effect((_p$) => {
|
|
39666
|
+
var _v$27 = theme.text, _v$28 = {
|
|
39667
|
+
attributes: TextAttributes31.BOLD
|
|
39668
|
+
}, _v$29 = {
|
|
39669
|
+
fg: theme.textMuted
|
|
39670
|
+
};
|
|
39671
|
+
_v$27 !== _p$.e && (_p$.e = setProp(_el$65, "fg", _v$27, _p$.e));
|
|
39672
|
+
_v$28 !== _p$.t && (_p$.t = setProp(_el$66, "style", _v$28, _p$.t));
|
|
39673
|
+
_v$29 !== _p$.a && (_p$.a = setProp(_el$67, "style", _v$29, _p$.a));
|
|
39674
|
+
return _p$;
|
|
39675
|
+
}, {
|
|
39676
|
+
e: undefined,
|
|
39677
|
+
t: undefined,
|
|
39678
|
+
a: undefined
|
|
39679
|
+
});
|
|
39680
|
+
return _el$65;
|
|
39681
|
+
})();
|
|
39682
|
+
}
|
|
39683
|
+
function TodoSnapshotBody(props) {
|
|
39684
|
+
const {
|
|
39685
|
+
theme
|
|
39686
|
+
} = useTheme();
|
|
39687
|
+
const items = () => props.items;
|
|
39688
|
+
const show5 = () => props.expanded;
|
|
39689
|
+
const colorFor = (status) => status === "completed" ? theme.success : status === "in_progress" ? theme.accent : status === "deleted" ? theme.error : theme.textMuted;
|
|
39690
|
+
const subjectAttrs = (status) => {
|
|
39691
|
+
if (status === "completed" || status === "deleted")
|
|
39692
|
+
return TextAttributes31.DIM | TextAttributes31.STRIKETHROUGH;
|
|
39693
|
+
if (status === "in_progress")
|
|
39694
|
+
return TextAttributes31.BOLD;
|
|
39695
|
+
return TextAttributes31.NONE;
|
|
39696
|
+
};
|
|
39697
|
+
return createComponent2(Show, {
|
|
39698
|
+
get when() {
|
|
39699
|
+
return memo2(() => !!show5())() && items().length > 0;
|
|
39700
|
+
},
|
|
39701
|
+
get children() {
|
|
39702
|
+
var _el$68 = createElement("box");
|
|
39703
|
+
setProp(_el$68, "paddingLeft", 2);
|
|
39704
|
+
setProp(_el$68, "flexDirection", "column");
|
|
39705
|
+
setProp(_el$68, "onMouseUp", () => props.onToggle());
|
|
39706
|
+
insert(_el$68, createComponent2(For, {
|
|
39707
|
+
get each() {
|
|
39708
|
+
return items();
|
|
39709
|
+
},
|
|
39710
|
+
children: (t2) => (() => {
|
|
39711
|
+
var _el$69 = createElement("box"), _el$70 = createElement("text"), _el$71 = createElement("box"), _el$72 = createElement("text");
|
|
39712
|
+
insertNode(_el$69, _el$70);
|
|
39713
|
+
insertNode(_el$69, _el$71);
|
|
39714
|
+
setProp(_el$69, "flexDirection", "row");
|
|
39715
|
+
setProp(_el$69, "gap", 1);
|
|
39716
|
+
setProp(_el$70, "wrapMode", "none");
|
|
39717
|
+
insert(_el$70, () => TODO_GLYPH[t2.status]);
|
|
39718
|
+
insertNode(_el$71, _el$72);
|
|
39719
|
+
setProp(_el$71, "flexGrow", 1);
|
|
39720
|
+
insert(_el$72, () => t2.displayText);
|
|
39721
|
+
effect((_p$) => {
|
|
39722
|
+
var _v$30 = colorFor(t2.status), _v$31 = t2.status === "pending" ? theme.text : colorFor(t2.status), _v$32 = subjectAttrs(t2.status);
|
|
39723
|
+
_v$30 !== _p$.e && (_p$.e = setProp(_el$70, "fg", _v$30, _p$.e));
|
|
39724
|
+
_v$31 !== _p$.t && (_p$.t = setProp(_el$72, "fg", _v$31, _p$.t));
|
|
39725
|
+
_v$32 !== _p$.a && (_p$.a = setProp(_el$72, "attributes", _v$32, _p$.a));
|
|
39726
|
+
return _p$;
|
|
39727
|
+
}, {
|
|
39728
|
+
e: undefined,
|
|
39729
|
+
t: undefined,
|
|
39730
|
+
a: undefined
|
|
39731
|
+
});
|
|
39732
|
+
return _el$69;
|
|
39733
|
+
})()
|
|
39734
|
+
}));
|
|
39735
|
+
return _el$68;
|
|
39736
|
+
}
|
|
39737
|
+
});
|
|
39738
|
+
}
|
|
39739
|
+
function TaskActionBanner(props) {
|
|
39740
|
+
const {
|
|
39741
|
+
theme
|
|
39742
|
+
} = useTheme();
|
|
39743
|
+
const summary = () => {
|
|
39744
|
+
const row = props.row;
|
|
39745
|
+
if (row.name === "TaskCreate") {
|
|
39746
|
+
const input = parseTaskCreateInput(row.input);
|
|
39747
|
+
return input ? `"${input.subject}"` : "";
|
|
39748
|
+
}
|
|
39749
|
+
if (row.name === "TaskUpdate") {
|
|
39750
|
+
const input = parseTaskUpdateInput(row.input);
|
|
39751
|
+
const output = parseTaskUpdateOutput(row.output);
|
|
39752
|
+
const id = input?.taskId ?? output?.taskId ?? "";
|
|
39753
|
+
const idChip = id ? `#${id}` : "";
|
|
39754
|
+
if (output?.error)
|
|
39755
|
+
return `${idChip} \xB7 ${output.error}`;
|
|
39756
|
+
if (output?.statusChange)
|
|
39757
|
+
return `${idChip} \xB7 ${output.statusChange.from} \u2192 ${output.statusChange.to}`;
|
|
39758
|
+
if (input?.status === "deleted")
|
|
39759
|
+
return `${idChip} \xB7 deleted`;
|
|
39760
|
+
if (input?.status)
|
|
39761
|
+
return `${idChip} \xB7 \u2192 ${input.status}`;
|
|
39762
|
+
if (output?.updatedFields.length)
|
|
39763
|
+
return `${idChip} \xB7 updated: ${output.updatedFields.join(", ")}`;
|
|
39764
|
+
return idChip;
|
|
39765
|
+
}
|
|
39766
|
+
if (row.name === "TaskGet") {
|
|
39767
|
+
const input = row.input;
|
|
39768
|
+
const id = input && typeof input === "object" && typeof input.taskId === "string" ? input.taskId : "";
|
|
39769
|
+
return id ? `#${id}` : "";
|
|
39770
|
+
}
|
|
39771
|
+
return "";
|
|
39772
|
+
};
|
|
39773
|
+
return (() => {
|
|
39774
|
+
var _el$73 = createElement("text"), _el$74 = createElement("span");
|
|
39775
|
+
insertNode(_el$73, _el$74);
|
|
39776
|
+
setProp(_el$73, "wrapMode", "none");
|
|
39777
|
+
insert(_el$74, () => props.row.name);
|
|
39778
|
+
insert(_el$73, createComponent2(Show, {
|
|
39779
|
+
get when() {
|
|
39780
|
+
return summary().length > 0;
|
|
39781
|
+
},
|
|
39782
|
+
get children() {
|
|
39783
|
+
var _el$75 = createElement("span");
|
|
39784
|
+
insert(_el$75, () => ` \xB7 ${summary()}`);
|
|
39785
|
+
effect((_$p) => setProp(_el$75, "style", {
|
|
39786
|
+
fg: theme.textMuted
|
|
39787
|
+
}, _$p));
|
|
39788
|
+
return _el$75;
|
|
39789
|
+
}
|
|
39790
|
+
}), null);
|
|
39791
|
+
effect((_p$) => {
|
|
39792
|
+
var _v$33 = theme.text, _v$34 = {
|
|
39793
|
+
attributes: TextAttributes31.BOLD
|
|
39794
|
+
};
|
|
39795
|
+
_v$33 !== _p$.e && (_p$.e = setProp(_el$73, "fg", _v$33, _p$.e));
|
|
39796
|
+
_v$34 !== _p$.t && (_p$.t = setProp(_el$74, "style", _v$34, _p$.t));
|
|
39797
|
+
return _p$;
|
|
39798
|
+
}, {
|
|
39799
|
+
e: undefined,
|
|
39800
|
+
t: undefined
|
|
39801
|
+
});
|
|
39802
|
+
return _el$73;
|
|
39803
|
+
})();
|
|
39804
|
+
}
|
|
39398
39805
|
var init_ToolRow = __esm(() => {
|
|
39399
39806
|
init_solid();
|
|
39400
39807
|
init_solid();
|
|
@@ -39407,12 +39814,13 @@ var init_ToolRow = __esm(() => {
|
|
|
39407
39814
|
init_dev();
|
|
39408
39815
|
init_theme();
|
|
39409
39816
|
init_message_figures();
|
|
39817
|
+
init_todo_render();
|
|
39410
39818
|
init_tool_fold();
|
|
39411
39819
|
init_tool_registry();
|
|
39412
39820
|
});
|
|
39413
39821
|
|
|
39414
39822
|
// src/tui/panes/chat/UserInputRows.tsx
|
|
39415
|
-
import { TextAttributes as
|
|
39823
|
+
import { TextAttributes as TextAttributes32 } from "@opentui/core";
|
|
39416
39824
|
function ApprovalRow(props) {
|
|
39417
39825
|
const {
|
|
39418
39826
|
theme
|
|
@@ -39491,7 +39899,7 @@ function ApprovalRow(props) {
|
|
|
39491
39899
|
insertNode(_el$12, _el$14);
|
|
39492
39900
|
insert(_el$12, () => r2().status, _el$14);
|
|
39493
39901
|
effect((_p$) => {
|
|
39494
|
-
var _v$9 = r2().status === "approved" ? theme.success : theme.error, _v$0 =
|
|
39902
|
+
var _v$9 = r2().status === "approved" ? theme.success : theme.error, _v$0 = TextAttributes32.BOLD;
|
|
39495
39903
|
_v$9 !== _p$.e && (_p$.e = setProp(_el$12, "fg", _v$9, _p$.e));
|
|
39496
39904
|
_v$0 !== _p$.t && (_p$.t = setProp(_el$12, "attributes", _v$0, _p$.t));
|
|
39497
39905
|
return _p$;
|
|
@@ -39508,7 +39916,7 @@ function ApprovalRow(props) {
|
|
|
39508
39916
|
insertNode(_el$0, createTextNode(`[ Approve ]`));
|
|
39509
39917
|
setProp(_el$0, "onMouseUp", () => props.onApprove(true));
|
|
39510
39918
|
effect((_p$) => {
|
|
39511
|
-
var _v$ = theme.success, _v$2 =
|
|
39919
|
+
var _v$ = theme.success, _v$2 = TextAttributes32.BOLD;
|
|
39512
39920
|
_v$ !== _p$.e && (_p$.e = setProp(_el$0, "fg", _v$, _p$.e));
|
|
39513
39921
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$0, "attributes", _v$2, _p$.t));
|
|
39514
39922
|
return _p$;
|
|
@@ -39522,7 +39930,7 @@ function ApprovalRow(props) {
|
|
|
39522
39930
|
insertNode(_el$10, createTextNode(`[ Reject ]`));
|
|
39523
39931
|
setProp(_el$10, "onMouseUp", () => props.onApprove(false));
|
|
39524
39932
|
effect((_p$) => {
|
|
39525
|
-
var _v$3 = theme.error, _v$4 =
|
|
39933
|
+
var _v$3 = theme.error, _v$4 = TextAttributes32.BOLD;
|
|
39526
39934
|
_v$3 !== _p$.e && (_p$.e = setProp(_el$10, "fg", _v$3, _p$.e));
|
|
39527
39935
|
_v$4 !== _p$.t && (_p$.t = setProp(_el$10, "attributes", _v$4, _p$.t));
|
|
39528
39936
|
return _p$;
|
|
@@ -39535,7 +39943,7 @@ function ApprovalRow(props) {
|
|
|
39535
39943
|
}
|
|
39536
39944
|
}));
|
|
39537
39945
|
effect((_p$) => {
|
|
39538
|
-
var _v$5 = headerColor(), _v$6 =
|
|
39946
|
+
var _v$5 = headerColor(), _v$6 = TextAttributes32.BOLD, _v$7 = headerColor(), _v$8 = TextAttributes32.BOLD;
|
|
39539
39947
|
_v$5 !== _p$.e && (_p$.e = setProp(_el$3, "fg", _v$5, _p$.e));
|
|
39540
39948
|
_v$6 !== _p$.t && (_p$.t = setProp(_el$3, "attributes", _v$6, _p$.t));
|
|
39541
39949
|
_v$7 !== _p$.a && (_p$.a = setProp(_el$4, "fg", _v$7, _p$.a));
|
|
@@ -39754,7 +40162,7 @@ function QuestionRow(props) {
|
|
|
39754
40162
|
insertNode(_el$25, _el$27);
|
|
39755
40163
|
insert(_el$25, () => q2.header, _el$27);
|
|
39756
40164
|
effect((_p$) => {
|
|
39757
|
-
var _v$15 = theme.accent, _v$16 =
|
|
40165
|
+
var _v$15 = theme.accent, _v$16 = TextAttributes32.BOLD;
|
|
39758
40166
|
_v$15 !== _p$.e && (_p$.e = setProp(_el$25, "fg", _v$15, _p$.e));
|
|
39759
40167
|
_v$16 !== _p$.t && (_p$.t = setProp(_el$25, "attributes", _v$16, _p$.t));
|
|
39760
40168
|
return _p$;
|
|
@@ -39868,7 +40276,7 @@ function QuestionRow(props) {
|
|
|
39868
40276
|
}
|
|
39869
40277
|
}), null);
|
|
39870
40278
|
effect((_p$) => {
|
|
39871
|
-
var _v$21 = isHl() ? theme.accent : theme.textMuted, _v$22 =
|
|
40279
|
+
var _v$21 = isHl() ? theme.accent : theme.textMuted, _v$22 = TextAttributes32.BOLD, _v$23 = theme.textMuted, _v$24 = isPicked() ? theme.accent : theme.textMuted, _v$25 = TextAttributes32.BOLD, _v$26 = theme.text;
|
|
39872
40280
|
_v$21 !== _p$.e && (_p$.e = setProp(_el$43, "fg", _v$21, _p$.e));
|
|
39873
40281
|
_v$22 !== _p$.t && (_p$.t = setProp(_el$43, "attributes", _v$22, _p$.t));
|
|
39874
40282
|
_v$23 !== _p$.a && (_p$.a = setProp(_el$44, "fg", _v$23, _p$.a));
|
|
@@ -39913,7 +40321,7 @@ function QuestionRow(props) {
|
|
|
39913
40321
|
insertNode(_el$54, createTextNode(`Other`));
|
|
39914
40322
|
insertNode(_el$56, createTextNode(`Type your own answer`));
|
|
39915
40323
|
effect((_p$) => {
|
|
39916
|
-
var _v$27 = isOtherHl() ? theme.accent : theme.textMuted, _v$28 =
|
|
40324
|
+
var _v$27 = isOtherHl() ? theme.accent : theme.textMuted, _v$28 = TextAttributes32.BOLD, _v$29 = theme.textMuted, _v$30 = otherPicked() ? theme.accent : theme.textMuted, _v$31 = TextAttributes32.BOLD, _v$32 = theme.text, _v$33 = theme.textMuted;
|
|
39917
40325
|
_v$27 !== _p$.e && (_p$.e = setProp(_el$50, "fg", _v$27, _p$.e));
|
|
39918
40326
|
_v$28 !== _p$.t && (_p$.t = setProp(_el$50, "attributes", _v$28, _p$.t));
|
|
39919
40327
|
_v$29 !== _p$.a && (_p$.a = setProp(_el$51, "fg", _v$29, _p$.a));
|
|
@@ -39969,7 +40377,7 @@ function QuestionRow(props) {
|
|
|
39969
40377
|
}
|
|
39970
40378
|
}), null);
|
|
39971
40379
|
effect((_p$) => {
|
|
39972
|
-
var _v$17 = isQuestionComplete(index()) ? theme.success : theme.textMuted, _v$18 =
|
|
40380
|
+
var _v$17 = isQuestionComplete(index()) ? theme.success : theme.textMuted, _v$18 = TextAttributes32.BOLD;
|
|
39973
40381
|
_v$17 !== _p$.e && (_p$.e = setProp(_el$39, "fg", _v$17, _p$.e));
|
|
39974
40382
|
_v$18 !== _p$.t && (_p$.t = setProp(_el$39, "attributes", _v$18, _p$.t));
|
|
39975
40383
|
return _p$;
|
|
@@ -40005,7 +40413,7 @@ function QuestionRow(props) {
|
|
|
40005
40413
|
setProp(_el$20, "paddingTop", 1);
|
|
40006
40414
|
insertNode(_el$21, createTextNode(`[submitted]`));
|
|
40007
40415
|
effect((_p$) => {
|
|
40008
|
-
var _v$1 = theme.success, _v$10 =
|
|
40416
|
+
var _v$1 = theme.success, _v$10 = TextAttributes32.BOLD;
|
|
40009
40417
|
_v$1 !== _p$.e && (_p$.e = setProp(_el$21, "fg", _v$1, _p$.e));
|
|
40010
40418
|
_v$10 !== _p$.t && (_p$.t = setProp(_el$21, "attributes", _v$10, _p$.t));
|
|
40011
40419
|
return _p$;
|
|
@@ -40017,7 +40425,7 @@ function QuestionRow(props) {
|
|
|
40017
40425
|
}
|
|
40018
40426
|
}), null);
|
|
40019
40427
|
effect((_p$) => {
|
|
40020
|
-
var _v$11 = theme.warning, _v$12 =
|
|
40428
|
+
var _v$11 = theme.warning, _v$12 = TextAttributes32.BOLD, _v$13 = theme.warning, _v$14 = TextAttributes32.BOLD;
|
|
40021
40429
|
_v$11 !== _p$.e && (_p$.e = setProp(_el$17, "fg", _v$11, _p$.e));
|
|
40022
40430
|
_v$12 !== _p$.t && (_p$.t = setProp(_el$17, "attributes", _v$12, _p$.t));
|
|
40023
40431
|
_v$13 !== _p$.a && (_p$.a = setProp(_el$19, "fg", _v$13, _p$.a));
|
|
@@ -40144,6 +40552,12 @@ function MessageList(props) {
|
|
|
40144
40552
|
return row.text;
|
|
40145
40553
|
}
|
|
40146
40554
|
});
|
|
40555
|
+
if (row.kind === "recap")
|
|
40556
|
+
return createComponent2(RecapRow, {
|
|
40557
|
+
get text() {
|
|
40558
|
+
return row.text;
|
|
40559
|
+
}
|
|
40560
|
+
});
|
|
40147
40561
|
if (row.kind === "bash")
|
|
40148
40562
|
return createComponent2(BashRow, {
|
|
40149
40563
|
row
|
|
@@ -40172,6 +40586,9 @@ function MessageList(props) {
|
|
|
40172
40586
|
get expanded() {
|
|
40173
40587
|
return props.expandedToolIndex === i2;
|
|
40174
40588
|
},
|
|
40589
|
+
get roundedItems() {
|
|
40590
|
+
return props.roundedSnapshots.get(i2);
|
|
40591
|
+
},
|
|
40175
40592
|
onToggle: () => props.onToggleTool(i2)
|
|
40176
40593
|
});
|
|
40177
40594
|
}
|
|
@@ -40197,10 +40614,164 @@ var init_MessageList = __esm(() => {
|
|
|
40197
40614
|
init_tool_registry();
|
|
40198
40615
|
});
|
|
40199
40616
|
|
|
40617
|
+
// src/tui/panes/chat/TodoStatusLine.tsx
|
|
40618
|
+
import { TextAttributes as TextAttributes33 } from "@opentui/core";
|
|
40619
|
+
function TodoStatusLine(props) {
|
|
40620
|
+
const {
|
|
40621
|
+
theme
|
|
40622
|
+
} = useTheme();
|
|
40623
|
+
const items = createMemo(() => {
|
|
40624
|
+
props.messages;
|
|
40625
|
+
const snapshots = props.roundedSnapshots;
|
|
40626
|
+
let latest = [];
|
|
40627
|
+
for (const entry of snapshots.values())
|
|
40628
|
+
latest = entry;
|
|
40629
|
+
return latest;
|
|
40630
|
+
});
|
|
40631
|
+
const allDone = createMemo(() => {
|
|
40632
|
+
const list = items();
|
|
40633
|
+
if (list.length === 0)
|
|
40634
|
+
return false;
|
|
40635
|
+
return list.every((t2) => t2.status === "completed" || t2.status === "deleted");
|
|
40636
|
+
});
|
|
40637
|
+
const [graceExpired, setGraceExpired] = createSignal(false);
|
|
40638
|
+
createEffect(() => {
|
|
40639
|
+
if (!allDone()) {
|
|
40640
|
+
setGraceExpired(false);
|
|
40641
|
+
return;
|
|
40642
|
+
}
|
|
40643
|
+
setGraceExpired(false);
|
|
40644
|
+
const handle = setTimeout(() => setGraceExpired(true), ALL_DONE_GRACE_MS);
|
|
40645
|
+
onCleanup(() => clearTimeout(handle));
|
|
40646
|
+
});
|
|
40647
|
+
const visible = () => items().length > 0 && !(allDone() && graceExpired());
|
|
40648
|
+
const sortedItems = createMemo(() => {
|
|
40649
|
+
return [...items()].sort((a2, b2) => {
|
|
40650
|
+
const an = Number.parseInt(a2.key, 10);
|
|
40651
|
+
const bn = Number.parseInt(b2.key, 10);
|
|
40652
|
+
if (!Number.isNaN(an) && !Number.isNaN(bn))
|
|
40653
|
+
return an - bn;
|
|
40654
|
+
return a2.key.localeCompare(b2.key);
|
|
40655
|
+
});
|
|
40656
|
+
});
|
|
40657
|
+
const counts = createMemo(() => countTodos(items()));
|
|
40658
|
+
const cleanText = (item) => item.displayText.replace(/\s+\[#[^\]]+\]\s*$/, "");
|
|
40659
|
+
const iconColor = (status) => status === "completed" ? theme.success : status === "in_progress" ? theme.accent : status === "deleted" ? theme.error : theme.text;
|
|
40660
|
+
const subjectAttrs = (status) => {
|
|
40661
|
+
if (status === "completed" || status === "deleted")
|
|
40662
|
+
return TextAttributes33.DIM | TextAttributes33.STRIKETHROUGH;
|
|
40663
|
+
if (status === "in_progress")
|
|
40664
|
+
return TextAttributes33.BOLD;
|
|
40665
|
+
return TextAttributes33.NONE;
|
|
40666
|
+
};
|
|
40667
|
+
return createComponent2(Show, {
|
|
40668
|
+
get when() {
|
|
40669
|
+
return visible();
|
|
40670
|
+
},
|
|
40671
|
+
get children() {
|
|
40672
|
+
var _el$ = createElement("box"), _el$2 = createElement("text"), _el$3 = createElement("span"), _el$4 = createTextNode(` tasks (`), _el$5 = createElement("span"), _el$6 = createTextNode(` done, `), _el$8 = createElement("span"), _el$9 = createTextNode(` open)`);
|
|
40673
|
+
insertNode(_el$, _el$2);
|
|
40674
|
+
setProp(_el$, "flexDirection", "column");
|
|
40675
|
+
setProp(_el$, "flexShrink", 0);
|
|
40676
|
+
setProp(_el$, "paddingLeft", 2);
|
|
40677
|
+
setProp(_el$, "paddingTop", 1);
|
|
40678
|
+
insertNode(_el$2, _el$3);
|
|
40679
|
+
insertNode(_el$2, _el$4);
|
|
40680
|
+
insertNode(_el$2, _el$5);
|
|
40681
|
+
insertNode(_el$2, _el$6);
|
|
40682
|
+
insertNode(_el$2, _el$8);
|
|
40683
|
+
insertNode(_el$2, _el$9);
|
|
40684
|
+
insert(_el$3, () => counts().total);
|
|
40685
|
+
insert(_el$5, () => counts().done);
|
|
40686
|
+
insert(_el$2, createComponent2(Show, {
|
|
40687
|
+
get when() {
|
|
40688
|
+
return counts().inProgress > 0;
|
|
40689
|
+
},
|
|
40690
|
+
get children() {
|
|
40691
|
+
return [(() => {
|
|
40692
|
+
var _el$7 = createElement("span");
|
|
40693
|
+
insert(_el$7, () => counts().inProgress);
|
|
40694
|
+
effect((_$p) => setProp(_el$7, "style", {
|
|
40695
|
+
attributes: TextAttributes33.BOLD
|
|
40696
|
+
}, _$p));
|
|
40697
|
+
return _el$7;
|
|
40698
|
+
})(), " in progress, "];
|
|
40699
|
+
}
|
|
40700
|
+
}), _el$8);
|
|
40701
|
+
insert(_el$8, () => counts().pending);
|
|
40702
|
+
insert(_el$, createComponent2(For, {
|
|
40703
|
+
get each() {
|
|
40704
|
+
return sortedItems();
|
|
40705
|
+
},
|
|
40706
|
+
children: (t2) => (() => {
|
|
40707
|
+
var _el$0 = createElement("box"), _el$1 = createElement("box"), _el$10 = createElement("text"), _el$11 = createElement("box"), _el$12 = createElement("text");
|
|
40708
|
+
insertNode(_el$0, _el$1);
|
|
40709
|
+
insertNode(_el$0, _el$11);
|
|
40710
|
+
setProp(_el$0, "flexDirection", "row");
|
|
40711
|
+
setProp(_el$0, "gap", 1);
|
|
40712
|
+
insertNode(_el$1, _el$10);
|
|
40713
|
+
setProp(_el$1, "width", 1);
|
|
40714
|
+
setProp(_el$1, "height", 1);
|
|
40715
|
+
insert(_el$10, () => TODO_GLYPH[t2.status]);
|
|
40716
|
+
insertNode(_el$11, _el$12);
|
|
40717
|
+
setProp(_el$11, "flexGrow", 1);
|
|
40718
|
+
insert(_el$12, () => cleanText(t2));
|
|
40719
|
+
effect((_p$) => {
|
|
40720
|
+
var _v$5 = iconColor(t2.status), _v$6 = t2.status === "pending" ? theme.text : iconColor(t2.status), _v$7 = subjectAttrs(t2.status);
|
|
40721
|
+
_v$5 !== _p$.e && (_p$.e = setProp(_el$10, "fg", _v$5, _p$.e));
|
|
40722
|
+
_v$6 !== _p$.t && (_p$.t = setProp(_el$12, "fg", _v$6, _p$.t));
|
|
40723
|
+
_v$7 !== _p$.a && (_p$.a = setProp(_el$12, "attributes", _v$7, _p$.a));
|
|
40724
|
+
return _p$;
|
|
40725
|
+
}, {
|
|
40726
|
+
e: undefined,
|
|
40727
|
+
t: undefined,
|
|
40728
|
+
a: undefined
|
|
40729
|
+
});
|
|
40730
|
+
return _el$0;
|
|
40731
|
+
})()
|
|
40732
|
+
}), null);
|
|
40733
|
+
effect((_p$) => {
|
|
40734
|
+
var _v$ = theme.textMuted, _v$2 = {
|
|
40735
|
+
attributes: TextAttributes33.BOLD
|
|
40736
|
+
}, _v$3 = {
|
|
40737
|
+
attributes: TextAttributes33.BOLD
|
|
40738
|
+
}, _v$4 = {
|
|
40739
|
+
attributes: TextAttributes33.BOLD
|
|
40740
|
+
};
|
|
40741
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$2, "fg", _v$, _p$.e));
|
|
40742
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "style", _v$2, _p$.t));
|
|
40743
|
+
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "style", _v$3, _p$.a));
|
|
40744
|
+
_v$4 !== _p$.o && (_p$.o = setProp(_el$8, "style", _v$4, _p$.o));
|
|
40745
|
+
return _p$;
|
|
40746
|
+
}, {
|
|
40747
|
+
e: undefined,
|
|
40748
|
+
t: undefined,
|
|
40749
|
+
a: undefined,
|
|
40750
|
+
o: undefined
|
|
40751
|
+
});
|
|
40752
|
+
return _el$;
|
|
40753
|
+
}
|
|
40754
|
+
});
|
|
40755
|
+
}
|
|
40756
|
+
var ALL_DONE_GRACE_MS = 5000;
|
|
40757
|
+
var init_TodoStatusLine = __esm(() => {
|
|
40758
|
+
init_solid();
|
|
40759
|
+
init_solid();
|
|
40760
|
+
init_solid();
|
|
40761
|
+
init_solid();
|
|
40762
|
+
init_solid();
|
|
40763
|
+
init_solid();
|
|
40764
|
+
init_solid();
|
|
40765
|
+
init_dev();
|
|
40766
|
+
init_theme();
|
|
40767
|
+
init_todo_render();
|
|
40768
|
+
});
|
|
40769
|
+
|
|
40200
40770
|
// src/tui/panes/chat/ChatView.tsx
|
|
40201
|
-
import { TextAttributes as
|
|
40771
|
+
import { TextAttributes as TextAttributes34 } from "@opentui/core";
|
|
40202
40772
|
function ChatView(props) {
|
|
40203
40773
|
const theme = props.theme;
|
|
40774
|
+
const roundedSnapshots = createMemo(() => computeRoundedSnapshots(props.messages));
|
|
40204
40775
|
return (() => {
|
|
40205
40776
|
var _el$ = createElement("box");
|
|
40206
40777
|
setProp(_el$, "flexGrow", 1);
|
|
@@ -40240,6 +40811,9 @@ function ChatView(props) {
|
|
|
40240
40811
|
get messages() {
|
|
40241
40812
|
return props.messages;
|
|
40242
40813
|
},
|
|
40814
|
+
get roundedSnapshots() {
|
|
40815
|
+
return roundedSnapshots();
|
|
40816
|
+
},
|
|
40243
40817
|
get expandedToolIndex() {
|
|
40244
40818
|
return props.expandedToolIndex;
|
|
40245
40819
|
},
|
|
@@ -40267,7 +40841,37 @@ function ChatView(props) {
|
|
|
40267
40841
|
get chatFocused() {
|
|
40268
40842
|
return props.chatFocused;
|
|
40269
40843
|
}
|
|
40270
|
-
}));
|
|
40844
|
+
}), null);
|
|
40845
|
+
insert(_el$6, createComponent2(Show, {
|
|
40846
|
+
get when() {
|
|
40847
|
+
return memo2(() => !!props.showThinking)() && props.hasTaskId;
|
|
40848
|
+
},
|
|
40849
|
+
get children() {
|
|
40850
|
+
return createComponent2(Loading, {
|
|
40851
|
+
get startedAt() {
|
|
40852
|
+
return props.loadingStartedAt;
|
|
40853
|
+
},
|
|
40854
|
+
get responseChars() {
|
|
40855
|
+
return props.currentTurnChars;
|
|
40856
|
+
}
|
|
40857
|
+
});
|
|
40858
|
+
}
|
|
40859
|
+
}), null);
|
|
40860
|
+
insert(_el$6, createComponent2(Show, {
|
|
40861
|
+
get when() {
|
|
40862
|
+
return props.hasTaskId;
|
|
40863
|
+
},
|
|
40864
|
+
get children() {
|
|
40865
|
+
return createComponent2(TodoStatusLine, {
|
|
40866
|
+
get messages() {
|
|
40867
|
+
return props.messages;
|
|
40868
|
+
},
|
|
40869
|
+
get roundedSnapshots() {
|
|
40870
|
+
return roundedSnapshots();
|
|
40871
|
+
}
|
|
40872
|
+
});
|
|
40873
|
+
}
|
|
40874
|
+
}), null);
|
|
40271
40875
|
effect((_$p) => setProp(_el$5, "verticalScrollbarOptions", {
|
|
40272
40876
|
trackOptions: {
|
|
40273
40877
|
backgroundColor: theme.background,
|
|
@@ -40277,21 +40881,6 @@ function ChatView(props) {
|
|
|
40277
40881
|
return _el$5;
|
|
40278
40882
|
}
|
|
40279
40883
|
}), null);
|
|
40280
|
-
insert(_el$, createComponent2(Show, {
|
|
40281
|
-
get when() {
|
|
40282
|
-
return memo2(() => !!props.showThinking)() && props.hasTaskId;
|
|
40283
|
-
},
|
|
40284
|
-
get children() {
|
|
40285
|
-
return createComponent2(Loading, {
|
|
40286
|
-
get startedAt() {
|
|
40287
|
-
return props.loadingStartedAt;
|
|
40288
|
-
},
|
|
40289
|
-
get responseChars() {
|
|
40290
|
-
return props.currentTurnChars;
|
|
40291
|
-
}
|
|
40292
|
-
});
|
|
40293
|
-
}
|
|
40294
|
-
}), null);
|
|
40295
40884
|
insert(_el$, createComponent2(Show, {
|
|
40296
40885
|
get when() {
|
|
40297
40886
|
return props.error;
|
|
@@ -40313,7 +40902,7 @@ function ChatView(props) {
|
|
|
40313
40902
|
setProp(_el$10, "wrapMode", "none");
|
|
40314
40903
|
insert(_el$10, err);
|
|
40315
40904
|
effect((_p$) => {
|
|
40316
|
-
var { backgroundElement: _v$, warning: _v$2 } = theme, _v$3 =
|
|
40905
|
+
var { backgroundElement: _v$, warning: _v$2 } = theme, _v$3 = TextAttributes34.BOLD, _v$4 = theme.warning, _v$5 = theme.textMuted;
|
|
40317
40906
|
_v$ !== _p$.e && (_p$.e = setProp(_el$7, "backgroundColor", _v$, _p$.e));
|
|
40318
40907
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$8, "fg", _v$2, _p$.t));
|
|
40319
40908
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$8, "attributes", _v$3, _p$.a));
|
|
@@ -40330,21 +40919,6 @@ function ChatView(props) {
|
|
|
40330
40919
|
return _el$7;
|
|
40331
40920
|
})()
|
|
40332
40921
|
}), null);
|
|
40333
|
-
insert(_el$, createComponent2(Show, {
|
|
40334
|
-
get when() {
|
|
40335
|
-
return memo2(() => !!(props.hasTaskId && props.backgroundRows))() && props.onOpenBackgroundTasks;
|
|
40336
|
-
},
|
|
40337
|
-
get children() {
|
|
40338
|
-
return createComponent2(BackgroundRunsLine, {
|
|
40339
|
-
get rows() {
|
|
40340
|
-
return props.backgroundRows;
|
|
40341
|
-
},
|
|
40342
|
-
get onActivate() {
|
|
40343
|
-
return props.onOpenBackgroundTasks;
|
|
40344
|
-
}
|
|
40345
|
-
});
|
|
40346
|
-
}
|
|
40347
|
-
}), null);
|
|
40348
40922
|
insert(_el$, createComponent2(Show, {
|
|
40349
40923
|
get when() {
|
|
40350
40924
|
return props.showComposer;
|
|
@@ -40449,10 +41023,12 @@ var init_ChatView = __esm(() => {
|
|
|
40449
41023
|
init_solid();
|
|
40450
41024
|
init_solid();
|
|
40451
41025
|
init_dev();
|
|
40452
|
-
|
|
41026
|
+
init_dev();
|
|
40453
41027
|
init_Composer();
|
|
40454
41028
|
init_Loading();
|
|
40455
41029
|
init_MessageList();
|
|
41030
|
+
init_TodoStatusLine();
|
|
41031
|
+
init_todo_render();
|
|
40456
41032
|
});
|
|
40457
41033
|
|
|
40458
41034
|
// src/tui/panes/chat/chat-utils.ts
|
|
@@ -40502,7 +41078,7 @@ function stringifyErr5(err) {
|
|
|
40502
41078
|
}
|
|
40503
41079
|
|
|
40504
41080
|
// src/tui/panes/chat/composer/ModelPicker.tsx
|
|
40505
|
-
import { TextAttributes as
|
|
41081
|
+
import { TextAttributes as TextAttributes35 } from "@opentui/core";
|
|
40506
41082
|
function ModelPicker(props) {
|
|
40507
41083
|
const dialog = useDialog();
|
|
40508
41084
|
const {
|
|
@@ -40693,7 +41269,7 @@ function ModelPicker(props) {
|
|
|
40693
41269
|
})() : null;
|
|
40694
41270
|
})(), null);
|
|
40695
41271
|
effect((_p$) => {
|
|
40696
|
-
var _v$8 = active() ? theme.primary : undefined, _v$9 = active() ? theme.selectedListItemText : theme.text, _v$0 = active() ?
|
|
41272
|
+
var _v$8 = active() ? theme.primary : undefined, _v$9 = active() ? theme.selectedListItemText : theme.text, _v$0 = active() ? TextAttributes35.BOLD : undefined;
|
|
40697
41273
|
_v$8 !== _p$.e && (_p$.e = setProp(_el$11, "backgroundColor", _v$8, _p$.e));
|
|
40698
41274
|
_v$9 !== _p$.t && (_p$.t = setProp(_el$12, "fg", _v$9, _p$.t));
|
|
40699
41275
|
_v$0 !== _p$.a && (_p$.a = setProp(_el$12, "attributes", _v$0, _p$.a));
|
|
@@ -40708,7 +41284,7 @@ function ModelPicker(props) {
|
|
|
40708
41284
|
}
|
|
40709
41285
|
}), null);
|
|
40710
41286
|
effect((_p$) => {
|
|
40711
|
-
var { textMuted: _v$5, text: _v$6 } = theme, _v$7 =
|
|
41287
|
+
var { textMuted: _v$5, text: _v$6 } = theme, _v$7 = TextAttributes35.BOLD;
|
|
40712
41288
|
_v$5 !== _p$.e && (_p$.e = setProp(_el$0, "fg", _v$5, _p$.e));
|
|
40713
41289
|
_v$6 !== _p$.t && (_p$.t = setProp(_el$10, "fg", _v$6, _p$.t));
|
|
40714
41290
|
_v$7 !== _p$.a && (_p$.a = setProp(_el$10, "attributes", _v$7, _p$.a));
|
|
@@ -40788,7 +41364,7 @@ function ModelPicker(props) {
|
|
|
40788
41364
|
})() : null;
|
|
40789
41365
|
})(), null);
|
|
40790
41366
|
effect((_p$) => {
|
|
40791
|
-
var _v$1 = active() && !disabled() ? theme.primary : undefined, _v$10 = active() && !disabled() ? theme.selectedListItemText : disabled() ? theme.textMuted : theme.text, _v$11 = active() && !disabled() ?
|
|
41367
|
+
var _v$1 = active() && !disabled() ? theme.primary : undefined, _v$10 = active() && !disabled() ? theme.selectedListItemText : disabled() ? theme.textMuted : theme.text, _v$11 = active() && !disabled() ? TextAttributes35.BOLD : undefined, _v$12 = active() && !disabled() ? theme.selectedListItemText : theme.textMuted;
|
|
40792
41368
|
_v$1 !== _p$.e && (_p$.e = setProp(_el$15, "backgroundColor", _v$1, _p$.e));
|
|
40793
41369
|
_v$10 !== _p$.t && (_p$.t = setProp(_el$16, "fg", _v$10, _p$.t));
|
|
40794
41370
|
_v$11 !== _p$.a && (_p$.a = setProp(_el$16, "attributes", _v$11, _p$.a));
|
|
@@ -40811,7 +41387,7 @@ function ModelPicker(props) {
|
|
|
40811
41387
|
setProp(_el$6, "paddingBottom", 1);
|
|
40812
41388
|
insert(_el$7, () => inEffortStep() ? "\u2191\u2193 pick \xB7 enter select \xB7 h back \xB7 esc cancel" : "\u2191\u2193 pick \xB7 enter select \xB7 esc cancel");
|
|
40813
41389
|
effect((_p$) => {
|
|
40814
|
-
var _v$ =
|
|
41390
|
+
var _v$ = TextAttributes35.BOLD, _v$2 = theme.text, _v$3 = theme.textMuted, _v$4 = theme.textMuted;
|
|
40815
41391
|
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$, _p$.e));
|
|
40816
41392
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$2, _p$.t));
|
|
40817
41393
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$4, "fg", _v$3, _p$.a));
|
|
@@ -41289,6 +41865,11 @@ function applyEvent(state, ev, nowIso = new Date().toISOString()) {
|
|
|
41289
41865
|
};
|
|
41290
41866
|
case "chat.tab.cleared":
|
|
41291
41867
|
return createInitialState();
|
|
41868
|
+
case "recap":
|
|
41869
|
+
return {
|
|
41870
|
+
...state,
|
|
41871
|
+
messages: capMessages([...state.messages, { kind: "recap", text: ev.text, ts: nowIso }], nowIso)
|
|
41872
|
+
};
|
|
41292
41873
|
case "user_input.request": {
|
|
41293
41874
|
if (ev.payload.kind === "approve_plan") {
|
|
41294
41875
|
return {
|
|
@@ -41654,6 +42235,18 @@ var init_use_bash_mode = __esm(() => {
|
|
|
41654
42235
|
});
|
|
41655
42236
|
|
|
41656
42237
|
// src/tui/panes/chat/use-chat-session.ts
|
|
42238
|
+
function hasRecapSinceLastUserTurn(messages) {
|
|
42239
|
+
for (let i2 = messages.length - 1;i2 >= 0; i2--) {
|
|
42240
|
+
const r2 = messages[i2];
|
|
42241
|
+
if (r2 === undefined)
|
|
42242
|
+
continue;
|
|
42243
|
+
if (r2.kind === "user")
|
|
42244
|
+
return false;
|
|
42245
|
+
if (r2.kind === "recap")
|
|
42246
|
+
return true;
|
|
42247
|
+
}
|
|
42248
|
+
return false;
|
|
42249
|
+
}
|
|
41657
42250
|
function useChatSession(opts) {
|
|
41658
42251
|
const { orchestrator, onTaskReset } = opts;
|
|
41659
42252
|
const [activeTabId, setActiveTabIdLocal] = createSignal(null);
|
|
@@ -41781,6 +42374,11 @@ function useChatSession(opts) {
|
|
|
41781
42374
|
next.delete(tabId);
|
|
41782
42375
|
return next;
|
|
41783
42376
|
});
|
|
42377
|
+
const pendingTimer = recapTimers.get(tabId);
|
|
42378
|
+
if (pendingTimer) {
|
|
42379
|
+
clearTimeout(pendingTimer);
|
|
42380
|
+
recapTimers.delete(tabId);
|
|
42381
|
+
}
|
|
41784
42382
|
}
|
|
41785
42383
|
}
|
|
41786
42384
|
createEffect(() => {
|
|
@@ -41811,6 +42409,38 @@ function useChatSession(opts) {
|
|
|
41811
42409
|
}
|
|
41812
42410
|
syncTabSubs(id, live.tabs);
|
|
41813
42411
|
});
|
|
42412
|
+
let prevActiveTabIdForRecap = null;
|
|
42413
|
+
createEffect(() => {
|
|
42414
|
+
const incoming = activeTabId();
|
|
42415
|
+
const prev = prevActiveTabIdForRecap;
|
|
42416
|
+
if (incoming !== null && incoming !== prev) {
|
|
42417
|
+
const t2 = recapTimers.get(incoming);
|
|
42418
|
+
if (t2) {
|
|
42419
|
+
clearTimeout(t2);
|
|
42420
|
+
recapTimers.delete(incoming);
|
|
42421
|
+
}
|
|
42422
|
+
}
|
|
42423
|
+
if (prev !== null && prev !== incoming) {
|
|
42424
|
+
const leftTabId = prev;
|
|
42425
|
+
const existing = recapTimers.get(leftTabId);
|
|
42426
|
+
if (existing)
|
|
42427
|
+
clearTimeout(existing);
|
|
42428
|
+
const timer = setTimeout(() => {
|
|
42429
|
+
recapTimers.delete(leftTabId);
|
|
42430
|
+
const owningTask = orchestrator.tasksSignal()().find((t2) => t2.tabs.some((tb) => tb.id === leftTabId));
|
|
42431
|
+
if (!owningTask)
|
|
42432
|
+
return;
|
|
42433
|
+
const liveState = statesByTab().get(leftTabId);
|
|
42434
|
+
if (liveState?.isStreaming)
|
|
42435
|
+
return;
|
|
42436
|
+
if (hasRecapSinceLastUserTurn(liveState?.messages ?? []))
|
|
42437
|
+
return;
|
|
42438
|
+
orchestrator.generateRecap(owningTask.id, leftTabId).catch(() => {});
|
|
42439
|
+
}, RECAP_AUTO_TRIGGER_MS);
|
|
42440
|
+
recapTimers.set(leftTabId, timer);
|
|
42441
|
+
}
|
|
42442
|
+
prevActiveTabIdForRecap = incoming;
|
|
42443
|
+
});
|
|
41814
42444
|
onCleanup(() => {
|
|
41815
42445
|
teardownAllSubs();
|
|
41816
42446
|
});
|
|
@@ -41828,13 +42458,15 @@ function useChatSession(opts) {
|
|
|
41828
42458
|
setDraft
|
|
41829
42459
|
};
|
|
41830
42460
|
}
|
|
41831
|
-
var draftsByTab, setDraftsByTab, statesByTab, setStatesByTab;
|
|
42461
|
+
var draftsByTab, setDraftsByTab, statesByTab, setStatesByTab, RECAP_AUTO_TRIGGER_MS, recapTimers;
|
|
41832
42462
|
var init_use_chat_session = __esm(() => {
|
|
41833
42463
|
init_dev();
|
|
41834
42464
|
init_core();
|
|
41835
42465
|
init_store2();
|
|
41836
42466
|
[draftsByTab, setDraftsByTab] = createSignal(new Map);
|
|
41837
42467
|
[statesByTab, setStatesByTab] = createSignal(new Map);
|
|
42468
|
+
RECAP_AUTO_TRIGGER_MS = 5 * 60000;
|
|
42469
|
+
recapTimers = new Map;
|
|
41838
42470
|
});
|
|
41839
42471
|
|
|
41840
42472
|
// src/tui/component/resume-dialog-labels.ts
|
|
@@ -41846,7 +42478,7 @@ var init_resume_dialog_labels = __esm(() => {
|
|
|
41846
42478
|
});
|
|
41847
42479
|
|
|
41848
42480
|
// src/tui/component/resume-dialog.tsx
|
|
41849
|
-
import { TextAttributes as
|
|
42481
|
+
import { TextAttributes as TextAttributes36 } from "@opentui/core";
|
|
41850
42482
|
function ResumeDialog(props) {
|
|
41851
42483
|
const dialog = useDialog();
|
|
41852
42484
|
const {
|
|
@@ -42002,7 +42634,7 @@ function ResumeDialog(props) {
|
|
|
42002
42634
|
setProp(_el$9, "paddingBottom", 1);
|
|
42003
42635
|
insertNode(_el$0, createTextNode(`j/k or \u2191\u2193 navigate \u2022 enter resume \u2022 esc dismiss`));
|
|
42004
42636
|
effect((_p$) => {
|
|
42005
|
-
var _v$ =
|
|
42637
|
+
var _v$ = TextAttributes36.BOLD, _v$2 = theme.text, _v$3 = theme.textMuted, _v$4 = theme.textMuted;
|
|
42006
42638
|
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$, _p$.e));
|
|
42007
42639
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$2, _p$.t));
|
|
42008
42640
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$3, _p$.a));
|
|
@@ -42180,6 +42812,13 @@ function Chat(props) {
|
|
|
42180
42812
|
onSelect: () => {
|
|
42181
42813
|
send2("/clear");
|
|
42182
42814
|
}
|
|
42815
|
+
}, {
|
|
42816
|
+
display: "/recap",
|
|
42817
|
+
description: "1-3 sentence recap of this tab \u2014 high-level task + next step",
|
|
42818
|
+
source: "builtin",
|
|
42819
|
+
onSelect: () => {
|
|
42820
|
+
send2("/recap");
|
|
42821
|
+
}
|
|
42183
42822
|
}];
|
|
42184
42823
|
return [...kobeEntries, ...engineEntries].sort((a2, b2) => a2.display.localeCompare(b2.display));
|
|
42185
42824
|
});
|
|
@@ -42366,12 +43005,12 @@ function Chat(props) {
|
|
|
42366
43005
|
const inputPlaceholder = createMemo(() => {
|
|
42367
43006
|
return getIdentity(activeVendor()).inputPlaceholder;
|
|
42368
43007
|
});
|
|
42369
|
-
async function chooseModel(
|
|
43008
|
+
async function chooseModel() {
|
|
42370
43009
|
const id = props.taskId();
|
|
42371
43010
|
if (!id)
|
|
42372
43011
|
return;
|
|
42373
43012
|
const tabId = activeTabId() ?? undefined;
|
|
42374
|
-
const lockedVendor =
|
|
43013
|
+
const lockedVendor = activeTabHasSession() ? activeVendor() : undefined;
|
|
42375
43014
|
const result = await ModelPicker.show(dialog, modelId(), modelEffort(), activeVendor(), lockedVendor);
|
|
42376
43015
|
if (result === undefined)
|
|
42377
43016
|
return;
|
|
@@ -42503,7 +43142,15 @@ function Chat(props) {
|
|
|
42503
43142
|
patchActiveState((s2) => pushSystemError(s2, `/clear failed: ${stringifyErr5(err)}`));
|
|
42504
43143
|
return;
|
|
42505
43144
|
}
|
|
42506
|
-
|
|
43145
|
+
return;
|
|
43146
|
+
}
|
|
43147
|
+
if (text === "/recap") {
|
|
43148
|
+
setDraft("");
|
|
43149
|
+
try {
|
|
43150
|
+
await props.orchestrator.generateRecap(taskId, tabId);
|
|
43151
|
+
} catch (err) {
|
|
43152
|
+
patchActiveState((s2) => pushSystemError(s2, `/recap failed: ${stringifyErr5(err)}`));
|
|
43153
|
+
}
|
|
42507
43154
|
return;
|
|
42508
43155
|
}
|
|
42509
43156
|
const streaming = activeState().isStreaming;
|
|
@@ -42783,13 +43430,7 @@ function Chat(props) {
|
|
|
42783
43430
|
onEditQueued: editQueued,
|
|
42784
43431
|
editingQueueId,
|
|
42785
43432
|
taskLabelForHistoryKey,
|
|
42786
|
-
currentProjectRoot
|
|
42787
|
-
get backgroundRows() {
|
|
42788
|
-
return props.backgroundRows;
|
|
42789
|
-
},
|
|
42790
|
-
get onOpenBackgroundTasks() {
|
|
42791
|
-
return props.onOpenBackgroundTasks;
|
|
42792
|
-
}
|
|
43433
|
+
currentProjectRoot
|
|
42793
43434
|
});
|
|
42794
43435
|
}
|
|
42795
43436
|
var init_Chat = __esm(() => {
|
|
@@ -42810,7 +43451,7 @@ var init_Chat = __esm(() => {
|
|
|
42810
43451
|
});
|
|
42811
43452
|
|
|
42812
43453
|
// src/tui/component/sidebar.tsx
|
|
42813
|
-
import { TextAttributes as
|
|
43454
|
+
import { TextAttributes as TextAttributes37 } from "@opentui/core";
|
|
42814
43455
|
function Sidebar(props) {
|
|
42815
43456
|
const {
|
|
42816
43457
|
theme
|
|
@@ -42821,7 +43462,7 @@ function Sidebar(props) {
|
|
|
42821
43462
|
var _el$ = createElement("box"), _el$4 = createElement("scrollbox");
|
|
42822
43463
|
insertNode(_el$, _el$4);
|
|
42823
43464
|
setProp(_el$, "width", 42);
|
|
42824
|
-
setProp(_el$, "
|
|
43465
|
+
setProp(_el$, "flexGrow", 1);
|
|
42825
43466
|
setProp(_el$, "paddingTop", 1);
|
|
42826
43467
|
setProp(_el$, "paddingBottom", 1);
|
|
42827
43468
|
setProp(_el$, "paddingLeft", 2);
|
|
@@ -42836,7 +43477,7 @@ function Sidebar(props) {
|
|
|
42836
43477
|
setProp(_el$2, "paddingBottom", 1);
|
|
42837
43478
|
insert(_el$3, () => props.title);
|
|
42838
43479
|
effect((_p$) => {
|
|
42839
|
-
var _v$ = theme.text, _v$2 =
|
|
43480
|
+
var _v$ = theme.text, _v$2 = TextAttributes37.BOLD;
|
|
42840
43481
|
_v$ !== _p$.e && (_p$.e = setProp(_el$3, "fg", _v$, _p$.e));
|
|
42841
43482
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$3, "attributes", _v$2, _p$.t));
|
|
42842
43483
|
return _p$;
|
|
@@ -43181,7 +43822,7 @@ var init_worktree_changes = __esm(() => {
|
|
|
43181
43822
|
});
|
|
43182
43823
|
|
|
43183
43824
|
// src/tui/panes/sidebar/Sidebar.tsx
|
|
43184
|
-
import { TextAttributes as
|
|
43825
|
+
import { TextAttributes as TextAttributes38 } from "@opentui/core";
|
|
43185
43826
|
function Sidebar2(props) {
|
|
43186
43827
|
const {
|
|
43187
43828
|
theme
|
|
@@ -43229,12 +43870,13 @@ function Sidebar2(props) {
|
|
|
43229
43870
|
onCleanup(() => r2.keyInput.off("keypress", listener2));
|
|
43230
43871
|
});
|
|
43231
43872
|
const [branchTick, setBranchTick] = createSignal(0);
|
|
43232
|
-
|
|
43873
|
+
setInterval(() => setBranchTick((n2) => n2 + 1), MAIN_BRANCH_POLL_MS);
|
|
43233
43874
|
const [spinnerFrame, setSpinnerFrame] = createSignal(0);
|
|
43234
43875
|
const spinnerInterval = setInterval(() => setSpinnerFrame((n2) => (n2 + 1) % IN_PROGRESS_SPINNER.length), SPINNER_FRAME_MS);
|
|
43235
43876
|
onCleanup(() => clearInterval(spinnerInterval));
|
|
43236
43877
|
const rows = createMemo(() => buildRows(props.tasks(), view(), searchMode() ? searchQuery() : ""));
|
|
43237
43878
|
const flatIds = createMemo(() => flattenIds(rows()));
|
|
43879
|
+
const totalRows = createMemo(() => flattenIds(buildRows(props.tasks(), view(), "")).length);
|
|
43238
43880
|
const [cursorIndex, setCursorIndex] = createSignal(-1);
|
|
43239
43881
|
createEffect(on(() => [props.selectedId(), flatIds()], ([id, ids]) => {
|
|
43240
43882
|
const cur = untrack(cursorIndex);
|
|
@@ -43288,11 +43930,11 @@ function Sidebar2(props) {
|
|
|
43288
43930
|
onSearchExit: (select) => exitSearch(select)
|
|
43289
43931
|
});
|
|
43290
43932
|
return (() => {
|
|
43291
|
-
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("text"), _el$
|
|
43933
|
+
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("text"), _el$17 = createElement("box"), _el$18 = createElement("scrollbox"), _el$19 = createElement("box"), _el$22 = createElement("box"), _el$23 = createElement("text");
|
|
43292
43934
|
insertNode(_el$, _el$2);
|
|
43293
|
-
insertNode(_el$, _el$
|
|
43294
|
-
insertNode(_el$, _el$
|
|
43295
|
-
insertNode(_el$, _el$
|
|
43935
|
+
insertNode(_el$, _el$17);
|
|
43936
|
+
insertNode(_el$, _el$18);
|
|
43937
|
+
insertNode(_el$, _el$22);
|
|
43296
43938
|
setProp(_el$, "flexShrink", 0);
|
|
43297
43939
|
setProp(_el$, "flexDirection", "column");
|
|
43298
43940
|
setProp(_el$, "paddingTop", 1);
|
|
@@ -43340,8 +43982,23 @@ function Sidebar2(props) {
|
|
|
43340
43982
|
return _el$11;
|
|
43341
43983
|
}
|
|
43342
43984
|
}), null);
|
|
43985
|
+
insert(_el$7, createComponent2(Show, {
|
|
43986
|
+
get when() {
|
|
43987
|
+
return searchQuery().length > 0;
|
|
43988
|
+
},
|
|
43989
|
+
get children() {
|
|
43990
|
+
var _el$14 = createElement("text"), _el$15 = createTextNode(` `), _el$16 = createTextNode(`/`);
|
|
43991
|
+
insertNode(_el$14, _el$15);
|
|
43992
|
+
insertNode(_el$14, _el$16);
|
|
43993
|
+
setProp(_el$14, "wrapMode", "none");
|
|
43994
|
+
insert(_el$14, () => flatIds().length, _el$16);
|
|
43995
|
+
insert(_el$14, totalRows, null);
|
|
43996
|
+
effect((_$p) => setProp(_el$14, "fg", theme.textMuted, _$p));
|
|
43997
|
+
return _el$14;
|
|
43998
|
+
}
|
|
43999
|
+
}), null);
|
|
43343
44000
|
effect((_p$) => {
|
|
43344
|
-
var { info: _v$, text: _v$2, info: _v$3 } = theme, _v$4 =
|
|
44001
|
+
var { info: _v$, text: _v$2, info: _v$3 } = theme, _v$4 = TextAttributes38.BLINK;
|
|
43345
44002
|
_v$ !== _p$.e && (_p$.e = setProp(_el$8, "fg", _v$, _p$.e));
|
|
43346
44003
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$0, "fg", _v$2, _p$.t));
|
|
43347
44004
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$1, "fg", _v$3, _p$.a));
|
|
@@ -43355,47 +44012,47 @@ function Sidebar2(props) {
|
|
|
43355
44012
|
});
|
|
43356
44013
|
return _el$7;
|
|
43357
44014
|
}
|
|
43358
|
-
}), _el$
|
|
43359
|
-
setProp(_el$
|
|
43360
|
-
setProp(_el$
|
|
43361
|
-
setProp(_el$
|
|
43362
|
-
setProp(_el$
|
|
43363
|
-
insert(_el$
|
|
44015
|
+
}), _el$17);
|
|
44016
|
+
setProp(_el$17, "flexDirection", "row");
|
|
44017
|
+
setProp(_el$17, "gap", 2);
|
|
44018
|
+
setProp(_el$17, "paddingBottom", 1);
|
|
44019
|
+
setProp(_el$17, "paddingLeft", 1);
|
|
44020
|
+
insert(_el$17, createComponent2(For, {
|
|
43364
44021
|
each: VIEW_TABS,
|
|
43365
44022
|
children: (tab) => {
|
|
43366
44023
|
const active = () => view() === tab.view;
|
|
43367
44024
|
return (() => {
|
|
43368
|
-
var _el$
|
|
43369
|
-
setProp(_el$
|
|
43370
|
-
setProp(_el$
|
|
43371
|
-
insert(_el$
|
|
44025
|
+
var _el$25 = createElement("text");
|
|
44026
|
+
setProp(_el$25, "wrapMode", "none");
|
|
44027
|
+
setProp(_el$25, "onMouseUp", () => setView(tab.view));
|
|
44028
|
+
insert(_el$25, (() => {
|
|
43372
44029
|
var _c$2 = memo2(() => !!active());
|
|
43373
44030
|
return () => _c$2() ? `[ ${tab.label} ]` : tab.label;
|
|
43374
44031
|
})());
|
|
43375
44032
|
effect((_p$) => {
|
|
43376
|
-
var _v$1 = active() ? theme.primary : theme.textMuted, _v$10 = active() ?
|
|
43377
|
-
_v$1 !== _p$.e && (_p$.e = setProp(_el$
|
|
43378
|
-
_v$10 !== _p$.t && (_p$.t = setProp(_el$
|
|
44033
|
+
var _v$1 = active() ? theme.primary : theme.textMuted, _v$10 = active() ? TextAttributes38.BOLD : undefined;
|
|
44034
|
+
_v$1 !== _p$.e && (_p$.e = setProp(_el$25, "fg", _v$1, _p$.e));
|
|
44035
|
+
_v$10 !== _p$.t && (_p$.t = setProp(_el$25, "attributes", _v$10, _p$.t));
|
|
43379
44036
|
return _p$;
|
|
43380
44037
|
}, {
|
|
43381
44038
|
e: undefined,
|
|
43382
44039
|
t: undefined
|
|
43383
44040
|
});
|
|
43384
|
-
return _el$
|
|
44041
|
+
return _el$25;
|
|
43385
44042
|
})();
|
|
43386
44043
|
}
|
|
43387
44044
|
}));
|
|
43388
|
-
insertNode(_el$
|
|
43389
|
-
setProp(_el$
|
|
43390
|
-
setProp(_el$
|
|
44045
|
+
insertNode(_el$18, _el$19);
|
|
44046
|
+
setProp(_el$18, "flexGrow", 1);
|
|
44047
|
+
setProp(_el$18, "verticalScrollbarOptions", {
|
|
43391
44048
|
trackOptions: {
|
|
43392
44049
|
foregroundColor: "transparent"
|
|
43393
44050
|
}
|
|
43394
44051
|
});
|
|
43395
|
-
setProp(_el$
|
|
43396
|
-
setProp(_el$
|
|
43397
|
-
setProp(_el$
|
|
43398
|
-
insert(_el$
|
|
44052
|
+
setProp(_el$19, "flexShrink", 0);
|
|
44053
|
+
setProp(_el$19, "gap", 0);
|
|
44054
|
+
setProp(_el$19, "paddingRight", 1);
|
|
44055
|
+
insert(_el$19, createComponent2(For, {
|
|
43399
44056
|
get each() {
|
|
43400
44057
|
return rows();
|
|
43401
44058
|
},
|
|
@@ -43406,9 +44063,22 @@ function Sidebar2(props) {
|
|
|
43406
44063
|
const isSelected = () => task.id === props.selectedId();
|
|
43407
44064
|
const isMain = task.kind === "main";
|
|
43408
44065
|
const badge = STATUS_BADGE[task.status];
|
|
44066
|
+
const isLive = createMemo(() => {
|
|
44067
|
+
const map = props.chatRunState?.();
|
|
44068
|
+
if (!map)
|
|
44069
|
+
return false;
|
|
44070
|
+
const prefix = `${task.id}:`;
|
|
44071
|
+
for (const [key, state] of map) {
|
|
44072
|
+
if (state === "running" && key.startsWith(prefix))
|
|
44073
|
+
return true;
|
|
44074
|
+
}
|
|
44075
|
+
return false;
|
|
44076
|
+
});
|
|
43409
44077
|
const badgeColor = () => {
|
|
43410
44078
|
if (isMain)
|
|
43411
44079
|
return theme.primary;
|
|
44080
|
+
if (isLive())
|
|
44081
|
+
return theme.primary;
|
|
43412
44082
|
switch (badge.tone) {
|
|
43413
44083
|
case "success":
|
|
43414
44084
|
return theme.success;
|
|
@@ -43432,107 +44102,96 @@ function Sidebar2(props) {
|
|
|
43432
44102
|
branchTick();
|
|
43433
44103
|
return readWorktreeChanges(task.worktreePath);
|
|
43434
44104
|
});
|
|
43435
|
-
const isLive = createMemo(() => {
|
|
43436
|
-
const map = props.chatRunState?.();
|
|
43437
|
-
if (!map)
|
|
43438
|
-
return false;
|
|
43439
|
-
const prefix = `${task.id}:`;
|
|
43440
|
-
for (const [key, state] of map) {
|
|
43441
|
-
if (state === "running" && key.startsWith(prefix))
|
|
43442
|
-
return true;
|
|
43443
|
-
}
|
|
43444
|
-
return false;
|
|
43445
|
-
});
|
|
43446
44105
|
const titleText = isMain ? repoBasename2(task.repo) : task.title;
|
|
43447
44106
|
return (() => {
|
|
43448
|
-
var _el$
|
|
43449
|
-
insertNode(_el$
|
|
43450
|
-
insertNode(_el$
|
|
43451
|
-
insertNode(_el$
|
|
43452
|
-
setProp(_el$23, "flexDirection", "row");
|
|
43453
|
-
setProp(_el$23, "paddingLeft", 1);
|
|
43454
|
-
setProp(_el$23, "paddingRight", 1);
|
|
43455
|
-
setProp(_el$23, "gap", 1);
|
|
43456
|
-
setProp(_el$23, "onMouseUp", () => props.onSelect(task.id));
|
|
43457
|
-
setProp(_el$24, "wrapMode", "none");
|
|
43458
|
-
insert(_el$24, () => isMain ? "\u2605" : task.status === "in_progress" ? isLive() ? IN_PROGRESS_SPINNER[spinnerFrame()] ?? IN_PROGRESS_SPINNER[0] : "\u25CF" : badge.glyph);
|
|
43459
|
-
setProp(_el$25, "wrapMode", "none");
|
|
43460
|
-
setProp(_el$25, "flexGrow", 1);
|
|
43461
|
-
insert(_el$25, titleText);
|
|
43462
|
-
setProp(_el$26, "width", 5);
|
|
43463
|
-
setProp(_el$26, "flexShrink", 0);
|
|
44107
|
+
var _el$26 = createElement("box"), _el$27 = createElement("text"), _el$28 = createElement("text"), _el$29 = createElement("box");
|
|
44108
|
+
insertNode(_el$26, _el$27);
|
|
44109
|
+
insertNode(_el$26, _el$28);
|
|
44110
|
+
insertNode(_el$26, _el$29);
|
|
43464
44111
|
setProp(_el$26, "flexDirection", "row");
|
|
43465
|
-
setProp(_el$26, "
|
|
44112
|
+
setProp(_el$26, "paddingLeft", 1);
|
|
44113
|
+
setProp(_el$26, "paddingRight", 1);
|
|
43466
44114
|
setProp(_el$26, "gap", 1);
|
|
43467
|
-
|
|
44115
|
+
setProp(_el$26, "onMouseUp", () => props.onSelect(task.id));
|
|
44116
|
+
setProp(_el$27, "wrapMode", "none");
|
|
44117
|
+
insert(_el$27, () => isMain ? "\u2605" : isLive() ? IN_PROGRESS_SPINNER[spinnerFrame()] ?? IN_PROGRESS_SPINNER[0] : task.status === "in_progress" ? "\u25CF" : badge.glyph);
|
|
44118
|
+
setProp(_el$28, "wrapMode", "none");
|
|
44119
|
+
setProp(_el$28, "flexGrow", 1);
|
|
44120
|
+
insert(_el$28, titleText);
|
|
44121
|
+
setProp(_el$29, "width", 5);
|
|
44122
|
+
setProp(_el$29, "flexShrink", 0);
|
|
44123
|
+
setProp(_el$29, "flexDirection", "row");
|
|
44124
|
+
setProp(_el$29, "justifyContent", "flex-end");
|
|
44125
|
+
setProp(_el$29, "gap", 1);
|
|
44126
|
+
insert(_el$29, createComponent2(Show, {
|
|
43468
44127
|
get when() {
|
|
43469
44128
|
return changes().added > 0;
|
|
43470
44129
|
},
|
|
43471
44130
|
get children() {
|
|
43472
|
-
var _el$
|
|
43473
|
-
insertNode(_el$
|
|
43474
|
-
setProp(_el$
|
|
43475
|
-
insert(_el$
|
|
43476
|
-
effect((_$p) => setProp(_el$
|
|
43477
|
-
return _el$
|
|
44131
|
+
var _el$30 = createElement("text"), _el$31 = createTextNode(`+`);
|
|
44132
|
+
insertNode(_el$30, _el$31);
|
|
44133
|
+
setProp(_el$30, "wrapMode", "none");
|
|
44134
|
+
insert(_el$30, () => changes().added, null);
|
|
44135
|
+
effect((_$p) => setProp(_el$30, "fg", isCursor() ? theme.selectedListItemText : theme.success, _$p));
|
|
44136
|
+
return _el$30;
|
|
43478
44137
|
}
|
|
43479
44138
|
}), null);
|
|
43480
|
-
insert(_el$
|
|
44139
|
+
insert(_el$29, createComponent2(Show, {
|
|
43481
44140
|
get when() {
|
|
43482
44141
|
return changes().deleted > 0;
|
|
43483
44142
|
},
|
|
43484
44143
|
get children() {
|
|
43485
|
-
var _el$
|
|
43486
|
-
insertNode(_el$
|
|
43487
|
-
setProp(_el$
|
|
43488
|
-
insert(_el$
|
|
43489
|
-
effect((_$p) => setProp(_el$
|
|
43490
|
-
return _el$
|
|
44144
|
+
var _el$32 = createElement("text"), _el$33 = createTextNode(`\u2212`);
|
|
44145
|
+
insertNode(_el$32, _el$33);
|
|
44146
|
+
setProp(_el$32, "wrapMode", "none");
|
|
44147
|
+
insert(_el$32, () => changes().deleted, null);
|
|
44148
|
+
effect((_$p) => setProp(_el$32, "fg", isCursor() ? theme.selectedListItemText : theme.error, _$p));
|
|
44149
|
+
return _el$32;
|
|
43491
44150
|
}
|
|
43492
44151
|
}), null);
|
|
43493
|
-
insert(_el$
|
|
44152
|
+
insert(_el$26, createComponent2(Show, {
|
|
43494
44153
|
get when() {
|
|
43495
44154
|
return isMain && branchLabel().length > 0 || !isMain && task.pinned === true;
|
|
43496
44155
|
},
|
|
43497
44156
|
get children() {
|
|
43498
|
-
var _el$
|
|
43499
|
-
setProp(_el$
|
|
43500
|
-
setProp(_el$
|
|
43501
|
-
setProp(_el$
|
|
43502
|
-
insert(_el$
|
|
44157
|
+
var _el$34 = createElement("box");
|
|
44158
|
+
setProp(_el$34, "flexDirection", "row");
|
|
44159
|
+
setProp(_el$34, "gap", 1);
|
|
44160
|
+
setProp(_el$34, "paddingLeft", 1);
|
|
44161
|
+
insert(_el$34, createComponent2(Show, {
|
|
43503
44162
|
get when() {
|
|
43504
44163
|
return isMain && branchLabel().length > 0;
|
|
43505
44164
|
},
|
|
43506
44165
|
get children() {
|
|
43507
|
-
var _el$
|
|
43508
|
-
setProp(_el$
|
|
43509
|
-
insert(_el$
|
|
43510
|
-
effect((_$p) => setProp(_el$
|
|
43511
|
-
return _el$
|
|
44166
|
+
var _el$35 = createElement("text");
|
|
44167
|
+
setProp(_el$35, "wrapMode", "none");
|
|
44168
|
+
insert(_el$35, branchLabel);
|
|
44169
|
+
effect((_$p) => setProp(_el$35, "fg", isCursor() ? theme.selectedListItemText : theme.textMuted, _$p));
|
|
44170
|
+
return _el$35;
|
|
43512
44171
|
}
|
|
43513
44172
|
}), null);
|
|
43514
|
-
insert(_el$
|
|
44173
|
+
insert(_el$34, createComponent2(Show, {
|
|
43515
44174
|
get when() {
|
|
43516
44175
|
return !isMain && task.pinned === true;
|
|
43517
44176
|
},
|
|
43518
44177
|
get children() {
|
|
43519
|
-
var _el$
|
|
43520
|
-
insertNode(_el$
|
|
43521
|
-
setProp(_el$
|
|
43522
|
-
effect((_$p) => setProp(_el$
|
|
43523
|
-
return _el$
|
|
44178
|
+
var _el$36 = createElement("text");
|
|
44179
|
+
insertNode(_el$36, createTextNode(`\u25B4`));
|
|
44180
|
+
setProp(_el$36, "wrapMode", "none");
|
|
44181
|
+
effect((_$p) => setProp(_el$36, "fg", isCursor() ? theme.selectedListItemText : theme.warning, _$p));
|
|
44182
|
+
return _el$36;
|
|
43524
44183
|
}
|
|
43525
44184
|
}), null);
|
|
43526
|
-
return _el$
|
|
44185
|
+
return _el$34;
|
|
43527
44186
|
}
|
|
43528
44187
|
}), null);
|
|
43529
44188
|
effect((_p$) => {
|
|
43530
|
-
var _v$11 = isCursor() ? theme.primary : isSelected() ? theme.backgroundElement : undefined, _v$12 = isCursor() ? theme.selectedListItemText : badgeColor(), _v$13 =
|
|
43531
|
-
_v$11 !== _p$.e && (_p$.e = setProp(_el$
|
|
43532
|
-
_v$12 !== _p$.t && (_p$.t = setProp(_el$
|
|
43533
|
-
_v$13 !== _p$.a && (_p$.a = setProp(_el$
|
|
43534
|
-
_v$14 !== _p$.o && (_p$.o = setProp(_el$
|
|
43535
|
-
_v$15 !== _p$.i && (_p$.i = setProp(_el$
|
|
44189
|
+
var _v$11 = isCursor() ? theme.primary : isSelected() ? theme.backgroundElement : undefined, _v$12 = isCursor() ? theme.selectedListItemText : badgeColor(), _v$13 = TextAttributes38.BOLD, _v$14 = isCursor() ? theme.selectedListItemText : theme.text, _v$15 = (isMain || isSelected() && !isCursor()) && !isCursor() ? TextAttributes38.BOLD : undefined;
|
|
44190
|
+
_v$11 !== _p$.e && (_p$.e = setProp(_el$26, "backgroundColor", _v$11, _p$.e));
|
|
44191
|
+
_v$12 !== _p$.t && (_p$.t = setProp(_el$27, "fg", _v$12, _p$.t));
|
|
44192
|
+
_v$13 !== _p$.a && (_p$.a = setProp(_el$27, "attributes", _v$13, _p$.a));
|
|
44193
|
+
_v$14 !== _p$.o && (_p$.o = setProp(_el$28, "fg", _v$14, _p$.o));
|
|
44194
|
+
_v$15 !== _p$.i && (_p$.i = setProp(_el$28, "attributes", _v$15, _p$.i));
|
|
43536
44195
|
return _p$;
|
|
43537
44196
|
}, {
|
|
43538
44197
|
e: undefined,
|
|
@@ -43541,42 +44200,42 @@ function Sidebar2(props) {
|
|
|
43541
44200
|
o: undefined,
|
|
43542
44201
|
i: undefined
|
|
43543
44202
|
});
|
|
43544
|
-
return _el$
|
|
44203
|
+
return _el$26;
|
|
43545
44204
|
})();
|
|
43546
44205
|
}
|
|
43547
44206
|
}), null);
|
|
43548
|
-
insert(_el$
|
|
44207
|
+
insert(_el$19, createComponent2(Show, {
|
|
43549
44208
|
get when() {
|
|
43550
44209
|
return flatIds().length === 0;
|
|
43551
44210
|
},
|
|
43552
44211
|
get children() {
|
|
43553
|
-
var _el$
|
|
43554
|
-
insertNode(_el$
|
|
43555
|
-
setProp(_el$
|
|
43556
|
-
setProp(_el$
|
|
43557
|
-
insert(_el$
|
|
44212
|
+
var _el$20 = createElement("box"), _el$21 = createElement("text");
|
|
44213
|
+
insertNode(_el$20, _el$21);
|
|
44214
|
+
setProp(_el$20, "paddingTop", 1);
|
|
44215
|
+
setProp(_el$20, "paddingLeft", 1);
|
|
44216
|
+
insert(_el$21, (() => {
|
|
43558
44217
|
var _c$ = memo2(() => !!(searchMode() && searchQuery().trim().length > 0));
|
|
43559
|
-
return () => _c$() ? "No matching tasks." : view() === "active" ? "No active tasks." : "No archived tasks.";
|
|
44218
|
+
return () => _c$() ? "No matching tasks \u2014 esc to clear." : view() === "active" ? "No active tasks." : "No archived tasks.";
|
|
43560
44219
|
})());
|
|
43561
|
-
effect((_$p) => setProp(_el$
|
|
43562
|
-
return _el$
|
|
44220
|
+
effect((_$p) => setProp(_el$21, "fg", theme.textMuted, _$p));
|
|
44221
|
+
return _el$20;
|
|
43563
44222
|
}
|
|
43564
44223
|
}), null);
|
|
43565
|
-
insertNode(_el$
|
|
43566
|
-
setProp(_el$
|
|
43567
|
-
setProp(_el$
|
|
43568
|
-
setProp(_el$
|
|
43569
|
-
insertNode(_el$
|
|
43570
|
-
setProp(_el$
|
|
43571
|
-
setProp(_el$
|
|
44224
|
+
insertNode(_el$22, _el$23);
|
|
44225
|
+
setProp(_el$22, "flexShrink", 0);
|
|
44226
|
+
setProp(_el$22, "paddingTop", 1);
|
|
44227
|
+
setProp(_el$22, "paddingLeft", 1);
|
|
44228
|
+
insertNode(_el$23, createTextNode(`+ New task`));
|
|
44229
|
+
setProp(_el$23, "wrapMode", "none");
|
|
44230
|
+
setProp(_el$23, "onMouseUp", () => props.onAddTask?.());
|
|
43572
44231
|
effect((_p$) => {
|
|
43573
|
-
var _v$5 = props.width ? props.width() : SIDEBAR_WIDTH, _v$6 = focusedAccessor() ? theme.focusAccent : theme.textMuted, _v$7 =
|
|
44232
|
+
var _v$5 = props.width ? props.width() : SIDEBAR_WIDTH, _v$6 = focusedAccessor() ? theme.focusAccent : theme.textMuted, _v$7 = TextAttributes38.BOLD, _v$8 = focusedAccessor() ? theme.focusAccent : theme.textMuted, _v$9 = TextAttributes38.BOLD, _v$0 = theme.textMuted;
|
|
43574
44233
|
_v$5 !== _p$.e && (_p$.e = setProp(_el$, "width", _v$5, _p$.e));
|
|
43575
44234
|
_v$6 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$6, _p$.t));
|
|
43576
44235
|
_v$7 !== _p$.a && (_p$.a = setProp(_el$3, "attributes", _v$7, _p$.a));
|
|
43577
44236
|
_v$8 !== _p$.o && (_p$.o = setProp(_el$5, "fg", _v$8, _p$.o));
|
|
43578
44237
|
_v$9 !== _p$.i && (_p$.i = setProp(_el$5, "attributes", _v$9, _p$.i));
|
|
43579
|
-
_v$0 !== _p$.n && (_p$.n = setProp(_el$
|
|
44238
|
+
_v$0 !== _p$.n && (_p$.n = setProp(_el$23, "fg", _v$0, _p$.n));
|
|
43580
44239
|
return _p$;
|
|
43581
44240
|
}, {
|
|
43582
44241
|
e: undefined,
|
|
@@ -43899,22 +44558,6 @@ Try again or quit?`;
|
|
|
43899
44558
|
return null;
|
|
43900
44559
|
return chatRunStateKey(taskId, tabId);
|
|
43901
44560
|
});
|
|
43902
|
-
const openBackgroundTasks = () => {
|
|
43903
|
-
BackgroundTasksDialog.show(dialog, {
|
|
43904
|
-
runState: chatRunStateAcc,
|
|
43905
|
-
tasks: tasksAcc,
|
|
43906
|
-
visibleTabKey,
|
|
43907
|
-
onJump: (taskId, tabId) => {
|
|
43908
|
-
props.orchestrator.setActiveTab(taskId, tabId);
|
|
43909
|
-
setSelectedId(taskId);
|
|
43910
|
-
setFocusedPane("workspace");
|
|
43911
|
-
},
|
|
43912
|
-
onInterrupt: (taskId, tabId) => {
|
|
43913
|
-
props.orchestrator.interruptTask(taskId, tabId);
|
|
43914
|
-
}
|
|
43915
|
-
});
|
|
43916
|
-
};
|
|
43917
|
-
const backgroundRows = createMemo(() => computeBackgroundRows(chatRunStateAcc(), tasksAcc(), visibleTabKey()));
|
|
43918
44561
|
useAppKeymap({
|
|
43919
44562
|
dialog,
|
|
43920
44563
|
focusedPane,
|
|
@@ -43923,7 +44566,6 @@ Try again or quit?`;
|
|
|
43923
44566
|
resizeStep: RESIZE_STEP,
|
|
43924
44567
|
focusHjklTargets: FOCUS_HJKL_TARGETS,
|
|
43925
44568
|
openNewTaskFlow,
|
|
43926
|
-
openBackgroundTasks,
|
|
43927
44569
|
kv,
|
|
43928
44570
|
orchestrator: props.orchestrator,
|
|
43929
44571
|
renderer,
|
|
@@ -44089,9 +44731,7 @@ Try again or quit?`;
|
|
|
44089
44731
|
onOpenFilePath: openFileInCenter,
|
|
44090
44732
|
onQuickForkRequest: () => {
|
|
44091
44733
|
quickForkActiveTask();
|
|
44092
|
-
}
|
|
44093
|
-
backgroundRows,
|
|
44094
|
-
onOpenBackgroundTasks: openBackgroundTasks
|
|
44734
|
+
}
|
|
44095
44735
|
});
|
|
44096
44736
|
}
|
|
44097
44737
|
}));
|
|
@@ -44162,16 +44802,7 @@ Try again or quit?`;
|
|
|
44162
44802
|
return isFocused("terminal");
|
|
44163
44803
|
}
|
|
44164
44804
|
}));
|
|
44165
|
-
insert(_el$, createComponent2(StatusBar, {
|
|
44166
|
-
get indicator() {
|
|
44167
|
-
return createComponent2(BackgroundTasksIndicator, {
|
|
44168
|
-
runState: chatRunStateAcc,
|
|
44169
|
-
tasks: tasksAcc,
|
|
44170
|
-
visibleTabKey,
|
|
44171
|
-
onActivate: openBackgroundTasks
|
|
44172
|
-
});
|
|
44173
|
-
}
|
|
44174
|
-
}), null);
|
|
44805
|
+
insert(_el$, createComponent2(StatusBar, {}), null);
|
|
44175
44806
|
insert(_el$, createComponent2(ToastOverlay, {}), null);
|
|
44176
44807
|
effect((_p$) => {
|
|
44177
44808
|
var _v$ = theme.backgroundPanel, _v$2 = workspaceWidth(), _v$3 = theme.backgroundPanel, _v$4 = filesHeight();
|
|
@@ -44322,8 +44953,6 @@ var init_app = __esm(() => {
|
|
|
44322
44953
|
init_repos();
|
|
44323
44954
|
init_version();
|
|
44324
44955
|
init_app_keymap();
|
|
44325
|
-
init_background_tasks_dialog();
|
|
44326
|
-
init_background_tasks_indicator();
|
|
44327
44956
|
init_center_tab_strip();
|
|
44328
44957
|
init_help_dialog();
|
|
44329
44958
|
init_pane_header();
|
|
@@ -44362,7 +44991,7 @@ var exports_tui = {};
|
|
|
44362
44991
|
__export(exports_tui, {
|
|
44363
44992
|
startTui: () => startTui
|
|
44364
44993
|
});
|
|
44365
|
-
import { TextAttributes as
|
|
44994
|
+
import { TextAttributes as TextAttributes39 } from "@opentui/core";
|
|
44366
44995
|
function HelpHint() {
|
|
44367
44996
|
const {
|
|
44368
44997
|
theme
|
|
@@ -44436,7 +45065,7 @@ function Banner() {
|
|
|
44436
45065
|
insert(_el$20, selected);
|
|
44437
45066
|
insert(_el$12, createComponent2(HelpHint, {}), null);
|
|
44438
45067
|
effect((_p$) => {
|
|
44439
|
-
var _v$7 = theme.primary, _v$8 =
|
|
45068
|
+
var _v$7 = theme.primary, _v$8 = TextAttributes39.BOLD, _v$9 = theme.borderActive, _v$0 = theme.text, _v$1 = theme.textMuted, _v$10 = {
|
|
44440
45069
|
fg: theme.accent
|
|
44441
45070
|
};
|
|
44442
45071
|
_v$7 !== _p$.e && (_p$.e = setProp(_el$13, "fg", _v$7, _p$.e));
|
|
@@ -44471,7 +45100,7 @@ function Shell2() {
|
|
|
44471
45100
|
setProp(_el$21, "flexGrow", 1);
|
|
44472
45101
|
insert(_el$21, createComponent2(Sidebar, {
|
|
44473
45102
|
title: "kobe",
|
|
44474
|
-
emptyMessage: "No tasks yet.
|
|
45103
|
+
emptyMessage: "No tasks yet.",
|
|
44475
45104
|
get footer() {
|
|
44476
45105
|
return (() => {
|
|
44477
45106
|
var _el$22 = createElement("text"), _el$23 = createElement("span"), _el$25 = createTextNode(` ready`);
|