@zivis/cli 0.1.0-alpha.40 → 0.1.0-alpha.6

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 (124) hide show
  1. package/dist/commands/app/index.d.ts +8 -0
  2. package/dist/commands/app/index.js +16 -4
  3. package/dist/commands/app/index.js.map +1 -0
  4. package/dist/commands/auth/index.js +2 -20
  5. package/dist/commands/auth/index.js.map +1 -0
  6. package/dist/commands/auth/init.d.ts +0 -1
  7. package/dist/commands/auth/init.js +97 -231
  8. package/dist/commands/auth/init.js.map +1 -0
  9. package/dist/commands/auth/login.d.ts +0 -2
  10. package/dist/commands/auth/login.js +18 -136
  11. package/dist/commands/auth/login.js.map +1 -0
  12. package/dist/commands/auth/logout.js +7 -19
  13. package/dist/commands/auth/logout.js.map +1 -0
  14. package/dist/commands/auth/sessions.js +4 -7
  15. package/dist/commands/auth/sessions.js.map +1 -0
  16. package/dist/commands/auth/status.js +12 -33
  17. package/dist/commands/auth/status.js.map +1 -0
  18. package/dist/commands/credits/index.js +3 -2
  19. package/dist/commands/credits/index.js.map +1 -0
  20. package/dist/commands/mcp/index.js +14 -81
  21. package/dist/commands/mcp/index.js.map +1 -0
  22. package/dist/commands/open/index.d.ts +8 -0
  23. package/dist/commands/open/index.js +11 -0
  24. package/dist/commands/open/index.js.map +1 -0
  25. package/dist/commands/scan/index.js +8 -3
  26. package/dist/commands/scan/index.js.map +1 -0
  27. package/dist/commands/target/index.js +3 -0
  28. package/dist/commands/target/index.js.map +1 -0
  29. package/dist/commands/tm/index.js +10 -3
  30. package/dist/commands/tm/index.js.map +1 -0
  31. package/dist/index.js +1 -13
  32. package/dist/index.js.map +1 -0
  33. package/dist/internal/extractor/adapters/go/index.d.ts +4 -0
  34. package/dist/internal/extractor/adapters/go/index.js +6 -0
  35. package/dist/internal/extractor/adapters/go/index.js.map +1 -0
  36. package/dist/internal/extractor/adapters/go/manifest.d.ts +17 -0
  37. package/dist/internal/extractor/adapters/go/manifest.js +25 -19
  38. package/dist/internal/extractor/adapters/go/manifest.js.map +1 -0
  39. package/dist/internal/extractor/adapters/go/parser.d.ts +4 -0
  40. package/dist/internal/extractor/adapters/go/parser.js +5 -0
  41. package/dist/internal/extractor/adapters/go/parser.js.map +1 -0
  42. package/dist/internal/extractor/adapters/go/scanner.d.ts +20 -0
  43. package/dist/internal/extractor/adapters/go/scanner.js +43 -0
  44. package/dist/internal/extractor/adapters/go/scanner.js.map +1 -0
  45. package/dist/internal/extractor/adapters/python/index.d.ts +3 -0
  46. package/dist/internal/extractor/adapters/python/index.js +4 -0
  47. package/dist/internal/extractor/adapters/python/index.js.map +1 -0
  48. package/dist/internal/extractor/adapters/python/manifest.d.ts +8 -0
  49. package/dist/internal/extractor/adapters/python/manifest.js +18 -21
  50. package/dist/internal/extractor/adapters/python/manifest.js.map +1 -0
  51. package/dist/internal/extractor/adapters/python/parser.d.ts +3 -0
  52. package/dist/internal/extractor/adapters/python/parser.js +4 -0
  53. package/dist/internal/extractor/adapters/python/parser.js.map +1 -0
  54. package/dist/internal/extractor/adapters/python/scanner.d.ts +18 -0
  55. package/dist/internal/extractor/adapters/python/scanner.js +54 -1
  56. package/dist/internal/extractor/adapters/python/scanner.js.map +1 -0
  57. package/dist/internal/extractor/adapters/typescript/index.d.ts +7 -0
  58. package/dist/internal/extractor/adapters/typescript/index.js +21 -1
  59. package/dist/internal/extractor/adapters/typescript/index.js.map +1 -0
  60. package/dist/internal/extractor/adapters/typescript/manifest.d.ts +14 -0
  61. package/dist/internal/extractor/adapters/typescript/manifest.js +17 -26
  62. package/dist/internal/extractor/adapters/typescript/manifest.js.map +1 -0
  63. package/dist/internal/extractor/adapters/typescript/parser.d.ts +8 -0
  64. package/dist/internal/extractor/adapters/typescript/parser.js +9 -0
  65. package/dist/internal/extractor/adapters/typescript/parser.js.map +1 -0
  66. package/dist/internal/extractor/adapters/typescript/scanner.d.ts +24 -0
  67. package/dist/internal/extractor/adapters/typescript/scanner.js +43 -0
  68. package/dist/internal/extractor/adapters/typescript/scanner.js.map +1 -0
  69. package/dist/internal/extractor/index.d.ts +14 -0
  70. package/dist/internal/extractor/index.js +13 -0
  71. package/dist/internal/extractor/index.js.map +1 -0
  72. package/dist/internal/extractor/types.d.ts +45 -0
  73. package/dist/internal/extractor/types.js +27 -0
  74. package/dist/internal/extractor/types.js.map +1 -0
  75. package/dist/internal/extractor/walker.d.ts +18 -0
  76. package/dist/internal/extractor/walker.js +18 -0
  77. package/dist/internal/extractor/walker.js.map +1 -0
  78. package/dist/internal/ide-setup.d.ts +7 -16
  79. package/dist/internal/ide-setup.js +46 -320
  80. package/dist/internal/ide-setup.js.map +1 -0
  81. package/dist/internal/orgs.js +1 -0
  82. package/dist/internal/orgs.js.map +1 -0
  83. package/dist/internal/project-binding.d.ts +0 -1
  84. package/dist/internal/project-binding.js +9 -14
  85. package/dist/internal/project-binding.js.map +1 -0
  86. package/dist/internal/target-auth/api-config.d.ts +17 -0
  87. package/dist/internal/target-auth/api-config.js +18 -0
  88. package/dist/internal/target-auth/api-config.js.map +1 -0
  89. package/dist/internal/target-auth/config.d.ts +12 -0
  90. package/dist/internal/target-auth/config.js +13 -0
  91. package/dist/internal/target-auth/config.js.map +1 -0
  92. package/dist/internal/target-auth/index.d.ts +18 -0
  93. package/dist/internal/target-auth/index.js +19 -0
  94. package/dist/internal/target-auth/index.js.map +1 -0
  95. package/dist/internal/target-auth/keychain.d.ts +18 -0
  96. package/dist/internal/target-auth/keychain.js +23 -3
  97. package/dist/internal/target-auth/keychain.js.map +1 -0
  98. package/dist/internal/target-auth/types.d.ts +26 -0
  99. package/dist/internal/target-auth/types.js +10 -0
  100. package/dist/internal/target-auth/types.js.map +1 -0
  101. package/dist/internal/target-auth/workos.d.ts +15 -0
  102. package/dist/internal/target-auth/workos.js +18 -9
  103. package/dist/internal/target-auth/workos.js.map +1 -0
  104. package/package.json +5 -19
  105. package/LICENSE +0 -201
  106. package/README.md +0 -31
  107. package/dist/commands/auth/bind.d.ts +0 -4
  108. package/dist/commands/auth/bind.js +0 -97
  109. package/dist/commands/auth/token.d.ts +0 -4
  110. package/dist/commands/auth/token.js +0 -73
  111. package/dist/commands/check/index.d.ts +0 -2
  112. package/dist/commands/check/index.js +0 -463
  113. package/dist/commands/inspect/index.d.ts +0 -2
  114. package/dist/commands/inspect/index.js +0 -136
  115. package/dist/internal/binding-token-mint.d.ts +0 -33
  116. package/dist/internal/binding-token-mint.js +0 -174
  117. package/dist/internal/extractor/graph-builder.d.ts +0 -10
  118. package/dist/internal/extractor/graph-builder.js +0 -245
  119. package/dist/internal/extractor/graph-types.d.ts +0 -89
  120. package/dist/internal/extractor/graph-types.js +0 -1
  121. package/dist/internal/github-linkage-prompt.d.ts +0 -7
  122. package/dist/internal/github-linkage-prompt.js +0 -95
  123. package/dist/internal/org-picker.d.ts +0 -11
  124. package/dist/internal/org-picker.js +0 -34
@@ -1,161 +1,60 @@
1
- import * as readline from "node:readline/promises";
2
1
  import { login } from "@zivis/mcp/auth";
3
2
  import { getStorageName } from "@zivis/mcp/auth";
4
3
  import { saveSessionEntry } from "@zivis/mcp/auth";
5
- import { detectProjectBinding, resolveConfigFromBinding } from "@zivis/mcp/project-binding";
6
- import { credentialStorageFromConfig, DEFAULT_CONFIG } from "@zivis/mcp/types";
4
+ import { detectProjectBinding } from "@zivis/mcp/project-binding";
5
+ import { DEFAULT_CONFIG } from "@zivis/mcp/types";
7
6
  import { extractEmail } from "../../internal/orgs.js";
8
- import { pickOrg } from "../../internal/org-picker.js";
9
7
  import { ensureProjectBinding } from "../../internal/project-binding.js";
10
- import { discardOauthAfterLogin, tryAutoMintBindingTokenAfterLogin, } from "../../internal/binding-token-mint.js";
11
- import { setupCursorWorkspace, setupVsCodeClaude, setupVsCodeCopilot, setupClaudeCodeCli, } from "../../internal/ide-setup.js";
12
- import { buildLinkagePrompt } from "../../internal/github-linkage-prompt.js";
13
- async function confirm(question) {
14
- const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
15
- try {
16
- const answer = (await rl.question(question)).trim().toLowerCase();
17
- return answer !== "n" && answer !== "no";
18
- }
19
- finally {
20
- rl.close();
21
- }
22
- }
8
+ import { setupVsCodeClaude, setupVsCodeCopilot, setupClaudeCodeCli, } from "../../internal/ide-setup.js";
23
9
  export async function loginCommand(opts) {
24
- const config = {
25
- ...DEFAULT_CONFIG,
26
- ...resolveConfigFromBinding(process.cwd()),
27
- };
10
+ const config = DEFAULT_CONFIG;
28
11
  const detected = detectProjectBinding(process.cwd());
29
12
  const session = opts.session || detected?.binding.session || config.session;
30
- const sessionName = session || "default";
31
- let organizationId;
32
- let orgName;
33
- let writeMode = "no-write";
34
- if (opts.org) {
35
- organizationId = opts.org;
36
- orgName = detected?.binding.orgName && detected.binding.workosOrgId === opts.org
37
- ? detected.binding.orgName
38
- : undefined;
39
- if (opts.rebind) {
40
- writeMode = "replace";
41
- }
42
- }
43
- else if (opts.rebind) {
44
- const picked = await runIdentityThenPicker(config, sessionName, {
45
- currentOrgId: detected?.binding.workosOrgId ?? undefined,
46
- header: detected?.binding.workosOrgId
47
- ? "Switch this project to which org?"
48
- : "Your organizations:",
49
- });
50
- if (detected?.binding.workosOrgId && detected.binding.workosOrgId === picked.workosOrgId) {
51
- console.log(`Project is already bound to ${picked.name}. Nothing to change.`);
52
- process.exit(0);
53
- }
54
- if (detected?.binding.workosOrgId) {
55
- const fromLabel = detected.binding.orgName
56
- ? `${detected.binding.orgName} (${detected.binding.workosOrgId})`
57
- : detected.binding.workosOrgId;
58
- const toLabel = `${picked.name} (${picked.workosOrgId})`;
59
- if (!opts.yes) {
60
- const ok = await confirm(`Change project binding from "${fromLabel}" to "${toLabel}"? [Y/n] `);
61
- if (!ok) {
62
- console.log("Aborted.");
63
- process.exit(0);
64
- }
65
- }
66
- writeMode = "replace";
67
- }
68
- else {
69
- writeMode = "create";
70
- }
71
- organizationId = picked.workosOrgId;
72
- orgName = picked.name;
73
- }
74
- else if (detected?.binding.workosOrgId) {
13
+ let organizationId = opts.org;
14
+ if (!organizationId && detected?.binding.workosOrgId) {
75
15
  organizationId = detected.binding.workosOrgId;
76
- orgName = detected.binding.orgName;
77
- console.log(`Using org from project binding: ${organizationId}${orgName ? ` (${orgName})` : ""}`);
78
- }
79
- else {
80
- const picked = await runIdentityThenPicker(config, sessionName, {
81
- header: "Your organizations:",
82
- });
83
- organizationId = picked.workosOrgId;
84
- orgName = picked.name;
85
- writeMode = "create";
86
- }
87
- if (!organizationId) {
88
- console.error("Internal error: no organization resolved for login.");
89
- process.exit(1);
16
+ console.log(`Using org from project binding: ${organizationId}${detected.binding.orgName ? ` (${detected.binding.orgName})` : ""}`);
90
17
  }
91
18
  if (detected?.binding.session && !opts.session) {
92
19
  console.log(`Using session from project binding: ${session}`);
93
20
  }
94
21
  try {
95
22
  const tokens = await login(config, session, organizationId, {
96
- orgName,
97
- skipConfirm: opts.yes === true || writeMode !== "no-write",
23
+ orgName: detected?.binding.orgName,
24
+ skipConfirm: opts.yes === true,
98
25
  });
99
26
  const storageName = getStorageName();
100
27
  const email = extractEmail(tokens.id_token);
101
- await saveSessionEntry(sessionName, email, credentialStorageFromConfig(config));
28
+ const sessionName = session || "default";
29
+ await saveSessionEntry(sessionName, email);
102
30
  const sessionLabel = session ? ` (session: ${session})` : "";
103
31
  console.log(`✓ Logged in as ${email}${sessionLabel}`);
104
32
  console.log(`✓ Credentials stored in ${storageName}`);
105
- console.log(`✓ JWT scoped to organization: ${organizationId}${orgName ? ` (${orgName})` : ""}`);
106
- try {
107
- await setupCursorWorkspace();
108
- }
109
- catch (err) {
110
- console.log(` WARNING: Failed to update .cursor/mcp.json: ${err instanceof Error ? err.message : err}`);
33
+ if (organizationId) {
34
+ console.log(`✓ JWT scoped to organization: ${organizationId}`);
111
35
  }
112
36
  try {
113
- await setupVsCodeClaude();
114
- await setupVsCodeCopilot();
37
+ await setupVsCodeClaude(session);
38
+ await setupVsCodeCopilot(session);
115
39
  }
116
40
  catch (err) {
117
41
  console.log(` WARNING: Failed to update .vscode/mcp.json: ${err instanceof Error ? err.message : err}`);
118
42
  }
119
43
  try {
120
- await setupClaudeCodeCli();
44
+ await setupClaudeCodeCli(session);
121
45
  }
122
46
  catch (err) {
123
47
  console.log(` WARNING: Failed to update Claude Code CLI config: ${err instanceof Error ? err.message : err}`);
124
48
  }
125
- if (writeMode === "create" && !opts.yes && !opts.noBind) {
126
- const orgLabel = orgName ? `${orgName} (${organizationId})` : organizationId;
127
- const ok = await confirm(`Bind this project to ${orgLabel}? [Y/n] `);
128
- if (!ok) {
129
- console.log("Login succeeded but project was not bound.");
130
- await discardOauthAfterLogin({ session, config });
131
- process.exit(0);
132
- }
133
- }
134
49
  await ensureProjectBinding({
135
50
  config,
136
51
  session: sessionName,
137
52
  accessToken: tokens.access_token,
138
53
  organizationId,
139
54
  cwd: process.cwd(),
140
- autoBind: opts.bind === true || writeMode !== "no-write",
55
+ autoBind: opts.bind === true,
141
56
  skipBind: opts.noBind === true,
142
- force: writeMode === "replace",
143
57
  });
144
- await tryAutoMintBindingTokenAfterLogin({
145
- cwd: process.cwd(),
146
- sessionName,
147
- accessToken: tokens.access_token,
148
- skip: opts.skipMintKey === true,
149
- warnOnFailure: true,
150
- });
151
- await discardOauthAfterLogin({ session, config });
152
- try {
153
- const linkagePrompt = await buildLinkagePrompt({ config });
154
- if (linkagePrompt)
155
- console.log(linkagePrompt);
156
- }
157
- catch {
158
- }
159
58
  process.exit(0);
160
59
  }
161
60
  catch (err) {
@@ -163,21 +62,4 @@ export async function loginCommand(opts) {
163
62
  process.exit(1);
164
63
  }
165
64
  }
166
- async function runIdentityThenPicker(config, session, pickOpts) {
167
- console.log("Opening browser to identify your account (no org scope yet)...");
168
- let identity;
169
- try {
170
- identity = await login(config, session, undefined, { skipConfirm: true });
171
- }
172
- catch (err) {
173
- console.error("Login failed:", err instanceof Error ? err.message : err);
174
- process.exit(1);
175
- }
176
- try {
177
- return await pickOrg(config, identity.access_token, pickOpts);
178
- }
179
- catch (err) {
180
- console.error(err instanceof Error ? err.message : err);
181
- process.exit(1);
182
- }
183
- }
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, keychainDelete, keychainRead } from "@zivis/mcp/auth";
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
- const config = resolveConfigFromBinding(process.cwd());
7
- const st = credentialStorageFromConfig(config);
8
- const sessionName = opts.session ??
9
- detectProjectBinding(process.cwd())?.binding.session;
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(st);
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"}
@@ -1,16 +1,12 @@
1
1
  import { listSessions, removeSessionEntry, keychainClearSession } from "@zivis/mcp/auth";
2
- import { resolveConfigFromBinding } from "@zivis/mcp/project-binding";
3
- import { credentialStorageFromConfig } from "@zivis/mcp/types";
4
2
  export async function sessionsCommand(opts) {
5
- const config = resolveConfigFromBinding(process.cwd());
6
- const st = credentialStorageFromConfig(config);
7
3
  if (opts.remove) {
8
- await keychainClearSession(opts.remove, st);
9
- await removeSessionEntry(opts.remove, st);
4
+ await keychainClearSession(opts.remove);
5
+ await removeSessionEntry(opts.remove);
10
6
  console.log(`✓ Session "${opts.remove}" removed`);
11
7
  return;
12
8
  }
13
- const sessions = await listSessions(st);
9
+ const sessions = await listSessions();
14
10
  const activeSession = process.env.ZIVIS_SESSION;
15
11
  if (sessions.length === 0) {
16
12
  console.log("No sessions stored.");
@@ -31,3 +27,4 @@ export async function sessionsCommand(opts) {
31
27
  console.log("To use a session in a project, add to .mcp.json:");
32
28
  console.log(' "env": { "ZIVIS_SESSION": "<session-name>" }');
33
29
  }
30
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/commands/auth/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAMzF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAqB;IACzD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAEhD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;AAChE,CAAC"}
@@ -1,13 +1,12 @@
1
- import { resolveAuth, loadTokens, keychainRead } from "@zivis/mcp/auth";
2
- import { detectProjectBinding, resolveConfigFromBinding } from "@zivis/mcp/project-binding";
3
- import { DEFAULT_CONFIG, credentialStorageFromConfig } from "@zivis/mcp/types";
1
+ import { resolveAuth, loadTokens, getStorageName, keychainRead } from "@zivis/mcp/auth";
2
+ import { detectProjectBinding } from "@zivis/mcp/project-binding";
3
+ import { DEFAULT_CONFIG } from "@zivis/mcp/types";
4
4
  import { extractEmail } from "../../internal/orgs.js";
5
5
  export async function statusCommand(opts) {
6
- const config = { ...DEFAULT_CONFIG, ...resolveConfigFromBinding(process.cwd()) };
6
+ const config = DEFAULT_CONFIG;
7
7
  const detected = detectProjectBinding(process.cwd());
8
8
  const session = opts.session || config.session || detected?.binding.session;
9
9
  const resolveConfig = session ? { ...config, session } : config;
10
- const st = credentialStorageFromConfig(resolveConfig);
11
10
  if (session) {
12
11
  const source = opts.session
13
12
  ? "flag"
@@ -19,7 +18,7 @@ export async function statusCommand(opts) {
19
18
  const creds = await resolveAuth(resolveConfig);
20
19
  switch (creds.method) {
21
20
  case "oauth": {
22
- const tokens = await loadTokens(session, st);
21
+ const tokens = await loadTokens(session);
23
22
  const email = extractEmail(tokens?.id_token);
24
23
  console.log(`Auth: OAuth (${email})`);
25
24
  if (tokens) {
@@ -29,30 +28,11 @@ export async function statusCommand(opts) {
29
28
  break;
30
29
  }
31
30
  case "apikey": {
32
- const key = creds.apiKey ?? "";
33
- const masked = key.startsWith("sk_")
34
- ? `${key.slice(0, 10)}...${key.slice(-4)}`
31
+ const masked = creds.apiKey?.startsWith("sk_")
32
+ ? `sk_...${creds.apiKey.slice(-4)}`
35
33
  : "***";
36
- const sessionApiKeyAccount = session ? `apikey.${session}` : null;
37
- const isSessionKey = sessionApiKeyAccount
38
- ? !!(await keychainRead(sessionApiKeyAccount, st))
39
- : false;
40
- const isEnvKey = key === process.env.ZIVIS_API_KEY;
41
- const isGlobalKey = !isSessionKey && !isEnvKey && !!(await keychainRead("apikey", st));
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
- }
34
+ const source = (await keychainRead("apikey")) ? getStorageName() : "environment variable";
35
+ console.log(`Auth: API Key (${masked}) from ${source}`);
56
36
  break;
57
37
  }
58
38
  case "none":
@@ -60,15 +40,14 @@ export async function statusCommand(opts) {
60
40
  console.log("");
61
41
  if (session) {
62
42
  console.log(`Session "${session}" has no credentials.`);
63
- console.log(` Run in this repo: zivis auth bind`);
64
- console.log(` Or manually: zivis auth login --session ${session}`);
43
+ console.log(`Run: zivis auth login --session ${session}`);
65
44
  }
66
45
  else {
67
46
  console.log("To authenticate:");
68
- console.log(" zivis auth bind (recommended — mints a project-scoped token)");
69
- console.log(" zivis auth login (interactive OAuth for web access)");
47
+ console.log(" zivis auth login");
70
48
  }
71
49
  break;
72
50
  }
73
51
  console.log(`API: ${resolveConfig.apiBaseUrl}`);
74
52
  }
53
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ApiClient } from "@zivis/mcp/api-client";
2
- import { resolveConfigFromBinding } from "@zivis/mcp/project-binding";
2
+ import { DEFAULT_CONFIG } from "@zivis/mcp/types";
3
3
  function buildClient(opts) {
4
- const config = opts.session ? { ...resolveConfigFromBinding(process.cwd()), session: opts.session } : resolveConfigFromBinding(process.cwd());
4
+ const config = opts.session ? { ...DEFAULT_CONFIG, session: opts.session } : DEFAULT_CONFIG;
5
5
  return new ApiClient(config);
6
6
  }
7
7
  export function registerCreditsCommands(program) {
@@ -48,3 +48,4 @@ export function registerCreditsCommands(program) {
48
48
  }
49
49
  });
50
50
  }
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/credits/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,6 @@
1
- import * as path from "node:path";
2
- import * as readline from "node:readline/promises";
3
1
  import { startServer } from "@zivis/mcp/server";
4
2
  import { DEFAULT_CONFIG } from "@zivis/mcp/types";
5
- import { setupCursorWorkspace, setupVsCodeCopilot, setupVsCodeClaude, setupClaudeCodeCli, setupCline, setupWindsurf, printClaudeCodeManual, writeGuidance, } from "../../internal/ide-setup.js";
3
+ import { setupCursor, setupVsCodeCopilot, setupVsCodeClaude, setupClaudeCodeCli, setupCline, setupWindsurf, printClaudeCodeManual, } from "../../internal/ide-setup.js";
6
4
  const KNOWN_CLIENTS = [
7
5
  "cursor",
8
6
  "claude-code",
@@ -12,84 +10,50 @@ const KNOWN_CLIENTS = [
12
10
  "vscode-copilot",
13
11
  "vscode-claude",
14
12
  ];
15
- function toGuidanceClient(client) {
16
- switch (client) {
17
- case "cursor": return "cursor";
18
- case "claude-code-cli": return "claude-code-cli";
19
- case "vscode-copilot": return "vscode-copilot";
20
- case "vscode-claude": return "vscode-claude";
21
- case "cline": return "cline";
22
- case "windsurf": return "windsurf";
23
- default: return null;
24
- }
25
- }
26
- async function promptYesNo(question) {
27
- const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
28
- try {
29
- const answer = (await rl.question(question)).trim().toLowerCase();
30
- return answer !== "n" && answer !== "no";
31
- }
32
- finally {
33
- rl.close();
34
- }
35
- }
36
13
  export function registerMcpCommands(program) {
37
14
  const mcp = program.command("mcp").description("MCP server for IDE integration");
38
15
  mcp
39
16
  .command("serve")
40
17
  .description("start the stdio MCP server (called by your IDE, not directly)")
41
- .option("-w, --workspace <path>", "workspace root for project binding detection (auto-set by IDE config, do not pass manually)")
42
- .action(async (opts) => {
43
- const config = { ...DEFAULT_CONFIG };
44
- if (opts.workspace) {
45
- config.workspacePath = path.resolve(opts.workspace);
46
- }
47
- await startServer(config);
18
+ .action(async () => {
19
+ await startServer(DEFAULT_CONFIG);
48
20
  });
49
21
  mcp
50
22
  .command("install")
51
- .description("write MCP config for a supported IDE client (run from your project root)")
23
+ .description("write MCP config for a supported IDE client")
52
24
  .option("--client <name>", `target client (${KNOWN_CLIENTS.join(" | ")})`)
53
- .option("--package <name>", "which ZIVIS MCP package to register: 'builder' (default, @zivis/mcp-builder, citizen-dev surface) or 'appsec' (@zivis/mcp, DevSecOps surface)", "builder")
54
- .option("--with-guidance", "also write IDE guidance files so the AI knows when to suggest security checks (no prompt). Only applies to the appsec package; builder ships its own cadence block via zivis_setup.")
55
- .option("--no-guidance", "skip writing IDE guidance files (no prompt)")
25
+ .option("-s, --session <name>", "include ZIVIS_SESSION env var")
56
26
  .action(async (opts) => {
57
27
  const client = opts.client?.toLowerCase();
58
- const pkgArg = opts.package?.toLowerCase() ?? "builder";
28
+ const session = opts.session;
59
29
  if (!client) {
60
30
  console.error("Specify a client with --client <name>:");
61
31
  for (const c of KNOWN_CLIENTS)
62
32
  console.error(` zivis mcp install --client ${c}`);
63
33
  process.exit(1);
64
34
  }
65
- if (pkgArg !== "appsec" && pkgArg !== "builder") {
66
- console.error(`Unknown --package value: ${pkgArg}`);
67
- console.error("Supported: appsec, builder");
68
- process.exit(1);
69
- }
70
- const pkg = pkgArg;
71
35
  try {
72
36
  switch (client) {
73
37
  case "cursor":
74
- await setupCursorWorkspace(pkg);
38
+ await setupCursor(session);
75
39
  break;
76
40
  case "claude-code":
77
- printClaudeCodeManual(pkg);
41
+ printClaudeCodeManual(session);
78
42
  break;
79
43
  case "claude-code-cli":
80
- await setupClaudeCodeCli(pkg);
44
+ await setupClaudeCodeCli(session);
81
45
  break;
82
46
  case "cline":
83
- await setupCline(pkg);
47
+ await setupCline(session);
84
48
  break;
85
49
  case "windsurf":
86
- await setupWindsurf(pkg);
50
+ await setupWindsurf(session);
87
51
  break;
88
52
  case "vscode-copilot":
89
- await setupVsCodeCopilot(pkg);
53
+ await setupVsCodeCopilot(session);
90
54
  break;
91
55
  case "vscode-claude":
92
- await setupVsCodeClaude(pkg);
56
+ await setupVsCodeClaude(session);
93
57
  break;
94
58
  default:
95
59
  console.error(`Unknown client: ${client}`);
@@ -101,37 +65,6 @@ export function registerMcpCommands(program) {
101
65
  console.error("Install failed:", err instanceof Error ? err.message : err);
102
66
  process.exit(1);
103
67
  }
104
- if (client === "claude-code")
105
- return;
106
- if (pkg === "builder")
107
- return;
108
- const guidanceClient = toGuidanceClient(client);
109
- if (!guidanceClient)
110
- return;
111
- let shouldWrite;
112
- if (opts.withGuidance) {
113
- shouldWrite = true;
114
- }
115
- else if (opts.guidance === false) {
116
- shouldWrite = false;
117
- }
118
- else {
119
- console.log("");
120
- shouldWrite = await promptYesNo("Write ZIVIS guidance files so your IDE knows when to suggest security checks?\n" +
121
- "(Adds a rule/instruction file to the project. You can edit or remove it anytime.) [Y/n] ");
122
- }
123
- if (shouldWrite) {
124
- try {
125
- const files = writeGuidance({ cwd: process.cwd(), client: guidanceClient });
126
- if (files.length > 0) {
127
- console.log(`✓ Wrote guidance files:`);
128
- for (const f of files)
129
- console.log(` ${f}`);
130
- }
131
- }
132
- catch (err) {
133
- console.warn(` Warning: Could not write guidance files: ${err instanceof Error ? err.message : err}`);
134
- }
135
- }
136
68
  });
137
69
  }
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,10 @@
1
+ /**
2
+ * `zivis open` — Build and (by default) launch a vscode:// or cursor:// deep link
3
+ * that opens a ZIVIS artifact in the ZIVIS Code IDE extension. Use `--ide cursor`
4
+ * for Cursor. With --print, emit the URI to stdout for piping/sharing.
5
+ *
6
+ * Mirrors the URI shape emitted by the `zivis_open_in_ide` MCP tool and the
7
+ * web app's buildIdeLink() helper. See docs/platform/integrations/IDE-DEEP-LINKS.md.
8
+ */
1
9
  import type { Command } from "commander";
2
10
  export declare function registerOpenCommands(program: Command): void;
@@ -1,3 +1,11 @@
1
+ /**
2
+ * `zivis open` — Build and (by default) launch a vscode:// or cursor:// deep link
3
+ * that opens a ZIVIS artifact in the ZIVIS Code IDE extension. Use `--ide cursor`
4
+ * for Cursor. With --print, emit the URI to stdout for piping/sharing.
5
+ *
6
+ * Mirrors the URI shape emitted by the `zivis_open_in_ide` MCP tool and the
7
+ * web app's buildIdeLink() helper. See docs/platform/integrations/IDE-DEEP-LINKS.md.
8
+ */
1
9
  const KINDS = ["diagram", "document", "threat-model"];
2
10
  export function registerOpenCommands(program) {
3
11
  program
@@ -39,8 +47,11 @@ export function registerOpenCommands(program) {
39
47
  console.log(uri);
40
48
  return;
41
49
  }
50
+ // Lazy-import `open` so --print stays dependency-free in environments
51
+ // (e.g. headless CI) where launching a URL handler would fail or hang.
42
52
  const { default: open } = await import("open");
43
53
  await open(uri);
44
54
  console.log(uri);
45
55
  });
46
56
  }
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/open/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { ApiClient } from "@zivis/mcp/api-client";
2
- import { resolveConfigFromBinding } from "@zivis/mcp/project-binding";
2
+ import { DEFAULT_CONFIG } from "@zivis/mcp/types";
3
3
  const VALID_TARGET_TYPES = ["ai_chat", "web_app", "api"];
4
4
  function buildClient(opts) {
5
- const config = opts.session ? { ...resolveConfigFromBinding(process.cwd()), session: opts.session } : resolveConfigFromBinding(process.cwd());
5
+ const config = opts.session ? { ...DEFAULT_CONFIG, session: opts.session } : DEFAULT_CONFIG;
6
6
  return new ApiClient(config);
7
7
  }
8
8
  export function registerScanCommands(program) {
@@ -118,6 +118,11 @@ export function registerScanCommands(program) {
118
118
  }
119
119
  });
120
120
  }
121
+ /**
122
+ * Map customer-facing ApplicationType to the RT scan's targetType enum.
123
+ * The two enums differ historically: ApplicationType is product-shape,
124
+ * targetType is what the RT runner needs to know about the wire format.
125
+ */
121
126
  function appTypeToTargetType(appType) {
122
127
  switch (appType) {
123
128
  case "agent":
@@ -126,10 +131,10 @@ function appTypeToTargetType(appType) {
126
131
  return "ai_chat";
127
132
  case "rest_api":
128
133
  return "api";
129
- case "application":
130
134
  case "ad_hoc_url":
131
135
  return "web_app";
132
136
  default:
133
137
  return undefined;
134
138
  }
135
139
  }
140
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/scan/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAU,CAAC;AAElE,SAAS,WAAW,CAAC,IAA0B;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAC5F,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;IAEjF,IAAI;SACD,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,6EAA6E,CAAC;SAC1F,MAAM,CAAC,sBAAsB,EAAE,eAAe,CAAC;SAC/C,MAAM,CAAC,uBAAuB,EAAE,qDAAqD,CAAC;SACtF,MAAM,CAAC,mBAAmB,EAAE,6CAA6C,CAAC;SAC1E,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;SAC9E,MAAM,CAAC,mBAAmB,EAAE,6DAA6D,CAAC;SAC1F,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,mBAAmB,EAAE,+DAA+D,CAAC;SAC5F,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;SAC3E,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,GAAG,CAAC;SAC9C,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAyB,CAAC;QAC/C,IAAI,UAAU,GAAG,IAAI,CAAC,IAA0B,CAAC;QACjD,IAAI,OAA2B,CAAC;QAEhC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAK7B,KAAK,EAAE,qBAAqB,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC3E,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,UAAU,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAiB,CAAC,EAAE,CAAC;YACnE,OAAO,CAAC,KAAK,CAAC,0BAA0B,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;aAC1C,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ;YAC/B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACvE,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAC,KAAK,CACX,qEAAqE,CACtE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YAC7D,SAAS;YACT,UAAU;YACV,SAAS;YACT,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC;SAC3C,CAAC;QACF,IAAI,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAChD,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;QAElE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,MAAM,EACN,eAAe,EACf,IAAI,CACL,CAAC;YACF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACvE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,sBAAsB,EAAE,eAAe,CAAC;SAC/C,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;SACxD,MAAM,CAAC,mBAAmB,EAAE,qDAAqD,CAAC;SAClF,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC;SACvC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,iBAAiB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,KAAK,EACL,IAAI,CACL,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,CAAC,SAAS;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,cAAc,CAAC;QACpB,KAAK,YAAY;YACf,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,KAAK,CAAC;QACf,KAAK,YAAY;YACf,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}