devflow-kit 1.5.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/README.md +9 -4
- package/dist/commands/ambient.js +1 -1
- package/dist/commands/init.js +8 -4
- package/dist/commands/uninstall.d.ts +9 -0
- package/dist/commands/uninstall.js +60 -4
- package/dist/plugins.js +23 -23
- package/dist/utils/post-install.js +6 -2
- package/package.json +1 -1
- package/plugins/devflow-accessibility/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +25 -4
- package/plugins/devflow-ambient/README.md +48 -29
- package/plugins/devflow-ambient/agents/coder.md +135 -0
- package/plugins/devflow-ambient/agents/reviewer.md +165 -0
- package/plugins/devflow-ambient/agents/scrutinizer.md +80 -0
- package/plugins/devflow-ambient/agents/shepherd.md +94 -0
- package/plugins/devflow-ambient/agents/simplifier.md +93 -0
- package/plugins/devflow-ambient/agents/skimmer.md +93 -0
- package/plugins/devflow-ambient/agents/validator.md +86 -0
- package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +76 -29
- package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +40 -35
- package/plugins/devflow-ambient/skills/debug-orchestration/SKILL.md +69 -0
- package/plugins/devflow-ambient/skills/implementation-orchestration/SKILL.md +92 -0
- package/plugins/devflow-ambient/skills/plan-orchestration/SKILL.md +71 -0
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +10 -1
- package/plugins/devflow-audit-claude/commands/audit-claude.md +4 -0
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +2 -1
- package/plugins/devflow-code-review/agents/reviewer.md +10 -9
- package/plugins/devflow-code-review/commands/code-review-teams.md +43 -30
- package/plugins/devflow-code-review/commands/code-review.md +10 -1
- package/plugins/devflow-code-review/skills/knowledge-persistence/SKILL.md +128 -0
- package/plugins/devflow-code-review/skills/knowledge-persistence/references/examples.md +44 -0
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +7 -2
- package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +6 -5
- package/plugins/devflow-debug/.claude-plugin/plugin.json +5 -3
- package/plugins/devflow-debug/agents/synthesizer.md +211 -0
- package/plugins/devflow-debug/commands/debug-teams.md +28 -14
- package/plugins/devflow-debug/commands/debug.md +26 -12
- package/plugins/devflow-debug/skills/knowledge-persistence/SKILL.md +128 -0
- package/plugins/devflow-debug/skills/knowledge-persistence/references/examples.md +44 -0
- package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-go/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-implement/.claude-plugin/plugin.json +2 -1
- package/plugins/devflow-implement/agents/coder.md +6 -1
- package/plugins/devflow-implement/agents/simplifier.md +32 -1
- package/plugins/devflow-implement/agents/skimmer.md +5 -0
- package/plugins/devflow-implement/commands/implement-teams.md +72 -55
- package/plugins/devflow-implement/commands/implement.md +44 -35
- package/plugins/devflow-implement/skills/knowledge-persistence/SKILL.md +128 -0
- package/plugins/devflow-implement/skills/knowledge-persistence/references/examples.md +44 -0
- package/plugins/devflow-java/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-python/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-react/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +4 -3
- package/plugins/devflow-resolve/agents/simplifier.md +32 -1
- package/plugins/devflow-resolve/commands/resolve-teams.md +16 -7
- package/plugins/devflow-resolve/commands/resolve.md +16 -7
- package/plugins/devflow-resolve/skills/knowledge-persistence/SKILL.md +128 -0
- package/plugins/devflow-resolve/skills/knowledge-persistence/references/examples.md +44 -0
- package/plugins/devflow-rust/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +10 -1
- package/plugins/devflow-self-review/agents/simplifier.md +32 -1
- package/plugins/devflow-self-review/commands/self-review.md +10 -4
- package/plugins/devflow-specify/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-specify/agents/skimmer.md +5 -0
- package/plugins/devflow-specify/commands/specify-teams.md +27 -20
- package/plugins/devflow-specify/commands/specify.md +26 -19
- package/plugins/devflow-typescript/.claude-plugin/plugin.json +1 -1
- package/scripts/hooks/ambient-prompt +10 -8
- package/scripts/hooks/background-memory-update +114 -85
- package/scripts/hooks/session-start-memory +34 -20
- package/shared/agents/coder.md +6 -1
- package/shared/agents/reviewer.md +10 -9
- package/shared/agents/simplifier.md +32 -1
- package/shared/agents/skimmer.md +5 -0
- package/shared/skills/ambient-router/SKILL.md +76 -29
- package/shared/skills/ambient-router/references/skill-catalog.md +40 -35
- package/shared/skills/debug-orchestration/SKILL.md +69 -0
- package/shared/skills/docs-framework/SKILL.md +7 -2
- package/shared/skills/implementation-orchestration/SKILL.md +92 -0
- package/shared/skills/knowledge-persistence/SKILL.md +128 -0
- package/shared/skills/knowledge-persistence/references/examples.md +44 -0
- package/shared/skills/plan-orchestration/SKILL.md +71 -0
- package/shared/skills/test-driven-development/SKILL.md +6 -5
- package/plugins/devflow-ambient/commands/ambient.md +0 -110
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,55 @@ 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.6.1] - 2026-03-20
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **`--dry-run` flag** for `devflow uninstall` — preview removal plan without deleting anything
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- **Ambient skill loading** — removed `allowed-tools` restriction from ambient-router so skills actually load via the Skill tool
|
|
15
|
+
- **Ambient hook preamble** — explicit Skill tool instruction ensures models invoke skills rather than responding directly
|
|
16
|
+
- **Init wizard** — hide `devflow-ambient` from plugin multiselect (auto-included via ambient prompt)
|
|
17
|
+
- **Working memory** — replaced broken `--resume` with transcript-based background updater
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## [1.6.0] - 2026-03-19
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- **Ambient agent orchestration**: ORCHESTRATED tier spawns agent pipelines for IMPLEMENT, DEBUG, PLAN intents
|
|
25
|
+
- **Orchestration skills**: `implementation-orchestration`, `debug-orchestration`, `plan-orchestration` for ambient agent pipelines
|
|
26
|
+
- **`knowledge-persistence` skill** (#145) — extraction procedure, lock protocol, loading instructions for project knowledge
|
|
27
|
+
- **Knowledge loading phase** (#145) — `/debug`, `/specify`, `/self-review` now load project knowledge at startup
|
|
28
|
+
- **Pitfall recording phase** (#145) — `/code-review`, `/resolve` record pitfalls to `.memory/knowledge/pitfalls.md`
|
|
29
|
+
- **Knowledge directory** (#145) — `.memory/knowledge/` with `decisions.md` (ADR-NNN, append-only) and `pitfalls.md` (area-specific gotchas)
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
- **Ambient mode**: Three depth tiers (QUICK/GUIDED/ORCHESTRATED) replacing old QUICK/GUIDED/ELEVATE
|
|
33
|
+
- **Ambient mode**: GUIDED tier for small-scope IMPLEMENT (≤2 files), simple DEBUG, focused PLAN, and REVIEW — main session with skills + Simplifier
|
|
34
|
+
- **Ambient mode**: BUILD intent renamed to IMPLEMENT for clarity
|
|
35
|
+
- **Coder agent**: Added `test-driven-development` and `search-first` to permanent skills
|
|
36
|
+
- **Command phase numbering** (#145) — renumbered fractional phases to sequential integers across 12 command files
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
- **Agent metadata** (#146) — fixed `subagent_type` in debug, added missing YAML frontmatter
|
|
40
|
+
- **Plugin count** (#146) — corrected to "8 core + 9 optional"
|
|
41
|
+
- **Skills catalog** (#146) — cataloged 3 missing skills in reference
|
|
42
|
+
- **Debug command** (#147) — removed non-standard `name=` parameter
|
|
43
|
+
- **Plugin descriptions** (#147, #148) — synced across plugin.json, plugins.ts, marketplace.json
|
|
44
|
+
- **Simplifier agent** (#148) — added Output/Boundaries sections
|
|
45
|
+
- **Plugin metadata** (#148) — added homepage/repository/license/keywords to 3 plugins
|
|
46
|
+
|
|
47
|
+
### Removed
|
|
48
|
+
- **`/ambient` command**: Ambient mode is now hook-only. Use `devflow ambient --enable` to activate.
|
|
49
|
+
|
|
50
|
+
### Behavioral Changes
|
|
51
|
+
- EXPLORE intent now always classifies as QUICK (was split QUICK/GUIDED)
|
|
52
|
+
- Simple text edits ("Update the README") classify as QUICK (was BUILD/GUIDED)
|
|
53
|
+
- Debug agent budget cap removed — agents scale to investigation needs
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
8
57
|
## [1.5.0] - 2026-03-13
|
|
9
58
|
|
|
10
59
|
### Added
|
|
@@ -866,6 +915,8 @@ devflow init
|
|
|
866
915
|
---
|
|
867
916
|
|
|
868
917
|
[Unreleased]: https://github.com/dean0x/devflow/compare/v1.4.0...HEAD
|
|
918
|
+
[1.6.1]: https://github.com/dean0x/devflow/compare/v1.6.0...v1.6.1
|
|
919
|
+
[1.6.0]: https://github.com/dean0x/devflow/compare/v1.5.0...v1.6.0
|
|
869
920
|
[1.5.0]: https://github.com/dean0x/devflow/compare/v1.4.0...v1.5.0
|
|
870
921
|
[1.4.0]: https://github.com/dean0x/devflow/compare/v1.3.3...v1.4.0
|
|
871
922
|
[1.3.3]: https://github.com/dean0x/devflow/compare/v1.3.2...v1.3.3
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ DevFlow adds structured commands that handle the full lifecycle: specify feature
|
|
|
24
24
|
- **Full-lifecycle implementation** — spec, explore, plan, code, validate, refine in one command
|
|
25
25
|
- **Automatic session memory** — survives restarts, `/clear`, and context compaction
|
|
26
26
|
- **Parallel debugging** — competing hypotheses investigated simultaneously
|
|
27
|
-
- **
|
|
27
|
+
- **35 quality skills** — 9 auto-activating core, 8 optional language/ecosystem, plus specialized review, agent, and orchestration skills
|
|
28
28
|
|
|
29
29
|
## Quick Start
|
|
30
30
|
|
|
@@ -48,7 +48,7 @@ Then in Claude Code:
|
|
|
48
48
|
| `devflow-resolve` | `/resolve` | Process review issues — fix or defer to tech debt |
|
|
49
49
|
| `devflow-debug` | `/debug` | Parallel hypothesis debugging |
|
|
50
50
|
| `devflow-self-review` | `/self-review` | Self-review workflow (Simplifier + Scrutinizer) |
|
|
51
|
-
| `devflow-ambient` |
|
|
51
|
+
| `devflow-ambient` | (hook) | Ambient mode — intent classification with agent orchestration |
|
|
52
52
|
| `devflow-core-skills` | (auto) | Auto-activating quality enforcement skills |
|
|
53
53
|
|
|
54
54
|
## Command Details
|
|
@@ -197,8 +197,10 @@ DevFlow creates project documentation in `.docs/` and working memory in `.memory
|
|
|
197
197
|
|
|
198
198
|
.memory/
|
|
199
199
|
├── WORKING-MEMORY.md # Auto-maintained by Stop hook
|
|
200
|
-
├──
|
|
201
|
-
└──
|
|
200
|
+
├── backup.json # Pre-compact git state snapshot
|
|
201
|
+
└── knowledge/
|
|
202
|
+
├── decisions.md # Architectural decisions (ADR-NNN, append-only)
|
|
203
|
+
└── pitfalls.md # Known pitfalls (area-specific gotchas)
|
|
202
204
|
```
|
|
203
205
|
|
|
204
206
|
## Workflow Examples
|
|
@@ -252,7 +254,10 @@ Session context is saved and restored automatically via Working Memory hooks —
|
|
|
252
254
|
| Option | Description |
|
|
253
255
|
|--------|-------------|
|
|
254
256
|
| `--scope <user\|local>` | Uninstall scope (default: user) |
|
|
257
|
+
| `--plugin <names>` | Comma-separated plugin names to uninstall selectively |
|
|
255
258
|
| `--keep-docs` | Preserve .docs/ directory |
|
|
259
|
+
| `--dry-run` | Show what would be removed without deleting anything |
|
|
260
|
+
| `--verbose` | Show detailed uninstall output |
|
|
256
261
|
|
|
257
262
|
## Building from Source
|
|
258
263
|
|
package/dist/commands/ambient.js
CHANGED
|
@@ -122,7 +122,7 @@ export const ambientCommand = new Command('ambient')
|
|
|
122
122
|
}
|
|
123
123
|
await fs.writeFile(settingsPath, updated, 'utf-8');
|
|
124
124
|
p.log.success('Ambient mode enabled — UserPromptSubmit hook registered');
|
|
125
|
-
p.log.info(color.dim('
|
|
125
|
+
p.log.info(color.dim('Skills auto-load and agents orchestrate based on each prompt'));
|
|
126
126
|
}
|
|
127
127
|
if (options.disable) {
|
|
128
128
|
const updated = removeAmbientHook(settingsContent);
|
package/dist/commands/init.js
CHANGED
|
@@ -62,7 +62,7 @@ export const initCommand = new Command('init')
|
|
|
62
62
|
.option('--plugin <names>', 'Install specific plugin(s), comma-separated (e.g., implement,code-review)')
|
|
63
63
|
.option('--teams', 'Enable Agent Teams (peer debate, adversarial review)')
|
|
64
64
|
.option('--no-teams', 'Disable Agent Teams (use parallel subagents instead)')
|
|
65
|
-
.option('--ambient', 'Enable ambient mode (
|
|
65
|
+
.option('--ambient', 'Enable ambient mode (classifies intent, loads skills, orchestrates agents)')
|
|
66
66
|
.option('--no-ambient', 'Disable ambient mode')
|
|
67
67
|
.option('--memory', 'Enable working memory (session context preservation)')
|
|
68
68
|
.option('--no-memory', 'Disable working memory hooks')
|
|
@@ -121,14 +121,14 @@ export const initCommand = new Command('init')
|
|
|
121
121
|
}
|
|
122
122
|
else if (process.stdin.isTTY) {
|
|
123
123
|
const choices = DEVFLOW_PLUGINS
|
|
124
|
-
.filter(pl => pl.name !== 'devflow-core-skills')
|
|
124
|
+
.filter(pl => pl.name !== 'devflow-core-skills' && pl.name !== 'devflow-ambient')
|
|
125
125
|
.map(pl => ({
|
|
126
126
|
value: pl.name,
|
|
127
127
|
label: pl.name.replace('devflow-', ''),
|
|
128
128
|
hint: pl.description + (pl.optional ? ' (optional)' : ''),
|
|
129
129
|
}));
|
|
130
130
|
const preSelected = DEVFLOW_PLUGINS
|
|
131
|
-
.filter(pl => !pl.optional && pl.name !== 'devflow-core-skills')
|
|
131
|
+
.filter(pl => !pl.optional && pl.name !== 'devflow-core-skills' && pl.name !== 'devflow-ambient')
|
|
132
132
|
.map(pl => pl.name);
|
|
133
133
|
const pluginSelection = await p.multiselect({
|
|
134
134
|
message: 'Select plugins to install',
|
|
@@ -176,7 +176,7 @@ export const initCommand = new Command('init')
|
|
|
176
176
|
const ambientChoice = await p.select({
|
|
177
177
|
message: 'Enable ambient mode?',
|
|
178
178
|
options: [
|
|
179
|
-
{ value: true, label: 'Yes (Recommended)', hint: '
|
|
179
|
+
{ value: true, label: 'Yes (Recommended)', hint: 'Classifies intent, loads skills, orchestrates agents' },
|
|
180
180
|
{ value: false, label: 'No', hint: 'Full control — load skills manually' },
|
|
181
181
|
],
|
|
182
182
|
});
|
|
@@ -284,6 +284,10 @@ export const initCommand = new Command('init')
|
|
|
284
284
|
if (pluginsToInstall.length > 0 && coreSkillsPlugin && !pluginsToInstall.includes(coreSkillsPlugin)) {
|
|
285
285
|
pluginsToInstall = [coreSkillsPlugin, ...pluginsToInstall];
|
|
286
286
|
}
|
|
287
|
+
const ambientPlugin = DEVFLOW_PLUGINS.find(p => p.name === 'devflow-ambient');
|
|
288
|
+
if (ambientEnabled && ambientPlugin && !pluginsToInstall.includes(ambientPlugin)) {
|
|
289
|
+
pluginsToInstall.push(ambientPlugin);
|
|
290
|
+
}
|
|
287
291
|
const { skillsMap, agentsMap } = buildAssetMaps(pluginsToInstall);
|
|
288
292
|
// Install: try native CLI first, fall back to file copy
|
|
289
293
|
const cliAvailable = isClaudeCliAvailable();
|
|
@@ -9,5 +9,14 @@ export declare function computeAssetsToRemove(selectedPlugins: PluginDefinition[
|
|
|
9
9
|
agents: string[];
|
|
10
10
|
commands: string[];
|
|
11
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Format a dry-run plan showing what would be removed.
|
|
14
|
+
* Pure function — no I/O, fully testable.
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatDryRunPlan(assets: {
|
|
17
|
+
skills: string[];
|
|
18
|
+
agents: string[];
|
|
19
|
+
commands: string[];
|
|
20
|
+
}, extras?: string[]): string;
|
|
12
21
|
export declare const uninstallCommand: Command;
|
|
13
22
|
//# sourceMappingURL=uninstall.d.ts.map
|
|
@@ -2,7 +2,7 @@ import { Command } from 'commander';
|
|
|
2
2
|
import { promises as fs } from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
|
-
import {
|
|
5
|
+
import { execFileSync } from 'child_process';
|
|
6
6
|
import * as p from '@clack/prompts';
|
|
7
7
|
import color from 'picocolors';
|
|
8
8
|
import { getInstallationPaths, getClaudeDirectory, getDevFlowDirectory, getManagedSettingsPath } from '../utils/paths.js';
|
|
@@ -46,13 +46,37 @@ export function computeAssetsToRemove(selectedPlugins, allPlugins) {
|
|
|
46
46
|
}
|
|
47
47
|
return { skills, agents, commands };
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Format a dry-run plan showing what would be removed.
|
|
51
|
+
* Pure function — no I/O, fully testable.
|
|
52
|
+
*/
|
|
53
|
+
export function formatDryRunPlan(assets, extras) {
|
|
54
|
+
const skills = [...new Set(assets.skills)];
|
|
55
|
+
const agents = [...new Set(assets.agents)];
|
|
56
|
+
const commands = [...new Set(assets.commands)];
|
|
57
|
+
const hasAssets = skills.length > 0 || agents.length > 0 || commands.length > 0;
|
|
58
|
+
const hasExtras = extras && extras.length > 0;
|
|
59
|
+
if (!hasAssets && !hasExtras) {
|
|
60
|
+
return 'Nothing to remove.';
|
|
61
|
+
}
|
|
62
|
+
const lines = [];
|
|
63
|
+
if (skills.length > 0)
|
|
64
|
+
lines.push(`Skills (${skills.length}): ${skills.join(', ')}`);
|
|
65
|
+
if (agents.length > 0)
|
|
66
|
+
lines.push(`Agents (${agents.length}): ${agents.join(', ')}`);
|
|
67
|
+
if (commands.length > 0)
|
|
68
|
+
lines.push(`Commands (${commands.length}): ${commands.join(', ')}`);
|
|
69
|
+
if (hasExtras)
|
|
70
|
+
lines.push(`Extras: ${extras.join(', ')}`);
|
|
71
|
+
return lines.join('\n');
|
|
72
|
+
}
|
|
49
73
|
/**
|
|
50
74
|
* Uninstall plugin using Claude CLI
|
|
51
75
|
*/
|
|
52
76
|
function uninstallPluginViaCli(scope) {
|
|
53
77
|
try {
|
|
54
78
|
const cliScope = scope === 'local' ? 'project' : 'user';
|
|
55
|
-
|
|
79
|
+
execFileSync('claude', ['plugin', 'uninstall', 'devflow', '--scope', cliScope], { stdio: 'inherit' });
|
|
56
80
|
return true;
|
|
57
81
|
}
|
|
58
82
|
catch {
|
|
@@ -77,8 +101,10 @@ export const uninstallCommand = new Command('uninstall')
|
|
|
77
101
|
.option('--scope <type>', 'Uninstall from specific scope only (default: auto-detect all)', /^(user|local)$/i)
|
|
78
102
|
.option('--plugin <names>', 'Uninstall specific plugin(s), comma-separated (e.g., implement,review)')
|
|
79
103
|
.option('--verbose', 'Show detailed uninstall output')
|
|
104
|
+
.option('--dry-run', 'Show what would be removed without actually removing anything')
|
|
80
105
|
.action(async (options) => {
|
|
81
|
-
|
|
106
|
+
const dryRun = options.dryRun ?? false;
|
|
107
|
+
p.intro(color.bgRed(color.white(dryRun ? ' DevFlow Uninstall (dry run) ' : ' Uninstalling DevFlow ')));
|
|
82
108
|
const verbose = options.verbose ?? false;
|
|
83
109
|
// Parse plugin selection
|
|
84
110
|
let selectedPluginNames = [];
|
|
@@ -121,7 +147,7 @@ export const uninstallCommand = new Command('uninstall')
|
|
|
121
147
|
p.log.info('Checked user scope (~/.claude/) and local scope (git-root/.claude/)');
|
|
122
148
|
process.exit(1);
|
|
123
149
|
}
|
|
124
|
-
if (scopesToUninstall.length > 1) {
|
|
150
|
+
if (scopesToUninstall.length > 1 && !dryRun) {
|
|
125
151
|
if (process.stdin.isTTY) {
|
|
126
152
|
const scopeChoice = await p.select({
|
|
127
153
|
message: 'Found DevFlow in multiple scopes. Uninstall from:',
|
|
@@ -144,6 +170,36 @@ export const uninstallCommand = new Command('uninstall')
|
|
|
144
170
|
}
|
|
145
171
|
}
|
|
146
172
|
}
|
|
173
|
+
// === DRY RUN: show plan and exit ===
|
|
174
|
+
if (dryRun) {
|
|
175
|
+
p.log.info(`Scope(s): ${scopesToUninstall.join(', ')} (dry-run shows all detected scopes)`);
|
|
176
|
+
const assets = isSelectiveUninstall
|
|
177
|
+
? computeAssetsToRemove(selectedPlugins, DEVFLOW_PLUGINS)
|
|
178
|
+
: computeAssetsToRemove(DEVFLOW_PLUGINS, DEVFLOW_PLUGINS);
|
|
179
|
+
// Detect extras that would be cleaned up (full uninstall only)
|
|
180
|
+
const extras = [];
|
|
181
|
+
if (!isSelectiveUninstall) {
|
|
182
|
+
const docsDir = path.join(process.cwd(), '.docs');
|
|
183
|
+
const memoryDir = path.join(process.cwd(), '.memory');
|
|
184
|
+
try {
|
|
185
|
+
await fs.access(docsDir);
|
|
186
|
+
extras.push('.docs/');
|
|
187
|
+
}
|
|
188
|
+
catch { /* noop */ }
|
|
189
|
+
try {
|
|
190
|
+
await fs.access(memoryDir);
|
|
191
|
+
extras.push('.memory/');
|
|
192
|
+
}
|
|
193
|
+
catch { /* noop */ }
|
|
194
|
+
extras.push('hooks in settings.json', 'scripts in ~/.devflow/');
|
|
195
|
+
}
|
|
196
|
+
const plan = formatDryRunPlan(assets, extras.length > 0 ? extras : undefined);
|
|
197
|
+
for (const line of plan.split('\n')) {
|
|
198
|
+
p.log.info(line);
|
|
199
|
+
}
|
|
200
|
+
p.outro(color.dim('No changes made (dry run)'));
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
147
203
|
const cliAvailable = isClaudeCliAvailable();
|
|
148
204
|
// Uninstall from each scope
|
|
149
205
|
for (const scope of scopesToUninstall) {
|
package/dist/plugins.js
CHANGED
|
@@ -7,59 +7,59 @@
|
|
|
7
7
|
export const DEVFLOW_PLUGINS = [
|
|
8
8
|
{
|
|
9
9
|
name: 'devflow-core-skills',
|
|
10
|
-
description: 'Auto-activating quality enforcement
|
|
10
|
+
description: 'Auto-activating quality enforcement skills - foundation layer for all DevFlow plugins',
|
|
11
11
|
commands: [],
|
|
12
12
|
agents: [],
|
|
13
13
|
skills: ['core-patterns', 'docs-framework', 'git-safety', 'git-workflow', 'github-patterns', 'input-validation', 'search-first', 'test-driven-development', 'test-patterns'],
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
name: 'devflow-specify',
|
|
17
|
-
description: 'Interactive feature specification',
|
|
17
|
+
description: 'Interactive feature specification - creates well-defined GitHub issues',
|
|
18
18
|
commands: ['/specify'],
|
|
19
19
|
agents: ['skimmer', 'synthesizer'],
|
|
20
20
|
skills: ['agent-teams'],
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
name: 'devflow-implement',
|
|
24
|
-
description: 'Complete task implementation workflow',
|
|
24
|
+
description: 'Complete task implementation workflow with exploration, planning, and coding',
|
|
25
25
|
commands: ['/implement'],
|
|
26
26
|
agents: ['git', 'skimmer', 'synthesizer', 'coder', 'simplifier', 'scrutinizer', 'shepherd', 'validator'],
|
|
27
|
-
skills: ['agent-teams', 'implementation-patterns', 'self-review'],
|
|
27
|
+
skills: ['agent-teams', 'implementation-patterns', 'knowledge-persistence', 'self-review'],
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
name: 'devflow-code-review',
|
|
31
|
-
description: 'Comprehensive code review',
|
|
31
|
+
description: 'Comprehensive code review with parallel specialized agents',
|
|
32
32
|
commands: ['/code-review'],
|
|
33
33
|
agents: ['git', 'reviewer', 'synthesizer'],
|
|
34
|
-
skills: ['agent-teams', 'architecture-patterns', 'complexity-patterns', 'consistency-patterns', 'database-patterns', 'dependencies-patterns', 'documentation-patterns', 'performance-patterns', 'regression-patterns', 'review-methodology', 'security-patterns', 'test-patterns'],
|
|
34
|
+
skills: ['agent-teams', 'architecture-patterns', 'complexity-patterns', 'consistency-patterns', 'database-patterns', 'dependencies-patterns', 'documentation-patterns', 'knowledge-persistence', 'performance-patterns', 'regression-patterns', 'review-methodology', 'security-patterns', 'test-patterns'],
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
name: 'devflow-resolve',
|
|
38
|
-
description: 'Process and fix review issues',
|
|
38
|
+
description: 'Process and fix code review issues with risk assessment',
|
|
39
39
|
commands: ['/resolve'],
|
|
40
40
|
agents: ['git', 'resolver', 'simplifier'],
|
|
41
|
-
skills: ['agent-teams', 'implementation-patterns', 'security-patterns'],
|
|
41
|
+
skills: ['agent-teams', 'implementation-patterns', 'knowledge-persistence', 'security-patterns'],
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
name: 'devflow-debug',
|
|
45
|
-
description: 'Debugging with competing
|
|
45
|
+
description: 'Debugging workflows with competing hypothesis investigation using agent teams',
|
|
46
46
|
commands: ['/debug'],
|
|
47
|
-
agents: ['git'],
|
|
48
|
-
skills: ['agent-teams', 'git-safety'],
|
|
47
|
+
agents: ['git', 'synthesizer'],
|
|
48
|
+
skills: ['agent-teams', 'git-safety', 'knowledge-persistence'],
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
name: 'devflow-self-review',
|
|
52
|
-
description: 'Self-review workflow
|
|
52
|
+
description: 'Self-review workflow: Simplifier + Scrutinizer for code quality',
|
|
53
53
|
commands: ['/self-review'],
|
|
54
54
|
agents: ['simplifier', 'scrutinizer', 'validator'],
|
|
55
55
|
skills: ['self-review', 'core-patterns'],
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
name: 'devflow-ambient',
|
|
59
|
-
description: 'Ambient mode —
|
|
59
|
+
description: 'Ambient mode — intent classification with proportional agent orchestration',
|
|
60
60
|
commands: ['/ambient'],
|
|
61
|
-
agents: [],
|
|
62
|
-
skills: ['ambient-router'],
|
|
61
|
+
agents: ['coder', 'validator', 'simplifier', 'scrutinizer', 'shepherd', 'skimmer', 'reviewer'],
|
|
62
|
+
skills: ['ambient-router', 'implementation-orchestration', 'debug-orchestration', 'plan-orchestration'],
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
name: 'devflow-audit-claude',
|
|
@@ -71,7 +71,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
name: 'devflow-typescript',
|
|
74
|
-
description: 'TypeScript language patterns
|
|
74
|
+
description: 'TypeScript language patterns - type safety, generics, utility types, type guards',
|
|
75
75
|
commands: [],
|
|
76
76
|
agents: [],
|
|
77
77
|
skills: ['typescript'],
|
|
@@ -79,7 +79,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
name: 'devflow-react',
|
|
82
|
-
description: 'React framework patterns
|
|
82
|
+
description: 'React framework patterns - hooks, state management, composition, performance',
|
|
83
83
|
commands: [],
|
|
84
84
|
agents: [],
|
|
85
85
|
skills: ['react'],
|
|
@@ -87,7 +87,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
89
|
name: 'devflow-accessibility',
|
|
90
|
-
description: 'Web accessibility patterns
|
|
90
|
+
description: 'Web accessibility patterns - WCAG compliance, ARIA roles, keyboard navigation, focus management',
|
|
91
91
|
commands: [],
|
|
92
92
|
agents: [],
|
|
93
93
|
skills: ['accessibility'],
|
|
@@ -95,7 +95,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
name: 'devflow-frontend-design',
|
|
98
|
-
description: 'Frontend design patterns
|
|
98
|
+
description: 'Frontend design patterns - typography, color systems, spacing, motion, responsive design',
|
|
99
99
|
commands: [],
|
|
100
100
|
agents: [],
|
|
101
101
|
skills: ['frontend-design'],
|
|
@@ -103,7 +103,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
name: 'devflow-go',
|
|
106
|
-
description: 'Go language patterns
|
|
106
|
+
description: 'Go language patterns - error handling, interfaces, concurrency, package design',
|
|
107
107
|
commands: [],
|
|
108
108
|
agents: [],
|
|
109
109
|
skills: ['go'],
|
|
@@ -111,7 +111,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
name: 'devflow-java',
|
|
114
|
-
description: 'Java language patterns
|
|
114
|
+
description: 'Java language patterns - records, sealed classes, composition, modern Java features',
|
|
115
115
|
commands: [],
|
|
116
116
|
agents: [],
|
|
117
117
|
skills: ['java'],
|
|
@@ -119,7 +119,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
name: 'devflow-python',
|
|
122
|
-
description: 'Python language patterns
|
|
122
|
+
description: 'Python language patterns - type hints, protocols, dataclasses, async programming',
|
|
123
123
|
commands: [],
|
|
124
124
|
agents: [],
|
|
125
125
|
skills: ['python'],
|
|
@@ -127,7 +127,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
name: 'devflow-rust',
|
|
130
|
-
description: 'Rust language patterns
|
|
130
|
+
description: 'Rust language patterns - ownership, borrowing, error handling, type-driven design',
|
|
131
131
|
commands: [],
|
|
132
132
|
agents: [],
|
|
133
133
|
skills: ['rust'],
|
|
@@ -425,11 +425,16 @@ export async function createMemoryDir(verbose, cwd) {
|
|
|
425
425
|
const memoryDir = path.join(cwd ?? process.cwd(), '.memory');
|
|
426
426
|
try {
|
|
427
427
|
await fs.mkdir(memoryDir, { recursive: true });
|
|
428
|
+
await fs.mkdir(path.join(memoryDir, 'knowledge'), { recursive: true });
|
|
428
429
|
if (verbose) {
|
|
429
430
|
p.log.success('.memory/ directory ready');
|
|
430
431
|
}
|
|
431
432
|
}
|
|
432
|
-
catch {
|
|
433
|
+
catch (e) {
|
|
434
|
+
if (verbose) {
|
|
435
|
+
p.log.warn(`Failed to create .memory/ directory: ${e instanceof Error ? e.message : String(e)}`);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
433
438
|
}
|
|
434
439
|
/**
|
|
435
440
|
* Migrate memory files from .docs/ to .memory/.
|
|
@@ -443,7 +448,6 @@ export async function migrateMemoryFiles(verbose, cwd) {
|
|
|
443
448
|
const memoryDir = path.join(root, '.memory');
|
|
444
449
|
const migrations = [
|
|
445
450
|
{ src: path.join(docsDir, 'WORKING-MEMORY.md'), dest: path.join(memoryDir, 'WORKING-MEMORY.md') },
|
|
446
|
-
{ src: path.join(docsDir, 'patterns.md'), dest: path.join(memoryDir, 'PROJECT-PATTERNS.md') },
|
|
447
451
|
{ src: path.join(docsDir, 'working-memory-backup.json'), dest: path.join(memoryDir, 'backup.json') },
|
|
448
452
|
];
|
|
449
453
|
let migrated = 0;
|
package/package.json
CHANGED
|
@@ -1,12 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devflow-ambient",
|
|
3
|
-
"description": "Ambient mode —
|
|
3
|
+
"description": "Ambient mode — intent classification with proportional agent orchestration",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "Dean0x"
|
|
6
6
|
},
|
|
7
|
-
"version": "1.
|
|
8
|
-
"
|
|
7
|
+
"version": "1.6.1",
|
|
8
|
+
"homepage": "https://github.com/dean0x/devflow",
|
|
9
|
+
"repository": "https://github.com/dean0x/devflow",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"ambient",
|
|
13
|
+
"intent",
|
|
14
|
+
"classification",
|
|
15
|
+
"orchestration",
|
|
16
|
+
"agents"
|
|
17
|
+
],
|
|
18
|
+
"agents": [
|
|
19
|
+
"coder",
|
|
20
|
+
"validator",
|
|
21
|
+
"simplifier",
|
|
22
|
+
"scrutinizer",
|
|
23
|
+
"shepherd",
|
|
24
|
+
"skimmer",
|
|
25
|
+
"reviewer"
|
|
26
|
+
],
|
|
9
27
|
"skills": [
|
|
10
|
-
"ambient-router"
|
|
28
|
+
"ambient-router",
|
|
29
|
+
"implementation-orchestration",
|
|
30
|
+
"debug-orchestration",
|
|
31
|
+
"plan-orchestration"
|
|
11
32
|
]
|
|
12
33
|
}
|
|
@@ -1,23 +1,8 @@
|
|
|
1
1
|
# devflow-ambient
|
|
2
2
|
|
|
3
|
-
Ambient mode —
|
|
3
|
+
Ambient mode — classifies intent and applies proportional effort via a `UserPromptSubmit` hook. No slash command — ambient mode activates automatically on every prompt when enabled.
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
### `/ambient`
|
|
8
|
-
|
|
9
|
-
Classify user intent and apply proportional skill enforcement to any prompt.
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
/ambient add a login form # BUILD/GUIDED — loads TDD + implementation-patterns
|
|
13
|
-
/ambient fix the auth error # DEBUG/GUIDED — loads test-patterns + core-patterns
|
|
14
|
-
/ambient where is the config? # EXPLORE/QUICK — responds normally, zero overhead
|
|
15
|
-
/ambient refactor the auth system # BUILD/ELEVATE — suggests /implement
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Always-On Mode
|
|
19
|
-
|
|
20
|
-
Enable ambient classification on every prompt without typing `/ambient`:
|
|
5
|
+
## Activation
|
|
21
6
|
|
|
22
7
|
```bash
|
|
23
8
|
devflow ambient --enable # Register UserPromptSubmit hook
|
|
@@ -25,25 +10,59 @@ devflow ambient --disable # Remove hook
|
|
|
25
10
|
devflow ambient --status # Check if enabled
|
|
26
11
|
```
|
|
27
12
|
|
|
28
|
-
When enabled,
|
|
13
|
+
When enabled, the hook injects a classification preamble before every prompt. Slash commands (`/implement`, `/code-review`, etc.) and short confirmations ("yes", "ok") are skipped automatically. Git operations (`commit`, `push`, `merge`, etc.) are fast-pathed to zero overhead.
|
|
29
14
|
|
|
30
15
|
## How It Works
|
|
31
16
|
|
|
32
|
-
1. **Classify intent** —
|
|
33
|
-
2. **Classify depth** — QUICK
|
|
17
|
+
1. **Classify intent** — IMPLEMENT, DEBUG, REVIEW, PLAN, EXPLORE, or CHAT
|
|
18
|
+
2. **Classify depth** — QUICK, GUIDED, or ORCHESTRATED (scope-based)
|
|
34
19
|
3. **Apply proportionally**:
|
|
35
|
-
- QUICK: respond normally
|
|
36
|
-
- GUIDED: load
|
|
37
|
-
-
|
|
20
|
+
- QUICK: respond normally (zero overhead)
|
|
21
|
+
- GUIDED: load skills, implement in main session, spawn Simplifier after code changes
|
|
22
|
+
- ORCHESTRATED: load skills, orchestrate full agent pipeline
|
|
23
|
+
|
|
24
|
+
## Three-Tier Classification
|
|
25
|
+
|
|
26
|
+
| Depth | When | What Happens |
|
|
27
|
+
|-------|------|-------------|
|
|
28
|
+
| QUICK | Chat, exploration, git ops, config, trivial edits | Zero overhead — respond normally |
|
|
29
|
+
| GUIDED | Small-scope IMPLEMENT (≤2 files), clear DEBUG, focused PLAN, REVIEW | Load skills → main session works → Simplifier cleanup |
|
|
30
|
+
| ORCHESTRATED | Large-scope IMPLEMENT (>2 files), vague DEBUG, system-level PLAN | Load skills → spawn agent pipeline |
|
|
31
|
+
|
|
32
|
+
### Intent × Depth Matrix
|
|
33
|
+
|
|
34
|
+
| Intent | GUIDED | ORCHESTRATED |
|
|
35
|
+
|--------|--------|-------------|
|
|
36
|
+
| IMPLEMENT | ≤2 files, single module | >2 files, multi-module |
|
|
37
|
+
| DEBUG | Clear error with stack trace/location | Vague/cross-cutting bug |
|
|
38
|
+
| PLAN | Focused design question | System-level architecture |
|
|
39
|
+
| REVIEW | Always GUIDED | — |
|
|
40
|
+
|
|
41
|
+
## GUIDED Behavior
|
|
42
|
+
|
|
43
|
+
Skills are loaded via the Skill tool and work happens in the main session:
|
|
44
|
+
|
|
45
|
+
| Intent | Skills | Main Session Work | Post-Work |
|
|
46
|
+
|--------|--------|-------------------|-----------|
|
|
47
|
+
| IMPLEMENT | test-driven-development, implementation-patterns, search-first | Implement with TDD | `Task(subagent_type="Simplifier")` |
|
|
48
|
+
| DEBUG | core-patterns, test-patterns | Investigate, diagnose, fix | `Task(subagent_type="Simplifier")` |
|
|
49
|
+
| PLAN | implementation-patterns, core-patterns | Explore and design | — |
|
|
50
|
+
| REVIEW | self-review, core-patterns | Review directly | — |
|
|
51
|
+
|
|
52
|
+
## ORCHESTRATED Pipelines
|
|
38
53
|
|
|
39
|
-
|
|
54
|
+
| Intent | Pipeline |
|
|
55
|
+
|--------|----------|
|
|
56
|
+
| IMPLEMENT | Pre-flight → Coder → Validator → Simplifier → Scrutinizer → Shepherd |
|
|
57
|
+
| DEBUG | Hypotheses → parallel Explores → convergence → report → offer fix |
|
|
58
|
+
| PLAN | Skimmer → Explores → Plan agent → gap validation |
|
|
40
59
|
|
|
41
|
-
|
|
42
|
-
|-------|------|----------|
|
|
43
|
-
| QUICK | Chat, simple exploration, git/devops ops, single-word confirmations | ~0 tokens |
|
|
44
|
-
| GUIDED | BUILD/DEBUG/REVIEW/PLAN, 1-5 file scope | ~500-1000 tokens (skill reads) |
|
|
45
|
-
| ELEVATE | Multi-file, architectural, system-wide scope | ~0 extra tokens (nudge only) |
|
|
60
|
+
These are lightweight variants of `/implement`, `/debug`, and the Plan phase of `/implement` — focused on the immediate task without full lifecycle features (PR creation, knowledge persistence, retry loops).
|
|
46
61
|
|
|
47
62
|
## Skills
|
|
48
63
|
|
|
49
64
|
- `ambient-router` — Intent + depth classification, skill selection matrix
|
|
65
|
+
- `test-driven-development` — TDD enforcement for IMPLEMENT (GUIDED + ORCHESTRATED)
|
|
66
|
+
- `implementation-orchestration` — Agent pipeline for IMPLEMENT/ORCHESTRATED
|
|
67
|
+
- `debug-orchestration` — Agent pipeline for DEBUG/ORCHESTRATED
|
|
68
|
+
- `plan-orchestration` — Agent pipeline for PLAN/ORCHESTRATED
|