@jonit-dev/night-watch-cli 1.7.17 → 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.
- 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 +12 -1
- package/dist/src/server/index.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-CzAWcldp.js +0 -473
package/dist/commands/qa.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QA command - executes the QA cron script for PR test generation
|
|
3
|
-
*/
|
|
4
|
-
import { Command } from "commander";
|
|
5
|
-
import { INightWatchConfig } from "../types.js";
|
|
6
|
-
/**
|
|
7
|
-
* Options for the qa command
|
|
8
|
-
*/
|
|
9
|
-
export interface IQaOptions {
|
|
10
|
-
dryRun: boolean;
|
|
11
|
-
timeout?: string;
|
|
12
|
-
provider?: string;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* QA notifications should not fire for script-level skip/no-op outcomes.
|
|
16
|
-
*/
|
|
17
|
-
export declare function shouldSendQaNotification(scriptStatus?: string): boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Build environment variables map from config and CLI options for QA
|
|
20
|
-
*/
|
|
21
|
-
export declare function buildEnvVars(config: INightWatchConfig, options: IQaOptions): Record<string, string>;
|
|
22
|
-
/**
|
|
23
|
-
* Apply CLI flag overrides to the config for QA
|
|
24
|
-
*/
|
|
25
|
-
export declare function applyCliOverrides(config: INightWatchConfig, options: IQaOptions): INightWatchConfig;
|
|
26
|
-
/**
|
|
27
|
-
* Register the qa command with the program
|
|
28
|
-
*/
|
|
29
|
-
export declare function qaCommand(program: Command): void;
|
|
30
|
-
//# sourceMappingURL=qa.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAe/C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAKvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuCnG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,iBAAiB,CAenG;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkGhD"}
|
package/dist/commands/qa.js
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QA command - executes the QA cron script for PR test generation
|
|
3
|
-
*/
|
|
4
|
-
import { getScriptPath, loadConfig } from "../config.js";
|
|
5
|
-
import { executeScriptWithOutput } from "../utils/shell.js";
|
|
6
|
-
import { sendNotifications } from "../utils/notify.js";
|
|
7
|
-
import { PROVIDER_COMMANDS } from "../constants.js";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
import { parseScriptResult } from "../utils/script-result.js";
|
|
10
|
-
import { createSpinner, createTable, dim, header, info, error as uiError, } from "../utils/ui.js";
|
|
11
|
-
/**
|
|
12
|
-
* QA notifications should not fire for script-level skip/no-op outcomes.
|
|
13
|
-
*/
|
|
14
|
-
export function shouldSendQaNotification(scriptStatus) {
|
|
15
|
-
if (!scriptStatus) {
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
return !scriptStatus.startsWith("skip_");
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Build environment variables map from config and CLI options for QA
|
|
22
|
-
*/
|
|
23
|
-
export function buildEnvVars(config, options) {
|
|
24
|
-
const env = {};
|
|
25
|
-
// Provider command - the actual CLI binary to call
|
|
26
|
-
env.NW_PROVIDER_CMD = PROVIDER_COMMANDS[config.provider];
|
|
27
|
-
// Default branch (empty = auto-detect in bash script)
|
|
28
|
-
if (config.defaultBranch) {
|
|
29
|
-
env.NW_DEFAULT_BRANCH = config.defaultBranch;
|
|
30
|
-
}
|
|
31
|
-
// Runtime for QA (uses NW_QA_* variables)
|
|
32
|
-
env.NW_QA_MAX_RUNTIME = String(config.qa.maxRuntime);
|
|
33
|
-
// Branch patterns: use qa-specific if non-empty, else top-level
|
|
34
|
-
const branchPatterns = config.qa.branchPatterns.length > 0
|
|
35
|
-
? config.qa.branchPatterns
|
|
36
|
-
: config.branchPatterns;
|
|
37
|
-
env.NW_BRANCH_PATTERNS = branchPatterns.join(",");
|
|
38
|
-
// QA-specific settings
|
|
39
|
-
env.NW_QA_SKIP_LABEL = config.qa.skipLabel;
|
|
40
|
-
env.NW_QA_ARTIFACTS = config.qa.artifacts;
|
|
41
|
-
env.NW_QA_AUTO_INSTALL_PLAYWRIGHT = config.qa.autoInstallPlaywright ? "1" : "0";
|
|
42
|
-
// Provider environment variables (API keys, base URLs, etc.)
|
|
43
|
-
if (config.providerEnv) {
|
|
44
|
-
Object.assign(env, config.providerEnv);
|
|
45
|
-
}
|
|
46
|
-
// Dry run flag
|
|
47
|
-
if (options.dryRun) {
|
|
48
|
-
env.NW_DRY_RUN = "1";
|
|
49
|
-
}
|
|
50
|
-
// Sandbox flag -- prevents the agent from modifying crontab during execution
|
|
51
|
-
env.NW_EXECUTION_CONTEXT = "agent";
|
|
52
|
-
return env;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Apply CLI flag overrides to the config for QA
|
|
56
|
-
*/
|
|
57
|
-
export function applyCliOverrides(config, options) {
|
|
58
|
-
const overridden = { ...config, qa: { ...config.qa } };
|
|
59
|
-
if (options.timeout) {
|
|
60
|
-
const timeout = parseInt(options.timeout, 10);
|
|
61
|
-
if (!isNaN(timeout)) {
|
|
62
|
-
overridden.qa.maxRuntime = timeout;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (options.provider) {
|
|
66
|
-
overridden.provider = options.provider;
|
|
67
|
-
}
|
|
68
|
-
return overridden;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Register the qa command with the program
|
|
72
|
-
*/
|
|
73
|
-
export function qaCommand(program) {
|
|
74
|
-
program
|
|
75
|
-
.command("qa")
|
|
76
|
-
.description("Run QA process now")
|
|
77
|
-
.option("--dry-run", "Show what would be executed without running")
|
|
78
|
-
.option("--timeout <seconds>", "Override max runtime in seconds for QA")
|
|
79
|
-
.option("--provider <string>", "AI provider to use (claude or codex)")
|
|
80
|
-
.action(async (options) => {
|
|
81
|
-
// Get the project directory (current working directory)
|
|
82
|
-
const projectDir = process.cwd();
|
|
83
|
-
// Load config from file and environment
|
|
84
|
-
let config = loadConfig(projectDir);
|
|
85
|
-
// Apply CLI flag overrides
|
|
86
|
-
config = applyCliOverrides(config, options);
|
|
87
|
-
// Build environment variables
|
|
88
|
-
const envVars = buildEnvVars(config, options);
|
|
89
|
-
// Get the script path
|
|
90
|
-
const scriptPath = getScriptPath("night-watch-qa-cron.sh");
|
|
91
|
-
if (options.dryRun) {
|
|
92
|
-
header("Dry Run: QA Process");
|
|
93
|
-
// Configuration section with table
|
|
94
|
-
header("Configuration");
|
|
95
|
-
const configTable = createTable({ head: ["Setting", "Value"] });
|
|
96
|
-
configTable.push(["Provider", config.provider]);
|
|
97
|
-
configTable.push(["Provider CLI", PROVIDER_COMMANDS[config.provider]]);
|
|
98
|
-
configTable.push(["Max Runtime", `${config.qa.maxRuntime}s (${Math.floor(config.qa.maxRuntime / 60)}min)`]);
|
|
99
|
-
const branchPatterns = config.qa.branchPatterns.length > 0
|
|
100
|
-
? config.qa.branchPatterns
|
|
101
|
-
: config.branchPatterns;
|
|
102
|
-
configTable.push(["Branch Patterns", branchPatterns.join(", ")]);
|
|
103
|
-
configTable.push(["Skip Label", config.qa.skipLabel]);
|
|
104
|
-
configTable.push(["Artifacts", config.qa.artifacts]);
|
|
105
|
-
configTable.push(["Auto-install Playwright", config.qa.autoInstallPlaywright ? "Yes" : "No"]);
|
|
106
|
-
console.log(configTable.toString());
|
|
107
|
-
// Environment variables
|
|
108
|
-
header("Environment Variables");
|
|
109
|
-
for (const [key, value] of Object.entries(envVars)) {
|
|
110
|
-
dim(` ${key}=${value}`);
|
|
111
|
-
}
|
|
112
|
-
// Full command that would be executed
|
|
113
|
-
header("Command");
|
|
114
|
-
dim(` bash ${scriptPath} ${projectDir}`);
|
|
115
|
-
console.log();
|
|
116
|
-
process.exit(0);
|
|
117
|
-
}
|
|
118
|
-
// Execute the script with spinner
|
|
119
|
-
const spinner = createSpinner("Running QA process...");
|
|
120
|
-
spinner.start();
|
|
121
|
-
try {
|
|
122
|
-
const { exitCode, stdout, stderr } = await executeScriptWithOutput(scriptPath, [projectDir], envVars);
|
|
123
|
-
const scriptResult = parseScriptResult(`${stdout}\n${stderr}`);
|
|
124
|
-
if (exitCode === 0) {
|
|
125
|
-
if (scriptResult?.status?.startsWith("skip_")) {
|
|
126
|
-
spinner.succeed("QA process completed (no PRs needed QA)");
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
spinner.succeed("QA process completed successfully");
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
spinner.fail(`QA process exited with code ${exitCode}`);
|
|
134
|
-
}
|
|
135
|
-
// Send notifications (fire-and-forget, failures do not affect exit code)
|
|
136
|
-
if (!options.dryRun) {
|
|
137
|
-
const skipNotification = !shouldSendQaNotification(scriptResult?.status);
|
|
138
|
-
if (skipNotification) {
|
|
139
|
-
info("Skipping QA notification (no actionable QA result)");
|
|
140
|
-
}
|
|
141
|
-
if (!skipNotification) {
|
|
142
|
-
await sendNotifications(config, {
|
|
143
|
-
event: "qa_completed",
|
|
144
|
-
projectName: path.basename(projectDir),
|
|
145
|
-
exitCode,
|
|
146
|
-
provider: config.provider,
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
process.exit(exitCode);
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
spinner.fail("Failed to execute QA command");
|
|
154
|
-
uiError(`${err instanceof Error ? err.message : String(err)}`);
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=qa.js.map
|
package/dist/commands/qa.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,WAAW,EACX,GAAG,EACH,MAAM,EACN,IAAI,EACJ,KAAK,IAAI,OAAO,GACjB,MAAM,eAAe,CAAC;AAWvB;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,YAAqB;IAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAyB,EAAE,OAAmB;IACzE,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,mDAAmD;IACnD,GAAG,CAAC,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEzD,sDAAsD;IACtD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC;IAC/C,CAAC;IAED,0CAA0C;IAC1C,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAErD,gEAAgE;IAChE,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QACxD,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc;QAC1B,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAC1B,GAAG,CAAC,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElD,uBAAuB;IACvB,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;IAC3C,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;IAC1C,GAAG,CAAC,6BAA6B,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEhF,6DAA6D;IAC7D,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,eAAe;IACf,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACvB,CAAC;IAED,6EAA6E;IAC7E,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC;IAEnC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB,EAAE,OAAmB;IAC9E,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;IAEvD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACpB,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAyC,CAAC;IAC1E,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC;SAClE,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,OAAmB,EAAE,EAAE;QACpC,wDAAwD;QACxD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAEjC,wCAAwC;QACxC,IAAI,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,2BAA2B;QAC3B,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE5C,8BAA8B;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,sBAAsB;QACtB,MAAM,UAAU,GAAG,aAAa,CAAC,wBAAwB,CAAC,CAAC;QAE3D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAE9B,mCAAmC;YACnC,MAAM,CAAC,eAAe,CAAC,CAAC;YACxB,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAChE,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvE,WAAW,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5G,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBACxD,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc;gBAC1B,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;YAC1B,WAAW,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjE,WAAW,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACtD,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpC,wBAAwB;YACxB,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;YAC3B,CAAC;YAED,sCAAsC;YACtC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClB,GAAG,CAAC,UAAU,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;YACtG,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;YAE/D,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,yEAAyE;YACzE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,gBAAgB,GAAG,CAAC,wBAAwB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAEzE,IAAI,gBAAgB,EAAE,CAAC;oBACrB,IAAI,CAAC,oDAAoD,CAAC,CAAC;gBAC7D,CAAC;gBAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,MAAM,iBAAiB,CAAC,MAAM,EAAE;wBAC9B,KAAK,EAAE,cAAc;wBACrB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;wBACtC,QAAQ;wBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC1B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/retry.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry command — Move a completed PRD back to pending for re-execution.
|
|
3
|
-
*/
|
|
4
|
-
import { Command } from "commander";
|
|
5
|
-
/**
|
|
6
|
-
* Register the retry command with the program
|
|
7
|
-
*/
|
|
8
|
-
export declare function retryCommand(program: Command): void;
|
|
9
|
-
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/commands/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+CnD"}
|
package/dist/commands/retry.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry command — Move a completed PRD back to pending for re-execution.
|
|
3
|
-
*/
|
|
4
|
-
import * as fs from "fs";
|
|
5
|
-
import * as path from "path";
|
|
6
|
-
import { loadConfig } from "../config.js";
|
|
7
|
-
import { dim, info, success, error as uiError, } from "../utils/ui.js";
|
|
8
|
-
/**
|
|
9
|
-
* Normalize the PRD name to ensure it has .md extension
|
|
10
|
-
*/
|
|
11
|
-
function normalizePrdName(name) {
|
|
12
|
-
if (!name.endsWith(".md")) {
|
|
13
|
-
return `${name}.md`;
|
|
14
|
-
}
|
|
15
|
-
return name;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Get list of PRD files in the done directory
|
|
19
|
-
*/
|
|
20
|
-
function getDonePrds(doneDir) {
|
|
21
|
-
if (!fs.existsSync(doneDir)) {
|
|
22
|
-
return [];
|
|
23
|
-
}
|
|
24
|
-
return fs.readdirSync(doneDir).filter((f) => f.endsWith(".md"));
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Register the retry command with the program
|
|
28
|
-
*/
|
|
29
|
-
export function retryCommand(program) {
|
|
30
|
-
program
|
|
31
|
-
.command("retry <prdName>")
|
|
32
|
-
.description("Move a completed PRD from done/ back to pending")
|
|
33
|
-
.action((prdName) => {
|
|
34
|
-
const projectDir = process.cwd();
|
|
35
|
-
const config = loadConfig(projectDir);
|
|
36
|
-
const prdDir = path.join(projectDir, config.prdDir);
|
|
37
|
-
const doneDir = path.join(prdDir, "done");
|
|
38
|
-
// Normalize the PRD name
|
|
39
|
-
const normalizedPrdName = normalizePrdName(prdName);
|
|
40
|
-
// Check if PRD is already pending (exists in prdDir root)
|
|
41
|
-
const pendingPath = path.join(prdDir, normalizedPrdName);
|
|
42
|
-
if (fs.existsSync(pendingPath)) {
|
|
43
|
-
info(`"${normalizedPrdName}" is already pending, nothing to retry.`);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
// Check if PRD exists in done directory
|
|
47
|
-
const donePath = path.join(doneDir, normalizedPrdName);
|
|
48
|
-
if (fs.existsSync(donePath)) {
|
|
49
|
-
// Move from done to pending
|
|
50
|
-
fs.renameSync(donePath, pendingPath);
|
|
51
|
-
success(`Moved "${normalizedPrdName}" back to pending.`);
|
|
52
|
-
dim(`From: ${donePath}`);
|
|
53
|
-
dim(`To: ${pendingPath}`);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
// PRD not found anywhere
|
|
57
|
-
uiError(`PRD "${normalizedPrdName}" not found.`);
|
|
58
|
-
// List available PRDs in done directory
|
|
59
|
-
const donePrds = getDonePrds(doneDir);
|
|
60
|
-
if (donePrds.length > 0) {
|
|
61
|
-
info(`Available PRDs in done/:`);
|
|
62
|
-
for (const prd of donePrds) {
|
|
63
|
-
dim(` - ${prd}`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
info("No PRDs found in done/ directory.");
|
|
68
|
-
}
|
|
69
|
-
process.exit(1);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=retry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/commands/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Review command - executes the PR reviewer cron script
|
|
3
|
-
*/
|
|
4
|
-
import { Command } from "commander";
|
|
5
|
-
import { INightWatchConfig } from "../types.js";
|
|
6
|
-
/**
|
|
7
|
-
* Options for the review command
|
|
8
|
-
*/
|
|
9
|
-
export interface IReviewOptions {
|
|
10
|
-
dryRun: boolean;
|
|
11
|
-
timeout?: string;
|
|
12
|
-
provider?: string;
|
|
13
|
-
autoMerge?: boolean;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Review notifications should not fire for script-level skip/no-op outcomes.
|
|
17
|
-
*/
|
|
18
|
-
export declare function shouldSendReviewNotification(scriptStatus?: string): boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Parse comma-separated PR numbers like "#12,#34" into numeric IDs.
|
|
21
|
-
*/
|
|
22
|
-
export declare function parseAutoMergedPrNumbers(raw?: string): number[];
|
|
23
|
-
/**
|
|
24
|
-
* Build environment variables map from config and CLI options for reviewer
|
|
25
|
-
*/
|
|
26
|
-
export declare function buildEnvVars(config: INightWatchConfig, options: IReviewOptions): Record<string, string>;
|
|
27
|
-
/**
|
|
28
|
-
* Apply CLI flag overrides to the config for reviewer
|
|
29
|
-
*/
|
|
30
|
-
export declare function applyCliOverrides(config: INightWatchConfig, options: IReviewOptions): INightWatchConfig;
|
|
31
|
-
/**
|
|
32
|
-
* Register the review command with the program
|
|
33
|
-
*/
|
|
34
|
-
export declare function reviewCommand(program: Command): void;
|
|
35
|
-
//# sourceMappingURL=review.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAiBhD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoCvG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,iBAAiB,CAmBvG;AA+BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6JpD"}
|
package/dist/commands/review.js
DELETED
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Review command - executes the PR reviewer cron script
|
|
3
|
-
*/
|
|
4
|
-
import { getScriptPath, loadConfig } from "../config.js";
|
|
5
|
-
import { executeScriptWithOutput } from "../utils/shell.js";
|
|
6
|
-
import { sendNotifications } from "../utils/notify.js";
|
|
7
|
-
import { fetchPrDetailsByNumber, fetchReviewedPrDetails } from "../utils/github.js";
|
|
8
|
-
import { PROVIDER_COMMANDS } from "../constants.js";
|
|
9
|
-
import { execSync } from "child_process";
|
|
10
|
-
import * as path from "path";
|
|
11
|
-
import { parseScriptResult } from "../utils/script-result.js";
|
|
12
|
-
import { createSpinner, createTable, dim, header, info, error as uiError, } from "../utils/ui.js";
|
|
13
|
-
/**
|
|
14
|
-
* Review notifications should not fire for script-level skip/no-op outcomes.
|
|
15
|
-
*/
|
|
16
|
-
export function shouldSendReviewNotification(scriptStatus) {
|
|
17
|
-
if (!scriptStatus) {
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
return !scriptStatus.startsWith("skip_");
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Parse comma-separated PR numbers like "#12,#34" into numeric IDs.
|
|
24
|
-
*/
|
|
25
|
-
export function parseAutoMergedPrNumbers(raw) {
|
|
26
|
-
if (!raw || raw.trim().length === 0) {
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
return raw
|
|
30
|
-
.split(",")
|
|
31
|
-
.map((token) => parseInt(token.trim().replace(/^#/, ""), 10))
|
|
32
|
-
.filter((value) => !Number.isNaN(value));
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Build environment variables map from config and CLI options for reviewer
|
|
36
|
-
*/
|
|
37
|
-
export function buildEnvVars(config, options) {
|
|
38
|
-
const env = {};
|
|
39
|
-
// Provider command - the actual CLI binary to call
|
|
40
|
-
env.NW_PROVIDER_CMD = PROVIDER_COMMANDS[config.provider];
|
|
41
|
-
// Default branch (empty = auto-detect in bash script)
|
|
42
|
-
if (config.defaultBranch) {
|
|
43
|
-
env.NW_DEFAULT_BRANCH = config.defaultBranch;
|
|
44
|
-
}
|
|
45
|
-
// Runtime for reviewer (uses NW_REVIEWER_* variables)
|
|
46
|
-
env.NW_REVIEWER_MAX_RUNTIME = String(config.reviewerMaxRuntime);
|
|
47
|
-
env.NW_MIN_REVIEW_SCORE = String(config.minReviewScore);
|
|
48
|
-
env.NW_BRANCH_PATTERNS = config.branchPatterns.join(",");
|
|
49
|
-
// Provider environment variables (API keys, base URLs, etc.)
|
|
50
|
-
if (config.providerEnv) {
|
|
51
|
-
Object.assign(env, config.providerEnv);
|
|
52
|
-
}
|
|
53
|
-
// Dry run flag
|
|
54
|
-
if (options.dryRun) {
|
|
55
|
-
env.NW_DRY_RUN = "1";
|
|
56
|
-
}
|
|
57
|
-
// Auto-merge configuration
|
|
58
|
-
if (config.autoMerge) {
|
|
59
|
-
env.NW_AUTO_MERGE = "1";
|
|
60
|
-
}
|
|
61
|
-
env.NW_AUTO_MERGE_METHOD = config.autoMergeMethod;
|
|
62
|
-
// Sandbox flag — prevents the agent from modifying crontab during execution
|
|
63
|
-
env.NW_EXECUTION_CONTEXT = "agent";
|
|
64
|
-
return env;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Apply CLI flag overrides to the config for reviewer
|
|
68
|
-
*/
|
|
69
|
-
export function applyCliOverrides(config, options) {
|
|
70
|
-
const overridden = { ...config };
|
|
71
|
-
if (options.timeout) {
|
|
72
|
-
const timeout = parseInt(options.timeout, 10);
|
|
73
|
-
if (!isNaN(timeout)) {
|
|
74
|
-
overridden.reviewerMaxRuntime = timeout;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (options.provider) {
|
|
78
|
-
overridden.provider = options.provider;
|
|
79
|
-
}
|
|
80
|
-
if (options.autoMerge !== undefined) {
|
|
81
|
-
overridden.autoMerge = options.autoMerge;
|
|
82
|
-
}
|
|
83
|
-
return overridden;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Get open PRs that need work (matching branch patterns)
|
|
87
|
-
*/
|
|
88
|
-
function getOpenPrsNeedingWork(branchPatterns) {
|
|
89
|
-
try {
|
|
90
|
-
// Build the search query for PRs matching branch patterns
|
|
91
|
-
const headFilter = branchPatterns.map((p) => `--head "${p}"`).join(" ");
|
|
92
|
-
// Get open PRs as JSON
|
|
93
|
-
const result = execSync(`gh pr list --state open --json number,title,headRefName ${headFilter} 2>/dev/null || echo "[]"`, {
|
|
94
|
-
encoding: "utf-8",
|
|
95
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
96
|
-
});
|
|
97
|
-
const prs = JSON.parse(result.trim() || "[]");
|
|
98
|
-
return prs.map((pr) => ({
|
|
99
|
-
number: pr.number,
|
|
100
|
-
title: pr.title,
|
|
101
|
-
branch: pr.headRefName,
|
|
102
|
-
}));
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
// gh CLI not available or not authenticated
|
|
106
|
-
return [];
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Register the review command with the program
|
|
111
|
-
*/
|
|
112
|
-
export function reviewCommand(program) {
|
|
113
|
-
program
|
|
114
|
-
.command("review")
|
|
115
|
-
.description("Run PR reviewer now")
|
|
116
|
-
.option("--dry-run", "Show what would be executed without running")
|
|
117
|
-
.option("--timeout <seconds>", "Override max runtime in seconds for reviewer")
|
|
118
|
-
.option("--provider <string>", "AI provider to use (claude or codex)")
|
|
119
|
-
.option("--auto-merge", "Enable auto-merge for this run")
|
|
120
|
-
.action(async (options) => {
|
|
121
|
-
// Get the project directory (current working directory)
|
|
122
|
-
const projectDir = process.cwd();
|
|
123
|
-
// Load config from file and environment
|
|
124
|
-
let config = loadConfig(projectDir);
|
|
125
|
-
// Apply CLI flag overrides
|
|
126
|
-
config = applyCliOverrides(config, options);
|
|
127
|
-
// Build environment variables
|
|
128
|
-
const envVars = buildEnvVars(config, options);
|
|
129
|
-
// Get the script path
|
|
130
|
-
const scriptPath = getScriptPath("night-watch-pr-reviewer-cron.sh");
|
|
131
|
-
if (options.dryRun) {
|
|
132
|
-
header("Dry Run: PR Reviewer");
|
|
133
|
-
// Configuration section with table
|
|
134
|
-
header("Configuration");
|
|
135
|
-
const configTable = createTable({ head: ["Setting", "Value"] });
|
|
136
|
-
configTable.push(["Provider", config.provider]);
|
|
137
|
-
configTable.push(["Provider CLI", PROVIDER_COMMANDS[config.provider]]);
|
|
138
|
-
configTable.push(["Max Runtime", `${config.reviewerMaxRuntime}s (${Math.floor(config.reviewerMaxRuntime / 60)}min)`]);
|
|
139
|
-
configTable.push(["Min Review Score", `${config.minReviewScore}/100`]);
|
|
140
|
-
configTable.push(["Branch Patterns", config.branchPatterns.join(", ")]);
|
|
141
|
-
configTable.push(["Auto-merge", config.autoMerge ? `Enabled (${config.autoMergeMethod})` : "Disabled"]);
|
|
142
|
-
console.log(configTable.toString());
|
|
143
|
-
// Check for open PRs needing work
|
|
144
|
-
header("Open PRs Needing Work");
|
|
145
|
-
const openPrs = getOpenPrsNeedingWork(config.branchPatterns);
|
|
146
|
-
if (openPrs.length === 0) {
|
|
147
|
-
dim(" (no open PRs matching branch patterns)");
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
for (const pr of openPrs) {
|
|
151
|
-
info(`#${pr.number}: ${pr.title}`);
|
|
152
|
-
dim(` Branch: ${pr.branch}`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
// Provider invocation command
|
|
156
|
-
header("Provider Invocation");
|
|
157
|
-
const providerCmd = PROVIDER_COMMANDS[config.provider];
|
|
158
|
-
const autoFlag = config.provider === "claude" ? "--dangerously-skip-permissions" : "--yolo";
|
|
159
|
-
dim(` ${providerCmd} ${autoFlag} -p "/night-watch-pr-reviewer"`);
|
|
160
|
-
// Environment variables
|
|
161
|
-
header("Environment Variables");
|
|
162
|
-
for (const [key, value] of Object.entries(envVars)) {
|
|
163
|
-
dim(` ${key}=${value}`);
|
|
164
|
-
}
|
|
165
|
-
// Full command that would be executed
|
|
166
|
-
header("Command");
|
|
167
|
-
dim(` bash ${scriptPath} ${projectDir}`);
|
|
168
|
-
console.log();
|
|
169
|
-
process.exit(0);
|
|
170
|
-
}
|
|
171
|
-
// Execute the script with spinner
|
|
172
|
-
const spinner = createSpinner("Running PR reviewer...");
|
|
173
|
-
spinner.start();
|
|
174
|
-
try {
|
|
175
|
-
const { exitCode, stdout, stderr } = await executeScriptWithOutput(scriptPath, [projectDir], envVars);
|
|
176
|
-
const scriptResult = parseScriptResult(`${stdout}\n${stderr}`);
|
|
177
|
-
if (exitCode === 0) {
|
|
178
|
-
if (scriptResult?.status?.startsWith("skip_")) {
|
|
179
|
-
spinner.succeed("PR reviewer completed (no PRs needed review)");
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
spinner.succeed("PR reviewer completed successfully");
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
spinner.fail(`PR reviewer exited with code ${exitCode}`);
|
|
187
|
-
}
|
|
188
|
-
// Send notifications (fire-and-forget, failures do not affect exit code)
|
|
189
|
-
if (!options.dryRun) {
|
|
190
|
-
const skipNotification = !shouldSendReviewNotification(scriptResult?.status);
|
|
191
|
-
if (skipNotification) {
|
|
192
|
-
info("Skipping review notification (no actionable review result)");
|
|
193
|
-
}
|
|
194
|
-
// Enrich with PR details (graceful — null if gh fails)
|
|
195
|
-
let prDetails = null;
|
|
196
|
-
if (!skipNotification && exitCode === 0) {
|
|
197
|
-
const prsRaw = scriptResult?.data.prs;
|
|
198
|
-
const firstPrToken = prsRaw?.split(",")[0]?.trim();
|
|
199
|
-
if (firstPrToken) {
|
|
200
|
-
const parsedNumber = parseInt(firstPrToken.replace(/^#/, ""), 10);
|
|
201
|
-
if (!Number.isNaN(parsedNumber)) {
|
|
202
|
-
prDetails = fetchPrDetailsByNumber(parsedNumber, projectDir);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
if (!prDetails) {
|
|
206
|
-
prDetails = fetchReviewedPrDetails(config.branchPatterns, projectDir);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
if (!skipNotification) {
|
|
210
|
-
await sendNotifications(config, {
|
|
211
|
-
event: "review_completed",
|
|
212
|
-
projectName: path.basename(projectDir),
|
|
213
|
-
exitCode,
|
|
214
|
-
provider: config.provider,
|
|
215
|
-
prUrl: prDetails?.url,
|
|
216
|
-
prTitle: prDetails?.title,
|
|
217
|
-
prBody: prDetails?.body,
|
|
218
|
-
prNumber: prDetails?.number,
|
|
219
|
-
filesChanged: prDetails?.changedFiles,
|
|
220
|
-
additions: prDetails?.additions,
|
|
221
|
-
deletions: prDetails?.deletions,
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
const autoMergedPrNumbers = parseAutoMergedPrNumbers(scriptResult?.data.auto_merged);
|
|
225
|
-
if (autoMergedPrNumbers.length > 0) {
|
|
226
|
-
const autoMergedPrNumber = autoMergedPrNumbers[0];
|
|
227
|
-
const autoMergedPrDetails = fetchPrDetailsByNumber(autoMergedPrNumber, projectDir);
|
|
228
|
-
await sendNotifications(config, {
|
|
229
|
-
event: "pr_auto_merged",
|
|
230
|
-
projectName: path.basename(projectDir),
|
|
231
|
-
exitCode,
|
|
232
|
-
provider: config.provider,
|
|
233
|
-
prNumber: autoMergedPrDetails?.number ?? autoMergedPrNumber,
|
|
234
|
-
prUrl: autoMergedPrDetails?.url,
|
|
235
|
-
prTitle: autoMergedPrDetails?.title,
|
|
236
|
-
prBody: autoMergedPrDetails?.body,
|
|
237
|
-
filesChanged: autoMergedPrDetails?.changedFiles,
|
|
238
|
-
additions: autoMergedPrDetails?.additions,
|
|
239
|
-
deletions: autoMergedPrDetails?.deletions,
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
process.exit(exitCode);
|
|
244
|
-
}
|
|
245
|
-
catch (err) {
|
|
246
|
-
spinner.fail("Failed to execute review command");
|
|
247
|
-
uiError(`${err instanceof Error ? err.message : String(err)}`);
|
|
248
|
-
process.exit(1);
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
//# sourceMappingURL=review.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
|