pantheon-opencode 1.5.0-beta.12 → 1.5.0-beta.13
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/CHANGELOG.md +31 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/pyproject.toml +1 -1
- package/src/plugins/tui/dist/tui.d.ts +67 -76
- package/src/plugins/tui/dist/tui.d.ts.map +1 -1
- package/src/plugins/tui/dist/tui.js +215 -320
- package/src/plugins/tui/package-lock.json +2 -2
- package/src/plugins/tui/package.json +1 -1
- package/src/plugins/tui/src/index.tsx +199 -296
|
@@ -165,7 +165,7 @@ async function detectVersion(api) {
|
|
|
165
165
|
if (ver) return ver;
|
|
166
166
|
}
|
|
167
167
|
} catch {}
|
|
168
|
-
return "1.5.0-beta.
|
|
168
|
+
return "1.5.0-beta.13";
|
|
169
169
|
}
|
|
170
170
|
/**
|
|
171
171
|
* usage-bar — AI subscription usage gauge for the opencode TUI.
|
|
@@ -933,22 +933,19 @@ function compareDelegationEntries(a, b) {
|
|
|
933
933
|
return (b.updatedAt ?? b.startedAt) - (a.updatedAt ?? a.startedAt);
|
|
934
934
|
}
|
|
935
935
|
/** Split the panel list: active jobs (running/retry, stale-marked) first,
|
|
936
|
-
* then the most recent terminal reports
|
|
937
|
-
*
|
|
936
|
+
* then the most recent terminal reports; the remaining tail is collapsed
|
|
937
|
+
* by the View into a single "… +N more" line. Pure — so the history-only panel (no sessionID) is testable
|
|
938
938
|
* without the TUI runtime. */
|
|
939
939
|
function splitDelegationList(all, maxRecent = 8, now = Date.now(), staleThresholdMs = 1800 * 1e3) {
|
|
940
940
|
const isActiveState = (st) => st === "running" || st === "retry" || st === "stale-running";
|
|
941
|
-
const active = all.filter((d) => isActiveState(d.state)).map((d) => markStaleIfRunning(d, now, staleThresholdMs));
|
|
942
|
-
const terminal = all.filter((d) => !isActiveState(d.state));
|
|
943
941
|
return {
|
|
944
|
-
active,
|
|
945
|
-
recent:
|
|
946
|
-
archived: terminal.slice(maxRecent)
|
|
942
|
+
active: all.filter((d) => isActiveState(d.state)).map((d) => markStaleIfRunning(d, now, staleThresholdMs)),
|
|
943
|
+
recent: all.filter((d) => !isActiveState(d.state)).slice(0, maxRecent)
|
|
947
944
|
};
|
|
948
945
|
}
|
|
949
|
-
/**
|
|
950
|
-
* existing tests): active jobs first, then the most
|
|
951
|
-
* reports (capped)
|
|
946
|
+
/** Live-first window used by {@link ceilingDelegationList} (kept for the
|
|
947
|
+
* ceiling helper and existing tests): active jobs first, then the most
|
|
948
|
+
* recent terminal reports (capped). Pure. */
|
|
952
949
|
function visibleDelegationList(all, maxTerminal = 8, now = Date.now(), staleThresholdMs = 1800 * 1e3) {
|
|
953
950
|
const { active, recent } = splitDelegationList(all, maxTerminal, now, staleThresholdMs);
|
|
954
951
|
return [...active, ...recent];
|
|
@@ -976,7 +973,7 @@ function markStaleIfRunning(entry, now, thresholdMs = STALE_RUNNING_THRESHOLD_MS
|
|
|
976
973
|
state: "stale-running"
|
|
977
974
|
};
|
|
978
975
|
}
|
|
979
|
-
/** Compact elapsed-time label: "
|
|
976
|
+
/** Compact elapsed-time label, single unit only: "12s"/"3m"/"1h"/"2d" — ticks every
|
|
980
977
|
* second for running jobs. */
|
|
981
978
|
function fmtElapsed(ms) {
|
|
982
979
|
const total = Math.max(0, Math.floor(ms / 1e3));
|
|
@@ -984,9 +981,9 @@ function fmtElapsed(ms) {
|
|
|
984
981
|
const hours = Math.floor(total % 86400 / 3600);
|
|
985
982
|
const minutes = Math.floor(total % 3600 / 60);
|
|
986
983
|
const seconds = total % 60;
|
|
987
|
-
if (days > 0) return `${days}d
|
|
988
|
-
if (hours > 0) return `${hours}h
|
|
989
|
-
if (minutes > 0) return `${minutes}m
|
|
984
|
+
if (days > 0) return `${days}d`;
|
|
985
|
+
if (hours > 0) return `${hours}h`;
|
|
986
|
+
if (minutes > 0) return `${minutes}m`;
|
|
990
987
|
return `${seconds}s`;
|
|
991
988
|
}
|
|
992
989
|
/** Elapsed label for one entry: an ACTIVE entry (running/retry/stale-running)
|
|
@@ -1040,32 +1037,12 @@ function delegationSpinnerFrame(now) {
|
|
|
1040
1037
|
* (`retry`, `stale-running`). Fase 1 deliberately omits speculative
|
|
1041
1038
|
* blocked/paused/scheduled/skipped. There is no `pending` display state: a
|
|
1042
1039
|
* pre-dispatch tool part maps to `running` in {@link reduceDelegationToolPart}. */
|
|
1043
|
-
/** Static glyph per display state. `running` shows its base spinner frame;
|
|
1044
|
-
* callers that animate must prefer {@link delegationStateMarker}. Unicode
|
|
1045
|
-
* geometric shapes only (no Nerd Font) — shape is an independent channel
|
|
1046
|
-
* from color, so rows stay legible without color. */
|
|
1047
|
-
const DELEGATION_STATE_GLYPHS = {
|
|
1048
|
-
running: "⠋",
|
|
1049
|
-
retry: "⟳",
|
|
1050
|
-
"stale-running": "⚠",
|
|
1051
|
-
completed: "✓",
|
|
1052
|
-
error: "✕",
|
|
1053
|
-
cancelled: "−",
|
|
1054
|
-
startup_failed: "⚠",
|
|
1055
|
-
startup_unknown: "⚠"
|
|
1056
|
-
};
|
|
1057
|
-
function delegationStateGlyph(state) {
|
|
1058
|
-
return DELEGATION_STATE_GLYPHS[state];
|
|
1059
|
-
}
|
|
1060
|
-
/** Row marker (`<glyph> `) — the state channel. `running` animates through
|
|
1061
|
-
* {@link delegationSpinnerFrame} for the given tick; every other state is
|
|
1062
|
-
* static. Pure. */
|
|
1063
|
-
function delegationStateMarker(state, now = Date.now()) {
|
|
1064
|
-
return `${state === "running" ? delegationSpinnerFrame(now) : delegationStateGlyph(state)} `;
|
|
1065
|
-
}
|
|
1066
1040
|
/** Semantic tone mapped to the TUI theme at the row ({@link DelegationRow}).
|
|
1067
1041
|
* Kept separate + pure so the color channel is testable without booting the
|
|
1068
1042
|
* renderer. */
|
|
1043
|
+
/** Color is the ONLY channel separating `stale-running` from a live `running`
|
|
1044
|
+
* row — the 4-glyph row design has no dedicated stale shape. Display-only;
|
|
1045
|
+
* no behavior change. */
|
|
1069
1046
|
function delegationStateTone(state) {
|
|
1070
1047
|
switch (state) {
|
|
1071
1048
|
case "running":
|
|
@@ -1082,9 +1059,6 @@ function delegationStateTone(state) {
|
|
|
1082
1059
|
const latestToolActivity = /* @__PURE__ */ new Map();
|
|
1083
1060
|
const MAX_TOOL_ACTIVITY_ENTRIES = 200;
|
|
1084
1061
|
const TOOL_ACTIVITY_TTL_MS = 300 * 1e3;
|
|
1085
|
-
/** Archived-section pagination state — module-level so it survives sidebar
|
|
1086
|
-
* remounts (route changes) without leaking into the component tree. */
|
|
1087
|
-
const archivedUiState = { page: 0 };
|
|
1088
1062
|
/** First usable summary string from common tool input fields. */
|
|
1089
1063
|
function summarizeToolInput(input) {
|
|
1090
1064
|
if (!input) return "";
|
|
@@ -1155,6 +1129,11 @@ function mergeChildDelegationSources(children, live) {
|
|
|
1155
1129
|
for (const liveEntry of live) {
|
|
1156
1130
|
if (liveEntry.alias === null && liveEntry.taskID === null && Date.now() - liveEntry.startedAt > 3e4) continue;
|
|
1157
1131
|
const incoming = toDelegationEntry(liveEntry);
|
|
1132
|
+
const isNativeLive = liveEntry.tool === "task" && liveEntry.alias === null;
|
|
1133
|
+
if (isNativeLive) {
|
|
1134
|
+
incoming.source = "children-only";
|
|
1135
|
+
incoming.alias = "native-task";
|
|
1136
|
+
}
|
|
1158
1137
|
const index = (incoming.taskID !== void 0 ? byTask.get(incoming.taskID) : void 0) ?? (incoming.alias !== "" ? bySessionAlias.get(key(incoming.sessionID, incoming.alias)) : void 0);
|
|
1159
1138
|
if (index === void 0) {
|
|
1160
1139
|
result.push(incoming);
|
|
@@ -1182,7 +1161,7 @@ function mergeChildDelegationSources(children, live) {
|
|
|
1182
1161
|
startedAt: Math.min(existing.startedAt, incoming.startedAt),
|
|
1183
1162
|
updatedAt: incoming.updatedAt,
|
|
1184
1163
|
read: incoming.read,
|
|
1185
|
-
source: "live"
|
|
1164
|
+
source: isNativeLive ? existing.source : "live"
|
|
1186
1165
|
};
|
|
1187
1166
|
}
|
|
1188
1167
|
result.sort(compareDelegationEntries);
|
|
@@ -1366,7 +1345,7 @@ function removeDelegationEntry(map, partIDOrCallID) {
|
|
|
1366
1345
|
* SDK exposes `api.state.part(messageID)`). The native `task` tool spawns a
|
|
1367
1346
|
* child session with parentID = caller — the same mechanism as
|
|
1368
1347
|
* pantheon_delegate — so its parts feed the live-map as the native signal
|
|
1369
|
-
* (rows
|
|
1348
|
+
* (rows come from the children channel). Pure w.r.t. I/O — used
|
|
1370
1349
|
* by the mount re-scan to re-seed the live map after compaction/attach. */
|
|
1371
1350
|
function collectDelegationToolParts(messages, getParts) {
|
|
1372
1351
|
const out = [];
|
|
@@ -1499,44 +1478,14 @@ function mergeBoardDelegationSources(base, board) {
|
|
|
1499
1478
|
bySessionAlias.set(key(incoming.sessionID, incoming.alias), next);
|
|
1500
1479
|
continue;
|
|
1501
1480
|
}
|
|
1502
|
-
out[index] =
|
|
1481
|
+
out[index] = {
|
|
1482
|
+
...incoming,
|
|
1483
|
+
sessionID: incoming.sessionID !== "" ? incoming.sessionID : out[index]?.sessionID ?? ""
|
|
1484
|
+
};
|
|
1503
1485
|
}
|
|
1504
1486
|
out.sort(compareDelegationEntries);
|
|
1505
1487
|
return out;
|
|
1506
1488
|
}
|
|
1507
|
-
/** 'session' = focused session only (default); 'all' = every session the
|
|
1508
|
-
* board knows about. */
|
|
1509
|
-
/** api.kv key holding the persisted scope (defaults to 'session'). */
|
|
1510
|
-
const DELEGATION_SCOPE_KV_KEY = "delegations.scope";
|
|
1511
|
-
/** Structural subset of TuiKV — kept local so the pure helpers are testable
|
|
1512
|
-
* without the TUI runtime. */
|
|
1513
|
-
/** Read the persisted scope; anything malformed/absent → 'session'. */
|
|
1514
|
-
function readDelegationScope(kv) {
|
|
1515
|
-
try {
|
|
1516
|
-
return kv?.get?.("delegations.scope", "session") === "all" ? "all" : "session";
|
|
1517
|
-
} catch {
|
|
1518
|
-
return "session";
|
|
1519
|
-
}
|
|
1520
|
-
}
|
|
1521
|
-
/** Persist the scope. Failure is non-fatal — the signal keeps it in memory. */
|
|
1522
|
-
function writeDelegationScope(kv, scope) {
|
|
1523
|
-
try {
|
|
1524
|
-
kv?.set?.(DELEGATION_SCOPE_KV_KEY, scope);
|
|
1525
|
-
} catch {}
|
|
1526
|
-
}
|
|
1527
|
-
/** Keyboard/click toggle target. Pure. */
|
|
1528
|
-
function nextDelegationScope(scope) {
|
|
1529
|
-
return scope === "session" ? "all" : "session";
|
|
1530
|
-
}
|
|
1531
|
-
/** Keep only the focused session's jobs ('session') or all of them ('all').
|
|
1532
|
-
* An empty sessionID marks a current-session child (the children channel is
|
|
1533
|
-
* session-scoped and only fills sessionID from a matching md report), so it
|
|
1534
|
-
* counts as the current session. With no resolved session there is nothing
|
|
1535
|
-
* to scope against — fail-open to the full list. Pure. */
|
|
1536
|
-
function filterDelegationsByScope(entries, scope, sessionID) {
|
|
1537
|
-
if (scope === "all" || sessionID === null) return [...entries];
|
|
1538
|
-
return entries.filter((entry) => entry.sessionID === sessionID || entry.sessionID === "");
|
|
1539
|
-
}
|
|
1540
1489
|
/** Server-aligned session id validity: opencode rejects anything not starting
|
|
1541
1490
|
* with "ses" (SchemaError). This deliberately mirrors that exact contract —
|
|
1542
1491
|
* nothing stricter, nothing looser — so a template placeholder ("{sessionID}"),
|
|
@@ -1593,33 +1542,59 @@ function childStatusToState(status) {
|
|
|
1593
1542
|
if (status === "retry") return "retry";
|
|
1594
1543
|
return "running";
|
|
1595
1544
|
}
|
|
1596
|
-
/**
|
|
1597
|
-
* that split native task() work from pantheon_delegate jobs — the other is
|
|
1598
|
-
* {@link delegationIcon}):
|
|
1545
|
+
/** Status-only row model: ONE glyph + ONE identity per row.
|
|
1599
1546
|
*
|
|
1600
|
-
*
|
|
1601
|
-
*
|
|
1602
|
-
*
|
|
1603
|
-
*
|
|
1604
|
-
|
|
1605
|
-
*
|
|
1606
|
-
*
|
|
1607
|
-
*
|
|
1608
|
-
function
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1547
|
+
* A row is
|
|
1548
|
+
* `{glyph} {alias:7} {elapsed:>5}` plus a muted description line. The short
|
|
1549
|
+
* alias (`apo-1`) is the single identity; rows without a board alias show
|
|
1550
|
+
* the agent instead (never both). */
|
|
1551
|
+
/** Map every FSM/display state to one of the 4 row kinds. reconciled never
|
|
1552
|
+
* reaches the panel (the board parser drops it) but reads as done;
|
|
1553
|
+
* cancelled reads as done; startup_failed reads as failed while
|
|
1554
|
+
* startup_unknown (no error known) reads as retry. Pure. */
|
|
1555
|
+
function delegationRowStatus(state) {
|
|
1556
|
+
switch (state) {
|
|
1557
|
+
case "running":
|
|
1558
|
+
case "stale-running": return "active";
|
|
1559
|
+
case "retry":
|
|
1560
|
+
case "startup_unknown": return "retry";
|
|
1561
|
+
case "completed":
|
|
1562
|
+
case "cancelled": return "done";
|
|
1563
|
+
case "error":
|
|
1564
|
+
case "startup_failed": return "failed";
|
|
1565
|
+
}
|
|
1566
|
+
}
|
|
1567
|
+
/** The only 4 glyphs a row may show: animated active, done, failed, retry.
|
|
1568
|
+
* Shape is redundant with color (never the only signal). Pure. */
|
|
1569
|
+
const DELEGATION_ROW_GLYPHS = {
|
|
1570
|
+
active: "⠋",
|
|
1571
|
+
done: "✓",
|
|
1572
|
+
failed: "✕",
|
|
1573
|
+
retry: "⟳"
|
|
1574
|
+
};
|
|
1575
|
+
function delegationRowGlyph(status) {
|
|
1576
|
+
return DELEGATION_ROW_GLYPHS[status];
|
|
1577
|
+
}
|
|
1578
|
+
/** Row marker (`<glyph> `) — the single state channel. `active` animates
|
|
1579
|
+
* through the 1s spinner for the given tick; every other kind is static.
|
|
1580
|
+
* Pure. */
|
|
1581
|
+
function delegationRowMarker(state, now = Date.now()) {
|
|
1582
|
+
const status = delegationRowStatus(state);
|
|
1583
|
+
return `${status === "active" ? delegationSpinnerFrame(now) : delegationRowGlyph(status)} `;
|
|
1584
|
+
}
|
|
1585
|
+
/** ONE identity per row: the short board alias (`apo-1`); a row without a
|
|
1586
|
+
* board alias (native task() child, alias `native-task`) shows the agent
|
|
1587
|
+
* instead — never alias + agent stacked. Pure. */
|
|
1588
|
+
function delegationRowIdentity(entry) {
|
|
1589
|
+
if (entry.alias === "native-task" && entry.agent !== "") return entry.agent;
|
|
1590
|
+
return entry.alias;
|
|
1591
|
+
}
|
|
1592
|
+
/** Fixed alias cell, pad-right + hard-truncate to `width` (default 7) so
|
|
1593
|
+
* identities line up across rows. Pure. */
|
|
1594
|
+
const DELEGATION_ALIAS_WIDTH = 7;
|
|
1595
|
+
function formatDelegationAlias(identity, width = 7) {
|
|
1596
|
+
if (identity.length >= width) return identity.slice(0, width);
|
|
1597
|
+
return `${identity}${" ".repeat(width - identity.length)}`;
|
|
1623
1598
|
}
|
|
1624
1599
|
/** Max description width on the row detail line — the old 180-char slice
|
|
1625
1600
|
* wrapped the sidebar; 44 keeps one readable line. */
|
|
@@ -1645,33 +1620,61 @@ function truncateDelegationDescription(text, max = 44) {
|
|
|
1645
1620
|
if (graphemes.length <= max) return text;
|
|
1646
1621
|
return `${graphemes.slice(0, Math.max(0, max - 1)).join("")}\u2026`;
|
|
1647
1622
|
}
|
|
1648
|
-
/** Fixed elapsed-time box: right-aligned to `width` (default
|
|
1649
|
-
* values line up across rows, e.g. `
|
|
1623
|
+
/** Fixed elapsed-time box: right-aligned to `width` (default 5) so elapsed
|
|
1624
|
+
* values line up across rows, e.g. ` 12s`. A label that already fills
|
|
1650
1625
|
* the box is returned untouched. Pure. */
|
|
1651
|
-
const DELEGATION_ELAPSED_WIDTH =
|
|
1652
|
-
function formatDelegationElapsed(entry, now, width =
|
|
1626
|
+
const DELEGATION_ELAPSED_WIDTH = 5;
|
|
1627
|
+
function formatDelegationElapsed(entry, now, width = 5) {
|
|
1653
1628
|
const label = delegationElapsed(entry, now);
|
|
1654
1629
|
if (label.length >= width) return label;
|
|
1655
1630
|
return `${" ".repeat(width - label.length)}${label}`;
|
|
1656
1631
|
}
|
|
1657
|
-
/**
|
|
1658
|
-
*
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
}
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
*
|
|
1632
|
+
/** Colored left half of a row line: `<marker><alias:7> ` — the state glyph
|
|
1633
|
+
* plus the single identity, padded so the muted elapsed column aligns. The
|
|
1634
|
+
* row renders this colored lead separately from the muted elapsed tail. Pure. */
|
|
1635
|
+
function formatDelegationRowLead(entry, marker) {
|
|
1636
|
+
return `${marker}${formatDelegationAlias(delegationRowIdentity(entry))} `;
|
|
1637
|
+
}
|
|
1638
|
+
/** Visible-row ceiling for the panel: the remainder collapses into a single
|
|
1639
|
+
* "… +N more" line. Live rows render first, so a running job is never hidden
|
|
1640
|
+
* by the cap. */
|
|
1641
|
+
const DELEGATION_VISIBLE_CEILING = 8;
|
|
1642
|
+
/** Header summary: `(N active · M done)` plus `· K failed` only when K > 0.
|
|
1643
|
+
* Active counts running/retry AND display-only stale-running (a stale row is
|
|
1644
|
+
* still a live job — it must never read as done); failed counts
|
|
1645
|
+
* error/startup_failed; cancelled reads as done. Pure. */
|
|
1665
1646
|
function formatDelegationHeader(entries) {
|
|
1666
1647
|
let active = 0;
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
const
|
|
1670
|
-
|
|
1648
|
+
let done = 0;
|
|
1649
|
+
let failed = 0;
|
|
1650
|
+
for (const e of entries) switch (delegationRowStatus(e.state)) {
|
|
1651
|
+
case "active":
|
|
1652
|
+
case "retry":
|
|
1653
|
+
active++;
|
|
1654
|
+
break;
|
|
1655
|
+
case "failed":
|
|
1656
|
+
failed++;
|
|
1657
|
+
break;
|
|
1658
|
+
case "done":
|
|
1659
|
+
done++;
|
|
1660
|
+
break;
|
|
1661
|
+
}
|
|
1662
|
+
const tail = failed > 0 ? ` · ${failed} failed` : "";
|
|
1663
|
+
return `(${active} active · ${done} done${tail})`;
|
|
1664
|
+
}
|
|
1665
|
+
/** Cap the panel: live rows first, then most-recent terminal rows, at most
|
|
1666
|
+
* `maxVisible` total. `hidden` is how many were dropped (rendered as
|
|
1667
|
+
* "… +N more"). Pure. */
|
|
1668
|
+
function ceilingDelegationList(all, maxVisible = 8, now = Date.now()) {
|
|
1669
|
+
const visible = visibleDelegationList(all, maxVisible, now).slice(0, maxVisible);
|
|
1670
|
+
return {
|
|
1671
|
+
visible,
|
|
1672
|
+
hidden: Math.max(0, all.length - visible.length)
|
|
1673
|
+
};
|
|
1671
1674
|
}
|
|
1672
1675
|
/** Split a display list into native task() rows vs pantheon_delegate rows.
|
|
1673
1676
|
* Native = source 'children-only' (no board report); everything else counts
|
|
1674
|
-
* as pantheon. Pure — powers the
|
|
1677
|
+
* as pantheon. Pure — powers the hooks.log line. */
|
|
1675
1678
|
function countDelegationSources(entries) {
|
|
1676
1679
|
let native = 0;
|
|
1677
1680
|
for (const e of entries) if (e.source === "children-only") native++;
|
|
@@ -1696,15 +1699,18 @@ function formatPanelLogLine(children, pantheon, native, md, events) {
|
|
|
1696
1699
|
* time.created. A report-less child is a NATIVE task() child (every
|
|
1697
1700
|
* child of the current session — pantheon_delegate OR the native `task()`
|
|
1698
1701
|
* tool — carries parentID = caller), so it gets source 'children-only',
|
|
1699
|
-
* the internal alias 'native-task'
|
|
1702
|
+
* the internal alias 'native-task' instead of a
|
|
1700
1703
|
* board alias. The 'task nativa' description fallback keeps the row
|
|
1701
1704
|
* non-empty when the child carries no title.
|
|
1702
1705
|
* Terminal md state wins over the derived state; a running md defers to
|
|
1703
1706
|
* the child's live status. A running child is NEVER archived — it always
|
|
1704
1707
|
* lands in the active split (splitDelegationList active = running/retry).
|
|
1708
|
+
* `parentSessionID` (the focused session id) is stamped on report-less
|
|
1709
|
+
* children so the row carries its origin session; omit it and they stay
|
|
1710
|
+
* unscoped ('').
|
|
1705
1711
|
* Sorted running-first (compareDelegationEntries).
|
|
1706
1712
|
* Pure — no I/O. */
|
|
1707
|
-
function childrenToDelegationEntries(children, md, now = Date.now()) {
|
|
1713
|
+
function childrenToDelegationEntries(children, md, now = Date.now(), parentSessionID = "") {
|
|
1708
1714
|
const byTaskID = /* @__PURE__ */ new Map();
|
|
1709
1715
|
for (const m of md) if (m.taskID !== void 0 && !byTaskID.has(m.taskID)) byTaskID.set(m.taskID, m);
|
|
1710
1716
|
const out = [];
|
|
@@ -1716,7 +1722,7 @@ function childrenToDelegationEntries(children, md, now = Date.now()) {
|
|
|
1716
1722
|
const state = mdEntry !== void 0 && mdEntry.state !== "running" ? mdEntry.state : childStatusToState(child.status);
|
|
1717
1723
|
out.push({
|
|
1718
1724
|
alias: mdEntry?.alias ?? "native-task",
|
|
1719
|
-
sessionID: mdEntry?.sessionID ??
|
|
1725
|
+
sessionID: mdEntry?.sessionID ?? parentSessionID,
|
|
1720
1726
|
taskID: child.id,
|
|
1721
1727
|
agent: mdEntry?.agent ?? child.agent ?? "agent",
|
|
1722
1728
|
state,
|
|
@@ -1802,7 +1808,7 @@ function SessionRow(props) {
|
|
|
1802
1808
|
}
|
|
1803
1809
|
function DelegationRow(props) {
|
|
1804
1810
|
const theme = () => props.api.theme.current;
|
|
1805
|
-
const
|
|
1811
|
+
const tone = createMemo(() => {
|
|
1806
1812
|
const t = theme();
|
|
1807
1813
|
switch (delegationStateTone(props.job.state)) {
|
|
1808
1814
|
case "warning": return t.warning;
|
|
@@ -1811,57 +1817,54 @@ function DelegationRow(props) {
|
|
|
1811
1817
|
default: return t.textMuted;
|
|
1812
1818
|
}
|
|
1813
1819
|
});
|
|
1814
|
-
const marker = createMemo(() =>
|
|
1815
|
-
const
|
|
1816
|
-
const description = createMemo(() => truncateDelegationDescription(props.job.description));
|
|
1820
|
+
const marker = createMemo(() => delegationRowMarker(props.job.state, props.animationNow));
|
|
1821
|
+
const lead = createMemo(() => formatDelegationRowLead(props.job, marker()));
|
|
1817
1822
|
const elapsed = createMemo(() => formatDelegationElapsed(props.job, props.now));
|
|
1823
|
+
const description = createMemo(() => truncateDelegationDescription(props.job.description));
|
|
1818
1824
|
const activity = createMemo(() => latestToolActivityFor(latestToolActivity, props.job.taskID, props.now));
|
|
1819
1825
|
const open = () => {
|
|
1820
1826
|
navigateToDelegationSession(props.api.route, props.job.taskID);
|
|
1821
1827
|
};
|
|
1822
1828
|
return (() => {
|
|
1823
|
-
var _el$13 = createElement("box"), _el$14 = createElement("box"), _el$15 = createElement("text"), _el$16 = createElement("
|
|
1829
|
+
var _el$13 = createElement("box"), _el$14 = createElement("box"), _el$15 = createElement("text"), _el$16 = createElement("span"), _el$17 = createElement("span");
|
|
1824
1830
|
insertNode(_el$13, _el$14);
|
|
1825
|
-
insertNode(_el$13, _el$16);
|
|
1826
1831
|
setProp(_el$13, "onMouseDown", open);
|
|
1827
1832
|
insertNode(_el$14, _el$15);
|
|
1828
1833
|
setProp(_el$14, "flexDirection", "row");
|
|
1829
|
-
|
|
1830
|
-
insertNode(_el$
|
|
1831
|
-
|
|
1832
|
-
insert(_el$
|
|
1834
|
+
insertNode(_el$15, _el$16);
|
|
1835
|
+
insertNode(_el$15, _el$17);
|
|
1836
|
+
insert(_el$16, lead);
|
|
1837
|
+
insert(_el$17, elapsed);
|
|
1838
|
+
insert(_el$13, createComponent(Show, {
|
|
1833
1839
|
get when() {
|
|
1834
1840
|
return description() !== "";
|
|
1835
1841
|
},
|
|
1836
1842
|
get children() {
|
|
1837
|
-
var _el$
|
|
1838
|
-
insert(_el$
|
|
1839
|
-
effect((_$p) => setProp(_el$
|
|
1840
|
-
return _el$
|
|
1843
|
+
var _el$18 = createElement("text");
|
|
1844
|
+
insert(_el$18, () => ` ${description()}`);
|
|
1845
|
+
effect((_$p) => setProp(_el$18, "fg", theme().textMuted, _$p));
|
|
1846
|
+
return _el$18;
|
|
1841
1847
|
}
|
|
1842
|
-
}),
|
|
1843
|
-
insert(_el$18, elapsed);
|
|
1848
|
+
}), null);
|
|
1844
1849
|
insert(_el$13, createComponent(Show, {
|
|
1845
1850
|
get when() {
|
|
1846
1851
|
return activity();
|
|
1847
1852
|
},
|
|
1848
1853
|
children: (a) => (() => {
|
|
1849
1854
|
var _el$19 = createElement("text");
|
|
1850
|
-
insert(_el$19, () => `
|
|
1855
|
+
insert(_el$19, () => ` ↳ ${truncateDelegationDescription(`${a().tool}${a().summary !== "" ? ` ${a().summary}` : ""}`)}`);
|
|
1851
1856
|
effect((_$p) => setProp(_el$19, "fg", theme().textMuted, _$p));
|
|
1852
1857
|
return _el$19;
|
|
1853
1858
|
})()
|
|
1854
1859
|
}), null);
|
|
1855
1860
|
effect((_p$) => {
|
|
1856
|
-
var _v$5 =
|
|
1857
|
-
_v$5 !== _p$.e && (_p$.e = setProp(_el$
|
|
1858
|
-
_v$6 !== _p$.t && (_p$.t = setProp(_el$
|
|
1859
|
-
_v$7 !== _p$.a && (_p$.a = setProp(_el$18, "fg", _v$7, _p$.a));
|
|
1861
|
+
var _v$5 = tone(), _v$6 = theme().textMuted;
|
|
1862
|
+
_v$5 !== _p$.e && (_p$.e = setProp(_el$16, "fg", _v$5, _p$.e));
|
|
1863
|
+
_v$6 !== _p$.t && (_p$.t = setProp(_el$17, "fg", _v$6, _p$.t));
|
|
1860
1864
|
return _p$;
|
|
1861
1865
|
}, {
|
|
1862
1866
|
e: void 0,
|
|
1863
|
-
t: void 0
|
|
1864
|
-
a: void 0
|
|
1867
|
+
t: void 0
|
|
1865
1868
|
});
|
|
1866
1869
|
return _el$13;
|
|
1867
1870
|
})();
|
|
@@ -1921,11 +1924,6 @@ function View(props) {
|
|
|
1921
1924
|
});
|
|
1922
1925
|
const projectRoot = createMemo(() => resolvePantheonRoot(props.api.state.path));
|
|
1923
1926
|
const panelLog = createTuiLogger(projectRoot());
|
|
1924
|
-
const [delegationScope, setDelegationScope] = createSignal(readDelegationScope(props.api.kv));
|
|
1925
|
-
const applyDelegationScope = (scope) => {
|
|
1926
|
-
setDelegationScope(scope);
|
|
1927
|
-
writeDelegationScope(props.api.kv, scope);
|
|
1928
|
-
};
|
|
1929
1927
|
const [childDelegations, setChildDelegations] = createSignal([]);
|
|
1930
1928
|
const [now, setNow] = createSignal(Date.now());
|
|
1931
1929
|
const [animationNow, setAnimationNow] = createSignal(Date.now());
|
|
@@ -1977,8 +1975,7 @@ function View(props) {
|
|
|
1977
1975
|
const childEntries = childrenToDelegationEntries(children.map((c) => ({
|
|
1978
1976
|
...c,
|
|
1979
1977
|
status: resolveStatus(c.id)
|
|
1980
|
-
})), md, now());
|
|
1981
|
-
for (const entry of childEntries) if (entry.sessionID === "") entry.sessionID = sessionID;
|
|
1978
|
+
})), md, now(), sessionID);
|
|
1982
1979
|
for (const [k, v] of props.liveStore.map) if (v.alias === null && v.taskID === null && Date.now() - v.startedAt > 3e4) props.liveStore.map.delete(k);
|
|
1983
1980
|
const liveEntries = [...props.liveStore.map.values()].filter((entry) => entry.sessionID === sessionID);
|
|
1984
1981
|
setChildDelegations(mergeBoardDelegationSources(mergeChildDelegationSources(childEntries, liveEntries), board));
|
|
@@ -1990,19 +1987,8 @@ function View(props) {
|
|
|
1990
1987
|
})();
|
|
1991
1988
|
return delegationsInflight;
|
|
1992
1989
|
};
|
|
1993
|
-
const
|
|
1994
|
-
|
|
1995
|
-
api: props.api
|
|
1996
|
-
})));
|
|
1997
|
-
const delegationSplit = createMemo(() => splitDelegationList(scopedDelegations()));
|
|
1998
|
-
const visibleDelegations = createMemo(() => [...delegationSplit().active, ...delegationSplit().recent]);
|
|
1999
|
-
const delegationHeader = createMemo(() => formatDelegationHeader(scopedDelegations()));
|
|
2000
|
-
const [archivedPage, setArchivedPage] = createSignal(archivedUiState.page);
|
|
2001
|
-
const clampArchivedPage = (page, pages) => {
|
|
2002
|
-
const clamped = Math.max(0, Math.min(page, Math.max(0, pages - 1)));
|
|
2003
|
-
archivedUiState.page = clamped;
|
|
2004
|
-
setArchivedPage(clamped);
|
|
2005
|
-
};
|
|
1990
|
+
const delegationCeiling = createMemo(() => ceilingDelegationList(childDelegations(), 8, now()));
|
|
1991
|
+
const delegationHeader = createMemo(() => formatDelegationHeader(childDelegations()));
|
|
2006
1992
|
onMount(() => {
|
|
2007
1993
|
const cleanup = [];
|
|
2008
1994
|
try {
|
|
@@ -2046,23 +2032,6 @@ function View(props) {
|
|
|
2046
2032
|
if (parts.length > 0 && seedLiveDelegationMap(props.liveStore.map, parts) > 0) props.liveStore.bump();
|
|
2047
2033
|
}
|
|
2048
2034
|
} catch {}
|
|
2049
|
-
try {
|
|
2050
|
-
const keymap = props.api?.keymap;
|
|
2051
|
-
if (typeof keymap?.registerLayer === "function") {
|
|
2052
|
-
const off = keymap.registerLayer({
|
|
2053
|
-
priority: 1e3,
|
|
2054
|
-
commands: [{
|
|
2055
|
-
name: "pantheon.delegations.toggleScope",
|
|
2056
|
-
run: () => applyDelegationScope(nextDelegationScope(delegationScope()))
|
|
2057
|
-
}],
|
|
2058
|
-
bindings: [{
|
|
2059
|
-
key: "ctrl+shift+d",
|
|
2060
|
-
cmd: "pantheon.delegations.toggleScope"
|
|
2061
|
-
}]
|
|
2062
|
-
});
|
|
2063
|
-
if (typeof off === "function") cleanup.push(off);
|
|
2064
|
-
}
|
|
2065
|
-
} catch {}
|
|
2066
2035
|
onCleanup(() => cleanup.forEach((fn) => {
|
|
2067
2036
|
fn();
|
|
2068
2037
|
}));
|
|
@@ -2074,7 +2043,7 @@ function View(props) {
|
|
|
2074
2043
|
return _el$20;
|
|
2075
2044
|
})();
|
|
2076
2045
|
return (() => {
|
|
2077
|
-
var _el$22 = createElement("box"), _el$23 = createElement("text"), _el$24 = createElement("box"), _el$25 = createElement("text"), _el$26 = createElement("text"), _el$28 = createElement("box"), _el$29 = createElement("text"), _el$30 = createElement("text")
|
|
2046
|
+
var _el$22 = createElement("box"), _el$23 = createElement("text"), _el$24 = createElement("box"), _el$25 = createElement("text"), _el$26 = createElement("text"), _el$28 = createElement("box"), _el$29 = createElement("text"), _el$30 = createElement("text");
|
|
2078
2047
|
insertNode(_el$22, _el$23);
|
|
2079
2048
|
insertNode(_el$22, _el$24);
|
|
2080
2049
|
insertNode(_el$22, _el$28);
|
|
@@ -2087,10 +2056,10 @@ function View(props) {
|
|
|
2087
2056
|
return branch();
|
|
2088
2057
|
},
|
|
2089
2058
|
children: (b) => (() => {
|
|
2090
|
-
var _el$
|
|
2091
|
-
insert(_el$
|
|
2092
|
-
effect((_$p) => setProp(_el$
|
|
2093
|
-
return _el$
|
|
2059
|
+
var _el$33 = createElement("text");
|
|
2060
|
+
insert(_el$33, b);
|
|
2061
|
+
effect((_$p) => setProp(_el$33, "fg", theme().textMuted, _$p));
|
|
2062
|
+
return _el$33;
|
|
2094
2063
|
})()
|
|
2095
2064
|
}), _el$24);
|
|
2096
2065
|
insert(_el$22, createComponent(Show, {
|
|
@@ -2099,37 +2068,37 @@ function View(props) {
|
|
|
2099
2068
|
},
|
|
2100
2069
|
get fallback() {
|
|
2101
2070
|
return (() => {
|
|
2102
|
-
var _el$
|
|
2103
|
-
insertNode(_el$
|
|
2104
|
-
setProp(_el$
|
|
2105
|
-
setProp(_el$
|
|
2106
|
-
insertNode(_el$
|
|
2107
|
-
effect((_$p) => setProp(_el$
|
|
2108
|
-
return _el$
|
|
2071
|
+
var _el$34 = createElement("box"), _el$35 = createElement("text");
|
|
2072
|
+
insertNode(_el$34, _el$35);
|
|
2073
|
+
setProp(_el$34, "flexDirection", "row");
|
|
2074
|
+
setProp(_el$34, "gap", 1);
|
|
2075
|
+
insertNode(_el$35, createTextNode(`Preset: default`));
|
|
2076
|
+
effect((_$p) => setProp(_el$35, "fg", theme().textMuted, _$p));
|
|
2077
|
+
return _el$34;
|
|
2109
2078
|
})();
|
|
2110
2079
|
},
|
|
2111
2080
|
children: (name) => (() => {
|
|
2112
|
-
var _el$
|
|
2113
|
-
insertNode(_el$
|
|
2114
|
-
insertNode(_el$
|
|
2115
|
-
insertNode(_el$
|
|
2116
|
-
setProp(_el$
|
|
2117
|
-
setProp(_el$
|
|
2118
|
-
insertNode(_el$
|
|
2119
|
-
insert(_el$
|
|
2120
|
-
insert(_el$
|
|
2081
|
+
var _el$37 = createElement("box"), _el$38 = createElement("text"), _el$40 = createElement("text"), _el$41 = createElement("text");
|
|
2082
|
+
insertNode(_el$37, _el$38);
|
|
2083
|
+
insertNode(_el$37, _el$40);
|
|
2084
|
+
insertNode(_el$37, _el$41);
|
|
2085
|
+
setProp(_el$37, "flexDirection", "row");
|
|
2086
|
+
setProp(_el$37, "gap", 1);
|
|
2087
|
+
insertNode(_el$38, createTextNode(`⚡ Preset:`));
|
|
2088
|
+
insert(_el$40, name);
|
|
2089
|
+
insert(_el$41, () => `(${preset().source ?? ""})`);
|
|
2121
2090
|
effect((_p$) => {
|
|
2122
|
-
var _v$
|
|
2123
|
-
_v$
|
|
2124
|
-
_v$
|
|
2125
|
-
_v$
|
|
2091
|
+
var _v$10 = theme().textMuted, _v$11 = theme().accent, _v$12 = theme().textMuted;
|
|
2092
|
+
_v$10 !== _p$.e && (_p$.e = setProp(_el$38, "fg", _v$10, _p$.e));
|
|
2093
|
+
_v$11 !== _p$.t && (_p$.t = setProp(_el$40, "fg", _v$11, _p$.t));
|
|
2094
|
+
_v$12 !== _p$.a && (_p$.a = setProp(_el$41, "fg", _v$12, _p$.a));
|
|
2126
2095
|
return _p$;
|
|
2127
2096
|
}, {
|
|
2128
2097
|
e: void 0,
|
|
2129
2098
|
t: void 0,
|
|
2130
2099
|
a: void 0
|
|
2131
2100
|
});
|
|
2132
|
-
return _el$
|
|
2101
|
+
return _el$37;
|
|
2133
2102
|
})()
|
|
2134
2103
|
}), _el$24);
|
|
2135
2104
|
insert(_el$22, createComponent(HR, {}), _el$24);
|
|
@@ -2150,12 +2119,12 @@ function View(props) {
|
|
|
2150
2119
|
},
|
|
2151
2120
|
get fallback() {
|
|
2152
2121
|
return (() => {
|
|
2153
|
-
var _el$
|
|
2154
|
-
insertNode(_el$
|
|
2155
|
-
setProp(_el$
|
|
2156
|
-
insertNode(_el$
|
|
2157
|
-
effect((_$p) => setProp(_el$
|
|
2158
|
-
return _el$
|
|
2122
|
+
var _el$42 = createElement("box"), _el$43 = createElement("text");
|
|
2123
|
+
insertNode(_el$42, _el$43);
|
|
2124
|
+
setProp(_el$42, "marginLeft", 1);
|
|
2125
|
+
insertNode(_el$43, createTextNode(`No recent sessions`));
|
|
2126
|
+
effect((_$p) => setProp(_el$43, "fg", theme().textMuted, _$p));
|
|
2127
|
+
return _el$42;
|
|
2159
2128
|
})();
|
|
2160
2129
|
},
|
|
2161
2130
|
get children() {
|
|
@@ -2180,26 +2149,13 @@ function View(props) {
|
|
|
2180
2149
|
}), _el$28);
|
|
2181
2150
|
insertNode(_el$28, _el$29);
|
|
2182
2151
|
insertNode(_el$28, _el$30);
|
|
2183
|
-
insertNode(_el$28, _el$31);
|
|
2184
|
-
insertNode(_el$28, _el$33);
|
|
2185
|
-
insertNode(_el$28, _el$35);
|
|
2186
|
-
insertNode(_el$28, _el$37);
|
|
2187
2152
|
setProp(_el$28, "onMouseDown", () => setShowDelegations((x) => !x));
|
|
2188
2153
|
setProp(_el$29, "attributes", 1);
|
|
2189
2154
|
insert(_el$29, () => `${showDelegations() ? "▼" : "▶"} Delegations`);
|
|
2190
|
-
insert(_el$30, () =>
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
if (typeof e === "object" && e !== null && "stopPropagation" in e) e.stopPropagation();
|
|
2195
|
-
applyDelegationScope("session");
|
|
2196
|
-
});
|
|
2197
|
-
insertNode(_el$35, createTextNode(`/`));
|
|
2198
|
-
insertNode(_el$37, createTextNode(`[Tudo]`));
|
|
2199
|
-
setProp(_el$37, "onMouseDown", (e) => {
|
|
2200
|
-
if (typeof e === "object" && e !== null && "stopPropagation" in e) e.stopPropagation();
|
|
2201
|
-
applyDelegationScope("all");
|
|
2202
|
-
});
|
|
2155
|
+
insert(_el$30, (() => {
|
|
2156
|
+
var _c$ = memo(() => childDelegations().length > 0);
|
|
2157
|
+
return () => _c$() ? ` ${delegationHeader()}` : " — idle";
|
|
2158
|
+
})());
|
|
2203
2159
|
insert(_el$22, createComponent(Show, {
|
|
2204
2160
|
get when() {
|
|
2205
2161
|
return showDelegations();
|
|
@@ -2207,25 +2163,25 @@ function View(props) {
|
|
|
2207
2163
|
get children() {
|
|
2208
2164
|
return createComponent(Show, {
|
|
2209
2165
|
get when() {
|
|
2210
|
-
return
|
|
2166
|
+
return delegationCeiling().visible.length > 0;
|
|
2211
2167
|
},
|
|
2212
2168
|
get fallback() {
|
|
2213
2169
|
return (() => {
|
|
2214
|
-
var _el$
|
|
2215
|
-
insertNode(_el$
|
|
2216
|
-
setProp(_el$
|
|
2217
|
-
insertNode(_el$
|
|
2218
|
-
effect((_$p) => setProp(_el$
|
|
2219
|
-
return _el$
|
|
2170
|
+
var _el$45 = createElement("box"), _el$46 = createElement("text");
|
|
2171
|
+
insertNode(_el$45, _el$46);
|
|
2172
|
+
setProp(_el$45, "marginLeft", 1);
|
|
2173
|
+
insertNode(_el$46, createTextNode(`No delegations`));
|
|
2174
|
+
effect((_$p) => setProp(_el$46, "fg", theme().textMuted, _$p));
|
|
2175
|
+
return _el$45;
|
|
2220
2176
|
})();
|
|
2221
2177
|
},
|
|
2222
2178
|
get children() {
|
|
2223
|
-
var _el$
|
|
2224
|
-
setProp(_el$
|
|
2225
|
-
setProp(_el$
|
|
2226
|
-
insert(_el$
|
|
2179
|
+
var _el$31 = createElement("box");
|
|
2180
|
+
setProp(_el$31, "marginLeft", 1);
|
|
2181
|
+
setProp(_el$31, "flexDirection", "column");
|
|
2182
|
+
insert(_el$31, createComponent(For, {
|
|
2227
2183
|
get each() {
|
|
2228
|
-
return
|
|
2184
|
+
return delegationCeiling().visible;
|
|
2229
2185
|
},
|
|
2230
2186
|
children: (job) => createComponent(DelegationRow, {
|
|
2231
2187
|
get api() {
|
|
@@ -2240,97 +2196,36 @@ function View(props) {
|
|
|
2240
2196
|
}
|
|
2241
2197
|
})
|
|
2242
2198
|
}), null);
|
|
2243
|
-
insert(_el$
|
|
2199
|
+
insert(_el$31, createComponent(Show, {
|
|
2244
2200
|
get when() {
|
|
2245
|
-
return
|
|
2201
|
+
return delegationCeiling().hidden > 0;
|
|
2246
2202
|
},
|
|
2247
2203
|
get children() {
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
const page = Math.min(archivedPage(), pages - 1);
|
|
2253
|
-
const slice = archived.slice(page * pageSize, page * pageSize + pageSize);
|
|
2254
|
-
return (() => {
|
|
2255
|
-
var _el$55 = createElement("box"), _el$56 = createElement("box"), _el$57 = createElement("text"), _el$59 = createElement("text"), _el$60 = createElement("text"), _el$61 = createElement("text");
|
|
2256
|
-
insertNode(_el$55, _el$56);
|
|
2257
|
-
setProp(_el$55, "flexDirection", "column");
|
|
2258
|
-
insertNode(_el$56, _el$57);
|
|
2259
|
-
insertNode(_el$56, _el$59);
|
|
2260
|
-
insertNode(_el$56, _el$60);
|
|
2261
|
-
insertNode(_el$56, _el$61);
|
|
2262
|
-
setProp(_el$56, "flexDirection", "row");
|
|
2263
|
-
setProp(_el$56, "marginLeft", 0);
|
|
2264
|
-
insertNode(_el$57, createTextNode(`‹ `));
|
|
2265
|
-
setProp(_el$57, "onMouseDown", () => clampArchivedPage(page - 1, pages));
|
|
2266
|
-
insert(_el$59, () => `Archived (${archived.length}) `);
|
|
2267
|
-
insert(_el$60, `${page + 1}/${pages}`);
|
|
2268
|
-
insertNode(_el$61, createTextNode(` ›`));
|
|
2269
|
-
setProp(_el$61, "onMouseDown", () => clampArchivedPage(page + 1, pages));
|
|
2270
|
-
insert(_el$55, createComponent(For, {
|
|
2271
|
-
each: slice,
|
|
2272
|
-
children: (job) => createComponent(DelegationRow, {
|
|
2273
|
-
get api() {
|
|
2274
|
-
return props.api;
|
|
2275
|
-
},
|
|
2276
|
-
job,
|
|
2277
|
-
get now() {
|
|
2278
|
-
return now();
|
|
2279
|
-
},
|
|
2280
|
-
get animationNow() {
|
|
2281
|
-
return animationNow();
|
|
2282
|
-
}
|
|
2283
|
-
})
|
|
2284
|
-
}), null);
|
|
2285
|
-
effect((_p$) => {
|
|
2286
|
-
var _v$20 = theme().textMuted, _v$21 = theme().textMuted, _v$22 = theme().textMuted, _v$23 = theme().textMuted;
|
|
2287
|
-
_v$20 !== _p$.e && (_p$.e = setProp(_el$57, "fg", _v$20, _p$.e));
|
|
2288
|
-
_v$21 !== _p$.t && (_p$.t = setProp(_el$59, "fg", _v$21, _p$.t));
|
|
2289
|
-
_v$22 !== _p$.a && (_p$.a = setProp(_el$60, "fg", _v$22, _p$.a));
|
|
2290
|
-
_v$23 !== _p$.o && (_p$.o = setProp(_el$61, "fg", _v$23, _p$.o));
|
|
2291
|
-
return _p$;
|
|
2292
|
-
}, {
|
|
2293
|
-
e: void 0,
|
|
2294
|
-
t: void 0,
|
|
2295
|
-
a: void 0,
|
|
2296
|
-
o: void 0
|
|
2297
|
-
});
|
|
2298
|
-
return _el$55;
|
|
2299
|
-
})();
|
|
2300
|
-
})();
|
|
2204
|
+
var _el$32 = createElement("text");
|
|
2205
|
+
insert(_el$32, () => `… +${delegationCeiling().hidden} more`);
|
|
2206
|
+
effect((_$p) => setProp(_el$32, "fg", theme().textMuted, _$p));
|
|
2207
|
+
return _el$32;
|
|
2301
2208
|
}
|
|
2302
2209
|
}), null);
|
|
2303
|
-
return _el$
|
|
2210
|
+
return _el$31;
|
|
2304
2211
|
}
|
|
2305
2212
|
});
|
|
2306
2213
|
}
|
|
2307
2214
|
}), null);
|
|
2308
2215
|
effect((_p$) => {
|
|
2309
|
-
var _v$
|
|
2310
|
-
_v$
|
|
2311
|
-
_v$
|
|
2312
|
-
_v$
|
|
2313
|
-
_v$
|
|
2314
|
-
_v$
|
|
2315
|
-
_v$11 !== _p$.n && (_p$.n = setProp(_el$31, "fg", _v$11, _p$.n));
|
|
2316
|
-
_v$12 !== _p$.s && (_p$.s = setProp(_el$33, "fg", _v$12, _p$.s));
|
|
2317
|
-
_v$13 !== _p$.h && (_p$.h = setProp(_el$33, "attributes", _v$13, _p$.h));
|
|
2318
|
-
_v$14 !== _p$.r && (_p$.r = setProp(_el$35, "fg", _v$14, _p$.r));
|
|
2319
|
-
_v$15 !== _p$.d && (_p$.d = setProp(_el$37, "fg", _v$15, _p$.d));
|
|
2320
|
-
_v$16 !== _p$.l && (_p$.l = setProp(_el$37, "attributes", _v$16, _p$.l));
|
|
2216
|
+
var _v$7 = theme().accent, _v$8 = theme().text, _v$9 = theme().textMuted, _v$0 = theme().text, _v$1 = theme().textMuted;
|
|
2217
|
+
_v$7 !== _p$.e && (_p$.e = setProp(_el$23, "fg", _v$7, _p$.e));
|
|
2218
|
+
_v$8 !== _p$.t && (_p$.t = setProp(_el$25, "fg", _v$8, _p$.t));
|
|
2219
|
+
_v$9 !== _p$.a && (_p$.a = setProp(_el$26, "fg", _v$9, _p$.a));
|
|
2220
|
+
_v$0 !== _p$.o && (_p$.o = setProp(_el$29, "fg", _v$0, _p$.o));
|
|
2221
|
+
_v$1 !== _p$.i && (_p$.i = setProp(_el$30, "fg", _v$1, _p$.i));
|
|
2321
2222
|
return _p$;
|
|
2322
2223
|
}, {
|
|
2323
2224
|
e: void 0,
|
|
2324
2225
|
t: void 0,
|
|
2325
2226
|
a: void 0,
|
|
2326
2227
|
o: void 0,
|
|
2327
|
-
i: void 0
|
|
2328
|
-
n: void 0,
|
|
2329
|
-
s: void 0,
|
|
2330
|
-
h: void 0,
|
|
2331
|
-
r: void 0,
|
|
2332
|
-
d: void 0,
|
|
2333
|
-
l: void 0
|
|
2228
|
+
i: void 0
|
|
2334
2229
|
});
|
|
2335
2230
|
return _el$22;
|
|
2336
2231
|
})();
|
|
@@ -2392,6 +2287,6 @@ const plugin = {
|
|
|
2392
2287
|
setup: async () => {}
|
|
2393
2288
|
};
|
|
2394
2289
|
//#endregion
|
|
2395
|
-
export { DELEGATION_DESCRIPTION_MAX, DELEGATION_ELAPSED_WIDTH,
|
|
2290
|
+
export { DELEGATION_ALIAS_WIDTH, DELEGATION_DESCRIPTION_MAX, DELEGATION_ELAPSED_WIDTH, DELEGATION_ROW_GLYPHS, DELEGATION_VISIBLE_CEILING, IDLE_SILENCE_MS, STALE_RUNNING_THRESHOLD_MS, boardRecordToDelegationEntry, boardRecordsToDelegationEntries, boardStatePath, buildChildrenPath, ceilingDelegationList, childStatusToState, childrenToDelegationEntries, collectDelegationToolParts, compareDelegationEntries, countDelegationSources, plugin as default, delegationActivity, delegationActivityLabel, delegationElapsed, delegationRowGlyph, delegationRowIdentity, delegationRowMarker, delegationRowStatus, delegationSpinnerFrame, delegationStateTone, extractToolActivity, fmtElapsed, formatDelegationAlias, formatDelegationElapsed, formatDelegationHeader, formatDelegationRowLead, formatPanelLogLine, isValidSessionId, latestToolActivityFor, markStaleIfRunning, mergeBoardDelegationSources, mergeChildDelegationSources, mergeDelegationSources, navigateToDelegationSession, panelLogDir, parseDelegationMarkdown, parseDelegationToolPart, readAllDelegationEntries, readBoardState, readDelegationEntries, reduceDelegationToolPart, removeDelegationEntry, resolveCurrentSessionID, resolveDelegationsDir, resolvePantheonRoot, safeSessionPath, seedLiveDelegationMap, splitDelegationList, toDelegationEntry, trackToolActivity, truncateDelegationDescription, tuiLogPath, visibleDelegationList };
|
|
2396
2291
|
|
|
2397
2292
|
//# sourceMappingURL=tui.js.map
|