@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.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/dist/banner.d.ts +11 -0
  3. package/dist/banner.d.ts.map +1 -0
  4. package/dist/banner.js +25 -0
  5. package/dist/banner.js.map +1 -0
  6. package/dist/boot-banner.d.ts +15 -0
  7. package/dist/boot-banner.d.ts.map +1 -0
  8. package/dist/boot-banner.js +61 -0
  9. package/dist/boot-banner.js.map +1 -0
  10. package/dist/boss-footer.d.ts +16 -0
  11. package/dist/boss-footer.d.ts.map +1 -0
  12. package/dist/boss-footer.js +60 -0
  13. package/dist/boss-footer.js.map +1 -0
  14. package/dist/boss-store.d.ts +202 -0
  15. package/dist/boss-store.d.ts.map +1 -0
  16. package/dist/boss-store.js +560 -0
  17. package/dist/boss-store.js.map +1 -0
  18. package/dist/boss-system-prompt.d.ts +3 -0
  19. package/dist/boss-system-prompt.d.ts.map +1 -0
  20. package/dist/boss-system-prompt.js +52 -0
  21. package/dist/boss-system-prompt.js.map +1 -0
  22. package/dist/branding.d.ts +18 -0
  23. package/dist/branding.d.ts.map +1 -0
  24. package/dist/branding.js +33 -0
  25. package/dist/branding.js.map +1 -0
  26. package/dist/cli.d.ts +3 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +163 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/discover.d.ts +13 -0
  31. package/dist/discover.d.ts.map +1 -0
  32. package/dist/discover.js +92 -0
  33. package/dist/discover.js.map +1 -0
  34. package/dist/event-queue.d.ts +16 -0
  35. package/dist/event-queue.d.ts.map +1 -0
  36. package/dist/event-queue.js +39 -0
  37. package/dist/event-queue.js.map +1 -0
  38. package/dist/index.d.ts +6 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +5 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/link-command.d.ts +2 -0
  43. package/dist/link-command.d.ts.map +1 -0
  44. package/dist/link-command.js +120 -0
  45. package/dist/link-command.js.map +1 -0
  46. package/dist/links.d.ts +11 -0
  47. package/dist/links.d.ts.map +1 -0
  48. package/dist/links.js +22 -0
  49. package/dist/links.js.map +1 -0
  50. package/dist/orchestrator-app.d.ts +15 -0
  51. package/dist/orchestrator-app.d.ts.map +1 -0
  52. package/dist/orchestrator-app.js +248 -0
  53. package/dist/orchestrator-app.js.map +1 -0
  54. package/dist/orchestrator.d.ts +79 -0
  55. package/dist/orchestrator.d.ts.map +1 -0
  56. package/dist/orchestrator.js +405 -0
  57. package/dist/orchestrator.js.map +1 -0
  58. package/dist/sessions.d.ts +21 -0
  59. package/dist/sessions.d.ts.map +1 -0
  60. package/dist/sessions.js +122 -0
  61. package/dist/sessions.js.map +1 -0
  62. package/dist/slash-commands.d.ts +19 -0
  63. package/dist/slash-commands.d.ts.map +1 -0
  64. package/dist/slash-commands.js +54 -0
  65. package/dist/slash-commands.js.map +1 -0
  66. package/dist/tools.d.ts +10 -0
  67. package/dist/tools.d.ts.map +1 -0
  68. package/dist/tools.js +81 -0
  69. package/dist/tools.js.map +1 -0
  70. package/dist/types.d.ts +32 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +2 -0
  73. package/dist/types.js.map +1 -0
  74. package/dist/worker.d.ts +40 -0
  75. package/dist/worker.d.ts.map +1 -0
  76. package/dist/worker.js +113 -0
  77. package/dist/worker.js.map +1 -0
  78. package/package.json +47 -0
@@ -0,0 +1,560 @@
1
+ import { useSyncExternalStore } from "react";
2
+ let nextId = 1;
3
+ const id = () => `i${nextId++}`;
4
+ function isText(p) {
5
+ return p.type === "text";
6
+ }
7
+ function isToolCall(p) {
8
+ return p.type === "tool_call";
9
+ }
10
+ function userMessageText(content) {
11
+ if (typeof content === "string")
12
+ return content;
13
+ return content
14
+ .filter((c) => c.type === "text")
15
+ .map((c) => c.text)
16
+ .join("");
17
+ }
18
+ function toolResultText(content) {
19
+ if (typeof content === "string")
20
+ return content;
21
+ return content
22
+ .filter((c) => c.type === "text")
23
+ .map((c) => c.text)
24
+ .join("");
25
+ }
26
+ const initialState = {
27
+ bossProvider: "anthropic",
28
+ bossModel: "",
29
+ workerProvider: "anthropic",
30
+ workerModel: "",
31
+ loggedInProviders: [],
32
+ history: [],
33
+ pendingFlush: [],
34
+ flushGeneration: 0,
35
+ streaming: null,
36
+ phase: "idle",
37
+ activityPhase: "idle",
38
+ retryInfo: null,
39
+ compaction: null,
40
+ bossInputTokens: 0,
41
+ runStartMs: null,
42
+ workers: [],
43
+ pendingUserMessages: 0,
44
+ exitPending: false,
45
+ scope: "all",
46
+ };
47
+ let state = initialState;
48
+ const listeners = new Set();
49
+ function notify() {
50
+ for (const fn of listeners)
51
+ fn();
52
+ }
53
+ function subscribe(fn) {
54
+ listeners.add(fn);
55
+ return () => {
56
+ listeners.delete(fn);
57
+ };
58
+ }
59
+ function getSnapshot() {
60
+ return state;
61
+ }
62
+ export function useBossState() {
63
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
64
+ }
65
+ // ── Mutations (called by orchestrator/worker) ──────────────
66
+ export const bossStore = {
67
+ init(opts) {
68
+ state = {
69
+ ...initialState,
70
+ bossProvider: opts.bossProvider,
71
+ bossModel: opts.bossModel,
72
+ workerProvider: opts.workerProvider,
73
+ workerModel: opts.workerModel,
74
+ loggedInProviders: opts.loggedInProviders,
75
+ workers: opts.workers.map((w) => ({ name: w.name, cwd: w.cwd, status: "idle" })),
76
+ };
77
+ notify();
78
+ },
79
+ setBossModel(provider, model) {
80
+ state = { ...state, bossProvider: provider, bossModel: model };
81
+ notify();
82
+ },
83
+ setWorkerModel(provider, model) {
84
+ state = { ...state, workerProvider: provider, workerModel: model };
85
+ notify();
86
+ },
87
+ setLoggedInProviders(providers) {
88
+ state = { ...state, loggedInProviders: providers };
89
+ notify();
90
+ },
91
+ appendUser(text) {
92
+ state = {
93
+ ...state,
94
+ history: [...state.history, { kind: "user", id: id(), text, timestamp: Date.now() }],
95
+ };
96
+ notify();
97
+ },
98
+ appendInfo(text, level = "info") {
99
+ state = {
100
+ ...state,
101
+ history: [...state.history, { kind: "info", id: id(), text, level }],
102
+ };
103
+ notify();
104
+ },
105
+ setPendingMessages(n) {
106
+ if (state.pendingUserMessages === n)
107
+ return;
108
+ state = { ...state, pendingUserMessages: n };
109
+ notify();
110
+ },
111
+ startStreaming() {
112
+ state = {
113
+ ...state,
114
+ phase: "working",
115
+ activityPhase: "waiting",
116
+ retryInfo: null,
117
+ runStartMs: Date.now(),
118
+ streaming: {
119
+ text: "",
120
+ thinking: "",
121
+ thinkingMs: 0,
122
+ tools: [],
123
+ startedAt: Date.now(),
124
+ thinkingStartedAt: null,
125
+ },
126
+ };
127
+ notify();
128
+ },
129
+ appendStreamText(text) {
130
+ if (!state.streaming)
131
+ return;
132
+ // If we were thinking, stop the thinking timer and bank elapsed.
133
+ const thinking = state.streaming.thinking;
134
+ let thinkingMs = state.streaming.thinkingMs;
135
+ let thinkingStartedAt = state.streaming.thinkingStartedAt;
136
+ if (thinkingStartedAt != null) {
137
+ thinkingMs += Date.now() - thinkingStartedAt;
138
+ thinkingStartedAt = null;
139
+ }
140
+ state = {
141
+ ...state,
142
+ activityPhase: "generating",
143
+ streaming: {
144
+ ...state.streaming,
145
+ text: state.streaming.text + text,
146
+ thinking,
147
+ thinkingMs,
148
+ thinkingStartedAt,
149
+ },
150
+ };
151
+ notify();
152
+ },
153
+ appendStreamThinking(text) {
154
+ if (!state.streaming)
155
+ return;
156
+ const startedAt = state.streaming.thinkingStartedAt ?? Date.now();
157
+ state = {
158
+ ...state,
159
+ activityPhase: "thinking",
160
+ streaming: {
161
+ ...state.streaming,
162
+ thinking: state.streaming.thinking + text,
163
+ thinkingStartedAt: startedAt,
164
+ },
165
+ };
166
+ notify();
167
+ },
168
+ setActivityPhase(phase) {
169
+ if (state.activityPhase === phase)
170
+ return;
171
+ state = { ...state, activityPhase: phase };
172
+ notify();
173
+ },
174
+ setRetryInfo(info) {
175
+ state = {
176
+ ...state,
177
+ retryInfo: info,
178
+ activityPhase: info ? "retrying" : state.activityPhase,
179
+ };
180
+ notify();
181
+ },
182
+ startCompaction() {
183
+ state = {
184
+ ...state,
185
+ compaction: {
186
+ state: "running",
187
+ originalCount: 0,
188
+ newCount: 0,
189
+ tokensBefore: state.bossInputTokens,
190
+ tokensAfter: 0,
191
+ },
192
+ };
193
+ notify();
194
+ },
195
+ endCompaction(originalCount, newCount) {
196
+ const before = state.compaction?.tokensBefore ?? state.bossInputTokens;
197
+ state = {
198
+ ...state,
199
+ compaction: {
200
+ state: "done",
201
+ originalCount,
202
+ newCount,
203
+ tokensBefore: before,
204
+ tokensAfter: state.bossInputTokens,
205
+ },
206
+ };
207
+ notify();
208
+ },
209
+ cancelCompaction() {
210
+ state = { ...state, compaction: null };
211
+ notify();
212
+ },
213
+ /** Read-only accessor for the orchestrator (which lives outside React). */
214
+ getInputTokens() {
215
+ return state.bossInputTokens;
216
+ },
217
+ setBossInputTokens(tokens) {
218
+ if (state.bossInputTokens === tokens)
219
+ return;
220
+ state = { ...state, bossInputTokens: tokens };
221
+ notify();
222
+ },
223
+ startTool(toolCallId, name, args) {
224
+ if (!state.streaming)
225
+ return;
226
+ const tool = {
227
+ toolCallId,
228
+ name,
229
+ args,
230
+ status: "running",
231
+ startedAt: Date.now(),
232
+ };
233
+ state = {
234
+ ...state,
235
+ streaming: { ...state.streaming, tools: [...state.streaming.tools, tool] },
236
+ };
237
+ notify();
238
+ },
239
+ endTool(toolCallId, isError, durationMs, result, details) {
240
+ if (!state.streaming)
241
+ return;
242
+ const tool = state.streaming.tools.find((t) => t.toolCallId === toolCallId);
243
+ const remaining = state.streaming.tools.filter((t) => t.toolCallId !== toolCallId);
244
+ if (!tool) {
245
+ notify();
246
+ return;
247
+ }
248
+ const historyItem = {
249
+ kind: "tool",
250
+ id: id(),
251
+ toolCallId: tool.toolCallId,
252
+ name: tool.name,
253
+ args: tool.args,
254
+ isError,
255
+ durationMs,
256
+ result,
257
+ details,
258
+ };
259
+ // Phase 1: shrink the live area (remove from streaming.tools), queue the
260
+ // committed tool for Static. Phase 2 happens in BossApp's useEffect.
261
+ state = {
262
+ ...state,
263
+ streaming: { ...state.streaming, tools: remaining },
264
+ pendingFlush: [...state.pendingFlush, historyItem],
265
+ flushGeneration: state.flushGeneration + 1,
266
+ };
267
+ notify();
268
+ },
269
+ /**
270
+ * Flush any pending streaming text into the pendingFlush queue. The actual
271
+ * commit to history happens on the next render cycle (two-phase flush) so
272
+ * Ink doesn't clip long responses.
273
+ * Called on tool_call_start and turn_end so text/tool order is preserved.
274
+ */
275
+ flushPendingText() {
276
+ if (!state.streaming)
277
+ return;
278
+ const text = state.streaming.text.trim();
279
+ if (!text)
280
+ return;
281
+ const thinking = state.streaming.thinking.trim();
282
+ const item = {
283
+ kind: "assistant",
284
+ id: id(),
285
+ text,
286
+ durationMs: Date.now() - state.streaming.startedAt,
287
+ thinking: thinking ? thinking : undefined,
288
+ thinkingMs: thinking ? state.streaming.thinkingMs : undefined,
289
+ };
290
+ state = {
291
+ ...state,
292
+ streaming: {
293
+ ...state.streaming,
294
+ text: "",
295
+ thinking: "",
296
+ thinkingMs: 0,
297
+ thinkingStartedAt: null,
298
+ startedAt: Date.now(),
299
+ },
300
+ pendingFlush: [...state.pendingFlush, item],
301
+ flushGeneration: state.flushGeneration + 1,
302
+ };
303
+ notify();
304
+ },
305
+ /**
306
+ * Phase 2 of the two-phase flush. Move queued items into history. Called by
307
+ * a useEffect in BossApp when flushGeneration changes — guaranteed to run
308
+ * AFTER React has painted the live-area shrinkage from phase 1.
309
+ */
310
+ commitPendingFlush() {
311
+ if (state.pendingFlush.length === 0)
312
+ return;
313
+ state = {
314
+ ...state,
315
+ history: [...state.history, ...state.pendingFlush],
316
+ pendingFlush: [],
317
+ };
318
+ notify();
319
+ },
320
+ /**
321
+ * Called when the user interrupts (ESC / Ctrl+C while running). Stops all
322
+ * in-flight running tools, queueing them in pendingFlush as errored "Stopped."
323
+ * entries — matches ggcoder's onAborted behavior so the user sees the same
324
+ * visual feedback for an aborted run.
325
+ */
326
+ interruptStreaming() {
327
+ if (!state.streaming)
328
+ return;
329
+ const stoppedItems = [];
330
+ const remainingTools = [];
331
+ for (const t of state.streaming.tools) {
332
+ if (t.status === "running") {
333
+ stoppedItems.push({
334
+ kind: "tool",
335
+ id: id(),
336
+ toolCallId: t.toolCallId,
337
+ name: t.name,
338
+ args: t.args,
339
+ isError: true,
340
+ durationMs: 0,
341
+ result: "Stopped.",
342
+ });
343
+ }
344
+ else {
345
+ remainingTools.push(t);
346
+ }
347
+ }
348
+ if (stoppedItems.length === 0)
349
+ return;
350
+ state = {
351
+ ...state,
352
+ streaming: { ...state.streaming, tools: remainingTools },
353
+ pendingFlush: [...state.pendingFlush, ...stoppedItems],
354
+ flushGeneration: state.flushGeneration + 1,
355
+ };
356
+ notify();
357
+ },
358
+ /**
359
+ * Tear down the streaming session. By this point, tool_call_end and turn_end
360
+ * handlers have already flushed text + tools into pendingFlush in proper order.
361
+ * Anything left is a final text tail (no tool followed it) — also goes through
362
+ * the two-phase queue so it doesn't clip.
363
+ */
364
+ finishStreaming() {
365
+ if (!state.streaming) {
366
+ state = { ...state, phase: "idle" };
367
+ notify();
368
+ return;
369
+ }
370
+ const items = [];
371
+ const tail = state.streaming.text.trim();
372
+ if (tail) {
373
+ const thinking = state.streaming.thinking.trim();
374
+ items.push({
375
+ kind: "assistant",
376
+ id: id(),
377
+ text: tail,
378
+ durationMs: Date.now() - state.streaming.startedAt,
379
+ thinking: thinking ? thinking : undefined,
380
+ thinkingMs: thinking ? state.streaming.thinkingMs : undefined,
381
+ });
382
+ }
383
+ // Defensive: any running tools without a tool_call_end (shouldn't happen).
384
+ for (const t of state.streaming.tools) {
385
+ items.push({
386
+ kind: "tool",
387
+ id: id(),
388
+ toolCallId: t.toolCallId,
389
+ name: t.name,
390
+ args: t.args,
391
+ isError: t.status === "error",
392
+ durationMs: t.durationMs ?? 0,
393
+ result: t.result ?? "",
394
+ details: t.details,
395
+ });
396
+ }
397
+ state = {
398
+ ...state,
399
+ streaming: null,
400
+ phase: "idle",
401
+ activityPhase: "idle",
402
+ retryInfo: null,
403
+ runStartMs: null,
404
+ pendingFlush: items.length > 0 ? [...state.pendingFlush, ...items] : state.pendingFlush,
405
+ flushGeneration: items.length > 0 ? state.flushGeneration + 1 : state.flushGeneration,
406
+ };
407
+ notify();
408
+ },
409
+ setWorkerStatus(name, status) {
410
+ state = {
411
+ ...state,
412
+ workers: state.workers.map((w) => (w.name === name ? { ...w, status } : w)),
413
+ };
414
+ notify();
415
+ },
416
+ appendWorkerEvent(summary) {
417
+ state = {
418
+ ...state,
419
+ history: [
420
+ ...state.history,
421
+ {
422
+ kind: "worker_event",
423
+ id: id(),
424
+ project: summary.project,
425
+ status: summary.status,
426
+ finalText: summary.finalText,
427
+ toolsUsed: summary.toolsUsed,
428
+ turnIndex: summary.turnIndex,
429
+ timestamp: summary.timestamp,
430
+ },
431
+ ],
432
+ workers: state.workers.map((w) => w.name === summary.project ? { ...w, status: summary.status, lastSummary: summary } : w),
433
+ };
434
+ notify();
435
+ },
436
+ appendWorkerError(project, message, timestamp) {
437
+ state = {
438
+ ...state,
439
+ history: [...state.history, { kind: "worker_error", id: id(), project, message, timestamp }],
440
+ workers: state.workers.map((w) => (w.name === project ? { ...w, status: "error" } : w)),
441
+ };
442
+ notify();
443
+ },
444
+ setScope(scope) {
445
+ if (state.scope === scope)
446
+ return;
447
+ state = { ...state, scope };
448
+ notify();
449
+ },
450
+ /** Cycle scope through ["all", ...worker names]. Wraps around. */
451
+ cycleScope() {
452
+ const names = ["all", ...state.workers.map((w) => w.name)];
453
+ if (names.length === 0)
454
+ return;
455
+ const idx = names.indexOf(state.scope);
456
+ const next = names[(idx + 1) % names.length] ?? "all";
457
+ state = { ...state, scope: next };
458
+ notify();
459
+ },
460
+ setExitPending(pending) {
461
+ if (state.exitPending === pending)
462
+ return;
463
+ state = { ...state, exitPending: pending };
464
+ notify();
465
+ },
466
+ reset() {
467
+ state = initialState;
468
+ notify();
469
+ },
470
+ /**
471
+ * Rebuild the visible chat history from a persisted Message[] (boss session
472
+ * resume). Pairs assistant tool_use blocks with their tool_result blocks
473
+ * so completed tools render in scrollback as if they'd just happened.
474
+ */
475
+ restoreHistory(messages) {
476
+ const toolResults = new Map();
477
+ for (const m of messages) {
478
+ if (m.role === "tool") {
479
+ for (const tr of m.content)
480
+ toolResults.set(tr.toolCallId, tr);
481
+ }
482
+ }
483
+ const items = [];
484
+ for (const m of messages) {
485
+ if (m.role === "user") {
486
+ const text = userMessageText(m.content);
487
+ if (!text)
488
+ continue;
489
+ // Strip the scope prefix the user never typed — only the boss sees it.
490
+ const cleaned = text.replace(/^\[scope:[^\]]+\]\s*/, "");
491
+ items.push({ kind: "user", id: id(), text: cleaned, timestamp: Date.now() });
492
+ }
493
+ else if (m.role === "assistant") {
494
+ const parts = Array.isArray(m.content)
495
+ ? m.content
496
+ : [{ type: "text", text: m.content }];
497
+ let textBuf = "";
498
+ for (const p of parts) {
499
+ if (isText(p)) {
500
+ textBuf += p.text;
501
+ }
502
+ else if (isToolCall(p)) {
503
+ // Flush any preceding text as a single assistant block first.
504
+ if (textBuf.trim()) {
505
+ items.push({
506
+ kind: "assistant",
507
+ id: id(),
508
+ text: textBuf.trim(),
509
+ durationMs: 0,
510
+ });
511
+ textBuf = "";
512
+ }
513
+ const result = toolResults.get(p.id);
514
+ const resultText = result ? toolResultText(result.content) : "";
515
+ items.push({
516
+ kind: "tool",
517
+ id: id(),
518
+ toolCallId: p.id,
519
+ name: p.name,
520
+ args: p.args,
521
+ isError: result?.isError ?? false,
522
+ durationMs: 0,
523
+ result: resultText,
524
+ });
525
+ }
526
+ // thinking / image / server_tool / raw — skipped for restore.
527
+ }
528
+ if (textBuf.trim()) {
529
+ items.push({
530
+ kind: "assistant",
531
+ id: id(),
532
+ text: textBuf.trim(),
533
+ durationMs: 0,
534
+ });
535
+ }
536
+ }
537
+ // tool messages handled via the toolResults map above; skip.
538
+ }
539
+ state = { ...state, history: [...state.history, ...items] };
540
+ notify();
541
+ },
542
+ /** /clear handler: wipe history but keep workers, model info, etc. */
543
+ clearHistory() {
544
+ state = {
545
+ ...state,
546
+ history: [],
547
+ pendingFlush: [],
548
+ flushGeneration: state.flushGeneration + 1,
549
+ streaming: null,
550
+ phase: "idle",
551
+ activityPhase: "idle",
552
+ retryInfo: null,
553
+ compaction: null,
554
+ bossInputTokens: 0,
555
+ runStartMs: null,
556
+ };
557
+ notify();
558
+ },
559
+ };
560
+ //# sourceMappingURL=boss-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss-store.js","sourceRoot":"","sources":["../src/boss-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectSpec } from "./types.js";
2
+ export declare function buildBossSystemPrompt(projects: ProjectSpec[]): string;
3
+ //# sourceMappingURL=boss-system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss-system-prompt.d.ts","sourceRoot":"","sources":["../src/boss-system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAmDrE"}
@@ -0,0 +1,52 @@
1
+ export function buildBossSystemPrompt(projects) {
2
+ const projectList = projects.map((p) => `- "${p.name}" → ${p.cwd}`).join("\n");
3
+ return `You are gg-boss, an orchestrator that drives multiple ggcoder workers — one per project. The user talks only to you. You decide what to ask each worker to do, monitor their progress, verify their work, and report back to the user.
4
+
5
+ # Projects under your control
6
+
7
+ ${projectList}
8
+
9
+ # Scope prefixes on user messages
10
+
11
+ Every user message you receive is prefixed with a scope tag the user picks via a Tab-cycled pill in the input box:
12
+
13
+ - \`[scope:all] ...\` — the user wants you to consider every project. Dispatch wherever it makes sense; multiple projects in one turn is fine when work is independent.
14
+ - \`[scope:<project>] ...\` — focus this prompt on that project ONLY. Do not prompt other workers, do not bring other projects into scope, even if it would seem helpful. The user is deliberately narrowing focus.
15
+
16
+ The prefix is metadata, not part of the user's actual instruction. Strip it from your reasoning when relaying to a worker — workers shouldn't see "[scope:foo]" in their prompts.
17
+
18
+ # How events arrive
19
+
20
+ Each user-role message you receive is one of three kinds:
21
+
22
+ 1. A direct user message — respond to the user.
23
+ 2. A "[event:worker_turn_complete]" message — a worker just finished a turn. The message contains the worker's project name, turn number, the tools it used (with ✓/✗), and its final text response.
24
+ 3. A "[event:worker_error]" message — a worker hit an error. Diagnose and either retry or surface to the user.
25
+
26
+ # Your tools
27
+
28
+ - list_workers() — see all projects, their cwds, and current statuses (idle/working/error).
29
+ - get_worker_status(project) — quick status check on one project.
30
+ - prompt_worker(project, message) — send a prompt to a worker. FIRE-AND-FORGET. Returns immediately. The worker runs in the background; you'll be notified via a worker_turn_complete event when it's done. NEVER prompt a worker whose status is "working" — wait for its completion event first.
31
+ - get_worker_summary(project) — fetch the most recent turn summary from a worker. Use this to verify what a worker actually did.
32
+
33
+ # Verification mindset
34
+
35
+ When a worker_turn_complete event arrives, do not blindly trust the worker's final text. Cross-check it against tools_used:
36
+
37
+ - Worker says "tests pass" but bash was never invoked → re-prompt to actually run tests.
38
+ - Worker reports edits but no edit/write tool in tools_used → re-prompt.
39
+ - Worker says "I checked the logs" but no read tool was used → re-prompt.
40
+ - Final text is suspiciously vague ("done", "fixed it") with no relevant tools → ask for specifics.
41
+
42
+ If verification passes, briefly tell the user the outcome and either dispatch the next step or wait.
43
+
44
+ # Style
45
+
46
+ - Be terse with the user. They want results, not narration.
47
+ - When dispatching, use plain prompt_worker calls. Don't ask the user permission for routine steps.
48
+ - Multiple projects can be prompted in the same turn (in parallel) when work is independent.
49
+ - Never invent project names. Use only those listed above.
50
+ - After a worker_turn_complete arrives, if the work is verified-good and there's nothing left to dispatch, end your turn silently or give a one-line update to the user.`;
51
+ }
52
+ //# sourceMappingURL=boss-system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss-system-prompt.js","sourceRoot":"","sources":["../src/boss-system-prompt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,QAAuB;IAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/E,OAAO;;;;EAIP,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yKA2C4J,CAAC;AAC1K,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare const VERSION = "0.1.0";
2
+ export declare const BRAND = "GG Boss";
3
+ export declare const AUTHOR = "Ken Kai";
4
+ export declare const LOGO_LINES: readonly string[];
5
+ export declare const LOGO_GAP = " ";
6
+ export declare const GRADIENT: readonly string[];
7
+ export declare const COLORS: {
8
+ readonly primary: "#60a5fa";
9
+ readonly accent: "#a78bfa";
10
+ readonly text: "#e2e8f0";
11
+ readonly textDim: "#6b7280";
12
+ readonly success: "#4ade80";
13
+ readonly warning: "#fbbf24";
14
+ readonly error: "#f87171";
15
+ };
16
+ /** Clear the entire scrollback + visible screen and reset cursor to home. */
17
+ export declare function clearScreen(): void;
18
+ //# sourceMappingURL=branding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../src/branding.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,KAAK,YAAY,CAAC;AAC/B,eAAO,MAAM,MAAM,YAAY,CAAC;AAEhC,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAA+C,CAAC;AAExF,eAAO,MAAM,QAAQ,QAAQ,CAAC;AAE9B,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EAarC,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;CAQT,CAAC;AAEX,6EAA6E;AAC7E,wBAAgB,WAAW,IAAI,IAAI,CAElC"}