@jonit-dev/night-watch-cli 1.7.18 → 1.7.19

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 (264) hide show
  1. package/bin/night-watch.mjs +1 -1
  2. package/dist/src/cli.js +13 -4
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/server/index.d.ts.map +1 -1
  5. package/dist/src/server/index.js +12 -1
  6. package/dist/src/server/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/web/dist/assets/index-DOzZY27d.js +473 -0
  9. package/web/dist/assets/index-w6Q6gxCS.css +1 -0
  10. package/web/dist/index.html +2 -2
  11. package/dist/board/factory.d.ts +0 -3
  12. package/dist/board/factory.d.ts.map +0 -1
  13. package/dist/board/factory.js +0 -10
  14. package/dist/board/factory.js.map +0 -1
  15. package/dist/board/providers/github-graphql.d.ts +0 -16
  16. package/dist/board/providers/github-graphql.d.ts.map +0 -1
  17. package/dist/board/providers/github-graphql.js +0 -43
  18. package/dist/board/providers/github-graphql.js.map +0 -1
  19. package/dist/board/providers/github-projects.d.ts +0 -51
  20. package/dist/board/providers/github-projects.d.ts.map +0 -1
  21. package/dist/board/providers/github-projects.js +0 -672
  22. package/dist/board/providers/github-projects.js.map +0 -1
  23. package/dist/board/types.d.ts +0 -60
  24. package/dist/board/types.d.ts.map +0 -1
  25. package/dist/board/types.js +0 -4
  26. package/dist/board/types.js.map +0 -1
  27. package/dist/cli.d.ts +0 -3
  28. package/dist/cli.d.ts.map +0 -1
  29. package/dist/cli.js +0 -80
  30. package/dist/cli.js.map +0 -1
  31. package/dist/commands/board.d.ts +0 -9
  32. package/dist/commands/board.d.ts.map +0 -1
  33. package/dist/commands/board.js +0 -294
  34. package/dist/commands/board.js.map +0 -1
  35. package/dist/commands/cancel.d.ts +0 -46
  36. package/dist/commands/cancel.d.ts.map +0 -1
  37. package/dist/commands/cancel.js +0 -241
  38. package/dist/commands/cancel.js.map +0 -1
  39. package/dist/commands/dashboard/tab-actions.d.ts +0 -10
  40. package/dist/commands/dashboard/tab-actions.d.ts.map +0 -1
  41. package/dist/commands/dashboard/tab-actions.js +0 -245
  42. package/dist/commands/dashboard/tab-actions.js.map +0 -1
  43. package/dist/commands/dashboard/tab-config.d.ts +0 -21
  44. package/dist/commands/dashboard/tab-config.d.ts.map +0 -1
  45. package/dist/commands/dashboard/tab-config.js +0 -829
  46. package/dist/commands/dashboard/tab-config.js.map +0 -1
  47. package/dist/commands/dashboard/tab-logs.d.ts +0 -10
  48. package/dist/commands/dashboard/tab-logs.d.ts.map +0 -1
  49. package/dist/commands/dashboard/tab-logs.js +0 -178
  50. package/dist/commands/dashboard/tab-logs.js.map +0 -1
  51. package/dist/commands/dashboard/tab-schedules.d.ts +0 -21
  52. package/dist/commands/dashboard/tab-schedules.d.ts.map +0 -1
  53. package/dist/commands/dashboard/tab-schedules.js +0 -304
  54. package/dist/commands/dashboard/tab-schedules.js.map +0 -1
  55. package/dist/commands/dashboard/tab-status.d.ts +0 -32
  56. package/dist/commands/dashboard/tab-status.d.ts.map +0 -1
  57. package/dist/commands/dashboard/tab-status.js +0 -421
  58. package/dist/commands/dashboard/tab-status.js.map +0 -1
  59. package/dist/commands/dashboard/types.d.ts +0 -43
  60. package/dist/commands/dashboard/types.d.ts.map +0 -1
  61. package/dist/commands/dashboard/types.js +0 -5
  62. package/dist/commands/dashboard/types.js.map +0 -1
  63. package/dist/commands/dashboard.d.ts +0 -11
  64. package/dist/commands/dashboard.d.ts.map +0 -1
  65. package/dist/commands/dashboard.js +0 -239
  66. package/dist/commands/dashboard.js.map +0 -1
  67. package/dist/commands/doctor.d.ts +0 -16
  68. package/dist/commands/doctor.d.ts.map +0 -1
  69. package/dist/commands/doctor.js +0 -202
  70. package/dist/commands/doctor.js.map +0 -1
  71. package/dist/commands/history.d.ts +0 -7
  72. package/dist/commands/history.d.ts.map +0 -1
  73. package/dist/commands/history.js +0 -56
  74. package/dist/commands/history.js.map +0 -1
  75. package/dist/commands/init.d.ts +0 -25
  76. package/dist/commands/init.d.ts.map +0 -1
  77. package/dist/commands/init.js +0 -534
  78. package/dist/commands/init.js.map +0 -1
  79. package/dist/commands/install.d.ts +0 -48
  80. package/dist/commands/install.d.ts.map +0 -1
  81. package/dist/commands/install.js +0 -303
  82. package/dist/commands/install.js.map +0 -1
  83. package/dist/commands/logs.d.ts +0 -15
  84. package/dist/commands/logs.d.ts.map +0 -1
  85. package/dist/commands/logs.js +0 -104
  86. package/dist/commands/logs.js.map +0 -1
  87. package/dist/commands/prd-state.d.ts +0 -12
  88. package/dist/commands/prd-state.d.ts.map +0 -1
  89. package/dist/commands/prd-state.js +0 -47
  90. package/dist/commands/prd-state.js.map +0 -1
  91. package/dist/commands/prd.d.ts +0 -24
  92. package/dist/commands/prd.d.ts.map +0 -1
  93. package/dist/commands/prd.js +0 -283
  94. package/dist/commands/prd.js.map +0 -1
  95. package/dist/commands/prds.d.ts +0 -13
  96. package/dist/commands/prds.d.ts.map +0 -1
  97. package/dist/commands/prds.js +0 -196
  98. package/dist/commands/prds.js.map +0 -1
  99. package/dist/commands/prs.d.ts +0 -14
  100. package/dist/commands/prs.d.ts.map +0 -1
  101. package/dist/commands/prs.js +0 -106
  102. package/dist/commands/prs.js.map +0 -1
  103. package/dist/commands/qa.d.ts +0 -30
  104. package/dist/commands/qa.d.ts.map +0 -1
  105. package/dist/commands/qa.js +0 -159
  106. package/dist/commands/qa.js.map +0 -1
  107. package/dist/commands/retry.d.ts +0 -9
  108. package/dist/commands/retry.d.ts.map +0 -1
  109. package/dist/commands/retry.js +0 -72
  110. package/dist/commands/retry.js.map +0 -1
  111. package/dist/commands/review.d.ts +0 -35
  112. package/dist/commands/review.d.ts.map +0 -1
  113. package/dist/commands/review.js +0 -252
  114. package/dist/commands/review.js.map +0 -1
  115. package/dist/commands/run.d.ts +0 -61
  116. package/dist/commands/run.d.ts.map +0 -1
  117. package/dist/commands/run.js +0 -364
  118. package/dist/commands/run.js.map +0 -1
  119. package/dist/commands/serve.d.ts +0 -7
  120. package/dist/commands/serve.d.ts.map +0 -1
  121. package/dist/commands/serve.js +0 -27
  122. package/dist/commands/serve.js.map +0 -1
  123. package/dist/commands/slice.d.ts +0 -26
  124. package/dist/commands/slice.d.ts.map +0 -1
  125. package/dist/commands/slice.js +0 -175
  126. package/dist/commands/slice.js.map +0 -1
  127. package/dist/commands/state.d.ts +0 -8
  128. package/dist/commands/state.d.ts.map +0 -1
  129. package/dist/commands/state.js +0 -56
  130. package/dist/commands/state.js.map +0 -1
  131. package/dist/commands/status.d.ts +0 -14
  132. package/dist/commands/status.d.ts.map +0 -1
  133. package/dist/commands/status.js +0 -147
  134. package/dist/commands/status.js.map +0 -1
  135. package/dist/commands/uninstall.d.ts +0 -25
  136. package/dist/commands/uninstall.d.ts.map +0 -1
  137. package/dist/commands/uninstall.js +0 -141
  138. package/dist/commands/uninstall.js.map +0 -1
  139. package/dist/commands/update.d.ts +0 -21
  140. package/dist/commands/update.d.ts.map +0 -1
  141. package/dist/commands/update.js +0 -87
  142. package/dist/commands/update.js.map +0 -1
  143. package/dist/config.d.ts +0 -23
  144. package/dist/config.d.ts.map +0 -1
  145. package/dist/config.js +0 -601
  146. package/dist/config.js.map +0 -1
  147. package/dist/constants.d.ts +0 -59
  148. package/dist/constants.d.ts.map +0 -1
  149. package/dist/constants.js +0 -110
  150. package/dist/constants.js.map +0 -1
  151. package/dist/server/index.d.ts +0 -23
  152. package/dist/server/index.d.ts.map +0 -1
  153. package/dist/server/index.js +0 -1074
  154. package/dist/server/index.js.map +0 -1
  155. package/dist/storage/json-state-migrator.d.ts +0 -24
  156. package/dist/storage/json-state-migrator.d.ts.map +0 -1
  157. package/dist/storage/json-state-migrator.js +0 -197
  158. package/dist/storage/json-state-migrator.js.map +0 -1
  159. package/dist/storage/repositories/index.d.ts +0 -23
  160. package/dist/storage/repositories/index.d.ts.map +0 -1
  161. package/dist/storage/repositories/index.js +0 -37
  162. package/dist/storage/repositories/index.js.map +0 -1
  163. package/dist/storage/repositories/interfaces.d.ts +0 -37
  164. package/dist/storage/repositories/interfaces.d.ts.map +0 -1
  165. package/dist/storage/repositories/interfaces.js +0 -6
  166. package/dist/storage/repositories/interfaces.js.map +0 -1
  167. package/dist/storage/repositories/sqlite/execution-history-repository.d.ts +0 -21
  168. package/dist/storage/repositories/sqlite/execution-history-repository.d.ts.map +0 -1
  169. package/dist/storage/repositories/sqlite/execution-history-repository.js +0 -94
  170. package/dist/storage/repositories/sqlite/execution-history-repository.js.map +0 -1
  171. package/dist/storage/repositories/sqlite/prd-state-repository.d.ts +0 -17
  172. package/dist/storage/repositories/sqlite/prd-state-repository.d.ts.map +0 -1
  173. package/dist/storage/repositories/sqlite/prd-state-repository.js +0 -74
  174. package/dist/storage/repositories/sqlite/prd-state-repository.js.map +0 -1
  175. package/dist/storage/repositories/sqlite/project-registry-repository.d.ts +0 -16
  176. package/dist/storage/repositories/sqlite/project-registry-repository.d.ts.map +0 -1
  177. package/dist/storage/repositories/sqlite/project-registry-repository.js +0 -34
  178. package/dist/storage/repositories/sqlite/project-registry-repository.js.map +0 -1
  179. package/dist/storage/repositories/sqlite/roadmap-state-repository.d.ts +0 -14
  180. package/dist/storage/repositories/sqlite/roadmap-state-repository.d.ts.map +0 -1
  181. package/dist/storage/repositories/sqlite/roadmap-state-repository.js +0 -47
  182. package/dist/storage/repositories/sqlite/roadmap-state-repository.js.map +0 -1
  183. package/dist/storage/sqlite/client.d.ts +0 -23
  184. package/dist/storage/sqlite/client.d.ts.map +0 -1
  185. package/dist/storage/sqlite/client.js +0 -47
  186. package/dist/storage/sqlite/client.js.map +0 -1
  187. package/dist/storage/sqlite/migrations.d.ts +0 -11
  188. package/dist/storage/sqlite/migrations.d.ts.map +0 -1
  189. package/dist/storage/sqlite/migrations.js +0 -57
  190. package/dist/storage/sqlite/migrations.js.map +0 -1
  191. package/dist/templates/prd-template.d.ts +0 -11
  192. package/dist/templates/prd-template.d.ts.map +0 -1
  193. package/dist/templates/prd-template.js +0 -166
  194. package/dist/templates/prd-template.js.map +0 -1
  195. package/dist/templates/slicer-prompt.d.ts +0 -54
  196. package/dist/templates/slicer-prompt.d.ts.map +0 -1
  197. package/dist/templates/slicer-prompt.js +0 -163
  198. package/dist/templates/slicer-prompt.js.map +0 -1
  199. package/dist/types.d.ts +0 -123
  200. package/dist/types.d.ts.map +0 -1
  201. package/dist/types.js +0 -5
  202. package/dist/types.js.map +0 -1
  203. package/dist/utils/checks.d.ts +0 -55
  204. package/dist/utils/checks.d.ts.map +0 -1
  205. package/dist/utils/checks.js +0 -246
  206. package/dist/utils/checks.js.map +0 -1
  207. package/dist/utils/config-writer.d.ts +0 -16
  208. package/dist/utils/config-writer.d.ts.map +0 -1
  209. package/dist/utils/config-writer.js +0 -45
  210. package/dist/utils/config-writer.js.map +0 -1
  211. package/dist/utils/crontab.d.ts +0 -62
  212. package/dist/utils/crontab.d.ts.map +0 -1
  213. package/dist/utils/crontab.js +0 -168
  214. package/dist/utils/crontab.js.map +0 -1
  215. package/dist/utils/execution-history.d.ts +0 -54
  216. package/dist/utils/execution-history.d.ts.map +0 -1
  217. package/dist/utils/execution-history.js +0 -80
  218. package/dist/utils/execution-history.js.map +0 -1
  219. package/dist/utils/github.d.ts +0 -40
  220. package/dist/utils/github.d.ts.map +0 -1
  221. package/dist/utils/github.js +0 -126
  222. package/dist/utils/github.js.map +0 -1
  223. package/dist/utils/notify.d.ts +0 -63
  224. package/dist/utils/notify.d.ts.map +0 -1
  225. package/dist/utils/notify.js +0 -264
  226. package/dist/utils/notify.js.map +0 -1
  227. package/dist/utils/prd-states.d.ts +0 -16
  228. package/dist/utils/prd-states.d.ts.map +0 -1
  229. package/dist/utils/prd-states.js +0 -28
  230. package/dist/utils/prd-states.js.map +0 -1
  231. package/dist/utils/registry.d.ts +0 -44
  232. package/dist/utils/registry.d.ts.map +0 -1
  233. package/dist/utils/registry.js +0 -86
  234. package/dist/utils/registry.js.map +0 -1
  235. package/dist/utils/roadmap-parser.d.ts +0 -45
  236. package/dist/utils/roadmap-parser.d.ts.map +0 -1
  237. package/dist/utils/roadmap-parser.js +0 -136
  238. package/dist/utils/roadmap-parser.js.map +0 -1
  239. package/dist/utils/roadmap-scanner.d.ts +0 -92
  240. package/dist/utils/roadmap-scanner.d.ts.map +0 -1
  241. package/dist/utils/roadmap-scanner.js +0 -349
  242. package/dist/utils/roadmap-scanner.js.map +0 -1
  243. package/dist/utils/roadmap-state.d.ts +0 -90
  244. package/dist/utils/roadmap-state.d.ts.map +0 -1
  245. package/dist/utils/roadmap-state.js +0 -154
  246. package/dist/utils/roadmap-state.js.map +0 -1
  247. package/dist/utils/script-result.d.ts +0 -12
  248. package/dist/utils/script-result.d.ts.map +0 -1
  249. package/dist/utils/script-result.js +0 -46
  250. package/dist/utils/script-result.js.map +0 -1
  251. package/dist/utils/shell.d.ts +0 -27
  252. package/dist/utils/shell.d.ts.map +0 -1
  253. package/dist/utils/shell.js +0 -64
  254. package/dist/utils/shell.js.map +0 -1
  255. package/dist/utils/status-data.d.ts +0 -148
  256. package/dist/utils/status-data.d.ts.map +0 -1
  257. package/dist/utils/status-data.js +0 -593
  258. package/dist/utils/status-data.js.map +0 -1
  259. package/dist/utils/ui.d.ts +0 -55
  260. package/dist/utils/ui.d.ts.map +0 -1
  261. package/dist/utils/ui.js +0 -121
  262. package/dist/utils/ui.js.map +0 -1
  263. package/web/dist/assets/index-BtxQU4oX.css +0 -1
  264. package/web/dist/assets/index-D3awZ0gS.js +0 -473
@@ -1,593 +0,0 @@
1
- /**
2
- * Status data layer for Night Watch CLI
3
- * Provides data-fetching functions used by both the status command and the dashboard TUI.
4
- */
5
- import { createHash } from "crypto";
6
- import { execSync } from "child_process";
7
- import * as fs from "fs";
8
- import * as path from "path";
9
- import { CLAIM_FILE_EXTENSION, LOCK_FILE_PREFIX, LOG_DIR, LOG_FILE_NAMES } from "../constants.js";
10
- import { getPrdStatesForProject } from "./prd-states.js";
11
- import { generateMarker, getEntries, getProjectEntries } from "./crontab.js";
12
- /**
13
- * Get the project name from directory or package.json
14
- */
15
- export function getProjectName(projectDir) {
16
- const packageJsonPath = path.join(projectDir, "package.json");
17
- if (fs.existsSync(packageJsonPath)) {
18
- try {
19
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
20
- if (packageJson.name) {
21
- return packageJson.name;
22
- }
23
- }
24
- catch {
25
- // Ignore parse errors
26
- }
27
- }
28
- return path.basename(projectDir);
29
- }
30
- /**
31
- * Compute the runtime key for a project directory.
32
- * Must stay in sync with project_runtime_key() in night-watch-helpers.sh.
33
- */
34
- export function projectRuntimeKey(projectDir) {
35
- const projectName = path.basename(projectDir);
36
- const hash = createHash("sha1").update(projectDir).digest("hex").slice(0, 12);
37
- return `${projectName}-${hash}`;
38
- }
39
- /**
40
- * Compute the lock file path for the executor of a given project directory.
41
- */
42
- export function executorLockPath(projectDir) {
43
- return `${LOCK_FILE_PREFIX}${projectRuntimeKey(projectDir)}.lock`;
44
- }
45
- /**
46
- * Compute the lock file path for the reviewer of a given project directory.
47
- */
48
- export function reviewerLockPath(projectDir) {
49
- return `${LOCK_FILE_PREFIX}pr-reviewer-${projectRuntimeKey(projectDir)}.lock`;
50
- }
51
- /**
52
- * Compute the lock file path for the QA process of a given project directory.
53
- */
54
- export function qaLockPath(projectDir) {
55
- return `${LOCK_FILE_PREFIX}qa-${projectRuntimeKey(projectDir)}.lock`;
56
- }
57
- /**
58
- * Check if a process with the given PID is running
59
- */
60
- export function isProcessRunning(pid) {
61
- try {
62
- process.kill(pid, 0);
63
- return true;
64
- }
65
- catch {
66
- return false;
67
- }
68
- }
69
- /**
70
- * Read PID from lock file and check if process is running
71
- */
72
- export function checkLockFile(lockPath) {
73
- if (!fs.existsSync(lockPath)) {
74
- return { running: false, pid: null };
75
- }
76
- try {
77
- const pidStr = fs.readFileSync(lockPath, "utf-8").trim();
78
- const pid = parseInt(pidStr, 10);
79
- if (isNaN(pid)) {
80
- return { running: false, pid: null };
81
- }
82
- return {
83
- running: isProcessRunning(pid),
84
- pid,
85
- };
86
- }
87
- catch {
88
- return { running: false, pid: null };
89
- }
90
- }
91
- /**
92
- * Count PRDs in the PRD directory and return counts
93
- */
94
- export function countPRDs(projectDir, prdDir, maxRuntime) {
95
- const fullPrdPath = path.join(projectDir, prdDir);
96
- if (!fs.existsSync(fullPrdPath)) {
97
- return { pending: 0, claimed: 0, done: 0 };
98
- }
99
- let pending = 0;
100
- let claimed = 0;
101
- let done = 0;
102
- const countInDir = (dir) => {
103
- const entries = fs.readdirSync(dir, { withFileTypes: true });
104
- for (const entry of entries) {
105
- const fullPath = path.join(dir, entry.name);
106
- if (entry.isDirectory()) {
107
- if (entry.name === "done") {
108
- try {
109
- const doneEntries = fs.readdirSync(fullPath);
110
- done += doneEntries.filter((e) => e.endsWith(".md")).length;
111
- }
112
- catch {
113
- // Ignore errors
114
- }
115
- }
116
- else {
117
- countInDir(fullPath);
118
- }
119
- }
120
- else if (entry.name.endsWith(".md")) {
121
- const claimPath = path.join(dir, entry.name + CLAIM_FILE_EXTENSION);
122
- if (fs.existsSync(claimPath)) {
123
- try {
124
- const content = fs.readFileSync(claimPath, "utf-8");
125
- const claimData = JSON.parse(content);
126
- const age = Math.floor(Date.now() / 1000) - claimData.timestamp;
127
- if (age < maxRuntime) {
128
- claimed++;
129
- }
130
- else {
131
- pending++;
132
- }
133
- }
134
- catch {
135
- pending++;
136
- }
137
- }
138
- else {
139
- pending++;
140
- }
141
- }
142
- }
143
- };
144
- try {
145
- countInDir(fullPrdPath);
146
- }
147
- catch {
148
- // Ignore errors
149
- }
150
- return { pending, claimed, done };
151
- }
152
- /**
153
- * Parse dependency references from a PRD file.
154
- * Looks for a line matching "depends on: `name1`, `name2`" (case-insensitive).
155
- */
156
- export function parsePrdDependencies(prdPath) {
157
- try {
158
- const content = fs.readFileSync(prdPath, "utf-8");
159
- // Match "Depends on:" with optional bold markdown, capture rest of line
160
- const match = content.match(/(?:\*\*)?Depends on:(?:\*\*)?[^\S\n]*([^\n]*)/i);
161
- if (!match)
162
- return [];
163
- return match[1]
164
- .split(",")
165
- .map((d) => d.replace(/`/g, "").replace(/\*\*/g, "").replace(/\|/g, "").trim())
166
- .filter((d) => d.length > 0);
167
- }
168
- catch {
169
- return [];
170
- }
171
- }
172
- /**
173
- * Collect PRD info items from the PRD directory
174
- * Cross-validates claim files with executor lock to avoid stale "in-progress" status
175
- */
176
- export function collectPrdInfo(projectDir, prdDir, maxRuntime) {
177
- const fullPrdPath = path.join(projectDir, prdDir);
178
- const prds = [];
179
- if (!fs.existsSync(fullPrdPath)) {
180
- return prds;
181
- }
182
- // Pre-check executor lock for cross-validation
183
- const lockPath = executorLockPath(projectDir);
184
- const executorLock = checkLockFile(lockPath);
185
- // Track orphaned claim files to clean up
186
- const orphanedClaimFiles = [];
187
- const collectInDir = (dir) => {
188
- let entries;
189
- try {
190
- entries = fs.readdirSync(dir, { withFileTypes: true });
191
- }
192
- catch {
193
- return;
194
- }
195
- for (const entry of entries) {
196
- const fullPath = path.join(dir, entry.name);
197
- if (entry.isDirectory()) {
198
- if (entry.name === "done") {
199
- try {
200
- const doneEntries = fs.readdirSync(fullPath);
201
- for (const doneEntry of doneEntries) {
202
- if (doneEntry.endsWith(".md")) {
203
- prds.push({
204
- name: doneEntry.replace(/\.md$/, ""),
205
- status: "done",
206
- dependencies: [],
207
- unmetDependencies: [],
208
- });
209
- }
210
- }
211
- }
212
- catch {
213
- // Ignore errors
214
- }
215
- }
216
- else {
217
- collectInDir(fullPath);
218
- }
219
- }
220
- else if (entry.name.endsWith(".md")) {
221
- const claimPath = path.join(dir, entry.name + CLAIM_FILE_EXTENSION);
222
- let status = "ready";
223
- if (fs.existsSync(claimPath)) {
224
- try {
225
- const content = fs.readFileSync(claimPath, "utf-8");
226
- const claimData = JSON.parse(content);
227
- const age = Math.floor(Date.now() / 1000) - claimData.timestamp;
228
- if (age < maxRuntime) {
229
- // Cross-check: verify executor lock exists and is running
230
- if (executorLock.running) {
231
- status = "in-progress";
232
- }
233
- else {
234
- // Claim is fresh but executor is not running - stale/orphaned claim
235
- status = "ready";
236
- orphanedClaimFiles.push(claimPath);
237
- }
238
- }
239
- // else: stale claim (too old) — status stays "ready"
240
- }
241
- catch {
242
- status = "ready";
243
- }
244
- }
245
- const dependencies = parsePrdDependencies(fullPath);
246
- prds.push({
247
- name: entry.name.replace(/\.md$/, ""),
248
- status,
249
- dependencies,
250
- unmetDependencies: [],
251
- });
252
- }
253
- }
254
- };
255
- collectInDir(fullPrdPath);
256
- // Clean up orphaned claim files
257
- for (const claimFile of orphanedClaimFiles) {
258
- try {
259
- fs.unlinkSync(claimFile);
260
- }
261
- catch {
262
- // Ignore errors during cleanup
263
- }
264
- }
265
- // Overlay pending-review state from ~/.night-watch/prd-states.json
266
- // PRD files stay in place; state is tracked separately
267
- const prdStates = getPrdStatesForProject(projectDir);
268
- for (const prd of prds) {
269
- if (prdStates[prd.name]?.status === "pending-review" && prd.status !== "done" && prd.status !== "in-progress") {
270
- prd.status = "pending-review";
271
- }
272
- }
273
- // Compute unmet dependencies: a dependency is unmet if there's no "done" PRD with that name
274
- const doneNames = new Set(prds.filter((p) => p.status === "done").map((p) => p.name));
275
- for (const prd of prds) {
276
- if (prd.dependencies.length > 0) {
277
- prd.unmetDependencies = prd.dependencies.filter((dep) => !doneNames.has(dep) && !doneNames.has(dep.replace(/\.md$/, "")));
278
- // Mark PRDs with unmet dependencies as blocked (unless already done or in-progress)
279
- if (prd.unmetDependencies.length > 0 && prd.status === "ready") {
280
- prd.status = "blocked";
281
- }
282
- }
283
- }
284
- return prds;
285
- }
286
- /**
287
- * Count open PRs on night-watch/ or feat/ branches using gh CLI
288
- */
289
- export function countOpenPRs(projectDir, branchPatterns) {
290
- try {
291
- execSync("git rev-parse --git-dir", {
292
- cwd: projectDir,
293
- encoding: "utf-8",
294
- stdio: ["pipe", "pipe", "pipe"],
295
- });
296
- try {
297
- execSync("which gh", { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
298
- }
299
- catch {
300
- return 0;
301
- }
302
- const output = execSync("gh pr list --state open --json headRefName,number", {
303
- cwd: projectDir,
304
- encoding: "utf-8",
305
- stdio: ["pipe", "pipe", "pipe"],
306
- });
307
- const prs = JSON.parse(output);
308
- const matchingPRs = prs.filter((pr) => branchPatterns.some((pattern) => pr.headRefName.startsWith(pattern)));
309
- return matchingPRs.length;
310
- }
311
- catch {
312
- return 0;
313
- }
314
- }
315
- /**
316
- * Derive CI status from gh statusCheckRollup data
317
- * Supports both CheckRun (status: "COMPLETED", "IN_PROGRESS", etc.)
318
- * and StatusContext (state: "SUCCESS", "FAILURE", "PENDING", etc.) types
319
- *
320
- * Status derivation priority:
321
- * 1. If any check has FAILURE, ERROR, CANCELLED, or TIMED_OUT conclusion → "fail"
322
- * 2. If all checks have SUCCESS or NEUTRAL conclusion → "pass"
323
- * 3. If any check has IN_PROGRESS, QUEUED, or PENDING status → "pending"
324
- * 4. Otherwise → "unknown"
325
- */
326
- function deriveCiStatus(checks) {
327
- // Handle null, undefined, or empty array
328
- if (!checks || !Array.isArray(checks) || checks.length === 0) {
329
- if (process.env.DEBUG_PR_DATA === "1") {
330
- console.log("[DEBUG] deriveCiStatus: No checks available, returning 'unknown'");
331
- }
332
- return "unknown";
333
- }
334
- if (process.env.DEBUG_PR_DATA === "1") {
335
- console.log("[DEBUG] deriveCiStatus: Processing", checks.length, "checks");
336
- console.log("[DEBUG] deriveCiStatus: checks =", JSON.stringify(checks, null, 2));
337
- }
338
- // Normalize check data - handle both CheckRun and StatusContext formats
339
- const normalizedChecks = checks.map((c) => ({
340
- conclusion: c.conclusion?.toUpperCase() ?? null,
341
- status: c.status?.toUpperCase() ?? null,
342
- state: c.state?.toUpperCase() ?? null,
343
- }));
344
- // Check for failures in CheckRun conclusion or StatusContext state
345
- // FAILURE, ERROR, CANCELLED, TIMED_OUT all count as failures
346
- const hasFailure = normalizedChecks.some((c) => {
347
- const failConclusions = ["FAILURE", "ERROR", "CANCELLED", "TIMED_OUT", "ACTION_REQUIRED"];
348
- const failStates = ["FAILURE", "ERROR"];
349
- return ((c.conclusion !== null && failConclusions.includes(c.conclusion)) ||
350
- (c.state !== null && failStates.includes(c.state)));
351
- });
352
- if (hasFailure) {
353
- if (process.env.DEBUG_PR_DATA === "1") {
354
- console.log("[DEBUG] deriveCiStatus: Found failure, returning 'fail'");
355
- }
356
- return "fail";
357
- }
358
- // Check if any checks are still pending/in-progress
359
- const hasPending = normalizedChecks.some((c) => {
360
- const pendingStatuses = ["IN_PROGRESS", "QUEUED", "PENDING", "WAITING", "REQUESTED"];
361
- const pendingStates = ["PENDING", "IN_PROGRESS"];
362
- return ((c.status !== null && pendingStatuses.includes(c.status)) ||
363
- (c.state !== null && pendingStates.includes(c.state)));
364
- });
365
- if (hasPending) {
366
- if (process.env.DEBUG_PR_DATA === "1") {
367
- console.log("[DEBUG] deriveCiStatus: Found pending checks, returning 'pending'");
368
- }
369
- return "pending";
370
- }
371
- // Check if all checks are complete (success or neutral)
372
- const allComplete = normalizedChecks.every((c) => {
373
- const completeConclusions = ["SUCCESS", "NEUTRAL", "SKIPPED"];
374
- const completeStatuses = ["COMPLETED"];
375
- const completeStates = ["SUCCESS"];
376
- // If there's a conclusion and it's a success/neutral state
377
- if (c.conclusion !== null && completeConclusions.includes(c.conclusion)) {
378
- return true;
379
- }
380
- // If there's a status and it's completed
381
- if (c.status !== null && completeStatuses.includes(c.status)) {
382
- return true;
383
- }
384
- // If there's a state and it's success
385
- if (c.state !== null && completeStates.includes(c.state)) {
386
- return true;
387
- }
388
- return false;
389
- });
390
- if (allComplete) {
391
- if (process.env.DEBUG_PR_DATA === "1") {
392
- console.log("[DEBUG] deriveCiStatus: All checks complete, returning 'pass'");
393
- }
394
- return "pass";
395
- }
396
- // Default to unknown if we can't determine status
397
- if (process.env.DEBUG_PR_DATA === "1") {
398
- console.log("[DEBUG] deriveCiStatus: Could not determine status, returning 'unknown'");
399
- }
400
- return "unknown";
401
- }
402
- /**
403
- * Derive review score from gh reviewDecision field
404
- * Maps GitHub review decisions to a numeric score (0-100)
405
- * Returns null if no review has been submitted or review is required
406
- *
407
- * GitHub reviewDecision values:
408
- * - "APPROVED" — PR has been approved by required reviewers → 100
409
- * - "CHANGES_REQUESTED" — Reviewer requested changes → 0
410
- * - "REVIEW_REQUIRED" — PR requires review but hasn't been reviewed yet → null
411
- * - "" / null / undefined — No review required or not yet reviewed → null
412
- */
413
- function deriveReviewScore(reviewDecision) {
414
- // Handle null, undefined, or empty string (meaning no review yet)
415
- if (reviewDecision === null || reviewDecision === undefined || reviewDecision === "") {
416
- if (process.env.DEBUG_PR_DATA === "1") {
417
- console.log("[DEBUG] deriveReviewScore: No review decision, returning null");
418
- }
419
- return null;
420
- }
421
- const normalizedDecision = reviewDecision.toUpperCase();
422
- if (process.env.DEBUG_PR_DATA === "1") {
423
- console.log("[DEBUG] deriveReviewScore: reviewDecision =", reviewDecision, "-> normalized:", normalizedDecision);
424
- }
425
- switch (normalizedDecision) {
426
- case "APPROVED":
427
- return 100;
428
- case "CHANGES_REQUESTED":
429
- return 0;
430
- case "REVIEW_REQUIRED":
431
- return null;
432
- default:
433
- // Handle any unknown values gracefully
434
- if (process.env.DEBUG_PR_DATA === "1") {
435
- console.log("[DEBUG] deriveReviewScore: Unknown review decision:", reviewDecision);
436
- }
437
- return null;
438
- }
439
- }
440
- /**
441
- * Collect open PR info using gh CLI
442
- */
443
- export function collectPrInfo(projectDir, branchPatterns) {
444
- try {
445
- execSync("git rev-parse --git-dir", {
446
- cwd: projectDir,
447
- encoding: "utf-8",
448
- stdio: ["pipe", "pipe", "pipe"],
449
- });
450
- try {
451
- execSync("which gh", { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
452
- }
453
- catch {
454
- return [];
455
- }
456
- const output = execSync("gh pr list --state open --json headRefName,number,title,url,statusCheckRollup,reviewDecision", {
457
- cwd: projectDir,
458
- encoding: "utf-8",
459
- stdio: ["pipe", "pipe", "pipe"],
460
- });
461
- if (process.env.DEBUG_PR_DATA === "1") {
462
- console.log("[DEBUG] collectPrInfo: Raw gh output:", output);
463
- }
464
- const prs = JSON.parse(output);
465
- if (process.env.DEBUG_PR_DATA === "1") {
466
- console.log("[DEBUG] collectPrInfo: Parsed", prs.length, "PRs from gh CLI");
467
- }
468
- return prs
469
- .filter((pr) => {
470
- const matches = branchPatterns.some((pattern) => pr.headRefName.startsWith(pattern));
471
- if (process.env.DEBUG_PR_DATA === "1" && !matches) {
472
- console.log("[DEBUG] collectPrInfo: Filtering out PR #" + pr.number + " (" + pr.headRefName + ") - doesn't match branch patterns");
473
- }
474
- return matches;
475
- })
476
- .map((pr) => {
477
- if (process.env.DEBUG_PR_DATA === "1") {
478
- console.log("[DEBUG] collectPrInfo: Processing PR #" + pr.number);
479
- console.log("[DEBUG] collectPrInfo: statusCheckRollup:", JSON.stringify(pr.statusCheckRollup));
480
- console.log("[DEBUG] collectPrInfo: reviewDecision:", JSON.stringify(pr.reviewDecision));
481
- }
482
- const result = {
483
- number: pr.number,
484
- title: pr.title,
485
- branch: pr.headRefName,
486
- url: pr.url,
487
- ciStatus: deriveCiStatus(pr.statusCheckRollup),
488
- reviewScore: deriveReviewScore(pr.reviewDecision),
489
- };
490
- if (process.env.DEBUG_PR_DATA === "1") {
491
- console.log("[DEBUG] collectPrInfo: -> ciStatus:", result.ciStatus, ", reviewScore:", result.reviewScore);
492
- }
493
- return result;
494
- });
495
- }
496
- catch (error) {
497
- if (process.env.DEBUG_PR_DATA === "1") {
498
- console.log("[DEBUG] collectPrInfo: Error:", error instanceof Error ? error.message : String(error));
499
- }
500
- return [];
501
- }
502
- }
503
- /**
504
- * Get last N lines from a log file
505
- */
506
- export function getLastLogLines(logPath, lines) {
507
- if (!fs.existsSync(logPath)) {
508
- return [];
509
- }
510
- try {
511
- const content = fs.readFileSync(logPath, "utf-8");
512
- const allLines = content.trim().split("\n");
513
- return allLines.slice(-lines);
514
- }
515
- catch {
516
- return [];
517
- }
518
- }
519
- /**
520
- * Get log file info
521
- */
522
- export function getLogInfo(logPath, lastLines = 5) {
523
- const exists = fs.existsSync(logPath);
524
- return {
525
- path: logPath,
526
- lastLines: exists ? getLastLogLines(logPath, lastLines) : [],
527
- exists,
528
- size: exists ? fs.statSync(logPath).size : 0,
529
- };
530
- }
531
- /**
532
- * Collect log info as ILogInfo items
533
- */
534
- export function collectLogInfo(projectDir) {
535
- const logNames = ["executor", "reviewer", "qa"];
536
- return logNames.map((name) => {
537
- // Map logical name (executor/reviewer) to actual file name (night-watch/night-watch-pr-reviewer)
538
- const fileName = LOG_FILE_NAMES[name] || name;
539
- const logPath = path.join(projectDir, LOG_DIR, `${fileName}.log`);
540
- const exists = fs.existsSync(logPath);
541
- return {
542
- name,
543
- path: logPath,
544
- exists,
545
- size: exists ? fs.statSync(logPath).size : 0,
546
- lastLines: exists ? getLastLogLines(logPath, 5) : [],
547
- };
548
- });
549
- }
550
- /**
551
- * Get crontab information for a project
552
- */
553
- export function getCrontabInfo(projectName, projectDir) {
554
- const marker = generateMarker(projectName);
555
- const crontabEntries = Array.from(new Set([...getEntries(marker), ...getProjectEntries(projectDir)]));
556
- return {
557
- installed: crontabEntries.length > 0,
558
- entries: crontabEntries,
559
- };
560
- }
561
- /**
562
- * Fetch a complete status snapshot for the given project
563
- */
564
- export function fetchStatusSnapshot(projectDir, config) {
565
- const projectName = getProjectName(projectDir);
566
- const executorLock = checkLockFile(executorLockPath(projectDir));
567
- const reviewerLock = checkLockFile(reviewerLockPath(projectDir));
568
- const qaLock = checkLockFile(qaLockPath(projectDir));
569
- const processes = [
570
- { name: "executor", running: executorLock.running, pid: executorLock.pid },
571
- { name: "reviewer", running: reviewerLock.running, pid: reviewerLock.pid },
572
- { name: "qa", running: qaLock.running, pid: qaLock.pid },
573
- ];
574
- const prds = collectPrdInfo(projectDir, config.prdDir, config.maxRuntime);
575
- const prs = collectPrInfo(projectDir, config.branchPatterns);
576
- const logs = collectLogInfo(projectDir);
577
- const crontab = getCrontabInfo(projectName, projectDir);
578
- // Find any PRD with a fresh, lock-corroborated in-progress status
579
- const activePrd = prds.find((p) => p.status === "in-progress")?.name ?? null;
580
- return {
581
- projectName,
582
- projectDir,
583
- config,
584
- prds,
585
- processes,
586
- prs,
587
- logs,
588
- crontab,
589
- activePrd,
590
- timestamp: new Date(),
591
- };
592
- }
593
- //# sourceMappingURL=status-data.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-data.js","sourceRoot":"","sources":["../../src/utils/status-data.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- /**
2
- * UI utilities for Night Watch CLI
3
- * Provides colored output, spinners, and table formatting
4
- */
5
- import { type Ora } from "ora";
6
- import Table from "cli-table3";
7
- /**
8
- * Print a success message with green check prefix
9
- */
10
- export declare function success(msg: string): void;
11
- /**
12
- * Print an error message with red cross prefix
13
- */
14
- export declare function error(msg: string): void;
15
- /**
16
- * Print a warning message with yellow warning prefix
17
- */
18
- export declare function warn(msg: string): void;
19
- /**
20
- * Print an info message with cyan info prefix
21
- */
22
- export declare function info(msg: string): void;
23
- /**
24
- * Print a bold section header with underline
25
- */
26
- export declare function header(title: string): void;
27
- /**
28
- * Print dimmed text for secondary information
29
- */
30
- export declare function dim(msg: string): void;
31
- /**
32
- * Format and print a key-value pair with consistent alignment
33
- */
34
- export declare function label(key: string, value: string): void;
35
- /**
36
- * Create an ora spinner instance
37
- */
38
- export declare function createSpinner(text: string): Ora;
39
- /**
40
- * Create a configured cli-table3 instance with sensible defaults
41
- */
42
- export declare function createTable(options?: Table.TableConstructorOptions): Table.Table;
43
- /**
44
- * Format status indicator: green running or dim not running
45
- */
46
- export declare function formatRunningStatus(running: boolean, pid: number | null): string;
47
- /**
48
- * Format installed status: green installed or yellow not installed
49
- */
50
- export declare function formatInstalledStatus(installed: boolean): string;
51
- /**
52
- * Print a step message with step number
53
- */
54
- export declare function step(current: number, total: number, msg: string): void;
55
- //# sourceMappingURL=ui.d.ts.map