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.
- package/.claude-plugin/marketplace.json +3 -3
- package/README.md +2 -1
- package/node_modules/@claude-flow/mcp/dist/session-manager.d.ts.map +1 -1
- package/node_modules/@claude-flow/mcp/dist/session-manager.js +4 -1
- package/node_modules/@claude-flow/mcp/dist/session-manager.js.map +1 -1
- package/node_modules/@claude-flow/mcp/package.json +1 -1
- package/package.json +3 -2
- package/v3/@claude-flow/cli/README.md +2 -1
- package/v3/@claude-flow/cli/catalog-manifest.json +4 -4
- package/v3/@claude-flow/cli/dist/src/commands/agntcy/publish.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/agntcy/runtime.d.ts +4 -1
- package/v3/@claude-flow/cli/dist/src/commands/agntcy/runtime.js +15 -2
- package/v3/@claude-flow/cli/dist/src/commands/agntcy/swarm-join.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/agntcy/transport.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/cleanup.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/update.js +5 -3
- package/v3/@claude-flow/cli/dist/src/mcp-client.js +4 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agentbbs-tools.js +7 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/capability-brain.js +17 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/daa-tools.js +20 -12
- package/v3/@claude-flow/cli/dist/src/mcp-tools/github-tools.js +78 -75
- package/v3/@claude-flow/cli/dist/src/mcp-tools/neural-tools.js +11 -17
- package/v3/@claude-flow/cli/dist/src/mcp-tools/rure-tools.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/rure-tools.js +359 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.d.ts +17 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +18 -9
- package/v3/@claude-flow/cli/dist/src/mods/claude-installs.d.ts +12 -0
- package/v3/@claude-flow/cli/dist/src/mods/claude-installs.js +21 -1
- package/v3/@claude-flow/cli/dist/src/rure/aidefence-gate.d.ts +25 -0
- package/v3/@claude-flow/cli/dist/src/rure/aidefence-gate.js +63 -0
- package/v3/@claude-flow/cli/dist/src/rure/analyze-js-app.d.ts +17 -0
- package/v3/@claude-flow/cli/dist/src/rure/analyze-js-app.js +26 -0
- package/v3/@claude-flow/cli/dist/src/rure/binary-parse.d.ts +38 -0
- package/v3/@claude-flow/cli/dist/src/rure/binary-parse.js +347 -0
- package/v3/@claude-flow/cli/dist/src/rure/dotnet-parse.d.ts +30 -0
- package/v3/@claude-flow/cli/dist/src/rure/dotnet-parse.js +299 -0
- package/v3/@claude-flow/cli/dist/src/rure/evm-parse.d.ts +52 -0
- package/v3/@claude-flow/cli/dist/src/rure/evm-parse.js +233 -0
- package/v3/@claude-flow/cli/dist/src/rure/extract-asar.d.ts +33 -0
- package/v3/@claude-flow/cli/dist/src/rure/extract-asar.js +70 -0
- package/v3/@claude-flow/cli/dist/src/rure/find-feature.d.ts +26 -0
- package/v3/@claude-flow/cli/dist/src/rure/find-feature.js +69 -0
- package/v3/@claude-flow/cli/dist/src/rure/ts-walk.d.ts +47 -0
- package/v3/@claude-flow/cli/dist/src/rure/ts-walk.js +158 -0
- package/v3/@claude-flow/cli/dist/src/rure/walk-files.d.ts +21 -0
- package/v3/@claude-flow/cli/dist/src/rure/walk-files.js +71 -0
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +17 -3
- package/v3/@claude-flow/cli/dist/src/update/checker.d.ts +1 -0
- package/v3/@claude-flow/cli/dist/src/update/checker.js +4 -2
- package/v3/@claude-flow/cli/package.json +4 -3
- package/.claude/.proven-config-version +0 -1
- 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.
|
|
61
|
-
"sha": "
|
|
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.
|
|
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
|
[](https://www.npmjs.com/package/ruflo)
|
|
9
9
|
[](https://opensource.org/licenses/MIT)
|
|
10
10
|
[](https://github.com/ruvnet/claude-flow)
|
|
11
|
+
[](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.
|
|
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;
|
|
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
|
-
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-flow",
|
|
3
|
-
"version": "3.
|
|
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.
|
|
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
|
[](https://www.npmjs.com/package/ruflo)
|
|
9
9
|
[](https://opensource.org/licenses/MIT)
|
|
10
10
|
[](https://github.com/ruvnet/claude-flow)
|
|
11
|
+
[](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.
|
|
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-
|
|
5
|
-
"gitSha": "
|
|
4
|
+
"generatedAt": "2026-10-23T18:53:29.930Z",
|
|
5
|
+
"gitSha": "af6c74b3",
|
|
6
6
|
"catalog": {
|
|
7
|
-
"agents":
|
|
8
|
-
"tools":
|
|
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,
|
|
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(
|
|
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) ${
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
321
|
-
|
|
322
|
-
|
|
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 (
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
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
|
|
344
|
-
if (
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
return { success: true, source: 'local-store', action:
|
|
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 (
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
if (
|
|
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
|
-
|
|
452
|
-
|
|
453
|
-
|
|
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
|
-
|
|
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
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
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
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
476
|
+
else {
|
|
477
|
+
if (input.title)
|
|
478
|
+
issue.title = input.title;
|
|
479
|
+
if (labels)
|
|
480
|
+
issue.labels = labels;
|
|
481
481
|
}
|
|
482
|
-
|
|
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
|
},
|