@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,534 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
- import { fileURLToPath } from 'url';
6
- import { dirname, join } from 'path';
7
- import * as readline from 'readline';
8
- import { CONFIG_FILE_NAME, DEFAULT_PRD_DIR, LOG_DIR, VALID_PROVIDERS, } from '../constants.js';
9
- import { createBoardProvider } from '../board/factory.js';
10
- import { createTable, header, info, label, step, success, error as uiError, } from '../utils/ui.js';
11
- import { checkGhCli, checkGitRepo, detectProviders, } from '../utils/checks.js';
12
- import { loadConfig } from '../config.js';
13
- // Get templates directory path
14
- const __filename = fileURLToPath(import.meta.url);
15
- const __dirname = dirname(__filename);
16
- const TEMPLATES_DIR = join(__dirname, '..', '..', 'templates');
17
- function hasPlaywrightDependency(cwd) {
18
- const packageJsonPath = path.join(cwd, 'package.json');
19
- if (!fs.existsSync(packageJsonPath)) {
20
- return false;
21
- }
22
- try {
23
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
24
- return Boolean(packageJson.dependencies?.['@playwright/test']
25
- || packageJson.dependencies?.playwright
26
- || packageJson.devDependencies?.['@playwright/test']
27
- || packageJson.devDependencies?.playwright);
28
- }
29
- catch {
30
- return false;
31
- }
32
- }
33
- function detectPlaywright(cwd) {
34
- if (hasPlaywrightDependency(cwd)) {
35
- return true;
36
- }
37
- if (fs.existsSync(path.join(cwd, 'node_modules', '.bin', 'playwright'))) {
38
- return true;
39
- }
40
- try {
41
- execSync('playwright --version', {
42
- cwd,
43
- encoding: 'utf-8',
44
- stdio: ['pipe', 'pipe', 'pipe'],
45
- timeout: 1500,
46
- });
47
- return true;
48
- }
49
- catch {
50
- return false;
51
- }
52
- }
53
- function resolvePlaywrightInstallCommand(cwd) {
54
- if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) {
55
- return 'pnpm add -D @playwright/test';
56
- }
57
- if (fs.existsSync(path.join(cwd, 'yarn.lock'))) {
58
- return 'yarn add -D @playwright/test';
59
- }
60
- return 'npm install -D @playwright/test';
61
- }
62
- function promptYesNo(question, defaultNo = true) {
63
- if (!process.stdin.isTTY || !process.stdout.isTTY) {
64
- return Promise.resolve(false);
65
- }
66
- return new Promise((resolve) => {
67
- const rl = readline.createInterface({
68
- input: process.stdin,
69
- output: process.stdout
70
- });
71
- const suffix = defaultNo ? ' [y/N]: ' : ' [Y/n]: ';
72
- rl.question(`${question}${suffix}`, (answer) => {
73
- rl.close();
74
- const normalized = answer.trim().toLowerCase();
75
- if (normalized === '') {
76
- resolve(!defaultNo);
77
- return;
78
- }
79
- resolve(normalized === 'y' || normalized === 'yes');
80
- });
81
- });
82
- }
83
- function installPlaywrightForQa(cwd) {
84
- try {
85
- const installCmd = resolvePlaywrightInstallCommand(cwd);
86
- execSync(installCmd, {
87
- cwd,
88
- encoding: 'utf-8',
89
- stdio: ['pipe', 'pipe', 'pipe']
90
- });
91
- execSync('npx playwright install chromium', {
92
- cwd,
93
- encoding: 'utf-8',
94
- stdio: ['pipe', 'pipe', 'pipe']
95
- });
96
- return true;
97
- }
98
- catch {
99
- return false;
100
- }
101
- }
102
- /**
103
- * Get the default branch name for the repository
104
- */
105
- export function getDefaultBranch(cwd) {
106
- const getRefTimestamp = (ref) => {
107
- try {
108
- const timestamp = execSync(`git log -1 --format=%ct ${ref}`, {
109
- encoding: 'utf-8',
110
- cwd,
111
- stdio: ['pipe', 'pipe', 'pipe']
112
- }).trim();
113
- const parsed = parseInt(timestamp, 10);
114
- return Number.isNaN(parsed) ? null : parsed;
115
- }
116
- catch {
117
- return null;
118
- }
119
- };
120
- const getBranchLatestTimestamp = (branch) => {
121
- const refs = [`refs/remotes/origin/${branch}`, `refs/heads/${branch}`];
122
- let latest = null;
123
- for (const ref of refs) {
124
- const timestamp = getRefTimestamp(ref);
125
- if (timestamp !== null && (latest === null || timestamp > latest)) {
126
- latest = timestamp;
127
- }
128
- }
129
- return latest;
130
- };
131
- try {
132
- // If both main and master exist, use whichever has the newest tip commit
133
- const mainTimestamp = getBranchLatestTimestamp('main');
134
- const masterTimestamp = getBranchLatestTimestamp('master');
135
- if (mainTimestamp !== null && masterTimestamp !== null) {
136
- return mainTimestamp >= masterTimestamp ? 'main' : 'master';
137
- }
138
- if (mainTimestamp !== null) {
139
- return 'main';
140
- }
141
- if (masterTimestamp !== null) {
142
- return 'master';
143
- }
144
- // Fallback to origin/HEAD when neither main nor master exists
145
- const remoteRef = execSync('git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null || echo ""', {
146
- encoding: 'utf-8',
147
- cwd,
148
- stdio: ['pipe', 'pipe', 'pipe']
149
- }).trim();
150
- if (remoteRef) {
151
- // Extract branch name from refs/remotes/origin/HEAD -> refs/remotes/origin/main
152
- const match = remoteRef.match(/refs\/remotes\/origin\/(.+)/);
153
- if (match) {
154
- return match[1];
155
- }
156
- }
157
- // Default to main
158
- return 'main';
159
- }
160
- catch {
161
- return 'main';
162
- }
163
- }
164
- /**
165
- * Get the project name from the directory
166
- */
167
- function getProjectName(cwd) {
168
- return path.basename(cwd);
169
- }
170
- /**
171
- * Prompt user to select a provider from available options
172
- */
173
- function promptProviderSelection(providers) {
174
- return new Promise((resolve, reject) => {
175
- const rl = readline.createInterface({
176
- input: process.stdin,
177
- output: process.stdout
178
- });
179
- console.log('\nMultiple AI providers detected:');
180
- providers.forEach((p, i) => {
181
- console.log(` ${i + 1}. ${p}`);
182
- });
183
- rl.question('\nSelect a provider (enter number): ', (answer) => {
184
- rl.close();
185
- const selection = parseInt(answer.trim(), 10);
186
- if (isNaN(selection) || selection < 1 || selection > providers.length) {
187
- reject(new Error('Invalid selection. Please run init again and select a valid number.'));
188
- return;
189
- }
190
- resolve(providers[selection - 1]);
191
- });
192
- });
193
- }
194
- /**
195
- * Create directory if it doesn't exist
196
- */
197
- function ensureDir(dirPath) {
198
- if (!fs.existsSync(dirPath)) {
199
- fs.mkdirSync(dirPath, { recursive: true });
200
- }
201
- }
202
- /**
203
- * Resolve a template path with per-file fallback.
204
- * If customTemplatesDir is non-null and the file exists there, return custom path.
205
- * Otherwise return the bundled template path.
206
- */
207
- export function resolveTemplatePath(templateName, customTemplatesDir, bundledTemplatesDir) {
208
- if (customTemplatesDir !== null) {
209
- const customPath = join(customTemplatesDir, templateName);
210
- if (fs.existsSync(customPath)) {
211
- return { path: customPath, source: "custom" };
212
- }
213
- }
214
- return { path: join(bundledTemplatesDir, templateName), source: "bundled" };
215
- }
216
- /**
217
- * Copy and process template file
218
- */
219
- function processTemplate(templateName, targetPath, replacements, force, sourcePath, source) {
220
- // Skip if exists and not forcing
221
- if (fs.existsSync(targetPath) && !force) {
222
- console.log(` Skipped (exists): ${targetPath}`);
223
- return { created: false, source: source ?? "bundled" };
224
- }
225
- const templatePath = sourcePath ?? join(TEMPLATES_DIR, templateName);
226
- const resolvedSource = source ?? "bundled";
227
- let content = fs.readFileSync(templatePath, 'utf-8');
228
- // Replace placeholders
229
- for (const [key, value] of Object.entries(replacements)) {
230
- content = content.replaceAll(key, value);
231
- }
232
- fs.writeFileSync(targetPath, content);
233
- console.log(` Created: ${targetPath} (${resolvedSource})`);
234
- return { created: true, source: resolvedSource };
235
- }
236
- /**
237
- * Ensure Night Watch entries are in .gitignore
238
- */
239
- function addToGitignore(cwd) {
240
- const gitignorePath = path.join(cwd, '.gitignore');
241
- const entries = [
242
- { pattern: '/logs/', label: '/logs/', check: (c) => c.includes('/logs/') || /^logs\//m.test(c) },
243
- { pattern: CONFIG_FILE_NAME, label: CONFIG_FILE_NAME, check: (c) => c.includes(CONFIG_FILE_NAME) },
244
- { pattern: '*.claim', label: '*.claim', check: (c) => c.includes('*.claim') },
245
- ];
246
- if (!fs.existsSync(gitignorePath)) {
247
- const lines = ['# Night Watch', ...entries.map(e => e.pattern), ''];
248
- fs.writeFileSync(gitignorePath, lines.join('\n'));
249
- console.log(` Created: ${gitignorePath} (with Night Watch entries)`);
250
- return;
251
- }
252
- const content = fs.readFileSync(gitignorePath, 'utf-8');
253
- const missing = entries.filter(e => !e.check(content));
254
- if (missing.length === 0) {
255
- console.log(` Skipped (exists): Night Watch entries in .gitignore`);
256
- return;
257
- }
258
- const additions = missing.map(e => e.pattern).join('\n');
259
- const newContent = content.trimEnd() + '\n\n# Night Watch\n' + additions + '\n';
260
- fs.writeFileSync(gitignorePath, newContent);
261
- console.log(` Updated: ${gitignorePath} (added ${missing.map(e => e.label).join(', ')})`);
262
- }
263
- /**
264
- * Create NIGHT-WATCH-SUMMARY.md template if it doesn't exist
265
- */
266
- function createSummaryFile(summaryPath, force) {
267
- if (fs.existsSync(summaryPath) && !force) {
268
- console.log(` Skipped (exists): ${summaryPath}`);
269
- return;
270
- }
271
- const content = `# Night Watch Summary
272
-
273
- This file tracks the progress of PRDs executed by Night Watch.
274
-
275
- ---
276
-
277
- `;
278
- fs.writeFileSync(summaryPath, content);
279
- console.log(` Created: ${summaryPath}`);
280
- }
281
- /**
282
- * Main init command implementation
283
- */
284
- export function initCommand(program) {
285
- program
286
- .command('init')
287
- .description('Initialize night-watch in the current project')
288
- .option('-f, --force', 'Overwrite existing configuration')
289
- .option('-d, --prd-dir <path>', 'Path to PRD directory')
290
- .option('-p, --provider <name>', 'AI provider to use (claude or codex)')
291
- .option('--no-reviewer', 'Disable reviewer cron job')
292
- .action(async (options) => {
293
- const cwd = process.cwd();
294
- const force = options.force || false;
295
- const prdDir = options.prdDir || DEFAULT_PRD_DIR;
296
- const totalSteps = 12;
297
- console.log();
298
- header('Night Watch CLI - Initializing');
299
- // Step 1: Verify git repository
300
- step(1, totalSteps, 'Checking git repository...');
301
- const gitCheck = checkGitRepo(cwd);
302
- if (!gitCheck.passed) {
303
- uiError(gitCheck.message);
304
- console.log('Please run this command from the root of a git repository.');
305
- process.exit(1);
306
- }
307
- success(gitCheck.message);
308
- // Step 2: Verify gh CLI
309
- step(2, totalSteps, 'Checking GitHub CLI (gh)...');
310
- const ghCheck = checkGhCli();
311
- if (!ghCheck.passed) {
312
- uiError(ghCheck.message);
313
- process.exit(1);
314
- }
315
- success(ghCheck.message);
316
- // Step 3: Detect AI providers
317
- step(3, totalSteps, 'Detecting AI providers...');
318
- let selectedProvider;
319
- if (options.provider) {
320
- // Validate provider flag
321
- if (!VALID_PROVIDERS.includes(options.provider)) {
322
- uiError(`Invalid provider "${options.provider}".`);
323
- console.log(`Valid providers: ${VALID_PROVIDERS.join(', ')}`);
324
- process.exit(1);
325
- }
326
- selectedProvider = options.provider;
327
- info(`Using provider from flag: ${selectedProvider}`);
328
- }
329
- else {
330
- // Auto-detect providers
331
- const detectedProviders = detectProviders();
332
- if (detectedProviders.length === 0) {
333
- uiError('No AI provider CLI found.');
334
- console.log('\nPlease install one of the following:');
335
- console.log(' - Claude CLI: https://docs.anthropic.com/en/docs/claude-cli');
336
- console.log(' - Codex CLI: https://github.com/openai/codex');
337
- process.exit(1);
338
- }
339
- else if (detectedProviders.length === 1) {
340
- selectedProvider = detectedProviders[0];
341
- info(`Auto-detected provider: ${selectedProvider}`);
342
- }
343
- else {
344
- // Multiple providers - prompt user
345
- try {
346
- selectedProvider = await promptProviderSelection(detectedProviders);
347
- info(`Selected provider: ${selectedProvider}`);
348
- }
349
- catch (err) {
350
- uiError(`${err instanceof Error ? err.message : String(err)}`);
351
- process.exit(1);
352
- }
353
- }
354
- }
355
- // Step 4: Detect test frameworks for QA bootstrap
356
- step(4, totalSteps, 'Detecting test frameworks...');
357
- const playwrightDetected = detectPlaywright(cwd);
358
- if (playwrightDetected) {
359
- info('Playwright: detected');
360
- }
361
- else {
362
- info('Playwright: not found');
363
- const installPlaywright = await promptYesNo('Install Playwright for QA now?', true);
364
- if (installPlaywright) {
365
- if (installPlaywrightForQa(cwd)) {
366
- success('Installed Playwright test runner and Chromium browser.');
367
- }
368
- else {
369
- console.warn(' Warning: Failed to install Playwright automatically. You can install it later.');
370
- }
371
- }
372
- else {
373
- info('Skipping Playwright install. QA can auto-install during execution if enabled.');
374
- }
375
- }
376
- // Set reviewerEnabled from flag (default: true, --no-reviewer sets to false)
377
- const reviewerEnabled = options.reviewer !== false;
378
- // Gather project information
379
- const projectName = getProjectName(cwd);
380
- const defaultBranch = getDefaultBranch(cwd);
381
- // Display project configuration
382
- header('Project Configuration');
383
- label('Project', projectName);
384
- label('Default branch', defaultBranch);
385
- label('Provider', selectedProvider);
386
- label('Reviewer', reviewerEnabled ? 'Enabled' : 'Disabled');
387
- console.log();
388
- // Define replacements for templates
389
- const replacements = {
390
- '${PROJECT_DIR}': cwd,
391
- '${PROJECT_NAME}': projectName,
392
- '${DEFAULT_BRANCH}': defaultBranch,
393
- };
394
- // Step 5: Create PRD directory structure
395
- step(5, totalSteps, 'Creating PRD directory structure...');
396
- const prdDirPath = path.join(cwd, prdDir);
397
- const doneDirPath = path.join(prdDirPath, 'done');
398
- ensureDir(doneDirPath);
399
- success(`Created ${prdDirPath}/`);
400
- success(`Created ${doneDirPath}/`);
401
- // Step 6: Create NIGHT-WATCH-SUMMARY.md
402
- step(6, totalSteps, 'Creating NIGHT-WATCH-SUMMARY.md...');
403
- const summaryPath = path.join(prdDirPath, 'NIGHT-WATCH-SUMMARY.md');
404
- createSummaryFile(summaryPath, force);
405
- // Step 7: Create logs directory
406
- step(7, totalSteps, 'Creating logs directory...');
407
- const logsPath = path.join(cwd, LOG_DIR);
408
- ensureDir(logsPath);
409
- success(`Created ${logsPath}/`);
410
- // Add /logs/ to .gitignore
411
- addToGitignore(cwd);
412
- // Step 8: Create .claude/commands directory and copy templates
413
- step(8, totalSteps, 'Creating Claude slash commands...');
414
- const commandsDir = path.join(cwd, '.claude', 'commands');
415
- ensureDir(commandsDir);
416
- success(`Created ${commandsDir}/`);
417
- // Load existing config (if present) to get templatesDir
418
- const existingConfig = loadConfig(cwd);
419
- const customTemplatesDirPath = path.join(cwd, existingConfig.templatesDir);
420
- const customTemplatesDir = fs.existsSync(customTemplatesDirPath) ? customTemplatesDirPath : null;
421
- // Track template sources for summary
422
- const templateSources = [];
423
- // Copy night-watch.md template
424
- const nwResolution = resolveTemplatePath('night-watch.md', customTemplatesDir, TEMPLATES_DIR);
425
- const nwResult = processTemplate('night-watch.md', path.join(commandsDir, 'night-watch.md'), replacements, force, nwResolution.path, nwResolution.source);
426
- templateSources.push({ name: 'night-watch.md', source: nwResult.source });
427
- // Copy prd-executor.md template
428
- const peResolution = resolveTemplatePath('prd-executor.md', customTemplatesDir, TEMPLATES_DIR);
429
- const peResult = processTemplate('prd-executor.md', path.join(commandsDir, 'prd-executor.md'), replacements, force, peResolution.path, peResolution.source);
430
- templateSources.push({ name: 'prd-executor.md', source: peResult.source });
431
- // Copy night-watch-pr-reviewer.md template
432
- const prResolution = resolveTemplatePath('night-watch-pr-reviewer.md', customTemplatesDir, TEMPLATES_DIR);
433
- const prResult = processTemplate('night-watch-pr-reviewer.md', path.join(commandsDir, 'night-watch-pr-reviewer.md'), replacements, force, prResolution.path, prResolution.source);
434
- templateSources.push({ name: 'night-watch-pr-reviewer.md', source: prResult.source });
435
- // Copy night-watch-qa.md template
436
- const qaResolution = resolveTemplatePath('night-watch-qa.md', customTemplatesDir, TEMPLATES_DIR);
437
- const qaResult = processTemplate('night-watch-qa.md', path.join(commandsDir, 'night-watch-qa.md'), replacements, force, qaResolution.path, qaResolution.source);
438
- templateSources.push({ name: 'night-watch-qa.md', source: qaResult.source });
439
- // Step 9: Create config file
440
- step(9, totalSteps, 'Creating configuration file...');
441
- const configPath = path.join(cwd, CONFIG_FILE_NAME);
442
- if (fs.existsSync(configPath) && !force) {
443
- console.log(` Skipped (exists): ${configPath}`);
444
- }
445
- else {
446
- // Read and process config template
447
- let configContent = fs.readFileSync(join(TEMPLATES_DIR, 'night-watch.config.json'), 'utf-8');
448
- // Replace placeholders with project values
449
- configContent = configContent.replace('"projectName": ""', `"projectName": "${projectName}"`);
450
- configContent = configContent.replace('"defaultBranch": ""', `"defaultBranch": "${defaultBranch}"`);
451
- // Set provider in config
452
- configContent = configContent.replace(/"provider":\s*"[^"]*"/, `"provider": "${selectedProvider}"`);
453
- // Set reviewerEnabled in config
454
- configContent = configContent.replace(/"reviewerEnabled":\s*(true|false)/, `"reviewerEnabled": ${reviewerEnabled}`);
455
- fs.writeFileSync(configPath, configContent);
456
- success(`Created ${configPath}`);
457
- }
458
- // Step 10: Create GitHub Project board (only when repo has a GitHub remote)
459
- step(10, totalSteps, 'Setting up GitHub Project board...');
460
- const existingRaw = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
461
- const existingBoard = existingRaw.boardProvider;
462
- if (existingBoard?.projectNumber && !force) {
463
- info(`Board already configured (#${existingBoard.projectNumber}), skipping.`);
464
- }
465
- else {
466
- // Check for a GitHub remote before attempting board setup
467
- let hasGitHubRemote = false;
468
- try {
469
- const remoteUrl = execSync('git remote get-url origin', {
470
- cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe']
471
- }).trim();
472
- hasGitHubRemote = remoteUrl.includes('github.com');
473
- }
474
- catch { /* no remote */ }
475
- if (!hasGitHubRemote) {
476
- info('No GitHub remote detected — skipping board setup. Run `night-watch board setup` manually.');
477
- }
478
- else {
479
- try {
480
- const provider = createBoardProvider({ enabled: true, provider: 'github' }, cwd);
481
- const boardTitle = `${projectName} Night Watch`;
482
- const board = await provider.setupBoard(boardTitle);
483
- // Update the config file with the projectNumber
484
- const rawConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
485
- rawConfig.boardProvider = { enabled: true, provider: 'github', projectNumber: board.number };
486
- fs.writeFileSync(configPath, JSON.stringify(rawConfig, null, 2) + '\n');
487
- success(`GitHub Project board "${boardTitle}" ready (#${board.number})`);
488
- }
489
- catch (boardErr) {
490
- console.warn(` Warning: Could not set up GitHub Project board: ${boardErr instanceof Error ? boardErr.message : String(boardErr)}`);
491
- info('Run `night-watch board setup` to create the board manually.');
492
- }
493
- }
494
- }
495
- // Step 11: Register in global registry
496
- step(11, totalSteps, 'Registering project in global registry...');
497
- try {
498
- const { registerProject } = await import('../utils/registry.js');
499
- const entry = registerProject(cwd);
500
- success(`Registered as "${entry.name}" in global registry`);
501
- }
502
- catch (regErr) {
503
- console.warn(` Warning: Could not register in global registry: ${regErr instanceof Error ? regErr.message : String(regErr)}`);
504
- }
505
- // Step 12: Print summary
506
- step(12, totalSteps, 'Initialization complete!');
507
- // Summary with table
508
- header('Initialization Complete');
509
- const filesTable = createTable({ head: ['Created Files', ''] });
510
- filesTable.push(['PRD Directory', `${prdDir}/done/`]);
511
- filesTable.push(['Summary File', `${prdDir}/NIGHT-WATCH-SUMMARY.md`]);
512
- filesTable.push(['Logs Directory', `${LOG_DIR}/`]);
513
- filesTable.push(['Slash Commands', `.claude/commands/night-watch.md (${templateSources[0].source})`]);
514
- filesTable.push(['', `.claude/commands/prd-executor.md (${templateSources[1].source})`]);
515
- filesTable.push(['', `.claude/commands/night-watch-pr-reviewer.md (${templateSources[2].source})`]);
516
- filesTable.push(['', `.claude/commands/night-watch-qa.md (${templateSources[3].source})`]);
517
- filesTable.push(['Config File', CONFIG_FILE_NAME]);
518
- filesTable.push(['Global Registry', '~/.night-watch/projects.json']);
519
- console.log(filesTable.toString());
520
- // Configuration summary
521
- header('Configuration');
522
- label('Provider', selectedProvider);
523
- label('Reviewer', reviewerEnabled ? 'Enabled' : 'Disabled');
524
- console.log();
525
- // Next steps
526
- header('Next Steps');
527
- info('1. Add your PRD files to docs/PRDs/night-watch/');
528
- info('2. Run `night-watch install` to set up cron jobs');
529
- info('3. Or run `night-watch run` to execute PRDs manually');
530
- console.log();
531
- });
532
- }
533
- export default initCommand;
534
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Install command for Night Watch CLI
3
- * Adds crontab entries for automated PRD execution
4
- */
5
- import { Command } from "commander";
6
- import { INightWatchConfig } from "../types.js";
7
- export interface IInstallOptions {
8
- schedule?: string;
9
- reviewerSchedule?: string;
10
- noReviewer?: boolean;
11
- noSlicer?: boolean;
12
- noQa?: boolean;
13
- qa?: boolean;
14
- }
15
- /**
16
- * Build PATH export for cron entries using relevant binary directories.
17
- */
18
- export declare function buildCronPathPrefix(nodeBinDir: string, nightWatchBin: string): string;
19
- /**
20
- * Apply minute offset to a cron schedule expression.
21
- * Replaces the minute field (first field) with the offset value.
22
- * Only applies if the minute field is a single number (e.g. "0").
23
- * Complex expressions (e.g. star-slash, comma-separated) are left unchanged.
24
- */
25
- export declare function applyScheduleOffset(schedule: string, offset: number): string;
26
- export interface IInstallResult {
27
- success: boolean;
28
- entries: string[];
29
- error?: string;
30
- }
31
- /**
32
- * Core install logic, reusable from dashboard.
33
- * Returns result without printing to console.
34
- */
35
- export declare function performInstall(projectDir: string, config: INightWatchConfig, options?: {
36
- schedule?: string;
37
- reviewerSchedule?: string;
38
- noReviewer?: boolean;
39
- noSlicer?: boolean;
40
- noQa?: boolean;
41
- qa?: boolean;
42
- force?: boolean;
43
- }): IInstallResult;
44
- /**
45
- * Install crontab entries for night-watch
46
- */
47
- export declare function installCommand(program: Command): void;
48
- //# sourceMappingURL=install.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAiBhD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AA+CD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAWrF;AAuBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU5E;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAClJ,cAAc,CAgFhB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2IrD"}