sage-team 3.4.0 → 3.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +36 -23
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/engine/__tests__/dispatcher.test.js +2 -3
- package/dist/engine/__tests__/dispatcher.test.js.map +1 -1
- package/dist/engine/ceo-brain.d.ts +14 -1
- package/dist/engine/ceo-brain.d.ts.map +1 -1
- package/dist/engine/ceo-brain.js +89 -4
- package/dist/engine/ceo-brain.js.map +1 -1
- package/dist/engine/dispatcher.d.ts +5 -0
- package/dist/engine/dispatcher.d.ts.map +1 -1
- package/dist/engine/dispatcher.js +82 -4
- package/dist/engine/dispatcher.js.map +1 -1
- package/dist/engine/orchestrator.d.ts +5 -0
- package/dist/engine/orchestrator.d.ts.map +1 -1
- package/dist/engine/orchestrator.js +61 -7
- package/dist/engine/orchestrator.js.map +1 -1
- package/dist/mcp/server.js +158 -36
- package/dist/mcp/server.js.map +1 -1
- package/package.json +1 -1
- package/src/web/dist/assets/{BufferResource-Bct1-zq7.js → BufferResource-gLeIu0yv.js} +1 -1
- package/src/web/dist/assets/{CanvasRenderer-CKwE0kc4.js → CanvasRenderer-7_doUdID.js} +1 -1
- package/src/web/dist/assets/{Filter-DOuiTHq_.js → Filter-AN-kr0CX.js} +1 -1
- package/src/web/dist/assets/{RenderTargetSystem-BFGmN4oB.js → RenderTargetSystem-5MG91ZAa.js} +1 -1
- package/src/web/dist/assets/{WebGLRenderer-Bnd2tXK6.js → WebGLRenderer-Uk53IW12.js} +1 -1
- package/src/web/dist/assets/{WebGPURenderer-BuJedD5Q.js → WebGPURenderer-BtIyp_5U.js} +1 -1
- package/src/web/dist/assets/{browserAll-XFxdM5KU.js → browserAll-C9gGmA0l.js} +1 -1
- package/src/web/dist/assets/index-8Qtg1JIx.css +1 -0
- package/src/web/dist/assets/index-Ckr6v_4r.js +298 -0
- package/src/web/dist/assets/{webworkerAll-DU2TvyX8.js → webworkerAll-BTUR00vw.js} +1 -1
- package/src/web/dist/index.html +2 -2
- package/src/web/dist/assets/index-CQg6t7aD.js +0 -298
- package/src/web/dist/assets/index-DgR_4NZL.css +0 -1
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,WAAW,IAAI,OAAO,CAkFrC"}
|
|
@@ -5,22 +5,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.initCommand = initCommand;
|
|
7
7
|
const commander_1 = require("commander");
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
8
9
|
const fs_1 = __importDefault(require("fs"));
|
|
9
10
|
const path_1 = __importDefault(require("path"));
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
/** Detect if current directory is inside a git repository */
|
|
12
|
+
function hasGit() {
|
|
13
|
+
try {
|
|
14
|
+
(0, child_process_1.execSync)('git rev-parse --git-dir', { stdio: 'pipe' });
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
18
21
|
function initCommand() {
|
|
19
22
|
return new commander_1.Command('init')
|
|
20
23
|
.description('Initialize Sage Team in current directory')
|
|
21
24
|
.option('--api-key <key>', 'Anthropic API key')
|
|
22
25
|
.option('--company-name <name>', 'Company name')
|
|
23
|
-
.option('--autonomy <mode>', 'Autonomy mode: sandbox|direct|supervised'
|
|
26
|
+
.option('--autonomy <mode>', 'Autonomy mode: sandbox|direct|supervised')
|
|
24
27
|
.action(async (options) => {
|
|
25
28
|
const sageDir = '.sage-team';
|
|
26
29
|
const configPath = path_1.default.join(sageDir, 'config.json');
|
|
@@ -29,32 +32,42 @@ function initCommand() {
|
|
|
29
32
|
return;
|
|
30
33
|
}
|
|
31
34
|
// Create directory structure
|
|
32
|
-
fs_1.default.mkdirSync(
|
|
35
|
+
fs_1.default.mkdirSync(sageDir, { recursive: true });
|
|
36
|
+
// Auto-detect: sandbox if git available, direct otherwise
|
|
37
|
+
const isGitRepo = hasGit();
|
|
38
|
+
const defaultMode = isGitRepo ? 'sandbox' : 'direct';
|
|
33
39
|
// Build config
|
|
34
|
-
const config = {
|
|
40
|
+
const config = {
|
|
41
|
+
companyName: 'Sage Team',
|
|
42
|
+
mission: 'Build amazing software autonomously',
|
|
43
|
+
model: 'claude-sonnet-4-20250514',
|
|
44
|
+
maxConcurrentAgents: 3,
|
|
45
|
+
autonomyMode: options.autonomy || defaultMode,
|
|
46
|
+
apiKey: '',
|
|
47
|
+
};
|
|
35
48
|
if (options.apiKey)
|
|
36
49
|
config.apiKey = options.apiKey;
|
|
37
50
|
if (options.companyName)
|
|
38
51
|
config.companyName = options.companyName;
|
|
39
|
-
if (options.autonomy)
|
|
40
|
-
config.autonomyMode = options.autonomy;
|
|
41
52
|
// Check env var
|
|
42
53
|
if (!config.apiKey && process.env.ANTHROPIC_API_KEY) {
|
|
43
54
|
config.apiKey = process.env.ANTHROPIC_API_KEY;
|
|
44
55
|
}
|
|
45
56
|
// Write config
|
|
46
57
|
fs_1.default.writeFileSync(path_1.default.join(sageDir, 'config.json'), JSON.stringify(config, null, 2));
|
|
47
|
-
// Add to .gitignore
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
// Add to .gitignore only if git exists
|
|
59
|
+
if (isGitRepo) {
|
|
60
|
+
const gitignorePath = '.gitignore';
|
|
61
|
+
const gitignoreEntry = '\n# Sage Team\n.sage-team/\n';
|
|
62
|
+
if (fs_1.default.existsSync(gitignorePath)) {
|
|
63
|
+
const content = fs_1.default.readFileSync(gitignorePath, 'utf-8');
|
|
64
|
+
if (!content.includes('.sage-team')) {
|
|
65
|
+
fs_1.default.appendFileSync(gitignorePath, gitignoreEntry);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
fs_1.default.writeFileSync(gitignorePath, gitignoreEntry);
|
|
54
70
|
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
fs_1.default.writeFileSync(gitignorePath, gitignoreEntry);
|
|
58
71
|
}
|
|
59
72
|
// Create .mcp.json for Claude Code integration
|
|
60
73
|
const mcpPath = '.mcp.json';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;;;AAeA,kCAkFC;AAjGD,yCAAoC;AACpC,iDAAyC;AACzC,4CAAoB;AACpB,gDAAwB;AAExB,6DAA6D;AAC7D,SAAS,MAAM;IACb,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,IAAI,mBAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC9C,MAAM,CAAC,uBAAuB,EAAE,cAAc,CAAC;SAC/C,MAAM,CAAC,mBAAmB,EAAE,0CAA0C,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,YAAY,CAAC;QAE7B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,0DAA0D;QAC1D,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAErD,eAAe;QACf,MAAM,MAAM,GAAG;YACb,WAAW,EAAE,WAAW;YACxB,OAAO,EAAE,qCAAqC;YAC9C,KAAK,EAAE,0BAA0B;YACjC,mBAAmB,EAAE,CAAC;YACtB,YAAY,EAAE,OAAO,CAAC,QAAQ,IAAI,WAAW;YAC7C,MAAM,EAAE,EAAE;SACX,CAAC;QACF,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACnD,IAAI,OAAO,CAAC,WAAW;YAAE,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAElE,gBAAgB;QAChB,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACpD,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAChD,CAAC;QAED,eAAe;QACf,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAChC,CAAC;QAEF,uCAAuC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,aAAa,GAAG,YAAY,CAAC;YACnC,MAAM,cAAc,GAAG,8BAA8B,CAAC;YACtD,IAAI,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBACpC,YAAE,CAAC,cAAc,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAE,CAAC,aAAa,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,+CAA+C;QAC/C,MAAM,OAAO,GAAG,WAAW,CAAC;QAC5B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG;gBAChB,UAAU,EAAE;oBACV,WAAW,EAAE;wBACX,OAAO,EAAE,eAAe;wBACxB,IAAI,EAAE,EAAE;qBACT;iBACF;aACF,CAAC;YACF,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,cAAc,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -16,7 +16,7 @@ function buildProgram() {
|
|
|
16
16
|
program
|
|
17
17
|
.name('sage-team')
|
|
18
18
|
.description('AI-powered autonomous software company')
|
|
19
|
-
.version('3.4.
|
|
19
|
+
.version('3.4.3');
|
|
20
20
|
program.addCommand((0, init_1.initCommand)());
|
|
21
21
|
program.addCommand((0, start_1.startCommand)());
|
|
22
22
|
program.addCommand((0, resume_1.resumeCommand)());
|
|
@@ -15,12 +15,11 @@ const dispatcher_1 = require("../dispatcher");
|
|
|
15
15
|
cwd: '/tmp/worktree-dex',
|
|
16
16
|
maxTurns: 50,
|
|
17
17
|
});
|
|
18
|
-
(0, vitest_1.expect)(cmd.command).
|
|
18
|
+
(0, vitest_1.expect)(cmd.command).toContain('claude');
|
|
19
19
|
(0, vitest_1.expect)(cmd.args).toContain('--print');
|
|
20
20
|
(0, vitest_1.expect)(cmd.args).toContain('--output-format');
|
|
21
21
|
(0, vitest_1.expect)(cmd.args).toContain('stream-json');
|
|
22
|
-
(0, vitest_1.expect)(cmd.args).toContain('--
|
|
23
|
-
(0, vitest_1.expect)(cmd.args).toContain('bypassPermissions');
|
|
22
|
+
(0, vitest_1.expect)(cmd.args).toContain('--dangerously-skip-permissions');
|
|
24
23
|
(0, vitest_1.expect)(cmd.args).toContain('--max-turns');
|
|
25
24
|
(0, vitest_1.expect)(cmd.args).toContain('50');
|
|
26
25
|
// Task prompt is positional (last arg)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.test.js","sourceRoot":"","sources":["../../../src/engine/__tests__/dispatcher.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,8CAA2C;AAE3C,IAAA,iBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAA,WAAE,EAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,IAAA,eAAM,EAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC;YAClC,YAAY,EAAE,gBAAgB;YAC9B,UAAU,EAAE,uBAAuB;YACnC,GAAG,EAAE,mBAAmB;YACxB,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"dispatcher.test.js","sourceRoot":"","sources":["../../../src/engine/__tests__/dispatcher.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,11 +22,24 @@ export interface DecompositionResult {
|
|
|
22
22
|
description?: string;
|
|
23
23
|
}[];
|
|
24
24
|
}
|
|
25
|
+
export interface CEOResponse {
|
|
26
|
+
type: 'question' | 'ready';
|
|
27
|
+
message: string;
|
|
28
|
+
questions?: string[];
|
|
29
|
+
summary?: string;
|
|
30
|
+
}
|
|
25
31
|
export declare class CEOBrain {
|
|
26
32
|
private config;
|
|
27
33
|
private client;
|
|
34
|
+
private conversationHistory;
|
|
28
35
|
constructor(config: CEOBrainConfig);
|
|
29
|
-
|
|
36
|
+
/** Start a conversation about a new goal */
|
|
37
|
+
chat(userMessage: string): Promise<CEOResponse>;
|
|
38
|
+
/** Reset conversation for a new goal */
|
|
39
|
+
resetConversation(): void;
|
|
40
|
+
/** Get conversation context as a string for decomposition */
|
|
41
|
+
getConversationContext(): string;
|
|
42
|
+
buildDecompositionPrompt(goal: string, roster: AgentRoster[], context?: string): string;
|
|
30
43
|
parseDecomposition(response: string): DecompositionResult;
|
|
31
44
|
decompose(goal: string, roster: AgentRoster[]): Promise<DecompositionResult>;
|
|
32
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ceo-brain.d.ts","sourceRoot":"","sources":["../../src/engine/ceo-brain.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,EAAE,CAAC;CACL;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAA0B;
|
|
1
|
+
{"version":3,"file":"ceo-brain.d.ts","sourceRoot":"","sources":["../../src/engine/ceo-brain.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,mBAAmB,CAAyD;gBAExE,MAAM,EAAE,cAAc;IAWlC,4CAA4C;IACtC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAqCrD,wCAAwC;IACxC,iBAAiB,IAAI,IAAI;IAIzB,6DAA6D;IAC7D,sBAAsB,IAAI,MAAM;IAMhC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IA4CvF,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IA2BnD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAyBnF"}
|
package/dist/engine/ceo-brain.js
CHANGED
|
@@ -5,9 +5,45 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.CEOBrain = void 0;
|
|
7
7
|
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
8
|
+
const CEO_SYSTEM_PROMPT = `You are Sage, the CEO of Sage Team — an AI software company with 11 specialized agents. You are warm, professional, and strategic. You speak directly but with personality.
|
|
9
|
+
|
|
10
|
+
Your job is to understand what the user wants to build BEFORE assigning any work to your team. You act like a real CEO: you listen, ask smart questions, and make sure you fully understand the scope.
|
|
11
|
+
|
|
12
|
+
## Your Personality
|
|
13
|
+
- Confident but not arrogant
|
|
14
|
+
- Direct and efficient — you value everyone's time
|
|
15
|
+
- You use the team members' names naturally (Nova the CTO, Dex the senior dev, Uma the designer, etc.)
|
|
16
|
+
- You occasionally reference your team's strengths ("Dex loves a good TDD challenge", "Uma has great taste in UI")
|
|
17
|
+
- You speak in first person as Sage
|
|
18
|
+
|
|
19
|
+
## Conversation Flow
|
|
20
|
+
When the user describes a project:
|
|
21
|
+
1. Acknowledge what they want
|
|
22
|
+
2. Ask 2-4 clarifying questions about scope, tech preferences, design style, etc.
|
|
23
|
+
3. When you have enough info, summarize the plan and say you're ready
|
|
24
|
+
|
|
25
|
+
## Response Format
|
|
26
|
+
ALWAYS respond with ONLY valid JSON (no markdown, no explanation):
|
|
27
|
+
|
|
28
|
+
When you need more info:
|
|
29
|
+
{
|
|
30
|
+
"type": "question",
|
|
31
|
+
"message": "Your conversational response to the user",
|
|
32
|
+
"questions": ["Question 1?", "Question 2?"]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
When you're ready to start (you have enough context):
|
|
36
|
+
{
|
|
37
|
+
"type": "ready",
|
|
38
|
+
"message": "Your conversational response summarizing the plan",
|
|
39
|
+
"summary": "Concise technical summary of what will be built"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
IMPORTANT: Only set type="ready" when you genuinely have enough context. If the user's goal is very simple and clear (like "create a hello world page"), you can skip questions and go straight to ready.`;
|
|
8
43
|
class CEOBrain {
|
|
9
44
|
config;
|
|
10
45
|
client = null;
|
|
46
|
+
conversationHistory = [];
|
|
11
47
|
constructor(config) {
|
|
12
48
|
this.config = config;
|
|
13
49
|
if (config.apiKey === 'test') {
|
|
@@ -17,15 +53,60 @@ class CEOBrain {
|
|
|
17
53
|
this.client = new sdk_1.default({ apiKey: config.apiKey });
|
|
18
54
|
}
|
|
19
55
|
else if (process.env.ANTHROPIC_API_KEY) {
|
|
20
|
-
// SDK reads ANTHROPIC_API_KEY from environment automatically
|
|
21
56
|
this.client = new sdk_1.default();
|
|
22
57
|
}
|
|
23
58
|
}
|
|
24
|
-
|
|
59
|
+
/** Start a conversation about a new goal */
|
|
60
|
+
async chat(userMessage) {
|
|
61
|
+
if (!this.client) {
|
|
62
|
+
throw new Error('CEO Brain not initialized: no API key');
|
|
63
|
+
}
|
|
64
|
+
this.conversationHistory.push({ role: 'user', content: userMessage });
|
|
65
|
+
const response = await this.client.messages.create({
|
|
66
|
+
model: this.config.model,
|
|
67
|
+
max_tokens: 1024,
|
|
68
|
+
system: CEO_SYSTEM_PROMPT,
|
|
69
|
+
messages: this.conversationHistory,
|
|
70
|
+
});
|
|
71
|
+
const text = response.content
|
|
72
|
+
.filter(block => block.type === 'text')
|
|
73
|
+
.map(block => block.text)
|
|
74
|
+
.join('');
|
|
75
|
+
this.conversationHistory.push({ role: 'assistant', content: text });
|
|
76
|
+
// Parse the JSON response
|
|
77
|
+
try {
|
|
78
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
79
|
+
const parsed = JSON.parse(jsonMatch ? jsonMatch[0] : text);
|
|
80
|
+
return {
|
|
81
|
+
type: parsed.type || 'question',
|
|
82
|
+
message: parsed.message || text,
|
|
83
|
+
questions: parsed.questions,
|
|
84
|
+
summary: parsed.summary,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// If JSON parsing fails, treat as a question
|
|
89
|
+
return { type: 'question', message: text };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Reset conversation for a new goal */
|
|
93
|
+
resetConversation() {
|
|
94
|
+
this.conversationHistory = [];
|
|
95
|
+
}
|
|
96
|
+
/** Get conversation context as a string for decomposition */
|
|
97
|
+
getConversationContext() {
|
|
98
|
+
return this.conversationHistory
|
|
99
|
+
.map(m => `${m.role === 'user' ? 'User' : 'Sage'}: ${m.content}`)
|
|
100
|
+
.join('\n\n');
|
|
101
|
+
}
|
|
102
|
+
buildDecompositionPrompt(goal, roster, context) {
|
|
25
103
|
const agentList = roster.map(a => `- **${a.name}** (${a.id}): ${a.role} — skills: ${a.skills.join(', ')}`).join('\n');
|
|
104
|
+
const contextBlock = context
|
|
105
|
+
? `## Conversation Context\n${context}\n\n`
|
|
106
|
+
: '';
|
|
26
107
|
return `You are Sage, CEO of an AI software company. Decompose this goal into a sprint with concrete tasks.
|
|
27
108
|
|
|
28
|
-
## Goal
|
|
109
|
+
${contextBlock}## Goal
|
|
29
110
|
${goal}
|
|
30
111
|
|
|
31
112
|
## Available Team
|
|
@@ -84,7 +165,11 @@ Respond with ONLY valid JSON (no markdown, no explanation):
|
|
|
84
165
|
if (!this.client) {
|
|
85
166
|
throw new Error('CEO Brain not initialized: no API key');
|
|
86
167
|
}
|
|
87
|
-
|
|
168
|
+
// Include conversation context if available
|
|
169
|
+
const context = this.conversationHistory.length > 0
|
|
170
|
+
? this.getConversationContext()
|
|
171
|
+
: undefined;
|
|
172
|
+
const prompt = this.buildDecompositionPrompt(goal, roster, context);
|
|
88
173
|
const response = await this.client.messages.create({
|
|
89
174
|
model: this.config.model,
|
|
90
175
|
max_tokens: 4096,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ceo-brain.js","sourceRoot":"","sources":["../../src/engine/ceo-brain.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA0C;
|
|
1
|
+
{"version":3,"file":"ceo-brain.js","sourceRoot":"","sources":["../../src/engine/ceo-brain.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,12 +27,17 @@ export interface RunningProcess {
|
|
|
27
27
|
export declare class Dispatcher extends EventEmitter {
|
|
28
28
|
private config;
|
|
29
29
|
private running;
|
|
30
|
+
private claudePath;
|
|
30
31
|
constructor(config: DispatcherConfig);
|
|
32
|
+
/** Find the claude executable — cache it for reuse */
|
|
33
|
+
private findClaude;
|
|
31
34
|
availableSlots(): number;
|
|
32
35
|
runningCount(): number;
|
|
33
36
|
buildCommand(input: SpawnCommandInput): SpawnCommand;
|
|
34
37
|
parseStreamEvent(line: string): StreamEvent | null;
|
|
35
38
|
toolToStatus(toolName: string): string;
|
|
39
|
+
/** Extract human-readable detail from a tool_use event */
|
|
40
|
+
extractToolDetail(event: StreamEvent): string;
|
|
36
41
|
spawnAgent(agentId: string, taskId: string, systemPrompt: string, taskPrompt: string, cwd: string, maxTurns?: number): Promise<void>;
|
|
37
42
|
killAgent(taskId: string): boolean;
|
|
38
43
|
killAll(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/engine/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/engine/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,UAAU,CAAuB;gBAE7B,MAAM,EAAE,gBAAgB;IAKpC,sDAAsD;IACtD,OAAO,CAAC,UAAU;IA2BlB,cAAc,IAAI,MAAM;IAIxB,YAAY,IAAI,MAAM;IAItB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY;IAiBpD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAQlD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAItC,0DAA0D;IAC1D,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM;IA0BvC,UAAU,CACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,IAAI,CAAC;IAiFhB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAQlC,OAAO,IAAI,IAAI;CAMhB"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.Dispatcher = void 0;
|
|
4
7
|
const child_process_1 = require("child_process");
|
|
8
|
+
const child_process_2 = require("child_process");
|
|
5
9
|
const events_1 = require("events");
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
6
11
|
const TOOL_STATUS_MAP = {
|
|
7
12
|
Edit: 'coding',
|
|
8
13
|
Write: 'coding',
|
|
@@ -15,10 +20,43 @@ const TOOL_STATUS_MAP = {
|
|
|
15
20
|
class Dispatcher extends events_1.EventEmitter {
|
|
16
21
|
config;
|
|
17
22
|
running = new Map();
|
|
23
|
+
claudePath = null;
|
|
18
24
|
constructor(config) {
|
|
19
25
|
super();
|
|
20
26
|
this.config = config;
|
|
21
27
|
}
|
|
28
|
+
/** Find the claude executable — cache it for reuse */
|
|
29
|
+
findClaude() {
|
|
30
|
+
if (this.claudePath)
|
|
31
|
+
return this.claudePath;
|
|
32
|
+
if (process.platform === 'win32') {
|
|
33
|
+
// Prefer native .exe — does NOT need cmd.exe / shell: true
|
|
34
|
+
const fs = require('fs');
|
|
35
|
+
const exePaths = [
|
|
36
|
+
path_1.default.join(process.env.USERPROFILE || '', '.local', 'bin', 'claude.exe'),
|
|
37
|
+
path_1.default.join(process.env.LOCALAPPDATA || '', 'Programs', 'claude', 'claude.exe'),
|
|
38
|
+
];
|
|
39
|
+
for (const p of exePaths) {
|
|
40
|
+
if (fs.existsSync(p)) {
|
|
41
|
+
this.claudePath = p;
|
|
42
|
+
return this.claudePath;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Fallback: try where command (which uses cmd.exe — may fail in MCP context)
|
|
46
|
+
try {
|
|
47
|
+
const lines = (0, child_process_2.execSync)('where claude.exe', { encoding: 'utf-8' }).trim().split('\n');
|
|
48
|
+
const exeLine = lines.find((l) => l.trim().endsWith('.exe'));
|
|
49
|
+
if (exeLine) {
|
|
50
|
+
this.claudePath = exeLine.trim();
|
|
51
|
+
return this.claudePath;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch { /* continue */ }
|
|
55
|
+
}
|
|
56
|
+
// Unix or fallback
|
|
57
|
+
this.claudePath = 'claude';
|
|
58
|
+
return this.claudePath;
|
|
59
|
+
}
|
|
22
60
|
availableSlots() {
|
|
23
61
|
return this.config.maxConcurrent - this.running.size;
|
|
24
62
|
}
|
|
@@ -29,13 +67,13 @@ class Dispatcher extends events_1.EventEmitter {
|
|
|
29
67
|
const args = [
|
|
30
68
|
'--print',
|
|
31
69
|
'--output-format', 'stream-json',
|
|
70
|
+
'--dangerously-skip-permissions',
|
|
32
71
|
'--system-prompt', input.systemPrompt,
|
|
33
|
-
'--permission-mode', 'bypassPermissions',
|
|
34
72
|
'--max-turns', String(input.maxTurns),
|
|
35
73
|
input.taskPrompt, // positional argument (last)
|
|
36
74
|
];
|
|
37
75
|
return {
|
|
38
|
-
command:
|
|
76
|
+
command: this.findClaude(),
|
|
39
77
|
args,
|
|
40
78
|
cwd: input.cwd,
|
|
41
79
|
};
|
|
@@ -51,6 +89,32 @@ class Dispatcher extends events_1.EventEmitter {
|
|
|
51
89
|
toolToStatus(toolName) {
|
|
52
90
|
return TOOL_STATUS_MAP[toolName] || 'thinking';
|
|
53
91
|
}
|
|
92
|
+
/** Extract human-readable detail from a tool_use event */
|
|
93
|
+
extractToolDetail(event) {
|
|
94
|
+
const input = event.input;
|
|
95
|
+
if (!input)
|
|
96
|
+
return '';
|
|
97
|
+
const tool = event.tool;
|
|
98
|
+
switch (tool) {
|
|
99
|
+
case 'Edit':
|
|
100
|
+
case 'Write':
|
|
101
|
+
case 'Read': {
|
|
102
|
+
const fp = input.file_path || input.path || '';
|
|
103
|
+
const file = fp.split(/[/\\]/).pop() || fp;
|
|
104
|
+
return file ? file : '';
|
|
105
|
+
}
|
|
106
|
+
case 'Bash': {
|
|
107
|
+
const cmd = (input.command || '').slice(0, 80);
|
|
108
|
+
return cmd;
|
|
109
|
+
}
|
|
110
|
+
case 'Grep':
|
|
111
|
+
case 'Glob': {
|
|
112
|
+
return input.pattern || input.glob || '';
|
|
113
|
+
}
|
|
114
|
+
default:
|
|
115
|
+
return '';
|
|
116
|
+
}
|
|
117
|
+
}
|
|
54
118
|
async spawnAgent(agentId, taskId, systemPrompt, taskPrompt, cwd, maxTurns = 50) {
|
|
55
119
|
if (this.availableSlots() <= 0) {
|
|
56
120
|
throw new Error('No available slots');
|
|
@@ -59,7 +123,6 @@ class Dispatcher extends events_1.EventEmitter {
|
|
|
59
123
|
const proc = (0, child_process_1.spawn)(cmd.command, cmd.args, {
|
|
60
124
|
cwd: cmd.cwd,
|
|
61
125
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
62
|
-
shell: true,
|
|
63
126
|
env: { ...process.env },
|
|
64
127
|
});
|
|
65
128
|
const runningProc = {
|
|
@@ -83,7 +146,21 @@ class Dispatcher extends events_1.EventEmitter {
|
|
|
83
146
|
this.emit('stream-event', { agentId, taskId, event });
|
|
84
147
|
if (event.type === 'tool_use' && event.tool) {
|
|
85
148
|
const status = this.toolToStatus(event.tool);
|
|
86
|
-
this.
|
|
149
|
+
const detail = this.extractToolDetail(event);
|
|
150
|
+
this.emit('agent-status', { agentId, status, tool: event.tool, detail });
|
|
151
|
+
}
|
|
152
|
+
if (event.type === 'assistant' && event.message) {
|
|
153
|
+
// Claude's text output — narration from the agent
|
|
154
|
+
const msg = event.message;
|
|
155
|
+
if (msg.content) {
|
|
156
|
+
const textBlocks = (Array.isArray(msg.content) ? msg.content : [msg.content])
|
|
157
|
+
.filter((b) => b.type === 'text' || typeof b === 'string')
|
|
158
|
+
.map((b) => typeof b === 'string' ? b : b.text)
|
|
159
|
+
.join('');
|
|
160
|
+
if (textBlocks.length > 0 && textBlocks.length < 500) {
|
|
161
|
+
this.emit('agent-narration', { agentId, taskId, text: textBlocks.slice(0, 200) });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
87
164
|
}
|
|
88
165
|
if (event.type === 'result') {
|
|
89
166
|
this.emit('task-complete', {
|
|
@@ -92,6 +169,7 @@ class Dispatcher extends events_1.EventEmitter {
|
|
|
92
169
|
cost: event.cost_usd,
|
|
93
170
|
duration: event.duration_ms,
|
|
94
171
|
turns: event.turns,
|
|
172
|
+
result: typeof event.result === 'string' ? event.result.slice(0, 300) : '',
|
|
95
173
|
});
|
|
96
174
|
}
|
|
97
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/engine/dispatcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/engine/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
import { Database } from '../state/database';
|
|
3
|
+
import { CEOResponse } from './ceo-brain';
|
|
3
4
|
import type { Session, AutonomyMode } from '../types';
|
|
4
5
|
export interface OrchestratorConfig {
|
|
5
6
|
apiKey: string;
|
|
@@ -33,6 +34,10 @@ export declare class Orchestrator extends EventEmitter {
|
|
|
33
34
|
start(goal?: string): Session;
|
|
34
35
|
resume(sessionId: string): boolean;
|
|
35
36
|
stop(): void;
|
|
37
|
+
/** Chat with CEO Sage before starting a sprint */
|
|
38
|
+
chatWithCEO(message: string): Promise<CEOResponse>;
|
|
39
|
+
/** Start the sprint after CEO conversation — uses conversation context */
|
|
40
|
+
launchSprint(goal: string): Promise<void>;
|
|
36
41
|
submitGoal(goal: string): Promise<void>;
|
|
37
42
|
private startTickLoop;
|
|
38
43
|
private tick;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/engine/orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/engine/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAQ7C,OAAO,EAAY,WAAW,EAAe,MAAM,aAAa,CAAC;AAOjE,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,MAAM,CAAqB;IAGnC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,YAAY,CAAmB;IAGvC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,OAAO,CAAS;IAExB,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;gBAEW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB;IAwBpD,OAAO,CAAC,wBAAwB;IA2BhC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAoB7B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAiBlC,IAAI,IAAI,IAAI;IASZ,kDAAkD;IAC5C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBxD,0EAA0E;IACpE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAazC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D7C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,IAAI;IAoEZ,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,mBAAmB;IAiB3B,SAAS,IAAI,GAAG,EAAE;IAKlB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAKvC,QAAQ,IAAI,GAAG,EAAE;IAKjB,aAAa,IAAI,GAAG,EAAE;IAKhB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU9C,OAAO,CAAC,SAAS;CAMlB"}
|