@agentlang/cli 0.10.5 → 0.10.7
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 +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileController.js","sourceRoot":"","sources":["../../../src/studio/controllers/FileController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { Router } from 'express';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { FileController } from './controllers/FileController.js';
|
|
5
|
+
export function createRoutes(studioServer, fileService) {
|
|
6
|
+
const router = Router();
|
|
7
|
+
const fileController = new FileController(fileService);
|
|
8
|
+
// Initialize project load if not in dashboard mode initially
|
|
9
|
+
fileService.loadProject().catch(console.error);
|
|
10
|
+
// File Routes
|
|
11
|
+
router.get('/files', fileController.getFiles);
|
|
12
|
+
router.get('/file', fileController.getFile);
|
|
13
|
+
router.get('/stat', fileController.getStat);
|
|
14
|
+
router.post('/file', fileController.saveFile);
|
|
15
|
+
router.get('/info', fileController.getInfo);
|
|
16
|
+
router.get('/branch', fileController.getBranch);
|
|
17
|
+
router.post('/install', fileController.installDependencies);
|
|
18
|
+
// Workspace Info Route - returns workspace metadata including initial app
|
|
19
|
+
router.get('/workspace', (_req, res) => {
|
|
20
|
+
const workspaceInfo = studioServer.getWorkspaceInfo();
|
|
21
|
+
res.json(workspaceInfo);
|
|
22
|
+
});
|
|
23
|
+
// App Management Routes
|
|
24
|
+
router.get('/apps', (_req, res) => {
|
|
25
|
+
const apps = studioServer.discoverApps();
|
|
26
|
+
res.json(apps);
|
|
27
|
+
});
|
|
28
|
+
router.post('/app/create', async (req, res) => {
|
|
29
|
+
const { name } = req.body;
|
|
30
|
+
if (!name) {
|
|
31
|
+
console.error('[Studio Server] /app/create: App name is required');
|
|
32
|
+
res.status(400).json({ error: 'App name is required' });
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
console.log(`[Studio Server] /app/create: Starting app creation for "${name}"`);
|
|
36
|
+
const startTime = Date.now();
|
|
37
|
+
try {
|
|
38
|
+
const appInfo = await studioServer.createApp(name);
|
|
39
|
+
const duration = Date.now() - startTime;
|
|
40
|
+
console.log(`[Studio Server] /app/create: Successfully created app "${name}" in ${duration}ms`);
|
|
41
|
+
console.log(`[Studio Server] /app/create: App path: ${appInfo.path}`);
|
|
42
|
+
res.json(appInfo);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const duration = Date.now() - startTime;
|
|
46
|
+
console.error(`[Studio Server] /app/create: Failed to create app "${name}" after ${duration}ms:`, error);
|
|
47
|
+
res.status(500).json({ error: error instanceof Error ? error.message : String(error) });
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
router.post('/app/import', async (req, res) => {
|
|
51
|
+
const { path: sourcePath, name: newName, branch, githubUsername, githubToken, } = req.body;
|
|
52
|
+
const importStartTime = Date.now();
|
|
53
|
+
console.log('[Studio Server] /app/import: Starting app import request');
|
|
54
|
+
console.log(`[Studio Server] /app/import: Source path: ${sourcePath || 'not provided'}`);
|
|
55
|
+
if (!sourcePath) {
|
|
56
|
+
console.error('[Studio Server] /app/import: Source path is required');
|
|
57
|
+
res.status(400).json({ error: 'Source path is required' });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// If no new name provided, use the folder name from the source path
|
|
61
|
+
let appName = newName;
|
|
62
|
+
if (!appName) {
|
|
63
|
+
if (sourcePath.startsWith('http') || sourcePath.startsWith('git@')) {
|
|
64
|
+
// Try to infer from URL
|
|
65
|
+
const parts = sourcePath.split('/');
|
|
66
|
+
const lastPart = parts[parts.length - 1].replace('.git', '');
|
|
67
|
+
appName = lastPart;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
appName = path.basename(sourcePath);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
console.log(`[Studio Server] /app/import: App name: ${appName}`);
|
|
74
|
+
// Build credentials object if provided
|
|
75
|
+
const credentials = githubUsername && githubToken ? { username: githubUsername, token: githubToken } : undefined;
|
|
76
|
+
if (credentials) {
|
|
77
|
+
console.log(`[Studio Server] /app/import: Using authenticated access (username: ${credentials.username})`);
|
|
78
|
+
}
|
|
79
|
+
if (branch) {
|
|
80
|
+
console.log(`[Studio Server] /app/import: Branch: ${branch}`);
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const appInfo = await studioServer.forkApp(sourcePath, appName, { credentials, branch });
|
|
84
|
+
const importDuration = Date.now() - importStartTime;
|
|
85
|
+
console.log(`[Studio Server] /app/import: Successfully imported app "${appName}" in ${importDuration}ms`);
|
|
86
|
+
console.log(`[Studio Server] /app/import: App path: ${appInfo.path}`);
|
|
87
|
+
res.json(appInfo);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const importDuration = Date.now() - importStartTime;
|
|
91
|
+
console.error(`[Studio Server] /app/import: Failed to import app "${appName}" after ${importDuration}ms:`, error);
|
|
92
|
+
res.status(500).json({ error: error instanceof Error ? error.message : String(error) });
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
router.post('/app/launch', async (req, res) => {
|
|
96
|
+
const { path: appPath } = req.body;
|
|
97
|
+
if (!appPath) {
|
|
98
|
+
res.status(400).json({ error: 'App path required' });
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
await studioServer.launchApp(appPath);
|
|
103
|
+
res.json({ success: true, currentApp: appPath });
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
res.status(500).json({ error: error instanceof Error ? error.message : String(error) });
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
router.post('/app/stop', (_req, res) => {
|
|
110
|
+
try {
|
|
111
|
+
studioServer.stopApp(true);
|
|
112
|
+
res.json({ success: true });
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
res.status(500).json({ error: error instanceof Error ? error.message : String(error) });
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
router.delete('/app/delete', async (req, res) => {
|
|
119
|
+
const { path: appPath } = req.body;
|
|
120
|
+
if (!appPath) {
|
|
121
|
+
res.status(400).json({ error: 'App path required' });
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
await studioServer.deleteApp(appPath);
|
|
126
|
+
res.json({ success: true });
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
res.status(500).json({ error: error instanceof Error ? error.message : String(error) });
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
router.post('/app/push', async (req, res) => {
|
|
133
|
+
const { path: appPath, githubToken, githubUsername, repoName, } = req.body;
|
|
134
|
+
if (!appPath) {
|
|
135
|
+
res.status(400).json({ error: 'App path required' });
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (!githubToken || !githubUsername) {
|
|
139
|
+
res.status(400).json({ error: 'GitHub token and username are required' });
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (!repoName) {
|
|
143
|
+
res.status(400).json({ error: 'Repository name is required' });
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const result = await studioServer.pushToGitHub(appPath, {
|
|
148
|
+
githubToken,
|
|
149
|
+
githubUsername,
|
|
150
|
+
repoName,
|
|
151
|
+
});
|
|
152
|
+
res.json(result);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
res.status(500).json({ error: error instanceof Error ? error.message : String(error) });
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
router.get('/test', (_req, res) => {
|
|
159
|
+
return res.json({ message: 'Hello from agent studio!' });
|
|
160
|
+
});
|
|
161
|
+
return router;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/studio/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
let agPath = 'agentlang';
|
|
4
|
+
const nodeModulesPath = path.resolve(process.cwd(), 'node_modules/agentlang');
|
|
5
|
+
if (existsSync(nodeModulesPath)) {
|
|
6
|
+
agPath = nodeModulesPath;
|
|
7
|
+
}
|
|
8
|
+
// We use dynamic imports to load these modules based on the resolved path
|
|
9
|
+
const modLoader = await import(`${agPath}/out/runtime/loader.js`);
|
|
10
|
+
export const { flushAllAndLoad } = modLoader;
|
|
11
|
+
const modCli = await import(`${agPath}/out/cli/main.js`);
|
|
12
|
+
export const { runPreInitTasks } = modCli;
|
|
13
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/studio/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,IAAI,MAAM,GAAG,WAAW,CAAC;AACzB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAE9E,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;IAChC,MAAM,GAAG,eAAe,CAAC;AAC3B,CAAC;AAED,0EAA0E;AAC1E,MAAM,SAAS,GAAqD,MAAM,MAAM,CAAC,GAAG,MAAM,wBAAwB,CAAC,CAAC;AACpH,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;AAE7C,MAAM,MAAM,GAA+C,MAAM,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,CAAC;AACrG,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { rm } from 'fs/promises';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { initializeProject } from '../../utils/projectInitializer.js';
|
|
7
|
+
import { forkApp as forkAppUtil } from '../../utils/forkApp.js';
|
|
8
|
+
export class AppManagementService {
|
|
9
|
+
constructor(workspaceRoot) {
|
|
10
|
+
this.workspaceRoot = workspaceRoot;
|
|
11
|
+
}
|
|
12
|
+
async createApp(name) {
|
|
13
|
+
const appPath = path.join(this.workspaceRoot, name);
|
|
14
|
+
console.log(`[AppManagement] createApp: Creating app "${name}" at path: ${appPath}`);
|
|
15
|
+
try {
|
|
16
|
+
// Use the shared initialization logic
|
|
17
|
+
console.log(`[AppManagement] createApp: Starting project initialization for "${name}"`);
|
|
18
|
+
const initStartTime = Date.now();
|
|
19
|
+
await initializeProject(appPath, name, {
|
|
20
|
+
silent: false, // Enable logging for better visibility
|
|
21
|
+
skipInstall: false, // Install dependencies so the app is ready to run
|
|
22
|
+
skipGit: false, // Initialize git repo
|
|
23
|
+
});
|
|
24
|
+
const initDuration = Date.now() - initStartTime;
|
|
25
|
+
console.log(`[AppManagement] createApp: Project initialization completed for "${name}" in ${initDuration}ms`);
|
|
26
|
+
const appInfo = {
|
|
27
|
+
name,
|
|
28
|
+
path: appPath,
|
|
29
|
+
isInitialApp: false,
|
|
30
|
+
};
|
|
31
|
+
console.log(`[AppManagement] createApp: Successfully created app "${name}"`);
|
|
32
|
+
return appInfo;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error(`[AppManagement] createApp: Failed to create app "${name}":`, error);
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async forkApp(sourcePath, newAppName, options) {
|
|
40
|
+
const destPath = path.join(this.workspaceRoot, newAppName);
|
|
41
|
+
if (existsSync(destPath)) {
|
|
42
|
+
throw new Error(`A project named "${newAppName}" already exists in the workspace.`);
|
|
43
|
+
}
|
|
44
|
+
// Use the shared fork utility
|
|
45
|
+
const result = await forkAppUtil(sourcePath, destPath, options);
|
|
46
|
+
return {
|
|
47
|
+
name: result.name,
|
|
48
|
+
path: result.path,
|
|
49
|
+
isInitialApp: false,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async deleteApp(appPath) {
|
|
53
|
+
// Verify the path exists
|
|
54
|
+
if (!existsSync(appPath)) {
|
|
55
|
+
throw new Error(`App path "${appPath}" does not exist.`);
|
|
56
|
+
}
|
|
57
|
+
// Safety check: ensure the path is within the workspace root
|
|
58
|
+
const normalizedAppPath = path.resolve(appPath);
|
|
59
|
+
const normalizedWorkspaceRoot = path.resolve(this.workspaceRoot);
|
|
60
|
+
if (!normalizedAppPath.startsWith(normalizedWorkspaceRoot)) {
|
|
61
|
+
throw new Error('Cannot delete app outside of workspace root.');
|
|
62
|
+
}
|
|
63
|
+
// Delete the app directory
|
|
64
|
+
console.log(chalk.yellow(`Deleting app: ${appPath}`));
|
|
65
|
+
await rm(appPath, { recursive: true, force: true });
|
|
66
|
+
console.log(chalk.green(`Successfully deleted app: ${appPath}`));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=AppManagementService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppManagementService.js","sourceRoot":"","sources":["../../../src/studio/services/AppManagementService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { spawn, execSync } from 'child_process';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { runPreInitTasks } from '../runtime.js';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
export class AppRuntimeService {
|
|
11
|
+
constructor(fileService) {
|
|
12
|
+
this.fileService = fileService;
|
|
13
|
+
this.agentProcess = null;
|
|
14
|
+
this.currentAppPath = null;
|
|
15
|
+
}
|
|
16
|
+
async launchApp(appPath) {
|
|
17
|
+
var _a, _b;
|
|
18
|
+
console.log(chalk.blue(`\nLaunching app: ${appPath}`));
|
|
19
|
+
// 1. Stop existing app if any
|
|
20
|
+
this.stopApp(false); // false = don't reset to root yet, we are switching
|
|
21
|
+
// 2. Set new target
|
|
22
|
+
this.currentAppPath = appPath;
|
|
23
|
+
this.fileService.setTargetDir(appPath);
|
|
24
|
+
// 3. Initialize Runtime (required before loading project)
|
|
25
|
+
try {
|
|
26
|
+
const preInitSuccess = await runPreInitTasks();
|
|
27
|
+
if (!preInitSuccess) {
|
|
28
|
+
console.warn(chalk.yellow('Warning: Failed to initialize Agentlang runtime'));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.warn(chalk.yellow('Warning: Runtime initialization error:'), error);
|
|
33
|
+
}
|
|
34
|
+
// 4. Check and install dependencies if needed
|
|
35
|
+
const nodeModulesPath = path.join(appPath, 'node_modules');
|
|
36
|
+
const packageJsonPath = path.join(appPath, 'package.json');
|
|
37
|
+
if (existsSync(packageJsonPath)) {
|
|
38
|
+
const needsInstall = !existsSync(nodeModulesPath) || !existsSync(path.join(nodeModulesPath, 'sqlite3'));
|
|
39
|
+
if (needsInstall) {
|
|
40
|
+
console.log(chalk.yellow('📦 Dependencies not found. Installing...'));
|
|
41
|
+
try {
|
|
42
|
+
execSync('npm install', {
|
|
43
|
+
cwd: appPath,
|
|
44
|
+
stdio: 'inherit',
|
|
45
|
+
env: Object.assign(Object.assign({}, process.env), { GIT_ASKPASS: 'echo', GIT_TERMINAL_PROMPT: '0' }),
|
|
46
|
+
});
|
|
47
|
+
console.log(chalk.green('✓ Dependencies installed'));
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error(chalk.red('Failed to install dependencies:'), error);
|
|
51
|
+
throw new Error('Failed to install dependencies. Please run "npm install" manually in the app directory.');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// 5. Load Project (Runtime)
|
|
56
|
+
try {
|
|
57
|
+
await this.fileService.loadProject();
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error(chalk.red('Failed to load project runtime:'), error);
|
|
61
|
+
// Continue anyway to allow editing
|
|
62
|
+
}
|
|
63
|
+
// 6. Start Agent Process
|
|
64
|
+
try {
|
|
65
|
+
// Need to find the CLI path. We are in src/studio/services
|
|
66
|
+
// CLI is likely at ../../../bin/cli.js relative to this file?
|
|
67
|
+
// No, in studio.ts it was path.join(__dirname, '..', 'bin', 'cli.js');
|
|
68
|
+
// Here __dirname is .../agentlang-cli/src/studio/services (if compiled/ts-node)
|
|
69
|
+
// So we need to go up to src/studio, then src, then root...
|
|
70
|
+
// If we assume standard compiled structure:
|
|
71
|
+
// dist/studio/services/StudioServer.js
|
|
72
|
+
// dist/studio/services/../../bin/cli.js -> dist/bin/cli.js ? No.
|
|
73
|
+
// bin/cli.js is usually at root/bin/cli.js.
|
|
74
|
+
// Let's assume we can resolve it relative to the package root.
|
|
75
|
+
// But let's try to match original relative path.
|
|
76
|
+
// Original: path.join(__dirname, '..', 'bin', 'cli.js') where __dirname was src/studio.ts (so src)
|
|
77
|
+
// So it pointed to src/../bin/cli.js = root/bin/cli.js
|
|
78
|
+
// From here: src/studio/services
|
|
79
|
+
// We need: ../../../bin/cli.js
|
|
80
|
+
const cliPath = path.join(__dirname, '..', '..', '..', 'bin', 'cli.js');
|
|
81
|
+
const spawnArgs = ['run', appPath];
|
|
82
|
+
const spawnOptions = {
|
|
83
|
+
stdio: 'pipe',
|
|
84
|
+
shell: false,
|
|
85
|
+
cwd: appPath,
|
|
86
|
+
};
|
|
87
|
+
if (existsSync(cliPath)) {
|
|
88
|
+
this.agentProcess = spawn('node', [cliPath, ...spawnArgs], spawnOptions);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.agentProcess = spawn('agent', spawnArgs, Object.assign(Object.assign({}, spawnOptions), { shell: true }));
|
|
92
|
+
}
|
|
93
|
+
if (this.agentProcess) {
|
|
94
|
+
(_a = this.agentProcess.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (data) => {
|
|
95
|
+
process.stdout.write(chalk.dim(`[Agent ${path.basename(appPath)}] ${data.toString()}`));
|
|
96
|
+
});
|
|
97
|
+
(_b = this.agentProcess.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (data) => {
|
|
98
|
+
process.stderr.write(chalk.dim(`[Agent ${path.basename(appPath)}] ${data.toString()}`));
|
|
99
|
+
});
|
|
100
|
+
console.log(chalk.green(`✓ Agent process started (PID: ${this.agentProcess.pid})`));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error(chalk.red('Failed to spawn agent process:'), error);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
stopApp(resetToRoot = true, workspaceRoot) {
|
|
108
|
+
if (this.agentProcess) {
|
|
109
|
+
console.log(chalk.yellow('\nStopping active app...'));
|
|
110
|
+
this.agentProcess.kill();
|
|
111
|
+
this.agentProcess = null;
|
|
112
|
+
}
|
|
113
|
+
if (resetToRoot && workspaceRoot) {
|
|
114
|
+
this.currentAppPath = null;
|
|
115
|
+
this.fileService.setTargetDir(workspaceRoot);
|
|
116
|
+
console.log(chalk.green('✓ Returned to Dashboard Mode'));
|
|
117
|
+
}
|
|
118
|
+
else if (resetToRoot) {
|
|
119
|
+
this.currentAppPath = null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
getCurrentApp() {
|
|
123
|
+
return this.currentAppPath;
|
|
124
|
+
}
|
|
125
|
+
setCurrentApp(appPath) {
|
|
126
|
+
this.currentAppPath = appPath;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=AppRuntimeService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppRuntimeService.js","sourceRoot":"","sources":["../../../src/studio/services/AppRuntimeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { execSync as execSyncChild } from 'child_process';
|
|
5
|
+
import { flushAllAndLoad } from '../runtime.js';
|
|
6
|
+
import { ignoredPaths } from '../utils.js';
|
|
7
|
+
import { simpleGit } from 'simple-git';
|
|
8
|
+
export class FileService {
|
|
9
|
+
constructor(targetDir) {
|
|
10
|
+
this.targetDir = targetDir;
|
|
11
|
+
}
|
|
12
|
+
setTargetDir(targetDir) {
|
|
13
|
+
this.targetDir = targetDir;
|
|
14
|
+
}
|
|
15
|
+
getTargetDir() {
|
|
16
|
+
return this.targetDir;
|
|
17
|
+
}
|
|
18
|
+
async loadProject() {
|
|
19
|
+
// Only load if it looks like a valid project to avoid errors in dashboard mode
|
|
20
|
+
if (existsSync(path.join(this.targetDir, 'package.json'))) {
|
|
21
|
+
await flushAllAndLoad(this.targetDir);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async getFileTree(dirPath = this.targetDir, relativePath = '', skipIgnored = false) {
|
|
25
|
+
const dirents = await fs.readdir(dirPath, { withFileTypes: true });
|
|
26
|
+
const files = [];
|
|
27
|
+
for (const dirent of dirents) {
|
|
28
|
+
// Skip ignored paths unless we're explicitly fetching from node_modules
|
|
29
|
+
if (!skipIgnored && ignoredPaths.has(dirent.name)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const newRelativePath = path.join(relativePath, dirent.name);
|
|
33
|
+
if (dirent.isDirectory()) {
|
|
34
|
+
files.push({
|
|
35
|
+
name: dirent.name,
|
|
36
|
+
path: newRelativePath,
|
|
37
|
+
type: 'directory',
|
|
38
|
+
children: await this.getFileTree(path.join(dirPath, dirent.name), newRelativePath, skipIgnored),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
files.push({
|
|
43
|
+
name: dirent.name,
|
|
44
|
+
path: newRelativePath,
|
|
45
|
+
type: 'file',
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return files;
|
|
50
|
+
}
|
|
51
|
+
async readFile(filePath) {
|
|
52
|
+
const fullPath = path.join(this.targetDir, filePath);
|
|
53
|
+
return fs.readFile(fullPath, 'utf-8');
|
|
54
|
+
}
|
|
55
|
+
async writeFile(filePath, content, commitMessage) {
|
|
56
|
+
const fullPath = path.join(this.targetDir, filePath);
|
|
57
|
+
await fs.writeFile(fullPath, content, 'utf-8');
|
|
58
|
+
// Auto-commit the change if a commit message is provided
|
|
59
|
+
if (commitMessage) {
|
|
60
|
+
await this.commitFile(filePath, commitMessage);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async commitFile(filePath, message) {
|
|
64
|
+
try {
|
|
65
|
+
// Check if .git directory exists
|
|
66
|
+
const gitDir = path.join(this.targetDir, '.git');
|
|
67
|
+
if (!existsSync(gitDir)) {
|
|
68
|
+
// Not a git repo, skip commit
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const git = simpleGit(this.targetDir);
|
|
72
|
+
await git.add(filePath);
|
|
73
|
+
// Check if there are staged changes
|
|
74
|
+
const status = await git.status();
|
|
75
|
+
if (status.staged.length > 0) {
|
|
76
|
+
const timestamp = new Date().toLocaleString();
|
|
77
|
+
await git.commit(`${message} at ${timestamp}`);
|
|
78
|
+
// eslint-disable-next-line no-console
|
|
79
|
+
console.log(`✅ Committed: ${message}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
// eslint-disable-next-line no-console
|
|
84
|
+
console.warn('Failed to commit changes:', error);
|
|
85
|
+
// Don't throw - file was saved, commit is optional
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async stat(filePath) {
|
|
89
|
+
const fullPath = path.join(this.targetDir, filePath);
|
|
90
|
+
const stats = await fs.stat(fullPath);
|
|
91
|
+
return {
|
|
92
|
+
type: stats.isDirectory() ? 'directory' : 'file',
|
|
93
|
+
size: stats.size,
|
|
94
|
+
mtime: stats.mtime,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async getPackageInfo() {
|
|
98
|
+
try {
|
|
99
|
+
const packageJsonPath = path.join(this.targetDir, 'package.json');
|
|
100
|
+
if (!existsSync(packageJsonPath)) {
|
|
101
|
+
return {};
|
|
102
|
+
}
|
|
103
|
+
const content = await fs.readFile(packageJsonPath, 'utf-8');
|
|
104
|
+
return JSON.parse(content);
|
|
105
|
+
}
|
|
106
|
+
catch (_a) {
|
|
107
|
+
// Silently return empty object if package.json doesn't exist or can't be read
|
|
108
|
+
// This is expected in Dashboard Mode where root directory may not have package.json
|
|
109
|
+
return {};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async getCurrentBranch() {
|
|
113
|
+
try {
|
|
114
|
+
// Check if .git directory exists
|
|
115
|
+
const gitDir = path.join(this.targetDir, '.git');
|
|
116
|
+
try {
|
|
117
|
+
const stat = await fs.stat(gitDir);
|
|
118
|
+
if (!stat.isDirectory()) {
|
|
119
|
+
return 'main'; // Default branch if not a git repo
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (_a) {
|
|
123
|
+
return 'main'; // Default branch if .git doesn't exist
|
|
124
|
+
}
|
|
125
|
+
// Get current branch using git command
|
|
126
|
+
const branch = execSyncChild('git rev-parse --abbrev-ref HEAD', {
|
|
127
|
+
cwd: this.targetDir,
|
|
128
|
+
encoding: 'utf-8',
|
|
129
|
+
}).trim();
|
|
130
|
+
return branch || 'main';
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
// eslint-disable-next-line no-console
|
|
134
|
+
console.warn('Failed to get current branch:', error);
|
|
135
|
+
return 'main'; // Default to main if git command fails
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
installDependencies(githubUsername, githubToken) {
|
|
139
|
+
try {
|
|
140
|
+
// Configure git to use credentials if provided
|
|
141
|
+
// Use local config (scoped to this directory) instead of global to avoid affecting other repos
|
|
142
|
+
if (githubUsername && githubToken) {
|
|
143
|
+
const gitConfig = [
|
|
144
|
+
`url.https://${githubUsername}:${githubToken}@github.com/.insteadOf https://github.com/`,
|
|
145
|
+
`url.https://${githubUsername}:${githubToken}@github.com/.insteadOf git+https://github.com/`,
|
|
146
|
+
];
|
|
147
|
+
for (const config of gitConfig) {
|
|
148
|
+
try {
|
|
149
|
+
execSyncChild(`git config --local ${config}`, {
|
|
150
|
+
cwd: this.targetDir,
|
|
151
|
+
stdio: 'pipe',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
catch (_a) {
|
|
155
|
+
// If local config fails (e.g., not a git repo), try global as fallback
|
|
156
|
+
try {
|
|
157
|
+
execSyncChild(`git config --global ${config}`, {
|
|
158
|
+
stdio: 'pipe',
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (globalConfigError) {
|
|
162
|
+
// Ignore config errors, continue with npm install
|
|
163
|
+
// eslint-disable-next-line no-console
|
|
164
|
+
console.warn('Failed to set git config:', globalConfigError);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
execSyncChild('npm install', {
|
|
170
|
+
cwd: this.targetDir,
|
|
171
|
+
stdio: 'pipe',
|
|
172
|
+
env: Object.assign(Object.assign({}, process.env), {
|
|
173
|
+
// Set GIT_ASKPASS to avoid interactive prompts
|
|
174
|
+
GIT_ASKPASS: 'echo', GIT_TERMINAL_PROMPT: '0' }),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
179
|
+
throw new Error(`Failed to install dependencies: ${errorMessage}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=FileService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileService.js","sourceRoot":"","sources":["../../../src/studio/services/FileService.ts"],"names":[],"mappings":"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"}
|