claude-flow 3.7.0-alpha.72 β†’ 3.7.0-alpha.74

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.
@@ -250,7 +250,7 @@ jobs:
250
250
  swarm-review:
251
251
  runs-on: ubuntu-latest
252
252
  steps:
253
- - uses: actions/checkout@v3
253
+ - uses: actions/checkout@v4
254
254
  with:
255
255
  fetch-depth: 0
256
256
 
@@ -95,7 +95,7 @@ mcp__github__add_issue_comment {
95
95
  - Final validation and merge preparation
96
96
 
97
97
  ---
98
- πŸ€– Generated with Claude Code using ruv-swarm coordination`
98
+ `
99
99
  }
100
100
 
101
101
  // Store progress in swarm memory
@@ -213,9 +213,10 @@ mcp__github__update_issue {
213
213
  Updates will be posted automatically by swarm agents during implementation.
214
214
 
215
215
  ---
216
- πŸ€– Generated with Claude Code
217
216
  ```
218
217
 
218
+ <!-- last-updated: 2026-05-21 β€” ADR-127 -->
219
+
219
220
  ### Bug Report Template:
220
221
  ```markdown
221
222
  ## πŸ› Bug Report
@@ -251,7 +252,6 @@ Updates will be posted automatically by swarm agents during implementation.
251
252
  - **Tester**: Validation and testing
252
253
 
253
254
  ---
254
- πŸ€– Generated with Claude Code
255
255
  ```
256
256
 
257
257
  ## Best Practices
@@ -2,7 +2,7 @@
2
2
  name: release-manager
3
3
  description: |
4
4
  Automated release coordination and deployment with ruv-swarm orchestration for seamless version management, testing, and deployment across multiple packages
5
- tools: Bash, Read, Write, Edit, TodoWrite, TodoRead, Task, WebFetch, mcp__github__create_pull_request, mcp__github__merge_pull_request, mcp__github__create_branch, mcp__github__push_files, mcp__github__create_issue, mcp__claude-flow__swarm_init, mcp__claude-flow__agent_spawn, mcp__claude-flow__task_orchestrate, mcp__claude-flow__memory_usage
5
+ tools: Bash, Read, Write, Edit, TodoWrite, TodoRead, Task, mcp__github__create_pull_request, mcp__github__merge_pull_request, mcp__github__create_branch, mcp__github__push_files, mcp__github__create_issue, mcp__claude-flow__swarm_init, mcp__claude-flow__agent_spawn, mcp__claude-flow__task_orchestrate, mcp__claude-flow__memory_usage
6
6
  ---
7
7
 
8
8
  # GitHub Release Manager
@@ -165,10 +165,12 @@ This release was coordinated using ruv-swarm agents:
165
165
  This release is production-ready with comprehensive validation and testing.
166
166
 
167
167
  ---
168
- πŸ€– Generated with Claude Code using ruv-swarm coordination`
168
+ `
169
169
  }
170
170
  ```
171
171
 
172
+ <!-- last-updated: 2026-05-21 β€” ADR-127 -->
173
+
172
174
  ## Batch Release Workflow
173
175
 
174
176
  ### Complete Release Pipeline:
@@ -308,9 +310,9 @@ jobs:
308
310
  release-validation:
309
311
  runs-on: ubuntu-latest
310
312
  steps:
311
- - uses: actions/checkout@v3
313
+ - uses: actions/checkout@v4
312
314
  - name: Setup Node.js
313
- uses: actions/setup-node@v3
315
+ uses: actions/setup-node@v4
314
316
  with:
315
317
  node-version: '20'
316
318
  - name: Install and Test
@@ -2,7 +2,7 @@
2
2
  name: release-swarm
3
3
  description: |
4
4
  Orchestrate complex software releases using AI swarms that handle everything from changelog generation to multi-platform deployment
5
- tools: Bash, Read, Write, Edit, TodoWrite, TodoRead, Task, WebFetch, mcp__github__create_pull_request, mcp__github__merge_pull_request, mcp__github__create_branch, mcp__github__push_files, mcp__github__create_issue, mcp__claude-flow__swarm_init, mcp__claude-flow__agent_spawn, mcp__claude-flow__task_orchestrate, mcp__claude-flow__parallel_execute, mcp__claude-flow__load_balance
5
+ tools: Bash, Read, Write, Edit, TodoWrite, TodoRead, Task, mcp__github__create_pull_request, mcp__github__merge_pull_request, mcp__github__create_branch, mcp__github__push_files, mcp__github__create_issue, mcp__claude-flow__swarm_init, mcp__claude-flow__agent_spawn, mcp__claude-flow__task_orchestrate, mcp__claude-flow__parallel_execute, mcp__claude-flow__load_balance
6
6
  ---
7
7
 
8
8
  # Release Swarm - Intelligent Release Automation
@@ -280,7 +280,7 @@ jobs:
280
280
  release-swarm:
281
281
  runs-on: ubuntu-latest
282
282
  steps:
283
- - uses: actions/checkout@v3
283
+ - uses: actions/checkout@v4
284
284
  with:
285
285
  fetch-depth: 0
286
286
 
@@ -2,7 +2,7 @@
2
2
  name: repo-architect
3
3
  description: |
4
4
  Repository structure optimization and multi-repo management with ruv-swarm coordination for scalable project architecture and development workflows
5
- tools: Bash, Read, Write, Edit, LS, Glob, TodoWrite, TodoRead, Task, WebFetch, mcp__github__create_repository, mcp__github__fork_repository, mcp__github__search_repositories, mcp__github__push_files, mcp__github__create_or_update_file, mcp__claude-flow__swarm_init, mcp__claude-flow__agent_spawn, mcp__claude-flow__task_orchestrate, mcp__claude-flow__memory_usage
5
+ tools: Bash, Read, Write, Edit, LS, Glob, TodoWrite, TodoRead, Task, mcp__github__create_repository, mcp__github__fork_repository, mcp__github__search_repositories, mcp__github__push_files, mcp__github__create_or_update_file, mcp__claude-flow__swarm_init, mcp__claude-flow__agent_spawn, mcp__claude-flow__task_orchestrate, mcp__claude-flow__memory_usage
6
6
  ---
7
7
 
8
8
  # GitHub Repository Architect
@@ -151,8 +151,8 @@ jobs:
151
151
  test:
152
152
  runs-on: ubuntu-latest
153
153
  steps:
154
- - uses: actions/checkout@v3
155
- - uses: actions/setup-node@v3
154
+ - uses: actions/checkout@v4
155
+ - uses: actions/setup-node@v4
156
156
  with: { node-version: '20' }
157
157
  - run: npm install && npm test`,
158
158
  message: "ci: Standardize integration workflow across repositories",
@@ -266,9 +266,12 @@ jobs:
266
266
  uses: ruvnet/swarm-action@v1
267
267
  with:
268
268
  command: |
269
- if [[ "${{ github.event.label.name }}" == "swarm-ready" ]]; then
269
+ LABEL_NAME_FILE=$(mktemp)
270
+ printf '%s' "${{ github.event.label.name }}" > "$LABEL_NAME_FILE"
271
+ if grep -qx 'swarm-ready' "$LABEL_NAME_FILE"; then
270
272
  npx ruv-swarm github issue-init ${{ github.event.issue.number }}
271
273
  fi
274
+ rm -f "$LABEL_NAME_FILE"
272
275
  ```
273
276
 
274
277
  ### Issue Board Integration
@@ -51,14 +51,17 @@ jobs:
51
51
  swarm-handler:
52
52
  runs-on: ubuntu-latest
53
53
  steps:
54
- - uses: actions/checkout@v3
54
+ - uses: actions/checkout@v4
55
55
  - name: Handle Swarm Command
56
56
  run: |
57
- if [[ "${{ github.event.comment.body }}" == /swarm* ]]; then
57
+ COMMENT_BODY_FILE=$(mktemp)
58
+ printf '%s' "${{ github.event.comment.body }}" > "$COMMENT_BODY_FILE"
59
+ if grep -q '^/swarm' "$COMMENT_BODY_FILE"; then
58
60
  npx ruv-swarm github handle-comment \
59
61
  --pr ${{ github.event.pull_request.number }} \
60
- --comment "${{ github.event.comment.body }}"
62
+ --comment-file "$COMMENT_BODY_FILE"
61
63
  fi
64
+ rm -f "$COMMENT_BODY_FILE"
62
65
  ```
63
66
 
64
67
  ## PR Label Integration
@@ -144,10 +144,12 @@ This integration uses ruv-swarm agents for:
144
144
  - Memory-based state management
145
145
 
146
146
  ---
147
- πŸ€– Generated with Claude Code using ruv-swarm coordination`
147
+ `
148
148
  }
149
149
  ```
150
150
 
151
+ <!-- last-updated: 2026-05-21 β€” ADR-127 -->
152
+
151
153
  ## Batch Synchronization Example
152
154
 
153
155
  ### Complete Package Sync Workflow:
@@ -22,7 +22,7 @@ jobs:
22
22
  swarm-analysis:
23
23
  runs-on: ubuntu-latest
24
24
  steps:
25
- - uses: actions/checkout@v3
25
+ - uses: actions/checkout@v4
26
26
 
27
27
  - name: Initialize Swarm
28
28
  uses: ruvnet/swarm-action@v1
@@ -70,7 +70,7 @@ jobs:
70
70
  detect-and-build:
71
71
  runs-on: ubuntu-latest
72
72
  steps:
73
- - uses: actions/checkout@v3
73
+ - uses: actions/checkout@v4
74
74
 
75
75
  - name: Detect Languages
76
76
  id: detect
@@ -1,11 +1,21 @@
1
1
  #!/usr/bin/env node
2
-
3
2
  /**
4
- * Safe GitHub CLI Helper
5
- * Prevents timeout issues when using gh commands with special characters
6
- *
3
+ * Safe GitHub CLI Helper β€” v1.0.0
4
+ *
5
+ * Prevents injection issues when using `gh` commands with untrusted content
6
+ * (PR bodies, issue bodies, comment bodies) by routing the body through a
7
+ * temp file and using `--body-file` rather than interpolating into shell args.
8
+ *
9
+ * ADR-127 Phase 2 hardening:
10
+ * - GITHUB_SAFE_VERSION exported for smoke assertions.
11
+ * - Explicit 256KB body cap: rejects oversized bodies before any temp-file
12
+ * write, matching the GitHub API `body` field limit.
13
+ * - Strict error handling: all execSync calls inside try/catch; cleanup in
14
+ * finally; non-zero exit on any error.
15
+ * - GITHUB_SAFE_DRY_RUN=1 env-var skips the actual `gh` exec for testing.
16
+ *
7
17
  * Usage:
8
- * ./github-safe.js issue comment 123 "Message with `backticks`"
18
+ * ./github-safe.js issue comment 123 "Message with \`backticks\`"
9
19
  * ./github-safe.js pr create --title "Title" --body "Complex body"
10
20
  */
11
21
 
@@ -15,11 +25,19 @@ import { tmpdir } from 'os';
15
25
  import { join } from 'path';
16
26
  import { randomBytes } from 'crypto';
17
27
 
28
+ // Version constant β€” asserted by smoke-github-safe-injection.mjs.
29
+ export const GITHUB_SAFE_VERSION = '1.0.0';
30
+
31
+ // Maximum body size allowed (bytes). The GitHub API enforces 65536 chars for
32
+ // issue/PR bodies; the CLI is more lenient but the 256KB limit is a
33
+ // conservative safety cap that prevents accidental oversized writes.
34
+ const MAX_BODY_BYTES = 256 * 1024;
35
+
18
36
  const args = process.argv.slice(2);
19
37
 
20
38
  if (args.length < 2) {
21
39
  console.log(`
22
- Safe GitHub CLI Helper
40
+ Safe GitHub CLI Helper v${GITHUB_SAFE_VERSION}
23
41
 
24
42
  Usage:
25
43
  ./github-safe.js issue comment <number> <body>
@@ -27,11 +45,11 @@ Usage:
27
45
  ./github-safe.js issue create --title <title> --body <body>
28
46
  ./github-safe.js pr create --title <title> --body <body>
29
47
 
30
- This helper prevents timeout issues with special characters like:
48
+ This helper prevents injection issues with special characters:
31
49
  - Backticks in code examples
32
- - Command substitution \$(...)
33
- - Directory paths
34
- - Special shell characters
50
+ - Command substitution $(...)
51
+ - Semicolons and other shell metacharacters
52
+ - Oversized bodies (> 256 KB rejected)
35
53
  `);
36
54
  process.exit(1);
37
55
  }
@@ -39,68 +57,98 @@ This helper prevents timeout issues with special characters like:
39
57
  const [command, subcommand, ...restArgs] = args;
40
58
 
41
59
  // Handle commands that need body content
42
- if ((command === 'issue' || command === 'pr') &&
60
+ if ((command === 'issue' || command === 'pr') &&
43
61
  (subcommand === 'comment' || subcommand === 'create')) {
44
-
62
+
45
63
  let bodyIndex = -1;
46
64
  let body = '';
47
-
65
+
48
66
  if (subcommand === 'comment' && restArgs.length >= 2) {
49
67
  // Simple format: github-safe.js issue comment 123 "body"
50
68
  body = restArgs[1];
51
69
  bodyIndex = 1;
52
70
  } else {
53
- // Flag format: --body "content"
71
+ // Flag format: --body "content"
54
72
  bodyIndex = restArgs.indexOf('--body');
55
73
  if (bodyIndex !== -1 && bodyIndex < restArgs.length - 1) {
56
74
  body = restArgs[bodyIndex + 1];
57
75
  }
58
76
  }
59
-
77
+
60
78
  if (body) {
61
- // Use temporary file for body content
79
+ // Enforce 256KB cap before any file I/O.
80
+ const bodyBytes = Buffer.byteLength(body, 'utf8');
81
+ if (bodyBytes > MAX_BODY_BYTES) {
82
+ console.error(
83
+ `[ERROR] Body exceeds maximum allowed size (${bodyBytes} bytes > ${MAX_BODY_BYTES} bytes). ` +
84
+ 'GitHub API body fields are capped at 256KB. Truncate the body before passing it to github-safe.js.'
85
+ );
86
+ process.exit(1);
87
+ }
88
+
89
+ // Use temporary file for body content β€” never interpolate into argv.
62
90
  const tmpFile = join(tmpdir(), `gh-body-${randomBytes(8).toString('hex')}.tmp`);
63
-
91
+
64
92
  try {
65
93
  writeFileSync(tmpFile, body, 'utf8');
66
-
94
+
67
95
  // Build new command with --body-file
68
96
  const newArgs = [...restArgs];
69
97
  if (subcommand === 'comment' && bodyIndex === 1) {
70
- // Replace body with --body-file
98
+ // Replace positional body arg with --body-file
71
99
  newArgs[1] = '--body-file';
72
100
  newArgs.push(tmpFile);
73
101
  } else if (bodyIndex !== -1) {
74
- // Replace --body with --body-file
102
+ // Replace --body flag pair with --body-file
75
103
  newArgs[bodyIndex] = '--body-file';
76
104
  newArgs[bodyIndex + 1] = tmpFile;
77
105
  }
78
-
79
- // Execute safely
106
+
107
+ // Skip actual gh exec in dry-run mode (used by smoke tests).
108
+ if (process.env.GITHUB_SAFE_DRY_RUN === '1') {
109
+ const ghArgs = [command, subcommand, ...newArgs];
110
+ console.log(`[DRY-RUN] gh ${ghArgs.join(' ')}`);
111
+ process.exit(0);
112
+ }
113
+
80
114
  const ghCommand = `gh ${command} ${subcommand} ${newArgs.join(' ')}`;
81
115
  console.log(`Executing: ${ghCommand}`);
82
-
83
- const result = execSync(ghCommand, {
116
+
117
+ execSync(ghCommand, {
84
118
  stdio: 'inherit',
85
- timeout: 30000 // 30 second timeout
119
+ timeout: 30000,
86
120
  });
87
-
121
+
88
122
  } catch (error) {
89
- console.error('Error:', error.message);
123
+ console.error('[ERROR]', error.message);
90
124
  process.exit(1);
91
125
  } finally {
92
- // Clean up
93
- try {
94
- unlinkSync(tmpFile);
95
- } catch (e) {
96
- // Ignore cleanup errors
97
- }
126
+ // Always clean up the temp file.
127
+ try { unlinkSync(tmpFile); } catch (_) { /* ignore cleanup errors */ }
98
128
  }
99
129
  } else {
100
- // No body content, execute normally
101
- execSync(`gh ${args.join(' ')}`, { stdio: 'inherit' });
130
+ // No body content β€” execute normally (no injection risk).
131
+ if (process.env.GITHUB_SAFE_DRY_RUN === '1') {
132
+ console.log(`[DRY-RUN] gh ${args.join(' ')}`);
133
+ process.exit(0);
134
+ }
135
+ try {
136
+ execSync(`gh ${args.join(' ')}`, { stdio: 'inherit' });
137
+ } catch (error) {
138
+ console.error('[ERROR]', error.message);
139
+ process.exit(1);
140
+ }
102
141
  }
103
142
  } else {
104
- // Other commands, execute normally
105
- execSync(`gh ${args.join(' ')}`, { stdio: 'inherit' });
143
+ // Non-body commands β€” execute normally.
144
+ if (process.env.GITHUB_SAFE_DRY_RUN === '1') {
145
+ console.log(`[DRY-RUN] gh ${args.join(' ')}`);
146
+ process.exit(0);
147
+ }
148
+ try {
149
+ execSync(`gh ${args.join(' ')}`, { stdio: 'inherit' });
150
+ } catch (error) {
151
+ console.error('[ERROR]', error.message);
152
+ process.exit(1);
153
+ }
106
154
  }
@@ -1,27 +1,44 @@
1
1
  #!/bin/bash
2
+ # Security rationale: set -euo pipefail ensures that:
3
+ # -e β€” exit immediately if any command fails (no silent failures)
4
+ # -u β€” treat unset variables as errors (prevents empty-string expansion bugs)
5
+ # -o pipefail β€” pipeline fails if any command in it fails (not just last)
6
+ # This matches the ADR-127 Phase 2 requirement for github-setup.sh hardening.
7
+ set -euo pipefail
8
+
2
9
  # Setup GitHub integration for Claude Flow
3
10
 
4
- echo "πŸ”— Setting up GitHub integration..."
11
+ echo "Setting up GitHub integration..."
5
12
 
6
13
  # Check for gh CLI
7
14
  if ! command -v gh &> /dev/null; then
8
- echo "⚠️ GitHub CLI (gh) not found"
15
+ echo "WARNING: GitHub CLI (gh) not found"
9
16
  echo "Install from: https://cli.github.com/"
10
17
  echo "Continuing without GitHub features..."
11
18
  else
12
- echo "βœ… GitHub CLI found"
13
-
14
- # Check auth status
15
- if gh auth status &> /dev/null; then
16
- echo "βœ… GitHub authentication active"
19
+ echo "OK: GitHub CLI found"
20
+
21
+ # Check auth status and scope sufficiency.
22
+ # `gh auth status` exits non-zero when not authenticated.
23
+ # We additionally parse for "Token scopes" to verify we have at least
24
+ # 'repo' scope, which is required for PR/issue operations.
25
+ if gh auth status 2>&1 | grep -q "Logged in"; then
26
+ echo "OK: GitHub authentication active"
27
+ # Verify repo scope is present for PR/issue operations.
28
+ if gh auth status 2>&1 | grep -q "repo"; then
29
+ echo "OK: 'repo' scope available"
30
+ else
31
+ echo "WARNING: 'repo' scope not confirmed β€” PR/issue operations may fail"
32
+ echo "Run: gh auth login --scopes repo,read:org"
33
+ fi
17
34
  else
18
- echo "⚠️ Not authenticated with GitHub"
35
+ echo "WARNING: Not authenticated with GitHub"
19
36
  echo "Run: gh auth login"
20
37
  fi
21
38
  fi
22
39
 
23
40
  echo ""
24
- echo "πŸ“¦ GitHub swarm commands available:"
41
+ echo "GitHub swarm commands available:"
25
42
  echo " - npx claude-flow github swarm"
26
43
  echo " - npx claude-flow repo analyze"
27
44
  echo " - npx claude-flow pr enhance"
@@ -489,7 +489,7 @@ jobs:
489
489
  swarm-review:
490
490
  runs-on: ubuntu-latest
491
491
  steps:
492
- - uses: actions/checkout@v3
492
+ - uses: actions/checkout@v4
493
493
  with:
494
494
  fetch-depth: 0
495
495
 
@@ -766,7 +766,7 @@ jobs:
766
766
  build-and-test:
767
767
  runs-on: ubuntu-latest
768
768
  steps:
769
- - uses: actions/checkout@v3
769
+ - uses: actions/checkout@v4
770
770
  - run: npm install
771
771
  - run: npm test
772
772
  - run: npm run build
@@ -331,8 +331,8 @@ jobs:
331
331
  test:
332
332
  runs-on: ubuntu-latest
333
333
  steps:
334
- - uses: actions/checkout@v3
335
- - uses: actions/setup-node@v3
334
+ - uses: actions/checkout@v4
335
+ - uses: actions/setup-node@v4
336
336
  with: { node-version: '20' }
337
337
  - run: npm install && npm test`,
338
338
  message: "ci: Standardize integration workflow",
@@ -839,9 +839,10 @@ npx ruv-swarm github review-coordinate \
839
839
  Updates will be posted automatically by swarm agents during implementation.
840
840
 
841
841
  ---
842
- πŸ€– Generated with Claude Code
843
842
  ```
844
843
 
844
+ <!-- last-updated: 2026-05-21 β€” ADR-127 -->
845
+
845
846
  ### Bug Report Template
846
847
 
847
848
  ```markdown
@@ -878,7 +879,6 @@ Updates will be posted automatically by swarm agents during implementation.
878
879
  - **Tester**: Validation and testing
879
880
 
880
881
  ---
881
- πŸ€– Generated with Claude Code
882
882
  ```
883
883
 
884
884
  ### Feature Request Template
@@ -922,7 +922,6 @@ Updates will be posted automatically by swarm agents during implementation.
922
922
  - **Documenter**: Documentation
923
923
 
924
924
  ---
925
- πŸ€– Generated with Claude Code
926
925
  ```
927
926
 
928
927
  ### Swarm Task Template
@@ -685,12 +685,12 @@ jobs:
685
685
 
686
686
  steps:
687
687
  - name: Checkout Repository
688
- uses: actions/checkout@v3
688
+ uses: actions/checkout@v4
689
689
  with:
690
690
  fetch-depth: 0
691
691
 
692
692
  - name: Setup Node.js
693
- uses: actions/setup-node@v3
693
+ uses: actions/setup-node@v4
694
694
  with:
695
695
  node-version: '20'
696
696
  cache: 'npm'
@@ -166,7 +166,7 @@ jobs:
166
166
  swarm-analysis:
167
167
  runs-on: ubuntu-latest
168
168
  steps:
169
- - uses: actions/checkout@v3
169
+ - uses: actions/checkout@v4
170
170
 
171
171
  - name: Initialize Swarm
172
172
  uses: ruvnet/swarm-action@v1
@@ -192,7 +192,7 @@ jobs:
192
192
  detect-and-build:
193
193
  runs-on: ubuntu-latest
194
194
  steps:
195
- - uses: actions/checkout@v3
195
+ - uses: actions/checkout@v4
196
196
 
197
197
  - name: Detect Languages
198
198
  id: detect
@@ -819,7 +819,7 @@ jobs:
819
819
  needs: initialize
820
820
  runs-on: ubuntu-latest
821
821
  steps:
822
- - uses: actions/checkout@v3
822
+ - uses: actions/checkout@v4
823
823
  - name: Backend Tests
824
824
  run: |
825
825
  npx ruv-swarm agents spawn --type tester \
@@ -830,7 +830,7 @@ jobs:
830
830
  needs: initialize
831
831
  runs-on: ubuntu-latest
832
832
  steps:
833
- - uses: actions/checkout@v3
833
+ - uses: actions/checkout@v4
834
834
  - name: Frontend Tests
835
835
  run: |
836
836
  npx ruv-swarm agents spawn --type tester \
@@ -841,7 +841,7 @@ jobs:
841
841
  needs: initialize
842
842
  runs-on: ubuntu-latest
843
843
  steps:
844
- - uses: actions/checkout@v3
844
+ - uses: actions/checkout@v4
845
845
  - name: Security Scan
846
846
  run: |
847
847
  npx ruv-swarm agents spawn --type security \
@@ -871,7 +871,7 @@ jobs:
871
871
  outputs:
872
872
  packages: ${{ steps.detect.outputs.packages }}
873
873
  steps:
874
- - uses: actions/checkout@v3
874
+ - uses: actions/checkout@v4
875
875
  with:
876
876
  fetch-depth: 0
877
877
 
@@ -470,7 +470,7 @@ jobs:
470
470
  verify:
471
471
  runs-on: ubuntu-latest
472
472
  steps:
473
- - uses: actions/checkout@v3
473
+ - uses: actions/checkout@v4
474
474
 
475
475
  - name: Install Dependencies
476
476
  run: npm install
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- [![Ruflo Banner](ruflo/assets/ruflo-small.jpeg)](https://flo.ruv.io/)
3
+ [![Ruflo Banner](ruflo/assets/ruflo-small.jpeg)](https://cognitum.one/agentic-engineering)
4
4
 
5
5
  [![Try the UI Beta β€” flo.ruv.io](https://img.shields.io/badge/_Try_the_UI_Beta-flo.ruv.io-6366f1?style=for-the-badge&logoColor=white&logo=svelte)](https://flo.ruv.io/)
6
6
  [![Goal Planner β€” goal.ruv.io](https://img.shields.io/badge/_Goal_Planner-goal.ruv.io-8b5cf6?style=for-the-badge&logoColor=white&logo=react)](https://goal.ruv.io/)
@@ -16,6 +16,8 @@
16
16
  [![Codex Plugin](https://img.shields.io/badge/Codex-Plugin-412991?style=for-the-badge&logoColor=white&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI%2BPHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0yMi4yODIgOS44MjFhNS45ODUgNS45ODUgMCAwIDAtLjUxNi00LjkxIDYuMDQ2IDYuMDQ2IDAgMCAwLTYuNTEtMi45QTYuMDY1IDYuMDY1IDAgMCAwIDQuOTgxIDQuMThhNS45ODUgNS45ODUgMCAwIDAtMy45OTggMi45IDYuMDQ2IDYuMDQ2IDAgMCAwIC43NDMgNy4wOTcgNS45OCA1Ljk4IDAgMCAwIC41MSA0LjkxMSA2LjA1MSA2LjA1MSAwIDAgMCA2LjUxNSAyLjlBNS45ODUgNS45ODUgMCAwIDAgMTMuMjYgMjRhNi4wNTYgNi4wNTYgMCAwIDAgNS43NzItNC4yMDYgNS45OSA1Ljk5IDAgMCAwIDMuOTk4LTIuOSA2LjA1NiA2LjA1NiAwIDAgMC0uNzQ3LTcuMDczek0xMy4yNiAyMi40M2E0LjQ3NiA0LjQ3NiAwIDAgMS0yLjg3Ni0xLjA0bC4xNDItLjA4IDQuNzc4LTIuNzU4YS43OTUuNzk1IDAgMCAwIC4zOTMtLjY4MXYtNi43MzdsMi4wMiAxLjE2OGEuMDcxLjA3MSAwIDAgMSAuMDM4LjA1MnY1LjU4M2E0LjUwNCA0LjUwNCAwIDAgMS00LjQ5NSA0LjQ5NHpNMy42IDE4LjMwNGE0LjQ3IDQuNDcgMCAwIDEtLjUzNS0zLjAxNGwuMTQyLjA4NSA0Ljc4MyAyLjc1OWEuNzcxLjc3MSAwIDAgMCAuNzgxIDBsNS44NDMtMy4zNjl2Mi4zMzJhLjA4LjA4IDAgMCAxLS4wMzMuMDYyTDkuNzQgMTkuOTVhNC41IDQuNSAwIDAgMS02LjE0LTEuNjQ2ek0yLjM0IDcuODk2YTQuNDg1IDQuNDg1IDAgMCAxIDIuMzY2LTEuOTczVjExLjZhLjc2Ni43NjYgMCAwIDAgLjM4OC42NzdsNS44MTUgMy4zNTQtMi4wMiAxLjE2OGEuMDc2LjA3NiAwIDAgMS0uMDcyIDBsLTQuODMtMi43ODZBNC41MDQgNC41MDQgMCAwIDEgMi4zNCA3Ljg3MnptMTYuNTk3IDMuODU1LTUuODMzLTMuMzg3IDIuMDE2LTEuMTY1YS4wNzYuMDc2IDAgMCAxIC4wNzEgMGw0LjgzIDIuNzkxYTQuNDk0IDQuNDk0IDAgMCAxLS42NzYgOC4xMDR2LTUuNjc3YS43OS43OSAwIDAgMC0uNDA3LS42Njd6bTIuMDEtMy4wMjMtLjE0MS0uMDg1LTQuNzc0LTIuNzgyYS43NzYuNzc2IDAgMCAwLS43ODUgMEw5LjQwOSA5LjIzVjYuODk3YS4wNjYuMDY2IDAgMCAxIC4wMjgtLjA2Mmw0LjgzLTIuNzg3YTQuNDk5IDQuNDk5IDAgMCAxIDYuNjggNC42NnpNOC4zMDcgMTIuODYzbC0yLjAyLTEuMTY0YS4wOC4wOCAwIDAgMS0uMDM4LS4wNTdWNi4wNzRhNC40OTkgNC40OTkgMCAwIDEgNy4zNzYtMy40NTRsLS4xNDIuMDgtNC43NzggMi43NThhLjc5NS43OTUgMCAwIDAtLjM5My42ODJ6bTEuMDk3LTIuMzY2IDIuNjAyLTEuNSAyLjYwNyAxLjV2Mi45OTlsLTIuNTk3IDEuNS0yLjYwNy0xLjVaIi8%2BPC9zdmc%2B)](https://www.npmjs.com/package/@claude-flow/codex)
17
17
  [![πŸ•ΈοΈ RuVector Graph Ai](https://img.shields.io/badge/RuVector_Agentic-DB-06b6d4?style=for-the-badge&logoColor=white&logo=graphql)](https://github.com/ruvnet/ruvector)
18
18
 
19
+ [![RuFlo Agentic Appliance](v3/docs/assets/RuFlo-agentic-appliance.png)](https://cognitum.one/appliance)
20
+
19
21
  [![ruFlo Summit β€” Budapest, June 2–3, 2026](v3/docs/assets/ruFlo-Summit.jpg)](https://github.com/ruvnet/ruflo/issues/1967)
20
22
 
21
23
  # Ruflo
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-flow",
3
- "version": "3.7.0-alpha.72",
3
+ "version": "3.7.0-alpha.74",
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,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- [![Ruflo Banner](ruflo/assets/ruflo-small.jpeg)](https://flo.ruv.io/)
3
+ [![Ruflo Banner](ruflo/assets/ruflo-small.jpeg)](https://cognitum.one/agentic-engineering)
4
4
 
5
5
  [![Try the UI Beta β€” flo.ruv.io](https://img.shields.io/badge/_Try_the_UI_Beta-flo.ruv.io-6366f1?style=for-the-badge&logoColor=white&logo=svelte)](https://flo.ruv.io/)
6
6
  [![Goal Planner β€” goal.ruv.io](https://img.shields.io/badge/_Goal_Planner-goal.ruv.io-8b5cf6?style=for-the-badge&logoColor=white&logo=react)](https://goal.ruv.io/)
@@ -16,6 +16,8 @@
16
16
  [![Codex Plugin](https://img.shields.io/badge/Codex-Plugin-412991?style=for-the-badge&logoColor=white&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI%2BPHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0yMi4yODIgOS44MjFhNS45ODUgNS45ODUgMCAwIDAtLjUxNi00LjkxIDYuMDQ2IDYuMDQ2IDAgMCAwLTYuNTEtMi45QTYuMDY1IDYuMDY1IDAgMCAwIDQuOTgxIDQuMThhNS45ODUgNS45ODUgMCAwIDAtMy45OTggMi45IDYuMDQ2IDYuMDQ2IDAgMCAwIC43NDMgNy4wOTcgNS45OCA1Ljk4IDAgMCAwIC41MSA0LjkxMSA2LjA1MSA2LjA1MSAwIDAgMCA2LjUxNSAyLjlBNS45ODUgNS45ODUgMCAwIDAgMTMuMjYgMjRhNi4wNTYgNi4wNTYgMCAwIDAgNS43NzItNC4yMDYgNS45OSA1Ljk5IDAgMCAwIDMuOTk4LTIuOSA2LjA1NiA2LjA1NiAwIDAgMC0uNzQ3LTcuMDczek0xMy4yNiAyMi40M2E0LjQ3NiA0LjQ3NiAwIDAgMS0yLjg3Ni0xLjA0bC4xNDItLjA4IDQuNzc4LTIuNzU4YS43OTUuNzk1IDAgMCAwIC4zOTMtLjY4MXYtNi43MzdsMi4wMiAxLjE2OGEuMDcxLjA3MSAwIDAgMSAuMDM4LjA1MnY1LjU4M2E0LjUwNCA0LjUwNCAwIDAgMS00LjQ5NSA0LjQ5NHpNMy42IDE4LjMwNGE0LjQ3IDQuNDcgMCAwIDEtLjUzNS0zLjAxNGwuMTQyLjA4NSA0Ljc4MyAyLjc1OWEuNzcxLjc3MSAwIDAgMCAuNzgxIDBsNS44NDMtMy4zNjl2Mi4zMzJhLjA4LjA4IDAgMCAxLS4wMzMuMDYyTDkuNzQgMTkuOTVhNC41IDQuNSAwIDAgMS02LjE0LTEuNjQ2ek0yLjM0IDcuODk2YTQuNDg1IDQuNDg1IDAgMCAxIDIuMzY2LTEuOTczVjExLjZhLjc2Ni43NjYgMCAwIDAgLjM4OC42NzdsNS44MTUgMy4zNTQtMi4wMiAxLjE2OGEuMDc2LjA3NiAwIDAgMS0uMDcyIDBsLTQuODMtMi43ODZBNC41MDQgNC41MDQgMCAwIDEgMi4zNCA3Ljg3MnptMTYuNTk3IDMuODU1LTUuODMzLTMuMzg3IDIuMDE2LTEuMTY1YS4wNzYuMDc2IDAgMCAxIC4wNzEgMGw0LjgzIDIuNzkxYTQuNDk0IDQuNDk0IDAgMCAxLS42NzYgOC4xMDR2LTUuNjc3YS43OS43OSAwIDAgMC0uNDA3LS42Njd6bTIuMDEtMy4wMjMtLjE0MS0uMDg1LTQuNzc0LTIuNzgyYS43NzYuNzc2IDAgMCAwLS43ODUgMEw5LjQwOSA5LjIzVjYuODk3YS4wNjYuMDY2IDAgMCAxIC4wMjgtLjA2Mmw0LjgzLTIuNzg3YTQuNDk5IDQuNDk5IDAgMCAxIDYuNjggNC42NnpNOC4zMDcgMTIuODYzbC0yLjAyLTEuMTY0YS4wOC4wOCAwIDAgMS0uMDM4LS4wNTdWNi4wNzRhNC40OTkgNC40OTkgMCAwIDEgNy4zNzYtMy40NTRsLS4xNDIuMDgtNC43NzggMi43NThhLjc5NS43OTUgMCAwIDAtLjM5My42ODJ6bTEuMDk3LTIuMzY2IDIuNjAyLTEuNSAyLjYwNyAxLjV2Mi45OTlsLTIuNTk3IDEuNS0yLjYwNy0xLjVaIi8%2BPC9zdmc%2B)](https://www.npmjs.com/package/@claude-flow/codex)
17
17
  [![πŸ•ΈοΈ RuVector Graph Ai](https://img.shields.io/badge/RuVector_Agentic-DB-06b6d4?style=for-the-badge&logoColor=white&logo=graphql)](https://github.com/ruvnet/ruvector)
18
18
 
19
+ [![RuFlo Agentic Appliance](v3/docs/assets/RuFlo-agentic-appliance.png)](https://cognitum.one/appliance)
20
+
19
21
  [![ruFlo Summit β€” Budapest, June 2–3, 2026](v3/docs/assets/ruFlo-Summit.jpg)](https://github.com/ruvnet/ruflo/issues/1967)
20
22
 
21
23
  # Ruflo
@@ -3,6 +3,7 @@
3
3
  * Creates utility scripts in .claude/helpers/
4
4
  */
5
5
  import type { InitOptions } from './types.js';
6
+ export declare const ATTRIBUTION_FOOTER = "\uD83E\uDD16 Generated with [RuFlo](https://github.com/ruvnet/ruflo)";
6
7
  /**
7
8
  * Generate pre-commit hook script
8
9
  */
@@ -3,6 +3,12 @@
3
3
  * Creates utility scripts in .claude/helpers/
4
4
  */
5
5
  import { generateStatuslineScript, generateStatuslineHook } from './statusline-generator.js';
6
+ // ADR-127 Phase 4 β€” attribution is opt-in (#1670 / #2089).
7
+ // When the user passes --attribution (options.attribution === true),
8
+ // this footer is available for injection into generated content such as
9
+ // PR body templates and release notes. It is NEVER hard-wired into the
10
+ // static command-file templates β€” those are user-owned content.
11
+ export const ATTRIBUTION_FOOTER = 'πŸ€– Generated with [RuFlo](https://github.com/ruvnet/ruflo)';
6
12
  /**
7
13
  * Generate pre-commit hook script
8
14
  */
@@ -1175,6 +1181,13 @@ export function generateHelpers(options) {
1175
1181
  // Windows-specific scripts
1176
1182
  helpers['daemon-manager.ps1'] = generateWindowsDaemonManager();
1177
1183
  helpers['daemon-manager.cmd'] = generateWindowsBatchWrapper();
1184
+ // ADR-127 Phase 4 β€” expose the attribution footer as a helper file only
1185
+ // when the user explicitly opts in. The file content is the single-line
1186
+ // string so init-generated PR templates can `cat .claude/helpers/attribution`
1187
+ // and append it conditionally without hard-wiring the string everywhere.
1188
+ if (options.attribution === true) {
1189
+ helpers['attribution'] = ATTRIBUTION_FOOTER + '\n';
1190
+ }
1178
1191
  }
1179
1192
  if (options.components.statusline) {
1180
1193
  helpers['statusline.cjs'] = generateStatuslineScript(options); // .cjs for ES module compatibility
@@ -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: RuFlo <ruv@ruv.net>',
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
  }
@@ -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 loadRuvllmWasm();
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 };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-flow/cli",
3
- "version": "3.7.0-alpha.72",
3
+ "version": "3.7.0-alpha.74",
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",