@astroanywhere/agent 0.1.16 → 0.1.18

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 (57) hide show
  1. package/dist/cli.d.ts +4 -4
  2. package/dist/cli.js +25 -59
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/index.d.ts +1 -1
  5. package/dist/commands/index.d.ts.map +1 -1
  6. package/dist/commands/index.js +1 -1
  7. package/dist/commands/index.js.map +1 -1
  8. package/dist/commands/logs.d.ts +10 -0
  9. package/dist/commands/logs.d.ts.map +1 -0
  10. package/dist/commands/logs.js +90 -0
  11. package/dist/commands/logs.js.map +1 -0
  12. package/dist/commands/setup.js +9 -2
  13. package/dist/commands/setup.js.map +1 -1
  14. package/dist/commands/start.d.ts.map +1 -1
  15. package/dist/commands/start.js +88 -4
  16. package/dist/commands/start.js.map +1 -1
  17. package/dist/commands/status.js +1 -1
  18. package/dist/commands/status.js.map +1 -1
  19. package/dist/lib/providers.d.ts.map +1 -1
  20. package/dist/lib/providers.js +195 -1
  21. package/dist/lib/providers.js.map +1 -1
  22. package/dist/lib/ssh-installer.d.ts +5 -0
  23. package/dist/lib/ssh-installer.d.ts.map +1 -1
  24. package/dist/lib/ssh-installer.js +13 -0
  25. package/dist/lib/ssh-installer.js.map +1 -1
  26. package/dist/lib/task-executor.d.ts.map +1 -1
  27. package/dist/lib/task-executor.js +11 -0
  28. package/dist/lib/task-executor.js.map +1 -1
  29. package/dist/lib/workdir-safety.js +20 -20
  30. package/dist/lib/workdir-safety.js.map +1 -1
  31. package/dist/providers/claude-code-adapter.d.ts +2 -0
  32. package/dist/providers/claude-code-adapter.d.ts.map +1 -1
  33. package/dist/providers/claude-code-adapter.js +22 -2
  34. package/dist/providers/claude-code-adapter.js.map +1 -1
  35. package/dist/providers/codex-adapter.d.ts +48 -0
  36. package/dist/providers/codex-adapter.d.ts.map +1 -1
  37. package/dist/providers/codex-adapter.js +294 -12
  38. package/dist/providers/codex-adapter.js.map +1 -1
  39. package/dist/providers/index.d.ts +2 -0
  40. package/dist/providers/index.d.ts.map +1 -1
  41. package/dist/providers/index.js +10 -0
  42. package/dist/providers/index.js.map +1 -1
  43. package/dist/providers/openclaw-adapter.d.ts +48 -0
  44. package/dist/providers/openclaw-adapter.d.ts.map +1 -0
  45. package/dist/providers/openclaw-adapter.js +324 -0
  46. package/dist/providers/openclaw-adapter.js.map +1 -0
  47. package/dist/providers/opencode-adapter.d.ts +46 -0
  48. package/dist/providers/opencode-adapter.d.ts.map +1 -0
  49. package/dist/providers/opencode-adapter.js +329 -0
  50. package/dist/providers/opencode-adapter.js.map +1 -0
  51. package/dist/types.d.ts +3 -1
  52. package/dist/types.d.ts.map +1 -1
  53. package/package.json +1 -1
  54. package/dist/commands/plan.d.ts +0 -67
  55. package/dist/commands/plan.d.ts.map +0 -1
  56. package/dist/commands/plan.js +0 -374
  57. package/dist/commands/plan.js.map +0 -1
@@ -1,374 +0,0 @@
1
- /**
2
- * Plan commands - list, show, and graph plan nodes
3
- */
4
- import chalk from 'chalk';
5
- import { config } from '../lib/config.js';
6
- // ============================================================================
7
- // API Client
8
- // ============================================================================
9
- /**
10
- * Fetch plan data for a project from the backend
11
- */
12
- async function fetchPlanData(projectId) {
13
- const apiUrl = config.getApiUrl();
14
- const accessToken = config.getAccessToken();
15
- if (!accessToken) {
16
- throw new Error('Not authenticated. Run: npx @astroanywhere/agent setup');
17
- }
18
- const res = await fetch(`${apiUrl}/api/data/plan/${projectId}`, {
19
- method: 'GET',
20
- headers: {
21
- 'Content-Type': 'application/json',
22
- Authorization: `Bearer ${accessToken}`,
23
- },
24
- });
25
- if (!res.ok) {
26
- const body = await res.text();
27
- throw new Error(`Failed to fetch plan data (${res.status}): ${body}`);
28
- }
29
- return (await res.json());
30
- }
31
- // ============================================================================
32
- // Formatters
33
- // ============================================================================
34
- const STATUS_ICONS = {
35
- planned: chalk.dim('○'),
36
- dispatched: chalk.blue('◎'),
37
- in_progress: chalk.yellow('●'),
38
- auto_verified: chalk.green('✓'),
39
- awaiting_judgment: chalk.magenta('?'),
40
- awaiting_approval: chalk.cyan('⊙'),
41
- completed: chalk.green('✓'),
42
- pruned: chalk.dim('✗'),
43
- };
44
- const TYPE_ICONS = {
45
- milestone: chalk.bold('◆'),
46
- task: chalk.dim('▸'),
47
- branch: chalk.cyan('⎇'),
48
- decision: chalk.yellow('◇'),
49
- };
50
- function formatStatus(status) {
51
- const icon = STATUS_ICONS[status] || '○';
52
- return `${icon} ${status}`;
53
- }
54
- // Used to format type with icon (available for future extensions)
55
- // function formatType(type: string): string {
56
- // const icon = TYPE_ICONS[type] || '▸';
57
- // return `${icon} ${type}`;
58
- // }
59
- function formatDate(dateStr) {
60
- if (!dateStr)
61
- return chalk.dim('—');
62
- return chalk.dim(dateStr);
63
- }
64
- function formatNodeSummary(node) {
65
- const icon = STATUS_ICONS[node.status] || '○';
66
- const typeIcon = TYPE_ICONS[node.type] || '▸';
67
- const title = node.title.length > 50 ? node.title.slice(0, 47) + '...' : node.title;
68
- return `${icon} ${typeIcon} ${chalk.bold(title)}`;
69
- }
70
- function formatNodeDetail(node) {
71
- const lines = [];
72
- lines.push(chalk.bold(`\n${TYPE_ICONS[node.type] || '▸'} ${node.title}\n`));
73
- lines.push(` ${chalk.dim('ID:')} ${chalk.cyan(node.id)}`);
74
- lines.push(` ${chalk.dim('Type:')} ${node.type}`);
75
- lines.push(` ${chalk.dim('Status:')} ${formatStatus(node.status)}`);
76
- if (node.description) {
77
- lines.push(` ${chalk.dim('Description:')} ${node.description}`);
78
- }
79
- if (node.priority) {
80
- lines.push(` ${chalk.dim('Priority:')} ${node.priority}`);
81
- }
82
- if (node.estimate) {
83
- lines.push(` ${chalk.dim('Estimate:')} ${node.estimate}`);
84
- }
85
- if (node.startDate || node.endDate) {
86
- lines.push(` ${chalk.dim('Dates:')} ${formatDate(node.startDate)} → ${formatDate(node.endDate)}`);
87
- }
88
- if (node.dueDate) {
89
- lines.push(` ${chalk.dim('Due:')} ${formatDate(node.dueDate)}`);
90
- }
91
- if (node.verification) {
92
- lines.push(` ${chalk.dim('Verification:')} ${node.verification}`);
93
- }
94
- if (node.milestoneId) {
95
- lines.push(` ${chalk.dim('Milestone:')} ${node.milestoneId}`);
96
- }
97
- if (node.executionId) {
98
- lines.push(` ${chalk.dim('Execution:')} ${node.executionId}`);
99
- if (node.executionError) {
100
- lines.push(` ${chalk.red('Error:')} ${node.executionError}`);
101
- }
102
- }
103
- if (node.branchName) {
104
- lines.push(` ${chalk.dim('Branch:')} ${chalk.cyan(node.branchName)}`);
105
- }
106
- if (node.prUrl) {
107
- lines.push(` ${chalk.dim('PR:')} ${chalk.cyan(node.prUrl)}`);
108
- }
109
- lines.push(` ${chalk.dim('Created:')} ${formatDate(node.createdAt)}`);
110
- lines.push(` ${chalk.dim('Updated:')} ${formatDate(node.updatedAt)}`);
111
- return lines.join('\n');
112
- }
113
- /**
114
- * Build a tree structure from nodes and edges
115
- */
116
- function buildTree(nodes, edges) {
117
- // Create a map of node ID to node
118
- const nodeMap = new Map();
119
- for (const node of nodes) {
120
- nodeMap.set(node.id, { ...node, children: [], level: 0 });
121
- }
122
- // Build parent-child relationships from edges (dependency edges)
123
- // In dependency edges, target depends on source, so source is the "parent" in execution order
124
- const childrenMap = new Map();
125
- const hasParent = new Set();
126
- for (const edge of edges) {
127
- // edge.source -> edge.target means target depends on source
128
- // So source's "children" (things that come after it) include target
129
- if (!childrenMap.has(edge.source)) {
130
- childrenMap.set(edge.source, []);
131
- }
132
- childrenMap.get(edge.source).push(edge.target);
133
- hasParent.add(edge.target);
134
- }
135
- // Wire up children
136
- for (const [parentId, childIds] of childrenMap) {
137
- const parent = nodeMap.get(parentId);
138
- if (parent) {
139
- for (const childId of childIds) {
140
- const child = nodeMap.get(childId);
141
- if (child) {
142
- parent.children.push(child);
143
- }
144
- }
145
- }
146
- }
147
- // Find root nodes (nodes with no incoming edges)
148
- const roots = [];
149
- for (const node of nodeMap.values()) {
150
- if (!hasParent.has(node.id)) {
151
- roots.push(node);
152
- }
153
- }
154
- // If no roots found (cycles or isolated nodes), return all nodes as roots
155
- if (roots.length === 0) {
156
- return Array.from(nodeMap.values());
157
- }
158
- // Assign levels via BFS
159
- const queue = [...roots];
160
- const visited = new Set();
161
- while (queue.length > 0) {
162
- const node = queue.shift();
163
- if (visited.has(node.id))
164
- continue;
165
- visited.add(node.id);
166
- for (const child of node.children) {
167
- child.level = Math.max(child.level, node.level + 1);
168
- if (!visited.has(child.id)) {
169
- queue.push(child);
170
- }
171
- }
172
- }
173
- return roots;
174
- }
175
- /**
176
- * Convert tree to nested JSON structure with children arrays
177
- */
178
- function treeToJson(roots) {
179
- function nodeToJson(node) {
180
- return {
181
- id: node.id,
182
- type: node.type,
183
- title: node.title,
184
- description: node.description,
185
- status: node.status,
186
- priority: node.priority,
187
- estimate: node.estimate,
188
- startDate: node.startDate,
189
- endDate: node.endDate,
190
- dueDate: node.dueDate,
191
- verification: node.verification,
192
- executionId: node.executionId,
193
- branchName: node.branchName,
194
- prUrl: node.prUrl,
195
- children: node.children.map(nodeToJson),
196
- };
197
- }
198
- return roots.map(nodeToJson);
199
- }
200
- /**
201
- * Render ASCII graph
202
- */
203
- function renderAsciiGraph(roots) {
204
- const lines = [];
205
- const visited = new Set();
206
- function renderNode(node, prefix, isLast, isRoot) {
207
- if (visited.has(node.id)) {
208
- // Handle cycles - show reference
209
- const connector = isRoot ? '' : (isLast ? '└── ' : '├── ');
210
- lines.push(`${prefix}${connector}${chalk.dim(`(→ ${node.title.slice(0, 20)}...)`)}`);
211
- return;
212
- }
213
- visited.add(node.id);
214
- // Current node line
215
- const connector = isRoot ? '' : (isLast ? '└── ' : '├── ');
216
- const statusIcon = STATUS_ICONS[node.status] || '○';
217
- const typeIcon = TYPE_ICONS[node.type] || '▸';
218
- const title = node.title.length > 40 ? node.title.slice(0, 37) + '...' : node.title;
219
- lines.push(`${prefix}${connector}${statusIcon} ${typeIcon} ${chalk.bold(title)} ${chalk.dim(`[${node.id.slice(0, 8)}]`)}`);
220
- // Render children
221
- const childPrefix = isRoot ? '' : (prefix + (isLast ? ' ' : '│ '));
222
- for (let i = 0; i < node.children.length; i++) {
223
- const child = node.children[i];
224
- const childIsLast = i === node.children.length - 1;
225
- renderNode(child, childPrefix, childIsLast, false);
226
- }
227
- }
228
- for (let i = 0; i < roots.length; i++) {
229
- renderNode(roots[i], '', i === roots.length - 1, true);
230
- }
231
- return lines.join('\n');
232
- }
233
- // ============================================================================
234
- // Commands
235
- // ============================================================================
236
- /**
237
- * List all plan nodes for a project
238
- */
239
- export async function planListCommand(options) {
240
- const { projectId, json } = options;
241
- try {
242
- const planData = await fetchPlanData(projectId);
243
- if (json) {
244
- console.log(JSON.stringify(planData.nodes, null, 2));
245
- return;
246
- }
247
- if (planData.nodes.length === 0) {
248
- console.log(chalk.dim('\nNo plan nodes found for this project.\n'));
249
- return;
250
- }
251
- console.log(chalk.bold(`\n📋 Plan Nodes (${planData.nodes.length})\n`));
252
- // Group by status
253
- const byStatus = {};
254
- for (const node of planData.nodes) {
255
- if (!byStatus[node.status]) {
256
- byStatus[node.status] = [];
257
- }
258
- byStatus[node.status].push(node);
259
- }
260
- // Order statuses
261
- const statusOrder = ['in_progress', 'dispatched', 'planned', 'awaiting_approval', 'awaiting_judgment', 'auto_verified', 'completed', 'pruned'];
262
- for (const status of statusOrder) {
263
- const nodes = byStatus[status];
264
- if (!nodes || nodes.length === 0)
265
- continue;
266
- console.log(chalk.bold(`${formatStatus(status)} (${nodes.length})`));
267
- for (const node of nodes) {
268
- console.log(` ${formatNodeSummary(node)} ${chalk.dim(`[${node.id.slice(0, 8)}]`)}`);
269
- }
270
- console.log();
271
- }
272
- }
273
- catch (error) {
274
- console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
275
- process.exit(1);
276
- }
277
- }
278
- /**
279
- * Show details for a specific plan node
280
- */
281
- export async function planShowCommand(options) {
282
- const { nodeId, json } = options;
283
- try {
284
- // We need to fetch all plans and find the node
285
- // The API doesn't have a direct node lookup, so we fetch all projects first
286
- const apiUrl = config.getApiUrl();
287
- const accessToken = config.getAccessToken();
288
- if (!accessToken) {
289
- throw new Error('Not authenticated. Run: npx @astroanywhere/agent setup');
290
- }
291
- // Fetch all plans
292
- const res = await fetch(`${apiUrl}/api/data/plan`, {
293
- method: 'GET',
294
- headers: {
295
- 'Content-Type': 'application/json',
296
- Authorization: `Bearer ${accessToken}`,
297
- },
298
- });
299
- if (!res.ok) {
300
- const body = await res.text();
301
- throw new Error(`Failed to fetch plan data (${res.status}): ${body}`);
302
- }
303
- const planData = (await res.json());
304
- // Find the node
305
- const node = planData.nodes.find(n => n.id === nodeId || n.id.startsWith(nodeId));
306
- if (!node) {
307
- console.error(chalk.red(`Node not found: ${nodeId}`));
308
- process.exit(1);
309
- }
310
- if (json) {
311
- console.log(JSON.stringify(node, null, 2));
312
- return;
313
- }
314
- console.log(formatNodeDetail(node));
315
- // Show dependencies
316
- const incomingEdges = planData.edges.filter(e => e.target === node.id);
317
- const outgoingEdges = planData.edges.filter(e => e.source === node.id);
318
- if (incomingEdges.length > 0) {
319
- console.log(chalk.bold('\n Dependencies (blocks this):'));
320
- for (const edge of incomingEdges) {
321
- const dep = planData.nodes.find(n => n.id === edge.source);
322
- if (dep) {
323
- console.log(` ${formatNodeSummary(dep)} ${chalk.dim(`[${dep.id.slice(0, 8)}]`)}`);
324
- }
325
- }
326
- }
327
- if (outgoingEdges.length > 0) {
328
- console.log(chalk.bold('\n Dependents (blocked by this):'));
329
- for (const edge of outgoingEdges) {
330
- const dep = planData.nodes.find(n => n.id === edge.target);
331
- if (dep) {
332
- console.log(` ${formatNodeSummary(dep)} ${chalk.dim(`[${dep.id.slice(0, 8)}]`)}`);
333
- }
334
- }
335
- }
336
- console.log();
337
- }
338
- catch (error) {
339
- console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
340
- process.exit(1);
341
- }
342
- }
343
- /**
344
- * Show ASCII dependency graph for a project
345
- */
346
- export async function planGraphCommand(options) {
347
- const { projectId, json } = options;
348
- try {
349
- const planData = await fetchPlanData(projectId);
350
- if (planData.nodes.length === 0) {
351
- console.log(chalk.dim('\nNo plan nodes found for this project.\n'));
352
- return;
353
- }
354
- const roots = buildTree(planData.nodes, planData.edges);
355
- if (json) {
356
- const nestedJson = treeToJson(roots);
357
- console.log(JSON.stringify(nestedJson, null, 2));
358
- return;
359
- }
360
- console.log(chalk.bold('\n🌳 Plan Dependency Graph\n'));
361
- console.log(renderAsciiGraph(roots));
362
- console.log();
363
- // Legend
364
- console.log(chalk.dim('Legend:'));
365
- console.log(chalk.dim(` ${STATUS_ICONS.planned} planned ${STATUS_ICONS.in_progress} in progress ${STATUS_ICONS.completed} completed ${STATUS_ICONS.pruned} pruned`));
366
- console.log(chalk.dim(` ${TYPE_ICONS.milestone} milestone ${TYPE_ICONS.task} task ${TYPE_ICONS.branch} branch ${TYPE_ICONS.decision} decision`));
367
- console.log();
368
- }
369
- catch (error) {
370
- console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
371
- process.exit(1);
372
- }
373
- }
374
- //# sourceMappingURL=plan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}