@kenkaiiii/gg-boss 4.3.96
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/LICENSE +21 -0
- package/dist/banner.d.ts +11 -0
- package/dist/banner.d.ts.map +1 -0
- package/dist/banner.js +25 -0
- package/dist/banner.js.map +1 -0
- package/dist/boot-banner.d.ts +15 -0
- package/dist/boot-banner.d.ts.map +1 -0
- package/dist/boot-banner.js +61 -0
- package/dist/boot-banner.js.map +1 -0
- package/dist/boss-footer.d.ts +16 -0
- package/dist/boss-footer.d.ts.map +1 -0
- package/dist/boss-footer.js +60 -0
- package/dist/boss-footer.js.map +1 -0
- package/dist/boss-store.d.ts +202 -0
- package/dist/boss-store.d.ts.map +1 -0
- package/dist/boss-store.js +560 -0
- package/dist/boss-store.js.map +1 -0
- package/dist/boss-system-prompt.d.ts +3 -0
- package/dist/boss-system-prompt.d.ts.map +1 -0
- package/dist/boss-system-prompt.js +52 -0
- package/dist/boss-system-prompt.js.map +1 -0
- package/dist/branding.d.ts +18 -0
- package/dist/branding.d.ts.map +1 -0
- package/dist/branding.js +33 -0
- package/dist/branding.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +163 -0
- package/dist/cli.js.map +1 -0
- package/dist/discover.d.ts +13 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +92 -0
- package/dist/discover.js.map +1 -0
- package/dist/event-queue.d.ts +16 -0
- package/dist/event-queue.d.ts.map +1 -0
- package/dist/event-queue.js +39 -0
- package/dist/event-queue.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/link-command.d.ts +2 -0
- package/dist/link-command.d.ts.map +1 -0
- package/dist/link-command.js +120 -0
- package/dist/link-command.js.map +1 -0
- package/dist/links.d.ts +11 -0
- package/dist/links.d.ts.map +1 -0
- package/dist/links.js +22 -0
- package/dist/links.js.map +1 -0
- package/dist/orchestrator-app.d.ts +15 -0
- package/dist/orchestrator-app.d.ts.map +1 -0
- package/dist/orchestrator-app.js +248 -0
- package/dist/orchestrator-app.js.map +1 -0
- package/dist/orchestrator.d.ts +79 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +405 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/sessions.d.ts +21 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +122 -0
- package/dist/sessions.js.map +1 -0
- package/dist/slash-commands.d.ts +19 -0
- package/dist/slash-commands.d.ts.map +1 -0
- package/dist/slash-commands.js +54 -0
- package/dist/slash-commands.js.map +1 -0
- package/dist/tools.d.ts +10 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +81 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +32 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +40 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +113 -0
- package/dist/worker.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { Box, Static, Text, render, useApp, useInput } from "ink";
|
|
4
|
+
import { ThemeContext, loadTheme, useTheme } from "@kenkaiiii/ggcoder/ui/theme";
|
|
5
|
+
import { ActivityIndicator, AnimationProvider, AssistantMessage, CompactionDone, CompactionSpinner, InputArea, ModelSelector, StreamingArea, ToolExecution, UserMessage, } from "@kenkaiiii/ggcoder/ui";
|
|
6
|
+
import { useDoublePress } from "@kenkaiiii/ggcoder/ui/hooks/double-press";
|
|
7
|
+
import { TerminalSizeProvider } from "@kenkaiiii/ggcoder/ui/hooks/terminal-size";
|
|
8
|
+
import { BossFooter } from "./boss-footer.js";
|
|
9
|
+
import { BossBanner } from "./banner.js";
|
|
10
|
+
import { bossStore, useBossState } from "./boss-store.js";
|
|
11
|
+
import { BOSS_SLASH_COMMANDS, canonicalName, parseSlash, buildHelpText } from "./slash-commands.js";
|
|
12
|
+
export function BossApp({ boss }) {
|
|
13
|
+
const theme = loadTheme("dark");
|
|
14
|
+
return (_jsx(TerminalSizeProvider, { children: _jsx(ThemeContext.Provider, { value: theme, children: _jsx(AnimationProvider, { children: _jsx(BossAppInner, { boss: boss }) }) }) }));
|
|
15
|
+
}
|
|
16
|
+
function BossAppInner({ boss }) {
|
|
17
|
+
const state = useBossState();
|
|
18
|
+
const { exit } = useApp();
|
|
19
|
+
const runStartRef = useRef(null);
|
|
20
|
+
runStartRef.current = state.runStartMs;
|
|
21
|
+
const [overlay, setOverlay] = useState(null);
|
|
22
|
+
const staticItems = useMemo(() => [{ kind: "banner", id: "banner" }, ...state.history], [state.history]);
|
|
23
|
+
// ggcoder's double-press pattern: 800ms window. First press shows
|
|
24
|
+
// "Press Ctrl+C again to exit" in the footer; second within 800ms exits.
|
|
25
|
+
const handleDoubleExit = useDoublePress((pending) => bossStore.setExitPending(pending), () => exit());
|
|
26
|
+
// Two-phase flush — see boss-store.ts for the rationale. Phase 1 (orchestrator
|
|
27
|
+
// pushes into pendingFlush, live area shrinks) already happened; phase 2 here
|
|
28
|
+
// commits to history on the next render so Ink doesn't clip long responses.
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (state.pendingFlush.length > 0) {
|
|
31
|
+
bossStore.commitPendingFlush();
|
|
32
|
+
}
|
|
33
|
+
}, [state.flushGeneration, state.pendingFlush.length]);
|
|
34
|
+
// ── ESC interrupt ───────────────────────────────────────
|
|
35
|
+
// Listen at the App level. When the boss is running, ESC aborts its current
|
|
36
|
+
// LLM call. When idle, InputArea handles ESC (clear input / clear selection)
|
|
37
|
+
// and our handler is a no-op since `state.phase !== "working"`.
|
|
38
|
+
useInput((_input, key) => {
|
|
39
|
+
if (key.escape && state.phase === "working") {
|
|
40
|
+
boss.abort();
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const handleSlashCommand = async (value) => {
|
|
44
|
+
const parsed = parseSlash(value);
|
|
45
|
+
if (!parsed)
|
|
46
|
+
return false;
|
|
47
|
+
const name = canonicalName(parsed.name);
|
|
48
|
+
if (!name) {
|
|
49
|
+
bossStore.appendInfo(`Unknown command: /${parsed.name}`, "warning");
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
switch (name) {
|
|
53
|
+
case "help":
|
|
54
|
+
bossStore.appendUser(value);
|
|
55
|
+
// Render help via an assistant block so Markdown formatting + dot prefix.
|
|
56
|
+
bossStore.appendInfo(buildHelpText(), "info");
|
|
57
|
+
return true;
|
|
58
|
+
case "clear":
|
|
59
|
+
bossStore.clearHistory();
|
|
60
|
+
await boss.resetConversation();
|
|
61
|
+
return true;
|
|
62
|
+
case "workers":
|
|
63
|
+
bossStore.appendUser(value);
|
|
64
|
+
bossStore.appendInfo(formatWorkerList(state.workers), "info");
|
|
65
|
+
return true;
|
|
66
|
+
case "model-boss":
|
|
67
|
+
setOverlay("model-boss");
|
|
68
|
+
return true;
|
|
69
|
+
case "model-workers":
|
|
70
|
+
setOverlay("model-workers");
|
|
71
|
+
return true;
|
|
72
|
+
case "compact":
|
|
73
|
+
bossStore.appendUser(value);
|
|
74
|
+
await boss.manualCompact();
|
|
75
|
+
return true;
|
|
76
|
+
case "new":
|
|
77
|
+
bossStore.clearHistory();
|
|
78
|
+
await boss.newSession();
|
|
79
|
+
return true;
|
|
80
|
+
case "quit":
|
|
81
|
+
exit();
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
85
|
+
};
|
|
86
|
+
const handleModelSelect = (value) => {
|
|
87
|
+
const colon = value.indexOf(":");
|
|
88
|
+
if (colon < 0) {
|
|
89
|
+
setOverlay(null);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const provider = value.slice(0, colon);
|
|
93
|
+
const model = value.slice(colon + 1);
|
|
94
|
+
if (overlay === "model-boss") {
|
|
95
|
+
void boss.switchBossModel(provider, model);
|
|
96
|
+
}
|
|
97
|
+
else if (overlay === "model-workers") {
|
|
98
|
+
void boss.switchWorkerModel(provider, model);
|
|
99
|
+
}
|
|
100
|
+
setOverlay(null);
|
|
101
|
+
};
|
|
102
|
+
const handleSubmit = (value) => {
|
|
103
|
+
const trimmed = value.trim();
|
|
104
|
+
if (!trimmed)
|
|
105
|
+
return;
|
|
106
|
+
if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
|
|
107
|
+
void handleSlashCommand(trimmed);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Show the user's literal text in chat history.
|
|
111
|
+
bossStore.appendUser(trimmed);
|
|
112
|
+
// Inject the scope pill into the message the boss actually sees, so the
|
|
113
|
+
// user doesn't have to write "for the yaatuber project, …" every prompt.
|
|
114
|
+
const scoped = scopePrefix(state.scope) + trimmed;
|
|
115
|
+
boss.enqueueUserMessage(scoped);
|
|
116
|
+
};
|
|
117
|
+
const handleAbort = () => {
|
|
118
|
+
// Ctrl+C while boss is running → single-press abort (matches ggcoder).
|
|
119
|
+
if (state.phase === "working") {
|
|
120
|
+
boss.abort();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// Boss is idle → double-press to exit, with footer pending message.
|
|
124
|
+
handleDoubleExit();
|
|
125
|
+
};
|
|
126
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: staticItems, children: (item) => _jsx(StaticRowView, { row: item }, item.id) }), state.streaming && (_jsx(StreamingTurnView, { turn: state.streaming, isRunning: state.phase === "working" })), state.phase === "working" && (_jsx(Box, { marginTop: 1, children: _jsx(ActivityIndicator, { phase: state.activityPhase, elapsedMs: state.runStartMs ? Date.now() - state.runStartMs : 0, runStartRef: runStartRef, thinkingMs: state.streaming?.thinkingMs ?? 0, isThinking: state.activityPhase === "thinking", tokenEstimate: state.bossInputTokens, activeToolNames: (state.streaming?.tools ?? [])
|
|
127
|
+
.filter((t) => t.status === "running")
|
|
128
|
+
.map((t) => t.name), retryInfo: state.retryInfo }) })), state.compaction?.state === "running" && _jsx(CompactionSpinner, {}), state.compaction?.state === "done" && (_jsx(CompactionDone, { originalCount: state.compaction.originalCount, newCount: state.compaction.newCount, tokensBefore: state.compaction.tokensBefore, tokensAfter: state.compaction.tokensAfter })), _jsx(InputArea, { onSubmit: handleSubmit, onAbort: handleAbort, disabled: state.phase === "working", isActive: !overlay, cwd: process.cwd(), commands: BOSS_SLASH_COMMANDS, scopeBadge: _jsx(ScopePill, { scope: state.scope }), onTab: () => bossStore.cycleScope() }), overlay ? (_jsx(ModelSelector, { onSelect: handleModelSelect, onCancel: () => setOverlay(null), loggedInProviders: state.loggedInProviders, currentModel: overlay === "model-boss" ? state.bossModel : state.workerModel, currentProvider: overlay === "model-boss" ? state.bossProvider : state.workerProvider })) : (_jsxs(_Fragment, { children: [_jsx(BossFooter, { bossModel: state.bossModel, workerModel: state.workerModel, tokensIn: state.bossInputTokens, exitPending: state.exitPending }), !state.exitPending && (_jsx(WorkerStatusBar, { workers: state.workers, pendingMessages: state.pendingUserMessages }))] }))] }));
|
|
129
|
+
}
|
|
130
|
+
// ── Scope pill (gg-boss specific) ──────────────────────────
|
|
131
|
+
function ScopePill({ scope }) {
|
|
132
|
+
const theme = useTheme();
|
|
133
|
+
const isAll = scope === "all";
|
|
134
|
+
// "All" gets the accent color so it visually pops as the multi-project mode;
|
|
135
|
+
// specific projects use primary so they read as a normal selection pill.
|
|
136
|
+
const bg = isAll ? theme.accent : theme.primary;
|
|
137
|
+
const label = isAll ? "All" : scope;
|
|
138
|
+
return (_jsx(Text, { color: "white", backgroundColor: bg, bold: true, children: ` ${label} ` }));
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Prepend the active scope to the user's message before it reaches the boss.
|
|
142
|
+
* Boss's system prompt teaches it to interpret these prefixes.
|
|
143
|
+
*/
|
|
144
|
+
function scopePrefix(scope) {
|
|
145
|
+
if (scope === "all")
|
|
146
|
+
return "[scope:all] ";
|
|
147
|
+
return `[scope:${scope}] `;
|
|
148
|
+
}
|
|
149
|
+
// ── Worker status row (gg-boss specific) ───────────────────
|
|
150
|
+
const WORKER_GLYPH = {
|
|
151
|
+
idle: "○",
|
|
152
|
+
working: "●",
|
|
153
|
+
error: "✗",
|
|
154
|
+
};
|
|
155
|
+
function WorkerStatusBar({ workers, pendingMessages, }) {
|
|
156
|
+
const theme = useTheme();
|
|
157
|
+
if (workers.length === 0)
|
|
158
|
+
return null;
|
|
159
|
+
return (_jsxs(Box, { paddingX: 1, children: [workers.map((w, i) => {
|
|
160
|
+
const color = w.status === "working"
|
|
161
|
+
? theme.accent
|
|
162
|
+
: w.status === "error"
|
|
163
|
+
? theme.error
|
|
164
|
+
: theme.textDim;
|
|
165
|
+
const labelColor = w.status === "working" ? theme.text : w.status === "error" ? theme.error : theme.textDim;
|
|
166
|
+
return (_jsxs(React.Fragment, { children: [i > 0 && _jsx(Text, { color: theme.textDim, children: " " }), _jsxs(Text, { color: color, children: [WORKER_GLYPH[w.status], " "] }), _jsx(Text, { color: labelColor, bold: w.status === "working", children: w.name })] }, w.name));
|
|
167
|
+
}), pendingMessages > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.textDim, children: " " }), _jsxs(Text, { color: theme.warning, children: [pendingMessages, " message", pendingMessages === 1 ? "" : "s", " queued"] })] }))] }));
|
|
168
|
+
}
|
|
169
|
+
function formatWorkerList(workers) {
|
|
170
|
+
if (workers.length === 0)
|
|
171
|
+
return "(no workers linked)";
|
|
172
|
+
const lines = ["**Linked workers**", ""];
|
|
173
|
+
for (const w of workers) {
|
|
174
|
+
lines.push(`- ${w.status === "working" ? "●" : w.status === "error" ? "✗" : "○"} ${w.name}`);
|
|
175
|
+
}
|
|
176
|
+
return lines.join("\n");
|
|
177
|
+
}
|
|
178
|
+
// ── Row dispatch ───────────────────────────────────────────
|
|
179
|
+
function StaticRowView({ row }) {
|
|
180
|
+
if (row.kind === "banner") {
|
|
181
|
+
return (_jsx(Box, { paddingX: 1, children: _jsx(BossBanner, { subtitle: "Orchestrator", hint: "talking to all linked projects from one chat" }) }));
|
|
182
|
+
}
|
|
183
|
+
if (row.kind === "user")
|
|
184
|
+
return _jsx(UserMessage, { text: row.text });
|
|
185
|
+
if (row.kind === "assistant")
|
|
186
|
+
return _jsx(AssistantRow, { item: row });
|
|
187
|
+
if (row.kind === "tool")
|
|
188
|
+
return _jsx(ToolHistoryRow, { item: row });
|
|
189
|
+
if (row.kind === "worker_event")
|
|
190
|
+
return _jsx(WorkerEventRow, { item: row });
|
|
191
|
+
if (row.kind === "worker_error")
|
|
192
|
+
return _jsx(WorkerErrorRow, { item: row });
|
|
193
|
+
if (row.kind === "info")
|
|
194
|
+
return _jsx(InfoRow, { text: row.text, level: row.level ?? "info" });
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
function AssistantRow({ item }) {
|
|
198
|
+
return (_jsx(AssistantMessage, { text: item.text, thinking: item.thinking, thinkingMs: item.thinkingMs }));
|
|
199
|
+
}
|
|
200
|
+
function ToolHistoryRow({ item }) {
|
|
201
|
+
return (_jsx(ToolExecution, { status: "done", name: item.name, args: item.args, result: item.result, isError: item.isError, details: item.details }));
|
|
202
|
+
}
|
|
203
|
+
// ── Worker rows (gg-boss specific) ─────────────────────────
|
|
204
|
+
function WorkerEventRow({ item }) {
|
|
205
|
+
const theme = useTheme();
|
|
206
|
+
const tools = item.toolsUsed.length > 0
|
|
207
|
+
? item.toolsUsed.map((t) => (t.ok ? t.name : `${t.name}✗`)).join(", ")
|
|
208
|
+
: "(no tools)";
|
|
209
|
+
return (_jsxs(Box, { paddingX: 1, marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: theme.success, children: "▸ " }), _jsx(Text, { color: theme.primary, bold: true, children: item.project }), _jsx(Text, { color: theme.textDim, children: ` turn ${item.turnIndex} · ${tools}` })] }), item.finalText && (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { color: theme.textDim, children: item.finalText }) }))] }));
|
|
210
|
+
}
|
|
211
|
+
function WorkerErrorRow({ item }) {
|
|
212
|
+
const theme = useTheme();
|
|
213
|
+
return (_jsxs(Box, { paddingX: 1, marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: theme.error, children: "✗ " }), _jsx(Text, { color: theme.error, bold: true, children: item.project }), _jsx(Text, { color: theme.textDim, children: " worker error" })] }), _jsx(Box, { paddingLeft: 2, children: _jsx(Text, { color: theme.error, children: item.message }) })] }));
|
|
214
|
+
}
|
|
215
|
+
function InfoRow({ text, level, }) {
|
|
216
|
+
// Render via AssistantMessage so info text gets the same Markdown rendering
|
|
217
|
+
// and dot prefix as any other assistant response — keeping the chat visually
|
|
218
|
+
// consistent.
|
|
219
|
+
if (level === "info")
|
|
220
|
+
return _jsx(AssistantMessage, { text: text });
|
|
221
|
+
const theme = useTheme();
|
|
222
|
+
const color = level === "error" ? theme.error : theme.warning;
|
|
223
|
+
return (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: color, children: text }) }));
|
|
224
|
+
}
|
|
225
|
+
// ── Streaming (live) ───────────────────────────────────────
|
|
226
|
+
function StreamingTurnView({ turn, isRunning, }) {
|
|
227
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(StreamingArea, { isRunning: isRunning, streamingText: turn.text, streamingThinking: turn.thinking, thinkingMs: turn.thinkingMs }), turn.tools.map((t) => (_jsx(StreamingToolRow, { tool: t }, t.toolCallId)))] }));
|
|
228
|
+
}
|
|
229
|
+
function StreamingToolRow({ tool }) {
|
|
230
|
+
if (tool.status === "running") {
|
|
231
|
+
return _jsx(ToolExecution, { status: "running", name: tool.name, args: tool.args });
|
|
232
|
+
}
|
|
233
|
+
return (_jsx(ToolExecution, { status: "done", name: tool.name, args: tool.args, result: tool.result ?? "", isError: tool.status === "error", details: tool.details }));
|
|
234
|
+
}
|
|
235
|
+
export function renderBossApp(opts) {
|
|
236
|
+
// Disable Ink's built-in exit-on-Ctrl+C — we need our own double-press
|
|
237
|
+
// handler in BossApp to drive the "Press Ctrl+C again to exit" footer
|
|
238
|
+
// message. With this flag true (the default), Ink kills the process on the
|
|
239
|
+
// very first Ctrl+C and InputArea's onAbort never runs.
|
|
240
|
+
const instance = render(_jsx(BossApp, { boss: opts.boss }), { exitOnCtrlC: false });
|
|
241
|
+
return {
|
|
242
|
+
waitUntilExit: async () => {
|
|
243
|
+
await instance.waitUntilExit();
|
|
244
|
+
},
|
|
245
|
+
unmount: () => instance.unmount(),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=orchestrator-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator-app.js","sourceRoot":"","sources":["../src/orchestrator-app.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { Provider, ThinkingLevel } from "@kenkaiiii/gg-ai";
|
|
2
|
+
import type { ProjectSpec } from "./types.js";
|
|
3
|
+
export interface GGBossOptions {
|
|
4
|
+
bossProvider: Provider;
|
|
5
|
+
bossModel: string;
|
|
6
|
+
workerProvider: Provider;
|
|
7
|
+
workerModel: string;
|
|
8
|
+
workerThinkingLevel?: ThinkingLevel;
|
|
9
|
+
projects: ProjectSpec[];
|
|
10
|
+
/** Resume a specific boss session by id. Mutually exclusive with continueRecent. */
|
|
11
|
+
resumeSessionId?: string;
|
|
12
|
+
/** Resume the most recently used boss session. */
|
|
13
|
+
continueRecent?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The orchestrator. Owns N workers, a single shared event queue, and the boss Agent.
|
|
17
|
+
* Each loop iteration: pop one event, format it as a user message, run the boss for
|
|
18
|
+
* one full prompt (which may dispatch tool calls to workers), then await the next event.
|
|
19
|
+
*
|
|
20
|
+
* UI state is mirrored into bossStore — components subscribe via useBossState().
|
|
21
|
+
*/
|
|
22
|
+
export declare class GGBoss {
|
|
23
|
+
private workers;
|
|
24
|
+
private lastSummaries;
|
|
25
|
+
private queue;
|
|
26
|
+
private bossAgent;
|
|
27
|
+
private ac;
|
|
28
|
+
/** Per-turn AbortController so ESC can cancel the current LLM call without killing workers. */
|
|
29
|
+
private turnAc;
|
|
30
|
+
private running;
|
|
31
|
+
private pendingUserMessages;
|
|
32
|
+
private opts;
|
|
33
|
+
private authStorage;
|
|
34
|
+
/** Path to the boss's per-session jsonl log under ~/.gg/boss/sessions/. */
|
|
35
|
+
private sessionPath;
|
|
36
|
+
/** Last index in the boss's messages array we've persisted to disk. */
|
|
37
|
+
private lastPersistedIndex;
|
|
38
|
+
constructor(opts: GGBossOptions);
|
|
39
|
+
initialize(): Promise<void>;
|
|
40
|
+
enqueueUserMessage(text: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Abort the boss's current LLM call (e.g. user pressed ESC). Workers and the
|
|
43
|
+
* orchestrator's run loop keep going. The next event in the queue gets a
|
|
44
|
+
* fresh AbortController.
|
|
45
|
+
*/
|
|
46
|
+
abort(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Swap the boss's LLM model. Preserves message history so the conversation
|
|
49
|
+
* continues seamlessly under the new model.
|
|
50
|
+
*/
|
|
51
|
+
switchBossModel(provider: Provider, model: string): Promise<void>;
|
|
52
|
+
/** Swap every worker's model. Workers keep their per-project sessions. */
|
|
53
|
+
switchWorkerModel(provider: Provider, model: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Run a manual compaction now (driven by /compact). Will compact even if the
|
|
56
|
+
* threshold isn't reached yet — useful for trimming context before a long task.
|
|
57
|
+
*/
|
|
58
|
+
manualCompact(): Promise<void>;
|
|
59
|
+
/** Compact only when threshold (default 80%) is exceeded. */
|
|
60
|
+
private runCompaction;
|
|
61
|
+
/**
|
|
62
|
+
* Append any boss messages that haven't been written yet to the session log.
|
|
63
|
+
* Skips the system message (regenerated each session from current project list).
|
|
64
|
+
*/
|
|
65
|
+
private persistNewMessages;
|
|
66
|
+
/** Recreate bossAgent with a new message history (used by compact + /clear). */
|
|
67
|
+
private replaceBossMessages;
|
|
68
|
+
/**
|
|
69
|
+
* Start a brand-new boss session — fresh agent with no message history,
|
|
70
|
+
* fresh session file on disk so `ggboss continue` picks up the new chat.
|
|
71
|
+
* Workers are unaffected.
|
|
72
|
+
*/
|
|
73
|
+
newSession(): Promise<void>;
|
|
74
|
+
/** Alias kept for the existing /clear path which used "reset" terminology. */
|
|
75
|
+
resetConversation(): Promise<void>;
|
|
76
|
+
run(): Promise<void>;
|
|
77
|
+
dispose(): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAazE,OAAO,KAAK,EAAa,WAAW,EAAqB,MAAM,YAAY,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,QAAQ,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,QAAQ,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,aAAa,CAAC;IACpC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,EAAE,CAAyB;IACnC,+FAA+F;IAC/F,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,WAAW,CAAqB;IACxC,2EAA2E;IAC3E,OAAO,CAAC,WAAW,CAAM;IACzB,uEAAuE;IACvE,OAAO,CAAC,kBAAkB,CAAK;gBAEnB,IAAI,EAAE,aAAa;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+EjC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAUtC;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BvE,0EAA0E;IACpE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzE;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,6DAA6D;YAC/C,aAAa;IAkC3B;;;OAGG;YACW,kBAAkB;IAahC,gFAAgF;YAClE,mBAAmB;IAqBjC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC,8EAA8E;IACxE,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA6FpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAW/B"}
|