@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,262 @@
1
+ /**
2
+ * Pattern Publish Service
3
+ * Publish and contribute patterns to decentralized registry
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as crypto from 'crypto';
7
+ import { DEFAULT_STORE_CONFIG, generatePatternId } from './registry.js';
8
+ import { anonymizeCFP } from '../anonymization/index.js';
9
+ import { uploadToIPFS, pinContent } from '../ipfs/upload.js';
10
+ /**
11
+ * Pattern Publisher
12
+ * Handles publishing patterns to IPFS and registry
13
+ */
14
+ export class PatternPublisher {
15
+ config;
16
+ constructor(config = {}) {
17
+ this.config = { ...DEFAULT_STORE_CONFIG, ...config };
18
+ }
19
+ /**
20
+ * Publish a pattern to IPFS and registry
21
+ */
22
+ async publishPattern(cfp, options) {
23
+ console.log(`[Publish] Starting publish: ${options.name}`);
24
+ try {
25
+ // Step 1: Anonymize if needed
26
+ const anonymized = anonymizeCFP(cfp, options.anonymize);
27
+ console.log(`[Publish] Anonymization level: ${options.anonymize}`);
28
+ // Step 2: Serialize content
29
+ const content = JSON.stringify(anonymized, null, 2);
30
+ const contentBuffer = Buffer.from(content);
31
+ // Step 3: Calculate checksum
32
+ const checksum = crypto
33
+ .createHash('sha256')
34
+ .update(contentBuffer)
35
+ .digest('hex');
36
+ // Step 4: Sign if private key provided
37
+ let signature;
38
+ let publicKey;
39
+ if (options.privateKeyPath && fs.existsSync(options.privateKeyPath)) {
40
+ const signResult = this.signContent(contentBuffer, options.privateKeyPath);
41
+ signature = signResult.signature;
42
+ publicKey = signResult.publicKey;
43
+ console.log(`[Publish] Content signed`);
44
+ }
45
+ // Step 5: Upload to IPFS
46
+ console.log(`[Publish] Uploading to IPFS...`);
47
+ const uploadResult = await uploadToIPFS(contentBuffer, {
48
+ name: `${options.name}.cfp.json`,
49
+ pin: true,
50
+ });
51
+ if (!uploadResult.cid) {
52
+ return {
53
+ success: false,
54
+ patternId: '',
55
+ cid: '',
56
+ registryCid: '',
57
+ gatewayUrl: '',
58
+ message: 'Failed to upload to IPFS',
59
+ };
60
+ }
61
+ console.log(`[Publish] Uploaded to IPFS: ${uploadResult.cid}`);
62
+ // Step 6: Pin content
63
+ await pinContent(uploadResult.cid);
64
+ // Step 7: Create pattern entry
65
+ const patternId = generatePatternId(options.name);
66
+ const author = this.getAuthor();
67
+ const patternEntry = {
68
+ id: patternId,
69
+ name: options.name,
70
+ displayName: options.displayName,
71
+ description: options.description,
72
+ version: cfp.version,
73
+ cid: uploadResult.cid,
74
+ size: contentBuffer.length,
75
+ checksum,
76
+ author,
77
+ license: options.license,
78
+ categories: options.categories,
79
+ tags: options.tags,
80
+ language: options.language,
81
+ framework: options.framework,
82
+ downloads: 0,
83
+ rating: 0,
84
+ ratingCount: 0,
85
+ lastUpdated: new Date().toISOString(),
86
+ createdAt: new Date().toISOString(),
87
+ minClaudeFlowVersion: '3.0.0',
88
+ verified: author.verified,
89
+ trustLevel: author.verified ? 'verified' : 'community',
90
+ signature,
91
+ publicKey,
92
+ };
93
+ // Step 8: Add to registry (in production: submit to registry maintainers)
94
+ console.log(`[Publish] Pattern entry created: ${patternId}`);
95
+ // Generate gateway URL
96
+ const gatewayUrl = `${this.config.gateway}/ipfs/${uploadResult.cid}`;
97
+ return {
98
+ success: true,
99
+ patternId,
100
+ cid: uploadResult.cid,
101
+ registryCid: '', // Would be updated after registry update
102
+ gatewayUrl,
103
+ message: `Pattern '${options.displayName}' published successfully!`,
104
+ };
105
+ }
106
+ catch (error) {
107
+ console.error(`[Publish] Failed:`, error);
108
+ return {
109
+ success: false,
110
+ patternId: '',
111
+ cid: '',
112
+ registryCid: '',
113
+ gatewayUrl: '',
114
+ message: `Publish failed: ${error}`,
115
+ };
116
+ }
117
+ }
118
+ /**
119
+ * Sign content with private key
120
+ */
121
+ signContent(content, privateKeyPath) {
122
+ // In production: Use actual Ed25519 signing
123
+ // For demo: Generate mock signature
124
+ const privateKey = fs.readFileSync(privateKeyPath, 'utf-8').trim();
125
+ const signature = crypto
126
+ .createHmac('sha256', privateKey)
127
+ .update(content)
128
+ .digest('hex');
129
+ const publicKey = 'ed25519:' +
130
+ crypto.createHash('sha256').update(privateKey).digest('hex').slice(0, 32);
131
+ return {
132
+ signature: `ed25519:${signature}`,
133
+ publicKey,
134
+ };
135
+ }
136
+ /**
137
+ * Get current author info
138
+ */
139
+ getAuthor() {
140
+ if (this.config.authorId) {
141
+ return {
142
+ id: this.config.authorId,
143
+ displayName: this.config.authorId,
144
+ verified: false,
145
+ patterns: 0,
146
+ totalDownloads: 0,
147
+ };
148
+ }
149
+ // Anonymous author
150
+ return {
151
+ id: `anon-${crypto.randomBytes(8).toString('hex')}`,
152
+ verified: false,
153
+ patterns: 0,
154
+ totalDownloads: 0,
155
+ };
156
+ }
157
+ /**
158
+ * Validate pattern before publish
159
+ */
160
+ validateForPublish(cfp, options) {
161
+ const errors = [];
162
+ // Check required fields
163
+ if (!options.name || options.name.length < 3) {
164
+ errors.push('Name must be at least 3 characters');
165
+ }
166
+ if (!options.displayName || options.displayName.length < 3) {
167
+ errors.push('Display name must be at least 3 characters');
168
+ }
169
+ if (!options.description || options.description.length < 20) {
170
+ errors.push('Description must be at least 20 characters');
171
+ }
172
+ if (!options.categories || options.categories.length === 0) {
173
+ errors.push('At least one category is required');
174
+ }
175
+ if (!options.tags || options.tags.length < 3) {
176
+ errors.push('At least 3 tags are required');
177
+ }
178
+ // Check valid license
179
+ const validLicenses = ['MIT', 'Apache-2.0', 'GPL-3.0', 'BSD-3-Clause', 'CC-BY-4.0', 'Unlicense'];
180
+ if (!validLicenses.includes(options.license)) {
181
+ errors.push(`License must be one of: ${validLicenses.join(', ')}`);
182
+ }
183
+ // Check pattern content
184
+ if (cfp.magic !== 'CFP1') {
185
+ errors.push('Invalid CFP format (missing magic header)');
186
+ }
187
+ const totalPatterns = cfp.statistics.totalPatterns;
188
+ if (totalPatterns === 0) {
189
+ errors.push('Pattern must contain at least one pattern');
190
+ }
191
+ return errors;
192
+ }
193
+ /**
194
+ * Create publish preview
195
+ */
196
+ createPreview(cfp, options) {
197
+ return {
198
+ name: options.name,
199
+ displayName: options.displayName,
200
+ description: options.description,
201
+ categories: options.categories,
202
+ tags: options.tags,
203
+ license: options.license,
204
+ language: options.language,
205
+ framework: options.framework,
206
+ anonymization: options.anonymize,
207
+ statistics: cfp.statistics,
208
+ estimatedSize: JSON.stringify(cfp).length,
209
+ };
210
+ }
211
+ }
212
+ /**
213
+ * Submit a contribution to the registry
214
+ */
215
+ export async function submitContribution(request) {
216
+ console.log(`[Contribute] Submitting contribution: ${request.name}`);
217
+ // In production: Submit to registry governance system
218
+ // For demo: Generate mock submission ID
219
+ const submissionId = `contrib-${crypto.randomBytes(8).toString('hex')}`;
220
+ console.log(`[Contribute] Submission ID: ${submissionId}`);
221
+ console.log(`[Contribute] Pattern CID: ${request.patternCid}`);
222
+ console.log(`[Contribute] Author: ${request.authorId}`);
223
+ return {
224
+ success: true,
225
+ submissionId,
226
+ message: `Contribution submitted for review. Track status with ID: ${submissionId}`,
227
+ };
228
+ }
229
+ /**
230
+ * Check contribution status
231
+ */
232
+ export async function checkContributionStatus(submissionId) {
233
+ // In production: Query registry governance system
234
+ // For demo: Return mock status
235
+ return {
236
+ status: 'pending',
237
+ message: 'Your contribution is pending review',
238
+ };
239
+ }
240
+ /**
241
+ * Create publisher with default config
242
+ */
243
+ export function createPublisher(config) {
244
+ return new PatternPublisher(config);
245
+ }
246
+ /**
247
+ * Quick publish helper
248
+ */
249
+ export async function quickPublish(cfp, name, description, tags, config) {
250
+ const publisher = new PatternPublisher(config);
251
+ const options = {
252
+ name,
253
+ displayName: name.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase()),
254
+ description,
255
+ categories: ['custom'],
256
+ tags,
257
+ license: 'MIT',
258
+ anonymize: 'standard',
259
+ };
260
+ return publisher.publishPattern(cfp, options);
261
+ }
262
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../src/transfer/store/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Decentralized Pattern Registry
3
+ * IPFS-based registry with IPNS for mutable references
4
+ */
5
+ import type { PatternRegistry, PatternEntry, PatternCategory, KnownRegistry, StoreConfig } from './types.js';
6
+ /**
7
+ * Registry version
8
+ */
9
+ export declare const REGISTRY_VERSION = "1.0.0";
10
+ /**
11
+ * Default bootstrap registries for discovery
12
+ */
13
+ export declare const BOOTSTRAP_REGISTRIES: KnownRegistry[];
14
+ /**
15
+ * Default store configuration
16
+ */
17
+ export declare const DEFAULT_STORE_CONFIG: StoreConfig;
18
+ /**
19
+ * Create a new empty registry
20
+ */
21
+ export declare function createRegistry(ipnsName: string): PatternRegistry;
22
+ /**
23
+ * Default pattern categories
24
+ */
25
+ export declare function getDefaultCategories(): PatternCategory[];
26
+ /**
27
+ * Add a pattern to the registry
28
+ */
29
+ export declare function addPatternToRegistry(registry: PatternRegistry, entry: PatternEntry): PatternRegistry;
30
+ /**
31
+ * Remove a pattern from the registry
32
+ */
33
+ export declare function removePatternFromRegistry(registry: PatternRegistry, patternId: string): PatternRegistry;
34
+ /**
35
+ * Serialize registry to JSON
36
+ */
37
+ export declare function serializeRegistry(registry: PatternRegistry): string;
38
+ /**
39
+ * Deserialize registry from JSON
40
+ */
41
+ export declare function deserializeRegistry(json: string): PatternRegistry;
42
+ /**
43
+ * Sign registry with private key
44
+ */
45
+ export declare function signRegistry(registry: PatternRegistry, privateKey: string): PatternRegistry;
46
+ /**
47
+ * Verify registry signature
48
+ */
49
+ export declare function verifyRegistrySignature(registry: PatternRegistry): boolean;
50
+ /**
51
+ * Merge two registries (for sync)
52
+ */
53
+ export declare function mergeRegistries(local: PatternRegistry, remote: PatternRegistry): PatternRegistry;
54
+ /**
55
+ * Generate pattern ID from name
56
+ */
57
+ export declare function generatePatternId(name: string): string;
58
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/transfer/store/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,eAAe,EAEf,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,EAiB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAWlC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAkBhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CA6ExD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,YAAY,GAClB,eAAe,CA4CjB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,MAAM,GAChB,eAAe,CAMjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CASjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CAmB3F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAQ1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,eAAe,GACtB,eAAe,CA+BjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAItD"}
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Decentralized Pattern Registry
3
+ * IPFS-based registry with IPNS for mutable references
4
+ */
5
+ import * as crypto from 'crypto';
6
+ /**
7
+ * Registry version
8
+ */
9
+ export const REGISTRY_VERSION = '1.0.0';
10
+ /**
11
+ * Default bootstrap registries for discovery
12
+ */
13
+ export const BOOTSTRAP_REGISTRIES = [
14
+ {
15
+ name: 'claude-flow-official',
16
+ description: 'Official Claude Flow pattern registry',
17
+ ipnsName: 'k51qzi5uqu5dj0w8q1xvqn8ql2g4p7x8qpk9vz3xm1y2n3o4p5q6r7s8t9u0v',
18
+ gateway: 'https://w3s.link',
19
+ publicKey: 'ed25519:claude-flow-registry-key',
20
+ trusted: true,
21
+ },
22
+ {
23
+ name: 'community-patterns',
24
+ description: 'Community-contributed patterns',
25
+ ipnsName: 'k51qzi5uqu5dkkph0w8q1xvqn8ql2g4p7x8qpk9vz3xm1y2n3o4p5q6r7s8',
26
+ gateway: 'https://dweb.link',
27
+ publicKey: 'ed25519:community-registry-key',
28
+ trusted: false,
29
+ },
30
+ ];
31
+ /**
32
+ * Default store configuration
33
+ */
34
+ export const DEFAULT_STORE_CONFIG = {
35
+ registries: BOOTSTRAP_REGISTRIES,
36
+ defaultRegistry: 'claude-flow-official',
37
+ gateway: 'https://w3s.link',
38
+ timeout: 30000,
39
+ cacheDir: '.claude-flow/patterns/cache',
40
+ cacheExpiry: 3600000, // 1 hour
41
+ requireVerification: false,
42
+ minTrustLevel: 'unverified',
43
+ trustedAuthors: [],
44
+ blockedPatterns: [],
45
+ };
46
+ /**
47
+ * Create a new empty registry
48
+ */
49
+ export function createRegistry(ipnsName) {
50
+ return {
51
+ version: REGISTRY_VERSION,
52
+ updatedAt: new Date().toISOString(),
53
+ ipnsName,
54
+ patterns: [],
55
+ categories: getDefaultCategories(),
56
+ authors: [],
57
+ totalPatterns: 0,
58
+ totalDownloads: 0,
59
+ totalAuthors: 0,
60
+ featured: [],
61
+ trending: [],
62
+ newest: [],
63
+ };
64
+ }
65
+ /**
66
+ * Default pattern categories
67
+ */
68
+ export function getDefaultCategories() {
69
+ return [
70
+ {
71
+ id: 'routing',
72
+ name: 'Task Routing',
73
+ description: 'Patterns for routing tasks to appropriate agents',
74
+ patternCount: 0,
75
+ icon: '🔀',
76
+ },
77
+ {
78
+ id: 'coordination',
79
+ name: 'Swarm Coordination',
80
+ description: 'Multi-agent coordination and communication patterns',
81
+ patternCount: 0,
82
+ icon: '🐝',
83
+ },
84
+ {
85
+ id: 'security',
86
+ name: 'Security',
87
+ description: 'Security analysis and vulnerability detection patterns',
88
+ patternCount: 0,
89
+ icon: '🔒',
90
+ },
91
+ {
92
+ id: 'performance',
93
+ name: 'Performance',
94
+ description: 'Performance optimization and profiling patterns',
95
+ patternCount: 0,
96
+ icon: '⚡',
97
+ },
98
+ {
99
+ id: 'testing',
100
+ name: 'Testing',
101
+ description: 'Test generation and quality assurance patterns',
102
+ patternCount: 0,
103
+ icon: '🧪',
104
+ },
105
+ {
106
+ id: 'documentation',
107
+ name: 'Documentation',
108
+ description: 'Documentation generation and maintenance patterns',
109
+ patternCount: 0,
110
+ icon: '📚',
111
+ },
112
+ {
113
+ id: 'refactoring',
114
+ name: 'Refactoring',
115
+ description: 'Code refactoring and improvement patterns',
116
+ patternCount: 0,
117
+ icon: '🔧',
118
+ },
119
+ {
120
+ id: 'language',
121
+ name: 'Language-Specific',
122
+ description: 'Patterns optimized for specific programming languages',
123
+ patternCount: 0,
124
+ icon: '💻',
125
+ subcategories: [
126
+ { id: 'typescript', name: 'TypeScript', description: 'TypeScript patterns', patternCount: 0 },
127
+ { id: 'python', name: 'Python', description: 'Python patterns', patternCount: 0 },
128
+ { id: 'rust', name: 'Rust', description: 'Rust patterns', patternCount: 0 },
129
+ { id: 'go', name: 'Go', description: 'Go patterns', patternCount: 0 },
130
+ ],
131
+ },
132
+ {
133
+ id: 'framework',
134
+ name: 'Framework-Specific',
135
+ description: 'Patterns for specific frameworks',
136
+ patternCount: 0,
137
+ icon: '🏗️',
138
+ subcategories: [
139
+ { id: 'react', name: 'React', description: 'React patterns', patternCount: 0 },
140
+ { id: 'nextjs', name: 'Next.js', description: 'Next.js patterns', patternCount: 0 },
141
+ { id: 'node', name: 'Node.js', description: 'Node.js patterns', patternCount: 0 },
142
+ ],
143
+ },
144
+ ];
145
+ }
146
+ /**
147
+ * Add a pattern to the registry
148
+ */
149
+ export function addPatternToRegistry(registry, entry) {
150
+ const updated = { ...registry };
151
+ // Check for existing pattern with same name
152
+ const existingIndex = updated.patterns.findIndex(p => p.name === entry.name);
153
+ if (existingIndex >= 0) {
154
+ // Update existing
155
+ updated.patterns[existingIndex] = entry;
156
+ }
157
+ else {
158
+ // Add new
159
+ updated.patterns.push(entry);
160
+ }
161
+ // Update author
162
+ const authorIndex = updated.authors.findIndex(a => a.id === entry.author.id);
163
+ if (authorIndex >= 0) {
164
+ updated.authors[authorIndex].patterns++;
165
+ }
166
+ else {
167
+ updated.authors.push(entry.author);
168
+ }
169
+ // Update category counts
170
+ for (const cat of updated.categories) {
171
+ cat.patternCount = updated.patterns.filter(p => p.categories.includes(cat.id)).length;
172
+ }
173
+ // Update stats
174
+ updated.totalPatterns = updated.patterns.length;
175
+ updated.totalAuthors = updated.authors.length;
176
+ updated.updatedAt = new Date().toISOString();
177
+ // Update newest
178
+ updated.newest = updated.patterns
179
+ .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
180
+ .slice(0, 10)
181
+ .map(p => p.id);
182
+ // Update trending (by recent downloads - simplified)
183
+ updated.trending = updated.patterns
184
+ .sort((a, b) => b.downloads - a.downloads)
185
+ .slice(0, 10)
186
+ .map(p => p.id);
187
+ return updated;
188
+ }
189
+ /**
190
+ * Remove a pattern from the registry
191
+ */
192
+ export function removePatternFromRegistry(registry, patternId) {
193
+ const updated = { ...registry };
194
+ updated.patterns = updated.patterns.filter(p => p.id !== patternId);
195
+ updated.totalPatterns = updated.patterns.length;
196
+ updated.updatedAt = new Date().toISOString();
197
+ return updated;
198
+ }
199
+ /**
200
+ * Serialize registry to JSON
201
+ */
202
+ export function serializeRegistry(registry) {
203
+ return JSON.stringify(registry, null, 2);
204
+ }
205
+ /**
206
+ * Deserialize registry from JSON
207
+ */
208
+ export function deserializeRegistry(json) {
209
+ const registry = JSON.parse(json);
210
+ // Validate version
211
+ if (!registry.version) {
212
+ throw new Error('Invalid registry: missing version');
213
+ }
214
+ return registry;
215
+ }
216
+ /**
217
+ * Sign registry with private key
218
+ */
219
+ export function signRegistry(registry, privateKey) {
220
+ const content = JSON.stringify({
221
+ version: registry.version,
222
+ updatedAt: registry.updatedAt,
223
+ patterns: registry.patterns.map(p => p.cid),
224
+ totalPatterns: registry.totalPatterns,
225
+ });
226
+ // In production: Use actual Ed25519 signing
227
+ const signature = crypto
228
+ .createHmac('sha256', privateKey)
229
+ .update(content)
230
+ .digest('hex');
231
+ return {
232
+ ...registry,
233
+ registrySignature: signature,
234
+ registryPublicKey: 'ed25519:' + crypto.createHash('sha256').update(privateKey).digest('hex').slice(0, 32),
235
+ };
236
+ }
237
+ /**
238
+ * Verify registry signature
239
+ */
240
+ export function verifyRegistrySignature(registry) {
241
+ if (!registry.registrySignature || !registry.registryPublicKey) {
242
+ return false;
243
+ }
244
+ // In production: Use actual Ed25519 verification
245
+ // For now, just check signature exists
246
+ return registry.registrySignature.length === 64;
247
+ }
248
+ /**
249
+ * Merge two registries (for sync)
250
+ */
251
+ export function mergeRegistries(local, remote) {
252
+ const merged = createRegistry(local.ipnsName);
253
+ // Combine patterns, preferring newer versions
254
+ const patternMap = new Map();
255
+ for (const pattern of [...local.patterns, ...remote.patterns]) {
256
+ const existing = patternMap.get(pattern.name);
257
+ if (!existing || new Date(pattern.lastUpdated) > new Date(existing.lastUpdated)) {
258
+ patternMap.set(pattern.name, pattern);
259
+ }
260
+ }
261
+ merged.patterns = Array.from(patternMap.values());
262
+ // Combine authors
263
+ const authorMap = new Map();
264
+ for (const author of [...local.authors, ...remote.authors]) {
265
+ const existing = authorMap.get(author.id);
266
+ if (!existing || author.patterns > existing.patterns) {
267
+ authorMap.set(author.id, author);
268
+ }
269
+ }
270
+ merged.authors = Array.from(authorMap.values());
271
+ // Update stats
272
+ merged.totalPatterns = merged.patterns.length;
273
+ merged.totalAuthors = merged.authors.length;
274
+ merged.totalDownloads = merged.patterns.reduce((sum, p) => sum + p.downloads, 0);
275
+ return merged;
276
+ }
277
+ /**
278
+ * Generate pattern ID from name
279
+ */
280
+ export function generatePatternId(name) {
281
+ const normalized = name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
282
+ const hash = crypto.createHash('sha256').update(name + Date.now()).digest('hex').slice(0, 8);
283
+ return `${normalized}-${hash}`;
284
+ }
285
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/transfer/store/registry.ts"],"names":[],"mappings":"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"}