@anastops/adapters 0.1.0 → 1.1.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/aider/aider-adapter.js.map +1 -1
- package/dist/base/base-adapter.d.ts +4 -0
- package/dist/base/base-adapter.d.ts.map +1 -1
- package/dist/base/base-adapter.js +10 -3
- package/dist/base/base-adapter.js.map +1 -1
- package/dist/base/detached-exec.d.ts +6 -0
- package/dist/base/detached-exec.d.ts.map +1 -1
- package/dist/base/detached-exec.js +78 -21
- package/dist/base/detached-exec.js.map +1 -1
- package/dist/claude/claude-adapter.d.ts +21 -6
- package/dist/claude/claude-adapter.d.ts.map +1 -1
- package/dist/claude/claude-adapter.js +200 -36
- package/dist/claude/claude-adapter.js.map +1 -1
- package/dist/codex/codex-adapter.d.ts.map +1 -1
- package/dist/codex/codex-adapter.js +10 -1
- package/dist/codex/codex-adapter.js.map +1 -1
- package/dist/copilot/copilot-adapter.d.ts.map +1 -1
- package/dist/copilot/copilot-adapter.js.map +1 -1
- package/dist/cursor/cursor-adapter.d.ts.map +1 -1
- package/dist/cursor/cursor-adapter.js +14 -3
- package/dist/cursor/cursor-adapter.js.map +1 -1
- package/dist/gemini/gemini-adapter.d.ts +14 -6
- package/dist/gemini/gemini-adapter.d.ts.map +1 -1
- package/dist/gemini/gemini-adapter.js +62 -8
- package/dist/gemini/gemini-adapter.js.map +1 -1
- package/dist/grok/grok-adapter.d.ts.map +1 -1
- package/dist/grok/grok-adapter.js +4 -2
- package/dist/grok/grok-adapter.js.map +1 -1
- package/dist/local/local-adapter.d.ts.map +1 -1
- package/dist/local/local-adapter.js +10 -10
- package/dist/local/local-adapter.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +1 -4
- package/dist/registry.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aider-adapter.js","sourceRoot":"","sources":["../../src/aider/aider-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,WAAW,EAAsB,MAAM,yBAAyB,CAAC;AAE1E,MAAM,OAAO,YAAa,SAAQ,WAAW;IAClC,IAAI,GAAiB,OAAO,CAAC;IAC7B,IAAI,GAAG,OAAO,CAAC;IAExB,YAAY,MAA+B;QACzC,KAAK,CAAC;YACJ,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,CAAC,mBAAmB,EAAE,OAAO,CAAC;YAC3C,cAAc,EAAE,MAAM,EAAE,aAAa;YACrC,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;IAED,eAAe;QACb,6CAA6C;QAC7C,OAAO,OAAO,CAAC,OAAO,CACpB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,SAAS;
|
|
1
|
+
{"version":3,"file":"aider-adapter.js","sourceRoot":"","sources":["../../src/aider/aider-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,10 @@ export interface ExecuteOptions {
|
|
|
32
32
|
stream?: boolean;
|
|
33
33
|
/** Signal for cancellation */
|
|
34
34
|
signal?: AbortSignal;
|
|
35
|
+
/** Callback for streaming progress (called with partial output) */
|
|
36
|
+
onProgress?: (output: string) => void;
|
|
37
|
+
/** Interval for progress callbacks in ms (default: 1000) */
|
|
38
|
+
progressInterval?: number;
|
|
35
39
|
}
|
|
36
40
|
export interface AIProviderAdapter {
|
|
37
41
|
/** Provider type identifier */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/base/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,OAAO,EACP,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACb,MAAM,gBAAgB,CAAC;AAKxB,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uBAAuB;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/base/base-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,15 +29,22 @@ export class BaseAdapter {
|
|
|
29
29
|
let stderr;
|
|
30
30
|
let exitCode;
|
|
31
31
|
let failed;
|
|
32
|
-
if (this.config.useDetachedExec) {
|
|
32
|
+
if (this.config.useDetachedExec === true) {
|
|
33
33
|
// Use detached process execution to avoid SIGTERM from Cursor
|
|
34
|
-
const
|
|
34
|
+
const detachedOptions = {
|
|
35
35
|
cwd,
|
|
36
36
|
timeout,
|
|
37
37
|
env: { ...process.env, ...this.config.env },
|
|
38
38
|
input: request.prompt,
|
|
39
39
|
signal: options?.signal,
|
|
40
|
-
}
|
|
40
|
+
};
|
|
41
|
+
if (options?.onProgress !== undefined) {
|
|
42
|
+
detachedOptions.onProgress = options.onProgress;
|
|
43
|
+
}
|
|
44
|
+
if (options?.progressInterval !== undefined) {
|
|
45
|
+
detachedOptions.progressInterval = options.progressInterval;
|
|
46
|
+
}
|
|
47
|
+
const result = await detachedExec(this.config.command, args, detachedOptions);
|
|
41
48
|
stdout = result.stdout;
|
|
42
49
|
stderr = result.stderr;
|
|
43
50
|
exitCode = result.exitCode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../../src/base/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../../src/base/base-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Spawns CLI processes as fully detached processes to avoid SIGTERM
|
|
5
5
|
* from parent process (e.g., Cursor) killing nested AI CLI instances.
|
|
6
|
+
*
|
|
7
|
+
* SECURITY: Uses robust shell escaping to prevent command injection.
|
|
6
8
|
*/
|
|
7
9
|
export interface DetachedExecOptions {
|
|
8
10
|
/** Working directory */
|
|
@@ -17,6 +19,10 @@ export interface DetachedExecOptions {
|
|
|
17
19
|
signal?: AbortSignal | undefined;
|
|
18
20
|
/** Long arguments that should be read from files (map: argName -> value) */
|
|
19
21
|
longArgs?: Map<string, string>;
|
|
22
|
+
/** Callback for streaming progress (called with partial stdout) */
|
|
23
|
+
onProgress?: (stdout: string) => void;
|
|
24
|
+
/** Interval for progress callbacks in ms (default: 1000) */
|
|
25
|
+
progressInterval?: number;
|
|
20
26
|
}
|
|
21
27
|
export interface DetachedExecResult {
|
|
22
28
|
/** Exit code */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detached-exec.d.ts","sourceRoot":"","sources":["../../src/base/detached-exec.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"detached-exec.d.ts","sourceRoot":"","sources":["../../src/base/detached-exec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2BH,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAiL7B"}
|
|
@@ -3,10 +3,31 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Spawns CLI processes as fully detached processes to avoid SIGTERM
|
|
5
5
|
* from parent process (e.g., Cursor) killing nested AI CLI instances.
|
|
6
|
+
*
|
|
7
|
+
* SECURITY: Uses robust shell escaping to prevent command injection.
|
|
6
8
|
*/
|
|
7
9
|
import { spawn } from 'child_process';
|
|
8
10
|
import { randomUUID } from 'crypto';
|
|
9
11
|
import { existsSync, readFileSync, unlinkSync, writeFileSync } from 'fs';
|
|
12
|
+
/**
|
|
13
|
+
* Securely escape a string for use in shell commands.
|
|
14
|
+
* Uses single quotes and escapes any embedded single quotes.
|
|
15
|
+
* This is the safest way to pass arbitrary strings to shell.
|
|
16
|
+
*
|
|
17
|
+
* SECURITY: This function prevents command injection by:
|
|
18
|
+
* 1. Wrapping the entire string in single quotes (prevents variable expansion)
|
|
19
|
+
* 2. Escaping any embedded single quotes with '\'' sequence
|
|
20
|
+
* 3. Handling all special characters safely (null bytes, newlines, etc.)
|
|
21
|
+
*/
|
|
22
|
+
function shellEscape(arg) {
|
|
23
|
+
// Reject null bytes which could truncate the string
|
|
24
|
+
if (arg.includes('\0')) {
|
|
25
|
+
throw new Error('Argument contains null byte which is not allowed');
|
|
26
|
+
}
|
|
27
|
+
// Single-quote the argument and escape any embedded single quotes
|
|
28
|
+
// 'foo'\''bar' -> wraps foo in quotes, ends quote, adds escaped quote, starts new quote for bar
|
|
29
|
+
return "'" + arg.replace(/'/g, "'\\''") + "'";
|
|
30
|
+
}
|
|
10
31
|
/**
|
|
11
32
|
* Execute a command as a detached process.
|
|
12
33
|
*
|
|
@@ -42,32 +63,44 @@ export async function detachedExec(command, args, options = {}) {
|
|
|
42
63
|
longArgFiles.push(argFile);
|
|
43
64
|
argFileIndex++;
|
|
44
65
|
}
|
|
45
|
-
// Build the command string with
|
|
46
|
-
//
|
|
47
|
-
|
|
66
|
+
// Build the command string with secure escaping
|
|
67
|
+
// SECURITY: Use shellEscape for all arguments to prevent command injection
|
|
68
|
+
// For long args, use $(cat file) substitution with escaped file paths
|
|
69
|
+
const escapedArgs = args
|
|
70
|
+
.map((a) => {
|
|
48
71
|
const argFile = argFileMap.get(a);
|
|
49
72
|
if (argFile !== undefined) {
|
|
50
|
-
// This is a long arg - use cat substitution
|
|
51
|
-
|
|
73
|
+
// This is a long arg - use cat substitution with escaped file path
|
|
74
|
+
// The file path is controlled by us (random UUID), but escape anyway for defense in depth
|
|
75
|
+
return `"$(cat ${shellEscape(argFile)})"`;
|
|
52
76
|
}
|
|
53
|
-
//
|
|
54
|
-
return
|
|
55
|
-
})
|
|
56
|
-
|
|
77
|
+
// Secure escaping for all arguments using single-quote method
|
|
78
|
+
return shellEscape(a);
|
|
79
|
+
})
|
|
80
|
+
.join(' ');
|
|
81
|
+
// Create wrapper script with securely escaped paths
|
|
82
|
+
// SECURITY: All paths and command are properly escaped to prevent injection
|
|
83
|
+
const escapedCwd = shellEscape(cwd);
|
|
84
|
+
const escapedCommand = shellEscape(command);
|
|
85
|
+
const escapedStdoutFile = shellEscape(stdoutFile);
|
|
86
|
+
const escapedStderrFile = shellEscape(stderrFile);
|
|
87
|
+
const escapedExitCodeFile = shellEscape(exitCodeFile);
|
|
88
|
+
const escapedInputFile = shellEscape(inputFile);
|
|
57
89
|
let scriptContent;
|
|
58
90
|
if (options.input !== undefined) {
|
|
59
91
|
scriptContent = `#!/bin/bash
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
92
|
+
set -o pipefail
|
|
93
|
+
cd ${escapedCwd} || exit 1
|
|
94
|
+
cat ${escapedInputFile} | ${escapedCommand} ${escapedArgs} > ${escapedStdoutFile} 2> ${escapedStderrFile}
|
|
95
|
+
echo $? > ${escapedExitCodeFile}
|
|
96
|
+
rm -f ${escapedInputFile}
|
|
64
97
|
`;
|
|
65
98
|
}
|
|
66
99
|
else {
|
|
67
100
|
scriptContent = `#!/bin/bash
|
|
68
|
-
cd
|
|
69
|
-
|
|
70
|
-
echo $? >
|
|
101
|
+
cd ${escapedCwd} || exit 1
|
|
102
|
+
${escapedCommand} ${escapedArgs} > ${escapedStdoutFile} 2> ${escapedStderrFile}
|
|
103
|
+
echo $? > ${escapedExitCodeFile}
|
|
71
104
|
`;
|
|
72
105
|
}
|
|
73
106
|
writeFileSync(wrapperScript, scriptContent, { mode: 0o755 });
|
|
@@ -82,17 +115,32 @@ echo $? > "${exitCodeFile}"
|
|
|
82
115
|
child.unref();
|
|
83
116
|
// Poll for completion
|
|
84
117
|
const pollInterval = 250;
|
|
118
|
+
const progressInterval = options.progressInterval ?? 1000;
|
|
85
119
|
let elapsed = 0;
|
|
120
|
+
let lastProgressTime = 0;
|
|
86
121
|
// timeout === 0 means no timeout (run forever until completion)
|
|
87
122
|
while (timeout === 0 || elapsed < timeout) {
|
|
88
|
-
await new Promise(r => setTimeout(r, pollInterval));
|
|
123
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
89
124
|
elapsed += pollInterval;
|
|
90
125
|
// Check if exit code file exists (process completed)
|
|
91
126
|
if (existsSync(exitCodeFile)) {
|
|
92
127
|
break;
|
|
93
128
|
}
|
|
129
|
+
// Call progress callback periodically with current stdout
|
|
130
|
+
if (options.onProgress && elapsed - lastProgressTime >= progressInterval) {
|
|
131
|
+
lastProgressTime = elapsed;
|
|
132
|
+
try {
|
|
133
|
+
const partialStdout = existsSync(stdoutFile) ? readFileSync(stdoutFile, 'utf8') : '';
|
|
134
|
+
if (partialStdout) {
|
|
135
|
+
options.onProgress(partialStdout);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Ignore read errors during progress
|
|
140
|
+
}
|
|
141
|
+
}
|
|
94
142
|
// Check abort signal
|
|
95
|
-
if (options.signal?.aborted) {
|
|
143
|
+
if (options.signal?.aborted === true) {
|
|
96
144
|
// Try to kill the detached process group
|
|
97
145
|
if (childPid !== undefined) {
|
|
98
146
|
try {
|
|
@@ -121,7 +169,9 @@ echo $? > "${exitCodeFile}"
|
|
|
121
169
|
// Read results
|
|
122
170
|
const stdout = existsSync(stdoutFile) ? readFileSync(stdoutFile, 'utf8') : '';
|
|
123
171
|
const stderr = existsSync(stderrFile) ? readFileSync(stderrFile, 'utf8') : '';
|
|
124
|
-
const exitCode = existsSync(exitCodeFile)
|
|
172
|
+
const exitCode = existsSync(exitCodeFile)
|
|
173
|
+
? parseInt(readFileSync(exitCodeFile, 'utf8').trim(), 10)
|
|
174
|
+
: -1;
|
|
125
175
|
return {
|
|
126
176
|
exitCode,
|
|
127
177
|
stdout,
|
|
@@ -131,8 +181,15 @@ echo $? > "${exitCodeFile}"
|
|
|
131
181
|
}
|
|
132
182
|
finally {
|
|
133
183
|
// Cleanup temp files
|
|
134
|
-
const filesToClean = [
|
|
135
|
-
|
|
184
|
+
const filesToClean = [
|
|
185
|
+
stdoutFile,
|
|
186
|
+
stderrFile,
|
|
187
|
+
exitCodeFile,
|
|
188
|
+
inputFile,
|
|
189
|
+
wrapperScript,
|
|
190
|
+
...longArgFiles,
|
|
191
|
+
];
|
|
192
|
+
filesToClean.forEach((f) => {
|
|
136
193
|
try {
|
|
137
194
|
if (existsSync(f))
|
|
138
195
|
unlinkSync(f);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detached-exec.js","sourceRoot":"","sources":["../../src/base/detached-exec.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"detached-exec.js","sourceRoot":"","sources":["../../src/base/detached-exec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAEzE;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,oDAAoD;IACpD,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,kEAAkE;IAClE,gGAAgG;IAChG,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;AAChD,CAAC;AAgCD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,IAAc,EACd,UAA+B,EAAE;IAEjC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,iBAAiB,MAAM,aAAa,CAAC;IACxD,MAAM,UAAU,GAAG,iBAAiB,MAAM,aAAa,CAAC;IACxD,MAAM,YAAY,GAAG,iBAAiB,MAAM,WAAW,CAAC;IACxD,MAAM,SAAS,GAAG,iBAAiB,MAAM,YAAY,CAAC;IACtD,MAAM,aAAa,GAAG,iBAAiB,MAAM,aAAa,CAAC;IAE3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,qBAAqB;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAkB,CAAC;IAC/D,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,+DAA+D;IAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CACpC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAC9D,CAAC;IAEF,IAAI,CAAC;QACH,kCAAkC;QAClC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAED,yCAAyC;QACzC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,iBAAiB,MAAM,OAAO,YAAY,MAAM,CAAC;YACjE,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,YAAY,EAAE,CAAC;QACjB,CAAC;QAED,gDAAgD;QAChD,2EAA2E;QAC3E,sEAAsE;QACtE,MAAM,WAAW,GAAG,IAAI;aACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,mEAAmE;gBACnE,0FAA0F;gBAC1F,OAAO,UAAU,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;YAC5C,CAAC;YACD,8DAA8D;YAC9D,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,oDAAoD;QACpD,4EAA4E;QAC5E,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,mBAAmB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,aAAqB,CAAC;QAC1B,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,aAAa,GAAG;;KAEjB,UAAU;MACT,gBAAgB,MAAM,cAAc,IAAI,WAAW,MAAM,iBAAiB,OAAO,iBAAiB;YAC5F,mBAAmB;QACvB,gBAAgB;CACvB,CAAC;QACE,CAAC;aAAM,CAAC;YACN,aAAa,GAAG;KACjB,UAAU;EACb,cAAc,IAAI,WAAW,MAAM,iBAAiB,OAAO,iBAAiB;YAClE,mBAAmB;CAC9B,CAAC;QACE,CAAC;QACD,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAE7D,4BAA4B;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE;YAChD,GAAG;YACH,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,WAAqC;SAC3C,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;QAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,sBAAsB;QACtB,MAAM,YAAY,GAAG,GAAG,CAAC;QACzB,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;QAC1D,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,gEAAgE;QAChE,OAAO,OAAO,KAAK,CAAC,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;YAC1C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;YACtD,OAAO,IAAI,YAAY,CAAC;YAExB,qDAAqD;YACrD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7B,MAAM;YACR,CAAC;YAED,0DAA0D;YAC1D,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,GAAG,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;gBACzE,gBAAgB,GAAG,OAAO,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrF,IAAI,aAAa,EAAE,CAAC;wBAClB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;YACH,CAAC;YAED,qBAAqB;YACrB,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrC,yCAAyC;gBACzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACH,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;oBACrC,CAAC;oBAAC,MAAM,CAAC;wBACP,8BAA8B;oBAChC,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnE,gCAAgC;YAChC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,8BAA8B;gBAChC,CAAC;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,eAAe;QACf,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC;YACvC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;YACzD,CAAC,CAAC,CAAC,CAAC,CAAC;QAEP,OAAO;YACL,QAAQ;YACR,MAAM;YACN,MAAM;YACN,MAAM,EAAE,QAAQ,KAAK,CAAC;SACvB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,qBAAqB;QACrB,MAAM,YAAY,GAAG;YACnB,UAAU;YACV,UAAU;YACV,YAAY;YACZ,SAAS;YACT,aAAa;YACb,GAAG,YAAY;SAChB,CAAC;QACF,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,IAAI,UAAU,CAAC,CAAC,CAAC;oBAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -5,9 +5,12 @@
|
|
|
5
5
|
* Supports detached process execution to avoid SIGTERM from Cursor.
|
|
6
6
|
* Auto-discovers skills and agents from workspace .claude/ directory.
|
|
7
7
|
* Supports: claude-opus, claude-sonnet, claude-haiku
|
|
8
|
+
*
|
|
9
|
+
* STREAMING: Uses --output-format stream-json for real-time NDJSON output.
|
|
10
|
+
* Each line is a JSON event with types: system, user, assistant, tool_use, tool_result, result.
|
|
8
11
|
*/
|
|
9
12
|
import type { AIRequest, AIResponse, ProviderType } from '@anastops/core';
|
|
10
|
-
import { BaseAdapter, type AdapterConfig } from '../base/base-adapter.js';
|
|
13
|
+
import { BaseAdapter, type AdapterConfig, type ExecuteOptions } from '../base/base-adapter.js';
|
|
11
14
|
export declare class ClaudeAdapter extends BaseAdapter {
|
|
12
15
|
readonly type: ProviderType;
|
|
13
16
|
readonly name = "Claude Code CLI";
|
|
@@ -33,14 +36,26 @@ export declare class ClaudeAdapter extends BaseAdapter {
|
|
|
33
36
|
* Discover available agents from workspace .claude/agents/ directory
|
|
34
37
|
*/
|
|
35
38
|
private discoverAgents;
|
|
39
|
+
/**
|
|
40
|
+
* Parse NDJSON stream output from Claude CLI (--output-format stream-json)
|
|
41
|
+
* Returns accumulated assistant text and final usage stats
|
|
42
|
+
*
|
|
43
|
+
* NDJSON event structure:
|
|
44
|
+
* - system: init info
|
|
45
|
+
* - assistant: { message: { content: [{ type: 'text', text: '...' }] } }
|
|
46
|
+
* - user: tool results
|
|
47
|
+
* - result: { result: '...', usage: {...} }
|
|
48
|
+
*/
|
|
49
|
+
private parseStreamJson;
|
|
50
|
+
/**
|
|
51
|
+
* Calculate cost for Claude models
|
|
52
|
+
*/
|
|
53
|
+
private calculateCost;
|
|
36
54
|
/**
|
|
37
55
|
* Execute using Claude CLI with --print flag for headless operation
|
|
56
|
+
* Uses --output-format stream-json for real-time streaming
|
|
38
57
|
*/
|
|
39
|
-
execute(request: AIRequest, options?:
|
|
40
|
-
workingDir?: string;
|
|
41
|
-
timeout?: number;
|
|
42
|
-
signal?: AbortSignal;
|
|
43
|
-
}): Promise<AIResponse>;
|
|
58
|
+
execute(request: AIRequest, options?: ExecuteOptions): Promise<AIResponse>;
|
|
44
59
|
/**
|
|
45
60
|
* Map short model aliases (from agent configs) to standard names
|
|
46
61
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../src/claude/claude-adapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../src/claude/claude-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAGtF,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AA4E/F,qBAAa,aAAc,SAAQ,WAAW;IAC5C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAY;IACvC,QAAQ,CAAC,IAAI,qBAAqB;gBAEtB,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAUrC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IASzC;;OAEG;IACH,OAAO,CAAC,cAAc;IAwCtB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2CtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoCtB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAsEvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAmJhF;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,EAAE;IAIlD,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI7C,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK9C,SAAS,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAUxC,SAAS,CAAC,iBAAiB,IAAI,MAAM,EAAE;IAmBvC,SAAS,CAAC,mBAAmB,IAAI,OAAO;IAIxC,SAAS,CAAC,iBAAiB,IAAI,MAAM,EAAE;IAIvC,SAAS,CAAC,iBAAiB,IAAI,OAAO;IAItC,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAIpC,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC,SAAS,CAAC,kBAAkB,IAAI,MAAM;CAGvC"}
|