@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.
- package/LICENSE +76 -0
- package/README.md +178 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +401 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +9 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +16 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +19 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/setup.d.ts +20 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +585 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +16 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +638 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +63 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +5 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +85 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/execution/direct-strategy.d.ts +18 -0
- package/dist/execution/direct-strategy.d.ts.map +1 -0
- package/dist/execution/direct-strategy.js +156 -0
- package/dist/execution/direct-strategy.js.map +1 -0
- package/dist/execution/docker-strategy.d.ts +26 -0
- package/dist/execution/docker-strategy.d.ts.map +1 -0
- package/dist/execution/docker-strategy.js +222 -0
- package/dist/execution/docker-strategy.js.map +1 -0
- package/dist/execution/index.d.ts +14 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +13 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/kubernetes-exec-strategy.d.ts +23 -0
- package/dist/execution/kubernetes-exec-strategy.d.ts.map +1 -0
- package/dist/execution/kubernetes-exec-strategy.js +232 -0
- package/dist/execution/kubernetes-exec-strategy.js.map +1 -0
- package/dist/execution/registry.d.ts +41 -0
- package/dist/execution/registry.d.ts.map +1 -0
- package/dist/execution/registry.js +84 -0
- package/dist/execution/registry.js.map +1 -0
- package/dist/execution/slurm-strategy.d.ts +22 -0
- package/dist/execution/slurm-strategy.d.ts.map +1 -0
- package/dist/execution/slurm-strategy.js +219 -0
- package/dist/execution/slurm-strategy.js.map +1 -0
- package/dist/execution/types.d.ts +72 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +10 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +35 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +126 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/config.d.ts +174 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +399 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/copy-worktree.d.ts +73 -0
- package/dist/lib/copy-worktree.d.ts.map +1 -0
- package/dist/lib/copy-worktree.js +374 -0
- package/dist/lib/copy-worktree.js.map +1 -0
- package/dist/lib/git-pr.d.ts +63 -0
- package/dist/lib/git-pr.d.ts.map +1 -0
- package/dist/lib/git-pr.js +224 -0
- package/dist/lib/git-pr.js.map +1 -0
- package/dist/lib/hardware-id.d.ts +25 -0
- package/dist/lib/hardware-id.d.ts.map +1 -0
- package/dist/lib/hardware-id.js +186 -0
- package/dist/lib/hardware-id.js.map +1 -0
- package/dist/lib/hpc-context.d.ts +35 -0
- package/dist/lib/hpc-context.d.ts.map +1 -0
- package/dist/lib/hpc-context.js +167 -0
- package/dist/lib/hpc-context.js.map +1 -0
- package/dist/lib/prompt-templates.d.ts +195 -0
- package/dist/lib/prompt-templates.d.ts.map +1 -0
- package/dist/lib/prompt-templates.js +353 -0
- package/dist/lib/prompt-templates.js.map +1 -0
- package/dist/lib/providers.d.ts +27 -0
- package/dist/lib/providers.d.ts.map +1 -0
- package/dist/lib/providers.js +372 -0
- package/dist/lib/providers.js.map +1 -0
- package/dist/lib/repo-context.d.ts +18 -0
- package/dist/lib/repo-context.d.ts.map +1 -0
- package/dist/lib/repo-context.js +61 -0
- package/dist/lib/repo-context.js.map +1 -0
- package/dist/lib/repo-utils.d.ts +35 -0
- package/dist/lib/repo-utils.d.ts.map +1 -0
- package/dist/lib/repo-utils.js +222 -0
- package/dist/lib/repo-utils.js.map +1 -0
- package/dist/lib/resources.d.ts +17 -0
- package/dist/lib/resources.d.ts.map +1 -0
- package/dist/lib/resources.js +227 -0
- package/dist/lib/resources.js.map +1 -0
- package/dist/lib/slurm-detect.d.ts +15 -0
- package/dist/lib/slurm-detect.d.ts.map +1 -0
- package/dist/lib/slurm-detect.js +148 -0
- package/dist/lib/slurm-detect.js.map +1 -0
- package/dist/lib/slurm-executor.d.ts +70 -0
- package/dist/lib/slurm-executor.d.ts.map +1 -0
- package/dist/lib/slurm-executor.js +402 -0
- package/dist/lib/slurm-executor.js.map +1 -0
- package/dist/lib/slurm-job-monitor.d.ts +52 -0
- package/dist/lib/slurm-job-monitor.d.ts.map +1 -0
- package/dist/lib/slurm-job-monitor.js +212 -0
- package/dist/lib/slurm-job-monitor.js.map +1 -0
- package/dist/lib/ssh-discovery.d.ts +17 -0
- package/dist/lib/ssh-discovery.d.ts.map +1 -0
- package/dist/lib/ssh-discovery.js +287 -0
- package/dist/lib/ssh-discovery.js.map +1 -0
- package/dist/lib/ssh-installer.d.ts +69 -0
- package/dist/lib/ssh-installer.d.ts.map +1 -0
- package/dist/lib/ssh-installer.js +230 -0
- package/dist/lib/ssh-installer.js.map +1 -0
- package/dist/lib/streaming-prompt.d.ts +48 -0
- package/dist/lib/streaming-prompt.d.ts.map +1 -0
- package/dist/lib/streaming-prompt.js +91 -0
- package/dist/lib/streaming-prompt.js.map +1 -0
- package/dist/lib/task-executor.d.ts +114 -0
- package/dist/lib/task-executor.d.ts.map +1 -0
- package/dist/lib/task-executor.js +753 -0
- package/dist/lib/task-executor.js.map +1 -0
- package/dist/lib/websocket-client.d.ts +200 -0
- package/dist/lib/websocket-client.d.ts.map +1 -0
- package/dist/lib/websocket-client.js +781 -0
- package/dist/lib/websocket-client.js.map +1 -0
- package/dist/lib/workdir-safety.d.ts +63 -0
- package/dist/lib/workdir-safety.d.ts.map +1 -0
- package/dist/lib/workdir-safety.js +247 -0
- package/dist/lib/workdir-safety.js.map +1 -0
- package/dist/lib/worktree-include.d.ts +14 -0
- package/dist/lib/worktree-include.d.ts.map +1 -0
- package/dist/lib/worktree-include.js +68 -0
- package/dist/lib/worktree-include.js.map +1 -0
- package/dist/lib/worktree-setup.d.ts +18 -0
- package/dist/lib/worktree-setup.d.ts.map +1 -0
- package/dist/lib/worktree-setup.js +60 -0
- package/dist/lib/worktree-setup.js.map +1 -0
- package/dist/lib/worktree.d.ts +37 -0
- package/dist/lib/worktree.d.ts.map +1 -0
- package/dist/lib/worktree.js +411 -0
- package/dist/lib/worktree.js.map +1 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +45 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +153 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session-bridge.d.ts +87 -0
- package/dist/mcp/session-bridge.d.ts.map +1 -0
- package/dist/mcp/session-bridge.js +317 -0
- package/dist/mcp/session-bridge.js.map +1 -0
- package/dist/mcp/tools.d.ts +70 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +234 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +197 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +16 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/base-adapter.d.ts +56 -0
- package/dist/providers/base-adapter.d.ts.map +1 -0
- package/dist/providers/base-adapter.js +5 -0
- package/dist/providers/base-adapter.js.map +1 -0
- package/dist/providers/claude-code-adapter.d.ts +27 -0
- package/dist/providers/claude-code-adapter.d.ts.map +1 -0
- package/dist/providers/claude-code-adapter.js +298 -0
- package/dist/providers/claude-code-adapter.js.map +1 -0
- package/dist/providers/claude-sdk-adapter.d.ts +60 -0
- package/dist/providers/claude-sdk-adapter.d.ts.map +1 -0
- package/dist/providers/claude-sdk-adapter.js +632 -0
- package/dist/providers/claude-sdk-adapter.js.map +1 -0
- package/dist/providers/codex-adapter.d.ts +21 -0
- package/dist/providers/codex-adapter.d.ts.map +1 -0
- package/dist/providers/codex-adapter.js +197 -0
- package/dist/providers/codex-adapter.js.map +1 -0
- package/dist/providers/index.d.ts +26 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +58 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/slurm-adapter.d.ts +26 -0
- package/dist/providers/slurm-adapter.d.ts.map +1 -0
- package/dist/providers/slurm-adapter.js +146 -0
- package/dist/providers/slurm-adapter.js.map +1 -0
- package/dist/types.d.ts +592 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- 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"}
|