@ritualai/cli 0.7.3 → 0.7.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 (68) hide show
  1. package/README.md +36 -1
  2. package/dist/commands/init.js +174 -43
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/commands/login.js +120 -13
  5. package/dist/commands/login.js.map +1 -1
  6. package/dist/commands/logout.js +55 -8
  7. package/dist/commands/logout.js.map +1 -1
  8. package/dist/index.js +8 -66
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/auth-flow.js +1 -1
  11. package/dist/lib/auth-flow.js.map +1 -1
  12. package/dist/lib/colors.js +182 -0
  13. package/dist/lib/colors.js.map +1 -0
  14. package/dist/lib/config.js +30 -17
  15. package/dist/lib/config.js.map +1 -1
  16. package/dist/lib/credentials-backup.js +282 -0
  17. package/dist/lib/credentials-backup.js.map +1 -0
  18. package/dist/lib/identity-banner.js +88 -0
  19. package/dist/lib/identity-banner.js.map +1 -0
  20. package/dist/lib/oidc.js +55 -0
  21. package/dist/lib/oidc.js.map +1 -1
  22. package/dist/lib/package-info.js +76 -0
  23. package/dist/lib/package-info.js.map +1 -0
  24. package/dist/lib/welcome-banner.js +290 -0
  25. package/dist/lib/welcome-banner.js.map +1 -0
  26. package/package.json +1 -1
  27. package/skills/claude-code/ritual/agents/openai.yaml +2 -2
  28. package/skills/claude-code/ritual/manifest.json +57 -0
  29. package/skills/claude-code/ritual/references/build-flow.md +174 -105
  30. package/skills/claude-code/ritual/references/cli-output-contract.md +89 -0
  31. package/skills/claude-code/ritual/references/context-pulse-flow.md +1 -1
  32. package/skills/claude-code/ritual/references/lineage-flow.md +7 -6
  33. package/skills/claude-code/ritual/references/resume-flow.md +4 -4
  34. package/skills/codex/ritual/agents/openai.yaml +2 -2
  35. package/skills/codex/ritual/manifest.json +57 -0
  36. package/skills/codex/ritual/references/build-flow.md +174 -105
  37. package/skills/codex/ritual/references/cli-output-contract.md +89 -0
  38. package/skills/codex/ritual/references/context-pulse-flow.md +1 -1
  39. package/skills/codex/ritual/references/lineage-flow.md +7 -6
  40. package/skills/codex/ritual/references/resume-flow.md +4 -4
  41. package/skills/cursor/ritual/agents/openai.yaml +2 -2
  42. package/skills/cursor/ritual/manifest.json +57 -0
  43. package/skills/cursor/ritual/references/build-flow.md +174 -105
  44. package/skills/cursor/ritual/references/cli-output-contract.md +89 -0
  45. package/skills/cursor/ritual/references/context-pulse-flow.md +1 -1
  46. package/skills/cursor/ritual/references/lineage-flow.md +7 -6
  47. package/skills/cursor/ritual/references/resume-flow.md +4 -4
  48. package/skills/gemini/ritual/agents/openai.yaml +2 -2
  49. package/skills/gemini/ritual/manifest.json +57 -0
  50. package/skills/gemini/ritual/references/build-flow.md +174 -105
  51. package/skills/gemini/ritual/references/cli-output-contract.md +89 -0
  52. package/skills/gemini/ritual/references/context-pulse-flow.md +1 -1
  53. package/skills/gemini/ritual/references/lineage-flow.md +7 -6
  54. package/skills/gemini/ritual/references/resume-flow.md +4 -4
  55. package/skills/kiro/ritual/agents/openai.yaml +2 -2
  56. package/skills/kiro/ritual/manifest.json +57 -0
  57. package/skills/kiro/ritual/references/build-flow.md +174 -105
  58. package/skills/kiro/ritual/references/cli-output-contract.md +89 -0
  59. package/skills/kiro/ritual/references/context-pulse-flow.md +1 -1
  60. package/skills/kiro/ritual/references/lineage-flow.md +7 -6
  61. package/skills/kiro/ritual/references/resume-flow.md +4 -4
  62. package/skills/vscode/ritual/agents/openai.yaml +2 -2
  63. package/skills/vscode/ritual/manifest.json +57 -0
  64. package/skills/vscode/ritual/references/build-flow.md +174 -105
  65. package/skills/vscode/ritual/references/cli-output-contract.md +89 -0
  66. package/skills/vscode/ritual/references/context-pulse-flow.md +1 -1
  67. package/skills/vscode/ritual/references/lineage-flow.md +7 -6
  68. package/skills/vscode/ritual/references/resume-flow.md +4 -4
package/README.md CHANGED
@@ -101,8 +101,11 @@ via the agent's MCP client talking to Ritual Cloud.
101
101
 
102
102
  ```bash
103
103
  ritual init [--agent <id>] [--list] # scaffold + register (signs in if needed)
104
+ ritual init --switch-account # force a fresh sign-in as a different account
104
105
  ritual login # explicit browser sign-in
105
- ritual logout # clear creds
106
+ ritual login --switch-account # same switch behavior, without the full init flow
107
+ ritual logout # clear local creds
108
+ ritual logout --all # also end the Keycloak browser SSO session
106
109
  ritual whoami # session info, auto-refresh
107
110
  ritual refresh # force token refresh
108
111
  ritual doctor # env + detection report
@@ -113,6 +116,38 @@ The agent ids are: `claude-code`, `cursor`, `windsurf`, `kiro`,
113
116
  for a specific one without auto-detecting (handy when you've got the
114
117
  agent installed somewhere non-standard).
115
118
 
119
+ ## Switching accounts
120
+
121
+ Most users have one Ritual account and never think about this. If you
122
+ need to switch (work vs personal, testing a different tenant, etc.):
123
+
124
+ ```bash
125
+ ritual init --switch-account
126
+ ```
127
+
128
+ This is atomic — your existing local credentials are backed up, the
129
+ browser is opened with OIDC `prompt=login` (so Keycloak shows its
130
+ sign-in form even if its SSO cookie says you're already signed in as
131
+ someone else), and on any failure your previous session is restored.
132
+ No incognito window needed.
133
+
134
+ In CI / non-interactive use, pass `--yes` to bypass the confirmation:
135
+
136
+ ```bash
137
+ ritual init --switch-account --yes
138
+ ```
139
+
140
+ To also end your Keycloak browser SSO session (so the next sign-in
141
+ from anywhere on this machine shows the sign-in form):
142
+
143
+ ```bash
144
+ ritual logout --all
145
+ ```
146
+
147
+ This does NOT revoke minted Personal Access Tokens, agent MCP
148
+ registrations, or refresh tokens cached server-side — manage those
149
+ separately at the URL `logout --all` prints.
150
+
116
151
  ## How refresh works
117
152
 
118
153
  Keycloak issues a short-lived access token (~5 min by default) and a
@@ -12,6 +12,11 @@ const skill_copy_1 = require("../lib/skill-copy");
12
12
  const auth_flow_1 = require("../lib/auth-flow");
13
13
  const prompt_1 = require("../lib/prompt");
14
14
  const workspace_flow_1 = require("../lib/workspace-flow");
15
+ const credentials_backup_1 = require("../lib/credentials-backup");
16
+ const config_2 = require("../lib/config");
17
+ const identity_banner_1 = require("../lib/identity-banner");
18
+ const welcome_banner_1 = require("../lib/welcome-banner");
19
+ const package_info_1 = require("../lib/package-info");
15
20
  /**
16
21
  * Issuer URL for the dev shortcut. Exported so `ritual login --dev`
17
22
  * can use the same constant (single source of truth — if we ever flip
@@ -37,9 +42,26 @@ function resolveIssuerForInit(opts) {
37
42
  return undefined; // let auth-flow.ts pick from env / default
38
43
  }
39
44
  async function initCommand(opts = {}) {
40
- console.log('');
41
- console.log(' Ritual scaffolding skills + connecting AI coding agents');
42
- console.log('');
45
+ // --- Welcome banner (TTY only; skipped for --list early-exit) ----
46
+ // Replaces the previous single-line opener. The banner surfaces
47
+ // identity (when signed in), workspace binding, and "what this
48
+ // command will do" — all at a glance. Stderr-routed so machine
49
+ // consumers (CI / piped output) aren't polluted.
50
+ if (!opts.list) {
51
+ const projectDir = opts.cwd ?? process.cwd();
52
+ const ws = (0, welcome_banner_1.readBoundWorkspace)(projectDir);
53
+ const tokenStatusEarly = await (0, config_1.getValidAccessToken)();
54
+ const currentUser = tokenStatusEarly.kind === 'signed-in'
55
+ ? (tokenStatusEarly.creds.user?.email ?? tokenStatusEarly.creds.user?.sub)
56
+ : undefined;
57
+ (0, welcome_banner_1.printWelcomeBanner)({
58
+ currentUser,
59
+ workspaceBound: ws.bound,
60
+ workspaceName: ws.name,
61
+ projectDir,
62
+ cliVersion: (0, package_info_1.readPackageVersionSafe)(),
63
+ });
64
+ }
43
65
  // --- 0. Handle --list (early exit, no auth required) ------------
44
66
  if (opts.list) {
45
67
  console.log(' Known agents:');
@@ -51,57 +73,155 @@ async function initCommand(opts = {}) {
51
73
  }
52
74
  // --- 1. Auth check (lazy login — npm-style "press Enter to sign in") ---
53
75
  //
54
- // If we're signed in, fast-path: continue.
55
- // If we're not (or session is dead), and stdin is a TTY, prompt to
56
- // open the browser inline so `init` is a one-command experience.
57
- // If stdin is non-TTY (CI / piped), keep the old behavior: clear
58
- // error + non-zero exit. Unattended runs MUST NOT hang waiting
59
- // for an Enter that's never coming.
76
+ // Three paths depending on (a) whether the user has a valid local
77
+ // session and (b) whether `--switch-account` was passed:
78
+ //
79
+ // 1. Valid session, no --switch-account: print the identity
80
+ // banner to stderr (so machine-parsers don't see it) and
81
+ // continue. This is the "Ritual silently used the cached
82
+ // mike@ritual.work session while the user thought they signed
83
+ // in as tkmdjvo@gmail.com" trap from the 2026-05-13 prod-
84
+ // cutover test — surfacing the identity makes the trap
85
+ // impossible.
86
+ // 2. Valid session, --switch-account: confirm the switch (gated
87
+ // pause; --yes bypasses for CI), then run an ATOMIC swap:
88
+ // back up creds, fresh forced-login (prompt=login so KC
89
+ // ignores its SSO cookie), commit-or-restore on outcome.
90
+ // 3. No valid session: run the existing lazy-auth flow
91
+ // (unchanged) with the email-verify warning.
60
92
  let tokenStatus = await (0, config_1.getValidAccessToken)();
61
- if (tokenStatus.kind !== 'signed-in') {
62
- const reason = tokenStatus.kind === 're-auth-required'
63
- ? `session expired (${tokenStatus.reason})`
64
- : 'you are not signed in';
93
+ const needsFreshLogin = tokenStatus.kind !== 'signed-in' || opts.switchAccount;
94
+ if (!needsFreshLogin && tokenStatus.kind === 'signed-in') {
95
+ // Path 1 — the welcome banner above already surfaces the
96
+ // current identity, so we don't need a separate identity
97
+ // banner here. `printIdentityBanner` is still exported (used
98
+ // by `ritual whoami` and elsewhere) but suppressed in `init`
99
+ // to avoid duplicating signal.
100
+ void identity_banner_1.identityFromCreds; // imported but only used by the type narrowing path below
101
+ void identity_banner_1.printIdentityBanner;
102
+ }
103
+ if (needsFreshLogin) {
104
+ // Build the "why we're here" message + prompt copy. Distinct
105
+ // flavors for: re-auth required, not signed in, and explicit
106
+ // switch-account.
107
+ const isSwitching = opts.switchAccount && tokenStatus.kind === 'signed-in';
108
+ const currentEmail = tokenStatus.kind === 'signed-in'
109
+ ? (tokenStatus.creds.user?.email ?? tokenStatus.creds.user?.sub ?? '(unknown)')
110
+ : undefined;
111
+ const reason = isSwitching
112
+ ? `switching from ${currentEmail}`
113
+ : tokenStatus.kind === 're-auth-required'
114
+ ? `session expired (${tokenStatus.reason})`
115
+ : 'you are not signed in';
65
116
  if (!process.stdin.isTTY) {
66
- console.error(` ✗ ${reason}. Run \`ritual login\` first, then \`ritual init\`.`);
67
- console.error('');
68
- process.exitCode = 1;
69
- return;
117
+ // Non-TTY: explicit error. --switch-account requires --yes
118
+ // in scripted mode to confirm the destructive intent.
119
+ if (isSwitching && !opts.yes) {
120
+ console.error(` ✗ --switch-account requires interactive confirmation; pass --yes for scripted use.`);
121
+ console.error('');
122
+ process.exitCode = 1;
123
+ return;
124
+ }
125
+ if (!isSwitching) {
126
+ console.error(` ✗ ${reason}. Run \`ritual login\` first, then \`ritual init\`.`);
127
+ console.error('');
128
+ process.exitCode = 1;
129
+ return;
130
+ }
131
+ // isSwitching + --yes + non-TTY: fall through to the
132
+ // atomic swap below WITHOUT the Enter-to-confirm pause.
70
133
  }
71
- console.log(` ${capitalize(reason)}.`);
72
- console.log('');
73
- console.log(' We\'ll open your browser for sign-in. A few notes before you continue:');
74
- console.log(' • If this is a brand-new account, you\'ll be asked to verify your');
75
- console.log(' email. KEEP THIS TERMINAL OPEN while you check your inbox — closing it');
76
- console.log(' drops the loopback listener and you\'ll have to re-run `ritual init`.');
77
- console.log('If you already have an account, sign in as usual — you\'ll bounce back');
78
- console.log(' here automatically.');
79
- console.log(' • The sign-in window is 5 minutes. If you exceed it, just re-run');
80
- console.log(' `ritual init` and we\'ll pick up from this prompt.');
81
- console.log('');
82
- try {
83
- await (0, prompt_1.prompt)(' Press Enter to open the browser, or Ctrl-C to abort: ');
134
+ // TTY path: print the appropriate banner.
135
+ if (isSwitching) {
136
+ console.log('');
137
+ console.log(` Currently signed in as ${currentEmail}.`);
138
+ console.log(` Continuing will:`);
139
+ console.log(` • Back up your local credentials, then atomically replace them on success`);
140
+ console.log(`Open your browser with OIDC \`prompt=login\` (Keycloak will show its`);
141
+ console.log(` sign-in form even if its SSO cookie says otherwise — no incognito needed)`);
142
+ console.log(` If anything goes wrong, your existing session is restored.`);
143
+ console.log('');
144
+ if (process.stdin.isTTY && !opts.yes) {
145
+ try {
146
+ await (0, prompt_1.prompt)(' Press Enter to switch, or Ctrl-C to keep the current session: ');
147
+ }
148
+ catch {
149
+ console.log('');
150
+ console.log(' Switch aborted.');
151
+ process.exitCode = 1;
152
+ return;
153
+ }
154
+ }
84
155
  }
85
- catch {
86
- // Ctrl-D / stdin closed mid-prompt — treat as abort.
156
+ else {
157
+ console.log(` ${capitalize(reason)}.`);
87
158
  console.log('');
88
- console.log(' Sign-in aborted.');
89
- process.exitCode = 1;
90
- return;
159
+ console.log(' We\'ll open your browser for sign-in. A few notes before you continue:');
160
+ console.log(' • If this is a brand-new account, you\'ll be asked to verify your');
161
+ console.log(' email. KEEP THIS TERMINAL OPEN while you check your inbox — closing it');
162
+ console.log(' drops the loopback listener and you\'ll have to re-run `ritual init`.');
163
+ console.log(' • If you already have an account, sign in as usual — you\'ll bounce back');
164
+ console.log(' here automatically.');
165
+ console.log(' • The sign-in window is 5 minutes. If you exceed it, just re-run');
166
+ console.log(' `ritual init` and we\'ll pick up from this prompt.');
167
+ console.log('');
168
+ if (process.stdin.isTTY) {
169
+ try {
170
+ await (0, prompt_1.prompt)(' Press Enter to open the browser, or Ctrl-C to abort: ');
171
+ }
172
+ catch {
173
+ console.log('');
174
+ console.log(' Sign-in aborted.');
175
+ process.exitCode = 1;
176
+ return;
177
+ }
178
+ }
91
179
  }
92
- try {
180
+ // Run the browser login. For --switch-account we ALSO wrap in
181
+ // the atomic backup so a failed sign-in restores the previous
182
+ // session instead of stranding the user with no credentials.
183
+ const loginRunner = async () => {
93
184
  await (0, auth_flow_1.runBrowserLoginAndSave)({
94
185
  issuer: resolveIssuerForInit(opts),
95
186
  clientId: opts.clientId,
187
+ forceLogin: !!opts.switchAccount,
96
188
  });
189
+ };
190
+ if (isSwitching) {
191
+ const { release, backup } = (0, credentials_backup_1.beginCredentialSwap)();
192
+ // `beginCredentialSwap` already cleared the live-creds path
193
+ // via the SIGINT trap setup; we explicitly clear here so
194
+ // `runBrowserLoginAndSave`'s `saveCredentials` has a clean
195
+ // slot to write into. The backup file holds the old data.
196
+ (0, config_2.clearCredentials)();
197
+ try {
198
+ await loginRunner();
199
+ backup.commit();
200
+ }
201
+ catch (err) {
202
+ backup.restore();
203
+ release();
204
+ console.error('');
205
+ console.error(` ✗ Switch failed: ${err.message}`);
206
+ console.error(` Restored previous session for ${currentEmail}.`);
207
+ console.error('');
208
+ process.exitCode = 1;
209
+ return;
210
+ }
211
+ release();
97
212
  }
98
- catch (err) {
99
- console.error('');
100
- console.error(` ✗ Sign-in did not complete: ${err.message}`);
101
- console.error(' Run `ritual login` to retry, then re-run `ritual init`.');
102
- console.error('');
103
- process.exitCode = 1;
104
- return;
213
+ else {
214
+ try {
215
+ await loginRunner();
216
+ }
217
+ catch (err) {
218
+ console.error('');
219
+ console.error(` ✗ Sign-in did not complete: ${err.message}`);
220
+ console.error(' Run `ritual login` to retry, then re-run `ritual init`.');
221
+ console.error('');
222
+ process.exitCode = 1;
223
+ return;
224
+ }
105
225
  }
106
226
  // Re-read credentials now that login succeeded. We use this to
107
227
  // hand the OAuth access token to mintAgentPat below.
@@ -225,6 +345,17 @@ async function initCommand(opts = {}) {
225
345
  console.log('');
226
346
  }
227
347
  }
348
+ // Type guard for the compiler — by this point one of three paths
349
+ // has populated tokenStatus with a signed-in record:
350
+ // (a) we fast-pathed because there was already a valid session
351
+ // (b) we ran an atomic --switch-account swap and re-read creds
352
+ // (c) we ran the lazy-login flow and re-read creds
353
+ // Any other state is "should never happen" — bail loudly.
354
+ if (tokenStatus.kind !== 'signed-in') {
355
+ console.error(' ✗ Internal error: expected signed-in credentials after auth flow.');
356
+ process.exitCode = 1;
357
+ return;
358
+ }
228
359
  // --- 3. Mint a long-lived PAT for agents to use ------------------
229
360
  const issuer = tokenStatus.creds.issuer;
230
361
  const api = new api_client_1.ApiClient({
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;AAiGA,kCAgRC;AAjXD,0CAAoD;AACpD,kDAAgE;AAChE,gDAAgD;AAChD,qDAGgC;AAChC,uDAAsE;AACtE,+DAGqC;AACrC,kDAA2E;AAC3E,gDAA0D;AAC1D,0CAAuC;AACvC,0DAAgE;AA0DhE;;;;GAIG;AACU,QAAA,UAAU,GAAG,gDAAgD,CAAC;AAE3E;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,IAAiB;IAC9C,IAAI,IAAI,CAAC,GAAG;QAAE,OAAO,kBAAU,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IACpC,OAAO,SAAS,CAAC,CAAC,2CAA2C;AAC9D,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,OAAoB,EAAE;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,mEAAmE;IACnE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,qBAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACR,CAAC;IAED,0EAA0E;IAC1E,EAAE;IACF,2CAA2C;IAC3C,mEAAmE;IACnE,iEAAiE;IACjE,iEAAiE;IACjE,+DAA+D;IAC/D,oCAAoC;IACpC,IAAI,WAAW,GAAG,MAAM,IAAA,4BAAmB,GAAE,CAAC;IAE9C,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACtC,MAAM,MAAM,GACX,WAAW,CAAC,IAAI,KAAK,kBAAkB;YACtC,CAAC,CAAC,oBAAoB,WAAW,CAAC,MAAM,GAAG;YAC3C,CAAC,CAAC,uBAAuB,CAAC;QAE5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,qDAAqD,CAAC,CAAC;YAClF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,IAAA,eAAM,EAAC,yDAAyD,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACR,qDAAqD;YACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,IAAA,kCAAsB,EAAC;gBAC5B,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC;gBAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC3E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QAED,+DAA+D;QAC/D,qDAAqD;QACrD,WAAW,GAAG,MAAM,IAAA,4BAAmB,GAAE,CAAC;QAC1C,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACtC,+DAA+D;YAC/D,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;YACxF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC,CAAC;QAC7G,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,oEAAoE;IACpE,IAAI,OAA0B,CAAC;IAE/B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,IAAA,4BAAgB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QACD,+DAA+D;QAC/D,6DAA6D;QAC7D,qBAAqB;QACrB,OAAO,GAAG;YACT;gBACC,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,QAAQ,EAAE,IAAI;gBACd,QAAQ;aACR;SACD,CAAC;IACH,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,GAAG,IAAA,uBAAY,GAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,0DAA0D;YAC1D,wDAAwD;YACxD,kDAAkD;YAClD,MAAM,cAAc,GAAG,IAAA,4BAAgB,EAAC,aAAa,CAAE,CAAC;YACxD,OAAO,GAAG;gBACT;oBACC,EAAE,EAAE,cAAc,CAAC,EAAE;oBACrB,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,cAAc;iBACxB;aACD,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,mBAAmB,cAAc,CAAC,IAAI,uCAAuC,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,KAAK,MAAM,CAAC,IAAI,qBAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,2DAA2D;YAC3D,uDAAuD;YACvD,0DAA0D;YAC1D,6CAA6C;YAC7C,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,qCAAqC,CAAC,CAAC;YACvE,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CACV,yCAAyC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACP,2DAA2D;YAC3D,yDAAyD;YACzD,0DAA0D;YAC1D,2DAA2D;YAC3D,yDAAyD;YACzD,0DAA0D;YAC1D,sDAAsD;YACtD,OAAO,GAAG,QAAQ,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,MAAM,uDAAuD,CAAC,CAAC;YAClG,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa;oBACnC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa;oBAC1B,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CACV,yCAAyC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,yDAAyD;YACzD,2DAA2D;YAC3D,qDAAqD;YACrD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACJ,MAAM,IAAA,eAAM,EACX,oEAAoE;wBACnE,gFAAgF,CACjF,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACR,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC1B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACrB,OAAO;gBACR,CAAC;YACF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IAED,oEAAoE;IACpE,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,sBAAS,CAAC;QACzB,MAAM;QACN,WAAW,EAAE,WAAW,CAAC,WAAW;KACpC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAA,6BAAgB,EAAC,MAAM,CAAC,CAAC;IAExC,IAAI,GAA6C,CAAC;IAClD,IAAI,CAAC;QACJ,GAAG,GAAG,MAAM,IAAA,wBAAY,EAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,oCAAqC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,oEAAoE;IACpE,gEAAgE;IAChE,6CAA6C;IAC7C,6DAA6D;IAC7D,wBAAwB;IACxB,iCAAiC;IACjC,6CAA6C;IAC7C,gEAAgE;IAChE,+DAA+D;IAC/D,mEAAmE;IACnE,+BAA+B;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC7C,qEAAqE;IACrE,iEAAiE;IACjE,2CAA2C;IAC3C,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAA,wCAAuB,EAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,oEAAoE;IACpE,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,mBAAmB,GAAyB,EAAE,CAAC;IAErD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CAAC,IAAA,kCAAqB,EAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QAChE,mBAAmB,CAAC,IAAI,CACvB,IAAA,oCAAoB,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAC5E,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,EAAE;IACF,6CAA6C;IAC7C,EAAE;IACF,gEAAgE;IAChE,mEAAmE;IACnE,kEAAkE;IAClE,gEAAgE;IAChE,EAAE;IACF,gEAAgE;IAChE,gEAAgE;IAChE,gEAAgE;IAChE,8DAA8D;IAC9D,kEAAkE;IAClE,oEAAoE;IACpE,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;IACpE,mBAAmB,CAAC;QACnB,OAAO;QACP,mBAAmB;QACnB,MAAM;KACN,CAAC,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,SAAS,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,MAAc;IAC1C,IAAI,CAAC;QACJ,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO,6BAA6B,CAAC;QACvE,IAAI,IAAI,KAAK,sBAAsB;YAAE,OAAO,6BAA6B,CAAC;QAC1E,qDAAqD;QACrD,OAAO,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,6BAA6B,CAAC;IACtC,CAAC;AACF,CAAC;AAED,gFAAgF;AAChF,2EAA2E;AAC3E,gFAAgF;AAChF,EAAE;AACF,qCAAqC;AACrC,oEAAoE;AACpE,kEAAkE;AAClE,sEAAsE;AACtE,0BAA0B;AAE1B;;;;;GAKG;AACH,SAAS,oBAAoB,CAC5B,GAA+C,EAC/C,SAAiB,EACjB,OAA0B;IAE1B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS;QAC3B,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa;QAClE,CAAC,CAAC,OAAO,CAAC;IACX,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACtC,kEAAkE;IAClE,iEAAiE;IACjE,kBAAkB;IAClB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa;YAC5C,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa;YACnC,CAAC,CAAC,gBAAgB,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa;gBACnC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa;gBAC1B,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC;IACF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,kBAAkB,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CACV,+EAA+E,CAC/E,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,wBAAwB,CAChC,OAA0B,EAC1B,WAAyB,EACzB,mBAAyC;IAEzC,oEAAoE;IACpE,mEAAmE;IACnE,kEAAkE;IAClE,iEAAiE;IACjE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEtC,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAA,uBAAY,GAAE,CAAC;IAElC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC3B,GAAG,qBAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EACtC,EAAE,CACF,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,eAAe,CAAC,CAAC;YAClD,SAAS;QACV,CAAC;QAED,sDAAsD;QACtD,qCAAqC;QACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,oCAAoC,CAAC,CAAC;YACvE,SAAS;QACV,CAAC;QAED,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAC7B,CAAC;QACF,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,aAAa,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CACV,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,YAAY,GAAG,EAAE,MAAM,IAAI,SAAS,EAAE,CAC3D,CAAC;QACH,CAAC;IACF,CAAC;IAED,mEAAmE;IACnE,2DAA2D;IAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC;QACvE,MAAM,MAAM,GACX,IAAI,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,QAAQ,CAAC,eAAe,GAAG;YACnD,CAAC,CAAC,YAAY,IAAI,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,mBAAmB,CAAC,IAI5B;IACA,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEtD,MAAM,aAAa,GAAG,IAAI,GAAG,CAC5B,mBAAmB;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC3B,CAAC;IACF,MAAM,aAAa,GAClB,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAE7B,4DAA4D;IAC5D,IAAI,aAAa,IAAI,kBAAkB,EAAE,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACV,8DAA8D,CAC9D,CAAC;QACF,OAAO,CAAC,GAAG,CACV,0EAA0E,CAC1E,CAAC;IACH,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,uBAAuB,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CACV,iEAAiE,CACjE,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,kBAAkB;IAC1B,OAAO,CACN,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU;QACxB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB;QACpC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CACpC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loginCommand = loginCommand;
4
4
  const auth_flow_1 = require("../lib/auth-flow");
5
+ const config_1 = require("../lib/config");
6
+ const credentials_backup_1 = require("../lib/credentials-backup");
7
+ const identity_banner_1 = require("../lib/identity-banner");
8
+ const prompt_1 = require("../lib/prompt");
5
9
  const init_1 = require("./init");
10
+ const welcome_banner_1 = require("../lib/welcome-banner");
11
+ const package_info_1 = require("../lib/package-info");
6
12
  /**
7
13
  * `ritual login` — browser-based Auth Code + PKCE flow against
8
14
  * Keycloak. On success, stores the access + refresh tokens in
@@ -12,27 +18,128 @@ const init_1 = require("./init");
12
18
  * `--issuer https://auth.dev.ritualapp.cloud/realms/ritual` for dev,
13
19
  * `--dev` as the shortcut, or set `RITUAL_KEYCLOAK_URL` env var.
14
20
  *
21
+ * Three sign-in paths:
22
+ *
23
+ * 1. No valid local session: open browser, sign in normally.
24
+ * 2. Valid local session, no --switch-account: print identity
25
+ * banner to stderr, no-op (success), exit 0. The user already
26
+ * has what they need; we just confirm who they are.
27
+ * 3. Valid local session, --switch-account: atomic backup + forced
28
+ * sign-in (OIDC prompt=login so Keycloak's SSO cookie is
29
+ * ignored). On failure, prior session is restored.
30
+ *
15
31
  * The flow itself lives in `lib/auth-flow.ts` so `ritual init` can
16
32
  * invoke the same path when it lazily prompts the user to sign in.
17
33
  */
18
34
  async function loginCommand(options) {
19
- console.log('');
20
- console.log(' Ritual — sign in');
21
- console.log('');
22
35
  // --dev wins over --issuer (consistent with init); both win over env.
23
36
  const issuer = options.dev ? init_1.DEV_ISSUER : options.issuer;
37
+ // Welcome banner first — surfaces identity for the
38
+ // already-signed-in case BEFORE we decide whether to short-circuit.
39
+ const tokenStatus = await (0, config_1.getValidAccessToken)();
40
+ const projectDir = process.cwd();
41
+ const ws = (0, welcome_banner_1.readBoundWorkspace)(projectDir);
42
+ const currentUser = tokenStatus.kind === 'signed-in'
43
+ ? (tokenStatus.creds.user?.email ?? tokenStatus.creds.user?.sub)
44
+ : undefined;
45
+ (0, welcome_banner_1.printWelcomeBanner)({
46
+ currentUser,
47
+ workspaceBound: ws.bound,
48
+ workspaceName: ws.name,
49
+ projectDir,
50
+ cliVersion: (0, package_info_1.readPackageVersionSafe)(),
51
+ // `ritual login`'s "tips" are different from init's — focus on
52
+ // the auth surface specifically.
53
+ tips: tokenStatus.kind === 'signed-in'
54
+ ? undefined
55
+ : [
56
+ '1. Open your browser to Keycloak',
57
+ '2. Sign in (or verify email if brand-new)',
58
+ '3. Bounce back here; tokens cached locally',
59
+ ],
60
+ quickCommands: [
61
+ 'ritual whoami',
62
+ 'ritual login --switch-account',
63
+ 'ritual logout --all',
64
+ 'ritual doctor',
65
+ ],
66
+ });
67
+ // If a valid session exists and no --switch-account, also keep
68
+ // the existing compact identity banner for the textual "already
69
+ // signed in" message + exit.
70
+ if (tokenStatus.kind === 'signed-in' && !options.switchAccount) {
71
+ (0, identity_banner_1.printIdentityBanner)((0, identity_banner_1.identityFromCreds)(tokenStatus.creds), { indent: ' ' });
72
+ console.log('');
73
+ console.log(' Already signed in. Nothing to do.');
74
+ console.log('');
75
+ return;
76
+ }
77
+ const isSwitching = options.switchAccount && tokenStatus.kind === 'signed-in';
78
+ const currentEmail = tokenStatus.kind === 'signed-in'
79
+ ? (tokenStatus.creds.user?.email ?? tokenStatus.creds.user?.sub ?? '(unknown)')
80
+ : undefined;
81
+ if (isSwitching) {
82
+ console.log(` Currently signed in as ${currentEmail}.`);
83
+ console.log(` Continuing will:`);
84
+ console.log(` • Back up your local credentials, then atomically replace them on success`);
85
+ console.log(` • Open your browser with OIDC \`prompt=login\` (Keycloak will show its`);
86
+ console.log(` sign-in form even if its SSO cookie says otherwise — no incognito needed)`);
87
+ console.log(` If anything goes wrong, your existing session is restored.`);
88
+ console.log('');
89
+ if (!process.stdin.isTTY) {
90
+ if (!options.yes) {
91
+ console.error(` ✗ --switch-account requires interactive confirmation; pass --yes for scripted use.`);
92
+ console.error('');
93
+ process.exitCode = 1;
94
+ return;
95
+ }
96
+ }
97
+ else if (!options.yes) {
98
+ try {
99
+ await (0, prompt_1.prompt)(' Press Enter to switch, or Ctrl-C to keep the current session: ');
100
+ }
101
+ catch {
102
+ console.log('');
103
+ console.log(' Switch aborted.');
104
+ process.exitCode = 1;
105
+ return;
106
+ }
107
+ }
108
+ }
109
+ const loginRunner = async () => (0, auth_flow_1.runBrowserLoginAndSave)({
110
+ issuer,
111
+ clientId: options.clientId,
112
+ forceLogin: !!options.switchAccount,
113
+ });
24
114
  let creds;
25
- try {
26
- creds = await (0, auth_flow_1.runBrowserLoginAndSave)({
27
- issuer,
28
- clientId: options.clientId,
29
- });
115
+ if (isSwitching) {
116
+ const { release, backup } = (0, credentials_backup_1.beginCredentialSwap)();
117
+ (0, config_1.clearCredentials)();
118
+ try {
119
+ creds = await loginRunner();
120
+ backup.commit();
121
+ }
122
+ catch (err) {
123
+ backup.restore();
124
+ release();
125
+ console.error('');
126
+ console.error(` ✗ Switch failed: ${err.message}`);
127
+ console.error(` Restored previous session for ${currentEmail}.`);
128
+ process.exitCode = 1;
129
+ return;
130
+ }
131
+ release();
30
132
  }
31
- catch (err) {
32
- console.error('');
33
- console.error(` ✗ Login failed: ${err.message}`);
34
- process.exitCode = 1;
35
- return;
133
+ else {
134
+ try {
135
+ creds = await loginRunner();
136
+ }
137
+ catch (err) {
138
+ console.error('');
139
+ console.error(` ✗ Login failed: ${err.message}`);
140
+ process.exitCode = 1;
141
+ return;
142
+ }
36
143
  }
37
144
  const display = creds.user?.email ?? creds.user?.sub ?? 'unknown';
38
145
  console.log('');
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":";;AAwBA,oCA4BC;AApDD,gDAA0D;AAC1D,iCAAoC;AAWpC;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,YAAY,CAAC,OAAqB;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,sEAAsE;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAEzD,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACJ,KAAK,GAAG,MAAM,IAAA,kCAAsB,EAAC;YACpC,MAAM;YACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC1B,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,qBAAsB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,72 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.logoutCommand = logoutCommand;
7
+ const open_1 = __importDefault(require("open"));
4
8
  const config_1 = require("../lib/config");
9
+ const oidc_1 = require("../lib/oidc");
5
10
  /**
6
- * `ritual logout` — clears local credentials. Does NOT call Keycloak's
7
- * end-session endpoint that's a browser-side concept; clearing local
8
- * tokens is what matters from a CLI perspective. The user can sign out
9
- * of the realm session itself via the web app.
11
+ * `ritual logout` — clears local credentials. With `--all`, also
12
+ * opens the Keycloak browser logout endpoint to drop the IdP's SSO
13
+ * cookie (so the next sign-in won't silently auto-re-sign-you-in).
14
+ *
15
+ * Why no `--all` by default: the local-only case is the fast, common
16
+ * one. Most users want "this CLI forgets me"; few want the more
17
+ * heavyweight "this CLI forgets me AND my browser session ends."
10
18
  */
11
- async function logoutCommand() {
19
+ async function logoutCommand(options = {}) {
12
20
  const had = (0, config_1.loadCredentials)();
21
+ const display = had?.user?.email ?? had?.user?.sub ?? 'unknown';
13
22
  (0, config_1.clearCredentials)();
14
23
  console.log('');
15
24
  if (had) {
16
- const display = had.user?.email ?? had.user?.sub ?? 'unknown';
17
- console.log(` ✓ Signed out (${display}).`);
25
+ console.log(` ✓ Local credentials cleared (${display}).`);
18
26
  }
19
27
  else {
20
- console.log(' No active session — nothing to clear.');
28
+ console.log(' No active session — nothing to clear locally.');
21
29
  }
22
30
  console.log(` Credentials path: ${(0, config_1.getCredentialsPath)()}`);
31
+ if (options.all) {
32
+ if (!had) {
33
+ // Nothing to logout from on the IdP side either — no
34
+ // active session means no useful logout URL.
35
+ console.log('');
36
+ console.log(' No active browser SSO session to end (no local creds found).');
37
+ console.log('');
38
+ return;
39
+ }
40
+ // Build a logout URL with id_token_hint (recommended by OIDC
41
+ // RP-Initiated Logout 1.0 §2) and client_id. We intentionally
42
+ // do NOT set post_logout_redirect_uri — Keycloak requires
43
+ // pre-registration of those URIs on the client, and we don't
44
+ // want to couple this CLI feature to the realm-import path.
45
+ // Users land on Keycloak's default post-logout page, which
46
+ // reads "you have been logged out" — fine for our purposes.
47
+ const url = (0, oidc_1.buildLogoutUrl)({
48
+ issuer: had.issuer,
49
+ clientId: had.clientId,
50
+ idToken: had.tokenSet.id_token,
51
+ });
52
+ console.log('');
53
+ console.log(' Opening browser to end Keycloak SSO session…');
54
+ console.log(` If the browser doesn\'t open, visit:`);
55
+ console.log(` ${url}`);
56
+ try {
57
+ await (0, open_1.default)(url);
58
+ }
59
+ catch {
60
+ // Best-effort; the user can still paste the URL manually.
61
+ }
62
+ console.log('');
63
+ console.log(' ✓ Browser SSO logout requested.');
64
+ console.log('');
65
+ console.log(' Note: this does NOT revoke any of the following — manage them separately:');
66
+ console.log(' • Personal Access Tokens minted by `ritual init` (revoke via /settings/tokens)');
67
+ console.log(' • MCP server entries in your AI coding agents (edit each agent\'s mcp.json)');
68
+ console.log(' • Server-side refresh tokens (handled by Keycloak realm policy)');
69
+ }
23
70
  console.log('');
24
71
  }
25
72
  //# sourceMappingURL=logout.js.map