@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/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-ILOJDKGE.js";
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.158",
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 import_react11 = __toESM(require_react(), 1);
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 import_react8 = __toESM(require_react(), 1);
1570
- var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
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, import_jsx_runtime8.jsx)(Box_default, { paddingX: 1, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.warning, children: "Press Ctrl+C again to exit" }) });
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, import_jsx_runtime8.jsx)(Text, { color: theme.border, children: " \u2502 " });
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, import_jsx_runtime8.jsx)(Text, { color: contextColor, children: PARTIAL_BLOCKS[8] }, i)
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, import_jsx_runtime8.jsx)(Text, { color: contextColor, children: PARTIAL_BLOCKS[eighths] }, i)
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, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: LIGHT_SHADE }, i)
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, import_jsx_runtime8.jsxs)(Box_default, { paddingX: 1, width: columns, children: [
1647
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Box_default, { flexGrow: 1 }),
1648
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Box_default, { flexShrink: 0, children: [
1649
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { children: barChars }),
1650
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color: contextColor, children: [
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, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: "boss " }),
1657
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: COLORS.primary, bold: true, children: bossM }),
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, import_jsx_runtime8.jsx)(Text, { color: theme.textDim, children: "workers " }),
1660
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: COLORS.accent, bold: true, children: wkrM }),
1661
- !dropThinking && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
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, import_jsx_runtime8.jsx)(Text, { color: bossThinkingLevel ? theme.accent : theme.textDim, children: bossThinkingLevel ? "Thinking on" : "Thinking off" })
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, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
1659
+ radioName && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
1666
1660
  sep,
1667
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Text, { color: theme.secondary ?? theme.accent, children: [
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, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
1666
+ updatePending && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
1673
1667
  sep,
1674
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.success, bold: true, wrap: "truncate", children: useShortUpdate ? "Update ready" : "Update ready. Restart GG Boss." })
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 import_react9 = __toESM(require_react(), 1);
1938
- var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
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, import_react9.useState)(0);
1962
- const [status, setStatusMsg] = (0, import_react9.useState)("");
1963
- const statusTimer = (0, import_react9.useRef)(null);
1964
- const showStatus = (0, import_react9.useCallback)((msg) => {
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, import_react9.useEffect)(() => {
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, import_jsx_runtime9.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, paddingX: 1, children: [
2035
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Box_default, { children: [
2036
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: COLORS.primary, bold: true, children: "Tasks" }),
2037
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: theme.textDim, children: ` \xB7 ${tasks.length} total \xB7 ` }),
2038
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
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, import_jsx_runtime9.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Text, { color: theme.textDim, children: [
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, import_jsx_runtime9.jsx)(Text, { color: theme.text, children: '"plan some work"' }),
2045
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.text, children: '"plan some work"' }),
2052
2046
  "."
2053
2047
  ] }) }),
2054
- showingTop && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: theme.textDim, children: ` \u2191 ${startIdx} more above` }),
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, import_jsx_runtime9.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
2060
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Text, { children: [
2061
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: projectColor(group.project), bold: true, children: group.project }),
2062
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: theme.textDim, children: ` \xB7 ${group.tasks.length}` })
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, import_jsx_runtime9.jsxs)(Text, { color, bold: isSelected, children: [
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, import_jsx_runtime9.jsx)(Text, { color: theme.textDim, children: ` \u2193 ${flatTasks.length - endIdx} more below` }),
2081
- status && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: theme.success, children: " " + status }) }),
2082
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Text, { color: theme.textDim, children: [
2083
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: theme.primary, children: "\u2191\u2193" }),
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, import_jsx_runtime9.jsx)(Text, { color: theme.primary, children: "d" }),
2079
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.primary, children: "d" }),
2086
2080
  ")elete \xB7 (",
2087
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: theme.primary, children: "r" }),
2081
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Text, { color: theme.primary, children: "r" }),
2088
2082
  ")un pending \xB7 ",
2089
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: theme.primary, children: "ESC" }),
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, import_jsx_runtime9.jsxs)(Text, { children: [
2102
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Text, { color: theme.success, children: [
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, import_jsx_runtime9.jsx)(Text, { color: theme.textDim, children: " \xB7 " }),
2107
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Text, { color: theme.warning, children: [
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, import_jsx_runtime9.jsx)(Text, { color: theme.textDim, children: " \xB7 " }),
2112
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Text, { color: theme.text, children: [
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, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
2117
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Text, { color: theme.textDim, children: " \xB7 " }),
2118
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Text, { color: theme.error, children: [
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 import_react10 = __toESM(require_react(), 1);
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 import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
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, import_jsx_runtime10.jsx)(
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 import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
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, import_jsx_runtime11.jsx)(TerminalSizeProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ThemeContext.Provider, { value: theme, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(AnimationProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(BossAppInner, { ...props }) }) }) });
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, import_react11.useRef)(null);
2502
+ const runStartRef = (0, import_react10.useRef)(null);
2509
2503
  runStartRef.current = state.runStartMs;
2510
- const charCountRef = (0, import_react11.useRef)(0);
2504
+ const charCountRef = (0, import_react10.useRef)(0);
2511
2505
  charCountRef.current = state.streaming?.text.length ?? 0;
2512
- const realTokensAccumRef = (0, import_react11.useRef)(0);
2506
+ const realTokensAccumRef = (0, import_react10.useRef)(0);
2513
2507
  realTokensAccumRef.current = state.bossInputTokens;
2514
- const [lastUserMessage, setLastUserMessage] = (0, import_react11.useState)("");
2508
+ const [lastUserMessage, setLastUserMessage] = (0, import_react10.useState)("");
2515
2509
  const overlay = state.overlay;
2516
- const [currentRadio, setCurrentRadio] = (0, import_react11.useState)(() => getCurrentStation());
2517
- const [updatePending, setUpdatePending] = (0, import_react11.useState)(
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, import_react11.useEffect)(() => {
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, import_react11.useRef)("");
2529
- (0, import_react11.useEffect)(() => {
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, import_react11.useEffect)(() => {
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, import_react11.useMemo)(
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, import_react11.useCallback)(
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, import_react11.useCallback)(() => {
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, import_react11.useEffect)(() => {
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, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", width: columns, paddingX: 1, marginTop: 1, children: [
2659
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { bold: true, color: COLORS.accent, children: "Terminal too small" }),
2660
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.primary, children: `Resize to at least 14 rows to use GG Boss (currently ${rows}).` })
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, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", width: columns, children: [
2664
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Static, { items: staticItems, style: { width: "100%" }, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { flexDirection: "column", paddingRight: 1, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(StaticRowView, { row: item }) }, item.id) }, resizeKey),
2665
- overlay === "tasks" ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(BossTasksOverlay, { boss, workers: state.workers, onClose: closeOverlay }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
2666
- state.streaming && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(StreamingTurnView, { turn: state.streaming, isRunning: state.phase === "working" }),
2667
- state.phase === "working" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(CompactionSpinner, {}),
2686
- state.compaction?.state === "done" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(ScopePill, { scope: state.scope }),
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
2746
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsxs)(Text, { children: [
2775
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, children: "Project " }),
2776
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: "black", backgroundColor: bg, bold: true, children: ` ${label} ` }),
2777
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: theme.textDim, children: [
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, import_jsx_runtime11.jsx)(Text, { color: theme.primary, children: "Tab" }),
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, import_jsx_runtime11.jsx)(Text, { children: name.split("").map((ch, i) => {
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, import_jsx_runtime11.jsx)(Text, { color, bold: isBright, dimColor: !isBright, children: ch }, i);
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, import_jsx_runtime11.jsxs)(import_react11.default.Fragment, { children: [
2830
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ShimmerName, { name: w.name, color: projectHue, tick }),
2831
- elapsed && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: theme.textDim, children: [
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, import_jsx_runtime11.jsx)(import_react11.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: theme.error, children: [
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, import_jsx_runtime11.jsx)(import_react11.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: theme.textDim, children: [
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, import_jsx_runtime11.jsxs)(Box_default, { paddingX: 1, width: columns, flexShrink: 1, children: [
2856
- anyWorking && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(AnimationActiveSentinel, {}),
2857
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { wrap: "truncate", children: [
2858
- slots.map((slot, i) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react11.default.Fragment, { children: [
2859
- i > 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.border, children: " \u2502 " }),
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, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
2863
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, children: " " }),
2864
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: theme.warning, children: [
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, import_jsx_runtime11.jsx)(Box_default, { paddingX: 1, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(BossBanner, { subtitle: "Orchestrator", showShortcuts: true }) });
2877
- }
2878
- if (row.kind === "user") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(UserMessage, { text: row.text });
2879
- if (row.kind === "assistant") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(AssistantRow, { item: row });
2880
- if (row.kind === "tool") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ToolHistoryRow, { item: row });
2881
- if (row.kind === "worker_event") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(WorkerEventRow, { item: row });
2882
- if (row.kind === "worker_error") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(WorkerErrorRow, { item: row });
2883
- if (row.kind === "info") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(InfoRow, { text: row.text, level: row.level ?? "info" });
2884
- if (row.kind === "task_dispatch") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TaskDispatchRow, { tasks: row.tasks });
2885
- if (row.kind === "update_notice") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(UpdateNoticeRow, { text: row.text });
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, import_jsx_runtime11.jsx)(Box_default, { marginTop: 1, flexShrink: 1, borderStyle: "round", borderColor: COLORS.accent, paddingX: 1, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { wrap: "wrap", children: [
2890
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.accent, bold: true, children: "\u2728 " }),
2891
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.primary, bold: true, children: text })
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, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", paddingX: 1, marginTop: 1, children: [
2900
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { children: [
2901
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.primary, bold: true, children: "\u23FA " }),
2902
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: theme.text, bold: true, children: [
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, import_jsx_runtime11.jsxs)(Text, { children: [
2911
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, children: " \u2022 " }),
2912
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: projectColor(t.project), bold: true, children: t.project }),
2913
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, children: ": " }),
2914
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.text, children: t.title })
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
3035
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "row", children: [
3036
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ToolUseLoader, { status: loaderStatus }),
3037
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { wrap: "wrap", children: [
3038
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: headerColor, bold: true, children: item.project }),
3039
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.text, children: ` turn ${item.turnIndex}` }),
3040
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, children: ` \xB7 ${toolSummary}` }),
3041
- grade && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
3042
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, children: " \xB7 " }),
3043
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: statusGradeColor(grade, theme), bold: true, children: grade })
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, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
3048
- trailer.changed && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TrailerLine, { label: "Changed", value: trailer.changed, maxLen: fieldMaxLen }),
3049
- trailer.verified && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(TrailerLine, { label: "Notes", value: trailer.notes, maxLen: fieldMaxLen })
3068
- ] }) : fallbackSummary && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(MessageResponse, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, wrap: "truncate", children: fallbackSummary }) })
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, import_jsx_runtime11.jsx)(MessageResponse, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { wrap: "truncate", children: [
3079
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: labelColor ?? theme.textDim, bold: true, children: [
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, import_jsx_runtime11.jsx)(Text, { color: theme.text, children: ` ${clip(value, maxLen - label.length - 2)}` })
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, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", marginTop: 1, children: [
3089
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "row", children: [
3090
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ToolUseLoader, { status: "error" }),
3091
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { wrap: "wrap", children: [
3092
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.toolError, bold: true, children: item.project }),
3093
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, children: " worker error" })
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, import_jsx_runtime11.jsx)(MessageResponse, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.error, wrap: "wrap", children: item.message }) })
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, import_jsx_runtime11.jsx)(AssistantMessage, { text });
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, import_jsx_runtime11.jsxs)(Box_default, { marginTop: 1, flexDirection: "row", children: [
3107
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ToolUseLoader, { status: level === "error" ? "error" : "queued" }),
3108
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color, wrap: "wrap", children: text }) })
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, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", children: [
3116
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(StreamingToolRow, { tool: t }, t.toolCallId))
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(
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, import_jsx_runtime11.jsx)(BossApp, { boss: opts.boss, resetUI }), {
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, import_jsx_runtime11.jsx)(BossApp, { boss: opts.boss, resetUI }), {
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 import_react12 = __toESM(require_react(), 1);
3215
- var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
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, import_jsx_runtime12.jsx)(Box_default, { flexDirection: "column", children: SPLASH_LINES.map((line, i) => {
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, import_jsx_runtime12.jsx)(Text, { children: segments.map((seg, j) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Text, { color: hue, dimColor: seg.dim, children: seg.text }, j)) }, i);
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, import_react12.useState)(0);
3259
- (0, import_react12.useEffect)(() => {
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, import_react12.useState)(() => ({
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, import_react12.useEffect)(() => {
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, import_jsx_runtime12.jsxs)(Box_default, { flexDirection: "column", width: size.columns, height: size.rows, alignItems: "center", children: [
3284
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Box_default, { height: verticalPad, flexShrink: 0 }),
3285
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Box_default, { flexDirection: "column", alignItems: "flex-start", flexShrink: 0, children: [
3286
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SplashLogo, { offset }),
3287
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Box_default, { width: SPLASH_WIDTH, marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Text, { children: [
3288
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Text, { color: COLORS.text, bold: true, children: BRAND }),
3289
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Text, { color: COLORS.textDim, children: [
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, import_jsx_runtime12.jsx)(Text, { color: COLORS.textDim, children: " \xB7 By " }),
3294
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Text, { color: COLORS.text, bold: true, children: AUTHOR })
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, import_jsx_runtime12.jsx)(Box_default, { width: SPLASH_WIDTH, justifyContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Text, { color: COLORS.textDim, children: caption ?? "Spinning up the orchestrator\u2026" }) })
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, import_jsx_runtime12.jsx)(SplashScreen, { caption: opts.caption }));
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 {