@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.
- package/dist/commands/auth/bind.d.ts +30 -0
- package/dist/commands/auth/bind.js +175 -0
- package/dist/commands/auth/bind.js.map +1 -0
- package/dist/commands/auth/index.js +8 -0
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/logout.js +17 -5
- package/dist/commands/auth/logout.js.map +1 -1
- package/dist/commands/auth/status.js +29 -7
- package/dist/commands/auth/status.js.map +1 -1
- package/package.json +2 -2
|
@@ -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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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;
|
|
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,
|
|
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
|
|
32
|
-
|
|
31
|
+
const key = creds.apiKey ?? "";
|
|
32
|
+
const masked = key.startsWith("sk_")
|
|
33
|
+
? `${key.slice(0, 10)}...${key.slice(-4)}`
|
|
33
34
|
: "***";
|
|
34
|
-
|
|
35
|
-
|
|
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:
|
|
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
|
|
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":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,
|
|
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.
|
|
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.
|
|
26
|
+
"@zivis/mcp": "0.1.0-alpha.13"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^22.0.0",
|