@jonit-dev/night-watch-cli 1.8.10-beta.2 → 1.8.10-beta.4
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/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +957 -1906
- package/dist/cli.js.map +1 -0
- package/dist/commands/analytics.d.ts +14 -0
- package/dist/commands/analytics.d.ts.map +1 -0
- package/dist/commands/analytics.js +69 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/audit.d.ts +19 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +144 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/board.d.ts +9 -0
- package/dist/commands/board.d.ts.map +1 -0
- package/dist/commands/board.js +702 -0
- package/dist/commands/board.js.map +1 -0
- package/dist/commands/cancel.d.ts +46 -0
- package/dist/commands/cancel.d.ts.map +1 -0
- package/dist/commands/cancel.js +239 -0
- package/dist/commands/cancel.js.map +1 -0
- package/dist/commands/cron.d.ts +8 -0
- package/dist/commands/cron.d.ts.map +1 -0
- package/dist/commands/cron.js +134 -0
- package/dist/commands/cron.js.map +1 -0
- package/dist/commands/dashboard/tab-actions.d.ts +10 -0
- package/dist/commands/dashboard/tab-actions.d.ts.map +1 -0
- package/dist/commands/dashboard/tab-actions.js +247 -0
- package/dist/commands/dashboard/tab-actions.js.map +1 -0
- package/dist/commands/dashboard/tab-config.d.ts +21 -0
- package/dist/commands/dashboard/tab-config.d.ts.map +1 -0
- package/dist/commands/dashboard/tab-config.js +873 -0
- package/dist/commands/dashboard/tab-config.js.map +1 -0
- package/dist/commands/dashboard/tab-logs.d.ts +10 -0
- package/dist/commands/dashboard/tab-logs.d.ts.map +1 -0
- package/dist/commands/dashboard/tab-logs.js +202 -0
- package/dist/commands/dashboard/tab-logs.js.map +1 -0
- package/dist/commands/dashboard/tab-schedules.d.ts +21 -0
- package/dist/commands/dashboard/tab-schedules.d.ts.map +1 -0
- package/dist/commands/dashboard/tab-schedules.js +320 -0
- package/dist/commands/dashboard/tab-schedules.js.map +1 -0
- package/dist/commands/dashboard/tab-status.d.ts +32 -0
- package/dist/commands/dashboard/tab-status.d.ts.map +1 -0
- package/dist/commands/dashboard/tab-status.js +424 -0
- package/dist/commands/dashboard/tab-status.js.map +1 -0
- package/dist/commands/dashboard/types.d.ts +42 -0
- package/dist/commands/dashboard/types.d.ts.map +1 -0
- package/dist/commands/dashboard/types.js +5 -0
- package/dist/commands/dashboard/types.js.map +1 -0
- package/dist/commands/dashboard.d.ts +11 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +242 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doctor.d.ts +16 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +195 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/history.d.ts +7 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +49 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +45 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +777 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +65 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +405 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/logs.d.ts +15 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +155 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/merge.d.ts +26 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.js +159 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/notify.d.ts +7 -0
- package/dist/commands/notify.d.ts.map +1 -0
- package/dist/commands/notify.js +43 -0
- package/dist/commands/notify.js.map +1 -0
- package/dist/commands/plan.d.ts +19 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +88 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/prd-state.d.ts +12 -0
- package/dist/commands/prd-state.d.ts.map +1 -0
- package/dist/commands/prd-state.js +47 -0
- package/dist/commands/prd-state.js.map +1 -0
- package/dist/commands/prd.d.ts +18 -0
- package/dist/commands/prd.d.ts.map +1 -0
- package/dist/commands/prd.js +363 -0
- package/dist/commands/prd.js.map +1 -0
- package/dist/commands/prds.d.ts +13 -0
- package/dist/commands/prds.d.ts.map +1 -0
- package/dist/commands/prds.js +194 -0
- package/dist/commands/prds.js.map +1 -0
- package/dist/commands/prs.d.ts +14 -0
- package/dist/commands/prs.d.ts.map +1 -0
- package/dist/commands/prs.js +104 -0
- package/dist/commands/prs.js.map +1 -0
- package/dist/commands/qa.d.ts +34 -0
- package/dist/commands/qa.d.ts.map +1 -0
- package/dist/commands/qa.js +214 -0
- package/dist/commands/qa.js.map +1 -0
- package/dist/commands/queue.d.ts +8 -0
- package/dist/commands/queue.d.ts.map +1 -0
- package/dist/commands/queue.js +378 -0
- package/dist/commands/queue.js.map +1 -0
- package/dist/commands/resolve.d.ts +26 -0
- package/dist/commands/resolve.d.ts.map +1 -0
- package/dist/commands/resolve.js +186 -0
- package/dist/commands/resolve.js.map +1 -0
- package/dist/commands/retry.d.ts +9 -0
- package/dist/commands/retry.d.ts.map +1 -0
- package/dist/commands/retry.js +71 -0
- package/dist/commands/retry.js.map +1 -0
- package/dist/commands/review.d.ts +82 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +479 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/run.d.ts +73 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +509 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/serve.d.ts +19 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +142 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/shared/env-builder.d.ts +49 -0
- package/dist/commands/shared/env-builder.d.ts.map +1 -0
- package/dist/commands/shared/env-builder.js +150 -0
- package/dist/commands/shared/env-builder.js.map +1 -0
- package/dist/commands/slice.d.ts +35 -0
- package/dist/commands/slice.d.ts.map +1 -0
- package/dist/commands/slice.js +316 -0
- package/dist/commands/slice.js.map +1 -0
- package/dist/commands/state.d.ts +8 -0
- package/dist/commands/state.d.ts.map +1 -0
- package/dist/commands/state.js +54 -0
- package/dist/commands/state.js.map +1 -0
- package/dist/commands/status.d.ts +14 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +297 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/summary.d.ts +14 -0
- package/dist/commands/summary.d.ts.map +1 -0
- package/dist/commands/summary.js +193 -0
- package/dist/commands/summary.js.map +1 -0
- package/dist/commands/uninstall.d.ts +25 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +134 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +22 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +90 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/scripts/night-watch-cron.sh +1 -3
- package/dist/scripts/night-watch-helpers.sh +52 -7
- package/dist/scripts/night-watch-merger-cron.sh +1 -1
- package/dist/scripts/night-watch-plan-cron.sh +1 -1
- package/dist/scripts/night-watch-slicer-cron.sh +1 -1
- package/dist/web/assets/index-CgXj_KM1.css +1 -0
- package/dist/web/assets/index-Dr4zlyJf.js +406 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/index-BUgI2S1s.js +0 -406
- package/dist/web/assets/index-CkdLFBd7.js +0 -406
- package/dist/web/assets/index-RMfswANB.css +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,KAAK,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErC,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvE;AAsBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAqDjF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAYvD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoDnD"}
|
|
@@ -0,0 +1,142 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAYrE,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,IAAY;IAC7D,OAAO,GAAG,gBAAgB,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,QAAgB;IAC/B,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,IAAY;IAC7D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,eAAmC,CAAC;IAExC,iDAAiD;IACjD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACvC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACjB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAA8B,CAAC;YAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,WAAW,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjD,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,WAAW;oBACX,OAAO,EAAE,4BAA4B,WAAW,EAAE;iBACnD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACxB,IAAI,WAAW,EAAE,CAAC;oBAChB,eAAe,GAAG,WAAW,CAAC;gBAChC,CAAC;YACH,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,WAAoC,CAAC;gBACvD,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,QAAQ;oBACR,WAAW,EAAE,WAAW,IAAI,SAAS;oBACrC,OAAO,EAAE,+CAA+C,SAAS,CAAC,OAAO,EAAE;iBAC5E,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,QAAQ;QACR,OAAO,EAAE,8BAA8B;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO;QAErC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,4EAA4E;QAC5E,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG;YAAE,OAAO;QAExD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SAClE,MAAM,CAAC,cAAc,EAAE,uDAAuD,CAAC;SAC/E,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,IAAI,qCAAqC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAe,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CACX,+BAA+B,IAAI,sCAAsC,IAAI,GAAG,OAAO,GAAG,MAAM,EAAE,CACnG,CAAC;YACF,OAAO,CAAC,KAAK,CACX,gFAAgF,CACjF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CACV,uCAAuC,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,QAAQ,GAAG,CACjF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,QAAQ,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,QAAQ,OAAO,CAAC,GAAG,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YACjC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-builder.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/env-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,iBAAiB,EAEjB,WAAW,EAEX,iBAAiB,EAKlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AAmB3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,GAChB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkExB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,+CAGnB;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAY/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAO1F;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG5E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,GACxB,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAW7C"}
|
|
@@ -0,0 +1,150 @@
|
|
|
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
|
+
// Provider environment variables (API keys, base URLs, etc.)
|
|
78
|
+
// First apply config.providerEnv for backward compat
|
|
79
|
+
if (config.providerEnv) {
|
|
80
|
+
Object.assign(env, config.providerEnv);
|
|
81
|
+
}
|
|
82
|
+
// Then apply preset.envVars (takes precedence over config.providerEnv)
|
|
83
|
+
if (preset.envVars) {
|
|
84
|
+
Object.assign(env, preset.envVars);
|
|
85
|
+
}
|
|
86
|
+
// Queue configuration
|
|
87
|
+
const queueConfig = config.queue ?? DEFAULT_QUEUE;
|
|
88
|
+
env.NW_QUEUE_ENABLED = queueConfig.enabled ? '1' : '0';
|
|
89
|
+
env.NW_QUEUE_MAX_CONCURRENCY = String(queueConfig.maxConcurrency);
|
|
90
|
+
env.NW_QUEUE_MAX_WAIT_TIME = String(queueConfig.maxWaitTime);
|
|
91
|
+
env.NW_QUEUE_PRIORITY_JSON = JSON.stringify(queueConfig.priority);
|
|
92
|
+
env.NW_SCHEDULING_PRIORITY = String(config.schedulingPriority ?? 3);
|
|
93
|
+
// Dry run flag
|
|
94
|
+
if (isDryRun) {
|
|
95
|
+
env.NW_DRY_RUN = '1';
|
|
96
|
+
}
|
|
97
|
+
// Sandbox flag - prevents the agent from modifying crontab during execution
|
|
98
|
+
env.NW_EXECUTION_CONTEXT = 'agent';
|
|
99
|
+
return env;
|
|
100
|
+
}
|
|
101
|
+
export function getCronSchedulingPlan(config, jobType, projectDir) {
|
|
102
|
+
return getSchedulingPlan(projectDir, config, jobType);
|
|
103
|
+
}
|
|
104
|
+
export async function maybeApplyCronSchedulingDelay(config, jobType, projectDir) {
|
|
105
|
+
const plan = getSchedulingPlan(projectDir, config, jobType);
|
|
106
|
+
if (process.env.NW_CRON_TRIGGER !== '1' || process.env.NW_QUEUE_DISPATCHED === '1') {
|
|
107
|
+
return plan;
|
|
108
|
+
}
|
|
109
|
+
if (plan.totalDelayMinutes > 0) {
|
|
110
|
+
await new Promise((resolve) => setTimeout(resolve, plan.totalDelayMinutes * 60_000));
|
|
111
|
+
}
|
|
112
|
+
return getSchedulingPlan(projectDir, config, jobType);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Format provider display for notifications/UI using command + label.
|
|
116
|
+
*/
|
|
117
|
+
export function formatProviderDisplay(providerCmd, providerLabel) {
|
|
118
|
+
const cmd = providerCmd?.trim();
|
|
119
|
+
if (!cmd)
|
|
120
|
+
return 'unknown';
|
|
121
|
+
const label = providerLabel?.trim();
|
|
122
|
+
if (!label)
|
|
123
|
+
return cmd;
|
|
124
|
+
if (label.toLowerCase() === cmd.toLowerCase())
|
|
125
|
+
return cmd;
|
|
126
|
+
return `${cmd} (${label})`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Rebuild environment variables for a queued job from the job's own project config.
|
|
130
|
+
* This ensures provider-specific env (ANTHROPIC_BASE_URL, API keys, model ids)
|
|
131
|
+
* always comes from the queued job's own project config, not the dispatcher process env.
|
|
132
|
+
*/
|
|
133
|
+
export function buildQueuedJobEnv(entry) {
|
|
134
|
+
const config = loadConfig(entry.projectPath);
|
|
135
|
+
return buildBaseEnvVars(config, entry.jobType, false);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Extract Telegram webhooks that have both botToken and chatId configured.
|
|
139
|
+
* Used for status messages from bash scripts (start/progress/final status).
|
|
140
|
+
*/
|
|
141
|
+
export function getTelegramStatusWebhooks(config) {
|
|
142
|
+
return (config.notifications?.webhooks ?? [])
|
|
143
|
+
.filter((wh) => wh.type === 'telegram' &&
|
|
144
|
+
typeof wh.botToken === 'string' &&
|
|
145
|
+
wh.botToken.trim().length > 0 &&
|
|
146
|
+
typeof wh.chatId === 'string' &&
|
|
147
|
+
wh.chatId.trim().length > 0)
|
|
148
|
+
.map((wh) => ({ botToken: wh.botToken, chatId: wh.chatId }));
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=env-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-builder.js","sourceRoot":"","sources":["../../../src/commands/shared/env-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAGL,iBAAiB,EAkBlB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4CD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,YAAY,GACnB,MAAM,CAkCR;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,2BAA2B,CAAC,CA0CtC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,iBAAiB,CAmBnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiLnD"}
|