agentspd 1.0.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/LICENSE +21 -0
- package/README.md +333 -0
- package/dist/api.d.ts +198 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +171 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +277 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +181 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +226 -0
- package/dist/commands/config-cmd.d.ts +3 -0
- package/dist/commands/config-cmd.d.ts.map +1 -0
- package/dist/commands/config-cmd.js +111 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +8 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +275 -0
- package/dist/commands/policies.d.ts +3 -0
- package/dist/commands/policies.d.ts.map +1 -0
- package/dist/commands/policies.js +362 -0
- package/dist/commands/threats.d.ts +3 -0
- package/dist/commands/threats.d.ts.map +1 -0
- package/dist/commands/threats.js +161 -0
- package/dist/commands/webhooks.d.ts +3 -0
- package/dist/commands/webhooks.d.ts.map +1 -0
- package/dist/commands/webhooks.js +222 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +58 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +328 -0
- package/dist/output.d.ts +60 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +212 -0
- package/package.json +58 -0
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export type OutputFormat = 'table' | 'json' | 'yaml';
|
|
2
|
+
export declare function success(message: string): void;
|
|
3
|
+
export declare function error(message: string): void;
|
|
4
|
+
export declare function warn(message: string): void;
|
|
5
|
+
export declare function info(message: string): void;
|
|
6
|
+
export declare function heading(text: string): void;
|
|
7
|
+
export declare function dim(text: string): string;
|
|
8
|
+
export declare function bold(text: string): string;
|
|
9
|
+
export declare function link(url: string): string;
|
|
10
|
+
export declare function code(text: string): string;
|
|
11
|
+
export declare function highlight(text: string): string;
|
|
12
|
+
export declare function formatDate(dateStr: string): string;
|
|
13
|
+
export declare function formatStatus(status: string): string;
|
|
14
|
+
export declare function formatSeverity(severity: string): string;
|
|
15
|
+
export declare function formatEnvironment(env: string): string;
|
|
16
|
+
export declare function formatReputation(score: number): string;
|
|
17
|
+
export declare function printTable(headers: string[], rows: string[][]): void;
|
|
18
|
+
export declare function printJson(data: unknown): void;
|
|
19
|
+
export declare function printYaml(data: unknown): void;
|
|
20
|
+
export declare function print<T>(data: T, format?: OutputFormat): void;
|
|
21
|
+
export declare function printAgentTable(agents: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
status: string;
|
|
25
|
+
environment: string;
|
|
26
|
+
reputationScore: number;
|
|
27
|
+
createdAt: string;
|
|
28
|
+
}>): void;
|
|
29
|
+
export declare function printPolicyTable(policies: Array<{
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
version: string;
|
|
33
|
+
isActive: boolean;
|
|
34
|
+
createdAt: string;
|
|
35
|
+
}>): void;
|
|
36
|
+
export declare function printThreatTable(threats: Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
agentId: string;
|
|
39
|
+
threatType: string;
|
|
40
|
+
severity: string;
|
|
41
|
+
status: string;
|
|
42
|
+
createdAt: string;
|
|
43
|
+
}>): void;
|
|
44
|
+
export declare function printAuditTable(events: Array<{
|
|
45
|
+
id: string;
|
|
46
|
+
agentId: string;
|
|
47
|
+
eventType: string;
|
|
48
|
+
timestamp: string;
|
|
49
|
+
}>): void;
|
|
50
|
+
export declare function printWebhookTable(webhooks: Array<{
|
|
51
|
+
id: string;
|
|
52
|
+
url: string;
|
|
53
|
+
events: string[];
|
|
54
|
+
createdAt: string;
|
|
55
|
+
}>): void;
|
|
56
|
+
export declare function printKeyValue(pairs: Array<[string, string | number | boolean | undefined]>): void;
|
|
57
|
+
export declare function printBox(title: string, content: string[]): void;
|
|
58
|
+
export declare function printCodeBlock(code: string, language?: string): void;
|
|
59
|
+
export declare function printSecret(label: string, secret: string): void;
|
|
60
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAYnD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAwBpE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAc7D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,GAAG,IAAI,CAWR;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,GAAG,IAAI,CAUR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,GAAG,IAAI,CAWR;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,GAAG,IAAI,CASR;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,GAAG,IAAI,CASR;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAKjG;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAW/D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAOpE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAO/D"}
|
package/dist/output.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { table } from 'table';
|
|
3
|
+
import YAML from 'yaml';
|
|
4
|
+
import { getConfig } from './config.js';
|
|
5
|
+
export function success(message) {
|
|
6
|
+
console.log(chalk.green('✓'), message);
|
|
7
|
+
}
|
|
8
|
+
export function error(message) {
|
|
9
|
+
console.error(chalk.red('✗'), message);
|
|
10
|
+
}
|
|
11
|
+
export function warn(message) {
|
|
12
|
+
console.log(chalk.yellow('⚠'), message);
|
|
13
|
+
}
|
|
14
|
+
export function info(message) {
|
|
15
|
+
console.log(chalk.blue('ℹ'), message);
|
|
16
|
+
}
|
|
17
|
+
export function heading(text) {
|
|
18
|
+
console.log();
|
|
19
|
+
console.log(chalk.bold.underline(text));
|
|
20
|
+
console.log();
|
|
21
|
+
}
|
|
22
|
+
export function dim(text) {
|
|
23
|
+
return chalk.dim(text);
|
|
24
|
+
}
|
|
25
|
+
export function bold(text) {
|
|
26
|
+
return chalk.bold(text);
|
|
27
|
+
}
|
|
28
|
+
export function link(url) {
|
|
29
|
+
return chalk.cyan.underline(url);
|
|
30
|
+
}
|
|
31
|
+
export function code(text) {
|
|
32
|
+
return chalk.bgGray.white(` ${text} `);
|
|
33
|
+
}
|
|
34
|
+
export function highlight(text) {
|
|
35
|
+
return chalk.cyan(text);
|
|
36
|
+
}
|
|
37
|
+
export function formatDate(dateStr) {
|
|
38
|
+
const date = new Date(dateStr);
|
|
39
|
+
return date.toLocaleString();
|
|
40
|
+
}
|
|
41
|
+
export function formatStatus(status) {
|
|
42
|
+
const statusColors = {
|
|
43
|
+
active: chalk.green,
|
|
44
|
+
suspended: chalk.yellow,
|
|
45
|
+
revoked: chalk.red,
|
|
46
|
+
detected: chalk.yellow,
|
|
47
|
+
blocked: chalk.red,
|
|
48
|
+
escalated: chalk.magenta,
|
|
49
|
+
resolved: chalk.green,
|
|
50
|
+
};
|
|
51
|
+
const colorFn = statusColors[status] || chalk.white;
|
|
52
|
+
return colorFn(status);
|
|
53
|
+
}
|
|
54
|
+
export function formatSeverity(severity) {
|
|
55
|
+
const severityColors = {
|
|
56
|
+
low: chalk.blue,
|
|
57
|
+
medium: chalk.yellow,
|
|
58
|
+
high: chalk.red,
|
|
59
|
+
critical: chalk.bgRed.white,
|
|
60
|
+
};
|
|
61
|
+
const colorFn = severityColors[severity] || chalk.white;
|
|
62
|
+
return colorFn(severity.toUpperCase());
|
|
63
|
+
}
|
|
64
|
+
export function formatEnvironment(env) {
|
|
65
|
+
const envColors = {
|
|
66
|
+
development: chalk.gray,
|
|
67
|
+
staging: chalk.yellow,
|
|
68
|
+
production: chalk.green,
|
|
69
|
+
};
|
|
70
|
+
const colorFn = envColors[env] || chalk.white;
|
|
71
|
+
return colorFn(env);
|
|
72
|
+
}
|
|
73
|
+
export function formatReputation(score) {
|
|
74
|
+
if (score >= 80)
|
|
75
|
+
return chalk.green(`${score}/100`);
|
|
76
|
+
if (score >= 50)
|
|
77
|
+
return chalk.yellow(`${score}/100`);
|
|
78
|
+
return chalk.red(`${score}/100`);
|
|
79
|
+
}
|
|
80
|
+
export function printTable(headers, rows) {
|
|
81
|
+
const config = {
|
|
82
|
+
border: {
|
|
83
|
+
topBody: chalk.gray('─'),
|
|
84
|
+
topJoin: chalk.gray('┬'),
|
|
85
|
+
topLeft: chalk.gray('┌'),
|
|
86
|
+
topRight: chalk.gray('┐'),
|
|
87
|
+
bottomBody: chalk.gray('─'),
|
|
88
|
+
bottomJoin: chalk.gray('┴'),
|
|
89
|
+
bottomLeft: chalk.gray('└'),
|
|
90
|
+
bottomRight: chalk.gray('┘'),
|
|
91
|
+
bodyLeft: chalk.gray('│'),
|
|
92
|
+
bodyRight: chalk.gray('│'),
|
|
93
|
+
bodyJoin: chalk.gray('│'),
|
|
94
|
+
joinBody: chalk.gray('─'),
|
|
95
|
+
joinLeft: chalk.gray('├'),
|
|
96
|
+
joinRight: chalk.gray('┤'),
|
|
97
|
+
joinJoin: chalk.gray('┼'),
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
const headerRow = headers.map(h => chalk.bold(h));
|
|
101
|
+
const output = table([headerRow, ...rows], config);
|
|
102
|
+
console.log(output);
|
|
103
|
+
}
|
|
104
|
+
export function printJson(data) {
|
|
105
|
+
console.log(JSON.stringify(data, null, 2));
|
|
106
|
+
}
|
|
107
|
+
export function printYaml(data) {
|
|
108
|
+
console.log(YAML.stringify(data));
|
|
109
|
+
}
|
|
110
|
+
export function print(data, format) {
|
|
111
|
+
const outputFormat = format || getConfig().outputFormat;
|
|
112
|
+
switch (outputFormat) {
|
|
113
|
+
case 'json':
|
|
114
|
+
printJson(data);
|
|
115
|
+
break;
|
|
116
|
+
case 'yaml':
|
|
117
|
+
printYaml(data);
|
|
118
|
+
break;
|
|
119
|
+
default:
|
|
120
|
+
// For complex objects, default to JSON
|
|
121
|
+
printJson(data);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export function printAgentTable(agents) {
|
|
125
|
+
const headers = ['ID', 'Name', 'Status', 'Environment', 'Reputation', 'Created'];
|
|
126
|
+
const rows = agents.map(a => [
|
|
127
|
+
a.id,
|
|
128
|
+
a.name,
|
|
129
|
+
formatStatus(a.status),
|
|
130
|
+
formatEnvironment(a.environment),
|
|
131
|
+
formatReputation(a.reputationScore),
|
|
132
|
+
formatDate(a.createdAt),
|
|
133
|
+
]);
|
|
134
|
+
printTable(headers, rows);
|
|
135
|
+
}
|
|
136
|
+
export function printPolicyTable(policies) {
|
|
137
|
+
const headers = ['ID', 'Name', 'Version', 'Active', 'Created'];
|
|
138
|
+
const rows = policies.map(p => [
|
|
139
|
+
p.id,
|
|
140
|
+
p.name,
|
|
141
|
+
p.version,
|
|
142
|
+
p.isActive ? chalk.green('Yes') : chalk.gray('No'),
|
|
143
|
+
formatDate(p.createdAt),
|
|
144
|
+
]);
|
|
145
|
+
printTable(headers, rows);
|
|
146
|
+
}
|
|
147
|
+
export function printThreatTable(threats) {
|
|
148
|
+
const headers = ['ID', 'Agent', 'Type', 'Severity', 'Status', 'Time'];
|
|
149
|
+
const rows = threats.map(t => [
|
|
150
|
+
t.id,
|
|
151
|
+
t.agentId,
|
|
152
|
+
t.threatType,
|
|
153
|
+
formatSeverity(t.severity),
|
|
154
|
+
formatStatus(t.status),
|
|
155
|
+
formatDate(t.createdAt),
|
|
156
|
+
]);
|
|
157
|
+
printTable(headers, rows);
|
|
158
|
+
}
|
|
159
|
+
export function printAuditTable(events) {
|
|
160
|
+
const headers = ['ID', 'Agent', 'Event Type', 'Timestamp'];
|
|
161
|
+
const rows = events.map(e => [
|
|
162
|
+
e.id,
|
|
163
|
+
e.agentId,
|
|
164
|
+
e.eventType,
|
|
165
|
+
formatDate(e.timestamp),
|
|
166
|
+
]);
|
|
167
|
+
printTable(headers, rows);
|
|
168
|
+
}
|
|
169
|
+
export function printWebhookTable(webhooks) {
|
|
170
|
+
const headers = ['ID', 'URL', 'Events', 'Created'];
|
|
171
|
+
const rows = webhooks.map(w => [
|
|
172
|
+
w.id,
|
|
173
|
+
w.url.substring(0, 40) + (w.url.length > 40 ? '...' : ''),
|
|
174
|
+
w.events.join(', '),
|
|
175
|
+
formatDate(w.createdAt),
|
|
176
|
+
]);
|
|
177
|
+
printTable(headers, rows);
|
|
178
|
+
}
|
|
179
|
+
export function printKeyValue(pairs) {
|
|
180
|
+
for (const [key, value] of pairs) {
|
|
181
|
+
if (value === undefined)
|
|
182
|
+
continue;
|
|
183
|
+
console.log(`${chalk.bold(key + ':')} ${value}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
export function printBox(title, content) {
|
|
187
|
+
const width = Math.max(title.length, ...content.map(c => c.length)) + 4;
|
|
188
|
+
const line = '─'.repeat(width);
|
|
189
|
+
console.log(chalk.gray(`┌${line}┐`));
|
|
190
|
+
console.log(chalk.gray('│ ') + chalk.bold(title.padEnd(width - 2)) + chalk.gray(' │'));
|
|
191
|
+
console.log(chalk.gray(`├${line}┤`));
|
|
192
|
+
for (const c of content) {
|
|
193
|
+
console.log(chalk.gray('│ ') + c.padEnd(width - 2) + chalk.gray(' │'));
|
|
194
|
+
}
|
|
195
|
+
console.log(chalk.gray(`└${line}┘`));
|
|
196
|
+
}
|
|
197
|
+
export function printCodeBlock(code, language) {
|
|
198
|
+
console.log();
|
|
199
|
+
if (language) {
|
|
200
|
+
console.log(chalk.dim(`# ${language}`));
|
|
201
|
+
}
|
|
202
|
+
console.log(chalk.bgGray.white(code));
|
|
203
|
+
console.log();
|
|
204
|
+
}
|
|
205
|
+
export function printSecret(label, secret) {
|
|
206
|
+
console.log();
|
|
207
|
+
console.log(chalk.yellow('⚠ Important: Save this value securely. It will not be shown again.'));
|
|
208
|
+
console.log();
|
|
209
|
+
console.log(chalk.bold(label + ':'));
|
|
210
|
+
console.log(chalk.bgBlack.green(` ${secret} `));
|
|
211
|
+
console.log();
|
|
212
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agentspd",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Emotos CLI - Security Infrastructure for AI Agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"agentspd": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"start": "node dist/index.js",
|
|
18
|
+
"typecheck": "tsc --noEmit"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"emotos",
|
|
22
|
+
"ai",
|
|
23
|
+
"agents",
|
|
24
|
+
"security",
|
|
25
|
+
"mcp",
|
|
26
|
+
"cli"
|
|
27
|
+
],
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"author": "Emotos <hello@emotos.ai>",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/emotos-ai/emotos.git",
|
|
33
|
+
"directory": "cli"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://emotos.ai",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/emotos-ai/emotos/issues"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"chalk": "^5.3.0",
|
|
41
|
+
"commander": "^12.1.0",
|
|
42
|
+
"conf": "^13.0.1",
|
|
43
|
+
"inquirer": "^9.2.15",
|
|
44
|
+
"ora": "^8.0.1",
|
|
45
|
+
"table": "^6.8.1",
|
|
46
|
+
"ws": "^8.17.0",
|
|
47
|
+
"yaml": "^2.3.4"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/inquirer": "^9.0.7",
|
|
51
|
+
"@types/node": "^22.10.5",
|
|
52
|
+
"@types/ws": "^8.5.12",
|
|
53
|
+
"typescript": "^5.7.3"
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=20.0.0"
|
|
57
|
+
}
|
|
58
|
+
}
|