vega-companion 0.1.0

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/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import Conf from 'conf';
6
+ import { CompanionClient } from './companion-client.js';
7
+ const config = new Conf({
8
+ projectName: 'vega-companion',
9
+ schema: {
10
+ serverUrl: { type: 'string' },
11
+ apiKey: { type: 'string' },
12
+ workDir: { type: 'string' },
13
+ },
14
+ });
15
+ const program = new Command();
16
+ program
17
+ .name('vega-companion')
18
+ .description('Vega Agent Companion CLI - Run AI coding agents locally')
19
+ .version('0.1.0');
20
+ program
21
+ .command('configure')
22
+ .description('Configure the companion connection')
23
+ .option('-s, --server <url>', 'Vega server URL')
24
+ .option('-k, --api-key <key>', 'API key for authentication')
25
+ .option('-w, --work-dir <path>', 'Working directory for repositories')
26
+ .action((options) => {
27
+ if (options.server) {
28
+ config.set('serverUrl', options.server);
29
+ console.log(chalk.green('✓ Server URL saved'));
30
+ }
31
+ if (options.apiKey) {
32
+ config.set('apiKey', options.apiKey);
33
+ console.log(chalk.green('✓ API key saved'));
34
+ }
35
+ if (options.workDir) {
36
+ config.set('workDir', options.workDir);
37
+ console.log(chalk.green('✓ Work directory saved'));
38
+ }
39
+ console.log('\nCurrent configuration:');
40
+ console.log(` Server: ${config.get('serverUrl') || chalk.gray('(not set)')}`);
41
+ console.log(` API Key: ${config.get('apiKey') ? chalk.gray('••••••••') : chalk.gray('(not set)')}`);
42
+ console.log(` Work Dir: ${config.get('workDir') || chalk.gray('(current directory)')}`);
43
+ });
44
+ program
45
+ .command('connect')
46
+ .description('Connect to Vega and start listening for jobs')
47
+ .option('-s, --server <url>', 'Vega server URL (overrides config)')
48
+ .option('-k, --api-key <key>', 'API key (overrides config)')
49
+ .action(async (options) => {
50
+ const serverUrl = options.server || config.get('serverUrl');
51
+ const apiKey = options.apiKey || config.get('apiKey');
52
+ const workDir = config.get('workDir');
53
+ if (!serverUrl) {
54
+ console.error(chalk.red('Error: Server URL not configured. Use --server or run "vega-companion configure"'));
55
+ process.exit(1);
56
+ }
57
+ if (!apiKey) {
58
+ console.error(chalk.red('Error: API key not configured. Use --api-key or run "vega-companion configure"'));
59
+ process.exit(1);
60
+ }
61
+ const spinner = ora('Connecting to Vega...').start();
62
+ const client = new CompanionClient({
63
+ serverUrl,
64
+ apiKey,
65
+ workDir,
66
+ });
67
+ client.on('authenticated', () => {
68
+ spinner.succeed('Connected to Vega');
69
+ console.log(chalk.green('\n✓ Waiting for jobs...'));
70
+ console.log(chalk.gray(' Press Ctrl+C to disconnect\n'));
71
+ });
72
+ client.on('auth_error', (error) => {
73
+ spinner.fail(`Authentication failed: ${error}`);
74
+ process.exit(1);
75
+ });
76
+ client.on('disconnected', () => {
77
+ console.log(chalk.yellow('\n⚠ Disconnected from Vega'));
78
+ });
79
+ client.on('reconnecting', (attempt) => {
80
+ console.log(chalk.yellow(` Reconnecting (attempt ${attempt})...`));
81
+ });
82
+ client.on('job:start', (job) => {
83
+ console.log(chalk.blue(`\n▶ Job started: ${job.jobId}`));
84
+ if (job.options?.issueKey) {
85
+ console.log(chalk.gray(` Issue: ${job.options.issueKey}`));
86
+ }
87
+ });
88
+ client.on('job:complete', (result) => {
89
+ if (result.result.success) {
90
+ console.log(chalk.green(`✓ Job completed: ${result.jobId}`));
91
+ if (result.result.summary) {
92
+ console.log(chalk.gray(` ${result.result.summary.slice(0, 100)}...`));
93
+ }
94
+ }
95
+ else {
96
+ console.log(chalk.red(`✗ Job failed: ${result.jobId}`));
97
+ if (result.result.error) {
98
+ console.log(chalk.gray(` Error: ${result.result.error}`));
99
+ }
100
+ }
101
+ });
102
+ client.on('error', (error) => {
103
+ console.error(chalk.red(`Error: ${error.message}`));
104
+ });
105
+ // Handle Ctrl+C
106
+ process.on('SIGINT', () => {
107
+ console.log(chalk.yellow('\n\nDisconnecting...'));
108
+ client.disconnect();
109
+ process.exit(0);
110
+ });
111
+ try {
112
+ await client.connect();
113
+ }
114
+ catch (error) {
115
+ const message = error instanceof Error ? error.message : 'Unknown error';
116
+ spinner.fail(`Failed to connect: ${message}`);
117
+ process.exit(1);
118
+ }
119
+ });
120
+ program
121
+ .command('status')
122
+ .description('Show current configuration status')
123
+ .action(() => {
124
+ console.log(chalk.bold('\nVega Companion Configuration:\n'));
125
+ console.log(` Server URL: ${config.get('serverUrl') || chalk.gray('(not configured)')}`);
126
+ console.log(` API Key: ${config.get('apiKey') ? chalk.green('configured') : chalk.gray('(not configured)')}`);
127
+ console.log(` Work Dir: ${config.get('workDir') || chalk.gray('(current directory)')}`);
128
+ console.log();
129
+ });
130
+ program.parse();
131
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface CompanionConfig {
3
+ serverUrl: string;
4
+ apiKey: string;
5
+ workDir?: string;
6
+ }
7
+ export interface JobMessage {
8
+ type: 'job:start';
9
+ jobId: string;
10
+ runId: string;
11
+ agentType: string;
12
+ options: {
13
+ prompt: string;
14
+ repositoryUrl: string;
15
+ baseBranch: string;
16
+ workBranch: string;
17
+ issueKey?: string;
18
+ };
19
+ }
20
+ export interface ProgressMessage {
21
+ type: 'job:progress';
22
+ jobId: string;
23
+ progress: {
24
+ level: 'info' | 'warn' | 'error' | 'debug';
25
+ category: string;
26
+ message: string;
27
+ toolName?: string;
28
+ filePath?: string;
29
+ diff?: string;
30
+ };
31
+ }
32
+ export interface CompleteMessage {
33
+ type: 'job:complete';
34
+ jobId: string;
35
+ result: {
36
+ success: boolean;
37
+ summary?: string;
38
+ filesChanged?: Array<{
39
+ path: string;
40
+ additions: number;
41
+ deletions: number;
42
+ }>;
43
+ pullRequestUrl?: string;
44
+ error?: string;
45
+ };
46
+ }
47
+ export declare class CompanionClient extends EventEmitter {
48
+ private ws;
49
+ private config;
50
+ private reconnectAttempts;
51
+ private maxReconnectAttempts;
52
+ private reconnectDelay;
53
+ private heartbeatInterval;
54
+ private currentProcess;
55
+ private currentJobId;
56
+ constructor(config: CompanionConfig);
57
+ connect(): Promise<void>;
58
+ private authenticate;
59
+ private startHeartbeat;
60
+ private stopHeartbeat;
61
+ private attemptReconnect;
62
+ private handleMessage;
63
+ private handleJobStart;
64
+ private runClaudeCode;
65
+ private prepareRepository;
66
+ private executeClaudeCode;
67
+ private hasGitChanges;
68
+ private getChangedFiles;
69
+ private pushChanges;
70
+ private execCommand;
71
+ private sendProgress;
72
+ private sendJobComplete;
73
+ private send;
74
+ cancelCurrentJob(): void;
75
+ disconnect(): void;
76
+ }
77
+ //# sourceMappingURL=companion-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companion-client.d.ts","sourceRoot":"","sources":["../src/companion-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;QAC3C,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAM;IAClC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,YAAY,CAAuB;gBAE/B,MAAM,EAAE,eAAe;IAK7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC9B,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,aAAa;YAgBP,cAAc;YAed,aAAa;YA4Cb,iBAAiB;YA8BjB,iBAAiB;YAuEjB,aAAa;YASb,eAAe;YAqBf,WAAW;IAQzB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,IAAI;IAMZ,gBAAgB,IAAI,IAAI;IAaxB,UAAU,IAAI,IAAI;CAQnB"}
@@ -0,0 +1,318 @@
1
+ import WebSocket from 'ws';
2
+ import { spawn } from 'child_process';
3
+ import { EventEmitter } from 'events';
4
+ export class CompanionClient extends EventEmitter {
5
+ ws = null;
6
+ config;
7
+ reconnectAttempts = 0;
8
+ maxReconnectAttempts = 10;
9
+ reconnectDelay = 5000;
10
+ heartbeatInterval = null;
11
+ currentProcess = null;
12
+ currentJobId = null;
13
+ constructor(config) {
14
+ super();
15
+ this.config = config;
16
+ }
17
+ async connect() {
18
+ return new Promise((resolve, reject) => {
19
+ const wsUrl = this.config.serverUrl.replace(/^http/, 'ws') + '/ws/companion';
20
+ this.ws = new WebSocket(wsUrl);
21
+ this.ws.on('open', () => {
22
+ this.reconnectAttempts = 0;
23
+ this.authenticate();
24
+ this.startHeartbeat();
25
+ resolve();
26
+ });
27
+ this.ws.on('message', (data) => {
28
+ try {
29
+ const message = JSON.parse(data.toString());
30
+ this.handleMessage(message);
31
+ }
32
+ catch {
33
+ this.emit('error', new Error('Failed to parse message'));
34
+ }
35
+ });
36
+ this.ws.on('close', () => {
37
+ this.stopHeartbeat();
38
+ this.emit('disconnected');
39
+ this.attemptReconnect();
40
+ });
41
+ this.ws.on('error', (error) => {
42
+ this.emit('error', error);
43
+ if (this.reconnectAttempts === 0) {
44
+ reject(error);
45
+ }
46
+ });
47
+ });
48
+ }
49
+ authenticate() {
50
+ this.send({
51
+ type: 'auth',
52
+ apiKey: this.config.apiKey,
53
+ capabilities: {
54
+ agentTypes: ['claude_code'],
55
+ maxConcurrent: 1,
56
+ },
57
+ });
58
+ }
59
+ startHeartbeat() {
60
+ this.heartbeatInterval = setInterval(() => {
61
+ this.send({ type: 'heartbeat' });
62
+ }, 30000);
63
+ }
64
+ stopHeartbeat() {
65
+ if (this.heartbeatInterval) {
66
+ clearInterval(this.heartbeatInterval);
67
+ this.heartbeatInterval = null;
68
+ }
69
+ }
70
+ attemptReconnect() {
71
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
72
+ this.emit('error', new Error('Max reconnection attempts reached'));
73
+ return;
74
+ }
75
+ this.reconnectAttempts++;
76
+ this.emit('reconnecting', this.reconnectAttempts);
77
+ setTimeout(() => {
78
+ this.connect().catch(() => {
79
+ // Will retry via the close handler
80
+ });
81
+ }, this.reconnectDelay * this.reconnectAttempts);
82
+ }
83
+ handleMessage(message) {
84
+ switch (message.type) {
85
+ case 'auth:success':
86
+ this.emit('authenticated', message);
87
+ break;
88
+ case 'auth:error':
89
+ this.emit('auth_error', message.error);
90
+ break;
91
+ case 'job:start':
92
+ this.handleJobStart(message);
93
+ break;
94
+ default:
95
+ this.emit('message', message);
96
+ }
97
+ }
98
+ async handleJobStart(message) {
99
+ this.currentJobId = message.jobId;
100
+ this.emit('job:start', message);
101
+ try {
102
+ await this.runClaudeCode(message);
103
+ }
104
+ catch (error) {
105
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
106
+ this.sendJobComplete(message.jobId, {
107
+ success: false,
108
+ error: errorMessage,
109
+ });
110
+ }
111
+ }
112
+ async runClaudeCode(job) {
113
+ const { options } = job;
114
+ const workDir = this.config.workDir || process.cwd();
115
+ // Clone or update repository
116
+ this.sendProgress(job.jobId, {
117
+ level: 'info',
118
+ category: 'git',
119
+ message: `Cloning repository: ${options.repositoryUrl}`,
120
+ });
121
+ const repoDir = await this.prepareRepository(options.repositoryUrl, options.baseBranch, options.workBranch, workDir);
122
+ // Run Claude Code
123
+ this.sendProgress(job.jobId, {
124
+ level: 'info',
125
+ category: 'agent',
126
+ message: 'Starting Claude Code...',
127
+ });
128
+ const result = await this.executeClaudeCode(repoDir, options.prompt, job.jobId);
129
+ // Push changes and create PR if successful
130
+ if (result.success && result.hasChanges) {
131
+ this.sendProgress(job.jobId, {
132
+ level: 'info',
133
+ category: 'git',
134
+ message: 'Pushing changes...',
135
+ });
136
+ await this.pushChanges(repoDir, options.workBranch);
137
+ // The PR URL would be created by the server based on the push
138
+ result.summary = result.summary || 'Changes pushed successfully';
139
+ }
140
+ this.sendJobComplete(job.jobId, result);
141
+ }
142
+ async prepareRepository(repoUrl, baseBranch, workBranch, workDir) {
143
+ const repoName = repoUrl.split('/').pop()?.replace('.git', '') || 'repo';
144
+ const repoDir = `${workDir}/${repoName}`;
145
+ // Check if repo exists
146
+ const exists = await this.execCommand('test', ['-d', repoDir], workDir)
147
+ .then(() => true)
148
+ .catch(() => false);
149
+ if (exists) {
150
+ // Fetch and checkout
151
+ await this.execCommand('git', ['fetch', 'origin'], repoDir);
152
+ await this.execCommand('git', ['checkout', baseBranch], repoDir);
153
+ await this.execCommand('git', ['pull', 'origin', baseBranch], repoDir);
154
+ }
155
+ else {
156
+ // Clone
157
+ await this.execCommand('git', ['clone', '-b', baseBranch, repoUrl, repoDir], workDir);
158
+ }
159
+ // Create work branch
160
+ await this.execCommand('git', ['checkout', '-B', workBranch], repoDir);
161
+ return repoDir;
162
+ }
163
+ async executeClaudeCode(repoDir, prompt, jobId) {
164
+ return new Promise((resolve) => {
165
+ const args = ['--print', '--dangerously-skip-permissions', prompt];
166
+ this.currentProcess = spawn('claude', args, {
167
+ cwd: repoDir,
168
+ env: { ...process.env },
169
+ shell: true,
170
+ });
171
+ let output = '';
172
+ let errorOutput = '';
173
+ this.currentProcess.stdout?.on('data', (data) => {
174
+ const text = data.toString();
175
+ output += text;
176
+ this.sendProgress(jobId, {
177
+ level: 'info',
178
+ category: 'agent',
179
+ message: text.trim(),
180
+ });
181
+ });
182
+ this.currentProcess.stderr?.on('data', (data) => {
183
+ const text = data.toString();
184
+ errorOutput += text;
185
+ this.sendProgress(jobId, {
186
+ level: 'warn',
187
+ category: 'agent',
188
+ message: text.trim(),
189
+ });
190
+ });
191
+ this.currentProcess.on('close', async (code) => {
192
+ this.currentProcess = null;
193
+ if (code === 0) {
194
+ // Check for changes
195
+ const hasChanges = await this.hasGitChanges(repoDir);
196
+ const filesChanged = hasChanges ? await this.getChangedFiles(repoDir) : [];
197
+ resolve({
198
+ success: true,
199
+ hasChanges,
200
+ summary: output.slice(-500), // Last 500 chars as summary
201
+ filesChanged,
202
+ });
203
+ }
204
+ else {
205
+ resolve({
206
+ success: false,
207
+ error: errorOutput || `Claude Code exited with code ${code}`,
208
+ });
209
+ }
210
+ });
211
+ this.currentProcess.on('error', (error) => {
212
+ this.currentProcess = null;
213
+ resolve({
214
+ success: false,
215
+ error: error.message,
216
+ });
217
+ });
218
+ });
219
+ }
220
+ async hasGitChanges(repoDir) {
221
+ try {
222
+ const result = await this.execCommand('git', ['status', '--porcelain'], repoDir);
223
+ return result.trim().length > 0;
224
+ }
225
+ catch {
226
+ return false;
227
+ }
228
+ }
229
+ async getChangedFiles(repoDir) {
230
+ try {
231
+ // Stage all changes first
232
+ await this.execCommand('git', ['add', '-A'], repoDir);
233
+ // Get diff stats
234
+ const result = await this.execCommand('git', ['diff', '--cached', '--numstat'], repoDir);
235
+ return result.trim().split('\n').filter(Boolean).map((line) => {
236
+ const [additions, deletions, path] = line.split('\t');
237
+ return {
238
+ path,
239
+ additions: parseInt(additions, 10) || 0,
240
+ deletions: parseInt(deletions, 10) || 0,
241
+ };
242
+ });
243
+ }
244
+ catch {
245
+ return [];
246
+ }
247
+ }
248
+ async pushChanges(repoDir, branch) {
249
+ // Commit changes
250
+ await this.execCommand('git', ['commit', '-m', 'feat: Agent changes'], repoDir);
251
+ // Push
252
+ await this.execCommand('git', ['push', '-u', 'origin', branch, '--force'], repoDir);
253
+ }
254
+ execCommand(cmd, args, cwd) {
255
+ return new Promise((resolve, reject) => {
256
+ const proc = spawn(cmd, args, { cwd, shell: true });
257
+ let stdout = '';
258
+ let stderr = '';
259
+ proc.stdout?.on('data', (data) => {
260
+ stdout += data.toString();
261
+ });
262
+ proc.stderr?.on('data', (data) => {
263
+ stderr += data.toString();
264
+ });
265
+ proc.on('close', (code) => {
266
+ if (code === 0) {
267
+ resolve(stdout);
268
+ }
269
+ else {
270
+ reject(new Error(stderr || `Command failed with code ${code}`));
271
+ }
272
+ });
273
+ proc.on('error', reject);
274
+ });
275
+ }
276
+ sendProgress(jobId, progress) {
277
+ this.send({
278
+ type: 'job:progress',
279
+ jobId,
280
+ progress,
281
+ });
282
+ }
283
+ sendJobComplete(jobId, result) {
284
+ this.currentJobId = null;
285
+ this.send({
286
+ type: 'job:complete',
287
+ jobId,
288
+ result,
289
+ });
290
+ this.emit('job:complete', { jobId, result });
291
+ }
292
+ send(message) {
293
+ if (this.ws?.readyState === WebSocket.OPEN) {
294
+ this.ws.send(JSON.stringify(message));
295
+ }
296
+ }
297
+ cancelCurrentJob() {
298
+ if (this.currentProcess) {
299
+ this.currentProcess.kill('SIGTERM');
300
+ this.currentProcess = null;
301
+ }
302
+ if (this.currentJobId) {
303
+ this.sendJobComplete(this.currentJobId, {
304
+ success: false,
305
+ error: 'Job cancelled by user',
306
+ });
307
+ }
308
+ }
309
+ disconnect() {
310
+ this.cancelCurrentJob();
311
+ this.stopHeartbeat();
312
+ if (this.ws) {
313
+ this.ws.close();
314
+ this.ws = null;
315
+ }
316
+ }
317
+ }
318
+ //# sourceMappingURL=companion-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companion-client.js","sourceRoot":"","sources":["../src/companion-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { CompanionClient } from './companion-client.js';
2
+ export type { CompanionConfig, JobMessage, ProgressMessage, CompleteMessage, } from './companion-client.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EACV,eAAe,EACf,UAAU,EACV,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { CompanionClient } from './companion-client.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "vega-companion",
3
+ "version": "0.1.0",
4
+ "description": "Vega Agent Companion CLI - Run AI coding agents locally",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "vega-companion": "./dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "start": "node dist/cli.js",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "vega",
21
+ "ai",
22
+ "coding-agent",
23
+ "claude",
24
+ "cli"
25
+ ],
26
+ "author": "Auptim",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/Auptim/Vega_2.0.git",
31
+ "directory": "packages/companion"
32
+ },
33
+ "homepage": "https://www.vegacommandsuite.com",
34
+ "dependencies": {
35
+ "chalk": "^5.3.0",
36
+ "commander": "^12.0.0",
37
+ "conf": "^12.0.0",
38
+ "ora": "^8.0.1",
39
+ "ws": "^8.16.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.10.0",
43
+ "@types/ws": "^8.5.10",
44
+ "typescript": "^5.3.0"
45
+ },
46
+ "engines": {
47
+ "node": ">=18.0.0"
48
+ }
49
+ }