@agentlang/cli 0.10.4 → 0.10.6
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/out/main.js +141 -202
- package/out/main.js.map +1 -1
- package/out/studio/controllers/FileController.js +118 -0
- package/out/studio/controllers/FileController.js.map +1 -0
- package/out/studio/routes.js +163 -0
- package/out/studio/routes.js.map +1 -0
- package/out/studio/runtime.js +13 -0
- package/out/studio/runtime.js.map +1 -0
- package/out/studio/services/AppManagementService.js +69 -0
- package/out/studio/services/AppManagementService.js.map +1 -0
- package/out/studio/services/AppRuntimeService.js +129 -0
- package/out/studio/services/AppRuntimeService.js.map +1 -0
- package/out/studio/services/FileService.js +183 -0
- package/out/studio/services/FileService.js.map +1 -0
- package/out/studio/services/GitHubService.js +193 -0
- package/out/studio/services/GitHubService.js.map +1 -0
- package/out/studio/services/StudioServer.js +50 -0
- package/out/studio/services/StudioServer.js.map +1 -0
- package/out/studio/services/WorkspaceService.js +48 -0
- package/out/studio/services/WorkspaceService.js.map +1 -0
- package/out/studio/types.js +2 -0
- package/out/studio/types.js.map +1 -0
- package/out/studio/utils.js +99 -0
- package/out/studio/utils.js.map +1 -0
- package/out/studio.js +49 -428
- package/out/studio.js.map +1 -1
- package/out/utils/forkApp.js +103 -0
- package/out/utils/forkApp.js.map +1 -0
- package/out/utils/projectInitializer.js +262 -0
- package/out/utils/projectInitializer.js.map +1 -0
- package/package.json +2 -2
package/out/studio.js
CHANGED
|
@@ -1,423 +1,59 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
|
-
import express
|
|
2
|
+
import express from 'express';
|
|
3
3
|
import cors from 'cors';
|
|
4
4
|
import path from 'path';
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
6
|
-
import { existsSync } from 'fs';
|
|
7
|
-
import { spawn, execSync } from 'child_process';
|
|
8
5
|
import chalk from 'chalk';
|
|
9
6
|
import ora from 'ora';
|
|
10
7
|
import open from 'open';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
const modLoader = await import(`${agPath}/out/runtime/loader.js`);
|
|
17
|
-
const { flushAllAndLoad, load } = modLoader;
|
|
18
|
-
const modCli = await import(`${agPath}/out/cli/main.js`);
|
|
19
|
-
const { runPreInitTasks } = modCli;
|
|
20
|
-
import fs from 'fs/promises';
|
|
21
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
-
const __dirname = path.dirname(__filename);
|
|
23
|
-
const ignoredPaths = new Set(['node_modules', '.git', 'dist', 'out']);
|
|
24
|
-
class FileService {
|
|
25
|
-
constructor(targetDir) {
|
|
26
|
-
this.targetDir = targetDir;
|
|
27
|
-
}
|
|
28
|
-
async loadProject() {
|
|
29
|
-
await flushAllAndLoad(this.targetDir);
|
|
30
|
-
}
|
|
31
|
-
async getFileTree(dirPath = this.targetDir, relativePath = '', skipIgnored = false) {
|
|
32
|
-
const dirents = await fs.readdir(dirPath, { withFileTypes: true });
|
|
33
|
-
const files = [];
|
|
34
|
-
for (const dirent of dirents) {
|
|
35
|
-
// Skip ignored paths unless we're explicitly fetching from node_modules
|
|
36
|
-
if (!skipIgnored && ignoredPaths.has(dirent.name)) {
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
const newRelativePath = path.join(relativePath, dirent.name);
|
|
40
|
-
if (dirent.isDirectory()) {
|
|
41
|
-
files.push({
|
|
42
|
-
name: dirent.name,
|
|
43
|
-
path: newRelativePath,
|
|
44
|
-
type: 'directory',
|
|
45
|
-
children: await this.getFileTree(path.join(dirPath, dirent.name), newRelativePath, skipIgnored),
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
files.push({
|
|
50
|
-
name: dirent.name,
|
|
51
|
-
path: newRelativePath,
|
|
52
|
-
type: 'file',
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return files;
|
|
57
|
-
}
|
|
58
|
-
async readFile(filePath) {
|
|
59
|
-
const fullPath = path.join(this.targetDir, filePath);
|
|
60
|
-
return fs.readFile(fullPath, 'utf-8');
|
|
61
|
-
}
|
|
62
|
-
async writeFile(filePath, content) {
|
|
63
|
-
const fullPath = path.join(this.targetDir, filePath);
|
|
64
|
-
await fs.writeFile(fullPath, content, 'utf-8');
|
|
65
|
-
}
|
|
66
|
-
async stat(filePath) {
|
|
67
|
-
const fullPath = path.join(this.targetDir, filePath);
|
|
68
|
-
const stats = await fs.stat(fullPath);
|
|
69
|
-
return {
|
|
70
|
-
type: stats.isDirectory() ? 'directory' : 'file',
|
|
71
|
-
size: stats.size,
|
|
72
|
-
mtime: stats.mtime,
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
async getPackageInfo() {
|
|
76
|
-
try {
|
|
77
|
-
const packageJsonPath = path.join(this.targetDir, 'package.json');
|
|
78
|
-
const content = await fs.readFile(packageJsonPath, 'utf-8');
|
|
79
|
-
return JSON.parse(content);
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
console.warn('Failed to read package.json:', error);
|
|
83
|
-
return {};
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
async getCurrentBranch() {
|
|
87
|
-
try {
|
|
88
|
-
// Check if .git directory exists
|
|
89
|
-
const gitDir = path.join(this.targetDir, '.git');
|
|
90
|
-
try {
|
|
91
|
-
const stat = await fs.stat(gitDir);
|
|
92
|
-
if (!stat.isDirectory()) {
|
|
93
|
-
return 'main'; // Default branch if not a git repo
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (_a) {
|
|
97
|
-
return 'main'; // Default branch if .git doesn't exist
|
|
98
|
-
}
|
|
99
|
-
// Get current branch using git command
|
|
100
|
-
const branch = execSync('git rev-parse --abbrev-ref HEAD', {
|
|
101
|
-
cwd: this.targetDir,
|
|
102
|
-
encoding: 'utf-8',
|
|
103
|
-
}).trim();
|
|
104
|
-
return branch || 'main';
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
console.warn('Failed to get current branch:', error);
|
|
108
|
-
return 'main'; // Default to main if git command fails
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
installDependencies(githubUsername, githubToken) {
|
|
112
|
-
try {
|
|
113
|
-
// Configure git to use credentials if provided
|
|
114
|
-
// Use local config (scoped to this directory) instead of global to avoid affecting other repos
|
|
115
|
-
if (githubUsername && githubToken) {
|
|
116
|
-
const gitConfig = [
|
|
117
|
-
`url.https://${githubUsername}:${githubToken}@github.com/.insteadOf https://github.com/`,
|
|
118
|
-
`url.https://${githubUsername}:${githubToken}@github.com/.insteadOf git+https://github.com/`,
|
|
119
|
-
];
|
|
120
|
-
for (const config of gitConfig) {
|
|
121
|
-
try {
|
|
122
|
-
execSync(`git config --local ${config}`, {
|
|
123
|
-
cwd: this.targetDir,
|
|
124
|
-
stdio: 'pipe',
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
catch (_a) {
|
|
128
|
-
// If local config fails (e.g., not a git repo), try global as fallback
|
|
129
|
-
try {
|
|
130
|
-
execSync(`git config --global ${config}`, {
|
|
131
|
-
stdio: 'pipe',
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
catch (globalConfigError) {
|
|
135
|
-
// Ignore config errors, continue with npm install
|
|
136
|
-
console.warn('Failed to set git config:', globalConfigError);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
execSync('npm install', {
|
|
142
|
-
cwd: this.targetDir,
|
|
143
|
-
stdio: 'pipe',
|
|
144
|
-
env: Object.assign(Object.assign({}, process.env), {
|
|
145
|
-
// Set GIT_ASKPASS to avoid interactive prompts
|
|
146
|
-
GIT_ASKPASS: 'echo', GIT_TERMINAL_PROMPT: '0' }),
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
151
|
-
throw new Error(`Failed to install dependencies: ${errorMessage}`);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
class FileController {
|
|
156
|
-
constructor(fileService) {
|
|
157
|
-
this.getFiles = async (req, res) => {
|
|
158
|
-
try {
|
|
159
|
-
const pathParam = req.query.path;
|
|
160
|
-
if (pathParam) {
|
|
161
|
-
// Fetch file tree for a specific path (e.g., node_modules/depName)
|
|
162
|
-
// Skip ignored paths when fetching from node_modules
|
|
163
|
-
const fullPath = path.join(this.fileService['targetDir'], pathParam);
|
|
164
|
-
const skipIgnored = pathParam.startsWith('node_modules');
|
|
165
|
-
const fileTree = await this.fileService.getFileTree(fullPath, '', skipIgnored);
|
|
166
|
-
return res.json(fileTree);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
// Fetch root file tree
|
|
170
|
-
const fileTree = await this.fileService.getFileTree();
|
|
171
|
-
return res.json(fileTree);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
if (typeof error === 'object' &&
|
|
176
|
-
error !== null &&
|
|
177
|
-
'code' in error &&
|
|
178
|
-
typeof error.code === 'string' &&
|
|
179
|
-
error.code === 'ENOENT') {
|
|
180
|
-
return res.status(404).json({ error: 'Path not found' });
|
|
181
|
-
}
|
|
182
|
-
return res.status(500).json({ error: 'Failed to read file tree' });
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
this.getFile = async (req, res) => {
|
|
186
|
-
const filePath = req.query.path;
|
|
187
|
-
const includeMetadata = req.query.metadata === 'true';
|
|
188
|
-
if (!filePath) {
|
|
189
|
-
return res.status(400).json({ error: 'File path is required' });
|
|
190
|
-
}
|
|
191
|
-
try {
|
|
192
|
-
const content = await this.fileService.readFile(filePath);
|
|
193
|
-
if (includeMetadata) {
|
|
194
|
-
const stats = await this.fileService.stat(filePath);
|
|
195
|
-
return res.json({ content, type: stats.type, size: stats.size, mtime: stats.mtime });
|
|
196
|
-
}
|
|
197
|
-
return res.json({ content });
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
if (typeof error === 'object' &&
|
|
201
|
-
error !== null &&
|
|
202
|
-
'code' in error &&
|
|
203
|
-
typeof error.code === 'string' &&
|
|
204
|
-
error.code === 'ENOENT') {
|
|
205
|
-
return res.status(404).json({ error: 'File not found' });
|
|
206
|
-
}
|
|
207
|
-
return res.status(500).json({ error: `Failed to read file: ${filePath}` });
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
this.getStat = async (req, res) => {
|
|
211
|
-
const filePath = req.query.path;
|
|
212
|
-
if (!filePath) {
|
|
213
|
-
return res.status(400).json({ error: 'File path is required' });
|
|
214
|
-
}
|
|
215
|
-
try {
|
|
216
|
-
const stats = await this.fileService.stat(filePath);
|
|
217
|
-
return res.json(stats);
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
if (typeof error === 'object' &&
|
|
221
|
-
error !== null &&
|
|
222
|
-
'code' in error &&
|
|
223
|
-
typeof error.code === 'string' &&
|
|
224
|
-
error.code === 'ENOENT') {
|
|
225
|
-
return res.status(404).json({ error: 'Path not found' });
|
|
226
|
-
}
|
|
227
|
-
return res.status(500).json({ error: `Failed to get stat for: ${filePath}` });
|
|
228
|
-
}
|
|
229
|
-
};
|
|
230
|
-
this.saveFile = async (req, res) => {
|
|
231
|
-
const { path: filePath, content } = req.body;
|
|
232
|
-
if (!filePath || content === undefined) {
|
|
233
|
-
return res.status(400).json({ error: 'File path and content are required' });
|
|
234
|
-
}
|
|
235
|
-
try {
|
|
236
|
-
await this.fileService.writeFile(filePath, content);
|
|
237
|
-
return res.json({ message: `Successfully wrote to ${filePath}` });
|
|
238
|
-
}
|
|
239
|
-
catch (_a) {
|
|
240
|
-
return res.status(500).json({ error: `Failed to write to file: ${filePath}` });
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
this.getInfo = async (_req, res) => {
|
|
244
|
-
const info = await this.fileService.getPackageInfo();
|
|
245
|
-
return res.json(info);
|
|
246
|
-
};
|
|
247
|
-
this.getBranch = async (_req, res) => {
|
|
248
|
-
try {
|
|
249
|
-
const branch = await this.fileService.getCurrentBranch();
|
|
250
|
-
return res.json({ branch });
|
|
251
|
-
}
|
|
252
|
-
catch (_a) {
|
|
253
|
-
return res.status(500).json({ error: 'Failed to get current branch' });
|
|
254
|
-
}
|
|
255
|
-
};
|
|
256
|
-
this.installDependencies = (req, res) => {
|
|
257
|
-
try {
|
|
258
|
-
const { githubUsername, githubToken } = req.body || {};
|
|
259
|
-
this.fileService.installDependencies(githubUsername, githubToken);
|
|
260
|
-
return res.json({ message: 'Dependencies installed successfully' });
|
|
261
|
-
}
|
|
262
|
-
catch (error) {
|
|
263
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
264
|
-
return res.status(500).json({ error: errorMessage });
|
|
265
|
-
}
|
|
266
|
-
};
|
|
267
|
-
this.fileService = fileService;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
function createRoutes(targetDir) {
|
|
271
|
-
const router = Router();
|
|
272
|
-
const fileService = new FileService(targetDir);
|
|
273
|
-
const fileController = new FileController(fileService);
|
|
274
|
-
// Initialize project load
|
|
275
|
-
fileService.loadProject().catch(console.error);
|
|
276
|
-
router.get('/files', fileController.getFiles);
|
|
277
|
-
router.get('/file', fileController.getFile);
|
|
278
|
-
router.get('/stat', fileController.getStat);
|
|
279
|
-
router.post('/file', fileController.saveFile);
|
|
280
|
-
router.get('/info', fileController.getInfo);
|
|
281
|
-
router.get('/branch', fileController.getBranch);
|
|
282
|
-
router.post('/install', fileController.installDependencies);
|
|
283
|
-
router.get('/test', (_req, res) => {
|
|
284
|
-
return res.json({ message: 'Hello from agent studio!' });
|
|
285
|
-
});
|
|
286
|
-
// Serve environment variables to the browser
|
|
287
|
-
router.get('/env-config.js', (_req, res) => {
|
|
288
|
-
// Only expose allowed environment variables - never expose all process.env
|
|
289
|
-
const allowedEnvVars = {
|
|
290
|
-
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY || '',
|
|
291
|
-
OPENAI_API_KEY: process.env.OPENAI_API_KEY || '',
|
|
292
|
-
};
|
|
293
|
-
// Create a JavaScript file that sets window.__ENV__
|
|
294
|
-
const jsContent = `window.__ENV__ = ${JSON.stringify(allowedEnvVars)};`;
|
|
295
|
-
res.setHeader('Content-Type', 'application/javascript');
|
|
296
|
-
res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
|
|
297
|
-
return res.send(jsContent);
|
|
298
|
-
});
|
|
299
|
-
return router;
|
|
300
|
-
}
|
|
301
|
-
function findLStudioPath(projectDir) {
|
|
302
|
-
// First, try to find @agentlang/lstudio in the project's node_modules
|
|
303
|
-
// Check for dist subfolder first (local development)
|
|
304
|
-
const projectLStudioDistPath = path.join(projectDir, 'node_modules', '@agentlang', 'lstudio', 'dist');
|
|
305
|
-
if (existsSync(projectLStudioDistPath) && existsSync(path.join(projectLStudioDistPath, 'index.html'))) {
|
|
306
|
-
return projectLStudioDistPath;
|
|
307
|
-
}
|
|
308
|
-
// Check root of package (npm installed version)
|
|
309
|
-
const projectLStudioRootPath = path.join(projectDir, 'node_modules', '@agentlang', 'lstudio');
|
|
310
|
-
if (existsSync(path.join(projectLStudioRootPath, 'index.html'))) {
|
|
311
|
-
return projectLStudioRootPath;
|
|
312
|
-
}
|
|
313
|
-
// If not found, try agentlang-cli's node_modules
|
|
314
|
-
// Check for dist subfolder first
|
|
315
|
-
const cliLStudioDistPath = path.join(__dirname, '..', 'node_modules', '@agentlang', 'lstudio', 'dist');
|
|
316
|
-
if (existsSync(cliLStudioDistPath) && existsSync(path.join(cliLStudioDistPath, 'index.html'))) {
|
|
317
|
-
return cliLStudioDistPath;
|
|
318
|
-
}
|
|
319
|
-
// Check root of package in cli's node_modules
|
|
320
|
-
const cliLStudioRootPath = path.join(__dirname, '..', 'node_modules', '@agentlang', 'lstudio');
|
|
321
|
-
if (existsSync(path.join(cliLStudioRootPath, 'index.html'))) {
|
|
322
|
-
return cliLStudioRootPath;
|
|
323
|
-
}
|
|
324
|
-
return null;
|
|
325
|
-
}
|
|
8
|
+
import { getWorkspaceRoot, findLStudioPath } from './studio/utils.js';
|
|
9
|
+
import { FileService } from './studio/services/FileService.js';
|
|
10
|
+
import { StudioServer } from './studio/services/StudioServer.js';
|
|
11
|
+
import { createRoutes } from './studio/routes.js';
|
|
326
12
|
export async function startStudio(projectPath = '.', studioPort = 4000, serverOnly = false) {
|
|
327
13
|
const spinner = ora(serverOnly ? 'Starting Studio backend server...' : 'Starting Agent Studio...').start();
|
|
328
|
-
const
|
|
329
|
-
//
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
console.
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
14
|
+
const inputDir = path.resolve(process.cwd(), projectPath);
|
|
15
|
+
// Smart Parent Detection: Determine workspace root and initial app
|
|
16
|
+
const { workspaceRoot, initialAppPath } = getWorkspaceRoot(inputDir);
|
|
17
|
+
// Initialize Services with workspace root
|
|
18
|
+
const fileService = new FileService(workspaceRoot);
|
|
19
|
+
const studioServer = new StudioServer(workspaceRoot, initialAppPath, fileService);
|
|
20
|
+
// Always use Dashboard Mode
|
|
21
|
+
if (initialAppPath) {
|
|
22
|
+
// Launched from inside a project - show workspace with initial app highlighted
|
|
23
|
+
console.log(chalk.blue(`ℹ Detected project: ${path.basename(initialAppPath)}`));
|
|
24
|
+
console.log(chalk.blue(`ℹ Workspace root: ${workspaceRoot}`));
|
|
25
|
+
console.log(chalk.dim(' Auto-launching app...'));
|
|
26
|
+
// Auto-launch the detected app
|
|
27
|
+
// This sets the current app in StudioServer, which the frontend can detect via /workspace or /apps
|
|
28
|
+
await studioServer.launchApp(initialAppPath);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// Launched from a workspace directory
|
|
32
|
+
console.log(chalk.blue(`ℹ Workspace root: ${workspaceRoot}`));
|
|
33
|
+
console.log(chalk.dim(' Starting in Dashboard Mode. Select an app from the UI to launch it.'));
|
|
34
|
+
}
|
|
35
|
+
spinner.succeed(chalk.green('Studio Dashboard Ready'));
|
|
351
36
|
// Find @agentlang/lstudio (skip in server-only mode)
|
|
37
|
+
// Try to find it in the input directory first (for projects with local lstudio)
|
|
38
|
+
// then fall back to workspace root
|
|
352
39
|
let lstudioPath = null;
|
|
353
40
|
if (!serverOnly) {
|
|
354
|
-
|
|
355
|
-
lstudioPath
|
|
356
|
-
|
|
357
|
-
spinner.fail(chalk.red('Failed to find @agentlang/lstudio'));
|
|
358
|
-
console.error(chalk.yellow('Please install @agentlang/lstudio in your project:\n npm install --save-dev @agentlang/lstudio'));
|
|
359
|
-
process.exit(1);
|
|
360
|
-
}
|
|
361
|
-
spinner.succeed(chalk.green('Found @agentlang/lstudio'));
|
|
362
|
-
}
|
|
363
|
-
spinner.text = 'Starting Agentlang server...';
|
|
364
|
-
// Start agentlang server in background
|
|
365
|
-
// We'll run it in a separate process to avoid blocking
|
|
366
|
-
let agentProcess = null;
|
|
367
|
-
try {
|
|
368
|
-
// Determine the path to the agent CLI
|
|
369
|
-
const cliPath = path.join(__dirname, '..', 'bin', 'cli.js');
|
|
370
|
-
// Use spawn to run agent run command
|
|
371
|
-
if (existsSync(cliPath)) {
|
|
372
|
-
// Use direct path to cli.js
|
|
373
|
-
agentProcess = spawn('node', [cliPath, 'run', targetDir], {
|
|
374
|
-
stdio: 'pipe', // Use pipe instead of inherit to avoid mixing output
|
|
375
|
-
shell: false,
|
|
376
|
-
cwd: targetDir,
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
else {
|
|
380
|
-
// Fallback to agent command if available in PATH
|
|
381
|
-
agentProcess = spawn('agent', ['run', targetDir], {
|
|
382
|
-
stdio: 'pipe',
|
|
383
|
-
shell: true,
|
|
384
|
-
cwd: targetDir,
|
|
385
|
-
});
|
|
386
|
-
}
|
|
387
|
-
// Handle process output
|
|
388
|
-
if (agentProcess.stdout) {
|
|
389
|
-
agentProcess.stdout.on('data', (data) => {
|
|
390
|
-
process.stdout.write(chalk.dim(`[Agent] ${data.toString()}`));
|
|
391
|
-
});
|
|
41
|
+
lstudioPath = findLStudioPath(inputDir);
|
|
42
|
+
if (!lstudioPath && inputDir !== workspaceRoot) {
|
|
43
|
+
lstudioPath = findLStudioPath(workspaceRoot);
|
|
392
44
|
}
|
|
393
|
-
if (
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
45
|
+
if (!lstudioPath) {
|
|
46
|
+
// Only error if we really can't find it, but in dev mode it might differ.
|
|
47
|
+
// Warn instead of exit in case we are just using API
|
|
48
|
+
console.warn(chalk.yellow('Warning: Could not find @agentlang/lstudio UI files.'));
|
|
397
49
|
}
|
|
398
|
-
agentProcess.on('error', (err) => {
|
|
399
|
-
spinner.warn(chalk.yellow('Could not start agentlang server in background'));
|
|
400
|
-
console.warn(chalk.dim(`Error: ${err.message}`));
|
|
401
|
-
agentProcess = null;
|
|
402
|
-
});
|
|
403
|
-
agentProcess.on('exit', code => {
|
|
404
|
-
if (code !== null && code !== 0) {
|
|
405
|
-
console.warn(chalk.yellow(`Agentlang server exited with code ${code}`));
|
|
406
|
-
}
|
|
407
|
-
});
|
|
408
50
|
}
|
|
409
|
-
catch (error) {
|
|
410
|
-
spinner.warn(chalk.yellow('Could not start agentlang server in background, continuing anyway...'));
|
|
411
|
-
console.warn(chalk.dim(error instanceof Error ? error.message : String(error)));
|
|
412
|
-
agentProcess = null;
|
|
413
|
-
}
|
|
414
|
-
spinner.text = 'Starting Studio server...';
|
|
415
51
|
// Create Express app
|
|
416
52
|
const app = express();
|
|
417
53
|
app.use(cors());
|
|
418
54
|
app.use(express.json());
|
|
419
55
|
// Setup Routes
|
|
420
|
-
app.use('/', createRoutes(
|
|
56
|
+
app.use('/', createRoutes(studioServer, fileService));
|
|
421
57
|
// Serve static files from @agentlang/lstudio/dist (skip in server-only mode)
|
|
422
58
|
if (!serverOnly && lstudioPath) {
|
|
423
59
|
app.use(express.static(lstudioPath));
|
|
@@ -430,7 +66,10 @@ export async function startStudio(projectPath = '.', studioPort = 4000, serverOn
|
|
|
430
66
|
req.path.startsWith('/info') ||
|
|
431
67
|
req.path.startsWith('/branch') ||
|
|
432
68
|
req.path.startsWith('/install') ||
|
|
433
|
-
req.path.startsWith('/env-config.js')
|
|
69
|
+
req.path.startsWith('/env-config.js') ||
|
|
70
|
+
req.path.startsWith('/workspace') || // workspace info
|
|
71
|
+
req.path.startsWith('/apps') ||
|
|
72
|
+
req.path.startsWith('/app/')) {
|
|
434
73
|
return next();
|
|
435
74
|
}
|
|
436
75
|
if (lstudioPath) {
|
|
@@ -445,46 +84,28 @@ export async function startStudio(projectPath = '.', studioPort = 4000, serverOn
|
|
|
445
84
|
await new Promise(resolve => {
|
|
446
85
|
app.listen(studioPort, () => {
|
|
447
86
|
spinner.succeed(chalk.green(`Studio server is running on http://localhost:${studioPort}`));
|
|
448
|
-
console.log(chalk.blue(`Serving files from: ${targetDir}`));
|
|
449
87
|
const studioUrl = `http://localhost:${studioPort}`;
|
|
450
88
|
if (serverOnly) {
|
|
451
89
|
console.log(chalk.blue(`Backend API available at: ${studioUrl}`));
|
|
452
|
-
console.log(chalk.dim('Endpoints: /files, /file, /info, /branch, /test'));
|
|
453
|
-
console.log(chalk.yellow('\nServer-only mode: UI not served.'));
|
|
454
|
-
console.log(chalk.dim('To connect a UI, set VITE_CLI_URL and run the studio frontend separately.'));
|
|
90
|
+
console.log(chalk.dim('Endpoints: /files, /file, /info, /branch, /test, /workspace, /apps, /app/launch'));
|
|
455
91
|
}
|
|
456
92
|
else {
|
|
457
93
|
console.log(chalk.blue(`Studio UI is available at: ${studioUrl}`));
|
|
458
94
|
}
|
|
459
|
-
if (agentProcess) {
|
|
460
|
-
console.log(chalk.dim('Agentlang server is running in the background'));
|
|
461
|
-
}
|
|
462
95
|
// Open browser automatically (skip in server-only mode)
|
|
463
96
|
if (!serverOnly) {
|
|
464
|
-
open(studioUrl)
|
|
465
|
-
|
|
466
|
-
console.log(chalk.green(`✓ Opened browser at ${studioUrl}`));
|
|
467
|
-
})
|
|
468
|
-
.catch((error) => {
|
|
469
|
-
console.warn(chalk.yellow(`⚠ Could not open browser automatically: ${error instanceof Error ? error.message : String(error)}`));
|
|
470
|
-
console.log(chalk.dim(` Please open ${studioUrl} manually in your browser`));
|
|
97
|
+
void open(studioUrl).catch(() => {
|
|
98
|
+
// Ignore errors when opening browser
|
|
471
99
|
});
|
|
472
100
|
}
|
|
473
101
|
// Handle cleanup on exit
|
|
474
|
-
|
|
475
|
-
console.log(chalk.yellow('\nShutting down...'));
|
|
476
|
-
if (agentProcess) {
|
|
477
|
-
agentProcess.kill();
|
|
478
|
-
}
|
|
479
|
-
process.exit(0);
|
|
480
|
-
});
|
|
481
|
-
process.on('SIGTERM', () => {
|
|
102
|
+
const cleanup = () => {
|
|
482
103
|
console.log(chalk.yellow('\nShutting down...'));
|
|
483
|
-
|
|
484
|
-
agentProcess.kill();
|
|
485
|
-
}
|
|
104
|
+
studioServer.stopApp(false);
|
|
486
105
|
process.exit(0);
|
|
487
|
-
}
|
|
106
|
+
};
|
|
107
|
+
process.on('SIGINT', cleanup);
|
|
108
|
+
process.on('SIGTERM', cleanup);
|
|
488
109
|
resolve();
|
|
489
110
|
});
|
|
490
111
|
});
|
package/out/studio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio.js","sourceRoot":"","sources":["../src/studio.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"studio.js","sourceRoot":"","sources":["../src/studio.ts"],"names":[],"mappings":"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"}
|