@astroanywhere/agent 0.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.
Files changed (203) hide show
  1. package/LICENSE +76 -0
  2. package/README.md +178 -0
  3. package/dist/cli.d.ts +15 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +401 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/index.d.ts +9 -0
  8. package/dist/commands/index.d.ts.map +1 -0
  9. package/dist/commands/index.js +9 -0
  10. package/dist/commands/index.js.map +1 -0
  11. package/dist/commands/mcp.d.ts +16 -0
  12. package/dist/commands/mcp.d.ts.map +1 -0
  13. package/dist/commands/mcp.js +19 -0
  14. package/dist/commands/mcp.js.map +1 -0
  15. package/dist/commands/setup.d.ts +20 -0
  16. package/dist/commands/setup.d.ts.map +1 -0
  17. package/dist/commands/setup.js +585 -0
  18. package/dist/commands/setup.js.map +1 -0
  19. package/dist/commands/start.d.ts +16 -0
  20. package/dist/commands/start.d.ts.map +1 -0
  21. package/dist/commands/start.js +638 -0
  22. package/dist/commands/start.js.map +1 -0
  23. package/dist/commands/status.d.ts +5 -0
  24. package/dist/commands/status.d.ts.map +1 -0
  25. package/dist/commands/status.js +63 -0
  26. package/dist/commands/status.js.map +1 -0
  27. package/dist/commands/stop.d.ts +5 -0
  28. package/dist/commands/stop.d.ts.map +1 -0
  29. package/dist/commands/stop.js +85 -0
  30. package/dist/commands/stop.js.map +1 -0
  31. package/dist/execution/direct-strategy.d.ts +18 -0
  32. package/dist/execution/direct-strategy.d.ts.map +1 -0
  33. package/dist/execution/direct-strategy.js +156 -0
  34. package/dist/execution/direct-strategy.js.map +1 -0
  35. package/dist/execution/docker-strategy.d.ts +26 -0
  36. package/dist/execution/docker-strategy.d.ts.map +1 -0
  37. package/dist/execution/docker-strategy.js +222 -0
  38. package/dist/execution/docker-strategy.js.map +1 -0
  39. package/dist/execution/index.d.ts +14 -0
  40. package/dist/execution/index.d.ts.map +1 -0
  41. package/dist/execution/index.js +13 -0
  42. package/dist/execution/index.js.map +1 -0
  43. package/dist/execution/kubernetes-exec-strategy.d.ts +23 -0
  44. package/dist/execution/kubernetes-exec-strategy.d.ts.map +1 -0
  45. package/dist/execution/kubernetes-exec-strategy.js +232 -0
  46. package/dist/execution/kubernetes-exec-strategy.js.map +1 -0
  47. package/dist/execution/registry.d.ts +41 -0
  48. package/dist/execution/registry.d.ts.map +1 -0
  49. package/dist/execution/registry.js +84 -0
  50. package/dist/execution/registry.js.map +1 -0
  51. package/dist/execution/slurm-strategy.d.ts +22 -0
  52. package/dist/execution/slurm-strategy.d.ts.map +1 -0
  53. package/dist/execution/slurm-strategy.js +219 -0
  54. package/dist/execution/slurm-strategy.js.map +1 -0
  55. package/dist/execution/types.d.ts +72 -0
  56. package/dist/execution/types.d.ts.map +1 -0
  57. package/dist/execution/types.js +10 -0
  58. package/dist/execution/types.js.map +1 -0
  59. package/dist/index.d.ts +22 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +22 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/lib/api-client.d.ts +35 -0
  64. package/dist/lib/api-client.d.ts.map +1 -0
  65. package/dist/lib/api-client.js +126 -0
  66. package/dist/lib/api-client.js.map +1 -0
  67. package/dist/lib/config.d.ts +174 -0
  68. package/dist/lib/config.d.ts.map +1 -0
  69. package/dist/lib/config.js +399 -0
  70. package/dist/lib/config.js.map +1 -0
  71. package/dist/lib/copy-worktree.d.ts +73 -0
  72. package/dist/lib/copy-worktree.d.ts.map +1 -0
  73. package/dist/lib/copy-worktree.js +374 -0
  74. package/dist/lib/copy-worktree.js.map +1 -0
  75. package/dist/lib/git-pr.d.ts +63 -0
  76. package/dist/lib/git-pr.d.ts.map +1 -0
  77. package/dist/lib/git-pr.js +224 -0
  78. package/dist/lib/git-pr.js.map +1 -0
  79. package/dist/lib/hardware-id.d.ts +25 -0
  80. package/dist/lib/hardware-id.d.ts.map +1 -0
  81. package/dist/lib/hardware-id.js +186 -0
  82. package/dist/lib/hardware-id.js.map +1 -0
  83. package/dist/lib/hpc-context.d.ts +35 -0
  84. package/dist/lib/hpc-context.d.ts.map +1 -0
  85. package/dist/lib/hpc-context.js +167 -0
  86. package/dist/lib/hpc-context.js.map +1 -0
  87. package/dist/lib/prompt-templates.d.ts +195 -0
  88. package/dist/lib/prompt-templates.d.ts.map +1 -0
  89. package/dist/lib/prompt-templates.js +353 -0
  90. package/dist/lib/prompt-templates.js.map +1 -0
  91. package/dist/lib/providers.d.ts +27 -0
  92. package/dist/lib/providers.d.ts.map +1 -0
  93. package/dist/lib/providers.js +372 -0
  94. package/dist/lib/providers.js.map +1 -0
  95. package/dist/lib/repo-context.d.ts +18 -0
  96. package/dist/lib/repo-context.d.ts.map +1 -0
  97. package/dist/lib/repo-context.js +61 -0
  98. package/dist/lib/repo-context.js.map +1 -0
  99. package/dist/lib/repo-utils.d.ts +35 -0
  100. package/dist/lib/repo-utils.d.ts.map +1 -0
  101. package/dist/lib/repo-utils.js +222 -0
  102. package/dist/lib/repo-utils.js.map +1 -0
  103. package/dist/lib/resources.d.ts +17 -0
  104. package/dist/lib/resources.d.ts.map +1 -0
  105. package/dist/lib/resources.js +227 -0
  106. package/dist/lib/resources.js.map +1 -0
  107. package/dist/lib/slurm-detect.d.ts +15 -0
  108. package/dist/lib/slurm-detect.d.ts.map +1 -0
  109. package/dist/lib/slurm-detect.js +148 -0
  110. package/dist/lib/slurm-detect.js.map +1 -0
  111. package/dist/lib/slurm-executor.d.ts +70 -0
  112. package/dist/lib/slurm-executor.d.ts.map +1 -0
  113. package/dist/lib/slurm-executor.js +402 -0
  114. package/dist/lib/slurm-executor.js.map +1 -0
  115. package/dist/lib/slurm-job-monitor.d.ts +52 -0
  116. package/dist/lib/slurm-job-monitor.d.ts.map +1 -0
  117. package/dist/lib/slurm-job-monitor.js +212 -0
  118. package/dist/lib/slurm-job-monitor.js.map +1 -0
  119. package/dist/lib/ssh-discovery.d.ts +17 -0
  120. package/dist/lib/ssh-discovery.d.ts.map +1 -0
  121. package/dist/lib/ssh-discovery.js +287 -0
  122. package/dist/lib/ssh-discovery.js.map +1 -0
  123. package/dist/lib/ssh-installer.d.ts +69 -0
  124. package/dist/lib/ssh-installer.d.ts.map +1 -0
  125. package/dist/lib/ssh-installer.js +230 -0
  126. package/dist/lib/ssh-installer.js.map +1 -0
  127. package/dist/lib/streaming-prompt.d.ts +48 -0
  128. package/dist/lib/streaming-prompt.d.ts.map +1 -0
  129. package/dist/lib/streaming-prompt.js +91 -0
  130. package/dist/lib/streaming-prompt.js.map +1 -0
  131. package/dist/lib/task-executor.d.ts +114 -0
  132. package/dist/lib/task-executor.d.ts.map +1 -0
  133. package/dist/lib/task-executor.js +753 -0
  134. package/dist/lib/task-executor.js.map +1 -0
  135. package/dist/lib/websocket-client.d.ts +200 -0
  136. package/dist/lib/websocket-client.d.ts.map +1 -0
  137. package/dist/lib/websocket-client.js +781 -0
  138. package/dist/lib/websocket-client.js.map +1 -0
  139. package/dist/lib/workdir-safety.d.ts +63 -0
  140. package/dist/lib/workdir-safety.d.ts.map +1 -0
  141. package/dist/lib/workdir-safety.js +247 -0
  142. package/dist/lib/workdir-safety.js.map +1 -0
  143. package/dist/lib/worktree-include.d.ts +14 -0
  144. package/dist/lib/worktree-include.d.ts.map +1 -0
  145. package/dist/lib/worktree-include.js +68 -0
  146. package/dist/lib/worktree-include.js.map +1 -0
  147. package/dist/lib/worktree-setup.d.ts +18 -0
  148. package/dist/lib/worktree-setup.d.ts.map +1 -0
  149. package/dist/lib/worktree-setup.js +60 -0
  150. package/dist/lib/worktree-setup.js.map +1 -0
  151. package/dist/lib/worktree.d.ts +37 -0
  152. package/dist/lib/worktree.d.ts.map +1 -0
  153. package/dist/lib/worktree.js +411 -0
  154. package/dist/lib/worktree.js.map +1 -0
  155. package/dist/mcp/index.d.ts +8 -0
  156. package/dist/mcp/index.d.ts.map +1 -0
  157. package/dist/mcp/index.js +8 -0
  158. package/dist/mcp/index.js.map +1 -0
  159. package/dist/mcp/server.d.ts +45 -0
  160. package/dist/mcp/server.d.ts.map +1 -0
  161. package/dist/mcp/server.js +153 -0
  162. package/dist/mcp/server.js.map +1 -0
  163. package/dist/mcp/session-bridge.d.ts +87 -0
  164. package/dist/mcp/session-bridge.d.ts.map +1 -0
  165. package/dist/mcp/session-bridge.js +317 -0
  166. package/dist/mcp/session-bridge.js.map +1 -0
  167. package/dist/mcp/tools.d.ts +70 -0
  168. package/dist/mcp/tools.d.ts.map +1 -0
  169. package/dist/mcp/tools.js +234 -0
  170. package/dist/mcp/tools.js.map +1 -0
  171. package/dist/mcp/types.d.ts +197 -0
  172. package/dist/mcp/types.d.ts.map +1 -0
  173. package/dist/mcp/types.js +16 -0
  174. package/dist/mcp/types.js.map +1 -0
  175. package/dist/providers/base-adapter.d.ts +56 -0
  176. package/dist/providers/base-adapter.d.ts.map +1 -0
  177. package/dist/providers/base-adapter.js +5 -0
  178. package/dist/providers/base-adapter.js.map +1 -0
  179. package/dist/providers/claude-code-adapter.d.ts +27 -0
  180. package/dist/providers/claude-code-adapter.d.ts.map +1 -0
  181. package/dist/providers/claude-code-adapter.js +298 -0
  182. package/dist/providers/claude-code-adapter.js.map +1 -0
  183. package/dist/providers/claude-sdk-adapter.d.ts +60 -0
  184. package/dist/providers/claude-sdk-adapter.d.ts.map +1 -0
  185. package/dist/providers/claude-sdk-adapter.js +632 -0
  186. package/dist/providers/claude-sdk-adapter.js.map +1 -0
  187. package/dist/providers/codex-adapter.d.ts +21 -0
  188. package/dist/providers/codex-adapter.d.ts.map +1 -0
  189. package/dist/providers/codex-adapter.js +197 -0
  190. package/dist/providers/codex-adapter.js.map +1 -0
  191. package/dist/providers/index.d.ts +26 -0
  192. package/dist/providers/index.d.ts.map +1 -0
  193. package/dist/providers/index.js +58 -0
  194. package/dist/providers/index.js.map +1 -0
  195. package/dist/providers/slurm-adapter.d.ts +26 -0
  196. package/dist/providers/slurm-adapter.d.ts.map +1 -0
  197. package/dist/providers/slurm-adapter.js +146 -0
  198. package/dist/providers/slurm-adapter.js.map +1 -0
  199. package/dist/types.d.ts +592 -0
  200. package/dist/types.d.ts.map +1 -0
  201. package/dist/types.js +5 -0
  202. package/dist/types.js.map +1 -0
  203. package/package.json +77 -0
@@ -0,0 +1,585 @@
1
+ /**
2
+ * Setup command - runs device auth, detects providers, configures relay
3
+ */
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import inquirer from 'inquirer';
7
+ import { execFile as execFileCb } from 'node:child_process';
8
+ import { promisify } from 'node:util';
9
+ import { hostname as osHostname } from 'node:os';
10
+ import { config } from '../lib/config.js';
11
+ import { detectProviders, formatProvidersSummary } from '../lib/providers.js';
12
+ import { getMachineResources, formatResourceSummary } from '../lib/resources.js';
13
+ import { discoverRemoteHosts, formatDiscoveredHosts } from '../lib/ssh-discovery.js';
14
+ import { requestDeviceCode, pollForToken, registerMachine, DeviceAuthApiError } from '../lib/api-client.js';
15
+ import { detectLocalIP, checkRemoteNode, packAndInstall } from '../lib/ssh-installer.js';
16
+ const execFile = promisify(execFileCb);
17
+ export async function setupCommand(options = {}) {
18
+ console.log(chalk.bold('\n🚀 Astro Agent Runner Setup\n'));
19
+ // Reset config to defaults so setup always starts fresh
20
+ config.reset();
21
+ console.log(chalk.dim('Configuration reset to defaults.'));
22
+ // Step 0: Initialize hardware-based machine ID
23
+ console.log(chalk.dim('Generating stable machine identifier...'));
24
+ const hwId = await config.initializeMachineId();
25
+ const hwSource = hwId.source === 'uuid' ? 'Hardware UUID' :
26
+ hwId.source === 'mac' ? 'MAC Address' : 'Random UUID';
27
+ console.log(chalk.green(`✓ Machine ID: ${hwId.id.slice(0, 16)}... (from ${hwSource})`));
28
+ console.log();
29
+ // Step 1: Detect machine resources
30
+ const resourceSpinner = ora('Detecting machine resources...').start();
31
+ let resources;
32
+ try {
33
+ resources = await getMachineResources();
34
+ resourceSpinner.succeed('Machine resources detected');
35
+ console.log(chalk.dim(formatResourceSummary(resources)));
36
+ console.log();
37
+ }
38
+ catch (error) {
39
+ resourceSpinner.fail('Failed to detect machine resources');
40
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
41
+ }
42
+ // Step 2: Detect installed providers
43
+ const providerSpinner = ora('Detecting agent providers...').start();
44
+ let detectedProviders;
45
+ try {
46
+ detectedProviders = await detectProviders();
47
+ if (detectedProviders.length > 0) {
48
+ providerSpinner.succeed(`Found ${detectedProviders.length} agent provider(s)`);
49
+ console.log(chalk.dim(formatProvidersSummary(detectedProviders)));
50
+ }
51
+ else {
52
+ providerSpinner.warn('No agent providers detected');
53
+ console.log(chalk.yellow(' Install Claude Code or Codex to enable task execution'));
54
+ console.log(chalk.dim(' Claude Code: https://claude.ai/code'));
55
+ console.log(chalk.dim(' Codex: https://openai.com/codex'));
56
+ }
57
+ console.log();
58
+ }
59
+ catch {
60
+ providerSpinner.fail('Failed to detect providers');
61
+ detectedProviders = [];
62
+ }
63
+ // Step 3: Discover SSH hosts (only if --with-ssh-config flag is set)
64
+ let discoveredHosts = [];
65
+ if (options.withSshConfig) {
66
+ const sshSpinner = ora('Discovering remote hosts...').start();
67
+ try {
68
+ discoveredHosts = await discoverRemoteHosts();
69
+ if (discoveredHosts.length > 0) {
70
+ sshSpinner.succeed(`Found ${discoveredHosts.length} remote host(s)`);
71
+ console.log(chalk.dim(formatDiscoveredHosts(discoveredHosts)));
72
+ }
73
+ else {
74
+ sshSpinner.info('No remote hosts discovered');
75
+ }
76
+ console.log();
77
+ }
78
+ catch {
79
+ sshSpinner.fail('Failed to discover remote hosts');
80
+ discoveredHosts = [];
81
+ }
82
+ }
83
+ // Step 4a: Configure API URL
84
+ // Priority: --api flag > env vars (ASTRO_SERVER_URL, VITE_API_BASE_URL, CLOUDFLARED_DOMAIN) > stored config
85
+ const apiUrl = options.api ?? config.getApiUrl();
86
+ config.setApiUrl(apiUrl);
87
+ console.log(chalk.green(`✓ API server: ${apiUrl}\n`));
88
+ // Step 4b: Configure relay URL
89
+ // Priority: --relay flag > env vars (ASTRO_RELAY_URL, VITE_API_BASE_URL, CLOUDFLARED_DOMAIN) > stored config
90
+ const relayUrl = options.relay ?? config.getRelayUrl();
91
+ config.setRelayUrl(relayUrl);
92
+ console.log(chalk.green(`✓ Relay server: ${relayUrl}\n`));
93
+ // Step 5: Device authentication (if not skipped)
94
+ if (!options.skipAuth) {
95
+ console.log(chalk.bold('Device Authentication\n'));
96
+ // Check if already authenticated
97
+ const existingMachineId = config.getMachineId();
98
+ const hasTokens = config.getAccessToken() && config.getRefreshToken();
99
+ if (hasTokens && existingMachineId) {
100
+ // Always re-authenticate to get fresh tokens (old ones may have expired)
101
+ console.log(chalk.dim(` Previously authenticated as ${existingMachineId}, refreshing tokens...`));
102
+ console.log();
103
+ await runDeviceAuthFlow(apiUrl, relayUrl, resources, detectedProviders, !!options.relay, hwId);
104
+ }
105
+ else if (!options.nonInteractive) {
106
+ const { authenticate } = await inquirer.prompt([
107
+ {
108
+ type: 'confirm',
109
+ name: 'authenticate',
110
+ message: 'Would you like to authenticate this device now?',
111
+ default: true,
112
+ },
113
+ ]);
114
+ if (authenticate) {
115
+ await runDeviceAuthFlow(apiUrl, relayUrl, resources, detectedProviders, !!options.relay, hwId);
116
+ }
117
+ }
118
+ else {
119
+ console.log(chalk.yellow('Skipping authentication in non-interactive mode'));
120
+ console.log(chalk.dim('Run setup again interactively to authenticate'));
121
+ console.log();
122
+ }
123
+ }
124
+ // Step 6: Claude SDK authentication
125
+ if (!options.nonInteractive) {
126
+ console.log(chalk.bold('Claude SDK Authentication\n'));
127
+ const hasExistingToken = !!config.getClaudeOauthToken();
128
+ const hasEnvToken = !!process.env.CLAUDE_CODE_OAUTH_TOKEN || !!process.env.ANTHROPIC_API_KEY;
129
+ if (hasEnvToken) {
130
+ console.log(chalk.green('✓ Claude authentication detected via environment variable\n'));
131
+ }
132
+ else if (hasExistingToken) {
133
+ console.log(chalk.green('✓ Claude OAuth token already configured\n'));
134
+ const { reconfigure } = await inquirer.prompt([
135
+ {
136
+ type: 'confirm',
137
+ name: 'reconfigure',
138
+ message: 'Reconfigure Claude OAuth token?',
139
+ default: false,
140
+ },
141
+ ]);
142
+ if (reconfigure) {
143
+ await setupClaudeOauthToken();
144
+ }
145
+ }
146
+ else {
147
+ // Check if `claude` CLI is already logged in (session-based OAuth)
148
+ let claudeCliLoggedIn = false;
149
+ try {
150
+ const { stdout } = await execFile('claude', ['--version']);
151
+ if (stdout)
152
+ claudeCliLoggedIn = true;
153
+ }
154
+ catch {
155
+ // claude CLI not available
156
+ }
157
+ if (claudeCliLoggedIn) {
158
+ console.log(chalk.green('✓ Claude CLI detected — agent SDK will use existing CLI session\n'));
159
+ }
160
+ else {
161
+ console.log(chalk.dim('The agent runner needs authentication to call the Claude API.'));
162
+ console.log(chalk.dim('You can either:'));
163
+ console.log(chalk.dim(' 1. Run `claude login` to authenticate the CLI (recommended)'));
164
+ console.log(chalk.dim(' 2. Set ANTHROPIC_API_KEY environment variable'));
165
+ console.log(chalk.dim(' 3. Generate a long-lived token via `claude setup-token`\n'));
166
+ }
167
+ }
168
+ console.log();
169
+ }
170
+ // Step 7: Save provider configuration
171
+ const providerTypes = detectedProviders
172
+ .filter((p) => p.available)
173
+ .map((p) => p.type);
174
+ config.setProviders(providerTypes);
175
+ // Step 8: Offer to install on remote hosts (only if SSH discovery was enabled)
176
+ if (options.withSshConfig && discoveredHosts.length > 0 && !options.nonInteractive) {
177
+ console.log(chalk.bold('Remote Installation\n'));
178
+ console.log(chalk.dim('You have SSH access to these hosts. Would you like to install'));
179
+ console.log(chalk.dim('the agent runner on any of them?\n'));
180
+ const { selectedHosts } = await inquirer.prompt([
181
+ {
182
+ type: 'checkbox',
183
+ name: 'selectedHosts',
184
+ message: 'Select hosts to install on:',
185
+ choices: discoveredHosts.map((h) => ({
186
+ name: `${h.name}${h.hostname !== h.name ? ` (${h.hostname})` : ''}`,
187
+ value: h.name,
188
+ })),
189
+ },
190
+ ]);
191
+ if (selectedHosts.length > 0) {
192
+ const installed = await installOnRemoteHosts(selectedHosts, discoveredHosts, apiUrl, relayUrl);
193
+ // Save installed hosts to config for --launch-all reuse
194
+ if (installed.length > 0) {
195
+ config.setRemoteHosts(installed);
196
+ }
197
+ }
198
+ }
199
+ // Step 9: Configure auto-start (use flag instead of prompting)
200
+ const autoStart = options.autoStart ?? false;
201
+ config.setAutoStart(autoStart);
202
+ if (autoStart) {
203
+ console.log(chalk.green('✓ Auto-start enabled'));
204
+ console.log(chalk.dim(' The agent will start automatically when you log in'));
205
+ console.log(chalk.yellow(' Note: Auto-start setup is not yet implemented'));
206
+ }
207
+ // Step 10: Configure MCP for Claude Code integration (install by default if flag is set)
208
+ let mcpConfigured = false;
209
+ if (options.installMcp) {
210
+ console.log();
211
+ console.log(chalk.bold('Claude Code Integration\n'));
212
+ console.log(chalk.dim('Configuring MCP bridge for Claude Code integration...\n'));
213
+ mcpConfigured = await configureMcpForClaudeCode();
214
+ }
215
+ // Mark setup as complete
216
+ config.completeSetup();
217
+ // Summary
218
+ console.log();
219
+ console.log(chalk.bold.green('✓ Setup Complete!\n'));
220
+ console.log('Configuration saved to:', chalk.dim(config.getConfigPath()));
221
+ console.log();
222
+ console.log('Runner ID:', chalk.cyan(config.getRunnerId()));
223
+ console.log('Machine ID:', chalk.cyan(config.getMachineId()));
224
+ console.log('API URL: ', chalk.cyan(config.getApiUrl()));
225
+ console.log('Relay URL:', chalk.cyan(config.getRelayUrl()));
226
+ console.log('Auth: ', config.getAccessToken() ? chalk.green('authenticated') : chalk.yellow('not configured'));
227
+ console.log('Claude: ', config.getClaudeOauthToken()
228
+ ? chalk.green('OAuth token configured')
229
+ : process.env.ANTHROPIC_API_KEY
230
+ ? chalk.green('API key (env)')
231
+ : chalk.yellow('not configured — run `claude setup-token` or set ANTHROPIC_API_KEY'));
232
+ console.log('Providers:', providerTypes.length > 0 ? chalk.cyan(providerTypes.join(', ')) : chalk.yellow('none'));
233
+ console.log('MCP: ', mcpConfigured ? chalk.green('configured for Claude Code') : chalk.yellow('not configured'));
234
+ console.log();
235
+ console.log(chalk.bold('Next steps:'));
236
+ console.log(' 1. Start the agent runner:');
237
+ console.log(chalk.cyan(' npx @astro/agent start'));
238
+ console.log();
239
+ console.log(' 2. Or run in the foreground for testing:');
240
+ console.log(chalk.cyan(' npx @astro/agent start --foreground'));
241
+ console.log();
242
+ if (mcpConfigured) {
243
+ console.log(' 3. In Claude Code, use these tools to connect to Astro:');
244
+ console.log(chalk.cyan(' astro_attach("TASK-ID") # Attach to a task'));
245
+ console.log(chalk.cyan(' astro_status() # Check connection status'));
246
+ console.log(chalk.cyan(' astro_detach() # Detach from task'));
247
+ console.log();
248
+ }
249
+ // Return installed hosts for --launch-all
250
+ const storedHosts = config.getRemoteHosts();
251
+ return { installedHosts: storedHosts.length > 0 ? storedHosts : discoveredHosts };
252
+ }
253
+ // ============================================================================
254
+ // Claude SDK OAuth token setup
255
+ // ============================================================================
256
+ async function setupClaudeOauthToken() {
257
+ console.log();
258
+ console.log(chalk.dim('This will run `claude setup-token` to generate a long-lived OAuth token.'));
259
+ console.log(chalk.dim('You will need a Claude Pro/Max subscription.\n'));
260
+ const spinner = ora('Running claude setup-token...').start();
261
+ try {
262
+ // Check if claude CLI is available
263
+ const claudePath = await findClaudeBinary();
264
+ if (!claudePath) {
265
+ spinner.fail('Claude Code CLI not found');
266
+ console.log(chalk.yellow(' Install Claude Code first: https://claude.ai/code'));
267
+ console.log(chalk.dim(' Or manually set CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY\n'));
268
+ return;
269
+ }
270
+ spinner.stop();
271
+ // Run `claude setup-token` interactively — it needs user input for the OAuth flow
272
+ console.log(chalk.bold(' Running: claude setup-token\n'));
273
+ const { execFileSync } = await import('node:child_process');
274
+ const result = execFileSync(claudePath, ['setup-token'], {
275
+ stdio: 'pipe',
276
+ timeout: 120_000,
277
+ encoding: 'utf-8',
278
+ });
279
+ // The output should contain the token — extract it
280
+ // `claude setup-token` outputs the token to stdout
281
+ const token = result.trim();
282
+ if (token && token.length > 20) {
283
+ config.setClaudeOauthToken(token);
284
+ process.env.CLAUDE_CODE_OAUTH_TOKEN = token;
285
+ console.log(chalk.green('✓ Claude OAuth token saved'));
286
+ console.log(chalk.dim(' Token will be used automatically when the agent starts'));
287
+ }
288
+ else {
289
+ // setup-token is interactive, so piping stdout may not capture the token
290
+ // Fall back to manual entry
291
+ console.log(chalk.yellow('Could not capture token automatically.'));
292
+ await promptForClaudeToken();
293
+ }
294
+ }
295
+ catch (error) {
296
+ spinner.stop();
297
+ const msg = error instanceof Error ? error.message : String(error);
298
+ // setup-token is interactive and needs a TTY — if piping fails, prompt manually
299
+ if (msg.includes('ENOENT') || msg.includes('not found')) {
300
+ console.log(chalk.yellow('Claude Code CLI not found.'));
301
+ console.log(chalk.dim('Install it from: https://claude.ai/code\n'));
302
+ }
303
+ else {
304
+ console.log(chalk.yellow('Could not run `claude setup-token` automatically.'));
305
+ console.log(chalk.dim(` Error: ${msg}\n`));
306
+ }
307
+ console.log(chalk.dim('You can run it manually:'));
308
+ console.log(chalk.cyan(' claude setup-token'));
309
+ console.log(chalk.dim('Then paste the token here:\n'));
310
+ await promptForClaudeToken();
311
+ }
312
+ }
313
+ async function promptForClaudeToken() {
314
+ const { token } = await inquirer.prompt([
315
+ {
316
+ type: 'password',
317
+ name: 'token',
318
+ message: 'Paste your Claude OAuth token (or press Enter to skip):',
319
+ },
320
+ ]);
321
+ if (token && token.trim().length > 10) {
322
+ config.setClaudeOauthToken(token.trim());
323
+ process.env.CLAUDE_CODE_OAUTH_TOKEN = token.trim();
324
+ console.log(chalk.green('✓ Claude OAuth token saved'));
325
+ }
326
+ else {
327
+ console.log(chalk.yellow('Skipped — you can set it later via environment variable'));
328
+ }
329
+ }
330
+ async function findClaudeBinary() {
331
+ try {
332
+ const { stdout } = await execFile(process.platform === 'win32' ? 'where' : 'which', ['claude'], { timeout: 5000 });
333
+ return stdout.trim().split('\n')[0] ?? null;
334
+ }
335
+ catch {
336
+ return null;
337
+ }
338
+ }
339
+ // ============================================================================
340
+ // Device auth flow (real backend)
341
+ // ============================================================================
342
+ async function runDeviceAuthFlow(apiUrl, _relayUrl, resources, detectedProviders, relayExplicit = false, hwId) {
343
+ const hostname = resources?.hostname ?? osHostname();
344
+ const platform = resources?.platform ?? process.platform;
345
+ // Generate a stable machine name from hardware ID
346
+ const { generateMachineName } = await import('../lib/hardware-id.js');
347
+ const machineName = generateMachineName(hwId.id, hwId.source);
348
+ // 1. Request device code
349
+ const authSpinner = ora('Requesting device code...').start();
350
+ let deviceAuth;
351
+ try {
352
+ deviceAuth = await requestDeviceCode(apiUrl, {
353
+ hostname,
354
+ platform,
355
+ });
356
+ }
357
+ catch (err) {
358
+ authSpinner.fail('Failed to request device code');
359
+ if (err instanceof DeviceAuthApiError) {
360
+ console.error(chalk.red(` ${err.message}`));
361
+ if (err.code === 'network') {
362
+ console.log(chalk.dim(` Is the backend running at ${apiUrl}?`));
363
+ console.log(chalk.dim(' Start it with: npm run dev:backend'));
364
+ }
365
+ }
366
+ else {
367
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
368
+ }
369
+ console.log();
370
+ return;
371
+ }
372
+ // 2. Show verification URL and code
373
+ authSpinner.info('Please authorize this device');
374
+ console.log();
375
+ console.log(chalk.bold(' Open this URL in your browser:'));
376
+ console.log(chalk.cyan(` ${deviceAuth.verificationUriComplete}`));
377
+ console.log();
378
+ console.log(chalk.bold(' Device code:'));
379
+ console.log(chalk.yellow(` ${deviceAuth.deviceCode}`));
380
+ console.log();
381
+ // 3. Try to auto-open in browser
382
+ tryOpenUrl(deviceAuth.verificationUriComplete);
383
+ // 4. Poll for authorization
384
+ const pollSpinner = ora('Waiting for authorization...').start();
385
+ let tokenResponse;
386
+ try {
387
+ tokenResponse = await pollForToken(apiUrl, deviceAuth.userCode, deviceAuth.interval, deviceAuth.expiresIn);
388
+ }
389
+ catch (err) {
390
+ if (err instanceof DeviceAuthApiError) {
391
+ switch (err.code) {
392
+ case 'denied':
393
+ pollSpinner.fail('Authorization denied by user');
394
+ break;
395
+ case 'expired':
396
+ pollSpinner.fail('Device code expired. Run setup again to retry.');
397
+ break;
398
+ case 'timeout':
399
+ pollSpinner.fail('Timed out waiting for authorization');
400
+ break;
401
+ default:
402
+ pollSpinner.fail(`Authorization failed: ${err.message}`);
403
+ }
404
+ }
405
+ else {
406
+ pollSpinner.fail('Authorization failed');
407
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
408
+ }
409
+ console.log();
410
+ return;
411
+ }
412
+ pollSpinner.succeed('Device authenticated successfully');
413
+ // 5. Register machine
414
+ const regSpinner = ora('Registering machine...').start();
415
+ try {
416
+ const providerTypes = detectedProviders
417
+ .filter((p) => p.available)
418
+ .map((p) => ({ type: p.type, name: p.name, version: p.version }));
419
+ const regResponse = await registerMachine(apiUrl, tokenResponse.accessToken, {
420
+ machineId: hwId.id, // Hardware-based stable ID — used as DB primary key
421
+ hostname, // Actual network hostname (for display)
422
+ name: machineName, // Stable name from hardware ID
423
+ platform,
424
+ providers: providerTypes,
425
+ resources: resources ?? undefined,
426
+ metadata: {
427
+ hardwareId: hwId.id,
428
+ hardwareIdSource: hwId.source,
429
+ },
430
+ });
431
+ regSpinner.succeed(`Machine registered as "${regResponse.machineName}" (${regResponse.machineId})`);
432
+ // 6. Save all tokens and IDs
433
+ config.setAccessToken(regResponse.accessToken);
434
+ config.setRefreshToken(regResponse.refreshToken);
435
+ config.setWsToken(regResponse.wsToken);
436
+ config.setMachineId(regResponse.machineId);
437
+ // Update relay URL if the server provided one (but not if explicitly passed via --relay)
438
+ if (regResponse.relayUrl && !relayExplicit) {
439
+ config.setRelayUrl(regResponse.relayUrl);
440
+ }
441
+ console.log();
442
+ }
443
+ catch (err) {
444
+ regSpinner.fail('Failed to register machine');
445
+ if (err instanceof DeviceAuthApiError) {
446
+ console.error(chalk.red(` ${err.message}`));
447
+ }
448
+ else {
449
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
450
+ }
451
+ // Still save the access/refresh tokens from the auth step
452
+ config.setAccessToken(tokenResponse.accessToken);
453
+ config.setRefreshToken(tokenResponse.refreshToken);
454
+ console.log();
455
+ }
456
+ }
457
+ // ============================================================================
458
+ // Remote SSH install
459
+ // ============================================================================
460
+ async function installOnRemoteHosts(selectedHosts, discoveredHosts, apiUrl, relayUrl) {
461
+ const installedHosts = [];
462
+ console.log();
463
+ const localIP = detectLocalIP();
464
+ // Build URLs that remote hosts can reach
465
+ const remoteApiUrl = apiUrl.replace('localhost', localIP).replace('127.0.0.1', localIP);
466
+ const remoteRelayUrl = relayUrl.replace('localhost', localIP).replace('127.0.0.1', localIP);
467
+ for (const hostName of selectedHosts) {
468
+ const host = discoveredHosts.find((h) => h.name === hostName);
469
+ if (!host)
470
+ continue;
471
+ const spinner = ora(`Checking Node.js on ${hostName}...`).start();
472
+ // Check remote Node.js availability
473
+ const nodeCheck = await checkRemoteNode(host);
474
+ if (!nodeCheck.available) {
475
+ spinner.fail(`${hostName}: Node.js ${nodeCheck.version ? `${nodeCheck.version} (need ≥18)` : 'not found'}`);
476
+ console.log(chalk.dim(' Install Node.js ≥ 18 on this host first'));
477
+ continue;
478
+ }
479
+ spinner.text = `Installing on ${hostName}...`;
480
+ // Get the local access token to register on behalf of remote hosts
481
+ const localAccessToken = config.getAccessToken();
482
+ if (!localAccessToken) {
483
+ spinner.fail(`${hostName}: No auth tokens available. Authenticate locally first.`);
484
+ continue;
485
+ }
486
+ try {
487
+ // Register each remote host as a separate machine with its own ID
488
+ spinner.text = `${hostName}: Registering machine...`;
489
+ console.log();
490
+ console.log(chalk.dim(`[setup] Registering ${hostName} (${host.hostname}) at ${remoteApiUrl}`));
491
+ console.log(chalk.dim(`[setup] Using access token: ${localAccessToken.slice(0, 20)}...`));
492
+ const regResponse = await registerMachine(remoteApiUrl, localAccessToken, {
493
+ hostname: host.hostname,
494
+ name: hostName,
495
+ platform: 'linux',
496
+ providers: [],
497
+ });
498
+ console.log(chalk.dim(`[setup] ✓ Machine registered with ID: ${regResponse.machineId}`));
499
+ console.log(chalk.dim(`[setup] Access token: ${regResponse.accessToken.slice(0, 20)}...`));
500
+ console.log(chalk.dim(`[setup] Refresh token: ${regResponse.refreshToken.slice(0, 20)}...`));
501
+ console.log(chalk.dim(`[setup] WS token: ${regResponse.wsToken.slice(0, 20)}...`));
502
+ await packAndInstall({
503
+ host,
504
+ apiUrl: remoteApiUrl,
505
+ relayUrl: remoteRelayUrl,
506
+ accessToken: regResponse.accessToken,
507
+ refreshToken: regResponse.refreshToken,
508
+ wsToken: regResponse.wsToken,
509
+ machineId: regResponse.machineId,
510
+ }, (msg) => {
511
+ spinner.text = `${hostName}: ${msg}`;
512
+ });
513
+ spinner.succeed(`${hostName}: Installed and configured (${regResponse.machineId})`);
514
+ installedHosts.push(host);
515
+ }
516
+ catch (err) {
517
+ spinner.fail(`${hostName}: Installation failed`);
518
+ console.error(chalk.red(` ${err instanceof Error ? err.message : String(err)}`));
519
+ if (err instanceof Error && err.stack) {
520
+ console.error(chalk.dim(`[setup] Stack trace: ${err.stack}`));
521
+ }
522
+ }
523
+ }
524
+ console.log();
525
+ return installedHosts;
526
+ }
527
+ // ============================================================================
528
+ // MCP Configuration for Claude Code
529
+ // ============================================================================
530
+ async function configureMcpForClaudeCode() {
531
+ const { getClaudeCodeMcpConfig, getClaudeCodeConfigPath } = await import('../mcp/server.js');
532
+ const { readFile, writeFile, mkdir } = await import('node:fs/promises');
533
+ const { dirname } = await import('node:path');
534
+ const configPath = getClaudeCodeConfigPath();
535
+ const mcpConfig = getClaudeCodeMcpConfig();
536
+ const spinner = ora('Configuring Claude Code MCP integration...').start();
537
+ try {
538
+ // Ensure the config directory exists
539
+ await mkdir(dirname(configPath), { recursive: true });
540
+ // Read existing config or start fresh
541
+ let existingConfig = {};
542
+ try {
543
+ const content = await readFile(configPath, 'utf-8');
544
+ existingConfig = JSON.parse(content);
545
+ }
546
+ catch {
547
+ // File doesn't exist or invalid JSON - start fresh
548
+ }
549
+ // Merge configurations
550
+ const mcpServers = existingConfig.mcpServers ?? {};
551
+ const updatedConfig = {
552
+ ...existingConfig,
553
+ mcpServers: {
554
+ ...mcpServers,
555
+ ...mcpConfig.mcpServers,
556
+ },
557
+ };
558
+ // Write updated config
559
+ await writeFile(configPath, JSON.stringify(updatedConfig, null, 2));
560
+ spinner.succeed('Claude Code MCP integration configured');
561
+ console.log(chalk.dim(` Config: ${configPath}`));
562
+ console.log(chalk.dim(' Server: astro (npx @astro/agent mcp)'));
563
+ console.log();
564
+ return true;
565
+ }
566
+ catch (error) {
567
+ spinner.fail('Failed to configure Claude Code MCP integration');
568
+ console.error(chalk.red(` ${error instanceof Error ? error.message : String(error)}`));
569
+ console.log();
570
+ console.log(chalk.dim('You can manually add this to your Claude Code MCP config:'));
571
+ console.log(chalk.cyan(JSON.stringify(mcpConfig, null, 2)));
572
+ console.log();
573
+ return false;
574
+ }
575
+ }
576
+ // ============================================================================
577
+ // Helpers
578
+ // ============================================================================
579
+ function tryOpenUrl(url) {
580
+ const cmd = process.platform === 'darwin' ? 'open' : 'xdg-open';
581
+ execFile(cmd, [url]).catch(() => {
582
+ // Silently ignore — user can open manually
583
+ });
584
+ }
585
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Start command - starts the agent runner
3
+ */
4
+ interface StartOptions {
5
+ foreground?: boolean;
6
+ relay?: string;
7
+ maxTasks?: number;
8
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
9
+ preserveWorktrees?: boolean;
10
+ allowNonGit?: boolean;
11
+ useSandbox?: boolean;
12
+ maxSandboxSize?: number;
13
+ }
14
+ export declare function startCommand(options?: StartOptions): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAwED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+f5E"}