deepflow 0.1.8 → 0.1.10
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/df/update.md +2 -4
- package/README.md +9 -1
- package/bin/install.js +35 -6
- package/package.json +1 -1
|
@@ -9,11 +9,9 @@ Update deepflow to the latest version from npm.
|
|
|
9
9
|
npx deepflow@latest
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
2.
|
|
12
|
+
2. The installer auto-detects your existing installation (global or project) and updates it.
|
|
13
13
|
|
|
14
|
-
3.
|
|
15
|
-
|
|
16
|
-
4. Restart Claude Code to apply changes.
|
|
14
|
+
3. Restart Claude Code to apply changes.
|
|
17
15
|
|
|
18
16
|
## What Gets Updated
|
|
19
17
|
|
package/README.md
CHANGED
|
@@ -61,12 +61,14 @@ CONVERSATION
|
|
|
61
61
|
│ Creates specs/{name}.md
|
|
62
62
|
▼
|
|
63
63
|
/df:plan
|
|
64
|
+
│ Detects project context/patterns
|
|
64
65
|
│ Analyzes specs vs codebase
|
|
65
66
|
│ Creates PLAN.md with tasks
|
|
66
67
|
│ Renames: feature.md → doing-feature.md
|
|
67
68
|
▼
|
|
68
69
|
/df:execute
|
|
69
|
-
│
|
|
70
|
+
│ Follows existing patterns
|
|
71
|
+
│ Parallel agents, file conflicts serialize
|
|
70
72
|
│ Context-aware (≥50% → checkpoint)
|
|
71
73
|
│ Atomic commit per task
|
|
72
74
|
▼
|
|
@@ -84,6 +86,12 @@ specs/
|
|
|
84
86
|
done-feature.md → completed, history embedded
|
|
85
87
|
```
|
|
86
88
|
|
|
89
|
+
## Works With Any Project
|
|
90
|
+
|
|
91
|
+
**Greenfield:** Everything is new, agents create from scratch.
|
|
92
|
+
|
|
93
|
+
**Ongoing:** Detects existing patterns, follows conventions, integrates with current code.
|
|
94
|
+
|
|
87
95
|
## Context-Aware Execution
|
|
88
96
|
|
|
89
97
|
Statusline shows context usage. At ≥50%:
|
package/bin/install.js
CHANGED
|
@@ -28,8 +28,32 @@ async function main() {
|
|
|
28
28
|
console.log(`${c.cyan}deepflow installer${c.reset}`);
|
|
29
29
|
console.log('');
|
|
30
30
|
|
|
31
|
-
//
|
|
32
|
-
const
|
|
31
|
+
// Detect existing installations
|
|
32
|
+
const globalInstalled = isInstalled(GLOBAL_DIR);
|
|
33
|
+
const projectInstalled = isInstalled(PROJECT_DIR);
|
|
34
|
+
|
|
35
|
+
let level;
|
|
36
|
+
|
|
37
|
+
if (globalInstalled && projectInstalled) {
|
|
38
|
+
// Both installed - ask which to update
|
|
39
|
+
console.log(`${c.yellow}!${c.reset} Found installations in both locations:`);
|
|
40
|
+
console.log(` Global: ${GLOBAL_DIR}`);
|
|
41
|
+
console.log(` Project: ${PROJECT_DIR}`);
|
|
42
|
+
console.log('');
|
|
43
|
+
level = await askInstallLevel('Which do you want to update?');
|
|
44
|
+
} else if (globalInstalled) {
|
|
45
|
+
// Only global - update it
|
|
46
|
+
console.log(`Updating global installation...`);
|
|
47
|
+
level = 'global';
|
|
48
|
+
} else if (projectInstalled) {
|
|
49
|
+
// Only project - update it
|
|
50
|
+
console.log(`Updating project installation...`);
|
|
51
|
+
level = 'project';
|
|
52
|
+
} else {
|
|
53
|
+
// Fresh install - ask
|
|
54
|
+
level = await askInstallLevel('Where do you want to install deepflow?');
|
|
55
|
+
}
|
|
56
|
+
|
|
33
57
|
const CLAUDE_DIR = level === 'global' ? GLOBAL_DIR : PROJECT_DIR;
|
|
34
58
|
const levelLabel = level === 'global' ? 'globally' : 'in this project';
|
|
35
59
|
|
|
@@ -98,8 +122,7 @@ async function main() {
|
|
|
98
122
|
log('Version file installed');
|
|
99
123
|
}
|
|
100
124
|
|
|
101
|
-
// Clear stale update cache
|
|
102
|
-
// Cache is always global, so clear it regardless of install level
|
|
125
|
+
// Clear stale update cache
|
|
103
126
|
const cacheFile = path.join(GLOBAL_DIR, 'cache', 'df-update-check.json');
|
|
104
127
|
if (fs.existsSync(cacheFile)) {
|
|
105
128
|
fs.unlinkSync(cacheFile);
|
|
@@ -148,6 +171,12 @@ async function main() {
|
|
|
148
171
|
console.log('');
|
|
149
172
|
}
|
|
150
173
|
|
|
174
|
+
function isInstalled(claudeDir) {
|
|
175
|
+
// Check if deepflow commands exist
|
|
176
|
+
const commandsDir = path.join(claudeDir, 'commands', 'df');
|
|
177
|
+
return fs.existsSync(commandsDir) && fs.readdirSync(commandsDir).length > 0;
|
|
178
|
+
}
|
|
179
|
+
|
|
151
180
|
function copyDir(src, dest) {
|
|
152
181
|
if (!fs.existsSync(src)) return;
|
|
153
182
|
|
|
@@ -212,8 +241,8 @@ function ask(question) {
|
|
|
212
241
|
});
|
|
213
242
|
}
|
|
214
243
|
|
|
215
|
-
async function askInstallLevel() {
|
|
216
|
-
console.log(
|
|
244
|
+
async function askInstallLevel(prompt) {
|
|
245
|
+
console.log(prompt);
|
|
217
246
|
console.log('');
|
|
218
247
|
console.log(` ${c.cyan}1${c.reset}) Global ${c.dim}(~/.claude/ - available in all projects)${c.reset}`);
|
|
219
248
|
console.log(` ${c.cyan}2${c.reset}) Project ${c.dim}(./.claude/ - only this project)${c.reset}`);
|