@zivis/cli 0.1.0-alpha.39 → 0.1.0-alpha.4
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 +8 -0
- package/dist/commands/app/index.js +14 -2
- package/dist/commands/app/index.js.map +1 -0
- package/dist/commands/auth/index.js +2 -19
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/init.d.ts +0 -1
- package/dist/commands/auth/init.js +73 -245
- package/dist/commands/auth/init.js.map +1 -0
- package/dist/commands/auth/login.d.ts +0 -1
- package/dist/commands/auth/login.js +9 -34
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.js +7 -19
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/sessions.js +4 -7
- package/dist/commands/auth/sessions.js.map +1 -0
- package/dist/commands/auth/status.js +12 -33
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/credits/index.js +3 -2
- package/dist/commands/credits/index.js.map +1 -0
- package/dist/commands/mcp/index.js +14 -81
- package/dist/commands/mcp/index.js.map +1 -0
- package/dist/commands/open/index.d.ts +8 -0
- package/dist/commands/open/index.js +11 -0
- package/dist/commands/open/index.js.map +1 -0
- package/dist/commands/scan/index.js +8 -2
- package/dist/commands/scan/index.js.map +1 -0
- package/dist/commands/target/index.js +3 -0
- package/dist/commands/target/index.js.map +1 -0
- package/dist/commands/tm/index.js +10 -3
- package/dist/commands/tm/index.js.map +1 -0
- package/dist/index.js +1 -13
- package/dist/index.js.map +1 -0
- package/dist/internal/extractor/adapters/go/index.d.ts +4 -0
- package/dist/internal/extractor/adapters/go/index.js +6 -0
- package/dist/internal/extractor/adapters/go/index.js.map +1 -0
- package/dist/internal/extractor/adapters/go/manifest.d.ts +17 -0
- package/dist/internal/extractor/adapters/go/manifest.js +25 -19
- package/dist/internal/extractor/adapters/go/manifest.js.map +1 -0
- package/dist/internal/extractor/adapters/go/parser.d.ts +4 -0
- package/dist/internal/extractor/adapters/go/parser.js +5 -0
- package/dist/internal/extractor/adapters/go/parser.js.map +1 -0
- package/dist/internal/extractor/adapters/go/scanner.d.ts +20 -0
- package/dist/internal/extractor/adapters/go/scanner.js +43 -0
- package/dist/internal/extractor/adapters/go/scanner.js.map +1 -0
- package/dist/internal/extractor/adapters/python/index.d.ts +3 -0
- package/dist/internal/extractor/adapters/python/index.js +4 -0
- package/dist/internal/extractor/adapters/python/index.js.map +1 -0
- package/dist/internal/extractor/adapters/python/manifest.d.ts +8 -0
- package/dist/internal/extractor/adapters/python/manifest.js +18 -21
- package/dist/internal/extractor/adapters/python/manifest.js.map +1 -0
- package/dist/internal/extractor/adapters/python/parser.d.ts +3 -0
- package/dist/internal/extractor/adapters/python/parser.js +4 -0
- package/dist/internal/extractor/adapters/python/parser.js.map +1 -0
- package/dist/internal/extractor/adapters/python/scanner.d.ts +18 -0
- package/dist/internal/extractor/adapters/python/scanner.js +54 -1
- package/dist/internal/extractor/adapters/python/scanner.js.map +1 -0
- package/dist/internal/extractor/adapters/typescript/index.d.ts +7 -0
- package/dist/internal/extractor/adapters/typescript/index.js +21 -1
- package/dist/internal/extractor/adapters/typescript/index.js.map +1 -0
- package/dist/internal/extractor/adapters/typescript/manifest.d.ts +14 -0
- package/dist/internal/extractor/adapters/typescript/manifest.js +17 -26
- package/dist/internal/extractor/adapters/typescript/manifest.js.map +1 -0
- package/dist/internal/extractor/adapters/typescript/parser.d.ts +8 -0
- package/dist/internal/extractor/adapters/typescript/parser.js +9 -0
- package/dist/internal/extractor/adapters/typescript/parser.js.map +1 -0
- package/dist/internal/extractor/adapters/typescript/scanner.d.ts +24 -0
- package/dist/internal/extractor/adapters/typescript/scanner.js +43 -0
- package/dist/internal/extractor/adapters/typescript/scanner.js.map +1 -0
- package/dist/internal/extractor/index.d.ts +14 -0
- package/dist/internal/extractor/index.js +13 -0
- package/dist/internal/extractor/index.js.map +1 -0
- package/dist/internal/extractor/types.d.ts +45 -0
- package/dist/internal/extractor/types.js +27 -0
- package/dist/internal/extractor/types.js.map +1 -0
- package/dist/internal/extractor/walker.d.ts +18 -0
- package/dist/internal/extractor/walker.js +18 -0
- package/dist/internal/extractor/walker.js.map +1 -0
- package/dist/internal/ide-setup.d.ts +7 -16
- package/dist/internal/ide-setup.js +46 -320
- package/dist/internal/ide-setup.js.map +1 -0
- package/dist/internal/orgs.js +1 -0
- package/dist/internal/orgs.js.map +1 -0
- package/dist/internal/project-binding.d.ts +0 -1
- package/dist/internal/project-binding.js +9 -14
- package/dist/internal/project-binding.js.map +1 -0
- package/dist/internal/target-auth/api-config.d.ts +17 -0
- package/dist/internal/target-auth/api-config.js +18 -0
- package/dist/internal/target-auth/api-config.js.map +1 -0
- package/dist/internal/target-auth/config.d.ts +12 -0
- package/dist/internal/target-auth/config.js +13 -0
- package/dist/internal/target-auth/config.js.map +1 -0
- package/dist/internal/target-auth/index.d.ts +18 -0
- package/dist/internal/target-auth/index.js +19 -0
- package/dist/internal/target-auth/index.js.map +1 -0
- package/dist/internal/target-auth/keychain.d.ts +18 -0
- package/dist/internal/target-auth/keychain.js +23 -3
- package/dist/internal/target-auth/keychain.js.map +1 -0
- package/dist/internal/target-auth/types.d.ts +26 -0
- package/dist/internal/target-auth/types.js +10 -0
- package/dist/internal/target-auth/types.js.map +1 -0
- package/dist/internal/target-auth/workos.d.ts +15 -0
- package/dist/internal/target-auth/workos.js +17 -0
- package/dist/internal/target-auth/workos.js.map +1 -0
- package/package.json +4 -18
- package/LICENSE +0 -201
- package/README.md +0 -31
- package/dist/commands/auth/bind.d.ts +0 -4
- package/dist/commands/auth/bind.js +0 -97
- package/dist/commands/auth/token.d.ts +0 -4
- package/dist/commands/auth/token.js +0 -73
- package/dist/commands/check/index.d.ts +0 -2
- package/dist/commands/check/index.js +0 -463
- package/dist/commands/inspect/index.d.ts +0 -2
- package/dist/commands/inspect/index.js +0 -136
- package/dist/internal/binding-token-mint.d.ts +0 -33
- package/dist/internal/binding-token-mint.js +0 -174
- package/dist/internal/extractor/graph-builder.d.ts +0 -10
- package/dist/internal/extractor/graph-builder.js +0 -245
- package/dist/internal/extractor/graph-types.d.ts +0 -89
- package/dist/internal/extractor/graph-types.js +0 -1
- package/dist/internal/github-linkage-prompt.d.ts +0 -7
- package/dist/internal/github-linkage-prompt.js +0 -95
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Phase J.4 command group. The customer-facing primitive is "Application" —
|
|
4
|
+
* the thing they built and want tested. This group replaces the older
|
|
5
|
+
* `zivis target` set: same keychain layout, but auth config is pulled from
|
|
6
|
+
* the platform instead of read from a local file. Teammates discover an
|
|
7
|
+
* Application's IdP by querying the API; their tokens still stay in their
|
|
8
|
+
* own keychain.
|
|
9
|
+
*/
|
|
2
10
|
export declare function registerAppCommands(program: Command): void;
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { ApiClient } from "@zivis/mcp/api-client";
|
|
2
|
-
import {
|
|
2
|
+
import { DEFAULT_CONFIG } from "@zivis/mcp/types";
|
|
3
3
|
import { loginApplication, logoutTarget, tokenInfo, getValidTargetToken, } from "../../internal/target-auth/index.js";
|
|
4
4
|
import { getStorageName } from "../../internal/target-auth/keychain.js";
|
|
5
5
|
import { decodeJwtPayload } from "../../internal/target-auth/workos.js";
|
|
6
6
|
import { fetchAuthConfig } from "../../internal/target-auth/api-config.js";
|
|
7
7
|
const DEFAULT_PERSONA = "default";
|
|
8
|
+
/**
|
|
9
|
+
* Phase J.4 command group. The customer-facing primitive is "Application" —
|
|
10
|
+
* the thing they built and want tested. This group replaces the older
|
|
11
|
+
* `zivis target` set: same keychain layout, but auth config is pulled from
|
|
12
|
+
* the platform instead of read from a local file. Teammates discover an
|
|
13
|
+
* Application's IdP by querying the API; their tokens still stay in their
|
|
14
|
+
* own keychain.
|
|
15
|
+
*/
|
|
8
16
|
export function registerAppCommands(program) {
|
|
9
17
|
const app = program
|
|
10
18
|
.command("app")
|
|
@@ -63,6 +71,9 @@ export function registerAppCommands(program) {
|
|
|
63
71
|
baseUrl: opts.baseUrl,
|
|
64
72
|
type: opts.type,
|
|
65
73
|
useEphemeralCreds: useEphemeral,
|
|
74
|
+
// PKCE-only public-client mode is the whole reason for ephemeral creds —
|
|
75
|
+
// require oauth_pkce as the auth type. Non-PKCE flows (static_token,
|
|
76
|
+
// client_credentials, bearer_refresh) need their own subcommands.
|
|
66
77
|
authType: "oauth_pkce",
|
|
67
78
|
};
|
|
68
79
|
if (opts.description)
|
|
@@ -228,6 +239,7 @@ export function registerAppCommands(program) {
|
|
|
228
239
|
});
|
|
229
240
|
}
|
|
230
241
|
function buildClient(opts) {
|
|
231
|
-
const config = opts.session ? { ...
|
|
242
|
+
const config = opts.session ? { ...DEFAULT_CONFIG, session: opts.session } : DEFAULT_CONFIG;
|
|
232
243
|
return new ApiClient(config);
|
|
233
244
|
}
|
|
245
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,25 @@
|
|
|
1
|
-
import { bindCommand } from "./bind.js";
|
|
2
1
|
import { loginCommand } from "./login.js";
|
|
3
2
|
import { initCommand } from "./init.js";
|
|
4
3
|
import { statusCommand } from "./status.js";
|
|
5
4
|
import { logoutCommand } from "./logout.js";
|
|
6
5
|
import { sessionsCommand } from "./sessions.js";
|
|
7
|
-
import { tokenCommand } from "./token.js";
|
|
8
6
|
export function registerAuthCommands(program) {
|
|
9
7
|
const auth = program.command("auth").description("authentication");
|
|
10
|
-
auth
|
|
11
|
-
.command("bind")
|
|
12
|
-
.description("mint MCP API key for this repo (OAuth once + stored key). Normally automatic after login — use bind to repair.")
|
|
13
|
-
.option("-y, --yes", "skip confirmation prompt")
|
|
14
|
-
.action(async (opts) => {
|
|
15
|
-
await bindCommand(opts);
|
|
16
|
-
});
|
|
17
8
|
auth
|
|
18
9
|
.command("init")
|
|
19
10
|
.description("interactive setup: authenticate, pick org, and bind this repo")
|
|
20
11
|
.option("-s, --session <name>", "named session for multi-tenant")
|
|
21
|
-
.option("--skip-mint-key", "skip MCP API key mint after successful OAuth")
|
|
22
12
|
.action(async (opts) => {
|
|
23
13
|
await initCommand(opts);
|
|
24
14
|
});
|
|
25
15
|
auth
|
|
26
16
|
.command("login")
|
|
27
|
-
.description("OAuth PKCE login
|
|
17
|
+
.description("OAuth PKCE login (stores tokens in OS keychain)")
|
|
28
18
|
.option("-s, --session <name>", "named session for multi-tenant")
|
|
29
19
|
.option("-o, --org <workosOrgId>", "scope JWT to a specific WorkOS org")
|
|
30
20
|
.option("-y, --yes", "skip interactive confirmation")
|
|
31
21
|
.option("--bind", "auto-write .zivis/project.json binding")
|
|
32
22
|
.option("--no-bind", "skip project binding")
|
|
33
|
-
.option("--skip-mint-key", "skip MCP API key mint after successful OAuth")
|
|
34
23
|
.action(async (opts) => {
|
|
35
24
|
await loginCommand(opts);
|
|
36
25
|
});
|
|
@@ -56,11 +45,5 @@ export function registerAuthCommands(program) {
|
|
|
56
45
|
.action(async (opts) => {
|
|
57
46
|
await sessionsCommand(opts);
|
|
58
47
|
});
|
|
59
|
-
auth
|
|
60
|
-
.command("token <apiKey>")
|
|
61
|
-
.description("store a ZIVIS API access token for MCP/CI use (generate at Settings → API Tokens)")
|
|
62
|
-
.option("-s, --session <name>", "named session to bind this token to (defaults to project binding if present)")
|
|
63
|
-
.action(async (apiKey, opts) => {
|
|
64
|
-
await tokenCommand(apiKey, opts);
|
|
65
|
-
});
|
|
66
48
|
}
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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;AAEhD,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;AACP,CAAC"}
|
|
@@ -1,270 +1,98 @@
|
|
|
1
1
|
import * as readline from "node:readline/promises";
|
|
2
|
-
import { login, getStorageName, saveSessionEntry } from "@zivis/mcp/auth";
|
|
3
|
-
import {
|
|
4
|
-
import { resolveConfigFromBinding } from "@zivis/mcp/project-binding";
|
|
2
|
+
import { login, getStorageName, saveSessionEntry, loadTokens } from "@zivis/mcp/auth";
|
|
3
|
+
import { DEFAULT_CONFIG } from "@zivis/mcp/types";
|
|
5
4
|
import { fetchUserOrgs, extractEmail } from "../../internal/orgs.js";
|
|
6
5
|
import { ensureProjectBinding } from "../../internal/project-binding.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
catch {
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
async function prompt(question) {
|
|
21
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
22
|
-
try {
|
|
23
|
-
return (await rl.question(question)).trim();
|
|
24
|
-
}
|
|
25
|
-
finally {
|
|
26
|
-
rl.close();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
async function offerGuidanceInstall(cwd) {
|
|
30
|
-
const detectedIdes = detectIdesInRepo(cwd);
|
|
31
|
-
if (detectedIdes.length === 0)
|
|
32
|
-
return;
|
|
33
|
-
const ideLabels = {
|
|
34
|
-
cursor: "Cursor",
|
|
35
|
-
"claude-code-cli": "Claude Code (CLAUDE.md)",
|
|
36
|
-
"vscode-copilot": "VS Code (Copilot)",
|
|
37
|
-
"vscode-claude": "VS Code (Claude)",
|
|
38
|
-
cline: "Cline",
|
|
39
|
-
windsurf: "Windsurf",
|
|
40
|
-
};
|
|
41
|
-
const ideNames = detectedIdes.map((ide) => ideLabels[ide] ?? ide).join(", ");
|
|
42
|
-
console.log(`\nDetected IDE configs in this repo: ${ideNames}`);
|
|
43
|
-
const ans = await prompt("Add ZIVIS guidance so your AI assistant suggests security checks at the right moments?\n" +
|
|
44
|
-
"(Adds a rule/instruction file. You can edit or remove it anytime.) [Y/n] ");
|
|
45
|
-
if (ans.toLowerCase() === "n" || ans.toLowerCase() === "no") {
|
|
46
|
-
console.log(" Skipped. Run 'zivis mcp install --client <ide> --with-guidance' anytime to add later.");
|
|
47
|
-
return;
|
|
6
|
+
export async function initCommand(opts) {
|
|
7
|
+
const config = DEFAULT_CONFIG;
|
|
8
|
+
const session = opts.session || "default";
|
|
9
|
+
// Reuse a stored token if one exists — avoids an extra browser open
|
|
10
|
+
let bootstrapToken = null;
|
|
11
|
+
const stored = await loadTokens(session);
|
|
12
|
+
if (stored) {
|
|
13
|
+
bootstrapToken = stored.access_token;
|
|
14
|
+
const email = extractEmail(stored.id_token);
|
|
15
|
+
console.log(`Using existing session (${email}). To force re-login use: zivis auth logout && zivis auth init`);
|
|
48
16
|
}
|
|
49
|
-
|
|
50
|
-
|
|
17
|
+
else {
|
|
18
|
+
console.log("Step 1/2: Authenticate (browser will open)...");
|
|
51
19
|
try {
|
|
52
|
-
const
|
|
53
|
-
|
|
20
|
+
const tokens = await login(config, session, undefined, { skipConfirm: true });
|
|
21
|
+
bootstrapToken = tokens.access_token;
|
|
22
|
+
const email = extractEmail(tokens.id_token);
|
|
23
|
+
console.log(`✓ Authenticated as ${email}`);
|
|
54
24
|
}
|
|
55
25
|
catch (err) {
|
|
56
|
-
console.
|
|
26
|
+
console.error("Login failed:", err instanceof Error ? err.message : err);
|
|
27
|
+
process.exit(1);
|
|
57
28
|
}
|
|
58
29
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
for (const f of written)
|
|
62
|
-
console.log(` ${f}`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export async function initCommand(opts) {
|
|
66
|
-
const config = {
|
|
67
|
-
...DEFAULT_CONFIG,
|
|
68
|
-
...resolveConfigFromBinding(process.cwd()),
|
|
69
|
-
};
|
|
70
|
-
const session = opts.session || "default";
|
|
71
|
-
const envLabel = config.apiBaseUrl.includes("staging") ? "staging" : "production";
|
|
72
|
-
console.log(`Environment: ${envLabel} (${config.apiBaseUrl})`);
|
|
73
|
-
console.log("");
|
|
74
|
-
console.log("Opening browser for authentication...");
|
|
75
|
-
console.log("Log into the org you want to bind this project to.\n");
|
|
76
|
-
let tokens;
|
|
30
|
+
// Fetch the user's orgs
|
|
31
|
+
let orgs;
|
|
77
32
|
try {
|
|
78
|
-
|
|
33
|
+
orgs = await fetchUserOrgs(config, bootstrapToken);
|
|
79
34
|
}
|
|
80
35
|
catch (err) {
|
|
81
|
-
console.error("
|
|
36
|
+
console.error("Failed to fetch organizations:", err instanceof Error ? err.message : err);
|
|
82
37
|
process.exit(1);
|
|
83
38
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (jwtOrgId) {
|
|
88
|
-
let orgName;
|
|
89
|
-
try {
|
|
90
|
-
const orgs = await fetchUserOrgs(config, tokens.access_token);
|
|
91
|
-
orgName = orgs.find((o) => o.workosOrgId === jwtOrgId)?.name;
|
|
92
|
-
if (!orgName && orgs.length > 0) {
|
|
93
|
-
console.log(`\n ⚠ WorkOS org ${jwtOrgId} is not registered in ZIVIS.`);
|
|
94
|
-
console.log(` Your ZIVIS orgs: ${orgs.map((o) => `${o.name} (${o.workosOrgId})`).join(", ")}`);
|
|
95
|
-
console.log(` Try logging into ${config.apiBaseUrl} in your browser first, then re-run init.\n`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
catch (e) {
|
|
99
|
-
console.error(` (note: org name lookup failed — ${e instanceof Error ? e.message : e})`);
|
|
100
|
-
}
|
|
101
|
-
const orgLabel = orgName ?? `unknown org (${jwtOrgId})`;
|
|
102
|
-
console.log(`\nAuthenticated as: ${email}`);
|
|
103
|
-
console.log(`Org: ${orgLabel}`);
|
|
104
|
-
console.log(`Environment: ${envLabel} (${config.apiBaseUrl})\n`);
|
|
105
|
-
const confirm = await prompt(`Bind this project to "${orgLabel}"? [Y/n] `);
|
|
106
|
-
if (confirm.toLowerCase() === "n" || confirm.toLowerCase() === "no") {
|
|
107
|
-
console.log("");
|
|
108
|
-
const retry = await prompt("Retry login in a private/incognito window? [Y/n] ");
|
|
109
|
-
if (retry.toLowerCase() !== "n" && retry.toLowerCase() !== "no") {
|
|
110
|
-
console.log("\nOpening a private/incognito window — log into the correct org...\n");
|
|
111
|
-
let retryTokens;
|
|
112
|
-
try {
|
|
113
|
-
retryTokens = await login(config, session, undefined, { skipConfirm: true, incognito: true });
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
console.error("Login failed:", err instanceof Error ? err.message : err);
|
|
117
|
-
process.exit(1);
|
|
118
|
-
}
|
|
119
|
-
tokens = retryTokens;
|
|
120
|
-
const retryClaims = decodeJwtPayload(retryTokens.access_token);
|
|
121
|
-
const retryOrgId = retryClaims?.org_id;
|
|
122
|
-
if (!retryOrgId) {
|
|
123
|
-
console.error("JWT returned no org scope. Try `zivis auth logout` then `zivis auth init` again.");
|
|
124
|
-
process.exit(1);
|
|
125
|
-
}
|
|
126
|
-
let retryOrgName;
|
|
127
|
-
try {
|
|
128
|
-
const retryOrgs = await fetchUserOrgs(config, retryTokens.access_token);
|
|
129
|
-
retryOrgName = retryOrgs.find((o) => o.workosOrgId === retryOrgId)?.name;
|
|
130
|
-
}
|
|
131
|
-
catch (e) {
|
|
132
|
-
console.error(` (note: org name lookup failed — ${e instanceof Error ? e.message : e})`);
|
|
133
|
-
}
|
|
134
|
-
const retryLabel = retryOrgName ?? retryOrgId;
|
|
135
|
-
const retryEmail = extractEmail(retryTokens.id_token);
|
|
136
|
-
console.log(`\nAuthenticated as: ${retryEmail}`);
|
|
137
|
-
console.log(`Org: ${retryLabel}\n`);
|
|
138
|
-
const retryConfirm = await prompt(`Bind this project to "${retryLabel}"? [Y/n] `);
|
|
139
|
-
if (retryConfirm.toLowerCase() === "n" || retryConfirm.toLowerCase() === "no") {
|
|
140
|
-
console.log("Aborted.");
|
|
141
|
-
process.exit(0);
|
|
142
|
-
}
|
|
143
|
-
const storageName2 = getStorageName();
|
|
144
|
-
await saveSessionEntry(session, retryEmail, credentialStorageFromConfig(config));
|
|
145
|
-
console.log(`\n✓ Logged in as ${retryEmail} → ${retryLabel}`);
|
|
146
|
-
console.log(`✓ Credentials stored in ${storageName2}`);
|
|
147
|
-
await ensureProjectBinding({
|
|
148
|
-
config, session, accessToken: retryTokens.access_token,
|
|
149
|
-
organizationId: retryOrgId, cwd: process.cwd(), autoBind: true, skipBind: false, force: true,
|
|
150
|
-
});
|
|
151
|
-
await tryAutoMintBindingTokenAfterLogin({
|
|
152
|
-
cwd: process.cwd(),
|
|
153
|
-
sessionName: session,
|
|
154
|
-
accessToken: retryTokens.access_token,
|
|
155
|
-
skip: opts.skipMintKey === true,
|
|
156
|
-
warnOnFailure: true,
|
|
157
|
-
});
|
|
158
|
-
await discardOauthAfterLogin({ session, config });
|
|
159
|
-
await offerGuidanceInstall(process.cwd());
|
|
160
|
-
await maybePromptGitHubLinkage(config);
|
|
161
|
-
process.exit(0);
|
|
162
|
-
}
|
|
163
|
-
console.log("\nAborted. Switch orgs in your browser then run `zivis auth logout && zivis auth init`.");
|
|
164
|
-
process.exit(0);
|
|
165
|
-
}
|
|
166
|
-
const storageName = getStorageName();
|
|
167
|
-
await saveSessionEntry(session, email, credentialStorageFromConfig(config));
|
|
168
|
-
console.log(`\n✓ Logged in as ${email} → ${orgLabel}`);
|
|
169
|
-
console.log(`✓ Credentials stored in ${storageName}`);
|
|
170
|
-
await ensureProjectBinding({
|
|
171
|
-
config,
|
|
172
|
-
session,
|
|
173
|
-
accessToken: tokens.access_token,
|
|
174
|
-
organizationId: jwtOrgId,
|
|
175
|
-
cwd: process.cwd(),
|
|
176
|
-
autoBind: true,
|
|
177
|
-
skipBind: false,
|
|
178
|
-
force: true,
|
|
179
|
-
});
|
|
180
|
-
await tryAutoMintBindingTokenAfterLogin({
|
|
181
|
-
cwd: process.cwd(),
|
|
182
|
-
sessionName: session,
|
|
183
|
-
accessToken: tokens.access_token,
|
|
184
|
-
skip: opts.skipMintKey === true,
|
|
185
|
-
warnOnFailure: true,
|
|
186
|
-
});
|
|
187
|
-
await discardOauthAfterLogin({ session, config });
|
|
188
|
-
await offerGuidanceInstall(process.cwd());
|
|
189
|
-
await maybePromptGitHubLinkage(config);
|
|
39
|
+
if (orgs.length === 0) {
|
|
40
|
+
console.error("No organizations found for this account. Contact support.");
|
|
41
|
+
process.exit(1);
|
|
190
42
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
console.log("
|
|
194
|
-
|
|
43
|
+
let selectedOrg = orgs[0];
|
|
44
|
+
if (orgs.length > 1) {
|
|
45
|
+
console.log("\nYour organizations:");
|
|
46
|
+
orgs.forEach((org, i) => {
|
|
47
|
+
console.log(` ${i + 1}. ${org.name}`);
|
|
48
|
+
});
|
|
49
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
195
50
|
try {
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
-
catch (err) {
|
|
199
|
-
console.error("Failed to fetch organizations:", err instanceof Error ? err.message : err);
|
|
200
|
-
process.exit(1);
|
|
201
|
-
}
|
|
202
|
-
if (orgs.length === 0) {
|
|
203
|
-
console.error("No organizations found. Contact support.");
|
|
204
|
-
process.exit(1);
|
|
205
|
-
}
|
|
206
|
-
if (orgs.length === 1) {
|
|
207
|
-
console.log(`One org found: ${orgs[0].name}. Re-authenticating scoped to that org...`);
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
console.log("Your organizations:");
|
|
211
|
-
orgs.forEach((org, i) => console.log(` ${i + 1}. ${org.name}`));
|
|
212
|
-
const answer = await prompt(`\nSelect org to bind this project to [1-${orgs.length}]: `);
|
|
51
|
+
const answer = (await rl.question(`\nSelect org [1-${orgs.length}]: `)).trim();
|
|
213
52
|
const idx = parseInt(answer, 10) - 1;
|
|
214
53
|
if (isNaN(idx) || idx < 0 || idx >= orgs.length) {
|
|
215
54
|
console.error("Invalid selection.");
|
|
216
55
|
process.exit(1);
|
|
217
56
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
}
|
|
223
|
-
console.log(`\nRe-opening browser scoped to ${selected.name}...`);
|
|
224
|
-
console.log("(Tip: if your browser logs into the wrong org, use option 2 to get a URL for a private/incognito window)\n");
|
|
225
|
-
try {
|
|
226
|
-
const scopedTokens = await login(config, session, selected.workosOrgId, {
|
|
227
|
-
orgName: selected.name,
|
|
228
|
-
skipConfirm: true,
|
|
229
|
-
});
|
|
230
|
-
const storageName2 = getStorageName();
|
|
231
|
-
await saveSessionEntry(session, email, credentialStorageFromConfig(config));
|
|
232
|
-
console.log(`\n✓ Logged in as ${email} → ${selected.name}`);
|
|
233
|
-
console.log(`✓ Credentials stored in ${storageName2}`);
|
|
234
|
-
await ensureProjectBinding({
|
|
235
|
-
config,
|
|
236
|
-
session,
|
|
237
|
-
accessToken: scopedTokens.access_token,
|
|
238
|
-
organizationId: selected.workosOrgId,
|
|
239
|
-
cwd: process.cwd(),
|
|
240
|
-
autoBind: true,
|
|
241
|
-
skipBind: false,
|
|
242
|
-
force: true,
|
|
243
|
-
});
|
|
244
|
-
await tryAutoMintBindingTokenAfterLogin({
|
|
245
|
-
cwd: process.cwd(),
|
|
246
|
-
sessionName: session,
|
|
247
|
-
accessToken: scopedTokens.access_token,
|
|
248
|
-
skip: opts.skipMintKey === true,
|
|
249
|
-
warnOnFailure: true,
|
|
250
|
-
});
|
|
251
|
-
await discardOauthAfterLogin({ session, config });
|
|
252
|
-
await offerGuidanceInstall(process.cwd());
|
|
253
|
-
}
|
|
254
|
-
catch (err) {
|
|
255
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
256
|
-
const m = msg.match(/received (org_\w+)/);
|
|
257
|
-
if (m) {
|
|
258
|
-
console.error(`\n⚠ Browser authenticated to a different org than selected.`);
|
|
259
|
-
console.error(` Your browser has an active session for a different org.\n`);
|
|
260
|
-
console.error(` To fix: run \`zivis auth init\` again and paste the URL into a private/incognito window.`);
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
console.error("Login failed:", msg);
|
|
264
|
-
}
|
|
265
|
-
process.exit(1);
|
|
266
|
-
}
|
|
57
|
+
selectedOrg = orgs[idx];
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
rl.close();
|
|
267
61
|
}
|
|
268
62
|
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(`\nOne org found: ${selectedOrg.name}`);
|
|
65
|
+
}
|
|
66
|
+
if (!selectedOrg.workosOrgId) {
|
|
67
|
+
console.error(`Org "${selectedOrg.name}" has no WorkOS organization ID — cannot scope login.`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
console.log(`\nStep 2/2: Logging in to ${selectedOrg.name} (browser will open)...`);
|
|
71
|
+
let scopedTokens;
|
|
72
|
+
try {
|
|
73
|
+
scopedTokens = await login(config, session, selectedOrg.workosOrgId, {
|
|
74
|
+
orgName: selectedOrg.name,
|
|
75
|
+
skipConfirm: true,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.error("Login failed:", err instanceof Error ? err.message : err);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
const email = extractEmail(scopedTokens.id_token);
|
|
83
|
+
const storageName = getStorageName();
|
|
84
|
+
await saveSessionEntry(session, email);
|
|
85
|
+
console.log(`\n✓ Logged in as ${email} → ${selectedOrg.name}`);
|
|
86
|
+
console.log(`✓ Credentials stored in ${storageName}`);
|
|
87
|
+
await ensureProjectBinding({
|
|
88
|
+
config,
|
|
89
|
+
session,
|
|
90
|
+
accessToken: scopedTokens.access_token,
|
|
91
|
+
organizationId: selectedOrg.workosOrgId,
|
|
92
|
+
cwd: process.cwd(),
|
|
93
|
+
autoBind: true,
|
|
94
|
+
skipBind: false,
|
|
95
|
+
});
|
|
269
96
|
process.exit(0);
|
|
270
97
|
}
|
|
98
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/auth/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import { login } from "@zivis/mcp/auth";
|
|
2
2
|
import { getStorageName } from "@zivis/mcp/auth";
|
|
3
3
|
import { saveSessionEntry } from "@zivis/mcp/auth";
|
|
4
|
-
import { detectProjectBinding
|
|
5
|
-
import {
|
|
4
|
+
import { detectProjectBinding } from "@zivis/mcp/project-binding";
|
|
5
|
+
import { DEFAULT_CONFIG } from "@zivis/mcp/types";
|
|
6
6
|
import { extractEmail } from "../../internal/orgs.js";
|
|
7
7
|
import { ensureProjectBinding } from "../../internal/project-binding.js";
|
|
8
|
-
import {
|
|
9
|
-
import { setupCursorWorkspace, setupVsCodeClaude, setupVsCodeCopilot, setupClaudeCodeCli, } from "../../internal/ide-setup.js";
|
|
10
|
-
import { buildLinkagePrompt } from "../../internal/github-linkage-prompt.js";
|
|
8
|
+
import { setupVsCodeClaude, setupVsCodeCopilot, setupClaudeCodeCli, } from "../../internal/ide-setup.js";
|
|
11
9
|
export async function loginCommand(opts) {
|
|
12
|
-
const config =
|
|
13
|
-
...DEFAULT_CONFIG,
|
|
14
|
-
...resolveConfigFromBinding(process.cwd()),
|
|
15
|
-
};
|
|
10
|
+
const config = DEFAULT_CONFIG;
|
|
16
11
|
const detected = detectProjectBinding(process.cwd());
|
|
17
12
|
const session = opts.session || detected?.binding.session || config.session;
|
|
18
13
|
let organizationId = opts.org;
|
|
@@ -31,7 +26,7 @@ export async function loginCommand(opts) {
|
|
|
31
26
|
const storageName = getStorageName();
|
|
32
27
|
const email = extractEmail(tokens.id_token);
|
|
33
28
|
const sessionName = session || "default";
|
|
34
|
-
await saveSessionEntry(sessionName, email
|
|
29
|
+
await saveSessionEntry(sessionName, email);
|
|
35
30
|
const sessionLabel = session ? ` (session: ${session})` : "";
|
|
36
31
|
console.log(`✓ Logged in as ${email}${sessionLabel}`);
|
|
37
32
|
console.log(`✓ Credentials stored in ${storageName}`);
|
|
@@ -39,20 +34,14 @@ export async function loginCommand(opts) {
|
|
|
39
34
|
console.log(`✓ JWT scoped to organization: ${organizationId}`);
|
|
40
35
|
}
|
|
41
36
|
try {
|
|
42
|
-
await
|
|
43
|
-
|
|
44
|
-
catch (err) {
|
|
45
|
-
console.log(` WARNING: Failed to update .cursor/mcp.json: ${err instanceof Error ? err.message : err}`);
|
|
46
|
-
}
|
|
47
|
-
try {
|
|
48
|
-
await setupVsCodeClaude();
|
|
49
|
-
await setupVsCodeCopilot();
|
|
37
|
+
await setupVsCodeClaude(session);
|
|
38
|
+
await setupVsCodeCopilot(session);
|
|
50
39
|
}
|
|
51
40
|
catch (err) {
|
|
52
41
|
console.log(` WARNING: Failed to update .vscode/mcp.json: ${err instanceof Error ? err.message : err}`);
|
|
53
42
|
}
|
|
54
43
|
try {
|
|
55
|
-
await setupClaudeCodeCli();
|
|
44
|
+
await setupClaudeCodeCli(session);
|
|
56
45
|
}
|
|
57
46
|
catch (err) {
|
|
58
47
|
console.log(` WARNING: Failed to update Claude Code CLI config: ${err instanceof Error ? err.message : err}`);
|
|
@@ -66,21 +55,6 @@ export async function loginCommand(opts) {
|
|
|
66
55
|
autoBind: opts.bind === true,
|
|
67
56
|
skipBind: opts.noBind === true,
|
|
68
57
|
});
|
|
69
|
-
await tryAutoMintBindingTokenAfterLogin({
|
|
70
|
-
cwd: process.cwd(),
|
|
71
|
-
sessionName,
|
|
72
|
-
accessToken: tokens.access_token,
|
|
73
|
-
skip: opts.skipMintKey === true,
|
|
74
|
-
warnOnFailure: true,
|
|
75
|
-
});
|
|
76
|
-
await discardOauthAfterLogin({ session, config });
|
|
77
|
-
try {
|
|
78
|
-
const linkagePrompt = await buildLinkagePrompt({ config });
|
|
79
|
-
if (linkagePrompt)
|
|
80
|
-
console.log(linkagePrompt);
|
|
81
|
-
}
|
|
82
|
-
catch {
|
|
83
|
-
}
|
|
84
58
|
process.exit(0);
|
|
85
59
|
}
|
|
86
60
|
catch (err) {
|
|
@@ -88,3 +62,4 @@ export async function loginCommand(opts) {
|
|
|
88
62
|
process.exit(1);
|
|
89
63
|
}
|
|
90
64
|
}
|
|
65
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,14 @@
|
|
|
1
|
-
import { keychainClearAll, keychainClearSession
|
|
1
|
+
import { keychainClearAll, keychainClearSession } from "@zivis/mcp/auth";
|
|
2
2
|
import { removeSessionEntry } from "@zivis/mcp/auth";
|
|
3
|
-
import { detectProjectBinding, resolveConfigFromBinding } from "@zivis/mcp/project-binding";
|
|
4
|
-
import { credentialStorageFromConfig } from "@zivis/mcp/types";
|
|
5
3
|
export async function logoutCommand(opts) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (sessionName) {
|
|
11
|
-
await keychainClearSession(sessionName, st);
|
|
12
|
-
const apiKeyAccount = `apikey.${sessionName}`;
|
|
13
|
-
const hadApiKey = !!(await keychainRead(apiKeyAccount, st).catch(() => null));
|
|
14
|
-
if (hadApiKey) {
|
|
15
|
-
await keychainDelete(apiKeyAccount, st);
|
|
16
|
-
console.log(`✓ Local Project Binding Token cleared for session "${sessionName}"`);
|
|
17
|
-
console.log(` Note: To revoke the key server-side, visit Settings → API Tokens in the ZIVIS UI.`);
|
|
18
|
-
}
|
|
19
|
-
await removeSessionEntry(sessionName, st);
|
|
20
|
-
console.log(`✓ Session "${sessionName}" credentials cleared`);
|
|
4
|
+
if (opts.session) {
|
|
5
|
+
await keychainClearSession(opts.session);
|
|
6
|
+
await removeSessionEntry(opts.session);
|
|
7
|
+
console.log(`✓ Session "${opts.session}" credentials cleared`);
|
|
21
8
|
return;
|
|
22
9
|
}
|
|
23
|
-
await keychainClearAll(
|
|
10
|
+
await keychainClearAll();
|
|
24
11
|
console.log("✓ Default credentials cleared");
|
|
25
12
|
console.log(" Note: Named sessions are not affected. Use 'zivis auth sessions' to list them.");
|
|
26
13
|
}
|
|
14
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +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"}
|