@kenkaiiii/gg-boss 4.3.150 → 4.3.152
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/README.md +168 -0
- package/dist/{chunk-ZNVFGIDI.js → chunk-SFFLLX2R.js} +28 -7
- package/dist/{chunk-ZNVFGIDI.js.map → chunk-SFFLLX2R.js.map} +1 -1
- package/dist/cli.js +54 -28
- package/dist/cli.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +4 -4
package/dist/cli.js
CHANGED
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
use_app_default,
|
|
44
44
|
use_input_default,
|
|
45
45
|
use_stdout_default
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-SFFLLX2R.js";
|
|
47
47
|
import "./chunk-QT366Y52.js";
|
|
48
48
|
import {
|
|
49
49
|
source_default
|
|
@@ -336,7 +336,7 @@ init_esm_shims();
|
|
|
336
336
|
// package.json
|
|
337
337
|
var package_default = {
|
|
338
338
|
name: "@kenkaiiii/gg-boss",
|
|
339
|
-
version: "4.3.
|
|
339
|
+
version: "4.3.152",
|
|
340
340
|
type: "module",
|
|
341
341
|
description: "Orchestrator agent that drives multiple ggcoder sessions across projects from a single chat",
|
|
342
342
|
license: "MIT",
|
|
@@ -1574,7 +1574,7 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
1574
1574
|
const state = useBossState();
|
|
1575
1575
|
const { exit } = use_app_default();
|
|
1576
1576
|
const { stdout } = use_stdout_default();
|
|
1577
|
-
const { resizeKey, columns } = useTerminalSize();
|
|
1577
|
+
const { resizeKey, columns, rows } = useTerminalSize();
|
|
1578
1578
|
const runStartRef = (0, import_react11.useRef)(null);
|
|
1579
1579
|
runStartRef.current = state.runStartMs;
|
|
1580
1580
|
const charCountRef = (0, import_react11.useRef)(0);
|
|
@@ -1582,11 +1582,8 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
1582
1582
|
const realTokensAccumRef = (0, import_react11.useRef)(0);
|
|
1583
1583
|
realTokensAccumRef.current = state.bossInputTokens;
|
|
1584
1584
|
const [lastUserMessage, setLastUserMessage] = (0, import_react11.useState)("");
|
|
1585
|
-
const
|
|
1586
|
-
null
|
|
1587
|
-
);
|
|
1585
|
+
const overlay = state.overlay;
|
|
1588
1586
|
const [currentRadio, setCurrentRadio] = (0, import_react11.useState)(() => getCurrentStation());
|
|
1589
|
-
const [staticKey, setStaticKey] = (0, import_react11.useState)(0);
|
|
1590
1587
|
const [updatePending, setUpdatePending] = (0, import_react11.useState)(
|
|
1591
1588
|
() => getPendingUpdate(VERSION) !== null
|
|
1592
1589
|
);
|
|
@@ -1626,13 +1623,15 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
1626
1623
|
);
|
|
1627
1624
|
const openOverlay = (0, import_react11.useCallback)(
|
|
1628
1625
|
(next) => {
|
|
1629
|
-
setOverlay(next);
|
|
1626
|
+
bossStore.setOverlay(next);
|
|
1627
|
+
if (resetUI) resetUI();
|
|
1630
1628
|
},
|
|
1631
|
-
[]
|
|
1629
|
+
[resetUI]
|
|
1632
1630
|
);
|
|
1633
1631
|
const closeOverlay = (0, import_react11.useCallback)(() => {
|
|
1634
|
-
setOverlay(null);
|
|
1635
|
-
|
|
1632
|
+
bossStore.setOverlay(null);
|
|
1633
|
+
if (resetUI) resetUI();
|
|
1634
|
+
}, [resetUI]);
|
|
1636
1635
|
void stdout;
|
|
1637
1636
|
const handleDoubleExit = useDoublePress(
|
|
1638
1637
|
(pending) => bossStore.setExitPending(pending),
|
|
@@ -1667,10 +1666,9 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
1667
1666
|
bossStore.appendInfo(buildHelpText(), "info");
|
|
1668
1667
|
return true;
|
|
1669
1668
|
case "clear":
|
|
1670
|
-
resetUI?.();
|
|
1671
1669
|
bossStore.clearHistory();
|
|
1670
|
+
resetUI?.();
|
|
1672
1671
|
await boss.resetConversation();
|
|
1673
|
-
setStaticKey((k) => k + 1);
|
|
1674
1672
|
bossStore.appendInfo("Session cleared.", "info");
|
|
1675
1673
|
return true;
|
|
1676
1674
|
case "model-boss":
|
|
@@ -1726,8 +1724,14 @@ function BossAppInner({ boss, resetUI }) {
|
|
|
1726
1724
|
}
|
|
1727
1725
|
handleDoubleExit();
|
|
1728
1726
|
};
|
|
1727
|
+
if (rows < 14) {
|
|
1728
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", width: columns, paddingX: 1, marginTop: 1, children: [
|
|
1729
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { bold: true, color: COLORS.accent, children: "Terminal too small" }),
|
|
1730
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: COLORS.primary, children: `Resize to at least 14 rows to use GG Boss (currently ${rows}).` })
|
|
1731
|
+
] });
|
|
1732
|
+
}
|
|
1729
1733
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { flexDirection: "column", width: columns, children: [
|
|
1730
|
-
/* @__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) },
|
|
1734
|
+
/* @__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),
|
|
1731
1735
|
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: [
|
|
1732
1736
|
state.streaming && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(StreamingTurnView, { turn: state.streaming, isRunning: state.phase === "working" }),
|
|
1733
1737
|
state.phase === "working" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
@@ -1879,6 +1883,7 @@ function WorkerStatusBar({
|
|
|
1879
1883
|
pendingMessages
|
|
1880
1884
|
}) {
|
|
1881
1885
|
const theme = useTheme();
|
|
1886
|
+
const { columns } = useTerminalSize();
|
|
1882
1887
|
const working = workers.filter((w) => w.status === "working");
|
|
1883
1888
|
const errored = workers.filter((w) => w.status === "error");
|
|
1884
1889
|
const idleCount = workers.length - working.length - errored.length;
|
|
@@ -1917,19 +1922,21 @@ function WorkerStatusBar({
|
|
|
1917
1922
|
] }) }, "idle")
|
|
1918
1923
|
);
|
|
1919
1924
|
}
|
|
1920
|
-
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { paddingX: 1, children: [
|
|
1925
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Box_default, { paddingX: 1, width: columns, flexShrink: 1, children: [
|
|
1921
1926
|
anyWorking && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(AnimationActiveSentinel, {}),
|
|
1922
|
-
|
|
1923
|
-
i
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1927
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { wrap: "truncate", children: [
|
|
1928
|
+
slots.map((slot, i) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react11.default.Fragment, { children: [
|
|
1929
|
+
i > 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.border, children: " \u2502 " }),
|
|
1930
|
+
slot
|
|
1931
|
+
] }, i)),
|
|
1932
|
+
pendingMessages > 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
|
|
1933
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Text, { color: theme.textDim, children: " " }),
|
|
1934
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Text, { color: theme.warning, children: [
|
|
1935
|
+
pendingMessages,
|
|
1936
|
+
" message",
|
|
1937
|
+
pendingMessages === 1 ? "" : "s",
|
|
1938
|
+
" queued"
|
|
1939
|
+
] })
|
|
1933
1940
|
] })
|
|
1934
1941
|
] })
|
|
1935
1942
|
] });
|
|
@@ -2232,6 +2239,15 @@ function renderBossApp(opts) {
|
|
|
2232
2239
|
exitOnCtrlC: false
|
|
2233
2240
|
});
|
|
2234
2241
|
ref.instance = instance;
|
|
2242
|
+
let resizeTimer = null;
|
|
2243
|
+
const onTerminalResize = () => {
|
|
2244
|
+
if (resizeTimer) clearTimeout(resizeTimer);
|
|
2245
|
+
resizeTimer = setTimeout(() => {
|
|
2246
|
+
resizeTimer = null;
|
|
2247
|
+
resetUI();
|
|
2248
|
+
}, 250);
|
|
2249
|
+
};
|
|
2250
|
+
process.stdout.on("resize", onTerminalResize);
|
|
2235
2251
|
return {
|
|
2236
2252
|
// Follow ref.instance through restarts: when /clear nukes the current
|
|
2237
2253
|
// instance and creates a new one, this promise re-binds to whichever
|
|
@@ -2241,15 +2257,25 @@ function renderBossApp(opts) {
|
|
|
2241
2257
|
waitUntilExit: async () => {
|
|
2242
2258
|
while (true) {
|
|
2243
2259
|
const current = ref.instance;
|
|
2244
|
-
if (!current)
|
|
2260
|
+
if (!current) {
|
|
2261
|
+
process.stdout.off("resize", onTerminalResize);
|
|
2262
|
+
if (resizeTimer) clearTimeout(resizeTimer);
|
|
2263
|
+
return;
|
|
2264
|
+
}
|
|
2245
2265
|
await current.waitUntilExit();
|
|
2246
2266
|
if (ref.instance === current) {
|
|
2247
2267
|
ref.instance = null;
|
|
2268
|
+
process.stdout.off("resize", onTerminalResize);
|
|
2269
|
+
if (resizeTimer) clearTimeout(resizeTimer);
|
|
2248
2270
|
return;
|
|
2249
2271
|
}
|
|
2250
2272
|
}
|
|
2251
2273
|
},
|
|
2252
|
-
unmount: () =>
|
|
2274
|
+
unmount: () => {
|
|
2275
|
+
process.stdout.off("resize", onTerminalResize);
|
|
2276
|
+
if (resizeTimer) clearTimeout(resizeTimer);
|
|
2277
|
+
ref.instance?.unmount();
|
|
2278
|
+
}
|
|
2253
2279
|
};
|
|
2254
2280
|
}
|
|
2255
2281
|
|