@x-code-cli/core 0.1.10 → 0.2.0
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/agent/api-errors.d.ts.map +1 -1
- package/dist/agent/api-errors.js +18 -0
- package/dist/agent/api-errors.js.map +1 -1
- package/dist/agent/diff.d.ts +35 -0
- package/dist/agent/diff.d.ts.map +1 -0
- package/dist/agent/diff.js +83 -0
- package/dist/agent/diff.js.map +1 -0
- package/dist/agent/loop-state.d.ts +45 -3
- package/dist/agent/loop-state.d.ts.map +1 -1
- package/dist/agent/loop-state.js +24 -3
- package/dist/agent/loop-state.js.map +1 -1
- package/dist/agent/loop.d.ts +10 -6
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +212 -30
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/plan-storage.d.ts +55 -0
- package/dist/agent/plan-storage.d.ts.map +1 -0
- package/dist/agent/plan-storage.js +156 -0
- package/dist/agent/plan-storage.js.map +1 -0
- package/dist/agent/session-store.d.ts +114 -0
- package/dist/agent/session-store.d.ts.map +1 -0
- package/dist/agent/session-store.js +415 -0
- package/dist/agent/session-store.js.map +1 -0
- package/dist/agent/sub-agents/built-in.d.ts +3 -0
- package/dist/agent/sub-agents/built-in.d.ts.map +1 -0
- package/dist/agent/sub-agents/built-in.js +98 -0
- package/dist/agent/sub-agents/built-in.js.map +1 -0
- package/dist/agent/sub-agents/index.d.ts +7 -0
- package/dist/agent/sub-agents/index.d.ts.map +1 -0
- package/dist/agent/sub-agents/index.js +5 -0
- package/dist/agent/sub-agents/index.js.map +1 -0
- package/dist/agent/sub-agents/loader.d.ts +5 -0
- package/dist/agent/sub-agents/loader.d.ts.map +1 -0
- package/dist/agent/sub-agents/loader.js +117 -0
- package/dist/agent/sub-agents/loader.js.map +1 -0
- package/dist/agent/sub-agents/registry.d.ts +14 -0
- package/dist/agent/sub-agents/registry.d.ts.map +1 -0
- package/dist/agent/sub-agents/registry.js +37 -0
- package/dist/agent/sub-agents/registry.js.map +1 -0
- package/dist/agent/sub-agents/runner.d.ts +26 -0
- package/dist/agent/sub-agents/runner.d.ts.map +1 -0
- package/dist/agent/sub-agents/runner.js +287 -0
- package/dist/agent/sub-agents/runner.js.map +1 -0
- package/dist/agent/sub-agents/types.d.ts +63 -0
- package/dist/agent/sub-agents/types.d.ts.map +1 -0
- package/dist/agent/sub-agents/types.js +2 -0
- package/dist/agent/sub-agents/types.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +15 -0
- package/dist/agent/system-prompt.d.ts.map +1 -1
- package/dist/agent/system-prompt.js +161 -0
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/tool-execution.d.ts +4 -3
- package/dist/agent/tool-execution.d.ts.map +1 -1
- package/dist/agent/tool-execution.js +316 -14
- package/dist/agent/tool-execution.js.map +1 -1
- package/dist/agent/tool-result-sanitize.d.ts +12 -0
- package/dist/agent/tool-result-sanitize.d.ts.map +1 -1
- package/dist/agent/tool-result-sanitize.js +70 -0
- package/dist/agent/tool-result-sanitize.js.map +1 -1
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/knowledge/session.d.ts +4 -7
- package/dist/knowledge/session.d.ts.map +1 -1
- package/dist/knowledge/session.js +20 -55
- package/dist/knowledge/session.js.map +1 -1
- package/dist/permissions/index.d.ts +18 -3
- package/dist/permissions/index.d.ts.map +1 -1
- package/dist/permissions/index.js +20 -2
- package/dist/permissions/index.js.map +1 -1
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +8 -6
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/enter-plan-mode.d.ts +25 -0
- package/dist/tools/enter-plan-mode.d.ts.map +1 -0
- package/dist/tools/enter-plan-mode.js +120 -0
- package/dist/tools/enter-plan-mode.js.map +1 -0
- package/dist/tools/exit-plan-mode.d.ts +13 -0
- package/dist/tools/exit-plan-mode.d.ts.map +1 -0
- package/dist/tools/exit-plan-mode.js +22 -0
- package/dist/tools/exit-plan-mode.js.map +1 -0
- package/dist/tools/grep.d.ts +1 -1
- package/dist/tools/index.d.ts +20 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/save-knowledge.d.ts +2 -2
- package/dist/tools/shell-provider.d.ts +4 -0
- package/dist/tools/shell-provider.d.ts.map +1 -1
- package/dist/tools/shell-provider.js +2 -0
- package/dist/tools/shell-provider.js.map +1 -1
- package/dist/tools/task.d.ts +14 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +95 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todo-write.d.ts +21 -0
- package/dist/tools/todo-write.d.ts.map +1 -0
- package/dist/tools/todo-write.js +117 -0
- package/dist/tools/todo-write.js.map +1 -0
- package/dist/types/index.d.ts +103 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/knowledge/session-usage.d.ts +0 -24
- package/dist/knowledge/session-usage.d.ts.map +0 -1
- package/dist/knowledge/session-usage.js +0 -86
- package/dist/knowledge/session-usage.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// @x-code-cli/core — Custom sub-agent loader
|
|
2
|
+
//
|
|
3
|
+
// Scans ~/.x-code/agents/*.md and <repo-root>/.x-code/agents/*.md for
|
|
4
|
+
// user-defined sub-agents with YAML frontmatter. Bad files are skipped
|
|
5
|
+
// with a warning to stderr — one broken agent file must never crash the CLI.
|
|
6
|
+
import fs from 'node:fs/promises';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { GLOBAL_XCODE_DIR, XCODE_DIR } from '../../utils.js';
|
|
10
|
+
const frontmatterSchema = z.object({
|
|
11
|
+
name: z.string().min(1),
|
|
12
|
+
description: z.string().min(1),
|
|
13
|
+
tools: z.array(z.string()).optional(),
|
|
14
|
+
disallowedTools: z.array(z.string()).optional(),
|
|
15
|
+
model: z.string().optional(),
|
|
16
|
+
maxTurns: z.number().int().positive().optional(),
|
|
17
|
+
shellRestrictions: z.array(z.string()).optional(),
|
|
18
|
+
});
|
|
19
|
+
/** Minimal YAML frontmatter parser. Handles the subset we need:
|
|
20
|
+
* string scalars, number scalars, and inline/flow arrays.
|
|
21
|
+
* No dependency on gray-matter — keeps the install lean. */
|
|
22
|
+
function parseFrontmatter(raw) {
|
|
23
|
+
const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
24
|
+
if (!match)
|
|
25
|
+
return null;
|
|
26
|
+
const yamlBlock = match[1];
|
|
27
|
+
const body = match[2];
|
|
28
|
+
const data = {};
|
|
29
|
+
for (const line of yamlBlock.split(/\r?\n/)) {
|
|
30
|
+
const trimmed = line.trim();
|
|
31
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
32
|
+
continue;
|
|
33
|
+
const colonIdx = trimmed.indexOf(':');
|
|
34
|
+
if (colonIdx < 1)
|
|
35
|
+
continue;
|
|
36
|
+
const key = trimmed.slice(0, colonIdx).trim();
|
|
37
|
+
let value = trimmed.slice(colonIdx + 1).trim();
|
|
38
|
+
// Inline array: [a, b, c]
|
|
39
|
+
if (value.startsWith('[') && value.endsWith(']')) {
|
|
40
|
+
const inner = value.slice(1, -1);
|
|
41
|
+
data[key] = inner
|
|
42
|
+
.split(',')
|
|
43
|
+
.map((s) => s.trim().replace(/^['"]|['"]$/g, ''))
|
|
44
|
+
.filter(Boolean);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
// Strip quotes
|
|
48
|
+
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
49
|
+
value = value.slice(1, -1);
|
|
50
|
+
}
|
|
51
|
+
// Number
|
|
52
|
+
if (/^\d+$/.test(value)) {
|
|
53
|
+
data[key] = parseInt(value, 10);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
data[key] = value;
|
|
57
|
+
}
|
|
58
|
+
return { data, body };
|
|
59
|
+
}
|
|
60
|
+
async function loadAgentsFromDir(dir, source) {
|
|
61
|
+
const agents = [];
|
|
62
|
+
let entries;
|
|
63
|
+
try {
|
|
64
|
+
entries = await fs.readdir(dir);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return agents;
|
|
68
|
+
}
|
|
69
|
+
for (const entry of entries) {
|
|
70
|
+
if (!entry.endsWith('.md'))
|
|
71
|
+
continue;
|
|
72
|
+
const filePath = path.join(dir, entry);
|
|
73
|
+
try {
|
|
74
|
+
const raw = await fs.readFile(filePath, 'utf-8');
|
|
75
|
+
const parsed = parseFrontmatter(raw);
|
|
76
|
+
if (!parsed) {
|
|
77
|
+
console.error(`[sub-agents] Skipping ${filePath}: no valid YAML frontmatter`);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const result = frontmatterSchema.safeParse(parsed.data);
|
|
81
|
+
if (!result.success) {
|
|
82
|
+
console.error(`[sub-agents] Skipping ${filePath}: invalid frontmatter — ${result.error.issues.map((i) => i.message).join(', ')}`);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const fm = result.data;
|
|
86
|
+
agents.push({
|
|
87
|
+
name: fm.name,
|
|
88
|
+
description: fm.description,
|
|
89
|
+
prompt: parsed.body.trim(),
|
|
90
|
+
tools: fm.tools,
|
|
91
|
+
disallowedTools: fm.disallowedTools,
|
|
92
|
+
model: fm.model,
|
|
93
|
+
maxTurns: fm.maxTurns ?? 30,
|
|
94
|
+
shellRestrictions: fm.shellRestrictions,
|
|
95
|
+
source,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
console.error(`[sub-agents] Skipping ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return agents;
|
|
103
|
+
}
|
|
104
|
+
/** Load custom sub-agents from global + project directories.
|
|
105
|
+
* Environment variable `XC_AGENTS_DIR` overrides paths (testing only). */
|
|
106
|
+
export async function loadCustomAgents() {
|
|
107
|
+
const override = process.env.XC_AGENTS_DIR;
|
|
108
|
+
if (override) {
|
|
109
|
+
return loadAgentsFromDir(override, 'project');
|
|
110
|
+
}
|
|
111
|
+
const globalDir = path.join(GLOBAL_XCODE_DIR, 'agents');
|
|
112
|
+
const projectDir = path.join(process.cwd(), XCODE_DIR, 'agents');
|
|
113
|
+
const globalAgents = await loadAgentsFromDir(globalDir, 'global');
|
|
114
|
+
const projectAgents = await loadAgentsFromDir(projectDir, 'project');
|
|
115
|
+
return [...globalAgents, ...projectAgents];
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/agent/sub-agents/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SubAgentDefinition } from './types.js';
|
|
2
|
+
export declare class SubAgentRegistry {
|
|
3
|
+
private agents;
|
|
4
|
+
constructor(agents: SubAgentDefinition[]);
|
|
5
|
+
get(name: string): SubAgentDefinition | undefined;
|
|
6
|
+
list(): SubAgentDefinition[];
|
|
7
|
+
names(): string[];
|
|
8
|
+
}
|
|
9
|
+
/** Build the registry: built-in first, then custom (later entries override). */
|
|
10
|
+
export declare function createSubAgentRegistry(): Promise<SubAgentRegistry>;
|
|
11
|
+
/** Synchronous registry with only built-in agents (for testing or when
|
|
12
|
+
* disk scan should be skipped). */
|
|
13
|
+
export declare function createBuiltInRegistry(): SubAgentRegistry;
|
|
14
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agent/sub-agents/registry.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAiC;gBAEnC,MAAM,EAAE,kBAAkB,EAAE;IAOxC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIjD,IAAI,IAAI,kBAAkB,EAAE;IAI5B,KAAK,IAAI,MAAM,EAAE;CAGlB;AAED,gFAAgF;AAChF,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAIxE;AAED;oCACoC;AACpC,wBAAgB,qBAAqB,IAAI,gBAAgB,CAExD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// @x-code-cli/core — Sub-agent registry
|
|
2
|
+
//
|
|
3
|
+
// Constructed once at startup, immutable for the session lifetime.
|
|
4
|
+
// Built-in agents load synchronously; custom agents from disk are async.
|
|
5
|
+
// Same-name custom agents override built-ins (project > global > built-in).
|
|
6
|
+
import { builtInAgents } from './built-in.js';
|
|
7
|
+
import { loadCustomAgents } from './loader.js';
|
|
8
|
+
export class SubAgentRegistry {
|
|
9
|
+
agents;
|
|
10
|
+
constructor(agents) {
|
|
11
|
+
this.agents = new Map();
|
|
12
|
+
for (const a of agents) {
|
|
13
|
+
this.agents.set(a.name, a);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
get(name) {
|
|
17
|
+
return this.agents.get(name);
|
|
18
|
+
}
|
|
19
|
+
list() {
|
|
20
|
+
return [...this.agents.values()];
|
|
21
|
+
}
|
|
22
|
+
names() {
|
|
23
|
+
return [...this.agents.keys()];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Build the registry: built-in first, then custom (later entries override). */
|
|
27
|
+
export async function createSubAgentRegistry() {
|
|
28
|
+
const custom = await loadCustomAgents();
|
|
29
|
+
// Load order: built-in → custom. Map insertion overwrites, so custom wins.
|
|
30
|
+
return new SubAgentRegistry([...builtInAgents, ...custom]);
|
|
31
|
+
}
|
|
32
|
+
/** Synchronous registry with only built-in agents (for testing or when
|
|
33
|
+
* disk scan should be skipped). */
|
|
34
|
+
export function createBuiltInRegistry() {
|
|
35
|
+
return new SubAgentRegistry(builtInAgents);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agent/sub-agents/registry.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,mEAAmE;AACnE,yEAAyE;AACzE,4EAA4E;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAiC;IAE/C,YAAY,MAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAA;QACvB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,KAAK;QACH,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAChC,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAA;IACvC,2EAA2E;IAC3E,OAAO,IAAI,gBAAgB,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED;oCACoC;AACpC,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAA;AAC5C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LanguageModel } from 'ai';
|
|
2
|
+
import type { AgentCallbacks, AgentOptions, TokenUsage } from '../../types/index.js';
|
|
3
|
+
import type { LoopState } from '../loop-state.js';
|
|
4
|
+
export interface RunSubAgentArgs {
|
|
5
|
+
parentState: LoopState;
|
|
6
|
+
parentOptions: AgentOptions;
|
|
7
|
+
callbacks: AgentCallbacks;
|
|
8
|
+
toolCallId: string;
|
|
9
|
+
agentName: string;
|
|
10
|
+
description: string;
|
|
11
|
+
prompt: string;
|
|
12
|
+
knowledgeContext: string;
|
|
13
|
+
isGitRepo: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface RunSubAgentResult {
|
|
16
|
+
resultText: string;
|
|
17
|
+
tokenUsage: TokenUsage;
|
|
18
|
+
turnCount: number;
|
|
19
|
+
toolCallCount: number;
|
|
20
|
+
durationMs: number;
|
|
21
|
+
aborted: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Resolve the model to use for the sub-agent. Need the actual LanguageModel
|
|
24
|
+
* instance from the parent since we pass it to agentLoop. */
|
|
25
|
+
export declare function runSubAgent(args: RunSubAgentArgs, parentModel: LanguageModel): Promise<RunSubAgentResult>;
|
|
26
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/agent/sub-agents/runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAIpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAKjD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,SAAS,CAAA;IACtB,aAAa,EAAE,YAAY,CAAA;IAC3B,SAAS,EAAE,cAAc,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB;AAqDD;8DAC8D;AAC9D,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,aAAa,GACzB,OAAO,CAAC,iBAAiB,CAAC,CAwN5B"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { resolveModelId } from '../../config/index.js';
|
|
2
|
+
import { debugLog } from '../../utils.js';
|
|
3
|
+
import { agentLoop } from '../loop.js';
|
|
4
|
+
import { createLoopState } from '../loop-state.js';
|
|
5
|
+
import { buildSubAgentSystemPrompt } from '../system-prompt.js';
|
|
6
|
+
/** Extract the last assistant text from a message array (skipping tool-call parts). */
|
|
7
|
+
function extractFinalText(messages) {
|
|
8
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
9
|
+
const msg = messages[i];
|
|
10
|
+
if (!msg || msg.role !== 'assistant')
|
|
11
|
+
continue;
|
|
12
|
+
const content = msg.content;
|
|
13
|
+
if (typeof content === 'string')
|
|
14
|
+
return content.trim();
|
|
15
|
+
if (Array.isArray(content)) {
|
|
16
|
+
const textParts = content
|
|
17
|
+
.filter((p) => p?.type === 'text' && typeof p.text === 'string')
|
|
18
|
+
.map((p) => p.text);
|
|
19
|
+
const joined = textParts.join('').trim();
|
|
20
|
+
if (joined)
|
|
21
|
+
return joined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
function resolveSubModel(agentDef, parentOptions, parentModel) {
|
|
27
|
+
if (!agentDef.model)
|
|
28
|
+
return parentModel;
|
|
29
|
+
if (!parentOptions.modelRegistry)
|
|
30
|
+
return parentModel;
|
|
31
|
+
const resolvedId = resolveModelId(agentDef.model);
|
|
32
|
+
if (!resolvedId)
|
|
33
|
+
return parentModel;
|
|
34
|
+
try {
|
|
35
|
+
return parentOptions.modelRegistry.languageModel(resolvedId);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
debugLog('sub-agent.model', `Failed to resolve model "${agentDef.model}", falling back to parent model`);
|
|
39
|
+
return parentModel;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function buildToolFilter(agentDef, parentPermissionMode) {
|
|
43
|
+
const deny = [...(agentDef.disallowedTools ?? []), 'task'];
|
|
44
|
+
// In plan mode, deny write tools for general-purpose agent
|
|
45
|
+
if (parentPermissionMode === 'plan' && agentDef.name === 'general-purpose') {
|
|
46
|
+
deny.push('writeFile', 'edit');
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
allow: agentDef.tools,
|
|
50
|
+
deny,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Resolve the model to use for the sub-agent. Need the actual LanguageModel
|
|
54
|
+
* instance from the parent since we pass it to agentLoop. */
|
|
55
|
+
export async function runSubAgent(args, parentModel) {
|
|
56
|
+
const { parentState, parentOptions, callbacks, toolCallId, agentName, description, prompt, knowledgeContext, isGitRepo } = args;
|
|
57
|
+
const startTime = Date.now();
|
|
58
|
+
const registry = parentOptions.subAgentRegistry;
|
|
59
|
+
if (!registry) {
|
|
60
|
+
return {
|
|
61
|
+
resultText: '[Sub-agent system not initialized]',
|
|
62
|
+
tokenUsage: zeroUsage(),
|
|
63
|
+
turnCount: 0,
|
|
64
|
+
toolCallCount: 0,
|
|
65
|
+
durationMs: 0,
|
|
66
|
+
aborted: false,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const agentDef = registry.get(agentName);
|
|
70
|
+
if (!agentDef) {
|
|
71
|
+
const available = registry.names().join(', ');
|
|
72
|
+
return {
|
|
73
|
+
resultText: `[Sub-agent '${agentName}' not found. Available: ${available}]`,
|
|
74
|
+
tokenUsage: zeroUsage(),
|
|
75
|
+
turnCount: 0,
|
|
76
|
+
toolCallCount: 0,
|
|
77
|
+
durationMs: 0,
|
|
78
|
+
aborted: false,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Notify UI
|
|
82
|
+
callbacks.onSubAgentEvent?.({
|
|
83
|
+
kind: 'start',
|
|
84
|
+
toolCallId,
|
|
85
|
+
agentName,
|
|
86
|
+
description,
|
|
87
|
+
prompt,
|
|
88
|
+
});
|
|
89
|
+
const subModel = resolveSubModel(agentDef, parentOptions, parentModel);
|
|
90
|
+
const subModelId = agentDef.model ? (resolveModelId(agentDef.model) ?? parentOptions.modelId) : parentOptions.modelId;
|
|
91
|
+
const subSystemPrompt = buildSubAgentSystemPrompt({
|
|
92
|
+
agentPrompt: agentDef.prompt,
|
|
93
|
+
knowledgeContext,
|
|
94
|
+
isGitRepo,
|
|
95
|
+
});
|
|
96
|
+
const subState = createLoopState('default');
|
|
97
|
+
subState.systemPromptCache = subSystemPrompt;
|
|
98
|
+
const toolFilter = buildToolFilter(agentDef, parentState.permissionMode);
|
|
99
|
+
const subOptions = {
|
|
100
|
+
...parentOptions,
|
|
101
|
+
modelId: subModelId,
|
|
102
|
+
maxTurns: agentDef.maxTurns,
|
|
103
|
+
toolFilter,
|
|
104
|
+
abortSignal: parentOptions.abortSignal,
|
|
105
|
+
permissionMode: 'default',
|
|
106
|
+
printMode: false,
|
|
107
|
+
// Sub-agents don't get their own sub-agent registry — recursion is forbidden
|
|
108
|
+
subAgentRegistry: undefined,
|
|
109
|
+
};
|
|
110
|
+
// Build sub-agent callbacks: forward events to the parent UI via onSubAgentEvent,
|
|
111
|
+
// but don't mix child state into parent state directly.
|
|
112
|
+
const subCallbacks = {
|
|
113
|
+
onTextDelta: (delta) => {
|
|
114
|
+
callbacks.onSubAgentEvent?.({ kind: 'text-delta', toolCallId, delta });
|
|
115
|
+
},
|
|
116
|
+
onToolCall: (subToolCallId, subToolName, subInput) => {
|
|
117
|
+
callbacks.onSubAgentEvent?.({
|
|
118
|
+
kind: 'tool-call',
|
|
119
|
+
toolCallId,
|
|
120
|
+
subToolName,
|
|
121
|
+
subInput,
|
|
122
|
+
});
|
|
123
|
+
// Also forward to parent's onToolProgress so the live indicator updates
|
|
124
|
+
callbacks.onToolProgress(toolCallId, `${subToolName}: ${previewInput(subToolName, subInput)}`);
|
|
125
|
+
},
|
|
126
|
+
onToolProgress: (_subToolCallId, message) => {
|
|
127
|
+
callbacks.onToolProgress(toolCallId, message);
|
|
128
|
+
},
|
|
129
|
+
onToolResult: (subToolCallId, result, isError) => {
|
|
130
|
+
const preview = result.length > 200 ? result.slice(0, 197) + '...' : result;
|
|
131
|
+
callbacks.onSubAgentEvent?.({
|
|
132
|
+
kind: 'tool-result',
|
|
133
|
+
toolCallId,
|
|
134
|
+
subToolName: subToolCallId,
|
|
135
|
+
resultPreview: preview,
|
|
136
|
+
durationMs: 0,
|
|
137
|
+
isError: isError ?? false,
|
|
138
|
+
});
|
|
139
|
+
},
|
|
140
|
+
onFileEdit: callbacks.onFileEdit,
|
|
141
|
+
onAskPermission: callbacks.onAskPermission,
|
|
142
|
+
onAskUser: callbacks.onAskUser,
|
|
143
|
+
onPlanApprovalRequest: callbacks.onPlanApprovalRequest,
|
|
144
|
+
onPlanModeChange: () => { },
|
|
145
|
+
onTodosUpdate: () => { },
|
|
146
|
+
onShellOutput: callbacks.onShellOutput,
|
|
147
|
+
onUsageUpdate: () => { },
|
|
148
|
+
onContextCompressed: () => { },
|
|
149
|
+
onError: (error) => {
|
|
150
|
+
debugLog('sub-agent.error', `${agentName}: ${error.message}`);
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
let aborted = false;
|
|
154
|
+
try {
|
|
155
|
+
const finalSubState = await agentLoop(prompt, subModel, subOptions, subCallbacks, subState);
|
|
156
|
+
const finalText = extractFinalText(finalSubState.messages);
|
|
157
|
+
const turnCount = finalSubState.turnCount;
|
|
158
|
+
const toolUseCount = countToolCalls(finalSubState.messages);
|
|
159
|
+
// Accumulate sub-agent token usage into parent
|
|
160
|
+
parentState.tokenUsage.inputTokens += finalSubState.tokenUsage.inputTokens;
|
|
161
|
+
parentState.tokenUsage.outputTokens += finalSubState.tokenUsage.outputTokens;
|
|
162
|
+
parentState.tokenUsage.totalTokens = parentState.tokenUsage.inputTokens + parentState.tokenUsage.outputTokens;
|
|
163
|
+
parentState.tokenUsage.cacheReadTokens += finalSubState.tokenUsage.cacheReadTokens;
|
|
164
|
+
parentState.tokenUsage.cacheCreationTokens += finalSubState.tokenUsage.cacheCreationTokens;
|
|
165
|
+
callbacks.onUsageUpdate(parentState.tokenUsage);
|
|
166
|
+
const durationMs = Date.now() - startTime;
|
|
167
|
+
const resultText = finalText || '[Sub-agent completed without producing a final response]';
|
|
168
|
+
callbacks.onSubAgentEvent?.({
|
|
169
|
+
kind: 'end',
|
|
170
|
+
toolCallId,
|
|
171
|
+
finalText: resultText,
|
|
172
|
+
tokenUsage: finalSubState.tokenUsage,
|
|
173
|
+
turnCount,
|
|
174
|
+
durationMs,
|
|
175
|
+
aborted: false,
|
|
176
|
+
});
|
|
177
|
+
if (turnCount >= agentDef.maxTurns && !finalText) {
|
|
178
|
+
return {
|
|
179
|
+
resultText: `[Sub-agent reached max turns (${agentDef.maxTurns}) without finishing. Partial output: ${extractFinalText(finalSubState.messages) || 'none'}]`,
|
|
180
|
+
tokenUsage: finalSubState.tokenUsage,
|
|
181
|
+
turnCount,
|
|
182
|
+
toolCallCount: toolUseCount,
|
|
183
|
+
durationMs,
|
|
184
|
+
aborted: false,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
resultText: `<task_result>\n${resultText}\n</task_result>`,
|
|
189
|
+
tokenUsage: finalSubState.tokenUsage,
|
|
190
|
+
turnCount,
|
|
191
|
+
toolCallCount: toolUseCount,
|
|
192
|
+
durationMs,
|
|
193
|
+
aborted: false,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
const durationMs = Date.now() - startTime;
|
|
198
|
+
if (isAbortError(err, parentOptions.abortSignal)) {
|
|
199
|
+
aborted = true;
|
|
200
|
+
const partial = extractFinalText(subState.messages);
|
|
201
|
+
const text = partial
|
|
202
|
+
? `[Sub-agent interrupted by user]\n\nPartial output:\n${partial}`
|
|
203
|
+
: '[Sub-agent interrupted by user]';
|
|
204
|
+
const toolUseCount = countToolCalls(subState.messages);
|
|
205
|
+
callbacks.onSubAgentEvent?.({
|
|
206
|
+
kind: 'end',
|
|
207
|
+
toolCallId,
|
|
208
|
+
finalText: text,
|
|
209
|
+
tokenUsage: subState.tokenUsage,
|
|
210
|
+
turnCount: subState.turnCount,
|
|
211
|
+
durationMs,
|
|
212
|
+
aborted: true,
|
|
213
|
+
});
|
|
214
|
+
return {
|
|
215
|
+
resultText: text,
|
|
216
|
+
tokenUsage: subState.tokenUsage,
|
|
217
|
+
turnCount: subState.turnCount,
|
|
218
|
+
toolCallCount: toolUseCount,
|
|
219
|
+
durationMs,
|
|
220
|
+
aborted: true,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
224
|
+
debugLog('sub-agent.crash', `${agentName}: ${message}`);
|
|
225
|
+
const toolUseCount = countToolCalls(subState.messages);
|
|
226
|
+
callbacks.onSubAgentEvent?.({
|
|
227
|
+
kind: 'end',
|
|
228
|
+
toolCallId,
|
|
229
|
+
finalText: `[Sub-agent failed: ${message}]`,
|
|
230
|
+
tokenUsage: subState.tokenUsage,
|
|
231
|
+
turnCount: subState.turnCount,
|
|
232
|
+
durationMs,
|
|
233
|
+
aborted: false,
|
|
234
|
+
});
|
|
235
|
+
return {
|
|
236
|
+
resultText: `[Sub-agent failed: ${message}]`,
|
|
237
|
+
tokenUsage: subState.tokenUsage,
|
|
238
|
+
turnCount: subState.turnCount,
|
|
239
|
+
toolCallCount: toolUseCount,
|
|
240
|
+
durationMs,
|
|
241
|
+
aborted: false,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function isAbortError(err, signal) {
|
|
246
|
+
if (signal?.aborted)
|
|
247
|
+
return true;
|
|
248
|
+
if (err instanceof Error) {
|
|
249
|
+
if (err.name === 'AbortError')
|
|
250
|
+
return true;
|
|
251
|
+
if (/aborted|AbortError/i.test(err.message))
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
function zeroUsage() {
|
|
257
|
+
return {
|
|
258
|
+
inputTokens: 0,
|
|
259
|
+
outputTokens: 0,
|
|
260
|
+
totalTokens: 0,
|
|
261
|
+
cacheReadTokens: 0,
|
|
262
|
+
cacheCreationTokens: 0,
|
|
263
|
+
currentContextTokens: 0,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
function countToolCalls(messages) {
|
|
267
|
+
let count = 0;
|
|
268
|
+
for (const msg of messages) {
|
|
269
|
+
if (msg.role !== 'assistant' || !Array.isArray(msg.content))
|
|
270
|
+
continue;
|
|
271
|
+
for (const part of msg.content) {
|
|
272
|
+
if (part?.type === 'tool-call')
|
|
273
|
+
count++;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return count;
|
|
277
|
+
}
|
|
278
|
+
function previewInput(toolName, input) {
|
|
279
|
+
const val = input.filePath ??
|
|
280
|
+
input.command ??
|
|
281
|
+
input.pattern ??
|
|
282
|
+
input.query ??
|
|
283
|
+
input.dirPath ??
|
|
284
|
+
'';
|
|
285
|
+
return val.length > 80 ? val.slice(0, 77) + '...' : val;
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/agent/sub-agents/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { TokenUsage } from '../../types/index.js';
|
|
2
|
+
export interface SubAgentDefinition {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
/** Markdown body = system prompt for the sub-agent */
|
|
6
|
+
prompt: string;
|
|
7
|
+
/** Allowed tools. Omit = default read-only set */
|
|
8
|
+
tools?: string[];
|
|
9
|
+
/** Tools to explicitly deny (applied after `tools`) */
|
|
10
|
+
disallowedTools?: string[];
|
|
11
|
+
/** Model override (e.g. "anthropic:claude-sonnet-4-6"). Omit = inherit parent */
|
|
12
|
+
model?: string;
|
|
13
|
+
/** Max agentic turns before forced stop */
|
|
14
|
+
maxTurns: number;
|
|
15
|
+
/** Shell commands to deny (keyword matching). Only relevant when shell is in tools */
|
|
16
|
+
shellRestrictions?: string[];
|
|
17
|
+
/** Where this definition came from */
|
|
18
|
+
source: 'built-in' | 'global' | 'project';
|
|
19
|
+
}
|
|
20
|
+
export interface SubAgentTrace {
|
|
21
|
+
toolCalls: Array<{
|
|
22
|
+
toolName: string;
|
|
23
|
+
input: unknown;
|
|
24
|
+
result: string;
|
|
25
|
+
durationMs: number;
|
|
26
|
+
isError: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
finalText: string;
|
|
29
|
+
tokenUsage: TokenUsage;
|
|
30
|
+
turnCount: number;
|
|
31
|
+
}
|
|
32
|
+
export type SubAgentEvent = {
|
|
33
|
+
kind: 'start';
|
|
34
|
+
toolCallId: string;
|
|
35
|
+
agentName: string;
|
|
36
|
+
description: string;
|
|
37
|
+
prompt: string;
|
|
38
|
+
} | {
|
|
39
|
+
kind: 'tool-call';
|
|
40
|
+
toolCallId: string;
|
|
41
|
+
subToolName: string;
|
|
42
|
+
subInput: unknown;
|
|
43
|
+
} | {
|
|
44
|
+
kind: 'tool-result';
|
|
45
|
+
toolCallId: string;
|
|
46
|
+
subToolName: string;
|
|
47
|
+
resultPreview: string;
|
|
48
|
+
durationMs: number;
|
|
49
|
+
isError: boolean;
|
|
50
|
+
} | {
|
|
51
|
+
kind: 'text-delta';
|
|
52
|
+
toolCallId: string;
|
|
53
|
+
delta: string;
|
|
54
|
+
} | {
|
|
55
|
+
kind: 'end';
|
|
56
|
+
toolCallId: string;
|
|
57
|
+
finalText: string;
|
|
58
|
+
tokenUsage: TokenUsage;
|
|
59
|
+
turnCount: number;
|
|
60
|
+
durationMs: number;
|
|
61
|
+
aborted: boolean;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/sub-agents/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,sCAAsC;IACtC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAA;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,OAAO,CAAA;QACd,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,OAAO,CAAA;KACjB,CAAC,CAAA;IACF,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7F;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACjF;IACE,IAAI,EAAE,aAAa,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB,GACD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzD;IACE,IAAI,EAAE,KAAK,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/sub-agents/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,22 @@
|
|
|
1
|
+
/** Build a focused system prompt for a sub-agent invocation.
|
|
2
|
+
* Shorter than the parent prompt — no plan-mode overlay, no auto-memory
|
|
3
|
+
* guidelines, no response-format rules. Just role + environment + contract. */
|
|
4
|
+
export declare function buildSubAgentSystemPrompt(options: {
|
|
5
|
+
agentPrompt: string;
|
|
6
|
+
knowledgeContext: string;
|
|
7
|
+
isGitRepo: boolean;
|
|
8
|
+
}): string;
|
|
1
9
|
/** Build the full system prompt with dynamic values and optional knowledge context */
|
|
2
10
|
export declare function buildSystemPrompt(options?: {
|
|
3
11
|
knowledgeContext?: string;
|
|
4
12
|
modelId?: string;
|
|
5
13
|
isGitRepo?: boolean;
|
|
14
|
+
/** When true, append the plan-mode overlay (read-only constraints +
|
|
15
|
+
* exitPlanMode handoff). Pair with `planFilePath` so the model knows
|
|
16
|
+
* which path is allowed for writes. */
|
|
17
|
+
planMode?: boolean;
|
|
18
|
+
/** Absolute path to the session's plan file. Required when
|
|
19
|
+
* `planMode === true`; ignored otherwise. */
|
|
20
|
+
planFilePath?: string;
|
|
6
21
|
}): string;
|
|
7
22
|
//# sourceMappingURL=system-prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AAgOA;;gFAEgF;AAChF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;CACnB,GAAG,MAAM,CAuBT;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;4CAEwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;kDAC8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,MAAM,CAkBT"}
|