devteam-orchestrator-cli 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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +309 -0
  3. package/dist/api-client.d.ts +199 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +184 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +252 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/approve.d.ts +5 -0
  12. package/dist/commands/approve.d.ts.map +1 -0
  13. package/dist/commands/approve.js +190 -0
  14. package/dist/commands/approve.js.map +1 -0
  15. package/dist/commands/config-cmd.d.ts +7 -0
  16. package/dist/commands/config-cmd.d.ts.map +1 -0
  17. package/dist/commands/config-cmd.js +113 -0
  18. package/dist/commands/config-cmd.js.map +1 -0
  19. package/dist/commands/deploy.d.ts +7 -0
  20. package/dist/commands/deploy.d.ts.map +1 -0
  21. package/dist/commands/deploy.js +179 -0
  22. package/dist/commands/deploy.js.map +1 -0
  23. package/dist/commands/init.d.ts +4 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +118 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/login.d.ts +6 -0
  28. package/dist/commands/login.d.ts.map +1 -0
  29. package/dist/commands/login.js +73 -0
  30. package/dist/commands/login.js.map +1 -0
  31. package/dist/commands/logs.d.ts +6 -0
  32. package/dist/commands/logs.d.ts.map +1 -0
  33. package/dist/commands/logs.js +173 -0
  34. package/dist/commands/logs.js.map +1 -0
  35. package/dist/commands/plan.d.ts +8 -0
  36. package/dist/commands/plan.d.ts.map +1 -0
  37. package/dist/commands/plan.js +122 -0
  38. package/dist/commands/plan.js.map +1 -0
  39. package/dist/commands/run.d.ts +10 -0
  40. package/dist/commands/run.d.ts.map +1 -0
  41. package/dist/commands/run.js +154 -0
  42. package/dist/commands/run.js.map +1 -0
  43. package/dist/commands/status.d.ts +5 -0
  44. package/dist/commands/status.d.ts.map +1 -0
  45. package/dist/commands/status.js +159 -0
  46. package/dist/commands/status.js.map +1 -0
  47. package/dist/commands/tasks.d.ts +7 -0
  48. package/dist/commands/tasks.d.ts.map +1 -0
  49. package/dist/commands/tasks.js +112 -0
  50. package/dist/commands/tasks.js.map +1 -0
  51. package/dist/commands/templates.d.ts +6 -0
  52. package/dist/commands/templates.d.ts.map +1 -0
  53. package/dist/commands/templates.js +82 -0
  54. package/dist/commands/templates.js.map +1 -0
  55. package/dist/commands/workers.d.ts +4 -0
  56. package/dist/commands/workers.d.ts.map +1 -0
  57. package/dist/commands/workers.js +98 -0
  58. package/dist/commands/workers.js.map +1 -0
  59. package/dist/config.d.ts +29 -0
  60. package/dist/config.d.ts.map +1 -0
  61. package/dist/config.js +92 -0
  62. package/dist/config.js.map +1 -0
  63. package/dist/utils.d.ts +27 -0
  64. package/dist/utils.d.ts.map +1 -0
  65. package/dist/utils.js +212 -0
  66. package/dist/utils.js.map +1 -0
  67. package/package.json +60 -0
package/dist/config.js ADDED
@@ -0,0 +1,92 @@
1
+ import Conf from 'conf';
2
+ import { readFileSync, existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ const schema = {
5
+ apiUrl: {
6
+ type: 'string',
7
+ default: 'https://devteam.marsala.dev',
8
+ },
9
+ wsUrl: {
10
+ type: 'string',
11
+ default: 'wss://devteam.marsala.dev/ws',
12
+ },
13
+ apiKey: {
14
+ type: 'string',
15
+ default: '',
16
+ },
17
+ defaultWorker: {
18
+ type: 'string',
19
+ default: '',
20
+ },
21
+ outputFormat: {
22
+ type: 'string',
23
+ default: 'table',
24
+ enum: ['table', 'json', 'minimal'],
25
+ },
26
+ autoApprove: {
27
+ type: 'boolean',
28
+ default: false,
29
+ },
30
+ projectName: {
31
+ type: 'string',
32
+ default: '',
33
+ },
34
+ projectId: {
35
+ type: 'string',
36
+ default: '',
37
+ },
38
+ };
39
+ export const config = new Conf({
40
+ projectName: 'devteam-cli',
41
+ schema,
42
+ });
43
+ const PROJECT_CONFIG_FILE = 'devteam.config.json';
44
+ export function getProjectConfig() {
45
+ const configPath = join(process.cwd(), PROJECT_CONFIG_FILE);
46
+ if (!existsSync(configPath)) {
47
+ return null;
48
+ }
49
+ try {
50
+ const raw = readFileSync(configPath, 'utf-8');
51
+ return JSON.parse(raw);
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ export function getEffectiveApiUrl() {
58
+ const projectConfig = getProjectConfig();
59
+ if (projectConfig?.apiUrl)
60
+ return projectConfig.apiUrl;
61
+ return config.get('apiUrl');
62
+ }
63
+ export function getEffectiveWsUrl() {
64
+ const projectConfig = getProjectConfig();
65
+ if (projectConfig?.wsUrl)
66
+ return projectConfig.wsUrl;
67
+ return config.get('wsUrl');
68
+ }
69
+ export function getApiKey() {
70
+ return config.get('apiKey');
71
+ }
72
+ export function requireApiKey() {
73
+ const key = getApiKey();
74
+ if (!key) {
75
+ throw new Error('Not authenticated. Run `devteam login` first to set your API key.');
76
+ }
77
+ return key;
78
+ }
79
+ export function getAllConfig() {
80
+ return {
81
+ apiUrl: config.get('apiUrl'),
82
+ wsUrl: config.get('wsUrl'),
83
+ apiKey: config.get('apiKey') && config.get('apiKey').length > 0 ? '***' + config.get('apiKey').slice(-4) : '(not set)',
84
+ defaultWorker: config.get('defaultWorker') || '(not set)',
85
+ outputFormat: config.get('outputFormat'),
86
+ autoApprove: config.get('autoApprove'),
87
+ projectName: config.get('projectName') || '(not set)',
88
+ projectId: config.get('projectId') || '(not set)',
89
+ configPath: config.path,
90
+ };
91
+ }
92
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export declare function box(title: string, width?: number): string;
2
+ export interface Column {
3
+ header: string;
4
+ key: string;
5
+ width?: number;
6
+ align?: 'left' | 'right' | 'center';
7
+ color?: (v: string) => string;
8
+ }
9
+ export declare function table(columns: Column[], rows: Record<string, unknown>[]): string;
10
+ export declare function statusColor(status: string): string;
11
+ export declare function priorityColor(priority: string): string;
12
+ export declare function stars(rating: number, max?: number): string;
13
+ export declare function relativeTime(dateStr: string): string;
14
+ export declare function formatUptime(seconds: number): string;
15
+ export interface DagNode {
16
+ id: string;
17
+ name: string;
18
+ dependencies: string[];
19
+ status?: string;
20
+ estimatedTime?: string;
21
+ }
22
+ export declare function renderDag(nodes: DagNode[]): string;
23
+ export declare function progressBar(current: number, total: number, width?: number): string;
24
+ export declare function keyValue(pairs: [string, string | number][], indent?: number): string;
25
+ export declare function formatError(err: unknown): string;
26
+ export declare function handleError(err: unknown): never;
27
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAIA,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAUrD;AAID,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/B;AAuBD,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CA2DhF;AAID,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAelD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKtD;AAID,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAI,GAAG,MAAM,CAIrD;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBpD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASpD;AAID,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAwBlD;AAiCD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAO9E;AAID,wBAAgB,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,SAAI,GAAG,MAAM,CAK/E;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAG/C"}
package/dist/utils.js ADDED
@@ -0,0 +1,212 @@
1
+ import chalk from 'chalk';
2
+ // ── Box drawing ──────────────────────────────────────────────────────────
3
+ export function box(title, width = 48) {
4
+ const inner = width - 2;
5
+ const padded = title.padStart(Math.floor((inner + title.length) / 2), ' ').padEnd(inner, ' ');
6
+ const top = '\u2554' + '\u2550'.repeat(inner) + '\u2557';
7
+ const mid = '\u2551' + padded + '\u2551';
8
+ const bot = '\u255A' + '\u2550'.repeat(inner) + '\u255D';
9
+ return `${top}\n${mid}\n${bot}`;
10
+ }
11
+ function pad(text, width, align = 'left') {
12
+ const stripped = stripAnsi(text);
13
+ const diff = width - stripped.length;
14
+ if (diff <= 0)
15
+ return text.slice(0, width);
16
+ switch (align) {
17
+ case 'right':
18
+ return ' '.repeat(diff) + text;
19
+ case 'center': {
20
+ const left = Math.floor(diff / 2);
21
+ return ' '.repeat(left) + text + ' '.repeat(diff - left);
22
+ }
23
+ default:
24
+ return text + ' '.repeat(diff);
25
+ }
26
+ }
27
+ function stripAnsi(str) {
28
+ // eslint-disable-next-line no-control-regex
29
+ return str.replace(/\x1B\[\d+m/g, '').replace(/\x1B\[[\d;]*m/g, '');
30
+ }
31
+ export function table(columns, rows) {
32
+ // Calculate widths
33
+ const widths = columns.map((col) => {
34
+ const headerLen = col.header.length;
35
+ const maxDataLen = rows.reduce((max, row) => {
36
+ const val = String(row[col.key] ?? '');
37
+ return Math.max(max, stripAnsi(val).length);
38
+ }, 0);
39
+ return col.width ?? Math.max(headerLen, maxDataLen) + 2;
40
+ });
41
+ const lines = [];
42
+ // Top border
43
+ lines.push('\u250C' +
44
+ widths.map((w) => '\u2500'.repeat(w + 2)).join('\u252C') +
45
+ '\u2510');
46
+ // Header
47
+ lines.push('\u2502' +
48
+ columns
49
+ .map((col, i) => ' ' + pad(chalk.bold(col.header), widths[i]) + ' ')
50
+ .join('\u2502') +
51
+ '\u2502');
52
+ // Header separator
53
+ lines.push('\u251C' +
54
+ widths.map((w) => '\u2500'.repeat(w + 2)).join('\u253C') +
55
+ '\u2524');
56
+ // Data rows
57
+ for (const row of rows) {
58
+ lines.push('\u2502' +
59
+ columns
60
+ .map((col, i) => {
61
+ let val = String(row[col.key] ?? '');
62
+ if (col.color)
63
+ val = col.color(val);
64
+ return ' ' + pad(val, widths[i], col.align) + ' ';
65
+ })
66
+ .join('\u2502') +
67
+ '\u2502');
68
+ }
69
+ // Bottom border
70
+ lines.push('\u2514' +
71
+ widths.map((w) => '\u2500'.repeat(w + 2)).join('\u2534') +
72
+ '\u2518');
73
+ return lines.join('\n');
74
+ }
75
+ // ── Status colors ────────────────────────────────────────────────────────
76
+ export function statusColor(status) {
77
+ const s = status.toLowerCase();
78
+ if (['completed', 'success', 'online', 'running', 'approved', 'active'].includes(s)) {
79
+ return chalk.green(status);
80
+ }
81
+ if (['failed', 'error', 'offline', 'rejected', 'dead'].includes(s)) {
82
+ return chalk.red(status);
83
+ }
84
+ if (['pending', 'waiting', 'queued', 'idle'].includes(s)) {
85
+ return chalk.yellow(status);
86
+ }
87
+ if (['cancelled', 'skipped', 'paused'].includes(s)) {
88
+ return chalk.gray(status);
89
+ }
90
+ return chalk.cyan(status);
91
+ }
92
+ export function priorityColor(priority) {
93
+ const p = priority.toLowerCase();
94
+ if (p === 'critical' || p === 'high')
95
+ return chalk.red.bold(priority);
96
+ if (p === 'medium')
97
+ return chalk.yellow(priority);
98
+ return chalk.white(priority);
99
+ }
100
+ // ── Stars rendering ──────────────────────────────────────────────────────
101
+ export function stars(rating, max = 5) {
102
+ const full = Math.floor(rating);
103
+ const empty = max - full;
104
+ return chalk.yellow('\u2605'.repeat(full)) + chalk.gray('\u2606'.repeat(empty));
105
+ }
106
+ // ── Time formatting ──────────────────────────────────────────────────────
107
+ export function relativeTime(dateStr) {
108
+ const now = Date.now();
109
+ const then = new Date(dateStr).getTime();
110
+ const diff = now - then;
111
+ if (diff < 0)
112
+ return 'in the future';
113
+ const seconds = Math.floor(diff / 1000);
114
+ if (seconds < 60)
115
+ return `${seconds}s ago`;
116
+ const minutes = Math.floor(seconds / 60);
117
+ if (minutes < 60)
118
+ return `${minutes}m ago`;
119
+ const hours = Math.floor(minutes / 60);
120
+ if (hours < 24)
121
+ return `${hours}h ago`;
122
+ const days = Math.floor(hours / 24);
123
+ return `${days}d ago`;
124
+ }
125
+ export function formatUptime(seconds) {
126
+ const d = Math.floor(seconds / 86400);
127
+ const h = Math.floor((seconds % 86400) / 3600);
128
+ const m = Math.floor((seconds % 3600) / 60);
129
+ const parts = [];
130
+ if (d > 0)
131
+ parts.push(`${d}d`);
132
+ if (h > 0)
133
+ parts.push(`${h}h`);
134
+ parts.push(`${m}m`);
135
+ return parts.join(' ');
136
+ }
137
+ export function renderDag(nodes) {
138
+ const lines = [];
139
+ const nodeMap = new Map(nodes.map((n) => [n.id, n]));
140
+ const levels = assignLevels(nodes);
141
+ for (const [level, nodeIds] of levels.entries()) {
142
+ if (level > 0) {
143
+ // Draw connectors
144
+ const connectorParts = nodeIds.map(() => ' \u2502');
145
+ lines.push(connectorParts.join(' '));
146
+ const arrowParts = nodeIds.map(() => ' \u25BC');
147
+ lines.push(arrowParts.join(' '));
148
+ }
149
+ const nodeParts = nodeIds.map((id) => {
150
+ const node = nodeMap.get(id);
151
+ const status = node.status ? ` [${statusColor(node.status)}]` : '';
152
+ const time = node.estimatedTime ? chalk.gray(` ~${node.estimatedTime}`) : '';
153
+ return ` ${chalk.cyan('\u25CF')} ${chalk.bold(node.name)}${status}${time}`;
154
+ });
155
+ lines.push(nodeParts.join('\n'));
156
+ }
157
+ return lines.join('\n');
158
+ }
159
+ function assignLevels(nodes) {
160
+ const levels = new Map();
161
+ const nodeLevel = new Map();
162
+ function getLevel(id) {
163
+ if (nodeLevel.has(id))
164
+ return nodeLevel.get(id);
165
+ const node = nodes.find((n) => n.id === id);
166
+ if (!node || node.dependencies.length === 0) {
167
+ nodeLevel.set(id, 0);
168
+ return 0;
169
+ }
170
+ const maxDep = Math.max(...node.dependencies.map((d) => getLevel(d)));
171
+ const level = maxDep + 1;
172
+ nodeLevel.set(id, level);
173
+ return level;
174
+ }
175
+ for (const node of nodes) {
176
+ getLevel(node.id);
177
+ }
178
+ for (const [id, level] of nodeLevel.entries()) {
179
+ if (!levels.has(level))
180
+ levels.set(level, []);
181
+ levels.get(level).push(id);
182
+ }
183
+ return new Map([...levels.entries()].sort(([a], [b]) => a - b));
184
+ }
185
+ // ── Progress bar ─────────────────────────────────────────────────────────
186
+ export function progressBar(current, total, width = 30) {
187
+ const ratio = total > 0 ? current / total : 0;
188
+ const filled = Math.round(ratio * width);
189
+ const empty = width - filled;
190
+ const pct = Math.round(ratio * 100);
191
+ const bar = chalk.green('\u2588'.repeat(filled)) + chalk.gray('\u2591'.repeat(empty));
192
+ return `${bar} ${pct}%`;
193
+ }
194
+ // ── Key-value display ────────────────────────────────────────────────────
195
+ export function keyValue(pairs, indent = 2) {
196
+ const maxKey = Math.max(...pairs.map(([k]) => k.length));
197
+ return pairs
198
+ .map(([k, v]) => ' '.repeat(indent) + chalk.gray(k.padEnd(maxKey + 1)) + ' ' + String(v))
199
+ .join('\n');
200
+ }
201
+ // ── Error handling ───────────────────────────────────────────────────────
202
+ export function formatError(err) {
203
+ if (err instanceof Error) {
204
+ return chalk.red(`Error: ${err.message}`);
205
+ }
206
+ return chalk.red(`Error: ${String(err)}`);
207
+ }
208
+ export function handleError(err) {
209
+ console.error(formatError(err));
210
+ process.exit(1);
211
+ }
212
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "devteam-orchestrator-cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI tool for DevTeam Orchestrator - AI agent swarm management",
5
+ "type": "module",
6
+ "bin": {
7
+ "devteam": "./dist/cli.js"
8
+ },
9
+ "main": "dist/cli.js",
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "keywords": [
16
+ "ai",
17
+ "agents",
18
+ "temporal",
19
+ "orchestration",
20
+ "cli",
21
+ "devteam",
22
+ "workflow"
23
+ ],
24
+ "author": "Matwal LTD",
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/Marsala-dev/devteam-orchestrator.git",
29
+ "directory": "packages/cli"
30
+ },
31
+ "homepage": "https://doc.devteam.marsala.dev/cli",
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "engines": {
36
+ "node": ">=18.0.0"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "clean": "rm -rf dist",
41
+ "prepublishOnly": "npm run clean && npm run build",
42
+ "dev": "tsx src/cli.ts",
43
+ "start": "node dist/cli.js"
44
+ },
45
+ "dependencies": {
46
+ "commander": "^12.0.0",
47
+ "chalk": "^5.3.0",
48
+ "ora": "^8.0.0",
49
+ "inquirer": "^9.0.0",
50
+ "conf": "^12.0.0",
51
+ "ws": "^8.16.0",
52
+ "node-fetch": "^3.3.0"
53
+ },
54
+ "devDependencies": {
55
+ "typescript": "^5.4.0",
56
+ "@types/node": "^20.0.0",
57
+ "@types/ws": "^8.5.0",
58
+ "tsx": "^4.7.0"
59
+ }
60
+ }