create-hq 7.0.0 → 10.1.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.
- package/dist/__tests__/deps.test.d.ts +2 -0
- package/dist/__tests__/deps.test.d.ts.map +1 -0
- package/dist/__tests__/deps.test.js +176 -0
- package/dist/__tests__/deps.test.js.map +1 -0
- package/dist/__tests__/platform.test.d.ts +2 -0
- package/dist/__tests__/platform.test.d.ts.map +1 -0
- package/dist/__tests__/platform.test.js +127 -0
- package/dist/__tests__/platform.test.js.map +1 -0
- package/dist/auth.d.ts +32 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +156 -0
- package/dist/auth.js.map +1 -0
- package/dist/deps.d.ts +32 -2
- package/dist/deps.d.ts.map +1 -1
- package/dist/deps.js +180 -7
- package/dist/deps.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/packages.d.ts +71 -0
- package/dist/packages.d.ts.map +1 -0
- package/dist/packages.js +332 -0
- package/dist/packages.js.map +1 -0
- package/dist/platform.d.ts +9 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +69 -0
- package/dist/platform.js.map +1 -0
- package/dist/scaffold.d.ts +1 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +58 -42
- package/dist/scaffold.js.map +1 -1
- package/dist/ui.js +1 -1
- package/dist/ui.js.map +1 -1
- package/package.json +4 -3
package/dist/deps.js
CHANGED
|
@@ -1,46 +1,109 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
|
+
import { createInterface } from "readline";
|
|
3
|
+
import chalk from "chalk";
|
|
2
4
|
import { success, warn, info } from "./ui.js";
|
|
5
|
+
import { detectPlatform } from "./platform.js";
|
|
3
6
|
const deps = [
|
|
4
7
|
{
|
|
5
8
|
name: "Node.js",
|
|
6
9
|
command: "node --version",
|
|
7
10
|
required: true,
|
|
8
11
|
installHint: "https://nodejs.org",
|
|
12
|
+
autoInstallable: false,
|
|
13
|
+
installCommands: {},
|
|
9
14
|
},
|
|
10
15
|
{
|
|
11
16
|
name: "Claude Code CLI",
|
|
12
17
|
command: "claude --version",
|
|
13
18
|
required: true,
|
|
14
19
|
installHint: "npm install -g @anthropic-ai/claude-code",
|
|
20
|
+
autoInstallable: true,
|
|
21
|
+
installCommands: {
|
|
22
|
+
npm: "npm install -g @anthropic-ai/claude-code",
|
|
23
|
+
},
|
|
15
24
|
},
|
|
16
25
|
{
|
|
17
26
|
name: "qmd (search)",
|
|
18
27
|
command: "qmd --version",
|
|
19
28
|
required: true,
|
|
20
29
|
installHint: "npm install -g @tobilu/qmd",
|
|
30
|
+
autoInstallable: true,
|
|
31
|
+
installCommands: {
|
|
32
|
+
npm: "npm install -g @tobilu/qmd",
|
|
33
|
+
},
|
|
21
34
|
},
|
|
22
35
|
{
|
|
23
36
|
name: "yq",
|
|
24
37
|
command: "yq --version",
|
|
25
38
|
required: true,
|
|
26
39
|
installHint: "brew install yq",
|
|
40
|
+
autoInstallable: true,
|
|
41
|
+
installCommands: {
|
|
42
|
+
brew: "brew install yq",
|
|
43
|
+
apt: "sudo snap install yq",
|
|
44
|
+
dnf: "sudo dnf install yq",
|
|
45
|
+
pacman: "sudo pacman -S yq",
|
|
46
|
+
},
|
|
27
47
|
},
|
|
28
48
|
{
|
|
29
49
|
name: "gh CLI",
|
|
30
50
|
command: "gh --version",
|
|
31
51
|
required: false,
|
|
32
52
|
installHint: "brew install gh",
|
|
53
|
+
autoInstallable: true,
|
|
54
|
+
installCommands: {
|
|
55
|
+
brew: "brew install gh",
|
|
56
|
+
apt: "sudo apt install gh",
|
|
57
|
+
dnf: "sudo dnf install gh",
|
|
58
|
+
pacman: "sudo pacman -S github-cli",
|
|
59
|
+
},
|
|
33
60
|
},
|
|
34
61
|
{
|
|
35
62
|
name: "Vercel CLI",
|
|
36
63
|
command: "vercel --version",
|
|
37
64
|
required: false,
|
|
38
65
|
installHint: "npm install -g vercel",
|
|
66
|
+
autoInstallable: true,
|
|
67
|
+
installCommands: {
|
|
68
|
+
npm: "npm install -g vercel",
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: "hq-cli",
|
|
73
|
+
command: "hq --version",
|
|
74
|
+
required: false,
|
|
75
|
+
installHint: "npm install -g @indigoai-us/hq-cli",
|
|
76
|
+
autoInstallable: true,
|
|
77
|
+
installCommands: {
|
|
78
|
+
npm: "npm install -g @indigoai-us/hq-cli",
|
|
79
|
+
},
|
|
39
80
|
},
|
|
40
81
|
];
|
|
82
|
+
/**
|
|
83
|
+
* Pick the best install command for a dep given the detected platform.
|
|
84
|
+
* Prefers the system package manager, falls back to npm if available.
|
|
85
|
+
* Returns null when no suitable command exists (e.g. Node.js — manual install).
|
|
86
|
+
*/
|
|
87
|
+
export function getInstallCommand(dep, platform) {
|
|
88
|
+
const cmds = dep.installCommands;
|
|
89
|
+
// Try system package manager first (yum falls back to dnf commands)
|
|
90
|
+
const pm = platform.packageManager === "yum" ? "dnf" : platform.packageManager;
|
|
91
|
+
if (pm && cmds[pm]) {
|
|
92
|
+
return cmds[pm];
|
|
93
|
+
}
|
|
94
|
+
// Fall back to npm
|
|
95
|
+
if (platform.npmAvailable && cmds.npm) {
|
|
96
|
+
return cmds.npm;
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
41
100
|
function checkCommand(command) {
|
|
42
101
|
try {
|
|
43
|
-
const output = execSync(command, {
|
|
102
|
+
const output = execSync(command, {
|
|
103
|
+
stdio: "pipe",
|
|
104
|
+
encoding: "utf-8",
|
|
105
|
+
timeout: 10_000, // 10s — prevents hanging on slow commands (e.g. claude --version)
|
|
106
|
+
});
|
|
44
107
|
const version = output.trim().split("\n")[0];
|
|
45
108
|
return version;
|
|
46
109
|
}
|
|
@@ -48,24 +111,134 @@ function checkCommand(command) {
|
|
|
48
111
|
return null;
|
|
49
112
|
}
|
|
50
113
|
}
|
|
51
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Standalone confirm helper using readline directly.
|
|
116
|
+
* Avoids importing from scaffold.ts to prevent circular dependencies.
|
|
117
|
+
*/
|
|
118
|
+
async function confirm(question, defaultYes) {
|
|
119
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
120
|
+
const hint = defaultYes ? "Y/n" : "y/N";
|
|
121
|
+
return new Promise((resolve) => {
|
|
122
|
+
rl.question(` ? ${question} (${hint}) `, (answer) => {
|
|
123
|
+
rl.close();
|
|
124
|
+
const trimmed = answer.trim();
|
|
125
|
+
if (!trimmed) {
|
|
126
|
+
resolve(defaultYes);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
resolve(trimmed.toLowerCase().startsWith("y"));
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
export async function checkDeps() {
|
|
52
135
|
console.log();
|
|
53
136
|
console.log(" Checking dependencies...");
|
|
137
|
+
const platform = detectPlatform();
|
|
54
138
|
let allRequired = true;
|
|
139
|
+
const results = [];
|
|
55
140
|
for (const dep of deps) {
|
|
56
141
|
const version = checkCommand(dep.command);
|
|
57
142
|
if (version) {
|
|
58
143
|
success(`${dep.name} ${version}`);
|
|
144
|
+
results.push({ name: dep.name, required: dep.required, status: "installed", version, installHint: dep.installHint });
|
|
145
|
+
continue;
|
|
59
146
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
147
|
+
// Dep is missing — decide how to handle
|
|
148
|
+
const installCmd = dep.autoInstallable ? getInstallCommand(dep, platform) : null;
|
|
149
|
+
if (installCmd) {
|
|
150
|
+
// Can offer auto-install
|
|
151
|
+
const defaultYes = dep.required;
|
|
152
|
+
const optionalTag = dep.required ? "" : " (optional)";
|
|
153
|
+
const accepted = await confirm(`Install ${dep.name}?${optionalTag} [${installCmd}]`, defaultYes);
|
|
154
|
+
if (accepted) {
|
|
155
|
+
info(`Running: ${installCmd}`);
|
|
156
|
+
try {
|
|
157
|
+
execSync(installCmd, { stdio: "inherit" });
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// install command failed — will be caught by re-check below
|
|
161
|
+
}
|
|
162
|
+
// Re-check after install attempt
|
|
163
|
+
const recheck = checkCommand(dep.command);
|
|
164
|
+
if (recheck) {
|
|
165
|
+
success(`${dep.name} ${recheck}`);
|
|
166
|
+
results.push({ name: dep.name, required: dep.required, status: "just-installed", version: recheck, installHint: dep.installHint });
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
warn(`${dep.name} install failed — could not verify after install`);
|
|
171
|
+
results.push({ name: dep.name, required: dep.required, status: "missing", installHint: dep.installHint });
|
|
172
|
+
if (dep.required) {
|
|
173
|
+
allRequired = false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
// User declined
|
|
179
|
+
if (dep.required) {
|
|
180
|
+
warn(`${dep.name} not found (required)`);
|
|
181
|
+
results.push({ name: dep.name, required: dep.required, status: "missing", installHint: dep.installHint });
|
|
182
|
+
allRequired = false;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
info(`${dep.name} (optional) — skipped`);
|
|
186
|
+
results.push({ name: dep.name, required: dep.required, status: "skipped", installHint: dep.installHint });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
64
189
|
}
|
|
65
190
|
else {
|
|
66
|
-
|
|
191
|
+
// No auto-install available — show manual hint
|
|
192
|
+
if (dep.required) {
|
|
193
|
+
warn(`${dep.name} not found`);
|
|
194
|
+
info(`Install manually: ${dep.installHint}`);
|
|
195
|
+
results.push({ name: dep.name, required: dep.required, status: "missing", installHint: dep.installHint });
|
|
196
|
+
allRequired = false;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
info(`${dep.name} (optional) — ${dep.installHint}`);
|
|
200
|
+
results.push({ name: dep.name, required: dep.required, status: "skipped", installHint: dep.installHint });
|
|
201
|
+
}
|
|
67
202
|
}
|
|
68
203
|
}
|
|
204
|
+
// ─── Summary Banner ──────────────────────────────────────────────────────
|
|
205
|
+
printDepSummary(results, allRequired);
|
|
69
206
|
return { allRequired };
|
|
70
207
|
}
|
|
208
|
+
function printDepSummary(results, allRequired) {
|
|
209
|
+
const statusIcon = (r) => {
|
|
210
|
+
switch (r.status) {
|
|
211
|
+
case "installed":
|
|
212
|
+
return chalk.green("✓");
|
|
213
|
+
case "just-installed":
|
|
214
|
+
return chalk.green("✓") + chalk.cyan(" new");
|
|
215
|
+
case "missing":
|
|
216
|
+
return chalk.red("✗");
|
|
217
|
+
case "skipped":
|
|
218
|
+
return chalk.dim("~");
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
console.log();
|
|
222
|
+
console.log(chalk.dim(" ─── Dependency Summary ───────────────────────"));
|
|
223
|
+
console.log();
|
|
224
|
+
for (const r of results) {
|
|
225
|
+
const icon = statusIcon(r);
|
|
226
|
+
const ver = r.version ? chalk.dim(` ${r.version}`) : "";
|
|
227
|
+
const tag = r.required ? "" : chalk.dim(" (optional)");
|
|
228
|
+
console.log(` ${icon} ${r.name}${ver}${tag}`);
|
|
229
|
+
}
|
|
230
|
+
console.log();
|
|
231
|
+
const missing = results.filter((r) => r.required && r.status === "missing");
|
|
232
|
+
if (missing.length > 0) {
|
|
233
|
+
warn("Some required dependencies are missing:");
|
|
234
|
+
console.log();
|
|
235
|
+
for (const m of missing) {
|
|
236
|
+
console.log(chalk.yellow(" →") + ` ${m.name}: ${chalk.dim(m.installHint)}`);
|
|
237
|
+
}
|
|
238
|
+
console.log();
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
success("All required dependencies installed");
|
|
242
|
+
}
|
|
243
|
+
}
|
|
71
244
|
//# sourceMappingURL=deps.js.map
|
package/dist/deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,13 +7,14 @@ const pkg = require("../package.json");
|
|
|
7
7
|
const program = new Command();
|
|
8
8
|
program
|
|
9
9
|
.name("create-hq")
|
|
10
|
-
.description("Create a new HQ — Personal OS for AI Workers")
|
|
10
|
+
.description("Create a new HQ by Indigo — Personal OS for AI Workers")
|
|
11
11
|
.version(pkg.version)
|
|
12
12
|
.argument("[directory]", "where to create HQ", "hq")
|
|
13
13
|
.option("--skip-deps", "skip dependency checks")
|
|
14
14
|
.option("--skip-cli", "don't install @indigoai-us/hq-cli globally")
|
|
15
15
|
.option("--skip-sync", "don't prompt for cloud sync setup")
|
|
16
16
|
.option("--tag <version>", "fetch a specific HQ version tag (e.g. v9.1.0)")
|
|
17
|
+
.option("--local-template <path>", "use a local template directory instead of fetching from GitHub")
|
|
17
18
|
.action(async (directory, options) => {
|
|
18
19
|
try {
|
|
19
20
|
await scaffold(directory, options);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,QAAQ,CAAC,aAAa,EAAE,oBAAoB,EAAE,IAAI,CAAC;KACnD,MAAM,CAAC,aAAa,EAAE,wBAAwB,CAAC;KAC/C,MAAM,CAAC,YAAY,EAAE,4CAA4C,CAAC;KAClE,MAAM,CAAC,aAAa,EAAE,mCAAmC,CAAC;KAC1D,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;KAC1E,MAAM,CAAC,yBAAyB,EAAE,gEAAgE,CAAC;KACnG,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAO,EAAE,EAAE;IAC3C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CACpE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package discovery, download, and installation for create-hq (US-008)
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Public package discovery (GET /api/packages)
|
|
6
|
+
* - Entitlement check (GET /api/packages/my-entitlements)
|
|
7
|
+
* - Package download with SHA256 + RSA signature verification
|
|
8
|
+
* - Extraction to packages/installed/<slug>/
|
|
9
|
+
* - Registry.yaml update
|
|
10
|
+
* - Auto-merge for fresh HQ (register workers, commands, knowledge)
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Read the registry URL from packages/sources.yaml in the target HQ dir.
|
|
14
|
+
* Falls back to the default registry URL if sources.yaml is not present
|
|
15
|
+
* (which is expected during initial scaffold before the template is fully
|
|
16
|
+
* written).
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRegistryUrl(hqRoot: string): string;
|
|
19
|
+
export interface PackageMeta {
|
|
20
|
+
slug: string;
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
tier: string;
|
|
24
|
+
latest_version: string;
|
|
25
|
+
author?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface EntitlementEntry {
|
|
28
|
+
slug: string;
|
|
29
|
+
tier: string;
|
|
30
|
+
granted_at: string;
|
|
31
|
+
expires_at?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface DownloadInfo {
|
|
34
|
+
url: string;
|
|
35
|
+
sha256: string;
|
|
36
|
+
signature?: string;
|
|
37
|
+
}
|
|
38
|
+
/** A package shown in the TUI list with its selection state. */
|
|
39
|
+
export interface PackageChoice {
|
|
40
|
+
pkg: PackageMeta;
|
|
41
|
+
entitled: boolean;
|
|
42
|
+
selected: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Fetch the public package catalog.
|
|
46
|
+
* Returns an empty array on failure (network down, etc.).
|
|
47
|
+
*/
|
|
48
|
+
export declare function fetchPublicPackages(registryUrl: string): Promise<PackageMeta[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Fetch packages the authenticated user is entitled to.
|
|
51
|
+
* Returns an empty array on failure.
|
|
52
|
+
*/
|
|
53
|
+
export declare function fetchEntitlements(registryUrl: string, authToken: string): Promise<EntitlementEntry[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Build the combined package list for the TUI.
|
|
56
|
+
* Entitled packages are pre-checked; non-entitled are shown with lock icon.
|
|
57
|
+
*/
|
|
58
|
+
export declare function buildPackageChoices(allPackages: PackageMeta[], entitlements: EntitlementEntry[]): PackageChoice[];
|
|
59
|
+
/**
|
|
60
|
+
* Download, verify, and extract a single package into the target HQ.
|
|
61
|
+
* Returns true on success, false on failure (non-throwing for batch installs).
|
|
62
|
+
*/
|
|
63
|
+
export declare function installPackage(registryUrl: string, slug: string, hqRoot: string, authToken?: string): Promise<boolean>;
|
|
64
|
+
/** Format a package for display in the selection list. */
|
|
65
|
+
export declare function formatPackageChoice(choice: PackageChoice): string;
|
|
66
|
+
/**
|
|
67
|
+
* Install multiple packages in sequence, reporting progress.
|
|
68
|
+
* Returns the list of successfully installed slugs.
|
|
69
|
+
*/
|
|
70
|
+
export declare function installSelectedPackages(registryUrl: string, slugs: string[], hqRoot: string, authToken?: string): Promise<string[]>;
|
|
71
|
+
//# sourceMappingURL=packages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../src/packages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWrD;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AA4BD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,EAAE,CAAC,CAUxB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAW7B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EAAE,EAC1B,YAAY,EAAE,gBAAgB,EAAE,GAC/B,aAAa,EAAE,CAOjB;AAkDD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAqElB;AA4ID,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAOjE;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB"}
|