@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.
Files changed (112) hide show
  1. package/dist/commands/app/index.d.ts +10 -0
  2. package/dist/commands/app/index.js +245 -0
  3. package/dist/commands/app/index.js.map +1 -0
  4. package/dist/commands/auth/index.d.ts +2 -0
  5. package/dist/commands/auth/index.js +41 -0
  6. package/dist/commands/auth/index.js.map +1 -0
  7. package/dist/commands/auth/login.d.ts +8 -0
  8. package/dist/commands/auth/login.js +65 -0
  9. package/dist/commands/auth/login.js.map +1 -0
  10. package/dist/commands/auth/logout.d.ts +5 -0
  11. package/dist/commands/auth/logout.js +14 -0
  12. package/dist/commands/auth/logout.js.map +1 -0
  13. package/dist/commands/auth/sessions.d.ts +4 -0
  14. package/dist/commands/auth/sessions.js +30 -0
  15. package/dist/commands/auth/sessions.js.map +1 -0
  16. package/dist/commands/auth/status.d.ts +4 -0
  17. package/dist/commands/auth/status.js +53 -0
  18. package/dist/commands/auth/status.js.map +1 -0
  19. package/dist/commands/credits/index.d.ts +2 -0
  20. package/dist/commands/credits/index.js +51 -0
  21. package/dist/commands/credits/index.js.map +1 -0
  22. package/dist/commands/mcp/index.d.ts +2 -0
  23. package/dist/commands/mcp/index.js +70 -0
  24. package/dist/commands/mcp/index.js.map +1 -0
  25. package/dist/commands/open/index.d.ts +10 -0
  26. package/dist/commands/open/index.js +57 -0
  27. package/dist/commands/open/index.js.map +1 -0
  28. package/dist/commands/scan/index.d.ts +2 -0
  29. package/dist/commands/scan/index.js +140 -0
  30. package/dist/commands/scan/index.js.map +1 -0
  31. package/dist/commands/target/index.d.ts +2 -0
  32. package/dist/commands/target/index.js +146 -0
  33. package/dist/commands/target/index.js.map +1 -0
  34. package/dist/commands/tm/index.d.ts +2 -0
  35. package/dist/commands/tm/index.js +266 -0
  36. package/dist/commands/tm/index.js.map +1 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.js +41 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/internal/extractor/adapters/go/index.d.ts +7 -0
  41. package/dist/internal/extractor/adapters/go/index.js +71 -0
  42. package/dist/internal/extractor/adapters/go/index.js.map +1 -0
  43. package/dist/internal/extractor/adapters/go/manifest.d.ts +37 -0
  44. package/dist/internal/extractor/adapters/go/manifest.js +199 -0
  45. package/dist/internal/extractor/adapters/go/manifest.js.map +1 -0
  46. package/dist/internal/extractor/adapters/go/parser.d.ts +6 -0
  47. package/dist/internal/extractor/adapters/go/parser.js +23 -0
  48. package/dist/internal/extractor/adapters/go/parser.js.map +1 -0
  49. package/dist/internal/extractor/adapters/go/scanner.d.ts +39 -0
  50. package/dist/internal/extractor/adapters/go/scanner.js +216 -0
  51. package/dist/internal/extractor/adapters/go/scanner.js.map +1 -0
  52. package/dist/internal/extractor/adapters/python/index.d.ts +5 -0
  53. package/dist/internal/extractor/adapters/python/index.js +68 -0
  54. package/dist/internal/extractor/adapters/python/index.js.map +1 -0
  55. package/dist/internal/extractor/adapters/python/manifest.d.ts +25 -0
  56. package/dist/internal/extractor/adapters/python/manifest.js +236 -0
  57. package/dist/internal/extractor/adapters/python/manifest.js.map +1 -0
  58. package/dist/internal/extractor/adapters/python/parser.d.ts +5 -0
  59. package/dist/internal/extractor/adapters/python/parser.js +22 -0
  60. package/dist/internal/extractor/adapters/python/parser.js.map +1 -0
  61. package/dist/internal/extractor/adapters/python/scanner.d.ts +37 -0
  62. package/dist/internal/extractor/adapters/python/scanner.js +284 -0
  63. package/dist/internal/extractor/adapters/python/scanner.js.map +1 -0
  64. package/dist/internal/extractor/adapters/typescript/index.d.ts +9 -0
  65. package/dist/internal/extractor/adapters/typescript/index.js +84 -0
  66. package/dist/internal/extractor/adapters/typescript/index.js.map +1 -0
  67. package/dist/internal/extractor/adapters/typescript/manifest.d.ts +41 -0
  68. package/dist/internal/extractor/adapters/typescript/manifest.js +156 -0
  69. package/dist/internal/extractor/adapters/typescript/manifest.js.map +1 -0
  70. package/dist/internal/extractor/adapters/typescript/parser.d.ts +14 -0
  71. package/dist/internal/extractor/adapters/typescript/parser.js +33 -0
  72. package/dist/internal/extractor/adapters/typescript/parser.js.map +1 -0
  73. package/dist/internal/extractor/adapters/typescript/scanner.d.ts +43 -0
  74. package/dist/internal/extractor/adapters/typescript/scanner.js +188 -0
  75. package/dist/internal/extractor/adapters/typescript/scanner.js.map +1 -0
  76. package/dist/internal/extractor/index.d.ts +22 -0
  77. package/dist/internal/extractor/index.js +107 -0
  78. package/dist/internal/extractor/index.js.map +1 -0
  79. package/dist/internal/extractor/types.d.ts +124 -0
  80. package/dist/internal/extractor/types.js +28 -0
  81. package/dist/internal/extractor/types.js.map +1 -0
  82. package/dist/internal/extractor/walker.d.ts +32 -0
  83. package/dist/internal/extractor/walker.js +110 -0
  84. package/dist/internal/extractor/walker.js.map +1 -0
  85. package/dist/internal/ide-setup.d.ts +7 -0
  86. package/dist/internal/ide-setup.js +131 -0
  87. package/dist/internal/ide-setup.js.map +1 -0
  88. package/dist/internal/orgs.d.ts +8 -0
  89. package/dist/internal/orgs.js +31 -0
  90. package/dist/internal/orgs.js.map +1 -0
  91. package/dist/internal/project-binding.d.ts +11 -0
  92. package/dist/internal/project-binding.js +96 -0
  93. package/dist/internal/project-binding.js.map +1 -0
  94. package/dist/internal/target-auth/api-config.d.ts +37 -0
  95. package/dist/internal/target-auth/api-config.js +40 -0
  96. package/dist/internal/target-auth/api-config.js.map +1 -0
  97. package/dist/internal/target-auth/config.d.ts +20 -0
  98. package/dist/internal/target-auth/config.js +58 -0
  99. package/dist/internal/target-auth/config.js.map +1 -0
  100. package/dist/internal/target-auth/index.d.ts +30 -0
  101. package/dist/internal/target-auth/index.js +101 -0
  102. package/dist/internal/target-auth/index.js.map +1 -0
  103. package/dist/internal/target-auth/keychain.d.ts +23 -0
  104. package/dist/internal/target-auth/keychain.js +150 -0
  105. package/dist/internal/target-auth/keychain.js.map +1 -0
  106. package/dist/internal/target-auth/types.d.ts +51 -0
  107. package/dist/internal/target-auth/types.js +11 -0
  108. package/dist/internal/target-auth/types.js.map +1 -0
  109. package/dist/internal/target-auth/workos.d.ts +20 -0
  110. package/dist/internal/target-auth/workos.js +196 -0
  111. package/dist/internal/target-auth/workos.js.map +1 -0
  112. package/package.json +41 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Target-auth: PKCE auth flows against the *customer's* identity provider.
3
+ *
4
+ * The user authenticates locally against the target system's IdP. Tokens
5
+ * stay in the user's OS keychain. When a scenario run is triggered, the
6
+ * CLI ships a short-lived access token (and optionally a refresh token)
7
+ * to the ZIVIS platform, which uses it for the duration of the run only.
8
+ * ZIVIS never persists target-system credentials.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/internal/target-auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * WorkOS PKCE login + refresh against a *target* IdP.
3
+ *
4
+ * Adapted from `zivis-rt/specs/engagements/meshmesh-cred-threat-model/scripts/authkit-helper.mjs`,
5
+ * which is itself adapted from `@zivis-ai/mcp-security/src/auth/oauth.ts`. Three
6
+ * known WorkOS flavors are supported:
7
+ * - user_management — api.workos.com/user_management/{authorize,authenticate}
8
+ * - authkit — <custom>.authkit.app/oauth2/{authorize,token}
9
+ * - workos — legacy auth.workos.com/{authorize,oauth/token}
10
+ *
11
+ * Why a copy and not a shared module: the platform-side login uses a fixed
12
+ * client_id and our own AuthKit. Target login uses the *customer's* IdP
13
+ * config, parameterized per target. Same primitives, different config
14
+ * surface — keeping them separate avoids accidental cross-tenant token mixing.
15
+ */
16
+ import type { TargetTokens, WorkosConfig } from "./types.js";
17
+ export declare function decodeJwtPayload(jwt: string): Record<string, unknown> | null;
18
+ declare function refreshTokens(cfg: WorkosConfig, refreshToken: string): Promise<TargetTokens>;
19
+ export declare function loginWorkos(cfg: WorkosConfig, persona: string): Promise<TargetTokens>;
20
+ export { refreshTokens as refreshWorkos };
@@ -0,0 +1,196 @@
1
+ /**
2
+ * WorkOS PKCE login + refresh against a *target* IdP.
3
+ *
4
+ * Adapted from `zivis-rt/specs/engagements/meshmesh-cred-threat-model/scripts/authkit-helper.mjs`,
5
+ * which is itself adapted from `@zivis-ai/mcp-security/src/auth/oauth.ts`. Three
6
+ * known WorkOS flavors are supported:
7
+ * - user_management — api.workos.com/user_management/{authorize,authenticate}
8
+ * - authkit — <custom>.authkit.app/oauth2/{authorize,token}
9
+ * - workos — legacy auth.workos.com/{authorize,oauth/token}
10
+ *
11
+ * Why a copy and not a shared module: the platform-side login uses a fixed
12
+ * client_id and our own AuthKit. Target login uses the *customer's* IdP
13
+ * config, parameterized per target. Same primitives, different config
14
+ * surface — keeping them separate avoids accidental cross-tenant token mixing.
15
+ */
16
+ import * as crypto from "node:crypto";
17
+ import * as http from "node:http";
18
+ import { execFile } from "node:child_process";
19
+ import { promisify } from "node:util";
20
+ import open from "open";
21
+ const execFileAsync = promisify(execFile);
22
+ const LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
23
+ function pathsFor(mode) {
24
+ switch (mode) {
25
+ case "workos":
26
+ return { authPath: "/authorize", tokenPath: "/oauth/token" };
27
+ case "authkit":
28
+ return { authPath: "/oauth2/authorize", tokenPath: "/oauth2/token" };
29
+ case "user_management":
30
+ default:
31
+ return { authPath: "/user_management/authorize", tokenPath: "/user_management/authenticate" };
32
+ }
33
+ }
34
+ function pkce() {
35
+ const verifier = crypto.randomBytes(32).toString("base64url");
36
+ const challenge = crypto.createHash("sha256").update(verifier).digest("base64url");
37
+ return { verifier, challenge };
38
+ }
39
+ function randomState() {
40
+ return crypto.randomBytes(16).toString("hex");
41
+ }
42
+ export function decodeJwtPayload(jwt) {
43
+ const parts = jwt.split(".");
44
+ if (parts.length < 2)
45
+ return null;
46
+ try {
47
+ return JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8"));
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ function baseUrl(domain) {
54
+ return domain.startsWith("http") ? domain : `https://${domain}`;
55
+ }
56
+ function tokensFromResponse(d, prevRefresh) {
57
+ const claims = decodeJwtPayload(d.access_token) || {};
58
+ const expClaim = claims.exp;
59
+ const expAt = expClaim
60
+ ? expClaim * 1000
61
+ : d.expires_in
62
+ ? Date.now() + d.expires_in * 1000
63
+ : Date.now() + 10 * 60 * 1000;
64
+ return {
65
+ access_token: d.access_token,
66
+ refresh_token: d.refresh_token || prevRefresh,
67
+ expires_at: expAt,
68
+ id_token: d.id_token,
69
+ obtained_at: Date.now(),
70
+ };
71
+ }
72
+ function htmlPage(success, msg = "") {
73
+ const title = success ? "Authenticated" : "Auth failed";
74
+ const color = success ? "#00d4aa" : "#ff5252";
75
+ return `<!DOCTYPE html><html><head><title>${title}</title></head>
76
+ <body style="font-family:system-ui;text-align:center;padding:50px;background:#0f0f1a;color:#fff;">
77
+ <h1 style="color:${color};">${title}</h1><p>${msg}</p>
78
+ <p>You can close this window.</p><script>setTimeout(()=>window.close(),1500);</script>
79
+ </body></html>`;
80
+ }
81
+ function startCallbackServer(port, expectedState) {
82
+ return new Promise((resolve, reject) => {
83
+ const server = http.createServer((req, res) => {
84
+ const u = new URL(req.url || "/", `http://localhost:${port}`);
85
+ if (u.pathname !== "/callback") {
86
+ res.writeHead(404);
87
+ res.end("not found");
88
+ return;
89
+ }
90
+ const code = u.searchParams.get("code");
91
+ const state = u.searchParams.get("state");
92
+ const error = u.searchParams.get("error");
93
+ const errorDesc = u.searchParams.get("error_description");
94
+ res.writeHead(200, { "Content-Type": "text/html" });
95
+ if (error) {
96
+ res.end(htmlPage(false, errorDesc || error));
97
+ server.close();
98
+ return reject(new Error(errorDesc || error));
99
+ }
100
+ if (state !== expectedState) {
101
+ res.end(htmlPage(false, "state mismatch"));
102
+ server.close();
103
+ return reject(new Error("state mismatch"));
104
+ }
105
+ if (!code) {
106
+ res.end(htmlPage(false, "no code"));
107
+ server.close();
108
+ return reject(new Error("no code"));
109
+ }
110
+ res.end(htmlPage(true));
111
+ server.close();
112
+ resolve(code);
113
+ });
114
+ server.on("error", reject);
115
+ server.listen(port, "127.0.0.1");
116
+ setTimeout(() => {
117
+ server.close();
118
+ reject(new Error("login timed out"));
119
+ }, LOGIN_TIMEOUT_MS);
120
+ });
121
+ }
122
+ async function exchangeCode(cfg, code, verifier) {
123
+ const { tokenPath } = pathsFor(cfg.mode);
124
+ const port = cfg.callbackPort ?? 5174;
125
+ const body = {
126
+ grant_type: "authorization_code",
127
+ client_id: cfg.clientId,
128
+ code,
129
+ code_verifier: verifier,
130
+ };
131
+ if ((cfg.mode || "user_management") !== "user_management") {
132
+ body.redirect_uri = `http://localhost:${port}/callback`;
133
+ }
134
+ const res = await fetch(`${baseUrl(cfg.domain)}${tokenPath}`, {
135
+ method: "POST",
136
+ headers: { "Content-Type": "application/json" },
137
+ body: JSON.stringify(body),
138
+ });
139
+ if (!res.ok) {
140
+ const txt = await res.text();
141
+ throw new Error(`token exchange failed: ${res.status} ${txt}`);
142
+ }
143
+ return tokensFromResponse(await res.json());
144
+ }
145
+ async function refreshTokens(cfg, refreshToken) {
146
+ const { tokenPath } = pathsFor(cfg.mode);
147
+ const res = await fetch(`${baseUrl(cfg.domain)}${tokenPath}`, {
148
+ method: "POST",
149
+ headers: { "Content-Type": "application/json" },
150
+ body: JSON.stringify({
151
+ grant_type: "refresh_token",
152
+ client_id: cfg.clientId,
153
+ refresh_token: refreshToken,
154
+ }),
155
+ });
156
+ if (!res.ok) {
157
+ const txt = await res.text();
158
+ throw new Error(`refresh failed: ${res.status} ${txt}`);
159
+ }
160
+ return tokensFromResponse(await res.json(), refreshToken);
161
+ }
162
+ export async function loginWorkos(cfg, persona) {
163
+ const { authPath } = pathsFor(cfg.mode);
164
+ const port = cfg.callbackPort ?? 5174;
165
+ const { verifier, challenge } = pkce();
166
+ const state = randomState();
167
+ const scope = ["openid", "profile", "email", "offline_access", ...(cfg.extraScopes || [])].join(" ");
168
+ const params = new URLSearchParams({
169
+ response_type: "code",
170
+ client_id: cfg.clientId,
171
+ redirect_uri: `http://localhost:${port}/callback`,
172
+ code_challenge: challenge,
173
+ code_challenge_method: "S256",
174
+ state,
175
+ scope,
176
+ });
177
+ params.set("prompt", "login");
178
+ if ((cfg.mode || "user_management") === "user_management") {
179
+ params.set("provider", "authkit");
180
+ }
181
+ const authUrl = `${baseUrl(cfg.domain)}${authPath}?${params.toString()}`;
182
+ const codePromise = startCallbackServer(port, state);
183
+ process.stderr.write(`[zivis] target auth → opening browser for persona "${persona}"\n`);
184
+ try {
185
+ await open(authUrl);
186
+ }
187
+ catch {
188
+ // open() can fail in headless envs — print the URL and let the user click.
189
+ await execFileAsync("printf", [authUrl]).catch(() => { });
190
+ process.stderr.write(`[zivis] open ${authUrl}\n`);
191
+ }
192
+ const code = await codePromise;
193
+ return exchangeCode(cfg, code, verifier);
194
+ }
195
+ export { refreshTokens as refreshWorkos };
196
+ //# sourceMappingURL=workos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workos.js","sourceRoot":"","sources":["../../../src/internal/target-auth/workos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAOvC,SAAS,QAAQ,CAAC,IAA0B;IAC1C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;QAC/D,KAAK,SAAS;YACZ,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;QACvE,KAAK,iBAAiB,CAAC;QACvB;YACE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE,SAAS,EAAE,+BAA+B,EAAE,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAM,EAAE,WAAoB;IACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAI,MAA2B,CAAC,GAAG,CAAC;IAClD,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,QAAQ,GAAG,IAAI;QACjB,CAAC,CAAC,CAAC,CAAC,UAAU;YACd,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI;YAClC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAChC,OAAO;QACL,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,WAAW;QAC7C,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,OAAgB,EAAE,GAAG,GAAG,EAAE;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,OAAO,qCAAqC,KAAK;;mBAEhC,KAAK,MAAM,KAAK,WAAW,GAAG;;eAElC,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,aAAqB;IAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5C,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAC/B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAE1D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;gBAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;gBAC5B,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;gBACpC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACjC,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACvC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAiB,EACjB,IAAY,EACZ,QAAgB;IAEhB,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;IACtC,MAAM,IAAI,GAA2B;QACnC,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,GAAG,CAAC,QAAQ;QACvB,IAAI;QACJ,aAAa,EAAE,QAAQ;KACxB,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,iBAAiB,CAAC,KAAK,iBAAiB,EAAE,CAAC;QAC1D,IAAI,CAAC,YAAY,GAAG,oBAAoB,IAAI,WAAW,CAAC;IAC1D,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAiB,EACjB,YAAoB;IAEpB,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,UAAU,EAAE,eAAe;YAC3B,SAAS,EAAE,GAAG,CAAC,QAAQ;YACvB,aAAa,EAAE,YAAY;SAC5B,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAiB,EACjB,OAAe;IAEf,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;IACtC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAE5B,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrG,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,GAAG,CAAC,QAAQ;QACvB,YAAY,EAAE,oBAAoB,IAAI,WAAW;QACjD,cAAc,EAAE,SAAS;QACzB,qBAAqB,EAAE,MAAM;QAC7B,KAAK;QACL,KAAK;KACN,CAAC,CAAC;IACH,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,iBAAiB,CAAC,KAAK,iBAAiB,EAAE,CAAC;QAC1D,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IACzE,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAErD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sDAAsD,OAAO,KAAK,CAAC,CAAC;IACzF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;IAC/B,OAAO,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@zivis/cli",
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "ZIVIS CLI — threat modeling, scans, and MCP server for IDE integration",
5
+ "type": "module",
6
+ "bin": {
7
+ "zivis": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "package.json"
12
+ ],
13
+ "publishConfig": {
14
+ "access": "restricted"
15
+ },
16
+ "engines": {
17
+ "node": ">=20.0.0"
18
+ },
19
+ "dependencies": {
20
+ "@iarna/toml": "^2.2.5",
21
+ "@vscode/tree-sitter-wasm": "^0.3.1",
22
+ "commander": "^12.1.0",
23
+ "ignore": "^7.0.5",
24
+ "open": "^10.1.0",
25
+ "web-tree-sitter": "^0.26.8",
26
+ "@zivis/mcp-security": "0.1.8"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^22.0.0",
30
+ "typescript": "^5.7.0",
31
+ "vitest": "^3.0.0"
32
+ },
33
+ "scripts": {
34
+ "build:workspace-deps": "pnpm --filter @zivis/mcp-security run build",
35
+ "build": "pnpm run build:workspace-deps && tsc && node scripts/ensure-symlink.cjs",
36
+ "dev": "tsc --watch",
37
+ "start": "node dist/index.js",
38
+ "lint": "pnpm run build:workspace-deps && tsc --noEmit",
39
+ "test": "vitest run"
40
+ }
41
+ }