@astroanywhere/agent 0.1.44 → 0.1.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +4 -23
- package/dist/commands/start.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +2 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +10 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/display.js +1 -1
- package/dist/lib/git-bootstrap.d.ts +19 -0
- package/dist/lib/git-bootstrap.d.ts.map +1 -0
- package/dist/lib/git-bootstrap.js +41 -0
- package/dist/lib/git-bootstrap.js.map +1 -0
- package/dist/lib/providers.d.ts.map +1 -1
- package/dist/lib/providers.js +17 -15
- package/dist/lib/providers.js.map +1 -1
- package/dist/lib/task-executor.d.ts +0 -5
- package/dist/lib/task-executor.d.ts.map +1 -1
- package/dist/lib/task-executor.js +7 -34
- package/dist/lib/task-executor.js.map +1 -1
- package/dist/providers/base-adapter.d.ts +29 -1
- package/dist/providers/base-adapter.d.ts.map +1 -1
- package/dist/providers/base-adapter.js +70 -1
- package/dist/providers/base-adapter.js.map +1 -1
- package/dist/providers/claude-sdk-adapter.d.ts +3 -3
- package/dist/providers/claude-sdk-adapter.d.ts.map +1 -1
- package/dist/providers/claude-sdk-adapter.js +4 -35
- package/dist/providers/claude-sdk-adapter.js.map +1 -1
- package/dist/providers/codex-adapter.d.ts +7 -2
- package/dist/providers/codex-adapter.d.ts.map +1 -1
- package/dist/providers/codex-adapter.js +65 -2
- package/dist/providers/codex-adapter.js.map +1 -1
- package/dist/providers/index.d.ts +1 -6
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -9
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openclaw-adapter.d.ts +7 -2
- package/dist/providers/openclaw-adapter.d.ts.map +1 -1
- package/dist/providers/openclaw-adapter.js +55 -2
- package/dist/providers/openclaw-adapter.js.map +1 -1
- package/dist/providers/opencode-adapter.d.ts +7 -2
- package/dist/providers/opencode-adapter.d.ts.map +1 -1
- package/dist/providers/opencode-adapter.js +72 -3
- package/dist/providers/opencode-adapter.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/providers/claude-code-adapter.d.ts +0 -29
- package/dist/providers/claude-code-adapter.d.ts.map +0 -1
- package/dist/providers/claude-code-adapter.js +0 -326
- package/dist/providers/claude-code-adapter.js.map +0 -1
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code provider adapter
|
|
3
|
-
*
|
|
4
|
-
* Executes tasks using the Claude Code CLI (claude command)
|
|
5
|
-
*/
|
|
6
|
-
import { spawn } from 'node:child_process';
|
|
7
|
-
import { existsSync } from 'node:fs';
|
|
8
|
-
import { getProvider } from '../lib/providers.js';
|
|
9
|
-
export class ClaudeCodeAdapter {
|
|
10
|
-
type = 'claude-code';
|
|
11
|
-
name = 'Claude Code';
|
|
12
|
-
activeTasks = 0;
|
|
13
|
-
maxTasks = 1; // Claude Code runs one task at a time
|
|
14
|
-
lastError;
|
|
15
|
-
claudePath = null;
|
|
16
|
-
lastResultMetrics;
|
|
17
|
-
/** Maps tool_use_id → tool name for correlating tool_use with tool_result */
|
|
18
|
-
toolIdToName = new Map();
|
|
19
|
-
async isAvailable() {
|
|
20
|
-
const provider = await getProvider('claude-code');
|
|
21
|
-
if (provider?.available) {
|
|
22
|
-
this.claudePath = provider.path;
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
async execute(task, stream, signal) {
|
|
28
|
-
if (!this.claudePath) {
|
|
29
|
-
const available = await this.isAvailable();
|
|
30
|
-
if (!available) {
|
|
31
|
-
return {
|
|
32
|
-
taskId: task.id,
|
|
33
|
-
status: 'failed',
|
|
34
|
-
error: 'Claude Code not available',
|
|
35
|
-
startedAt: new Date().toISOString(),
|
|
36
|
-
completedAt: new Date().toISOString(),
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
this.activeTasks++;
|
|
41
|
-
const startedAt = new Date().toISOString();
|
|
42
|
-
try {
|
|
43
|
-
stream.status('running', 0, 'Starting Claude Code');
|
|
44
|
-
this.lastResultMetrics = undefined;
|
|
45
|
-
this.toolIdToName.clear();
|
|
46
|
-
const result = await this.runClaude(task, stream, signal);
|
|
47
|
-
return {
|
|
48
|
-
taskId: task.id,
|
|
49
|
-
status: result.exitCode === 0 ? 'completed' : 'failed',
|
|
50
|
-
exitCode: result.exitCode,
|
|
51
|
-
output: result.output,
|
|
52
|
-
error: result.error,
|
|
53
|
-
startedAt,
|
|
54
|
-
completedAt: new Date().toISOString(),
|
|
55
|
-
artifacts: result.artifacts,
|
|
56
|
-
metrics: this.lastResultMetrics,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
61
|
-
this.lastError = errorMsg;
|
|
62
|
-
if (signal.aborted) {
|
|
63
|
-
return {
|
|
64
|
-
taskId: task.id,
|
|
65
|
-
status: 'cancelled',
|
|
66
|
-
error: 'Task cancelled',
|
|
67
|
-
startedAt,
|
|
68
|
-
completedAt: new Date().toISOString(),
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
return {
|
|
72
|
-
taskId: task.id,
|
|
73
|
-
status: 'failed',
|
|
74
|
-
error: errorMsg,
|
|
75
|
-
startedAt,
|
|
76
|
-
completedAt: new Date().toISOString(),
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
finally {
|
|
80
|
-
this.activeTasks--;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
async getStatus() {
|
|
84
|
-
const available = await this.isAvailable();
|
|
85
|
-
const provider = await getProvider('claude-code');
|
|
86
|
-
return {
|
|
87
|
-
available,
|
|
88
|
-
version: provider?.version ?? null,
|
|
89
|
-
activeTasks: this.activeTasks,
|
|
90
|
-
maxTasks: this.maxTasks,
|
|
91
|
-
lastError: this.lastError,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
runClaude(task, stream, signal) {
|
|
95
|
-
return new Promise((resolve, reject) => {
|
|
96
|
-
// Claude Code CLI: --print = fully autonomous non-interactive mode
|
|
97
|
-
// No approval prompts, no terminal interaction.
|
|
98
|
-
// Code executes locally on the host machine (not on Anthropic's cloud).
|
|
99
|
-
const args = [
|
|
100
|
-
'--print', // Fully autonomous — no permission prompts, runs to completion
|
|
101
|
-
'--verbose', // Required for stream-json with --print
|
|
102
|
-
'--output-format', 'stream-json', // JSON streaming output for structured parsing
|
|
103
|
-
];
|
|
104
|
-
// Claude Code expects the prompt as the last argument or via stdin
|
|
105
|
-
// We'll pass it as an argument for simplicity
|
|
106
|
-
args.push(task.prompt);
|
|
107
|
-
const env = {
|
|
108
|
-
...process.env,
|
|
109
|
-
...task.environment,
|
|
110
|
-
};
|
|
111
|
-
let proc;
|
|
112
|
-
console.log(`[claude-code] Spawning: ${this.claudePath} --print --output-format stream-json <prompt>`);
|
|
113
|
-
console.log(`[claude-code] cwd: ${task.workingDirectory}`);
|
|
114
|
-
console.log(`[claude-code] prompt length: ${task.prompt.length} chars`);
|
|
115
|
-
// Validate working directory exists before spawning.
|
|
116
|
-
// Node.js spawn throws a misleading "ENOENT" (which looks like the
|
|
117
|
-
// binary is missing) when the cwd doesn't exist.
|
|
118
|
-
if (task.workingDirectory && !existsSync(task.workingDirectory)) {
|
|
119
|
-
const error = new Error(`Working directory does not exist: ${task.workingDirectory}. ` +
|
|
120
|
-
`Ensure the directory exists on this machine before dispatching.`);
|
|
121
|
-
console.error(`[claude-code] Spawn failed:`, error);
|
|
122
|
-
reject(error);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
try {
|
|
126
|
-
proc = spawn(this.claudePath, args, {
|
|
127
|
-
cwd: task.workingDirectory || undefined,
|
|
128
|
-
env,
|
|
129
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
console.error(`[claude-code] Spawn failed:`, error);
|
|
134
|
-
reject(error);
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
// Close stdin immediately - we pass the prompt as an argument, not via stdin
|
|
138
|
-
proc.stdin?.end();
|
|
139
|
-
console.log(`[claude-code] Process spawned, pid=${proc.pid}`);
|
|
140
|
-
let stdout = '';
|
|
141
|
-
let stderr = '';
|
|
142
|
-
const artifacts = [];
|
|
143
|
-
// Handle abort signal
|
|
144
|
-
const abortHandler = () => {
|
|
145
|
-
proc.kill('SIGTERM');
|
|
146
|
-
// Give it a moment, then force kill
|
|
147
|
-
setTimeout(() => {
|
|
148
|
-
if (!proc.killed) {
|
|
149
|
-
proc.kill('SIGKILL');
|
|
150
|
-
}
|
|
151
|
-
}, 5000);
|
|
152
|
-
};
|
|
153
|
-
signal.addEventListener('abort', abortHandler);
|
|
154
|
-
let lineBuf = '';
|
|
155
|
-
proc.stdout?.on('data', (data) => {
|
|
156
|
-
const text = data.toString();
|
|
157
|
-
stdout += text;
|
|
158
|
-
// Parse stream-json lines and forward only meaningful content
|
|
159
|
-
lineBuf += text;
|
|
160
|
-
const lines = lineBuf.split('\n');
|
|
161
|
-
lineBuf = lines.pop() || ''; // keep incomplete last line in buffer
|
|
162
|
-
for (const line of lines) {
|
|
163
|
-
if (line.trim()) {
|
|
164
|
-
this.handleStreamLine(line, stream);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
proc.stderr?.on('data', (data) => {
|
|
169
|
-
const text = data.toString();
|
|
170
|
-
console.log(`[claude-code] stderr: ${text.slice(0, 200)}`);
|
|
171
|
-
stderr += text;
|
|
172
|
-
stream.stderr(text);
|
|
173
|
-
});
|
|
174
|
-
// Set up timeout if specified (declared before close handler so it can be cleared)
|
|
175
|
-
let taskTimeoutHandle;
|
|
176
|
-
if (task.timeout) {
|
|
177
|
-
taskTimeoutHandle = setTimeout(() => {
|
|
178
|
-
if (!proc.killed) {
|
|
179
|
-
proc.kill('SIGTERM');
|
|
180
|
-
setTimeout(() => {
|
|
181
|
-
if (!proc.killed) {
|
|
182
|
-
proc.kill('SIGKILL');
|
|
183
|
-
}
|
|
184
|
-
}, 5000);
|
|
185
|
-
}
|
|
186
|
-
}, task.timeout);
|
|
187
|
-
}
|
|
188
|
-
proc.on('error', (error) => {
|
|
189
|
-
console.error(`[claude-code] Process error:`, error);
|
|
190
|
-
signal.removeEventListener('abort', abortHandler);
|
|
191
|
-
if (taskTimeoutHandle)
|
|
192
|
-
clearTimeout(taskTimeoutHandle);
|
|
193
|
-
reject(error);
|
|
194
|
-
});
|
|
195
|
-
proc.on('close', (code) => {
|
|
196
|
-
// Flush remaining buffer
|
|
197
|
-
if (lineBuf.trim()) {
|
|
198
|
-
this.handleStreamLine(lineBuf, stream);
|
|
199
|
-
}
|
|
200
|
-
console.log(`[claude-code] Process exited with code ${code}, stdout=${stdout.length} chars, stderr=${stderr.length} chars`);
|
|
201
|
-
signal.removeEventListener('abort', abortHandler);
|
|
202
|
-
if (taskTimeoutHandle)
|
|
203
|
-
clearTimeout(taskTimeoutHandle);
|
|
204
|
-
resolve({
|
|
205
|
-
exitCode: code ?? 1,
|
|
206
|
-
output: stdout,
|
|
207
|
-
error: stderr || undefined,
|
|
208
|
-
artifacts: artifacts.length > 0 ? artifacts : undefined,
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Handle a single JSON line from Claude Code's stream-json output.
|
|
215
|
-
* Extracts human-readable text and structured events, forwarding only
|
|
216
|
-
* meaningful content to the stream (not raw JSON).
|
|
217
|
-
*/
|
|
218
|
-
handleStreamLine(line, stream) {
|
|
219
|
-
try {
|
|
220
|
-
const event = JSON.parse(line);
|
|
221
|
-
const type = event.type;
|
|
222
|
-
switch (type) {
|
|
223
|
-
case 'system': {
|
|
224
|
-
// Init event — extract session info
|
|
225
|
-
const sessionId = event.session_id;
|
|
226
|
-
const model = event.model;
|
|
227
|
-
if (sessionId) {
|
|
228
|
-
stream.sessionInit(sessionId, model);
|
|
229
|
-
}
|
|
230
|
-
break;
|
|
231
|
-
}
|
|
232
|
-
case 'assistant': {
|
|
233
|
-
// Assistant message with content blocks
|
|
234
|
-
const message = event.message;
|
|
235
|
-
if (message?.content) {
|
|
236
|
-
for (const block of message.content) {
|
|
237
|
-
if (block.type === 'text' && block.text) {
|
|
238
|
-
// Use structured text instead of raw stdout
|
|
239
|
-
stream.text(block.text + '\n');
|
|
240
|
-
}
|
|
241
|
-
else if (block.type === 'tool_use') {
|
|
242
|
-
// Record id → name mapping for correlating with tool_result
|
|
243
|
-
if (block.id && block.name) {
|
|
244
|
-
this.toolIdToName.set(block.id, block.name);
|
|
245
|
-
}
|
|
246
|
-
// Send structured tool use for the Tools panel
|
|
247
|
-
stream.toolUse(block.name ?? 'unknown', block.input);
|
|
248
|
-
// Emit file change event (line counts computed post-execution via git diff)
|
|
249
|
-
if (block.name === 'Write' || block.name === 'Edit') {
|
|
250
|
-
const input = block.input;
|
|
251
|
-
if (input.file_path) {
|
|
252
|
-
const action = block.name === 'Write' ? 'created' : 'modified';
|
|
253
|
-
stream.fileChange(String(input.file_path), action);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
break;
|
|
260
|
-
}
|
|
261
|
-
case 'user': {
|
|
262
|
-
// Tool results
|
|
263
|
-
const message = event.message;
|
|
264
|
-
const toolResultData = event.tool_use_result;
|
|
265
|
-
// Send structured tool result for the Tools panel
|
|
266
|
-
if (message?.content) {
|
|
267
|
-
for (const block of message.content) {
|
|
268
|
-
if (block.type === 'tool_result') {
|
|
269
|
-
const resultContent = toolResultData?.stdout || block.content || '';
|
|
270
|
-
// Look up the actual tool name from the tool_use_id → name map
|
|
271
|
-
const toolName = (block.tool_use_id && this.toolIdToName.get(block.tool_use_id)) ?? 'unknown';
|
|
272
|
-
stream.toolResult(toolName, resultContent, !block.is_error);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
if (toolResultData?.stderr) {
|
|
277
|
-
stream.stderr(toolResultData.stderr);
|
|
278
|
-
}
|
|
279
|
-
break;
|
|
280
|
-
}
|
|
281
|
-
case 'result': {
|
|
282
|
-
// Final result — don't send text (already streamed via assistant events)
|
|
283
|
-
// Extract cost/usage info and metrics
|
|
284
|
-
// Claude Code CLI may use `cost_usd` or `total_cost_usd` depending on version
|
|
285
|
-
const cost = (event.total_cost_usd ?? event.cost_usd);
|
|
286
|
-
const numTurns = event.num_turns;
|
|
287
|
-
const durationMs = (event.duration_ms ?? event.duration_api_ms);
|
|
288
|
-
const usage = event.usage;
|
|
289
|
-
const model = event.model;
|
|
290
|
-
// Log result event fields for debugging token extraction
|
|
291
|
-
const eventKeys = Object.keys(event).filter(k => k !== 'result').sort();
|
|
292
|
-
console.log(`[claude-code] Result event fields: ${eventKeys.join(', ')}`);
|
|
293
|
-
if (usage) {
|
|
294
|
-
console.log(`[claude-code] Usage: input_tokens=${usage.input_tokens}, output_tokens=${usage.output_tokens}`);
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
console.log(`[claude-code] No usage field found on result event`);
|
|
298
|
-
}
|
|
299
|
-
this.lastResultMetrics = {
|
|
300
|
-
inputTokens: usage?.input_tokens,
|
|
301
|
-
outputTokens: usage?.output_tokens,
|
|
302
|
-
totalCost: cost,
|
|
303
|
-
numTurns,
|
|
304
|
-
durationMs,
|
|
305
|
-
model,
|
|
306
|
-
};
|
|
307
|
-
if (cost !== undefined) {
|
|
308
|
-
stream.status('running', 100, `Completed (${numTurns ?? 0} turns, $${cost.toFixed(4)})`);
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
stream.status('running', 100, 'Completed');
|
|
312
|
-
}
|
|
313
|
-
break;
|
|
314
|
-
}
|
|
315
|
-
default:
|
|
316
|
-
// Unknown event type — skip
|
|
317
|
-
break;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
catch {
|
|
321
|
-
// Not valid JSON — send as raw text
|
|
322
|
-
stream.stdout(line);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
//# sourceMappingURL=claude-code-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-adapter.js","sourceRoot":"","sources":["../../src/providers/claude-code-adapter.ts"],"names":[],"mappings":"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"}
|