claude-flow 3.7.0-alpha.73 → 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.
- package/.claude/agents/github/code-review-swarm.md +1 -1
- package/.claude/agents/github/issue-tracker.md +3 -3
- package/.claude/agents/github/release-manager.md +6 -4
- package/.claude/agents/github/release-swarm.md +2 -2
- package/.claude/agents/github/repo-architect.md +3 -3
- package/.claude/agents/github/swarm-issue.md +4 -1
- package/.claude/agents/github/swarm-pr.md +6 -3
- package/.claude/agents/github/sync-coordinator.md +3 -1
- package/.claude/agents/github/workflow-automation.md +2 -2
- package/.claude/helpers/github-safe.js +85 -37
- package/.claude/helpers/github-setup.sh +26 -9
- package/.claude/skills/github-code-review/SKILL.md +2 -2
- package/.claude/skills/github-multi-repo/SKILL.md +2 -2
- package/.claude/skills/github-project-management/SKILL.md +2 -3
- package/.claude/skills/github-release-management/SKILL.md +2 -2
- package/.claude/skills/github-workflow-automation/SKILL.md +6 -6
- package/.claude/skills/verification-quality/SKILL.md +1 -1
- package/package.json +1 -1
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.d.ts +1 -0
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +13 -0
- package/v3/@claude-flow/cli/package.json +1 -1
|
@@ -95,7 +95,7 @@ mcp__github__add_issue_comment {
|
|
|
95
95
|
- Final validation and merge preparation
|
|
96
96
|
|
|
97
97
|
---
|
|
98
|
-
|
|
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,
|
|
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
|
-
|
|
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@
|
|
313
|
+
- uses: actions/checkout@v4
|
|
312
314
|
- name: Setup Node.js
|
|
313
|
-
uses: actions/setup-node@
|
|
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,
|
|
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@
|
|
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,
|
|
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@
|
|
155
|
-
- uses: actions/setup-node@
|
|
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
|
-
|
|
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@
|
|
54
|
+
- uses: actions/checkout@v4
|
|
55
55
|
- name: Handle Swarm Command
|
|
56
56
|
run: |
|
|
57
|
-
|
|
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 "$
|
|
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
|
-
|
|
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@
|
|
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@
|
|
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
|
-
*
|
|
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
|
|
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
|
|
48
|
+
This helper prevents injection issues with special characters:
|
|
31
49
|
- Backticks in code examples
|
|
32
|
-
- Command substitution
|
|
33
|
-
-
|
|
34
|
-
-
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
|
|
116
|
+
|
|
117
|
+
execSync(ghCommand, {
|
|
84
118
|
stdio: 'inherit',
|
|
85
|
-
timeout: 30000
|
|
119
|
+
timeout: 30000,
|
|
86
120
|
});
|
|
87
|
-
|
|
121
|
+
|
|
88
122
|
} catch (error) {
|
|
89
|
-
console.error('
|
|
123
|
+
console.error('[ERROR]', error.message);
|
|
90
124
|
process.exit(1);
|
|
91
125
|
} finally {
|
|
92
|
-
//
|
|
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
|
|
101
|
-
|
|
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
|
-
//
|
|
105
|
-
|
|
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 "
|
|
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 "
|
|
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 "
|
|
13
|
-
|
|
14
|
-
# Check auth status
|
|
15
|
-
|
|
16
|
-
|
|
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 "
|
|
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 "
|
|
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@
|
|
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@
|
|
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@
|
|
335
|
-
- uses: actions/setup-node@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
874
|
+
- uses: actions/checkout@v4
|
|
875
875
|
with:
|
|
876
876
|
fetch-depth: 0
|
|
877
877
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-flow",
|
|
3
|
-
"version": "3.7.0-alpha.
|
|
3
|
+
"version": "3.7.0-alpha.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",
|
|
@@ -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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claude-flow/cli",
|
|
3
|
-
"version": "3.7.0-alpha.
|
|
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",
|