@zivis/cli 0.1.0-alpha.23 → 0.1.0-alpha.25

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.
@@ -0,0 +1,30 @@
1
+ /**
2
+ * zivis auth bind
3
+ *
4
+ * The recommended setup command for developers using ZIVIS with an IDE or
5
+ * agentic workflow.
6
+ *
7
+ * How it works:
8
+ * 1. Opens a browser → WorkOS login scoped to the project's org
9
+ * 2. ZIVIS backend verifies org membership and mints a Local Project
10
+ * Binding Token (a WorkOS API key scoped to this user + org)
11
+ * 3. The token is stored in the OS keychain under `apikey.<session>`
12
+ * 4. IDE configs (.cursor/mcp.json, .vscode/mcp.json) are written with
13
+ * --workspace pointing to this repo
14
+ * 5. OAuth tokens from the login ceremony are discarded — the API key
15
+ * is the only long-lived credential
16
+ *
17
+ * The result: the MCP server uses a stable, org-scoped token that never
18
+ * refreshes and never drifts to a different org.
19
+ *
20
+ * Security model:
21
+ * - WorkOS login = identity + membership proof (ephemeral)
22
+ * - Local Project Binding Token = execution credential (permanent until revoked)
23
+ * - Keys are visible in `zivis auth status` and Settings → API Tokens for audit
24
+ * - `zivis auth logout` clears the key locally; revoke in the UI to invalidate
25
+ * it server-side
26
+ */
27
+ export interface BindCmdOpts {
28
+ yes?: boolean;
29
+ }
30
+ export declare function bindCommand(opts: BindCmdOpts): Promise<void>;
@@ -0,0 +1,175 @@
1
+ /**
2
+ * zivis auth bind
3
+ *
4
+ * The recommended setup command for developers using ZIVIS with an IDE or
5
+ * agentic workflow.
6
+ *
7
+ * How it works:
8
+ * 1. Opens a browser → WorkOS login scoped to the project's org
9
+ * 2. ZIVIS backend verifies org membership and mints a Local Project
10
+ * Binding Token (a WorkOS API key scoped to this user + org)
11
+ * 3. The token is stored in the OS keychain under `apikey.<session>`
12
+ * 4. IDE configs (.cursor/mcp.json, .vscode/mcp.json) are written with
13
+ * --workspace pointing to this repo
14
+ * 5. OAuth tokens from the login ceremony are discarded — the API key
15
+ * is the only long-lived credential
16
+ *
17
+ * The result: the MCP server uses a stable, org-scoped token that never
18
+ * refreshes and never drifts to a different org.
19
+ *
20
+ * Security model:
21
+ * - WorkOS login = identity + membership proof (ephemeral)
22
+ * - Local Project Binding Token = execution credential (permanent until revoked)
23
+ * - Keys are visible in `zivis auth status` and Settings → API Tokens for audit
24
+ * - `zivis auth logout` clears the key locally; revoke in the UI to invalidate
25
+ * it server-side
26
+ */
27
+ import * as os from "node:os";
28
+ import * as crypto from "node:crypto";
29
+ import * as child_process from "node:child_process";
30
+ import { login } from "@zivis/mcp/auth";
31
+ import { keychainStore, keychainClearSession } from "@zivis/mcp/auth";
32
+ import { detectProjectBinding } from "@zivis/mcp/project-binding";
33
+ import { DEFAULT_CONFIG } from "@zivis/mcp/types";
34
+ import { extractEmail } from "../../internal/orgs.js";
35
+ import { ensureProjectBinding } from "../../internal/project-binding.js";
36
+ import { setupCursorWorkspace, setupVsCodeClaude, setupVsCodeCopilot, setupClaudeCodeCli, } from "../../internal/ide-setup.js";
37
+ /** Get the git remote URL of the current repo for the key name, or fallback. */
38
+ function getRepoFingerprint() {
39
+ try {
40
+ const remote = child_process
41
+ .execSync("git remote get-url origin 2>/dev/null", { encoding: "utf8" })
42
+ .trim();
43
+ if (remote) {
44
+ return crypto.createHash("sha256").update(remote).digest("hex").slice(0, 12);
45
+ }
46
+ }
47
+ catch {
48
+ // no git or no remote
49
+ }
50
+ return crypto.createHash("sha256").update(process.cwd()).digest("hex").slice(0, 12);
51
+ }
52
+ export async function bindCommand(opts) {
53
+ const config = DEFAULT_CONFIG;
54
+ const cwd = process.cwd();
55
+ const detected = detectProjectBinding(cwd);
56
+ // We need a project binding to know which org to bind to.
57
+ // The binding provides workosOrgId + session name.
58
+ if (!detected?.binding.workosOrgId) {
59
+ console.error("");
60
+ console.error("[zivis] ERROR: No project binding found.");
61
+ console.error("[zivis] Run zivis auth login first to establish a project binding,");
62
+ console.error("[zivis] or ensure .zivis/project.json exists with a workosOrgId.");
63
+ console.error("");
64
+ console.error(" To create a binding:");
65
+ console.error(" zivis auth login");
66
+ process.exit(1);
67
+ }
68
+ const { workosOrgId, session: bindingSession, orgName } = detected.binding;
69
+ const session = bindingSession;
70
+ console.log("");
71
+ console.log(`Binding this repo to ${orgName ?? workosOrgId} (session: "${session}")`);
72
+ console.log("This will mint a Local Project Binding Token for MCP and IDE use.");
73
+ console.log("");
74
+ // Step 1: OAuth PKCE login — identity ceremony only.
75
+ // We scope it to the org from the project binding so there's no ambiguity.
76
+ let tokens;
77
+ try {
78
+ tokens = await login(config, `__bind_temp_${session}`, workosOrgId, {
79
+ orgName,
80
+ sessionLabel: session,
81
+ skipConfirm: opts.yes === true,
82
+ });
83
+ }
84
+ catch (err) {
85
+ console.error("[zivis] Authentication failed:", err instanceof Error ? err.message : err);
86
+ process.exit(1);
87
+ }
88
+ const email = extractEmail(tokens.id_token);
89
+ console.log(`✓ Authenticated as ${email}`);
90
+ // Step 2: Call POST /api/auth/bind with the fresh access token.
91
+ // The backend verifies membership and mints the WorkOS API key.
92
+ const repoFingerprint = getRepoFingerprint();
93
+ const hostname = os.hostname();
94
+ let bindResult;
95
+ try {
96
+ const response = await fetch(`${config.apiBaseUrl}/api/auth/bind`, {
97
+ method: "POST",
98
+ headers: {
99
+ Authorization: `Bearer ${tokens.access_token}`,
100
+ "Content-Type": "application/json",
101
+ "User-Agent": "@zivis/cli",
102
+ },
103
+ body: JSON.stringify({ repoFingerprint, hostname }),
104
+ });
105
+ if (!response.ok) {
106
+ const body = (await response.json().catch(() => ({})));
107
+ console.error(`[zivis] Backend bind failed (HTTP ${response.status}): ${body.message ?? body.error ?? "unknown error"}`);
108
+ process.exit(1);
109
+ }
110
+ bindResult = (await response.json());
111
+ }
112
+ catch (err) {
113
+ console.error("[zivis] Network error calling /api/auth/bind:", err instanceof Error ? err.message : err);
114
+ process.exit(1);
115
+ }
116
+ finally {
117
+ // Step 3: Discard the OAuth tokens — they were only needed for the bind ceremony.
118
+ // The Local Project Binding Token is the only credential we keep.
119
+ await keychainClearSession(`__bind_temp_${session}`).catch(() => { });
120
+ }
121
+ // Step 4: Store the Local Project Binding Token in the OS keychain.
122
+ // Stored under apikey.<session> so the MCP server finds it in the
123
+ // preferred credential slot (ahead of OAuth tokens in the precedence chain).
124
+ const apiKeyAccount = `apikey.${session}`;
125
+ try {
126
+ await keychainStore(apiKeyAccount, bindResult.key);
127
+ }
128
+ catch (err) {
129
+ console.error("[zivis] Failed to store token in OS keychain:", err instanceof Error ? err.message : err);
130
+ process.exit(1);
131
+ }
132
+ const maskedKey = `${bindResult.key.slice(0, 10)}...${bindResult.key.slice(-4)}`;
133
+ console.log(`✓ Local Project Binding Token stored (${maskedKey})`);
134
+ console.log(` Org: ${bindResult.orgName} (${bindResult.workosOrgId})`);
135
+ console.log(` Key name: ${bindResult.keyName}`);
136
+ // Step 5: Write IDE configs with --workspace so the MCP process is isolated.
137
+ try {
138
+ await setupCursorWorkspace();
139
+ }
140
+ catch (err) {
141
+ console.log(` WARNING: Failed to update .cursor/mcp.json: ${err instanceof Error ? err.message : err}`);
142
+ }
143
+ try {
144
+ await setupVsCodeClaude();
145
+ await setupVsCodeCopilot();
146
+ }
147
+ catch (err) {
148
+ console.log(` WARNING: Failed to update .vscode/mcp.json: ${err instanceof Error ? err.message : err}`);
149
+ }
150
+ try {
151
+ await setupClaudeCodeCli();
152
+ }
153
+ catch (err) {
154
+ console.log(` WARNING: Failed to update Claude Code CLI config: ${err instanceof Error ? err.message : err}`);
155
+ }
156
+ // Step 6: Ensure the project binding file is up to date.
157
+ await ensureProjectBinding({
158
+ config,
159
+ session,
160
+ accessToken: tokens.access_token,
161
+ organizationId: workosOrgId,
162
+ cwd,
163
+ autoBind: true,
164
+ skipBind: false,
165
+ force: false,
166
+ });
167
+ console.log("");
168
+ console.log("✓ Bind complete. Reload your IDE to activate the MCP server.");
169
+ console.log("");
170
+ console.log(" To verify: zivis auth status");
171
+ console.log(" To revoke: zivis auth logout (or Settings → API Tokens in the UI)");
172
+ console.log("");
173
+ process.exit(0);
174
+ }
175
+ //# sourceMappingURL=bind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../../src/commands/auth/bind.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { bindCommand } from "./bind.js";
1
2
  import { loginCommand } from "./login.js";
2
3
  import { initCommand } from "./init.js";
3
4
  import { statusCommand } from "./status.js";
@@ -6,6 +7,13 @@ import { sessionsCommand } from "./sessions.js";
6
7
  import { tokenCommand } from "./token.js";
7
8
  export function registerAuthCommands(program) {
8
9
  const auth = program.command("auth").description("authentication");
10
+ auth
11
+ .command("bind")
12
+ .description("authenticate and mint a Local Project Binding Token for this repo (recommended for MCP/IDE use)")
13
+ .option("-y, --yes", "skip confirmation prompt")
14
+ .action(async (opts) => {
15
+ await bindCommand(opts);
16
+ });
9
17
  auth
10
18
  .command("init")
11
19
  .description("interactive setup: authenticate, pick org, and bind this repo")
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAEnE,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,sBAAsB,EAAE,gCAAgC,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,sBAAsB,EAAE,gCAAgC,CAAC;SAChE,MAAM,CAAC,yBAAyB,EAAE,oCAAoC,CAAC;SACvE,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,QAAQ,EAAE,wCAAwC,CAAC;SAC1D,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,sBAAsB,EAAE,kBAAkB,CAAC;SAClD,MAAM,CAAC,OAAO,EAAE,4BAA4B,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CACV,mFAAmF,CACpF;SACA,MAAM,CACL,sBAAsB,EACtB,8EAA8E,CAC/E;SACA,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAI,EAAE,EAAE;QACrC,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,22 @@
1
- import { keychainClearAll, keychainClearSession } from "@zivis/mcp/auth";
1
+ import { keychainClearAll, keychainClearSession, keychainDelete, keychainRead } from "@zivis/mcp/auth";
2
2
  import { removeSessionEntry } from "@zivis/mcp/auth";
3
+ import { detectProjectBinding } from "@zivis/mcp/project-binding";
3
4
  export async function logoutCommand(opts) {
4
- if (opts.session) {
5
- await keychainClearSession(opts.session);
6
- await removeSessionEntry(opts.session);
7
- console.log(`✓ Session "${opts.session}" credentials cleared`);
5
+ const sessionName = opts.session ??
6
+ detectProjectBinding(process.cwd())?.binding.session;
7
+ if (sessionName) {
8
+ // Clear OAuth tokens for the session
9
+ await keychainClearSession(sessionName);
10
+ // Also clear the Local Project Binding Token stored as apikey.<session>.
11
+ const apiKeyAccount = `apikey.${sessionName}`;
12
+ const hadApiKey = !!(await keychainRead(apiKeyAccount).catch(() => null));
13
+ if (hadApiKey) {
14
+ await keychainDelete(apiKeyAccount);
15
+ console.log(`✓ Local Project Binding Token cleared for session "${sessionName}"`);
16
+ console.log(` Note: To revoke the key server-side, visit Settings → API Tokens in the ZIVIS UI.`);
17
+ }
18
+ await removeSessionEntry(sessionName);
19
+ console.log(`✓ Session "${sessionName}" credentials cleared`);
8
20
  return;
9
21
  }
10
22
  await keychainClearAll();
@@ -1 +1 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAOrD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IACrD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,OAAO,uBAAuB,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,EAAE,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;AAClG,CAAC"}
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAOlE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IACrD,MAAM,WAAW,GACf,IAAI,CAAC,OAAO;QACZ,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAEvD,IAAI,WAAW,EAAE,CAAC;QAChB,qCAAqC;QACrC,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAExC,yEAAyE;QACzE,MAAM,aAAa,GAAG,UAAU,WAAW,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,sDAAsD,WAAW,GAAG,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CACT,qFAAqF,CACtF,CAAC;QACJ,CAAC;QAED,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,uBAAuB,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,EAAE,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;AAClG,CAAC"}
@@ -1,4 +1,4 @@
1
- import { resolveAuth, loadTokens, getStorageName, keychainRead } from "@zivis/mcp/auth";
1
+ import { resolveAuth, loadTokens, keychainRead } from "@zivis/mcp/auth";
2
2
  import { detectProjectBinding } from "@zivis/mcp/project-binding";
3
3
  import { DEFAULT_CONFIG } from "@zivis/mcp/types";
4
4
  import { extractEmail } from "../../internal/orgs.js";
@@ -28,11 +28,31 @@ export async function statusCommand(opts) {
28
28
  break;
29
29
  }
30
30
  case "apikey": {
31
- const masked = creds.apiKey?.startsWith("sk_")
32
- ? `sk_...${creds.apiKey.slice(-4)}`
31
+ const key = creds.apiKey ?? "";
32
+ const masked = key.startsWith("sk_")
33
+ ? `${key.slice(0, 10)}...${key.slice(-4)}`
33
34
  : "***";
34
- const source = (await keychainRead("apikey")) ? getStorageName() : "environment variable";
35
- console.log(`Auth: API Key (${masked}) from ${source}`);
35
+ // Determine source: Local Project Binding Token (apikey.<session>), env var, or global key.
36
+ const sessionApiKeyAccount = session ? `apikey.${session}` : null;
37
+ const isSessionKey = sessionApiKeyAccount
38
+ ? !!(await keychainRead(sessionApiKeyAccount))
39
+ : false;
40
+ const isEnvKey = key === process.env.ZIVIS_API_KEY;
41
+ const isGlobalKey = !isSessionKey && !isEnvKey && !!(await keychainRead("apikey"));
42
+ if (isSessionKey && key.startsWith("sk_")) {
43
+ console.log(`Auth: Local Project Binding Token (${masked})`);
44
+ console.log(` Minted by \`zivis auth bind\` — org-scoped, no refresh needed`);
45
+ }
46
+ else if (isEnvKey) {
47
+ console.log(`Auth: API Key from ZIVIS_API_KEY env var (${masked})`);
48
+ }
49
+ else if (isGlobalKey) {
50
+ console.log(`Auth: API Key from keychain (${masked})`);
51
+ console.log(` Run \`zivis auth bind\` in this repo for project-scoped credentials`);
52
+ }
53
+ else {
54
+ console.log(`Auth: API Key (${masked})`);
55
+ }
36
56
  break;
37
57
  }
38
58
  case "none":
@@ -40,11 +60,13 @@ export async function statusCommand(opts) {
40
60
  console.log("");
41
61
  if (session) {
42
62
  console.log(`Session "${session}" has no credentials.`);
43
- console.log(`Run: zivis auth login --session ${session}`);
63
+ console.log(` Run in this repo: zivis auth bind`);
64
+ console.log(` Or manually: zivis auth login --session ${session}`);
44
65
  }
45
66
  else {
46
67
  console.log("To authenticate:");
47
- console.log(" zivis auth login");
68
+ console.log(" zivis auth bind (recommended — mints a project-scoped token)");
69
+ console.log(" zivis auth login (interactive OAuth for web access)");
48
70
  }
49
71
  break;
50
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zivis/cli",
3
- "version": "0.1.0-alpha.23",
3
+ "version": "0.1.0-alpha.25",
4
4
  "description": "ZIVIS CLI — threat modeling, scans, and MCP server for IDE integration",
5
5
  "type": "module",
6
6
  "bin": {
@@ -23,7 +23,7 @@
23
23
  "ignore": "^7.0.5",
24
24
  "open": "^10.1.0",
25
25
  "web-tree-sitter": "^0.26.8",
26
- "@zivis/mcp": "0.1.0-alpha.11"
26
+ "@zivis/mcp": "0.1.0-alpha.13"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/node": "^22.0.0",