@adverant-nexus/cli 3.0.0 → 3.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 (46) hide show
  1. package/README.md +495 -35
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +3 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/compute/agent.d.ts +21 -0
  7. package/dist/commands/compute/agent.d.ts.map +1 -0
  8. package/dist/commands/compute/agent.js +166 -0
  9. package/dist/commands/compute/agent.js.map +1 -0
  10. package/dist/commands/compute/index.d.ts +10 -0
  11. package/dist/commands/compute/index.d.ts.map +1 -0
  12. package/dist/commands/compute/index.js +27 -0
  13. package/dist/commands/compute/index.js.map +1 -0
  14. package/dist/commands/compute/lib/hardware-detection.d.ts +52 -0
  15. package/dist/commands/compute/lib/hardware-detection.d.ts.map +1 -0
  16. package/dist/commands/compute/lib/hardware-detection.js +475 -0
  17. package/dist/commands/compute/lib/hardware-detection.js.map +1 -0
  18. package/dist/commands/compute/lib/local-compute-agent.d.ts +143 -0
  19. package/dist/commands/compute/lib/local-compute-agent.d.ts.map +1 -0
  20. package/dist/commands/compute/lib/local-compute-agent.js +1217 -0
  21. package/dist/commands/compute/lib/local-compute-agent.js.map +1 -0
  22. package/dist/commands/compute/lib/local-compute-client.d.ts +118 -0
  23. package/dist/commands/compute/lib/local-compute-client.d.ts.map +1 -0
  24. package/dist/commands/compute/lib/local-compute-client.js +256 -0
  25. package/dist/commands/compute/lib/local-compute-client.js.map +1 -0
  26. package/dist/commands/compute/list.d.ts +9 -0
  27. package/dist/commands/compute/list.d.ts.map +1 -0
  28. package/dist/commands/compute/list.js +157 -0
  29. package/dist/commands/compute/list.js.map +1 -0
  30. package/dist/commands/compute/logs.d.ts +9 -0
  31. package/dist/commands/compute/logs.d.ts.map +1 -0
  32. package/dist/commands/compute/logs.js +90 -0
  33. package/dist/commands/compute/logs.js.map +1 -0
  34. package/dist/commands/compute/resources.d.ts +9 -0
  35. package/dist/commands/compute/resources.d.ts.map +1 -0
  36. package/dist/commands/compute/resources.js +143 -0
  37. package/dist/commands/compute/resources.js.map +1 -0
  38. package/dist/commands/compute/status.d.ts +9 -0
  39. package/dist/commands/compute/status.d.ts.map +1 -0
  40. package/dist/commands/compute/status.js +200 -0
  41. package/dist/commands/compute/status.js.map +1 -0
  42. package/dist/commands/compute/submit.d.ts +9 -0
  43. package/dist/commands/compute/submit.d.ts.map +1 -0
  44. package/dist/commands/compute/submit.js +121 -0
  45. package/dist/commands/compute/submit.js.map +1 -0
  46. package/package.json +4 -1
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Compute Logs Command
3
+ *
4
+ * View or stream logs from compute jobs.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function createComputeLogsCommand(): Command;
8
+ export default createComputeLogsCommand;
9
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/compute/logs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,wBAAwB,IAAI,OAAO,CAyFlD;AAED,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Compute Logs Command
3
+ *
4
+ * View or stream logs from compute jobs.
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import { LocalComputeClient } from './lib/local-compute-client.js';
10
+ export function createComputeLogsCommand() {
11
+ return new Command('logs')
12
+ .description('View logs from a compute job')
13
+ .argument('<jobId>', 'Job ID to view logs for')
14
+ .option('-f, --follow', 'Follow log output in real-time', false)
15
+ .option('-t, --tail <lines>', 'Number of lines to show from end', '100')
16
+ .option('-p, --port <port>', 'Agent port', '9200')
17
+ .action(async (jobId, options) => {
18
+ const client = new LocalComputeClient({
19
+ port: parseInt(options.port || '9200', 10),
20
+ });
21
+ try {
22
+ // Check if agent is running
23
+ const spinner = ora('Checking agent...').start();
24
+ const isRunning = await client.checkHealth();
25
+ if (!isRunning) {
26
+ spinner.fail('Agent is not running');
27
+ console.log(chalk.gray('\nStart the agent with: nexus compute agent start'));
28
+ process.exit(1);
29
+ }
30
+ spinner.stop();
31
+ // Get job to verify it exists
32
+ const job = await client.getJob(jobId);
33
+ if (!job) {
34
+ console.log(chalk.red(`\nJob ${jobId} not found`));
35
+ process.exit(1);
36
+ }
37
+ console.log(chalk.cyan(`\nLogs for job: ${job.name} (${job.id})`));
38
+ console.log(chalk.gray('─'.repeat(60)));
39
+ console.log();
40
+ if (options.follow) {
41
+ // Stream logs in real-time
42
+ await client.streamLogs(jobId, (line) => {
43
+ console.log(line);
44
+ });
45
+ }
46
+ else {
47
+ // Get existing logs
48
+ const tailLines = parseInt(options.tail || '100', 10);
49
+ const logs = await client.getJobLogs(jobId, tailLines);
50
+ if (logs.length === 0) {
51
+ console.log(chalk.gray('No logs available yet'));
52
+ }
53
+ else {
54
+ logs.forEach((line) => {
55
+ // Color stderr lines differently
56
+ if (line.startsWith('[stderr]')) {
57
+ console.log(chalk.yellow(line));
58
+ }
59
+ else {
60
+ console.log(line);
61
+ }
62
+ });
63
+ }
64
+ console.log();
65
+ console.log(chalk.gray('─'.repeat(60)));
66
+ // Show job status
67
+ const statusColor = job.status === 'completed' ? chalk.green :
68
+ job.status === 'failed' ? chalk.red :
69
+ job.status === 'running' ? chalk.yellow : chalk.gray;
70
+ console.log(`Status: ${statusColor(job.status)}`);
71
+ if (job.exitCode !== undefined) {
72
+ const exitColor = job.exitCode === 0 ? chalk.green : chalk.red;
73
+ console.log(`Exit Code: ${exitColor(job.exitCode.toString())}`);
74
+ }
75
+ if (job.error) {
76
+ console.log(chalk.red(`Error: ${job.error}`));
77
+ }
78
+ if (job.status === 'running') {
79
+ console.log(chalk.gray('\nUse --follow to stream logs in real-time'));
80
+ }
81
+ }
82
+ }
83
+ catch (error) {
84
+ console.error(chalk.red('\nFailed to get logs:'), error instanceof Error ? error.message : String(error));
85
+ process.exit(1);
86
+ }
87
+ });
88
+ }
89
+ export default createComputeLogsCommand;
90
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/compute/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Compute Resources Command
3
+ *
4
+ * Display local hardware capabilities for ML workloads.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function createComputeResourcesCommand(): Command;
8
+ export default createComputeResourcesCommand;
9
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/commands/compute/resources.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,6BAA6B,IAAI,OAAO,CAuBvD;AAgID,eAAe,6BAA6B,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Compute Resources Command
3
+ *
4
+ * Display local hardware capabilities for ML workloads.
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import Table from 'cli-table3';
10
+ import { detectHardware } from './lib/hardware-detection.js';
11
+ export function createComputeResourcesCommand() {
12
+ return new Command('resources')
13
+ .description('Show local compute resources')
14
+ .option('--json', 'Output as JSON')
15
+ .action(async (options) => {
16
+ const spinner = ora('Detecting hardware...').start();
17
+ try {
18
+ const hardware = await detectHardware();
19
+ spinner.stop();
20
+ if (options.json) {
21
+ console.log(JSON.stringify(hardware, null, 2));
22
+ return;
23
+ }
24
+ displayResources(hardware);
25
+ }
26
+ catch (error) {
27
+ spinner.fail('Failed to detect hardware');
28
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
29
+ process.exit(1);
30
+ }
31
+ });
32
+ }
33
+ function displayResources(hardware) {
34
+ console.log();
35
+ console.log(chalk.cyan.bold('╔════════════════════════════════════════════════════════════╗'));
36
+ console.log(chalk.cyan.bold('║ LOCAL COMPUTE RESOURCES ║'));
37
+ console.log(chalk.cyan.bold('╚════════════════════════════════════════════════════════════╝'));
38
+ console.log();
39
+ // System Info
40
+ console.log(chalk.white.bold('System Information'));
41
+ console.log(chalk.gray('─'.repeat(60)));
42
+ console.log(` Platform: ${chalk.cyan(hardware.platform)}`);
43
+ console.log(` Arch: ${chalk.cyan(hardware.arch)}`);
44
+ console.log(` Hostname: ${chalk.cyan(hardware.hostname)}`);
45
+ console.log();
46
+ // CPU
47
+ console.log(chalk.white.bold('CPU'));
48
+ console.log(chalk.gray('─'.repeat(60)));
49
+ console.log(` Model: ${chalk.cyan(hardware.cpu.model)}`);
50
+ console.log(` Total Cores: ${chalk.cyan(hardware.cpu.cores.toString())}`);
51
+ if (hardware.cpu.performanceCores !== undefined) {
52
+ console.log(` P-Cores: ${chalk.green(hardware.cpu.performanceCores.toString())} (Performance)`);
53
+ console.log(` E-Cores: ${chalk.yellow(hardware.cpu.efficiencyCores?.toString() || '0')} (Efficiency)`);
54
+ }
55
+ if (hardware.cpu.speed) {
56
+ console.log(` Base Speed: ${chalk.cyan(`${hardware.cpu.speed} MHz`)}`);
57
+ }
58
+ console.log();
59
+ // Memory
60
+ console.log(chalk.white.bold('Memory'));
61
+ console.log(chalk.gray('─'.repeat(60)));
62
+ console.log(` Total: ${chalk.cyan(`${hardware.memory.total} GB`)}`);
63
+ console.log(` Available: ${chalk.green(`${hardware.memory.available} GB`)}`);
64
+ console.log(` Type: ${chalk.cyan(hardware.memory.unified ? 'Unified Memory' : 'Discrete')}`);
65
+ console.log();
66
+ // GPU/Accelerator
67
+ console.log(chalk.white.bold('GPU / Accelerator'));
68
+ console.log(chalk.gray('─'.repeat(60)));
69
+ if (hardware.gpu) {
70
+ console.log(` Type: ${chalk.cyan(hardware.gpu.type)}`);
71
+ console.log(` Memory: ${chalk.cyan(`${hardware.gpu.memory} GB`)}${hardware.memory.unified ? chalk.dim(' (unified)') : ''}`);
72
+ console.log(` API: ${chalk.cyan(hardware.gpu.api)}`);
73
+ if (hardware.gpu.fp32Tflops) {
74
+ console.log(` FP32: ${chalk.green(`${hardware.gpu.fp32Tflops} TFLOPS`)}`);
75
+ }
76
+ if (hardware.gpu.fp16Tflops) {
77
+ console.log(` FP16: ${chalk.green(`${hardware.gpu.fp16Tflops} TFLOPS`)}`);
78
+ }
79
+ if (hardware.gpu.computeCapability) {
80
+ console.log(` Compute: ${chalk.cyan(hardware.gpu.computeCapability)}`);
81
+ }
82
+ if (hardware.gpu.neuralEngine) {
83
+ console.log(` Neural Eng: ${chalk.magenta(`${hardware.gpu.neuralEngineTops} TOPS`)}`);
84
+ }
85
+ }
86
+ else {
87
+ console.log(chalk.yellow(' No GPU detected'));
88
+ }
89
+ console.log();
90
+ // ML Frameworks
91
+ console.log(chalk.white.bold('ML Frameworks'));
92
+ console.log(chalk.gray('─'.repeat(60)));
93
+ const frameworkTable = new Table({
94
+ head: [
95
+ chalk.white('Framework'),
96
+ chalk.white('Version'),
97
+ chalk.white('Status'),
98
+ chalk.white('GPU Support'),
99
+ ],
100
+ colWidths: [15, 15, 12, 15],
101
+ style: { head: [], border: [] },
102
+ });
103
+ hardware.frameworks.forEach((fw) => {
104
+ frameworkTable.push([
105
+ fw.name,
106
+ fw.version || '-',
107
+ fw.available ? chalk.green('Available') : chalk.red('Not Found'),
108
+ fw.gpuSupport ? chalk.green('Yes') : chalk.gray('No'),
109
+ ]);
110
+ });
111
+ console.log(frameworkTable.toString());
112
+ console.log();
113
+ // Recommendations
114
+ console.log(chalk.white.bold('Recommendations'));
115
+ console.log(chalk.gray('─'.repeat(60)));
116
+ const recommendations = [];
117
+ if (hardware.gpu?.type.includes('Apple')) {
118
+ if (hardware.frameworks.find((f) => f.name === 'MLX' && f.available)) {
119
+ recommendations.push(chalk.green('✓') + ' MLX available - optimal for Apple Silicon');
120
+ }
121
+ else {
122
+ recommendations.push(chalk.yellow('!') + ' Consider installing MLX for best Apple Silicon performance');
123
+ }
124
+ if (hardware.frameworks.find((f) => f.name === 'PyTorch' && f.gpuSupport)) {
125
+ recommendations.push(chalk.green('✓') + ' PyTorch MPS backend available');
126
+ }
127
+ }
128
+ if (hardware.gpu?.type.includes('NVIDIA')) {
129
+ if (hardware.frameworks.find((f) => f.name === 'PyTorch' && f.gpuSupport)) {
130
+ recommendations.push(chalk.green('✓') + ' PyTorch CUDA available');
131
+ }
132
+ }
133
+ if (!hardware.gpu) {
134
+ recommendations.push(chalk.yellow('!') + ' No GPU detected - ML jobs will run on CPU only');
135
+ }
136
+ if (recommendations.length === 0) {
137
+ recommendations.push(chalk.gray('No specific recommendations'));
138
+ }
139
+ recommendations.forEach((rec) => console.log(` ${rec}`));
140
+ console.log();
141
+ }
142
+ export default createComputeResourcesCommand;
143
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/commands/compute/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Compute Status Command
3
+ *
4
+ * Check status of local compute agent and jobs.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function createComputeStatusCommand(): Command;
8
+ export default createComputeStatusCommand;
9
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/compute/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,0BAA0B,IAAI,OAAO,CAsDpD;AA+JD,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Compute Status Command
3
+ *
4
+ * Check status of local compute agent and jobs.
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import { LocalComputeClient } from './lib/local-compute-client.js';
10
+ export function createComputeStatusCommand() {
11
+ return new Command('status')
12
+ .description('Check status of local compute agent and jobs')
13
+ .argument('[jobId]', 'Specific job ID to check')
14
+ .option('-p, --port <port>', 'Agent port', '9200')
15
+ .option('--json', 'Output as JSON')
16
+ .action(async (jobId, options) => {
17
+ const client = new LocalComputeClient({
18
+ port: parseInt(options.port, 10),
19
+ });
20
+ try {
21
+ // Check if agent is running
22
+ const spinner = ora('Checking agent status...').start();
23
+ const isRunning = await client.checkHealth();
24
+ if (!isRunning) {
25
+ spinner.fail('Agent is not running');
26
+ console.log(chalk.gray('\nStart the agent with: nexus compute agent start'));
27
+ process.exit(1);
28
+ }
29
+ spinner.succeed('Agent is running');
30
+ if (jobId) {
31
+ // Get specific job status
32
+ const job = await client.getJob(jobId);
33
+ if (!job) {
34
+ console.log(chalk.red(`\nJob ${jobId} not found`));
35
+ process.exit(1);
36
+ }
37
+ if (options.json) {
38
+ console.log(JSON.stringify(job, null, 2));
39
+ }
40
+ else {
41
+ displayJobDetails(job);
42
+ }
43
+ }
44
+ else {
45
+ // Get agent status
46
+ const status = await client.getStatus();
47
+ if (options.json) {
48
+ console.log(JSON.stringify(status, null, 2));
49
+ }
50
+ else {
51
+ displayAgentStatus(status);
52
+ }
53
+ }
54
+ }
55
+ catch (error) {
56
+ console.error(chalk.red('Failed to get status:'), error instanceof Error ? error.message : String(error));
57
+ process.exit(1);
58
+ }
59
+ });
60
+ }
61
+ function displayAgentStatus(status) {
62
+ console.log();
63
+ console.log(chalk.cyan.bold('Agent Status'));
64
+ console.log(chalk.gray('─'.repeat(50)));
65
+ const statusColor = status.status === 'idle' ? chalk.green :
66
+ status.status === 'busy' ? chalk.yellow :
67
+ status.status === 'error' ? chalk.red : chalk.gray;
68
+ console.log(` ID: ${chalk.cyan(status.id)}`);
69
+ console.log(` Name: ${chalk.white(status.name)}`);
70
+ console.log(` Status: ${statusColor(status.status)}`);
71
+ console.log(` Registered: ${chalk.gray(new Date(status.registeredAt).toLocaleString())}`);
72
+ console.log(` Last Heartbeat: ${chalk.gray(new Date(status.lastHeartbeat).toLocaleString())}`);
73
+ console.log();
74
+ // Hardware summary
75
+ if (status.hardware) {
76
+ console.log(chalk.white.bold('Hardware'));
77
+ console.log(chalk.gray('─'.repeat(50)));
78
+ console.log(` CPU: ${chalk.cyan(status.hardware.cpu.model)}`);
79
+ console.log(` Cores: ${chalk.cyan(status.hardware.cpu.cores.toString())}`);
80
+ console.log(` Memory: ${chalk.cyan(`${status.hardware.memory.total} GB`)}`);
81
+ if (status.hardware.gpu) {
82
+ console.log(` GPU: ${chalk.cyan(status.hardware.gpu.type)}`);
83
+ }
84
+ console.log();
85
+ }
86
+ // Stats
87
+ console.log(chalk.white.bold('Statistics'));
88
+ console.log(chalk.gray('─'.repeat(50)));
89
+ console.log(` Jobs Completed: ${chalk.green(status.jobsCompleted.toString())}`);
90
+ console.log(` Jobs Failed: ${chalk.red(status.jobsFailed.toString())}`);
91
+ const hours = Math.floor(status.totalComputeTime / 3600);
92
+ const minutes = Math.floor((status.totalComputeTime % 3600) / 60);
93
+ console.log(` Total Compute: ${chalk.cyan(`${hours}h ${minutes}m`)}`);
94
+ console.log();
95
+ // Current job
96
+ if (status.currentJob) {
97
+ console.log(chalk.white.bold('Current Job'));
98
+ console.log(chalk.gray('─'.repeat(50)));
99
+ displayJobSummary(status.currentJob);
100
+ }
101
+ }
102
+ function displayJobDetails(job) {
103
+ console.log();
104
+ console.log(chalk.cyan.bold(`Job: ${job.name}`));
105
+ console.log(chalk.gray('─'.repeat(50)));
106
+ const statusColor = getStatusColor(job.status);
107
+ console.log(` ID: ${chalk.cyan(job.id)}`);
108
+ console.log(` Status: ${statusColor(job.status)}`);
109
+ console.log(` Framework: ${chalk.cyan(job.framework)}`);
110
+ console.log(` Working Dir: ${chalk.gray(job.workingDir)}`);
111
+ console.log();
112
+ // Times
113
+ console.log(chalk.white.bold('Timing'));
114
+ console.log(chalk.gray('─'.repeat(50)));
115
+ console.log(` Submitted: ${chalk.gray(new Date(job.submittedAt).toLocaleString())}`);
116
+ if (job.startedAt) {
117
+ console.log(` Started: ${chalk.gray(new Date(job.startedAt).toLocaleString())}`);
118
+ }
119
+ if (job.completedAt) {
120
+ console.log(` Completed: ${chalk.gray(new Date(job.completedAt).toLocaleString())}`);
121
+ }
122
+ console.log();
123
+ // Resources
124
+ console.log(chalk.white.bold('Resources'));
125
+ console.log(chalk.gray('─'.repeat(50)));
126
+ console.log(` GPU: ${job.resources.gpu ? chalk.green('Yes') : chalk.gray('No')}`);
127
+ if (job.resources.cpuCores) {
128
+ console.log(` CPU Cores: ${chalk.cyan(job.resources.cpuCores.toString())}`);
129
+ }
130
+ if (job.resources.memoryGb) {
131
+ console.log(` Memory: ${chalk.cyan(`${job.resources.memoryGb} GB`)}`);
132
+ }
133
+ console.log();
134
+ // Metrics (if completed)
135
+ if (job.metrics) {
136
+ console.log(chalk.white.bold('Metrics'));
137
+ console.log(chalk.gray('─'.repeat(50)));
138
+ console.log(` Duration: ${chalk.cyan(`${job.metrics.durationSeconds.toFixed(1)}s`)}`);
139
+ console.log(` Peak Memory: ${chalk.cyan(`${job.metrics.peakMemoryGb.toFixed(2)} GB`)}`);
140
+ if (job.metrics.peakGpuMemoryGb) {
141
+ console.log(` Peak GPU Memory: ${chalk.cyan(`${job.metrics.peakGpuMemoryGb.toFixed(2)} GB`)}`);
142
+ }
143
+ console.log(` CPU Utilization: ${chalk.cyan(`${job.metrics.cpuUtilization.toFixed(1)}%`)}`);
144
+ if (job.metrics.gpuUtilization) {
145
+ console.log(` GPU Utilization: ${chalk.cyan(`${job.metrics.gpuUtilization.toFixed(1)}%`)}`);
146
+ }
147
+ console.log();
148
+ }
149
+ // Error
150
+ if (job.error) {
151
+ console.log(chalk.red.bold('Error'));
152
+ console.log(chalk.gray('─'.repeat(50)));
153
+ console.log(chalk.red(` ${job.error}`));
154
+ console.log();
155
+ }
156
+ // Recent logs
157
+ if (job.logs && job.logs.length > 0) {
158
+ console.log(chalk.white.bold('Recent Logs'));
159
+ console.log(chalk.gray('─'.repeat(50)));
160
+ const recentLogs = job.logs.slice(-10);
161
+ recentLogs.forEach((line) => {
162
+ console.log(chalk.gray(` ${line.trim()}`));
163
+ });
164
+ if (job.logs.length > 10) {
165
+ console.log(chalk.dim(` ... and ${job.logs.length - 10} more lines`));
166
+ }
167
+ console.log();
168
+ }
169
+ }
170
+ function displayJobSummary(job) {
171
+ const statusColor = getStatusColor(job.status);
172
+ console.log(` Name: ${chalk.white(job.name)}`);
173
+ console.log(` ID: ${chalk.cyan(job.id)}`);
174
+ console.log(` Status: ${statusColor(job.status)}`);
175
+ console.log(` Framework: ${chalk.cyan(job.framework)}`);
176
+ if (job.startedAt) {
177
+ const duration = Date.now() - new Date(job.startedAt).getTime();
178
+ const seconds = Math.floor(duration / 1000);
179
+ console.log(` Running for: ${chalk.cyan(`${seconds}s`)}`);
180
+ }
181
+ console.log();
182
+ }
183
+ function getStatusColor(status) {
184
+ switch (status) {
185
+ case 'queued':
186
+ return chalk.gray;
187
+ case 'running':
188
+ return chalk.yellow;
189
+ case 'completed':
190
+ return chalk.green;
191
+ case 'failed':
192
+ return chalk.red;
193
+ case 'cancelled':
194
+ return chalk.magenta;
195
+ default:
196
+ return chalk.white;
197
+ }
198
+ }
199
+ export default createComputeStatusCommand;
200
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/compute/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Compute Submit Command
3
+ *
4
+ * Submit ML jobs to local compute agent.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function createComputeSubmitCommand(): Command;
8
+ export default createComputeSubmitCommand;
9
+ //# sourceMappingURL=submit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../../src/commands/compute/submit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,wBAAgB,0BAA0B,IAAI,OAAO,CAsGpD;AAeD,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Compute Submit Command
3
+ *
4
+ * Submit ML jobs to local compute agent.
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import fs from 'fs/promises';
10
+ import path from 'path';
11
+ import { LocalComputeClient } from './lib/local-compute-client.js';
12
+ export function createComputeSubmitCommand() {
13
+ return new Command('submit')
14
+ .description('Submit an ML job to local compute')
15
+ .argument('<script>', 'Python script or command to run')
16
+ .option('-n, --name <name>', 'Job name')
17
+ .option('-f, --framework <framework>', 'ML framework (pytorch, tensorflow, mlx, jax, generic)', 'generic')
18
+ .option('--gpu', 'Request GPU resources', true)
19
+ .option('--cpu-cores <cores>', 'Number of CPU cores')
20
+ .option('--memory <gb>', 'Memory limit in GB')
21
+ .option('-e, --env <key=value>', 'Environment variables (can be repeated)', collectEnv, [])
22
+ .option('-p, --port <port>', 'Agent port', '9200')
23
+ .option('--follow', 'Follow job logs after submission', false)
24
+ .action(async (script, options) => {
25
+ const client = new LocalComputeClient({
26
+ port: parseInt(options.port || '9200', 10),
27
+ });
28
+ try {
29
+ // Check if agent is running
30
+ const spinner = ora('Checking agent...').start();
31
+ const isRunning = await client.checkHealth();
32
+ if (!isRunning) {
33
+ spinner.fail('Agent is not running');
34
+ console.log(chalk.gray('\nStart the agent with: nexus compute agent start'));
35
+ process.exit(1);
36
+ }
37
+ spinner.text = 'Preparing job...';
38
+ // Determine if script is a file or inline command
39
+ let scriptContent;
40
+ let scriptPath;
41
+ let workingDir;
42
+ try {
43
+ const stat = await fs.stat(script);
44
+ if (stat.isFile()) {
45
+ scriptPath = path.resolve(script);
46
+ scriptContent = await fs.readFile(scriptPath, 'utf-8');
47
+ workingDir = path.dirname(scriptPath);
48
+ }
49
+ else {
50
+ throw new Error('Not a file');
51
+ }
52
+ }
53
+ catch {
54
+ // Treat as inline command
55
+ scriptContent = script;
56
+ workingDir = process.cwd();
57
+ }
58
+ // Parse environment variables
59
+ const environment = {};
60
+ if (options.env && Array.isArray(options.env)) {
61
+ for (const envVar of options.env) {
62
+ const [key, ...valueParts] = envVar.split('=');
63
+ if (key) {
64
+ environment[key] = valueParts.join('=');
65
+ }
66
+ }
67
+ }
68
+ // Build job name
69
+ const jobName = options.name ||
70
+ (scriptPath ? path.basename(scriptPath, path.extname(scriptPath)) : `job-${Date.now()}`);
71
+ spinner.text = 'Submitting job...';
72
+ const submitRequest = {
73
+ name: jobName,
74
+ script: scriptContent,
75
+ workingDir,
76
+ environment,
77
+ framework: (options.framework || 'generic'),
78
+ resources: buildResourcesConfig(options),
79
+ };
80
+ if (scriptPath)
81
+ submitRequest.scriptPath = scriptPath;
82
+ const job = await client.submitJob(submitRequest);
83
+ spinner.succeed(`Job submitted: ${chalk.cyan(job.id)}`);
84
+ console.log();
85
+ console.log(chalk.white(` Name: ${job.name}`));
86
+ console.log(chalk.white(` Framework: ${job.framework}`));
87
+ console.log(chalk.white(` GPU: ${job.resources.gpu ? chalk.green('Yes') : chalk.gray('No')}`));
88
+ console.log(chalk.white(` Status: ${chalk.yellow(job.status)}`));
89
+ console.log();
90
+ if (options.follow) {
91
+ console.log(chalk.gray('Following logs...\n'));
92
+ await client.streamLogs(job.id, (line) => {
93
+ console.log(line);
94
+ });
95
+ }
96
+ else {
97
+ console.log(chalk.gray('View logs with: nexus compute logs ' + job.id));
98
+ console.log(chalk.gray('Check status with: nexus compute status ' + job.id));
99
+ }
100
+ }
101
+ catch (error) {
102
+ console.error(chalk.red('\nFailed to submit job:'), error instanceof Error ? error.message : String(error));
103
+ process.exit(1);
104
+ }
105
+ });
106
+ }
107
+ function collectEnv(value, previous) {
108
+ return previous.concat([value]);
109
+ }
110
+ function buildResourcesConfig(options) {
111
+ const resources = {
112
+ gpu: options.gpu !== false,
113
+ };
114
+ if (options.cpuCores)
115
+ resources.cpuCores = parseInt(options.cpuCores, 10);
116
+ if (options.memory)
117
+ resources.memoryGb = parseFloat(options.memory);
118
+ return resources;
119
+ }
120
+ export default createComputeSubmitCommand;
121
+ //# sourceMappingURL=submit.js.map