@monoes/monomindcli 1.15.5 → 1.15.7

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 (168) hide show
  1. package/.claude/agents/github/repo-architect.md +1 -1
  2. package/.claude/agents/specialists/integration-architect.md +6 -6
  3. package/.claude/commands/hive-mind/hive-mind-init.md +1 -1
  4. package/.claude/commands/hive-mind/hive-mind-memory.md +1 -1
  5. package/.claude/commands/mastermind/brain.md +11 -11
  6. package/.claude/commands/mastermind/master.md +4 -4
  7. package/.claude/commands/mastermind/memory.md +6 -6
  8. package/.claude/commands/memory/README.md +4 -4
  9. package/.claude/commands/truth/start.md +3 -3
  10. package/.claude/helpers/extras-registry.json +2 -2
  11. package/.claude/helpers/skill-registry.json +26 -26
  12. package/.claude/helpers/statusline.cjs +8 -8
  13. package/.claude/skills/agentic-jujutsu/SKILL.md +3 -3
  14. package/.claude/skills/mastermind/_protocol.md +8 -8
  15. package/README.md +6 -6
  16. package/dist/src/__tests__/browse-analyzer.test.js +18 -1
  17. package/dist/src/__tests__/browse-analyzer.test.js.map +1 -1
  18. package/dist/src/commands/agent.js +2 -2
  19. package/dist/src/commands/agent.js.map +1 -1
  20. package/dist/src/commands/autopilot.js +1 -1
  21. package/dist/src/commands/autopilot.js.map +1 -1
  22. package/dist/src/commands/completions.d.ts.map +1 -1
  23. package/dist/src/commands/completions.js +2 -21
  24. package/dist/src/commands/completions.js.map +1 -1
  25. package/dist/src/commands/config.js +1 -1
  26. package/dist/src/commands/hive-mind.js +1 -1
  27. package/dist/src/commands/hooks-coverage-commands.js +31 -31
  28. package/dist/src/commands/hooks-coverage-commands.js.map +1 -1
  29. package/dist/src/commands/hooks-routing-commands.js +1 -1
  30. package/dist/src/commands/hooks-routing-commands.js.map +1 -1
  31. package/dist/src/commands/hooks.js +1 -1
  32. package/dist/src/commands/hooks.js.map +1 -1
  33. package/dist/src/commands/index.d.ts +0 -1
  34. package/dist/src/commands/index.d.ts.map +1 -1
  35. package/dist/src/commands/index.js +0 -4
  36. package/dist/src/commands/index.js.map +1 -1
  37. package/dist/src/commands/init.js +8 -8
  38. package/dist/src/commands/init.js.map +1 -1
  39. package/dist/src/commands/memory.d.ts +1 -1
  40. package/dist/src/commands/memory.js +25 -25
  41. package/dist/src/commands/memory.js.map +1 -1
  42. package/dist/src/commands/migrate.js +2 -2
  43. package/dist/src/commands/neural.js +1 -1
  44. package/dist/src/commands/neural.js.map +1 -1
  45. package/dist/src/commands/swarm.js +1 -1
  46. package/dist/src/commands/swarm.js.map +1 -1
  47. package/dist/src/config-adapter.d.ts.map +1 -1
  48. package/dist/src/config-adapter.js +8 -8
  49. package/dist/src/config-adapter.js.map +1 -1
  50. package/dist/src/index.js +1 -1
  51. package/dist/src/index.js.map +1 -1
  52. package/dist/src/init/claudemd-generator.js +2 -2
  53. package/dist/src/init/executor.js +16 -16
  54. package/dist/src/init/executor.js.map +1 -1
  55. package/dist/src/init/shared-instructions-generator.d.ts +1 -1
  56. package/dist/src/init/shared-instructions-generator.js +1 -1
  57. package/dist/src/init/statusline-generator.d.ts +1 -1
  58. package/dist/src/init/statusline-generator.js +8 -8
  59. package/dist/src/init/types.d.ts +3 -3
  60. package/dist/src/init/types.d.ts.map +1 -1
  61. package/dist/src/init/types.js +3 -3
  62. package/dist/src/init/types.js.map +1 -1
  63. package/dist/src/mcp-client.d.ts.map +1 -1
  64. package/dist/src/mcp-client.js +4 -11
  65. package/dist/src/mcp-client.js.map +1 -1
  66. package/dist/src/mcp-tools/autopilot-tools.js +3 -3
  67. package/dist/src/mcp-tools/autopilot-tools.js.map +1 -1
  68. package/dist/src/mcp-tools/coherence-tools.d.ts +2 -2
  69. package/dist/src/mcp-tools/coherence-tools.js +2 -2
  70. package/dist/src/mcp-tools/daa-tools.js +13 -13
  71. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  72. package/dist/src/mcp-tools/guidance-tools.js +4 -4
  73. package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
  74. package/dist/src/mcp-tools/hive-mind-tools.js +4 -4
  75. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  76. package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -1
  77. package/dist/src/mcp-tools/hooks-intelligence.js +1 -0
  78. package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -1
  79. package/dist/src/mcp-tools/hooks-routing.js +23 -23
  80. package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
  81. package/dist/src/mcp-tools/index.d.ts +0 -1
  82. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  83. package/dist/src/mcp-tools/index.js +0 -2
  84. package/dist/src/mcp-tools/index.js.map +1 -1
  85. package/dist/src/mcp-tools/memory-tools.d.ts +22 -6
  86. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  87. package/dist/src/mcp-tools/memory-tools.js +553 -505
  88. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  89. package/dist/src/mcp-tools/progress-tools.js +1 -1
  90. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  91. package/dist/src/mcp-tools/quality-tools.d.ts +2 -2
  92. package/dist/src/mcp-tools/quality-tools.js +3 -3
  93. package/dist/src/mcp-tools/quality-tools.js.map +1 -1
  94. package/dist/src/mcp-tools/system-tools.js +5 -5
  95. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  96. package/dist/src/mcp-tools/transfer-tools.d.ts +1 -1
  97. package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -1
  98. package/dist/src/mcp-tools/transfer-tools.js +1 -156
  99. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  100. package/dist/src/memory/embedding-operations.js +3 -3
  101. package/dist/src/memory/embedding-operations.js.map +1 -1
  102. package/dist/src/memory/hnsw-operations.js +5 -5
  103. package/dist/src/memory/hnsw-operations.js.map +1 -1
  104. package/dist/src/memory/intelligence.js +2 -2
  105. package/dist/src/memory/intelligence.js.map +1 -1
  106. package/dist/src/memory/memory-bridge.d.ts +86 -234
  107. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  108. package/dist/src/memory/memory-bridge.js +455 -1702
  109. package/dist/src/memory/memory-bridge.js.map +1 -1
  110. package/dist/src/memory/memory-crud.js +3 -3
  111. package/dist/src/memory/memory-crud.js.map +1 -1
  112. package/dist/src/memory/memory-initializer.d.ts +1 -1
  113. package/dist/src/memory/memory-initializer.js +5 -5
  114. package/dist/src/memory/memory-initializer.js.map +1 -1
  115. package/dist/src/memory/memory-read.js +4 -4
  116. package/dist/src/memory/memory-read.js.map +1 -1
  117. package/dist/src/suggest.js +0 -1
  118. package/dist/src/suggest.js.map +1 -1
  119. package/dist/src/types.d.ts +1 -1
  120. package/dist/src/ui/dashboard.html +41 -5
  121. package/dist/src/ui/orgs.html +91 -5
  122. package/dist/src/ui/server.mjs +44 -0
  123. package/dist/src/update/validator.d.ts.map +1 -1
  124. package/dist/src/update/validator.js +1 -3
  125. package/dist/src/update/validator.js.map +1 -1
  126. package/dist/tsconfig.tsbuildinfo +1 -1
  127. package/package.json +4 -4
  128. package/dist/src/commands/plugins.d.ts +0 -11
  129. package/dist/src/commands/plugins.d.ts.map +0 -1
  130. package/dist/src/commands/plugins.js +0 -799
  131. package/dist/src/commands/plugins.js.map +0 -1
  132. package/dist/src/plugins/manager.d.ts +0 -133
  133. package/dist/src/plugins/manager.d.ts.map +0 -1
  134. package/dist/src/plugins/manager.js +0 -498
  135. package/dist/src/plugins/manager.js.map +0 -1
  136. package/dist/src/plugins/store/discovery.d.ts +0 -88
  137. package/dist/src/plugins/store/discovery.d.ts.map +0 -1
  138. package/dist/src/plugins/store/discovery.js +0 -770
  139. package/dist/src/plugins/store/discovery.js.map +0 -1
  140. package/dist/src/plugins/store/index.d.ts +0 -76
  141. package/dist/src/plugins/store/index.d.ts.map +0 -1
  142. package/dist/src/plugins/store/index.js +0 -141
  143. package/dist/src/plugins/store/index.js.map +0 -1
  144. package/dist/src/plugins/store/search.d.ts +0 -46
  145. package/dist/src/plugins/store/search.d.ts.map +0 -1
  146. package/dist/src/plugins/store/search.js +0 -231
  147. package/dist/src/plugins/store/search.js.map +0 -1
  148. package/dist/src/plugins/store/types.d.ts +0 -274
  149. package/dist/src/plugins/store/types.d.ts.map +0 -1
  150. package/dist/src/plugins/store/types.js +0 -7
  151. package/dist/src/plugins/store/types.js.map +0 -1
  152. package/dist/src/plugins/tests/demo-plugin-store.d.ts +0 -7
  153. package/dist/src/plugins/tests/demo-plugin-store.d.ts.map +0 -1
  154. package/dist/src/plugins/tests/demo-plugin-store.js +0 -126
  155. package/dist/src/plugins/tests/demo-plugin-store.js.map +0 -1
  156. package/dist/src/plugins/tests/standalone-test.d.ts +0 -12
  157. package/dist/src/plugins/tests/standalone-test.d.ts.map +0 -1
  158. package/dist/src/plugins/tests/standalone-test.js +0 -188
  159. package/dist/src/plugins/tests/standalone-test.js.map +0 -1
  160. package/dist/src/plugins/tests/test-plugin-store.d.ts +0 -7
  161. package/dist/src/plugins/tests/test-plugin-store.d.ts.map +0 -1
  162. package/dist/src/plugins/tests/test-plugin-store.js +0 -206
  163. package/dist/src/plugins/tests/test-plugin-store.js.map +0 -1
  164. package/dist/src/services/registry-api.d.ts +0 -58
  165. package/dist/src/services/registry-api.d.ts.map +0 -1
  166. package/dist/src/services/registry-api.js +0 -199
  167. package/dist/src/services/registry-api.js.map +0 -1
  168. package/scripts/publish-registry.ts +0 -341
@@ -1,770 +0,0 @@
1
- /**
2
- * Plugin Discovery Service
3
- * Discovers plugin registries via IPNS and fetches from IPFS
4
- * Parallel implementation to pattern store for plugins
5
- */
6
- import * as crypto from 'crypto';
7
- import { resolveIPNS, fetchFromIPFS } from '../../transfer/ipfs/client.js';
8
- /** Maximum bytes accepted from npm API responses to prevent OOM. */
9
- const NPM_RESPONSE_MAX_BYTES = 256 * 1024; // 256 KB
10
- /**
11
- * Read a fetch Response body up to maxBytes. AbortSignal.timeout() only
12
- * bounds wall-clock time, NOT response body size; a slow-drip or large
13
- * response would otherwise buffer unbounded memory here.
14
- */
15
- async function readBoundedJson(res, maxBytes) {
16
- const lenHdr = res.headers.get('content-length');
17
- if (lenHdr) {
18
- const declared = parseInt(lenHdr, 10);
19
- if (Number.isFinite(declared) && declared > maxBytes) {
20
- throw new Error(`npm response too large: ${declared} bytes`);
21
- }
22
- }
23
- if (!res.body)
24
- return JSON.parse('');
25
- const reader = res.body.getReader();
26
- const chunks = [];
27
- let total = 0;
28
- while (true) {
29
- const { done, value } = await reader.read();
30
- if (done)
31
- break;
32
- if (value) {
33
- total += value.byteLength;
34
- if (total > maxBytes) {
35
- await reader.cancel();
36
- throw new Error(`npm response exceeded ${maxBytes} bytes`);
37
- }
38
- chunks.push(value);
39
- }
40
- }
41
- const buf = new Uint8Array(total);
42
- let off = 0;
43
- for (const c of chunks) {
44
- buf.set(c, off);
45
- off += c.byteLength;
46
- }
47
- return JSON.parse(new TextDecoder('utf-8').decode(buf));
48
- }
49
- /**
50
- * Fetch real npm download stats for a package
51
- */
52
- async function fetchNpmStats(packageName) {
53
- // Validate package name length to avoid constructing huge URLs
54
- if (!packageName || packageName.length > 214)
55
- return null;
56
- try {
57
- // Fetch last week downloads
58
- const downloadsUrl = `https://api.npmjs.org/downloads/point/last-week/${encodeURIComponent(packageName)}`;
59
- const downloadsRes = await fetch(downloadsUrl, { signal: AbortSignal.timeout(3000) });
60
- if (!downloadsRes.ok)
61
- return null;
62
- const downloadsData = await readBoundedJson(downloadsRes, NPM_RESPONSE_MAX_BYTES);
63
- // Fetch package info for version
64
- const packageUrl = `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`;
65
- const packageRes = await fetch(packageUrl, { signal: AbortSignal.timeout(3000) });
66
- let version = 'unknown';
67
- if (packageRes.ok) {
68
- const packageData = await readBoundedJson(packageRes, NPM_RESPONSE_MAX_BYTES);
69
- version = packageData.version || 'unknown';
70
- }
71
- return {
72
- downloads: downloadsData.downloads || 0,
73
- version,
74
- };
75
- }
76
- catch {
77
- return null;
78
- }
79
- }
80
- /**
81
- * Default plugin store configuration
82
- */
83
- /**
84
- * Live IPFS Registry CID - Updated 2026-01-24
85
- * This is the current pinned registry on Pinata
86
- */
87
- export const LIVE_REGISTRY_CID = 'QmXbfEAaR7D2Ujm4GAkbwcGZQMHqAMpwDoje4583uNP834';
88
- /**
89
- * Pre-trained Model Registry CID - Updated 2026-01-24
90
- * Contains 8 pre-trained learning pattern models with 40 patterns
91
- * Trained on 110,600+ examples with 90.5% average accuracy
92
- */
93
- export const MODEL_REGISTRY_CID = 'QmNr1yYMKi7YBaL8JSztQyuB5ZUaTdRMLxJC1pBpGbjsTc';
94
- export const DEFAULT_PLUGIN_STORE_CONFIG = {
95
- registries: [
96
- {
97
- name: 'monomind-official',
98
- description: 'Official Monomind plugin registry',
99
- // Use direct CID for reliable resolution (IPNS can be slow)
100
- ipnsName: LIVE_REGISTRY_CID,
101
- gateway: 'https://gateway.pinata.cloud',
102
- publicKey: 'ed25519:21490c8ef5e6d9fea573382e52fbad7d0fa40c3eb124e6746706da7a420ae2d2',
103
- trusted: true,
104
- official: true,
105
- },
106
- {
107
- name: 'community-plugins',
108
- description: 'Community-contributed plugins',
109
- ipnsName: LIVE_REGISTRY_CID, // Same registry for now
110
- gateway: 'https://ipfs.io',
111
- publicKey: 'ed25519:21490c8ef5e6d9fea573382e52fbad7d0fa40c3eb124e6746706da7a420ae2d2',
112
- trusted: true,
113
- official: false,
114
- },
115
- ],
116
- defaultRegistry: 'monomind-official',
117
- gateway: 'https://gateway.pinata.cloud',
118
- timeout: 30000,
119
- cacheDir: '.monomind/plugins/cache',
120
- cacheExpiry: 3600000, // 1 hour
121
- requireVerification: true,
122
- requireSecurityAudit: false,
123
- minTrustLevel: 'community',
124
- trustedAuthors: [],
125
- blockedPlugins: [],
126
- allowedPermissions: ['network', 'filesystem', 'memory', 'hooks'],
127
- requirePermissionPrompt: true,
128
- };
129
- /**
130
- * Plugin Discovery Service
131
- */
132
- export class PluginDiscoveryService {
133
- config;
134
- cache = new Map();
135
- constructor(config = {}) {
136
- this.config = { ...DEFAULT_PLUGIN_STORE_CONFIG, ...config };
137
- }
138
- /**
139
- * Discover plugin registry via IPNS
140
- */
141
- async discoverRegistry(registryName) {
142
- const targetRegistry = registryName || this.config.defaultRegistry;
143
- const registry = this.config.registries.find(r => r.name === targetRegistry);
144
- if (!registry) {
145
- return {
146
- success: false,
147
- error: `Unknown registry: ${targetRegistry}`,
148
- };
149
- }
150
- console.log(`[PluginDiscovery] Resolving ${registry.name} via IPNS...`);
151
- // Check cache first — key by registry.name (not ipnsName which can be shared)
152
- const cached = this.cache.get(registry.name);
153
- if (cached && Date.now() - cached.timestamp < this.config.cacheExpiry) {
154
- console.log(`[PluginDiscovery] Cache hit for ${registry.name}`);
155
- return {
156
- success: true,
157
- registry: cached.registry,
158
- fromCache: true,
159
- source: registry.name,
160
- };
161
- }
162
- try {
163
- // Check if ipnsName is actually a direct CID (CIDv1 starts with 'baf', CIDv0 starts with 'Qm')
164
- const isDirectCid = registry.ipnsName.startsWith('baf') || registry.ipnsName.startsWith('Qm');
165
- let cid;
166
- if (isDirectCid) {
167
- // Use the CID directly - no IPNS resolution needed
168
- cid = registry.ipnsName;
169
- console.log(`[PluginDiscovery] Using direct CID: ${cid}`);
170
- }
171
- else {
172
- // Resolve IPNS to get current CID
173
- cid = await resolveIPNS(registry.ipnsName, registry.gateway);
174
- if (!cid) {
175
- // Fallback to demo registry
176
- return this.createDemoRegistryAsync(registry);
177
- }
178
- console.log(`[PluginDiscovery] Resolved IPNS to CID: ${cid}`);
179
- }
180
- // Fetch registry from IPFS
181
- const registryData = await fetchFromIPFS(cid, registry.gateway);
182
- if (!registryData) {
183
- return this.createDemoRegistryAsync(registry);
184
- }
185
- // Verify registry signature if required — treat failure as fatal to prevent
186
- // a tampered registry from being served when requireVerification is enabled.
187
- if (this.config.requireVerification && registryData.registrySignature) {
188
- const verified = await this.verifyRegistrySignature(registryData, registry.publicKey);
189
- if (!verified) {
190
- console.error(`[PluginDiscovery] Registry signature verification failed — falling back to demo registry`);
191
- return this.createDemoRegistryAsync(registry);
192
- }
193
- }
194
- // Cache the result — key by registry.name so separate registries don't share a slot
195
- this.cache.set(registry.name, {
196
- registry: registryData,
197
- timestamp: Date.now(),
198
- });
199
- return {
200
- success: true,
201
- registry: registryData,
202
- cid,
203
- source: registry.name,
204
- fromCache: false,
205
- };
206
- }
207
- catch (error) {
208
- console.error(`[PluginDiscovery] Failed to discover registry:`, error);
209
- // Return demo registry on error
210
- return this.createDemoRegistryAsync(registry);
211
- }
212
- }
213
- /**
214
- * Create demo plugin registry with real npm stats
215
- */
216
- async createDemoRegistryAsync(registry) {
217
- console.log(`[PluginDiscovery] Using demo registry for ${registry.name}`);
218
- // Get plugins with real npm stats
219
- const plugins = await this.getDemoPluginsWithStats();
220
- const demoRegistry = {
221
- version: '1.0.0',
222
- type: 'plugins',
223
- updatedAt: new Date().toISOString(),
224
- ipnsName: registry.ipnsName,
225
- plugins,
226
- categories: [
227
- { id: 'ai-ml', name: 'AI/ML', description: 'AI and machine learning plugins', pluginCount: 1 },
228
- { id: 'security', name: 'Security', description: 'Security and compliance plugins', pluginCount: 1 },
229
- { id: 'devops', name: 'DevOps', description: 'CI/CD and deployment plugins', pluginCount: 1 },
230
- { id: 'integrations', name: 'Integrations', description: 'Third-party integrations', pluginCount: 2 },
231
- { id: 'agents', name: 'Agents', description: 'Custom agent types', pluginCount: 1 },
232
- ],
233
- authors: [
234
- {
235
- id: 'monomind-team',
236
- displayName: 'Monomind Team',
237
- verified: true,
238
- plugins: plugins.length,
239
- totalDownloads: plugins.reduce((sum, p) => sum + p.downloads, 0),
240
- reputation: 100,
241
- },
242
- ],
243
- totalPlugins: plugins.length,
244
- totalDownloads: plugins.reduce((sum, p) => sum + p.downloads, 0),
245
- totalAuthors: 1,
246
- featured: ['@monomind/plugin-agentic-qe', '@monomind/plugin-prime-radiant', '@monomind/security', '@monomind/claims', '@monomind/teammate-plugin'],
247
- trending: ['@monomind/plugin-agentic-qe', '@monomind/plugin-prime-radiant'],
248
- newest: ['@monomind/plugin-agentic-qe', '@monomind/plugin-prime-radiant'],
249
- official: ['@monomind/plugin-agentic-qe', '@monomind/plugin-prime-radiant', '@monomind/security', '@monomind/claims'],
250
- compatibilityMatrix: [
251
- { pluginId: '@monomind/security', pluginVersion: '3.0.0', monomindVersions: ['3.x'], tested: true },
252
- ],
253
- };
254
- // Cache the demo registry
255
- this.cache.set(registry.name, {
256
- registry: demoRegistry,
257
- timestamp: Date.now(),
258
- });
259
- return {
260
- success: true,
261
- registry: demoRegistry,
262
- cid: `bafybeiplugin${crypto.randomBytes(16).toString('hex')}`,
263
- source: `${registry.name} (demo)`,
264
- fromCache: false,
265
- };
266
- }
267
- /**
268
- * Get demo plugins
269
- */
270
- getDemoPlugins() {
271
- const baseTime = new Date().toISOString();
272
- const officialAuthor = {
273
- id: 'monomind-team',
274
- displayName: 'Monomind Team',
275
- verified: true,
276
- plugins: 5,
277
- totalDownloads: 50000,
278
- reputation: 100,
279
- };
280
- const communityAuthor = {
281
- id: 'community-contributor',
282
- displayName: 'Community Contributors',
283
- verified: false,
284
- plugins: 7,
285
- totalDownloads: 15000,
286
- reputation: 85,
287
- };
288
- return [
289
- {
290
- id: '@monomind/security',
291
- name: '@monomind/security',
292
- displayName: 'Security Scanner',
293
- description: 'Security scanning, CVE detection, and compliance auditing with threat modeling',
294
- version: '3.0.0',
295
- cid: 'bafybeisecurityplugin',
296
- size: 180000,
297
- checksum: 'sha256:def456security',
298
- author: officialAuthor,
299
- license: 'MIT',
300
- categories: ['security'],
301
- tags: ['security', 'cve', 'audit', 'compliance', 'threats'],
302
- keywords: ['security', 'scanner'],
303
- downloads: 12000,
304
- rating: 4.8,
305
- ratingCount: 189,
306
- lastUpdated: baseTime,
307
- createdAt: '2024-01-15T00:00:00Z',
308
- minMonomindVersion: '3.0.0',
309
- dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
310
- type: 'command',
311
- hooks: ['security:scan', 'security:audit'],
312
- commands: ['security scan', 'security audit', 'security cve', 'security threats'],
313
- permissions: ['filesystem', 'network'],
314
- exports: ['SecurityScanner', 'CVEDetector', 'ThreatModeler'],
315
- verified: true,
316
- trustLevel: 'official',
317
- securityAudit: {
318
- auditor: 'monomind-security-team',
319
- auditDate: '2024-12-01T00:00:00Z',
320
- auditVersion: '3.0.0',
321
- passed: true,
322
- issues: [],
323
- },
324
- },
325
- {
326
- id: '@monomind/claims',
327
- name: '@monomind/claims',
328
- displayName: 'Claims Authorization',
329
- description: 'Claims-based authorization system for fine-grained access control',
330
- version: '3.0.0',
331
- cid: 'bafybeiclaimsplugin',
332
- size: 95000,
333
- checksum: 'sha256:jkl012claims',
334
- author: officialAuthor,
335
- license: 'MIT',
336
- categories: ['security'],
337
- tags: ['claims', 'authorization', 'access-control', 'permissions'],
338
- keywords: ['claims', 'auth'],
339
- downloads: 6200,
340
- rating: 4.6,
341
- ratingCount: 98,
342
- lastUpdated: baseTime,
343
- createdAt: '2024-02-15T00:00:00Z',
344
- minMonomindVersion: '3.0.0',
345
- dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
346
- type: 'core',
347
- hooks: ['claims:check', 'claims:grant'],
348
- commands: ['claims check', 'claims grant', 'claims revoke', 'claims list'],
349
- permissions: ['config'],
350
- exports: ['ClaimsManager', 'PermissionChecker'],
351
- verified: true,
352
- trustLevel: 'official',
353
- },
354
- {
355
- id: 'community-analytics',
356
- name: 'community-analytics',
357
- displayName: 'Analytics Dashboard',
358
- description: 'Analytics and metrics visualization for Monomind operations',
359
- version: '1.2.0',
360
- cid: 'bafybeianalyticsplugin',
361
- size: 210000,
362
- checksum: 'sha256:pqr678analytics',
363
- author: communityAuthor,
364
- license: 'MIT',
365
- categories: ['integrations'],
366
- tags: ['analytics', 'metrics', 'dashboard', 'visualization'],
367
- keywords: ['analytics', 'dashboard'],
368
- downloads: 3400,
369
- rating: 4.4,
370
- ratingCount: 67,
371
- lastUpdated: baseTime,
372
- createdAt: '2024-06-01T00:00:00Z',
373
- minMonomindVersion: '3.0.0',
374
- dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
375
- type: 'integration',
376
- hooks: ['analytics:track', 'analytics:report'],
377
- commands: ['analytics dashboard', 'analytics export'],
378
- permissions: ['memory', 'network'],
379
- exports: ['AnalyticsTracker', 'Dashboard'],
380
- verified: false,
381
- trustLevel: 'community',
382
- },
383
- {
384
- id: 'custom-agents',
385
- name: 'custom-agents',
386
- displayName: 'Custom Agent Pack',
387
- description: 'Additional specialized agent types for domain-specific tasks',
388
- version: '2.0.1',
389
- cid: 'bafybeicustomagentsplugin',
390
- size: 175000,
391
- checksum: 'sha256:stu901agents',
392
- author: communityAuthor,
393
- license: 'Apache-2.0',
394
- categories: ['agents'],
395
- tags: ['agents', 'custom', 'specialized', 'domain-specific'],
396
- keywords: ['agents', 'custom'],
397
- downloads: 2100,
398
- rating: 4.3,
399
- ratingCount: 45,
400
- lastUpdated: baseTime,
401
- createdAt: '2024-08-01T00:00:00Z',
402
- minMonomindVersion: '3.0.0',
403
- dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
404
- type: 'agent',
405
- hooks: ['agent:spawn', 'agent:complete'],
406
- commands: ['agents custom list', 'agents custom spawn'],
407
- permissions: ['agents', 'memory'],
408
- exports: ['DataScienceAgent', 'DevOpsAgent', 'ContentAgent'],
409
- verified: false,
410
- trustLevel: 'community',
411
- },
412
- {
413
- id: 'slack-integration',
414
- name: 'slack-integration',
415
- displayName: 'Slack Integration',
416
- description: 'Slack integration for notifications and collaborative workflows',
417
- version: '1.0.0',
418
- cid: 'bafybeislackplugin',
419
- size: 85000,
420
- checksum: 'sha256:vwx234slack',
421
- author: communityAuthor,
422
- license: 'MIT',
423
- categories: ['integrations'],
424
- tags: ['slack', 'notifications', 'collaboration', 'messaging'],
425
- keywords: ['slack', 'integration'],
426
- downloads: 1800,
427
- rating: 4.5,
428
- ratingCount: 38,
429
- lastUpdated: baseTime,
430
- createdAt: '2024-09-01T00:00:00Z',
431
- minMonomindVersion: '3.0.0',
432
- dependencies: [
433
- { name: '@monomind/core', version: '^3.0.0' },
434
- { name: '@slack/web-api', version: '^6.0.0' },
435
- ],
436
- type: 'integration',
437
- hooks: ['notification:send'],
438
- commands: ['slack notify', 'slack connect'],
439
- permissions: ['network', 'credentials'],
440
- exports: ['SlackNotifier', 'SlackBot'],
441
- verified: false,
442
- trustLevel: 'community',
443
- },
444
- // Plugin SDK - Unified Plugin SDK for creating plugins
445
- {
446
- id: '@monomind/plugins',
447
- name: '@monomind/plugins',
448
- displayName: 'Plugin SDK',
449
- description: 'Unified Plugin SDK for Monomind - Worker, Hook, and Provider Integration. Create, test, and publish MonoMind plugins.',
450
- version: '3.0.0-alpha.2',
451
- cid: 'bafybeipluginsdk2024xyz',
452
- size: 156000,
453
- checksum: 'sha256:pluginsdk2024abc',
454
- author: officialAuthor,
455
- license: 'MIT',
456
- categories: ['devops'],
457
- tags: ['plugin', 'sdk', 'development', 'toolkit', 'workers', 'hooks', 'providers'],
458
- keywords: ['plugin', 'sdk', 'development'],
459
- downloads: 0,
460
- rating: 0,
461
- ratingCount: 0,
462
- lastUpdated: baseTime,
463
- createdAt: '2024-04-01T00:00:00Z',
464
- minMonomindVersion: '3.0.0',
465
- dependencies: [
466
- { name: '@monomind/core', version: '^3.0.0' },
467
- ],
468
- type: 'core',
469
- hooks: [
470
- 'plugin:create',
471
- 'plugin:validate',
472
- 'plugin:test',
473
- ],
474
- commands: [
475
- 'plugins create',
476
- 'plugins validate',
477
- 'plugins test',
478
- ],
479
- permissions: ['filesystem'],
480
- exports: [
481
- 'PluginBuilder',
482
- 'WorkerPlugin',
483
- 'HookPlugin',
484
- 'ProviderPlugin',
485
- ],
486
- verified: true,
487
- trustLevel: 'official',
488
- },
489
- // Agentic QE - AI-powered quality engineering
490
- {
491
- id: '@monomind/plugin-agentic-qe',
492
- name: '@monomind/plugin-agentic-qe',
493
- displayName: 'Agentic Quality Engineering',
494
- description: 'AI-powered quality engineering with 58 agents that write tests, find bugs, predict defects, scan security, and perform chaos engineering safely.',
495
- version: '3.0.0-alpha.3',
496
- cid: 'bafybeiagenticqeplugin2024',
497
- size: 285000,
498
- checksum: 'sha256:agenticqe2024xyz',
499
- author: officialAuthor,
500
- license: 'MIT',
501
- categories: ['ai-ml', 'devops', 'security'],
502
- tags: ['testing', 'qe', 'tdd', 'security', 'chaos-engineering', 'coverage', 'defect-prediction', 'agents'],
503
- keywords: ['quality', 'testing', 'agents', 'tdd', 'security'],
504
- downloads: 1200,
505
- rating: 4.8,
506
- ratingCount: 24,
507
- lastUpdated: baseTime,
508
- createdAt: '2026-01-20T00:00:00Z',
509
- minMonomindVersion: '3.0.0',
510
- dependencies: [
511
- { name: '@monomind/core', version: '^3.0.0' },
512
- ],
513
- type: 'integration',
514
- hooks: [
515
- 'aqe:generate-tests',
516
- 'aqe:analyze-coverage',
517
- 'aqe:security-scan',
518
- 'aqe:predict-defects',
519
- 'aqe:chaos-inject',
520
- ],
521
- commands: [
522
- 'aqe generate-tests',
523
- 'aqe tdd-cycle',
524
- 'aqe security-scan',
525
- 'aqe predict-defects',
526
- 'aqe chaos-inject',
527
- 'aqe quality-gate',
528
- 'aqe visual-regression',
529
- ],
530
- permissions: ['filesystem', 'network', 'memory'],
531
- exports: [
532
- 'TestGenerator',
533
- 'CoverageAnalyzer',
534
- 'SecurityScanner',
535
- 'DefectPredictor',
536
- 'ChaosInjector',
537
- 'QualityGate',
538
- ],
539
- verified: true,
540
- trustLevel: 'official',
541
- securityAudit: {
542
- auditor: 'monomind-security-team',
543
- auditDate: '2026-01-20T00:00:00Z',
544
- auditVersion: '3.0.0-alpha.3',
545
- passed: true,
546
- issues: [],
547
- },
548
- },
549
- // Prime Radiant - Mathematical coherence and consensus verification
550
- {
551
- id: '@monomind/plugin-prime-radiant',
552
- name: '@monomind/plugin-prime-radiant',
553
- displayName: 'Prime Radiant',
554
- description: 'Mathematical AI that catches contradictions, verifies consensus, prevents hallucinations, and analyzes swarm stability using sheaf cohomology and spectral graph theory.',
555
- version: '0.1.5',
556
- cid: 'bafybeiprimeradiantplugin2024',
557
- size: 195000,
558
- checksum: 'sha256:primeradiant2024xyz',
559
- author: officialAuthor,
560
- license: 'MIT',
561
- categories: ['ai-ml', 'agents'],
562
- tags: ['coherence', 'consensus', 'mathematics', 'validation', 'hallucination-prevention', 'spectral', 'causal'],
563
- keywords: ['coherence', 'consensus', 'validation', 'mathematics'],
564
- downloads: 850,
565
- rating: 4.9,
566
- ratingCount: 18,
567
- lastUpdated: baseTime,
568
- createdAt: '2026-01-20T00:00:00Z',
569
- minMonomindVersion: '3.0.0',
570
- dependencies: [
571
- { name: '@monomind/core', version: '^3.0.0' },
572
- ],
573
- type: 'integration',
574
- hooks: [
575
- 'pr:pre-memory-store',
576
- 'pr:pre-consensus',
577
- 'pr:post-swarm-task',
578
- 'pr:pre-rag-retrieval',
579
- ],
580
- commands: [
581
- 'pr coherence-check',
582
- 'pr consensus-verify',
583
- 'pr spectral-analyze',
584
- 'pr causal-infer',
585
- 'pr memory-gate',
586
- 'pr quantum-topology',
587
- ],
588
- permissions: ['memory', 'hooks'],
589
- exports: [
590
- 'CoherenceChecker',
591
- 'ConsensusVerifier',
592
- 'SpectralAnalyzer',
593
- 'CausalInference',
594
- 'MemoryGate',
595
- 'QuantumTopology',
596
- ],
597
- verified: true,
598
- trustLevel: 'official',
599
- securityAudit: {
600
- auditor: 'monomind-security-team',
601
- auditDate: '2026-01-20T00:00:00Z',
602
- auditVersion: '0.1.5',
603
- passed: true,
604
- issues: [],
605
- },
606
- },
607
- // Teammate Plugin - Claude Code v2.1.19+ integration
608
- {
609
- id: '@monomind/teammate-plugin',
610
- name: '@monomind/teammate-plugin',
611
- displayName: 'Teammate Plugin',
612
- description: 'Native TeammateTool integration for Claude Code v2.1.19+. Multi-agent team orchestration with plan approval workflows, delegation, messaging, and BMSSP-optimized topology routing. 21 MCP tools.',
613
- version: '1.0.0-alpha.1',
614
- cid: 'bafybeiteammateplugin2026',
615
- size: 387000,
616
- checksum: 'sha256:e335dd24ec2e68e8952c517794421a0b18dfb23f',
617
- author: officialAuthor,
618
- license: 'MIT',
619
- categories: ['agents', 'integrations'],
620
- tags: ['teammate', 'claude-code', 'multi-agent', 'swarm', 'orchestration', 'bmssp'],
621
- keywords: ['teammate', 'claude-code', 'multi-agent'],
622
- downloads: 0,
623
- rating: 0,
624
- ratingCount: 0,
625
- lastUpdated: baseTime,
626
- createdAt: '2026-01-25T00:00:00Z',
627
- minMonomindVersion: '3.0.0',
628
- dependencies: [
629
- { name: '@monomind/core', version: '^3.0.0' },
630
- { name: 'eventemitter3', version: '^5.0.1' },
631
- ],
632
- type: 'integration',
633
- hooks: ['teammate:spawn', 'teammate:message', 'teammate:plan', 'teammate:delegate'],
634
- commands: ['teammate spawn', 'teammate team', 'teammate message', 'teammate plan'],
635
- permissions: ['filesystem', 'memory', 'network'],
636
- exports: ['TeammateBridge', 'createTeammateBridge', 'TEAMMATE_MCP_TOOLS', 'TopologyOptimizer', 'SemanticRouter'],
637
- verified: true,
638
- trustLevel: 'official',
639
- securityAudit: {
640
- auditor: 'monomind-security-team',
641
- auditDate: '2026-01-25T00:00:00Z',
642
- auditVersion: '1.0.0-alpha.1',
643
- passed: true,
644
- issues: [],
645
- },
646
- },
647
- ];
648
- }
649
- /**
650
- * Get demo plugins with real npm stats
651
- */
652
- async getDemoPluginsWithStats() {
653
- const basePlugins = this.getDemoPlugins();
654
- // Only fetch stats for real npm packages
655
- const realNpmPackages = [
656
- '@monomind/plugin-agentic-qe',
657
- '@monomind/plugin-prime-radiant',
658
- '@monomind/claims',
659
- '@monomind/security',
660
- '@monomind/plugins',
661
- '@monomind/teammate-plugin',
662
- ];
663
- // Fetch stats in parallel
664
- const statsPromises = realNpmPackages.map(pkg => fetchNpmStats(pkg));
665
- const statsResults = await Promise.all(statsPromises);
666
- // Create a map of package -> stats
667
- const statsMap = new Map();
668
- realNpmPackages.forEach((pkg, i) => {
669
- if (statsResults[i]) {
670
- statsMap.set(pkg, statsResults[i]);
671
- }
672
- });
673
- // Update plugins with real stats, remove fake plugins that don't exist
674
- return basePlugins
675
- .filter(plugin => {
676
- // Keep only real plugins that exist on npm or our two new ones
677
- const isRealPlugin = realNpmPackages.includes(plugin.name);
678
- return isRealPlugin;
679
- })
680
- .map(plugin => {
681
- const stats = statsMap.get(plugin.name);
682
- if (stats) {
683
- return {
684
- ...plugin,
685
- downloads: stats.downloads,
686
- version: stats.version,
687
- ratingCount: 0, // No rating system yet
688
- rating: 0,
689
- };
690
- }
691
- return {
692
- ...plugin,
693
- downloads: 0,
694
- ratingCount: 0,
695
- rating: 0,
696
- };
697
- });
698
- }
699
- /**
700
- * Verify registry signature using real Ed25519
701
- */
702
- async verifyRegistrySignature(registry, expectedPublicKey) {
703
- if (!registry.registrySignature || !registry.registryPublicKey)
704
- return false;
705
- if (registry.registryPublicKey !== expectedPublicKey)
706
- return false;
707
- const sigHex = registry.registrySignature.replace(/^ed25519:/, '');
708
- const pubKeyHex = registry.registryPublicKey.replace(/^ed25519:/, '');
709
- if (sigHex.length !== 128 || pubKeyHex.length !== 64)
710
- return false;
711
- const content = JSON.stringify({
712
- version: registry.version,
713
- updatedAt: registry.updatedAt,
714
- plugins: registry.plugins.map(p => ({ id: p.id, cid: p.cid, checksum: p.checksum, version: p.version })),
715
- totalPlugins: registry.totalPlugins,
716
- });
717
- try {
718
- const ed = await import('@noble/ed25519');
719
- return await ed.verifyAsync(Buffer.from(sigHex, 'hex'), Buffer.from(content), Buffer.from(pubKeyHex, 'hex'));
720
- }
721
- catch {
722
- return false;
723
- }
724
- }
725
- /**
726
- * List available registries
727
- */
728
- listRegistries() {
729
- return [...this.config.registries];
730
- }
731
- /**
732
- * Add a new registry
733
- */
734
- addRegistry(registry) {
735
- this.config.registries.push(registry);
736
- }
737
- /**
738
- * Remove a registry
739
- */
740
- removeRegistry(name) {
741
- const index = this.config.registries.findIndex(r => r.name === name);
742
- if (index >= 0) {
743
- this.config.registries.splice(index, 1);
744
- return true;
745
- }
746
- return false;
747
- }
748
- /**
749
- * Clear cache
750
- */
751
- clearCache() {
752
- this.cache.clear();
753
- }
754
- /**
755
- * Get cache statistics
756
- */
757
- getCacheStats() {
758
- return {
759
- entries: this.cache.size,
760
- registries: Array.from(this.cache.keys()),
761
- };
762
- }
763
- }
764
- /**
765
- * Create discovery service with default config
766
- */
767
- export function createPluginDiscoveryService(config) {
768
- return new PluginDiscoveryService(config);
769
- }
770
- //# sourceMappingURL=discovery.js.map