@controlvector/cv-agent 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.
Files changed (51) hide show
  1. package/dist/bundle.cjs +4822 -0
  2. package/dist/bundle.cjs.map +7 -0
  3. package/dist/commands/agent-git.d.ts +59 -0
  4. package/dist/commands/agent-git.d.ts.map +1 -0
  5. package/dist/commands/agent-git.js +234 -0
  6. package/dist/commands/agent-git.js.map +1 -0
  7. package/dist/commands/agent.d.ts +20 -0
  8. package/dist/commands/agent.d.ts.map +1 -0
  9. package/dist/commands/agent.js +506 -0
  10. package/dist/commands/agent.js.map +1 -0
  11. package/dist/commands/auth.d.ts +8 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +104 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/remote.d.ts +8 -0
  16. package/dist/commands/remote.d.ts.map +1 -0
  17. package/dist/commands/remote.js +100 -0
  18. package/dist/commands/remote.js.map +1 -0
  19. package/dist/commands/status.d.ts +8 -0
  20. package/dist/commands/status.d.ts.map +1 -0
  21. package/dist/commands/status.js +75 -0
  22. package/dist/commands/status.js.map +1 -0
  23. package/dist/commands/task.d.ts +8 -0
  24. package/dist/commands/task.d.ts.map +1 -0
  25. package/dist/commands/task.js +122 -0
  26. package/dist/commands/task.js.map +1 -0
  27. package/dist/index.d.ts +9 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +27 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/utils/api.d.ts +31 -0
  32. package/dist/utils/api.d.ts.map +1 -0
  33. package/dist/utils/api.js +169 -0
  34. package/dist/utils/api.js.map +1 -0
  35. package/dist/utils/config.d.ts +13 -0
  36. package/dist/utils/config.d.ts.map +1 -0
  37. package/dist/utils/config.js +29 -0
  38. package/dist/utils/config.js.map +1 -0
  39. package/dist/utils/credentials.d.ts +46 -0
  40. package/dist/utils/credentials.d.ts.map +1 -0
  41. package/dist/utils/credentials.js +176 -0
  42. package/dist/utils/credentials.js.map +1 -0
  43. package/dist/utils/display.d.ts +8 -0
  44. package/dist/utils/display.d.ts.map +1 -0
  45. package/dist/utils/display.js +50 -0
  46. package/dist/utils/display.js.map +1 -0
  47. package/dist/utils/retry.d.ts +5 -0
  48. package/dist/utils/retry.d.ts.map +1 -0
  49. package/dist/utils/retry.js +26 -0
  50. package/dist/utils/retry.js.map +1 -0
  51. package/package.json +38 -0
@@ -0,0 +1,506 @@
1
+ "use strict";
2
+ /**
3
+ * cva agent command
4
+ *
5
+ * Listens for tasks dispatched from Claude.ai via CV-Hub and executes them
6
+ * with Claude Code. The agent registers as an executor, polls for tasks,
7
+ * and reports results back.
8
+ *
9
+ * Two execution modes:
10
+ * --auto-approve: Uses Claude Code -p mode with --allowedTools (proven)
11
+ * Default (relay): Spawns interactive Claude Code, relays permission prompts
12
+ *
13
+ * Usage:
14
+ * cva agent # Start in relay mode
15
+ * cva agent --auto-approve # Start in auto-approve mode
16
+ * cva agent --machine z840-primary # Override machine name
17
+ * cva agent --poll-interval 10 # Check every 10 seconds
18
+ */
19
+ var __importDefault = (this && this.__importDefault) || function (mod) {
20
+ return (mod && mod.__esModule) ? mod : { "default": mod };
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.agentCommand = agentCommand;
24
+ const commander_1 = require("commander");
25
+ const node_child_process_1 = require("node:child_process");
26
+ const chalk_1 = __importDefault(require("chalk"));
27
+ const credentials_js_1 = require("../utils/credentials.js");
28
+ const api_js_1 = require("../utils/api.js");
29
+ const agent_git_js_1 = require("./agent-git.js");
30
+ const display_js_1 = require("../utils/display.js");
31
+ const retry_js_1 = require("../utils/retry.js");
32
+ // ============================================================================
33
+ // Claude Code launcher
34
+ // ============================================================================
35
+ function buildClaudePrompt(task) {
36
+ let prompt = '';
37
+ prompt += `You are executing a task dispatched from Claude.ai via CV-Hub.\n\n`;
38
+ prompt += `## Task: ${task.title}\n`;
39
+ prompt += `Task ID: ${task.id}\n`;
40
+ prompt += `Priority: ${task.priority}\n`;
41
+ if (task.branch)
42
+ prompt += `Branch: ${task.branch}\n`;
43
+ if (task.file_paths?.length)
44
+ prompt += `Focus files: ${task.file_paths.join(', ')}\n`;
45
+ prompt += `\n`;
46
+ // Main instructions
47
+ if (task.description) {
48
+ prompt += task.description;
49
+ }
50
+ else if (task.input?.description) {
51
+ prompt += task.input.description;
52
+ }
53
+ if (task.input?.context) {
54
+ prompt += `\n\n## Context\n${task.input.context}`;
55
+ }
56
+ if (task.input?.instructions?.length) {
57
+ prompt += `\n\n## Instructions\n`;
58
+ task.input.instructions.forEach((i, idx) => {
59
+ prompt += `${idx + 1}. ${i}\n`;
60
+ });
61
+ }
62
+ if (task.input?.constraints?.length) {
63
+ prompt += `\n\n## Constraints\n`;
64
+ task.input.constraints.forEach(c => {
65
+ prompt += `- ${c}\n`;
66
+ });
67
+ }
68
+ // Git remote instructions for CV-Hub push
69
+ if (task.owner && task.repo) {
70
+ prompt += `\n\n## Git Remote Instructions\n`;
71
+ prompt += `This repository has a \`cvhub\` remote pointing to CV-Hub.\n`;
72
+ prompt += `When committing and pushing, push to the \`cvhub\` remote:\n`;
73
+ prompt += ` git push cvhub <branch>\n`;
74
+ prompt += `\n`;
75
+ prompt += `IMPORTANT: Use only standard \`git\` commands. Do NOT use \`cv\`, \`cva\`, or \`cv-git\` commands.\n`;
76
+ }
77
+ prompt += `\n\n---\n`;
78
+ prompt += `When complete, provide a brief summary of what you accomplished.\n`;
79
+ return prompt;
80
+ }
81
+ /** Shared reference to current child process so signal handlers can kill it */
82
+ let _activeChild = null;
83
+ /** Signal handling state */
84
+ let _sigintCount = 0;
85
+ let _sigintTimer = null;
86
+ let _signalHandlerInstalled = false;
87
+ function installSignalHandlers(getState, cleanup) {
88
+ if (_signalHandlerInstalled)
89
+ return;
90
+ _signalHandlerInstalled = true;
91
+ process.on('SIGINT', async () => {
92
+ if (!_activeChild) {
93
+ console.log('\n' + chalk_1.default.gray('Agent stopped.'));
94
+ await cleanup();
95
+ process.exit(0);
96
+ }
97
+ _sigintCount++;
98
+ if (_sigintCount === 1) {
99
+ console.log(`\n${chalk_1.default.yellow('!')} Press Ctrl+C again within 3s to abort task.`);
100
+ _sigintTimer = setTimeout(() => { _sigintCount = 0; }, 3000);
101
+ return;
102
+ }
103
+ if (_sigintTimer)
104
+ clearTimeout(_sigintTimer);
105
+ console.log(`\n${chalk_1.default.red('X')} Aborting task...`);
106
+ try {
107
+ _activeChild.kill('SIGKILL');
108
+ }
109
+ catch { }
110
+ _activeChild = null;
111
+ _sigintCount = 0;
112
+ });
113
+ process.on('SIGTERM', async () => {
114
+ console.log(`\n${chalk_1.default.gray('Received SIGTERM, shutting down...')}`);
115
+ if (_activeChild) {
116
+ try {
117
+ _activeChild.kill('SIGKILL');
118
+ }
119
+ catch { }
120
+ _activeChild = null;
121
+ }
122
+ await cleanup();
123
+ process.exit(0);
124
+ });
125
+ }
126
+ // ============================================================================
127
+ // Permission handling
128
+ // ============================================================================
129
+ /** Tools to pre-approve when --auto-approve is active */
130
+ const ALLOWED_TOOLS = [
131
+ 'Bash(*)', 'Read(*)', 'Write(*)', 'Edit(*)',
132
+ 'Glob(*)', 'Grep(*)', 'WebFetch(*)', 'WebSearch(*)',
133
+ 'NotebookEdit(*)', 'TodoWrite(*)',
134
+ ];
135
+ /** Permission prompt patterns to detect in relay mode */
136
+ const PERMISSION_PATTERNS = [
137
+ /Allow .+ to .+\? \(y\/n\)/,
138
+ /Do you want to proceed\? \(y\/n\)/,
139
+ /\? \(y\/n\)/,
140
+ ];
141
+ // ============================================================================
142
+ // Auto-approve mode launcher (proven, -p + --allowedTools)
143
+ // ============================================================================
144
+ async function launchAutoApproveMode(prompt, options) {
145
+ return new Promise((resolve, reject) => {
146
+ const args = ['-p', prompt, '--allowedTools', ...ALLOWED_TOOLS];
147
+ const child = (0, node_child_process_1.spawn)('claude', args, {
148
+ cwd: options.cwd,
149
+ stdio: ['inherit', 'inherit', 'pipe'],
150
+ env: { ...process.env },
151
+ });
152
+ _activeChild = child;
153
+ let stderr = '';
154
+ child.stderr?.on('data', (data) => {
155
+ const text = data.toString();
156
+ stderr += text;
157
+ process.stderr.write(data);
158
+ });
159
+ child.on('close', (code, signal) => {
160
+ _activeChild = null;
161
+ if (signal === 'SIGKILL') {
162
+ resolve({ exitCode: 137, stderr });
163
+ }
164
+ else {
165
+ resolve({ exitCode: code ?? 1, stderr });
166
+ }
167
+ });
168
+ child.on('error', (err) => {
169
+ _activeChild = null;
170
+ reject(err);
171
+ });
172
+ });
173
+ }
174
+ // ============================================================================
175
+ // Relay mode launcher (interactive, permission prompts relayed to CV-Hub)
176
+ // ============================================================================
177
+ async function launchRelayMode(prompt, options) {
178
+ return new Promise((resolve, reject) => {
179
+ // Spawn Claude Code in interactive mode (no -p flag)
180
+ const child = (0, node_child_process_1.spawn)('claude', [], {
181
+ cwd: options.cwd,
182
+ stdio: ['pipe', 'pipe', 'pipe'],
183
+ env: { ...process.env },
184
+ });
185
+ _activeChild = child;
186
+ let stderr = '';
187
+ let stdoutBuffer = '';
188
+ // Send the task prompt as initial input
189
+ child.stdin?.write(prompt + '\n');
190
+ // Tee stdout to terminal while scanning for permission patterns
191
+ child.stdout?.on('data', async (data) => {
192
+ const text = data.toString();
193
+ process.stdout.write(data); // Tee to terminal
194
+ stdoutBuffer += text;
195
+ // Check for permission prompts
196
+ for (const pattern of PERMISSION_PATTERNS) {
197
+ const match = stdoutBuffer.match(pattern);
198
+ if (match) {
199
+ const promptText = match[0];
200
+ stdoutBuffer = ''; // Reset buffer after match
201
+ try {
202
+ // Log the approval request
203
+ await (0, api_js_1.sendTaskLog)(options.creds, options.executorId, options.taskId, 'info', `Permission prompt: ${promptText}`, { prompt_text: promptText });
204
+ // Create prompt on CV-Hub for user response
205
+ const { prompt_id } = await (0, api_js_1.createTaskPrompt)(options.creds, options.executorId, options.taskId, promptText, 'approval', ['y', 'n']);
206
+ // Poll for user response (2s interval, 5min timeout)
207
+ const timeoutMs = 5 * 60 * 1000;
208
+ const startPoll = Date.now();
209
+ let answered = false;
210
+ while (Date.now() - startPoll < timeoutMs) {
211
+ await new Promise(r => setTimeout(r, 2000));
212
+ try {
213
+ const { response } = await (0, api_js_1.pollPromptResponse)(options.creds, options.executorId, options.taskId, prompt_id);
214
+ if (response !== null) {
215
+ const answer = response.toLowerCase().startsWith('y') ? 'y' : 'n';
216
+ child.stdin?.write(answer + '\n');
217
+ answered = true;
218
+ console.log(chalk_1.default.gray(` [relay] User responded: ${answer}`));
219
+ break;
220
+ }
221
+ }
222
+ catch {
223
+ // Poll error — continue
224
+ }
225
+ }
226
+ if (!answered) {
227
+ // Timeout — deny
228
+ child.stdin?.write('n\n');
229
+ console.log(chalk_1.default.yellow(` [relay] Prompt timed out, denying.`));
230
+ }
231
+ }
232
+ catch (err) {
233
+ // If prompt relay fails, deny to be safe
234
+ child.stdin?.write('n\n');
235
+ console.log(chalk_1.default.yellow(` [relay] Prompt relay error: ${err.message}, denying.`));
236
+ }
237
+ break; // Only handle one match per data chunk
238
+ }
239
+ }
240
+ // Keep buffer manageable (only last 2KB)
241
+ if (stdoutBuffer.length > 2048) {
242
+ stdoutBuffer = stdoutBuffer.slice(-1024);
243
+ }
244
+ });
245
+ child.stderr?.on('data', (data) => {
246
+ const text = data.toString();
247
+ stderr += text;
248
+ process.stderr.write(data);
249
+ });
250
+ child.on('close', (code, signal) => {
251
+ _activeChild = null;
252
+ if (signal === 'SIGKILL') {
253
+ resolve({ exitCode: 137, stderr });
254
+ }
255
+ else {
256
+ resolve({ exitCode: code ?? 1, stderr });
257
+ }
258
+ });
259
+ child.on('error', (err) => {
260
+ _activeChild = null;
261
+ reject(err);
262
+ });
263
+ });
264
+ }
265
+ // ============================================================================
266
+ // Main agent loop
267
+ // ============================================================================
268
+ async function runAgent(options) {
269
+ const creds = await (0, credentials_js_1.readCredentials)();
270
+ if (!creds.CV_HUB_API) {
271
+ creds.CV_HUB_API = 'https://api.hub.controlvector.io';
272
+ }
273
+ if (!creds.CV_HUB_PAT) {
274
+ console.log();
275
+ console.log(chalk_1.default.red('Not authenticated.') + ' Run ' + chalk_1.default.cyan('cva auth login') + ' first.');
276
+ console.log();
277
+ console.log(chalk_1.default.bold('Quick setup:'));
278
+ console.log(` ${chalk_1.default.cyan('cva auth login')} # Authenticate`);
279
+ console.log(` ${chalk_1.default.cyan('cd ~/project/my-project')} # Go to your project`);
280
+ console.log(` ${chalk_1.default.cyan('cva agent')} # Start listening`);
281
+ console.log();
282
+ process.exit(1);
283
+ }
284
+ // Claude Code check
285
+ try {
286
+ (0, node_child_process_1.execSync)('claude --version', { stdio: 'pipe', timeout: 5000 });
287
+ }
288
+ catch {
289
+ console.log();
290
+ console.log(chalk_1.default.red('Claude Code CLI not found.') + ' Install it first:');
291
+ console.log(` ${chalk_1.default.cyan('npm install -g @anthropic-ai/claude-code')}`);
292
+ console.log();
293
+ process.exit(1);
294
+ }
295
+ const machineName = options.machine || await (0, credentials_js_1.getMachineName)();
296
+ const pollInterval = Math.max(3, parseInt(options.pollInterval, 10)) * 1000;
297
+ const workingDir = options.workingDir;
298
+ if (!options.machine) {
299
+ const credCheck = await (0, credentials_js_1.readCredentials)();
300
+ if (!credCheck.CV_HUB_MACHINE_NAME) {
301
+ console.log();
302
+ console.log(chalk_1.default.yellow('!') + ` No machine name set. Registering as "${chalk_1.default.bold(machineName)}".`);
303
+ console.log(chalk_1.default.gray(` Use --machine <name> to override.`));
304
+ console.log();
305
+ }
306
+ }
307
+ // Register executor
308
+ const executor = await (0, retry_js_1.withRetry)(() => (0, api_js_1.registerExecutor)(creds, machineName, workingDir), 'Executor registration');
309
+ // Display banner
310
+ const mode = options.autoApprove ? 'auto-approve' : 'relay';
311
+ console.log();
312
+ console.log(chalk_1.default.bold('CVA — CV-Hub Agent'));
313
+ console.log(` Machine: ${chalk_1.default.cyan(machineName)}`);
314
+ console.log(` Executor: ${chalk_1.default.gray(executor.id)}`);
315
+ console.log(` API: ${chalk_1.default.gray(creds.CV_HUB_API)}`);
316
+ console.log(` Dir: ${chalk_1.default.gray(workingDir)}`);
317
+ console.log(` Polling: every ${options.pollInterval}s`);
318
+ console.log(` Mode: ${chalk_1.default.cyan(mode)}`);
319
+ console.log(` Ctrl+C to stop`);
320
+ console.log();
321
+ console.log(chalk_1.default.cyan('Listening for tasks...'));
322
+ console.log();
323
+ const state = {
324
+ executorId: executor.id,
325
+ currentTaskId: null,
326
+ completedCount: 0,
327
+ failedCount: 0,
328
+ lastPoll: Date.now(),
329
+ lastTaskEnd: Date.now(),
330
+ running: true,
331
+ };
332
+ installSignalHandlers(() => state, async () => {
333
+ state.running = false;
334
+ await (0, api_js_1.markOffline)(creds, state.executorId);
335
+ });
336
+ // Main loop
337
+ while (state.running) {
338
+ try {
339
+ const task = await (0, retry_js_1.withRetry)(() => (0, api_js_1.pollForTask)(creds, state.executorId), 'Task poll');
340
+ state.lastPoll = Date.now();
341
+ if (task) {
342
+ await executeTask(task, state, creds, options);
343
+ }
344
+ else {
345
+ (0, display_js_1.updateStatusLine)((0, display_js_1.formatDuration)(Date.now() - state.lastTaskEnd), (0, display_js_1.formatDuration)(Date.now() - state.lastPoll), state.completedCount, state.failedCount);
346
+ }
347
+ }
348
+ catch (err) {
349
+ console.log(`\n${chalk_1.default.red('!')} Error: ${err.message}`);
350
+ }
351
+ await new Promise(r => setTimeout(r, pollInterval));
352
+ }
353
+ }
354
+ async function executeTask(task, state, creds, options) {
355
+ const startTime = Date.now();
356
+ state.currentTaskId = task.id;
357
+ // Clear status line
358
+ process.stdout.write('\r\x1b[K');
359
+ // Task header
360
+ console.log(chalk_1.default.bold('┌─────────────────────────────────────────────────────────────┐'));
361
+ console.log(chalk_1.default.bold(`│ Task: ${(task.title || '').substring(0, 53).padEnd(53)}│`));
362
+ console.log(chalk_1.default.bold(`│ ID: ${task.id.padEnd(55)}│`));
363
+ console.log(chalk_1.default.bold(`│ Priority: ${task.priority.padEnd(49)}│`));
364
+ console.log(chalk_1.default.bold('└─────────────────────────────────────────────────────────────┘'));
365
+ console.log();
366
+ // Mark task as running
367
+ try {
368
+ await (0, api_js_1.startTask)(creds, state.executorId, task.id);
369
+ (0, display_js_1.setTerminalTitle)(`cva: ${task.title} (starting...)`);
370
+ (0, api_js_1.sendTaskLog)(creds, state.executorId, task.id, 'lifecycle', 'Task started, launching Claude Code');
371
+ }
372
+ catch (err) {
373
+ console.log(chalk_1.default.red(`Failed to start task: ${err.message}`));
374
+ state.currentTaskId = null;
375
+ return;
376
+ }
377
+ // Heartbeat timer
378
+ const heartbeatTimer = setInterval(async () => {
379
+ try {
380
+ const elapsed = (0, display_js_1.formatDuration)(Date.now() - startTime);
381
+ (0, display_js_1.setTerminalTitle)(`cva: ${task.title} (${elapsed})`);
382
+ await (0, api_js_1.sendHeartbeat)(creds, state.executorId, task.id, `Claude Code running (${elapsed} elapsed)`);
383
+ }
384
+ catch { }
385
+ }, 30_000);
386
+ // Timeout timer
387
+ let timeoutTimer;
388
+ if (task.timeout_at) {
389
+ const timeoutMs = new Date(task.timeout_at).getTime() - Date.now();
390
+ if (timeoutMs > 0) {
391
+ timeoutTimer = setTimeout(() => {
392
+ console.log(`\n${chalk_1.default.red('Timeout')} Task timed out after ${(0, display_js_1.formatDuration)(timeoutMs)}`);
393
+ }, timeoutMs);
394
+ }
395
+ }
396
+ // Capture pre-task git state
397
+ const preGitState = (0, agent_git_js_1.capturePreTaskState)(options.workingDir);
398
+ // Verify/fix git remote
399
+ const gitHost = (creds.CV_HUB_API || 'https://api.hub.controlvector.io')
400
+ .replace(/^https?:\/\//, '')
401
+ .replace(/^api\./, 'git.');
402
+ const remoteInfo = (0, agent_git_js_1.verifyGitRemote)(options.workingDir, task, gitHost);
403
+ if (remoteInfo) {
404
+ console.log(chalk_1.default.gray(` Git remote: ${remoteInfo.remoteName} -> ${remoteInfo.remoteUrl}`));
405
+ }
406
+ // Build prompt and launch
407
+ const prompt = buildClaudePrompt(task);
408
+ try {
409
+ const mode = options.autoApprove ? 'auto-approve' : 'relay';
410
+ console.log(chalk_1.default.cyan('Launching Claude Code') + ` (${mode} mode)...`);
411
+ if (options.autoApprove) {
412
+ console.log(chalk_1.default.gray(' Allowed tools: ') + ALLOWED_TOOLS.join(', '));
413
+ }
414
+ console.log(chalk_1.default.gray('-'.repeat(60)));
415
+ let result;
416
+ if (options.autoApprove) {
417
+ result = await launchAutoApproveMode(prompt, { cwd: options.workingDir });
418
+ }
419
+ else {
420
+ result = await launchRelayMode(prompt, {
421
+ cwd: options.workingDir,
422
+ creds,
423
+ executorId: state.executorId,
424
+ taskId: task.id,
425
+ });
426
+ }
427
+ console.log(chalk_1.default.gray('\n' + '-'.repeat(60)));
428
+ // Capture post-task git state
429
+ const postGitState = (0, agent_git_js_1.capturePostTaskState)(options.workingDir, preGitState);
430
+ const payload = (0, agent_git_js_1.buildCompletionPayload)(result.exitCode, preGitState, postGitState, startTime);
431
+ const elapsed = (0, display_js_1.formatDuration)(Date.now() - startTime);
432
+ const allChangedFiles = [
433
+ ...postGitState.filesAdded,
434
+ ...postGitState.filesModified,
435
+ ...postGitState.filesDeleted,
436
+ ];
437
+ if (result.exitCode === 0) {
438
+ if (allChangedFiles.length > 0) {
439
+ (0, api_js_1.sendTaskLog)(creds, state.executorId, task.id, 'git', `${allChangedFiles.length} file(s) changed (+${postGitState.linesAdded}/-${postGitState.linesDeleted})`, { added: postGitState.filesAdded.slice(0, 10), modified: postGitState.filesModified.slice(0, 10), deleted: postGitState.filesDeleted.slice(0, 10) });
440
+ }
441
+ (0, api_js_1.sendTaskLog)(creds, state.executorId, task.id, 'lifecycle', `Claude Code completed successfully (${elapsed})`, undefined, 100);
442
+ console.log();
443
+ (0, display_js_1.printBanner)('COMPLETED', elapsed, allChangedFiles, postGitState.headSha);
444
+ await (0, retry_js_1.withRetry)(() => (0, api_js_1.completeTask)(creds, state.executorId, task.id, payload), 'Report completion');
445
+ state.completedCount++;
446
+ console.log(chalk_1.default.gray(' Reported to CV-Hub.'));
447
+ }
448
+ else if (result.exitCode === 137) {
449
+ (0, api_js_1.sendTaskLog)(creds, state.executorId, task.id, 'lifecycle', 'Task aborted by user (Ctrl+C)');
450
+ console.log();
451
+ (0, display_js_1.printBanner)('ABORTED', elapsed, [], null);
452
+ try {
453
+ await (0, api_js_1.failTask)(creds, state.executorId, task.id, 'Aborted by user (Ctrl+C)');
454
+ }
455
+ catch { }
456
+ state.failedCount++;
457
+ }
458
+ else {
459
+ const stderrTail = result.stderr.trim().slice(-500);
460
+ (0, api_js_1.sendTaskLog)(creds, state.executorId, task.id, 'lifecycle', `Claude Code exited with code ${result.exitCode} (${elapsed})`, stderrTail ? { stderr_tail: stderrTail } : undefined);
461
+ console.log();
462
+ (0, display_js_1.printBanner)('FAILED', elapsed, allChangedFiles, postGitState.headSha);
463
+ const errorDetail = result.stderr.trim()
464
+ ? `${result.stderr.trim().slice(-1500)}\n\nExit code ${result.exitCode} after ${elapsed}.`
465
+ : `Claude Code exited with code ${result.exitCode} after ${elapsed}.`;
466
+ await (0, retry_js_1.withRetry)(() => (0, api_js_1.failTask)(creds, state.executorId, task.id, errorDetail), 'Report failure');
467
+ state.failedCount++;
468
+ }
469
+ }
470
+ catch (err) {
471
+ console.log(`\n${chalk_1.default.red('!')} Task error: ${err.message}`);
472
+ (0, api_js_1.sendTaskLog)(creds, state.executorId, task.id, 'error', `Agent error: ${err.message}`);
473
+ try {
474
+ await (0, api_js_1.failTask)(creds, state.executorId, task.id, err.message);
475
+ }
476
+ catch { }
477
+ state.failedCount++;
478
+ }
479
+ finally {
480
+ clearInterval(heartbeatTimer);
481
+ if (timeoutTimer)
482
+ clearTimeout(timeoutTimer);
483
+ state.currentTaskId = null;
484
+ state.lastTaskEnd = Date.now();
485
+ }
486
+ (0, display_js_1.setTerminalTitle)('cva: listening...');
487
+ console.log();
488
+ console.log(chalk_1.default.cyan('Listening for tasks...'));
489
+ console.log();
490
+ }
491
+ // ============================================================================
492
+ // Command definition
493
+ // ============================================================================
494
+ function agentCommand() {
495
+ const cmd = new commander_1.Command('agent');
496
+ cmd.description('Listen for tasks dispatched from Claude.ai and execute them with Claude Code');
497
+ cmd.option('--machine <name>', 'Machine name override');
498
+ cmd.option('--poll-interval <seconds>', 'How often to check for tasks', '5');
499
+ cmd.option('--working-dir <path>', 'Working directory for Claude Code', process.cwd());
500
+ cmd.option('--auto-approve', 'Pre-approve all tool permissions (uses -p mode)', false);
501
+ cmd.action(async (opts) => {
502
+ await runAgent(opts);
503
+ });
504
+ return cmd;
505
+ }
506
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * cva auth login / cva auth status
3
+ *
4
+ * Manages CV-Hub authentication credentials.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function authCommand(): Command;
8
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6FpC,wBAAgB,WAAW,IAAI,OAAO,CAiBrC"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * cva auth login / cva auth status
4
+ *
5
+ * Manages CV-Hub authentication credentials.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.authCommand = authCommand;
12
+ const commander_1 = require("commander");
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const credentials_js_1 = require("../utils/credentials.js");
15
+ async function authLogin(opts) {
16
+ const token = opts.token || await promptForToken();
17
+ const apiUrl = opts.apiUrl || 'https://api.hub.controlvector.io';
18
+ // Validate the token
19
+ console.log(chalk_1.default.gray('Validating token...'));
20
+ try {
21
+ const res = await fetch(`${apiUrl}/api/v1/user/me`, {
22
+ headers: { 'Authorization': `Bearer ${token}` },
23
+ });
24
+ if (!res.ok) {
25
+ console.log(chalk_1.default.red('Invalid token.') + ` API returned ${res.status}`);
26
+ process.exit(1);
27
+ }
28
+ const data = await res.json();
29
+ const username = data.user?.username || data.user?.email || 'unknown';
30
+ // Save credentials
31
+ await (0, credentials_js_1.writeCredentialField)('CV_HUB_PAT', token);
32
+ await (0, credentials_js_1.writeCredentialField)('CV_HUB_API', apiUrl);
33
+ console.log(chalk_1.default.green('Authenticated') + ` as ${chalk_1.default.bold(username)}`);
34
+ console.log(chalk_1.default.gray(`Token saved to ~/.config/cv-hub/credentials`));
35
+ }
36
+ catch (err) {
37
+ console.log(chalk_1.default.red('Connection failed:') + ` ${err.message}`);
38
+ process.exit(1);
39
+ }
40
+ }
41
+ async function promptForToken() {
42
+ // Simple stdin read for token
43
+ const readline = await import('node:readline');
44
+ const rl = readline.createInterface({
45
+ input: process.stdin,
46
+ output: process.stdout,
47
+ });
48
+ return new Promise((resolve) => {
49
+ rl.question('Enter your CV-Hub PAT token: ', (answer) => {
50
+ rl.close();
51
+ const token = answer.trim();
52
+ if (!token) {
53
+ console.log(chalk_1.default.red('No token provided.'));
54
+ process.exit(1);
55
+ }
56
+ resolve(token);
57
+ });
58
+ });
59
+ }
60
+ async function authStatus() {
61
+ const creds = await (0, credentials_js_1.readCredentials)();
62
+ if (!creds.CV_HUB_PAT) {
63
+ console.log(chalk_1.default.yellow('Not authenticated.') + ' Run ' + chalk_1.default.cyan('cva auth login') + ' first.');
64
+ return;
65
+ }
66
+ const apiUrl = creds.CV_HUB_API || 'https://api.hub.controlvector.io';
67
+ const maskedToken = creds.CV_HUB_PAT.substring(0, 8) + '...' + creds.CV_HUB_PAT.slice(-4);
68
+ console.log(`API: ${chalk_1.default.cyan(apiUrl)}`);
69
+ console.log(`Token: ${chalk_1.default.gray(maskedToken)}`);
70
+ // Verify token
71
+ try {
72
+ const res = await fetch(`${apiUrl}/api/v1/user/me`, {
73
+ headers: { 'Authorization': `Bearer ${creds.CV_HUB_PAT}` },
74
+ });
75
+ if (res.ok) {
76
+ const data = await res.json();
77
+ const username = data.user?.username || data.user?.email || 'unknown';
78
+ console.log(`User: ${chalk_1.default.green(username)}`);
79
+ console.log(`Status: ${chalk_1.default.green('valid')}`);
80
+ }
81
+ else {
82
+ console.log(`Status: ${chalk_1.default.red('invalid')} (${res.status})`);
83
+ }
84
+ }
85
+ catch (err) {
86
+ console.log(`Status: ${chalk_1.default.red('unreachable')} (${err.message})`);
87
+ }
88
+ }
89
+ function authCommand() {
90
+ const cmd = new commander_1.Command('auth');
91
+ cmd.description('Manage CV-Hub authentication');
92
+ cmd
93
+ .command('login')
94
+ .description('Authenticate with CV-Hub using a PAT token')
95
+ .option('--token <token>', 'PAT token (or enter interactively)')
96
+ .option('--api-url <url>', 'CV-Hub API URL', 'https://api.hub.controlvector.io')
97
+ .action(authLogin);
98
+ cmd
99
+ .command('status')
100
+ .description('Show current authentication status')
101
+ .action(authStatus);
102
+ return cmd;
103
+ }
104
+ //# sourceMappingURL=auth.js.map