claude-flow 3.59.17 → 3.60.1

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 (52) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/README.md +2 -1
  3. package/node_modules/@claude-flow/mcp/dist/session-manager.d.ts.map +1 -1
  4. package/node_modules/@claude-flow/mcp/dist/session-manager.js +4 -1
  5. package/node_modules/@claude-flow/mcp/dist/session-manager.js.map +1 -1
  6. package/node_modules/@claude-flow/mcp/package.json +1 -1
  7. package/package.json +3 -2
  8. package/v3/@claude-flow/cli/README.md +2 -1
  9. package/v3/@claude-flow/cli/catalog-manifest.json +4 -4
  10. package/v3/@claude-flow/cli/dist/src/commands/agntcy/publish.js +1 -1
  11. package/v3/@claude-flow/cli/dist/src/commands/agntcy/runtime.d.ts +4 -1
  12. package/v3/@claude-flow/cli/dist/src/commands/agntcy/runtime.js +15 -2
  13. package/v3/@claude-flow/cli/dist/src/commands/agntcy/swarm-join.js +1 -1
  14. package/v3/@claude-flow/cli/dist/src/commands/agntcy/transport.js +1 -1
  15. package/v3/@claude-flow/cli/dist/src/commands/cleanup.js +1 -1
  16. package/v3/@claude-flow/cli/dist/src/commands/update.js +5 -3
  17. package/v3/@claude-flow/cli/dist/src/mcp-client.js +4 -0
  18. package/v3/@claude-flow/cli/dist/src/mcp-tools/agentbbs-tools.js +7 -0
  19. package/v3/@claude-flow/cli/dist/src/mcp-tools/capability-brain.js +17 -0
  20. package/v3/@claude-flow/cli/dist/src/mcp-tools/daa-tools.js +20 -12
  21. package/v3/@claude-flow/cli/dist/src/mcp-tools/github-tools.js +78 -75
  22. package/v3/@claude-flow/cli/dist/src/mcp-tools/neural-tools.js +11 -17
  23. package/v3/@claude-flow/cli/dist/src/mcp-tools/rure-tools.d.ts +11 -0
  24. package/v3/@claude-flow/cli/dist/src/mcp-tools/rure-tools.js +359 -0
  25. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.d.ts +17 -0
  26. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +18 -9
  27. package/v3/@claude-flow/cli/dist/src/mods/claude-installs.d.ts +12 -0
  28. package/v3/@claude-flow/cli/dist/src/mods/claude-installs.js +21 -1
  29. package/v3/@claude-flow/cli/dist/src/rure/aidefence-gate.d.ts +25 -0
  30. package/v3/@claude-flow/cli/dist/src/rure/aidefence-gate.js +63 -0
  31. package/v3/@claude-flow/cli/dist/src/rure/analyze-js-app.d.ts +17 -0
  32. package/v3/@claude-flow/cli/dist/src/rure/analyze-js-app.js +26 -0
  33. package/v3/@claude-flow/cli/dist/src/rure/binary-parse.d.ts +38 -0
  34. package/v3/@claude-flow/cli/dist/src/rure/binary-parse.js +347 -0
  35. package/v3/@claude-flow/cli/dist/src/rure/dotnet-parse.d.ts +30 -0
  36. package/v3/@claude-flow/cli/dist/src/rure/dotnet-parse.js +299 -0
  37. package/v3/@claude-flow/cli/dist/src/rure/evm-parse.d.ts +52 -0
  38. package/v3/@claude-flow/cli/dist/src/rure/evm-parse.js +233 -0
  39. package/v3/@claude-flow/cli/dist/src/rure/extract-asar.d.ts +33 -0
  40. package/v3/@claude-flow/cli/dist/src/rure/extract-asar.js +70 -0
  41. package/v3/@claude-flow/cli/dist/src/rure/find-feature.d.ts +26 -0
  42. package/v3/@claude-flow/cli/dist/src/rure/find-feature.js +69 -0
  43. package/v3/@claude-flow/cli/dist/src/rure/ts-walk.d.ts +47 -0
  44. package/v3/@claude-flow/cli/dist/src/rure/ts-walk.js +158 -0
  45. package/v3/@claude-flow/cli/dist/src/rure/walk-files.d.ts +21 -0
  46. package/v3/@claude-flow/cli/dist/src/rure/walk-files.js +71 -0
  47. package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +17 -3
  48. package/v3/@claude-flow/cli/dist/src/update/checker.d.ts +1 -0
  49. package/v3/@claude-flow/cli/dist/src/update/checker.js +4 -2
  50. package/v3/@claude-flow/cli/package.json +4 -3
  51. package/.claude/.proven-config-version +0 -1
  52. package/.claude/proven-config.json +0 -42
@@ -57,10 +57,10 @@
57
57
  "source": "git-subdir",
58
58
  "url": "https://github.com/proffesor-for-testing/agentic-qe.git",
59
59
  "path": "plugins/agentic-qe-fleet",
60
- "ref": "v3.15.11",
61
- "sha": "221d6de15c73bb385961e4e649d8fcc1f5dc2dea"
60
+ "ref": "v3.15.12",
61
+ "sha": "90a91fe3cc7dc1b9ee9a6ce4e888f3406e8f794a"
62
62
  },
63
- "description": "Agentic QE (external: maintained in proffesor-for-testing/agentic-qe, pinned to v3.15.11): a quality-engineering fleet with 11 QE agents, 9 skills, 9 commands, the agentic-qe MCP server pinned to the plugin version, and the aqe-mod guard that refuses destructive operations on AQE learning data"
63
+ "description": "Agentic QE (external: maintained in proffesor-for-testing/agentic-qe, pinned to v3.15.12): a quality-engineering fleet with 11 QE agents, 9 skills, 9 commands, the agentic-qe MCP server pinned to the plugin version, and the aqe-mod guard that refuses destructive operations on AQE learning data"
64
64
  },
65
65
  {
66
66
  "name": "ruflo-docs",
package/README.md CHANGED
@@ -8,6 +8,7 @@
8
8
  [![npm version (ruflo)](https://img.shields.io/npm/v/ruflo?label=npx%20ruflo&style=for-the-badge&logo=npm&color=cb3837)](https://www.npmjs.com/package/ruflo)
9
9
  [![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://opensource.org/licenses/MIT)
10
10
  [![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)
11
+ [![Follow @rUv on X](https://img.shields.io/badge/Follow-@rUv-000000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/rUv)
11
12
 
12
13
  <p align="center">
13
14
  <a href="docs/harness-origins.md"><img src="https://raw.githubusercontent.com/ruvnet/ruflo/e69e4b95aa08d65ea0f7715489bbf8e62a83a0d2/docs/assets/readme/badges/first-commit.svg" width="300" height="76" alt="Claude Flow lineage: first commit June 2, 2025 by rUv; inspect the evidence"></a>
@@ -242,7 +243,7 @@ This adds slash commands and agent definitions. `ruflo-core` (installed above) d
242
243
  | [**ruflo-browser**](plugins/ruflo-browser/README.md) | Automate browser testing with Playwright |
243
244
  | [**ruflo-jujutsu**](plugins/ruflo-jujutsu/README.md) | Analyze git diffs, score risk, suggest reviewers |
244
245
  | [**ruflo-docs**](plugins/ruflo-docs/README.md) | Generate and maintain documentation automatically |
245
- | [**agentic-qe-fleet**](https://github.com/proffesor-for-testing/agentic-qe/tree/v3.15.11/plugins/agentic-qe-fleet) | External, maintained by [Agentic QE](https://github.com/proffesor-for-testing/agentic-qe): 11 QE agents, test generation, coverage, chaos and TDD skills, the `agentic-qe` MCP server, and a guard for AQE learning data (`/plugin install agentic-qe-fleet@ruflo`). Install it from one marketplace only, `agentic-qe` or `ruflo`: enabled from both, its mod and commands load twice |
246
+ | [**agentic-qe-fleet**](https://github.com/proffesor-for-testing/agentic-qe/tree/v3.15.12/plugins/agentic-qe-fleet) | External, maintained by [Agentic QE](https://github.com/proffesor-for-testing/agentic-qe): 11 QE agents, test generation, coverage, chaos and TDD skills, the `agentic-qe` MCP server, and a guard for AQE learning data (`/plugin install agentic-qe-fleet@ruflo`). Install it from one marketplace only, `agentic-qe` or `ruflo`: enabled from both, its mod and commands load twice |
246
247
 
247
248
  #### Security & Compliance
248
249
 
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AASD,qBAAa,cAAe,SAAQ,YAAY;IAW5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAK;IAE3B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAK;gBAGN,MAAM,EAAE,OAAO,EAChC,MAAM,GAAE,aAAkB;IAO5B,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,UAAU;IA2BnD,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,mBAAmB,GAC1B,UAAU,GAAG,SAAS;IAwBzB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAe/C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIrD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,iBAAiB,IAAI,UAAU,EAAE;IAMjC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAU1C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAoBzD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAepE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAKpD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAgBzD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIzC,iBAAiB,IAAI,cAAc;IAiBnC,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACtC,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3C,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,IAAI,CAAC;QACrB,aAAa,CAAC,EAAE,IAAI,CAAC;KACtB;IA4CD,sBAAsB,IAAI,MAAM;IA6BhC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAIzB,QAAQ,IAAI,IAAI;IAOhB,OAAO,IAAI,IAAI;CAMhB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,aAAa,GACrB,cAAc,CAEhB"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AASD,qBAAa,cAAe,SAAQ,YAAY;IAW5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAK;IAE3B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAK;gBAGN,MAAM,EAAE,OAAO,EAChC,MAAM,GAAE,aAAkB;IAO5B,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,UAAU;IA2BnD,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,mBAAmB,GAC1B,UAAU,GAAG,SAAS;IAwBzB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAe/C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIrD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,iBAAiB,IAAI,UAAU,EAAE;IAMjC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAU1C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAoBzD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAepE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAKpD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAgBzD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIzC,iBAAiB,IAAI,cAAc;IAiBnC,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACtC,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3C,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,IAAI,CAAC;QACrB,aAAa,CAAC,EAAE,IAAI,CAAC;KACtB;IA4CD,sBAAsB,IAAI,MAAM;IA6BhC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAMzB,QAAQ,IAAI,IAAI;IAOhB,OAAO,IAAI,IAAI;CAMhB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,aAAa,GACrB,cAAc,CAEhB"}
@@ -4,6 +4,7 @@
4
4
  * MCP session lifecycle management
5
5
  */
6
6
  import { EventEmitter } from 'events';
7
+ import { randomUUID } from 'crypto';
7
8
  const DEFAULT_SESSION_CONFIG = {
8
9
  maxSessions: 100,
9
10
  sessionTimeout: 30 * 60 * 1000,
@@ -231,7 +232,9 @@ export class SessionManager extends EventEmitter {
231
232
  }
232
233
  }
233
234
  generateSessionId() {
234
- return `session-${++this.sessionCounter}-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
235
+ // Counter + timestamp + Math.random() was predictable (6 base36 chars),
236
+ // so use a UUID for the unguessable part.
237
+ return `session-${++this.sessionCounter}-${randomUUID()}`;
235
238
  }
236
239
  clearAll() {
237
240
  for (const id of this.sessions.keys()) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-flow/mcp",
3
- "version": "3.1.1",
3
+ "version": "3.1.2",
4
4
  "type": "module",
5
5
  "description": "Standalone MCP (Model Context Protocol) server - stdio/http/websocket transports, connection pooling, tool registry",
6
6
  "main": "dist/index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-flow",
3
- "version": "3.59.17",
3
+ "version": "3.60.1",
4
4
  "workspaces": [
5
5
  "v3/@claude-flow/codex",
6
6
  "v3/@claude-flow/mcp",
@@ -71,11 +71,12 @@
71
71
  "dependencies": {
72
72
  "@claude-flow/cli-core": "3.7.5",
73
73
  "@claude-flow/codex": "3.0.5",
74
- "@claude-flow/mcp": "3.1.1",
74
+ "@claude-flow/mcp": "3.1.2",
75
75
  "@claude-flow/neural": "3.0.0",
76
76
  "@claude-flow/plugin-agent-federation": "1.0.1",
77
77
  "@claude-flow/security": "3.0.5",
78
78
  "@claude-flow/shared": "3.0.5",
79
+ "@electron/asar": "^4.3.1",
79
80
  "@iarna/toml": "^2.2.5",
80
81
  "@noble/ed25519": "2.3.0",
81
82
  "@ruvector/rabitq-wasm": "0.1.0",
@@ -8,6 +8,7 @@
8
8
  [![npm version (ruflo)](https://img.shields.io/npm/v/ruflo?label=npx%20ruflo&style=for-the-badge&logo=npm&color=cb3837)](https://www.npmjs.com/package/ruflo)
9
9
  [![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://opensource.org/licenses/MIT)
10
10
  [![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)
11
+ [![Follow @rUv on X](https://img.shields.io/badge/Follow-@rUv-000000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/rUv)
11
12
 
12
13
  <p align="center">
13
14
  <a href="docs/harness-origins.md"><img src="https://raw.githubusercontent.com/ruvnet/ruflo/e69e4b95aa08d65ea0f7715489bbf8e62a83a0d2/docs/assets/readme/badges/first-commit.svg" width="300" height="76" alt="Claude Flow lineage: first commit June 2, 2025 by rUv; inspect the evidence"></a>
@@ -242,7 +243,7 @@ This adds slash commands and agent definitions. `ruflo-core` (installed above) d
242
243
  | [**ruflo-browser**](plugins/ruflo-browser/README.md) | Automate browser testing with Playwright |
243
244
  | [**ruflo-jujutsu**](plugins/ruflo-jujutsu/README.md) | Analyze git diffs, score risk, suggest reviewers |
244
245
  | [**ruflo-docs**](plugins/ruflo-docs/README.md) | Generate and maintain documentation automatically |
245
- | [**agentic-qe-fleet**](https://github.com/proffesor-for-testing/agentic-qe/tree/v3.15.11/plugins/agentic-qe-fleet) | External, maintained by [Agentic QE](https://github.com/proffesor-for-testing/agentic-qe): 11 QE agents, test generation, coverage, chaos and TDD skills, the `agentic-qe` MCP server, and a guard for AQE learning data (`/plugin install agentic-qe-fleet@ruflo`). Install it from one marketplace only, `agentic-qe` or `ruflo`: enabled from both, its mod and commands load twice |
246
+ | [**agentic-qe-fleet**](https://github.com/proffesor-for-testing/agentic-qe/tree/v3.15.12/plugins/agentic-qe-fleet) | External, maintained by [Agentic QE](https://github.com/proffesor-for-testing/agentic-qe): 11 QE agents, test generation, coverage, chaos and TDD skills, the `agentic-qe` MCP server, and a guard for AQE learning data (`/plugin install agentic-qe-fleet@ruflo`). Install it from one marketplace only, `agentic-qe` or `ruflo`: enabled from both, its mod and commands load twice |
246
247
 
247
248
  #### Security & Compliance
248
249
 
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "generation": 7,
4
- "generatedAt": "2026-10-22T13:20:46.587Z",
5
- "gitSha": "8b200962",
4
+ "generatedAt": "2026-10-23T18:53:29.930Z",
5
+ "gitSha": "af6c74b3",
6
6
  "catalog": {
7
- "agents": 176,
8
- "tools": 432,
7
+ "agents": 177,
8
+ "tools": 438,
9
9
  "skills": 34
10
10
  },
11
11
  "benchmark": null
@@ -87,7 +87,7 @@ const publishCommand = {
87
87
  }
88
88
  // Step 2 (stub, requires the not-yet-published runtime): the actual
89
89
  // Directory publish call.
90
- const status = await detectAgntcyRuntime();
90
+ const status = await detectAgntcyRuntime(process.env, AGNTCY_PACKAGE_NAME, ['publishAgentRecord']);
91
91
  if (!status.configured) {
92
92
  output.printInfo(AGNTCY_NOT_CONFIGURED_MESSAGE);
93
93
  output.printInfo(`Validated OASF record at "${manifestPath}" locally (name=${parsed.name}, ` +
@@ -107,6 +107,9 @@ export interface AgntcyRuntimeStatus {
107
107
  * @param packageName Injectable for tests (to simulate "package not
108
108
  * installed" without needing to actually uninstall the real optional
109
109
  * dependency); defaults to {@link AGNTCY_PACKAGE_NAME}.
110
+ * @param requiredExports Function names the caller will use. A resolved module
111
+ * missing any of them is reported as not configured, with the missing names
112
+ * in `reason`, instead of failing later at the call site.
110
113
  */
111
- export declare function detectAgntcyRuntime(env?: NodeJS.ProcessEnv, packageName?: string): Promise<AgntcyRuntimeStatus>;
114
+ export declare function detectAgntcyRuntime(env?: NodeJS.ProcessEnv, packageName?: string, requiredExports?: readonly string[]): Promise<AgntcyRuntimeStatus>;
112
115
  //# sourceMappingURL=runtime.d.ts.map
@@ -100,8 +100,11 @@ export const AGNTCY_NOT_CONFIGURED_MESSAGE = `AGNTCY/SLIM transport is not confi
100
100
  * @param packageName Injectable for tests (to simulate "package not
101
101
  * installed" without needing to actually uninstall the real optional
102
102
  * dependency); defaults to {@link AGNTCY_PACKAGE_NAME}.
103
+ * @param requiredExports Function names the caller will use. A resolved module
104
+ * missing any of them is reported as not configured, with the missing names
105
+ * in `reason`, instead of failing later at the call site.
103
106
  */
104
- export async function detectAgntcyRuntime(env = process.env, packageName = AGNTCY_PACKAGE_NAME) {
107
+ export async function detectAgntcyRuntime(env = process.env, packageName = AGNTCY_PACKAGE_NAME, requiredExports = []) {
105
108
  const endpoint = env[AGNTCY_ENDPOINT_ENV];
106
109
  if (!endpoint) {
107
110
  return { configured: false, reason: `${AGNTCY_ENDPOINT_ENV} is not set` };
@@ -112,7 +115,17 @@ export async function detectAgntcyRuntime(env = process.env, packageName = AGNTC
112
115
  // `await import('pg')`). Never a static `import` — a static import
113
116
  // would make @claude-flow/cli fail to build/run when the package is
114
117
  // absent, which is the one thing ADR-150/ADR-380 forbid.
115
- await import(packageName);
118
+ const mod = await import(packageName);
119
+ if (requiredExports.length > 0) {
120
+ const missing = requiredExports.filter((name) => typeof mod[name] !== 'function');
121
+ if (missing.length > 0) {
122
+ return {
123
+ configured: false,
124
+ reason: `${packageName} resolved but does not export ${missing.join(', ')}; the installed SDK API is not the one this command implements`,
125
+ endpoint,
126
+ };
127
+ }
128
+ }
116
129
  return { configured: true, reason: `${packageName} resolved`, endpoint };
117
130
  }
118
131
  catch (error) {
@@ -54,7 +54,7 @@ const joinCommand = {
54
54
  output.printError(`Invalid namespace "${namespace}": ${nsCheck.error}`);
55
55
  return { success: false, exitCode: 1 };
56
56
  }
57
- const status = await detectAgntcyRuntime();
57
+ const status = await detectAgntcyRuntime(process.env, AGNTCY_PACKAGE_NAME, ['joinGroup']);
58
58
  if (!status.configured) {
59
59
  output.printInfo(AGNTCY_NOT_CONFIGURED_MESSAGE);
60
60
  output.printInfo(`Namespace "${namespace}" was not joined via SLIM. Local swarm/hive-mind coordination ` +
@@ -37,7 +37,7 @@ const useCommand = {
37
37
  output.printInfo('Local transport remains the default and needs no explicit "use".');
38
38
  return { success: false, exitCode: 1 };
39
39
  }
40
- const status = await detectAgntcyRuntime();
40
+ const status = await detectAgntcyRuntime(process.env, AGNTCY_PACKAGE_NAME, ['createSlimTransport']);
41
41
  if (!status.configured) {
42
42
  output.printInfo(AGNTCY_NOT_CONFIGURED_MESSAGE);
43
43
  output.printInfo('Active transport remains: local (in-process hooks routing).');
@@ -117,7 +117,7 @@ export const cleanupCommand = {
117
117
  ],
118
118
  action: async (ctx) => {
119
119
  const force = ctx.flags.force === true;
120
- const keepConfig = ctx.flags['keep-config'] === true;
120
+ const keepConfig = ctx.flags.keepConfig === true || ctx.flags['keep-config'] === true;
121
121
  const cwd = ctx.cwd;
122
122
  const dryRun = !force;
123
123
  output.writeln();
@@ -110,6 +110,8 @@ const allCommand = {
110
110
  ],
111
111
  async action(ctx) {
112
112
  const { flags } = ctx;
113
+ // The parser stores `--dry-run` as `dryRun`.
114
+ const dryRun = flags.dryRun === true || flags['dry-run'] === true;
113
115
  process.env.CLAUDE_FLOW_FORCE_UPDATE = 'true';
114
116
  try {
115
117
  output.printInfo('Checking for updates...');
@@ -135,14 +137,14 @@ const allCommand = {
135
137
  }
136
138
  }
137
139
  output.printInfo(`Updating ${results.length} package(s)...`);
138
- const updateResults = await executeMultipleUpdates(results, installedPackages, flags['dry-run']);
140
+ const updateResults = await executeMultipleUpdates(results, installedPackages, dryRun);
139
141
  const successful = updateResults.filter((r) => r.success);
140
142
  const failed = updateResults.filter((r) => !r.success);
141
143
  output.writeln();
142
- output.writeln(output.highlight(flags['dry-run'] ? '═══ Dry Run - Would Update ═══' : '═══ Update Results ═══'));
144
+ output.writeln(output.highlight(dryRun ? '═══ Dry Run - Would Update ═══' : '═══ Update Results ═══'));
143
145
  output.writeln();
144
146
  if (successful.length > 0) {
145
- output.printSuccess(`${successful.length} package(s) ${flags['dry-run'] ? 'would be ' : ''}updated:`);
147
+ output.printSuccess(`${successful.length} package(s) ${dryRun ? 'would be ' : ''}updated:`);
146
148
  for (const r of successful) {
147
149
  output.writeln(` ${output.success('✓')} ${r.package}@${r.version}`);
148
150
  }
@@ -33,6 +33,9 @@ import { performanceTools } from './mcp-tools/performance-tools.js';
33
33
  import { githubTools } from './mcp-tools/github-tools.js';
34
34
  import { daaTools } from './mcp-tools/daa-tools.js';
35
35
  import { coordinationTools } from './mcp-tools/coordination-tools.js';
36
+ // ruRE Phase 1 (plugins/ruflo-rure ADR-0001/0002) — JS/Electron static
37
+ // analysis. Always registered: pure-TS, no native engine dependency.
38
+ import { rureTools } from './mcp-tools/rure-tools.js';
36
39
  import { browserTools } from './mcp-tools/browser-tools.js';
37
40
  import { browserSessionTools } from './mcp-tools/browser-session-tools.js';
38
41
  // ADR-175 — page-agent natural-language intent layer (browser_act). Always
@@ -150,6 +153,7 @@ registerTools([
150
153
  ...githubTools,
151
154
  ...daaTools,
152
155
  ...coordinationTools,
156
+ ...rureTools,
153
157
  ...getBrowserTools(),
154
158
  ...getBrowserSessionTools(),
155
159
  ...getBrowserIntentTools(),
@@ -98,6 +98,13 @@ function validateRoomId(roomId) {
98
98
  if (!/^[A-Za-z0-9_.\-:/@#]+$/.test(roomId)) {
99
99
  throw new Error('roomId may only contain [A-Za-z0-9_.\\-:/@#]');
100
100
  }
101
+ // `.` and `/` are allowed chars, so reject `..` explicitly. The roomId is
102
+ // joined into a file path in roomLogPath; without this check a value like
103
+ // ../../../../tmp/x escapes the .agentbbs directory. Matches the validator
104
+ // in agentbbs-federation.ts.
105
+ if (roomId.includes('..')) {
106
+ throw new Error('roomId must not contain ..');
107
+ }
101
108
  return roomId;
102
109
  }
103
110
  function ensureDir(dir) {
@@ -411,6 +411,22 @@ export const CAPABILITY_DOMAINS = [
411
411
  useWhen: 'Interacting with web surfaces or testing endpoints under explicit network policy.',
412
412
  verifyBeforeUse: ['Check network target policy, authentication, side effects, and runtime provider health.'],
413
413
  },
414
+ {
415
+ id: 'reverse-engineering',
416
+ name: 'Reverse Engineering (ruRE)',
417
+ prefixes: ['rure_'],
418
+ description: 'Static JS/Electron analysis: evidence-sourced module/import/export graphs and Electron process-boundary detection. Parses only, never executes analyzed code; Phase 1 of ADR-0001 — native binary, .NET, EVM and dynamic-instrumentation analysis are future phases.',
419
+ taskSignals: ['reverse engineer', 'how does this feature work', 'electron app', 'asar', 'decompile', 'static analysis'],
420
+ commands: [],
421
+ skills: ['analyze-app'],
422
+ agents: ['reverse-engineer'],
423
+ maturity: 'experimental',
424
+ authority: 'capability-plane',
425
+ risk: 'reversible',
426
+ riskFlags: ['read', 'local-write', 'credential-pii'],
427
+ useWhen: 'Understanding or reimplementing a feature from a local app you are authorized to study; refuses DRM/license-circumvention requests.',
428
+ verifyBeforeUse: ['Confirm authorization context (own app, licensed target, or research/CTF). Never trust redacted-content markers as absent data — report them as withheld.'],
429
+ },
414
430
  {
415
431
  id: 'github-delivery',
416
432
  name: 'GitHub & Delivery',
@@ -554,6 +570,7 @@ const TOOL_OWNERSHIP = [
554
570
  { prefixes: ['guidance_'], packageOwner: '@claude-flow/guidance', pluginOwner: 'ruflo-core' },
555
571
  { prefixes: ['seraphina_'], packageOwner: '@claude-flow/cli', pluginOwner: 'ruflo-core' },
556
572
  { prefixes: ['x_federation_'], packageOwner: '@claude-flow/cli', pluginOwner: 'ruflo-x-gateway' },
573
+ { prefixes: ['rure_'], packageOwner: '@claude-flow/cli', pluginOwner: 'ruflo-rure' },
557
574
  { prefixes: ['team_'], packageOwner: '@claude-flow/cli' },
558
575
  ];
559
576
  function ownershipForTool(toolName, definition) {
@@ -151,26 +151,34 @@ export const daaTools = [
151
151
  if (!agent) {
152
152
  return { success: false, error: 'Agent not found' };
153
153
  }
154
- const performanceScore = input.performanceScore || 0.8;
154
+ // #4426: `|| 0.8` turned a failing 0 (and a missing score) into a 0.8
155
+ // success. A given score must be in [0, 1]; a missing one records none.
156
+ const performanceScore = input.performanceScore === undefined ? null : input.performanceScore;
157
+ if (performanceScore !== null && (typeof performanceScore !== 'number' || !Number.isFinite(performanceScore) || performanceScore < 0 || performanceScore > 1)) {
158
+ return { success: false, error: 'performanceScore must be a number between 0 and 1' };
159
+ }
155
160
  // Update agent metrics
156
161
  agent.metrics.adaptations++;
157
- agent.metrics.successRate = (agent.metrics.successRate + performanceScore) / 2;
162
+ if (performanceScore !== null)
163
+ agent.metrics.successRate = (agent.metrics.successRate + performanceScore) / 2;
158
164
  agent.lastActivity = new Date().toISOString();
159
165
  agent.status = 'active';
160
166
  saveDAAStore(store);
161
167
  // Store adaptation feedback in AgentDB for pattern learning (backward compat: JSON store above)
162
168
  let _storedIn = 'json-store';
163
- try {
164
- const bridge = await import('../memory/memory-bridge.js');
165
- await bridge.bridgeRecordFeedback({
166
- taskId: `adapt-${agentId}-${agent.metrics.adaptations}`,
167
- success: performanceScore >= 0.5,
168
- quality: performanceScore,
169
- agent: agentId,
170
- });
171
- _storedIn = 'agentdb';
169
+ if (performanceScore !== null) {
170
+ try {
171
+ const bridge = await import('../memory/memory-bridge.js');
172
+ await bridge.bridgeRecordFeedback({
173
+ taskId: `adapt-${agentId}-${agent.metrics.adaptations}`,
174
+ success: performanceScore >= 0.5,
175
+ quality: performanceScore,
176
+ agent: agentId,
177
+ });
178
+ _storedIn = 'agentdb';
179
+ }
180
+ catch { /* AgentDB not available */ }
172
181
  }
173
- catch { /* AgentDB not available */ }
174
182
  return {
175
183
  success: true,
176
184
  agentId,
@@ -70,17 +70,25 @@ function run(cmd, cwd) {
70
70
  * strings stay literal.
71
71
  */
72
72
  function runArgv(file, args, cwd) {
73
+ const r = runArgvResult(file, args, cwd);
74
+ return 'out' in r ? r.out : null;
75
+ }
76
+ /** runArgv that keeps the failure text (stderr, else the error message) for reporting. */
77
+ function runArgvResult(file, args, cwd) {
73
78
  try {
74
- return execFileSync(file, args, {
75
- encoding: 'utf-8',
76
- timeout: 15000,
77
- cwd: cwd || getProjectCwd(),
78
- stdio: ['pipe', 'pipe', 'pipe'],
79
- shell: false,
80
- }).trim();
79
+ return {
80
+ out: execFileSync(file, args, {
81
+ encoding: 'utf-8',
82
+ timeout: 15000,
83
+ cwd: cwd || getProjectCwd(),
84
+ stdio: ['pipe', 'pipe', 'pipe'],
85
+ shell: false,
86
+ }).trim(),
87
+ };
81
88
  }
82
- catch {
83
- return null;
89
+ catch (err) {
90
+ const e = err;
91
+ return { error: String(e.stderr ?? '').trim() || e.message || 'unknown error' };
84
92
  }
85
93
  }
86
94
  /**
@@ -255,9 +263,12 @@ export const githubTools = [
255
263
  const store = loadGitHubStore();
256
264
  const action = input.action || 'list';
257
265
  const gh = hasGhCli();
266
+ // #4424: like #2963 for issues — owner/repo were validated but never
267
+ // passed to `gh`, so PR actions (including merge/close) hit the cwd's repo.
268
+ const repoArgs = input.owner && input.repo ? ['--repo', `${input.owner}/${input.repo}`] : [];
258
269
  if (action === 'list') {
259
270
  if (gh) {
260
- const raw = run('gh pr list --state all --limit 20 --json number,title,state,headRefName,createdAt');
271
+ const raw = runArgv('gh', ['pr', 'list', '--state', 'all', '--limit', '20', '--json', 'number,title,state,headRefName,createdAt', ...repoArgs]);
261
272
  if (raw) {
262
273
  try {
263
274
  const prs = JSON.parse(raw);
@@ -285,6 +296,7 @@ export const githubTools = [
285
296
  '--base', baseBranch,
286
297
  '--head', headBranch,
287
298
  '--body', body,
299
+ ...repoArgs,
288
300
  ]);
289
301
  if (result) {
290
302
  return { success: true, _real: true, action: 'created', url: result };
@@ -306,6 +318,7 @@ export const githubTools = [
306
318
  const raw = runArgv('gh', [
307
319
  'pr', 'view', String(prNumber),
308
320
  '--json', 'number,title,state,body,additions,deletions,changedFiles,reviews,mergeable,statusCheckRollup',
321
+ ...repoArgs,
309
322
  ]);
310
323
  if (raw) {
311
324
  try {
@@ -316,36 +329,28 @@ export const githubTools = [
316
329
  }
317
330
  return { success: false, error: prNumber ? 'gh CLI not available or PR not found. Install gh: https://cli.github.com' : 'prNumber is required (positive integer) for review.' };
318
331
  }
319
- if (action === 'merge') {
320
- const prNumber = toPositiveInt(input.prNumber);
321
- if (gh && prNumber) {
322
- const result = runArgv('gh', ['pr', 'merge', String(prNumber), '--merge']);
323
- if (result !== null) {
324
- return { success: true, _real: true, action: 'merged', prNumber, mergedAt: new Date().toISOString() };
325
- }
326
- }
327
- // Fallback: local store
328
- const prKey = prNumber ? Object.keys(store.prs).find(k => k.includes(String(prNumber))) : undefined;
329
- if (prKey && store.prs[prKey]) {
330
- store.prs[prKey].status = 'merged';
331
- saveGitHubStore(store);
332
- }
333
- return { success: true, source: 'local-store', action: 'merged', prNumber, mergedAt: new Date().toISOString() };
334
- }
335
- if (action === 'close') {
332
+ if (action === 'merge' || action === 'close') {
333
+ // #4424: a failed `gh` call, or a local fallback that matched nothing,
334
+ // used to be reported as success. Fail instead; offline, only update a
335
+ // local record whose id is exactly `pr-<prNumber>`.
336
336
  const prNumber = toPositiveInt(input.prNumber);
337
- if (gh && prNumber) {
338
- const result = runArgv('gh', ['pr', 'close', String(prNumber)]);
339
- if (result !== null) {
340
- return { success: true, _real: true, action: 'closed', prNumber, closedAt: new Date().toISOString() };
337
+ if (!prNumber)
338
+ return { success: false, error: `prNumber is required (positive integer) for ${action}.` };
339
+ const status = action === 'merge' ? 'merged' : 'closed';
340
+ if (gh) {
341
+ const argv = action === 'merge' ? ['pr', 'merge', String(prNumber), '--merge'] : ['pr', 'close', String(prNumber)];
342
+ const r = runArgvResult('gh', [...argv, ...repoArgs]);
343
+ if ('error' in r) {
344
+ return { success: false, source: 'gh-cli', error: `gh pr ${action} ${prNumber} failed: ${r.error}` };
341
345
  }
346
+ return { success: true, _real: true, action: status, prNumber, [`${status}At`]: new Date().toISOString() };
342
347
  }
343
- const prKey = prNumber ? Object.keys(store.prs).find(k => k.includes(String(prNumber))) : undefined;
344
- if (prKey && store.prs[prKey]) {
345
- store.prs[prKey].status = 'closed';
346
- saveGitHubStore(store);
347
- }
348
- return { success: true, source: 'local-store', action: 'closed', prNumber, closedAt: new Date().toISOString() };
348
+ const pr = store.prs[`pr-${prNumber}`];
349
+ if (!pr)
350
+ return { success: false, source: 'local-store', error: `gh CLI not available and no local PR pr-${prNumber}` };
351
+ pr.status = status;
352
+ saveGitHubStore(store);
353
+ return { success: true, source: 'local-store', action: status, prNumber, [`${status}At`]: new Date().toISOString() };
349
354
  }
350
355
  return { success: false, error: 'Unknown action' };
351
356
  },
@@ -435,51 +440,49 @@ export const githubTools = [
435
440
  saveGitHubStore(store);
436
441
  return { success: true, source: 'local-store', action: 'created', issue };
437
442
  }
438
- if (action === 'update') {
443
+ if (action === 'update' || action === 'close') {
444
+ // #4424: same contract as github_pr_manage merge/close — a failed `gh`
445
+ // call or an unmatched local fallback is a failure, not a success.
439
446
  const issueNumber = toPositiveInt(input.issueNumber);
440
- if (gh && issueNumber) {
441
- const argv = ['issue', 'edit', String(issueNumber)];
442
- if (input.title)
443
- argv.push('--title', input.title);
444
- if (input.labels) {
445
- const labels = sanitizeLabels(input.labels);
446
- if (labels === null)
447
- return { success: false, error: 'labels contains disallowed characters' };
448
- if (labels.length > 0)
447
+ if (!issueNumber)
448
+ return { success: false, error: `issueNumber is required (positive integer) for ${action}.` };
449
+ const labels = input.labels === undefined ? undefined : sanitizeLabels(input.labels);
450
+ if (labels === null)
451
+ return { success: false, error: 'labels contains disallowed characters' };
452
+ if (gh) {
453
+ const argv = ['issue', action === 'update' ? 'edit' : 'close', String(issueNumber)];
454
+ if (action === 'update') {
455
+ if (input.title)
456
+ argv.push('--title', input.title);
457
+ if (labels && labels.length > 0)
449
458
  argv.push('--add-label', labels.join(','));
459
+ if (argv.length === 3)
460
+ return { success: false, error: 'update requires title or labels' };
450
461
  }
451
- if (argv.length > 3) {
452
- const result = runArgv('gh', [...argv, ...repoArgs]);
453
- if (result !== null)
454
- return { success: true, _real: true, action: 'updated', issueNumber };
455
- }
456
- }
457
- const issueKey = issueNumber ? Object.keys(store.issues).find(k => k.includes(String(issueNumber))) : undefined;
458
- if (issueKey && store.issues[issueKey]) {
459
- if (input.title)
460
- store.issues[issueKey].title = input.title;
461
- if (input.labels) {
462
- const labels = sanitizeLabels(input.labels);
463
- if (labels !== null)
464
- store.issues[issueKey].labels = labels;
462
+ const r = runArgvResult('gh', [...argv, ...repoArgs]);
463
+ if ('error' in r) {
464
+ return { success: false, source: 'gh-cli', error: `gh issue ${argv[1]} ${issueNumber} failed: ${r.error}` };
465
465
  }
466
- saveGitHubStore(store);
466
+ return action === 'update'
467
+ ? { success: true, _real: true, action: 'updated', issueNumber }
468
+ : { success: true, _real: true, action: 'closed', issueNumber, closedAt: new Date().toISOString() };
467
469
  }
468
- return { success: true, source: 'local-store', action: 'updated', issueNumber };
469
- }
470
- if (action === 'close') {
471
- const issueNumber = toPositiveInt(input.issueNumber);
472
- if (gh && issueNumber) {
473
- const result = runArgv('gh', ['issue', 'close', String(issueNumber), ...repoArgs]);
474
- if (result !== null)
475
- return { success: true, _real: true, action: 'closed', issueNumber, closedAt: new Date().toISOString() };
470
+ const issue = store.issues[`issue-${issueNumber}`];
471
+ if (!issue)
472
+ return { success: false, source: 'local-store', error: `gh CLI not available and no local issue issue-${issueNumber}` };
473
+ if (action === 'close') {
474
+ issue.status = 'closed';
476
475
  }
477
- const issueKey = issueNumber ? Object.keys(store.issues).find(k => k.includes(String(issueNumber))) : undefined;
478
- if (issueKey && store.issues[issueKey]) {
479
- store.issues[issueKey].status = 'closed';
480
- saveGitHubStore(store);
476
+ else {
477
+ if (input.title)
478
+ issue.title = input.title;
479
+ if (labels)
480
+ issue.labels = labels;
481
481
  }
482
- return { success: true, source: 'local-store', action: 'closed', issueNumber, closedAt: new Date().toISOString() };
482
+ saveGitHubStore(store);
483
+ return action === 'update'
484
+ ? { success: true, source: 'local-store', action: 'updated', issueNumber }
485
+ : { success: true, source: 'local-store', action: 'closed', issueNumber, closedAt: new Date().toISOString() };
483
486
  }
484
487
  return { success: false, error: 'Unknown action' };
485
488
  },