@evolve.labs/devflow 0.8.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/.claude/commands/agents/architect.md +1162 -0
- package/.claude/commands/agents/architect.meta.yaml +124 -0
- package/.claude/commands/agents/builder.md +1432 -0
- package/.claude/commands/agents/builder.meta.yaml +117 -0
- package/.claude/commands/agents/chronicler.md +633 -0
- package/.claude/commands/agents/chronicler.meta.yaml +217 -0
- package/.claude/commands/agents/guardian.md +456 -0
- package/.claude/commands/agents/guardian.meta.yaml +127 -0
- package/.claude/commands/agents/strategist.md +483 -0
- package/.claude/commands/agents/strategist.meta.yaml +158 -0
- package/.claude/commands/agents/system-designer.md +1137 -0
- package/.claude/commands/agents/system-designer.meta.yaml +156 -0
- package/.claude/commands/devflow-help.md +93 -0
- package/.claude/commands/devflow-status.md +60 -0
- package/.claude/commands/quick/create-adr.md +82 -0
- package/.claude/commands/quick/new-feature.md +57 -0
- package/.claude/commands/quick/security-check.md +54 -0
- package/.claude/commands/quick/system-design.md +58 -0
- package/.claude_project +52 -0
- package/.devflow/agents/architect.meta.yaml +122 -0
- package/.devflow/agents/builder.meta.yaml +116 -0
- package/.devflow/agents/chronicler.meta.yaml +222 -0
- package/.devflow/agents/guardian.meta.yaml +127 -0
- package/.devflow/agents/strategist.meta.yaml +158 -0
- package/.devflow/agents/system-designer.meta.yaml +265 -0
- package/.devflow/project.yaml +242 -0
- package/.gitignore-template +84 -0
- package/LICENSE +21 -0
- package/README.md +249 -0
- package/bin/devflow.js +54 -0
- package/lib/autopilot.js +235 -0
- package/lib/autopilotConstants.js +213 -0
- package/lib/constants.js +95 -0
- package/lib/init.js +200 -0
- package/lib/update.js +181 -0
- package/lib/utils.js +157 -0
- package/lib/web.js +119 -0
- package/package.json +57 -0
- package/web/CHANGELOG.md +192 -0
- package/web/README.md +156 -0
- package/web/app/api/autopilot/execute/route.ts +102 -0
- package/web/app/api/autopilot/terminal-execute/route.ts +124 -0
- package/web/app/api/files/route.ts +280 -0
- package/web/app/api/files/tree/route.ts +160 -0
- package/web/app/api/git/route.ts +201 -0
- package/web/app/api/health/route.ts +94 -0
- package/web/app/api/project/open/route.ts +134 -0
- package/web/app/api/search/route.ts +247 -0
- package/web/app/api/specs/route.ts +405 -0
- package/web/app/api/terminal/route.ts +222 -0
- package/web/app/globals.css +160 -0
- package/web/app/ide/layout.tsx +43 -0
- package/web/app/ide/page.tsx +216 -0
- package/web/app/layout.tsx +34 -0
- package/web/app/page.tsx +303 -0
- package/web/components/agents/AgentIcons.tsx +281 -0
- package/web/components/autopilot/AutopilotConfigModal.tsx +245 -0
- package/web/components/autopilot/AutopilotPanel.tsx +299 -0
- package/web/components/dashboard/DashboardPanel.tsx +393 -0
- package/web/components/editor/Breadcrumbs.tsx +134 -0
- package/web/components/editor/EditorPanel.tsx +120 -0
- package/web/components/editor/EditorTabs.tsx +229 -0
- package/web/components/editor/MarkdownPreview.tsx +154 -0
- package/web/components/editor/MermaidDiagram.tsx +113 -0
- package/web/components/editor/MonacoEditor.tsx +177 -0
- package/web/components/editor/TabContextMenu.tsx +207 -0
- package/web/components/git/GitPanel.tsx +534 -0
- package/web/components/layout/Shell.tsx +15 -0
- package/web/components/layout/StatusBar.tsx +100 -0
- package/web/components/modals/CommandPalette.tsx +393 -0
- package/web/components/modals/GlobalSearch.tsx +348 -0
- package/web/components/modals/QuickOpen.tsx +241 -0
- package/web/components/modals/RecentFiles.tsx +208 -0
- package/web/components/projects/ProjectSelector.tsx +147 -0
- package/web/components/settings/SettingItem.tsx +150 -0
- package/web/components/settings/SettingsPanel.tsx +323 -0
- package/web/components/specs/SpecsPanel.tsx +1091 -0
- package/web/components/terminal/TerminalPanel.tsx +683 -0
- package/web/components/ui/ContextMenu.tsx +182 -0
- package/web/components/ui/LoadingSpinner.tsx +66 -0
- package/web/components/ui/ResizeHandle.tsx +110 -0
- package/web/components/ui/Skeleton.tsx +108 -0
- package/web/components/ui/SkipLinks.tsx +37 -0
- package/web/components/ui/Toaster.tsx +57 -0
- package/web/hooks/useFocusTrap.ts +141 -0
- package/web/hooks/useKeyboardShortcuts.ts +169 -0
- package/web/hooks/useListNavigation.ts +237 -0
- package/web/lib/autopilotConstants.ts +213 -0
- package/web/lib/constants/agents.ts +67 -0
- package/web/lib/git.ts +339 -0
- package/web/lib/ptyManager.ts +191 -0
- package/web/lib/specsParser.ts +299 -0
- package/web/lib/stores/autopilotStore.ts +288 -0
- package/web/lib/stores/fileStore.ts +550 -0
- package/web/lib/stores/gitStore.ts +386 -0
- package/web/lib/stores/projectStore.ts +196 -0
- package/web/lib/stores/settingsStore.ts +126 -0
- package/web/lib/stores/specsStore.ts +297 -0
- package/web/lib/stores/uiStore.ts +175 -0
- package/web/lib/types/index.ts +177 -0
- package/web/lib/utils.ts +98 -0
- package/web/next.config.js +50 -0
- package/web/package.json +54 -0
- package/web/postcss.config.js +6 -0
- package/web/tailwind.config.ts +68 -0
- package/web/tsconfig.json +41 -0
package/lib/utils.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
const { execSync } = require('node:child_process');
|
|
2
|
+
const fs = require('node:fs');
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const readline = require('node:readline');
|
|
5
|
+
|
|
6
|
+
// ANSI color helpers (no chalk dependency)
|
|
7
|
+
const c = {
|
|
8
|
+
red: (s) => `\x1b[0;31m${s}\x1b[0m`,
|
|
9
|
+
green: (s) => `\x1b[0;32m${s}\x1b[0m`,
|
|
10
|
+
yellow: (s) => `\x1b[1;33m${s}\x1b[0m`,
|
|
11
|
+
blue: (s) => `\x1b[0;34m${s}\x1b[0m`,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
function printHeader(version) {
|
|
15
|
+
const line = c.blue('\u2501'.repeat(55));
|
|
16
|
+
console.log(line);
|
|
17
|
+
console.log(c.blue(` DevFlow CLI v${version}`));
|
|
18
|
+
console.log(line);
|
|
19
|
+
console.log();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function success(msg) { console.log(`${c.green('\u2713')} ${msg}`); }
|
|
23
|
+
function error(msg) { console.log(`${c.red('\u2717')} ${msg}`); }
|
|
24
|
+
function warn(msg) { console.log(`${c.yellow('\u26A0')} ${msg}`); }
|
|
25
|
+
function info(msg) { console.log(`${c.blue('\u2139')} ${msg}`); }
|
|
26
|
+
|
|
27
|
+
function printSuccess(version) {
|
|
28
|
+
const line = c.green('\u2501'.repeat(55));
|
|
29
|
+
console.log();
|
|
30
|
+
console.log(line);
|
|
31
|
+
console.log(c.green(` \u2713 DevFlow v${version} installed successfully!`));
|
|
32
|
+
console.log(line);
|
|
33
|
+
console.log();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function printUpdateSuccess(version) {
|
|
37
|
+
const line = c.green('\u2501'.repeat(55));
|
|
38
|
+
console.log();
|
|
39
|
+
console.log(line);
|
|
40
|
+
console.log(c.green(` \u2713 DevFlow updated to v${version}!`));
|
|
41
|
+
console.log(line);
|
|
42
|
+
console.log();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Interactive y/N confirmation
|
|
46
|
+
function confirm(question) {
|
|
47
|
+
return new Promise((resolve) => {
|
|
48
|
+
const rl = readline.createInterface({
|
|
49
|
+
input: process.stdin,
|
|
50
|
+
output: process.stdout,
|
|
51
|
+
});
|
|
52
|
+
rl.question(`${question} (y/N) `, (answer) => {
|
|
53
|
+
rl.close();
|
|
54
|
+
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Check if a CLI command exists
|
|
60
|
+
function commandExists(cmd) {
|
|
61
|
+
try {
|
|
62
|
+
execSync(`command -v ${cmd}`, { stdio: 'ignore' });
|
|
63
|
+
return true;
|
|
64
|
+
} catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Check required/recommended dependencies
|
|
70
|
+
function checkDependencies() {
|
|
71
|
+
const platform = process.platform === 'darwin' ? 'macOS'
|
|
72
|
+
: process.platform === 'win32' ? 'Windows'
|
|
73
|
+
: 'Linux';
|
|
74
|
+
info(`System: ${platform}`);
|
|
75
|
+
console.log();
|
|
76
|
+
|
|
77
|
+
if (commandExists('claude')) {
|
|
78
|
+
success('Claude Code: installed');
|
|
79
|
+
} else {
|
|
80
|
+
warn('Claude Code: not found');
|
|
81
|
+
console.log(' Install: npm install -g @anthropic-ai/claude-code');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (commandExists('git')) {
|
|
85
|
+
success('Git: installed');
|
|
86
|
+
} else {
|
|
87
|
+
warn('Git: not found (recommended)');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
console.log();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Copy directory recursively using Node 18+ fs.cp
|
|
94
|
+
async function copyDir(src, dest) {
|
|
95
|
+
await fs.promises.mkdir(path.dirname(dest), { recursive: true });
|
|
96
|
+
await fs.promises.cp(src, dest, { recursive: true, force: true });
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Copy single file, creating parent dirs as needed
|
|
100
|
+
async function copyFile(src, dest) {
|
|
101
|
+
await fs.promises.mkdir(path.dirname(dest), { recursive: true });
|
|
102
|
+
await fs.promises.copyFile(src, dest);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Create multiple directories
|
|
106
|
+
async function ensureDirs(root, dirs) {
|
|
107
|
+
for (const dir of dirs) {
|
|
108
|
+
await fs.promises.mkdir(path.join(root, dir), { recursive: true });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Create .gitkeep in directories that should be tracked but are empty
|
|
113
|
+
async function createGitkeep(root, dirs) {
|
|
114
|
+
for (const dir of dirs) {
|
|
115
|
+
const gitkeepPath = path.join(root, dir, '.gitkeep');
|
|
116
|
+
try {
|
|
117
|
+
await fs.promises.access(gitkeepPath);
|
|
118
|
+
} catch {
|
|
119
|
+
await fs.promises.writeFile(gitkeepPath, '');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Check if a path exists
|
|
125
|
+
async function pathExists(p) {
|
|
126
|
+
try {
|
|
127
|
+
await fs.promises.access(p);
|
|
128
|
+
return true;
|
|
129
|
+
} catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Resolve target path relative to cwd
|
|
135
|
+
function resolveTarget(targetArg) {
|
|
136
|
+
return path.resolve(process.cwd(), targetArg);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
module.exports = {
|
|
140
|
+
c,
|
|
141
|
+
printHeader,
|
|
142
|
+
success,
|
|
143
|
+
error,
|
|
144
|
+
warn,
|
|
145
|
+
info,
|
|
146
|
+
printSuccess,
|
|
147
|
+
printUpdateSuccess,
|
|
148
|
+
confirm,
|
|
149
|
+
commandExists,
|
|
150
|
+
checkDependencies,
|
|
151
|
+
copyDir,
|
|
152
|
+
copyFile,
|
|
153
|
+
ensureDirs,
|
|
154
|
+
createGitkeep,
|
|
155
|
+
pathExists,
|
|
156
|
+
resolveTarget,
|
|
157
|
+
};
|
package/lib/web.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
const { execSync, spawn } = require('node:child_process');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const fs = require('node:fs');
|
|
4
|
+
const { PACKAGE_ROOT } = require('./constants');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* devflow web - Start the DevFlow Web Dashboard
|
|
8
|
+
*/
|
|
9
|
+
async function webCommand(options) {
|
|
10
|
+
const port = options.port || '3000';
|
|
11
|
+
const webDir = path.join(PACKAGE_ROOT, 'web');
|
|
12
|
+
|
|
13
|
+
// 1. Verify web/ directory exists
|
|
14
|
+
if (!fs.existsSync(webDir)) {
|
|
15
|
+
console.error('Error: Web IDE files not found.');
|
|
16
|
+
console.error('Re-install devflow with: npm install -g devflow-agents');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// 2. Check if package.json exists
|
|
21
|
+
const pkgPath = path.join(webDir, 'package.json');
|
|
22
|
+
if (!fs.existsSync(pkgPath)) {
|
|
23
|
+
console.error('Error: web/package.json not found.');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// 3. Install dependencies if needed
|
|
28
|
+
const nodeModules = path.join(webDir, 'node_modules');
|
|
29
|
+
if (!fs.existsSync(nodeModules)) {
|
|
30
|
+
console.log('Installing web dependencies...');
|
|
31
|
+
try {
|
|
32
|
+
execSync('npm install --production', {
|
|
33
|
+
cwd: webDir,
|
|
34
|
+
stdio: 'inherit',
|
|
35
|
+
timeout: 120_000,
|
|
36
|
+
});
|
|
37
|
+
} catch {
|
|
38
|
+
console.error('Failed to install dependencies.');
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 4. Determine the project path to open
|
|
44
|
+
const projectPath = options.project || process.cwd();
|
|
45
|
+
const resolvedProject = path.resolve(projectPath);
|
|
46
|
+
|
|
47
|
+
if (!fs.existsSync(resolvedProject)) {
|
|
48
|
+
console.error(`Project path not found: ${resolvedProject}`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// 5. Start the web server
|
|
53
|
+
const isDev = options.dev || false;
|
|
54
|
+
const cmd = isDev ? 'dev' : 'start';
|
|
55
|
+
|
|
56
|
+
// Build first if not dev mode and .next doesn't exist
|
|
57
|
+
if (!isDev) {
|
|
58
|
+
const nextDir = path.join(webDir, '.next');
|
|
59
|
+
if (!fs.existsSync(nextDir)) {
|
|
60
|
+
console.log('Building web dashboard...');
|
|
61
|
+
try {
|
|
62
|
+
execSync('npx next build', {
|
|
63
|
+
cwd: webDir,
|
|
64
|
+
stdio: 'inherit',
|
|
65
|
+
timeout: 300_000,
|
|
66
|
+
});
|
|
67
|
+
} catch {
|
|
68
|
+
console.error('Build failed. Try running with --dev flag for development mode.');
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
console.log(`\nStarting DevFlow Web Dashboard on port ${port}...`);
|
|
75
|
+
console.log(`Project: ${resolvedProject}\n`);
|
|
76
|
+
|
|
77
|
+
// Set environment variables
|
|
78
|
+
const env = {
|
|
79
|
+
...process.env,
|
|
80
|
+
PORT: port,
|
|
81
|
+
DEVFLOW_PROJECT_PATH: resolvedProject,
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// Start the server
|
|
85
|
+
const child = spawn('npx', ['next', cmd, '-p', port], {
|
|
86
|
+
cwd: webDir,
|
|
87
|
+
env,
|
|
88
|
+
stdio: 'inherit',
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Open browser after a short delay (unless --no-open)
|
|
92
|
+
if (options.open !== false) {
|
|
93
|
+
setTimeout(() => {
|
|
94
|
+
const url = `http://localhost:${port}`;
|
|
95
|
+
try {
|
|
96
|
+
const openCmd = process.platform === 'darwin' ? 'open'
|
|
97
|
+
: process.platform === 'win32' ? 'start'
|
|
98
|
+
: 'xdg-open';
|
|
99
|
+
execSync(`${openCmd} ${url}`, { stdio: 'ignore' });
|
|
100
|
+
} catch {
|
|
101
|
+
console.log(`Open your browser at: ${url}`);
|
|
102
|
+
}
|
|
103
|
+
}, 3000);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Handle process signals
|
|
107
|
+
const cleanup = () => {
|
|
108
|
+
child.kill();
|
|
109
|
+
process.exit(0);
|
|
110
|
+
};
|
|
111
|
+
process.on('SIGINT', cleanup);
|
|
112
|
+
process.on('SIGTERM', cleanup);
|
|
113
|
+
|
|
114
|
+
child.on('exit', (code) => {
|
|
115
|
+
process.exit(code || 0);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
module.exports = { webCommand };
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@evolve.labs/devflow",
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "Multi-agent system for software development with Claude Code. 6 specialized agents (Strategist, Architect, System Designer, Builder, Guardian, Chronicler) as slash commands.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude-code",
|
|
7
|
+
"ai-agents",
|
|
8
|
+
"multi-agent",
|
|
9
|
+
"devflow",
|
|
10
|
+
"claude",
|
|
11
|
+
"anthropic",
|
|
12
|
+
"software-development"
|
|
13
|
+
],
|
|
14
|
+
"author": "Evolve Labs",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/evolve-labs-cloud/devflow.git"
|
|
19
|
+
},
|
|
20
|
+
"homepage": "https://github.com/evolve-labs-cloud/devflow",
|
|
21
|
+
"bin": {
|
|
22
|
+
"devflow": "bin/devflow.js"
|
|
23
|
+
},
|
|
24
|
+
"type": "commonjs",
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18.0.0"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"bin/",
|
|
30
|
+
"lib/",
|
|
31
|
+
".claude/commands/",
|
|
32
|
+
".claude_project",
|
|
33
|
+
".devflow/agents/",
|
|
34
|
+
".devflow/project.yaml",
|
|
35
|
+
".gitignore-template",
|
|
36
|
+
"docs/decisions/000-template.md",
|
|
37
|
+
"web/app/",
|
|
38
|
+
"web/components/",
|
|
39
|
+
"web/hooks/",
|
|
40
|
+
"web/lib/",
|
|
41
|
+
"web/package.json",
|
|
42
|
+
"web/next.config.js",
|
|
43
|
+
"web/tsconfig.json",
|
|
44
|
+
"web/tailwind.config.ts",
|
|
45
|
+
"web/postcss.config.js",
|
|
46
|
+
"web/README.md",
|
|
47
|
+
"web/CHANGELOG.md",
|
|
48
|
+
"LICENSE",
|
|
49
|
+
"README.md"
|
|
50
|
+
],
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"commander": "^12.0.0"
|
|
53
|
+
},
|
|
54
|
+
"scripts": {
|
|
55
|
+
"prepublishOnly": "cp .gitignore .gitignore-template"
|
|
56
|
+
}
|
|
57
|
+
}
|
package/web/CHANGELOG.md
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to DevFlow IDE will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.7.0] - 2026-02-11
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **System Designer Agent** - 6th agent for system design & infrastructure at scale
|
|
13
|
+
- System Design Documents (SDDs) with back-of-the-envelope calculations
|
|
14
|
+
- RFCs, capacity planning, trade-off analysis
|
|
15
|
+
- SLA/SLO/SLI definitions and reliability patterns
|
|
16
|
+
- Quick action button in terminal panel
|
|
17
|
+
- **SystemDesignerIcon** - Custom SVG icon (gear/infrastructure)
|
|
18
|
+
- **npm Package** - `devflow-agents` available on npm
|
|
19
|
+
- `npx devflow-agents init` for quick installation
|
|
20
|
+
- `devflow update` for updates
|
|
21
|
+
- Optional `--web` flag to include Web IDE
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Updated all agent panels to include system-designer (Autopilot, Terminal, Config Modal)
|
|
26
|
+
- AgentId type now includes 'system-designer'
|
|
27
|
+
- DEFAULT_PHASES includes System Design phase between Design and Implementation
|
|
28
|
+
- Agent regex in specsParser includes system-designer
|
|
29
|
+
- Version bumped from 0.6.0 to 0.7.0
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## [0.5.0] - 2025-12-29
|
|
34
|
+
|
|
35
|
+
### Major Change: Terminal as Primary Interface
|
|
36
|
+
|
|
37
|
+
O Chat customizado foi **removido** e substituído pelo **Terminal integrado** como interface principal para interação com Claude CLI.
|
|
38
|
+
|
|
39
|
+
**Motivação:**
|
|
40
|
+
- Performance nativa do Claude CLI (sem overhead de parsing)
|
|
41
|
+
- Todas as features funcionam: session resume, tools, MCP servers
|
|
42
|
+
- Output em tempo real sem processamento adicional
|
|
43
|
+
- Menos código para manter
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
|
|
47
|
+
- **Terminal Quick Actions** - Barra de ações rápidas no terminal
|
|
48
|
+
- Comandos rápidos: Claude, New Feature, Security Check, Create ADR
|
|
49
|
+
- Botões de agentes: Strategist, Architect, Builder, Guardian, Chronicler
|
|
50
|
+
- Injeção de comandos direto no terminal PTY
|
|
51
|
+
- **Terminal Resize Handle** - Arraste para ajustar altura do terminal
|
|
52
|
+
- Limites: 150px (mín) a 600px (máx)
|
|
53
|
+
- Altura persiste no localStorage
|
|
54
|
+
- Feedback visual durante arraste
|
|
55
|
+
- **Toast Notifications** - Feedback em ações do terminal
|
|
56
|
+
- "Terminal ready" ao conectar (apenas uma vez)
|
|
57
|
+
- "Terminal disconnected" ao perder conexão
|
|
58
|
+
- Toast no reset de settings
|
|
59
|
+
- **AGENTS Constant** - Centralizado em `lib/constants/agents.ts`
|
|
60
|
+
- Helper functions: `getAgentById()`, `getAgentByName()`
|
|
61
|
+
- **Agent Task Updates** - Instruções nos agentes para atualizar tasks
|
|
62
|
+
- Builder agora marca checkboxes `[x]` ao completar tasks
|
|
63
|
+
- Guardian atualiza status de review nas stories
|
|
64
|
+
- Status muda para "completed" quando todas tasks concluídas
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
|
|
68
|
+
- **Terminal Interface** - Agora é a forma principal de interagir com Claude
|
|
69
|
+
- Performance nativa do Claude CLI
|
|
70
|
+
- Session resume funciona automaticamente
|
|
71
|
+
- Todas as tools e MCP servers disponíveis
|
|
72
|
+
- **Resize Debouncing** - Terminal resize com debounce de 150ms
|
|
73
|
+
- Evita chamadas excessivas de fit() e API
|
|
74
|
+
- Elimina "tremidas" durante resize
|
|
75
|
+
- **Toast Behavior** - Toast de conexão só aparece uma vez por sessão
|
|
76
|
+
- Corrigido closure issue no handler de erro
|
|
77
|
+
|
|
78
|
+
### Removed
|
|
79
|
+
|
|
80
|
+
- **Chat Panel** - Completamente removido
|
|
81
|
+
- `components/chat/ChatPanel.tsx`
|
|
82
|
+
- `components/chat/ChatMessage.tsx`
|
|
83
|
+
- `components/chat/AgentSelector.tsx`
|
|
84
|
+
- `components/chat/ChatSettings.tsx`
|
|
85
|
+
- `lib/stores/chatStore.ts`
|
|
86
|
+
- `app/api/chat/route.ts`
|
|
87
|
+
- **Chat Commands** - Removidos do CommandPalette
|
|
88
|
+
- Agent selection, clear chat, toggle chat
|
|
89
|
+
- **Chat Status** - Removido indicador de streaming do StatusBar
|
|
90
|
+
|
|
91
|
+
### Refactored
|
|
92
|
+
|
|
93
|
+
- `StatusBar.tsx` - Removido import e uso de chatStore
|
|
94
|
+
- `CommandPalette.tsx` - Removidos comandos de chat/agentes
|
|
95
|
+
- `SettingsPanel.tsx` - Import de AGENTS de constants
|
|
96
|
+
- `SpecsPanel.tsx` - Removida integração com chat
|
|
97
|
+
- `page.tsx` (IDE) - Removido painel de chat lateral
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## [0.4.0] - 2025-12-26
|
|
102
|
+
|
|
103
|
+
### Added
|
|
104
|
+
|
|
105
|
+
- **US-019: Melhorias de UX - Navegação Avançada**
|
|
106
|
+
- Breadcrumbs mostrando caminho do arquivo ativo
|
|
107
|
+
- Botões Back/Forward para histórico de navegação (Alt+Left/Right)
|
|
108
|
+
- Tab history com navegação entre arquivos abertos
|
|
109
|
+
- Recent Files modal (Ctrl+Tab) com últimos 20 arquivos
|
|
110
|
+
- Pinned tabs para fixar arquivos importantes
|
|
111
|
+
- Tab context menu (Close, Close Others, Close to Right, Pin/Unpin)
|
|
112
|
+
- **US-019: Melhorias de UX - Acessibilidade**
|
|
113
|
+
- Focus trap em todos os modais
|
|
114
|
+
- Keyboard navigation no FileExplorer (Up/Down/Left/Right/Enter)
|
|
115
|
+
- Keyboard navigation no SpecsPanel (Up/Down/Enter)
|
|
116
|
+
- ARIA labels em todos os elementos interativos
|
|
117
|
+
- Skip links para navegação rápida
|
|
118
|
+
- Tree navigation hook seguindo WAI-ARIA TreeView pattern
|
|
119
|
+
- **Progress por Spec** - Barra de progresso visual nos cards
|
|
120
|
+
- Mostra X/Y tasks completas com porcentagem
|
|
121
|
+
- Status dinâmico: not_started → in_progress → completed
|
|
122
|
+
- Cores adaptativas baseadas no progresso
|
|
123
|
+
- **Settings Panel** - Modal de configurações (Cmd+,)
|
|
124
|
+
- Editor: font size, tab size, word wrap, minimap, line numbers
|
|
125
|
+
- Terminal: font size
|
|
126
|
+
- AI: default model, default agent, permission mode
|
|
127
|
+
- General: auto-save toggle and delay
|
|
128
|
+
- Keyboard shortcuts reference
|
|
129
|
+
- **Image Analysis in Chat** - Suporte a análise de imagens
|
|
130
|
+
- Paste (Cmd+V), drag & drop, file picker
|
|
131
|
+
- Imagens enviadas ao Claude para análise
|
|
132
|
+
|
|
133
|
+
### Changed
|
|
134
|
+
|
|
135
|
+
- Monaco Editor usa settings do settingsStore
|
|
136
|
+
- Terminal usa fontSize do settingsStore
|
|
137
|
+
- EditorTabs redesenhado com controles de navegação
|
|
138
|
+
- FileExplorer com navegação por teclado completa
|
|
139
|
+
|
|
140
|
+
### New Files
|
|
141
|
+
|
|
142
|
+
- `components/editor/Breadcrumbs.tsx`
|
|
143
|
+
- `components/editor/TabContextMenu.tsx`
|
|
144
|
+
- `components/modals/RecentFiles.tsx`
|
|
145
|
+
- `components/ui/SkipLinks.tsx`
|
|
146
|
+
- `hooks/useFocusTrap.ts`
|
|
147
|
+
- `hooks/useListNavigation.ts`
|
|
148
|
+
- `hooks/useTreeNavigation.ts`
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## [0.2.0] - 2025-12-22
|
|
153
|
+
|
|
154
|
+
### Added
|
|
155
|
+
|
|
156
|
+
- Dashboard Panel with metrics and health check
|
|
157
|
+
- Mermaid diagrams in Markdown preview
|
|
158
|
+
- File Explorer context menu
|
|
159
|
+
- Quick Open (Cmd+P), Global Search (Cmd+Shift+F)
|
|
160
|
+
- Command Palette (Cmd+Shift+P)
|
|
161
|
+
- Modern dark theme with purple accents
|
|
162
|
+
- Toast notifications system (sonner)
|
|
163
|
+
- Skeleton loaders for loading states
|
|
164
|
+
|
|
165
|
+
### Changed
|
|
166
|
+
|
|
167
|
+
- Unified data source for Kanban and SpecsPanel
|
|
168
|
+
- Health API now checks parent directory for .devflow
|
|
169
|
+
- Faster health check
|
|
170
|
+
|
|
171
|
+
### Removed
|
|
172
|
+
|
|
173
|
+
- Knowledge Graph visualization
|
|
174
|
+
- Kanban Board view (replaced by SpecsPanel)
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## [0.1.0] - 2025-12-19
|
|
179
|
+
|
|
180
|
+
### Added
|
|
181
|
+
|
|
182
|
+
- Initial release
|
|
183
|
+
- Monaco Editor with syntax highlighting
|
|
184
|
+
- File Explorer with tree view
|
|
185
|
+
- Terminal with xterm.js + PTY
|
|
186
|
+
- Git Panel with status, commit, push/pull
|
|
187
|
+
- Specs/Tasks panel with workflow phases
|
|
188
|
+
- Resizable panels
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
*Maintained by @chronicler*
|
package/web/README.md
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# DevFlow IDE Web
|
|
2
|
+
|
|
3
|
+
Interface web para o DevFlow - Spec-driven development powered by AI agents.
|
|
4
|
+
|
|
5
|
+
**v0.7.0** - System Designer agent + npm package
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
### Core
|
|
10
|
+
|
|
11
|
+
- **Terminal Integrado** - Interface principal para Claude CLI
|
|
12
|
+
- Performance nativa (sem overhead de parsing)
|
|
13
|
+
- Todas as features do Claude: session resume, tools, MCP servers
|
|
14
|
+
- Quick Actions: botões para agentes e comandos frequentes
|
|
15
|
+
- Altura ajustável via drag
|
|
16
|
+
- **Monaco Editor** - Editor de código profissional
|
|
17
|
+
- Syntax highlighting para 50+ linguagens
|
|
18
|
+
- IntelliSense, Find & Replace, Multi-cursor
|
|
19
|
+
- Configurações persistentes
|
|
20
|
+
- **File Explorer** - Navegação completa
|
|
21
|
+
- Keyboard navigation (WAI-ARIA TreeView)
|
|
22
|
+
- Context menu para operações
|
|
23
|
+
- Busca de arquivos
|
|
24
|
+
|
|
25
|
+
### Painéis
|
|
26
|
+
|
|
27
|
+
- **Specs Panel** - Visualize requirements, design e tasks
|
|
28
|
+
- Progress bars por spec
|
|
29
|
+
- Navegação por teclado
|
|
30
|
+
- **Dashboard** - Métricas e health check do projeto
|
|
31
|
+
- **Git Panel** - Status, commit, push/pull, branches
|
|
32
|
+
- **Settings** - Configurações do editor, terminal e AI
|
|
33
|
+
|
|
34
|
+
### Produtividade
|
|
35
|
+
|
|
36
|
+
- **Quick Open** (Cmd+P) - Busca rápida de arquivos
|
|
37
|
+
- **Global Search** (Cmd+Shift+F) - Busca em todo o projeto
|
|
38
|
+
- **Command Palette** (Cmd+Shift+P) - Todos os comandos
|
|
39
|
+
- **Recent Files** (Ctrl+Tab) - Arquivos recentes
|
|
40
|
+
- **Tab History** (Alt+Left/Right) - Navegação back/forward
|
|
41
|
+
|
|
42
|
+
## Requisitos
|
|
43
|
+
|
|
44
|
+
- Node.js 18+
|
|
45
|
+
- Claude Code CLI instalado e autenticado (`claude login`)
|
|
46
|
+
- Um projeto DevFlow existente
|
|
47
|
+
|
|
48
|
+
## Instalação
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Instalar dependências
|
|
52
|
+
npm install
|
|
53
|
+
|
|
54
|
+
# Iniciar em modo desenvolvimento
|
|
55
|
+
npm run dev
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Acesse http://localhost:3000
|
|
59
|
+
|
|
60
|
+
## Uso
|
|
61
|
+
|
|
62
|
+
1. Na página inicial, insira o caminho do seu projeto DevFlow
|
|
63
|
+
2. O projeto será carregado com o file explorer à esquerda
|
|
64
|
+
3. Clique em arquivos para editar no Monaco Editor
|
|
65
|
+
4. Use o **Terminal** (Ctrl+`) para interagir com Claude CLI
|
|
66
|
+
5. Use os **Quick Actions** do terminal para chamar agentes
|
|
67
|
+
|
|
68
|
+
### Agentes DevFlow
|
|
69
|
+
|
|
70
|
+
Execute via terminal ou Quick Actions:
|
|
71
|
+
|
|
72
|
+
| Agente | Comando | Função |
|
|
73
|
+
|--------|---------|--------|
|
|
74
|
+
| Strategist | `claude /agents:strategist` | Planejamento e Produto |
|
|
75
|
+
| Architect | `claude /agents:architect` | Design e Arquitetura |
|
|
76
|
+
| System Designer | `claude /agents:system-designer` | System Design e Escala |
|
|
77
|
+
| Builder | `claude /agents:builder` | Implementação |
|
|
78
|
+
| Guardian | `claude /agents:guardian` | Qualidade e Testes |
|
|
79
|
+
| Chronicler | `claude /agents:chronicler` | Documentação |
|
|
80
|
+
|
|
81
|
+
## Stack
|
|
82
|
+
|
|
83
|
+
- **Framework**: Next.js 15 (App Router)
|
|
84
|
+
- **Editor**: Monaco Editor
|
|
85
|
+
- **Terminal**: xterm.js + node-pty (PTY real)
|
|
86
|
+
- **State**: Zustand with persist
|
|
87
|
+
- **Styling**: Tailwind CSS
|
|
88
|
+
- **Icons**: Lucide React
|
|
89
|
+
- **Notifications**: Sonner
|
|
90
|
+
|
|
91
|
+
## Estrutura
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
web/
|
|
95
|
+
├── app/ # Next.js App Router
|
|
96
|
+
│ ├── api/ # API Routes
|
|
97
|
+
│ │ ├── terminal/ # Terminal PTY (SSE)
|
|
98
|
+
│ │ ├── files/ # File operations
|
|
99
|
+
│ │ ├── git/ # Git operations
|
|
100
|
+
│ │ ├── specs/ # Specs loading
|
|
101
|
+
│ │ └── health/ # System health
|
|
102
|
+
│ ├── ide/ # IDE workspace
|
|
103
|
+
│ └── page.tsx # Home page
|
|
104
|
+
├── components/ # React components
|
|
105
|
+
│ ├── terminal/ # Terminal + Quick Actions
|
|
106
|
+
│ ├── editor/ # Monaco, Tabs, Breadcrumbs
|
|
107
|
+
│ ├── explorer/ # File tree
|
|
108
|
+
│ ├── specs/ # Specs panel
|
|
109
|
+
│ ├── git/ # Git panel
|
|
110
|
+
│ ├── dashboard/ # Dashboard
|
|
111
|
+
│ ├── settings/ # Settings modal
|
|
112
|
+
│ ├── modals/ # QuickOpen, Search, etc.
|
|
113
|
+
│ └── layout/ # Sidebar, StatusBar
|
|
114
|
+
├── hooks/ # Custom hooks
|
|
115
|
+
│ ├── useFocusTrap.ts
|
|
116
|
+
│ ├── useKeyboardShortcuts.ts
|
|
117
|
+
│ └── useTreeNavigation.ts
|
|
118
|
+
├── lib/
|
|
119
|
+
│ ├── stores/ # Zustand stores
|
|
120
|
+
│ ├── constants/ # AGENTS, etc.
|
|
121
|
+
│ ├── types/ # TypeScript types
|
|
122
|
+
│ └── utils.ts # Utilities
|
|
123
|
+
└── README.md
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Scripts
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
npm run dev # Desenvolvimento
|
|
130
|
+
npm run build # Build para produção
|
|
131
|
+
npm run start # Iniciar produção
|
|
132
|
+
npm run lint # Lint
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Keyboard Shortcuts
|
|
136
|
+
|
|
137
|
+
| Shortcut | Action |
|
|
138
|
+
|----------|--------|
|
|
139
|
+
| Cmd+S | Salvar arquivo |
|
|
140
|
+
| Cmd+P | Quick Open |
|
|
141
|
+
| Cmd+Shift+F | Global Search |
|
|
142
|
+
| Cmd+Shift+P | Command Palette |
|
|
143
|
+
| Cmd+, | Settings |
|
|
144
|
+
| Cmd+B | Toggle sidebar |
|
|
145
|
+
| Ctrl+` | Toggle terminal |
|
|
146
|
+
| Ctrl+Tab | Recent Files |
|
|
147
|
+
| Alt+Left/Right | Navegar histórico |
|
|
148
|
+
| Cmd+W | Fechar tab |
|
|
149
|
+
|
|
150
|
+
## Changelog
|
|
151
|
+
|
|
152
|
+
Veja [CHANGELOG.md](./CHANGELOG.md) para histórico completo de mudanças.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
**Powered by Evolve Labs** | DevFlow v0.7.0
|