@jonit-dev/night-watch-cli 1.0.0

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +509 -0
  3. package/bin/night-watch.mjs +2 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +35 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/init.d.ts +8 -0
  9. package/dist/commands/init.d.ts.map +1 -0
  10. package/dist/commands/init.js +376 -0
  11. package/dist/commands/init.js.map +1 -0
  12. package/dist/commands/install.d.ts +15 -0
  13. package/dist/commands/install.d.ts.map +1 -0
  14. package/dist/commands/install.js +135 -0
  15. package/dist/commands/install.js.map +1 -0
  16. package/dist/commands/logs.d.ts +15 -0
  17. package/dist/commands/logs.d.ts.map +1 -0
  18. package/dist/commands/logs.js +104 -0
  19. package/dist/commands/logs.js.map +1 -0
  20. package/dist/commands/review.d.ts +26 -0
  21. package/dist/commands/review.d.ts.map +1 -0
  22. package/dist/commands/review.js +144 -0
  23. package/dist/commands/review.js.map +1 -0
  24. package/dist/commands/run.d.ts +26 -0
  25. package/dist/commands/run.d.ts.map +1 -0
  26. package/dist/commands/run.js +161 -0
  27. package/dist/commands/run.js.map +1 -0
  28. package/dist/commands/status.d.ts +14 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +303 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/commands/uninstall.d.ts +13 -0
  33. package/dist/commands/uninstall.d.ts.map +1 -0
  34. package/dist/commands/uninstall.js +97 -0
  35. package/dist/commands/uninstall.js.map +1 -0
  36. package/dist/config.d.ts +23 -0
  37. package/dist/config.d.ts.map +1 -0
  38. package/dist/config.js +213 -0
  39. package/dist/config.js.map +1 -0
  40. package/dist/constants.d.ts +21 -0
  41. package/dist/constants.d.ts.map +1 -0
  42. package/dist/constants.js +33 -0
  43. package/dist/constants.js.map +1 -0
  44. package/dist/types.d.ts +35 -0
  45. package/dist/types.d.ts.map +1 -0
  46. package/dist/types.js +5 -0
  47. package/dist/types.js.map +1 -0
  48. package/dist/utils/crontab.d.ts +50 -0
  49. package/dist/utils/crontab.d.ts.map +1 -0
  50. package/dist/utils/crontab.js +116 -0
  51. package/dist/utils/crontab.js.map +1 -0
  52. package/dist/utils/shell.d.ts +13 -0
  53. package/dist/utils/shell.d.ts.map +1 -0
  54. package/dist/utils/shell.js +44 -0
  55. package/dist/utils/shell.js.map +1 -0
  56. package/dist/utils/ui.d.ts +55 -0
  57. package/dist/utils/ui.d.ts.map +1 -0
  58. package/dist/utils/ui.js +121 -0
  59. package/dist/utils/ui.js.map +1 -0
  60. package/package.json +64 -0
  61. package/scripts/night-watch-cron.sh +148 -0
  62. package/scripts/night-watch-helpers.sh +155 -0
  63. package/scripts/night-watch-pr-reviewer-cron.sh +135 -0
  64. package/templates/night-watch-pr-reviewer.md +144 -0
  65. package/templates/night-watch.config.json +21 -0
  66. package/templates/night-watch.md +100 -0
  67. package/templates/prd-executor.md +235 -0
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Logs command for Night Watch CLI
3
+ * View log output from executor and reviewer
4
+ */
5
+ import { spawn } from "child_process";
6
+ import * as path from "path";
7
+ import * as fs from "fs";
8
+ import { LOG_DIR } from "../constants.js";
9
+ import { header, dim } from "../utils/ui.js";
10
+ /**
11
+ * Get last N lines from a file
12
+ */
13
+ function getLastLines(filePath, lineCount) {
14
+ if (!fs.existsSync(filePath)) {
15
+ return `Log file not found: ${filePath}`;
16
+ }
17
+ try {
18
+ const content = fs.readFileSync(filePath, "utf-8");
19
+ const lines = content.trim().split("\n");
20
+ return lines.slice(-lineCount).join("\n");
21
+ }
22
+ catch (error) {
23
+ return `Error reading log file: ${error instanceof Error ? error.message : String(error)}`;
24
+ }
25
+ }
26
+ /**
27
+ * Follow log file in real-time using tail -f
28
+ */
29
+ function followLog(filePath) {
30
+ if (!fs.existsSync(filePath)) {
31
+ console.log(`Log file not found: ${filePath}`);
32
+ console.log("The log file will be created when the first execution runs.");
33
+ return;
34
+ }
35
+ const tail = spawn("tail", ["-f", filePath], {
36
+ stdio: "inherit",
37
+ });
38
+ tail.on("error", (error) => {
39
+ console.error(`Error following log: ${error.message}`);
40
+ });
41
+ // Handle Ctrl+C gracefully
42
+ process.on("SIGINT", () => {
43
+ tail.kill();
44
+ process.exit(0);
45
+ });
46
+ }
47
+ /**
48
+ * Logs command implementation
49
+ */
50
+ export function logsCommand(program) {
51
+ program
52
+ .command("logs")
53
+ .description("View night-watch log output")
54
+ .option("-n, --lines <count>", "Number of lines to show", "50")
55
+ .option("-f, --follow", "Follow log output (tail -f)")
56
+ .option("-t, --type <type>", "Log type to view (run|review|all)", "all")
57
+ .action(async (options) => {
58
+ try {
59
+ const projectDir = process.cwd();
60
+ const logDir = path.join(projectDir, LOG_DIR);
61
+ const lineCount = parseInt(options.lines || "50", 10);
62
+ const executorLog = path.join(logDir, "executor.log");
63
+ const reviewerLog = path.join(logDir, "reviewer.log");
64
+ // Determine which logs to show
65
+ const logType = options.type?.toLowerCase() || "all";
66
+ const showExecutor = logType === "all" || logType === "run" || logType === "executor";
67
+ const showReviewer = logType === "all" || logType === "review" || logType === "reviewer";
68
+ // Handle --follow mode
69
+ if (options.follow) {
70
+ if (logType === "all") {
71
+ dim("Note: Following all logs is not supported. Showing executor log.");
72
+ dim("Use --type review to follow reviewer log.\n");
73
+ }
74
+ const targetLog = showReviewer ? reviewerLog : executorLog;
75
+ followLog(targetLog);
76
+ return;
77
+ }
78
+ // Show static log output
79
+ console.log();
80
+ if (showExecutor) {
81
+ header("Executor Log");
82
+ dim(`File: ${executorLog}`);
83
+ console.log();
84
+ console.log(getLastLines(executorLog, lineCount));
85
+ }
86
+ if (showReviewer) {
87
+ header("Reviewer Log");
88
+ dim(`File: ${reviewerLog}`);
89
+ console.log();
90
+ console.log(getLastLines(reviewerLog, lineCount));
91
+ }
92
+ // Add tip
93
+ console.log();
94
+ dim("---");
95
+ dim("Tip: Use -f to follow logs in real-time");
96
+ dim(" Use --type run or --type review to view specific logs");
97
+ }
98
+ catch (err) {
99
+ console.error(`Error reading logs: ${err instanceof Error ? err.message : String(err)}`);
100
+ process.exit(1);
101
+ }
102
+ });
103
+ }
104
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
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 ReviewOptions {
10
+ dryRun: boolean;
11
+ timeout?: string;
12
+ provider?: string;
13
+ }
14
+ /**
15
+ * Build environment variables map from config and CLI options for reviewer
16
+ */
17
+ export declare function buildEnvVars(config: INightWatchConfig, options: ReviewOptions): Record<string, string>;
18
+ /**
19
+ * Apply CLI flag overrides to the config for reviewer
20
+ */
21
+ export declare function applyCliOverrides(config: INightWatchConfig, options: ReviewOptions): INightWatchConfig;
22
+ /**
23
+ * Register the review command with the program
24
+ */
25
+ export declare function reviewCommand(program: Command): void;
26
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
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;AAahD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAetG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,GAAG,iBAAiB,CAetG;AA+BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuFpD"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Review command - executes the PR reviewer cron script
3
+ */
4
+ import { loadConfig, getScriptPath } from "../config.js";
5
+ import { executeScript } from "../utils/shell.js";
6
+ import { PROVIDER_COMMANDS } from "../constants.js";
7
+ import { execSync } from "child_process";
8
+ import { header, dim, info, error as uiError, createSpinner, createTable, } from "../utils/ui.js";
9
+ /**
10
+ * Build environment variables map from config and CLI options for reviewer
11
+ */
12
+ export function buildEnvVars(config, options) {
13
+ const env = {};
14
+ // Provider command - the actual CLI binary to call
15
+ env.NW_PROVIDER_CMD = PROVIDER_COMMANDS[config.provider];
16
+ // Runtime for reviewer (uses NW_REVIEWER_* variables)
17
+ env.NW_REVIEWER_MAX_RUNTIME = String(config.reviewerMaxRuntime);
18
+ // Dry run flag
19
+ if (options.dryRun) {
20
+ env.NW_DRY_RUN = "1";
21
+ }
22
+ return env;
23
+ }
24
+ /**
25
+ * Apply CLI flag overrides to the config for reviewer
26
+ */
27
+ export function applyCliOverrides(config, options) {
28
+ const overridden = { ...config };
29
+ if (options.timeout) {
30
+ const timeout = parseInt(options.timeout, 10);
31
+ if (!isNaN(timeout)) {
32
+ overridden.reviewerMaxRuntime = timeout;
33
+ }
34
+ }
35
+ if (options.provider) {
36
+ overridden.provider = options.provider;
37
+ }
38
+ return overridden;
39
+ }
40
+ /**
41
+ * Get open PRs that need work (matching branch patterns)
42
+ */
43
+ function getOpenPrsNeedingWork(branchPatterns) {
44
+ try {
45
+ // Build the search query for PRs matching branch patterns
46
+ const headFilter = branchPatterns.map((p) => `--head "${p}"`).join(" ");
47
+ // Get open PRs as JSON
48
+ const result = execSync(`gh pr list --state open --json number,title,headRefName ${headFilter} 2>/dev/null || echo "[]"`, {
49
+ encoding: "utf-8",
50
+ stdio: ["pipe", "pipe", "pipe"],
51
+ });
52
+ const prs = JSON.parse(result.trim() || "[]");
53
+ return prs.map((pr) => ({
54
+ number: pr.number,
55
+ title: pr.title,
56
+ branch: pr.headRefName,
57
+ }));
58
+ }
59
+ catch {
60
+ // gh CLI not available or not authenticated
61
+ return [];
62
+ }
63
+ }
64
+ /**
65
+ * Register the review command with the program
66
+ */
67
+ export function reviewCommand(program) {
68
+ program
69
+ .command("review")
70
+ .description("Run PR reviewer now")
71
+ .option("--dry-run", "Show what would be executed without running")
72
+ .option("--timeout <seconds>", "Override max runtime in seconds for reviewer")
73
+ .option("--provider <string>", "AI provider to use (claude or codex)")
74
+ .action(async (options) => {
75
+ // Get the project directory (current working directory)
76
+ const projectDir = process.cwd();
77
+ // Load config from file and environment
78
+ let config = loadConfig(projectDir);
79
+ // Apply CLI flag overrides
80
+ config = applyCliOverrides(config, options);
81
+ // Build environment variables
82
+ const envVars = buildEnvVars(config, options);
83
+ // Get the script path
84
+ const scriptPath = getScriptPath("night-watch-pr-reviewer-cron.sh");
85
+ if (options.dryRun) {
86
+ header("Dry Run: PR Reviewer");
87
+ // Configuration section with table
88
+ header("Configuration");
89
+ const configTable = createTable({ head: ["Setting", "Value"] });
90
+ configTable.push(["Provider", config.provider]);
91
+ configTable.push(["Provider CLI", PROVIDER_COMMANDS[config.provider]]);
92
+ configTable.push(["Max Runtime", `${config.reviewerMaxRuntime}s (${Math.floor(config.reviewerMaxRuntime / 60)}min)`]);
93
+ configTable.push(["Min Review Score", `${config.minReviewScore}/100`]);
94
+ configTable.push(["Branch Patterns", config.branchPatterns.join(", ")]);
95
+ console.log(configTable.toString());
96
+ // Check for open PRs needing work
97
+ header("Open PRs Needing Work");
98
+ const openPrs = getOpenPrsNeedingWork(config.branchPatterns);
99
+ if (openPrs.length === 0) {
100
+ dim(" (no open PRs matching branch patterns)");
101
+ }
102
+ else {
103
+ for (const pr of openPrs) {
104
+ info(`#${pr.number}: ${pr.title}`);
105
+ dim(` Branch: ${pr.branch}`);
106
+ }
107
+ }
108
+ // Provider invocation command
109
+ header("Provider Invocation");
110
+ const providerCmd = PROVIDER_COMMANDS[config.provider];
111
+ const autoFlag = config.provider === "claude" ? "--dangerously-skip-permissions" : "--yolo";
112
+ dim(` ${providerCmd} ${autoFlag} -p "/night-watch-pr-reviewer"`);
113
+ // Environment variables
114
+ header("Environment Variables");
115
+ for (const [key, value] of Object.entries(envVars)) {
116
+ dim(` ${key}=${value}`);
117
+ }
118
+ // Full command that would be executed
119
+ header("Command");
120
+ dim(` bash ${scriptPath} ${projectDir}`);
121
+ console.log();
122
+ process.exit(0);
123
+ }
124
+ // Execute the script with spinner
125
+ const spinner = createSpinner("Running PR reviewer...");
126
+ spinner.start();
127
+ try {
128
+ const exitCode = await executeScript(scriptPath, [projectDir], envVars);
129
+ if (exitCode === 0) {
130
+ spinner.succeed("PR reviewer completed successfully");
131
+ }
132
+ else {
133
+ spinner.fail(`PR reviewer exited with code ${exitCode}`);
134
+ }
135
+ process.exit(exitCode);
136
+ }
137
+ catch (err) {
138
+ spinner.fail("Failed to execute review command");
139
+ uiError(`${err instanceof Error ? err.message : String(err)}`);
140
+ process.exit(1);
141
+ }
142
+ });
143
+ }
144
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Run command - executes the PRD cron script
3
+ */
4
+ import { Command } from "commander";
5
+ import { INightWatchConfig } from "../types.js";
6
+ /**
7
+ * Options for the run command
8
+ */
9
+ export interface RunOptions {
10
+ dryRun: boolean;
11
+ timeout?: string;
12
+ provider?: string;
13
+ }
14
+ /**
15
+ * Build environment variables map from config and CLI options
16
+ */
17
+ export declare function buildEnvVars(config: INightWatchConfig, options: RunOptions): Record<string, string>;
18
+ /**
19
+ * Apply CLI flag overrides to the config
20
+ */
21
+ export declare function applyCliOverrides(config: INightWatchConfig, options: RunOptions): INightWatchConfig;
22
+ /**
23
+ * Register the run command with the program
24
+ */
25
+ export declare function runCommand(program: Command): void;
26
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAgBhD;;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,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAenG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,iBAAiB,CAenG;AAmCD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmGjD"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Run command - executes the PRD cron script
3
+ */
4
+ import { loadConfig, getScriptPath } from "../config.js";
5
+ import { executeScript } from "../utils/shell.js";
6
+ import { PROVIDER_COMMANDS } from "../constants.js";
7
+ import * as fs from "fs";
8
+ import * as path from "path";
9
+ import { header, dim, info, error as uiError, createSpinner, createTable, } from "../utils/ui.js";
10
+ /**
11
+ * Build environment variables map from config and CLI options
12
+ */
13
+ export function buildEnvVars(config, options) {
14
+ const env = {};
15
+ // Provider command - the actual CLI binary to call
16
+ env.NW_PROVIDER_CMD = PROVIDER_COMMANDS[config.provider];
17
+ // Runtime
18
+ env.NW_MAX_RUNTIME = String(config.maxRuntime);
19
+ // Dry run flag
20
+ if (options.dryRun) {
21
+ env.NW_DRY_RUN = "1";
22
+ }
23
+ return env;
24
+ }
25
+ /**
26
+ * Apply CLI flag overrides to the config
27
+ */
28
+ export function applyCliOverrides(config, options) {
29
+ const overridden = { ...config };
30
+ if (options.timeout) {
31
+ const timeout = parseInt(options.timeout, 10);
32
+ if (!isNaN(timeout)) {
33
+ overridden.maxRuntime = timeout;
34
+ }
35
+ }
36
+ if (options.provider) {
37
+ overridden.provider = options.provider;
38
+ }
39
+ return overridden;
40
+ }
41
+ /**
42
+ * Scan the PRD directory for eligible PRD files
43
+ */
44
+ function scanPrdDirectory(projectDir, prdDir) {
45
+ const absolutePrdDir = path.join(projectDir, prdDir);
46
+ const doneDir = path.join(absolutePrdDir, "done");
47
+ const pending = [];
48
+ const completed = [];
49
+ // Scan main PRD directory for pending PRDs
50
+ if (fs.existsSync(absolutePrdDir)) {
51
+ const entries = fs.readdirSync(absolutePrdDir, { withFileTypes: true });
52
+ for (const entry of entries) {
53
+ if (entry.isFile() && entry.name.endsWith(".md") && entry.name !== "NIGHT-WATCH-SUMMARY.md") {
54
+ pending.push(entry.name);
55
+ }
56
+ }
57
+ }
58
+ // Scan done directory for completed PRDs
59
+ if (fs.existsSync(doneDir)) {
60
+ const entries = fs.readdirSync(doneDir, { withFileTypes: true });
61
+ for (const entry of entries) {
62
+ if (entry.isFile() && entry.name.endsWith(".md")) {
63
+ completed.push(entry.name);
64
+ }
65
+ }
66
+ }
67
+ return { pending, completed };
68
+ }
69
+ /**
70
+ * Register the run command with the program
71
+ */
72
+ export function runCommand(program) {
73
+ program
74
+ .command("run")
75
+ .description("Run PRD executor now")
76
+ .option("--dry-run", "Show what would be executed without running")
77
+ .option("--timeout <seconds>", "Override max runtime in seconds")
78
+ .option("--provider <string>", "AI provider to use (claude or codex)")
79
+ .action(async (options) => {
80
+ // Get the project directory (current working directory)
81
+ const projectDir = process.cwd();
82
+ // Load config from file and environment
83
+ let config = loadConfig(projectDir);
84
+ // Apply CLI flag overrides
85
+ config = applyCliOverrides(config, options);
86
+ // Build environment variables
87
+ const envVars = buildEnvVars(config, options);
88
+ // Get the script path
89
+ const scriptPath = getScriptPath("night-watch-cron.sh");
90
+ if (options.dryRun) {
91
+ header("Dry Run: PRD Executor");
92
+ // Configuration section with table
93
+ header("Configuration");
94
+ const configTable = createTable({ head: ["Setting", "Value"] });
95
+ configTable.push(["Provider", config.provider]);
96
+ configTable.push(["Provider CLI", PROVIDER_COMMANDS[config.provider]]);
97
+ configTable.push(["PRD Directory", config.prdDir]);
98
+ configTable.push(["Max Runtime", `${config.maxRuntime}s (${Math.floor(config.maxRuntime / 60)}min)`]);
99
+ configTable.push(["Branch Prefix", config.branchPrefix]);
100
+ console.log(configTable.toString());
101
+ // Scan for PRDs
102
+ header("PRD Status");
103
+ const prdStatus = scanPrdDirectory(projectDir, config.prdDir);
104
+ if (prdStatus.pending.length === 0) {
105
+ dim(" Pending: (none)");
106
+ }
107
+ else {
108
+ info(`Pending (${prdStatus.pending.length}):`);
109
+ for (const prd of prdStatus.pending) {
110
+ dim(` - ${prd}`);
111
+ }
112
+ }
113
+ if (prdStatus.completed.length === 0) {
114
+ dim(" Completed: (none)");
115
+ }
116
+ else {
117
+ info(`Completed (${prdStatus.completed.length}):`);
118
+ for (const prd of prdStatus.completed.slice(0, 5)) {
119
+ dim(` - ${prd}`);
120
+ }
121
+ if (prdStatus.completed.length > 5) {
122
+ dim(` ... and ${prdStatus.completed.length - 5} more`);
123
+ }
124
+ }
125
+ // Provider invocation command
126
+ header("Provider Invocation");
127
+ const providerCmd = PROVIDER_COMMANDS[config.provider];
128
+ const autoFlag = config.provider === "claude" ? "--dangerously-skip-permissions" : "--yolo";
129
+ dim(` ${providerCmd} ${autoFlag} -p "/night-watch"`);
130
+ // Environment variables
131
+ header("Environment Variables");
132
+ for (const [key, value] of Object.entries(envVars)) {
133
+ dim(` ${key}=${value}`);
134
+ }
135
+ // Full command that would be executed
136
+ header("Command");
137
+ dim(` bash ${scriptPath} ${projectDir}`);
138
+ console.log();
139
+ process.exit(0);
140
+ }
141
+ // Execute the script with spinner
142
+ const spinner = createSpinner("Running PRD executor...");
143
+ spinner.start();
144
+ try {
145
+ const exitCode = await executeScript(scriptPath, [projectDir], envVars);
146
+ if (exitCode === 0) {
147
+ spinner.succeed("PRD executor completed successfully");
148
+ }
149
+ else {
150
+ spinner.fail(`PRD executor exited with code ${exitCode}`);
151
+ }
152
+ process.exit(exitCode);
153
+ }
154
+ catch (err) {
155
+ spinner.fail("Failed to execute run command");
156
+ uiError(`${err instanceof Error ? err.message : String(err)}`);
157
+ process.exit(1);
158
+ }
159
+ });
160
+ }
161
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Status command for Night Watch CLI
3
+ * Shows current status including lock files, PRDs, PRs, and logs
4
+ */
5
+ import { Command } from "commander";
6
+ export interface StatusOptions {
7
+ verbose?: boolean;
8
+ json?: boolean;
9
+ }
10
+ /**
11
+ * Status command implementation
12
+ */
13
+ export declare function statusCommand(program: Command): void;
14
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAoOD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgIpD"}