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

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 (274) 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 +14 -22
  6. package/dist/src/server/index.js.map +1 -1
  7. package/dist/src/slack/client.d.ts +4 -0
  8. package/dist/src/slack/client.d.ts.map +1 -1
  9. package/dist/src/slack/client.js +6 -0
  10. package/dist/src/slack/client.js.map +1 -1
  11. package/dist/src/slack/interaction-listener.d.ts +2 -3
  12. package/dist/src/slack/interaction-listener.d.ts.map +1 -1
  13. package/dist/src/slack/interaction-listener.js +30 -14
  14. package/dist/src/slack/interaction-listener.js.map +1 -1
  15. package/dist/src/storage/repositories/sqlite/agent-persona-repository.js +1 -1
  16. package/dist/src/storage/repositories/sqlite/agent-persona-repository.js.map +1 -1
  17. package/package.json +1 -1
  18. package/web/dist/assets/index-DOzZY27d.js +473 -0
  19. package/web/dist/assets/index-w6Q6gxCS.css +1 -0
  20. package/web/dist/index.html +2 -2
  21. package/dist/board/factory.d.ts +0 -3
  22. package/dist/board/factory.d.ts.map +0 -1
  23. package/dist/board/factory.js +0 -10
  24. package/dist/board/factory.js.map +0 -1
  25. package/dist/board/providers/github-graphql.d.ts +0 -16
  26. package/dist/board/providers/github-graphql.d.ts.map +0 -1
  27. package/dist/board/providers/github-graphql.js +0 -43
  28. package/dist/board/providers/github-graphql.js.map +0 -1
  29. package/dist/board/providers/github-projects.d.ts +0 -51
  30. package/dist/board/providers/github-projects.d.ts.map +0 -1
  31. package/dist/board/providers/github-projects.js +0 -672
  32. package/dist/board/providers/github-projects.js.map +0 -1
  33. package/dist/board/types.d.ts +0 -60
  34. package/dist/board/types.d.ts.map +0 -1
  35. package/dist/board/types.js +0 -4
  36. package/dist/board/types.js.map +0 -1
  37. package/dist/cli.d.ts +0 -3
  38. package/dist/cli.d.ts.map +0 -1
  39. package/dist/cli.js +0 -80
  40. package/dist/cli.js.map +0 -1
  41. package/dist/commands/board.d.ts +0 -9
  42. package/dist/commands/board.d.ts.map +0 -1
  43. package/dist/commands/board.js +0 -294
  44. package/dist/commands/board.js.map +0 -1
  45. package/dist/commands/cancel.d.ts +0 -46
  46. package/dist/commands/cancel.d.ts.map +0 -1
  47. package/dist/commands/cancel.js +0 -241
  48. package/dist/commands/cancel.js.map +0 -1
  49. package/dist/commands/dashboard/tab-actions.d.ts +0 -10
  50. package/dist/commands/dashboard/tab-actions.d.ts.map +0 -1
  51. package/dist/commands/dashboard/tab-actions.js +0 -245
  52. package/dist/commands/dashboard/tab-actions.js.map +0 -1
  53. package/dist/commands/dashboard/tab-config.d.ts +0 -21
  54. package/dist/commands/dashboard/tab-config.d.ts.map +0 -1
  55. package/dist/commands/dashboard/tab-config.js +0 -829
  56. package/dist/commands/dashboard/tab-config.js.map +0 -1
  57. package/dist/commands/dashboard/tab-logs.d.ts +0 -10
  58. package/dist/commands/dashboard/tab-logs.d.ts.map +0 -1
  59. package/dist/commands/dashboard/tab-logs.js +0 -178
  60. package/dist/commands/dashboard/tab-logs.js.map +0 -1
  61. package/dist/commands/dashboard/tab-schedules.d.ts +0 -21
  62. package/dist/commands/dashboard/tab-schedules.d.ts.map +0 -1
  63. package/dist/commands/dashboard/tab-schedules.js +0 -304
  64. package/dist/commands/dashboard/tab-schedules.js.map +0 -1
  65. package/dist/commands/dashboard/tab-status.d.ts +0 -32
  66. package/dist/commands/dashboard/tab-status.d.ts.map +0 -1
  67. package/dist/commands/dashboard/tab-status.js +0 -421
  68. package/dist/commands/dashboard/tab-status.js.map +0 -1
  69. package/dist/commands/dashboard/types.d.ts +0 -43
  70. package/dist/commands/dashboard/types.d.ts.map +0 -1
  71. package/dist/commands/dashboard/types.js +0 -5
  72. package/dist/commands/dashboard/types.js.map +0 -1
  73. package/dist/commands/dashboard.d.ts +0 -11
  74. package/dist/commands/dashboard.d.ts.map +0 -1
  75. package/dist/commands/dashboard.js +0 -239
  76. package/dist/commands/dashboard.js.map +0 -1
  77. package/dist/commands/doctor.d.ts +0 -16
  78. package/dist/commands/doctor.d.ts.map +0 -1
  79. package/dist/commands/doctor.js +0 -202
  80. package/dist/commands/doctor.js.map +0 -1
  81. package/dist/commands/history.d.ts +0 -7
  82. package/dist/commands/history.d.ts.map +0 -1
  83. package/dist/commands/history.js +0 -56
  84. package/dist/commands/history.js.map +0 -1
  85. package/dist/commands/init.d.ts +0 -25
  86. package/dist/commands/init.d.ts.map +0 -1
  87. package/dist/commands/init.js +0 -534
  88. package/dist/commands/init.js.map +0 -1
  89. package/dist/commands/install.d.ts +0 -48
  90. package/dist/commands/install.d.ts.map +0 -1
  91. package/dist/commands/install.js +0 -303
  92. package/dist/commands/install.js.map +0 -1
  93. package/dist/commands/logs.d.ts +0 -15
  94. package/dist/commands/logs.d.ts.map +0 -1
  95. package/dist/commands/logs.js +0 -104
  96. package/dist/commands/logs.js.map +0 -1
  97. package/dist/commands/prd-state.d.ts +0 -12
  98. package/dist/commands/prd-state.d.ts.map +0 -1
  99. package/dist/commands/prd-state.js +0 -47
  100. package/dist/commands/prd-state.js.map +0 -1
  101. package/dist/commands/prd.d.ts +0 -24
  102. package/dist/commands/prd.d.ts.map +0 -1
  103. package/dist/commands/prd.js +0 -283
  104. package/dist/commands/prd.js.map +0 -1
  105. package/dist/commands/prds.d.ts +0 -13
  106. package/dist/commands/prds.d.ts.map +0 -1
  107. package/dist/commands/prds.js +0 -196
  108. package/dist/commands/prds.js.map +0 -1
  109. package/dist/commands/prs.d.ts +0 -14
  110. package/dist/commands/prs.d.ts.map +0 -1
  111. package/dist/commands/prs.js +0 -106
  112. package/dist/commands/prs.js.map +0 -1
  113. package/dist/commands/qa.d.ts +0 -30
  114. package/dist/commands/qa.d.ts.map +0 -1
  115. package/dist/commands/qa.js +0 -159
  116. package/dist/commands/qa.js.map +0 -1
  117. package/dist/commands/retry.d.ts +0 -9
  118. package/dist/commands/retry.d.ts.map +0 -1
  119. package/dist/commands/retry.js +0 -72
  120. package/dist/commands/retry.js.map +0 -1
  121. package/dist/commands/review.d.ts +0 -35
  122. package/dist/commands/review.d.ts.map +0 -1
  123. package/dist/commands/review.js +0 -252
  124. package/dist/commands/review.js.map +0 -1
  125. package/dist/commands/run.d.ts +0 -61
  126. package/dist/commands/run.d.ts.map +0 -1
  127. package/dist/commands/run.js +0 -364
  128. package/dist/commands/run.js.map +0 -1
  129. package/dist/commands/serve.d.ts +0 -7
  130. package/dist/commands/serve.d.ts.map +0 -1
  131. package/dist/commands/serve.js +0 -27
  132. package/dist/commands/serve.js.map +0 -1
  133. package/dist/commands/slice.d.ts +0 -26
  134. package/dist/commands/slice.d.ts.map +0 -1
  135. package/dist/commands/slice.js +0 -175
  136. package/dist/commands/slice.js.map +0 -1
  137. package/dist/commands/state.d.ts +0 -8
  138. package/dist/commands/state.d.ts.map +0 -1
  139. package/dist/commands/state.js +0 -56
  140. package/dist/commands/state.js.map +0 -1
  141. package/dist/commands/status.d.ts +0 -14
  142. package/dist/commands/status.d.ts.map +0 -1
  143. package/dist/commands/status.js +0 -147
  144. package/dist/commands/status.js.map +0 -1
  145. package/dist/commands/uninstall.d.ts +0 -25
  146. package/dist/commands/uninstall.d.ts.map +0 -1
  147. package/dist/commands/uninstall.js +0 -141
  148. package/dist/commands/uninstall.js.map +0 -1
  149. package/dist/commands/update.d.ts +0 -21
  150. package/dist/commands/update.d.ts.map +0 -1
  151. package/dist/commands/update.js +0 -87
  152. package/dist/commands/update.js.map +0 -1
  153. package/dist/config.d.ts +0 -23
  154. package/dist/config.d.ts.map +0 -1
  155. package/dist/config.js +0 -601
  156. package/dist/config.js.map +0 -1
  157. package/dist/constants.d.ts +0 -59
  158. package/dist/constants.d.ts.map +0 -1
  159. package/dist/constants.js +0 -110
  160. package/dist/constants.js.map +0 -1
  161. package/dist/server/index.d.ts +0 -23
  162. package/dist/server/index.d.ts.map +0 -1
  163. package/dist/server/index.js +0 -1074
  164. package/dist/server/index.js.map +0 -1
  165. package/dist/storage/json-state-migrator.d.ts +0 -24
  166. package/dist/storage/json-state-migrator.d.ts.map +0 -1
  167. package/dist/storage/json-state-migrator.js +0 -197
  168. package/dist/storage/json-state-migrator.js.map +0 -1
  169. package/dist/storage/repositories/index.d.ts +0 -23
  170. package/dist/storage/repositories/index.d.ts.map +0 -1
  171. package/dist/storage/repositories/index.js +0 -37
  172. package/dist/storage/repositories/index.js.map +0 -1
  173. package/dist/storage/repositories/interfaces.d.ts +0 -37
  174. package/dist/storage/repositories/interfaces.d.ts.map +0 -1
  175. package/dist/storage/repositories/interfaces.js +0 -6
  176. package/dist/storage/repositories/interfaces.js.map +0 -1
  177. package/dist/storage/repositories/sqlite/execution-history-repository.d.ts +0 -21
  178. package/dist/storage/repositories/sqlite/execution-history-repository.d.ts.map +0 -1
  179. package/dist/storage/repositories/sqlite/execution-history-repository.js +0 -94
  180. package/dist/storage/repositories/sqlite/execution-history-repository.js.map +0 -1
  181. package/dist/storage/repositories/sqlite/prd-state-repository.d.ts +0 -17
  182. package/dist/storage/repositories/sqlite/prd-state-repository.d.ts.map +0 -1
  183. package/dist/storage/repositories/sqlite/prd-state-repository.js +0 -74
  184. package/dist/storage/repositories/sqlite/prd-state-repository.js.map +0 -1
  185. package/dist/storage/repositories/sqlite/project-registry-repository.d.ts +0 -16
  186. package/dist/storage/repositories/sqlite/project-registry-repository.d.ts.map +0 -1
  187. package/dist/storage/repositories/sqlite/project-registry-repository.js +0 -34
  188. package/dist/storage/repositories/sqlite/project-registry-repository.js.map +0 -1
  189. package/dist/storage/repositories/sqlite/roadmap-state-repository.d.ts +0 -14
  190. package/dist/storage/repositories/sqlite/roadmap-state-repository.d.ts.map +0 -1
  191. package/dist/storage/repositories/sqlite/roadmap-state-repository.js +0 -47
  192. package/dist/storage/repositories/sqlite/roadmap-state-repository.js.map +0 -1
  193. package/dist/storage/sqlite/client.d.ts +0 -23
  194. package/dist/storage/sqlite/client.d.ts.map +0 -1
  195. package/dist/storage/sqlite/client.js +0 -47
  196. package/dist/storage/sqlite/client.js.map +0 -1
  197. package/dist/storage/sqlite/migrations.d.ts +0 -11
  198. package/dist/storage/sqlite/migrations.d.ts.map +0 -1
  199. package/dist/storage/sqlite/migrations.js +0 -57
  200. package/dist/storage/sqlite/migrations.js.map +0 -1
  201. package/dist/templates/prd-template.d.ts +0 -11
  202. package/dist/templates/prd-template.d.ts.map +0 -1
  203. package/dist/templates/prd-template.js +0 -166
  204. package/dist/templates/prd-template.js.map +0 -1
  205. package/dist/templates/slicer-prompt.d.ts +0 -54
  206. package/dist/templates/slicer-prompt.d.ts.map +0 -1
  207. package/dist/templates/slicer-prompt.js +0 -163
  208. package/dist/templates/slicer-prompt.js.map +0 -1
  209. package/dist/types.d.ts +0 -123
  210. package/dist/types.d.ts.map +0 -1
  211. package/dist/types.js +0 -5
  212. package/dist/types.js.map +0 -1
  213. package/dist/utils/checks.d.ts +0 -55
  214. package/dist/utils/checks.d.ts.map +0 -1
  215. package/dist/utils/checks.js +0 -246
  216. package/dist/utils/checks.js.map +0 -1
  217. package/dist/utils/config-writer.d.ts +0 -16
  218. package/dist/utils/config-writer.d.ts.map +0 -1
  219. package/dist/utils/config-writer.js +0 -45
  220. package/dist/utils/config-writer.js.map +0 -1
  221. package/dist/utils/crontab.d.ts +0 -62
  222. package/dist/utils/crontab.d.ts.map +0 -1
  223. package/dist/utils/crontab.js +0 -168
  224. package/dist/utils/crontab.js.map +0 -1
  225. package/dist/utils/execution-history.d.ts +0 -54
  226. package/dist/utils/execution-history.d.ts.map +0 -1
  227. package/dist/utils/execution-history.js +0 -80
  228. package/dist/utils/execution-history.js.map +0 -1
  229. package/dist/utils/github.d.ts +0 -40
  230. package/dist/utils/github.d.ts.map +0 -1
  231. package/dist/utils/github.js +0 -126
  232. package/dist/utils/github.js.map +0 -1
  233. package/dist/utils/notify.d.ts +0 -63
  234. package/dist/utils/notify.d.ts.map +0 -1
  235. package/dist/utils/notify.js +0 -264
  236. package/dist/utils/notify.js.map +0 -1
  237. package/dist/utils/prd-states.d.ts +0 -16
  238. package/dist/utils/prd-states.d.ts.map +0 -1
  239. package/dist/utils/prd-states.js +0 -28
  240. package/dist/utils/prd-states.js.map +0 -1
  241. package/dist/utils/registry.d.ts +0 -44
  242. package/dist/utils/registry.d.ts.map +0 -1
  243. package/dist/utils/registry.js +0 -86
  244. package/dist/utils/registry.js.map +0 -1
  245. package/dist/utils/roadmap-parser.d.ts +0 -45
  246. package/dist/utils/roadmap-parser.d.ts.map +0 -1
  247. package/dist/utils/roadmap-parser.js +0 -136
  248. package/dist/utils/roadmap-parser.js.map +0 -1
  249. package/dist/utils/roadmap-scanner.d.ts +0 -92
  250. package/dist/utils/roadmap-scanner.d.ts.map +0 -1
  251. package/dist/utils/roadmap-scanner.js +0 -349
  252. package/dist/utils/roadmap-scanner.js.map +0 -1
  253. package/dist/utils/roadmap-state.d.ts +0 -90
  254. package/dist/utils/roadmap-state.d.ts.map +0 -1
  255. package/dist/utils/roadmap-state.js +0 -154
  256. package/dist/utils/roadmap-state.js.map +0 -1
  257. package/dist/utils/script-result.d.ts +0 -12
  258. package/dist/utils/script-result.d.ts.map +0 -1
  259. package/dist/utils/script-result.js +0 -46
  260. package/dist/utils/script-result.js.map +0 -1
  261. package/dist/utils/shell.d.ts +0 -27
  262. package/dist/utils/shell.d.ts.map +0 -1
  263. package/dist/utils/shell.js +0 -64
  264. package/dist/utils/shell.js.map +0 -1
  265. package/dist/utils/status-data.d.ts +0 -148
  266. package/dist/utils/status-data.d.ts.map +0 -1
  267. package/dist/utils/status-data.js +0 -593
  268. package/dist/utils/status-data.js.map +0 -1
  269. package/dist/utils/ui.d.ts +0 -55
  270. package/dist/utils/ui.d.ts.map +0 -1
  271. package/dist/utils/ui.js +0 -121
  272. package/dist/utils/ui.js.map +0 -1
  273. package/web/dist/assets/index-BtxQU4oX.css +0 -1
  274. 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