@zivis/cli 0.1.0-alpha.1
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/dist/commands/app/index.d.ts +10 -0
- package/dist/commands/app/index.js +245 -0
- package/dist/commands/app/index.js.map +1 -0
- package/dist/commands/auth/index.d.ts +2 -0
- package/dist/commands/auth/index.js +41 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/login.d.ts +8 -0
- package/dist/commands/auth/login.js +65 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +5 -0
- package/dist/commands/auth/logout.js +14 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/sessions.d.ts +4 -0
- package/dist/commands/auth/sessions.js +30 -0
- package/dist/commands/auth/sessions.js.map +1 -0
- package/dist/commands/auth/status.d.ts +4 -0
- package/dist/commands/auth/status.js +53 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/credits/index.d.ts +2 -0
- package/dist/commands/credits/index.js +51 -0
- package/dist/commands/credits/index.js.map +1 -0
- package/dist/commands/mcp/index.d.ts +2 -0
- package/dist/commands/mcp/index.js +70 -0
- package/dist/commands/mcp/index.js.map +1 -0
- package/dist/commands/open/index.d.ts +10 -0
- package/dist/commands/open/index.js +57 -0
- package/dist/commands/open/index.js.map +1 -0
- package/dist/commands/scan/index.d.ts +2 -0
- package/dist/commands/scan/index.js +140 -0
- package/dist/commands/scan/index.js.map +1 -0
- package/dist/commands/target/index.d.ts +2 -0
- package/dist/commands/target/index.js +146 -0
- package/dist/commands/target/index.js.map +1 -0
- package/dist/commands/tm/index.d.ts +2 -0
- package/dist/commands/tm/index.js +266 -0
- package/dist/commands/tm/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/extractor/adapters/go/index.d.ts +7 -0
- package/dist/internal/extractor/adapters/go/index.js +71 -0
- package/dist/internal/extractor/adapters/go/index.js.map +1 -0
- package/dist/internal/extractor/adapters/go/manifest.d.ts +37 -0
- package/dist/internal/extractor/adapters/go/manifest.js +199 -0
- package/dist/internal/extractor/adapters/go/manifest.js.map +1 -0
- package/dist/internal/extractor/adapters/go/parser.d.ts +6 -0
- package/dist/internal/extractor/adapters/go/parser.js +23 -0
- package/dist/internal/extractor/adapters/go/parser.js.map +1 -0
- package/dist/internal/extractor/adapters/go/scanner.d.ts +39 -0
- package/dist/internal/extractor/adapters/go/scanner.js +216 -0
- package/dist/internal/extractor/adapters/go/scanner.js.map +1 -0
- package/dist/internal/extractor/adapters/python/index.d.ts +5 -0
- package/dist/internal/extractor/adapters/python/index.js +68 -0
- package/dist/internal/extractor/adapters/python/index.js.map +1 -0
- package/dist/internal/extractor/adapters/python/manifest.d.ts +25 -0
- package/dist/internal/extractor/adapters/python/manifest.js +236 -0
- package/dist/internal/extractor/adapters/python/manifest.js.map +1 -0
- package/dist/internal/extractor/adapters/python/parser.d.ts +5 -0
- package/dist/internal/extractor/adapters/python/parser.js +22 -0
- package/dist/internal/extractor/adapters/python/parser.js.map +1 -0
- package/dist/internal/extractor/adapters/python/scanner.d.ts +37 -0
- package/dist/internal/extractor/adapters/python/scanner.js +284 -0
- package/dist/internal/extractor/adapters/python/scanner.js.map +1 -0
- package/dist/internal/extractor/adapters/typescript/index.d.ts +9 -0
- package/dist/internal/extractor/adapters/typescript/index.js +84 -0
- package/dist/internal/extractor/adapters/typescript/index.js.map +1 -0
- package/dist/internal/extractor/adapters/typescript/manifest.d.ts +41 -0
- package/dist/internal/extractor/adapters/typescript/manifest.js +156 -0
- package/dist/internal/extractor/adapters/typescript/manifest.js.map +1 -0
- package/dist/internal/extractor/adapters/typescript/parser.d.ts +14 -0
- package/dist/internal/extractor/adapters/typescript/parser.js +33 -0
- package/dist/internal/extractor/adapters/typescript/parser.js.map +1 -0
- package/dist/internal/extractor/adapters/typescript/scanner.d.ts +43 -0
- package/dist/internal/extractor/adapters/typescript/scanner.js +188 -0
- package/dist/internal/extractor/adapters/typescript/scanner.js.map +1 -0
- package/dist/internal/extractor/index.d.ts +22 -0
- package/dist/internal/extractor/index.js +107 -0
- package/dist/internal/extractor/index.js.map +1 -0
- package/dist/internal/extractor/types.d.ts +124 -0
- package/dist/internal/extractor/types.js +28 -0
- package/dist/internal/extractor/types.js.map +1 -0
- package/dist/internal/extractor/walker.d.ts +32 -0
- package/dist/internal/extractor/walker.js +110 -0
- package/dist/internal/extractor/walker.js.map +1 -0
- package/dist/internal/ide-setup.d.ts +7 -0
- package/dist/internal/ide-setup.js +131 -0
- package/dist/internal/ide-setup.js.map +1 -0
- package/dist/internal/orgs.d.ts +8 -0
- package/dist/internal/orgs.js +31 -0
- package/dist/internal/orgs.js.map +1 -0
- package/dist/internal/project-binding.d.ts +11 -0
- package/dist/internal/project-binding.js +96 -0
- package/dist/internal/project-binding.js.map +1 -0
- package/dist/internal/target-auth/api-config.d.ts +37 -0
- package/dist/internal/target-auth/api-config.js +40 -0
- package/dist/internal/target-auth/api-config.js.map +1 -0
- package/dist/internal/target-auth/config.d.ts +20 -0
- package/dist/internal/target-auth/config.js +58 -0
- package/dist/internal/target-auth/config.js.map +1 -0
- package/dist/internal/target-auth/index.d.ts +30 -0
- package/dist/internal/target-auth/index.js +101 -0
- package/dist/internal/target-auth/index.js.map +1 -0
- package/dist/internal/target-auth/keychain.d.ts +23 -0
- package/dist/internal/target-auth/keychain.js +150 -0
- package/dist/internal/target-auth/keychain.js.map +1 -0
- package/dist/internal/target-auth/types.d.ts +51 -0
- package/dist/internal/target-auth/types.js +11 -0
- package/dist/internal/target-auth/types.js.map +1 -0
- package/dist/internal/target-auth/workos.d.ts +20 -0
- package/dist/internal/target-auth/workos.js +196 -0
- package/dist/internal/target-auth/workos.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { ApiClient } from "@zivis-ai/mcp-security/api-client";
|
|
4
|
+
import { DEFAULT_CONFIG } from "@zivis-ai/mcp-security/types";
|
|
5
|
+
import { getEphemeralCreds } from "../../internal/target-auth/index.js";
|
|
6
|
+
import { runExtractor } from "../../internal/extractor/index.js";
|
|
7
|
+
function buildClient(opts) {
|
|
8
|
+
const config = opts.session
|
|
9
|
+
? { ...DEFAULT_CONFIG, session: opts.session }
|
|
10
|
+
: DEFAULT_CONFIG;
|
|
11
|
+
return new ApiClient(config);
|
|
12
|
+
}
|
|
13
|
+
function collect(value, previous) {
|
|
14
|
+
return previous.concat([value]);
|
|
15
|
+
}
|
|
16
|
+
function defaultOutPath(extractedAt) {
|
|
17
|
+
// .zivis/extracted/<iso-no-colons>.json — matches the doc's example.
|
|
18
|
+
const ts = extractedAt.replace(/[:.]/g, "-");
|
|
19
|
+
return `.zivis/extracted/${ts}.json`;
|
|
20
|
+
}
|
|
21
|
+
export function registerTmCommands(program) {
|
|
22
|
+
const tm = program.command("tm").description("threat model operations");
|
|
23
|
+
tm.command("list")
|
|
24
|
+
.description("list threat models in the active org")
|
|
25
|
+
.option("-s, --session <name>", "named session")
|
|
26
|
+
.option("--app <applicationId>", "filter by application id")
|
|
27
|
+
.option("--json", "emit raw JSON")
|
|
28
|
+
.action(async (opts) => {
|
|
29
|
+
const client = buildClient(opts);
|
|
30
|
+
const query = opts.app ? `?applicationId=${encodeURIComponent(opts.app)}` : "";
|
|
31
|
+
const list = await client.request("GET", `/api/threat-models${query}`);
|
|
32
|
+
if (opts.json) {
|
|
33
|
+
process.stdout.write(JSON.stringify(list, null, 2) + "\n");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (list.length === 0) {
|
|
37
|
+
console.log("No threat models found.");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
for (const tm of list) {
|
|
41
|
+
const v = tm.latestVersion;
|
|
42
|
+
const stats = v
|
|
43
|
+
? `v${v.versionNumber} ${v.analysisStatus} · ${v.totalThreats} threats (${v.criticalCount}C/${v.highCount}H)`
|
|
44
|
+
: "no analysis";
|
|
45
|
+
const app = tm.applicationName ? ` [${tm.applicationName}]` : "";
|
|
46
|
+
console.log(`${tm.id} ${tm.name}${app}`);
|
|
47
|
+
console.log(` ${tm.status} · ${stats}`);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
tm.command("get <threatModelId>")
|
|
51
|
+
.description("dump a threat model as JSON")
|
|
52
|
+
.option("-s, --session <name>", "named session")
|
|
53
|
+
.action(async (id, opts) => {
|
|
54
|
+
const client = buildClient(opts);
|
|
55
|
+
const tm = await client.request("GET", `/api/threat-models/${encodeURIComponent(id)}`);
|
|
56
|
+
process.stdout.write(JSON.stringify(tm, null, 2) + "\n");
|
|
57
|
+
});
|
|
58
|
+
tm.command("pull <threatModelId>")
|
|
59
|
+
.description("write a threat model to a local JSON file (default: ./<id>.json)")
|
|
60
|
+
.option("-s, --session <name>", "named session")
|
|
61
|
+
.option("-o, --out <file>", "output file path")
|
|
62
|
+
.action(async (id, opts) => {
|
|
63
|
+
const client = buildClient(opts);
|
|
64
|
+
const tm = await client.request("GET", `/api/threat-models/${encodeURIComponent(id)}`);
|
|
65
|
+
const outPath = path.resolve(opts.out ?? `${id}.json`);
|
|
66
|
+
await fs.writeFile(outPath, JSON.stringify(tm, null, 2) + "\n", "utf8");
|
|
67
|
+
console.log(`✓ Wrote ${outPath}`);
|
|
68
|
+
if (tm.name)
|
|
69
|
+
console.log(` ${tm.name}`);
|
|
70
|
+
});
|
|
71
|
+
tm.command("push <threatModelId>")
|
|
72
|
+
.description("update a threat model from a local JSON file (only name/description/status fields)")
|
|
73
|
+
.option("-s, --session <name>", "named session")
|
|
74
|
+
.option("-f, --file <file>", "JSON file to read (default: ./<id>.json)")
|
|
75
|
+
.option("--dry-run", "print the PATCH payload without sending")
|
|
76
|
+
.action(async (id, opts) => {
|
|
77
|
+
const inPath = path.resolve(opts.file ?? `${id}.json`);
|
|
78
|
+
const raw = await fs.readFile(inPath, "utf8").catch((err) => {
|
|
79
|
+
console.error(`Could not read ${inPath}: ${err.message}`);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
});
|
|
82
|
+
const parsed = JSON.parse(raw);
|
|
83
|
+
// Only fields the PATCH endpoint accepts. tm pull dumps the full
|
|
84
|
+
// record; tm push only sends the editable subset, so a round-trip
|
|
85
|
+
// edit cycle Just Works.
|
|
86
|
+
const payload = {};
|
|
87
|
+
for (const k of ["name", "description", "status", "campaignId"]) {
|
|
88
|
+
if (parsed[k] !== undefined)
|
|
89
|
+
payload[k] = parsed[k];
|
|
90
|
+
}
|
|
91
|
+
if (Object.keys(payload).length === 0) {
|
|
92
|
+
console.error("No updatable fields found in file (name/description/status/campaignId).");
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
if (opts.dryRun) {
|
|
96
|
+
console.log("Would PATCH:");
|
|
97
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const client = buildClient(opts);
|
|
101
|
+
const updated = await client.request("PATCH", `/api/threat-models/${encodeURIComponent(id)}`, payload);
|
|
102
|
+
console.log(`✓ Updated ${updated.id}`);
|
|
103
|
+
if (updated.name)
|
|
104
|
+
console.log(` ${updated.name}`);
|
|
105
|
+
});
|
|
106
|
+
tm.command("extract")
|
|
107
|
+
.description("walk the local repo with tree-sitter and emit structural metadata as JSON (Phase J.2)")
|
|
108
|
+
.option("--root <dir>", "directory to scan (default: cwd)")
|
|
109
|
+
.option("--out <file>", "write JSON to a file (default: .zivis/extracted/<ts>.json; '-' for stdout)")
|
|
110
|
+
.option("--ignore <pattern>", "extra ignore pattern (repeatable)", collect, [])
|
|
111
|
+
.option("--privacy-audit", "print exactly what would be sent without sending — never makes network calls")
|
|
112
|
+
.option("--lang <list>", "comma-separated subset of adapters to run: typescript,go,python")
|
|
113
|
+
.action(async (opts) => {
|
|
114
|
+
const rootDir = path.resolve(opts.root ?? process.cwd());
|
|
115
|
+
const cliPkg = JSON.parse(await fs.readFile(path.join(path.dirname(new URL(import.meta.url).pathname), "../../../package.json"), "utf8"));
|
|
116
|
+
const langs = opts.lang
|
|
117
|
+
? String(opts.lang).split(",").map((s) => s.trim()).filter(Boolean)
|
|
118
|
+
: undefined;
|
|
119
|
+
const result = await runExtractor({
|
|
120
|
+
rootDir,
|
|
121
|
+
languages: langs,
|
|
122
|
+
extraIgnores: opts.ignore,
|
|
123
|
+
extractorVersion: cliPkg.version,
|
|
124
|
+
});
|
|
125
|
+
if (opts.privacyAudit) {
|
|
126
|
+
// Prints the entire object that WOULD be sent to ZIVIS via --apply.
|
|
127
|
+
// Never makes a network call; the extractor itself is local-only.
|
|
128
|
+
process.stdout.write(JSON.stringify(result, null, 2) + "\n");
|
|
129
|
+
process.stderr.write(`\n[zivis] Privacy audit: ${result.scope.filesScanned} files scanned, ` +
|
|
130
|
+
`${result.components.length} component(s), ${result.externalServices.length} external service(s), ` +
|
|
131
|
+
`${result.dataStores.length} data store(s), ${result.manifests.length} manifest(s).\n` +
|
|
132
|
+
`[zivis] Nothing was sent. Run without --privacy-audit + --apply <tm-id> to upload.\n`);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const target = opts.out ?? defaultOutPath(result.extractedAt);
|
|
136
|
+
if (target === "-") {
|
|
137
|
+
process.stdout.write(JSON.stringify(result, null, 2) + "\n");
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const absOut = path.isAbsolute(target) ? target : path.join(rootDir, target);
|
|
141
|
+
await fs.mkdir(path.dirname(absOut), { recursive: true });
|
|
142
|
+
await fs.writeFile(absOut, JSON.stringify(result, null, 2) + "\n", "utf8");
|
|
143
|
+
console.log(`✓ Wrote ${absOut}`);
|
|
144
|
+
console.log(` ${result.scope.filesScanned} files scanned in ${result.scope.durationMs}ms — ` +
|
|
145
|
+
`${result.components.length} component(s), ${result.externalServices.length} external service(s), ` +
|
|
146
|
+
`${result.dataStores.length} data store(s).`);
|
|
147
|
+
});
|
|
148
|
+
tm.command("threats")
|
|
149
|
+
.description("show threats touching a file (Phase J.3 — IDE/CLI surface)")
|
|
150
|
+
.requiredOption("--tm <threatModelId>", "threat model to query")
|
|
151
|
+
.requiredOption("--file <path>", "file path (repo-relative, matches ThreatModelComponent.sourceFiles)")
|
|
152
|
+
.option("-s, --session <name>", "named session")
|
|
153
|
+
.option("--json", "emit raw JSON")
|
|
154
|
+
.action(async (opts) => {
|
|
155
|
+
const client = buildClient(opts);
|
|
156
|
+
const path = `/api/threat-models/${encodeURIComponent(opts.tm)}/files/threats?path=${encodeURIComponent(opts.file)}`;
|
|
157
|
+
const result = await client.request("GET", path);
|
|
158
|
+
if (opts.json) {
|
|
159
|
+
process.stdout.write(JSON.stringify(result, null, 2) + "\n");
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (result.components.length === 0) {
|
|
163
|
+
console.log(`No components reference ${result.path} in this threat model.`);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
console.log(`${result.path}`);
|
|
167
|
+
for (const c of result.components) {
|
|
168
|
+
const idLabel = c.displayId ? `[${c.displayId}]` : `[${c.id.slice(0, 8)}]`;
|
|
169
|
+
console.log(` ${idLabel} ${c.name} (${c.componentType}) — ${c.threatCount} threat(s)`);
|
|
170
|
+
for (const t of c.threats) {
|
|
171
|
+
const sev = t.severity ? `[${t.severity}]` : "";
|
|
172
|
+
console.log(` • ${sev} ${t.title ?? t.id}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
const scenario = tm
|
|
177
|
+
.command("scenario")
|
|
178
|
+
.description("threat model scenario operations");
|
|
179
|
+
scenario
|
|
180
|
+
.command("list")
|
|
181
|
+
.description("list scenarios in a threat model")
|
|
182
|
+
.requiredOption("--tm <threatModelId>", "threat model id")
|
|
183
|
+
.option("-s, --session <name>", "named session")
|
|
184
|
+
.option("--json", "emit raw JSON")
|
|
185
|
+
.action(async (opts) => {
|
|
186
|
+
const client = buildClient(opts);
|
|
187
|
+
const result = await client.request("GET", `/api/threat-models/${encodeURIComponent(opts.tm)}/scenarios`);
|
|
188
|
+
const scenarios = Array.isArray(result) ? result : result.data ?? [];
|
|
189
|
+
if (opts.json) {
|
|
190
|
+
process.stdout.write(JSON.stringify(scenarios, null, 2) + "\n");
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (scenarios.length === 0) {
|
|
194
|
+
console.log("No scenarios in this threat model.");
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
for (const s of scenarios) {
|
|
198
|
+
const sev = s.severity ? ` [${s.severity}]` : "";
|
|
199
|
+
console.log(`${s.id} ${s.status.padEnd(10)} ${s.title ?? "(untitled)"}${sev}`);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
scenario
|
|
203
|
+
.command("show <scenarioId>")
|
|
204
|
+
.description("dump a scenario as JSON (uses /api/scenarios/:id, no --tm needed)")
|
|
205
|
+
.option("-s, --session <name>", "named session")
|
|
206
|
+
.action(async (scenarioId, opts) => {
|
|
207
|
+
const client = buildClient(opts);
|
|
208
|
+
const result = await client.request("GET", `/api/scenarios/${encodeURIComponent(scenarioId)}`);
|
|
209
|
+
process.stdout.write(JSON.stringify(result.data ?? result, null, 2) + "\n");
|
|
210
|
+
});
|
|
211
|
+
scenario
|
|
212
|
+
.command("run <scenarioId>")
|
|
213
|
+
.description("trigger a manual scenario run (scenario must be in 'testing' status)")
|
|
214
|
+
.option("-s, --session <name>", "named session")
|
|
215
|
+
.option("--app <applicationId>", "the customer-facing Application to test against (Phase J.4 — preferred over --target)")
|
|
216
|
+
.option("--target <targetId>", "[deprecated alias for --app] interpreted as applicationId; also used as keychain key for ephemeral creds")
|
|
217
|
+
.option("-p, --persona <name>", "target-system persona to use (default: default)", "default")
|
|
218
|
+
.option("--no-creds", "skip the ephemeral-creds path even if --app is set")
|
|
219
|
+
.option("--json", "emit raw JSON")
|
|
220
|
+
.action(async (scenarioId, opts) => {
|
|
221
|
+
const client = buildClient(opts);
|
|
222
|
+
const path = `/api/scenarios/${encodeURIComponent(scenarioId)}/run`;
|
|
223
|
+
const appId = opts.app ?? opts.target;
|
|
224
|
+
if (opts.target && !opts.app) {
|
|
225
|
+
console.warn("[zivis] --target is deprecated; use --app <applicationId>");
|
|
226
|
+
}
|
|
227
|
+
const body = {};
|
|
228
|
+
if (appId) {
|
|
229
|
+
body.applicationId = appId;
|
|
230
|
+
if (opts.creds !== false) {
|
|
231
|
+
const creds = await getEphemeralCreds(appId, opts.persona);
|
|
232
|
+
if (!creds) {
|
|
233
|
+
console.error(`No valid token for application ${appId} (persona: ${opts.persona}).`);
|
|
234
|
+
console.error(`Run: zivis app auth ${appId} -p ${opts.persona}`);
|
|
235
|
+
process.exit(2);
|
|
236
|
+
}
|
|
237
|
+
body.targetCreds = creds;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
const result = await client.request("POST", path, Object.keys(body).length ? body : undefined);
|
|
242
|
+
if (opts.json) {
|
|
243
|
+
process.stdout.write(JSON.stringify(result, null, 2) + "\n");
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
console.log(`✓ Triggered scenario run ${result.data.runId}`);
|
|
247
|
+
if (result.threatModelId) {
|
|
248
|
+
console.log(` Threat model: ${result.threatModelId}`);
|
|
249
|
+
}
|
|
250
|
+
if (result.credsAccepted) {
|
|
251
|
+
console.log(` Ephemeral creds accepted (persona: ${opts.persona}, ttl: ${result.credsTtlSec ?? "?"}s)`);
|
|
252
|
+
}
|
|
253
|
+
if (result.scanId) {
|
|
254
|
+
console.log(` Dispatched RT scan: ${result.scanId}`);
|
|
255
|
+
}
|
|
256
|
+
else if (result.dispatchSkippedReason) {
|
|
257
|
+
console.log(` Dispatch: ${result.dispatchSkippedReason}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
console.error("Run failed:", err instanceof Error ? err.message : err);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/tm/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { registerAuthCommands } from "./commands/auth/index.js";
|
|
7
|
+
import { registerAppCommands } from "./commands/app/index.js";
|
|
8
|
+
import { registerTargetCommands } from "./commands/target/index.js";
|
|
9
|
+
import { registerTmCommands } from "./commands/tm/index.js";
|
|
10
|
+
import { registerScanCommands } from "./commands/scan/index.js";
|
|
11
|
+
import { registerMcpCommands } from "./commands/mcp/index.js";
|
|
12
|
+
import { registerCreditsCommands } from "./commands/credits/index.js";
|
|
13
|
+
import { registerOpenCommands } from "./commands/open/index.js";
|
|
14
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
function getVersion() {
|
|
16
|
+
try {
|
|
17
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "../package.json"), "utf-8"));
|
|
18
|
+
return pkg.version;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return "0.0.0";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const program = new Command();
|
|
25
|
+
program
|
|
26
|
+
.name("zivis")
|
|
27
|
+
.description("ZIVIS CLI — threat modeling, scans, and MCP server")
|
|
28
|
+
.version(getVersion(), "-v, --version", "show version");
|
|
29
|
+
registerAuthCommands(program);
|
|
30
|
+
registerAppCommands(program);
|
|
31
|
+
registerTargetCommands(program);
|
|
32
|
+
registerTmCommands(program);
|
|
33
|
+
registerScanCommands(program);
|
|
34
|
+
registerMcpCommands(program);
|
|
35
|
+
registerCreditsCommands(program);
|
|
36
|
+
registerOpenCommands(program);
|
|
37
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
38
|
+
console.error(err instanceof Error ? err.message : err);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAClE,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;AAE1D,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go language adapter. Same shape as the TypeScript adapter — manifest
|
|
3
|
+
* pass + AST pass — different parser + framework table.
|
|
4
|
+
*/
|
|
5
|
+
import type { LanguageAdapter } from "../../types.js";
|
|
6
|
+
export declare const goAdapter: LanguageAdapter;
|
|
7
|
+
export declare const _stdlibFrameworkSet: Set<string>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go language adapter. Same shape as the TypeScript adapter — manifest
|
|
3
|
+
* pass + AST pass — different parser + framework table.
|
|
4
|
+
*/
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { readManifests, summarizeManifests, findExternalServices, findDataStores, detectFrameworkFromManifest, STDLIB_FRAMEWORKS, } from "./manifest.js";
|
|
7
|
+
import { scanFile, aggregate } from "./scanner.js";
|
|
8
|
+
import { repoRelative } from "../../walker.js";
|
|
9
|
+
export const goAdapter = {
|
|
10
|
+
language: "go",
|
|
11
|
+
extensions: [".go"],
|
|
12
|
+
manifests: ["go.mod"],
|
|
13
|
+
async extract(input) {
|
|
14
|
+
const { rootDir, sourceFiles, manifestFiles } = input;
|
|
15
|
+
const parsedManifests = await readManifests(rootDir, manifestFiles);
|
|
16
|
+
const manifestSummaries = summarizeManifests(parsedManifests);
|
|
17
|
+
const manifestExternalServices = findExternalServices(parsedManifests);
|
|
18
|
+
const manifestDataStores = findDataStores(parsedManifests);
|
|
19
|
+
const MAX_SOURCE_FILES = 5_000;
|
|
20
|
+
const filesToScan = sourceFiles.slice(0, MAX_SOURCE_FILES);
|
|
21
|
+
const scans = await Promise.all(filesToScan.map(async (abs) => {
|
|
22
|
+
try {
|
|
23
|
+
return await scanFile(abs, repoRelative(rootDir, abs));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { file: repoRelative(rootDir, abs), imports: [], routes: [] };
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
const agg = aggregate(scans);
|
|
30
|
+
const components = agg.components.map((c) => {
|
|
31
|
+
const framework = c.framework ?? frameworkFromOwningManifest(c.sourceFile, parsedManifests);
|
|
32
|
+
return {
|
|
33
|
+
name: c.name,
|
|
34
|
+
kind: "process",
|
|
35
|
+
language: "go",
|
|
36
|
+
framework,
|
|
37
|
+
sourceFiles: [c.sourceFile],
|
|
38
|
+
evidence: [...c.routes, ...c.imports],
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
for (const svc of manifestExternalServices) {
|
|
42
|
+
const sites = agg.aiSdkCallSites.get(svc.package);
|
|
43
|
+
if (sites)
|
|
44
|
+
svc.callSites.push(...sites);
|
|
45
|
+
}
|
|
46
|
+
for (const store of manifestDataStores) {
|
|
47
|
+
if (!store.client)
|
|
48
|
+
continue;
|
|
49
|
+
const ev = agg.dataStoreEvidence.get(store.client);
|
|
50
|
+
if (ev)
|
|
51
|
+
store.evidence.push(...ev);
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
components,
|
|
55
|
+
externalServices: manifestExternalServices,
|
|
56
|
+
dataStores: manifestDataStores,
|
|
57
|
+
manifests: manifestSummaries,
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
function frameworkFromOwningManifest(sourceFile, manifests) {
|
|
62
|
+
const sourceDir = path.posix.dirname(sourceFile);
|
|
63
|
+
const candidates = manifests
|
|
64
|
+
.map((m) => ({ m, dir: path.posix.dirname(m.filePath) }))
|
|
65
|
+
.filter(({ dir }) => sourceDir === dir || sourceDir.startsWith(dir + "/"))
|
|
66
|
+
.sort((a, b) => b.dir.length - a.dir.length);
|
|
67
|
+
return candidates[0] ? detectFrameworkFromManifest(candidates[0].m) : undefined;
|
|
68
|
+
}
|
|
69
|
+
// Used by orchestrator-side typing to widen the language union if needed.
|
|
70
|
+
export const _stdlibFrameworkSet = STDLIB_FRAMEWORKS;
|
|
71
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/extractor/adapters/go/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go manifest analysis.
|
|
3
|
+
*
|
|
4
|
+
* Parses go.mod (line-based, no real grammar needed) to build the
|
|
5
|
+
* dependency map. Doesn't read go.sum — that's a hash list, not version
|
|
6
|
+
* authority. Direct vs indirect deps are both in the require block;
|
|
7
|
+
* we keep the // indirect annotation as a hint but don't filter on it.
|
|
8
|
+
*/
|
|
9
|
+
import type { ExtractedExternalService, ExtractedDataStore, ManifestSummary } from "../../types.js";
|
|
10
|
+
export declare const WEB_FRAMEWORK_MODULES: Record<string, string>;
|
|
11
|
+
/** stdlib router lives at "net/http"; not in go.mod, only detected via imports. */
|
|
12
|
+
export declare const STDLIB_FRAMEWORKS: Set<string>;
|
|
13
|
+
export declare const DATA_STORE_MODULES: Record<string, {
|
|
14
|
+
kind: ExtractedDataStore["kind"];
|
|
15
|
+
client: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const AI_SDK_MODULES: Record<string, string>;
|
|
18
|
+
export interface ParsedGoMod {
|
|
19
|
+
filePath: string;
|
|
20
|
+
module?: string;
|
|
21
|
+
goVersion?: string;
|
|
22
|
+
/** module path → version. */
|
|
23
|
+
deps: Record<string, string>;
|
|
24
|
+
}
|
|
25
|
+
export declare function readManifests(rootDir: string, manifestFiles: string[]): Promise<ParsedGoMod[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Minimal go.mod parser. Supports the two block forms:
|
|
28
|
+
* require modulePath v1.2.3
|
|
29
|
+
* require ( modulePath v1.2.3 \n other v0.0.1 )
|
|
30
|
+
* Strips trailing "// indirect" markers. Does NOT handle replace/exclude
|
|
31
|
+
* directives (out of scope for inventory).
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseGoMod(filePath: string, rootDir: string, raw: string): ParsedGoMod;
|
|
34
|
+
export declare function summarizeManifests(parsed: ParsedGoMod[]): ManifestSummary[];
|
|
35
|
+
export declare function findExternalServices(parsed: ParsedGoMod[]): ExtractedExternalService[];
|
|
36
|
+
export declare function findDataStores(parsed: ParsedGoMod[]): ExtractedDataStore[];
|
|
37
|
+
export declare function detectFrameworkFromManifest(m: ParsedGoMod): string | undefined;
|