@aligndottech/cli 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +151 -54
  2. package/dist/commands/check.d.ts.map +1 -1
  3. package/dist/commands/check.js +125 -0
  4. package/dist/commands/check.js.map +1 -1
  5. package/dist/commands/export.d.ts +3 -0
  6. package/dist/commands/export.d.ts.map +1 -0
  7. package/dist/commands/export.js +76 -0
  8. package/dist/commands/export.js.map +1 -0
  9. package/dist/commands/import/confluence.d.ts.map +1 -1
  10. package/dist/commands/import/confluence.js +25 -6
  11. package/dist/commands/import/confluence.js.map +1 -1
  12. package/dist/commands/import/git.js +1 -1
  13. package/dist/commands/import/jira.d.ts.map +1 -1
  14. package/dist/commands/import/jira.js +26 -6
  15. package/dist/commands/import/jira.js.map +1 -1
  16. package/dist/commands/links.js +1 -1
  17. package/dist/commands/links.js.map +1 -1
  18. package/dist/commands/local.d.ts +3 -0
  19. package/dist/commands/local.d.ts.map +1 -0
  20. package/dist/commands/local.js +71 -0
  21. package/dist/commands/local.js.map +1 -0
  22. package/dist/commands/login.d.ts.map +1 -1
  23. package/dist/commands/login.js +5 -32
  24. package/dist/commands/login.js.map +1 -1
  25. package/dist/commands/mcp.d.ts +2 -0
  26. package/dist/commands/mcp.d.ts.map +1 -1
  27. package/dist/commands/mcp.js +34 -12
  28. package/dist/commands/mcp.js.map +1 -1
  29. package/dist/commands/setup.d.ts.map +1 -1
  30. package/dist/commands/setup.js +609 -163
  31. package/dist/commands/setup.js.map +1 -1
  32. package/dist/commands/why.d.ts.map +1 -1
  33. package/dist/commands/why.js +46 -4
  34. package/dist/commands/why.js.map +1 -1
  35. package/dist/index.js +10 -4
  36. package/dist/index.js.map +1 -1
  37. package/dist/lib/advisory-dedup.d.ts +3 -0
  38. package/dist/lib/advisory-dedup.d.ts.map +1 -0
  39. package/dist/lib/advisory-dedup.js +44 -0
  40. package/dist/lib/advisory-dedup.js.map +1 -0
  41. package/dist/lib/agent-rules.d.ts +10 -0
  42. package/dist/lib/agent-rules.d.ts.map +1 -0
  43. package/dist/lib/agent-rules.js +137 -0
  44. package/dist/lib/agent-rules.js.map +1 -0
  45. package/dist/lib/cli-oauth.d.ts +11 -0
  46. package/dist/lib/cli-oauth.d.ts.map +1 -0
  47. package/dist/lib/cli-oauth.js +71 -0
  48. package/dist/lib/cli-oauth.js.map +1 -0
  49. package/dist/lib/config.d.ts +10 -1
  50. package/dist/lib/config.d.ts.map +1 -1
  51. package/dist/lib/config.js +36 -1
  52. package/dist/lib/config.js.map +1 -1
  53. package/dist/lib/errors.d.ts +5 -0
  54. package/dist/lib/errors.d.ts.map +1 -0
  55. package/dist/lib/errors.js +9 -0
  56. package/dist/lib/errors.js.map +1 -0
  57. package/dist/lib/fetchers/confluence.d.ts +4 -2
  58. package/dist/lib/fetchers/confluence.d.ts.map +1 -1
  59. package/dist/lib/fetchers/confluence.js +68 -12
  60. package/dist/lib/fetchers/confluence.js.map +1 -1
  61. package/dist/lib/fetchers/git.d.ts.map +1 -1
  62. package/dist/lib/fetchers/git.js +2 -0
  63. package/dist/lib/fetchers/git.js.map +1 -1
  64. package/dist/lib/fetchers/github.d.ts.map +1 -1
  65. package/dist/lib/fetchers/github.js +2 -0
  66. package/dist/lib/fetchers/github.js.map +1 -1
  67. package/dist/lib/fetchers/jira.d.ts +4 -2
  68. package/dist/lib/fetchers/jira.d.ts.map +1 -1
  69. package/dist/lib/fetchers/jira.js +30 -15
  70. package/dist/lib/fetchers/jira.js.map +1 -1
  71. package/dist/lib/fetchers/linear.d.ts.map +1 -1
  72. package/dist/lib/fetchers/linear.js +6 -1
  73. package/dist/lib/fetchers/linear.js.map +1 -1
  74. package/dist/lib/fetchers/notion.d.ts.map +1 -1
  75. package/dist/lib/fetchers/notion.js +29 -0
  76. package/dist/lib/fetchers/notion.js.map +1 -1
  77. package/dist/lib/fetchers/slack.d.ts.map +1 -1
  78. package/dist/lib/fetchers/slack.js +26 -0
  79. package/dist/lib/fetchers/slack.js.map +1 -1
  80. package/dist/lib/fetchers/teams.d.ts.map +1 -1
  81. package/dist/lib/fetchers/teams.js +3 -0
  82. package/dist/lib/fetchers/teams.js.map +1 -1
  83. package/dist/lib/fetchers/zoom.d.ts.map +1 -1
  84. package/dist/lib/fetchers/zoom.js +5 -0
  85. package/dist/lib/fetchers/zoom.js.map +1 -1
  86. package/dist/lib/format-date.d.ts +7 -0
  87. package/dist/lib/format-date.d.ts.map +1 -0
  88. package/dist/lib/format-date.js +26 -0
  89. package/dist/lib/format-date.js.map +1 -0
  90. package/dist/lib/gateway-client.d.ts +27 -2
  91. package/dist/lib/gateway-client.d.ts.map +1 -1
  92. package/dist/lib/gateway-client.js +39 -3
  93. package/dist/lib/gateway-client.js.map +1 -1
  94. package/dist/lib/git.d.ts.map +1 -1
  95. package/dist/lib/git.js +33 -16
  96. package/dist/lib/git.js.map +1 -1
  97. package/dist/lib/hook-payload.d.ts +20 -0
  98. package/dist/lib/hook-payload.d.ts.map +1 -0
  99. package/dist/lib/hook-payload.js +30 -0
  100. package/dist/lib/hook-payload.js.map +1 -0
  101. package/dist/lib/local-db.d.ts +51 -0
  102. package/dist/lib/local-db.d.ts.map +1 -0
  103. package/dist/lib/local-db.js +89 -0
  104. package/dist/lib/local-db.js.map +1 -0
  105. package/dist/lib/local-embeddings.d.ts +3 -0
  106. package/dist/lib/local-embeddings.d.ts.map +1 -0
  107. package/dist/lib/local-embeddings.js +20 -0
  108. package/dist/lib/local-embeddings.js.map +1 -0
  109. package/dist/lib/local-gateway-client.d.ts +98 -0
  110. package/dist/lib/local-gateway-client.d.ts.map +1 -0
  111. package/dist/lib/local-gateway-client.js +151 -0
  112. package/dist/lib/local-gateway-client.js.map +1 -0
  113. package/dist/lib/local-mode.d.ts +7 -0
  114. package/dist/lib/local-mode.d.ts.map +1 -0
  115. package/dist/lib/local-mode.js +39 -0
  116. package/dist/lib/local-mode.js.map +1 -0
  117. package/dist/lib/local-relationship-classifier.d.ts +14 -0
  118. package/dist/lib/local-relationship-classifier.d.ts.map +1 -0
  119. package/dist/lib/local-relationship-classifier.js +100 -0
  120. package/dist/lib/local-relationship-classifier.js.map +1 -0
  121. package/dist/lib/login-flow.d.ts +5 -0
  122. package/dist/lib/login-flow.d.ts.map +1 -0
  123. package/dist/lib/login-flow.js +64 -0
  124. package/dist/lib/login-flow.js.map +1 -0
  125. package/dist/lib/personal-import.d.ts +4 -0
  126. package/dist/lib/personal-import.d.ts.map +1 -1
  127. package/dist/lib/personal-import.js +133 -27
  128. package/dist/lib/personal-import.js.map +1 -1
  129. package/package.json +31 -12
  130. package/dist/lib/why-normalise.d.ts +0 -2
  131. package/dist/lib/why-normalise.d.ts.map +0 -1
  132. package/dist/lib/why-normalise.js +0 -39
  133. package/dist/lib/why-normalise.js.map +0 -1
@@ -2,26 +2,95 @@ import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import * as p from '@clack/prompts';
4
4
  import { renderTable } from './table.js';
5
+ import { GatewayError } from './gateway-client.js';
5
6
  const BATCH_SIZE = 20;
7
+ const BATCH_CONCURRENCY = 3;
8
+ // Cap TOTAL concurrent /ingest/batch calls across all imports running in
9
+ // parallel (align setup imports several connectors at once). Without this,
10
+ // IMPORT_CONCURRENCY x BATCH_CONCURRENCY swamps the gateway's DB pool and
11
+ // surfaces as 500 "timeout exceeded when trying to connect" (ALI-110).
12
+ const GLOBAL_INGEST_CONCURRENCY = Number(process.env['ALIGN_INGEST_CONCURRENCY']) || 6;
13
+ const INGEST_MAX_ATTEMPTS = 3;
14
+ const INGEST_BACKOFF_MS = 250;
15
+ let activeIngests = 0;
16
+ const ingestWaiters = [];
17
+ // Acquire one of the global ingest slots, run fn, release (waking the next
18
+ // waiter). Shared across every concurrent runPersonalImport.
19
+ async function withIngestSlot(fn) {
20
+ if (activeIngests >= GLOBAL_INGEST_CONCURRENCY) {
21
+ await new Promise((resolve) => ingestWaiters.push(resolve));
22
+ }
23
+ activeIngests++;
24
+ try {
25
+ return await fn();
26
+ }
27
+ finally {
28
+ activeIngests--;
29
+ ingestWaiters.shift()?.();
30
+ }
31
+ }
32
+ // A pool-connection timeout shows up as a 5xx; network failures as status 0.
33
+ // Both are transient - retrying after a short backoff usually succeeds. 4xx
34
+ // (bad request / auth) is not retried.
35
+ function isTransientGatewayError(err) {
36
+ return err instanceof GatewayError && (err.statusCode >= 500 || err.statusCode === 0);
37
+ }
38
+ async function ingestBatchResilient(fn) {
39
+ let lastErr;
40
+ for (let attempt = 1; attempt <= INGEST_MAX_ATTEMPTS; attempt++) {
41
+ try {
42
+ return await withIngestSlot(fn);
43
+ }
44
+ catch (err) {
45
+ lastErr = err;
46
+ if (!isTransientGatewayError(err) || attempt === INGEST_MAX_ATTEMPTS)
47
+ throw err;
48
+ await new Promise((r) => setTimeout(r, INGEST_BACKOFF_MS * 2 ** (attempt - 1)));
49
+ }
50
+ }
51
+ throw lastErr;
52
+ }
53
+ export async function runWithConcurrency(tasks, concurrency) {
54
+ const results = new Array(tasks.length);
55
+ let next = 0;
56
+ async function worker() {
57
+ while (next < tasks.length) {
58
+ const i = next++;
59
+ try {
60
+ results[i] = { status: 'fulfilled', value: await tasks[i]() };
61
+ }
62
+ catch (reason) {
63
+ results[i] = { status: 'rejected', reason };
64
+ }
65
+ }
66
+ }
67
+ await Promise.all(Array.from({ length: Math.min(concurrency, tasks.length) }, worker));
68
+ return results;
69
+ }
6
70
  export async function runPersonalImport(items, client, opts) {
7
71
  if (!items.length) {
8
72
  p.log.warn(`No items found from ${opts.label}.`);
9
73
  return 0;
10
74
  }
11
- const preview = items.slice(0, 10);
12
- const more = items.length - preview.length;
13
- console.log(chalk.bold(`\nFound ${items.length} items from ${opts.label}\n`));
14
- renderTable([
15
- { header: 'SOURCE', width: 48 },
16
- { header: 'TITLE', width: 50 },
17
- ], preview.map(i => [
18
- i.source_url.replace(/https?:\/\//, '').slice(0, 46),
19
- (i.title ?? i.raw_text.split('\n')[0]).slice(0, 48),
20
- ]));
21
- if (more > 0)
22
- console.log(chalk.dim(` ...and ${more} more\n`));
23
- else
24
- console.log('');
75
+ // Quiet mode (concurrent setup imports): skip the preview table, the animated
76
+ // spinner, and the multi-line footer - they clash when several imports run at
77
+ // once. A single compact completion line is printed at the end instead.
78
+ if (!opts.quiet) {
79
+ const preview = items.slice(0, 10);
80
+ const more = items.length - preview.length;
81
+ console.log(chalk.bold(`\nFound ${items.length} items from ${opts.label}\n`));
82
+ renderTable([
83
+ { header: 'SOURCE', width: 48 },
84
+ { header: 'TITLE', width: 50 },
85
+ ], preview.map(i => [
86
+ i.source_url.replace(/https?:\/\//, '').slice(0, 46),
87
+ (i.title ?? i.raw_text.split('\n')[0]).slice(0, 48),
88
+ ]));
89
+ if (more > 0)
90
+ console.log(chalk.dim(` ...and ${more} more\n`));
91
+ else
92
+ console.log('');
93
+ }
25
94
  if (!opts.approve) {
26
95
  const confirmed = await p.confirm({
27
96
  message: `Import ${items.length} items to your decision graph?`,
@@ -37,27 +106,64 @@ export async function runPersonalImport(items, client, opts) {
37
106
  }
38
107
  let total = 0;
39
108
  let relatedCount = 0;
40
- for (let i = 0; i < batches.length; i++) {
41
- const spinner = ora(`Importing batch ${i + 1}/${batches.length}...`).start();
109
+ let done = 0;
110
+ const failures = [];
111
+ const spinner = opts.quiet ? null : ora(`Importing 0/${batches.length} batches...`).start();
112
+ const results = await runWithConcurrency(batches.map((batch) => async () => {
42
113
  try {
43
- const result = await client.ingestBatch(batches[i]);
44
- total += result.snapshots.length;
45
- for (const s of result.snapshots) {
114
+ return await ingestBatchResilient(() => client.ingestBatch(batch, { deferEnrichment: opts.deferEnrichment }));
115
+ }
116
+ finally {
117
+ done++;
118
+ if (spinner)
119
+ spinner.text = `Importing ${done}/${batches.length} batches...`;
120
+ }
121
+ }), BATCH_CONCURRENCY);
122
+ for (let i = 0; i < results.length; i++) {
123
+ const r = results[i];
124
+ if (r.status === 'fulfilled') {
125
+ total += r.value.snapshots.length;
126
+ for (const s of r.value.snapshots)
46
127
  relatedCount += s.analysis?.relatedDecisions?.length ?? 0;
47
- }
48
- spinner.succeed(`Batch ${i + 1}/${batches.length} done (${result.snapshots.length} decisions)`);
49
128
  }
50
- catch (err) {
51
- spinner.fail(`Batch ${i + 1} failed: ${err.message}`);
129
+ else {
130
+ failures.push(`Batch ${i + 1}: ${r.reason.message}`);
52
131
  }
53
132
  }
54
- console.log('');
55
- console.log(chalk.green(`${total} decisions captured from ${opts.label}.`));
133
+ // Quiet mode: one compact completion line; the shared footer is printed once
134
+ // by the caller after all concurrent imports finish.
135
+ if (opts.quiet) {
136
+ const conn = relatedCount > 0 ? `, ${relatedCount} connection${relatedCount === 1 ? '' : 's'}` : '';
137
+ const failNote = failures.length
138
+ ? chalk.yellow(` (${failures.length} batch${failures.length > 1 ? 'es' : ''} failed)`)
139
+ : '';
140
+ console.log(` ${chalk.green('✓')} ${opts.label}: ${total} decision${total === 1 ? '' : 's'}${conn}${failNote}`);
141
+ for (const f of failures)
142
+ p.log.warn(f);
143
+ return total;
144
+ }
145
+ if (failures.length === 0) {
146
+ spinner.succeed(`Imported ${total} decisions from ${opts.label}`);
147
+ }
148
+ else {
149
+ spinner.warn(`Imported ${total} decisions (${failures.length} batch${failures.length > 1 ? 'es' : ''} failed)`);
150
+ for (const f of failures)
151
+ p.log.warn(f);
152
+ }
56
153
  if (relatedCount > 0) {
57
154
  console.log(chalk.cyan(`${relatedCount} connections found with existing decisions in your graph.`));
58
155
  }
59
- console.log(chalk.dim('Relationships across all your imported tools are detected automatically in the background.'));
60
- console.log(chalk.dim(`View at: ${opts.appUrl}/decisions`));
156
+ if (opts.local) {
157
+ // Local mode: on-device SQLite, no web UI and relationships are computed
158
+ // synchronously - don't claim a background job or a browser link.
159
+ console.log(chalk.dim('Stored locally - run `align local status` to inspect your graph.'));
160
+ }
161
+ else {
162
+ // Cloud personal: CLI/MCP-native. Don't push the web UI (a team surface);
163
+ // point to the CLI instead.
164
+ console.log(chalk.dim('Relationships across all your imported tools are detected automatically in the background.'));
165
+ console.log(chalk.dim('Query your graph: align ask "..." or align decisions list'));
166
+ }
61
167
  console.log(chalk.dim('Tip: import more tools to build a richer cross-tool decision graph.'));
62
168
  console.log('');
63
169
  return total;
@@ -1 +1 @@
1
- {"version":3,"file":"personal-import.js","sourceRoot":"","sources":["../../src/lib/personal-import.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"personal-import.js","sourceRoot":"","sources":["../../src/lib/personal-import.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@aligndottech/cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "description": "Align CLI - capture decisions, check alignment, and manage connectors",
6
+ "license": "MIT",
6
7
  "bin": {
7
8
  "align": "./dist/index.js"
8
9
  },
@@ -12,27 +13,36 @@
12
13
  "typecheck": "tsc -p tsconfig.json --noEmit",
13
14
  "lint": "eslint .",
14
15
  "test": "vitest run",
15
- "test:watch": "vitest"
16
+ "test:watch": "vitest",
17
+ "test:coverage": "vitest run --coverage"
16
18
  },
17
19
  "dependencies": {
18
- "commander": "^12.1.0",
19
20
  "@clack/prompts": "^0.9.1",
21
+ "@modelcontextprotocol/sdk": "^1.29.0",
22
+ "@xenova/transformers": "^2.17.2",
23
+ "better-sqlite3": "^12.10.0",
20
24
  "chalk": "^5.3.0",
21
- "ora": "^8.1.1",
25
+ "commander": "^12.1.0",
22
26
  "conf": "^13.0.1",
23
- "open": "^10.1.0",
24
- "execa": "^9.5.2",
25
27
  "dotenv": "^16.4.7",
26
- "@modelcontextprotocol/sdk": "^1.29.0",
27
- "eventsource": "^3.0.2"
28
+ "eventsource": "^3.0.2",
29
+ "execa": "^9.5.2",
30
+ "open": "^10.1.0",
31
+ "ora": "^8.1.1"
28
32
  },
29
33
  "devDependencies": {
30
- "@types/node": "^22.0.0",
34
+ "@eslint/js": "^9.0.0",
35
+ "@types/better-sqlite3": "^7.6.13",
31
36
  "@types/eventsource": "^1.1.15",
37
+ "@types/node": "^22.0.0",
38
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
39
+ "@typescript-eslint/parser": "^8.0.0",
40
+ "@vitest/coverage-v8": "^3.2.6",
32
41
  "eslint": "^9.0.0",
33
- "typescript": "^5.6.0",
42
+ "globals": "^15.0.0",
34
43
  "tsx": "^4.19.0",
35
- "vitest": "^2.1.0"
44
+ "typescript": "^5.6.0",
45
+ "vitest": "^3.2.4"
36
46
  },
37
47
  "engines": {
38
48
  "node": ">=20"
@@ -43,5 +53,14 @@
43
53
  "files": [
44
54
  "dist",
45
55
  "README.md"
46
- ]
56
+ ],
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "https://github.com/aligndottech/align-cli"
60
+ },
61
+ "pnpm": {
62
+ "onlyBuiltDependencies": [
63
+ "better-sqlite3"
64
+ ]
65
+ }
47
66
  }
@@ -1,2 +0,0 @@
1
- export declare function normaliseWhyQuery(q: string): string;
2
- //# sourceMappingURL=why-normalise.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"why-normalise.d.ts","sourceRoot":"","sources":["../../src/lib/why-normalise.ts"],"names":[],"mappings":"AA2BA,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAWnD"}
@@ -1,39 +0,0 @@
1
- const STRIP_PREFIXES = [
2
- // "why do/does/did we/it/they ..."
3
- /^why\s+(do|does|did)\s+(we|it|they)\s+/i,
4
- // "why is/are/was/were we/it/they ..."
5
- /^why\s+(is|are|was|were)\s+(we|it|they)\s+/i,
6
- // "why should/would/can/could/have/has we/it/they ..."
7
- /^why\s+(should|would|can|could|have|has)\s+(we|it|they)\s+/i,
8
- // "why verb ..." (strip verb too, keep the rest)
9
- /^why\s+(do|does|did|is|are|was|were|should|would|can|could|have|has)\s+/i,
10
- // bare "why ..."
11
- /^why\s+/i,
12
- // "do/does/did we/it/they ..."
13
- /^(do|does|did)\s+(we|it|they)\s+/i,
14
- // "what do/does/did we/it/they ..."
15
- /^what\s+(do|does|did)\s+(we|it|they)\s+/i,
16
- // "what is/are/was/were ..."
17
- /^what\s+(is|are|was|were)\s+/i,
18
- // bare "what ..."
19
- /^what\s+/i,
20
- // "how do/does/did we/it/they ..."
21
- /^how\s+(do|does|did)\s+(we|it|they)\s+/i,
22
- // "how verb ..."
23
- /^how\s+(does|do|did|is|are|was|were)\s+/i,
24
- // bare "how ..."
25
- /^how\s+/i,
26
- ];
27
- export function normaliseWhyQuery(q) {
28
- const trimmed = q.trim();
29
- for (const re of STRIP_PREFIXES) {
30
- if (re.test(trimmed)) {
31
- const stripped = trimmed.replace(re, '').trim();
32
- if (stripped.length > 0) {
33
- return stripped;
34
- }
35
- }
36
- }
37
- return trimmed;
38
- }
39
- //# sourceMappingURL=why-normalise.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"why-normalise.js","sourceRoot":"","sources":["../../src/lib/why-normalise.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAa;IAC/B,mCAAmC;IACnC,yCAAyC;IACzC,uCAAuC;IACvC,6CAA6C;IAC7C,uDAAuD;IACvD,6DAA6D;IAC7D,iDAAiD;IACjD,0EAA0E;IAC1E,iBAAiB;IACjB,UAAU;IACV,+BAA+B;IAC/B,mCAAmC;IACnC,oCAAoC;IACpC,0CAA0C;IAC1C,6BAA6B;IAC7B,+BAA+B;IAC/B,kBAAkB;IAClB,WAAW;IACX,mCAAmC;IACnC,yCAAyC;IACzC,iBAAiB;IACjB,0CAA0C;IAC1C,iBAAiB;IACjB,UAAU;CACX,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}