@jonit-dev/night-watch-cli 1.8.10-beta.8 → 1.8.12-beta.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 (136) hide show
  1. package/dist/cli.js +113 -29
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +3 -1
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/commands/review.d.ts.map +1 -1
  6. package/dist/commands/review.js +48 -7
  7. package/dist/commands/review.js.map +1 -1
  8. package/dist/commands/run.d.ts.map +1 -1
  9. package/dist/commands/run.js +8 -6
  10. package/dist/commands/run.js.map +1 -1
  11. package/dist/scripts/night-watch-audit-cron.sh +6 -0
  12. package/dist/scripts/night-watch-cron.sh +30 -9
  13. package/dist/scripts/night-watch-helpers.sh +77 -5
  14. package/dist/scripts/night-watch-pr-reviewer-cron.sh +176 -43
  15. package/dist/scripts/night-watch-qa-cron.sh +6 -0
  16. package/dist/templates/night-watch.config.json +21 -1
  17. package/dist/web/assets/index-B6E6kOoR.js +406 -0
  18. package/dist/web/assets/index-C3BV1Hoa.js +406 -0
  19. package/dist/web/assets/index-DIMUXIP8.css +1 -0
  20. package/dist/web/assets/index-Ds8OqaCa.css +1 -0
  21. package/dist/web/assets/index-NR27JE3b.js +406 -0
  22. package/dist/web/index.html +2 -2
  23. package/package.json +1 -1
  24. package/dist/cli.d.ts +0 -3
  25. package/dist/cli.js.map +0 -1
  26. package/dist/commands/analytics.d.ts +0 -14
  27. package/dist/commands/analytics.js +0 -69
  28. package/dist/commands/analytics.js.map +0 -1
  29. package/dist/commands/audit.d.ts +0 -19
  30. package/dist/commands/audit.js +0 -144
  31. package/dist/commands/audit.js.map +0 -1
  32. package/dist/commands/board.d.ts +0 -9
  33. package/dist/commands/board.js +0 -702
  34. package/dist/commands/board.js.map +0 -1
  35. package/dist/commands/cancel.d.ts +0 -46
  36. package/dist/commands/cancel.js +0 -239
  37. package/dist/commands/cancel.js.map +0 -1
  38. package/dist/commands/cron.d.ts +0 -8
  39. package/dist/commands/cron.js +0 -134
  40. package/dist/commands/cron.js.map +0 -1
  41. package/dist/commands/dashboard/tab-actions.d.ts +0 -10
  42. package/dist/commands/dashboard/tab-actions.js +0 -247
  43. package/dist/commands/dashboard/tab-actions.js.map +0 -1
  44. package/dist/commands/dashboard/tab-config.d.ts +0 -21
  45. package/dist/commands/dashboard/tab-config.js +0 -874
  46. package/dist/commands/dashboard/tab-config.js.map +0 -1
  47. package/dist/commands/dashboard/tab-logs.d.ts +0 -10
  48. package/dist/commands/dashboard/tab-logs.js +0 -202
  49. package/dist/commands/dashboard/tab-logs.js.map +0 -1
  50. package/dist/commands/dashboard/tab-schedules.d.ts +0 -21
  51. package/dist/commands/dashboard/tab-schedules.js +0 -320
  52. package/dist/commands/dashboard/tab-schedules.js.map +0 -1
  53. package/dist/commands/dashboard/tab-status.d.ts +0 -32
  54. package/dist/commands/dashboard/tab-status.js +0 -424
  55. package/dist/commands/dashboard/tab-status.js.map +0 -1
  56. package/dist/commands/dashboard/types.d.ts +0 -42
  57. package/dist/commands/dashboard/types.js +0 -5
  58. package/dist/commands/dashboard/types.js.map +0 -1
  59. package/dist/commands/dashboard.d.ts +0 -11
  60. package/dist/commands/dashboard.js +0 -242
  61. package/dist/commands/dashboard.js.map +0 -1
  62. package/dist/commands/doctor.d.ts +0 -16
  63. package/dist/commands/doctor.js +0 -195
  64. package/dist/commands/doctor.js.map +0 -1
  65. package/dist/commands/history.d.ts +0 -7
  66. package/dist/commands/history.js +0 -49
  67. package/dist/commands/history.js.map +0 -1
  68. package/dist/commands/init.d.ts +0 -45
  69. package/dist/commands/install.d.ts +0 -65
  70. package/dist/commands/install.js +0 -405
  71. package/dist/commands/install.js.map +0 -1
  72. package/dist/commands/logs.d.ts +0 -15
  73. package/dist/commands/logs.js +0 -155
  74. package/dist/commands/logs.js.map +0 -1
  75. package/dist/commands/merge.d.ts +0 -26
  76. package/dist/commands/merge.js +0 -159
  77. package/dist/commands/merge.js.map +0 -1
  78. package/dist/commands/notify.d.ts +0 -7
  79. package/dist/commands/notify.js +0 -43
  80. package/dist/commands/notify.js.map +0 -1
  81. package/dist/commands/plan.d.ts +0 -19
  82. package/dist/commands/plan.js +0 -88
  83. package/dist/commands/plan.js.map +0 -1
  84. package/dist/commands/prd-state.d.ts +0 -12
  85. package/dist/commands/prd-state.js +0 -47
  86. package/dist/commands/prd-state.js.map +0 -1
  87. package/dist/commands/prd.d.ts +0 -18
  88. package/dist/commands/prd.js +0 -363
  89. package/dist/commands/prd.js.map +0 -1
  90. package/dist/commands/prds.d.ts +0 -13
  91. package/dist/commands/prds.js +0 -194
  92. package/dist/commands/prds.js.map +0 -1
  93. package/dist/commands/prs.d.ts +0 -14
  94. package/dist/commands/prs.js +0 -104
  95. package/dist/commands/prs.js.map +0 -1
  96. package/dist/commands/qa.d.ts +0 -34
  97. package/dist/commands/qa.js +0 -214
  98. package/dist/commands/qa.js.map +0 -1
  99. package/dist/commands/queue.d.ts +0 -8
  100. package/dist/commands/queue.js +0 -378
  101. package/dist/commands/queue.js.map +0 -1
  102. package/dist/commands/resolve.d.ts +0 -26
  103. package/dist/commands/resolve.js +0 -186
  104. package/dist/commands/resolve.js.map +0 -1
  105. package/dist/commands/retry.d.ts +0 -9
  106. package/dist/commands/retry.js +0 -71
  107. package/dist/commands/retry.js.map +0 -1
  108. package/dist/commands/review.d.ts +0 -82
  109. package/dist/commands/run.d.ts +0 -73
  110. package/dist/commands/serve.d.ts +0 -19
  111. package/dist/commands/serve.js +0 -142
  112. package/dist/commands/serve.js.map +0 -1
  113. package/dist/commands/shared/env-builder.d.ts +0 -49
  114. package/dist/commands/shared/env-builder.js +0 -151
  115. package/dist/commands/shared/env-builder.js.map +0 -1
  116. package/dist/commands/slice.d.ts +0 -35
  117. package/dist/commands/slice.js +0 -316
  118. package/dist/commands/slice.js.map +0 -1
  119. package/dist/commands/state.d.ts +0 -8
  120. package/dist/commands/state.js +0 -54
  121. package/dist/commands/state.js.map +0 -1
  122. package/dist/commands/status.d.ts +0 -14
  123. package/dist/commands/status.js +0 -297
  124. package/dist/commands/status.js.map +0 -1
  125. package/dist/commands/summary.d.ts +0 -14
  126. package/dist/commands/summary.js +0 -193
  127. package/dist/commands/summary.js.map +0 -1
  128. package/dist/commands/uninstall.d.ts +0 -25
  129. package/dist/commands/uninstall.js +0 -134
  130. package/dist/commands/uninstall.js.map +0 -1
  131. package/dist/commands/update.d.ts +0 -22
  132. package/dist/commands/update.js +0 -90
  133. package/dist/commands/update.js.map +0 -1
  134. package/dist/web/assets/index-BmRrWWHn.js +0 -406
  135. package/dist/web/assets/index-CgXj_KM1.css +0 -1
  136. package/dist/web/assets/index-Dr4zlyJf.js +0 -406
@@ -1,71 +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 { dim, info, loadConfig, success, error as uiError } from '@night-watch/core';
7
- /**
8
- * Normalize the PRD name to ensure it has .md extension
9
- */
10
- function normalizePrdName(name) {
11
- if (!name.endsWith('.md')) {
12
- return `${name}.md`;
13
- }
14
- return name;
15
- }
16
- /**
17
- * Get list of PRD files in the done directory
18
- */
19
- function getDonePrds(doneDir) {
20
- if (!fs.existsSync(doneDir)) {
21
- return [];
22
- }
23
- return fs.readdirSync(doneDir).filter((f) => f.endsWith('.md'));
24
- }
25
- /**
26
- * Register the retry command with the program
27
- */
28
- export function retryCommand(program) {
29
- program
30
- .command('retry <prdName>')
31
- .description('Move a completed PRD from done/ back to pending')
32
- .action((prdName) => {
33
- const projectDir = process.cwd();
34
- const config = loadConfig(projectDir);
35
- const prdDir = path.join(projectDir, config.prdDir);
36
- const doneDir = path.join(prdDir, 'done');
37
- // Normalize the PRD name
38
- const normalizedPrdName = normalizePrdName(prdName);
39
- // Check if PRD is already pending (exists in prdDir root)
40
- const pendingPath = path.join(prdDir, normalizedPrdName);
41
- if (fs.existsSync(pendingPath)) {
42
- info(`"${normalizedPrdName}" is already pending, nothing to retry.`);
43
- return;
44
- }
45
- // Check if PRD exists in done directory
46
- const donePath = path.join(doneDir, normalizedPrdName);
47
- if (fs.existsSync(donePath)) {
48
- // Move from done to pending
49
- fs.renameSync(donePath, pendingPath);
50
- success(`Moved "${normalizedPrdName}" back to pending.`);
51
- dim(`From: ${donePath}`);
52
- dim(`To: ${pendingPath}`);
53
- return;
54
- }
55
- // PRD not found anywhere
56
- uiError(`PRD "${normalizedPrdName}" not found.`);
57
- // List available PRDs in done directory
58
- const donePrds = getDonePrds(doneDir);
59
- if (donePrds.length > 0) {
60
- info(`Available PRDs in done/:`);
61
- for (const prd of donePrds) {
62
- dim(` - ${prd}`);
63
- }
64
- }
65
- else {
66
- info('No PRDs found in done/ directory.');
67
- }
68
- process.exit(1);
69
- });
70
- }
71
- //# sourceMappingURL=retry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/commands/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAErF;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,CAAC,OAAe,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE1C,yBAAyB;QACzB,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEpD,0DAA0D;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACzD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,iBAAiB,yCAAyC,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,4BAA4B;YAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACrC,OAAO,CAAC,UAAU,iBAAiB,oBAAoB,CAAC,CAAC;YACzD,GAAG,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;YACzB,GAAG,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,OAAO,CAAC,QAAQ,iBAAiB,cAAc,CAAC,CAAC;QAEjD,wCAAwC;QACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,82 +0,0 @@
1
- /**
2
- * Review command - executes the PR reviewer cron script
3
- */
4
- import { Command } from 'commander';
5
- import { INightWatchConfig } from '@night-watch/core';
6
- /**
7
- * Options for the review command
8
- */
9
- export interface IReviewOptions {
10
- dryRun: boolean;
11
- timeout?: string;
12
- provider?: string;
13
- }
14
- /**
15
- * Review notifications should not fire for script-level skip/no-op outcomes.
16
- */
17
- export declare function shouldSendReviewNotification(scriptStatus?: string): boolean;
18
- /**
19
- * Review completion notifications are only valid for successful reviewer runs.
20
- * Guard against both non-zero exits and mismatched legacy status markers.
21
- */
22
- export declare function shouldSendReviewCompletionNotification(exitCode: number, scriptStatus?: string): boolean;
23
- /**
24
- * Parse comma-separated PR numbers like "#12,#34" into numeric IDs.
25
- */
26
- export declare function parseAutoMergedPrNumbers(raw?: string): number[];
27
- /**
28
- * Parse comma-separated PR numbers like "#12,#34" into numeric IDs.
29
- * Deduplicates while preserving order.
30
- */
31
- export declare function parseReviewedPrNumbers(raw?: string): number[];
32
- /**
33
- * Build per-PR review notification targets from the script result payload.
34
- * Legacy no_changes_needed is only trustworthy when exactly one PR was reviewed.
35
- */
36
- export declare function buildReviewNotificationTargets(reviewedPrNumbers: number[], noChangesPrNumbers: number[], legacyNoChangesNeeded?: boolean): Array<{
37
- prNumber: number;
38
- noChangesNeeded: boolean;
39
- }>;
40
- /**
41
- * Parse retry attempts from script result data.
42
- * Returns the number of attempts (defaults to 1 if not present or invalid).
43
- */
44
- export declare function parseRetryAttempts(raw?: string): number;
45
- /**
46
- * Parse final review score from script result data.
47
- * Returns undefined when missing or invalid.
48
- */
49
- export declare function parseFinalReviewScore(raw?: string): number | undefined;
50
- /**
51
- * Post a "ready for human review" comment and add a label to the PR.
52
- * Silently ignores failures — gh CLI may not be available.
53
- */
54
- export declare function postReadyForHumanReviewComment(prNumber: number, finalScore: number | undefined, cwd: string): void;
55
- /**
56
- * Build environment variables map from config and CLI options for reviewer
57
- */
58
- export declare function buildEnvVars(config: INightWatchConfig, options: IReviewOptions): Record<string, string>;
59
- /**
60
- * Apply CLI flag overrides to the config for reviewer
61
- */
62
- export declare function applyCliOverrides(config: INightWatchConfig, options: IReviewOptions): INightWatchConfig;
63
- interface ICheckStatus {
64
- name?: string;
65
- bucket?: string;
66
- state?: string;
67
- conclusion?: string;
68
- }
69
- /**
70
- * Whether a GitHub check entry should be treated as failing/action-required.
71
- */
72
- export declare function isFailingCheck(check: ICheckStatus): boolean;
73
- /**
74
- * Get a human-readable list of failing checks for a PR.
75
- */
76
- export declare function getPrFailingChecks(prNumber: number): string[];
77
- /**
78
- * Register the review command with the program
79
- */
80
- export declare function reviewCommand(program: Command): void;
81
- export {};
82
- //# sourceMappingURL=review.d.ts.map
@@ -1,73 +0,0 @@
1
- /**
2
- * Run command - executes the PRD cron script
3
- */
4
- import { Command } from 'commander';
5
- import { INightWatchConfig, NotificationEvent } from '@night-watch/core';
6
- /**
7
- * Options for the run command
8
- */
9
- export interface IRunOptions {
10
- dryRun: boolean;
11
- timeout?: string;
12
- provider?: string;
13
- crossProjectFallback?: boolean;
14
- }
15
- /**
16
- * Map executor exit/result state to a notification event.
17
- * Returns null when the run completed with no actionable work (skip/no-op).
18
- */
19
- export declare function resolveRunNotificationEvent(exitCode: number, scriptStatus?: string): NotificationEvent | null;
20
- /**
21
- * Determine if cross-project fallback should run for this executor result.
22
- */
23
- export declare function shouldAttemptCrossProjectFallback(options: IRunOptions, scriptStatus?: string): boolean;
24
- /**
25
- * Resolve valid registered projects excluding the current project.
26
- */
27
- export declare function getCrossProjectFallbackCandidates(currentProjectDir: string): Array<{
28
- name: string;
29
- path: string;
30
- }>;
31
- /**
32
- * Return Telegram webhooks that opted in to rate-limit fallback notifications.
33
- */
34
- export declare function getRateLimitFallbackTelegramWebhooks(config: INightWatchConfig): Array<{
35
- botToken: string;
36
- chatId: string;
37
- }>;
38
- /**
39
- * Whether the bash execution reported a rate-limit fallback trigger.
40
- */
41
- export declare function isRateLimitFallbackTriggered(resultData?: Record<string, string>): boolean;
42
- /**
43
- * Build environment variables map from config and CLI options
44
- */
45
- export declare function buildEnvVars(config: INightWatchConfig, options: IRunOptions): Record<string, string>;
46
- /**
47
- * Apply CLI flag overrides to the config
48
- */
49
- export declare function applyCliOverrides(config: INightWatchConfig, options: IRunOptions): INightWatchConfig;
50
- /**
51
- * Information about a scanned PRD file, including claim status
52
- */
53
- export interface IPrdScanItem {
54
- name: string;
55
- claimed: boolean;
56
- claimInfo: {
57
- hostname: string;
58
- pid: number;
59
- timestamp: number;
60
- } | null;
61
- }
62
- /**
63
- * Scan the PRD directory for eligible PRD files
64
- */
65
- export declare function scanPrdDirectory(projectDir: string, prdDir: string, maxRuntime: number): {
66
- pending: IPrdScanItem[];
67
- completed: string[];
68
- };
69
- /**
70
- * Register the run command with the program
71
- */
72
- export declare function runCommand(program: Command): void;
73
- //# sourceMappingURL=run.d.ts.map
@@ -1,19 +0,0 @@
1
- /**
2
- * Serve command for Night Watch CLI
3
- * Starts the HTTP API server for the Web UI
4
- */
5
- import { Command } from 'commander';
6
- type TServeMode = 'global' | 'local';
7
- interface IServeLockResult {
8
- acquired: boolean;
9
- lockPath: string;
10
- existingPid?: number;
11
- stalePidCleaned?: number;
12
- message?: string;
13
- }
14
- export declare function getServeLockPath(mode: TServeMode, port: number): string;
15
- export declare function acquireServeLock(mode: TServeMode, port: number): IServeLockResult;
16
- export declare function releaseServeLock(lockPath: string): void;
17
- export declare function serveCommand(program: Command): void;
18
- export {};
19
- //# sourceMappingURL=serve.d.ts.map
@@ -1,142 +0,0 @@
1
- /**
2
- * Serve command for Night Watch CLI
3
- * Starts the HTTP API server for the Web UI
4
- */
5
- import * as fs from 'fs';
6
- import { LOCK_FILE_PREFIX } from '@night-watch/core';
7
- import { startGlobalServer, startServer } from '@night-watch/server';
8
- export function getServeLockPath(mode, port) {
9
- return `${LOCK_FILE_PREFIX}serve-${mode}-${port}.lock`;
10
- }
11
- function isProcessRunning(pid) {
12
- try {
13
- process.kill(pid, 0);
14
- return true;
15
- }
16
- catch {
17
- return false;
18
- }
19
- }
20
- function readPid(lockPath) {
21
- try {
22
- if (!fs.existsSync(lockPath))
23
- return null;
24
- const raw = fs.readFileSync(lockPath, 'utf-8').trim();
25
- const pid = parseInt(raw, 10);
26
- return Number.isFinite(pid) ? pid : null;
27
- }
28
- catch {
29
- return null;
30
- }
31
- }
32
- export function acquireServeLock(mode, port) {
33
- const lockPath = getServeLockPath(mode, port);
34
- let stalePidCleaned;
35
- // Two attempts: second after stale lock cleanup.
36
- for (let attempt = 0; attempt < 2; attempt++) {
37
- try {
38
- const fd = fs.openSync(lockPath, 'wx');
39
- fs.writeFileSync(fd, `${process.pid}\n`);
40
- fs.closeSync(fd);
41
- return { acquired: true, lockPath, stalePidCleaned };
42
- }
43
- catch (error) {
44
- const err = error;
45
- if (err.code !== 'EEXIST') {
46
- return {
47
- acquired: false,
48
- lockPath,
49
- message: err.message,
50
- };
51
- }
52
- const existingPid = readPid(lockPath);
53
- if (existingPid && isProcessRunning(existingPid)) {
54
- return {
55
- acquired: false,
56
- lockPath,
57
- existingPid,
58
- message: `already running with PID ${existingPid}`,
59
- };
60
- }
61
- try {
62
- fs.unlinkSync(lockPath);
63
- if (existingPid) {
64
- stalePidCleaned = existingPid;
65
- }
66
- }
67
- catch (unlinkError) {
68
- const unlinkErr = unlinkError;
69
- return {
70
- acquired: false,
71
- lockPath,
72
- existingPid: existingPid ?? undefined,
73
- message: `stale lock exists but could not be removed: ${unlinkErr.message}`,
74
- };
75
- }
76
- }
77
- }
78
- return {
79
- acquired: false,
80
- lockPath,
81
- message: 'failed to acquire serve lock',
82
- };
83
- }
84
- export function releaseServeLock(lockPath) {
85
- try {
86
- if (!fs.existsSync(lockPath))
87
- return;
88
- const lockPid = readPid(lockPath);
89
- // Only remove lock if it belongs to this process or lock pid is unreadable.
90
- if (lockPid !== null && lockPid !== process.pid)
91
- return;
92
- fs.unlinkSync(lockPath);
93
- }
94
- catch {
95
- // Best-effort cleanup only.
96
- }
97
- }
98
- export function serveCommand(program) {
99
- program
100
- .command('serve')
101
- .description('Start the Night Watch web UI server')
102
- .option('-p, --port <number>', 'Port to run the server on', '7575')
103
- .option('-g, --global', 'Start in global mode (manage all registered projects)')
104
- .action((options) => {
105
- const port = parseInt(options.port, 10);
106
- if (isNaN(port) || port < 1 || port > 65535) {
107
- console.error(`Invalid port: ${options.port}. Port must be between 1 and 65535.`);
108
- process.exit(1);
109
- }
110
- const mode = options.global ? 'global' : 'local';
111
- const lock = acquireServeLock(mode, port);
112
- if (!lock.acquired) {
113
- const pidPart = lock.existingPid ? ` (PID ${lock.existingPid})` : '';
114
- const detail = lock.message ? `: ${lock.message}` : '';
115
- console.error(`[serve] Another Night Watch ${mode} server is already running on port ${port}${pidPart}${detail}`);
116
- console.error('[serve] Stop the existing process first, or use --port with a different value.');
117
- process.exit(1);
118
- }
119
- if (lock.stalePidCleaned) {
120
- console.warn(`[serve] cleaned stale lock from PID ${lock.stalePidCleaned} (${lock.lockPath})`);
121
- }
122
- console.log(`[serve] lock acquired ${lock.lockPath} pid=${process.pid}`);
123
- process.on('exit', () => {
124
- releaseServeLock(lock.lockPath);
125
- });
126
- if (options.global) {
127
- const execArgv = process.execArgv.length > 0 ? process.execArgv.join(' ') : '(none)';
128
- console.log(`[serve] mode=global port=${port} pid=${process.pid} node=${process.version}`);
129
- console.log(`[serve] execPath=${process.execPath}`);
130
- console.log(`[serve] execArgv=${execArgv}`);
131
- console.log(`[serve] argv=${process.argv.join(' ')}`);
132
- }
133
- if (options.global) {
134
- startGlobalServer(port);
135
- }
136
- else {
137
- const projectDir = process.cwd();
138
- startServer(projectDir, port);
139
- }
140
- });
141
- }
142
- //# sourceMappingURL=serve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- /**
2
- * Shared environment variable building utilities for Night Watch CLI commands.
3
- * Extracts common logic for building base env vars and Telegram webhook extraction.
4
- */
5
- import { INightWatchConfig, IQueueEntry, getSchedulingPlan } from '@night-watch/core';
6
- import type { JobType } from '@night-watch/core';
7
- /**
8
- * Build the base environment variables shared by all job types.
9
- * Sets provider, queue, execution-context, and optional dry-run/default-branch env vars.
10
- *
11
- * Provider env vars (from preset):
12
- * - NW_PROVIDER_CMD: the CLI binary for the resolved provider
13
- * - NW_PROVIDER_SUBCOMMAND: optional subcommand (e.g. "exec" for codex)
14
- * - NW_PROVIDER_PROMPT_FLAG: flag for passing the prompt (e.g. "-p")
15
- * - NW_PROVIDER_APPROVE_FLAG: flag for auto-approve mode
16
- * - NW_PROVIDER_WORKDIR_FLAG: flag for working directory
17
- * - NW_PROVIDER_MODEL_FLAG: flag for model selection
18
- * - NW_PROVIDER_MODEL: model value to use
19
- * - NW_PROVIDER_LABEL: human-friendly provider name for PR/comment attribution
20
- *
21
- * Other env vars:
22
- * - NW_DEFAULT_BRANCH: optional default branch
23
- * - providerEnv: merged into env (preset.envVars takes precedence)
24
- * - NW_QUEUE_*: queue configuration for bash scripts
25
- * - NW_DRY_RUN: '1' when isDryRun is true
26
- * - NW_EXECUTION_CONTEXT: always 'agent'
27
- */
28
- export declare function buildBaseEnvVars(config: INightWatchConfig, jobType: JobType, isDryRun: boolean): Record<string, string>;
29
- export declare function getCronSchedulingPlan(config: INightWatchConfig, jobType: JobType, projectDir: string): import("@night-watch/core").ISchedulingPlan;
30
- export declare function maybeApplyCronSchedulingDelay(config: INightWatchConfig, jobType: JobType, projectDir: string): Promise<ReturnType<typeof getSchedulingPlan>>;
31
- /**
32
- * Format provider display for notifications/UI using command + label.
33
- */
34
- export declare function formatProviderDisplay(providerCmd?: string, providerLabel?: string): string;
35
- /**
36
- * Rebuild environment variables for a queued job from the job's own project config.
37
- * This ensures provider-specific env (ANTHROPIC_BASE_URL, API keys, model ids)
38
- * always comes from the queued job's own project config, not the dispatcher process env.
39
- */
40
- export declare function buildQueuedJobEnv(entry: IQueueEntry): Record<string, string>;
41
- /**
42
- * Extract Telegram webhooks that have both botToken and chatId configured.
43
- * Used for status messages from bash scripts (start/progress/final status).
44
- */
45
- export declare function getTelegramStatusWebhooks(config: INightWatchConfig): Array<{
46
- botToken: string;
47
- chatId: string;
48
- }>;
49
- //# sourceMappingURL=env-builder.d.ts.map
@@ -1,151 +0,0 @@
1
- /**
2
- * Shared environment variable building utilities for Night Watch CLI commands.
3
- * Extracts common logic for building base env vars and Telegram webhook extraction.
4
- */
5
- import { DEFAULT_QUEUE, getSchedulingPlan, loadConfig, resolveJobProvider, resolvePreset, resolveProviderBucketKey, } from '@night-watch/core';
6
- /**
7
- * Derive a human-friendly provider label for display in PR bodies, comments, and commits.
8
- * Uses the preset's name field as the primary source, falls back to config.providerLabel
9
- * for backward compat, then auto-derives from provider/env.
10
- */
11
- function deriveProviderLabel(config, preset) {
12
- // Primary: use preset name
13
- if (preset.name)
14
- return preset.name;
15
- // Backward compat: use deprecated providerLabel
16
- if (config.providerLabel)
17
- return config.providerLabel;
18
- // Fallback: derive from command
19
- if (preset.command === 'codex')
20
- return 'Codex';
21
- // claude provider: check if a proxy base URL is configured
22
- if (config.providerEnv?.ANTHROPIC_BASE_URL)
23
- return 'Claude (proxy)';
24
- return 'Claude';
25
- }
26
- /**
27
- * Build the base environment variables shared by all job types.
28
- * Sets provider, queue, execution-context, and optional dry-run/default-branch env vars.
29
- *
30
- * Provider env vars (from preset):
31
- * - NW_PROVIDER_CMD: the CLI binary for the resolved provider
32
- * - NW_PROVIDER_SUBCOMMAND: optional subcommand (e.g. "exec" for codex)
33
- * - NW_PROVIDER_PROMPT_FLAG: flag for passing the prompt (e.g. "-p")
34
- * - NW_PROVIDER_APPROVE_FLAG: flag for auto-approve mode
35
- * - NW_PROVIDER_WORKDIR_FLAG: flag for working directory
36
- * - NW_PROVIDER_MODEL_FLAG: flag for model selection
37
- * - NW_PROVIDER_MODEL: model value to use
38
- * - NW_PROVIDER_LABEL: human-friendly provider name for PR/comment attribution
39
- *
40
- * Other env vars:
41
- * - NW_DEFAULT_BRANCH: optional default branch
42
- * - providerEnv: merged into env (preset.envVars takes precedence)
43
- * - NW_QUEUE_*: queue configuration for bash scripts
44
- * - NW_DRY_RUN: '1' when isDryRun is true
45
- * - NW_EXECUTION_CONTEXT: always 'agent'
46
- */
47
- export function buildBaseEnvVars(config, jobType, isDryRun) {
48
- const env = {};
49
- // Resolve the preset for this job type
50
- const presetId = resolveJobProvider(config, jobType);
51
- const preset = resolvePreset(config, presetId);
52
- // Provider command - the actual CLI binary to call
53
- env.NW_PROVIDER_CMD = preset.command;
54
- // Provider subcommand (e.g. "exec" for codex)
55
- env.NW_PROVIDER_SUBCOMMAND = preset.subcommand ?? '';
56
- // Provider flags (empty string if not set)
57
- env.NW_PROVIDER_PROMPT_FLAG = preset.promptFlag ?? '';
58
- env.NW_PROVIDER_APPROVE_FLAG = preset.autoApproveFlag ?? '';
59
- env.NW_PROVIDER_WORKDIR_FLAG = preset.workdirFlag ?? '';
60
- env.NW_PROVIDER_MODEL_FLAG = preset.modelFlag ?? '';
61
- // Provider model (empty string if not set)
62
- env.NW_PROVIDER_MODEL = preset.model ?? '';
63
- // Human-friendly provider label for attribution in PRs, comments, commits
64
- env.NW_PROVIDER_LABEL = deriveProviderLabel(config, preset);
65
- // Provider bucket key for per-bucket concurrency tracking
66
- // Build the effective providerEnv for bucket key resolution:
67
- // start with config.providerEnv (backward compat) then overlay preset.envVars
68
- const effectiveProviderEnv = {
69
- ...(config.providerEnv ?? {}),
70
- ...(preset.envVars ?? {}),
71
- };
72
- env.NW_PROVIDER_KEY = resolveProviderBucketKey(preset.command, effectiveProviderEnv);
73
- // Default branch (empty = auto-detect in bash script)
74
- if (config.defaultBranch) {
75
- env.NW_DEFAULT_BRANCH = config.defaultBranch;
76
- }
77
- env.NW_GIT_PUSH_NO_VERIFY = config.gitPushNoVerify ? '1' : '0';
78
- // Provider environment variables (API keys, base URLs, etc.)
79
- // First apply config.providerEnv for backward compat
80
- if (config.providerEnv) {
81
- Object.assign(env, config.providerEnv);
82
- }
83
- // Then apply preset.envVars (takes precedence over config.providerEnv)
84
- if (preset.envVars) {
85
- Object.assign(env, preset.envVars);
86
- }
87
- // Queue configuration
88
- const queueConfig = config.queue ?? DEFAULT_QUEUE;
89
- env.NW_QUEUE_ENABLED = queueConfig.enabled ? '1' : '0';
90
- env.NW_QUEUE_MAX_CONCURRENCY = String(queueConfig.maxConcurrency);
91
- env.NW_QUEUE_MAX_WAIT_TIME = String(queueConfig.maxWaitTime);
92
- env.NW_QUEUE_PRIORITY_JSON = JSON.stringify(queueConfig.priority);
93
- env.NW_SCHEDULING_PRIORITY = String(config.schedulingPriority ?? 3);
94
- // Dry run flag
95
- if (isDryRun) {
96
- env.NW_DRY_RUN = '1';
97
- }
98
- // Sandbox flag - prevents the agent from modifying crontab during execution
99
- env.NW_EXECUTION_CONTEXT = 'agent';
100
- return env;
101
- }
102
- export function getCronSchedulingPlan(config, jobType, projectDir) {
103
- return getSchedulingPlan(projectDir, config, jobType);
104
- }
105
- export async function maybeApplyCronSchedulingDelay(config, jobType, projectDir) {
106
- const plan = getSchedulingPlan(projectDir, config, jobType);
107
- if (process.env.NW_CRON_TRIGGER !== '1' || process.env.NW_QUEUE_DISPATCHED === '1') {
108
- return plan;
109
- }
110
- if (plan.totalDelayMinutes > 0) {
111
- await new Promise((resolve) => setTimeout(resolve, plan.totalDelayMinutes * 60_000));
112
- }
113
- return getSchedulingPlan(projectDir, config, jobType);
114
- }
115
- /**
116
- * Format provider display for notifications/UI using command + label.
117
- */
118
- export function formatProviderDisplay(providerCmd, providerLabel) {
119
- const cmd = providerCmd?.trim();
120
- if (!cmd)
121
- return 'unknown';
122
- const label = providerLabel?.trim();
123
- if (!label)
124
- return cmd;
125
- if (label.toLowerCase() === cmd.toLowerCase())
126
- return cmd;
127
- return `${cmd} (${label})`;
128
- }
129
- /**
130
- * Rebuild environment variables for a queued job from the job's own project config.
131
- * This ensures provider-specific env (ANTHROPIC_BASE_URL, API keys, model ids)
132
- * always comes from the queued job's own project config, not the dispatcher process env.
133
- */
134
- export function buildQueuedJobEnv(entry) {
135
- const config = loadConfig(entry.projectPath);
136
- return buildBaseEnvVars(config, entry.jobType, false);
137
- }
138
- /**
139
- * Extract Telegram webhooks that have both botToken and chatId configured.
140
- * Used for status messages from bash scripts (start/progress/final status).
141
- */
142
- export function getTelegramStatusWebhooks(config) {
143
- return (config.notifications?.webhooks ?? [])
144
- .filter((wh) => wh.type === 'telegram' &&
145
- typeof wh.botToken === 'string' &&
146
- wh.botToken.trim().length > 0 &&
147
- typeof wh.chatId === 'string' &&
148
- wh.chatId.trim().length > 0)
149
- .map((wh) => ({ botToken: wh.botToken, chatId: wh.chatId }));
150
- }
151
- //# sourceMappingURL=env-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-builder.js","sourceRoot":"","sources":["../../../src/commands/shared/env-builder.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Slice command - executes the roadmap slicer to create PRDs from roadmap items
3
- */
4
- import { Command } from 'commander';
5
- import { INightWatchConfig } from '@night-watch/core';
6
- import type { ISliceResult } from '@night-watch/core';
7
- /**
8
- * Options for the slice command
9
- */
10
- export interface ISliceOptions {
11
- dryRun: boolean;
12
- timeout?: string;
13
- provider?: string;
14
- }
15
- export interface IPlannerIssueCreationResult {
16
- created: boolean;
17
- skippedReason?: string;
18
- issueNumber?: number;
19
- issueUrl?: string;
20
- }
21
- export declare function buildPlannerIssueBody(projectDir: string, config: INightWatchConfig, result: ISliceResult): string;
22
- export declare function createPlannerIssue(projectDir: string, config: INightWatchConfig, result: ISliceResult): Promise<IPlannerIssueCreationResult>;
23
- /**
24
- * Build environment variables map from config and CLI options for slicer
25
- */
26
- export declare function buildEnvVars(config: INightWatchConfig, options: ISliceOptions): Record<string, string>;
27
- /**
28
- * Apply CLI flag overrides to the config for slicer
29
- */
30
- export declare function applyCliOverrides(config: INightWatchConfig, options: ISliceOptions): INightWatchConfig;
31
- /**
32
- * Register the slice command with the program
33
- */
34
- export declare function sliceCommand(program: Command): void;
35
- //# sourceMappingURL=slice.d.ts.map