@agentlang/cli 0.10.5 → 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/studio.js CHANGED
@@ -1,423 +1,59 @@
1
1
  /* eslint-disable no-console */
2
- import express, { Router } from '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
- let agPath = 'agentlang';
12
- const nodeModulesPath = path.resolve(process.cwd(), 'node_modules/agentlang');
13
- if (existsSync(nodeModulesPath)) {
14
- agPath = nodeModulesPath;
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 targetDir = path.resolve(process.cwd(), projectPath);
329
- // Validate that the directory contains an agentlang project
330
- spinner.text = 'Validating Agentlang project...';
331
- try {
332
- // Initialize runtime first
333
- const preInitSuccess = await runPreInitTasks();
334
- if (!preInitSuccess) {
335
- spinner.fail(chalk.red('Failed to initialize Agentlang runtime'));
336
- process.exit(1);
337
- }
338
- // Try to load the project to validate it's a valid agentlang project
339
- await load(targetDir, undefined, async () => {
340
- // Callback is called when loading completes successfully
341
- });
342
- spinner.succeed(chalk.green('Validated Agentlang project'));
343
- }
344
- catch (error) {
345
- spinner.fail(chalk.red('Failed to load Agentlang project'));
346
- console.error(chalk.red(`The directory "${targetDir}" does not appear to contain a valid Agentlang project.\n` +
347
- `Error: ${error instanceof Error ? error.message : String(error)}`));
348
- console.error(chalk.yellow('\nPlease ensure the directory contains valid Agentlang (.al) files and try again.'));
349
- process.exit(1);
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
- spinner.text = 'Finding @agentlang/lstudio...';
355
- lstudioPath = findLStudioPath(targetDir);
356
- if (!lstudioPath) {
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 (agentProcess.stderr) {
394
- agentProcess.stderr.on('data', (data) => {
395
- process.stderr.write(chalk.dim(`[Agent] ${data.toString()}`));
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(targetDir));
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
- .then(() => {
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
- process.on('SIGINT', () => {
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
- if (agentProcess) {
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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"}