claude-flow 3.6.10 → 3.6.12
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.
- package/.claude/settings.json +11 -33
- package/README.md +79 -24
- package/package.json +1 -1
- package/v3/@claude-flow/cli/README.md +79 -24
- package/v3/@claude-flow/cli/bin/cli.js +14 -3
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +74 -18
- package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +2 -11
- package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +227 -409
- package/v3/@claude-flow/cli/dist/src/init/mcp-generator.js +4 -4
- package/v3/@claude-flow/cli/dist/src/init/settings-generator.js +4 -4
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +4 -4
- package/v3/@claude-flow/cli/dist/src/mcp-client.js +16 -1
- package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +100 -39
- package/v3/@claude-flow/cli/dist/src/plugins/store/discovery.js +47 -4
- package/v3/@claude-flow/cli/package.json +1 -1
- package/v3/@claude-flow/shared/package.json +2 -1
- /package/.claude/{settings copy.json → settings.json.bak} +0 -0
|
@@ -40,9 +40,9 @@ export function generateMCPConfig(options) {
|
|
|
40
40
|
const npmEnv = {
|
|
41
41
|
npm_config_update_notifier: 'false',
|
|
42
42
|
};
|
|
43
|
-
// Claude Flow MCP server (core)
|
|
43
|
+
// Claude Flow MCP server (core) — uses ruflo wrapper for portable npm-resolved invocation
|
|
44
44
|
if (config.claudeFlow) {
|
|
45
|
-
mcpServers['claude-flow'] = createMCPServerEntry(['@
|
|
45
|
+
mcpServers['claude-flow'] = createMCPServerEntry(['ruflo@latest', 'mcp', 'start'], {
|
|
46
46
|
...npmEnv,
|
|
47
47
|
CLAUDE_FLOW_MODE: 'v3',
|
|
48
48
|
CLAUDE_FLOW_HOOKS_ENABLED: 'true',
|
|
@@ -76,7 +76,7 @@ export function generateMCPCommands(options) {
|
|
|
76
76
|
const config = options.mcp;
|
|
77
77
|
if (isWindows()) {
|
|
78
78
|
if (config.claudeFlow) {
|
|
79
|
-
commands.push('claude mcp add claude-flow -- cmd /c npx -y @
|
|
79
|
+
commands.push('claude mcp add claude-flow -- cmd /c npx -y ruflo@latest mcp start');
|
|
80
80
|
}
|
|
81
81
|
if (config.ruvSwarm) {
|
|
82
82
|
commands.push('claude mcp add ruv-swarm -- cmd /c npx -y ruv-swarm mcp start');
|
|
@@ -87,7 +87,7 @@ export function generateMCPCommands(options) {
|
|
|
87
87
|
}
|
|
88
88
|
else {
|
|
89
89
|
if (config.claudeFlow) {
|
|
90
|
-
commands.push("claude mcp add claude-flow -- npx -y @
|
|
90
|
+
commands.push("claude mcp add claude-flow -- npx -y ruflo@latest mcp start");
|
|
91
91
|
}
|
|
92
92
|
if (config.ruvSwarm) {
|
|
93
93
|
commands.push("claude mcp add ruv-swarm -- npx -y ruv-swarm mcp start");
|
|
@@ -29,10 +29,10 @@ export function generateSettings(options) {
|
|
|
29
29
|
'Read(./.env.*)',
|
|
30
30
|
],
|
|
31
31
|
};
|
|
32
|
-
// Add
|
|
32
|
+
// Add RuFlo attribution for git commits and PRs
|
|
33
33
|
settings.attribution = {
|
|
34
|
-
commit: 'Co-Authored-By:
|
|
35
|
-
pr: '🤖 Generated with [
|
|
34
|
+
commit: 'Co-Authored-By: RuFlo <ruv@ruv.net>',
|
|
35
|
+
pr: '🤖 Generated with [RuFlo](https://github.com/ruvnet/ruflo)',
|
|
36
36
|
};
|
|
37
37
|
// Note: Claude Code expects 'model' to be a string, not an object
|
|
38
38
|
// Model preferences are stored in claudeFlow settings instead
|
|
@@ -57,7 +57,7 @@ export function generateSettings(options) {
|
|
|
57
57
|
shell: platform.shell,
|
|
58
58
|
},
|
|
59
59
|
modelPreferences: {
|
|
60
|
-
default: 'claude-opus-4-
|
|
60
|
+
default: 'claude-opus-4-7',
|
|
61
61
|
routing: 'claude-haiku-4-5-20251001',
|
|
62
62
|
},
|
|
63
63
|
agentTeams: {
|
|
@@ -13,7 +13,7 @@ import type { InitOptions } from './types.js';
|
|
|
13
13
|
/**
|
|
14
14
|
* Generate optimized statusline script
|
|
15
15
|
* Output format:
|
|
16
|
-
* ▊ RuFlo V3.
|
|
16
|
+
* ▊ RuFlo V3.6 ● user │ ⎇ branch │ Opus 4.7
|
|
17
17
|
* ─────────────────────────────────────────────────────
|
|
18
18
|
* 🏗️ DDD Domains [●●○○○] 2/5 ⚡ HNSW 150x
|
|
19
19
|
* 🤖 Swarm ◉ [ 5/15] 👥 2 🪝 10/17 🟢 CVE 3/3 💾 4MB 🧠 63%
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
/**
|
|
13
13
|
* Generate optimized statusline script
|
|
14
14
|
* Output format:
|
|
15
|
-
* ▊ RuFlo V3.
|
|
15
|
+
* ▊ RuFlo V3.6 ● user │ ⎇ branch │ Opus 4.7
|
|
16
16
|
* ─────────────────────────────────────────────────────
|
|
17
17
|
* 🏗️ DDD Domains [●●○○○] 2/5 ⚡ HNSW 150x
|
|
18
18
|
* 🤖 Swarm ◉ [ 5/15] 👥 2 🪝 10/17 🟢 CVE 3/3 💾 4MB 🧠 63%
|
|
@@ -175,7 +175,7 @@ function getModelName() {
|
|
|
175
175
|
const ts = usage[id] && usage[id].lastUsedAt ? new Date(usage[id].lastUsedAt).getTime() : 0;
|
|
176
176
|
if (ts > latest) { latest = ts; modelId = id; }
|
|
177
177
|
}
|
|
178
|
-
if (modelId.includes('opus')) return 'Opus 4.
|
|
178
|
+
if (modelId.includes('opus')) return 'Opus 4.7';
|
|
179
179
|
if (modelId.includes('sonnet')) return 'Sonnet 4.6';
|
|
180
180
|
if (modelId.includes('haiku')) return 'Haiku 4.5';
|
|
181
181
|
return modelId.split('-').slice(1, 3).join(' ');
|
|
@@ -191,7 +191,7 @@ function getModelName() {
|
|
|
191
191
|
const settings = getSettings();
|
|
192
192
|
if (settings && settings.model) {
|
|
193
193
|
const m = settings.model;
|
|
194
|
-
if (m.includes('opus')) return 'Opus 4.
|
|
194
|
+
if (m.includes('opus')) return 'Opus 4.7';
|
|
195
195
|
if (m.includes('sonnet')) return 'Sonnet 4.6';
|
|
196
196
|
if (m.includes('haiku')) return 'Haiku 4.5';
|
|
197
197
|
}
|
|
@@ -639,7 +639,7 @@ function generateStatusline() {
|
|
|
639
639
|
|
|
640
640
|
// Header
|
|
641
641
|
// Read version from package.json
|
|
642
|
-
let pkgVersion = '3.
|
|
642
|
+
let pkgVersion = '3.6';
|
|
643
643
|
try {
|
|
644
644
|
const pkgPath = path.join(CWD, 'node_modules', '@claude-flow', 'cli', 'package.json');
|
|
645
645
|
if (fs.existsSync(pkgPath)) {
|
|
@@ -32,6 +32,7 @@ import { githubTools } from './mcp-tools/github-tools.js';
|
|
|
32
32
|
import { daaTools } from './mcp-tools/daa-tools.js';
|
|
33
33
|
import { coordinationTools } from './mcp-tools/coordination-tools.js';
|
|
34
34
|
import { browserTools } from './mcp-tools/browser-tools.js';
|
|
35
|
+
import { execFileSync } from 'node:child_process';
|
|
35
36
|
// Phase 6: AgentDB v3 controller tools
|
|
36
37
|
import { agentdbTools } from './mcp-tools/agentdb-tools.js';
|
|
37
38
|
// RuVector WASM tools
|
|
@@ -39,6 +40,20 @@ import { ruvllmWasmTools } from './mcp-tools/ruvllm-tools.js';
|
|
|
39
40
|
import { wasmAgentTools } from './mcp-tools/wasm-agent-tools.js';
|
|
40
41
|
import { guidanceTools } from './mcp-tools/guidance-tools.js';
|
|
41
42
|
import { autopilotTools } from './mcp-tools/autopilot-tools.js';
|
|
43
|
+
// #1605: Only register browser tools if agent-browser is available
|
|
44
|
+
let _browserAvailable = null;
|
|
45
|
+
function getBrowserTools() {
|
|
46
|
+
if (_browserAvailable === null) {
|
|
47
|
+
try {
|
|
48
|
+
execFileSync('agent-browser', ['--version'], { stdio: 'ignore', timeout: 3000 });
|
|
49
|
+
_browserAvailable = true;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
_browserAvailable = false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return _browserAvailable ? browserTools : [];
|
|
56
|
+
}
|
|
42
57
|
/**
|
|
43
58
|
* MCP Tool Registry
|
|
44
59
|
* Maps tool names to their handler functions
|
|
@@ -75,7 +90,7 @@ registerTools([
|
|
|
75
90
|
...githubTools,
|
|
76
91
|
...daaTools,
|
|
77
92
|
...coordinationTools,
|
|
78
|
-
...
|
|
93
|
+
...getBrowserTools(),
|
|
79
94
|
// Phase 6: AgentDB v3 controller tools
|
|
80
95
|
...agentdbTools,
|
|
81
96
|
// RuVector WASM tools
|
|
@@ -12,9 +12,10 @@
|
|
|
12
12
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'fs';
|
|
13
13
|
import { join, resolve } from 'path';
|
|
14
14
|
import { validateIdentifier } from './validate-input.js';
|
|
15
|
-
//
|
|
16
|
-
const MEMORY_DIR = '.
|
|
15
|
+
// #1604: Align with memory-initializer.ts — single source of truth is .swarm/memory.db
|
|
16
|
+
const MEMORY_DIR = '.swarm';
|
|
17
17
|
const LEGACY_MEMORY_FILE = 'store.json';
|
|
18
|
+
const LEGACY_MEMORY_DIR = '.claude-flow/memory';
|
|
18
19
|
const MIGRATION_MARKER = '.migrated-to-sqlite';
|
|
19
20
|
function getMemoryDir() {
|
|
20
21
|
return resolve(MEMORY_DIR);
|
|
@@ -55,11 +56,11 @@ function validateMemoryInput(key, value, query, namespace) {
|
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
/**
|
|
58
|
-
* Check if legacy JSON store exists
|
|
59
|
+
* Check if legacy JSON store exists in old .claude-flow/memory/ location
|
|
59
60
|
*/
|
|
60
61
|
function hasLegacyStore() {
|
|
61
|
-
const legacyPath =
|
|
62
|
-
const migrationMarker =
|
|
62
|
+
const legacyPath = resolve(join(LEGACY_MEMORY_DIR, LEGACY_MEMORY_FILE));
|
|
63
|
+
const migrationMarker = resolve(join(LEGACY_MEMORY_DIR, MIGRATION_MARKER));
|
|
63
64
|
return existsSync(legacyPath) && !existsSync(migrationMarker);
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
@@ -67,9 +68,9 @@ function hasLegacyStore() {
|
|
|
67
68
|
*/
|
|
68
69
|
function loadLegacyStore() {
|
|
69
70
|
try {
|
|
70
|
-
const
|
|
71
|
-
if (existsSync(
|
|
72
|
-
const data = readFileSync(
|
|
71
|
+
const legacyPath = resolve(join(LEGACY_MEMORY_DIR, LEGACY_MEMORY_FILE));
|
|
72
|
+
if (existsSync(legacyPath)) {
|
|
73
|
+
const data = readFileSync(legacyPath, 'utf-8');
|
|
73
74
|
return JSON.parse(data);
|
|
74
75
|
}
|
|
75
76
|
}
|
|
@@ -82,8 +83,10 @@ function loadLegacyStore() {
|
|
|
82
83
|
* Mark migration as complete
|
|
83
84
|
*/
|
|
84
85
|
function markMigrationComplete() {
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
const legacyDir = resolve(LEGACY_MEMORY_DIR);
|
|
87
|
+
if (!existsSync(legacyDir))
|
|
88
|
+
mkdirSync(legacyDir, { recursive: true });
|
|
89
|
+
writeFileSync(resolve(join(LEGACY_MEMORY_DIR, MIGRATION_MARKER)), JSON.stringify({
|
|
87
90
|
migratedAt: new Date().toISOString(),
|
|
88
91
|
version: '3.0.0',
|
|
89
92
|
}), 'utf-8');
|
|
@@ -104,41 +107,47 @@ async function getMemoryFunctions() {
|
|
|
104
107
|
};
|
|
105
108
|
}
|
|
106
109
|
/**
|
|
107
|
-
* Ensure memory database is initialized and migrate legacy data if needed
|
|
110
|
+
* Ensure memory database is initialized and migrate legacy data if needed.
|
|
111
|
+
* #1606: Wrapped in try/catch to prevent process-level crashes that kill
|
|
112
|
+
* the stdio MCP transport on Windows/Codex.
|
|
108
113
|
*/
|
|
109
114
|
async function ensureInitialized() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
115
|
+
try {
|
|
116
|
+
const { initializeMemoryDatabase, checkMemoryInitialization, storeEntry } = await getMemoryFunctions();
|
|
117
|
+
// Check if already initialized
|
|
118
|
+
const status = await checkMemoryInitialization();
|
|
119
|
+
if (!status.initialized) {
|
|
120
|
+
await initializeMemoryDatabase({ force: false, verbose: false });
|
|
121
|
+
}
|
|
122
|
+
// Migrate legacy JSON data if exists (from old .claude-flow/memory/ location)
|
|
123
|
+
if (hasLegacyStore()) {
|
|
124
|
+
const legacyStore = loadLegacyStore();
|
|
125
|
+
if (legacyStore && Object.keys(legacyStore.entries).length > 0) {
|
|
126
|
+
console.error('[MCP Memory] Migrating legacy JSON store to sql.js...');
|
|
127
|
+
let migrated = 0;
|
|
128
|
+
for (const [key, entry] of Object.entries(legacyStore.entries)) {
|
|
129
|
+
try {
|
|
130
|
+
const value = typeof entry.value === 'string' ? entry.value : JSON.stringify(entry.value);
|
|
131
|
+
await storeEntry({
|
|
132
|
+
key,
|
|
133
|
+
value,
|
|
134
|
+
namespace: 'default',
|
|
135
|
+
generateEmbeddingFlag: true,
|
|
136
|
+
});
|
|
137
|
+
migrated++;
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
console.error(`[MCP Memory] Failed to migrate key "${key}":`, e);
|
|
141
|
+
}
|
|
136
142
|
}
|
|
143
|
+
console.error(`[MCP Memory] Migrated ${migrated}/${Object.keys(legacyStore.entries).length} entries`);
|
|
144
|
+
markMigrationComplete();
|
|
137
145
|
}
|
|
138
|
-
console.error(`[MCP Memory] Migrated ${migrated}/${Object.keys(legacyStore.entries).length} entries`);
|
|
139
|
-
markMigrationComplete();
|
|
140
146
|
}
|
|
141
147
|
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
console.error('[MCP Memory] Initialization failed:', error instanceof Error ? error.message : error);
|
|
150
|
+
}
|
|
142
151
|
}
|
|
143
152
|
export const memoryTools = [
|
|
144
153
|
{
|
|
@@ -286,6 +295,7 @@ export const memoryTools = [
|
|
|
286
295
|
namespace: { type: 'string', description: 'Namespace to search (default: "default")' },
|
|
287
296
|
limit: { type: 'number', description: 'Maximum results (default: 10)' },
|
|
288
297
|
threshold: { type: 'number', description: 'Minimum similarity threshold 0-1 (default: 0.3)' },
|
|
298
|
+
smart: { type: 'boolean', description: 'Enable SmartRetrieval pipeline — query expansion, RRF fusion, recency boost, MMR diversity (default: false)' },
|
|
289
299
|
},
|
|
290
300
|
required: ['query'],
|
|
291
301
|
},
|
|
@@ -299,6 +309,57 @@ export const memoryTools = [
|
|
|
299
309
|
validateMemoryInput(undefined, undefined, query);
|
|
300
310
|
const startTime = performance.now();
|
|
301
311
|
try {
|
|
312
|
+
if (input.smart) {
|
|
313
|
+
// SmartRetrieval pipeline (ADR-090)
|
|
314
|
+
const { smartSearch } = await import('@claude-flow/memory');
|
|
315
|
+
// Adapt searchEntries to the SearchFn interface
|
|
316
|
+
const rawSearch = async (req) => {
|
|
317
|
+
const r = await searchEntries({
|
|
318
|
+
query: req.query,
|
|
319
|
+
namespace: req.namespace || namespace,
|
|
320
|
+
limit: req.limit || limit * 3,
|
|
321
|
+
threshold: req.threshold ?? threshold,
|
|
322
|
+
});
|
|
323
|
+
return {
|
|
324
|
+
results: r.results.map(e => ({
|
|
325
|
+
id: e.id,
|
|
326
|
+
key: e.key,
|
|
327
|
+
content: e.content,
|
|
328
|
+
score: e.score,
|
|
329
|
+
namespace: e.namespace,
|
|
330
|
+
})),
|
|
331
|
+
};
|
|
332
|
+
};
|
|
333
|
+
const smartResult = await smartSearch(rawSearch, {
|
|
334
|
+
query,
|
|
335
|
+
namespace,
|
|
336
|
+
limit,
|
|
337
|
+
threshold,
|
|
338
|
+
});
|
|
339
|
+
const duration = performance.now() - startTime;
|
|
340
|
+
const results = smartResult.results.map(r => {
|
|
341
|
+
let value = r.content;
|
|
342
|
+
try {
|
|
343
|
+
value = JSON.parse(r.content);
|
|
344
|
+
}
|
|
345
|
+
catch { /* keep as string */ }
|
|
346
|
+
return {
|
|
347
|
+
key: r.key,
|
|
348
|
+
namespace: r.namespace,
|
|
349
|
+
value,
|
|
350
|
+
similarity: r.score,
|
|
351
|
+
};
|
|
352
|
+
});
|
|
353
|
+
return {
|
|
354
|
+
query,
|
|
355
|
+
results,
|
|
356
|
+
total: results.length,
|
|
357
|
+
searchTime: `${duration.toFixed(2)}ms`,
|
|
358
|
+
backend: 'SmartRetrieval (RRF + MMR + Recency)',
|
|
359
|
+
stats: smartResult.stats,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
// Original non-smart path (unchanged)
|
|
302
363
|
const result = await searchEntries({
|
|
303
364
|
query,
|
|
304
365
|
namespace,
|
|
@@ -183,6 +183,7 @@ export class PluginDiscoveryService {
|
|
|
183
183
|
{ id: 'devops', name: 'DevOps', description: 'CI/CD and deployment plugins', pluginCount: 1 },
|
|
184
184
|
{ id: 'integrations', name: 'Integrations', description: 'Third-party integrations', pluginCount: 2 },
|
|
185
185
|
{ id: 'agents', name: 'Agents', description: 'Custom agent types', pluginCount: 1 },
|
|
186
|
+
{ id: 'iot', name: 'IoT', description: 'IoT device management and fleet orchestration', pluginCount: 1 },
|
|
186
187
|
],
|
|
187
188
|
authors: [
|
|
188
189
|
{
|
|
@@ -197,10 +198,10 @@ export class PluginDiscoveryService {
|
|
|
197
198
|
totalPlugins: plugins.length,
|
|
198
199
|
totalDownloads: plugins.reduce((sum, p) => sum + p.downloads, 0),
|
|
199
200
|
totalAuthors: 1,
|
|
200
|
-
featured: ['@claude-flow/plugin-agent-federation', '@claude-flow/plugin-agentic-qe', '@claude-flow/plugin-prime-radiant', '@claude-flow/security', '@claude-flow/claims', '@claude-flow/teammate-plugin'],
|
|
201
|
-
trending: ['@claude-flow/plugin-agent-federation', '@claude-flow/plugin-agentic-qe', '@claude-flow/plugin-prime-radiant'],
|
|
202
|
-
newest: ['@claude-flow/plugin-agent-federation', '@claude-flow/plugin-agentic-qe', '@claude-flow/plugin-prime-radiant'],
|
|
203
|
-
official: ['@claude-flow/plugin-agent-federation', '@claude-flow/plugin-agentic-qe', '@claude-flow/plugin-prime-radiant', '@claude-flow/security', '@claude-flow/claims'],
|
|
201
|
+
featured: ['@claude-flow/plugin-iot-cognitum', '@claude-flow/plugin-agent-federation', '@claude-flow/plugin-agentic-qe', '@claude-flow/plugin-prime-radiant', '@claude-flow/security', '@claude-flow/claims', '@claude-flow/teammate-plugin'],
|
|
202
|
+
trending: ['@claude-flow/plugin-iot-cognitum', '@claude-flow/plugin-agent-federation', '@claude-flow/plugin-agentic-qe', '@claude-flow/plugin-prime-radiant'],
|
|
203
|
+
newest: ['@claude-flow/plugin-iot-cognitum', '@claude-flow/plugin-agent-federation', '@claude-flow/plugin-agentic-qe', '@claude-flow/plugin-prime-radiant'],
|
|
204
|
+
official: ['@claude-flow/plugin-iot-cognitum', '@claude-flow/plugin-agent-federation', '@claude-flow/plugin-agentic-qe', '@claude-flow/plugin-prime-radiant', '@claude-flow/security', '@claude-flow/claims'],
|
|
204
205
|
compatibilityMatrix: [
|
|
205
206
|
{ pluginId: '@claude-flow/neural', pluginVersion: '3.0.0', claudeFlowVersions: ['3.x'], tested: true },
|
|
206
207
|
{ pluginId: '@claude-flow/security', pluginVersion: '3.0.0', claudeFlowVersions: ['3.x'], tested: true },
|
|
@@ -987,6 +988,46 @@ export class PluginDiscoveryService {
|
|
|
987
988
|
issues: [],
|
|
988
989
|
},
|
|
989
990
|
},
|
|
991
|
+
// IoT Cognitum - Cognitum Seed device-agent bridge
|
|
992
|
+
{
|
|
993
|
+
id: '@claude-flow/plugin-iot-cognitum',
|
|
994
|
+
name: '@claude-flow/plugin-iot-cognitum',
|
|
995
|
+
displayName: 'IoT Cognitum',
|
|
996
|
+
description: 'Cognitum Seed device-agent bridge — treat every Seed as a Ruflo agent with 5-tier trust scoring, Ed25519 witness chains, mesh networking, and fleet management.',
|
|
997
|
+
version: '1.0.0-alpha.1',
|
|
998
|
+
cid: 'bafybeiiotcognitumplugin2026',
|
|
999
|
+
size: 340000,
|
|
1000
|
+
checksum: 'sha256:iotcognitum2026xyz',
|
|
1001
|
+
author: officialAuthor,
|
|
1002
|
+
license: 'MIT',
|
|
1003
|
+
categories: ['integrations', 'agents'],
|
|
1004
|
+
tags: ['iot', 'cognitum', 'seed', 'device', 'fleet', 'mesh', 'trust', 'witness', 'edge'],
|
|
1005
|
+
keywords: ['iot', 'cognitum', 'device', 'fleet'],
|
|
1006
|
+
downloads: 0,
|
|
1007
|
+
rating: 0,
|
|
1008
|
+
ratingCount: 0,
|
|
1009
|
+
lastUpdated: baseTime,
|
|
1010
|
+
createdAt: '2026-04-29T00:00:00Z',
|
|
1011
|
+
minClaudeFlowVersion: '3.0.0',
|
|
1012
|
+
dependencies: [
|
|
1013
|
+
{ name: '@claude-flow/shared', version: '^3.0.0' },
|
|
1014
|
+
{ name: '@cognitum-one/sdk', version: '^0.2.1' },
|
|
1015
|
+
],
|
|
1016
|
+
type: 'integration',
|
|
1017
|
+
hooks: ['iot:device-registered', 'iot:trust-change', 'iot:device-offline', 'iot:device-online', 'iot:anomaly-detected', 'iot:mesh-partition', 'iot:firmware-mismatch', 'iot:witness-gap'],
|
|
1018
|
+
commands: ['iot init', 'iot register', 'iot status', 'iot list', 'iot remove', 'iot pair', 'iot unpair', 'iot query', 'iot ingest', 'iot mesh', 'iot witness', 'iot witness verify', 'iot fleet', 'iot fleet create', 'iot fleet list', 'iot fleet add', 'iot fleet remove', 'iot fleet delete', 'iot firmware deploy', 'iot firmware advance', 'iot firmware rollback', 'iot firmware status', 'iot firmware list', 'iot anomalies', 'iot baseline'],
|
|
1019
|
+
permissions: ['network', 'memory', 'hooks'],
|
|
1020
|
+
exports: ['IoTCognitumPlugin', 'IoTCoordinator', 'SeedClientFactory', 'HealthProbeWorker', 'TelemetryIngestWorker', 'AnomalyScanWorker', 'MeshSyncWorker', 'FirmwareWatchWorker', 'WitnessAuditWorker', 'AnomalyDetectionService', 'TelemetryIngestionService', 'FleetTopologyService', 'FirmwareOrchestrationService', 'WitnessVerificationService', 'SONAIntegrationService', 'AgentDBTelemetryRepository'],
|
|
1021
|
+
verified: true,
|
|
1022
|
+
trustLevel: 'official',
|
|
1023
|
+
securityAudit: {
|
|
1024
|
+
auditor: 'claude-flow-security-team',
|
|
1025
|
+
auditDate: '2026-04-29T00:00:00Z',
|
|
1026
|
+
auditVersion: '1.0.0-alpha.1',
|
|
1027
|
+
passed: true,
|
|
1028
|
+
issues: [],
|
|
1029
|
+
},
|
|
1030
|
+
},
|
|
990
1031
|
// Teammate Plugin - Claude Code v2.1.19+ integration
|
|
991
1032
|
{
|
|
992
1033
|
id: '@claude-flow/teammate-plugin',
|
|
@@ -1061,6 +1102,8 @@ export class PluginDiscoveryService {
|
|
|
1061
1102
|
'@claude-flow/plugin-gastown-bridge',
|
|
1062
1103
|
// Agent Federation
|
|
1063
1104
|
'@claude-flow/plugin-agent-federation',
|
|
1105
|
+
// IoT Cognitum
|
|
1106
|
+
'@claude-flow/plugin-iot-cognitum',
|
|
1064
1107
|
];
|
|
1065
1108
|
// Fetch stats in parallel
|
|
1066
1109
|
const statsPromises = realNpmPackages.map(pkg => fetchNpmStats(pkg));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claude-flow/cli",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Ruflo CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
"./hooks": "./dist/hooks/index.js",
|
|
14
14
|
"./mcp": "./dist/mcp/index.js",
|
|
15
15
|
"./security": "./dist/security/index.js",
|
|
16
|
-
"./resilience": "./dist/resilience/index.js"
|
|
16
|
+
"./resilience": "./dist/resilience/index.js",
|
|
17
|
+
"./src/plugin-interface.js": "./dist/plugin-interface.js"
|
|
17
18
|
},
|
|
18
19
|
"scripts": {
|
|
19
20
|
"test": "vitest run",
|
|
File without changes
|