@speclife/core 0.1.7 → 0.3.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/adapters/git-adapter.d.ts +15 -2
- package/dist/adapters/git-adapter.d.ts.map +1 -1
- package/dist/adapters/git-adapter.js +75 -4
- package/dist/adapters/git-adapter.js.map +1 -1
- package/dist/adapters/github-adapter.d.ts +39 -26
- package/dist/adapters/github-adapter.d.ts.map +1 -1
- package/dist/adapters/github-adapter.js +154 -93
- package/dist/adapters/github-adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +5 -4
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +6 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/config.d.ts +52 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +58 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +124 -15
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/format.d.ts +57 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +154 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/workflows/implement.d.ts +24 -16
- package/dist/workflows/implement.d.ts.map +1 -1
- package/dist/workflows/implement.js +70 -258
- package/dist/workflows/implement.js.map +1 -1
- package/dist/workflows/index.d.ts +6 -0
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +7 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/init.d.ts +11 -7
- package/dist/workflows/init.d.ts.map +1 -1
- package/dist/workflows/init.js +16 -107
- package/dist/workflows/init.js.map +1 -1
- package/dist/workflows/merge.d.ts +9 -13
- package/dist/workflows/merge.d.ts.map +1 -1
- package/dist/workflows/merge.js +11 -103
- package/dist/workflows/merge.js.map +1 -1
- package/dist/workflows/release.d.ts +28 -0
- package/dist/workflows/release.d.ts.map +1 -0
- package/dist/workflows/release.js +212 -0
- package/dist/workflows/release.js.map +1 -0
- package/dist/workflows/submit.d.ts +7 -1
- package/dist/workflows/submit.d.ts.map +1 -1
- package/dist/workflows/submit.js +92 -4
- package/dist/workflows/submit.js.map +1 -1
- package/dist/workflows/worktree.d.ts +62 -0
- package/dist/workflows/worktree.d.ts.map +1 -0
- package/dist/workflows/worktree.js +97 -0
- package/dist/workflows/worktree.js.map +1 -0
- package/package.json +2 -2
- package/dist/adapters/claude-cli-adapter.d.ts +0 -72
- package/dist/adapters/claude-cli-adapter.d.ts.map +0 -1
- package/dist/adapters/claude-cli-adapter.js +0 -232
- package/dist/adapters/claude-cli-adapter.js.map +0 -1
- package/dist/adapters/claude-sdk-adapter.d.ts +0 -49
- package/dist/adapters/claude-sdk-adapter.d.ts.map +0 -1
- package/dist/adapters/claude-sdk-adapter.js +0 -278
- package/dist/adapters/claude-sdk-adapter.js.map +0 -1
- package/dist/adapters/cursor-adapter.d.ts +0 -26
- package/dist/adapters/cursor-adapter.d.ts.map +0 -1
- package/dist/adapters/cursor-adapter.js +0 -54
- package/dist/adapters/cursor-adapter.js.map +0 -1
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude CLI adapter for implementation
|
|
3
|
-
*
|
|
4
|
-
* Uses the Claude CLI which supports MCP servers natively.
|
|
5
|
-
* This is the primary/recommended implementation mode.
|
|
6
|
-
*/
|
|
7
|
-
/** Options for running Claude CLI */
|
|
8
|
-
export interface ClaudeCliOptions {
|
|
9
|
-
/** Working directory for the CLI */
|
|
10
|
-
cwd: string;
|
|
11
|
-
/** Model to use (optional, uses CLI default if not specified) */
|
|
12
|
-
model?: string;
|
|
13
|
-
/** Maximum tokens to generate */
|
|
14
|
-
maxTokens?: number;
|
|
15
|
-
/** Whether to print to stdout/stderr */
|
|
16
|
-
print?: boolean;
|
|
17
|
-
}
|
|
18
|
-
/** Result from Claude CLI execution */
|
|
19
|
-
export interface ClaudeCliResult {
|
|
20
|
-
/** Exit code from the process */
|
|
21
|
-
exitCode: number;
|
|
22
|
-
/** Standard output */
|
|
23
|
-
stdout: string;
|
|
24
|
-
/** Standard error */
|
|
25
|
-
stderr: string;
|
|
26
|
-
/** Whether execution was successful */
|
|
27
|
-
success: boolean;
|
|
28
|
-
}
|
|
29
|
-
/** Claude CLI adapter interface */
|
|
30
|
-
export interface ClaudeCliAdapter {
|
|
31
|
-
/** Check if Claude CLI is available */
|
|
32
|
-
isAvailable(): Promise<boolean>;
|
|
33
|
-
/** Get Claude CLI version */
|
|
34
|
-
getVersion(): Promise<string | null>;
|
|
35
|
-
/** Run Claude CLI with a prompt */
|
|
36
|
-
run(prompt: string, options: ClaudeCliOptions): Promise<ClaudeCliResult>;
|
|
37
|
-
/** Run Claude CLI with streaming output */
|
|
38
|
-
runStreaming(prompt: string, options: ClaudeCliOptions, onOutput?: (chunk: string) => void): Promise<ClaudeCliResult>;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Create a Claude CLI adapter
|
|
42
|
-
*/
|
|
43
|
-
export declare function createClaudeCliAdapter(): ClaudeCliAdapter;
|
|
44
|
-
/**
|
|
45
|
-
* Generate an implementation prompt for Claude CLI
|
|
46
|
-
*/
|
|
47
|
-
export declare function generateImplementationPrompt(context: {
|
|
48
|
-
changeId: string;
|
|
49
|
-
proposal: string;
|
|
50
|
-
tasks: string;
|
|
51
|
-
design?: string;
|
|
52
|
-
contextFiles?: Array<{
|
|
53
|
-
path: string;
|
|
54
|
-
content: string;
|
|
55
|
-
}>;
|
|
56
|
-
}): string;
|
|
57
|
-
/**
|
|
58
|
-
* Generate a version analysis prompt for Claude CLI
|
|
59
|
-
*/
|
|
60
|
-
export declare function generateVersionAnalysisPrompt(context: {
|
|
61
|
-
changeId: string;
|
|
62
|
-
proposal: string;
|
|
63
|
-
diff: string;
|
|
64
|
-
}): string;
|
|
65
|
-
/**
|
|
66
|
-
* Parse version analysis response from Claude
|
|
67
|
-
*/
|
|
68
|
-
export declare function parseVersionAnalysisResponse(response: string): {
|
|
69
|
-
bump: 'patch' | 'minor' | 'major';
|
|
70
|
-
reasoning: string;
|
|
71
|
-
} | null;
|
|
72
|
-
//# sourceMappingURL=claude-cli-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-cli-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-cli-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC,6BAA6B;IAC7B,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAErC,mCAAmC;IACnC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEzE,2CAA2C;IAC3C,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAgGzD;AAsBD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD,GAAG,MAAM,CAmDT;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,CAkDT;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqB9H"}
|
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude CLI adapter for implementation
|
|
3
|
-
*
|
|
4
|
-
* Uses the Claude CLI which supports MCP servers natively.
|
|
5
|
-
* This is the primary/recommended implementation mode.
|
|
6
|
-
*/
|
|
7
|
-
import { execa } from 'execa';
|
|
8
|
-
/**
|
|
9
|
-
* Create a Claude CLI adapter
|
|
10
|
-
*/
|
|
11
|
-
export function createClaudeCliAdapter() {
|
|
12
|
-
return {
|
|
13
|
-
async isAvailable() {
|
|
14
|
-
try {
|
|
15
|
-
await execa('claude', ['--version']);
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
async getVersion() {
|
|
23
|
-
try {
|
|
24
|
-
const result = await execa('claude', ['--version']);
|
|
25
|
-
return result.stdout.trim();
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
async run(prompt, options) {
|
|
32
|
-
const args = buildArgs(options);
|
|
33
|
-
try {
|
|
34
|
-
const result = await execa('claude', args, {
|
|
35
|
-
cwd: options.cwd,
|
|
36
|
-
input: prompt,
|
|
37
|
-
reject: false,
|
|
38
|
-
});
|
|
39
|
-
const exitCode = result.exitCode ?? 1;
|
|
40
|
-
return {
|
|
41
|
-
exitCode,
|
|
42
|
-
stdout: result.stdout,
|
|
43
|
-
stderr: result.stderr,
|
|
44
|
-
success: exitCode === 0,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
49
|
-
return {
|
|
50
|
-
exitCode: 1,
|
|
51
|
-
stdout: '',
|
|
52
|
-
stderr: message,
|
|
53
|
-
success: false,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
async runStreaming(prompt, options, onOutput) {
|
|
58
|
-
const args = buildArgs(options);
|
|
59
|
-
try {
|
|
60
|
-
const subprocess = execa('claude', args, {
|
|
61
|
-
cwd: options.cwd,
|
|
62
|
-
input: prompt,
|
|
63
|
-
reject: false,
|
|
64
|
-
});
|
|
65
|
-
// Stream stdout if callback provided
|
|
66
|
-
if (onOutput && subprocess.stdout) {
|
|
67
|
-
subprocess.stdout.on('data', (chunk) => {
|
|
68
|
-
onOutput(chunk.toString());
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
// Also optionally stream stderr
|
|
72
|
-
if (onOutput && subprocess.stderr) {
|
|
73
|
-
subprocess.stderr.on('data', (chunk) => {
|
|
74
|
-
onOutput(chunk.toString());
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
const result = await subprocess;
|
|
78
|
-
const exitCode = result.exitCode ?? 1;
|
|
79
|
-
return {
|
|
80
|
-
exitCode,
|
|
81
|
-
stdout: result.stdout,
|
|
82
|
-
stderr: result.stderr,
|
|
83
|
-
success: exitCode === 0,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
88
|
-
return {
|
|
89
|
-
exitCode: 1,
|
|
90
|
-
stdout: '',
|
|
91
|
-
stderr: message,
|
|
92
|
-
success: false,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
},
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Build CLI arguments from options
|
|
100
|
-
*/
|
|
101
|
-
function buildArgs(options) {
|
|
102
|
-
const args = [];
|
|
103
|
-
// Use print mode for non-interactive execution
|
|
104
|
-
args.push('--print');
|
|
105
|
-
if (options.model) {
|
|
106
|
-
args.push('--model', options.model);
|
|
107
|
-
}
|
|
108
|
-
if (options.maxTokens) {
|
|
109
|
-
args.push('--max-tokens', String(options.maxTokens));
|
|
110
|
-
}
|
|
111
|
-
return args;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Generate an implementation prompt for Claude CLI
|
|
115
|
-
*/
|
|
116
|
-
export function generateImplementationPrompt(context) {
|
|
117
|
-
const sections = [];
|
|
118
|
-
sections.push(`# Implementation Request: ${context.changeId}`);
|
|
119
|
-
sections.push('');
|
|
120
|
-
sections.push('You are implementing a change based on the following proposal and tasks.');
|
|
121
|
-
sections.push('Please implement each uncompleted task, writing code and running tests as needed.');
|
|
122
|
-
sections.push('');
|
|
123
|
-
sections.push('## Proposal');
|
|
124
|
-
sections.push('```markdown');
|
|
125
|
-
sections.push(context.proposal);
|
|
126
|
-
sections.push('```');
|
|
127
|
-
sections.push('');
|
|
128
|
-
sections.push('## Tasks');
|
|
129
|
-
sections.push('```markdown');
|
|
130
|
-
sections.push(context.tasks);
|
|
131
|
-
sections.push('```');
|
|
132
|
-
sections.push('');
|
|
133
|
-
if (context.design) {
|
|
134
|
-
sections.push('## Design');
|
|
135
|
-
sections.push('```markdown');
|
|
136
|
-
sections.push(context.design);
|
|
137
|
-
sections.push('```');
|
|
138
|
-
sections.push('');
|
|
139
|
-
}
|
|
140
|
-
if (context.contextFiles && context.contextFiles.length > 0) {
|
|
141
|
-
sections.push('## Context Files');
|
|
142
|
-
for (const file of context.contextFiles) {
|
|
143
|
-
sections.push(`### ${file.path}`);
|
|
144
|
-
sections.push('```');
|
|
145
|
-
sections.push(file.content);
|
|
146
|
-
sections.push('```');
|
|
147
|
-
sections.push('');
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
sections.push('## Instructions');
|
|
151
|
-
sections.push('');
|
|
152
|
-
sections.push('1. Work through each uncompleted task (marked with `[ ]`)');
|
|
153
|
-
sections.push('2. Write the necessary code changes');
|
|
154
|
-
sections.push('3. Run tests to verify your changes work');
|
|
155
|
-
sections.push('4. If tests fail, analyze the failure and fix the code');
|
|
156
|
-
sections.push('5. Continue until all tasks are complete or you encounter a blocking issue');
|
|
157
|
-
sections.push('');
|
|
158
|
-
sections.push('Begin implementation now.');
|
|
159
|
-
return sections.join('\n');
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Generate a version analysis prompt for Claude CLI
|
|
163
|
-
*/
|
|
164
|
-
export function generateVersionAnalysisPrompt(context) {
|
|
165
|
-
const sections = [];
|
|
166
|
-
sections.push('# Version Bump Analysis');
|
|
167
|
-
sections.push('');
|
|
168
|
-
sections.push('Analyze the following change and determine the appropriate semantic version bump.');
|
|
169
|
-
sections.push('');
|
|
170
|
-
sections.push('## Change Proposal');
|
|
171
|
-
sections.push('```markdown');
|
|
172
|
-
sections.push(context.proposal);
|
|
173
|
-
sections.push('```');
|
|
174
|
-
sections.push('');
|
|
175
|
-
sections.push('## Code Changes (Diff)');
|
|
176
|
-
sections.push('```diff');
|
|
177
|
-
sections.push(context.diff);
|
|
178
|
-
sections.push('```');
|
|
179
|
-
sections.push('');
|
|
180
|
-
sections.push('## Semantic Versioning Guidelines');
|
|
181
|
-
sections.push('');
|
|
182
|
-
sections.push('- **major**: Breaking changes that require users to update their code');
|
|
183
|
-
sections.push(' - Removed or renamed public APIs, types, or exports');
|
|
184
|
-
sections.push(' - Changed function signatures or behavior in incompatible ways');
|
|
185
|
-
sections.push(' - Removed support for previously supported features');
|
|
186
|
-
sections.push('');
|
|
187
|
-
sections.push('- **minor**: New features that are backwards compatible');
|
|
188
|
-
sections.push(' - New exports, functions, types, or options');
|
|
189
|
-
sections.push(' - New optional parameters with defaults');
|
|
190
|
-
sections.push(' - Additive changes that don\'t break existing code');
|
|
191
|
-
sections.push('');
|
|
192
|
-
sections.push('- **patch**: Bug fixes and internal changes');
|
|
193
|
-
sections.push(' - Bug fixes that don\'t change the API');
|
|
194
|
-
sections.push(' - Documentation updates');
|
|
195
|
-
sections.push(' - Internal refactoring without API changes');
|
|
196
|
-
sections.push(' - Dependency updates');
|
|
197
|
-
sections.push(' - Performance improvements');
|
|
198
|
-
sections.push('');
|
|
199
|
-
sections.push('## Instructions');
|
|
200
|
-
sections.push('');
|
|
201
|
-
sections.push('Respond with ONLY a JSON object (no markdown code fences, no explanation outside the JSON):');
|
|
202
|
-
sections.push('');
|
|
203
|
-
sections.push('{');
|
|
204
|
-
sections.push(' "bump": "patch" | "minor" | "major",');
|
|
205
|
-
sections.push(' "reasoning": "Brief explanation of why this bump type is appropriate"');
|
|
206
|
-
sections.push('}');
|
|
207
|
-
return sections.join('\n');
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Parse version analysis response from Claude
|
|
211
|
-
*/
|
|
212
|
-
export function parseVersionAnalysisResponse(response) {
|
|
213
|
-
try {
|
|
214
|
-
// Try to extract JSON from the response
|
|
215
|
-
const jsonMatch = response.match(/\{[\s\S]*"bump"[\s\S]*"reasoning"[\s\S]*\}/);
|
|
216
|
-
if (!jsonMatch) {
|
|
217
|
-
return null;
|
|
218
|
-
}
|
|
219
|
-
const parsed = JSON.parse(jsonMatch[0]);
|
|
220
|
-
if (!['patch', 'minor', 'major'].includes(parsed.bump)) {
|
|
221
|
-
return null;
|
|
222
|
-
}
|
|
223
|
-
return {
|
|
224
|
-
bump: parsed.bump,
|
|
225
|
-
reasoning: String(parsed.reasoning || 'No reasoning provided'),
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
//# sourceMappingURL=claude-cli-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-cli-adapter.js","sourceRoot":"","sources":["../../src/adapters/claude-cli-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude SDK adapter for fully automated implementation
|
|
3
|
-
*
|
|
4
|
-
* Uses the Anthropic SDK directly with tool-use for a fully automated
|
|
5
|
-
* agentic loop that can read/write files and execute shell commands.
|
|
6
|
-
*/
|
|
7
|
-
import { type ProgressCallback } from '../types.js';
|
|
8
|
-
/** Options for the agentic loop */
|
|
9
|
-
export interface AgenticLoopOptions {
|
|
10
|
-
/** Working directory */
|
|
11
|
-
cwd: string;
|
|
12
|
-
/** Model to use */
|
|
13
|
-
model: string;
|
|
14
|
-
/** Maximum iterations for the agentic loop */
|
|
15
|
-
maxIterations?: number;
|
|
16
|
-
/** Maximum tokens per response */
|
|
17
|
-
maxTokens?: number;
|
|
18
|
-
/** Progress callback */
|
|
19
|
-
onProgress?: ProgressCallback;
|
|
20
|
-
}
|
|
21
|
-
/** Result from the agentic loop */
|
|
22
|
-
export interface AgenticLoopResult {
|
|
23
|
-
/** Whether the loop completed successfully */
|
|
24
|
-
success: boolean;
|
|
25
|
-
/** Number of iterations performed */
|
|
26
|
-
iterations: number;
|
|
27
|
-
/** Files that were modified */
|
|
28
|
-
filesModified: string[];
|
|
29
|
-
/** Final response from Claude */
|
|
30
|
-
finalResponse: string;
|
|
31
|
-
/** Any errors encountered */
|
|
32
|
-
errors: string[];
|
|
33
|
-
}
|
|
34
|
-
/** Claude SDK adapter interface */
|
|
35
|
-
export interface ClaudeSdkAdapter {
|
|
36
|
-
/** Check if API key is configured */
|
|
37
|
-
isConfigured(): boolean;
|
|
38
|
-
/** Run the agentic loop with tool-use */
|
|
39
|
-
runAgenticLoop(systemPrompt: string, userPrompt: string, options: AgenticLoopOptions): Promise<AgenticLoopResult>;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Create a Claude SDK adapter
|
|
43
|
-
*/
|
|
44
|
-
export declare function createClaudeSdkAdapter(): ClaudeSdkAdapter;
|
|
45
|
-
/**
|
|
46
|
-
* Generate system prompt for the agentic implementation loop
|
|
47
|
-
*/
|
|
48
|
-
export declare function generateAgenticSystemPrompt(): string;
|
|
49
|
-
//# sourceMappingURL=claude-sdk-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-sdk-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-sdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAoBpD,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,mCAAmC;AACnC,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,YAAY,IAAI,OAAO,CAAC;IAExB,yCAAyC;IACzC,cAAc,CACZ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CA0IzD;AA4ID;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAkBpD"}
|
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude SDK adapter for fully automated implementation
|
|
3
|
-
*
|
|
4
|
-
* Uses the Anthropic SDK directly with tool-use for a fully automated
|
|
5
|
-
* agentic loop that can read/write files and execute shell commands.
|
|
6
|
-
*/
|
|
7
|
-
import Anthropic from '@anthropic-ai/sdk';
|
|
8
|
-
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
9
|
-
import { dirname, join } from 'path';
|
|
10
|
-
import { execa } from 'execa';
|
|
11
|
-
/**
|
|
12
|
-
* Create a Claude SDK adapter
|
|
13
|
-
*/
|
|
14
|
-
export function createClaudeSdkAdapter() {
|
|
15
|
-
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
16
|
-
return {
|
|
17
|
-
isConfigured() {
|
|
18
|
-
return !!apiKey;
|
|
19
|
-
},
|
|
20
|
-
async runAgenticLoop(systemPrompt, userPrompt, options) {
|
|
21
|
-
if (!apiKey) {
|
|
22
|
-
return {
|
|
23
|
-
success: false,
|
|
24
|
-
iterations: 0,
|
|
25
|
-
filesModified: [],
|
|
26
|
-
finalResponse: '',
|
|
27
|
-
errors: ['ANTHROPIC_API_KEY environment variable is not set'],
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
const client = new Anthropic({ apiKey });
|
|
31
|
-
const tools = buildToolDefinitions();
|
|
32
|
-
const maxIterations = options.maxIterations ?? 50;
|
|
33
|
-
const maxTokens = options.maxTokens ?? 4096;
|
|
34
|
-
const messages = [
|
|
35
|
-
{ role: 'user', content: userPrompt },
|
|
36
|
-
];
|
|
37
|
-
const filesModified = new Set();
|
|
38
|
-
const errors = [];
|
|
39
|
-
let iterations = 0;
|
|
40
|
-
let finalResponse = '';
|
|
41
|
-
while (iterations < maxIterations) {
|
|
42
|
-
iterations++;
|
|
43
|
-
options.onProgress?.({
|
|
44
|
-
type: 'step_completed',
|
|
45
|
-
message: `Agentic loop iteration ${iterations}`,
|
|
46
|
-
data: { iteration: iterations },
|
|
47
|
-
});
|
|
48
|
-
try {
|
|
49
|
-
const response = await client.messages.create({
|
|
50
|
-
model: options.model,
|
|
51
|
-
max_tokens: maxTokens,
|
|
52
|
-
system: systemPrompt,
|
|
53
|
-
tools: tools,
|
|
54
|
-
messages,
|
|
55
|
-
});
|
|
56
|
-
// Check if we're done (no more tool use)
|
|
57
|
-
if (response.stop_reason === 'end_turn') {
|
|
58
|
-
// Extract final text response
|
|
59
|
-
for (const block of response.content) {
|
|
60
|
-
if (block.type === 'text') {
|
|
61
|
-
finalResponse = block.text;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
// Process tool calls
|
|
67
|
-
const assistantContent = [];
|
|
68
|
-
const toolResults = [];
|
|
69
|
-
for (const block of response.content) {
|
|
70
|
-
if (block.type === 'text') {
|
|
71
|
-
assistantContent.push({ type: 'text', text: block.text });
|
|
72
|
-
}
|
|
73
|
-
else if (block.type === 'tool_use') {
|
|
74
|
-
assistantContent.push({
|
|
75
|
-
type: 'tool_use',
|
|
76
|
-
id: block.id,
|
|
77
|
-
name: block.name,
|
|
78
|
-
input: block.input,
|
|
79
|
-
});
|
|
80
|
-
// Execute the tool
|
|
81
|
-
const result = await executeTool(block.name, block.input, options.cwd);
|
|
82
|
-
// Track modified files
|
|
83
|
-
if (block.name === 'write_file' && result.success) {
|
|
84
|
-
const input = block.input;
|
|
85
|
-
if (input.path) {
|
|
86
|
-
filesModified.add(input.path);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
if (!result.success && result.error) {
|
|
90
|
-
errors.push(result.error);
|
|
91
|
-
}
|
|
92
|
-
options.onProgress?.({
|
|
93
|
-
type: 'step_completed',
|
|
94
|
-
message: `Tool ${block.name}: ${result.success ? 'success' : 'failed'}`,
|
|
95
|
-
data: { tool: block.name, success: result.success },
|
|
96
|
-
});
|
|
97
|
-
toolResults.push({
|
|
98
|
-
type: 'tool_result',
|
|
99
|
-
tool_use_id: block.id,
|
|
100
|
-
content: result.output,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Add assistant message
|
|
105
|
-
messages.push({ role: 'assistant', content: assistantContent });
|
|
106
|
-
// Add tool results
|
|
107
|
-
if (toolResults.length > 0) {
|
|
108
|
-
messages.push({ role: 'user', content: toolResults });
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
113
|
-
errors.push(`API error: ${message}`);
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return {
|
|
118
|
-
success: errors.length === 0,
|
|
119
|
-
iterations,
|
|
120
|
-
filesModified: Array.from(filesModified),
|
|
121
|
-
finalResponse,
|
|
122
|
-
errors,
|
|
123
|
-
};
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Build tool definitions for the agentic loop
|
|
129
|
-
*/
|
|
130
|
-
function buildToolDefinitions() {
|
|
131
|
-
return [
|
|
132
|
-
{
|
|
133
|
-
name: 'read_file',
|
|
134
|
-
description: 'Read the contents of a file at the given path',
|
|
135
|
-
input_schema: {
|
|
136
|
-
type: 'object',
|
|
137
|
-
properties: {
|
|
138
|
-
path: {
|
|
139
|
-
type: 'string',
|
|
140
|
-
description: 'The file path to read, relative to the working directory',
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
required: ['path'],
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
name: 'write_file',
|
|
148
|
-
description: 'Write content to a file at the given path. Creates directories if needed.',
|
|
149
|
-
input_schema: {
|
|
150
|
-
type: 'object',
|
|
151
|
-
properties: {
|
|
152
|
-
path: {
|
|
153
|
-
type: 'string',
|
|
154
|
-
description: 'The file path to write, relative to the working directory',
|
|
155
|
-
},
|
|
156
|
-
content: {
|
|
157
|
-
type: 'string',
|
|
158
|
-
description: 'The content to write to the file',
|
|
159
|
-
},
|
|
160
|
-
},
|
|
161
|
-
required: ['path', 'content'],
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
name: 'run_command',
|
|
166
|
-
description: 'Run a shell command and return its output. Use for running tests, builds, etc.',
|
|
167
|
-
input_schema: {
|
|
168
|
-
type: 'object',
|
|
169
|
-
properties: {
|
|
170
|
-
command: {
|
|
171
|
-
type: 'string',
|
|
172
|
-
description: 'The shell command to execute',
|
|
173
|
-
},
|
|
174
|
-
},
|
|
175
|
-
required: ['command'],
|
|
176
|
-
},
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
name: 'list_directory',
|
|
180
|
-
description: 'List files and directories at the given path',
|
|
181
|
-
input_schema: {
|
|
182
|
-
type: 'object',
|
|
183
|
-
properties: {
|
|
184
|
-
path: {
|
|
185
|
-
type: 'string',
|
|
186
|
-
description: 'The directory path to list, relative to the working directory',
|
|
187
|
-
},
|
|
188
|
-
},
|
|
189
|
-
required: ['path'],
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
];
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Execute a tool and return the result
|
|
196
|
-
*/
|
|
197
|
-
async function executeTool(name, input, cwd) {
|
|
198
|
-
try {
|
|
199
|
-
switch (name) {
|
|
200
|
-
case 'read_file': {
|
|
201
|
-
const path = join(cwd, input.path);
|
|
202
|
-
const content = await readFile(path, 'utf-8');
|
|
203
|
-
return { success: true, output: content };
|
|
204
|
-
}
|
|
205
|
-
case 'write_file': {
|
|
206
|
-
const path = join(cwd, input.path);
|
|
207
|
-
const content = input.content;
|
|
208
|
-
await mkdir(dirname(path), { recursive: true });
|
|
209
|
-
await writeFile(path, content, 'utf-8');
|
|
210
|
-
return { success: true, output: `File written: ${input.path}` };
|
|
211
|
-
}
|
|
212
|
-
case 'run_command': {
|
|
213
|
-
const command = input.command;
|
|
214
|
-
const result = await execa(command, {
|
|
215
|
-
cwd,
|
|
216
|
-
shell: true,
|
|
217
|
-
reject: false,
|
|
218
|
-
});
|
|
219
|
-
const output = [
|
|
220
|
-
`Exit code: ${result.exitCode}`,
|
|
221
|
-
result.stdout ? `stdout:\n${result.stdout}` : '',
|
|
222
|
-
result.stderr ? `stderr:\n${result.stderr}` : '',
|
|
223
|
-
].filter(Boolean).join('\n');
|
|
224
|
-
return {
|
|
225
|
-
success: result.exitCode === 0,
|
|
226
|
-
output,
|
|
227
|
-
error: result.exitCode !== 0 ? `Command failed with exit code ${result.exitCode}` : undefined,
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
case 'list_directory': {
|
|
231
|
-
const path = join(cwd, input.path);
|
|
232
|
-
const { readdir } = await import('fs/promises');
|
|
233
|
-
const entries = await readdir(path, { withFileTypes: true });
|
|
234
|
-
const output = entries
|
|
235
|
-
.map(e => `${e.isDirectory() ? 'd' : 'f'} ${e.name}`)
|
|
236
|
-
.join('\n');
|
|
237
|
-
return { success: true, output };
|
|
238
|
-
}
|
|
239
|
-
default:
|
|
240
|
-
return {
|
|
241
|
-
success: false,
|
|
242
|
-
output: '',
|
|
243
|
-
error: `Unknown tool: ${name}`,
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
249
|
-
return {
|
|
250
|
-
success: false,
|
|
251
|
-
output: '',
|
|
252
|
-
error: message,
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Generate system prompt for the agentic implementation loop
|
|
258
|
-
*/
|
|
259
|
-
export function generateAgenticSystemPrompt() {
|
|
260
|
-
return `You are an expert software engineer implementing changes based on a proposal and task list.
|
|
261
|
-
|
|
262
|
-
Your capabilities:
|
|
263
|
-
- read_file: Read file contents
|
|
264
|
-
- write_file: Create or modify files
|
|
265
|
-
- run_command: Execute shell commands (tests, builds, etc.)
|
|
266
|
-
- list_directory: Explore the codebase structure
|
|
267
|
-
|
|
268
|
-
Guidelines:
|
|
269
|
-
1. Work through each uncompleted task systematically
|
|
270
|
-
2. Read relevant files before making changes
|
|
271
|
-
3. Make minimal, focused changes to complete each task
|
|
272
|
-
4. Run tests after making changes to verify correctness
|
|
273
|
-
5. If tests fail, analyze the output and fix the issues
|
|
274
|
-
6. Continue until all tasks are complete or you encounter a blocking issue
|
|
275
|
-
|
|
276
|
-
When you've completed all tasks or cannot proceed further, provide a summary of what was accomplished.`;
|
|
277
|
-
}
|
|
278
|
-
//# sourceMappingURL=claude-sdk-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-sdk-adapter.js","sourceRoot":"","sources":["../../src/adapters/claude-sdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AA8D9B;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAE7C,OAAO;QACL,YAAY;YACV,OAAO,CAAC,CAAC,MAAM,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,cAAc,CAClB,YAAoB,EACpB,UAAkB,EAClB,OAA2B;YAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,CAAC;oBACb,aAAa,EAAE,EAAE;oBACjB,aAAa,EAAE,EAAE;oBACjB,MAAM,EAAE,CAAC,mDAAmD,CAAC;iBAC9D,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;YAE5C,MAAM,QAAQ,GAAsC;gBAClD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;aACtC,CAAC;YAEF,MAAM,aAAa,GAAgB,IAAI,GAAG,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,aAAa,GAAG,EAAE,CAAC;YAEvB,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;gBAClC,UAAU,EAAE,CAAC;gBAEb,OAAO,CAAC,UAAU,EAAE,CAAC;oBACnB,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,0BAA0B,UAAU,EAAE;oBAC/C,IAAI,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE;iBAChC,CAAC,CAAC;gBAEH,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAC5C,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,UAAU,EAAE,SAAS;wBACrB,MAAM,EAAE,YAAY;wBACpB,KAAK,EAAE,KAAkC;wBACzC,QAAQ;qBACT,CAAC,CAAC;oBAEH,yCAAyC;oBACzC,IAAI,QAAQ,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;wBACxC,8BAA8B;wBAC9B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;4BACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gCAC1B,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC;4BAC7B,CAAC;wBACH,CAAC;wBACD,MAAM;oBACR,CAAC;oBAED,qBAAqB;oBACrB,MAAM,gBAAgB,GAAoF,EAAE,CAAC;oBAC7G,MAAM,WAAW,GAA8C,EAAE,CAAC;oBAElE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BAC1B,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC5D,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BACrC,gBAAgB,CAAC,IAAI,CAAC;gCACpB,IAAI,EAAE,UAAU;gCAChB,EAAE,EAAE,KAAK,CAAC,EAAE;gCACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gCAChB,KAAK,EAAE,KAAK,CAAC,KAAgC;6BAC9C,CAAC,CAAC;4BAEH,mBAAmB;4BACnB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAgC,EACtC,OAAO,CAAC,GAAG,CACZ,CAAC;4BAEF,uBAAuB;4BACvB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gCAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAA0B,CAAC;gCAC/C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oCACf,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCAChC,CAAC;4BACH,CAAC;4BAED,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gCACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BAC5B,CAAC;4BAED,OAAO,CAAC,UAAU,EAAE,CAAC;gCACnB,IAAI,EAAE,gBAAgB;gCACtB,OAAO,EAAE,QAAQ,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;gCACvE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;6BACpD,CAAC,CAAC;4BAEH,WAAW,CAAC,IAAI,CAAC;gCACf,IAAI,EAAE,aAAa;gCACnB,WAAW,EAAE,KAAK,CAAC,EAAE;gCACrB,OAAO,EAAE,MAAM,CAAC,MAAM;6BACvB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAED,wBAAwB;oBACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;oBAEhE,mBAAmB;oBACnB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;oBACxD,CAAC;gBAEH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACvE,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;oBACrC,MAAM;gBACR,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;gBAC5B,UAAU;gBACV,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;gBACxC,aAAa;gBACb,MAAM;aACP,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB;IAC3B,OAAO;QACL;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,+CAA+C;YAC5D,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,0DAA0D;qBACxE;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,2EAA2E;YACxF,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,2DAA2D;qBACzE;oBACD,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,kCAAkC;qBAChD;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;aAC9B;SACF;QACD;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,gFAAgF;YAC7F,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,8BAA8B;qBAC5C;iBACF;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;aACtB;SACF;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,8CAA8C;YAC3D,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,+DAA+D;qBAC7E;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CACxB,IAAY,EACZ,KAA8B,EAC9B,GAAW;IAEX,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAc,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5C,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAc,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC;gBACxC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAClE,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;oBAClC,GAAG;oBACH,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,KAAK;iBACd,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG;oBACb,cAAc,MAAM,CAAC,QAAQ,EAAE;oBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;oBAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;iBACjD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO;oBACL,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC;oBAC9B,MAAM;oBACN,KAAK,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,iCAAiC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;iBAC9F,CAAC;YACJ,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAc,CAAC,CAAC;gBAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,MAAM,MAAM,GAAG,OAAO;qBACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;qBACpD,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACnC,CAAC;YAED;gBACE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,iBAAiB,IAAI,EAAE;iBAC/B,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,OAAO;SACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO;;;;;;;;;;;;;;;;uGAgB8F,CAAC;AACxG,CAAC"}
|