@autocode-cli/autocode 0.8.36 → 0.8.37
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2FpC;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAkMtC"}
|
|
@@ -1,29 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* serve command - Start
|
|
2
|
+
* serve command - Start Nuxt dashboard server
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from 'commander';
|
|
5
|
-
import { execSync } from 'node:child_process';
|
|
6
|
-
import {
|
|
5
|
+
import { spawn, execSync } from 'node:child_process';
|
|
6
|
+
import { resolve, join } from 'node:path';
|
|
7
|
+
import { getConfig, getPackageDir } from '../../utils/config.js';
|
|
7
8
|
import { ensureColumnStructure, copyActionTemplates } from '../../core/column.js';
|
|
8
9
|
import { ensureDir, pathExists, writeFileSafe } from '../../utils/fs.js';
|
|
9
|
-
import { join } from 'node:path';
|
|
10
10
|
import { logger } from '../../utils/logger.js';
|
|
11
11
|
import { pipelineExists } from '../../core/pipeline.js';
|
|
12
12
|
import { hasTransitionIssues, getTransitionIssues, applySync, previewSync } from '../../core/sync.js';
|
|
13
|
-
import { setTunnelUrl } from '../../server/websocket.js';
|
|
14
13
|
import { isCloudflaredInstalled, getOrCreateTunnel, startTunnelSupervisor, } from '../../utils/tunnel.js';
|
|
14
|
+
const DEFAULT_NUXT_PORT = 3000;
|
|
15
|
+
/**
|
|
16
|
+
* Get dashboard-nuxt directory path
|
|
17
|
+
*/
|
|
18
|
+
function getDashboardNuxtDir() {
|
|
19
|
+
const packageDir = getPackageDir();
|
|
20
|
+
return resolve(packageDir, 'dashboard-nuxt');
|
|
21
|
+
}
|
|
15
22
|
/**
|
|
16
23
|
* Kill any process using the specified port
|
|
17
24
|
*/
|
|
18
25
|
function killPortProcess(port) {
|
|
19
26
|
try {
|
|
20
|
-
// Try fuser first (more common on Linux)
|
|
21
27
|
execSync(`fuser -k ${port}/tcp 2>/dev/null`, { stdio: 'ignore' });
|
|
22
28
|
logger.info(` → Killed existing process on port ${port}`);
|
|
23
29
|
}
|
|
24
30
|
catch {
|
|
25
31
|
try {
|
|
26
|
-
// Fallback to lsof (works on macOS and some Linux)
|
|
27
32
|
const pid = execSync(`lsof -ti:${port} 2>/dev/null`, { encoding: 'utf-8' }).trim();
|
|
28
33
|
if (pid) {
|
|
29
34
|
execSync(`kill -9 ${pid}`, { stdio: 'ignore' });
|
|
@@ -35,6 +40,43 @@ function killPortProcess(port) {
|
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Build Nuxt dashboard
|
|
45
|
+
*/
|
|
46
|
+
async function buildNuxtDashboard(cwd, env) {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
logger.info('Building Nuxt dashboard...');
|
|
49
|
+
const build = spawn('npm', ['run', 'build'], {
|
|
50
|
+
cwd,
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
shell: true,
|
|
53
|
+
env: { ...process.env, ...env },
|
|
54
|
+
});
|
|
55
|
+
build.on('close', (code) => {
|
|
56
|
+
if (code === 0) {
|
|
57
|
+
logger.success('Build completed');
|
|
58
|
+
resolve();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
reject(new Error(`Build failed with exit code ${code}`));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
build.on('error', reject);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Start Nitro server
|
|
69
|
+
*/
|
|
70
|
+
function startNitroServer(cwd, env) {
|
|
71
|
+
logger.info('Starting Nitro server...');
|
|
72
|
+
const server = spawn('npm', ['run', 'preview'], {
|
|
73
|
+
cwd,
|
|
74
|
+
stdio: 'inherit',
|
|
75
|
+
shell: true,
|
|
76
|
+
env: { ...process.env, ...env },
|
|
77
|
+
});
|
|
78
|
+
return server;
|
|
79
|
+
}
|
|
38
80
|
/**
|
|
39
81
|
* Create the serve command
|
|
40
82
|
*/
|
|
@@ -42,12 +84,25 @@ export function serveCommand() {
|
|
|
42
84
|
const cmd = new Command('serve');
|
|
43
85
|
cmd
|
|
44
86
|
.description('Start the web dashboard server')
|
|
45
|
-
.option('-p, --port <port>', 'Server port', String(
|
|
87
|
+
.option('-p, --port <port>', 'Server port', String(DEFAULT_NUXT_PORT))
|
|
46
88
|
.option('-e, --expose', 'Expose dashboard via Cloudflare tunnel (persistent)')
|
|
89
|
+
.option('--skip-build', 'Skip build step (use existing .output)')
|
|
47
90
|
.action(async (options) => {
|
|
48
|
-
const port = parseInt(options.port, 10) ||
|
|
91
|
+
const port = parseInt(options.port, 10) || DEFAULT_NUXT_PORT;
|
|
49
92
|
const config = getConfig();
|
|
50
|
-
//
|
|
93
|
+
// Validate dashboard-nuxt directory exists
|
|
94
|
+
const dashboardDir = getDashboardNuxtDir();
|
|
95
|
+
if (!pathExists(dashboardDir)) {
|
|
96
|
+
logger.error('dashboard-nuxt directory not found');
|
|
97
|
+
logger.info(`Expected at: ${dashboardDir}`);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
// Check for package.json
|
|
101
|
+
if (!pathExists(resolve(dashboardDir, 'package.json'))) {
|
|
102
|
+
logger.error('package.json not found in dashboard-nuxt');
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
// Auto-initialize autocode directory if it doesn't exist
|
|
51
106
|
if (!pathExists(config.root)) {
|
|
52
107
|
logger.info(`Initializing autocode in ${config.root}...`);
|
|
53
108
|
logger.info(' → Creating root directory...');
|
|
@@ -69,7 +124,6 @@ export function serveCommand() {
|
|
|
69
124
|
killPortProcess(port);
|
|
70
125
|
// If pipeline.yml exists, check for sync and transition issues
|
|
71
126
|
if (pipelineExists()) {
|
|
72
|
-
// Check for needed sync
|
|
73
127
|
const changes = previewSync(config.root);
|
|
74
128
|
const needsSync = changes.added.length > 0 || changes.removed.length > 0 || changes.renamed.length > 0;
|
|
75
129
|
if (needsSync) {
|
|
@@ -82,7 +136,6 @@ export function serveCommand() {
|
|
|
82
136
|
if (result.renamed.length > 0)
|
|
83
137
|
logger.info(` → Renamed ${result.renamed.length} folder(s)`);
|
|
84
138
|
}
|
|
85
|
-
// Check for transition issues
|
|
86
139
|
if (hasTransitionIssues(config.root)) {
|
|
87
140
|
const transitionIssues = getTransitionIssues(config.root);
|
|
88
141
|
logger.warn('');
|
|
@@ -92,57 +145,99 @@ export function serveCommand() {
|
|
|
92
145
|
logger.warn('');
|
|
93
146
|
}
|
|
94
147
|
}
|
|
148
|
+
// Prepare environment variables
|
|
149
|
+
let tunnelUrl = '';
|
|
150
|
+
// Setup tunnel BEFORE build if --expose (to have WebSocket URL ready)
|
|
151
|
+
if (options.expose) {
|
|
152
|
+
if (!isCloudflaredInstalled()) {
|
|
153
|
+
logger.error('cloudflared is not installed');
|
|
154
|
+
logger.info('Install: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/');
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
logger.info('Setting up Cloudflare tunnel...');
|
|
158
|
+
try {
|
|
159
|
+
const { url, reused } = await getOrCreateTunnel(config.root, port);
|
|
160
|
+
if (reused) {
|
|
161
|
+
logger.info('Reusing existing tunnel');
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
logger.success('New tunnel created');
|
|
165
|
+
}
|
|
166
|
+
tunnelUrl = url;
|
|
167
|
+
logger.success(`Dashboard will be exposed at: ${url}`);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
logger.error(`Failed to setup tunnel: ${error}`);
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Build environment variables for Nuxt
|
|
175
|
+
const nuxtEnv = {
|
|
176
|
+
AUTOCODE_ROOT: config.root,
|
|
177
|
+
PORT: String(port),
|
|
178
|
+
NITRO_PORT: String(port),
|
|
179
|
+
CLAUDE_ENABLED: String(config.claudeEnabled),
|
|
180
|
+
ANTHROPIC_API_KEY: process.env['ANTHROPIC_API_KEY'] || '',
|
|
181
|
+
NUXT_PUBLIC_WS_URL: tunnelUrl ? `wss://${tunnelUrl.replace('https://', '')}` : '',
|
|
182
|
+
};
|
|
95
183
|
logger.info(`Starting dashboard server...`);
|
|
96
184
|
logger.info(` → Port: ${port}`);
|
|
97
185
|
logger.info(` → Root: ${config.root}`);
|
|
98
|
-
logger.info(` →
|
|
99
|
-
|
|
186
|
+
logger.info(` → Claude: ${config.claudeEnabled ? 'enabled' : 'disabled'}`);
|
|
187
|
+
if (tunnelUrl) {
|
|
188
|
+
logger.info(` → Tunnel: ${tunnelUrl}`);
|
|
189
|
+
}
|
|
100
190
|
try {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (!
|
|
107
|
-
logger.error('
|
|
108
|
-
logger.info('Install: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/');
|
|
191
|
+
// Build step (unless --skip-build)
|
|
192
|
+
if (!options.skipBuild) {
|
|
193
|
+
await buildNuxtDashboard(dashboardDir, nuxtEnv);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
if (!pathExists(resolve(dashboardDir, '.output'))) {
|
|
197
|
+
logger.error('.output directory not found. Run without --skip-build first.');
|
|
109
198
|
process.exit(1);
|
|
110
199
|
}
|
|
111
|
-
logger.info('
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
});
|
|
129
|
-
// Note: We do NOT kill the tunnel on Ctrl+C
|
|
130
|
-
// The tunnel persists independently
|
|
131
|
-
logger.info('Tunnel runs independently (survives Ctrl+C)');
|
|
132
|
-
logger.info('Use "autocode tunnel stop" to stop it manually');
|
|
133
|
-
// Clean up supervisor interval on exit (but not the tunnel)
|
|
134
|
-
const cleanup = () => {
|
|
135
|
-
clearInterval(supervisorInterval);
|
|
136
|
-
process.exit(0);
|
|
137
|
-
};
|
|
138
|
-
process.on('SIGINT', cleanup);
|
|
139
|
-
process.on('SIGTERM', cleanup);
|
|
200
|
+
logger.info('Skipping build (using existing .output)');
|
|
201
|
+
}
|
|
202
|
+
// Start the Nitro server
|
|
203
|
+
const serverProcess = startNitroServer(dashboardDir, nuxtEnv);
|
|
204
|
+
// Start tunnel supervisor if --expose
|
|
205
|
+
let supervisorInterval = null;
|
|
206
|
+
if (options.expose && tunnelUrl) {
|
|
207
|
+
supervisorInterval = startTunnelSupervisor(config.root, port, (newUrl) => {
|
|
208
|
+
logger.warn('Tunnel died, restarted with new URL');
|
|
209
|
+
logger.success(`Dashboard exposed at: ${newUrl}`);
|
|
210
|
+
});
|
|
211
|
+
logger.info('Tunnel runs independently (survives Ctrl+C)');
|
|
212
|
+
logger.info('Use "autocode tunnel stop" to stop it manually');
|
|
213
|
+
}
|
|
214
|
+
// Handle server exit
|
|
215
|
+
serverProcess.on('exit', (code) => {
|
|
216
|
+
if (code !== 0) {
|
|
217
|
+
logger.error(`Server exited with code ${code}`);
|
|
140
218
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
process.exit(1);
|
|
219
|
+
if (supervisorInterval) {
|
|
220
|
+
clearInterval(supervisorInterval);
|
|
144
221
|
}
|
|
145
|
-
|
|
222
|
+
process.exit(code || 0);
|
|
223
|
+
});
|
|
224
|
+
serverProcess.on('error', (error) => {
|
|
225
|
+
logger.error(`Server error: ${error}`);
|
|
226
|
+
if (supervisorInterval) {
|
|
227
|
+
clearInterval(supervisorInterval);
|
|
228
|
+
}
|
|
229
|
+
process.exit(1);
|
|
230
|
+
});
|
|
231
|
+
// Cleanup on exit
|
|
232
|
+
const cleanup = () => {
|
|
233
|
+
if (supervisorInterval) {
|
|
234
|
+
clearInterval(supervisorInterval);
|
|
235
|
+
}
|
|
236
|
+
serverProcess.kill('SIGTERM');
|
|
237
|
+
process.exit(0);
|
|
238
|
+
};
|
|
239
|
+
process.on('SIGINT', cleanup);
|
|
240
|
+
process.on('SIGTERM', cleanup);
|
|
146
241
|
}
|
|
147
242
|
catch (error) {
|
|
148
243
|
logger.error(`Failed to start server: ${error}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"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"}
|