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.
Files changed (49) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/CONVENTIONS.md +18 -2
  3. package/README.md +39 -13
  4. package/RELEASE.md +16 -1
  5. package/SKILL-INDEX.md +3 -3
  6. package/assess-impact/SKILL.md +2 -2
  7. package/build-epic/SKILL.md +5 -5
  8. package/change-request/SKILL.md +4 -4
  9. package/dashboard/src/loaders/reader.js +2 -1
  10. package/dashboard/src/tui/epic-queue.js +2 -0
  11. package/dashboard/src/tui/filesystem.js +5 -6
  12. package/dashboard/src/tui/index.js +39 -13
  13. package/dashboard/src/tui/ledger.js +3 -5
  14. package/dashboard/src/tui/metrics-bar.js +20 -3
  15. package/dashboard/src/tui/pipeline.js +9 -13
  16. package/dashboard/src/tui/state-yaml.js +6 -8
  17. package/deepen-architecture/SKILL.md +6 -6
  18. package/define-success/SKILL.md +1 -1
  19. package/develop-tdd/SKILL.md +3 -3
  20. package/elaborate-spec/SKILL.md +7 -7
  21. package/execute-plan/SKILL.md +4 -4
  22. package/investigate-bug/SKILL.md +1 -1
  23. package/kickoff-branch/SKILL.md +1 -1
  24. package/map-codebase/SKILL.md +4 -4
  25. package/migrate-spec/SKILL.md +8 -8
  26. package/model-domain/SKILL.md +8 -8
  27. package/orchestrate-project/REFERENCE.md +8 -4
  28. package/orchestrate-project/SKILL.md +2 -2
  29. package/package.json +1 -1
  30. package/plan-release/SKILL.md +73 -27
  31. package/plan-work/SKILL.md +23 -7
  32. package/release-branch/SKILL.md +15 -0
  33. package/research-first/SKILL.md +2 -2
  34. package/run-evals/SKILL.md +2 -2
  35. package/run-planning/SKILL.md +1 -1
  36. package/scope-work/SKILL.md +4 -4
  37. package/scripts/land-branch.sh +28 -0
  38. package/seed-conventions/SKILL.md +37 -6
  39. package/session-state/SKILL.md +34 -3
  40. package/slice-tasks/SKILL.md +4 -4
  41. package/survey-context/SKILL.md +2 -2
  42. package/trace-requirement/SKILL.md +6 -6
  43. package/verify-work/SKILL.md +35 -2
  44. package/write-document/SKILL.md +1 -1
  45. package/dashboard/src/data/gate-status.js +0 -32
  46. package/dashboard/src/data/metrics.js +0 -89
  47. package/dashboard/src/data/pipeline-map.js +0 -32
  48. package/dashboard/src/data/reader.js +0 -122
  49. 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 };