claude-flow 3.7.0-alpha.71 → 3.7.0-alpha.72

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 CHANGED
@@ -7,9 +7,8 @@
7
7
  [![Live Agents — goal.ruv.io/agents](https://img.shields.io/badge/_Live_Agents-goal.ruv.io%2Fagents-10b981?style=for-the-badge&logoColor=white&logo=react)](https://goal.ruv.io/agents)
8
8
 
9
9
  [![npm version (ruflo)](https://img.shields.io/npm/v/ruflo?label=ruflo&style=for-the-badge&logo=npm&color=cb3837)](https://www.npmjs.com/package/ruflo)
10
- [![npm downloads (ruflo)](https://img.shields.io/npm/dm/ruflo?label=ruflo%20downloads&style=for-the-badge&logo=npm&color=cb3837)](https://www.npmjs.com/package/ruflo)
11
- [![npm version (claude-flow)](https://img.shields.io/npm/v/claude-flow?label=claude-flow&style=for-the-badge&logo=npm&color=blue)](https://www.npmjs.com/package/claude-flow)
12
- [![npm downloads (claude-flow)](https://img.shields.io/npm/dm/claude-flow?label=claude-flow%20downloads&style=for-the-badge&logo=npm&color=blue)](https://www.npmjs.com/package/claude-flow)
10
+ [![Ecosystem downloads](https://img.shields.io/badge/ecosystem%20downloads-22.2M%2B-blue?style=for-the-badge&logo=npm)](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.proof.json)
11
+ [![Git clones (14d)](https://img.shields.io/badge/git%20clones%2014d-115k-blueviolet?style=for-the-badge&logo=github)](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.ledger.json)
13
12
 
14
13
  [![Star on GitHub](https://img.shields.io/github/stars/ruvnet/claude-flow?style=for-the-badge&logo=github&color=gold)](https://github.com/ruvnet/claude-flow)
15
14
  [![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://opensource.org/licenses/MIT)
@@ -71,14 +70,14 @@ There are **two different install paths** with very different surface areas. Pic
71
70
  # Install core + any plugins you need
72
71
  /plugin install ruflo-core@ruflo
73
72
  /plugin install ruflo-swarm@ruflo
74
- /plugin install ruflo-autopilot@ruflo
75
- /plugin install ruflo-federation@ruflo
73
+ /plugin install ruflo-rag-memory@ruflo
74
+ /plugin install ruflo-neural-trader@ruflo
76
75
  ```
77
76
 
78
77
  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
78
 
80
79
  <details>
81
- <summary><strong>🔌 All 32 plugins</strong></summary>
80
+ <summary><strong>🔌 All 33 plugins</strong></summary>
82
81
 
83
82
  #### Core & Orchestration
84
83
 
@@ -106,6 +105,7 @@ This adds slash commands and agent definitions only. The Ruflo MCP server is NOT
106
105
  | Plugin | What it does |
107
106
  |--------|-------------|
108
107
  | [**ruflo-intelligence**](plugins/ruflo-intelligence/README.md) | Agents learn from past successes and get smarter |
108
+ | [**ruflo-graph-intelligence**](plugins/ruflo-graph-intelligence/) | Sublinear graph reasoning — PageRank, delta updates, complexity-aware execution (ADR-123) |
109
109
  | [**ruflo-daa**](plugins/ruflo-daa/README.md) | Dynamic agent behavior and cognitive patterns |
110
110
  | [**ruflo-ruvllm**](plugins/ruflo-ruvllm/README.md) | Run local LLMs (Ollama, etc.) with smart routing |
111
111
  | [**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.71",
3
+ "version": "3.7.0-alpha.72",
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",
@@ -7,9 +7,8 @@
7
7
  [![Live Agents — goal.ruv.io/agents](https://img.shields.io/badge/_Live_Agents-goal.ruv.io%2Fagents-10b981?style=for-the-badge&logoColor=white&logo=react)](https://goal.ruv.io/agents)
8
8
 
9
9
  [![npm version (ruflo)](https://img.shields.io/npm/v/ruflo?label=ruflo&style=for-the-badge&logo=npm&color=cb3837)](https://www.npmjs.com/package/ruflo)
10
- [![npm downloads (ruflo)](https://img.shields.io/npm/dm/ruflo?label=ruflo%20downloads&style=for-the-badge&logo=npm&color=cb3837)](https://www.npmjs.com/package/ruflo)
11
- [![npm version (claude-flow)](https://img.shields.io/npm/v/claude-flow?label=claude-flow&style=for-the-badge&logo=npm&color=blue)](https://www.npmjs.com/package/claude-flow)
12
- [![npm downloads (claude-flow)](https://img.shields.io/npm/dm/claude-flow?label=claude-flow%20downloads&style=for-the-badge&logo=npm&color=blue)](https://www.npmjs.com/package/claude-flow)
10
+ [![Ecosystem downloads](https://img.shields.io/badge/ecosystem%20downloads-22.2M%2B-blue?style=for-the-badge&logo=npm)](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.proof.json)
11
+ [![Git clones (14d)](https://img.shields.io/badge/git%20clones%2014d-115k-blueviolet?style=for-the-badge&logo=github)](https://github.com/ruvnet/ruflo/blob/main/data/clone-data.ledger.json)
13
12
 
14
13
  [![Star on GitHub](https://img.shields.io/github/stars/ruvnet/claude-flow?style=for-the-badge&logo=github&color=gold)](https://github.com/ruvnet/claude-flow)
15
14
  [![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://opensource.org/licenses/MIT)
@@ -71,14 +70,14 @@ There are **two different install paths** with very different surface areas. Pic
71
70
  # Install core + any plugins you need
72
71
  /plugin install ruflo-core@ruflo
73
72
  /plugin install ruflo-swarm@ruflo
74
- /plugin install ruflo-autopilot@ruflo
75
- /plugin install ruflo-federation@ruflo
73
+ /plugin install ruflo-rag-memory@ruflo
74
+ /plugin install ruflo-neural-trader@ruflo
76
75
  ```
77
76
 
78
77
  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
78
 
80
79
  <details>
81
- <summary><strong>🔌 All 32 plugins</strong></summary>
80
+ <summary><strong>🔌 All 33 plugins</strong></summary>
82
81
 
83
82
  #### Core & Orchestration
84
83
 
@@ -106,6 +105,7 @@ This adds slash commands and agent definitions only. The Ruflo MCP server is NOT
106
105
  | Plugin | What it does |
107
106
  |--------|-------------|
108
107
  | [**ruflo-intelligence**](plugins/ruflo-intelligence/README.md) | Agents learn from past successes and get smarter |
108
+ | [**ruflo-graph-intelligence**](plugins/ruflo-graph-intelligence/) | Sublinear graph reasoning — PageRank, delta updates, complexity-aware execution (ADR-123) |
109
109
  | [**ruflo-daa**](plugins/ruflo-daa/README.md) | Dynamic agent behavior and cognitive patterns |
110
110
  | [**ruflo-ruvllm**](plugins/ruflo-ruvllm/README.md) | Run local LLMs (Ollama, etc.) with smart routing |
111
111
  | [**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 };
@@ -1149,14 +1149,23 @@ export const memoryTools = [
1149
1149
  if (!v.valid)
1150
1150
  throw new Error(v.error);
1151
1151
  }
1152
- const all = await listEntries({ limit: 100000, namespace });
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, namespace: e.namespace, value: e.value ?? null,
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
  };
@@ -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
- entries.push({
755
- id: String(row.id).substring(0, 20),
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
- entries.push({
2120
- id: String(id).substring(0, 20),
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.71",
3
+ "version": "3.7.0-alpha.72",
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",