@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.
@@ -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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"}