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