@cybedefend/vibedefend 1.3.2 → 1.4.0

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 (39) hide show
  1. package/README.md +32 -5
  2. package/dist/api/projects.js +158 -0
  3. package/dist/api/projects.js.map +1 -0
  4. package/dist/config.js +2 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/custom-regions.js +5 -0
  7. package/dist/custom-regions.js.map +1 -1
  8. package/dist/endpoints.js +59 -0
  9. package/dist/endpoints.js.map +1 -0
  10. package/dist/git.js +103 -0
  11. package/dist/git.js.map +1 -0
  12. package/dist/hook-runner.js +548 -277
  13. package/dist/hooks/runtime/fetch-rules.js +5 -3
  14. package/dist/hooks/runtime/fetch-rules.js.map +1 -1
  15. package/dist/hooks/runtime/judge-injection.js +65 -0
  16. package/dist/hooks/runtime/judge-injection.js.map +1 -0
  17. package/dist/hooks/runtime/repo-link-cache.js +116 -0
  18. package/dist/hooks/runtime/repo-link-cache.js.map +1 -0
  19. package/dist/hooks/runtime/resolve.js +79 -0
  20. package/dist/hooks/runtime/resolve.js.map +1 -1
  21. package/dist/hooks/runtime/session-start.js +5 -3
  22. package/dist/hooks/runtime/session-start.js.map +1 -1
  23. package/dist/hooks/runtime/user-prompt-submit.js +10 -7
  24. package/dist/hooks/runtime/user-prompt-submit.js.map +1 -1
  25. package/dist/index.js +40 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/install.js +142 -88
  28. package/dist/install.js.map +1 -1
  29. package/dist/link.js +325 -0
  30. package/dist/link.js.map +1 -0
  31. package/dist/login.js +2 -23
  32. package/dist/login.js.map +1 -1
  33. package/dist/logout.js +87 -0
  34. package/dist/logout.js.map +1 -0
  35. package/dist/org-gate.js +110 -0
  36. package/dist/org-gate.js.map +1 -0
  37. package/dist/prompts.js +5 -7
  38. package/dist/prompts.js.map +1 -1
  39. package/package.json +1 -1
package/dist/install.js CHANGED
@@ -1,32 +1,45 @@
1
+ import { confirm as confirmImpl } from '@inquirer/prompts';
1
2
  import kleur from 'kleur';
2
3
  import { adapterFor } from './clients/registry.js';
3
4
  import { checkPlatformSupport } from './clients/claude-code.js';
5
+ import { deriveDashboardUrl, deriveLogtoEndpoint } from './endpoints.js';
4
6
  import { installHookRuntime } from './hooks/install.js';
5
- import { runLogin } from './login.js';
6
- import { hasStoredAuth } from './auth/auth.js';
7
- import { runInstallPrompts } from './prompts.js';
7
+ import { runLogin as runLoginImpl } from './login.js';
8
+ import { hasStoredAuth as hasStoredAuthImpl } from './auth/auth.js';
9
+ import { ensureOrganization as ensureOrganizationImpl } from './org-gate.js';
10
+ import { askClientSelection as askClientSelectionImpl, askHookConfig as askHookConfigImpl, askRegion as askRegionImpl, } from './prompts.js';
8
11
  import { stampInstalledVersion } from './self-update.js';
9
- import { detectPlatform, home, log } from './utils.js';
12
+ import { detectPlatform, home, isUserCancellation, log } from './utils.js';
10
13
  import { pkg } from './version.js';
11
14
  /**
12
15
  * Top-level installer.
13
16
  *
14
- * Flow:
17
+ * Flow (login-first, spec §2.3):
15
18
  * 1. Banner + platform sanity check (Windows hooks unsupported)
16
19
  * 2. Region pick (Production EU / US)
17
- * 3. Multi-select: which agents to wire hooks into?
18
- * - shows detection result + version for each
19
- * - pre-checks supported clients, disables too-old versions
20
- * 4. Hook config (threshold, auto-propose)
21
- * 5. For each selected adapter:
22
- * - (optional) registerMcp — only Claude Code currently
23
- * - writeSettings — drop hook entries into its config file
24
- * 6. Write the universal hook scripts to ~/.cybedefend/hooks/
25
- * (one set serves all adapters)
26
- * 7. Stamp ~/.cybedefend/version (auto-update plumbing)
27
- * 8. Print next-steps footer
20
+ * 3. LOGIN — immediately after the region: skip if credentials are already
21
+ * stored; else run the browser PKCE flow. On failure, offer exactly ONE
22
+ * retry, then abort with exit code 1 (everything after this point needs
23
+ * an authenticated user).
24
+ * 4. ORGANIZATION GATE — the account must belong to ≥1 organization to be
25
+ * useful. If it doesn't, open the dashboard on-boarding page and wait
26
+ * (poll). Ctrl-C / timeout skips with a warning; install continues.
27
+ * 5. Multi-select: which agents to wire hooks into?
28
+ * 6. Hook config (threshold, auto-propose)
29
+ * 7. For each selected adapter: registerMcp + writeSettings
30
+ * 8. Write the universal hook runner to ~/.cybedefend/
31
+ * 9. Stamp ~/.cybedefend/version (auto-update plumbing)
32
+ * 10. Print next-steps footer
28
33
  */
29
- export async function runInstall() {
34
+ export async function runInstall(deps = {}, opts = {}) {
35
+ const askRegion = deps.askRegion ?? askRegionImpl;
36
+ const hasStoredAuth = deps.hasStoredAuth ?? hasStoredAuthImpl;
37
+ const runLogin = deps.runLogin ?? runLoginImpl;
38
+ const ensureOrganization = deps.ensureOrganization ?? ensureOrganizationImpl;
39
+ const askClientSelection = deps.askClientSelection ?? askClientSelectionImpl;
40
+ const askHookConfig = deps.askHookConfig ?? askHookConfigImpl;
41
+ const confirm = deps.confirm ?? confirmImpl;
42
+ const exit = deps.exit ?? ((code) => process.exit(code));
30
43
  banner();
31
44
  const p = detectPlatform();
32
45
  const platformSupport = checkPlatformSupport();
@@ -34,22 +47,72 @@ export async function runInstall() {
34
47
  if (!platformSupport.hooksSupported) {
35
48
  log.warn(platformSupport.reason ?? 'Hooks unsupported on this platform.');
36
49
  }
37
- const selection = await runInstallPrompts();
38
- log.step('Region selected: ' + kleur.bold(selection.region.label));
39
- log.hint(`MCP URL: ${selection.region.mcpUrl}`);
40
- log.hint(`API base: ${selection.region.apiBase}`);
41
- if (selection.selectedClients.length === 0) {
50
+ // ── ① Region ────────────────────────────────────────────────────────────────
51
+ const region = await askRegion();
52
+ log.step('Region selected: ' + kleur.bold(region.label));
53
+ log.hint(`MCP URL: ${region.mcpUrl}`);
54
+ log.hint(`API base: ${region.apiBase}`);
55
+ // ── ② Login (before anything else touches the gateway) ─────────────────────
56
+ //
57
+ // Why first? Everything downstream — the organization gate, project
58
+ // auto-resolution from the git origin, the hooks' very first rules fetch —
59
+ // needs a signed-in user. Failing login late (the pre-1.4 flow logged in
60
+ // AFTER wiring hooks) left half-installed setups behind.
61
+ //
62
+ // We check `hasStoredAuth` (which validates OUR specific bundle shape:
63
+ // accessToken + refreshToken + expiresAt + logtoEndpoint + cliAppId +
64
+ // logtoResource) rather than the legacy `resolveToken` resolver. The legacy
65
+ // resolver also matches Codex CLI's own MCP credential (stored under the
66
+ // same keychain service `Codex MCP Credentials` but with a different account
67
+ // shape), which would falsely tell us "already configured" even though our
68
+ // hook can't actually use Codex's MCP-scoped JWT to call the gateway.
69
+ const logtoEndpoint = region.logtoEndpoint ??
70
+ deriveLogtoEndpoint(region.apiBase);
71
+ if (hasStoredAuth(region.mcpName) && !opts.force) {
72
+ log.ok('VibeDefend credentials already present. Skipping login.');
73
+ }
74
+ else {
75
+ log.step('Sign in to CybeDefend');
76
+ log.hint('Your browser will open for a one-time sign-in (instant if you already have a session).');
77
+ // Force the actual OAuth here. We only reach this branch when VibeDefend
78
+ // has NO stored bundle of its OWN (hasStoredAuth === false), or the user
79
+ // asked for it (--force). A token that merely belongs to a coding agent —
80
+ // which `runLogin`'s internal `resolveToken` check would match and use to
81
+ // short-circuit — must NOT skip the browser step: otherwise `logout` +
82
+ // `install` silently signs you back in whenever Claude Code / Codex still
83
+ // hold an MCP token, and the org-gate never gets a fresh VibeDefend token.
84
+ const loginOk = await loginWithOneRetry({
85
+ mcpName: region.mcpName,
86
+ apiBase: region.apiBase,
87
+ logtoEndpoint,
88
+ force: true,
89
+ }, runLogin, confirm);
90
+ if (!loginOk) {
91
+ log.err('VibeDefend needs a signed-in CybeDefend account to install. ' +
92
+ 'Run `vibedefend install` again when you are ready to sign in.');
93
+ exit(1);
94
+ return; // In tests `exit` is a spy — never continue past an abort.
95
+ }
96
+ }
97
+ // ── ③ Organization gate ─────────────────────────────────────────────────────
98
+ // An account without an organization can't hold projects, rules, or scans.
99
+ // The gate nudges the user through dashboard onboarding but NEVER blocks:
100
+ // Ctrl-C / timeout / gateway-unreachable all continue with a warning.
101
+ await ensureOrganization({
102
+ apiBase: region.apiBase,
103
+ dashboardUrl: deriveDashboardUrl(region),
104
+ mcpName: region.mcpName,
105
+ });
106
+ // ── ④ Agents + hook config ──────────────────────────────────────────────────
107
+ const selectedClients = await askClientSelection();
108
+ if (selectedClients.length === 0) {
42
109
  log.info('No agents selected. The MCP URL is printed above — add it to your client manually if needed. ' +
43
110
  'The doctrine arrives via Server.instructions on every supported client.');
44
111
  stampInstalledVersion(home, pkg.version);
45
- printDoneFooter([], selection.region.mcpName);
112
+ printDoneFooter([], region);
46
113
  return;
47
114
  }
48
- if (!selection.hooks) {
49
- // Shouldn't happen — prompts guarantees hooks when selection > 0.
50
- log.err('Hook config missing despite selected agents — aborting.');
51
- process.exit(1);
52
- }
115
+ const hooks = await askHookConfig();
53
116
  // Install the Node-based hook runner ONCE — one bundled file serves
54
117
  // every adapter. The runner reads runtime-config.json at every
55
118
  // invocation, so re-running `vibedefend update` propagates new
@@ -58,8 +121,8 @@ export async function runInstall() {
58
121
  if (platformSupport.hooksSupported) {
59
122
  log.step('Installing universal hook runner');
60
123
  const { runnerPath, configPath } = installHookRuntime({
61
- region: selection.region,
62
- hooks: selection.hooks,
124
+ region,
125
+ hooks,
63
126
  installedVersion: pkg.version,
64
127
  });
65
128
  log.ok(`Runner: ${runnerPath}`);
@@ -71,14 +134,14 @@ export async function runInstall() {
71
134
  // Now wire each selected client's settings file. Adapters are
72
135
  // responsible for their own idempotency + error handling.
73
136
  const installedLabels = [];
74
- for (const id of selection.selectedClients) {
137
+ for (const id of selectedClients) {
75
138
  const adapter = adapterFor(id);
76
139
  log.step(`Wiring ${adapter.label}`);
77
140
  if (adapter.registerMcp) {
78
- adapter.registerMcp({ region: selection.region });
141
+ adapter.registerMcp({ region });
79
142
  }
80
143
  if (adapter.postRegister) {
81
- adapter.postRegister({ region: selection.region });
144
+ adapter.postRegister({ region });
82
145
  }
83
146
  if (platformSupport.hooksSupported) {
84
147
  adapter.writeSettings({
@@ -86,70 +149,59 @@ export async function runInstall() {
86
149
  // `~/.cybedefend/hook-runner.js`. Adapters compose `node <path>
87
150
  // <subcommand>` via `hookCommand(...)` and ignore this field.
88
151
  hookDir: home('.cybedefend'),
89
- enableSessionReview: selection.hooks.enableSessionReview,
90
- region: selection.region,
91
- hooks: selection.hooks,
152
+ enableSessionReview: hooks.enableSessionReview,
153
+ region,
154
+ hooks,
92
155
  });
93
156
  }
94
157
  installedLabels.push(adapter.label);
95
158
  }
96
- if (selection.hooks.autoProposeMode) {
159
+ if (hooks.autoProposeMode) {
97
160
  log.warn('Auto-propose mode is ON — the agent will call cybe_rules_report_missing ' +
98
161
  'without asking you first. You will still review proposals at the next session ' +
99
162
  'start (Accept/Reject picker), but they land without a chat-side prompt.');
100
163
  }
101
164
  stampInstalledVersion(home, pkg.version);
102
165
  log.hint(`Version stamp: ~/.cybedefend/version (v${pkg.version})`);
103
- // Auto-login: if no VibeDefend OAuth bundle exists after hook wiring, run
104
- // the login flow so the user is fully set up in one command. If login fails,
105
- // log a warning and continue — the user can run `vibedefend login` later.
106
- //
107
- // We check `hasStoredAuth` (which validates OUR specific bundle shape:
108
- // accessToken + refreshToken + expiresAt + logtoEndpoint + cliAppId +
109
- // logtoResource) rather than the legacy `resolveToken` resolver. The legacy
110
- // resolver also matches Codex CLI's own MCP credential (stored under the
111
- // same keychain service `Codex MCP Credentials` but with a different account
112
- // shape), which would falsely tell us "already configured" even though our
113
- // hook can't actually use Codex's MCP-scoped JWT to call the gateway.
114
- //
115
- // Note for users who already have Codex set up: yes, you'll see the login
116
- // flow once. Codex's MCP-scoped token has `aud: cybedefend-mcp` and limited
117
- // Permify rights; vibedefend's runtime hook needs a USER token (`aud:
118
- // cybedefend-api`) to call /effective-rules and friends. They are NOT
119
- // interchangeable. After one Logto SSO consent (instant if your browser
120
- // already has a session) the refresh_token persists for 14 days.
121
- if (hasStoredAuth(selection.region.mcpName)) {
122
- log.ok('VibeDefend credentials already present. Skipping login.');
123
- }
124
- else {
125
- log.info('No VibeDefend credentials found. Running login flow...');
126
- try {
127
- await runLogin({
128
- mcpName: selection.region.mcpName,
129
- apiBase: selection.region.apiBase,
130
- logtoEndpoint: selection.region.logtoEndpoint ??
131
- deriveLogtoEndpoint(selection.region.apiBase),
132
- });
133
- }
134
- catch (e) {
135
- const msg = e instanceof Error ? e.message : String(e);
136
- log.warn(`Login skipped (${msg}). Run \`vibedefend login\` to authenticate.`);
137
- }
138
- }
139
- printDoneFooter(installedLabels, selection.region.mcpName);
166
+ // NOTE: the pre-1.4 end-of-install auto-login used to live here. Login now
167
+ // happens FIRST (step ② above) — by this point the user is guaranteed to be
168
+ // authenticated, so there is nothing left to do.
169
+ printDoneFooter(installedLabels, region);
140
170
  }
141
171
  /**
142
- * Derive the Logto OIDC endpoint from a gateway apiBase.
143
- * Mirrors the logic in login.ts#deriveLogtoEndpointFromApiBase.
172
+ * Run the login flow with exactly one confirm-gated retry.
173
+ * Returns true when a login attempt succeeded, false when the user declined
174
+ * the retry or the retry also failed. A Ctrl-C inside the confirm prompt
175
+ * propagates up (handled as a clean cancel by the CLI action wrapper).
144
176
  */
145
- function deriveLogtoEndpoint(apiBase) {
146
- if (apiBase.includes('://api.')) {
147
- return apiBase.replace('://api.', '://auth.');
177
+ async function loginWithOneRetry(loginOpts, runLogin, confirm) {
178
+ try {
179
+ await runLogin(loginOpts);
180
+ return true;
181
+ }
182
+ catch (e) {
183
+ if (isUserCancellation(e))
184
+ throw e;
185
+ const msg = e instanceof Error ? e.message : String(e);
186
+ log.warn(`Sign-in failed: ${msg}`);
187
+ }
188
+ const retry = await confirm({
189
+ message: 'Try signing in again?',
190
+ default: true,
191
+ });
192
+ if (!retry)
193
+ return false;
194
+ try {
195
+ await runLogin(loginOpts);
196
+ return true;
148
197
  }
149
- if (apiBase.match(/\/\/api-[a-z]+\./)) {
150
- return apiBase.replace('://api-', '://auth-');
198
+ catch (e) {
199
+ if (isUserCancellation(e))
200
+ throw e;
201
+ const msg = e instanceof Error ? e.message : String(e);
202
+ log.warn(`Sign-in failed again: ${msg}`);
203
+ return false;
151
204
  }
152
- return apiBase;
153
205
  }
154
206
  function banner() {
155
207
  console.log();
@@ -158,7 +210,7 @@ function banner() {
158
210
  console.log(kleur.dim(' Sets up the MCP server, hooks, and project link.'));
159
211
  console.log();
160
212
  }
161
- function printDoneFooter(installedLabels, mcpName) {
213
+ function printDoneFooter(installedLabels, region) {
162
214
  console.log();
163
215
  log.ok('Install complete.');
164
216
  console.log();
@@ -168,11 +220,13 @@ function printDoneFooter(installedLabels, mcpName) {
168
220
  console.log();
169
221
  }
170
222
  console.log(kleur.bold('Next steps:'));
171
- console.log(` ${kleur.cyan('1.')} Open your IDE in your repo. First MCP tool call triggers OAuth (browser opens). ` +
172
- `Tokens are cached in your OS keychain after that.`);
173
- console.log(` ${kleur.cyan('2.')} Drop a ${kleur.bold('.cybedefend/config.json')} at the repo root with the project UUID:`);
174
- console.log(kleur.dim(' { "projectId": "<your-project-uuid>" }'));
175
- console.log(` ${kleur.cyan('3.')} Verify (Claude Code): ${kleur.dim('`claude mcp list`')} should show ${kleur.bold(mcpName)}.`);
223
+ console.log(` ${kleur.cyan('1.')} Open your IDE in your repo — you are already signed in, so the MCP tools work right away.`);
224
+ console.log(` ${kleur.cyan('2.')} Repos imported from GitHub/GitLab are matched to their CybeDefend project ` +
225
+ `automatically via the git origin — nothing to do.`);
226
+ console.log(` ${kleur.cyan('3.')} For any other repo, link it once: ${kleur.dim('`vibedefend link`')} ` +
227
+ `(or ${kleur.dim('`npx -y @cybedefend/vibedefend@latest link`')}).`);
228
+ console.log(kleur.dim(' A `.cybedefend/config.json` with { "projectId": "<uuid>" } remains a supported override.'));
229
+ console.log(` ${kleur.cyan('4.')} Verify (Claude Code): ${kleur.dim('`claude mcp list`')} should show ${kleur.bold(region.mcpName)}.`);
176
230
  console.log();
177
231
  console.log(kleur.dim(' Tunables (set per-shell or per-project to override defaults):'));
178
232
  console.log(kleur.dim(' CYBEDEFEND_REVIEW_THRESHOLD — edits before the Stop hook fires'));
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EACL,kBAAkB,IAAI,sBAAsB,EAC5C,aAAa,IAAI,iBAAiB,EAClC,SAAS,IAAI,aAAa,GAE3B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAqCnC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAoB,EAAE,EACtB,OAA4B,EAAE;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,iBAAiB,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;IAC/C,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,sBAAsB,CAAC;IAC7E,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,sBAAsB,CAAC;IAC7E,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,iBAAiB,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,MAAM,EAAE,CAAC;IAET,MAAM,CAAC,GAAG,cAAc,EAAE,CAAC;IAC3B,MAAM,eAAe,GAAG,oBAAoB,EAAE,CAAC;IAE/C,GAAG,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,qCAAqC,CAAC,CAAC;IAC5E,CAAC;IAED,+EAA+E;IAC/E,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAEjC,GAAG,CAAC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAExC,8EAA8E;IAC9E,EAAE;IACF,oEAAoE;IACpE,2EAA2E;IAC3E,yEAAyE;IACzE,yDAAyD;IACzD,EAAE;IACF,uEAAuE;IACvE,sEAAsE;IACtE,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,aAAa,GAChB,MAAqC,CAAC,aAAa;QACpD,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEtC,IAAI,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjD,GAAG,CAAC,EAAE,CAAC,yDAAyD,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAClC,GAAG,CAAC,IAAI,CACN,wFAAwF,CACzF,CAAC;QACF,yEAAyE;QACzE,yEAAyE;QACzE,0EAA0E;QAC1E,0EAA0E;QAC1E,uEAAuE;QACvE,0EAA0E;QAC1E,2EAA2E;QAC3E,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACrC;YACE,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,aAAa;YACb,KAAK,EAAE,IAAI;SACZ,EACD,QAAQ,EACR,OAAO,CACR,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CACL,8DAA8D;gBAC5D,+DAA+D,CAClE,CAAC;YACF,IAAI,CAAC,CAAC,CAAC,CAAC;YACR,OAAO,CAAC,2DAA2D;QACrE,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,2EAA2E;IAC3E,0EAA0E;IAC1E,sEAAsE;IACtE,MAAM,kBAAkB,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC;QACxC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IAEH,+EAA+E;IAC/E,MAAM,eAAe,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEnD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,CACN,+FAA+F;YAC7F,yEAAyE,CAC5E,CAAC;QACF,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;IAEpC,oEAAoE;IACpE,+DAA+D;IAC/D,+DAA+D;IAC/D,kEAAkE;IAClE,oEAAoE;IACpE,IAAI,eAAe,CAAC,cAAc,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC7C,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC;YACpD,MAAM;YACN,KAAK;YACL,gBAAgB,EAAE,GAAG,CAAC,OAAO;SAC9B,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CACN,wFAAwF,CACzF,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,0DAA0D;IAC1D,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,eAAe,CAAC,cAAc,EAAE,CAAC;YACnC,OAAO,CAAC,aAAa,CAAC;gBACpB,uDAAuD;gBACvD,gEAAgE;gBAChE,8DAA8D;gBAC9D,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;gBAC5B,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;gBAC9C,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CACN,0EAA0E;YACxE,gFAAgF;YAChF,yEAAyE,CAC5E,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,IAAI,CAAC,0CAA0C,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;IAEnE,2EAA2E;IAC3E,4EAA4E;IAC5E,iDAAiD;IAEjD,eAAe,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,iBAAiB,CAC9B,SAKC,EACD,QAA8C,EAC9C,OAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,kBAAkB,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;QAC1B,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,kBAAkB,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,MAAM;IACb,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAC3D,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAChE,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,eAAyB,EAAE,MAAoB;IACtE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACjC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACxD,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4FAA4F,CAClH,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6EAA6E;QAChG,mDAAmD,CACtD,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG;QAC1F,OAAO,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,IAAI,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,+FAA+F,CAChG,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAC3H,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAC7E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CACjF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CACvE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CACjF,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}