@kenkaiiii/gg-boss 4.3.140 → 4.3.142
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-JVQDTPYR.js → chunk-3EWLK53W.js} +18 -9
- package/dist/{chunk-JVQDTPYR.js.map → chunk-3EWLK53W.js.map} +1 -1
- package/dist/{chunk-5WNYQQPQ.js → chunk-QT366Y52.js} +4 -3
- package/dist/{chunk-5WNYQQPQ.js.map → chunk-QT366Y52.js.map} +1 -1
- package/dist/{chunk-PQAHDHVY.js → chunk-WJ4S4TOY.js} +3 -2
- package/dist/{chunk-PQAHDHVY.js.map → chunk-WJ4S4TOY.js.map} +1 -1
- package/dist/{chunk-B2WQ5E5J.js → chunk-YNWFCUMR.js} +2 -1
- package/dist/{chunk-B2WQ5E5J.js.map → chunk-YNWFCUMR.js.map} +1 -1
- package/dist/cli.js +2248 -182
- package/dist/cli.js.map +1 -1
- package/dist/{devtools-VBUDNGEI.js → devtools-4TI4D7F2.js} +3 -2
- package/dist/{devtools-VBUDNGEI.js.map → devtools-4TI4D7F2.js.map} +1 -1
- package/dist/{dist-7DAPKZGX.js → dist-VXOVSHZ5.js} +3 -2
- package/dist/{dist-7DAPKZGX.js.map → dist-VXOVSHZ5.js.map} +1 -1
- package/dist/{ignore-3AEIALHQ.js → ignore-76P4EAAU.js} +3 -2
- package/dist/{ignore-3AEIALHQ.js.map → ignore-76P4EAAU.js.map} +1 -1
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/{out-D65DTPFZ.js → out-XEXARMKS.js} +3 -2
- package/dist/{out-D65DTPFZ.js.map → out-XEXARMKS.js.map} +1 -1
- package/dist/pixel-WPYTQADG.js +14 -0
- package/dist/{pixel-fix-ALWXCLTS.js → pixel-fix-4WGZAJ5W.js} +4 -3
- package/dist/{pixel-fix-ALWXCLTS.js.map → pixel-fix-4WGZAJ5W.js.map} +1 -1
- package/package.json +10 -11
- package/dist/audio.d.ts +0 -21
- package/dist/audio.d.ts.map +0 -1
- package/dist/audio.js +0 -231
- package/dist/audio.js.map +0 -1
- package/dist/audio.test.d.ts +0 -2
- package/dist/audio.test.d.ts.map +0 -1
- package/dist/audio.test.js +0 -13
- package/dist/audio.test.js.map +0 -1
- package/dist/auto-update.d.ts +0 -24
- package/dist/auto-update.d.ts.map +0 -1
- package/dist/auto-update.js +0 -231
- package/dist/auto-update.js.map +0 -1
- package/dist/banner.d.ts +0 -17
- package/dist/banner.d.ts.map +0 -1
- package/dist/banner.js +0 -25
- package/dist/banner.js.map +0 -1
- package/dist/boss-footer.d.ts +0 -25
- package/dist/boss-footer.d.ts.map +0 -1
- package/dist/boss-footer.js +0 -107
- package/dist/boss-footer.js.map +0 -1
- package/dist/boss-phrases.d.ts +0 -9
- package/dist/boss-phrases.d.ts.map +0 -1
- package/dist/boss-phrases.js +0 -71
- package/dist/boss-phrases.js.map +0 -1
- package/dist/boss-store.d.ts +0 -245
- package/dist/boss-store.d.ts.map +0 -1
- package/dist/boss-store.js +0 -623
- package/dist/boss-store.js.map +0 -1
- package/dist/boss-system-prompt.d.ts +0 -3
- package/dist/boss-system-prompt.d.ts.map +0 -1
- package/dist/boss-system-prompt.js +0 -180
- package/dist/boss-system-prompt.js.map +0 -1
- package/dist/boss-tasks-overlay.d.ts +0 -22
- package/dist/boss-tasks-overlay.d.ts.map +0 -1
- package/dist/boss-tasks-overlay.js +0 -157
- package/dist/boss-tasks-overlay.js.map +0 -1
- package/dist/branding.d.ts +0 -32
- package/dist/branding.d.ts.map +0 -1
- package/dist/branding.js +0 -59
- package/dist/branding.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.smoke.test.d.ts +0 -2
- package/dist/cli.smoke.test.d.ts.map +0 -1
- package/dist/cli.smoke.test.js +0 -48
- package/dist/cli.smoke.test.js.map +0 -1
- package/dist/colors.d.ts +0 -14
- package/dist/colors.d.ts.map +0 -1
- package/dist/colors.js +0 -31
- package/dist/colors.js.map +0 -1
- package/dist/discover.d.ts +0 -13
- package/dist/discover.d.ts.map +0 -1
- package/dist/discover.js +0 -92
- package/dist/discover.js.map +0 -1
- package/dist/event-queue.d.ts +0 -16
- package/dist/event-queue.d.ts.map +0 -1
- package/dist/event-queue.js +0 -39
- package/dist/event-queue.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/link-command.d.ts +0 -2
- package/dist/link-command.d.ts.map +0 -1
- package/dist/link-command.js +0 -120
- package/dist/link-command.js.map +0 -1
- package/dist/links.d.ts +0 -11
- package/dist/links.d.ts.map +0 -1
- package/dist/links.js +0 -22
- package/dist/links.js.map +0 -1
- package/dist/logger.d.ts +0 -41
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -112
- package/dist/logger.js.map +0 -1
- package/dist/orchestrator-app.d.ts +0 -15
- package/dist/orchestrator-app.d.ts.map +0 -1
- package/dist/orchestrator-app.js +0 -599
- package/dist/orchestrator-app.js.map +0 -1
- package/dist/orchestrator.d.ts +0 -147
- package/dist/orchestrator.d.ts.map +0 -1
- package/dist/orchestrator.js +0 -707
- package/dist/orchestrator.js.map +0 -1
- package/dist/orchestrator.test.d.ts +0 -2
- package/dist/orchestrator.test.d.ts.map +0 -1
- package/dist/orchestrator.test.js +0 -55
- package/dist/orchestrator.test.js.map +0 -1
- package/dist/pixel-WB6VRJWP.js +0 -13
- package/dist/radio-picker.d.ts +0 -20
- package/dist/radio-picker.d.ts.map +0 -1
- package/dist/radio-picker.js +0 -31
- package/dist/radio-picker.js.map +0 -1
- package/dist/radio.d.ts +0 -43
- package/dist/radio.d.ts.map +0 -1
- package/dist/radio.js +0 -150
- package/dist/radio.js.map +0 -1
- package/dist/sessions.d.ts +0 -21
- package/dist/sessions.d.ts.map +0 -1
- package/dist/sessions.js +0 -122
- package/dist/sessions.js.map +0 -1
- package/dist/settings.d.ts +0 -11
- package/dist/settings.d.ts.map +0 -1
- package/dist/settings.js +0 -38
- package/dist/settings.js.map +0 -1
- package/dist/slash-commands.d.ts +0 -19
- package/dist/slash-commands.d.ts.map +0 -1
- package/dist/slash-commands.js +0 -76
- package/dist/slash-commands.js.map +0 -1
- package/dist/splash.d.ts +0 -21
- package/dist/splash.d.ts.map +0 -1
- package/dist/splash.js +0 -137
- package/dist/splash.js.map +0 -1
- package/dist/task-tools.d.ts +0 -18
- package/dist/task-tools.d.ts.map +0 -1
- package/dist/task-tools.js +0 -172
- package/dist/task-tools.js.map +0 -1
- package/dist/tasks-store.d.ts +0 -66
- package/dist/tasks-store.d.ts.map +0 -1
- package/dist/tasks-store.js +0 -199
- package/dist/tasks-store.js.map +0 -1
- package/dist/tasks-store.test.d.ts +0 -2
- package/dist/tasks-store.test.d.ts.map +0 -1
- package/dist/tasks-store.test.js +0 -138
- package/dist/tasks-store.test.js.map +0 -1
- package/dist/tool-formatters.d.ts +0 -7
- package/dist/tool-formatters.d.ts.map +0 -1
- package/dist/tool-formatters.js +0 -111
- package/dist/tool-formatters.js.map +0 -1
- package/dist/tools.d.ts +0 -26
- package/dist/tools.d.ts.map +0 -1
- package/dist/tools.js +0 -133
- package/dist/tools.js.map +0 -1
- package/dist/types.d.ts +0 -32
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/worker.d.ts +0 -47
- package/dist/worker.d.ts.map +0 -1
- package/dist/worker.js +0 -123
- package/dist/worker.js.map +0 -1
- /package/dist/{pixel-WB6VRJWP.js.map → pixel-WPYTQADG.js.map} +0 -0
package/dist/tools.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
/**
|
|
3
|
-
* Hardcoded framing prepended to every prompt the boss dispatches to a worker.
|
|
4
|
-
*
|
|
5
|
-
* The boss already sees every tool a worker calls (via worker_turn_complete
|
|
6
|
-
* events), so workers don't need to narrate or recap. This brief asks for a
|
|
7
|
-
* tight structured summary instead — keeps `final_text` short and scannable
|
|
8
|
-
* in the boss's context, and saves the boss from having to add this guidance
|
|
9
|
-
* to every prompt itself.
|
|
10
|
-
*
|
|
11
|
-
* Lives here (not in the boss system prompt) because it's a worker-side
|
|
12
|
-
* instruction — only seen by the worker, never by the boss.
|
|
13
|
-
*
|
|
14
|
-
* Exported so the orchestrator can wrap dispatches that bypass prompt_worker
|
|
15
|
-
* (Tasks overlay direct dispatch, dispatch_pending tool) with the same brief.
|
|
16
|
-
*/
|
|
17
|
-
export const WORKER_PROMPT_BRIEF = `You're being driven by gg-boss, an orchestrator. Your tool usage is already visible to it — don't narrate which tools you ran or recap the request.
|
|
18
|
-
|
|
19
|
-
End your response with a tight structured summary. Omit any line that doesn't apply:
|
|
20
|
-
|
|
21
|
-
Changed: <files modified, comma-separated, with the specific change in parentheses where it adds clarity — e.g. "src/auth.ts (added retry guard)">
|
|
22
|
-
Skipped: <anything the prompt asked for that you didn't do, with a one-line reason each>
|
|
23
|
-
Verified: <what you ran or checked to confirm correctness — e.g. "pnpm test (15/15 pass)", "tsc --noEmit clean">
|
|
24
|
-
Notes: <ONE line; only if there's something gg-boss must know that the above doesn't capture>
|
|
25
|
-
Status: <one of: DONE | UNVERIFIED | PARTIAL | BLOCKED | INFO>
|
|
26
|
-
|
|
27
|
-
Status meanings (be honest — gg-boss routes off this):
|
|
28
|
-
- DONE: task complete AND you verified it (tests ran, types check, behaviour confirmed)
|
|
29
|
-
- UNVERIFIED: task complete but you didn't / couldn't validate it
|
|
30
|
-
- PARTIAL: did some of the task; the rest is in Skipped
|
|
31
|
-
- BLOCKED: couldn't make progress, needs gg-boss to unblock or re-prompt
|
|
32
|
-
- INFO: no work was performed — the prompt was a question and you answered it
|
|
33
|
-
|
|
34
|
-
If Status is INFO, answer the question in one or two lines and skip the rest of the summary.
|
|
35
|
-
|
|
36
|
-
No preamble. No apologies. Be factual.
|
|
37
|
-
|
|
38
|
-
Task:
|
|
39
|
-
`;
|
|
40
|
-
const listWorkersParams = z.object({});
|
|
41
|
-
const getWorkerStatusParams = z.object({
|
|
42
|
-
project: z.string().describe("Project name as listed by list_workers."),
|
|
43
|
-
});
|
|
44
|
-
const promptWorkerParams = z.object({
|
|
45
|
-
project: z.string().describe("Project name as listed by list_workers."),
|
|
46
|
-
message: z
|
|
47
|
-
.string()
|
|
48
|
-
.describe("The instruction to send to the worker. Be specific — the worker has full coding tools (read, write, edit, bash, grep, etc.)."),
|
|
49
|
-
fresh: z
|
|
50
|
-
.boolean()
|
|
51
|
-
.optional()
|
|
52
|
-
.describe("Set true when this prompt is a meaningful direction change from whatever this worker was doing — different feature, different area of the codebase, unrelated goal. The worker's prior conversation is wiped and a new session file is started. Default false (worker continues its existing context)."),
|
|
53
|
-
});
|
|
54
|
-
const getWorkerSummaryParams = z.object({
|
|
55
|
-
project: z.string().describe("Project name as listed by list_workers."),
|
|
56
|
-
});
|
|
57
|
-
export function createBossTools(deps) {
|
|
58
|
-
const { workers, lastSummaries } = deps;
|
|
59
|
-
const listWorkers = {
|
|
60
|
-
name: "list_workers",
|
|
61
|
-
description: "List all projects under your control with their cwd and current status.",
|
|
62
|
-
parameters: listWorkersParams,
|
|
63
|
-
execute() {
|
|
64
|
-
if (workers.size === 0)
|
|
65
|
-
return "(no workers registered)";
|
|
66
|
-
const lines = [];
|
|
67
|
-
for (const [name, w] of workers) {
|
|
68
|
-
lines.push(`- ${name} (${w.cwd}) — status: ${w.getStatus()}`);
|
|
69
|
-
}
|
|
70
|
-
return lines.join("\n");
|
|
71
|
-
},
|
|
72
|
-
};
|
|
73
|
-
const getWorkerStatus = {
|
|
74
|
-
name: "get_worker_status",
|
|
75
|
-
description: "Get the current status (idle/working/error) of a single project.",
|
|
76
|
-
parameters: getWorkerStatusParams,
|
|
77
|
-
execute(args) {
|
|
78
|
-
const w = workers.get(args.project);
|
|
79
|
-
if (!w)
|
|
80
|
-
return `Unknown project: ${args.project}`;
|
|
81
|
-
return `${args.project}: ${w.getStatus()}`;
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
const promptWorker = {
|
|
85
|
-
name: "prompt_worker",
|
|
86
|
-
description: "Send a prompt to a worker. Fire-and-forget — returns immediately. You will be notified via a worker_turn_complete event when the worker finishes. Do NOT call this on a worker whose status is 'working'. Use `fresh: true` when the prompt is unrelated to the worker's prior conversation (different feature, different file area) — wipes its context to keep things lean.",
|
|
87
|
-
parameters: promptWorkerParams,
|
|
88
|
-
async execute(args) {
|
|
89
|
-
const w = workers.get(args.project);
|
|
90
|
-
if (!w)
|
|
91
|
-
return `Unknown project: ${args.project}`;
|
|
92
|
-
if (w.getStatus() === "working") {
|
|
93
|
-
return `Worker "${args.project}" is currently working — wait for its completion event before prompting again.`;
|
|
94
|
-
}
|
|
95
|
-
// Reset the worker's session BEFORE sending the prompt when the boss
|
|
96
|
-
// flagged this as a direction change.
|
|
97
|
-
if (args.fresh) {
|
|
98
|
-
await w.newSession();
|
|
99
|
-
}
|
|
100
|
-
// Wrap the boss's intent with the structured-summary brief so workers
|
|
101
|
-
// respond tersely. The boss only ever sees `args.message` — this happens
|
|
102
|
-
// strictly worker-side.
|
|
103
|
-
await w.prompt(WORKER_PROMPT_BRIEF + args.message);
|
|
104
|
-
return args.fresh
|
|
105
|
-
? `Fresh session opened for "${args.project}". Prompt sent. Worker is now running.`
|
|
106
|
-
: `Prompt sent to "${args.project}". Worker is now running.`;
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
const getWorkerSummary = {
|
|
110
|
-
name: "get_worker_summary",
|
|
111
|
-
description: "Fetch the most recent turn summary from a worker — its final text and the list of tools it used. Use this to verify what a worker actually did.",
|
|
112
|
-
parameters: getWorkerSummaryParams,
|
|
113
|
-
execute(args) {
|
|
114
|
-
const summary = lastSummaries.get(args.project);
|
|
115
|
-
if (!summary) {
|
|
116
|
-
return `No summary yet for "${args.project}" — it hasn't completed any turns.`;
|
|
117
|
-
}
|
|
118
|
-
const tools = summary.toolsUsed.length > 0
|
|
119
|
-
? summary.toolsUsed.map((t) => `${t.ok ? "✓" : "✗"}${t.name}`).join(", ")
|
|
120
|
-
: "(no tools used)";
|
|
121
|
-
return `Project: ${summary.project}
|
|
122
|
-
Turn: ${summary.turnIndex}
|
|
123
|
-
Status: ${summary.status}
|
|
124
|
-
Tools used: ${tools}
|
|
125
|
-
Timestamp: ${summary.timestamp}
|
|
126
|
-
|
|
127
|
-
Final text:
|
|
128
|
-
${summary.finalText || "(empty)"}`;
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
return [listWorkers, getWorkerStatus, promptWorker, getWorkerSummary];
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBlC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACvC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;CACxE,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACvE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CACP,8HAA8H,CAC/H;IACH,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wSAAwS,CACzS;CACJ,CAAC,CAAC;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAExC,MAAM,WAAW,GAAwC;QACvD,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,yEAAyE;QACtF,UAAU,EAAE,iBAAiB;QAC7B,OAAO;YACL,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO,yBAAyB,CAAC;YACzD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;IAEF,MAAM,eAAe,GAA4C;QAC/D,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,kEAAkE;QAC/E,UAAU,EAAE,qBAAqB;QACjC,OAAO,CAAC,IAAI;YACV,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC;gBAAE,OAAO,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC;YAClD,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;QAC7C,CAAC;KACF,CAAC;IAEF,MAAM,YAAY,GAAyC;QACzD,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,+WAA+W;QACjX,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC;gBAAE,OAAO,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC;YAClD,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,WAAW,IAAI,CAAC,OAAO,gFAAgF,CAAC;YACjH,CAAC;YACD,qEAAqE;YACrE,sCAAsC;YACtC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;YACvB,CAAC;YACD,sEAAsE;YACtE,yEAAyE;YACzE,wBAAwB;YACxB,MAAM,CAAC,CAAC,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,KAAK;gBACf,CAAC,CAAC,6BAA6B,IAAI,CAAC,OAAO,wCAAwC;gBACnF,CAAC,CAAC,mBAAmB,IAAI,CAAC,OAAO,2BAA2B,CAAC;QACjE,CAAC;KACF,CAAC;IAEF,MAAM,gBAAgB,GAA6C;QACjE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,iJAAiJ;QACnJ,UAAU,EAAE,sBAAsB;QAClC,OAAO,CAAC,IAAI;YACV,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,uBAAuB,IAAI,CAAC,OAAO,oCAAoC,CAAC;YACjF,CAAC;YACD,MAAM,KAAK,GACT,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBAC1B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzE,CAAC,CAAC,iBAAiB,CAAC;YACxB,OAAO,YAAY,OAAO,CAAC,OAAO;QAChC,OAAO,CAAC,SAAS;UACf,OAAO,CAAC,MAAM;cACV,KAAK;aACN,OAAO,CAAC,SAAS;;;EAG5B,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;QAC/B,CAAC;KACF,CAAC;IAEF,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;AACxE,CAAC"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export type WorkerStatus = "idle" | "working" | "error";
|
|
2
|
-
export interface ProjectSpec {
|
|
3
|
-
name: string;
|
|
4
|
-
cwd: string;
|
|
5
|
-
}
|
|
6
|
-
export interface ToolUseSummary {
|
|
7
|
-
name: string;
|
|
8
|
-
ok: boolean;
|
|
9
|
-
}
|
|
10
|
-
export interface WorkerTurnSummary {
|
|
11
|
-
project: string;
|
|
12
|
-
cwd: string;
|
|
13
|
-
status: WorkerStatus;
|
|
14
|
-
finalText: string;
|
|
15
|
-
toolsUsed: ToolUseSummary[];
|
|
16
|
-
turnIndex: number;
|
|
17
|
-
timestamp: string;
|
|
18
|
-
}
|
|
19
|
-
export type BossEvent = {
|
|
20
|
-
kind: "user_message";
|
|
21
|
-
text: string;
|
|
22
|
-
timestamp: string;
|
|
23
|
-
} | {
|
|
24
|
-
kind: "worker_turn_complete";
|
|
25
|
-
summary: WorkerTurnSummary;
|
|
26
|
-
} | {
|
|
27
|
-
kind: "worker_error";
|
|
28
|
-
project: string;
|
|
29
|
-
message: string;
|
|
30
|
-
timestamp: string;
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/worker.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { Provider, ThinkingLevel } from "@kenkaiiii/gg-ai";
|
|
2
|
-
import type { EventQueue } from "./event-queue.js";
|
|
3
|
-
import type { WorkerStatus } from "./types.js";
|
|
4
|
-
export interface WorkerOptions {
|
|
5
|
-
name: string;
|
|
6
|
-
cwd: string;
|
|
7
|
-
provider: Provider;
|
|
8
|
-
model: string;
|
|
9
|
-
thinkingLevel?: ThinkingLevel;
|
|
10
|
-
signal: AbortSignal;
|
|
11
|
-
queue: EventQueue;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* One worker per project. Wraps an AgentSession and translates its event
|
|
15
|
-
* stream into BossEvents pushed onto the shared queue.
|
|
16
|
-
*
|
|
17
|
-
* - prompt() is fire-and-forget: returns immediately, completion arrives later
|
|
18
|
-
* on the queue as a worker_turn_complete event.
|
|
19
|
-
* - The worker buffers text + tool calls during a turn and emits a single
|
|
20
|
-
* summary on agent_done.
|
|
21
|
-
*/
|
|
22
|
-
export declare class Worker {
|
|
23
|
-
readonly name: string;
|
|
24
|
-
readonly cwd: string;
|
|
25
|
-
private session;
|
|
26
|
-
private queue;
|
|
27
|
-
private status;
|
|
28
|
-
private turnCount;
|
|
29
|
-
private currentText;
|
|
30
|
-
private currentTools;
|
|
31
|
-
private activeTools;
|
|
32
|
-
constructor(opts: WorkerOptions);
|
|
33
|
-
initialize(): Promise<void>;
|
|
34
|
-
getStatus(): WorkerStatus;
|
|
35
|
-
prompt(text: string): Promise<void>;
|
|
36
|
-
dispose(): Promise<void>;
|
|
37
|
-
switchModel(provider: Provider, model: string): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Wipe this worker's conversation history and start a new session file.
|
|
40
|
-
* Used by `prompt_worker(..., fresh: true)` when the boss declares the
|
|
41
|
-
* incoming task is a meaningful direction change — keeps the worker's
|
|
42
|
-
* context lean instead of dragging stale exploration along forever.
|
|
43
|
-
*/
|
|
44
|
-
newSession(): Promise<void>;
|
|
45
|
-
private wireEvents;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=worker.d.ts.map
|
package/dist/worker.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAkB,YAAY,EAAqB,MAAM,YAAY,CAAC;AAGlF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,qBAAa,MAAM;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,WAAW,CAA6B;gBAEpC,IAAI,EAAE,aAAa;IAazB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,SAAS,IAAI,YAAY;IAInB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,OAAO,CAAC,UAAU;CA+CnB"}
|
package/dist/worker.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { AgentSession } from "@kenkaiiii/ggcoder";
|
|
2
|
-
import { bossStore } from "./boss-store.js";
|
|
3
|
-
/**
|
|
4
|
-
* One worker per project. Wraps an AgentSession and translates its event
|
|
5
|
-
* stream into BossEvents pushed onto the shared queue.
|
|
6
|
-
*
|
|
7
|
-
* - prompt() is fire-and-forget: returns immediately, completion arrives later
|
|
8
|
-
* on the queue as a worker_turn_complete event.
|
|
9
|
-
* - The worker buffers text + tool calls during a turn and emits a single
|
|
10
|
-
* summary on agent_done.
|
|
11
|
-
*/
|
|
12
|
-
export class Worker {
|
|
13
|
-
name;
|
|
14
|
-
cwd;
|
|
15
|
-
session;
|
|
16
|
-
queue;
|
|
17
|
-
status = "idle";
|
|
18
|
-
turnCount = 0;
|
|
19
|
-
currentText = "";
|
|
20
|
-
currentTools = [];
|
|
21
|
-
activeTools = new Map();
|
|
22
|
-
constructor(opts) {
|
|
23
|
-
this.name = opts.name;
|
|
24
|
-
this.cwd = opts.cwd;
|
|
25
|
-
this.queue = opts.queue;
|
|
26
|
-
this.session = new AgentSession({
|
|
27
|
-
provider: opts.provider,
|
|
28
|
-
model: opts.model,
|
|
29
|
-
cwd: opts.cwd,
|
|
30
|
-
thinkingLevel: opts.thinkingLevel,
|
|
31
|
-
signal: opts.signal,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
async initialize() {
|
|
35
|
-
await this.session.initialize();
|
|
36
|
-
this.wireEvents();
|
|
37
|
-
}
|
|
38
|
-
getStatus() {
|
|
39
|
-
return this.status;
|
|
40
|
-
}
|
|
41
|
-
async prompt(text) {
|
|
42
|
-
if (this.status === "working") {
|
|
43
|
-
throw new Error(`Worker "${this.name}" is already working`);
|
|
44
|
-
}
|
|
45
|
-
this.status = "working";
|
|
46
|
-
bossStore.setWorkerStatus(this.name, "working");
|
|
47
|
-
this.currentText = "";
|
|
48
|
-
this.currentTools = [];
|
|
49
|
-
// Fire-and-forget. Errors surface via the eventBus error handler below.
|
|
50
|
-
void this.session.prompt(text).catch((err) => {
|
|
51
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
52
|
-
this.status = "error";
|
|
53
|
-
const ts = new Date().toISOString();
|
|
54
|
-
bossStore.appendWorkerError(this.name, message, ts);
|
|
55
|
-
this.queue.push({
|
|
56
|
-
kind: "worker_error",
|
|
57
|
-
project: this.name,
|
|
58
|
-
message,
|
|
59
|
-
timestamp: ts,
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
async dispose() {
|
|
64
|
-
await this.session.dispose();
|
|
65
|
-
}
|
|
66
|
-
async switchModel(provider, model) {
|
|
67
|
-
await this.session.switchModel(provider, model);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Wipe this worker's conversation history and start a new session file.
|
|
71
|
-
* Used by `prompt_worker(..., fresh: true)` when the boss declares the
|
|
72
|
-
* incoming task is a meaningful direction change — keeps the worker's
|
|
73
|
-
* context lean instead of dragging stale exploration along forever.
|
|
74
|
-
*/
|
|
75
|
-
async newSession() {
|
|
76
|
-
await this.session.newSession();
|
|
77
|
-
this.turnCount = 0;
|
|
78
|
-
}
|
|
79
|
-
wireEvents() {
|
|
80
|
-
const bus = this.session.eventBus;
|
|
81
|
-
bus.on("text_delta", ({ text }) => {
|
|
82
|
-
this.currentText += text;
|
|
83
|
-
});
|
|
84
|
-
bus.on("tool_call_start", ({ toolCallId, name }) => {
|
|
85
|
-
this.activeTools.set(toolCallId, name);
|
|
86
|
-
});
|
|
87
|
-
bus.on("tool_call_end", ({ toolCallId, isError }) => {
|
|
88
|
-
const name = this.activeTools.get(toolCallId);
|
|
89
|
-
this.activeTools.delete(toolCallId);
|
|
90
|
-
if (name)
|
|
91
|
-
this.currentTools.push({ name, ok: !isError });
|
|
92
|
-
});
|
|
93
|
-
bus.on("agent_done", () => {
|
|
94
|
-
this.turnCount += 1;
|
|
95
|
-
const summary = {
|
|
96
|
-
project: this.name,
|
|
97
|
-
cwd: this.cwd,
|
|
98
|
-
status: "idle",
|
|
99
|
-
finalText: this.currentText.trim(),
|
|
100
|
-
toolsUsed: [...this.currentTools],
|
|
101
|
-
turnIndex: this.turnCount,
|
|
102
|
-
timestamp: new Date().toISOString(),
|
|
103
|
-
};
|
|
104
|
-
this.currentText = "";
|
|
105
|
-
this.currentTools = [];
|
|
106
|
-
this.status = "idle";
|
|
107
|
-
bossStore.appendWorkerEvent(summary);
|
|
108
|
-
this.queue.push({ kind: "worker_turn_complete", summary });
|
|
109
|
-
});
|
|
110
|
-
bus.on("error", ({ error }) => {
|
|
111
|
-
this.status = "error";
|
|
112
|
-
const ts = new Date().toISOString();
|
|
113
|
-
bossStore.appendWorkerError(this.name, error.message, ts);
|
|
114
|
-
this.queue.push({
|
|
115
|
-
kind: "worker_error",
|
|
116
|
-
project: this.name,
|
|
117
|
-
message: error.message,
|
|
118
|
-
timestamp: ts,
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=worker.js.map
|
package/dist/worker.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|