@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.
Files changed (60) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +166 -0
  3. package/dist/api/client.d.ts +3 -0
  4. package/dist/api/client.js +67 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/api/stream.d.ts +9 -0
  7. package/dist/api/stream.js +86 -0
  8. package/dist/api/stream.js.map +1 -0
  9. package/dist/api/types.d.ts +64 -0
  10. package/dist/api/types.js +3 -0
  11. package/dist/api/types.js.map +1 -0
  12. package/dist/commands/cancel.d.ts +2 -0
  13. package/dist/commands/cancel.js +25 -0
  14. package/dist/commands/cancel.js.map +1 -0
  15. package/dist/commands/list.d.ts +2 -0
  16. package/dist/commands/list.js +40 -0
  17. package/dist/commands/list.js.map +1 -0
  18. package/dist/commands/login.d.ts +2 -0
  19. package/dist/commands/login.js +105 -0
  20. package/dist/commands/login.js.map +1 -0
  21. package/dist/commands/logout.d.ts +2 -0
  22. package/dist/commands/logout.js +23 -0
  23. package/dist/commands/logout.js.map +1 -0
  24. package/dist/commands/report.d.ts +2 -0
  25. package/dist/commands/report.js +22 -0
  26. package/dist/commands/report.js.map +1 -0
  27. package/dist/commands/run.d.ts +2 -0
  28. package/dist/commands/run.js +50 -0
  29. package/dist/commands/run.js.map +1 -0
  30. package/dist/commands/status.d.ts +2 -0
  31. package/dist/commands/status.js +61 -0
  32. package/dist/commands/status.js.map +1 -0
  33. package/dist/config/auth.d.ts +8 -0
  34. package/dist/config/auth.js +30 -0
  35. package/dist/config/auth.js.map +1 -0
  36. package/dist/config/loader.d.ts +5 -0
  37. package/dist/config/loader.js +36 -0
  38. package/dist/config/loader.js.map +1 -0
  39. package/dist/config/schema.d.ts +150 -0
  40. package/dist/config/schema.js +23 -0
  41. package/dist/config/schema.js.map +1 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.js +24 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/ui/renderer.d.ts +8 -0
  46. package/dist/ui/renderer.js +98 -0
  47. package/dist/ui/renderer.js.map +1 -0
  48. package/dist/ui/report-writer.d.ts +1 -0
  49. package/dist/ui/report-writer.js +20 -0
  50. package/dist/ui/report-writer.js.map +1 -0
  51. package/dist/utils/config-name.d.ts +1 -0
  52. package/dist/utils/config-name.js +4 -0
  53. package/dist/utils/config-name.js.map +1 -0
  54. package/dist/utils/errors.d.ts +7 -0
  55. package/dist/utils/errors.js +29 -0
  56. package/dist/utils/errors.js.map +1 -0
  57. package/dist/version.d.ts +1 -0
  58. package/dist/version.js +7 -0
  59. package/dist/version.js.map +1 -0
  60. 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,4 @@
1
+ export function resolveConfigName(input) {
2
+ return input.replace(/\.ya?ml$/, "");
3
+ }
4
+ //# sourceMappingURL=config-name.js.map
@@ -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;
@@ -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
+ }