@skillkit/tui 1.18.0 → 1.19.1
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/index.d.ts +23 -2
- package/dist/index.js +1107 -111
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1721,7 +1721,7 @@ var render = async (node, rendererOrConfig = {}) => {
|
|
|
1721
1721
|
import { createCliRenderer as createCliRenderer2 } from "@opentui/core";
|
|
1722
1722
|
|
|
1723
1723
|
// src/App.tsx
|
|
1724
|
-
import { execFile as
|
|
1724
|
+
import { execFile as execFile5 } from "child_process";
|
|
1725
1725
|
|
|
1726
1726
|
// src/state/types.ts
|
|
1727
1727
|
var NAV_KEYS = {
|
|
@@ -1745,7 +1745,10 @@ var NAV_KEYS = {
|
|
|
1745
1745
|
"/": "help",
|
|
1746
1746
|
"g": "mesh",
|
|
1747
1747
|
"j": "message",
|
|
1748
|
-
"z": "scan"
|
|
1748
|
+
"z": "scan",
|
|
1749
|
+
l: "timeline",
|
|
1750
|
+
v: "lineage",
|
|
1751
|
+
f: "handoff"
|
|
1749
1752
|
};
|
|
1750
1753
|
var STATUS_BAR_SHORTCUTS = "b browse m market i installed s sync / help q quit";
|
|
1751
1754
|
var SIDEBAR_NAV = [
|
|
@@ -1785,6 +1788,14 @@ var SIDEBAR_NAV = [
|
|
|
1785
1788
|
{ key: "j", label: "Messages", screen: "message" }
|
|
1786
1789
|
]
|
|
1787
1790
|
},
|
|
1791
|
+
{
|
|
1792
|
+
section: "Session",
|
|
1793
|
+
items: [
|
|
1794
|
+
{ key: "l", label: "Timeline", screen: "timeline" },
|
|
1795
|
+
{ key: "v", label: "Lineage", screen: "lineage" },
|
|
1796
|
+
{ key: "f", label: "Handoff", screen: "handoff" }
|
|
1797
|
+
]
|
|
1798
|
+
},
|
|
1788
1799
|
{
|
|
1789
1800
|
section: "More",
|
|
1790
1801
|
items: [
|
|
@@ -7214,7 +7225,7 @@ function Memory(props) {
|
|
|
7214
7225
|
}));
|
|
7215
7226
|
}
|
|
7216
7227
|
};
|
|
7217
|
-
const
|
|
7228
|
+
const getTypeIcon2 = (type) => {
|
|
7218
7229
|
switch (type) {
|
|
7219
7230
|
case "index":
|
|
7220
7231
|
return "\u25C8";
|
|
@@ -7405,7 +7416,7 @@ function Memory(props) {
|
|
|
7405
7416
|
setProp(_el$33, "width", 3);
|
|
7406
7417
|
insert(_el$33, () => idx() === selectedIndex() ? "\u25B8 " : " ");
|
|
7407
7418
|
insertNode(_el$34, _el$35);
|
|
7408
|
-
insert(_el$34, () =>
|
|
7419
|
+
insert(_el$34, () => getTypeIcon2(mem.type), _el$35);
|
|
7409
7420
|
setProp(_el$36, "width", 20);
|
|
7410
7421
|
insert(_el$36, () => mem.key);
|
|
7411
7422
|
setProp(_el$37, "width", 12);
|
|
@@ -7441,7 +7452,7 @@ function Memory(props) {
|
|
|
7441
7452
|
return selectedEntry().key;
|
|
7442
7453
|
},
|
|
7443
7454
|
get icon() {
|
|
7444
|
-
return
|
|
7455
|
+
return getTypeIcon2(selectedEntry().type);
|
|
7445
7456
|
},
|
|
7446
7457
|
get fields() {
|
|
7447
7458
|
return detailFields();
|
|
@@ -9049,7 +9060,7 @@ function Plugins(props) {
|
|
|
9049
9060
|
else props.onNavigate("home");
|
|
9050
9061
|
}
|
|
9051
9062
|
});
|
|
9052
|
-
const
|
|
9063
|
+
const getTypeIcon2 = (type) => {
|
|
9053
9064
|
switch (type) {
|
|
9054
9065
|
case "translator":
|
|
9055
9066
|
return "\u21C4";
|
|
@@ -9181,7 +9192,7 @@ function Plugins(props) {
|
|
|
9181
9192
|
insert(_el$23, () => selected() ? "\u25B8 " : " ");
|
|
9182
9193
|
insertNode(_el$24, _el$25);
|
|
9183
9194
|
setProp(_el$24, "width", 3);
|
|
9184
|
-
insert(_el$24, () =>
|
|
9195
|
+
insert(_el$24, () => getTypeIcon2(plugin.type), _el$25);
|
|
9185
9196
|
setProp(_el$26, "width", 20);
|
|
9186
9197
|
insert(_el$26, () => plugin.name);
|
|
9187
9198
|
insertNode(_el$27, _el$28);
|
|
@@ -9263,7 +9274,7 @@ function Plugins(props) {
|
|
|
9263
9274
|
return `v${selectedPlugin().metadata.version}`;
|
|
9264
9275
|
},
|
|
9265
9276
|
get icon() {
|
|
9266
|
-
return
|
|
9277
|
+
return getTypeIcon2(currentPlugin()?.type || "mixed");
|
|
9267
9278
|
},
|
|
9268
9279
|
get fields() {
|
|
9269
9280
|
return detailFields();
|
|
@@ -11206,117 +11217,1075 @@ function Scan(props) {
|
|
|
11206
11217
|
})();
|
|
11207
11218
|
}
|
|
11208
11219
|
|
|
11209
|
-
// src/
|
|
11210
|
-
|
|
11211
|
-
function
|
|
11212
|
-
|
|
11213
|
-
|
|
11214
|
-
|
|
11215
|
-
|
|
11216
|
-
|
|
11220
|
+
// src/screens/Timeline.tsx
|
|
11221
|
+
import { execFile as execFile2 } from "child_process";
|
|
11222
|
+
function getTypeIcon(type) {
|
|
11223
|
+
switch (type) {
|
|
11224
|
+
case "skill_start":
|
|
11225
|
+
return "\u25B6";
|
|
11226
|
+
case "skill_complete":
|
|
11227
|
+
return "\u2713";
|
|
11228
|
+
case "task_progress":
|
|
11229
|
+
return "\u25C7";
|
|
11230
|
+
case "git_commit":
|
|
11231
|
+
return "\u25CF";
|
|
11232
|
+
case "observation":
|
|
11233
|
+
return "\u25CB";
|
|
11234
|
+
case "decision":
|
|
11235
|
+
return "\u25C6";
|
|
11236
|
+
case "snapshot":
|
|
11237
|
+
return "\u25C8";
|
|
11238
|
+
default:
|
|
11239
|
+
return "\u2022";
|
|
11217
11240
|
}
|
|
11218
11241
|
}
|
|
11219
|
-
function
|
|
11220
|
-
|
|
11221
|
-
|
|
11222
|
-
|
|
11223
|
-
|
|
11224
|
-
|
|
11225
|
-
|
|
11226
|
-
|
|
11227
|
-
|
|
11228
|
-
|
|
11229
|
-
|
|
11230
|
-
|
|
11231
|
-
|
|
11232
|
-
|
|
11233
|
-
|
|
11234
|
-
|
|
11235
|
-
|
|
11236
|
-
|
|
11242
|
+
function getTypeColor(type) {
|
|
11243
|
+
switch (type) {
|
|
11244
|
+
case "skill_start":
|
|
11245
|
+
return "#22cc44";
|
|
11246
|
+
case "skill_complete":
|
|
11247
|
+
return "#22cc44";
|
|
11248
|
+
case "git_commit":
|
|
11249
|
+
return "#fbbf24";
|
|
11250
|
+
case "observation":
|
|
11251
|
+
return "#00bbcc";
|
|
11252
|
+
case "decision":
|
|
11253
|
+
return "#aa88ff";
|
|
11254
|
+
case "snapshot":
|
|
11255
|
+
return "#ff88aa";
|
|
11256
|
+
default:
|
|
11257
|
+
return terminalColors.textMuted;
|
|
11258
|
+
}
|
|
11259
|
+
}
|
|
11260
|
+
function formatTimestamp(ts) {
|
|
11261
|
+
try {
|
|
11262
|
+
const d = new Date(ts);
|
|
11263
|
+
if (isNaN(d.getTime())) return ts;
|
|
11264
|
+
return d.toLocaleTimeString("en-US", {
|
|
11265
|
+
hour: "numeric",
|
|
11266
|
+
minute: "2-digit",
|
|
11267
|
+
hour12: true
|
|
11237
11268
|
});
|
|
11238
|
-
}
|
|
11239
|
-
|
|
11240
|
-
|
|
11241
|
-
|
|
11242
|
-
|
|
11243
|
-
|
|
11244
|
-
|
|
11245
|
-
|
|
11246
|
-
|
|
11247
|
-
const
|
|
11248
|
-
const
|
|
11249
|
-
const
|
|
11250
|
-
|
|
11251
|
-
|
|
11252
|
-
|
|
11253
|
-
|
|
11269
|
+
} catch {
|
|
11270
|
+
return ts;
|
|
11271
|
+
}
|
|
11272
|
+
}
|
|
11273
|
+
function Timeline2(props) {
|
|
11274
|
+
const [loading, setLoading] = createSignal(true);
|
|
11275
|
+
const [result, setResult] = createSignal(null);
|
|
11276
|
+
const [error, setError] = createSignal(null);
|
|
11277
|
+
const [selectedIndex, setSelectedIndex] = createSignal(0);
|
|
11278
|
+
const rows = () => props.rows ?? 24;
|
|
11279
|
+
const visibleCount = () => Math.max(1, rows() - 10);
|
|
11280
|
+
const loadTimeline = () => {
|
|
11281
|
+
setLoading(true);
|
|
11282
|
+
setError(null);
|
|
11283
|
+
try {
|
|
11284
|
+
execFile2("npx", ["skillkit", "timeline", "--json"], {
|
|
11285
|
+
timeout: 15e3,
|
|
11286
|
+
maxBuffer: 1024 * 1024
|
|
11287
|
+
}, (err, stdout, stderr) => {
|
|
11288
|
+
setLoading(false);
|
|
11289
|
+
if (err && !stdout) {
|
|
11290
|
+
setError(stderr || err.message || "Failed to load timeline");
|
|
11291
|
+
return;
|
|
11292
|
+
}
|
|
11293
|
+
try {
|
|
11294
|
+
const parsed = JSON.parse(stdout);
|
|
11295
|
+
setResult(parsed);
|
|
11296
|
+
} catch {
|
|
11297
|
+
setError("Failed to parse timeline data");
|
|
11298
|
+
}
|
|
11299
|
+
});
|
|
11300
|
+
} catch (err) {
|
|
11301
|
+
setLoading(false);
|
|
11302
|
+
setError(err instanceof Error ? err.message : "Failed to load timeline");
|
|
11303
|
+
}
|
|
11254
11304
|
};
|
|
11305
|
+
createEffect(() => {
|
|
11306
|
+
loadTimeline();
|
|
11307
|
+
});
|
|
11308
|
+
const events = createMemo(() => result()?.events ?? []);
|
|
11309
|
+
const windowStart = createMemo(() => Math.max(0, selectedIndex() - visibleCount() + 1));
|
|
11310
|
+
const visibleEvents = createMemo(() => events().slice(windowStart(), windowStart() + visibleCount()));
|
|
11255
11311
|
useKeyboard((key) => {
|
|
11256
|
-
if (
|
|
11257
|
-
|
|
11258
|
-
|
|
11259
|
-
|
|
11260
|
-
if (key.name === "
|
|
11261
|
-
|
|
11262
|
-
|
|
11263
|
-
|
|
11264
|
-
if (key.name === "d") {
|
|
11265
|
-
openUrl(DOCS_URL);
|
|
11266
|
-
return;
|
|
11267
|
-
}
|
|
11268
|
-
if (key.sequence === "\\") {
|
|
11269
|
-
setShowSidebar((v) => !v);
|
|
11270
|
-
return;
|
|
11271
|
-
}
|
|
11272
|
-
const targetScreen = NAV_KEYS[key.name || ""];
|
|
11273
|
-
if (targetScreen) {
|
|
11274
|
-
setCurrentScreen(targetScreen);
|
|
11312
|
+
if (key.name === "k" || key.name === "up") {
|
|
11313
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
11314
|
+
} else if (key.name === "j" || key.name === "down") {
|
|
11315
|
+
setSelectedIndex((i) => events().length > 0 ? Math.min(events().length - 1, i + 1) : 0);
|
|
11316
|
+
} else if (key.name === "r") {
|
|
11317
|
+
loadTimeline();
|
|
11318
|
+
} else if (key.name === "escape") {
|
|
11319
|
+
props.onNavigate("home");
|
|
11275
11320
|
}
|
|
11276
|
-
|
|
11277
|
-
|
|
11321
|
+
});
|
|
11322
|
+
return (() => {
|
|
11323
|
+
var _el$ = createElement("box"), _el$7 = createElement("text"), _el$9 = createElement("text");
|
|
11324
|
+
insertNode(_el$, _el$7);
|
|
11325
|
+
insertNode(_el$, _el$9);
|
|
11326
|
+
setProp(_el$, "flexDirection", "column");
|
|
11327
|
+
setProp(_el$, "padding", 1);
|
|
11328
|
+
insert(_el$, createComponent2(Header, {
|
|
11329
|
+
title: "Timeline",
|
|
11330
|
+
subtitle: "unified event stream",
|
|
11331
|
+
get count() {
|
|
11332
|
+
return result()?.totalCount;
|
|
11333
|
+
},
|
|
11334
|
+
icon: "\u25B8"
|
|
11335
|
+
}), _el$7);
|
|
11336
|
+
insert(_el$, createComponent2(Show, {
|
|
11337
|
+
get when() {
|
|
11338
|
+
return loading();
|
|
11339
|
+
},
|
|
11340
|
+
get children() {
|
|
11341
|
+
return createComponent2(Spinner, {
|
|
11342
|
+
label: "Loading timeline..."
|
|
11343
|
+
});
|
|
11344
|
+
}
|
|
11345
|
+
}), _el$7);
|
|
11346
|
+
insert(_el$, createComponent2(Show, {
|
|
11347
|
+
get when() {
|
|
11348
|
+
return error();
|
|
11349
|
+
},
|
|
11350
|
+
get children() {
|
|
11351
|
+
var _el$2 = createElement("box"), _el$3 = createElement("text"), _el$4 = createTextNode(`Error: `), _el$5 = createElement("text");
|
|
11352
|
+
insertNode(_el$2, _el$3);
|
|
11353
|
+
insertNode(_el$2, _el$5);
|
|
11354
|
+
setProp(_el$2, "flexDirection", "column");
|
|
11355
|
+
insertNode(_el$3, _el$4);
|
|
11356
|
+
setProp(_el$3, "fg", "#ff5555");
|
|
11357
|
+
insert(_el$3, error, null);
|
|
11358
|
+
insertNode(_el$5, createTextNode(`Press r to retry`));
|
|
11359
|
+
effect((_$p) => setProp(_el$5, "fg", terminalColors.textMuted, _$p));
|
|
11360
|
+
return _el$2;
|
|
11361
|
+
}
|
|
11362
|
+
}), _el$7);
|
|
11363
|
+
insert(_el$, createComponent2(Show, {
|
|
11364
|
+
get when() {
|
|
11365
|
+
return memo2(() => !!!loading())() && !error();
|
|
11366
|
+
},
|
|
11367
|
+
get children() {
|
|
11368
|
+
return [createComponent2(Show, {
|
|
11369
|
+
get when() {
|
|
11370
|
+
return events().length === 0;
|
|
11371
|
+
},
|
|
11372
|
+
get children() {
|
|
11373
|
+
return createComponent2(EmptyState, {
|
|
11374
|
+
title: "No timeline events",
|
|
11375
|
+
description: "Events appear as you execute skills and make commits"
|
|
11376
|
+
});
|
|
11377
|
+
}
|
|
11378
|
+
}), createComponent2(Show, {
|
|
11379
|
+
get when() {
|
|
11380
|
+
return events().length > 0;
|
|
11381
|
+
},
|
|
11382
|
+
get children() {
|
|
11383
|
+
return createComponent2(For, {
|
|
11384
|
+
get each() {
|
|
11385
|
+
return visibleEvents();
|
|
11386
|
+
},
|
|
11387
|
+
children: (event, idx) => {
|
|
11388
|
+
const absoluteIdx = () => windowStart() + idx();
|
|
11389
|
+
const isSelected = () => absoluteIdx() === selectedIndex();
|
|
11390
|
+
return (() => {
|
|
11391
|
+
var _el$1 = createElement("box"), _el$10 = createElement("box"), _el$11 = createElement("text"), _el$12 = createElement("text"), _el$13 = createElement("text"), _el$14 = createElement("text");
|
|
11392
|
+
insertNode(_el$1, _el$10);
|
|
11393
|
+
setProp(_el$1, "flexDirection", "column");
|
|
11394
|
+
insertNode(_el$10, _el$11);
|
|
11395
|
+
insertNode(_el$10, _el$12);
|
|
11396
|
+
insertNode(_el$10, _el$13);
|
|
11397
|
+
insertNode(_el$10, _el$14);
|
|
11398
|
+
setProp(_el$10, "flexDirection", "row");
|
|
11399
|
+
setProp(_el$10, "gap", 1);
|
|
11400
|
+
insert(_el$11, () => isSelected() ? ">" : " ");
|
|
11401
|
+
setProp(_el$12, "width", 9);
|
|
11402
|
+
insert(_el$12, () => formatTimestamp(event.timestamp));
|
|
11403
|
+
insert(_el$13, () => getTypeIcon(event.type));
|
|
11404
|
+
insert(_el$14, () => event.summary);
|
|
11405
|
+
insert(_el$1, createComponent2(Show, {
|
|
11406
|
+
get when() {
|
|
11407
|
+
return memo2(() => !!isSelected())() && event.source;
|
|
11408
|
+
},
|
|
11409
|
+
get children() {
|
|
11410
|
+
var _el$15 = createElement("text"), _el$16 = createTextNode(` source: `);
|
|
11411
|
+
insertNode(_el$15, _el$16);
|
|
11412
|
+
insert(_el$15, () => event.source, null);
|
|
11413
|
+
effect((_$p) => setProp(_el$15, "fg", terminalColors.textMuted, _$p));
|
|
11414
|
+
return _el$15;
|
|
11415
|
+
}
|
|
11416
|
+
}), null);
|
|
11417
|
+
effect((_p$) => {
|
|
11418
|
+
var _v$ = isSelected() ? terminalColors.accent : terminalColors.textMuted, _v$2 = terminalColors.textMuted, _v$3 = getTypeColor(event.type), _v$4 = isSelected() ? terminalColors.text : terminalColors.textMuted;
|
|
11419
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$11, "fg", _v$, _p$.e));
|
|
11420
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$12, "fg", _v$2, _p$.t));
|
|
11421
|
+
_v$3 !== _p$.a && (_p$.a = setProp(_el$13, "fg", _v$3, _p$.a));
|
|
11422
|
+
_v$4 !== _p$.o && (_p$.o = setProp(_el$14, "fg", _v$4, _p$.o));
|
|
11423
|
+
return _p$;
|
|
11424
|
+
}, {
|
|
11425
|
+
e: void 0,
|
|
11426
|
+
t: void 0,
|
|
11427
|
+
a: void 0,
|
|
11428
|
+
o: void 0
|
|
11429
|
+
});
|
|
11430
|
+
return _el$1;
|
|
11431
|
+
})();
|
|
11432
|
+
}
|
|
11433
|
+
});
|
|
11434
|
+
}
|
|
11435
|
+
})];
|
|
11436
|
+
}
|
|
11437
|
+
}), _el$7);
|
|
11438
|
+
insertNode(_el$7, createTextNode(` `));
|
|
11439
|
+
insertNode(_el$9, createTextNode(`j/k navigate r refresh esc back`));
|
|
11440
|
+
effect((_$p) => setProp(_el$9, "fg", terminalColors.textMuted, _$p));
|
|
11441
|
+
return _el$;
|
|
11442
|
+
})();
|
|
11443
|
+
}
|
|
11444
|
+
|
|
11445
|
+
// src/screens/Lineage.tsx
|
|
11446
|
+
import { execFile as execFile3 } from "child_process";
|
|
11447
|
+
function formatDuration(ms) {
|
|
11448
|
+
const seconds = Math.floor(ms / 1e3);
|
|
11449
|
+
const minutes = Math.floor(seconds / 60);
|
|
11450
|
+
if (minutes > 0) return `${minutes}m`;
|
|
11451
|
+
return `${seconds}s`;
|
|
11452
|
+
}
|
|
11453
|
+
function Lineage(props) {
|
|
11454
|
+
const [loading, setLoading] = createSignal(true);
|
|
11455
|
+
const [result, setResult] = createSignal(null);
|
|
11456
|
+
const [error, setError] = createSignal(null);
|
|
11457
|
+
const [selectedIndex, setSelectedIndex] = createSignal(0);
|
|
11458
|
+
const [viewMode, setViewMode] = createSignal("skills");
|
|
11459
|
+
const rows = () => props.rows ?? 24;
|
|
11460
|
+
const visibleCount = () => Math.max(1, rows() - 14);
|
|
11461
|
+
const loadLineage = () => {
|
|
11462
|
+
setLoading(true);
|
|
11463
|
+
setError(null);
|
|
11464
|
+
try {
|
|
11465
|
+
execFile3("npx", ["skillkit", "lineage", "--json"], {
|
|
11466
|
+
timeout: 15e3,
|
|
11467
|
+
maxBuffer: 1024 * 1024
|
|
11468
|
+
}, (err, stdout, stderr) => {
|
|
11469
|
+
setLoading(false);
|
|
11470
|
+
if (err && !stdout) {
|
|
11471
|
+
setError(stderr || err.message || "Failed to load lineage");
|
|
11472
|
+
return;
|
|
11473
|
+
}
|
|
11474
|
+
try {
|
|
11475
|
+
const parsed = JSON.parse(stdout);
|
|
11476
|
+
setResult(parsed);
|
|
11477
|
+
} catch {
|
|
11478
|
+
setError("Failed to parse lineage data");
|
|
11479
|
+
}
|
|
11480
|
+
});
|
|
11481
|
+
} catch (err) {
|
|
11482
|
+
setLoading(false);
|
|
11483
|
+
setError(err instanceof Error ? err.message : "Failed to load lineage");
|
|
11278
11484
|
}
|
|
11485
|
+
};
|
|
11486
|
+
createEffect(() => {
|
|
11487
|
+
loadLineage();
|
|
11279
11488
|
});
|
|
11280
|
-
const
|
|
11281
|
-
|
|
11282
|
-
|
|
11283
|
-
rows: Math.max(1, contentHeight() - 1)
|
|
11489
|
+
const items = createMemo(() => {
|
|
11490
|
+
if (viewMode() === "skills") return result()?.skills ?? [];
|
|
11491
|
+
return result()?.files ?? [];
|
|
11284
11492
|
});
|
|
11285
|
-
|
|
11286
|
-
|
|
11287
|
-
|
|
11288
|
-
|
|
11289
|
-
|
|
11290
|
-
|
|
11291
|
-
|
|
11292
|
-
|
|
11293
|
-
|
|
11294
|
-
|
|
11295
|
-
|
|
11296
|
-
|
|
11297
|
-
|
|
11298
|
-
|
|
11299
|
-
|
|
11300
|
-
|
|
11301
|
-
|
|
11302
|
-
|
|
11303
|
-
|
|
11304
|
-
|
|
11305
|
-
|
|
11306
|
-
|
|
11307
|
-
|
|
11308
|
-
|
|
11309
|
-
|
|
11310
|
-
|
|
11311
|
-
|
|
11312
|
-
|
|
11313
|
-
|
|
11314
|
-
|
|
11315
|
-
|
|
11316
|
-
|
|
11317
|
-
|
|
11318
|
-
|
|
11319
|
-
|
|
11493
|
+
const windowStart = createMemo(() => Math.max(0, selectedIndex() - visibleCount() + 1));
|
|
11494
|
+
const visibleItems = createMemo(() => items().slice(windowStart(), windowStart() + visibleCount()));
|
|
11495
|
+
useKeyboard((key) => {
|
|
11496
|
+
if (key.name === "k" || key.name === "up") {
|
|
11497
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
11498
|
+
} else if (key.name === "j" || key.name === "down") {
|
|
11499
|
+
setSelectedIndex((i) => items().length > 0 ? Math.min(items().length - 1, i + 1) : 0);
|
|
11500
|
+
} else if (key.name === "tab") {
|
|
11501
|
+
setViewMode((m) => m === "skills" ? "files" : "skills");
|
|
11502
|
+
setSelectedIndex(0);
|
|
11503
|
+
} else if (key.name === "r") {
|
|
11504
|
+
loadLineage();
|
|
11505
|
+
} else if (key.name === "escape") {
|
|
11506
|
+
props.onNavigate("home");
|
|
11507
|
+
}
|
|
11508
|
+
});
|
|
11509
|
+
return (() => {
|
|
11510
|
+
var _el$ = createElement("box"), _el$30 = createElement("text"), _el$32 = createElement("text");
|
|
11511
|
+
insertNode(_el$, _el$30);
|
|
11512
|
+
insertNode(_el$, _el$32);
|
|
11513
|
+
setProp(_el$, "flexDirection", "column");
|
|
11514
|
+
setProp(_el$, "padding", 1);
|
|
11515
|
+
insert(_el$, createComponent2(Header, {
|
|
11516
|
+
title: "Lineage",
|
|
11517
|
+
subtitle: "skill impact graph",
|
|
11518
|
+
icon: "\u25C9"
|
|
11519
|
+
}), _el$30);
|
|
11520
|
+
insert(_el$, createComponent2(Show, {
|
|
11521
|
+
get when() {
|
|
11522
|
+
return loading();
|
|
11523
|
+
},
|
|
11524
|
+
get children() {
|
|
11525
|
+
return createComponent2(Spinner, {
|
|
11526
|
+
label: "Loading lineage..."
|
|
11527
|
+
});
|
|
11528
|
+
}
|
|
11529
|
+
}), _el$30);
|
|
11530
|
+
insert(_el$, createComponent2(Show, {
|
|
11531
|
+
get when() {
|
|
11532
|
+
return error();
|
|
11533
|
+
},
|
|
11534
|
+
get children() {
|
|
11535
|
+
var _el$2 = createElement("box"), _el$3 = createElement("text"), _el$4 = createTextNode(`Error: `), _el$5 = createElement("text");
|
|
11536
|
+
insertNode(_el$2, _el$3);
|
|
11537
|
+
insertNode(_el$2, _el$5);
|
|
11538
|
+
setProp(_el$2, "flexDirection", "column");
|
|
11539
|
+
insertNode(_el$3, _el$4);
|
|
11540
|
+
setProp(_el$3, "fg", "#ff5555");
|
|
11541
|
+
insert(_el$3, error, null);
|
|
11542
|
+
insertNode(_el$5, createTextNode(`Press r to retry`));
|
|
11543
|
+
effect((_$p) => setProp(_el$5, "fg", terminalColors.textMuted, _$p));
|
|
11544
|
+
return _el$2;
|
|
11545
|
+
}
|
|
11546
|
+
}), _el$30);
|
|
11547
|
+
insert(_el$, createComponent2(Show, {
|
|
11548
|
+
get when() {
|
|
11549
|
+
return memo2(() => !!(!loading() && !error()))() && result();
|
|
11550
|
+
},
|
|
11551
|
+
get children() {
|
|
11552
|
+
return [(() => {
|
|
11553
|
+
var _el$7 = createElement("box"), _el$8 = createElement("text"), _el$9 = createTextNode(` executions`), _el$0 = createElement("text"), _el$10 = createElement("text"), _el$11 = createTextNode(` commits`), _el$12 = createElement("text"), _el$14 = createElement("text"), _el$15 = createTextNode(` files`);
|
|
11554
|
+
insertNode(_el$7, _el$8);
|
|
11555
|
+
insertNode(_el$7, _el$0);
|
|
11556
|
+
insertNode(_el$7, _el$10);
|
|
11557
|
+
insertNode(_el$7, _el$12);
|
|
11558
|
+
insertNode(_el$7, _el$14);
|
|
11559
|
+
setProp(_el$7, "flexDirection", "row");
|
|
11560
|
+
setProp(_el$7, "gap", 2);
|
|
11561
|
+
setProp(_el$7, "marginBottom", 1);
|
|
11562
|
+
insertNode(_el$8, _el$9);
|
|
11563
|
+
insert(_el$8, () => result().stats.totalSkillExecutions, _el$9);
|
|
11564
|
+
insertNode(_el$0, createTextNode(`|`));
|
|
11565
|
+
insertNode(_el$10, _el$11);
|
|
11566
|
+
insert(_el$10, () => result().stats.totalCommits, _el$11);
|
|
11567
|
+
insertNode(_el$12, createTextNode(`|`));
|
|
11568
|
+
insertNode(_el$14, _el$15);
|
|
11569
|
+
insert(_el$14, () => result().stats.totalFilesChanged, _el$15);
|
|
11570
|
+
insert(_el$7, createComponent2(Show, {
|
|
11571
|
+
get when() {
|
|
11572
|
+
return result().stats.mostImpactfulSkill;
|
|
11573
|
+
},
|
|
11574
|
+
get children() {
|
|
11575
|
+
return [(() => {
|
|
11576
|
+
var _el$16 = createElement("text");
|
|
11577
|
+
insertNode(_el$16, createTextNode(`|`));
|
|
11578
|
+
effect((_$p) => setProp(_el$16, "fg", terminalColors.textMuted, _$p));
|
|
11579
|
+
return _el$16;
|
|
11580
|
+
})(), (() => {
|
|
11581
|
+
var _el$18 = createElement("text"), _el$19 = createTextNode(`top: `);
|
|
11582
|
+
insertNode(_el$18, _el$19);
|
|
11583
|
+
setProp(_el$18, "fg", "#22cc44");
|
|
11584
|
+
insert(_el$18, () => result().stats.mostImpactfulSkill, null);
|
|
11585
|
+
return _el$18;
|
|
11586
|
+
})()];
|
|
11587
|
+
}
|
|
11588
|
+
}), null);
|
|
11589
|
+
effect((_p$) => {
|
|
11590
|
+
var _v$ = terminalColors.text, _v$2 = terminalColors.textMuted, _v$3 = terminalColors.text, _v$4 = terminalColors.textMuted, _v$5 = terminalColors.text;
|
|
11591
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$8, "fg", _v$, _p$.e));
|
|
11592
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$0, "fg", _v$2, _p$.t));
|
|
11593
|
+
_v$3 !== _p$.a && (_p$.a = setProp(_el$10, "fg", _v$3, _p$.a));
|
|
11594
|
+
_v$4 !== _p$.o && (_p$.o = setProp(_el$12, "fg", _v$4, _p$.o));
|
|
11595
|
+
_v$5 !== _p$.i && (_p$.i = setProp(_el$14, "fg", _v$5, _p$.i));
|
|
11596
|
+
return _p$;
|
|
11597
|
+
}, {
|
|
11598
|
+
e: void 0,
|
|
11599
|
+
t: void 0,
|
|
11600
|
+
a: void 0,
|
|
11601
|
+
o: void 0,
|
|
11602
|
+
i: void 0
|
|
11603
|
+
});
|
|
11604
|
+
return _el$7;
|
|
11605
|
+
})(), (() => {
|
|
11606
|
+
var _el$20 = createElement("box"), _el$21 = createElement("text"), _el$22 = createTextNode(`Skills (`), _el$23 = createTextNode(`)`), _el$24 = createElement("text"), _el$25 = createTextNode(`Files (`), _el$26 = createTextNode(`)`), _el$27 = createElement("text");
|
|
11607
|
+
insertNode(_el$20, _el$21);
|
|
11608
|
+
insertNode(_el$20, _el$24);
|
|
11609
|
+
insertNode(_el$20, _el$27);
|
|
11610
|
+
setProp(_el$20, "flexDirection", "row");
|
|
11611
|
+
setProp(_el$20, "gap", 2);
|
|
11612
|
+
setProp(_el$20, "marginBottom", 1);
|
|
11613
|
+
insertNode(_el$21, _el$22);
|
|
11614
|
+
insertNode(_el$21, _el$23);
|
|
11615
|
+
insert(_el$21, () => result()?.skills?.length ?? 0, _el$23);
|
|
11616
|
+
insertNode(_el$24, _el$25);
|
|
11617
|
+
insertNode(_el$24, _el$26);
|
|
11618
|
+
insert(_el$24, () => result()?.files?.length ?? 0, _el$26);
|
|
11619
|
+
insertNode(_el$27, createTextNode(`(Tab to switch)`));
|
|
11620
|
+
effect((_p$) => {
|
|
11621
|
+
var _v$6 = viewMode() === "skills" ? terminalColors.accent : terminalColors.textMuted, _v$7 = viewMode() === "skills", _v$8 = viewMode() === "files" ? terminalColors.accent : terminalColors.textMuted, _v$9 = viewMode() === "files", _v$0 = terminalColors.textMuted;
|
|
11622
|
+
_v$6 !== _p$.e && (_p$.e = setProp(_el$21, "fg", _v$6, _p$.e));
|
|
11623
|
+
_v$7 !== _p$.t && (_p$.t = setProp(_el$21, "bold", _v$7, _p$.t));
|
|
11624
|
+
_v$8 !== _p$.a && (_p$.a = setProp(_el$24, "fg", _v$8, _p$.a));
|
|
11625
|
+
_v$9 !== _p$.o && (_p$.o = setProp(_el$24, "bold", _v$9, _p$.o));
|
|
11626
|
+
_v$0 !== _p$.i && (_p$.i = setProp(_el$27, "fg", _v$0, _p$.i));
|
|
11627
|
+
return _p$;
|
|
11628
|
+
}, {
|
|
11629
|
+
e: void 0,
|
|
11630
|
+
t: void 0,
|
|
11631
|
+
a: void 0,
|
|
11632
|
+
o: void 0,
|
|
11633
|
+
i: void 0
|
|
11634
|
+
});
|
|
11635
|
+
return _el$20;
|
|
11636
|
+
})(), (() => {
|
|
11637
|
+
var _el$29 = createElement("text");
|
|
11638
|
+
insert(_el$29, () => "\u2500".repeat(Math.min(60, (props.cols ?? 80) - 4)));
|
|
11639
|
+
effect((_$p) => setProp(_el$29, "fg", terminalColors.textMuted, _$p));
|
|
11640
|
+
return _el$29;
|
|
11641
|
+
})(), createComponent2(Show, {
|
|
11642
|
+
get when() {
|
|
11643
|
+
return items().length === 0;
|
|
11644
|
+
},
|
|
11645
|
+
get children() {
|
|
11646
|
+
return createComponent2(EmptyState, {
|
|
11647
|
+
get title() {
|
|
11648
|
+
return viewMode() === "skills" ? "No skill lineage data" : "No file lineage data";
|
|
11649
|
+
},
|
|
11650
|
+
description: "Execute skills to build lineage history"
|
|
11651
|
+
});
|
|
11652
|
+
}
|
|
11653
|
+
}), createComponent2(Show, {
|
|
11654
|
+
get when() {
|
|
11655
|
+
return items().length > 0;
|
|
11656
|
+
},
|
|
11657
|
+
get children() {
|
|
11658
|
+
return createComponent2(For, {
|
|
11659
|
+
get each() {
|
|
11660
|
+
return visibleItems();
|
|
11661
|
+
},
|
|
11662
|
+
children: (item, idx) => {
|
|
11663
|
+
const absoluteIdx = () => windowStart() + idx();
|
|
11664
|
+
const isSelected = () => absoluteIdx() === selectedIndex();
|
|
11665
|
+
return (() => {
|
|
11666
|
+
var _el$34 = createElement("box");
|
|
11667
|
+
setProp(_el$34, "flexDirection", "column");
|
|
11668
|
+
insert(_el$34, createComponent2(Show, {
|
|
11669
|
+
get when() {
|
|
11670
|
+
return viewMode() === "skills";
|
|
11671
|
+
},
|
|
11672
|
+
get children() {
|
|
11673
|
+
return (() => {
|
|
11674
|
+
const skill = item;
|
|
11675
|
+
return (() => {
|
|
11676
|
+
var _el$35 = createElement("box"), _el$36 = createElement("text"), _el$37 = createElement("text"), _el$38 = createElement("text"), _el$39 = createTextNode(`x`), _el$40 = createElement("text"), _el$41 = createElement("text"), _el$42 = createTextNode(` commits`), _el$43 = createElement("text"), _el$44 = createTextNode(` files`);
|
|
11677
|
+
insertNode(_el$35, _el$36);
|
|
11678
|
+
insertNode(_el$35, _el$37);
|
|
11679
|
+
insertNode(_el$35, _el$38);
|
|
11680
|
+
insertNode(_el$35, _el$40);
|
|
11681
|
+
insertNode(_el$35, _el$41);
|
|
11682
|
+
insertNode(_el$35, _el$43);
|
|
11683
|
+
setProp(_el$35, "flexDirection", "row");
|
|
11684
|
+
setProp(_el$35, "gap", 1);
|
|
11685
|
+
insert(_el$36, () => isSelected() ? ">" : " ");
|
|
11686
|
+
setProp(_el$37, "width", 24);
|
|
11687
|
+
insert(_el$37, () => skill.skillName);
|
|
11688
|
+
insertNode(_el$38, _el$39);
|
|
11689
|
+
setProp(_el$38, "width", 8);
|
|
11690
|
+
insert(_el$38, () => skill.executions, _el$39);
|
|
11691
|
+
setProp(_el$40, "width", 8);
|
|
11692
|
+
insert(_el$40, () => formatDuration(skill.totalDurationMs));
|
|
11693
|
+
insertNode(_el$41, _el$42);
|
|
11694
|
+
setProp(_el$41, "fg", "#fbbf24");
|
|
11695
|
+
setProp(_el$41, "width", 8);
|
|
11696
|
+
insert(_el$41, () => skill.commits.length, _el$42);
|
|
11697
|
+
insertNode(_el$43, _el$44);
|
|
11698
|
+
insert(_el$43, () => skill.filesModified.length, _el$44);
|
|
11699
|
+
effect((_p$) => {
|
|
11700
|
+
var _v$1 = isSelected() ? terminalColors.accent : terminalColors.textMuted, _v$10 = isSelected() ? terminalColors.text : terminalColors.textMuted, _v$11 = terminalColors.textMuted, _v$12 = terminalColors.textMuted, _v$13 = terminalColors.textMuted;
|
|
11701
|
+
_v$1 !== _p$.e && (_p$.e = setProp(_el$36, "fg", _v$1, _p$.e));
|
|
11702
|
+
_v$10 !== _p$.t && (_p$.t = setProp(_el$37, "fg", _v$10, _p$.t));
|
|
11703
|
+
_v$11 !== _p$.a && (_p$.a = setProp(_el$38, "fg", _v$11, _p$.a));
|
|
11704
|
+
_v$12 !== _p$.o && (_p$.o = setProp(_el$40, "fg", _v$12, _p$.o));
|
|
11705
|
+
_v$13 !== _p$.i && (_p$.i = setProp(_el$43, "fg", _v$13, _p$.i));
|
|
11706
|
+
return _p$;
|
|
11707
|
+
}, {
|
|
11708
|
+
e: void 0,
|
|
11709
|
+
t: void 0,
|
|
11710
|
+
a: void 0,
|
|
11711
|
+
o: void 0,
|
|
11712
|
+
i: void 0
|
|
11713
|
+
});
|
|
11714
|
+
return _el$35;
|
|
11715
|
+
})();
|
|
11716
|
+
})();
|
|
11717
|
+
}
|
|
11718
|
+
}), null);
|
|
11719
|
+
insert(_el$34, createComponent2(Show, {
|
|
11720
|
+
get when() {
|
|
11721
|
+
return viewMode() === "files";
|
|
11722
|
+
},
|
|
11723
|
+
get children() {
|
|
11724
|
+
return (() => {
|
|
11725
|
+
const file = item;
|
|
11726
|
+
return (() => {
|
|
11727
|
+
var _el$45 = createElement("box"), _el$46 = createElement("text"), _el$47 = createElement("text"), _el$48 = createElement("text"), _el$49 = createTextNode(` commits`), _el$50 = createElement("text");
|
|
11728
|
+
insertNode(_el$45, _el$46);
|
|
11729
|
+
insertNode(_el$45, _el$47);
|
|
11730
|
+
insertNode(_el$45, _el$48);
|
|
11731
|
+
insertNode(_el$45, _el$50);
|
|
11732
|
+
setProp(_el$45, "flexDirection", "row");
|
|
11733
|
+
setProp(_el$45, "gap", 1);
|
|
11734
|
+
insert(_el$46, () => isSelected() ? ">" : " ");
|
|
11735
|
+
setProp(_el$47, "width", 36);
|
|
11736
|
+
insert(_el$47, () => file.path);
|
|
11737
|
+
insertNode(_el$48, _el$49);
|
|
11738
|
+
setProp(_el$48, "fg", "#fbbf24");
|
|
11739
|
+
setProp(_el$48, "width", 10);
|
|
11740
|
+
insert(_el$48, () => file.commitCount, _el$49);
|
|
11741
|
+
insert(_el$50, () => file.skills.join(", "));
|
|
11742
|
+
effect((_p$) => {
|
|
11743
|
+
var _v$14 = isSelected() ? terminalColors.accent : terminalColors.textMuted, _v$15 = isSelected() ? terminalColors.text : terminalColors.textMuted, _v$16 = terminalColors.textMuted;
|
|
11744
|
+
_v$14 !== _p$.e && (_p$.e = setProp(_el$46, "fg", _v$14, _p$.e));
|
|
11745
|
+
_v$15 !== _p$.t && (_p$.t = setProp(_el$47, "fg", _v$15, _p$.t));
|
|
11746
|
+
_v$16 !== _p$.a && (_p$.a = setProp(_el$50, "fg", _v$16, _p$.a));
|
|
11747
|
+
return _p$;
|
|
11748
|
+
}, {
|
|
11749
|
+
e: void 0,
|
|
11750
|
+
t: void 0,
|
|
11751
|
+
a: void 0
|
|
11752
|
+
});
|
|
11753
|
+
return _el$45;
|
|
11754
|
+
})();
|
|
11755
|
+
})();
|
|
11756
|
+
}
|
|
11757
|
+
}), null);
|
|
11758
|
+
return _el$34;
|
|
11759
|
+
})();
|
|
11760
|
+
}
|
|
11761
|
+
});
|
|
11762
|
+
}
|
|
11763
|
+
})];
|
|
11764
|
+
}
|
|
11765
|
+
}), _el$30);
|
|
11766
|
+
insertNode(_el$30, createTextNode(` `));
|
|
11767
|
+
insertNode(_el$32, createTextNode(`j/k navigate Tab switch view r refresh esc back`));
|
|
11768
|
+
effect((_$p) => setProp(_el$32, "fg", terminalColors.textMuted, _$p));
|
|
11769
|
+
return _el$;
|
|
11770
|
+
})();
|
|
11771
|
+
}
|
|
11772
|
+
|
|
11773
|
+
// src/screens/Handoff.tsx
|
|
11774
|
+
import { execFile as execFile4 } from "child_process";
|
|
11775
|
+
function changeTypeLabel(changeType) {
|
|
11776
|
+
switch (changeType) {
|
|
11777
|
+
case "modified":
|
|
11778
|
+
return "M";
|
|
11779
|
+
case "created":
|
|
11780
|
+
return "A";
|
|
11781
|
+
default:
|
|
11782
|
+
return "D";
|
|
11783
|
+
}
|
|
11784
|
+
}
|
|
11785
|
+
function Handoff(props) {
|
|
11786
|
+
const [loading, setLoading] = createSignal(true);
|
|
11787
|
+
const [result, setResult] = createSignal(null);
|
|
11788
|
+
const [error, setError] = createSignal(null);
|
|
11789
|
+
const [section, setSection] = createSignal("accomplished");
|
|
11790
|
+
const loadHandoff = () => {
|
|
11791
|
+
setLoading(true);
|
|
11792
|
+
setError(null);
|
|
11793
|
+
try {
|
|
11794
|
+
execFile4("npx", ["skillkit", "session", "handoff", "--json"], {
|
|
11795
|
+
timeout: 15e3,
|
|
11796
|
+
maxBuffer: 1024 * 1024
|
|
11797
|
+
}, (err, stdout, stderr) => {
|
|
11798
|
+
setLoading(false);
|
|
11799
|
+
if (err && !stdout) {
|
|
11800
|
+
setError(stderr || err.message || "Failed to generate handoff");
|
|
11801
|
+
return;
|
|
11802
|
+
}
|
|
11803
|
+
try {
|
|
11804
|
+
const parsed = JSON.parse(stdout);
|
|
11805
|
+
setResult(parsed);
|
|
11806
|
+
} catch {
|
|
11807
|
+
setError("Failed to parse handoff data");
|
|
11808
|
+
}
|
|
11809
|
+
});
|
|
11810
|
+
} catch (err) {
|
|
11811
|
+
setLoading(false);
|
|
11812
|
+
setError(err instanceof Error ? err.message : "Failed to generate handoff");
|
|
11813
|
+
}
|
|
11814
|
+
};
|
|
11815
|
+
createEffect(() => {
|
|
11816
|
+
loadHandoff();
|
|
11817
|
+
});
|
|
11818
|
+
const sections = ["accomplished", "pending", "files", "recommendations"];
|
|
11819
|
+
useKeyboard((key) => {
|
|
11820
|
+
if (key.name === "tab") {
|
|
11821
|
+
const idx = sections.indexOf(section());
|
|
11822
|
+
setSection(sections[(idx + 1) % sections.length]);
|
|
11823
|
+
} else if (key.name === "r") {
|
|
11824
|
+
loadHandoff();
|
|
11825
|
+
} else if (key.name === "escape") {
|
|
11826
|
+
props.onNavigate("home");
|
|
11827
|
+
}
|
|
11828
|
+
});
|
|
11829
|
+
return (() => {
|
|
11830
|
+
var _el$ = createElement("box"), _el$36 = createElement("text"), _el$38 = createElement("text");
|
|
11831
|
+
insertNode(_el$, _el$36);
|
|
11832
|
+
insertNode(_el$, _el$38);
|
|
11833
|
+
setProp(_el$, "flexDirection", "column");
|
|
11834
|
+
setProp(_el$, "padding", 1);
|
|
11835
|
+
insert(_el$, createComponent2(Header, {
|
|
11836
|
+
title: "Handoff",
|
|
11837
|
+
subtitle: "agent-to-agent context transfer",
|
|
11838
|
+
icon: "\u21C4"
|
|
11839
|
+
}), _el$36);
|
|
11840
|
+
insert(_el$, createComponent2(Show, {
|
|
11841
|
+
get when() {
|
|
11842
|
+
return loading();
|
|
11843
|
+
},
|
|
11844
|
+
get children() {
|
|
11845
|
+
return createComponent2(Spinner, {
|
|
11846
|
+
label: "Generating handoff document..."
|
|
11847
|
+
});
|
|
11848
|
+
}
|
|
11849
|
+
}), _el$36);
|
|
11850
|
+
insert(_el$, createComponent2(Show, {
|
|
11851
|
+
get when() {
|
|
11852
|
+
return error();
|
|
11853
|
+
},
|
|
11854
|
+
get children() {
|
|
11855
|
+
var _el$2 = createElement("box"), _el$3 = createElement("text"), _el$4 = createTextNode(`Error: `), _el$5 = createElement("text");
|
|
11856
|
+
insertNode(_el$2, _el$3);
|
|
11857
|
+
insertNode(_el$2, _el$5);
|
|
11858
|
+
setProp(_el$2, "flexDirection", "column");
|
|
11859
|
+
insertNode(_el$3, _el$4);
|
|
11860
|
+
setProp(_el$3, "fg", "#ff5555");
|
|
11861
|
+
insert(_el$3, error, null);
|
|
11862
|
+
insertNode(_el$5, createTextNode(`Press r to retry`));
|
|
11863
|
+
effect((_$p) => setProp(_el$5, "fg", terminalColors.textMuted, _$p));
|
|
11864
|
+
return _el$2;
|
|
11865
|
+
}
|
|
11866
|
+
}), _el$36);
|
|
11867
|
+
insert(_el$, createComponent2(Show, {
|
|
11868
|
+
get when() {
|
|
11869
|
+
return memo2(() => !!(!loading() && !error()))() && result();
|
|
11870
|
+
},
|
|
11871
|
+
get children() {
|
|
11872
|
+
return [(() => {
|
|
11873
|
+
var _el$7 = createElement("box"), _el$8 = createElement("text"), _el$0 = createElement("text"), _el$1 = createElement("text"), _el$11 = createElement("text");
|
|
11874
|
+
insertNode(_el$7, _el$8);
|
|
11875
|
+
insertNode(_el$7, _el$0);
|
|
11876
|
+
insertNode(_el$7, _el$1);
|
|
11877
|
+
insertNode(_el$7, _el$11);
|
|
11878
|
+
setProp(_el$7, "flexDirection", "row");
|
|
11879
|
+
setProp(_el$7, "gap", 1);
|
|
11880
|
+
setProp(_el$7, "marginBottom", 1);
|
|
11881
|
+
insertNode(_el$8, createTextNode(`from:`));
|
|
11882
|
+
insert(_el$0, () => result().fromAgent);
|
|
11883
|
+
insertNode(_el$1, createTextNode(`|`));
|
|
11884
|
+
insert(_el$11, () => result().generatedAt);
|
|
11885
|
+
effect((_p$) => {
|
|
11886
|
+
var _v$ = terminalColors.textMuted, _v$2 = terminalColors.text, _v$3 = terminalColors.textMuted, _v$4 = terminalColors.textMuted;
|
|
11887
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$8, "fg", _v$, _p$.e));
|
|
11888
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$0, "fg", _v$2, _p$.t));
|
|
11889
|
+
_v$3 !== _p$.a && (_p$.a = setProp(_el$1, "fg", _v$3, _p$.a));
|
|
11890
|
+
_v$4 !== _p$.o && (_p$.o = setProp(_el$11, "fg", _v$4, _p$.o));
|
|
11891
|
+
return _p$;
|
|
11892
|
+
}, {
|
|
11893
|
+
e: void 0,
|
|
11894
|
+
t: void 0,
|
|
11895
|
+
a: void 0,
|
|
11896
|
+
o: void 0
|
|
11897
|
+
});
|
|
11898
|
+
return _el$7;
|
|
11899
|
+
})(), (() => {
|
|
11900
|
+
var _el$12 = createElement("box"), _el$13 = createElement("text");
|
|
11901
|
+
insertNode(_el$12, _el$13);
|
|
11902
|
+
setProp(_el$12, "flexDirection", "row");
|
|
11903
|
+
setProp(_el$12, "gap", 2);
|
|
11904
|
+
setProp(_el$12, "marginBottom", 1);
|
|
11905
|
+
insert(_el$12, createComponent2(For, {
|
|
11906
|
+
each: sections,
|
|
11907
|
+
children: (s) => (() => {
|
|
11908
|
+
var _el$40 = createElement("text");
|
|
11909
|
+
insert(_el$40, () => s.charAt(0).toUpperCase() + s.slice(1));
|
|
11910
|
+
effect((_p$) => {
|
|
11911
|
+
var _v$5 = section() === s ? terminalColors.accent : terminalColors.textMuted, _v$6 = section() === s;
|
|
11912
|
+
_v$5 !== _p$.e && (_p$.e = setProp(_el$40, "fg", _v$5, _p$.e));
|
|
11913
|
+
_v$6 !== _p$.t && (_p$.t = setProp(_el$40, "bold", _v$6, _p$.t));
|
|
11914
|
+
return _p$;
|
|
11915
|
+
}, {
|
|
11916
|
+
e: void 0,
|
|
11917
|
+
t: void 0
|
|
11918
|
+
});
|
|
11919
|
+
return _el$40;
|
|
11920
|
+
})()
|
|
11921
|
+
}), _el$13);
|
|
11922
|
+
insertNode(_el$13, createTextNode(`(Tab to switch)`));
|
|
11923
|
+
effect((_$p) => setProp(_el$13, "fg", terminalColors.textMuted, _$p));
|
|
11924
|
+
return _el$12;
|
|
11925
|
+
})(), (() => {
|
|
11926
|
+
var _el$15 = createElement("text");
|
|
11927
|
+
insert(_el$15, () => "\u2500".repeat(Math.min(60, (props.cols ?? 80) - 4)));
|
|
11928
|
+
effect((_$p) => setProp(_el$15, "fg", terminalColors.textMuted, _$p));
|
|
11929
|
+
return _el$15;
|
|
11930
|
+
})(), createComponent2(Show, {
|
|
11931
|
+
get when() {
|
|
11932
|
+
return section() === "accomplished";
|
|
11933
|
+
},
|
|
11934
|
+
get children() {
|
|
11935
|
+
return [(() => {
|
|
11936
|
+
var _el$16 = createElement("text");
|
|
11937
|
+
insertNode(_el$16, createTextNode(`Accomplished Tasks`));
|
|
11938
|
+
setProp(_el$16, "bold", true);
|
|
11939
|
+
effect((_$p) => setProp(_el$16, "fg", terminalColors.text, _$p));
|
|
11940
|
+
return _el$16;
|
|
11941
|
+
})(), (() => {
|
|
11942
|
+
var _el$18 = createElement("text");
|
|
11943
|
+
insertNode(_el$18, createTextNode(` `));
|
|
11944
|
+
return _el$18;
|
|
11945
|
+
})(), createComponent2(Show, {
|
|
11946
|
+
get when() {
|
|
11947
|
+
return result().accomplished.tasks.length === 0;
|
|
11948
|
+
},
|
|
11949
|
+
get children() {
|
|
11950
|
+
return createComponent2(EmptyState, {
|
|
11951
|
+
title: "No accomplished tasks in this session"
|
|
11952
|
+
});
|
|
11953
|
+
}
|
|
11954
|
+
}), createComponent2(For, {
|
|
11955
|
+
get each() {
|
|
11956
|
+
return result().accomplished.tasks;
|
|
11957
|
+
},
|
|
11958
|
+
children: (task) => (() => {
|
|
11959
|
+
var _el$41 = createElement("box"), _el$42 = createElement("text"), _el$44 = createElement("text");
|
|
11960
|
+
insertNode(_el$41, _el$42);
|
|
11961
|
+
insertNode(_el$41, _el$44);
|
|
11962
|
+
setProp(_el$41, "flexDirection", "row");
|
|
11963
|
+
setProp(_el$41, "gap", 1);
|
|
11964
|
+
insertNode(_el$42, createTextNode(`\u2713`));
|
|
11965
|
+
setProp(_el$42, "fg", "#22cc44");
|
|
11966
|
+
insert(_el$44, () => task.name);
|
|
11967
|
+
insert(_el$41, createComponent2(Show, {
|
|
11968
|
+
get when() {
|
|
11969
|
+
return task.duration;
|
|
11970
|
+
},
|
|
11971
|
+
get children() {
|
|
11972
|
+
var _el$45 = createElement("text"), _el$46 = createTextNode(`(`), _el$47 = createTextNode(`)`);
|
|
11973
|
+
insertNode(_el$45, _el$46);
|
|
11974
|
+
insertNode(_el$45, _el$47);
|
|
11975
|
+
insert(_el$45, () => task.duration, _el$47);
|
|
11976
|
+
effect((_$p) => setProp(_el$45, "fg", terminalColors.textMuted, _$p));
|
|
11977
|
+
return _el$45;
|
|
11978
|
+
}
|
|
11979
|
+
}), null);
|
|
11980
|
+
effect((_$p) => setProp(_el$44, "fg", terminalColors.text, _$p));
|
|
11981
|
+
return _el$41;
|
|
11982
|
+
})()
|
|
11983
|
+
}), createComponent2(Show, {
|
|
11984
|
+
get when() {
|
|
11985
|
+
return result().accomplished.commits.length > 0;
|
|
11986
|
+
},
|
|
11987
|
+
get children() {
|
|
11988
|
+
return [(() => {
|
|
11989
|
+
var _el$20 = createElement("text");
|
|
11990
|
+
insertNode(_el$20, createTextNode(` `));
|
|
11991
|
+
return _el$20;
|
|
11992
|
+
})(), (() => {
|
|
11993
|
+
var _el$22 = createElement("text");
|
|
11994
|
+
insertNode(_el$22, createTextNode(`Commits`));
|
|
11995
|
+
setProp(_el$22, "bold", true);
|
|
11996
|
+
effect((_$p) => setProp(_el$22, "fg", terminalColors.text, _$p));
|
|
11997
|
+
return _el$22;
|
|
11998
|
+
})(), createComponent2(For, {
|
|
11999
|
+
get each() {
|
|
12000
|
+
return result().accomplished.commits;
|
|
12001
|
+
},
|
|
12002
|
+
children: (commit) => (() => {
|
|
12003
|
+
var _el$48 = createElement("box"), _el$49 = createElement("text"), _el$51 = createElement("text"), _el$52 = createElement("text");
|
|
12004
|
+
insertNode(_el$48, _el$49);
|
|
12005
|
+
insertNode(_el$48, _el$51);
|
|
12006
|
+
insertNode(_el$48, _el$52);
|
|
12007
|
+
setProp(_el$48, "flexDirection", "row");
|
|
12008
|
+
setProp(_el$48, "gap", 1);
|
|
12009
|
+
insertNode(_el$49, createTextNode(`\u25CF`));
|
|
12010
|
+
setProp(_el$49, "fg", "#fbbf24");
|
|
12011
|
+
insert(_el$51, () => commit.sha.slice(0, 7));
|
|
12012
|
+
insert(_el$52, () => commit.message);
|
|
12013
|
+
effect((_p$) => {
|
|
12014
|
+
var _v$7 = terminalColors.textMuted, _v$8 = terminalColors.text;
|
|
12015
|
+
_v$7 !== _p$.e && (_p$.e = setProp(_el$51, "fg", _v$7, _p$.e));
|
|
12016
|
+
_v$8 !== _p$.t && (_p$.t = setProp(_el$52, "fg", _v$8, _p$.t));
|
|
12017
|
+
return _p$;
|
|
12018
|
+
}, {
|
|
12019
|
+
e: void 0,
|
|
12020
|
+
t: void 0
|
|
12021
|
+
});
|
|
12022
|
+
return _el$48;
|
|
12023
|
+
})()
|
|
12024
|
+
})];
|
|
12025
|
+
}
|
|
12026
|
+
})];
|
|
12027
|
+
}
|
|
12028
|
+
}), createComponent2(Show, {
|
|
12029
|
+
get when() {
|
|
12030
|
+
return section() === "pending";
|
|
12031
|
+
},
|
|
12032
|
+
get children() {
|
|
12033
|
+
return [(() => {
|
|
12034
|
+
var _el$24 = createElement("text");
|
|
12035
|
+
insertNode(_el$24, createTextNode(`Pending Tasks`));
|
|
12036
|
+
setProp(_el$24, "bold", true);
|
|
12037
|
+
effect((_$p) => setProp(_el$24, "fg", terminalColors.text, _$p));
|
|
12038
|
+
return _el$24;
|
|
12039
|
+
})(), (() => {
|
|
12040
|
+
var _el$26 = createElement("text");
|
|
12041
|
+
insertNode(_el$26, createTextNode(` `));
|
|
12042
|
+
return _el$26;
|
|
12043
|
+
})(), createComponent2(Show, {
|
|
12044
|
+
get when() {
|
|
12045
|
+
return result().pending.tasks.length === 0;
|
|
12046
|
+
},
|
|
12047
|
+
get children() {
|
|
12048
|
+
return createComponent2(EmptyState, {
|
|
12049
|
+
title: "No pending tasks"
|
|
12050
|
+
});
|
|
12051
|
+
}
|
|
12052
|
+
}), createComponent2(For, {
|
|
12053
|
+
get each() {
|
|
12054
|
+
return result().pending.tasks;
|
|
12055
|
+
},
|
|
12056
|
+
children: (task) => (() => {
|
|
12057
|
+
var _el$53 = createElement("box"), _el$54 = createElement("text"), _el$56 = createElement("text");
|
|
12058
|
+
insertNode(_el$53, _el$54);
|
|
12059
|
+
insertNode(_el$53, _el$56);
|
|
12060
|
+
setProp(_el$53, "flexDirection", "row");
|
|
12061
|
+
setProp(_el$53, "gap", 1);
|
|
12062
|
+
insertNode(_el$54, createTextNode(`\u25CB`));
|
|
12063
|
+
setProp(_el$54, "fg", "#ffaa00");
|
|
12064
|
+
insert(_el$56, () => task.name);
|
|
12065
|
+
effect((_$p) => setProp(_el$56, "fg", terminalColors.text, _$p));
|
|
12066
|
+
return _el$53;
|
|
12067
|
+
})()
|
|
12068
|
+
})];
|
|
12069
|
+
}
|
|
12070
|
+
}), createComponent2(Show, {
|
|
12071
|
+
get when() {
|
|
12072
|
+
return section() === "files";
|
|
12073
|
+
},
|
|
12074
|
+
get children() {
|
|
12075
|
+
return [(() => {
|
|
12076
|
+
var _el$28 = createElement("text");
|
|
12077
|
+
insertNode(_el$28, createTextNode(`Key Files`));
|
|
12078
|
+
setProp(_el$28, "bold", true);
|
|
12079
|
+
effect((_$p) => setProp(_el$28, "fg", terminalColors.text, _$p));
|
|
12080
|
+
return _el$28;
|
|
12081
|
+
})(), (() => {
|
|
12082
|
+
var _el$30 = createElement("text");
|
|
12083
|
+
insertNode(_el$30, createTextNode(` `));
|
|
12084
|
+
return _el$30;
|
|
12085
|
+
})(), createComponent2(Show, {
|
|
12086
|
+
get when() {
|
|
12087
|
+
return result().keyFiles.length === 0;
|
|
12088
|
+
},
|
|
12089
|
+
get children() {
|
|
12090
|
+
return createComponent2(EmptyState, {
|
|
12091
|
+
title: "No key files tracked"
|
|
12092
|
+
});
|
|
12093
|
+
}
|
|
12094
|
+
}), createComponent2(For, {
|
|
12095
|
+
get each() {
|
|
12096
|
+
return result().keyFiles;
|
|
12097
|
+
},
|
|
12098
|
+
children: (file) => (() => {
|
|
12099
|
+
var _el$57 = createElement("box"), _el$58 = createElement("text"), _el$59 = createElement("text");
|
|
12100
|
+
insertNode(_el$57, _el$58);
|
|
12101
|
+
insertNode(_el$57, _el$59);
|
|
12102
|
+
setProp(_el$57, "flexDirection", "row");
|
|
12103
|
+
setProp(_el$57, "gap", 1);
|
|
12104
|
+
insert(_el$58, () => changeTypeLabel(file.changeType));
|
|
12105
|
+
insert(_el$59, () => file.path);
|
|
12106
|
+
effect((_p$) => {
|
|
12107
|
+
var _v$9 = terminalColors.textMuted, _v$0 = terminalColors.text;
|
|
12108
|
+
_v$9 !== _p$.e && (_p$.e = setProp(_el$58, "fg", _v$9, _p$.e));
|
|
12109
|
+
_v$0 !== _p$.t && (_p$.t = setProp(_el$59, "fg", _v$0, _p$.t));
|
|
12110
|
+
return _p$;
|
|
12111
|
+
}, {
|
|
12112
|
+
e: void 0,
|
|
12113
|
+
t: void 0
|
|
12114
|
+
});
|
|
12115
|
+
return _el$57;
|
|
12116
|
+
})()
|
|
12117
|
+
})];
|
|
12118
|
+
}
|
|
12119
|
+
}), createComponent2(Show, {
|
|
12120
|
+
get when() {
|
|
12121
|
+
return section() === "recommendations";
|
|
12122
|
+
},
|
|
12123
|
+
get children() {
|
|
12124
|
+
return [(() => {
|
|
12125
|
+
var _el$32 = createElement("text");
|
|
12126
|
+
insertNode(_el$32, createTextNode(`Recommendations`));
|
|
12127
|
+
setProp(_el$32, "bold", true);
|
|
12128
|
+
effect((_$p) => setProp(_el$32, "fg", terminalColors.text, _$p));
|
|
12129
|
+
return _el$32;
|
|
12130
|
+
})(), (() => {
|
|
12131
|
+
var _el$34 = createElement("text");
|
|
12132
|
+
insertNode(_el$34, createTextNode(` `));
|
|
12133
|
+
return _el$34;
|
|
12134
|
+
})(), createComponent2(Show, {
|
|
12135
|
+
get when() {
|
|
12136
|
+
return result().recommendations.length === 0;
|
|
12137
|
+
},
|
|
12138
|
+
get children() {
|
|
12139
|
+
return createComponent2(EmptyState, {
|
|
12140
|
+
title: "No recommendations"
|
|
12141
|
+
});
|
|
12142
|
+
}
|
|
12143
|
+
}), createComponent2(For, {
|
|
12144
|
+
get each() {
|
|
12145
|
+
return result().recommendations;
|
|
12146
|
+
},
|
|
12147
|
+
children: (rec) => (() => {
|
|
12148
|
+
var _el$60 = createElement("box"), _el$61 = createElement("text"), _el$63 = createElement("text");
|
|
12149
|
+
insertNode(_el$60, _el$61);
|
|
12150
|
+
insertNode(_el$60, _el$63);
|
|
12151
|
+
setProp(_el$60, "flexDirection", "row");
|
|
12152
|
+
setProp(_el$60, "gap", 1);
|
|
12153
|
+
insertNode(_el$61, createTextNode(`\u2192`));
|
|
12154
|
+
insert(_el$63, rec);
|
|
12155
|
+
effect((_p$) => {
|
|
12156
|
+
var _v$1 = terminalColors.accent, _v$10 = terminalColors.text;
|
|
12157
|
+
_v$1 !== _p$.e && (_p$.e = setProp(_el$61, "fg", _v$1, _p$.e));
|
|
12158
|
+
_v$10 !== _p$.t && (_p$.t = setProp(_el$63, "fg", _v$10, _p$.t));
|
|
12159
|
+
return _p$;
|
|
12160
|
+
}, {
|
|
12161
|
+
e: void 0,
|
|
12162
|
+
t: void 0
|
|
12163
|
+
});
|
|
12164
|
+
return _el$60;
|
|
12165
|
+
})()
|
|
12166
|
+
})];
|
|
12167
|
+
}
|
|
12168
|
+
})];
|
|
12169
|
+
}
|
|
12170
|
+
}), _el$36);
|
|
12171
|
+
insertNode(_el$36, createTextNode(` `));
|
|
12172
|
+
insertNode(_el$38, createTextNode(`Tab switch section r refresh esc back`));
|
|
12173
|
+
effect((_$p) => setProp(_el$38, "fg", terminalColors.textMuted, _$p));
|
|
12174
|
+
return _el$;
|
|
12175
|
+
})();
|
|
12176
|
+
}
|
|
12177
|
+
|
|
12178
|
+
// src/App.tsx
|
|
12179
|
+
var DOCS_URL = "https://agenstskills.com/docs";
|
|
12180
|
+
function openUrl(url) {
|
|
12181
|
+
if (process.platform === "win32") {
|
|
12182
|
+
execFile5("cmd", ["/c", "start", "", url]);
|
|
12183
|
+
} else {
|
|
12184
|
+
const cmd = process.platform === "darwin" ? "open" : "xdg-open";
|
|
12185
|
+
execFile5(cmd, [url]);
|
|
12186
|
+
}
|
|
12187
|
+
}
|
|
12188
|
+
function App(props) {
|
|
12189
|
+
const [showSplash, setShowSplash] = createSignal(true);
|
|
12190
|
+
const [currentScreen, setCurrentScreen] = createSignal("home");
|
|
12191
|
+
const [showSidebar, setShowSidebar] = createSignal(true);
|
|
12192
|
+
const [dimensions, setDimensions] = createSignal({
|
|
12193
|
+
cols: process.stdout.columns || 80,
|
|
12194
|
+
rows: process.stdout.rows || 24
|
|
12195
|
+
});
|
|
12196
|
+
createEffect(() => {
|
|
12197
|
+
const handleResize = () => {
|
|
12198
|
+
setDimensions({
|
|
12199
|
+
cols: process.stdout.columns || 80,
|
|
12200
|
+
rows: process.stdout.rows || 24
|
|
12201
|
+
});
|
|
12202
|
+
};
|
|
12203
|
+
process.stdout.on("resize", handleResize);
|
|
12204
|
+
onCleanup(() => {
|
|
12205
|
+
process.stdout.off("resize", handleResize);
|
|
12206
|
+
});
|
|
12207
|
+
});
|
|
12208
|
+
const cols = () => dimensions().cols;
|
|
12209
|
+
const rows = () => dimensions().rows;
|
|
12210
|
+
const sidebarVisible = () => showSidebar() && cols() >= 80;
|
|
12211
|
+
const sidebarWidth = () => {
|
|
12212
|
+
if (!sidebarVisible()) return 0;
|
|
12213
|
+
if (cols() >= 100) return 24;
|
|
12214
|
+
return 18;
|
|
12215
|
+
};
|
|
12216
|
+
const statusBarHeight = 2;
|
|
12217
|
+
const contentHeight = () => rows() - statusBarHeight;
|
|
12218
|
+
const handleNavigate = (newScreen) => {
|
|
12219
|
+
setCurrentScreen(newScreen);
|
|
12220
|
+
};
|
|
12221
|
+
const handleSplashComplete = () => {
|
|
12222
|
+
setShowSplash(false);
|
|
12223
|
+
};
|
|
12224
|
+
useKeyboard((key) => {
|
|
12225
|
+
if (showSplash()) {
|
|
12226
|
+
setShowSplash(false);
|
|
12227
|
+
return;
|
|
12228
|
+
}
|
|
12229
|
+
if (key.name === "q" || key.ctrl && key.name === "c") {
|
|
12230
|
+
props.onExit ? props.onExit(0) : process.exit(0);
|
|
12231
|
+
return;
|
|
12232
|
+
}
|
|
12233
|
+
if (key.name === "d") {
|
|
12234
|
+
openUrl(DOCS_URL);
|
|
12235
|
+
return;
|
|
12236
|
+
}
|
|
12237
|
+
if (key.sequence === "\\") {
|
|
12238
|
+
setShowSidebar((v) => !v);
|
|
12239
|
+
return;
|
|
12240
|
+
}
|
|
12241
|
+
const targetScreen = NAV_KEYS[key.name || ""];
|
|
12242
|
+
if (targetScreen) {
|
|
12243
|
+
setCurrentScreen(targetScreen);
|
|
12244
|
+
}
|
|
12245
|
+
if (key.name === "escape" && currentScreen() !== "home") {
|
|
12246
|
+
setCurrentScreen("home");
|
|
12247
|
+
}
|
|
12248
|
+
});
|
|
12249
|
+
const screenProps = () => ({
|
|
12250
|
+
onNavigate: handleNavigate,
|
|
12251
|
+
cols: Math.max(1, cols() - sidebarWidth() - 2),
|
|
12252
|
+
rows: Math.max(1, contentHeight() - 1)
|
|
12253
|
+
});
|
|
12254
|
+
return createComponent2(Show, {
|
|
12255
|
+
get when() {
|
|
12256
|
+
return !showSplash();
|
|
12257
|
+
},
|
|
12258
|
+
get fallback() {
|
|
12259
|
+
return createComponent2(Splash, {
|
|
12260
|
+
onComplete: handleSplashComplete,
|
|
12261
|
+
duration: 3e3
|
|
12262
|
+
});
|
|
12263
|
+
},
|
|
12264
|
+
get children() {
|
|
12265
|
+
var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("box");
|
|
12266
|
+
insertNode(_el$, _el$2);
|
|
12267
|
+
setProp(_el$, "flexDirection", "column");
|
|
12268
|
+
insertNode(_el$2, _el$3);
|
|
12269
|
+
setProp(_el$2, "flexDirection", "row");
|
|
12270
|
+
insert(_el$2, createComponent2(Show, {
|
|
12271
|
+
get when() {
|
|
12272
|
+
return sidebarVisible();
|
|
12273
|
+
},
|
|
12274
|
+
get children() {
|
|
12275
|
+
return createComponent2(Sidebar, {
|
|
12276
|
+
get screen() {
|
|
12277
|
+
return currentScreen();
|
|
12278
|
+
},
|
|
12279
|
+
onNavigate: handleNavigate
|
|
12280
|
+
});
|
|
12281
|
+
}
|
|
12282
|
+
}), _el$3);
|
|
12283
|
+
setProp(_el$3, "flexDirection", "column");
|
|
12284
|
+
setProp(_el$3, "flexGrow", 1);
|
|
12285
|
+
setProp(_el$3, "paddingX", 1);
|
|
12286
|
+
insert(_el$3, createComponent2(Switch, {
|
|
12287
|
+
get fallback() {
|
|
12288
|
+
return createComponent2(Home, mergeProps3(screenProps));
|
|
11320
12289
|
},
|
|
11321
12290
|
get children() {
|
|
11322
12291
|
return [createComponent2(Match, {
|
|
@@ -11466,6 +12435,27 @@ function App(props) {
|
|
|
11466
12435
|
get children() {
|
|
11467
12436
|
return createComponent2(Scan, mergeProps3(screenProps));
|
|
11468
12437
|
}
|
|
12438
|
+
}), createComponent2(Match, {
|
|
12439
|
+
get when() {
|
|
12440
|
+
return currentScreen() === "timeline";
|
|
12441
|
+
},
|
|
12442
|
+
get children() {
|
|
12443
|
+
return createComponent2(Timeline2, mergeProps3(screenProps));
|
|
12444
|
+
}
|
|
12445
|
+
}), createComponent2(Match, {
|
|
12446
|
+
get when() {
|
|
12447
|
+
return currentScreen() === "lineage";
|
|
12448
|
+
},
|
|
12449
|
+
get children() {
|
|
12450
|
+
return createComponent2(Lineage, mergeProps3(screenProps));
|
|
12451
|
+
}
|
|
12452
|
+
}), createComponent2(Match, {
|
|
12453
|
+
get when() {
|
|
12454
|
+
return currentScreen() === "handoff";
|
|
12455
|
+
},
|
|
12456
|
+
get children() {
|
|
12457
|
+
return createComponent2(Handoff, mergeProps3(screenProps));
|
|
12458
|
+
}
|
|
11469
12459
|
})];
|
|
11470
12460
|
}
|
|
11471
12461
|
}));
|
|
@@ -11890,7 +12880,10 @@ var SCREEN_LABELS = {
|
|
|
11890
12880
|
help: "Help",
|
|
11891
12881
|
mesh: "Mesh",
|
|
11892
12882
|
message: "Message",
|
|
11893
|
-
scan: "Security Scan"
|
|
12883
|
+
scan: "Security Scan",
|
|
12884
|
+
timeline: "Timeline",
|
|
12885
|
+
lineage: "Lineage",
|
|
12886
|
+
handoff: "Handoff"
|
|
11894
12887
|
};
|
|
11895
12888
|
function BottomStatusBar(props) {
|
|
11896
12889
|
const version = getVersion();
|
|
@@ -14130,6 +15123,7 @@ export {
|
|
|
14130
15123
|
FeatureList,
|
|
14131
15124
|
FocusRing,
|
|
14132
15125
|
FormField,
|
|
15126
|
+
Handoff,
|
|
14133
15127
|
Header,
|
|
14134
15128
|
Help,
|
|
14135
15129
|
HighlightableListItem,
|
|
@@ -14141,6 +15135,7 @@ export {
|
|
|
14141
15135
|
InlineStatus,
|
|
14142
15136
|
Installed,
|
|
14143
15137
|
InteractiveArea,
|
|
15138
|
+
Lineage,
|
|
14144
15139
|
LoadingState,
|
|
14145
15140
|
Marketplace,
|
|
14146
15141
|
Memory,
|
|
@@ -14180,6 +15175,7 @@ export {
|
|
|
14180
15175
|
Team,
|
|
14181
15176
|
TextAreaField,
|
|
14182
15177
|
ThreePaneLayout,
|
|
15178
|
+
Timeline2 as Timeline,
|
|
14183
15179
|
Translate,
|
|
14184
15180
|
Try,
|
|
14185
15181
|
VerticalTabBar,
|