claude-flow 3.7.0-alpha.71 → 3.7.0-alpha.73
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/README.md +9 -7
- package/package.json +1 -1
- package/v3/@claude-flow/cli/README.md +9 -7
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +24 -0
- package/v3/@claude-flow/cli/dist/src/init/settings-generator.js +7 -1
- package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +11 -2
- package/v3/@claude-flow/cli/dist/src/mcp-tools/ruvllm-tools.js +17 -1
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.d.ts +4 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +9 -3
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.d.ts +4 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +9 -3
- package/v3/@claude-flow/cli/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
[](https://
|
|
3
|
+
[](https://cognitum.one/agentic-engineering)
|
|
4
4
|
|
|
5
5
|
[](https://flo.ruv.io/)
|
|
6
6
|
[](https://goal.ruv.io/)
|
|
7
7
|
[](https://goal.ruv.io/agents)
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/ruflo)
|
|
10
|
-
[](https://www.npmjs.com/package/claude-flow)
|
|
10
|
+
[](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.proof.json)
|
|
11
|
+
[](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.ledger.json)
|
|
13
12
|
|
|
14
13
|
[](https://github.com/ruvnet/claude-flow)
|
|
15
14
|
[](https://opensource.org/licenses/MIT)
|
|
@@ -17,6 +16,8 @@
|
|
|
17
16
|
[](https://www.npmjs.com/package/@claude-flow/codex)
|
|
18
17
|
[](https://github.com/ruvnet/ruvector)
|
|
19
18
|
|
|
19
|
+
[](https://cognitum.one/appliance)
|
|
20
|
+
|
|
20
21
|
[](https://github.com/ruvnet/ruflo/issues/1967)
|
|
21
22
|
|
|
22
23
|
# Ruflo
|
|
@@ -71,14 +72,14 @@ There are **two different install paths** with very different surface areas. Pic
|
|
|
71
72
|
# Install core + any plugins you need
|
|
72
73
|
/plugin install ruflo-core@ruflo
|
|
73
74
|
/plugin install ruflo-swarm@ruflo
|
|
74
|
-
/plugin install ruflo-
|
|
75
|
-
/plugin install ruflo-
|
|
75
|
+
/plugin install ruflo-rag-memory@ruflo
|
|
76
|
+
/plugin install ruflo-neural-trader@ruflo
|
|
76
77
|
```
|
|
77
78
|
|
|
78
79
|
This adds slash commands and agent definitions only. The Ruflo MCP server is NOT registered, so `memory_store`, `swarm_init`, `agent_spawn`, etc. won't be callable from Claude. For the full loop, use Path B below.
|
|
79
80
|
|
|
80
81
|
<details>
|
|
81
|
-
<summary><strong>🔌 All
|
|
82
|
+
<summary><strong>🔌 All 33 plugins</strong></summary>
|
|
82
83
|
|
|
83
84
|
#### Core & Orchestration
|
|
84
85
|
|
|
@@ -106,6 +107,7 @@ This adds slash commands and agent definitions only. The Ruflo MCP server is NOT
|
|
|
106
107
|
| Plugin | What it does |
|
|
107
108
|
|--------|-------------|
|
|
108
109
|
| [**ruflo-intelligence**](plugins/ruflo-intelligence/README.md) | Agents learn from past successes and get smarter |
|
|
110
|
+
| [**ruflo-graph-intelligence**](plugins/ruflo-graph-intelligence/) | Sublinear graph reasoning — PageRank, delta updates, complexity-aware execution (ADR-123) |
|
|
109
111
|
| [**ruflo-daa**](plugins/ruflo-daa/README.md) | Dynamic agent behavior and cognitive patterns |
|
|
110
112
|
| [**ruflo-ruvllm**](plugins/ruflo-ruvllm/README.md) | Run local LLMs (Ollama, etc.) with smart routing |
|
|
111
113
|
| [**ruflo-goals**](plugins/ruflo-goals/README.md) | Break big goals into plans and track progress |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-flow",
|
|
3
|
-
"version": "3.7.0-alpha.
|
|
3
|
+
"version": "3.7.0-alpha.73",
|
|
4
4
|
"description": "Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
[](https://
|
|
3
|
+
[](https://cognitum.one/agentic-engineering)
|
|
4
4
|
|
|
5
5
|
[](https://flo.ruv.io/)
|
|
6
6
|
[](https://goal.ruv.io/)
|
|
7
7
|
[](https://goal.ruv.io/agents)
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/ruflo)
|
|
10
|
-
[](https://www.npmjs.com/package/claude-flow)
|
|
10
|
+
[](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.proof.json)
|
|
11
|
+
[](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.ledger.json)
|
|
13
12
|
|
|
14
13
|
[](https://github.com/ruvnet/claude-flow)
|
|
15
14
|
[](https://opensource.org/licenses/MIT)
|
|
@@ -17,6 +16,8 @@
|
|
|
17
16
|
[](https://www.npmjs.com/package/@claude-flow/codex)
|
|
18
17
|
[](https://github.com/ruvnet/ruvector)
|
|
19
18
|
|
|
19
|
+
[](https://cognitum.one/appliance)
|
|
20
|
+
|
|
20
21
|
[](https://github.com/ruvnet/ruflo/issues/1967)
|
|
21
22
|
|
|
22
23
|
# Ruflo
|
|
@@ -71,14 +72,14 @@ There are **two different install paths** with very different surface areas. Pic
|
|
|
71
72
|
# Install core + any plugins you need
|
|
72
73
|
/plugin install ruflo-core@ruflo
|
|
73
74
|
/plugin install ruflo-swarm@ruflo
|
|
74
|
-
/plugin install ruflo-
|
|
75
|
-
/plugin install ruflo-
|
|
75
|
+
/plugin install ruflo-rag-memory@ruflo
|
|
76
|
+
/plugin install ruflo-neural-trader@ruflo
|
|
76
77
|
```
|
|
77
78
|
|
|
78
79
|
This adds slash commands and agent definitions only. The Ruflo MCP server is NOT registered, so `memory_store`, `swarm_init`, `agent_spawn`, etc. won't be callable from Claude. For the full loop, use Path B below.
|
|
79
80
|
|
|
80
81
|
<details>
|
|
81
|
-
<summary><strong>🔌 All
|
|
82
|
+
<summary><strong>🔌 All 33 plugins</strong></summary>
|
|
82
83
|
|
|
83
84
|
#### Core & Orchestration
|
|
84
85
|
|
|
@@ -106,6 +107,7 @@ This adds slash commands and agent definitions only. The Ruflo MCP server is NOT
|
|
|
106
107
|
| Plugin | What it does |
|
|
107
108
|
|--------|-------------|
|
|
108
109
|
| [**ruflo-intelligence**](plugins/ruflo-intelligence/README.md) | Agents learn from past successes and get smarter |
|
|
110
|
+
| [**ruflo-graph-intelligence**](plugins/ruflo-graph-intelligence/) | Sublinear graph reasoning — PageRank, delta updates, complexity-aware execution (ADR-123) |
|
|
109
111
|
| [**ruflo-daa**](plugins/ruflo-daa/README.md) | Dynamic agent behavior and cognitive patterns |
|
|
110
112
|
| [**ruflo-ruvllm**](plugins/ruflo-ruvllm/README.md) | Run local LLMs (Ollama, etc.) with smart routing |
|
|
111
113
|
| [**ruflo-goals**](plugins/ruflo-goals/README.md) | Break big goals into plans and track progress |
|
|
@@ -162,6 +162,19 @@ const retrieveCommand = {
|
|
|
162
162
|
description: 'Memory namespace',
|
|
163
163
|
type: 'string',
|
|
164
164
|
default: 'default'
|
|
165
|
+
},
|
|
166
|
+
// #2073: --format is the GLOBAL option (parser.ts:78) with choices
|
|
167
|
+
// ['text', 'json', 'table'] and default 'text'. The retrieve handler
|
|
168
|
+
// discriminates: 'json' emits parseable JSON, anything else (text/box/...)
|
|
169
|
+
// emits the human-readable box. No per-command override needed; we just
|
|
170
|
+
// document the behavior in the help text via examples.
|
|
171
|
+
{
|
|
172
|
+
// #2073: --value-only emits ONLY the value string (no wrapper).
|
|
173
|
+
// Designed for piping into JSON.parse without any cleanup.
|
|
174
|
+
name: 'value-only',
|
|
175
|
+
description: 'Print only the stored value to stdout (no wrapper)',
|
|
176
|
+
type: 'boolean',
|
|
177
|
+
default: false
|
|
165
178
|
}
|
|
166
179
|
],
|
|
167
180
|
action: async (ctx) => {
|
|
@@ -184,6 +197,17 @@ const retrieveCommand = {
|
|
|
184
197
|
return { success: false, exitCode: 1, data: { key, found: false } };
|
|
185
198
|
}
|
|
186
199
|
const entry = result.entry;
|
|
200
|
+
// #2073: --value-only emits just the raw value (no decoration) for
|
|
201
|
+
// piping into JSON.parse / jq / other downstream parsers without
|
|
202
|
+
// any cleanup.
|
|
203
|
+
if (ctx.flags['value-only'] || ctx.flags.valueOnly) {
|
|
204
|
+
// Use process.stdout.write directly to bypass any printer-side
|
|
205
|
+
// transformation of quotes/structural characters.
|
|
206
|
+
process.stdout.write(entry.content);
|
|
207
|
+
if (process.stdout.isTTY)
|
|
208
|
+
process.stdout.write('\n');
|
|
209
|
+
return { success: true, data: entry };
|
|
210
|
+
}
|
|
187
211
|
if (ctx.flags.format === 'json') {
|
|
188
212
|
output.printJson(entry);
|
|
189
213
|
return { success: true, data: entry };
|
|
@@ -39,9 +39,15 @@ export function generateSettings(options) {
|
|
|
39
39
|
// line into the user's commits — that pattern silently inflated GitHub
|
|
40
40
|
// contributor graphs and was hard to undo without rewriting history. Pass
|
|
41
41
|
// `--attribution` (or `attribution: true` in InitOptions) to enable.
|
|
42
|
+
//
|
|
43
|
+
// #2078 — when the user DOES opt in, write a no-reply bot email so GitHub
|
|
44
|
+
// treats this as a tool, not a personal contribution. Personal emails get
|
|
45
|
+
// added to user repos' contributor graphs even when the trailer is opt-in.
|
|
46
|
+
// `ruflo-bot@users.noreply.github.com` is GitHub's no-reply convention and
|
|
47
|
+
// is excluded from contributor graphs / mapped to a tool identity.
|
|
42
48
|
if (options.attribution === true) {
|
|
43
49
|
settings.attribution = {
|
|
44
|
-
commit: 'Co-Authored-By:
|
|
50
|
+
commit: 'Co-Authored-By: ruflo-bot <ruflo-bot@users.noreply.github.com>',
|
|
45
51
|
pr: '🤖 Generated with [RuFlo](https://github.com/ruvnet/ruflo)',
|
|
46
52
|
};
|
|
47
53
|
}
|
|
@@ -1149,14 +1149,23 @@ export const memoryTools = [
|
|
|
1149
1149
|
if (!v.valid)
|
|
1150
1150
|
throw new Error(v.error);
|
|
1151
1151
|
}
|
|
1152
|
-
|
|
1152
|
+
// #2073: pass includeContent so the value field carries the actual
|
|
1153
|
+
// entry body. Without this, `value` is always null because listEntries
|
|
1154
|
+
// strips content by default (callers pay for the JSON parse only when
|
|
1155
|
+
// they need it).
|
|
1156
|
+
const all = await listEntries({ limit: 100000, namespace, includeContent: true });
|
|
1153
1157
|
const payload = {
|
|
1154
1158
|
schema: 'ruflo-memory-export/v1',
|
|
1155
1159
|
exportedAt: new Date().toISOString(),
|
|
1156
1160
|
namespace: namespace ?? null,
|
|
1157
1161
|
count: all.entries.length,
|
|
1158
1162
|
entries: all.entries.map(e => ({
|
|
1159
|
-
key: e.key,
|
|
1163
|
+
key: e.key,
|
|
1164
|
+
namespace: e.namespace,
|
|
1165
|
+
// #2073: `e.content` is the stored value string; `e.value` was a
|
|
1166
|
+
// never-populated alias. Fall back to null only if content is
|
|
1167
|
+
// missing for backward-compat with the schema.
|
|
1168
|
+
value: typeof e.content === 'string' ? e.content : (e.value ?? null),
|
|
1160
1169
|
createdAt: e.createdAt, updatedAt: e.updatedAt, accessCount: e.accessCount, hasEmbedding: e.hasEmbedding, size: e.size,
|
|
1161
1170
|
})),
|
|
1162
1171
|
};
|
|
@@ -5,7 +5,23 @@
|
|
|
5
5
|
* All tools gracefully degrade when the WASM package is not installed.
|
|
6
6
|
*/
|
|
7
7
|
import { validateIdentifier, validateText } from './validate-input.js';
|
|
8
|
+
// #2086 — every ruvllm_* MCP handler that touches the WASM runtime calls
|
|
9
|
+
// this. The downstream `createSonaInstant`/`createMicroLora`/`createHnswRouter`
|
|
10
|
+
// helpers all need `initSync({ module: wasmBytes })` to have run, otherwise
|
|
11
|
+
// the WASM exports throw. Doing it here makes the bootstrap invisible to
|
|
12
|
+
// MCP callers — they don't need a separate `ruvllm_init` tool. `_wasmReady`
|
|
13
|
+
// inside `initRuvllmWasm` short-circuits on the second+ call, so the cost
|
|
14
|
+
// after the first invocation is one boolean check.
|
|
15
|
+
//
|
|
16
|
+
// `ruvllm_status` deliberately uses `loadRuvllmWasmModule()` (no init) so a
|
|
17
|
+
// caller diagnosing why nothing works gets `initialized=false` instead of
|
|
18
|
+
// an error from a failed init.
|
|
8
19
|
async function loadRuvllmWasm() {
|
|
20
|
+
const mod = await loadRuvllmWasmModule();
|
|
21
|
+
await mod.initRuvllmWasm();
|
|
22
|
+
return mod;
|
|
23
|
+
}
|
|
24
|
+
async function loadRuvllmWasmModule() {
|
|
9
25
|
return import('../ruvector/ruvllm-wasm.js');
|
|
10
26
|
}
|
|
11
27
|
export const ruvllmWasmTools = [
|
|
@@ -15,7 +31,7 @@ export const ruvllmWasmTools = [
|
|
|
15
31
|
inputSchema: { type: 'object', properties: {} },
|
|
16
32
|
handler: async () => {
|
|
17
33
|
try {
|
|
18
|
-
const mod = await
|
|
34
|
+
const mod = await loadRuvllmWasmModule();
|
|
19
35
|
const wasmStatus = await mod.getRuvllmStatus();
|
|
20
36
|
// Also include native ruvllm CJS backend status (ADR-086)
|
|
21
37
|
let nativeBackend = { available: false };
|
|
@@ -76,6 +76,8 @@ export declare function bridgeListEntries(options: {
|
|
|
76
76
|
limit?: number;
|
|
77
77
|
offset?: number;
|
|
78
78
|
dbPath?: string;
|
|
79
|
+
/** #2073: When true, include the entry's full `content` string in each result. */
|
|
80
|
+
includeContent?: boolean;
|
|
79
81
|
}): Promise<{
|
|
80
82
|
success: boolean;
|
|
81
83
|
entries: {
|
|
@@ -87,6 +89,8 @@ export declare function bridgeListEntries(options: {
|
|
|
87
89
|
createdAt: string;
|
|
88
90
|
updatedAt: string;
|
|
89
91
|
hasEmbedding: boolean;
|
|
92
|
+
/** #2073: Present when `includeContent: true` was requested. */
|
|
93
|
+
content?: string;
|
|
90
94
|
}[];
|
|
91
95
|
total: number;
|
|
92
96
|
error?: string;
|
|
@@ -751,8 +751,10 @@ export async function bridgeListEntries(options) {
|
|
|
751
751
|
`);
|
|
752
752
|
const rows = stmt.all(...nsParams, limit, offset);
|
|
753
753
|
for (const row of rows) {
|
|
754
|
-
|
|
755
|
-
|
|
754
|
+
const entry = {
|
|
755
|
+
// #2073: don't truncate id when content is requested — callers
|
|
756
|
+
// (notably memory_export) need the full id to round-trip via import.
|
|
757
|
+
id: options.includeContent ? String(row.id) : String(row.id).substring(0, 20),
|
|
756
758
|
key: row.key || String(row.id).substring(0, 15),
|
|
757
759
|
namespace: row.namespace || 'default',
|
|
758
760
|
size: (row.content || '').length,
|
|
@@ -760,7 +762,11 @@ export async function bridgeListEntries(options) {
|
|
|
760
762
|
createdAt: row.created_at || new Date().toISOString(),
|
|
761
763
|
updatedAt: row.updated_at || new Date().toISOString(),
|
|
762
764
|
hasEmbedding: !!(row.embedding && String(row.embedding).length > 10),
|
|
763
|
-
}
|
|
765
|
+
};
|
|
766
|
+
if (options.includeContent) {
|
|
767
|
+
entry.content = row.content || '';
|
|
768
|
+
}
|
|
769
|
+
entries.push(entry);
|
|
764
770
|
}
|
|
765
771
|
}
|
|
766
772
|
catch {
|
|
@@ -344,6 +344,8 @@ export declare function listEntries(options: {
|
|
|
344
344
|
limit?: number;
|
|
345
345
|
offset?: number;
|
|
346
346
|
dbPath?: string;
|
|
347
|
+
/** #2073: When true, include the entry's full `content` string in each result. */
|
|
348
|
+
includeContent?: boolean;
|
|
347
349
|
}): Promise<{
|
|
348
350
|
success: boolean;
|
|
349
351
|
entries: {
|
|
@@ -355,6 +357,8 @@ export declare function listEntries(options: {
|
|
|
355
357
|
createdAt: string;
|
|
356
358
|
updatedAt: string;
|
|
357
359
|
hasEmbedding: boolean;
|
|
360
|
+
/** #2073: Present when `includeContent: true` was requested. */
|
|
361
|
+
content?: string;
|
|
358
362
|
}[];
|
|
359
363
|
total: number;
|
|
360
364
|
error?: string;
|
|
@@ -2116,8 +2116,10 @@ export async function listEntries(options) {
|
|
|
2116
2116
|
if (result[0]?.values) {
|
|
2117
2117
|
for (const row of result[0].values) {
|
|
2118
2118
|
const [id, key, ns, content, embedding, accessCount, createdAt, updatedAt] = row;
|
|
2119
|
-
|
|
2120
|
-
|
|
2119
|
+
const entry = {
|
|
2120
|
+
// #2073: don't truncate id when content is requested — callers
|
|
2121
|
+
// (notably memory_export) need the full id to round-trip via import.
|
|
2122
|
+
id: options.includeContent ? String(id) : String(id).substring(0, 20),
|
|
2121
2123
|
key: key || String(id).substring(0, 15),
|
|
2122
2124
|
namespace: ns || 'default',
|
|
2123
2125
|
size: (content || '').length,
|
|
@@ -2125,7 +2127,11 @@ export async function listEntries(options) {
|
|
|
2125
2127
|
createdAt: createdAt || new Date().toISOString(),
|
|
2126
2128
|
updatedAt: updatedAt || new Date().toISOString(),
|
|
2127
2129
|
hasEmbedding: !!embedding && embedding.length > 10
|
|
2128
|
-
}
|
|
2130
|
+
};
|
|
2131
|
+
if (options.includeContent) {
|
|
2132
|
+
entry.content = content || '';
|
|
2133
|
+
}
|
|
2134
|
+
entries.push(entry);
|
|
2129
2135
|
}
|
|
2130
2136
|
}
|
|
2131
2137
|
db.close();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claude-flow/cli",
|
|
3
|
-
"version": "3.7.0-alpha.
|
|
3
|
+
"version": "3.7.0-alpha.73",
|
|
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",
|