bigpowers 1.5.1 → 2.0.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 +35 -0
- package/CONVENTIONS.md +18 -2
- package/README.md +39 -13
- package/RELEASE.md +16 -1
- package/SKILL-INDEX.md +3 -3
- package/assess-impact/SKILL.md +2 -2
- package/build-epic/SKILL.md +5 -5
- package/change-request/SKILL.md +4 -4
- package/dashboard/src/loaders/reader.js +2 -1
- package/dashboard/src/tui/epic-queue.js +2 -0
- package/dashboard/src/tui/filesystem.js +5 -6
- package/dashboard/src/tui/index.js +39 -13
- package/dashboard/src/tui/ledger.js +3 -5
- package/dashboard/src/tui/metrics-bar.js +20 -3
- package/dashboard/src/tui/pipeline.js +9 -13
- package/dashboard/src/tui/state-yaml.js +6 -8
- package/deepen-architecture/SKILL.md +6 -6
- package/define-success/SKILL.md +1 -1
- package/develop-tdd/SKILL.md +3 -3
- package/elaborate-spec/SKILL.md +7 -7
- package/execute-plan/SKILL.md +4 -4
- package/investigate-bug/SKILL.md +1 -1
- package/kickoff-branch/SKILL.md +1 -1
- package/map-codebase/SKILL.md +4 -4
- package/migrate-spec/SKILL.md +8 -8
- package/model-domain/SKILL.md +8 -8
- package/orchestrate-project/REFERENCE.md +8 -4
- package/orchestrate-project/SKILL.md +2 -2
- package/package.json +1 -1
- package/plan-release/SKILL.md +73 -27
- package/plan-work/SKILL.md +23 -7
- package/release-branch/SKILL.md +15 -0
- package/research-first/SKILL.md +2 -2
- package/run-evals/SKILL.md +2 -2
- package/run-planning/SKILL.md +1 -1
- package/scope-work/SKILL.md +4 -4
- package/scripts/land-branch.sh +28 -0
- package/seed-conventions/SKILL.md +37 -6
- package/session-state/SKILL.md +34 -3
- package/slice-tasks/SKILL.md +4 -4
- package/survey-context/SKILL.md +2 -2
- package/trace-requirement/SKILL.md +6 -6
- package/verify-work/SKILL.md +35 -2
- package/write-document/SKILL.md +1 -1
- package/dashboard/src/data/gate-status.js +0 -32
- package/dashboard/src/data/metrics.js +0 -89
- package/dashboard/src/data/pipeline-map.js +0 -32
- package/dashboard/src/data/reader.js +0 -122
- package/dashboard/src/data/watcher.js +0 -108
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
const EventEmitter = require('events');
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const path = require('path');
|
|
4
|
-
|
|
5
|
-
let chokidar;
|
|
6
|
-
try {
|
|
7
|
-
chokidar = require('chokidar');
|
|
8
|
-
} catch (err) {
|
|
9
|
-
chokidar = null;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function watch(projectRoot) {
|
|
13
|
-
const emitter = new EventEmitter();
|
|
14
|
-
const debounceTimers = {};
|
|
15
|
-
|
|
16
|
-
function notifyChange(file) {
|
|
17
|
-
const key = file;
|
|
18
|
-
if (debounceTimers[key]) {
|
|
19
|
-
clearTimeout(debounceTimers[key]);
|
|
20
|
-
}
|
|
21
|
-
debounceTimers[key] = setTimeout(() => {
|
|
22
|
-
emitter.emit('change', { file, data: null });
|
|
23
|
-
delete debounceTimers[key];
|
|
24
|
-
}, 300);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (chokidar) {
|
|
28
|
-
const filesToWatch = [
|
|
29
|
-
path.join(projectRoot, 'specs/state.yaml'),
|
|
30
|
-
path.join(projectRoot, 'specs/execution-status.yaml'),
|
|
31
|
-
path.join(projectRoot, 'specs/metrics/cycle-times.yaml'),
|
|
32
|
-
path.join(projectRoot, 'specs/epics')
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
const watcher = chokidar.watch(filesToWatch, {
|
|
36
|
-
persistent: true,
|
|
37
|
-
awaitWriteFinish: {
|
|
38
|
-
stabilityThreshold: 100,
|
|
39
|
-
pollInterval: 100
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
watcher.on('change', (file) => {
|
|
44
|
-
notifyChange(file);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
watcher.on('add', (file) => {
|
|
48
|
-
notifyChange(file);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
emitter.close = () => watcher.close();
|
|
52
|
-
} else {
|
|
53
|
-
const fileStats = {};
|
|
54
|
-
const filesToWatch = [
|
|
55
|
-
path.join(projectRoot, 'specs/state.yaml'),
|
|
56
|
-
path.join(projectRoot, 'specs/execution-status.yaml'),
|
|
57
|
-
path.join(projectRoot, 'specs/metrics/cycle-times.yaml')
|
|
58
|
-
];
|
|
59
|
-
|
|
60
|
-
const pollInterval = setInterval(() => {
|
|
61
|
-
filesToWatch.forEach((file) => {
|
|
62
|
-
try {
|
|
63
|
-
const stat = fs.statSync(file);
|
|
64
|
-
const mtime = stat.mtime.getTime();
|
|
65
|
-
|
|
66
|
-
if (!fileStats[file]) {
|
|
67
|
-
fileStats[file] = mtime;
|
|
68
|
-
} else if (fileStats[file] !== mtime) {
|
|
69
|
-
fileStats[file] = mtime;
|
|
70
|
-
notifyChange(file);
|
|
71
|
-
}
|
|
72
|
-
} catch (err) {
|
|
73
|
-
// File doesn't exist yet or was deleted
|
|
74
|
-
if (fileStats[file]) {
|
|
75
|
-
delete fileStats[file];
|
|
76
|
-
notifyChange(file);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
// Check specs/epics directory
|
|
82
|
-
const epicsDir = path.join(projectRoot, 'specs/epics');
|
|
83
|
-
try {
|
|
84
|
-
const entries = fs.readdirSync(epicsDir);
|
|
85
|
-
entries.forEach((entry) => {
|
|
86
|
-
const fullPath = path.join(epicsDir, entry);
|
|
87
|
-
const stat = fs.statSync(fullPath);
|
|
88
|
-
const mtime = stat.mtime.getTime();
|
|
89
|
-
|
|
90
|
-
if (!fileStats[fullPath]) {
|
|
91
|
-
fileStats[fullPath] = mtime;
|
|
92
|
-
} else if (fileStats[fullPath] !== mtime) {
|
|
93
|
-
fileStats[fullPath] = mtime;
|
|
94
|
-
notifyChange(fullPath);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
} catch (err) {
|
|
98
|
-
// epics directory doesn't exist yet
|
|
99
|
-
}
|
|
100
|
-
}, 200);
|
|
101
|
-
|
|
102
|
-
emitter.close = () => clearInterval(pollInterval);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return emitter;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
module.exports = { watch };
|