@kenkaiiii/gg-boss 4.3.140 → 4.3.141
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 +2246 -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/slash-commands.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { SlashCommandInfo } from "@kenkaiiii/ggcoder/ui";
|
|
2
|
-
/**
|
|
3
|
-
* Slash commands the boss CLI recognizes. Shape matches ggcoder's
|
|
4
|
-
* SlashCommandInfo so the existing SlashCommandMenu in InputArea renders them.
|
|
5
|
-
*
|
|
6
|
-
* The actual handlers live in BossApp's handleSubmit — we just declare the
|
|
7
|
-
* surface here so the menu is in one place.
|
|
8
|
-
*/
|
|
9
|
-
export declare const BOSS_SLASH_COMMANDS: SlashCommandInfo[];
|
|
10
|
-
export declare function isSlashCommand(value: string): boolean;
|
|
11
|
-
export interface ParsedSlashCommand {
|
|
12
|
-
name: string;
|
|
13
|
-
args: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function parseSlash(value: string): ParsedSlashCommand | null;
|
|
16
|
-
/** Resolve aliases to the canonical command name. */
|
|
17
|
-
export declare function canonicalName(name: string): string | null;
|
|
18
|
-
export declare function buildHelpText(): string;
|
|
19
|
-
//# sourceMappingURL=slash-commands.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../src/slash-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAQjD,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAOnE;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAmCtC"}
|
package/dist/slash-commands.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Slash commands the boss CLI recognizes. Shape matches ggcoder's
|
|
3
|
-
* SlashCommandInfo so the existing SlashCommandMenu in InputArea renders them.
|
|
4
|
-
*
|
|
5
|
-
* The actual handlers live in BossApp's handleSubmit — we just declare the
|
|
6
|
-
* surface here so the menu is in one place.
|
|
7
|
-
*/
|
|
8
|
-
export const BOSS_SLASH_COMMANDS = [
|
|
9
|
-
{ name: "help", aliases: ["?"], description: "Show available commands" },
|
|
10
|
-
{ name: "model-boss", aliases: [], description: "Switch the orchestrator's model" },
|
|
11
|
-
{ name: "model-workers", aliases: [], description: "Switch every worker's model" },
|
|
12
|
-
{ name: "compact", aliases: [], description: "Compact the boss's context now" },
|
|
13
|
-
{ name: "clear", aliases: [], description: "Clear chat history and terminal" },
|
|
14
|
-
{ name: "radio", aliases: [], description: "Stream a free internet radio station" },
|
|
15
|
-
{ name: "quit", aliases: ["q", "exit"], description: "Exit gg-boss" },
|
|
16
|
-
];
|
|
17
|
-
export function isSlashCommand(value) {
|
|
18
|
-
return value.startsWith("/") && !value.startsWith("//");
|
|
19
|
-
}
|
|
20
|
-
export function parseSlash(value) {
|
|
21
|
-
if (!isSlashCommand(value))
|
|
22
|
-
return null;
|
|
23
|
-
const rest = value.slice(1).trim();
|
|
24
|
-
if (!rest)
|
|
25
|
-
return null;
|
|
26
|
-
const space = rest.indexOf(" ");
|
|
27
|
-
if (space === -1)
|
|
28
|
-
return { name: rest.toLowerCase(), args: "" };
|
|
29
|
-
return { name: rest.slice(0, space).toLowerCase(), args: rest.slice(space + 1).trim() };
|
|
30
|
-
}
|
|
31
|
-
/** Resolve aliases to the canonical command name. */
|
|
32
|
-
export function canonicalName(name) {
|
|
33
|
-
for (const cmd of BOSS_SLASH_COMMANDS) {
|
|
34
|
-
if (cmd.name === name)
|
|
35
|
-
return cmd.name;
|
|
36
|
-
if (cmd.aliases.includes(name))
|
|
37
|
-
return cmd.name;
|
|
38
|
-
}
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
export function buildHelpText() {
|
|
42
|
-
const lines = ["**gg-boss commands**", ""];
|
|
43
|
-
for (const cmd of BOSS_SLASH_COMMANDS) {
|
|
44
|
-
const aliases = cmd.aliases.length > 0 ? ` (${cmd.aliases.map((a) => "/" + a).join(", ")})` : "";
|
|
45
|
-
lines.push(`- \`/${cmd.name}\`${aliases} — ${cmd.description}`);
|
|
46
|
-
}
|
|
47
|
-
lines.push("");
|
|
48
|
-
lines.push("**Global keybindings**");
|
|
49
|
-
lines.push("- `Ctrl+T` — open the Tasks pane");
|
|
50
|
-
lines.push("- `Tab` — switch project scope (All / per-project pill in the input)");
|
|
51
|
-
lines.push("- `Shift+Tab` — toggle the boss's extended thinking on/off");
|
|
52
|
-
lines.push("- `Esc` — interrupt the boss while it's running");
|
|
53
|
-
lines.push("- `Ctrl+C` (twice) — exit");
|
|
54
|
-
lines.push("");
|
|
55
|
-
lines.push("**Inside the Tasks pane (Ctrl+T)**");
|
|
56
|
-
lines.push("- `↑` / `↓` (or `k` / `j`) — navigate tasks");
|
|
57
|
-
lines.push("- `r` — run all pending and blocked tasks across idle workers");
|
|
58
|
-
lines.push("- `d` — delete the selected task");
|
|
59
|
-
lines.push("- `Esc` — close the Tasks pane");
|
|
60
|
-
lines.push("");
|
|
61
|
-
lines.push("**Inside model pickers (`/model-boss`, `/model-workers`)**");
|
|
62
|
-
lines.push("- `↑` / `↓` — navigate models");
|
|
63
|
-
lines.push("- `Enter` — select");
|
|
64
|
-
lines.push("- `Esc` — cancel");
|
|
65
|
-
lines.push("");
|
|
66
|
-
lines.push("**Radio** (`/radio`)");
|
|
67
|
-
lines.push("- Pick a station to stream while you work, or select `Off` to stop.");
|
|
68
|
-
lines.push("- Requires `mpv` (recommended), `ffplay`, `mpg123`, or `vlc/cvlc` installed.");
|
|
69
|
-
lines.push("");
|
|
70
|
-
lines.push("**Input area**");
|
|
71
|
-
lines.push("- `↑` / `↓` — recall previous prompts (when input is empty)");
|
|
72
|
-
lines.push("- `Enter` — send · `Shift+Enter` — newline");
|
|
73
|
-
lines.push("- `/` — open the slash-command menu (Tab / arrows to pick, Enter to insert)");
|
|
74
|
-
return lines.join("\n");
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=slash-commands.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../src/slash-commands.ts"],"names":[],"mappings":"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"}
|
package/dist/splash.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
interface SplashScreenProps {
|
|
3
|
-
/** Optional caption shown under the logo — defaults to a "Loading…" line. */
|
|
4
|
-
caption?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare function SplashScreen({ caption }: SplashScreenProps): React.ReactElement;
|
|
7
|
-
/**
|
|
8
|
-
* Render the splash to stdout. Returns a `dismiss()` that holds the splash
|
|
9
|
-
* for at least `minMs` total visible time (so even fast inits get a real
|
|
10
|
-
* flash of branding) before unmounting, and resolves only after the unmount
|
|
11
|
-
* has actually completed — so the caller can safely render the main app
|
|
12
|
-
* next without two Ink trees coexisting on screen.
|
|
13
|
-
*/
|
|
14
|
-
export declare function showSplash(opts: {
|
|
15
|
-
minMs?: number;
|
|
16
|
-
caption?: string;
|
|
17
|
-
}): {
|
|
18
|
-
dismiss: () => Promise<void>;
|
|
19
|
-
};
|
|
20
|
-
export {};
|
|
21
|
-
//# sourceMappingURL=splash.d.ts.map
|
package/dist/splash.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"splash.d.ts","sourceRoot":"","sources":["../src/splash.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAoFnD,UAAU,iBAAiB;IACzB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAgE/E;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IACtE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CA2BA"}
|
package/dist/splash.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, { useEffect, useState } from "react";
|
|
3
|
-
import { Box, Text, render } from "ink";
|
|
4
|
-
import { AUTHOR, BRAND, COLORS, GRADIENT, VERSION } from "./branding.js";
|
|
5
|
-
import { getSplashAudioDurationMs, playSplashAudio } from "./audio.js";
|
|
6
|
-
/**
|
|
7
|
-
* Big ASCII "GG Boss" rendered for the splash. The block characters here are
|
|
8
|
-
* ANSI Shadow-style figlet output. Whitespace is significant — every line is
|
|
9
|
-
* the same width so the gradient striping aligns vertically. Do not reformat.
|
|
10
|
-
*/
|
|
11
|
-
const SPLASH_LINES = [
|
|
12
|
-
" █████████ █████████ ███████████ ",
|
|
13
|
-
" ███░░░░░███ ███░░░░░███ ░░███░░░░░███ ",
|
|
14
|
-
" ███ ░░░ ███ ░░░ ░███ ░███ ██████ █████ █████ ",
|
|
15
|
-
"░███ ░███ ░██████████ ███░░███ ███░░ ███░░ ",
|
|
16
|
-
"░███ █████░███ █████ ░███░░░░░███░███ ░███░░█████ ░░█████ ",
|
|
17
|
-
"░░███ ░░███ ░░███ ░░███ ░███ ░███░███ ░███ ░░░░███ ░░░░███",
|
|
18
|
-
" ░░█████████ ░░█████████ ███████████ ░░██████ ██████ ██████ ",
|
|
19
|
-
" ░░░░░░░░░ ░░░░░░░░░ ░░░░░░░░░░░ ░░░░░░ ░░░░░░ ░░░░░░ ",
|
|
20
|
-
];
|
|
21
|
-
const SPLASH_WIDTH = SPLASH_LINES[0].length;
|
|
22
|
-
/**
|
|
23
|
-
* Vertical gradient stripe — assigns each line a colour from the brand
|
|
24
|
-
* gradient so the logo gets a soft top→bottom hue transition. Filled glyphs
|
|
25
|
-
* (`█`) take the line's hue at full brightness; shadow glyphs (`░`) inherit
|
|
26
|
-
* the same hue but render at lower intensity (via `dimColor`) so they read
|
|
27
|
-
* as a drop-shadow rather than fighting for visual weight with the fill.
|
|
28
|
-
*/
|
|
29
|
-
function colorForLine(lineIdx, totalLines, offset) {
|
|
30
|
-
const t = totalLines <= 1 ? 0 : (lineIdx + offset) % totalLines;
|
|
31
|
-
const idx = Math.floor((t / totalLines) * GRADIENT.length) % GRADIENT.length;
|
|
32
|
-
return GRADIENT[idx];
|
|
33
|
-
}
|
|
34
|
-
function SplashLogo({ offset }) {
|
|
35
|
-
return (_jsx(Box, { flexDirection: "column", children: SPLASH_LINES.map((line, i) => {
|
|
36
|
-
const hue = colorForLine(i, SPLASH_LINES.length, offset);
|
|
37
|
-
// Split into runs so we can dim the shadow glyphs (░) without breaking
|
|
38
|
-
// the line into one Text per char (which Ink would happily handle but
|
|
39
|
-
// is wasteful at this scale).
|
|
40
|
-
const segments = [];
|
|
41
|
-
let buf = "";
|
|
42
|
-
let bufDim = false;
|
|
43
|
-
for (const ch of line) {
|
|
44
|
-
const dim = ch === "░";
|
|
45
|
-
if (segments.length === 0 && buf.length === 0) {
|
|
46
|
-
buf = ch;
|
|
47
|
-
bufDim = dim;
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
if (dim === bufDim) {
|
|
51
|
-
buf += ch;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
segments.push({ text: buf, dim: bufDim });
|
|
55
|
-
buf = ch;
|
|
56
|
-
bufDim = dim;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (buf)
|
|
60
|
-
segments.push({ text: buf, dim: bufDim });
|
|
61
|
-
return (_jsx(Text, { children: segments.map((seg, j) => (_jsx(Text, { color: hue, dimColor: seg.dim, children: seg.text }, j))) }, i));
|
|
62
|
-
}) }));
|
|
63
|
-
}
|
|
64
|
-
export function SplashScreen({ caption }) {
|
|
65
|
-
const [offset, setOffset] = useState(0);
|
|
66
|
-
// Soft shimmer — rotates the gradient through the logo every 120ms. Stops
|
|
67
|
-
// when the component unmounts (the cli swaps the splash out as soon as the
|
|
68
|
-
// boss has finished initialising).
|
|
69
|
-
useEffect(() => {
|
|
70
|
-
const timer = setInterval(() => {
|
|
71
|
-
setOffset((o) => o + 1);
|
|
72
|
-
}, 120);
|
|
73
|
-
return () => {
|
|
74
|
-
clearInterval(timer);
|
|
75
|
-
};
|
|
76
|
-
}, []);
|
|
77
|
-
// Re-center on terminal resize. process.stdout.columns/rows are read live
|
|
78
|
-
// each render and a "resize" event re-renders us so the centring stays
|
|
79
|
-
// accurate even if the user resizes their window mid-splash.
|
|
80
|
-
const [size, setSize] = useState(() => ({
|
|
81
|
-
columns: process.stdout.columns ?? 80,
|
|
82
|
-
rows: process.stdout.rows ?? 24,
|
|
83
|
-
}));
|
|
84
|
-
useEffect(() => {
|
|
85
|
-
const handler = () => setSize({
|
|
86
|
-
columns: process.stdout.columns ?? 80,
|
|
87
|
-
rows: process.stdout.rows ?? 24,
|
|
88
|
-
});
|
|
89
|
-
process.stdout.on("resize", handler);
|
|
90
|
-
return () => {
|
|
91
|
-
process.stdout.off("resize", handler);
|
|
92
|
-
};
|
|
93
|
-
}, []);
|
|
94
|
-
// Splash height: 8 logo rows + 1 spacer + 1 brand line + 1 caption line ≈ 11.
|
|
95
|
-
// We pad the top with empty rows to push the logo to the vertical centre,
|
|
96
|
-
// and use Ink's flex `alignItems` for horizontal centring (works even when
|
|
97
|
-
// the logo is wider than the terminal — flex just clips, no crash).
|
|
98
|
-
const SPLASH_BLOCK_HEIGHT = SPLASH_LINES.length + 3;
|
|
99
|
-
const verticalPad = Math.max(0, Math.floor((size.rows - SPLASH_BLOCK_HEIGHT) / 2));
|
|
100
|
-
return (_jsxs(Box, { flexDirection: "column", width: size.columns, height: size.rows, alignItems: "center", children: [_jsx(Box, { height: verticalPad, flexShrink: 0 }), _jsxs(Box, { flexDirection: "column", alignItems: "flex-start", flexShrink: 0, children: [_jsx(SplashLogo, { offset: offset }), _jsx(Box, { width: SPLASH_WIDTH, marginTop: 1, justifyContent: "center", children: _jsxs(Text, { children: [_jsx(Text, { color: COLORS.text, bold: true, children: BRAND }), _jsxs(Text, { color: COLORS.textDim, children: [" v", VERSION] }), _jsx(Text, { color: COLORS.textDim, children: " \u00B7 By " }), _jsx(Text, { color: COLORS.text, bold: true, children: AUTHOR })] }) }), _jsx(Box, { width: SPLASH_WIDTH, justifyContent: "center", children: _jsx(Text, { color: COLORS.textDim, children: caption ?? "Spinning up the orchestrator…" }) })] })] }));
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Render the splash to stdout. Returns a `dismiss()` that holds the splash
|
|
104
|
-
* for at least `minMs` total visible time (so even fast inits get a real
|
|
105
|
-
* flash of branding) before unmounting, and resolves only after the unmount
|
|
106
|
-
* has actually completed — so the caller can safely render the main app
|
|
107
|
-
* next without two Ink trees coexisting on screen.
|
|
108
|
-
*/
|
|
109
|
-
export function showSplash(opts) {
|
|
110
|
-
const start = Date.now();
|
|
111
|
-
// Fire-and-forget — never await. If the platform has no working player or
|
|
112
|
-
// the bundled mp3 is missing, this resolves to nothing and the splash just
|
|
113
|
-
// plays silently. Errors are swallowed inside playSplashAudio so the user
|
|
114
|
-
// never sees an audio-related crash on launch.
|
|
115
|
-
void playSplashAudio();
|
|
116
|
-
const instance = render(_jsx(SplashScreen, { caption: opts.caption }));
|
|
117
|
-
// Default the minimum visible time to the audio duration so the user
|
|
118
|
-
// doesn't get dumped into the chat mid-jingle. A small +200ms tail keeps
|
|
119
|
-
// the last beat from being clipped by terminal-app sound shutdown.
|
|
120
|
-
const audioDurationMs = getSplashAudioDurationMs();
|
|
121
|
-
const defaultMinMs = audioDurationMs + 200;
|
|
122
|
-
return {
|
|
123
|
-
dismiss: async () => {
|
|
124
|
-
const minMs = opts.minMs ?? defaultMinMs;
|
|
125
|
-
const elapsed = Date.now() - start;
|
|
126
|
-
const remaining = Math.max(0, minMs - elapsed);
|
|
127
|
-
if (remaining > 0) {
|
|
128
|
-
await new Promise((r) => setTimeout(r, remaining));
|
|
129
|
-
}
|
|
130
|
-
instance.unmount();
|
|
131
|
-
// Give Ink one tick to flush the unmount writes before the caller
|
|
132
|
-
// starts mounting the next tree.
|
|
133
|
-
await new Promise((r) => setImmediate(r));
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=splash.js.map
|
package/dist/splash.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"splash.js","sourceRoot":"","sources":["../src/splash.tsx"],"names":[],"mappings":"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"}
|
package/dist/task-tools.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { AgentTool } from "@kenkaiiii/gg-agent";
|
|
2
|
-
import type { Worker } from "./worker.js";
|
|
3
|
-
export interface TaskToolDeps {
|
|
4
|
-
workers: Map<string, Worker>;
|
|
5
|
-
/**
|
|
6
|
-
* Hook the orchestrator provides so dispatch_pending can fire-and-forget
|
|
7
|
-
* a worker prompt and update task state on completion. Mirrors the
|
|
8
|
-
* fire-and-forget contract of plain prompt_worker.
|
|
9
|
-
*/
|
|
10
|
-
dispatchTaskByDescription: (project: string, description: string, fresh: boolean, taskId: string) => Promise<{
|
|
11
|
-
ok: true;
|
|
12
|
-
} | {
|
|
13
|
-
ok: false;
|
|
14
|
-
reason: string;
|
|
15
|
-
}>;
|
|
16
|
-
}
|
|
17
|
-
export declare function createTaskTools(deps: TaskToolDeps): AgentTool[];
|
|
18
|
-
//# sourceMappingURL=task-tools.d.ts.map
|
package/dist/task-tools.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-tools.d.ts","sourceRoot":"","sources":["../src/task-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAS1C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B;;;;OAIG;IACH,yBAAyB,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,KACX,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAiDD,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,EAAE,CAyI/D"}
|
package/dist/task-tools.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { tasksStore } from "./tasks-store.js";
|
|
3
|
-
import { bossStore } from "./boss-store.js";
|
|
4
|
-
/**
|
|
5
|
-
* Once-per-process flag so we surface the Ctrl+T / r hint a single time per
|
|
6
|
-
* ggboss session. Repeating it on every add_task would bury the chat in
|
|
7
|
-
* advice the user already absorbed.
|
|
8
|
-
*/
|
|
9
|
-
let tasksHintShown = false;
|
|
10
|
-
const addTaskParams = z.object({
|
|
11
|
-
project: z.string().describe("Project name (must match a linked worker)."),
|
|
12
|
-
title: z.string().describe("Short one-line summary shown in the task overlay."),
|
|
13
|
-
description: z
|
|
14
|
-
.string()
|
|
15
|
-
.describe("Full instruction sent to the worker when this task is dispatched. Should be specific and actionable."),
|
|
16
|
-
fresh: z
|
|
17
|
-
.boolean()
|
|
18
|
-
.optional()
|
|
19
|
-
.describe("If true, the worker's session is wiped before this task runs. Use for unrelated direction changes."),
|
|
20
|
-
});
|
|
21
|
-
const listTasksParams = z.object({
|
|
22
|
-
project: z.string().optional().describe("Filter to one project."),
|
|
23
|
-
status: z
|
|
24
|
-
.enum(["pending", "in_progress", "done", "blocked", "skipped"])
|
|
25
|
-
.optional()
|
|
26
|
-
.describe("Filter by status."),
|
|
27
|
-
});
|
|
28
|
-
const updateTaskParams = z.object({
|
|
29
|
-
id: z.string().describe("Task id from list_tasks."),
|
|
30
|
-
status: z
|
|
31
|
-
.enum(["pending", "in_progress", "done", "blocked", "skipped"])
|
|
32
|
-
.optional()
|
|
33
|
-
.describe("New status."),
|
|
34
|
-
notes: z.string().optional().describe("Boss commentary / blocker reason / outcome notes."),
|
|
35
|
-
});
|
|
36
|
-
const dispatchPendingParams = z.object({
|
|
37
|
-
project: z
|
|
38
|
-
.string()
|
|
39
|
-
.optional()
|
|
40
|
-
.describe("Limit dispatch to one project. Omit to dispatch the next pending task for EVERY idle worker (parallel fan-out)."),
|
|
41
|
-
});
|
|
42
|
-
function formatTask(t) {
|
|
43
|
-
const head = `[${t.id}] ${t.project} · ${t.status} · ${t.title}`;
|
|
44
|
-
return t.notes ? `${head} (${t.notes})` : head;
|
|
45
|
-
}
|
|
46
|
-
export function createTaskTools(deps) {
|
|
47
|
-
const { workers, dispatchTaskByDescription } = deps;
|
|
48
|
-
const addTask = {
|
|
49
|
-
name: "add_task",
|
|
50
|
-
description: "Add a task to the boss's plan for a specific project. Tasks are persisted across sessions and visible in the Tasks overlay (Ctrl+T).",
|
|
51
|
-
parameters: addTaskParams,
|
|
52
|
-
async execute(args) {
|
|
53
|
-
if (!workers.has(args.project))
|
|
54
|
-
return `Unknown project: ${args.project}`;
|
|
55
|
-
// Deterministic dedup — case-insensitive title match within the same
|
|
56
|
-
// project blocks duplicates regardless of whether the boss remembered to
|
|
57
|
-
// list_tasks first. Any existing entry (pending/in_progress/blocked/done)
|
|
58
|
-
// counts as a hit; the boss should reuse it rather than fork a copy.
|
|
59
|
-
const titleNorm = args.title.trim().toLowerCase();
|
|
60
|
-
const existing = tasksStore
|
|
61
|
-
.list({ project: args.project })
|
|
62
|
-
.find((t) => t.title.trim().toLowerCase() === titleNorm);
|
|
63
|
-
if (existing) {
|
|
64
|
-
return `Task already exists: [${existing.id}] ${existing.project} · ${existing.title} (status: ${existing.status}). Reuse this id with prompt_worker / update_task / dispatch_pending instead of creating a duplicate.`;
|
|
65
|
-
}
|
|
66
|
-
const t = await tasksStore.add({
|
|
67
|
-
project: args.project,
|
|
68
|
-
title: args.title,
|
|
69
|
-
description: args.description,
|
|
70
|
-
fresh: args.fresh,
|
|
71
|
-
});
|
|
72
|
-
// First add_task per session — defer the keybind hint until the boss's
|
|
73
|
-
// current turn ends so it doesn't get interleaved between the boss's
|
|
74
|
-
// tool calls (which read like the boss is making the announcement).
|
|
75
|
-
// Subsequent add_tasks stay silent.
|
|
76
|
-
if (!tasksHintShown) {
|
|
77
|
-
tasksHintShown = true;
|
|
78
|
-
bossStore.queueEndOfTurnInfo("Press Ctrl+T to open the Tasks pane, then `r` to run all pending tasks.");
|
|
79
|
-
}
|
|
80
|
-
return `Added [${t.id}] ${t.project} · ${t.title}`;
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
const listTasks = {
|
|
84
|
-
name: "list_tasks",
|
|
85
|
-
description: "List tasks in the boss's plan, optionally filtered by project and/or status. Returns task ids so you can update or dispatch them.",
|
|
86
|
-
parameters: listTasksParams,
|
|
87
|
-
execute(args) {
|
|
88
|
-
const xs = tasksStore.list({
|
|
89
|
-
project: args.project,
|
|
90
|
-
status: args.status,
|
|
91
|
-
});
|
|
92
|
-
if (xs.length === 0)
|
|
93
|
-
return "(no tasks)";
|
|
94
|
-
return xs.map(formatTask).join("\n");
|
|
95
|
-
},
|
|
96
|
-
};
|
|
97
|
-
const updateTask = {
|
|
98
|
-
name: "update_task",
|
|
99
|
-
description: "Update a task's status and/or notes. Use this after a worker_turn_complete to mark the task DONE / BLOCKED / SKIPPED. The notes field is for boss commentary or blocker reasons.",
|
|
100
|
-
parameters: updateTaskParams,
|
|
101
|
-
async execute(args) {
|
|
102
|
-
// Build the partial WITHOUT undefined keys so that calling update_task
|
|
103
|
-
// with only `notes` doesn't accidentally wipe out the existing status.
|
|
104
|
-
// Previously a `{ status: undefined, notes: "…" }` spread was overwriting
|
|
105
|
-
// status to undefined and blowing up nextDispatchable's filter.
|
|
106
|
-
const fields = {};
|
|
107
|
-
if (args.status !== undefined)
|
|
108
|
-
fields.status = args.status;
|
|
109
|
-
if (args.notes !== undefined)
|
|
110
|
-
fields.notes = args.notes;
|
|
111
|
-
const updated = await tasksStore.update(args.id, fields);
|
|
112
|
-
if (!updated)
|
|
113
|
-
return `Unknown task id: ${args.id}`;
|
|
114
|
-
return `Updated ${formatTask(updated)}`;
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
const dispatchPending = {
|
|
118
|
-
name: "dispatch_pending",
|
|
119
|
-
description: "Send the next pending task for one project (or for every idle worker if no project is given) via prompt_worker. Marks each dispatched task as in_progress. FIRE-AND-FORGET — listen for worker_turn_complete events as usual. Use this as the 'go' button after planning.",
|
|
120
|
-
parameters: dispatchPendingParams,
|
|
121
|
-
async execute(args) {
|
|
122
|
-
const targetProjects = args.project
|
|
123
|
-
? [args.project]
|
|
124
|
-
: [...workers.entries()].filter(([, w]) => w.getStatus() === "idle").map(([name]) => name);
|
|
125
|
-
if (targetProjects.length === 0) {
|
|
126
|
-
return "No idle workers to dispatch to.";
|
|
127
|
-
}
|
|
128
|
-
const dispatched = [];
|
|
129
|
-
const skipped = [];
|
|
130
|
-
for (const project of targetProjects) {
|
|
131
|
-
const worker = workers.get(project);
|
|
132
|
-
if (!worker) {
|
|
133
|
-
skipped.push(`${project}: unknown project`);
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
if (worker.getStatus() === "working") {
|
|
137
|
-
skipped.push(`${project}: worker is busy`);
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
const next = tasksStore.nextPending(project);
|
|
141
|
-
if (!next) {
|
|
142
|
-
skipped.push(`${project}: no pending tasks`);
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
await tasksStore.update(next.id, { status: "in_progress" });
|
|
146
|
-
const result = await dispatchTaskByDescription(project, next.description, next.fresh === true, next.id);
|
|
147
|
-
if (result.ok) {
|
|
148
|
-
dispatched.push(`${project}: [${next.id}] ${next.title}`);
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
// Roll back to pending if dispatch failed.
|
|
152
|
-
await tasksStore.update(next.id, { status: "pending" });
|
|
153
|
-
skipped.push(`${project}: ${result.reason}`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
const lines = [];
|
|
157
|
-
if (dispatched.length > 0) {
|
|
158
|
-
lines.push(`Dispatched ${dispatched.length}:`);
|
|
159
|
-
for (const d of dispatched)
|
|
160
|
-
lines.push(` ✓ ${d}`);
|
|
161
|
-
}
|
|
162
|
-
if (skipped.length > 0) {
|
|
163
|
-
lines.push(`Skipped ${skipped.length}:`);
|
|
164
|
-
for (const s of skipped)
|
|
165
|
-
lines.push(` · ${s}`);
|
|
166
|
-
}
|
|
167
|
-
return lines.join("\n");
|
|
168
|
-
},
|
|
169
|
-
};
|
|
170
|
-
return [addTask, listTasks, updateTask, dispatchPending];
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=task-tools.js.map
|
package/dist/task-tools.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-tools.js","sourceRoot":"","sources":["../src/task-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks-store.d.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
export type TaskStatus = "pending" | "in_progress" | "done" | "blocked" | "skipped";
|
|
2
|
-
export interface BossTask {
|
|
3
|
-
id: string;
|
|
4
|
-
/** Project name (matches a linked worker). */
|
|
5
|
-
project: string;
|
|
6
|
-
/** Short one-line summary shown in the overlay. */
|
|
7
|
-
title: string;
|
|
8
|
-
/** Full instruction sent to the worker when this task is dispatched. */
|
|
9
|
-
description: string;
|
|
10
|
-
status: TaskStatus;
|
|
11
|
-
/** Pre-decided when adding — passed through to prompt_worker on dispatch. */
|
|
12
|
-
fresh?: boolean;
|
|
13
|
-
/** Boss's running notes / blocker reason. */
|
|
14
|
-
notes?: string;
|
|
15
|
-
/** When dispatched, holds the worker_turn_complete summary text. */
|
|
16
|
-
resultSummary?: string;
|
|
17
|
-
createdAt: string;
|
|
18
|
-
updatedAt: string;
|
|
19
|
-
}
|
|
20
|
-
interface TasksUiState {
|
|
21
|
-
tasks: BossTask[];
|
|
22
|
-
/** Bumped on every mutation so overlay-side useEffects can react. */
|
|
23
|
-
version: number;
|
|
24
|
-
}
|
|
25
|
-
export declare function useTasksState(): TasksUiState;
|
|
26
|
-
export declare const tasksStore: {
|
|
27
|
-
/**
|
|
28
|
-
* Hydrate state from disk on startup. Also prunes terminal tasks (done +
|
|
29
|
-
* skipped) so the overlay doesn't pile up months of completed history, and
|
|
30
|
-
* resets stale `in_progress` rows back to `pending` — those represent tasks
|
|
31
|
-
* that were running when ggboss exited, so the worker never finished them
|
|
32
|
-
* and we don't have a result. Re-runs them next time `r` (or auto-chain)
|
|
33
|
-
* fires. Persists the cleaned list back to disk if anything changed.
|
|
34
|
-
*/
|
|
35
|
-
load(): Promise<void>;
|
|
36
|
-
/** Synchronous read. Used by boss tools that need to inspect/list. */
|
|
37
|
-
list(filter?: {
|
|
38
|
-
project?: string;
|
|
39
|
-
status?: TaskStatus;
|
|
40
|
-
}): BossTask[];
|
|
41
|
-
byId(id: string): BossTask | undefined;
|
|
42
|
-
add(input: {
|
|
43
|
-
project: string;
|
|
44
|
-
title: string;
|
|
45
|
-
description: string;
|
|
46
|
-
fresh?: boolean;
|
|
47
|
-
}): Promise<BossTask>;
|
|
48
|
-
update(id: string, fields: Partial<Pick<BossTask, "status" | "notes" | "resultSummary" | "title" | "description">>): Promise<BossTask | null>;
|
|
49
|
-
remove(id: string): Promise<boolean>;
|
|
50
|
-
/**
|
|
51
|
-
* Find the next pending task for a project (FIFO by createdAt). Used by
|
|
52
|
-
* dispatch_pending to pick what to send next.
|
|
53
|
-
*/
|
|
54
|
-
nextPending(project: string): BossTask | undefined;
|
|
55
|
-
/**
|
|
56
|
-
* Find the next dispatchable task — pending OR blocked — for a project.
|
|
57
|
-
* Used by overlay's "r" (run all) so blocked tasks get retried alongside
|
|
58
|
-
* pending ones. Pending is preferred (lower priority value); blocked falls
|
|
59
|
-
* through if there are no pending ones.
|
|
60
|
-
*/
|
|
61
|
-
nextDispatchable(project: string): BossTask | undefined;
|
|
62
|
-
/** Test/dev reset — wipes in-memory + disk. */
|
|
63
|
-
reset(): Promise<void>;
|
|
64
|
-
};
|
|
65
|
-
export {};
|
|
66
|
-
//# sourceMappingURL=tasks-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-store.d.ts","sourceRoot":"","sources":["../src/tasks-store.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6DD,UAAU,YAAY;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;CACjB;AAkBD,wBAAgB,aAAa,IAAI,YAAY,CAE5C;AAcD,eAAO,MAAM,UAAU;IACrB;;;;;;;OAOG;YACW,OAAO,CAAC,IAAI,CAAC;IA8B3B,sEAAsE;kBACxD;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,QAAQ,EAAE;aAO3D,MAAM,GAAG,QAAQ,GAAG,SAAS;eAIrB;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GAAG,OAAO,CAAC,QAAQ,CAAC;eAkBf,MAAM,UACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,eAAe,GAAG,OAAO,GAAG,aAAa,CAAC,CAAC,GAC9F,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;eAYV,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1C;;;OAGG;yBACkB,MAAM,GAAG,QAAQ,GAAG,SAAS;IAMlD;;;;;OAKG;8BACuB,MAAM,GAAG,QAAQ,GAAG,SAAS;IAWvD,+CAA+C;aAChC,OAAO,CAAC,IAAI,CAAC;CAK7B,CAAC"}
|