@claude-flow/cli 3.0.0-alpha.55 → 3.0.0-alpha.57

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 (139) hide show
  1. package/.claude/settings.json +2 -2
  2. package/dist/src/commands/hooks.d.ts.map +1 -1
  3. package/dist/src/commands/hooks.js +45 -5
  4. package/dist/src/commands/hooks.js.map +1 -1
  5. package/dist/src/commands/init.d.ts.map +1 -1
  6. package/dist/src/commands/init.js +80 -9
  7. package/dist/src/commands/init.js.map +1 -1
  8. package/dist/src/commands/memory.d.ts.map +1 -1
  9. package/dist/src/commands/memory.js +221 -2
  10. package/dist/src/commands/memory.js.map +1 -1
  11. package/dist/src/commands/plugins.d.ts +1 -0
  12. package/dist/src/commands/plugins.d.ts.map +1 -1
  13. package/dist/src/commands/plugins.js +439 -89
  14. package/dist/src/commands/plugins.js.map +1 -1
  15. package/dist/src/commands/transfer-store.d.ts +13 -0
  16. package/dist/src/commands/transfer-store.d.ts.map +1 -0
  17. package/dist/src/commands/transfer-store.js +428 -0
  18. package/dist/src/commands/transfer-store.js.map +1 -0
  19. package/dist/src/init/mcp-generator.d.ts +9 -0
  20. package/dist/src/init/mcp-generator.d.ts.map +1 -1
  21. package/dist/src/init/mcp-generator.js +57 -28
  22. package/dist/src/init/mcp-generator.js.map +1 -1
  23. package/dist/src/init/settings-generator.d.ts.map +1 -1
  24. package/dist/src/init/settings-generator.js +4 -2
  25. package/dist/src/init/settings-generator.js.map +1 -1
  26. package/dist/src/mcp-tools/index.d.ts +1 -0
  27. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  28. package/dist/src/mcp-tools/index.js +1 -0
  29. package/dist/src/mcp-tools/index.js.map +1 -1
  30. package/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
  31. package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -0
  32. package/dist/src/mcp-tools/transfer-tools.js +396 -0
  33. package/dist/src/mcp-tools/transfer-tools.js.map +1 -0
  34. package/dist/src/plugins/store/discovery.d.ts +73 -0
  35. package/dist/src/plugins/store/discovery.d.ts.map +1 -0
  36. package/dist/src/plugins/store/discovery.js +568 -0
  37. package/dist/src/plugins/store/discovery.js.map +1 -0
  38. package/dist/src/plugins/store/index.d.ts +76 -0
  39. package/dist/src/plugins/store/index.d.ts.map +1 -0
  40. package/dist/src/plugins/store/index.js +141 -0
  41. package/dist/src/plugins/store/index.js.map +1 -0
  42. package/dist/src/plugins/store/search.d.ts +46 -0
  43. package/dist/src/plugins/store/search.d.ts.map +1 -0
  44. package/dist/src/plugins/store/search.js +230 -0
  45. package/dist/src/plugins/store/search.js.map +1 -0
  46. package/dist/src/plugins/store/types.d.ts +274 -0
  47. package/dist/src/plugins/store/types.d.ts.map +1 -0
  48. package/dist/src/plugins/store/types.js +7 -0
  49. package/dist/src/plugins/store/types.js.map +1 -0
  50. package/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
  51. package/dist/src/plugins/tests/demo-plugin-store.d.ts.map +1 -0
  52. package/dist/src/plugins/tests/demo-plugin-store.js +126 -0
  53. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -0
  54. package/dist/src/plugins/tests/standalone-test.d.ts +12 -0
  55. package/dist/src/plugins/tests/standalone-test.d.ts.map +1 -0
  56. package/dist/src/plugins/tests/standalone-test.js +188 -0
  57. package/dist/src/plugins/tests/standalone-test.js.map +1 -0
  58. package/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
  59. package/dist/src/plugins/tests/test-plugin-store.d.ts.map +1 -0
  60. package/dist/src/plugins/tests/test-plugin-store.js +206 -0
  61. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -0
  62. package/dist/src/transfer/anonymization/index.d.ts +25 -0
  63. package/dist/src/transfer/anonymization/index.d.ts.map +1 -0
  64. package/dist/src/transfer/anonymization/index.js +175 -0
  65. package/dist/src/transfer/anonymization/index.js.map +1 -0
  66. package/dist/src/transfer/deploy-seraphine.d.ts +13 -0
  67. package/dist/src/transfer/deploy-seraphine.d.ts.map +1 -0
  68. package/dist/src/transfer/deploy-seraphine.js +205 -0
  69. package/dist/src/transfer/deploy-seraphine.js.map +1 -0
  70. package/dist/src/transfer/export.d.ts +25 -0
  71. package/dist/src/transfer/export.d.ts.map +1 -0
  72. package/dist/src/transfer/export.js +113 -0
  73. package/dist/src/transfer/export.js.map +1 -0
  74. package/dist/src/transfer/index.d.ts +12 -0
  75. package/dist/src/transfer/index.d.ts.map +1 -0
  76. package/dist/src/transfer/index.js +31 -0
  77. package/dist/src/transfer/index.js.map +1 -0
  78. package/dist/src/transfer/ipfs/client.d.ts +31 -0
  79. package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
  80. package/dist/src/transfer/ipfs/client.js +74 -0
  81. package/dist/src/transfer/ipfs/client.js.map +1 -0
  82. package/dist/src/transfer/ipfs/upload.d.ts +85 -0
  83. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
  84. package/dist/src/transfer/ipfs/upload.js +319 -0
  85. package/dist/src/transfer/ipfs/upload.js.map +1 -0
  86. package/dist/src/transfer/models/seraphine.d.ts +72 -0
  87. package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
  88. package/dist/src/transfer/models/seraphine.js +373 -0
  89. package/dist/src/transfer/models/seraphine.js.map +1 -0
  90. package/dist/src/transfer/serialization/cfp.d.ts +49 -0
  91. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
  92. package/dist/src/transfer/serialization/cfp.js +180 -0
  93. package/dist/src/transfer/serialization/cfp.js.map +1 -0
  94. package/dist/src/transfer/store/discovery.d.ts +84 -0
  95. package/dist/src/transfer/store/discovery.d.ts.map +1 -0
  96. package/dist/src/transfer/store/discovery.js +275 -0
  97. package/dist/src/transfer/store/discovery.js.map +1 -0
  98. package/dist/src/transfer/store/download.d.ts +70 -0
  99. package/dist/src/transfer/store/download.d.ts.map +1 -0
  100. package/dist/src/transfer/store/download.js +295 -0
  101. package/dist/src/transfer/store/download.js.map +1 -0
  102. package/dist/src/transfer/store/index.d.ts +84 -0
  103. package/dist/src/transfer/store/index.d.ts.map +1 -0
  104. package/dist/src/transfer/store/index.js +153 -0
  105. package/dist/src/transfer/store/index.js.map +1 -0
  106. package/dist/src/transfer/store/publish.d.ts +76 -0
  107. package/dist/src/transfer/store/publish.d.ts.map +1 -0
  108. package/dist/src/transfer/store/publish.js +262 -0
  109. package/dist/src/transfer/store/publish.js.map +1 -0
  110. package/dist/src/transfer/store/registry.d.ts +58 -0
  111. package/dist/src/transfer/store/registry.d.ts.map +1 -0
  112. package/dist/src/transfer/store/registry.js +285 -0
  113. package/dist/src/transfer/store/registry.js.map +1 -0
  114. package/dist/src/transfer/store/search.d.ts +54 -0
  115. package/dist/src/transfer/store/search.d.ts.map +1 -0
  116. package/dist/src/transfer/store/search.js +232 -0
  117. package/dist/src/transfer/store/search.js.map +1 -0
  118. package/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
  119. package/dist/src/transfer/store/tests/standalone-test.d.ts.map +1 -0
  120. package/dist/src/transfer/store/tests/standalone-test.js +190 -0
  121. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -0
  122. package/dist/src/transfer/store/types.d.ts +193 -0
  123. package/dist/src/transfer/store/types.d.ts.map +1 -0
  124. package/dist/src/transfer/store/types.js +6 -0
  125. package/dist/src/transfer/store/types.js.map +1 -0
  126. package/dist/src/transfer/test-seraphine.d.ts +6 -0
  127. package/dist/src/transfer/test-seraphine.d.ts.map +1 -0
  128. package/dist/src/transfer/test-seraphine.js +105 -0
  129. package/dist/src/transfer/test-seraphine.js.map +1 -0
  130. package/dist/src/transfer/tests/test-store.d.ts +7 -0
  131. package/dist/src/transfer/tests/test-store.d.ts.map +1 -0
  132. package/dist/src/transfer/tests/test-store.js +214 -0
  133. package/dist/src/transfer/tests/test-store.js.map +1 -0
  134. package/dist/src/transfer/types.d.ts +245 -0
  135. package/dist/src/transfer/types.d.ts.map +1 -0
  136. package/dist/src/transfer/types.js +6 -0
  137. package/dist/src/transfer/types.js.map +1 -0
  138. package/dist/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +3 -1
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Deploy Seraphine Genesis Model
4
+ * Exports and uploads the first Claude Flow pattern model to IPFS
5
+ *
6
+ * Usage:
7
+ * npx tsx deploy-seraphine.ts
8
+ * npx tsx deploy-seraphine.ts --output ./patterns/
9
+ * npx tsx deploy-seraphine.ts --to-ipfs
10
+ * npx tsx deploy-seraphine.ts --to-ipfs --anonymize strict
11
+ */
12
+ import * as path from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = path.dirname(__filename);
16
+ import { createSeraphineGenesis, getSeraphineInfo } from './models/seraphine.js';
17
+ import { exportPatterns } from './export.js';
18
+ import { validateCFP } from './serialization/cfp.js';
19
+ import { scanCFPForPII } from './anonymization/index.js';
20
+ /**
21
+ * Parse CLI arguments
22
+ */
23
+ function parseArgs() {
24
+ const args = process.argv.slice(2);
25
+ const options = {
26
+ toIpfs: false,
27
+ anonymize: 'standard',
28
+ pin: true,
29
+ gateway: 'https://w3s.link',
30
+ validate: true,
31
+ verbose: false,
32
+ };
33
+ for (let i = 0; i < args.length; i++) {
34
+ const arg = args[i];
35
+ switch (arg) {
36
+ case '--output':
37
+ case '-o':
38
+ options.output = args[++i];
39
+ break;
40
+ case '--to-ipfs':
41
+ case '--ipfs':
42
+ options.toIpfs = true;
43
+ break;
44
+ case '--anonymize':
45
+ case '-a':
46
+ options.anonymize = args[++i];
47
+ break;
48
+ case '--no-pin':
49
+ options.pin = false;
50
+ break;
51
+ case '--gateway':
52
+ case '-g':
53
+ options.gateway = args[++i];
54
+ break;
55
+ case '--no-validate':
56
+ options.validate = false;
57
+ break;
58
+ case '--verbose':
59
+ case '-v':
60
+ options.verbose = true;
61
+ break;
62
+ case '--help':
63
+ case '-h':
64
+ printHelp();
65
+ process.exit(0);
66
+ }
67
+ }
68
+ return options;
69
+ }
70
+ /**
71
+ * Print help message
72
+ */
73
+ function printHelp() {
74
+ console.log(`
75
+ Seraphine Genesis Deployer
76
+ ==========================
77
+
78
+ Deploy the foundational Claude Flow pattern model.
79
+
80
+ Usage:
81
+ npx ts-node deploy-seraphine.ts [options]
82
+
83
+ Options:
84
+ --output, -o <path> Output file path
85
+ --to-ipfs, --ipfs Upload to IPFS
86
+ --anonymize, -a <level> Anonymization level (minimal|standard|strict|paranoid)
87
+ --gateway, -g <url> IPFS gateway URL
88
+ --no-pin Don't pin to pinning service
89
+ --no-validate Skip validation
90
+ --verbose, -v Verbose output
91
+ --help, -h Show this help
92
+
93
+ Examples:
94
+ npx ts-node deploy-seraphine.ts --output ./seraphine-genesis.cfp.json
95
+ npx ts-node deploy-seraphine.ts --to-ipfs --anonymize strict
96
+ npx ts-node deploy-seraphine.ts --to-ipfs --gateway https://dweb.link
97
+ `);
98
+ }
99
+ /**
100
+ * Main deploy function
101
+ */
102
+ async function deploy() {
103
+ const options = parseArgs();
104
+ console.log('');
105
+ console.log('╔══════════════════════════════════════════════════════════╗');
106
+ console.log('║ SERAPHINE GENESIS MODEL DEPLOYMENT ║');
107
+ console.log('║ The First Claude Flow Pattern Model ║');
108
+ console.log('╚══════════════════════════════════════════════════════════╝');
109
+ console.log('');
110
+ // Step 1: Create Seraphine Genesis
111
+ console.log('📦 Creating Seraphine Genesis Model...');
112
+ const genesis = createSeraphineGenesis();
113
+ const info = getSeraphineInfo();
114
+ console.log(` Name: ${info.name}`);
115
+ console.log(` Version: ${info.version}`);
116
+ console.log(` Description: ${info.description.slice(0, 60)}...`);
117
+ console.log('');
118
+ console.log(' Pattern Counts:');
119
+ for (const [type, count] of Object.entries(info.patternCounts)) {
120
+ console.log(` - ${type}: ${count}`);
121
+ }
122
+ console.log('');
123
+ // Step 2: Validate
124
+ if (options.validate) {
125
+ console.log('✅ Validating CFP format...');
126
+ const validation = validateCFP(genesis);
127
+ if (!validation.valid) {
128
+ console.error('❌ Validation failed:');
129
+ for (const error of validation.errors) {
130
+ console.error(` - ${error}`);
131
+ }
132
+ process.exit(1);
133
+ }
134
+ console.log(' Format is valid!');
135
+ console.log('');
136
+ }
137
+ // Step 3: Scan for PII
138
+ console.log('🔍 Scanning for PII...');
139
+ const piiScan = scanCFPForPII(genesis);
140
+ if (piiScan.found) {
141
+ console.log(` Found ${piiScan.count} PII items:`);
142
+ for (const [type, count] of Object.entries(piiScan.types)) {
143
+ console.log(` - ${type}: ${count}`);
144
+ }
145
+ console.log(' Will be redacted during export.');
146
+ }
147
+ else {
148
+ console.log(' No PII detected!');
149
+ }
150
+ console.log('');
151
+ // Step 4: Export
152
+ console.log(`📤 Exporting with ${options.anonymize} anonymization...`);
153
+ const exportOptions = {
154
+ output: options.output,
155
+ toIpfs: options.toIpfs,
156
+ anonymize: options.anonymize,
157
+ pin: options.pin,
158
+ gateway: options.gateway,
159
+ format: 'json',
160
+ redactPii: true,
161
+ };
162
+ // If no output specified and not uploading to IPFS, create default output
163
+ if (!options.output && !options.toIpfs) {
164
+ const defaultOutput = path.join(process.cwd(), 'seraphine-genesis.cfp.json');
165
+ exportOptions.output = defaultOutput;
166
+ }
167
+ const result = await exportPatterns(genesis, exportOptions);
168
+ console.log('');
169
+ console.log('═══════════════════════════════════════════════════════════');
170
+ console.log(' DEPLOYMENT COMPLETE ');
171
+ console.log('═══════════════════════════════════════════════════════════');
172
+ console.log('');
173
+ if (result.success) {
174
+ console.log('✅ Successfully deployed Seraphine Genesis!');
175
+ console.log('');
176
+ console.log(' 📊 Export Summary:');
177
+ console.log(` Patterns: ${result.patternCount}`);
178
+ console.log(` Size: ${result.size} bytes`);
179
+ console.log(` Anonymization: ${result.anonymizationLevel}`);
180
+ if (result.outputPath) {
181
+ console.log('');
182
+ console.log(` 📁 File: ${result.outputPath}`);
183
+ }
184
+ if (result.cid) {
185
+ console.log('');
186
+ console.log(' 🌐 IPFS:');
187
+ console.log(` CID: ${result.cid}`);
188
+ console.log(` Gateway URL: ${result.gateway}/ipfs/${result.cid}`);
189
+ }
190
+ console.log('');
191
+ console.log(' 🎉 Hello World! The genesis pattern has been deployed.');
192
+ console.log(' 🌟 This is the first Claude Flow pattern ever shared.');
193
+ console.log('');
194
+ }
195
+ else {
196
+ console.error('❌ Deployment failed!');
197
+ process.exit(1);
198
+ }
199
+ }
200
+ // Run if executed directly
201
+ deploy().catch(error => {
202
+ console.error('Fatal error:', error);
203
+ process.exit(1);
204
+ });
205
+ //# sourceMappingURL=deploy-seraphine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-seraphine.js","sourceRoot":"","sources":["../../../src/transfer/deploy-seraphine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Pattern Export Pipeline
3
+ * Export patterns with anonymization and optional IPFS upload
4
+ */
5
+ import type { CFPFormat, ExportOptions, ExportResult } from './types.js';
6
+ /**
7
+ * Export patterns to file or IPFS
8
+ */
9
+ export declare function exportPatterns(cfp: CFPFormat, options?: ExportOptions): Promise<ExportResult>;
10
+ /**
11
+ * Export Seraphine genesis model
12
+ */
13
+ export declare function exportSeraphine(options?: ExportOptions): Promise<ExportResult>;
14
+ /**
15
+ * Quick export to file
16
+ */
17
+ export declare function quickExport(cfp: CFPFormat, outputPath: string): Promise<ExportResult>;
18
+ /**
19
+ * Quick export to IPFS
20
+ */
21
+ export declare function quickExportToIPFS(cfp: CFPFormat, options?: {
22
+ gateway?: string;
23
+ pin?: boolean;
24
+ }): Promise<ExportResult>;
25
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/transfer/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,YAAY,EAEb,MAAM,YAAY,CAAC;AAKpB;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA8FvB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAKxF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,SAAS,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAMvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAChD,OAAO,CAAC,YAAY,CAAC,CAQvB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Pattern Export Pipeline
3
+ * Export patterns with anonymization and optional IPFS upload
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { serializeToJson, serializeToBuffer, getFileExtension } from './serialization/cfp.js';
8
+ import { anonymizeCFP, scanCFPForPII } from './anonymization/index.js';
9
+ import { uploadToIPFS } from './ipfs/upload.js';
10
+ /**
11
+ * Export patterns to file or IPFS
12
+ */
13
+ export async function exportPatterns(cfp, options = {}) {
14
+ const { output, format = 'json', anonymize = 'standard', redactPii = true, stripPaths = false, toIpfs = false, pin = true, gateway = 'https://w3s.link', } = options;
15
+ // Step 1: Scan for PII
16
+ const piiScan = scanCFPForPII(cfp);
17
+ if (piiScan.found && redactPii) {
18
+ console.log(`Found ${piiScan.count} PII items, will be redacted`);
19
+ }
20
+ // Step 2: Apply anonymization
21
+ const { cfp: anonymizedCfp, transforms } = anonymizeCFP(cfp, anonymize);
22
+ console.log(`Applied ${transforms.length} anonymization transforms: ${transforms.join(', ')}`);
23
+ // Step 3: Serialize
24
+ const serialized = format === 'json'
25
+ ? serializeToJson(anonymizedCfp)
26
+ : serializeToBuffer(anonymizedCfp, format);
27
+ const size = typeof serialized === 'string' ? Buffer.byteLength(serialized) : serialized.length;
28
+ // Step 4: Output
29
+ let outputPath;
30
+ let cid;
31
+ if (toIpfs) {
32
+ // Upload to IPFS
33
+ const ipfsResult = await uploadToIPFS(Buffer.isBuffer(serialized) ? serialized : Buffer.from(serialized), {
34
+ pin,
35
+ gateway,
36
+ name: anonymizedCfp.metadata.name || 'patterns',
37
+ });
38
+ cid = ipfsResult.cid;
39
+ anonymizedCfp.ipfs = {
40
+ cid: ipfsResult.cid,
41
+ pinnedAt: ipfsResult.pinnedAt ? [ipfsResult.pinnedAt] : [],
42
+ gateway: ipfsResult.gateway,
43
+ size: ipfsResult.size,
44
+ };
45
+ console.log(`Uploaded to IPFS: ${cid}`);
46
+ console.log(`Gateway URL: ${gateway}/ipfs/${cid}`);
47
+ }
48
+ if (output) {
49
+ // Write to file
50
+ const ext = getFileExtension(format);
51
+ outputPath = output.endsWith(ext) ? output : output + ext;
52
+ // Ensure directory exists
53
+ const dir = path.dirname(outputPath);
54
+ if (!fs.existsSync(dir)) {
55
+ fs.mkdirSync(dir, { recursive: true });
56
+ }
57
+ // Write file
58
+ if (typeof serialized === 'string') {
59
+ fs.writeFileSync(outputPath, serialized, 'utf-8');
60
+ }
61
+ else {
62
+ fs.writeFileSync(outputPath, serialized);
63
+ }
64
+ console.log(`Exported to: ${outputPath}`);
65
+ }
66
+ // Calculate pattern count
67
+ const patternCount = (cfp.patterns.routing?.length || 0) +
68
+ (cfp.patterns.complexity?.length || 0) +
69
+ (cfp.patterns.coverage?.length || 0) +
70
+ (cfp.patterns.trajectory?.length || 0) +
71
+ (cfp.patterns.custom?.length || 0);
72
+ return {
73
+ success: true,
74
+ outputPath,
75
+ cid,
76
+ gateway: cid ? gateway : undefined,
77
+ size,
78
+ patternCount,
79
+ anonymizationLevel: anonymize,
80
+ };
81
+ }
82
+ /**
83
+ * Export Seraphine genesis model
84
+ */
85
+ export async function exportSeraphine(options = {}) {
86
+ // Dynamically import to avoid circular dependency
87
+ const { createSeraphineGenesis } = await import('./models/seraphine.js');
88
+ const genesis = createSeraphineGenesis();
89
+ return exportPatterns(genesis, options);
90
+ }
91
+ /**
92
+ * Quick export to file
93
+ */
94
+ export async function quickExport(cfp, outputPath) {
95
+ return exportPatterns(cfp, {
96
+ output: outputPath,
97
+ format: 'json',
98
+ anonymize: 'standard',
99
+ });
100
+ }
101
+ /**
102
+ * Quick export to IPFS
103
+ */
104
+ export async function quickExportToIPFS(cfp, options = {}) {
105
+ return exportPatterns(cfp, {
106
+ toIpfs: true,
107
+ pin: options.pin ?? true,
108
+ gateway: options.gateway ?? 'https://w3s.link',
109
+ format: 'json',
110
+ anonymize: 'strict',
111
+ });
112
+ }
113
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/transfer/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Transfer Module
3
+ * Pattern export, import, anonymization, and IPFS sharing
4
+ */
5
+ export * from './types.js';
6
+ export { createCFP, serializeToJson, serializeToBuffer, deserializeCFP, validateCFP, getFileExtension, detectFormat, } from './serialization/cfp.js';
7
+ export { detectPII, redactPII, anonymizeCFP, scanCFPForPII, } from './anonymization/index.js';
8
+ export { exportPatterns, exportSeraphine, quickExport, quickExportToIPFS, } from './export.js';
9
+ export { uploadToIPFS, pinContent, unpinContent, checkContent, getGatewayURL, getIPNSURL, } from './ipfs/upload.js';
10
+ export { SERAPHINE_VERSION, SERAPHINE_METADATA, SERAPHINE_ROUTING_PATTERNS, SERAPHINE_COMPLEXITY_PATTERNS, SERAPHINE_COVERAGE_PATTERNS, SERAPHINE_TRAJECTORY_PATTERNS, SERAPHINE_CUSTOM_PATTERNS, createSeraphinePatterns, createSeraphineGenesis, getSeraphineInfo, } from './models/seraphine.js';
11
+ export { type PatternEntry, type PatternAuthor, type PatternCategory, type PatternRegistry, type SearchOptions, type SearchResult, type PublishOptions, type PublishResult, type DownloadOptions, type DownloadResult, type KnownRegistry, type StoreConfig, type DiscoveryResult, type IPNSResolution, type DownloadProgressCallback, type ContributionRequest, REGISTRY_VERSION, BOOTSTRAP_REGISTRIES, DEFAULT_STORE_CONFIG, createRegistry, getDefaultCategories, addPatternToRegistry, removePatternFromRegistry, serializeRegistry, deserializeRegistry, signRegistry, verifyRegistrySignature, mergeRegistries, generatePatternId, PatternDiscovery, createDiscoveryService, searchPatterns, getFeaturedPatterns, getTrendingPatterns, getNewestPatterns, getPatternById, getPatternByName, getPatternsByAuthor, getPatternsByCategory, getSimilarPatterns, getCategoryStats, getTagCloud, getSearchSuggestions, PatternDownloader, batchDownload, createDownloader, PatternPublisher, submitContribution, checkContributionStatus, createPublisher, quickPublish, PatternStore, createPatternStore, } from './store/index.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transfer/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EAGxB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EAGjB,gBAAgB,EAChB,sBAAsB,EAGtB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EAGpB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAGhB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,YAAY,EAGZ,YAAY,EACZ,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Transfer Module
3
+ * Pattern export, import, anonymization, and IPFS sharing
4
+ */
5
+ // Types
6
+ export * from './types.js';
7
+ // Serialization
8
+ export { createCFP, serializeToJson, serializeToBuffer, deserializeCFP, validateCFP, getFileExtension, detectFormat, } from './serialization/cfp.js';
9
+ // Anonymization
10
+ export { detectPII, redactPII, anonymizeCFP, scanCFPForPII, } from './anonymization/index.js';
11
+ // Export
12
+ export { exportPatterns, exportSeraphine, quickExport, quickExportToIPFS, } from './export.js';
13
+ // IPFS
14
+ export { uploadToIPFS, pinContent, unpinContent, checkContent, getGatewayURL, getIPNSURL, } from './ipfs/upload.js';
15
+ // Models
16
+ export { SERAPHINE_VERSION, SERAPHINE_METADATA, SERAPHINE_ROUTING_PATTERNS, SERAPHINE_COMPLEXITY_PATTERNS, SERAPHINE_COVERAGE_PATTERNS, SERAPHINE_TRAJECTORY_PATTERNS, SERAPHINE_CUSTOM_PATTERNS, createSeraphinePatterns, createSeraphineGenesis, getSeraphineInfo, } from './models/seraphine.js';
17
+ // Store - Decentralized Pattern Marketplace
18
+ export {
19
+ // Registry
20
+ REGISTRY_VERSION, BOOTSTRAP_REGISTRIES, DEFAULT_STORE_CONFIG, createRegistry, getDefaultCategories, addPatternToRegistry, removePatternFromRegistry, serializeRegistry, deserializeRegistry, signRegistry, verifyRegistrySignature, mergeRegistries, generatePatternId,
21
+ // Discovery
22
+ PatternDiscovery, createDiscoveryService,
23
+ // Search
24
+ searchPatterns, getFeaturedPatterns, getTrendingPatterns, getNewestPatterns, getPatternById, getPatternByName, getPatternsByAuthor, getPatternsByCategory, getSimilarPatterns, getCategoryStats, getTagCloud, getSearchSuggestions,
25
+ // Download
26
+ PatternDownloader, batchDownload, createDownloader,
27
+ // Publish
28
+ PatternPublisher, submitContribution, checkContributionStatus, createPublisher, quickPublish,
29
+ // High-level API
30
+ PatternStore, createPatternStore, } from './store/index.js';
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transfer/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,0BAA0B,CAAC;AAElC,SAAS;AACT,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO;AACP,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,kBAAkB,CAAC;AAE1B,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,4CAA4C;AAC5C,OAAO;AAmBL,WAAW;AACX,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,eAAe,EACf,iBAAiB;AAEjB,YAAY;AACZ,gBAAgB,EAChB,sBAAsB;AAEtB,SAAS;AACT,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,oBAAoB;AAEpB,WAAW;AACX,iBAAiB,EACjB,aAAa,EACb,gBAAgB;AAEhB,UAAU;AACV,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,YAAY;AAEZ,iBAAiB;AACjB,YAAY,EACZ,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * IPFS Client Module
3
+ * Low-level IPFS operations for discovery and fetching
4
+ */
5
+ /**
6
+ * Resolve IPNS name to CID
7
+ * In production: Use ipfs-http-client or similar
8
+ */
9
+ export declare function resolveIPNS(ipnsName: string, gateway?: string): Promise<string | null>;
10
+ /**
11
+ * Fetch content from IPFS by CID
12
+ * In production: Use ipfs-http-client or gateway fetch
13
+ */
14
+ export declare function fetchFromIPFS<T>(cid: string, gateway?: string): Promise<T | null>;
15
+ /**
16
+ * Check if CID is pinned
17
+ */
18
+ export declare function isPinned(cid: string, gateway?: string): Promise<boolean>;
19
+ /**
20
+ * Get IPFS gateway URL for a CID
21
+ */
22
+ export declare function getGatewayUrl(cid: string, gateway?: string): string;
23
+ /**
24
+ * Validate CID format
25
+ */
26
+ export declare function isValidCID(cid: string): boolean;
27
+ /**
28
+ * Generate content hash for verification
29
+ */
30
+ export declare function hashContent(content: Buffer): string;
31
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/transfer/ipfs/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAA0B,GAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBxB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAA0B,GAClC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAkBnB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAA0B,GAClC,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAA0B,GAAG,MAAM,CAEtF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * IPFS Client Module
3
+ * Low-level IPFS operations for discovery and fetching
4
+ */
5
+ import * as crypto from 'crypto';
6
+ /**
7
+ * Resolve IPNS name to CID
8
+ * In production: Use ipfs-http-client or similar
9
+ */
10
+ export async function resolveIPNS(ipnsName, gateway = 'https://ipfs.io') {
11
+ console.log(`[IPFS] Resolving IPNS: ${ipnsName}`);
12
+ // In production: Use IPNS resolution
13
+ // For demo: Return null to trigger fallback to demo registry
14
+ try {
15
+ // Simulate IPNS resolution delay
16
+ await new Promise(resolve => setTimeout(resolve, 100));
17
+ // For demo purposes, return null to use local demo data
18
+ // In production, this would do actual IPNS resolution
19
+ return null;
20
+ }
21
+ catch (error) {
22
+ console.warn(`[IPFS] IPNS resolution failed:`, error);
23
+ return null;
24
+ }
25
+ }
26
+ /**
27
+ * Fetch content from IPFS by CID
28
+ * In production: Use ipfs-http-client or gateway fetch
29
+ */
30
+ export async function fetchFromIPFS(cid, gateway = 'https://ipfs.io') {
31
+ console.log(`[IPFS] Fetching CID: ${cid}`);
32
+ try {
33
+ // Simulate fetch delay
34
+ await new Promise(resolve => setTimeout(resolve, 100));
35
+ // For demo purposes, return null to use local demo data
36
+ // In production, this would fetch from IPFS gateway
37
+ // const url = `${gateway}/ipfs/${cid}`;
38
+ // const response = await fetch(url);
39
+ // return await response.json();
40
+ return null;
41
+ }
42
+ catch (error) {
43
+ console.warn(`[IPFS] Fetch failed:`, error);
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Check if CID is pinned
49
+ */
50
+ export async function isPinned(cid, gateway = 'https://ipfs.io') {
51
+ // In production: Check with pinning service
52
+ return false;
53
+ }
54
+ /**
55
+ * Get IPFS gateway URL for a CID
56
+ */
57
+ export function getGatewayUrl(cid, gateway = 'https://ipfs.io') {
58
+ return `${gateway}/ipfs/${cid}`;
59
+ }
60
+ /**
61
+ * Validate CID format
62
+ */
63
+ export function isValidCID(cid) {
64
+ // CIDv0 starts with 'Qm' and is 46 characters
65
+ // CIDv1 starts with 'b' (base32) and varies in length
66
+ return /^(Qm[1-9A-HJ-NP-Za-km-z]{44}|b[a-z2-7]{58,})$/.test(cid);
67
+ }
68
+ /**
69
+ * Generate content hash for verification
70
+ */
71
+ export function hashContent(content) {
72
+ return crypto.createHash('sha256').update(content).digest('hex');
73
+ }
74
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/transfer/ipfs/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,UAAkB,iBAAiB;IAEnC,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IAElD,qCAAqC;IACrC,6DAA6D;IAC7D,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEvD,wDAAwD;QACxD,sDAAsD;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,UAAkB,iBAAiB;IAEnC,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,uBAAuB;QACvB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEvD,wDAAwD;QACxD,oDAAoD;QACpD,wCAAwC;QACxC,qCAAqC;QACrC,gCAAgC;QAEhC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,UAAkB,iBAAiB;IAEnC,4CAA4C;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,UAAkB,iBAAiB;IAC5E,OAAO,GAAG,OAAO,SAAS,GAAG,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,8CAA8C;IAC9C,sDAAsD;IACtD,OAAO,+CAA+C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * IPFS Upload Module
3
+ * Real upload support via web3.storage, Pinata, or local IPFS
4
+ *
5
+ * @module @claude-flow/cli/transfer/ipfs/upload
6
+ * @version 3.0.0
7
+ */
8
+ import type { PinningService } from '../types.js';
9
+ /**
10
+ * IPFS upload options
11
+ */
12
+ export interface IPFSUploadOptions {
13
+ pin?: boolean;
14
+ pinningService?: PinningService;
15
+ gateway?: string;
16
+ name?: string;
17
+ wrapWithDirectory?: boolean;
18
+ apiKey?: string;
19
+ apiSecret?: string;
20
+ }
21
+ /**
22
+ * IPFS upload result
23
+ */
24
+ export interface IPFSUploadResult {
25
+ cid: string;
26
+ size: number;
27
+ gateway: string;
28
+ pinnedAt?: string;
29
+ url: string;
30
+ }
31
+ /**
32
+ * Upload content to IPFS
33
+ *
34
+ * Supports:
35
+ * - web3.storage (WEB3_STORAGE_TOKEN)
36
+ * - Pinata (PINATA_API_KEY + PINATA_API_SECRET)
37
+ * - Demo mode (generates deterministic CIDs when no credentials)
38
+ */
39
+ export declare function uploadToIPFS(content: Buffer, options?: IPFSUploadOptions): Promise<IPFSUploadResult>;
40
+ /**
41
+ * Pin content by CID
42
+ */
43
+ export declare function pinContent(cid: string, options?: {
44
+ service?: PinningService;
45
+ name?: string;
46
+ }): Promise<{
47
+ success: boolean;
48
+ pinnedAt: string;
49
+ }>;
50
+ /**
51
+ * Unpin content by CID
52
+ */
53
+ export declare function unpinContent(cid: string, options?: {
54
+ service?: PinningService;
55
+ }): Promise<{
56
+ success: boolean;
57
+ }>;
58
+ /**
59
+ * Check if content exists on IPFS
60
+ */
61
+ export declare function checkContent(cid: string, gateway?: string): Promise<{
62
+ exists: boolean;
63
+ size?: number;
64
+ }>;
65
+ /**
66
+ * Get gateway URL for CID
67
+ */
68
+ export declare function getGatewayURL(cid: string, gateway?: string): string;
69
+ /**
70
+ * Get IPNS URL for name
71
+ */
72
+ export declare function getIPNSURL(name: string, gateway?: string): string;
73
+ /**
74
+ * Check if real IPFS credentials are available
75
+ */
76
+ export declare function hasIPFSCredentials(): boolean;
77
+ /**
78
+ * Get IPFS service status
79
+ */
80
+ export declare function getIPFSServiceStatus(): {
81
+ service: 'web3storage' | 'pinata' | 'demo';
82
+ configured: boolean;
83
+ message: string;
84
+ };
85
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../src/transfer/ipfs/upload.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAqKD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA2D3B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,cAAc,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAsCjD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,cAAc,CAAA;CAAO,GACzC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA8B/B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAA2B,GACnC,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAA2B,GAAG,MAAM,CAEvF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAA2B,GAAG,MAAM,CAErF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI;IACtC,OAAO,EAAE,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAyBA"}