@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.
- package/bin/night-watch.mjs +1 -1
- package/dist/src/cli.js +13 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +14 -22
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/slack/client.d.ts +4 -0
- package/dist/src/slack/client.d.ts.map +1 -1
- package/dist/src/slack/client.js +6 -0
- package/dist/src/slack/client.js.map +1 -1
- package/dist/src/slack/interaction-listener.d.ts +2 -3
- package/dist/src/slack/interaction-listener.d.ts.map +1 -1
- package/dist/src/slack/interaction-listener.js +30 -14
- package/dist/src/slack/interaction-listener.js.map +1 -1
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.js +1 -1
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.js.map +1 -1
- package/package.json +1 -1
- package/web/dist/assets/index-DOzZY27d.js +473 -0
- package/web/dist/assets/index-w6Q6gxCS.css +1 -0
- package/web/dist/index.html +2 -2
- package/dist/board/factory.d.ts +0 -3
- package/dist/board/factory.d.ts.map +0 -1
- package/dist/board/factory.js +0 -10
- package/dist/board/factory.js.map +0 -1
- package/dist/board/providers/github-graphql.d.ts +0 -16
- package/dist/board/providers/github-graphql.d.ts.map +0 -1
- package/dist/board/providers/github-graphql.js +0 -43
- package/dist/board/providers/github-graphql.js.map +0 -1
- package/dist/board/providers/github-projects.d.ts +0 -51
- package/dist/board/providers/github-projects.d.ts.map +0 -1
- package/dist/board/providers/github-projects.js +0 -672
- package/dist/board/providers/github-projects.js.map +0 -1
- package/dist/board/types.d.ts +0 -60
- package/dist/board/types.d.ts.map +0 -1
- package/dist/board/types.js +0 -4
- package/dist/board/types.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -80
- package/dist/cli.js.map +0 -1
- package/dist/commands/board.d.ts +0 -9
- package/dist/commands/board.d.ts.map +0 -1
- package/dist/commands/board.js +0 -294
- package/dist/commands/board.js.map +0 -1
- package/dist/commands/cancel.d.ts +0 -46
- package/dist/commands/cancel.d.ts.map +0 -1
- package/dist/commands/cancel.js +0 -241
- package/dist/commands/cancel.js.map +0 -1
- package/dist/commands/dashboard/tab-actions.d.ts +0 -10
- package/dist/commands/dashboard/tab-actions.d.ts.map +0 -1
- package/dist/commands/dashboard/tab-actions.js +0 -245
- package/dist/commands/dashboard/tab-actions.js.map +0 -1
- package/dist/commands/dashboard/tab-config.d.ts +0 -21
- package/dist/commands/dashboard/tab-config.d.ts.map +0 -1
- package/dist/commands/dashboard/tab-config.js +0 -829
- package/dist/commands/dashboard/tab-config.js.map +0 -1
- package/dist/commands/dashboard/tab-logs.d.ts +0 -10
- package/dist/commands/dashboard/tab-logs.d.ts.map +0 -1
- package/dist/commands/dashboard/tab-logs.js +0 -178
- package/dist/commands/dashboard/tab-logs.js.map +0 -1
- package/dist/commands/dashboard/tab-schedules.d.ts +0 -21
- package/dist/commands/dashboard/tab-schedules.d.ts.map +0 -1
- package/dist/commands/dashboard/tab-schedules.js +0 -304
- package/dist/commands/dashboard/tab-schedules.js.map +0 -1
- package/dist/commands/dashboard/tab-status.d.ts +0 -32
- package/dist/commands/dashboard/tab-status.d.ts.map +0 -1
- package/dist/commands/dashboard/tab-status.js +0 -421
- package/dist/commands/dashboard/tab-status.js.map +0 -1
- package/dist/commands/dashboard/types.d.ts +0 -43
- package/dist/commands/dashboard/types.d.ts.map +0 -1
- package/dist/commands/dashboard/types.js +0 -5
- package/dist/commands/dashboard/types.js.map +0 -1
- package/dist/commands/dashboard.d.ts +0 -11
- package/dist/commands/dashboard.d.ts.map +0 -1
- package/dist/commands/dashboard.js +0 -239
- package/dist/commands/dashboard.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -16
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -202
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/history.d.ts +0 -7
- package/dist/commands/history.d.ts.map +0 -1
- package/dist/commands/history.js +0 -56
- package/dist/commands/history.js.map +0 -1
- package/dist/commands/init.d.ts +0 -25
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -534
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/install.d.ts +0 -48
- package/dist/commands/install.d.ts.map +0 -1
- package/dist/commands/install.js +0 -303
- package/dist/commands/install.js.map +0 -1
- package/dist/commands/logs.d.ts +0 -15
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -104
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/prd-state.d.ts +0 -12
- package/dist/commands/prd-state.d.ts.map +0 -1
- package/dist/commands/prd-state.js +0 -47
- package/dist/commands/prd-state.js.map +0 -1
- package/dist/commands/prd.d.ts +0 -24
- package/dist/commands/prd.d.ts.map +0 -1
- package/dist/commands/prd.js +0 -283
- package/dist/commands/prd.js.map +0 -1
- package/dist/commands/prds.d.ts +0 -13
- package/dist/commands/prds.d.ts.map +0 -1
- package/dist/commands/prds.js +0 -196
- package/dist/commands/prds.js.map +0 -1
- package/dist/commands/prs.d.ts +0 -14
- package/dist/commands/prs.d.ts.map +0 -1
- package/dist/commands/prs.js +0 -106
- package/dist/commands/prs.js.map +0 -1
- package/dist/commands/qa.d.ts +0 -30
- package/dist/commands/qa.d.ts.map +0 -1
- package/dist/commands/qa.js +0 -159
- package/dist/commands/qa.js.map +0 -1
- package/dist/commands/retry.d.ts +0 -9
- package/dist/commands/retry.d.ts.map +0 -1
- package/dist/commands/retry.js +0 -72
- package/dist/commands/retry.js.map +0 -1
- package/dist/commands/review.d.ts +0 -35
- package/dist/commands/review.d.ts.map +0 -1
- package/dist/commands/review.js +0 -252
- package/dist/commands/review.js.map +0 -1
- package/dist/commands/run.d.ts +0 -61
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -364
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -7
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -27
- package/dist/commands/serve.js.map +0 -1
- package/dist/commands/slice.d.ts +0 -26
- package/dist/commands/slice.d.ts.map +0 -1
- package/dist/commands/slice.js +0 -175
- package/dist/commands/slice.js.map +0 -1
- package/dist/commands/state.d.ts +0 -8
- package/dist/commands/state.d.ts.map +0 -1
- package/dist/commands/state.js +0 -56
- package/dist/commands/state.js.map +0 -1
- package/dist/commands/status.d.ts +0 -14
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -147
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/uninstall.d.ts +0 -25
- package/dist/commands/uninstall.d.ts.map +0 -1
- package/dist/commands/uninstall.js +0 -141
- package/dist/commands/uninstall.js.map +0 -1
- package/dist/commands/update.d.ts +0 -21
- package/dist/commands/update.d.ts.map +0 -1
- package/dist/commands/update.js +0 -87
- package/dist/commands/update.js.map +0 -1
- package/dist/config.d.ts +0 -23
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -601
- package/dist/config.js.map +0 -1
- package/dist/constants.d.ts +0 -59
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -110
- package/dist/constants.js.map +0 -1
- package/dist/server/index.d.ts +0 -23
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -1074
- package/dist/server/index.js.map +0 -1
- package/dist/storage/json-state-migrator.d.ts +0 -24
- package/dist/storage/json-state-migrator.d.ts.map +0 -1
- package/dist/storage/json-state-migrator.js +0 -197
- package/dist/storage/json-state-migrator.js.map +0 -1
- package/dist/storage/repositories/index.d.ts +0 -23
- package/dist/storage/repositories/index.d.ts.map +0 -1
- package/dist/storage/repositories/index.js +0 -37
- package/dist/storage/repositories/index.js.map +0 -1
- package/dist/storage/repositories/interfaces.d.ts +0 -37
- package/dist/storage/repositories/interfaces.d.ts.map +0 -1
- package/dist/storage/repositories/interfaces.js +0 -6
- package/dist/storage/repositories/interfaces.js.map +0 -1
- package/dist/storage/repositories/sqlite/execution-history-repository.d.ts +0 -21
- package/dist/storage/repositories/sqlite/execution-history-repository.d.ts.map +0 -1
- package/dist/storage/repositories/sqlite/execution-history-repository.js +0 -94
- package/dist/storage/repositories/sqlite/execution-history-repository.js.map +0 -1
- package/dist/storage/repositories/sqlite/prd-state-repository.d.ts +0 -17
- package/dist/storage/repositories/sqlite/prd-state-repository.d.ts.map +0 -1
- package/dist/storage/repositories/sqlite/prd-state-repository.js +0 -74
- package/dist/storage/repositories/sqlite/prd-state-repository.js.map +0 -1
- package/dist/storage/repositories/sqlite/project-registry-repository.d.ts +0 -16
- package/dist/storage/repositories/sqlite/project-registry-repository.d.ts.map +0 -1
- package/dist/storage/repositories/sqlite/project-registry-repository.js +0 -34
- package/dist/storage/repositories/sqlite/project-registry-repository.js.map +0 -1
- package/dist/storage/repositories/sqlite/roadmap-state-repository.d.ts +0 -14
- package/dist/storage/repositories/sqlite/roadmap-state-repository.d.ts.map +0 -1
- package/dist/storage/repositories/sqlite/roadmap-state-repository.js +0 -47
- package/dist/storage/repositories/sqlite/roadmap-state-repository.js.map +0 -1
- package/dist/storage/sqlite/client.d.ts +0 -23
- package/dist/storage/sqlite/client.d.ts.map +0 -1
- package/dist/storage/sqlite/client.js +0 -47
- package/dist/storage/sqlite/client.js.map +0 -1
- package/dist/storage/sqlite/migrations.d.ts +0 -11
- package/dist/storage/sqlite/migrations.d.ts.map +0 -1
- package/dist/storage/sqlite/migrations.js +0 -57
- package/dist/storage/sqlite/migrations.js.map +0 -1
- package/dist/templates/prd-template.d.ts +0 -11
- package/dist/templates/prd-template.d.ts.map +0 -1
- package/dist/templates/prd-template.js +0 -166
- package/dist/templates/prd-template.js.map +0 -1
- package/dist/templates/slicer-prompt.d.ts +0 -54
- package/dist/templates/slicer-prompt.d.ts.map +0 -1
- package/dist/templates/slicer-prompt.js +0 -163
- package/dist/templates/slicer-prompt.js.map +0 -1
- package/dist/types.d.ts +0 -123
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -5
- package/dist/types.js.map +0 -1
- package/dist/utils/checks.d.ts +0 -55
- package/dist/utils/checks.d.ts.map +0 -1
- package/dist/utils/checks.js +0 -246
- package/dist/utils/checks.js.map +0 -1
- package/dist/utils/config-writer.d.ts +0 -16
- package/dist/utils/config-writer.d.ts.map +0 -1
- package/dist/utils/config-writer.js +0 -45
- package/dist/utils/config-writer.js.map +0 -1
- package/dist/utils/crontab.d.ts +0 -62
- package/dist/utils/crontab.d.ts.map +0 -1
- package/dist/utils/crontab.js +0 -168
- package/dist/utils/crontab.js.map +0 -1
- package/dist/utils/execution-history.d.ts +0 -54
- package/dist/utils/execution-history.d.ts.map +0 -1
- package/dist/utils/execution-history.js +0 -80
- package/dist/utils/execution-history.js.map +0 -1
- package/dist/utils/github.d.ts +0 -40
- package/dist/utils/github.d.ts.map +0 -1
- package/dist/utils/github.js +0 -126
- package/dist/utils/github.js.map +0 -1
- package/dist/utils/notify.d.ts +0 -63
- package/dist/utils/notify.d.ts.map +0 -1
- package/dist/utils/notify.js +0 -264
- package/dist/utils/notify.js.map +0 -1
- package/dist/utils/prd-states.d.ts +0 -16
- package/dist/utils/prd-states.d.ts.map +0 -1
- package/dist/utils/prd-states.js +0 -28
- package/dist/utils/prd-states.js.map +0 -1
- package/dist/utils/registry.d.ts +0 -44
- package/dist/utils/registry.d.ts.map +0 -1
- package/dist/utils/registry.js +0 -86
- package/dist/utils/registry.js.map +0 -1
- package/dist/utils/roadmap-parser.d.ts +0 -45
- package/dist/utils/roadmap-parser.d.ts.map +0 -1
- package/dist/utils/roadmap-parser.js +0 -136
- package/dist/utils/roadmap-parser.js.map +0 -1
- package/dist/utils/roadmap-scanner.d.ts +0 -92
- package/dist/utils/roadmap-scanner.d.ts.map +0 -1
- package/dist/utils/roadmap-scanner.js +0 -349
- package/dist/utils/roadmap-scanner.js.map +0 -1
- package/dist/utils/roadmap-state.d.ts +0 -90
- package/dist/utils/roadmap-state.d.ts.map +0 -1
- package/dist/utils/roadmap-state.js +0 -154
- package/dist/utils/roadmap-state.js.map +0 -1
- package/dist/utils/script-result.d.ts +0 -12
- package/dist/utils/script-result.d.ts.map +0 -1
- package/dist/utils/script-result.js +0 -46
- package/dist/utils/script-result.js.map +0 -1
- package/dist/utils/shell.d.ts +0 -27
- package/dist/utils/shell.d.ts.map +0 -1
- package/dist/utils/shell.js +0 -64
- package/dist/utils/shell.js.map +0 -1
- package/dist/utils/status-data.d.ts +0 -148
- package/dist/utils/status-data.d.ts.map +0 -1
- package/dist/utils/status-data.js +0 -593
- package/dist/utils/status-data.js.map +0 -1
- package/dist/utils/ui.d.ts +0 -55
- package/dist/utils/ui.d.ts.map +0 -1
- package/dist/utils/ui.js +0 -121
- package/dist/utils/ui.js.map +0 -1
- package/web/dist/assets/index-BtxQU4oX.css +0 -1
- package/web/dist/assets/index-D3awZ0gS.js +0 -473
package/dist/commands/init.js
DELETED
|
@@ -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"}
|