@claude-flow/cli 3.0.0-alpha.165 → 3.0.0-alpha.166
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/src/commands/plugins.d.ts.map +1 -1
- package/dist/src/commands/plugins.js +200 -77
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/plugins/manager.d.ts +133 -0
- package/dist/src/plugins/manager.d.ts.map +1 -0
- package/dist/src/plugins/manager.js +383 -0
- package/dist/src/plugins/manager.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Manager
|
|
3
|
+
* Handles actual plugin installation, persistence, and lifecycle
|
|
4
|
+
* Bridges discovery service with file system persistence
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { exec } from 'child_process';
|
|
9
|
+
import { promisify } from 'util';
|
|
10
|
+
const execAsync = promisify(exec);
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Plugin Manager
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Manages plugin installation, persistence, and lifecycle.
|
|
16
|
+
*
|
|
17
|
+
* Unlike the simulated version, this actually:
|
|
18
|
+
* - Persists plugins to disk
|
|
19
|
+
* - Downloads from npm
|
|
20
|
+
* - Tracks enabled/disabled state
|
|
21
|
+
* - Loads plugin modules
|
|
22
|
+
*/
|
|
23
|
+
export class PluginManager {
|
|
24
|
+
config;
|
|
25
|
+
manifest = null;
|
|
26
|
+
constructor(baseDir = process.cwd()) {
|
|
27
|
+
const pluginsDir = path.join(baseDir, '.claude-flow', 'plugins');
|
|
28
|
+
this.config = {
|
|
29
|
+
pluginsDir,
|
|
30
|
+
manifestPath: path.join(pluginsDir, 'installed.json'),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// =========================================================================
|
|
34
|
+
// Initialization
|
|
35
|
+
// =========================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Initialize the plugin manager, creating directories and loading manifest
|
|
38
|
+
*/
|
|
39
|
+
async initialize() {
|
|
40
|
+
// Ensure plugins directory exists
|
|
41
|
+
await this.ensureDirectory(this.config.pluginsDir);
|
|
42
|
+
// Load or create manifest
|
|
43
|
+
this.manifest = await this.loadManifest();
|
|
44
|
+
}
|
|
45
|
+
async ensureDirectory(dir) {
|
|
46
|
+
if (!fs.existsSync(dir)) {
|
|
47
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async loadManifest() {
|
|
51
|
+
try {
|
|
52
|
+
if (fs.existsSync(this.config.manifestPath)) {
|
|
53
|
+
const content = fs.readFileSync(this.config.manifestPath, 'utf-8');
|
|
54
|
+
return JSON.parse(content);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.warn('[PluginManager] Failed to load manifest, creating new one');
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
version: '1.0.0',
|
|
62
|
+
lastUpdated: new Date().toISOString(),
|
|
63
|
+
plugins: {},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async saveManifest() {
|
|
67
|
+
if (!this.manifest)
|
|
68
|
+
return;
|
|
69
|
+
this.manifest.lastUpdated = new Date().toISOString();
|
|
70
|
+
await this.ensureDirectory(path.dirname(this.config.manifestPath));
|
|
71
|
+
fs.writeFileSync(this.config.manifestPath, JSON.stringify(this.manifest, null, 2), 'utf-8');
|
|
72
|
+
}
|
|
73
|
+
// =========================================================================
|
|
74
|
+
// Installation
|
|
75
|
+
// =========================================================================
|
|
76
|
+
/**
|
|
77
|
+
* Install a plugin from npm
|
|
78
|
+
*/
|
|
79
|
+
async installFromNpm(packageName, version) {
|
|
80
|
+
if (!this.manifest) {
|
|
81
|
+
await this.initialize();
|
|
82
|
+
}
|
|
83
|
+
const versionSpec = version ? `${packageName}@${version}` : packageName;
|
|
84
|
+
try {
|
|
85
|
+
// Check if already installed
|
|
86
|
+
if (this.manifest.plugins[packageName]) {
|
|
87
|
+
return {
|
|
88
|
+
success: false,
|
|
89
|
+
error: `Plugin ${packageName} is already installed. Use upgrade to update.`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// Install to local plugins directory
|
|
93
|
+
const installDir = path.join(this.config.pluginsDir, 'node_modules');
|
|
94
|
+
await this.ensureDirectory(installDir);
|
|
95
|
+
// Use npm to install
|
|
96
|
+
console.log(`[PluginManager] Installing ${versionSpec}...`);
|
|
97
|
+
const { stdout, stderr } = await execAsync(`npm install --prefix "${this.config.pluginsDir}" ${versionSpec}`, { timeout: 120000 });
|
|
98
|
+
// Get installed version
|
|
99
|
+
const packageJsonPath = path.join(installDir, packageName, 'package.json');
|
|
100
|
+
let installedVersion = version || 'latest';
|
|
101
|
+
let commands = [];
|
|
102
|
+
let hooks = [];
|
|
103
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
104
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
105
|
+
installedVersion = pkg.version;
|
|
106
|
+
// Check for claude-flow plugin metadata
|
|
107
|
+
if (pkg['claude-flow']) {
|
|
108
|
+
commands = pkg['claude-flow'].commands || [];
|
|
109
|
+
hooks = pkg['claude-flow'].hooks || [];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Create plugin entry
|
|
113
|
+
const plugin = {
|
|
114
|
+
name: packageName,
|
|
115
|
+
version: installedVersion,
|
|
116
|
+
installedAt: new Date().toISOString(),
|
|
117
|
+
enabled: true,
|
|
118
|
+
source: 'npm',
|
|
119
|
+
path: path.join(installDir, packageName),
|
|
120
|
+
commands,
|
|
121
|
+
hooks,
|
|
122
|
+
};
|
|
123
|
+
// Save to manifest
|
|
124
|
+
this.manifest.plugins[packageName] = plugin;
|
|
125
|
+
await this.saveManifest();
|
|
126
|
+
console.log(`[PluginManager] Installed ${packageName}@${installedVersion}`);
|
|
127
|
+
return { success: true, plugin };
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
131
|
+
console.error(`[PluginManager] Failed to install ${packageName}:`, errorMsg);
|
|
132
|
+
return { success: false, error: errorMsg };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Install a plugin from a local path
|
|
137
|
+
*/
|
|
138
|
+
async installFromLocal(sourcePath) {
|
|
139
|
+
if (!this.manifest) {
|
|
140
|
+
await this.initialize();
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const absolutePath = path.resolve(sourcePath);
|
|
144
|
+
if (!fs.existsSync(absolutePath)) {
|
|
145
|
+
return { success: false, error: `Path does not exist: ${absolutePath}` };
|
|
146
|
+
}
|
|
147
|
+
// Read package.json
|
|
148
|
+
const packageJsonPath = path.join(absolutePath, 'package.json');
|
|
149
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
150
|
+
return { success: false, error: 'No package.json found at path' };
|
|
151
|
+
}
|
|
152
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
153
|
+
const packageName = pkg.name;
|
|
154
|
+
// Check if already installed
|
|
155
|
+
if (this.manifest.plugins[packageName]) {
|
|
156
|
+
return {
|
|
157
|
+
success: false,
|
|
158
|
+
error: `Plugin ${packageName} is already installed`,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// Create plugin entry (link to local path, don't copy)
|
|
162
|
+
const plugin = {
|
|
163
|
+
name: packageName,
|
|
164
|
+
version: pkg.version,
|
|
165
|
+
installedAt: new Date().toISOString(),
|
|
166
|
+
enabled: true,
|
|
167
|
+
source: 'local',
|
|
168
|
+
path: absolutePath,
|
|
169
|
+
commands: pkg['claude-flow']?.commands || [],
|
|
170
|
+
hooks: pkg['claude-flow']?.hooks || [],
|
|
171
|
+
};
|
|
172
|
+
// Save to manifest
|
|
173
|
+
this.manifest.plugins[packageName] = plugin;
|
|
174
|
+
await this.saveManifest();
|
|
175
|
+
console.log(`[PluginManager] Installed local plugin ${packageName}@${pkg.version}`);
|
|
176
|
+
return { success: true, plugin };
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
180
|
+
console.error(`[PluginManager] Failed to install from local:`, errorMsg);
|
|
181
|
+
return { success: false, error: errorMsg };
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// =========================================================================
|
|
185
|
+
// Uninstallation
|
|
186
|
+
// =========================================================================
|
|
187
|
+
/**
|
|
188
|
+
* Uninstall a plugin
|
|
189
|
+
*/
|
|
190
|
+
async uninstall(packageName) {
|
|
191
|
+
if (!this.manifest) {
|
|
192
|
+
await this.initialize();
|
|
193
|
+
}
|
|
194
|
+
const plugin = this.manifest.plugins[packageName];
|
|
195
|
+
if (!plugin) {
|
|
196
|
+
return { success: false, error: `Plugin ${packageName} is not installed` };
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
// For npm-installed plugins, remove from node_modules
|
|
200
|
+
if (plugin.source === 'npm') {
|
|
201
|
+
await execAsync(`npm uninstall --prefix "${this.config.pluginsDir}" ${packageName}`, { timeout: 60000 });
|
|
202
|
+
}
|
|
203
|
+
// Remove from manifest
|
|
204
|
+
delete this.manifest.plugins[packageName];
|
|
205
|
+
await this.saveManifest();
|
|
206
|
+
console.log(`[PluginManager] Uninstalled ${packageName}`);
|
|
207
|
+
return { success: true };
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
211
|
+
console.error(`[PluginManager] Failed to uninstall ${packageName}:`, errorMsg);
|
|
212
|
+
return { success: false, error: errorMsg };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// =========================================================================
|
|
216
|
+
// Enable/Disable
|
|
217
|
+
// =========================================================================
|
|
218
|
+
/**
|
|
219
|
+
* Enable a plugin
|
|
220
|
+
*/
|
|
221
|
+
async enable(packageName) {
|
|
222
|
+
if (!this.manifest) {
|
|
223
|
+
await this.initialize();
|
|
224
|
+
}
|
|
225
|
+
const plugin = this.manifest.plugins[packageName];
|
|
226
|
+
if (!plugin) {
|
|
227
|
+
return { success: false, error: `Plugin ${packageName} is not installed` };
|
|
228
|
+
}
|
|
229
|
+
plugin.enabled = true;
|
|
230
|
+
await this.saveManifest();
|
|
231
|
+
return { success: true };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Disable a plugin
|
|
235
|
+
*/
|
|
236
|
+
async disable(packageName) {
|
|
237
|
+
if (!this.manifest) {
|
|
238
|
+
await this.initialize();
|
|
239
|
+
}
|
|
240
|
+
const plugin = this.manifest.plugins[packageName];
|
|
241
|
+
if (!plugin) {
|
|
242
|
+
return { success: false, error: `Plugin ${packageName} is not installed` };
|
|
243
|
+
}
|
|
244
|
+
plugin.enabled = false;
|
|
245
|
+
await this.saveManifest();
|
|
246
|
+
return { success: true };
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Toggle a plugin's enabled state
|
|
250
|
+
*/
|
|
251
|
+
async toggle(packageName) {
|
|
252
|
+
if (!this.manifest) {
|
|
253
|
+
await this.initialize();
|
|
254
|
+
}
|
|
255
|
+
const plugin = this.manifest.plugins[packageName];
|
|
256
|
+
if (!plugin) {
|
|
257
|
+
return { success: false, error: `Plugin ${packageName} is not installed` };
|
|
258
|
+
}
|
|
259
|
+
plugin.enabled = !plugin.enabled;
|
|
260
|
+
await this.saveManifest();
|
|
261
|
+
return { success: true, enabled: plugin.enabled };
|
|
262
|
+
}
|
|
263
|
+
// =========================================================================
|
|
264
|
+
// Query
|
|
265
|
+
// =========================================================================
|
|
266
|
+
/**
|
|
267
|
+
* Get all installed plugins
|
|
268
|
+
*/
|
|
269
|
+
async getInstalled() {
|
|
270
|
+
if (!this.manifest) {
|
|
271
|
+
await this.initialize();
|
|
272
|
+
}
|
|
273
|
+
return Object.values(this.manifest.plugins);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get enabled plugins
|
|
277
|
+
*/
|
|
278
|
+
async getEnabled() {
|
|
279
|
+
const all = await this.getInstalled();
|
|
280
|
+
return all.filter(p => p.enabled);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Check if a plugin is installed
|
|
284
|
+
*/
|
|
285
|
+
async isInstalled(packageName) {
|
|
286
|
+
if (!this.manifest) {
|
|
287
|
+
await this.initialize();
|
|
288
|
+
}
|
|
289
|
+
return packageName in this.manifest.plugins;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Get a specific installed plugin
|
|
293
|
+
*/
|
|
294
|
+
async getPlugin(packageName) {
|
|
295
|
+
if (!this.manifest) {
|
|
296
|
+
await this.initialize();
|
|
297
|
+
}
|
|
298
|
+
return this.manifest.plugins[packageName];
|
|
299
|
+
}
|
|
300
|
+
// =========================================================================
|
|
301
|
+
// Upgrade
|
|
302
|
+
// =========================================================================
|
|
303
|
+
/**
|
|
304
|
+
* Upgrade a plugin to a new version
|
|
305
|
+
*/
|
|
306
|
+
async upgrade(packageName, version) {
|
|
307
|
+
if (!this.manifest) {
|
|
308
|
+
await this.initialize();
|
|
309
|
+
}
|
|
310
|
+
const existing = this.manifest.plugins[packageName];
|
|
311
|
+
if (!existing) {
|
|
312
|
+
return { success: false, error: `Plugin ${packageName} is not installed` };
|
|
313
|
+
}
|
|
314
|
+
if (existing.source !== 'npm') {
|
|
315
|
+
return { success: false, error: 'Can only upgrade npm-installed plugins' };
|
|
316
|
+
}
|
|
317
|
+
try {
|
|
318
|
+
const versionSpec = version ? `${packageName}@${version}` : `${packageName}@latest`;
|
|
319
|
+
// Reinstall with new version
|
|
320
|
+
await execAsync(`npm install --prefix "${this.config.pluginsDir}" ${versionSpec}`, { timeout: 120000 });
|
|
321
|
+
// Update manifest
|
|
322
|
+
const installDir = path.join(this.config.pluginsDir, 'node_modules');
|
|
323
|
+
const packageJsonPath = path.join(installDir, packageName, 'package.json');
|
|
324
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
325
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
326
|
+
existing.version = pkg.version;
|
|
327
|
+
existing.commands = pkg['claude-flow']?.commands || existing.commands;
|
|
328
|
+
existing.hooks = pkg['claude-flow']?.hooks || existing.hooks;
|
|
329
|
+
}
|
|
330
|
+
await this.saveManifest();
|
|
331
|
+
console.log(`[PluginManager] Upgraded ${packageName} to ${existing.version}`);
|
|
332
|
+
return { success: true, plugin: existing };
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
336
|
+
return { success: false, error: errorMsg };
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// =========================================================================
|
|
340
|
+
// Config
|
|
341
|
+
// =========================================================================
|
|
342
|
+
/**
|
|
343
|
+
* Update plugin config
|
|
344
|
+
*/
|
|
345
|
+
async setConfig(packageName, config) {
|
|
346
|
+
if (!this.manifest) {
|
|
347
|
+
await this.initialize();
|
|
348
|
+
}
|
|
349
|
+
const plugin = this.manifest.plugins[packageName];
|
|
350
|
+
if (!plugin) {
|
|
351
|
+
return { success: false, error: `Plugin ${packageName} is not installed` };
|
|
352
|
+
}
|
|
353
|
+
plugin.config = { ...plugin.config, ...config };
|
|
354
|
+
await this.saveManifest();
|
|
355
|
+
return { success: true };
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get plugins directory path
|
|
359
|
+
*/
|
|
360
|
+
getPluginsDir() {
|
|
361
|
+
return this.config.pluginsDir;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Get manifest path
|
|
365
|
+
*/
|
|
366
|
+
getManifestPath() {
|
|
367
|
+
return this.config.manifestPath;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
// ============================================================================
|
|
371
|
+
// Singleton Instance
|
|
372
|
+
// ============================================================================
|
|
373
|
+
let defaultManager = null;
|
|
374
|
+
export function getPluginManager(baseDir) {
|
|
375
|
+
if (!defaultManager) {
|
|
376
|
+
defaultManager = new PluginManager(baseDir);
|
|
377
|
+
}
|
|
378
|
+
return defaultManager;
|
|
379
|
+
}
|
|
380
|
+
export function resetPluginManager() {
|
|
381
|
+
defaultManager = null;
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/plugins/manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAY,IAAI,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AA6BlC,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAsB;IAC5B,QAAQ,GAAoC,IAAI,CAAC;IAEzD,YAAY,UAAkB,OAAO,CAAC,GAAG,EAAE;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,GAAG;YACZ,UAAU;YACV,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC;SACtD,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,kCAAkC;QAClC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEnD,0BAA0B;QAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,GAAW;QACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACnE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErD,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QACnE,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACtC,OAAO,CACR,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,eAAe;IACf,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,WAAmB,EACnB,OAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QAExE,IAAI,CAAC;YACH,6BAA6B;YAC7B,IAAI,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,UAAU,WAAW,+CAA+C;iBAC5E,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACrE,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAEvC,qBAAqB;YACrB,OAAO,CAAC,GAAG,CAAC,8BAA8B,WAAW,KAAK,CAAC,CAAC;YAE5D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CACxC,yBAAyB,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW,EAAE,EACjE,EAAE,OAAO,EAAE,MAAM,EAAE,CACpB,CAAC;YAEF,wBAAwB;YACxB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAC3E,IAAI,gBAAgB,GAAG,OAAO,IAAI,QAAQ,CAAC;YAC3C,IAAI,QAAQ,GAAa,EAAE,CAAC;YAC5B,IAAI,KAAK,GAAa,EAAE,CAAC;YAEzB,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC;gBAE/B,wCAAwC;gBACxC,IAAI,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;oBACvB,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;oBAC7C,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,MAAM,MAAM,GAAoB;gBAC9B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,gBAAgB;gBACzB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;gBACxC,QAAQ;gBACR,KAAK;aACN,CAAC;YAEF,mBAAmB;YACnB,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;YAC7C,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,OAAO,CAAC,GAAG,CAAC,6BAA6B,WAAW,IAAI,gBAAgB,EAAE,CAAC,CAAC;YAE5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,KAAK,CAAC,qCAAqC,WAAW,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,UAAkB;QAElB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,YAAY,EAAE,EAAE,CAAC;YAC3E,CAAC;YAED,oBAAoB;YACpB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC;YACpE,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;YAE7B,6BAA6B;YAC7B,IAAI,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,UAAU,WAAW,uBAAuB;iBACpD,CAAC;YACJ,CAAC;YAED,uDAAuD;YACvD,MAAM,MAAM,GAAoB;gBAC9B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,IAAI,EAAE;gBAC5C,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,EAAE;aACvC,CAAC;YAEF,mBAAmB;YACnB,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;YAC7C,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,OAAO,CAAC,GAAG,CAAC,0CAA0C,WAAW,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAEpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,QAAQ,CAAC,CAAC;YACzE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,WAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,WAAW,mBAAmB,EAAE,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC;YACH,sDAAsD;YACtD,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,SAAS,CACb,2BAA2B,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW,EAAE,EACnE,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB,CAAC;YACJ,CAAC;YAED,uBAAuB;YACvB,OAAO,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,OAAO,CAAC,GAAG,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;YAE1D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,KAAK,CAAC,uCAAuC,WAAW,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC/E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,WAAW,mBAAmB,EAAE,CAAC;QAC7E,CAAC;QAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,WAAW,mBAAmB,EAAE,CAAC;QAC7E,CAAC;QAED,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,WAAW,mBAAmB,EAAE,CAAC;QAC7E,CAAC;QAED,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QACjC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACpD,CAAC;IAED,4EAA4E;IAC5E,QAAQ;IACR,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,WAAmB;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,WAAW,IAAI,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,WAAmB;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,4EAA4E;IAC5E,UAAU;IACV,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,WAAmB,EACnB,OAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,WAAW,mBAAmB,EAAE,CAAC;QAC7E,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,SAAS,CAAC;YAEpF,6BAA6B;YAC7B,MAAM,SAAS,CACb,yBAAyB,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW,EAAE,EACjE,EAAE,OAAO,EAAE,MAAM,EAAE,CACpB,CAAC;YAEF,kBAAkB;YAClB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACrE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAE3E,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClE,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;gBAC/B,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;gBACtE,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;YAC/D,CAAC;YAED,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAE9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,SAAS;IACT,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,WAAmB,EACnB,MAA+B;QAE/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,WAAW,mBAAmB,EAAE,CAAC;QAC7E,CAAC;QAED,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAChD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAClC,CAAC;CACF;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,IAAI,cAAc,GAAyB,IAAI,CAAC;AAEhD,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC"}
|