@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.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/start.d.ts.map +1 -1
  3. package/dist/commands/start.js +4 -23
  4. package/dist/commands/start.js.map +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/config.d.ts +2 -1
  10. package/dist/lib/config.d.ts.map +1 -1
  11. package/dist/lib/config.js +10 -2
  12. package/dist/lib/config.js.map +1 -1
  13. package/dist/lib/display.js +1 -1
  14. package/dist/lib/git-bootstrap.d.ts +19 -0
  15. package/dist/lib/git-bootstrap.d.ts.map +1 -0
  16. package/dist/lib/git-bootstrap.js +41 -0
  17. package/dist/lib/git-bootstrap.js.map +1 -0
  18. package/dist/lib/providers.d.ts.map +1 -1
  19. package/dist/lib/providers.js +17 -15
  20. package/dist/lib/providers.js.map +1 -1
  21. package/dist/lib/task-executor.d.ts +0 -5
  22. package/dist/lib/task-executor.d.ts.map +1 -1
  23. package/dist/lib/task-executor.js +7 -34
  24. package/dist/lib/task-executor.js.map +1 -1
  25. package/dist/providers/base-adapter.d.ts +29 -1
  26. package/dist/providers/base-adapter.d.ts.map +1 -1
  27. package/dist/providers/base-adapter.js +70 -1
  28. package/dist/providers/base-adapter.js.map +1 -1
  29. package/dist/providers/claude-sdk-adapter.d.ts +3 -3
  30. package/dist/providers/claude-sdk-adapter.d.ts.map +1 -1
  31. package/dist/providers/claude-sdk-adapter.js +4 -35
  32. package/dist/providers/claude-sdk-adapter.js.map +1 -1
  33. package/dist/providers/codex-adapter.d.ts +7 -2
  34. package/dist/providers/codex-adapter.d.ts.map +1 -1
  35. package/dist/providers/codex-adapter.js +65 -2
  36. package/dist/providers/codex-adapter.js.map +1 -1
  37. package/dist/providers/index.d.ts +1 -6
  38. package/dist/providers/index.d.ts.map +1 -1
  39. package/dist/providers/index.js +1 -9
  40. package/dist/providers/index.js.map +1 -1
  41. package/dist/providers/openclaw-adapter.d.ts +7 -2
  42. package/dist/providers/openclaw-adapter.d.ts.map +1 -1
  43. package/dist/providers/openclaw-adapter.js +55 -2
  44. package/dist/providers/openclaw-adapter.js.map +1 -1
  45. package/dist/providers/opencode-adapter.d.ts +7 -2
  46. package/dist/providers/opencode-adapter.d.ts.map +1 -1
  47. package/dist/providers/opencode-adapter.js +72 -3
  48. package/dist/providers/opencode-adapter.js.map +1 -1
  49. package/dist/types.d.ts +1 -1
  50. package/dist/types.d.ts.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/providers/claude-code-adapter.d.ts +0 -29
  53. package/dist/providers/claude-code-adapter.d.ts.map +0 -1
  54. package/dist/providers/claude-code-adapter.js +0 -326
  55. 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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"}