@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.
@@ -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"}