@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,76 @@
1
+ /**
2
+ * Plugin Store Module
3
+ * Decentralized plugin marketplace using IPFS
4
+ *
5
+ * Provides:
6
+ * - Plugin discovery via IPNS
7
+ * - Search with filters
8
+ * - Download with verification
9
+ * - Publish with signing
10
+ */
11
+ export * from './types.js';
12
+ export { PluginDiscoveryService, createPluginDiscoveryService, DEFAULT_PLUGIN_STORE_CONFIG, type PluginDiscoveryResult, } from './discovery.js';
13
+ export { searchPlugins, getPluginSearchSuggestions, getPluginTagCloud, getPluginCategoryStats, findSimilarPlugins, getFeaturedPlugins, getTrendingPlugins, getNewestPlugins, getOfficialPlugins, getPluginsByPermission, } from './search.js';
14
+ import type { PluginRegistry, PluginEntry, PluginSearchOptions, PluginSearchResult, PluginStoreConfig } from './types.js';
15
+ import { PluginDiscoveryService } from './discovery.js';
16
+ /**
17
+ * High-level Plugin Store API
18
+ */
19
+ export declare class PluginStore {
20
+ private discovery;
21
+ private registry;
22
+ constructor(config?: Partial<PluginStoreConfig>);
23
+ /**
24
+ * Initialize the store by discovering the registry
25
+ */
26
+ initialize(registryName?: string): Promise<boolean>;
27
+ /**
28
+ * Check if store is initialized
29
+ */
30
+ isInitialized(): boolean;
31
+ /**
32
+ * Get the current registry
33
+ */
34
+ getRegistry(): PluginRegistry | null;
35
+ /**
36
+ * Search plugins
37
+ */
38
+ search(options?: PluginSearchOptions): PluginSearchResult;
39
+ /**
40
+ * Get a plugin by ID
41
+ */
42
+ getPlugin(pluginId: string): PluginEntry | undefined;
43
+ /**
44
+ * Get similar plugins
45
+ */
46
+ getSimilarPlugins(pluginId: string, limit?: number): PluginEntry[];
47
+ /**
48
+ * Get featured plugins
49
+ */
50
+ getFeatured(): PluginEntry[];
51
+ /**
52
+ * Get official plugins
53
+ */
54
+ getOfficial(): PluginEntry[];
55
+ /**
56
+ * Get trending plugins
57
+ */
58
+ getTrending(): PluginEntry[];
59
+ /**
60
+ * Get newest plugins
61
+ */
62
+ getNewest(): PluginEntry[];
63
+ /**
64
+ * Get discovery service
65
+ */
66
+ getDiscovery(): PluginDiscoveryService;
67
+ /**
68
+ * Refresh registry
69
+ */
70
+ refresh(registryName?: string): Promise<boolean>;
71
+ }
72
+ /**
73
+ * Create a new plugin store instance
74
+ */
75
+ export declare function createPluginStore(config?: Partial<PluginStoreConfig>): PluginStore;
76
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/store/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGxD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,QAAQ,CAA+B;gBAEnC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAI/C;;OAEG;IACG,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASzD;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,WAAW,IAAI,cAAc,GAAG,IAAI;IAIpC;;OAEG;IACH,MAAM,CAAC,OAAO,GAAE,mBAAwB,GAAG,kBAAkB;IAc7D;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIpD;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,WAAW,EAAE;IAKrE;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAO5B;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAO5B;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAO5B;;OAEG;IACH,SAAS,IAAI,WAAW,EAAE;IAO1B;;OAEG;IACH,YAAY,IAAI,sBAAsB;IAItC;;OAEG;IACG,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAIvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAElF"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Plugin Store Module
3
+ * Decentralized plugin marketplace using IPFS
4
+ *
5
+ * Provides:
6
+ * - Plugin discovery via IPNS
7
+ * - Search with filters
8
+ * - Download with verification
9
+ * - Publish with signing
10
+ */
11
+ // Re-export types
12
+ export * from './types.js';
13
+ // Re-export discovery
14
+ export { PluginDiscoveryService, createPluginDiscoveryService, DEFAULT_PLUGIN_STORE_CONFIG, } from './discovery.js';
15
+ // Re-export search
16
+ export { searchPlugins, getPluginSearchSuggestions, getPluginTagCloud, getPluginCategoryStats, findSimilarPlugins, getFeaturedPlugins, getTrendingPlugins, getNewestPlugins, getOfficialPlugins, getPluginsByPermission, } from './search.js';
17
+ import { PluginDiscoveryService } from './discovery.js';
18
+ import { searchPlugins, findSimilarPlugins } from './search.js';
19
+ /**
20
+ * High-level Plugin Store API
21
+ */
22
+ export class PluginStore {
23
+ discovery;
24
+ registry = null;
25
+ constructor(config) {
26
+ this.discovery = new PluginDiscoveryService(config);
27
+ }
28
+ /**
29
+ * Initialize the store by discovering the registry
30
+ */
31
+ async initialize(registryName) {
32
+ const result = await this.discovery.discoverRegistry(registryName);
33
+ if (result.success && result.registry) {
34
+ this.registry = result.registry;
35
+ return true;
36
+ }
37
+ return false;
38
+ }
39
+ /**
40
+ * Check if store is initialized
41
+ */
42
+ isInitialized() {
43
+ return this.registry !== null;
44
+ }
45
+ /**
46
+ * Get the current registry
47
+ */
48
+ getRegistry() {
49
+ return this.registry;
50
+ }
51
+ /**
52
+ * Search plugins
53
+ */
54
+ search(options = {}) {
55
+ if (!this.registry) {
56
+ return {
57
+ plugins: [],
58
+ total: 0,
59
+ page: 1,
60
+ pageSize: options.limit || 20,
61
+ hasMore: false,
62
+ query: options,
63
+ };
64
+ }
65
+ return searchPlugins(this.registry, options);
66
+ }
67
+ /**
68
+ * Get a plugin by ID
69
+ */
70
+ getPlugin(pluginId) {
71
+ return this.registry?.plugins.find(p => p.id === pluginId);
72
+ }
73
+ /**
74
+ * Get similar plugins
75
+ */
76
+ getSimilarPlugins(pluginId, limit = 5) {
77
+ if (!this.registry)
78
+ return [];
79
+ return findSimilarPlugins(this.registry, pluginId, limit);
80
+ }
81
+ /**
82
+ * Get featured plugins
83
+ */
84
+ getFeatured() {
85
+ if (!this.registry)
86
+ return [];
87
+ return this.registry.featured
88
+ .map(id => this.registry.plugins.find(p => p.id === id))
89
+ .filter((p) => p !== undefined);
90
+ }
91
+ /**
92
+ * Get official plugins
93
+ */
94
+ getOfficial() {
95
+ if (!this.registry)
96
+ return [];
97
+ return this.registry.official
98
+ .map(id => this.registry.plugins.find(p => p.id === id))
99
+ .filter((p) => p !== undefined);
100
+ }
101
+ /**
102
+ * Get trending plugins
103
+ */
104
+ getTrending() {
105
+ if (!this.registry)
106
+ return [];
107
+ return this.registry.trending
108
+ .map(id => this.registry.plugins.find(p => p.id === id))
109
+ .filter((p) => p !== undefined);
110
+ }
111
+ /**
112
+ * Get newest plugins
113
+ */
114
+ getNewest() {
115
+ if (!this.registry)
116
+ return [];
117
+ return this.registry.newest
118
+ .map(id => this.registry.plugins.find(p => p.id === id))
119
+ .filter((p) => p !== undefined);
120
+ }
121
+ /**
122
+ * Get discovery service
123
+ */
124
+ getDiscovery() {
125
+ return this.discovery;
126
+ }
127
+ /**
128
+ * Refresh registry
129
+ */
130
+ async refresh(registryName) {
131
+ this.discovery.clearCache();
132
+ return this.initialize(registryName);
133
+ }
134
+ }
135
+ /**
136
+ * Create a new plugin store instance
137
+ */
138
+ export function createPluginStore(config) {
139
+ return new PluginStore(config);
140
+ }
141
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/store/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Plugin Search Service
3
+ * Search and filter plugins from the registry
4
+ */
5
+ import type { PluginEntry, PluginRegistry, PluginSearchOptions, PluginSearchResult } from './types.js';
6
+ /**
7
+ * Search plugins in the registry
8
+ */
9
+ export declare function searchPlugins(registry: PluginRegistry, options?: PluginSearchOptions): PluginSearchResult;
10
+ /**
11
+ * Get search suggestions based on partial query
12
+ */
13
+ export declare function getPluginSearchSuggestions(registry: PluginRegistry, partialQuery: string, limit?: number): string[];
14
+ /**
15
+ * Get tag cloud with counts
16
+ */
17
+ export declare function getPluginTagCloud(registry: PluginRegistry): Map<string, number>;
18
+ /**
19
+ * Get category statistics
20
+ */
21
+ export declare function getPluginCategoryStats(registry: PluginRegistry): Map<string, number>;
22
+ /**
23
+ * Find similar plugins based on tags and category
24
+ */
25
+ export declare function findSimilarPlugins(registry: PluginRegistry, pluginId: string, limit?: number): PluginEntry[];
26
+ /**
27
+ * Get featured plugins
28
+ */
29
+ export declare function getFeaturedPlugins(registry: PluginRegistry): PluginEntry[];
30
+ /**
31
+ * Get trending plugins
32
+ */
33
+ export declare function getTrendingPlugins(registry: PluginRegistry): PluginEntry[];
34
+ /**
35
+ * Get newest plugins
36
+ */
37
+ export declare function getNewestPlugins(registry: PluginRegistry): PluginEntry[];
38
+ /**
39
+ * Get official plugins
40
+ */
41
+ export declare function getOfficialPlugins(registry: PluginRegistry): PluginEntry[];
42
+ /**
43
+ * Get plugins by permission
44
+ */
45
+ export declare function getPluginsByPermission(registry: PluginRegistry, permission: string): PluginEntry[];
46
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../src/plugins/store/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA2HpB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,MAAM,EACpB,KAAK,GAAE,MAAW,GACjB,MAAM,EAAE,CA2BV;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAY/E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAUpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAU,GAChB,WAAW,EAAE,CAqCf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,EAAE,CAI1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,EAAE,CAI1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,EAAE,CAIxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,EAAE,CAI1E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,MAAM,GACjB,WAAW,EAAE,CAIf"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Plugin Search Service
3
+ * Search and filter plugins from the registry
4
+ */
5
+ /**
6
+ * Search plugins in the registry
7
+ */
8
+ export function searchPlugins(registry, options = {}) {
9
+ let plugins = [...registry.plugins];
10
+ // Text search (name, displayName, description, tags)
11
+ if (options.query) {
12
+ const query = options.query.toLowerCase();
13
+ plugins = plugins.filter(p => p.name.toLowerCase().includes(query) ||
14
+ p.displayName.toLowerCase().includes(query) ||
15
+ p.description.toLowerCase().includes(query) ||
16
+ p.tags.some(t => t.toLowerCase().includes(query)) ||
17
+ p.keywords.some(k => k.toLowerCase().includes(query)));
18
+ }
19
+ // Category filter
20
+ if (options.category) {
21
+ plugins = plugins.filter(p => p.categories.includes(options.category));
22
+ }
23
+ // Type filter
24
+ if (options.type) {
25
+ plugins = plugins.filter(p => p.type === options.type);
26
+ }
27
+ // Tags filter (match any)
28
+ if (options.tags && options.tags.length > 0) {
29
+ plugins = plugins.filter(p => options.tags.some(tag => p.tags.includes(tag)));
30
+ }
31
+ // Author filter
32
+ if (options.author) {
33
+ plugins = plugins.filter(p => p.author.id === options.author ||
34
+ p.author.displayName?.toLowerCase().includes(options.author.toLowerCase()));
35
+ }
36
+ // Rating filter
37
+ if (options.minRating !== undefined) {
38
+ plugins = plugins.filter(p => p.rating >= options.minRating);
39
+ }
40
+ // Downloads filter
41
+ if (options.minDownloads !== undefined) {
42
+ plugins = plugins.filter(p => p.downloads >= options.minDownloads);
43
+ }
44
+ // Verified filter
45
+ if (options.verified !== undefined) {
46
+ plugins = plugins.filter(p => p.verified === options.verified);
47
+ }
48
+ // Trust level filter
49
+ if (options.trustLevel) {
50
+ const trustOrder = ['unverified', 'community', 'verified', 'official'];
51
+ const minIndex = trustOrder.indexOf(options.trustLevel);
52
+ plugins = plugins.filter(p => {
53
+ const pluginIndex = trustOrder.indexOf(p.trustLevel);
54
+ return pluginIndex >= minIndex;
55
+ });
56
+ }
57
+ // Permissions filter
58
+ if (options.permissions && options.permissions.length > 0) {
59
+ plugins = plugins.filter(p => options.permissions.every(perm => p.permissions.includes(perm)));
60
+ }
61
+ // Security audit filter
62
+ if (options.hasSecurityAudit !== undefined) {
63
+ plugins = plugins.filter(p => options.hasSecurityAudit ? p.securityAudit !== undefined : true);
64
+ }
65
+ // Sort
66
+ const sortBy = options.sortBy || 'downloads';
67
+ const sortOrder = options.sortOrder || 'desc';
68
+ plugins.sort((a, b) => {
69
+ let comparison = 0;
70
+ switch (sortBy) {
71
+ case 'downloads':
72
+ comparison = a.downloads - b.downloads;
73
+ break;
74
+ case 'rating':
75
+ comparison = a.rating - b.rating;
76
+ break;
77
+ case 'newest':
78
+ comparison = new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();
79
+ break;
80
+ case 'name':
81
+ comparison = a.name.localeCompare(b.name);
82
+ break;
83
+ case 'reputation':
84
+ comparison = a.author.reputation - b.author.reputation;
85
+ break;
86
+ }
87
+ return sortOrder === 'desc' ? -comparison : comparison;
88
+ });
89
+ // Pagination
90
+ const total = plugins.length;
91
+ const limit = options.limit || 20;
92
+ const offset = options.offset || 0;
93
+ const page = Math.floor(offset / limit) + 1;
94
+ plugins = plugins.slice(offset, offset + limit);
95
+ return {
96
+ plugins,
97
+ total,
98
+ page,
99
+ pageSize: limit,
100
+ hasMore: offset + limit < total,
101
+ query: options,
102
+ };
103
+ }
104
+ /**
105
+ * Get search suggestions based on partial query
106
+ */
107
+ export function getPluginSearchSuggestions(registry, partialQuery, limit = 10) {
108
+ const query = partialQuery.toLowerCase();
109
+ const suggestions = new Set();
110
+ // Search in plugin names
111
+ for (const plugin of registry.plugins) {
112
+ if (plugin.name.toLowerCase().includes(query)) {
113
+ suggestions.add(plugin.name);
114
+ }
115
+ if (plugin.displayName.toLowerCase().includes(query)) {
116
+ suggestions.add(plugin.displayName);
117
+ }
118
+ // Search in tags
119
+ for (const tag of plugin.tags) {
120
+ if (tag.toLowerCase().includes(query)) {
121
+ suggestions.add(tag);
122
+ }
123
+ }
124
+ // Search in keywords
125
+ for (const keyword of plugin.keywords) {
126
+ if (keyword.toLowerCase().includes(query)) {
127
+ suggestions.add(keyword);
128
+ }
129
+ }
130
+ }
131
+ return Array.from(suggestions).slice(0, limit);
132
+ }
133
+ /**
134
+ * Get tag cloud with counts
135
+ */
136
+ export function getPluginTagCloud(registry) {
137
+ const tagCounts = new Map();
138
+ for (const plugin of registry.plugins) {
139
+ for (const tag of plugin.tags) {
140
+ tagCounts.set(tag, (tagCounts.get(tag) || 0) + 1);
141
+ }
142
+ }
143
+ // Sort by count descending
144
+ const sortedEntries = Array.from(tagCounts.entries()).sort((a, b) => b[1] - a[1]);
145
+ return new Map(sortedEntries);
146
+ }
147
+ /**
148
+ * Get category statistics
149
+ */
150
+ export function getPluginCategoryStats(registry) {
151
+ const categoryCounts = new Map();
152
+ for (const plugin of registry.plugins) {
153
+ for (const category of plugin.categories) {
154
+ categoryCounts.set(category, (categoryCounts.get(category) || 0) + 1);
155
+ }
156
+ }
157
+ return categoryCounts;
158
+ }
159
+ /**
160
+ * Find similar plugins based on tags and category
161
+ */
162
+ export function findSimilarPlugins(registry, pluginId, limit = 5) {
163
+ const targetPlugin = registry.plugins.find(p => p.id === pluginId);
164
+ if (!targetPlugin) {
165
+ return [];
166
+ }
167
+ // Score plugins by tag overlap and category match
168
+ const scored = registry.plugins
169
+ .filter(p => p.id !== pluginId)
170
+ .map(plugin => {
171
+ let score = 0;
172
+ // Tag overlap
173
+ const tagOverlap = plugin.tags.filter(t => targetPlugin.tags.includes(t)).length;
174
+ score += tagOverlap * 2;
175
+ // Category match
176
+ const categoryMatch = plugin.categories.some(c => targetPlugin.categories.includes(c));
177
+ if (categoryMatch)
178
+ score += 3;
179
+ // Type match
180
+ if (plugin.type === targetPlugin.type)
181
+ score += 2;
182
+ // Same author bonus
183
+ if (plugin.author.id === targetPlugin.author.id)
184
+ score += 1;
185
+ return { plugin, score };
186
+ })
187
+ .filter(s => s.score > 0)
188
+ .sort((a, b) => b.score - a.score)
189
+ .slice(0, limit);
190
+ return scored.map(s => s.plugin);
191
+ }
192
+ /**
193
+ * Get featured plugins
194
+ */
195
+ export function getFeaturedPlugins(registry) {
196
+ return registry.featured
197
+ .map(id => registry.plugins.find(p => p.id === id))
198
+ .filter((p) => p !== undefined);
199
+ }
200
+ /**
201
+ * Get trending plugins
202
+ */
203
+ export function getTrendingPlugins(registry) {
204
+ return registry.trending
205
+ .map(id => registry.plugins.find(p => p.id === id))
206
+ .filter((p) => p !== undefined);
207
+ }
208
+ /**
209
+ * Get newest plugins
210
+ */
211
+ export function getNewestPlugins(registry) {
212
+ return registry.newest
213
+ .map(id => registry.plugins.find(p => p.id === id))
214
+ .filter((p) => p !== undefined);
215
+ }
216
+ /**
217
+ * Get official plugins
218
+ */
219
+ export function getOfficialPlugins(registry) {
220
+ return registry.official
221
+ .map(id => registry.plugins.find(p => p.id === id))
222
+ .filter((p) => p !== undefined);
223
+ }
224
+ /**
225
+ * Get plugins by permission
226
+ */
227
+ export function getPluginsByPermission(registry, permission) {
228
+ return registry.plugins.filter(p => p.permissions.includes(permission));
229
+ }
230
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/plugins/store/search.ts"],"names":[],"mappings":"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"}