devflow-kit 1.3.2 → 1.4.0
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/CHANGELOG.md +25 -0
- package/dist/commands/init.js +26 -3
- package/dist/utils/post-install.d.ts +1 -1
- package/dist/utils/post-install.js +2 -9
- package/package.json +1 -1
- package/plugins/devflow-accessibility/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +4 -1
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +4 -1
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-code-review/agents/git.md +13 -8
- package/plugins/devflow-code-review/commands/code-review-teams.md +4 -4
- package/plugins/devflow-code-review/commands/code-review.md +4 -4
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-debug/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-debug/agents/git.md +13 -8
- package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-go/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-implement/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-implement/agents/git.md +13 -8
- package/plugins/devflow-implement/commands/implement-teams.md +5 -6
- package/plugins/devflow-implement/commands/implement.md +5 -6
- package/plugins/devflow-java/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-python/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-react/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-resolve/agents/git.md +13 -8
- package/plugins/devflow-rust/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +4 -1
- package/plugins/devflow-specify/.claude-plugin/plugin.json +2 -3
- package/plugins/devflow-typescript/.claude-plugin/plugin.json +2 -3
- package/shared/agents/git.md +13 -8
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,29 @@ All notable changes to DevFlow will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.4.0] - 2026-03-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Smart branch naming** — `/implement #42` auto-derives branch names from issue labels and title (e.g., `feature/42-add-jwt-auth`); free-text tasks infer type from keywords (e.g., `/implement fix login bug` → `fix/login-bug`)
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- **Code review file detection** — Corrected file detection and skill check logic in `/code-review`
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- **Author standardization** — Unified author name to Dean0x across marketplace and plugin manifests
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## [1.3.3] - 2026-03-09
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- **Sudo trust prompt** — Managed settings now shows a clear explanation, a copy-pasteable verification prompt, and an explicit fallback option before any password prompt
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- **Managed settings test coverage** — Unit tests for `installManagedSettings` two-stage write logic
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
8
31
|
## [1.3.2] - 2026-03-08
|
|
9
32
|
|
|
10
33
|
### Changed
|
|
@@ -830,6 +853,8 @@ devflow init
|
|
|
830
853
|
|
|
831
854
|
---
|
|
832
855
|
|
|
856
|
+
[1.4.0]: https://github.com/dean0x/devflow/compare/v1.3.3...v1.4.0
|
|
857
|
+
[1.3.3]: https://github.com/dean0x/devflow/compare/v1.3.2...v1.3.3
|
|
833
858
|
[1.3.2]: https://github.com/dean0x/devflow/compare/v1.3.1...v1.3.2
|
|
834
859
|
[1.3.1]: https://github.com/dean0x/devflow/compare/v1.3.0...v1.3.1
|
|
835
860
|
[1.3.0]: https://github.com/dean0x/devflow/compare/v1.2.0...v1.3.0
|
package/dist/commands/init.js
CHANGED
|
@@ -359,9 +359,32 @@ export const initCommand = new Command('init')
|
|
|
359
359
|
// Attempt managed settings write if user chose managed mode
|
|
360
360
|
let effectiveSecurityMode = securityMode;
|
|
361
361
|
if (securityMode === 'managed') {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
362
|
+
p.note('This writes a read-only security deny list to a system directory\n' +
|
|
363
|
+
'and may prompt for your password (sudo).\n\n' +
|
|
364
|
+
'Not sure about this? Paste this into another Claude Code session:\n\n' +
|
|
365
|
+
' "I\'m installing DevFlow and it wants to write a\n' +
|
|
366
|
+
' managed-settings.json file using sudo. Review the source\n' +
|
|
367
|
+
' at https://github.com/dean0x/devflow and tell me if\n' +
|
|
368
|
+
' it\'s safe."', 'Managed Settings');
|
|
369
|
+
const sudoChoice = await p.select({
|
|
370
|
+
message: 'Continue with managed settings?',
|
|
371
|
+
options: [
|
|
372
|
+
{ value: 'yes', label: 'Yes, continue', hint: 'May prompt for your password' },
|
|
373
|
+
{ value: 'no', label: 'No, fall back to settings.json', hint: 'Deny list stored in editable user settings instead' },
|
|
374
|
+
],
|
|
375
|
+
});
|
|
376
|
+
if (p.isCancel(sudoChoice)) {
|
|
377
|
+
p.cancel('Installation cancelled.');
|
|
378
|
+
process.exit(0);
|
|
379
|
+
}
|
|
380
|
+
if (sudoChoice === 'yes') {
|
|
381
|
+
const managed = await installManagedSettings(rootDir, verbose);
|
|
382
|
+
if (!managed) {
|
|
383
|
+
p.log.warn('Managed settings write failed — falling back to user settings');
|
|
384
|
+
effectiveSecurityMode = 'user';
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
365
388
|
effectiveSecurityMode = 'user';
|
|
366
389
|
}
|
|
367
390
|
}
|
|
@@ -28,7 +28,7 @@ export declare function mergeDenyList(existingJson: string, newDenyEntries: stri
|
|
|
28
28
|
*
|
|
29
29
|
* Strategy:
|
|
30
30
|
* 1. Try direct write (works if running as root or directory is writable)
|
|
31
|
-
* 2. If EACCES in TTY,
|
|
31
|
+
* 2. If EACCES in TTY, retry with sudo (caller is responsible for obtaining consent)
|
|
32
32
|
* 3. Returns true if managed settings were written, false if caller should fall back
|
|
33
33
|
*/
|
|
34
34
|
export declare function installManagedSettings(rootDir: string, verbose: boolean): Promise<boolean>;
|
|
@@ -67,7 +67,7 @@ export function mergeDenyList(existingJson, newDenyEntries) {
|
|
|
67
67
|
*
|
|
68
68
|
* Strategy:
|
|
69
69
|
* 1. Try direct write (works if running as root or directory is writable)
|
|
70
|
-
* 2. If EACCES in TTY,
|
|
70
|
+
* 2. If EACCES in TTY, retry with sudo (caller is responsible for obtaining consent)
|
|
71
71
|
* 3. Returns true if managed settings were written, false if caller should fall back
|
|
72
72
|
*/
|
|
73
73
|
export async function installManagedSettings(rootDir, verbose) {
|
|
@@ -118,17 +118,10 @@ export async function installManagedSettings(rootDir, verbose) {
|
|
|
118
118
|
return false;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
-
// Attempt 2: sudo (TTY only)
|
|
121
|
+
// Attempt 2: sudo (TTY only — sudo needs terminal for password prompt)
|
|
122
122
|
if (!process.stdin.isTTY) {
|
|
123
123
|
return false;
|
|
124
124
|
}
|
|
125
|
-
const confirmed = await p.confirm({
|
|
126
|
-
message: `Managed settings require admin access (${managedDir}). Use sudo?`,
|
|
127
|
-
initialValue: true,
|
|
128
|
-
});
|
|
129
|
-
if (p.isCancel(confirmed) || !confirmed) {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
125
|
try {
|
|
133
126
|
execSync(`sudo mkdir -p '${managedDir}'`, { stdio: 'inherit' });
|
|
134
127
|
// Write via sudo tee to avoid shell quoting issues with the JSON content
|
package/package.json
CHANGED
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-accessibility",
|
|
3
3
|
"description": "Web accessibility patterns - WCAG compliance, ARIA roles, keyboard navigation, focus management",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-code-review",
|
|
3
3
|
"description": "Comprehensive code review with parallel specialized agents covering security, architecture, performance, and more",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -21,7 +21,7 @@ The orchestrator provides:
|
|
|
21
21
|
|-----------|---------|----------------|
|
|
22
22
|
| `ensure-pr-ready` | Pre-flight for /review: commit, push, create PR | - |
|
|
23
23
|
| `validate-branch` | Pre-flight for /resolve: check branch state | - |
|
|
24
|
-
| `setup-task` | Create feature branch and fetch issue | `
|
|
24
|
+
| `setup-task` | Create feature branch and fetch issue | `BASE_BRANCH`, `ISSUE_INPUT` (optional), `TASK_DESCRIPTION` (optional) |
|
|
25
25
|
| `fetch-issue` | Fetch GitHub issue for implementation | `ISSUE_INPUT` (number or search term) |
|
|
26
26
|
| `comment-pr` | Create PR inline comments for review findings | `PR_NUMBER`, `REVIEW_BASE_DIR`, `TIMESTAMP` |
|
|
27
27
|
| `manage-debt` | Update tech debt backlog with pre-existing issues | `REVIEW_DIR`, `TIMESTAMP` |
|
|
@@ -101,25 +101,30 @@ Pre-flight validation for `/resolve`. Checks branch state without modifications.
|
|
|
101
101
|
|
|
102
102
|
## Operation: setup-task
|
|
103
103
|
|
|
104
|
-
Set up task environment: create feature branch and optionally fetch issue.
|
|
104
|
+
Set up task environment: derive branch name, create feature branch, and optionally fetch issue.
|
|
105
105
|
|
|
106
106
|
**Input:**
|
|
107
|
-
- `TASK_ID`: Unique task identifier (becomes branch name)
|
|
108
107
|
- `BASE_BRANCH`: Branch to create from (track this for PR target)
|
|
109
108
|
- `ISSUE_INPUT` (optional): Issue number to fetch
|
|
109
|
+
- `TASK_DESCRIPTION` (optional): Free-text task description (when no issue)
|
|
110
110
|
|
|
111
111
|
**Process:**
|
|
112
112
|
1. Record current branch as BASE_BRANCH for later PR targeting
|
|
113
|
-
2.
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
2. **Derive branch name:**
|
|
114
|
+
- If `ISSUE_INPUT` provided: fetch issue via GitHub API first, then derive branch name as `{type}/{number}-{slug}` where:
|
|
115
|
+
- `type` is inferred from issue labels: `bug` → `fix`, `documentation` or `docs` → `docs`, `refactor` → `refactor`, `chore` or `maintenance` → `chore`, default → `feature`
|
|
116
|
+
- `slug` is the issue title: lowercased, non-alphanumeric replaced with hyphens, consecutive hyphens collapsed, trimmed, max 40 characters
|
|
117
|
+
- If `TASK_DESCRIPTION` provided (no issue): infer type from description keywords (e.g., "fix login bug" → `fix`, "refactor auth" → `refactor`, "add JWT" → `feature`, "update docs" → `docs`, "chore: cleanup" → `chore`), then slugify description as `{type}/{slug}` (max 40 chars)
|
|
118
|
+
- If neither: fallback to `task-{YYYY-MM-DD_HHMM}`
|
|
119
|
+
3. Create and checkout feature branch: `git checkout -b {derived-branch-name}`
|
|
120
|
+
4. Return setup summary with branch name and BASE_BRANCH recorded
|
|
116
121
|
|
|
117
122
|
**Output:**
|
|
118
123
|
```markdown
|
|
119
|
-
## Task Setup: {
|
|
124
|
+
## Task Setup: {branch-name}
|
|
120
125
|
|
|
121
126
|
### Branch
|
|
122
|
-
- **
|
|
127
|
+
- **Branch name**: {derived-branch-name}
|
|
123
128
|
- **Base branch**: {BASE_BRANCH} (PR target)
|
|
124
129
|
|
|
125
130
|
### Issue (if fetched)
|
|
@@ -38,9 +38,9 @@ Detect file types in diff to determine conditional reviews:
|
|
|
38
38
|
|
|
39
39
|
| Condition | Adds Perspective |
|
|
40
40
|
|-----------|-----------------|
|
|
41
|
-
| .ts
|
|
42
|
-
| .tsx
|
|
43
|
-
| .tsx
|
|
41
|
+
| Any .ts or .tsx files | typescript |
|
|
42
|
+
| .tsx or .jsx files (React components) | react |
|
|
43
|
+
| .tsx or .jsx files (React components) | accessibility |
|
|
44
44
|
| .tsx/.jsx/.css/.scss files | frontend-design |
|
|
45
45
|
| .go files | go |
|
|
46
46
|
| .java files | java |
|
|
@@ -50,7 +50,7 @@ Detect file types in diff to determine conditional reviews:
|
|
|
50
50
|
| Dependency files changed | dependencies |
|
|
51
51
|
| Docs or significant code | documentation |
|
|
52
52
|
|
|
53
|
-
**Skill availability check**: Language/ecosystem reviews (typescript, react, accessibility, frontend-design, go, java, python, rust) require their optional skill plugin to be installed. Before adding a conditional perspective, check if `~/.claude/skills/{focus}/SKILL.md` exists
|
|
53
|
+
**Skill availability check**: Language/ecosystem reviews (typescript, react, accessibility, frontend-design, go, java, python, rust) require their optional skill plugin to be installed. Before adding a conditional perspective, use Read to check if `~/.claude/skills/{focus}/SKILL.md` exists. If Read returns an error (file not found), **skip that perspective** — the language plugin isn't installed. Non-language reviews (database, dependencies, documentation) use skills bundled with this plugin and are always available.
|
|
54
54
|
|
|
55
55
|
### Phase 2: Spawn Review Team
|
|
56
56
|
|
|
@@ -38,9 +38,9 @@ Detect file types in diff to determine conditional reviews:
|
|
|
38
38
|
|
|
39
39
|
| Condition | Adds Review |
|
|
40
40
|
|-----------|-------------|
|
|
41
|
-
| .ts
|
|
42
|
-
| .tsx
|
|
43
|
-
| .tsx
|
|
41
|
+
| Any .ts or .tsx files | typescript |
|
|
42
|
+
| .tsx or .jsx files (React components) | react |
|
|
43
|
+
| .tsx or .jsx files (React components) | accessibility |
|
|
44
44
|
| .tsx/.jsx/.css/.scss files | frontend-design |
|
|
45
45
|
| .go files | go |
|
|
46
46
|
| .java files | java |
|
|
@@ -50,7 +50,7 @@ Detect file types in diff to determine conditional reviews:
|
|
|
50
50
|
| Dependency files changed | dependencies |
|
|
51
51
|
| Docs or significant code | documentation |
|
|
52
52
|
|
|
53
|
-
**Skill availability check**: Language/ecosystem reviews (typescript, react, accessibility, frontend-design, go, java, python, rust) require their optional skill plugin to be installed. Before spawning a conditional Reviewer for these focuses, check if `~/.claude/skills/{focus}/SKILL.md` exists
|
|
53
|
+
**Skill availability check**: Language/ecosystem reviews (typescript, react, accessibility, frontend-design, go, java, python, rust) require their optional skill plugin to be installed. Before spawning a conditional Reviewer for these focuses, use Read to check if `~/.claude/skills/{focus}/SKILL.md` exists. If Read returns an error (file not found), **skip that review** — the language plugin isn't installed. Non-language reviews (database, dependencies, documentation) use skills bundled with this plugin and are always available.
|
|
54
54
|
|
|
55
55
|
### Phase 2: Run Reviews (Parallel)
|
|
56
56
|
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-core-skills",
|
|
3
3
|
"description": "Auto-activating quality enforcement skills - foundation layer for all DevFlow plugins",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-debug",
|
|
3
3
|
"description": "Debugging workflows with competing hypothesis investigation using agent teams",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -21,7 +21,7 @@ The orchestrator provides:
|
|
|
21
21
|
|-----------|---------|----------------|
|
|
22
22
|
| `ensure-pr-ready` | Pre-flight for /review: commit, push, create PR | - |
|
|
23
23
|
| `validate-branch` | Pre-flight for /resolve: check branch state | - |
|
|
24
|
-
| `setup-task` | Create feature branch and fetch issue | `
|
|
24
|
+
| `setup-task` | Create feature branch and fetch issue | `BASE_BRANCH`, `ISSUE_INPUT` (optional), `TASK_DESCRIPTION` (optional) |
|
|
25
25
|
| `fetch-issue` | Fetch GitHub issue for implementation | `ISSUE_INPUT` (number or search term) |
|
|
26
26
|
| `comment-pr` | Create PR inline comments for review findings | `PR_NUMBER`, `REVIEW_BASE_DIR`, `TIMESTAMP` |
|
|
27
27
|
| `manage-debt` | Update tech debt backlog with pre-existing issues | `REVIEW_DIR`, `TIMESTAMP` |
|
|
@@ -101,25 +101,30 @@ Pre-flight validation for `/resolve`. Checks branch state without modifications.
|
|
|
101
101
|
|
|
102
102
|
## Operation: setup-task
|
|
103
103
|
|
|
104
|
-
Set up task environment: create feature branch and optionally fetch issue.
|
|
104
|
+
Set up task environment: derive branch name, create feature branch, and optionally fetch issue.
|
|
105
105
|
|
|
106
106
|
**Input:**
|
|
107
|
-
- `TASK_ID`: Unique task identifier (becomes branch name)
|
|
108
107
|
- `BASE_BRANCH`: Branch to create from (track this for PR target)
|
|
109
108
|
- `ISSUE_INPUT` (optional): Issue number to fetch
|
|
109
|
+
- `TASK_DESCRIPTION` (optional): Free-text task description (when no issue)
|
|
110
110
|
|
|
111
111
|
**Process:**
|
|
112
112
|
1. Record current branch as BASE_BRANCH for later PR targeting
|
|
113
|
-
2.
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
2. **Derive branch name:**
|
|
114
|
+
- If `ISSUE_INPUT` provided: fetch issue via GitHub API first, then derive branch name as `{type}/{number}-{slug}` where:
|
|
115
|
+
- `type` is inferred from issue labels: `bug` → `fix`, `documentation` or `docs` → `docs`, `refactor` → `refactor`, `chore` or `maintenance` → `chore`, default → `feature`
|
|
116
|
+
- `slug` is the issue title: lowercased, non-alphanumeric replaced with hyphens, consecutive hyphens collapsed, trimmed, max 40 characters
|
|
117
|
+
- If `TASK_DESCRIPTION` provided (no issue): infer type from description keywords (e.g., "fix login bug" → `fix`, "refactor auth" → `refactor`, "add JWT" → `feature`, "update docs" → `docs`, "chore: cleanup" → `chore`), then slugify description as `{type}/{slug}` (max 40 chars)
|
|
118
|
+
- If neither: fallback to `task-{YYYY-MM-DD_HHMM}`
|
|
119
|
+
3. Create and checkout feature branch: `git checkout -b {derived-branch-name}`
|
|
120
|
+
4. Return setup summary with branch name and BASE_BRANCH recorded
|
|
116
121
|
|
|
117
122
|
**Output:**
|
|
118
123
|
```markdown
|
|
119
|
-
## Task Setup: {
|
|
124
|
+
## Task Setup: {branch-name}
|
|
120
125
|
|
|
121
126
|
### Branch
|
|
122
|
-
- **
|
|
127
|
+
- **Branch name**: {derived-branch-name}
|
|
123
128
|
- **Base branch**: {BASE_BRANCH} (PR target)
|
|
124
129
|
|
|
125
130
|
### Issue (if fetched)
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-frontend-design",
|
|
3
3
|
"description": "Frontend design patterns - typography, color systems, spacing, motion, responsive design",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-go",
|
|
3
3
|
"description": "Go language patterns - error handling, interfaces, concurrency, package design",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-implement",
|
|
3
3
|
"description": "Complete task implementation workflow - orchestrates exploration, planning, coding, validation, and PR creation",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -21,7 +21,7 @@ The orchestrator provides:
|
|
|
21
21
|
|-----------|---------|----------------|
|
|
22
22
|
| `ensure-pr-ready` | Pre-flight for /review: commit, push, create PR | - |
|
|
23
23
|
| `validate-branch` | Pre-flight for /resolve: check branch state | - |
|
|
24
|
-
| `setup-task` | Create feature branch and fetch issue | `
|
|
24
|
+
| `setup-task` | Create feature branch and fetch issue | `BASE_BRANCH`, `ISSUE_INPUT` (optional), `TASK_DESCRIPTION` (optional) |
|
|
25
25
|
| `fetch-issue` | Fetch GitHub issue for implementation | `ISSUE_INPUT` (number or search term) |
|
|
26
26
|
| `comment-pr` | Create PR inline comments for review findings | `PR_NUMBER`, `REVIEW_BASE_DIR`, `TIMESTAMP` |
|
|
27
27
|
| `manage-debt` | Update tech debt backlog with pre-existing issues | `REVIEW_DIR`, `TIMESTAMP` |
|
|
@@ -101,25 +101,30 @@ Pre-flight validation for `/resolve`. Checks branch state without modifications.
|
|
|
101
101
|
|
|
102
102
|
## Operation: setup-task
|
|
103
103
|
|
|
104
|
-
Set up task environment: create feature branch and optionally fetch issue.
|
|
104
|
+
Set up task environment: derive branch name, create feature branch, and optionally fetch issue.
|
|
105
105
|
|
|
106
106
|
**Input:**
|
|
107
|
-
- `TASK_ID`: Unique task identifier (becomes branch name)
|
|
108
107
|
- `BASE_BRANCH`: Branch to create from (track this for PR target)
|
|
109
108
|
- `ISSUE_INPUT` (optional): Issue number to fetch
|
|
109
|
+
- `TASK_DESCRIPTION` (optional): Free-text task description (when no issue)
|
|
110
110
|
|
|
111
111
|
**Process:**
|
|
112
112
|
1. Record current branch as BASE_BRANCH for later PR targeting
|
|
113
|
-
2.
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
2. **Derive branch name:**
|
|
114
|
+
- If `ISSUE_INPUT` provided: fetch issue via GitHub API first, then derive branch name as `{type}/{number}-{slug}` where:
|
|
115
|
+
- `type` is inferred from issue labels: `bug` → `fix`, `documentation` or `docs` → `docs`, `refactor` → `refactor`, `chore` or `maintenance` → `chore`, default → `feature`
|
|
116
|
+
- `slug` is the issue title: lowercased, non-alphanumeric replaced with hyphens, consecutive hyphens collapsed, trimmed, max 40 characters
|
|
117
|
+
- If `TASK_DESCRIPTION` provided (no issue): infer type from description keywords (e.g., "fix login bug" → `fix`, "refactor auth" → `refactor`, "add JWT" → `feature`, "update docs" → `docs`, "chore: cleanup" → `chore`), then slugify description as `{type}/{slug}` (max 40 chars)
|
|
118
|
+
- If neither: fallback to `task-{YYYY-MM-DD_HHMM}`
|
|
119
|
+
3. Create and checkout feature branch: `git checkout -b {derived-branch-name}`
|
|
120
|
+
4. Return setup summary with branch name and BASE_BRANCH recorded
|
|
116
121
|
|
|
117
122
|
**Output:**
|
|
118
123
|
```markdown
|
|
119
|
-
## Task Setup: {
|
|
124
|
+
## Task Setup: {branch-name}
|
|
120
125
|
|
|
121
126
|
### Branch
|
|
122
|
-
- **
|
|
127
|
+
- **Branch name**: {derived-branch-name}
|
|
123
128
|
- **Base branch**: {BASE_BRANCH} (PR target)
|
|
124
129
|
|
|
125
130
|
### Issue (if fetched)
|
|
@@ -27,21 +27,20 @@ Orchestrate a single task from exploration through implementation by spawning sp
|
|
|
27
27
|
|
|
28
28
|
Record the current branch name as `BASE_BRANCH` - this will be the PR target.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Spawn Git agent to set up task environment:
|
|
30
|
+
Spawn Git agent to set up task environment. The Git agent derives the branch name automatically from the issue or task description:
|
|
33
31
|
|
|
34
32
|
```
|
|
35
33
|
Task(subagent_type="Git"):
|
|
36
34
|
"OPERATION: setup-task
|
|
37
|
-
TASK_ID: {task-id}
|
|
38
35
|
BASE_BRANCH: {current branch name}
|
|
39
|
-
ISSUE_INPUT: {issue number if
|
|
40
|
-
|
|
36
|
+
ISSUE_INPUT: {issue number if $ARGUMENTS starts with #, otherwise omit}
|
|
37
|
+
TASK_DESCRIPTION: {task description from $ARGUMENTS if not an issue number, otherwise omit}
|
|
38
|
+
Derive branch name from issue or description, create feature branch, and fetch issue if specified.
|
|
41
39
|
Return the branch setup summary."
|
|
42
40
|
```
|
|
43
41
|
|
|
44
42
|
**Capture from Git agent output** (used throughout flow):
|
|
43
|
+
- `TASK_ID`: The branch name created by Git agent (use as TASK_ID for rest of flow)
|
|
45
44
|
- `BASE_BRANCH`: Branch this feature was created from (for PR target)
|
|
46
45
|
- `ISSUE_NUMBER`: GitHub issue number (if provided)
|
|
47
46
|
- `ISSUE_CONTENT`: Full issue body including description (if provided)
|
|
@@ -27,21 +27,20 @@ Orchestrate a single task from exploration through implementation by spawning sp
|
|
|
27
27
|
|
|
28
28
|
Record the current branch name as `BASE_BRANCH` - this will be the PR target.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Spawn Git agent to set up task environment:
|
|
30
|
+
Spawn Git agent to set up task environment. The Git agent derives the branch name automatically from the issue or task description:
|
|
33
31
|
|
|
34
32
|
```
|
|
35
33
|
Task(subagent_type="Git"):
|
|
36
34
|
"OPERATION: setup-task
|
|
37
|
-
TASK_ID: {task-id}
|
|
38
35
|
BASE_BRANCH: {current branch name}
|
|
39
|
-
ISSUE_INPUT: {issue number if
|
|
40
|
-
|
|
36
|
+
ISSUE_INPUT: {issue number if $ARGUMENTS starts with #, otherwise omit}
|
|
37
|
+
TASK_DESCRIPTION: {task description from $ARGUMENTS if not an issue number, otherwise omit}
|
|
38
|
+
Derive branch name from issue or description, create feature branch, and fetch issue if specified.
|
|
41
39
|
Return the branch setup summary."
|
|
42
40
|
```
|
|
43
41
|
|
|
44
42
|
**Capture from Git agent output** (used throughout flow):
|
|
43
|
+
- `TASK_ID`: The branch name created by Git agent (use as TASK_ID for rest of flow)
|
|
45
44
|
- `BASE_BRANCH`: Branch this feature was created from (for PR target)
|
|
46
45
|
- `ISSUE_NUMBER`: GitHub issue number (if provided)
|
|
47
46
|
- `ISSUE_CONTENT`: Full issue body including description (if provided)
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-java",
|
|
3
3
|
"description": "Java language patterns - records, sealed classes, composition, modern Java features",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-python",
|
|
3
3
|
"description": "Python language patterns - type hints, protocols, dataclasses, async programming",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-react",
|
|
3
3
|
"description": "React framework patterns - hooks, state management, composition, performance",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-resolve",
|
|
3
3
|
"description": "Process and fix code review issues with risk assessment - decides FIX vs TECH_DEBT based on impact",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -21,7 +21,7 @@ The orchestrator provides:
|
|
|
21
21
|
|-----------|---------|----------------|
|
|
22
22
|
| `ensure-pr-ready` | Pre-flight for /review: commit, push, create PR | - |
|
|
23
23
|
| `validate-branch` | Pre-flight for /resolve: check branch state | - |
|
|
24
|
-
| `setup-task` | Create feature branch and fetch issue | `
|
|
24
|
+
| `setup-task` | Create feature branch and fetch issue | `BASE_BRANCH`, `ISSUE_INPUT` (optional), `TASK_DESCRIPTION` (optional) |
|
|
25
25
|
| `fetch-issue` | Fetch GitHub issue for implementation | `ISSUE_INPUT` (number or search term) |
|
|
26
26
|
| `comment-pr` | Create PR inline comments for review findings | `PR_NUMBER`, `REVIEW_BASE_DIR`, `TIMESTAMP` |
|
|
27
27
|
| `manage-debt` | Update tech debt backlog with pre-existing issues | `REVIEW_DIR`, `TIMESTAMP` |
|
|
@@ -101,25 +101,30 @@ Pre-flight validation for `/resolve`. Checks branch state without modifications.
|
|
|
101
101
|
|
|
102
102
|
## Operation: setup-task
|
|
103
103
|
|
|
104
|
-
Set up task environment: create feature branch and optionally fetch issue.
|
|
104
|
+
Set up task environment: derive branch name, create feature branch, and optionally fetch issue.
|
|
105
105
|
|
|
106
106
|
**Input:**
|
|
107
|
-
- `TASK_ID`: Unique task identifier (becomes branch name)
|
|
108
107
|
- `BASE_BRANCH`: Branch to create from (track this for PR target)
|
|
109
108
|
- `ISSUE_INPUT` (optional): Issue number to fetch
|
|
109
|
+
- `TASK_DESCRIPTION` (optional): Free-text task description (when no issue)
|
|
110
110
|
|
|
111
111
|
**Process:**
|
|
112
112
|
1. Record current branch as BASE_BRANCH for later PR targeting
|
|
113
|
-
2.
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
2. **Derive branch name:**
|
|
114
|
+
- If `ISSUE_INPUT` provided: fetch issue via GitHub API first, then derive branch name as `{type}/{number}-{slug}` where:
|
|
115
|
+
- `type` is inferred from issue labels: `bug` → `fix`, `documentation` or `docs` → `docs`, `refactor` → `refactor`, `chore` or `maintenance` → `chore`, default → `feature`
|
|
116
|
+
- `slug` is the issue title: lowercased, non-alphanumeric replaced with hyphens, consecutive hyphens collapsed, trimmed, max 40 characters
|
|
117
|
+
- If `TASK_DESCRIPTION` provided (no issue): infer type from description keywords (e.g., "fix login bug" → `fix`, "refactor auth" → `refactor`, "add JWT" → `feature`, "update docs" → `docs`, "chore: cleanup" → `chore`), then slugify description as `{type}/{slug}` (max 40 chars)
|
|
118
|
+
- If neither: fallback to `task-{YYYY-MM-DD_HHMM}`
|
|
119
|
+
3. Create and checkout feature branch: `git checkout -b {derived-branch-name}`
|
|
120
|
+
4. Return setup summary with branch name and BASE_BRANCH recorded
|
|
116
121
|
|
|
117
122
|
**Output:**
|
|
118
123
|
```markdown
|
|
119
|
-
## Task Setup: {
|
|
124
|
+
## Task Setup: {branch-name}
|
|
120
125
|
|
|
121
126
|
### Branch
|
|
122
|
-
- **
|
|
127
|
+
- **Branch name**: {derived-branch-name}
|
|
123
128
|
- **Base branch**: {BASE_BRANCH} (PR target)
|
|
124
129
|
|
|
125
130
|
### Issue (if fetched)
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-rust",
|
|
3
3
|
"description": "Rust language patterns - ownership, borrowing, error handling, type-driven design",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-specify",
|
|
3
3
|
"description": "Interactive feature specification - creates well-defined GitHub issues through requirements exploration and clarification",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
"name": "devflow-typescript",
|
|
3
3
|
"description": "TypeScript language patterns - type safety, generics, utility types, type guards",
|
|
4
4
|
"author": {
|
|
5
|
-
"name": "
|
|
6
|
-
"email": "dean@keren.dev"
|
|
5
|
+
"name": "Dean0x"
|
|
7
6
|
},
|
|
8
|
-
"version": "1.
|
|
7
|
+
"version": "1.4.0",
|
|
9
8
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
9
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
10
|
"license": "MIT",
|
package/shared/agents/git.md
CHANGED
|
@@ -21,7 +21,7 @@ The orchestrator provides:
|
|
|
21
21
|
|-----------|---------|----------------|
|
|
22
22
|
| `ensure-pr-ready` | Pre-flight for /review: commit, push, create PR | - |
|
|
23
23
|
| `validate-branch` | Pre-flight for /resolve: check branch state | - |
|
|
24
|
-
| `setup-task` | Create feature branch and fetch issue | `
|
|
24
|
+
| `setup-task` | Create feature branch and fetch issue | `BASE_BRANCH`, `ISSUE_INPUT` (optional), `TASK_DESCRIPTION` (optional) |
|
|
25
25
|
| `fetch-issue` | Fetch GitHub issue for implementation | `ISSUE_INPUT` (number or search term) |
|
|
26
26
|
| `comment-pr` | Create PR inline comments for review findings | `PR_NUMBER`, `REVIEW_BASE_DIR`, `TIMESTAMP` |
|
|
27
27
|
| `manage-debt` | Update tech debt backlog with pre-existing issues | `REVIEW_DIR`, `TIMESTAMP` |
|
|
@@ -101,25 +101,30 @@ Pre-flight validation for `/resolve`. Checks branch state without modifications.
|
|
|
101
101
|
|
|
102
102
|
## Operation: setup-task
|
|
103
103
|
|
|
104
|
-
Set up task environment: create feature branch and optionally fetch issue.
|
|
104
|
+
Set up task environment: derive branch name, create feature branch, and optionally fetch issue.
|
|
105
105
|
|
|
106
106
|
**Input:**
|
|
107
|
-
- `TASK_ID`: Unique task identifier (becomes branch name)
|
|
108
107
|
- `BASE_BRANCH`: Branch to create from (track this for PR target)
|
|
109
108
|
- `ISSUE_INPUT` (optional): Issue number to fetch
|
|
109
|
+
- `TASK_DESCRIPTION` (optional): Free-text task description (when no issue)
|
|
110
110
|
|
|
111
111
|
**Process:**
|
|
112
112
|
1. Record current branch as BASE_BRANCH for later PR targeting
|
|
113
|
-
2.
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
2. **Derive branch name:**
|
|
114
|
+
- If `ISSUE_INPUT` provided: fetch issue via GitHub API first, then derive branch name as `{type}/{number}-{slug}` where:
|
|
115
|
+
- `type` is inferred from issue labels: `bug` → `fix`, `documentation` or `docs` → `docs`, `refactor` → `refactor`, `chore` or `maintenance` → `chore`, default → `feature`
|
|
116
|
+
- `slug` is the issue title: lowercased, non-alphanumeric replaced with hyphens, consecutive hyphens collapsed, trimmed, max 40 characters
|
|
117
|
+
- If `TASK_DESCRIPTION` provided (no issue): infer type from description keywords (e.g., "fix login bug" → `fix`, "refactor auth" → `refactor`, "add JWT" → `feature`, "update docs" → `docs`, "chore: cleanup" → `chore`), then slugify description as `{type}/{slug}` (max 40 chars)
|
|
118
|
+
- If neither: fallback to `task-{YYYY-MM-DD_HHMM}`
|
|
119
|
+
3. Create and checkout feature branch: `git checkout -b {derived-branch-name}`
|
|
120
|
+
4. Return setup summary with branch name and BASE_BRANCH recorded
|
|
116
121
|
|
|
117
122
|
**Output:**
|
|
118
123
|
```markdown
|
|
119
|
-
## Task Setup: {
|
|
124
|
+
## Task Setup: {branch-name}
|
|
120
125
|
|
|
121
126
|
### Branch
|
|
122
|
-
- **
|
|
127
|
+
- **Branch name**: {derived-branch-name}
|
|
123
128
|
- **Base branch**: {BASE_BRANCH} (PR target)
|
|
124
129
|
|
|
125
130
|
### Issue (if fetched)
|