@fabraix/nyx 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/LICENSE +190 -0
- package/README.md +166 -0
- package/dist/api/client.d.ts +3 -0
- package/dist/api/client.js +67 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/stream.d.ts +9 -0
- package/dist/api/stream.js +86 -0
- package/dist/api/stream.js.map +1 -0
- package/dist/api/types.d.ts +64 -0
- package/dist/api/types.js +3 -0
- package/dist/api/types.js.map +1 -0
- package/dist/commands/cancel.d.ts +2 -0
- package/dist/commands/cancel.js +25 -0
- package/dist/commands/cancel.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.js +40 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.js +105 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.js +23 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/report.d.ts +2 -0
- package/dist/commands/report.js +22 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.js +50 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.js +61 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config/auth.d.ts +8 -0
- package/dist/config/auth.js +30 -0
- package/dist/config/auth.js.map +1 -0
- package/dist/config/loader.d.ts +5 -0
- package/dist/config/loader.js +36 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +150 -0
- package/dist/config/schema.js +23 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/ui/renderer.d.ts +8 -0
- package/dist/ui/renderer.js +98 -0
- package/dist/ui/renderer.js.map +1 -0
- package/dist/ui/report-writer.d.ts +1 -0
- package/dist/ui/report-writer.js +20 -0
- package/dist/ui/report-writer.js.map +1 -0
- package/dist/utils/config-name.d.ts +1 -0
- package/dist/utils/config-name.js +4 -0
- package/dist/utils/config-name.js.map +1 -0
- package/dist/utils/errors.d.ts +7 -0
- package/dist/utils/errors.js +29 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/package.json +52 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { version } from "./version.js";
|
|
4
|
+
import { registerLogin } from "./commands/login.js";
|
|
5
|
+
import { registerLogout } from "./commands/logout.js";
|
|
6
|
+
import { registerRun } from "./commands/run.js";
|
|
7
|
+
import { registerStatus } from "./commands/status.js";
|
|
8
|
+
import { registerList } from "./commands/list.js";
|
|
9
|
+
import { registerReport } from "./commands/report.js";
|
|
10
|
+
import { registerCancel } from "./commands/cancel.js";
|
|
11
|
+
const program = new Command();
|
|
12
|
+
program
|
|
13
|
+
.name("nyx")
|
|
14
|
+
.description("Nyx by Fabraix — AI Agent Security Audits")
|
|
15
|
+
.version(version);
|
|
16
|
+
registerLogin(program);
|
|
17
|
+
registerLogout(program);
|
|
18
|
+
registerRun(program);
|
|
19
|
+
registerStatus(program);
|
|
20
|
+
registerList(program);
|
|
21
|
+
registerReport(program);
|
|
22
|
+
registerCancel(program);
|
|
23
|
+
program.parse();
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NyxConfig } from "../config/schema.js";
|
|
2
|
+
import type { RunCreated } from "../api/types.js";
|
|
3
|
+
import type { StreamCallbacks } from "../api/stream.js";
|
|
4
|
+
export declare function renderHeader(config: NyxConfig, run: RunCreated, budget: number): void;
|
|
5
|
+
export declare function createStreamRenderer(opts: {
|
|
6
|
+
verbose?: boolean;
|
|
7
|
+
runId: string;
|
|
8
|
+
}): StreamCallbacks;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { version } from "../version.js";
|
|
3
|
+
export function renderHeader(config, run, budget) {
|
|
4
|
+
console.log("");
|
|
5
|
+
console.log(chalk.bold(` nyx v${version} — AI Agent Security Audit`));
|
|
6
|
+
console.log("");
|
|
7
|
+
console.log(` Target: ${config.name}`);
|
|
8
|
+
console.log(` Objective: ${truncate(config.objective, 60)}`);
|
|
9
|
+
console.log(` Budget: $${budget.toFixed(2)}`);
|
|
10
|
+
console.log(` Run ID: ${run.run_id}`);
|
|
11
|
+
console.log("");
|
|
12
|
+
console.log(chalk.dim(" " + "─".repeat(45)));
|
|
13
|
+
console.log("");
|
|
14
|
+
}
|
|
15
|
+
export function createStreamRenderer(opts) {
|
|
16
|
+
return {
|
|
17
|
+
onEvent(event) {
|
|
18
|
+
renderEvent(event, opts.verbose ?? false, opts.runId);
|
|
19
|
+
},
|
|
20
|
+
onDone() { },
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function renderEvent(event, verbose, runId) {
|
|
24
|
+
const d = event.data;
|
|
25
|
+
switch (event.event) {
|
|
26
|
+
case "run.started":
|
|
27
|
+
console.log(chalk.cyan(" ● Starting reconnaissance...\n"));
|
|
28
|
+
break;
|
|
29
|
+
case "attempt.started":
|
|
30
|
+
console.log(` ${chalk.bold(`Attempt ${d.attempt}`)} — ${d.strategy_summary}`);
|
|
31
|
+
break;
|
|
32
|
+
case "attempt.progress":
|
|
33
|
+
if (verbose) {
|
|
34
|
+
console.log(chalk.dim(` │ [${d.tool}] ${d.preview}`));
|
|
35
|
+
}
|
|
36
|
+
break;
|
|
37
|
+
case "attempt.completed": {
|
|
38
|
+
const status = d.success
|
|
39
|
+
? chalk.green("✔ Success")
|
|
40
|
+
: chalk.red("✗ Failed");
|
|
41
|
+
if (d.summary) {
|
|
42
|
+
console.log(` │ Result: ${d.summary}`);
|
|
43
|
+
}
|
|
44
|
+
console.log(` │ Cost: $${d.cost_usd.toFixed(2)}`);
|
|
45
|
+
console.log(` └ Status: ${status}\n`);
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
case "finding.saved":
|
|
49
|
+
console.log(chalk.dim(` ℹ Finding: [${d.category}] ${d.content}`));
|
|
50
|
+
break;
|
|
51
|
+
case "run.completed": {
|
|
52
|
+
const spent = d.total_spent_usd.toFixed(2);
|
|
53
|
+
console.log(chalk.dim("\n " + "─".repeat(45)));
|
|
54
|
+
console.log("");
|
|
55
|
+
console.log(chalk.green.bold(" ✔ OBJECTIVE ACHIEVED") +
|
|
56
|
+
` on attempt ${d.winning_attempt}`);
|
|
57
|
+
console.log("");
|
|
58
|
+
console.log(` Technique: ${d.technique_summary}`);
|
|
59
|
+
console.log(` Total cost: $${spent}`);
|
|
60
|
+
if (d.report_url) {
|
|
61
|
+
console.log(` View online: https://app.fabraix.com/nyx/runs/${runId}`);
|
|
62
|
+
}
|
|
63
|
+
console.log(chalk.dim("\n " + "─".repeat(45) + "\n"));
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case "run.failed": {
|
|
67
|
+
const spent = d.total_spent_usd.toFixed(2);
|
|
68
|
+
const budget = d.budget_usd
|
|
69
|
+
? `$${d.budget_usd.toFixed(2)}`
|
|
70
|
+
: null;
|
|
71
|
+
console.log(chalk.dim("\n " + "─".repeat(45)));
|
|
72
|
+
console.log("");
|
|
73
|
+
const label = String(d.result ?? "FAILED").toUpperCase();
|
|
74
|
+
if (budget) {
|
|
75
|
+
console.log(chalk.red.bold(` ✗ ${label}`) + ` ($${spent} / ${budget} spent)`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.log(chalk.red.bold(` ✗ ${label}`) + ` ($${spent} spent)`);
|
|
79
|
+
}
|
|
80
|
+
if (d.closest_attempt) {
|
|
81
|
+
console.log(`\n Closest attempt: #${d.closest_attempt} — ${d.closest_detail}`);
|
|
82
|
+
}
|
|
83
|
+
console.log(chalk.dim("\n " + "─".repeat(45) + "\n"));
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case "run.error":
|
|
87
|
+
console.log(chalk.red(`\n ✗ Error: ${d.error}`));
|
|
88
|
+
if (d.retriable) {
|
|
89
|
+
console.log(chalk.dim(" This error may be temporary. Try again.\n"));
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function truncate(str, max) {
|
|
95
|
+
const oneLine = str.replace(/\n/g, " ").trim();
|
|
96
|
+
return oneLine.length > max ? oneLine.slice(0, max - 3) + "..." : oneLine;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/ui/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function writeReport(runId: string, configName: string, outputDir: string): Promise<string>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { writeFileSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
import { apiRawRequest } from "../api/client.js";
|
|
4
|
+
import { NyxError } from "../utils/errors.js";
|
|
5
|
+
export async function writeReport(runId, configName, outputDir) {
|
|
6
|
+
const res = await apiRawRequest("GET", `/v1/nyx/runs/${runId}/report`, "text/markdown");
|
|
7
|
+
const markdown = await res.text();
|
|
8
|
+
const filename = `nyx-report-${configName}.md`;
|
|
9
|
+
const outputPath = join(outputDir, filename);
|
|
10
|
+
try {
|
|
11
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
12
|
+
writeFileSync(outputPath, markdown, "utf-8");
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
throw new NyxError(`Failed to write report to ${outputPath}: ${err.message}`, "file");
|
|
16
|
+
}
|
|
17
|
+
console.log(` Report: ${outputPath}`);
|
|
18
|
+
return outputPath;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=report-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-writer.js","sourceRoot":"","sources":["../../src/ui/report-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAa,EACb,UAAkB,EAClB,SAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,EAAE,eAAe,CAAC,CAAC;IAExF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,cAAc,UAAU,KAAK,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAChB,6BAA6B,UAAU,KAAM,GAAa,CAAC,OAAO,EAAE,EACpE,MAAM,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function resolveConfigName(input: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-name.js","sourceRoot":"","sources":["../../src/utils/config-name.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type ErrorCategory = "auth" | "config" | "api" | "network" | "file" | "unknown";
|
|
2
|
+
export declare class NyxError extends Error {
|
|
3
|
+
readonly category: ErrorCategory;
|
|
4
|
+
readonly statusCode?: number | undefined;
|
|
5
|
+
constructor(message: string, category: ErrorCategory, statusCode?: number | undefined);
|
|
6
|
+
}
|
|
7
|
+
export declare function handleError(err: unknown): never;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
export class NyxError extends Error {
|
|
3
|
+
category;
|
|
4
|
+
statusCode;
|
|
5
|
+
constructor(message, category, statusCode) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.category = category;
|
|
8
|
+
this.statusCode = statusCode;
|
|
9
|
+
this.name = "NyxError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const EXIT_CODES = {
|
|
13
|
+
auth: 1,
|
|
14
|
+
config: 2,
|
|
15
|
+
api: 3,
|
|
16
|
+
network: 4,
|
|
17
|
+
file: 5,
|
|
18
|
+
unknown: 99,
|
|
19
|
+
};
|
|
20
|
+
export function handleError(err) {
|
|
21
|
+
if (err instanceof NyxError) {
|
|
22
|
+
console.error(chalk.red(`\n Error: ${err.message}\n`));
|
|
23
|
+
process.exit(EXIT_CODES[err.category]);
|
|
24
|
+
}
|
|
25
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
26
|
+
console.error(chalk.red(`\n Unexpected error: ${msg}\n`));
|
|
27
|
+
process.exit(99);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGf;IACA;IAHlB,YACE,OAAe,EACC,QAAuB,EACvB,UAAmB;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAe;QACvB,eAAU,GAAV,UAAU,CAAS;QAGnC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,GAAkC;IAChD,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const version: string;
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf-8"));
|
|
6
|
+
export const version = pkg.version;
|
|
7
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fabraix/nyx",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for Nyx by Fabraix — AI Agent Security Audits",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/fabraix/nyx.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://fabraix.com",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/fabraix/nyx/issues"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"fabraix",
|
|
16
|
+
"nyx",
|
|
17
|
+
"ai",
|
|
18
|
+
"security",
|
|
19
|
+
"agent",
|
|
20
|
+
"audit",
|
|
21
|
+
"cli"
|
|
22
|
+
],
|
|
23
|
+
"type": "module",
|
|
24
|
+
"bin": {
|
|
25
|
+
"nyx": "dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"dev": "tsc --watch",
|
|
30
|
+
"prepublishOnly": "npm run build"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18.0.0"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist"
|
|
37
|
+
],
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"chalk": "^5.4.0",
|
|
43
|
+
"commander": "^13.0.0",
|
|
44
|
+
"open": "^10.1.0",
|
|
45
|
+
"yaml": "^2.7.0",
|
|
46
|
+
"zod": "^3.24.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^22.0.0",
|
|
50
|
+
"typescript": "^5.7.0"
|
|
51
|
+
}
|
|
52
|
+
}
|