@kenkaiiii/gg-boss 4.3.159 → 4.3.161
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/{chunk-AUC6S26K.js → chunk-3O74GM4F.js} +3457 -926
- package/dist/{chunk-AUC6S26K.js.map → chunk-3O74GM4F.js.map} +1 -1
- package/dist/cli.js +202 -210
- package/dist/cli.js.map +1 -1
- package/dist/{devtools-4TI4D7F2.js → devtools-526EIB4G.js} +5 -5
- package/dist/devtools-526EIB4G.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +5 -8
- package/dist/devtools-4TI4D7F2.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
use_app_default,
|
|
50
50
|
use_input_default,
|
|
51
51
|
use_stdout_default
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-3O74GM4F.js";
|
|
53
53
|
import "./chunk-RMSZMSH5.js";
|
|
54
54
|
import "./chunk-EZYGVECW.js";
|
|
55
55
|
import "./chunk-QT366Y52.js";
|
|
@@ -344,7 +344,7 @@ init_esm_shims();
|
|
|
344
344
|
// package.json
|
|
345
345
|
var package_default = {
|
|
346
346
|
name: "@kenkaiiii/gg-boss",
|
|
347
|
-
version: "4.3.
|
|
347
|
+
version: "4.3.161",
|
|
348
348
|
type: "module",
|
|
349
349
|
description: "Orchestrator agent that drives multiple ggcoder sessions across projects from a single chat",
|
|
350
350
|
license: "MIT",
|
|
@@ -357,10 +357,7 @@ var package_default = {
|
|
|
357
357
|
ggboss: "./dist/cli.js"
|
|
358
358
|
},
|
|
359
359
|
exports: {
|
|
360
|
-
".":
|
|
361
|
-
import: "./dist/index.js",
|
|
362
|
-
types: "./dist/index.d.ts"
|
|
363
|
-
}
|
|
360
|
+
".": "./dist/index.js"
|
|
364
361
|
},
|
|
365
362
|
files: [
|
|
366
363
|
"dist"
|
|
@@ -455,7 +452,7 @@ var COLORS = {
|
|
|
455
452
|
error: "#f87171"
|
|
456
453
|
};
|
|
457
454
|
function clearScreen() {
|
|
458
|
-
process.stdout.write("\x1B[2J\x1B[
|
|
455
|
+
process.stdout.write("\x1B[2J\x1B[H");
|
|
459
456
|
}
|
|
460
457
|
|
|
461
458
|
// src/banner.tsx
|
|
@@ -1344,7 +1341,7 @@ ${lines.join("\n")}`);
|
|
|
1344
1341
|
await bot.send(chatId, `_Voice transcription failed: ${message}_${hint}`);
|
|
1345
1342
|
}
|
|
1346
1343
|
});
|
|
1347
|
-
process.stdout.write("\x1B[2J\x1B[
|
|
1344
|
+
process.stdout.write("\x1B[2J\x1B[H");
|
|
1348
1345
|
printBanner({
|
|
1349
1346
|
bossModel: options.bossModel,
|
|
1350
1347
|
workerModel: options.workerModel,
|
|
@@ -1448,7 +1445,7 @@ function printBanner(opts) {
|
|
|
1448
1445
|
init_esm_shims();
|
|
1449
1446
|
import readline2 from "readline/promises";
|
|
1450
1447
|
async function runBossTelegramSetup() {
|
|
1451
|
-
process.stdout.write("\x1B[2J\x1B[
|
|
1448
|
+
process.stdout.write("\x1B[2J\x1B[H");
|
|
1452
1449
|
printSetupBanner();
|
|
1453
1450
|
const existing = await loadBossTelegramConfig();
|
|
1454
1451
|
if (existing) {
|
|
@@ -1536,7 +1533,7 @@ function printSetupBanner() {
|
|
|
1536
1533
|
|
|
1537
1534
|
// src/orchestrator-app.tsx
|
|
1538
1535
|
init_esm_shims();
|
|
1539
|
-
var
|
|
1536
|
+
var import_react10 = __toESM(require_react(), 1);
|
|
1540
1537
|
|
|
1541
1538
|
// ../ggcoder/dist/ui/components/index.js
|
|
1542
1539
|
init_esm_shims();
|
|
@@ -1561,15 +1558,10 @@ init_esm_shims();
|
|
|
1561
1558
|
var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
|
|
1562
1559
|
var import_react6 = __toESM(require_react(), 1);
|
|
1563
1560
|
|
|
1564
|
-
// ../ggcoder/dist/ui/components/ThinkingIndicator.js
|
|
1565
|
-
init_esm_shims();
|
|
1566
|
-
var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
|
|
1567
|
-
var import_react7 = __toESM(require_react(), 1);
|
|
1568
|
-
|
|
1569
1561
|
// src/boss-footer.tsx
|
|
1570
1562
|
init_esm_shims();
|
|
1571
|
-
var
|
|
1572
|
-
var
|
|
1563
|
+
var import_react7 = __toESM(require_react(), 1);
|
|
1564
|
+
var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
|
|
1573
1565
|
var PARTIAL_BLOCKS = [" ", "\u258F", "\u258E", "\u258D", "\u258C", "\u258B", "\u258A", "\u2589", "\u2588"];
|
|
1574
1566
|
var LIGHT_SHADE = "\u2591";
|
|
1575
1567
|
var SHORT_MODELS = {
|
|
@@ -1608,11 +1600,11 @@ function BossFooter({
|
|
|
1608
1600
|
const theme = useTheme();
|
|
1609
1601
|
const { columns } = useTerminalSize();
|
|
1610
1602
|
if (exitPending) {
|
|
1611
|
-
return /* @__PURE__ */ (0,
|
|
1603
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Box_default, { paddingX: 1, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: theme.warning, children: "Press Ctrl+C again to exit" }) });
|
|
1612
1604
|
}
|
|
1613
1605
|
const contextPct = getContextPercent(bossModel, tokensIn);
|
|
1614
1606
|
const contextColor = contextPct >= 80 ? theme.error : contextPct >= 50 ? theme.warning : theme.success;
|
|
1615
|
-
const sep = /* @__PURE__ */ (0,
|
|
1607
|
+
const sep = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: theme.border, children: " \u2502 " });
|
|
1616
1608
|
const barWidth = 8;
|
|
1617
1609
|
const fillFloat = Math.min(contextPct / 100 * barWidth, barWidth);
|
|
1618
1610
|
const barChars = [];
|
|
@@ -1621,15 +1613,15 @@ function BossFooter({
|
|
|
1621
1613
|
const eighths = Math.round(cellFill * 8);
|
|
1622
1614
|
if (eighths === 8) {
|
|
1623
1615
|
barChars.push(
|
|
1624
|
-
/* @__PURE__ */ (0,
|
|
1616
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: contextColor, children: PARTIAL_BLOCKS[8] }, i)
|
|
1625
1617
|
);
|
|
1626
1618
|
} else if (eighths > 0) {
|
|
1627
1619
|
barChars.push(
|
|
1628
|
-
/* @__PURE__ */ (0,
|
|
1620
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: contextColor, children: PARTIAL_BLOCKS[eighths] }, i)
|
|
1629
1621
|
);
|
|
1630
1622
|
} else {
|
|
1631
1623
|
barChars.push(
|
|
1632
|
-
/* @__PURE__ */ (0,
|
|
1624
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: theme.textDim, children: LIGHT_SHADE }, i)
|
|
1633
1625
|
);
|
|
1634
1626
|
}
|
|
1635
1627
|
}
|
|
@@ -1645,35 +1637,35 @@ function BossFooter({
|
|
|
1645
1637
|
const dropLabels = estFull > columns;
|
|
1646
1638
|
const dropThinking = estFull > columns + 14;
|
|
1647
1639
|
const useShortUpdate = updatePending && estFull > columns + 6;
|
|
1648
|
-
return /* @__PURE__ */ (0,
|
|
1649
|
-
/* @__PURE__ */ (0,
|
|
1650
|
-
/* @__PURE__ */ (0,
|
|
1651
|
-
/* @__PURE__ */ (0,
|
|
1652
|
-
/* @__PURE__ */ (0,
|
|
1640
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Box_default, { paddingX: 1, width: columns, children: [
|
|
1641
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Box_default, { flexGrow: 1 }),
|
|
1642
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Box_default, { flexShrink: 0, children: [
|
|
1643
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { children: barChars }),
|
|
1644
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Text, { color: contextColor, children: [
|
|
1653
1645
|
" ",
|
|
1654
1646
|
contextPct,
|
|
1655
1647
|
"%"
|
|
1656
1648
|
] }),
|
|
1657
1649
|
sep,
|
|
1658
|
-
!dropLabels && /* @__PURE__ */ (0,
|
|
1659
|
-
/* @__PURE__ */ (0,
|
|
1650
|
+
!dropLabels && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: theme.textDim, children: "boss " }),
|
|
1651
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: COLORS.primary, bold: true, children: bossM }),
|
|
1660
1652
|
sep,
|
|
1661
|
-
!dropLabels && /* @__PURE__ */ (0,
|
|
1662
|
-
/* @__PURE__ */ (0,
|
|
1663
|
-
!dropThinking && /* @__PURE__ */ (0,
|
|
1653
|
+
!dropLabels && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: theme.textDim, children: "workers " }),
|
|
1654
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: COLORS.accent, bold: true, children: wkrM }),
|
|
1655
|
+
!dropThinking && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
1664
1656
|
sep,
|
|
1665
|
-
/* @__PURE__ */ (0,
|
|
1657
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: bossThinkingLevel ? theme.accent : theme.textDim, children: bossThinkingLevel ? "Thinking on" : "Thinking off" })
|
|
1666
1658
|
] }),
|
|
1667
|
-
radioName && /* @__PURE__ */ (0,
|
|
1659
|
+
radioName && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
1668
1660
|
sep,
|
|
1669
|
-
/* @__PURE__ */ (0,
|
|
1661
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Text, { color: theme.secondary ?? theme.accent, children: [
|
|
1670
1662
|
"\u266A ",
|
|
1671
1663
|
radioName
|
|
1672
1664
|
] })
|
|
1673
1665
|
] }),
|
|
1674
|
-
updatePending && /* @__PURE__ */ (0,
|
|
1666
|
+
updatePending && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
1675
1667
|
sep,
|
|
1676
|
-
/* @__PURE__ */ (0,
|
|
1668
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Text, { color: theme.success, bold: true, wrap: "truncate", children: useShortUpdate ? "Update ready" : "Update ready. Restart GG Boss." })
|
|
1677
1669
|
] })
|
|
1678
1670
|
] })
|
|
1679
1671
|
] });
|
|
@@ -1936,8 +1928,8 @@ var BOSS_PHRASES = {
|
|
|
1936
1928
|
|
|
1937
1929
|
// src/boss-tasks-overlay.tsx
|
|
1938
1930
|
init_esm_shims();
|
|
1939
|
-
var
|
|
1940
|
-
var
|
|
1931
|
+
var import_react8 = __toESM(require_react(), 1);
|
|
1932
|
+
var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
|
|
1941
1933
|
function statusGlyph(status) {
|
|
1942
1934
|
switch (status) {
|
|
1943
1935
|
case "done":
|
|
@@ -1960,10 +1952,10 @@ function BossTasksOverlay({
|
|
|
1960
1952
|
const theme = useTheme();
|
|
1961
1953
|
const tasksState = useTasksState();
|
|
1962
1954
|
const tasks = tasksState.tasks;
|
|
1963
|
-
const [selectedIndex, setSelectedIndex] = (0,
|
|
1964
|
-
const [status, setStatusMsg] = (0,
|
|
1965
|
-
const statusTimer = (0,
|
|
1966
|
-
const showStatus = (0,
|
|
1955
|
+
const [selectedIndex, setSelectedIndex] = (0, import_react8.useState)(0);
|
|
1956
|
+
const [status, setStatusMsg] = (0, import_react8.useState)("");
|
|
1957
|
+
const statusTimer = (0, import_react8.useRef)(null);
|
|
1958
|
+
const showStatus = (0, import_react8.useCallback)((msg) => {
|
|
1967
1959
|
setStatusMsg(msg);
|
|
1968
1960
|
if (statusTimer.current) clearTimeout(statusTimer.current);
|
|
1969
1961
|
statusTimer.current = setTimeout(() => setStatusMsg(""), 2500);
|
|
@@ -1973,7 +1965,7 @@ function BossTasksOverlay({
|
|
|
1973
1965
|
tasks: tasks.filter((t) => t.project === w.name).sort((a, b) => a.createdAt.localeCompare(b.createdAt))
|
|
1974
1966
|
}));
|
|
1975
1967
|
const flatTasks = groupedTasks.flatMap((g) => g.tasks);
|
|
1976
|
-
(0,
|
|
1968
|
+
(0, import_react8.useEffect)(() => {
|
|
1977
1969
|
if (flatTasks.length === 0) {
|
|
1978
1970
|
setSelectedIndex(0);
|
|
1979
1971
|
} else if (selectedIndex >= flatTasks.length) {
|
|
@@ -2033,11 +2025,11 @@ function BossTasksOverlay({
|
|
|
2033
2025
|
const inProgressCount = tasks.filter((t) => t.status === "in_progress").length;
|
|
2034
2026
|
const pendingCount = tasks.filter((t) => t.status === "pending").length;
|
|
2035
2027
|
const blockedCount = tasks.filter((t) => t.status === "blocked").length;
|
|
2036
|
-
return /* @__PURE__ */ (0,
|
|
2037
|
-
/* @__PURE__ */ (0,
|
|
2038
|
-
/* @__PURE__ */ (0,
|
|
2039
|
-
/* @__PURE__ */ (0,
|
|
2040
|
-
/* @__PURE__ */ (0,
|
|
2028
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, paddingX: 1, children: [
|
|
2029
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Box_default, { children: [
|
|
2030
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: COLORS.primary, bold: true, children: "Tasks" }),
|
|
2031
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: ` \xB7 ${tasks.length} total \xB7 ` }),
|
|
2032
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2041
2033
|
CountsRow,
|
|
2042
2034
|
{
|
|
2043
2035
|
theme,
|
|
@@ -2048,20 +2040,20 @@ function BossTasksOverlay({
|
|
|
2048
2040
|
}
|
|
2049
2041
|
)
|
|
2050
2042
|
] }),
|
|
2051
|
-
flatTasks.length === 0 && /* @__PURE__ */ (0,
|
|
2043
|
+
flatTasks.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color: theme.textDim, children: [
|
|
2052
2044
|
" No tasks yet. Ask the boss to plan some \u2014 e.g. ",
|
|
2053
|
-
/* @__PURE__ */ (0,
|
|
2045
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.text, children: '"plan some work"' }),
|
|
2054
2046
|
"."
|
|
2055
2047
|
] }) }),
|
|
2056
|
-
showingTop && /* @__PURE__ */ (0,
|
|
2048
|
+
showingTop && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: ` \u2191 ${startIdx} more above` }),
|
|
2057
2049
|
groupedTasks.map((group, gIdx) => {
|
|
2058
2050
|
const startInFlat = groupedTasks.slice(0, gIdx).reduce((acc, g) => acc + g.tasks.length, 0);
|
|
2059
2051
|
const visibleInSection = group.tasks.filter((t) => visibleIdSet.has(t.id));
|
|
2060
2052
|
if (visibleInSection.length === 0) return null;
|
|
2061
|
-
return /* @__PURE__ */ (0,
|
|
2062
|
-
/* @__PURE__ */ (0,
|
|
2063
|
-
/* @__PURE__ */ (0,
|
|
2064
|
-
/* @__PURE__ */ (0,
|
|
2053
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
|
|
2054
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { children: [
|
|
2055
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: projectColor(group.project), bold: true, children: group.project }),
|
|
2056
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: ` \xB7 ${group.tasks.length}` })
|
|
2065
2057
|
] }),
|
|
2066
2058
|
visibleInSection.map((task) => {
|
|
2067
2059
|
const realIdx = startInFlat + group.tasks.indexOf(task);
|
|
@@ -2069,7 +2061,7 @@ function BossTasksOverlay({
|
|
|
2069
2061
|
const prefix = isSelected ? "\u276F " : " ";
|
|
2070
2062
|
const glyph = statusGlyph(task.status);
|
|
2071
2063
|
const color = isSelected ? theme.primary : task.status === "done" ? theme.success : task.status === "in_progress" ? theme.warning : task.status === "blocked" ? theme.error : theme.text;
|
|
2072
|
-
return /* @__PURE__ */ (0,
|
|
2064
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color, bold: isSelected, children: [
|
|
2073
2065
|
prefix,
|
|
2074
2066
|
"[",
|
|
2075
2067
|
glyph,
|
|
@@ -2079,16 +2071,16 @@ function BossTasksOverlay({
|
|
|
2079
2071
|
})
|
|
2080
2072
|
] }, group.project);
|
|
2081
2073
|
}),
|
|
2082
|
-
showingBottom && /* @__PURE__ */ (0,
|
|
2083
|
-
status && /* @__PURE__ */ (0,
|
|
2084
|
-
/* @__PURE__ */ (0,
|
|
2085
|
-
/* @__PURE__ */ (0,
|
|
2074
|
+
showingBottom && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: ` \u2193 ${flatTasks.length - endIdx} more below` }),
|
|
2075
|
+
status && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.success, children: " " + status }) }),
|
|
2076
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color: theme.textDim, children: [
|
|
2077
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.primary, children: "\u2191\u2193" }),
|
|
2086
2078
|
" move \xB7 (",
|
|
2087
|
-
/* @__PURE__ */ (0,
|
|
2079
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.primary, children: "d" }),
|
|
2088
2080
|
")elete \xB7 (",
|
|
2089
|
-
/* @__PURE__ */ (0,
|
|
2081
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.primary, children: "r" }),
|
|
2090
2082
|
")un pending \xB7 ",
|
|
2091
|
-
/* @__PURE__ */ (0,
|
|
2083
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.primary, children: "ESC" }),
|
|
2092
2084
|
" close"
|
|
2093
2085
|
] }) })
|
|
2094
2086
|
] });
|
|
@@ -2100,24 +2092,24 @@ function CountsRow({
|
|
|
2100
2092
|
pending,
|
|
2101
2093
|
blocked
|
|
2102
2094
|
}) {
|
|
2103
|
-
return /* @__PURE__ */ (0,
|
|
2104
|
-
/* @__PURE__ */ (0,
|
|
2095
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { children: [
|
|
2096
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color: theme.success, children: [
|
|
2105
2097
|
done,
|
|
2106
2098
|
" done"
|
|
2107
2099
|
] }),
|
|
2108
|
-
/* @__PURE__ */ (0,
|
|
2109
|
-
/* @__PURE__ */ (0,
|
|
2100
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: " \xB7 " }),
|
|
2101
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color: theme.warning, children: [
|
|
2110
2102
|
active,
|
|
2111
2103
|
" active"
|
|
2112
2104
|
] }),
|
|
2113
|
-
/* @__PURE__ */ (0,
|
|
2114
|
-
/* @__PURE__ */ (0,
|
|
2105
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: " \xB7 " }),
|
|
2106
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color: theme.text, children: [
|
|
2115
2107
|
pending,
|
|
2116
2108
|
" pending"
|
|
2117
2109
|
] }),
|
|
2118
|
-
blocked > 0 && /* @__PURE__ */ (0,
|
|
2119
|
-
/* @__PURE__ */ (0,
|
|
2120
|
-
/* @__PURE__ */ (0,
|
|
2110
|
+
blocked > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
|
|
2111
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: " \xB7 " }),
|
|
2112
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color: theme.error, children: [
|
|
2121
2113
|
blocked,
|
|
2122
2114
|
" blocked"
|
|
2123
2115
|
] })
|
|
@@ -2127,7 +2119,7 @@ function CountsRow({
|
|
|
2127
2119
|
|
|
2128
2120
|
// src/radio-picker.tsx
|
|
2129
2121
|
init_esm_shims();
|
|
2130
|
-
var
|
|
2122
|
+
var import_react9 = __toESM(require_react(), 1);
|
|
2131
2123
|
|
|
2132
2124
|
// src/radio.ts
|
|
2133
2125
|
init_esm_shims();
|
|
@@ -2295,7 +2287,7 @@ function buildInstallHint() {
|
|
|
2295
2287
|
}
|
|
2296
2288
|
|
|
2297
2289
|
// src/radio-picker.tsx
|
|
2298
|
-
var
|
|
2290
|
+
var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
|
|
2299
2291
|
function RadioPicker({
|
|
2300
2292
|
currentStationId: currentStationId2,
|
|
2301
2293
|
onSelect,
|
|
@@ -2317,7 +2309,7 @@ function RadioPicker({
|
|
|
2317
2309
|
0,
|
|
2318
2310
|
items.findIndex((i) => i.value === (currentStationId2 ?? "off"))
|
|
2319
2311
|
);
|
|
2320
|
-
return /* @__PURE__ */ (0,
|
|
2312
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
2321
2313
|
SelectList,
|
|
2322
2314
|
{
|
|
2323
2315
|
items,
|
|
@@ -2497,29 +2489,29 @@ function stopPeriodicUpdateCheck() {
|
|
|
2497
2489
|
}
|
|
2498
2490
|
|
|
2499
2491
|
// src/orchestrator-app.tsx
|
|
2500
|
-
var
|
|
2492
|
+
var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
|
|
2501
2493
|
function BossApp(props) {
|
|
2502
2494
|
const theme = loadTheme("dark");
|
|
2503
|
-
return /* @__PURE__ */ (0,
|
|
2495
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TerminalSizeProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ThemeContext.Provider, { value: theme, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AnimationProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(BossAppInner, { ...props }) }) }) });
|
|
2504
2496
|
}
|
|
2505
2497
|
function BossAppInner({ boss, resetUI }) {
|
|
2506
2498
|
const state = useBossState();
|
|
2507
2499
|
const { exit } = use_app_default();
|
|
2508
2500
|
const { stdout } = use_stdout_default();
|
|
2509
2501
|
const { resizeKey, columns, rows } = useTerminalSize();
|
|
2510
|
-
const runStartRef = (0,
|
|
2502
|
+
const runStartRef = (0, import_react10.useRef)(null);
|
|
2511
2503
|
runStartRef.current = state.runStartMs;
|
|
2512
|
-
const charCountRef = (0,
|
|
2504
|
+
const charCountRef = (0, import_react10.useRef)(0);
|
|
2513
2505
|
charCountRef.current = state.streaming?.text.length ?? 0;
|
|
2514
|
-
const realTokensAccumRef = (0,
|
|
2506
|
+
const realTokensAccumRef = (0, import_react10.useRef)(0);
|
|
2515
2507
|
realTokensAccumRef.current = state.bossInputTokens;
|
|
2516
|
-
const [lastUserMessage, setLastUserMessage] = (0,
|
|
2508
|
+
const [lastUserMessage, setLastUserMessage] = (0, import_react10.useState)("");
|
|
2517
2509
|
const overlay = state.overlay;
|
|
2518
|
-
const [currentRadio, setCurrentRadio] = (0,
|
|
2519
|
-
const [updatePending, setUpdatePending] = (0,
|
|
2510
|
+
const [currentRadio, setCurrentRadio] = (0, import_react10.useState)(() => getCurrentStation());
|
|
2511
|
+
const [updatePending, setUpdatePending] = (0, import_react10.useState)(
|
|
2520
2512
|
() => getPendingUpdate(VERSION) !== null
|
|
2521
2513
|
);
|
|
2522
|
-
(0,
|
|
2514
|
+
(0, import_react10.useEffect)(() => {
|
|
2523
2515
|
startPeriodicUpdateCheck(VERSION, (msg) => {
|
|
2524
2516
|
bossStore.appendUpdateNotice(msg);
|
|
2525
2517
|
setUpdatePending(true);
|
|
@@ -2527,8 +2519,8 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2527
2519
|
return () => stopPeriodicUpdateCheck();
|
|
2528
2520
|
}, []);
|
|
2529
2521
|
const workersRunning = state.workers.filter((w) => w.status === "working").length;
|
|
2530
|
-
const titlePrevRef = (0,
|
|
2531
|
-
(0,
|
|
2522
|
+
const titlePrevRef = (0, import_react10.useRef)("");
|
|
2523
|
+
(0, import_react10.useEffect)(() => {
|
|
2532
2524
|
if (!stdout) return;
|
|
2533
2525
|
let title;
|
|
2534
2526
|
if (workersRunning > 0) {
|
|
@@ -2544,23 +2536,23 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2544
2536
|
stdout.write(`\x1B]0;${title}\x1B\\`);
|
|
2545
2537
|
}
|
|
2546
2538
|
}, [stdout, workersRunning, state.phase]);
|
|
2547
|
-
(0,
|
|
2539
|
+
(0, import_react10.useEffect)(() => {
|
|
2548
2540
|
return () => {
|
|
2549
2541
|
stdout?.write(`\x1B]0;GG Boss\x1B\\`);
|
|
2550
2542
|
};
|
|
2551
2543
|
}, [stdout]);
|
|
2552
|
-
const staticItems = (0,
|
|
2544
|
+
const staticItems = (0, import_react10.useMemo)(
|
|
2553
2545
|
() => [{ kind: "banner", id: "banner" }, ...state.history],
|
|
2554
2546
|
[state.history]
|
|
2555
2547
|
);
|
|
2556
|
-
const openOverlay = (0,
|
|
2548
|
+
const openOverlay = (0, import_react10.useCallback)(
|
|
2557
2549
|
(next) => {
|
|
2558
2550
|
bossStore.setOverlay(next);
|
|
2559
2551
|
if (resetUI) resetUI();
|
|
2560
2552
|
},
|
|
2561
2553
|
[resetUI]
|
|
2562
2554
|
);
|
|
2563
|
-
const closeOverlay = (0,
|
|
2555
|
+
const closeOverlay = (0, import_react10.useCallback)(() => {
|
|
2564
2556
|
bossStore.setOverlay(null);
|
|
2565
2557
|
if (resetUI) resetUI();
|
|
2566
2558
|
}, [resetUI]);
|
|
@@ -2569,7 +2561,7 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2569
2561
|
(pending) => bossStore.setExitPending(pending),
|
|
2570
2562
|
() => exit()
|
|
2571
2563
|
);
|
|
2572
|
-
(0,
|
|
2564
|
+
(0, import_react10.useEffect)(() => {
|
|
2573
2565
|
if (state.pendingFlush.length > 0) {
|
|
2574
2566
|
bossStore.commitPendingFlush();
|
|
2575
2567
|
}
|
|
@@ -2657,16 +2649,16 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2657
2649
|
handleDoubleExit();
|
|
2658
2650
|
};
|
|
2659
2651
|
if (rows < 14) {
|
|
2660
|
-
return /* @__PURE__ */ (0,
|
|
2661
|
-
/* @__PURE__ */ (0,
|
|
2662
|
-
/* @__PURE__ */ (0,
|
|
2652
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { flexDirection: "column", width: columns, paddingX: 1, marginTop: 1, children: [
|
|
2653
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { bold: true, color: COLORS.accent, children: "Terminal too small" }),
|
|
2654
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: COLORS.primary, children: `Resize to at least 14 rows to use GG Boss (currently ${rows}).` })
|
|
2663
2655
|
] });
|
|
2664
2656
|
}
|
|
2665
|
-
return /* @__PURE__ */ (0,
|
|
2666
|
-
/* @__PURE__ */ (0,
|
|
2667
|
-
overlay === "tasks" ? /* @__PURE__ */ (0,
|
|
2668
|
-
state.streaming && /* @__PURE__ */ (0,
|
|
2669
|
-
state.phase === "working" && /* @__PURE__ */ (0,
|
|
2657
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { flexDirection: "column", width: columns, children: [
|
|
2658
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Static, { items: staticItems, style: { width: "100%" }, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box_default, { flexDirection: "column", paddingRight: 1, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(StaticRowView, { row: item }) }, item.id) }, resizeKey),
|
|
2659
|
+
overlay === "tasks" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(BossTasksOverlay, { boss, workers: state.workers, onClose: closeOverlay }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
2660
|
+
state.streaming && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(StreamingTurnView, { turn: state.streaming, isRunning: state.phase === "working" }),
|
|
2661
|
+
state.phase === "working" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2670
2662
|
ActivityIndicator,
|
|
2671
2663
|
{
|
|
2672
2664
|
phase: state.activityPhase,
|
|
@@ -2684,8 +2676,8 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2684
2676
|
pulseColors: PULSE_COLORS
|
|
2685
2677
|
}
|
|
2686
2678
|
) }),
|
|
2687
|
-
state.compaction?.state === "running" && /* @__PURE__ */ (0,
|
|
2688
|
-
state.compaction?.state === "done" && /* @__PURE__ */ (0,
|
|
2679
|
+
state.compaction?.state === "running" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CompactionSpinner, {}),
|
|
2680
|
+
state.compaction?.state === "done" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2689
2681
|
CompactionDone,
|
|
2690
2682
|
{
|
|
2691
2683
|
originalCount: state.compaction.originalCount,
|
|
@@ -2694,7 +2686,7 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2694
2686
|
tokensAfter: state.compaction.tokensAfter
|
|
2695
2687
|
}
|
|
2696
2688
|
),
|
|
2697
|
-
/* @__PURE__ */ (0,
|
|
2689
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2698
2690
|
InputArea,
|
|
2699
2691
|
{
|
|
2700
2692
|
onSubmit: handleSubmit,
|
|
@@ -2703,7 +2695,7 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2703
2695
|
isActive: !overlay,
|
|
2704
2696
|
cwd: process.cwd(),
|
|
2705
2697
|
commands: BOSS_SLASH_COMMANDS,
|
|
2706
|
-
scopeBadge: /* @__PURE__ */ (0,
|
|
2698
|
+
scopeBadge: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ScopePill, { scope: state.scope }),
|
|
2707
2699
|
disableMouseTracking: true,
|
|
2708
2700
|
onTab: () => bossStore.cycleScope(),
|
|
2709
2701
|
onShiftTab: () => {
|
|
@@ -2712,7 +2704,7 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2712
2704
|
}
|
|
2713
2705
|
}
|
|
2714
2706
|
),
|
|
2715
|
-
overlay === "model-boss" || overlay === "model-workers" ? /* @__PURE__ */ (0,
|
|
2707
|
+
overlay === "model-boss" || overlay === "model-workers" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2716
2708
|
ModelSelector,
|
|
2717
2709
|
{
|
|
2718
2710
|
onSelect: handleModelSelect,
|
|
@@ -2721,7 +2713,7 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2721
2713
|
currentModel: overlay === "model-boss" ? state.bossModel : state.workerModel,
|
|
2722
2714
|
currentProvider: overlay === "model-boss" ? state.bossProvider : state.workerProvider
|
|
2723
2715
|
}
|
|
2724
|
-
) : overlay === "radio" ? /* @__PURE__ */ (0,
|
|
2716
|
+
) : overlay === "radio" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2725
2717
|
RadioPicker,
|
|
2726
2718
|
{
|
|
2727
2719
|
currentStationId: currentRadio,
|
|
@@ -2744,8 +2736,8 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2744
2736
|
closeOverlay();
|
|
2745
2737
|
}
|
|
2746
2738
|
}
|
|
2747
|
-
) : /* @__PURE__ */ (0,
|
|
2748
|
-
/* @__PURE__ */ (0,
|
|
2739
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
2740
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2749
2741
|
BossFooter,
|
|
2750
2742
|
{
|
|
2751
2743
|
bossModel: state.bossModel,
|
|
@@ -2757,7 +2749,7 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
2757
2749
|
currentRadioStationId: currentRadio
|
|
2758
2750
|
}
|
|
2759
2751
|
),
|
|
2760
|
-
!state.exitPending && /* @__PURE__ */ (0,
|
|
2752
|
+
!state.exitPending && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2761
2753
|
WorkerStatusBar,
|
|
2762
2754
|
{
|
|
2763
2755
|
workers: state.workers,
|
|
@@ -2773,12 +2765,12 @@ function ScopePill({ scope }) {
|
|
|
2773
2765
|
const isAll = scope === "all";
|
|
2774
2766
|
const bg = isAll ? COLORS.accent : projectColor(scope);
|
|
2775
2767
|
const label = isAll ? "All" : scope;
|
|
2776
|
-
return /* @__PURE__ */ (0,
|
|
2777
|
-
/* @__PURE__ */ (0,
|
|
2778
|
-
/* @__PURE__ */ (0,
|
|
2779
|
-
/* @__PURE__ */ (0,
|
|
2768
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { children: [
|
|
2769
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.textDim, children: "Project " }),
|
|
2770
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: "black", backgroundColor: bg, bold: true, children: ` ${label} ` }),
|
|
2771
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { color: theme.textDim, children: [
|
|
2780
2772
|
" ",
|
|
2781
|
-
/* @__PURE__ */ (0,
|
|
2773
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.primary, children: "Tab" }),
|
|
2782
2774
|
" to switch"
|
|
2783
2775
|
] })
|
|
2784
2776
|
] });
|
|
@@ -2805,9 +2797,9 @@ function ShimmerName({
|
|
|
2805
2797
|
}) {
|
|
2806
2798
|
const cycle = name.length + SHIMMER_WIDTH * 2;
|
|
2807
2799
|
const shimmerPos = tick % cycle - SHIMMER_WIDTH;
|
|
2808
|
-
return /* @__PURE__ */ (0,
|
|
2800
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { children: name.split("").map((ch, i) => {
|
|
2809
2801
|
const isBright = Math.abs(i - shimmerPos) <= SHIMMER_WIDTH;
|
|
2810
|
-
return /* @__PURE__ */ (0,
|
|
2802
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color, bold: isBright, dimColor: !isBright, children: ch }, i);
|
|
2811
2803
|
}) });
|
|
2812
2804
|
}
|
|
2813
2805
|
function WorkerStatusBar({
|
|
@@ -2828,9 +2820,9 @@ function WorkerStatusBar({
|
|
|
2828
2820
|
const projectHue = projectColor(w.name);
|
|
2829
2821
|
const elapsed = w.workStartedAt ? formatElapsed(now - w.workStartedAt) : null;
|
|
2830
2822
|
slots.push(
|
|
2831
|
-
/* @__PURE__ */ (0,
|
|
2832
|
-
/* @__PURE__ */ (0,
|
|
2833
|
-
elapsed && /* @__PURE__ */ (0,
|
|
2823
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react10.default.Fragment, { children: [
|
|
2824
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ShimmerName, { name: w.name, color: projectHue, tick }),
|
|
2825
|
+
elapsed && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { color: theme.textDim, children: [
|
|
2834
2826
|
" ",
|
|
2835
2827
|
elapsed
|
|
2836
2828
|
] })
|
|
@@ -2839,7 +2831,7 @@ function WorkerStatusBar({
|
|
|
2839
2831
|
}
|
|
2840
2832
|
for (const w of errored) {
|
|
2841
2833
|
slots.push(
|
|
2842
|
-
/* @__PURE__ */ (0,
|
|
2834
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react10.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { color: theme.error, children: [
|
|
2843
2835
|
"\u2717 ",
|
|
2844
2836
|
w.name
|
|
2845
2837
|
] }) }, `e-${w.name}`)
|
|
@@ -2847,23 +2839,23 @@ function WorkerStatusBar({
|
|
|
2847
2839
|
}
|
|
2848
2840
|
if (idleCount > 0) {
|
|
2849
2841
|
slots.push(
|
|
2850
|
-
/* @__PURE__ */ (0,
|
|
2842
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react10.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { color: theme.textDim, children: [
|
|
2851
2843
|
"\u25CB ",
|
|
2852
2844
|
idleCount,
|
|
2853
2845
|
" idle"
|
|
2854
2846
|
] }) }, "idle")
|
|
2855
2847
|
);
|
|
2856
2848
|
}
|
|
2857
|
-
return /* @__PURE__ */ (0,
|
|
2858
|
-
anyWorking && /* @__PURE__ */ (0,
|
|
2859
|
-
/* @__PURE__ */ (0,
|
|
2860
|
-
slots.map((slot, i) => /* @__PURE__ */ (0,
|
|
2861
|
-
i > 0 && /* @__PURE__ */ (0,
|
|
2849
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { paddingX: 1, width: columns, flexShrink: 1, children: [
|
|
2850
|
+
anyWorking && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AnimationActiveSentinel, {}),
|
|
2851
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { wrap: "truncate", children: [
|
|
2852
|
+
slots.map((slot, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react10.default.Fragment, { children: [
|
|
2853
|
+
i > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.border, children: " \u2502 " }),
|
|
2862
2854
|
slot
|
|
2863
2855
|
] }, i)),
|
|
2864
|
-
pendingMessages > 0 && /* @__PURE__ */ (0,
|
|
2865
|
-
/* @__PURE__ */ (0,
|
|
2866
|
-
/* @__PURE__ */ (0,
|
|
2856
|
+
pendingMessages > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
2857
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.textDim, children: " " }),
|
|
2858
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { color: theme.warning, children: [
|
|
2867
2859
|
pendingMessages,
|
|
2868
2860
|
" message",
|
|
2869
2861
|
pendingMessages === 1 ? "" : "s",
|
|
@@ -2875,22 +2867,22 @@ function WorkerStatusBar({
|
|
|
2875
2867
|
}
|
|
2876
2868
|
function StaticRowView({ row }) {
|
|
2877
2869
|
if (row.kind === "banner") {
|
|
2878
|
-
return /* @__PURE__ */ (0,
|
|
2879
|
-
}
|
|
2880
|
-
if (row.kind === "user") return /* @__PURE__ */ (0,
|
|
2881
|
-
if (row.kind === "assistant") return /* @__PURE__ */ (0,
|
|
2882
|
-
if (row.kind === "tool") return /* @__PURE__ */ (0,
|
|
2883
|
-
if (row.kind === "worker_event") return /* @__PURE__ */ (0,
|
|
2884
|
-
if (row.kind === "worker_error") return /* @__PURE__ */ (0,
|
|
2885
|
-
if (row.kind === "info") return /* @__PURE__ */ (0,
|
|
2886
|
-
if (row.kind === "task_dispatch") return /* @__PURE__ */ (0,
|
|
2887
|
-
if (row.kind === "update_notice") return /* @__PURE__ */ (0,
|
|
2870
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box_default, { paddingX: 1, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(BossBanner, { subtitle: "Orchestrator", showShortcuts: true }) });
|
|
2871
|
+
}
|
|
2872
|
+
if (row.kind === "user") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(UserMessage, { text: row.text });
|
|
2873
|
+
if (row.kind === "assistant") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AssistantRow, { item: row });
|
|
2874
|
+
if (row.kind === "tool") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ToolHistoryRow, { item: row });
|
|
2875
|
+
if (row.kind === "worker_event") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(WorkerEventRow, { item: row });
|
|
2876
|
+
if (row.kind === "worker_error") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(WorkerErrorRow, { item: row });
|
|
2877
|
+
if (row.kind === "info") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InfoRow, { text: row.text, level: row.level ?? "info" });
|
|
2878
|
+
if (row.kind === "task_dispatch") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TaskDispatchRow, { tasks: row.tasks });
|
|
2879
|
+
if (row.kind === "update_notice") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(UpdateNoticeRow, { text: row.text });
|
|
2888
2880
|
return null;
|
|
2889
2881
|
}
|
|
2890
2882
|
function UpdateNoticeRow({ text }) {
|
|
2891
|
-
return /* @__PURE__ */ (0,
|
|
2892
|
-
/* @__PURE__ */ (0,
|
|
2893
|
-
/* @__PURE__ */ (0,
|
|
2883
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box_default, { marginTop: 1, flexShrink: 1, borderStyle: "round", borderColor: COLORS.accent, paddingX: 1, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { wrap: "wrap", children: [
|
|
2884
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: COLORS.accent, bold: true, children: "\u2728 " }),
|
|
2885
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: COLORS.primary, bold: true, children: text })
|
|
2894
2886
|
] }) });
|
|
2895
2887
|
}
|
|
2896
2888
|
function TaskDispatchRow({
|
|
@@ -2898,10 +2890,10 @@ function TaskDispatchRow({
|
|
|
2898
2890
|
}) {
|
|
2899
2891
|
const theme = useTheme();
|
|
2900
2892
|
const count = tasks.length;
|
|
2901
|
-
return /* @__PURE__ */ (0,
|
|
2902
|
-
/* @__PURE__ */ (0,
|
|
2903
|
-
/* @__PURE__ */ (0,
|
|
2904
|
-
/* @__PURE__ */ (0,
|
|
2893
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { flexDirection: "column", paddingX: 1, marginTop: 1, children: [
|
|
2894
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { children: [
|
|
2895
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: COLORS.primary, bold: true, children: "\u23FA " }),
|
|
2896
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { color: theme.text, bold: true, children: [
|
|
2905
2897
|
"Running ",
|
|
2906
2898
|
count,
|
|
2907
2899
|
" task",
|
|
@@ -2909,11 +2901,11 @@ function TaskDispatchRow({
|
|
|
2909
2901
|
":"
|
|
2910
2902
|
] })
|
|
2911
2903
|
] }),
|
|
2912
|
-
tasks.map((t, i) => /* @__PURE__ */ (0,
|
|
2913
|
-
/* @__PURE__ */ (0,
|
|
2914
|
-
/* @__PURE__ */ (0,
|
|
2915
|
-
/* @__PURE__ */ (0,
|
|
2916
|
-
/* @__PURE__ */ (0,
|
|
2904
|
+
tasks.map((t, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { children: [
|
|
2905
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.textDim, children: " \u2022 " }),
|
|
2906
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: projectColor(t.project), bold: true, children: t.project }),
|
|
2907
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.textDim, children: ": " }),
|
|
2908
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.text, children: t.title })
|
|
2917
2909
|
] }, `${t.project}-${i}`))
|
|
2918
2910
|
] });
|
|
2919
2911
|
}
|
|
@@ -2940,7 +2932,7 @@ function highlightShortcuts(text) {
|
|
|
2940
2932
|
);
|
|
2941
2933
|
}
|
|
2942
2934
|
function AssistantRow({ item }) {
|
|
2943
|
-
return /* @__PURE__ */ (0,
|
|
2935
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2944
2936
|
AssistantMessage,
|
|
2945
2937
|
{
|
|
2946
2938
|
text: highlightShortcuts(item.text),
|
|
@@ -2950,7 +2942,7 @@ function AssistantRow({ item }) {
|
|
|
2950
2942
|
);
|
|
2951
2943
|
}
|
|
2952
2944
|
function ToolHistoryRow({ item }) {
|
|
2953
|
-
return /* @__PURE__ */ (0,
|
|
2945
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
2954
2946
|
ToolExecution,
|
|
2955
2947
|
{
|
|
2956
2948
|
status: "done",
|
|
@@ -3033,22 +3025,22 @@ function WorkerEventRow({ item }) {
|
|
|
3033
3025
|
const trailer = parseWorkerTrailer(item.finalText);
|
|
3034
3026
|
const hasTrailer = !!(trailer.changed || trailer.skipped || trailer.verified || trailer.notes);
|
|
3035
3027
|
const fallbackSummary = hasTrailer ? "" : summarizeFinalText(item.finalText, fieldMaxLen);
|
|
3036
|
-
return /* @__PURE__ */ (0,
|
|
3037
|
-
/* @__PURE__ */ (0,
|
|
3038
|
-
/* @__PURE__ */ (0,
|
|
3039
|
-
/* @__PURE__ */ (0,
|
|
3040
|
-
/* @__PURE__ */ (0,
|
|
3041
|
-
/* @__PURE__ */ (0,
|
|
3042
|
-
/* @__PURE__ */ (0,
|
|
3043
|
-
grade && /* @__PURE__ */ (0,
|
|
3044
|
-
/* @__PURE__ */ (0,
|
|
3045
|
-
/* @__PURE__ */ (0,
|
|
3028
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
|
|
3029
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { flexDirection: "row", children: [
|
|
3030
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ToolUseLoader, { status: loaderStatus }),
|
|
3031
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { wrap: "wrap", children: [
|
|
3032
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: headerColor, bold: true, children: item.project }),
|
|
3033
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.text, children: ` turn ${item.turnIndex}` }),
|
|
3034
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.textDim, children: ` \xB7 ${toolSummary}` }),
|
|
3035
|
+
grade && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
3036
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.textDim, children: " \xB7 " }),
|
|
3037
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: statusGradeColor(grade, theme), bold: true, children: grade })
|
|
3046
3038
|
] })
|
|
3047
3039
|
] }) })
|
|
3048
3040
|
] }),
|
|
3049
|
-
hasTrailer ? /* @__PURE__ */ (0,
|
|
3050
|
-
trailer.changed && /* @__PURE__ */ (0,
|
|
3051
|
-
trailer.verified && /* @__PURE__ */ (0,
|
|
3041
|
+
hasTrailer ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
3042
|
+
trailer.changed && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TrailerLine, { label: "Changed", value: trailer.changed, maxLen: fieldMaxLen }),
|
|
3043
|
+
trailer.verified && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3052
3044
|
TrailerLine,
|
|
3053
3045
|
{
|
|
3054
3046
|
label: "Verified",
|
|
@@ -3057,7 +3049,7 @@ function WorkerEventRow({ item }) {
|
|
|
3057
3049
|
labelColor: theme.success
|
|
3058
3050
|
}
|
|
3059
3051
|
),
|
|
3060
|
-
trailer.skipped && /* @__PURE__ */ (0,
|
|
3052
|
+
trailer.skipped && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3061
3053
|
TrailerLine,
|
|
3062
3054
|
{
|
|
3063
3055
|
label: "Skipped",
|
|
@@ -3066,8 +3058,8 @@ function WorkerEventRow({ item }) {
|
|
|
3066
3058
|
labelColor: theme.warning
|
|
3067
3059
|
}
|
|
3068
3060
|
),
|
|
3069
|
-
trailer.notes && /* @__PURE__ */ (0,
|
|
3070
|
-
] }) : fallbackSummary && /* @__PURE__ */ (0,
|
|
3061
|
+
trailer.notes && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TrailerLine, { label: "Notes", value: trailer.notes, maxLen: fieldMaxLen })
|
|
3062
|
+
] }) : fallbackSummary && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MessageResponse, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.textDim, wrap: "truncate", children: fallbackSummary }) })
|
|
3071
3063
|
] });
|
|
3072
3064
|
}
|
|
3073
3065
|
function TrailerLine({
|
|
@@ -3077,45 +3069,45 @@ function TrailerLine({
|
|
|
3077
3069
|
labelColor
|
|
3078
3070
|
}) {
|
|
3079
3071
|
const theme = useTheme();
|
|
3080
|
-
return /* @__PURE__ */ (0,
|
|
3081
|
-
/* @__PURE__ */ (0,
|
|
3072
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MessageResponse, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { wrap: "truncate", children: [
|
|
3073
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { color: labelColor ?? theme.textDim, bold: true, children: [
|
|
3082
3074
|
label,
|
|
3083
3075
|
":"
|
|
3084
3076
|
] }),
|
|
3085
|
-
/* @__PURE__ */ (0,
|
|
3077
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.text, children: ` ${clip(value, maxLen - label.length - 2)}` })
|
|
3086
3078
|
] }) });
|
|
3087
3079
|
}
|
|
3088
3080
|
function WorkerErrorRow({ item }) {
|
|
3089
3081
|
const theme = useTheme();
|
|
3090
|
-
return /* @__PURE__ */ (0,
|
|
3091
|
-
/* @__PURE__ */ (0,
|
|
3092
|
-
/* @__PURE__ */ (0,
|
|
3093
|
-
/* @__PURE__ */ (0,
|
|
3094
|
-
/* @__PURE__ */ (0,
|
|
3095
|
-
/* @__PURE__ */ (0,
|
|
3082
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
|
|
3083
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { flexDirection: "row", children: [
|
|
3084
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ToolUseLoader, { status: "error" }),
|
|
3085
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Text, { wrap: "wrap", children: [
|
|
3086
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.toolError, bold: true, children: item.project }),
|
|
3087
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.textDim, children: " worker error" })
|
|
3096
3088
|
] }) })
|
|
3097
3089
|
] }),
|
|
3098
|
-
/* @__PURE__ */ (0,
|
|
3090
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MessageResponse, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color: theme.error, wrap: "wrap", children: item.message }) })
|
|
3099
3091
|
] });
|
|
3100
3092
|
}
|
|
3101
3093
|
function InfoRow({
|
|
3102
3094
|
text,
|
|
3103
3095
|
level
|
|
3104
3096
|
}) {
|
|
3105
|
-
if (level === "info") return /* @__PURE__ */ (0,
|
|
3097
|
+
if (level === "info") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AssistantMessage, { text });
|
|
3106
3098
|
const theme = useTheme();
|
|
3107
3099
|
const color = level === "error" ? theme.error : theme.warning;
|
|
3108
|
-
return /* @__PURE__ */ (0,
|
|
3109
|
-
/* @__PURE__ */ (0,
|
|
3110
|
-
/* @__PURE__ */ (0,
|
|
3100
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { marginTop: 1, flexDirection: "row", children: [
|
|
3101
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ToolUseLoader, { status: level === "error" ? "error" : "queued" }),
|
|
3102
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Text, { color, wrap: "wrap", children: text }) })
|
|
3111
3103
|
] });
|
|
3112
3104
|
}
|
|
3113
3105
|
function StreamingTurnView({
|
|
3114
3106
|
turn,
|
|
3115
3107
|
isRunning
|
|
3116
3108
|
}) {
|
|
3117
|
-
return /* @__PURE__ */ (0,
|
|
3118
|
-
/* @__PURE__ */ (0,
|
|
3109
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Box_default, { flexDirection: "column", children: [
|
|
3110
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3119
3111
|
StreamingArea,
|
|
3120
3112
|
{
|
|
3121
3113
|
isRunning,
|
|
@@ -3124,12 +3116,12 @@ function StreamingTurnView({
|
|
|
3124
3116
|
thinkingMs: turn.thinkingMs
|
|
3125
3117
|
}
|
|
3126
3118
|
),
|
|
3127
|
-
turn.tools.map((t) => /* @__PURE__ */ (0,
|
|
3119
|
+
turn.tools.map((t) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(StreamingToolRow, { tool: t }, t.toolCallId))
|
|
3128
3120
|
] });
|
|
3129
3121
|
}
|
|
3130
3122
|
function StreamingToolRow({ tool }) {
|
|
3131
3123
|
if (tool.status === "running") {
|
|
3132
|
-
return /* @__PURE__ */ (0,
|
|
3124
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3133
3125
|
ToolExecution,
|
|
3134
3126
|
{
|
|
3135
3127
|
status: "running",
|
|
@@ -3139,7 +3131,7 @@ function StreamingToolRow({ tool }) {
|
|
|
3139
3131
|
}
|
|
3140
3132
|
);
|
|
3141
3133
|
}
|
|
3142
|
-
return /* @__PURE__ */ (0,
|
|
3134
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3143
3135
|
ToolExecution,
|
|
3144
3136
|
{
|
|
3145
3137
|
status: "done",
|
|
@@ -3157,13 +3149,13 @@ function renderBossApp(opts) {
|
|
|
3157
3149
|
const resetUI = () => {
|
|
3158
3150
|
const old = ref.instance;
|
|
3159
3151
|
if (!old) return;
|
|
3160
|
-
process.stdout.write("\x1B[2J\x1B[
|
|
3152
|
+
process.stdout.write("\x1B[2J\x1B[H");
|
|
3161
3153
|
old.unmount();
|
|
3162
|
-
ref.instance = render_default(/* @__PURE__ */ (0,
|
|
3154
|
+
ref.instance = render_default(/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(BossApp, { boss: opts.boss, resetUI }), {
|
|
3163
3155
|
exitOnCtrlC: false
|
|
3164
3156
|
});
|
|
3165
3157
|
};
|
|
3166
|
-
const instance = render_default(/* @__PURE__ */ (0,
|
|
3158
|
+
const instance = render_default(/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(BossApp, { boss: opts.boss, resetUI }), {
|
|
3167
3159
|
// Disable Ink's built-in exit-on-Ctrl+C — we need our own double-press
|
|
3168
3160
|
// handler in BossApp to drive the "Press Ctrl+C again to exit" footer
|
|
3169
3161
|
// message. With this flag true (the default), Ink kills the process on
|
|
@@ -3213,8 +3205,8 @@ function renderBossApp(opts) {
|
|
|
3213
3205
|
|
|
3214
3206
|
// src/splash.tsx
|
|
3215
3207
|
init_esm_shims();
|
|
3216
|
-
var
|
|
3217
|
-
var
|
|
3208
|
+
var import_react11 = __toESM(require_react(), 1);
|
|
3209
|
+
var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
|
|
3218
3210
|
var SPLASH_LINES = [
|
|
3219
3211
|
" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 ",
|
|
3220
3212
|
" \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 ",
|
|
@@ -3232,7 +3224,7 @@ function colorForLine(lineIdx, totalLines, offset) {
|
|
|
3232
3224
|
return GRADIENT[idx];
|
|
3233
3225
|
}
|
|
3234
3226
|
function SplashLogo({ offset }) {
|
|
3235
|
-
return /* @__PURE__ */ (0,
|
|
3227
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { flexDirection: "column", children: SPLASH_LINES.map((line, i) => {
|
|
3236
3228
|
const hue = colorForLine(i, SPLASH_LINES.length, offset);
|
|
3237
3229
|
const segments = [];
|
|
3238
3230
|
let buf = "";
|
|
@@ -3253,12 +3245,12 @@ function SplashLogo({ offset }) {
|
|
|
3253
3245
|
}
|
|
3254
3246
|
}
|
|
3255
3247
|
if (buf) segments.push({ text: buf, dim: bufDim });
|
|
3256
|
-
return /* @__PURE__ */ (0,
|
|
3248
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { children: segments.map((seg, j) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: hue, dimColor: seg.dim, children: seg.text }, j)) }, i);
|
|
3257
3249
|
}) });
|
|
3258
3250
|
}
|
|
3259
3251
|
function SplashScreen({ caption }) {
|
|
3260
|
-
const [offset, setOffset] = (0,
|
|
3261
|
-
(0,
|
|
3252
|
+
const [offset, setOffset] = (0, import_react11.useState)(0);
|
|
3253
|
+
(0, import_react11.useEffect)(() => {
|
|
3262
3254
|
const timer = setInterval(() => {
|
|
3263
3255
|
setOffset((o) => o + 1);
|
|
3264
3256
|
}, 120);
|
|
@@ -3266,11 +3258,11 @@ function SplashScreen({ caption }) {
|
|
|
3266
3258
|
clearInterval(timer);
|
|
3267
3259
|
};
|
|
3268
3260
|
}, []);
|
|
3269
|
-
const [size, setSize] = (0,
|
|
3261
|
+
const [size, setSize] = (0, import_react11.useState)(() => ({
|
|
3270
3262
|
columns: process.stdout.columns ?? 80,
|
|
3271
3263
|
rows: process.stdout.rows ?? 24
|
|
3272
3264
|
}));
|
|
3273
|
-
(0,
|
|
3265
|
+
(0, import_react11.useEffect)(() => {
|
|
3274
3266
|
const handler = () => setSize({
|
|
3275
3267
|
columns: process.stdout.columns ?? 80,
|
|
3276
3268
|
rows: process.stdout.rows ?? 24
|
|
@@ -3282,27 +3274,27 @@ function SplashScreen({ caption }) {
|
|
|
3282
3274
|
}, []);
|
|
3283
3275
|
const SPLASH_BLOCK_HEIGHT = SPLASH_LINES.length + 3;
|
|
3284
3276
|
const verticalPad = Math.max(0, Math.floor((size.rows - SPLASH_BLOCK_HEIGHT) / 2));
|
|
3285
|
-
return /* @__PURE__ */ (0,
|
|
3286
|
-
/* @__PURE__ */ (0,
|
|
3287
|
-
/* @__PURE__ */ (0,
|
|
3288
|
-
/* @__PURE__ */ (0,
|
|
3289
|
-
/* @__PURE__ */ (0,
|
|
3290
|
-
/* @__PURE__ */ (0,
|
|
3291
|
-
/* @__PURE__ */ (0,
|
|
3277
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", width: size.columns, height: size.rows, alignItems: "center", children: [
|
|
3278
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { height: verticalPad, flexShrink: 0 }),
|
|
3279
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", alignItems: "flex-start", flexShrink: 0, children: [
|
|
3280
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SplashLogo, { offset }),
|
|
3281
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { width: SPLASH_WIDTH, marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { children: [
|
|
3282
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.text, bold: true, children: BRAND }),
|
|
3283
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: COLORS.textDim, children: [
|
|
3292
3284
|
" v",
|
|
3293
3285
|
VERSION
|
|
3294
3286
|
] }),
|
|
3295
|
-
/* @__PURE__ */ (0,
|
|
3296
|
-
/* @__PURE__ */ (0,
|
|
3287
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.textDim, children: " \xB7 By " }),
|
|
3288
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.text, bold: true, children: AUTHOR })
|
|
3297
3289
|
] }) }),
|
|
3298
|
-
/* @__PURE__ */ (0,
|
|
3290
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { width: SPLASH_WIDTH, justifyContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.textDim, children: caption ?? "Spinning up the orchestrator\u2026" }) })
|
|
3299
3291
|
] })
|
|
3300
3292
|
] });
|
|
3301
3293
|
}
|
|
3302
3294
|
function showSplash(opts) {
|
|
3303
3295
|
const start = Date.now();
|
|
3304
3296
|
void playSplashAudio();
|
|
3305
|
-
const instance = render_default(/* @__PURE__ */ (0,
|
|
3297
|
+
const instance = render_default(/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SplashScreen, { caption: opts.caption }));
|
|
3306
3298
|
const audioDurationMs = getSplashAudioDurationMs();
|
|
3307
3299
|
const defaultMinMs = audioDurationMs + 200;
|
|
3308
3300
|
return {
|