@mohitkumawat/warmup-cli 1.1.2
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/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/commands/execute.d.ts +6 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +52 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/pause.d.ts +2 -0
- package/dist/commands/pause.d.ts.map +1 -0
- package/dist/commands/pause.js +18 -0
- package/dist/commands/pause.js.map +1 -0
- package/dist/commands/resume.d.ts +2 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +18 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/setup.d.ts +2 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +173 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +14 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test.d.ts +2 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +27 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +38 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +112 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +320 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +91 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scheduler/index.d.ts +15 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +103 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/linux.d.ts +12 -0
- package/dist/scheduler/linux.d.ts.map +1 -0
- package/dist/scheduler/linux.js +301 -0
- package/dist/scheduler/linux.js.map +1 -0
- package/dist/scheduler/macos.d.ts +16 -0
- package/dist/scheduler/macos.d.ts.map +1 -0
- package/dist/scheduler/macos.js +170 -0
- package/dist/scheduler/macos.js.map +1 -0
- package/dist/scheduler/windows.d.ts +14 -0
- package/dist/scheduler/windows.d.ts.map +1 -0
- package/dist/scheduler/windows.js +139 -0
- package/dist/scheduler/windows.js.map +1 -0
- package/dist/ui.d.ts +19 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +329 -0
- package/dist/ui.js.map +1 -0
- package/dist/warmup.d.ts +32 -0
- package/dist/warmup.d.ts.map +1 -0
- package/dist/warmup.js +154 -0
- package/dist/warmup.js.map +1 -0
- package/package.json +60 -0
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.findExecutable = findExecutable;
|
|
37
|
+
exports.parseClaudeAuthStatus = parseClaudeAuthStatus;
|
|
38
|
+
exports.resolveRuntimePaths = resolveRuntimePaths;
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
function getLocatorCommand() {
|
|
42
|
+
return process.platform === 'win32' ? 'where' : 'which';
|
|
43
|
+
}
|
|
44
|
+
function getFirstOutputLine(output) {
|
|
45
|
+
const line = output
|
|
46
|
+
.split(/\r?\n/)
|
|
47
|
+
.map(entry => entry.trim())
|
|
48
|
+
.find(Boolean);
|
|
49
|
+
return line || null;
|
|
50
|
+
}
|
|
51
|
+
function findExecutable(command) {
|
|
52
|
+
try {
|
|
53
|
+
const result = (0, child_process_1.spawnSync)(getLocatorCommand(), [command], {
|
|
54
|
+
encoding: 'utf-8',
|
|
55
|
+
timeout: 10000,
|
|
56
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
57
|
+
});
|
|
58
|
+
if (result.error || result.status !== 0) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const line = getFirstOutputLine(result.stdout || '');
|
|
62
|
+
return line ? path.resolve(line) : null;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function parseClaudeAuthStatus(raw) {
|
|
69
|
+
try {
|
|
70
|
+
const parsed = JSON.parse(raw);
|
|
71
|
+
return parsed.loggedIn === true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function resolveRuntimePaths(cliEntry = process.argv[1]) {
|
|
78
|
+
if (!cliEntry) {
|
|
79
|
+
throw new Error('Unable to determine the current warmup CLI entry path.');
|
|
80
|
+
}
|
|
81
|
+
const claudePath = findExecutable('claude');
|
|
82
|
+
if (!claudePath) {
|
|
83
|
+
throw new Error('Claude Code not found in PATH.');
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
nodePath: path.resolve(process.execPath),
|
|
87
|
+
cliEntry: path.resolve(cliEntry),
|
|
88
|
+
claudePath,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,wCAiBC;AAED,sDAOC;AAED,kDAeC;AArED,2CAA6B;AAC7B,iDAA0C;AAY1C,SAAS,iBAAiB;IACxB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1D,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,IAAI,GAAG,MAAM;SAChB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,OAAO,CAAC,CAAC;IAEjB,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC;AAED,SAAgB,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE;YACvD,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;QACnD,OAAO,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,WAAmB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChC,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RuntimePaths } from '../runtime';
|
|
2
|
+
export type Platform = 'macos' | 'linux' | 'windows';
|
|
3
|
+
export interface ScheduleInstallOptions {
|
|
4
|
+
hour: number;
|
|
5
|
+
minute: number;
|
|
6
|
+
runtime: RuntimePaths;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectPlatform(): Platform;
|
|
9
|
+
export declare function getPlatformName(): string;
|
|
10
|
+
export declare function installSchedule(options: ScheduleInstallOptions): void;
|
|
11
|
+
export declare function uninstallSchedule(): void;
|
|
12
|
+
export declare function isScheduleInstalled(): boolean;
|
|
13
|
+
export declare function pauseSchedule(): void;
|
|
14
|
+
export declare function resumeSchedule(): void;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AACrD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,cAAc,IAAI,QAAQ,CAKzC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAOxC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAOrE;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAOxC;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAOpC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAOrC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.detectPlatform = detectPlatform;
|
|
37
|
+
exports.getPlatformName = getPlatformName;
|
|
38
|
+
exports.installSchedule = installSchedule;
|
|
39
|
+
exports.uninstallSchedule = uninstallSchedule;
|
|
40
|
+
exports.isScheduleInstalled = isScheduleInstalled;
|
|
41
|
+
exports.pauseSchedule = pauseSchedule;
|
|
42
|
+
exports.resumeSchedule = resumeSchedule;
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const macos_1 = require("./macos");
|
|
45
|
+
const linux_1 = require("./linux");
|
|
46
|
+
const windows_1 = require("./windows");
|
|
47
|
+
function detectPlatform() {
|
|
48
|
+
const platform = os.platform();
|
|
49
|
+
if (platform === 'darwin')
|
|
50
|
+
return 'macos';
|
|
51
|
+
if (platform === 'win32')
|
|
52
|
+
return 'windows';
|
|
53
|
+
return 'linux';
|
|
54
|
+
}
|
|
55
|
+
function getPlatformName() {
|
|
56
|
+
const p = detectPlatform();
|
|
57
|
+
switch (p) {
|
|
58
|
+
case 'macos': return 'macOS (launchd)';
|
|
59
|
+
case 'linux': return 'Linux (systemd/cron)';
|
|
60
|
+
case 'windows': return 'Windows (Task Scheduler)';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function installSchedule(options) {
|
|
64
|
+
const platform = detectPlatform();
|
|
65
|
+
switch (platform) {
|
|
66
|
+
case 'macos': return (0, macos_1.installMacSchedule)(options);
|
|
67
|
+
case 'linux': return (0, linux_1.installLinuxSchedule)(options);
|
|
68
|
+
case 'windows': return (0, windows_1.installWindowsSchedule)(options);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function uninstallSchedule() {
|
|
72
|
+
const platform = detectPlatform();
|
|
73
|
+
switch (platform) {
|
|
74
|
+
case 'macos': return (0, macos_1.uninstallMacSchedule)();
|
|
75
|
+
case 'linux': return (0, linux_1.uninstallLinuxSchedule)();
|
|
76
|
+
case 'windows': return (0, windows_1.uninstallWindowsSchedule)();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function isScheduleInstalled() {
|
|
80
|
+
const platform = detectPlatform();
|
|
81
|
+
switch (platform) {
|
|
82
|
+
case 'macos': return (0, macos_1.isMacScheduleInstalled)();
|
|
83
|
+
case 'linux': return (0, linux_1.isLinuxScheduleInstalled)();
|
|
84
|
+
case 'windows': return (0, windows_1.isWindowsScheduleInstalled)();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function pauseSchedule() {
|
|
88
|
+
const platform = detectPlatform();
|
|
89
|
+
switch (platform) {
|
|
90
|
+
case 'macos': return (0, macos_1.pauseMacSchedule)();
|
|
91
|
+
case 'linux': return (0, linux_1.pauseLinuxSchedule)();
|
|
92
|
+
case 'windows': return (0, windows_1.pauseWindowsSchedule)();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function resumeSchedule() {
|
|
96
|
+
const platform = detectPlatform();
|
|
97
|
+
switch (platform) {
|
|
98
|
+
case 'macos': return (0, macos_1.resumeMacSchedule)();
|
|
99
|
+
case 'linux': return (0, linux_1.resumeLinuxSchedule)();
|
|
100
|
+
case 'windows': return (0, windows_1.resumeWindowsSchedule)();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,wCAKC;AAED,0CAOC;AAED,0CAOC;AAED,8CAOC;AAED,kDAOC;AAED,sCAOC;AAED,wCAOC;AAxED,uCAAyB;AACzB,mCAAgI;AAChI,mCAA0I;AAC1I,uCAAsJ;AAUtJ,SAAgB,cAAc;IAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,eAAe;IAC7B,MAAM,CAAC,GAAG,cAAc,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,OAAO,CAAC,CAAC,OAAO,iBAAiB,CAAC;QACvC,KAAK,OAAO,CAAC,CAAC,OAAO,sBAAsB,CAAC;QAC5C,KAAK,SAAS,CAAC,CAAC,OAAO,0BAA0B,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,OAA+B;IAC7D,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;QACjD,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;QACnD,KAAK,SAAS,CAAC,CAAC,OAAO,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,4BAAoB,GAAE,CAAC;QAC5C,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,8BAAsB,GAAE,CAAC;QAC9C,KAAK,SAAS,CAAC,CAAC,OAAO,IAAA,kCAAwB,GAAE,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB;IACjC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,8BAAsB,GAAE,CAAC;QAC9C,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,gCAAwB,GAAE,CAAC;QAChD,KAAK,SAAS,CAAC,CAAC,OAAO,IAAA,oCAA0B,GAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,wBAAgB,GAAE,CAAC;QACxC,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,0BAAkB,GAAE,CAAC;QAC1C,KAAK,SAAS,CAAC,CAAC,OAAO,IAAA,8BAAoB,GAAE,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,yBAAiB,GAAE,CAAC;QACzC,KAAK,OAAO,CAAC,CAAC,OAAO,IAAA,2BAAmB,GAAE,CAAC;QAC3C,KAAK,SAAS,CAAC,CAAC,OAAO,IAAA,+BAAqB,GAAE,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ScheduleInstallOptions } from './index';
|
|
2
|
+
type LinuxSchedulerBackend = 'systemd' | 'cron';
|
|
3
|
+
export declare function hasUsableSystemdUserSession(): boolean;
|
|
4
|
+
export declare function determineLinuxSchedulerBackend(systemdUsable: boolean, crontabAvailable: boolean): LinuxSchedulerBackend;
|
|
5
|
+
export declare function buildLinuxWarmupScript(runtime: ScheduleInstallOptions['runtime']): string;
|
|
6
|
+
export declare function installLinuxSchedule(options: ScheduleInstallOptions): void;
|
|
7
|
+
export declare function uninstallLinuxSchedule(): void;
|
|
8
|
+
export declare function isLinuxScheduleInstalled(): boolean;
|
|
9
|
+
export declare function pauseLinuxSchedule(): void;
|
|
10
|
+
export declare function resumeLinuxSchedule(): void;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=linux.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux.d.ts","sourceRoot":"","sources":["../../src/scheduler/linux.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAOtD,KAAK,qBAAqB,GAAG,SAAS,GAAG,MAAM,CAAC;AA8BhD,wBAAgB,2BAA2B,IAAI,OAAO,CAGrD;AAkCD,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,OAAO,EACtB,gBAAgB,EAAE,OAAO,GACxB,qBAAqB,CAIvB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,MAAM,CAQzF;AAwFD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAY1E;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAuB7C;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAclD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAoBzC;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAoB1C"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.hasUsableSystemdUserSession = hasUsableSystemdUserSession;
|
|
37
|
+
exports.determineLinuxSchedulerBackend = determineLinuxSchedulerBackend;
|
|
38
|
+
exports.buildLinuxWarmupScript = buildLinuxWarmupScript;
|
|
39
|
+
exports.installLinuxSchedule = installLinuxSchedule;
|
|
40
|
+
exports.uninstallLinuxSchedule = uninstallLinuxSchedule;
|
|
41
|
+
exports.isLinuxScheduleInstalled = isLinuxScheduleInstalled;
|
|
42
|
+
exports.pauseLinuxSchedule = pauseLinuxSchedule;
|
|
43
|
+
exports.resumeLinuxSchedule = resumeLinuxSchedule;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const os = __importStar(require("os"));
|
|
47
|
+
const child_process_1 = require("child_process");
|
|
48
|
+
const runtime_1 = require("../runtime");
|
|
49
|
+
const SERVICE_NAME = 'warmup';
|
|
50
|
+
const SYSTEMD_USER_DIR = path.join(os.homedir(), '.config', 'systemd', 'user');
|
|
51
|
+
const SERVICE_PATH = path.join(SYSTEMD_USER_DIR, `${SERVICE_NAME}.service`);
|
|
52
|
+
const TIMER_PATH = path.join(SYSTEMD_USER_DIR, `${SERVICE_NAME}.timer`);
|
|
53
|
+
function getWarmupScriptPath() {
|
|
54
|
+
return path.join(os.homedir(), '.warmup', 'warmup.sh');
|
|
55
|
+
}
|
|
56
|
+
function shellQuote(value) {
|
|
57
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
58
|
+
}
|
|
59
|
+
function runCommand(command, args) {
|
|
60
|
+
return (0, child_process_1.spawnSync)(command, args, {
|
|
61
|
+
encoding: 'utf-8',
|
|
62
|
+
timeout: 10000,
|
|
63
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function runChecked(command, args, context) {
|
|
67
|
+
const result = runCommand(command, args);
|
|
68
|
+
if (result.error) {
|
|
69
|
+
throw new Error(`${context}: ${result.error.message}`);
|
|
70
|
+
}
|
|
71
|
+
if (result.status !== 0) {
|
|
72
|
+
const details = (result.stderr || result.stdout || 'unknown error').trim();
|
|
73
|
+
throw new Error(`${context}: ${details}`);
|
|
74
|
+
}
|
|
75
|
+
return result.stdout || '';
|
|
76
|
+
}
|
|
77
|
+
function hasUsableSystemdUserSession() {
|
|
78
|
+
const result = runCommand('systemctl', ['--user', 'show-environment']);
|
|
79
|
+
return !result.error && result.status === 0;
|
|
80
|
+
}
|
|
81
|
+
function hasCrontab() {
|
|
82
|
+
return (0, runtime_1.findExecutable)('crontab') !== null;
|
|
83
|
+
}
|
|
84
|
+
function readCurrentCrontab() {
|
|
85
|
+
const result = runCommand('crontab', ['-l']);
|
|
86
|
+
if (result.error) {
|
|
87
|
+
throw new Error(`Failed to read crontab: ${result.error.message}`);
|
|
88
|
+
}
|
|
89
|
+
if (result.status === 0) {
|
|
90
|
+
return result.stdout || '';
|
|
91
|
+
}
|
|
92
|
+
if (result.status === 1) {
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
const details = (result.stderr || result.stdout || 'unknown error').trim();
|
|
96
|
+
throw new Error(`Failed to read crontab: ${details}`);
|
|
97
|
+
}
|
|
98
|
+
function writeCrontab(lines, context) {
|
|
99
|
+
const tmpFile = path.join(os.tmpdir(), 'warmup-cron.tmp');
|
|
100
|
+
try {
|
|
101
|
+
fs.writeFileSync(tmpFile, `${lines.filter(line => line.trim()).join('\n')}\n`);
|
|
102
|
+
runChecked('crontab', [tmpFile], context);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
if (fs.existsSync(tmpFile)) {
|
|
106
|
+
fs.unlinkSync(tmpFile);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function determineLinuxSchedulerBackend(systemdUsable, crontabAvailable) {
|
|
111
|
+
if (systemdUsable)
|
|
112
|
+
return 'systemd';
|
|
113
|
+
if (crontabAvailable)
|
|
114
|
+
return 'cron';
|
|
115
|
+
throw new Error('Neither a usable user systemd session nor crontab is available on this system.');
|
|
116
|
+
}
|
|
117
|
+
function buildLinuxWarmupScript(runtime) {
|
|
118
|
+
return `#!/bin/bash
|
|
119
|
+
set -euo pipefail
|
|
120
|
+
|
|
121
|
+
mkdir -p "$HOME/.warmup/logs"
|
|
122
|
+
|
|
123
|
+
${shellQuote(runtime.nodePath)} ${shellQuote(runtime.cliEntry)} _execute-warmup >> "$HOME/.warmup/logs/systemd.log" 2>&1
|
|
124
|
+
`;
|
|
125
|
+
}
|
|
126
|
+
function createWarmupScript(runtime) {
|
|
127
|
+
const scriptPath = getWarmupScriptPath();
|
|
128
|
+
const script = buildLinuxWarmupScript(runtime);
|
|
129
|
+
fs.writeFileSync(scriptPath, script, { mode: 0o755 });
|
|
130
|
+
return scriptPath;
|
|
131
|
+
}
|
|
132
|
+
function installSystemdSchedule(options) {
|
|
133
|
+
if (!fs.existsSync(SYSTEMD_USER_DIR)) {
|
|
134
|
+
fs.mkdirSync(SYSTEMD_USER_DIR, { recursive: true });
|
|
135
|
+
}
|
|
136
|
+
const scriptPath = createWarmupScript(options.runtime);
|
|
137
|
+
const hStr = options.hour.toString().padStart(2, '0');
|
|
138
|
+
const mStr = options.minute.toString().padStart(2, '0');
|
|
139
|
+
const service = `[Unit]
|
|
140
|
+
Description=warmup pre-warm service
|
|
141
|
+
|
|
142
|
+
[Service]
|
|
143
|
+
Type=oneshot
|
|
144
|
+
ExecStart=/bin/bash ${scriptPath}
|
|
145
|
+
Environment=HOME=${os.homedir()}
|
|
146
|
+
`;
|
|
147
|
+
const timer = `[Unit]
|
|
148
|
+
Description=warmup daily pre-warm timer
|
|
149
|
+
|
|
150
|
+
[Timer]
|
|
151
|
+
OnCalendar=*-*-* ${hStr}:${mStr}:00
|
|
152
|
+
Persistent=true
|
|
153
|
+
AccuracySec=1min
|
|
154
|
+
|
|
155
|
+
[Install]
|
|
156
|
+
WantedBy=timers.target
|
|
157
|
+
`;
|
|
158
|
+
fs.writeFileSync(SERVICE_PATH, service);
|
|
159
|
+
fs.writeFileSync(TIMER_PATH, timer);
|
|
160
|
+
try {
|
|
161
|
+
runChecked('systemctl', ['--user', 'daemon-reload'], 'Failed to reload the user systemd daemon');
|
|
162
|
+
runChecked('systemctl', ['--user', 'enable', '--now', `${SERVICE_NAME}.timer`], 'Failed to enable and start warmup.timer');
|
|
163
|
+
const enabledState = runChecked('systemctl', ['--user', 'is-enabled', `${SERVICE_NAME}.timer`], 'Failed to verify warmup.timer enablement').trim();
|
|
164
|
+
const activeState = runChecked('systemctl', ['--user', 'is-active', `${SERVICE_NAME}.timer`], 'Failed to verify warmup.timer activity').trim();
|
|
165
|
+
if (enabledState !== 'enabled') {
|
|
166
|
+
throw new Error(`warmup.timer is not enabled (state: ${enabledState})`);
|
|
167
|
+
}
|
|
168
|
+
if (!['active', 'activating'].includes(activeState)) {
|
|
169
|
+
throw new Error(`warmup.timer is not active (state: ${activeState})`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
try {
|
|
174
|
+
if (fs.existsSync(SERVICE_PATH))
|
|
175
|
+
fs.unlinkSync(SERVICE_PATH);
|
|
176
|
+
if (fs.existsSync(TIMER_PATH))
|
|
177
|
+
fs.unlinkSync(TIMER_PATH);
|
|
178
|
+
runCommand('systemctl', ['--user', 'daemon-reload']);
|
|
179
|
+
}
|
|
180
|
+
catch { }
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function installCronSchedule(options) {
|
|
185
|
+
if (!hasCrontab()) {
|
|
186
|
+
throw new Error('crontab is not available on this system.');
|
|
187
|
+
}
|
|
188
|
+
const scriptPath = createWarmupScript(options.runtime);
|
|
189
|
+
const cronLine = `${options.minute} ${options.hour} * * * /bin/bash ${scriptPath} # warmup`;
|
|
190
|
+
const rebootLine = `@reboot sleep 30 && /bin/bash ${scriptPath} # warmup-boot`;
|
|
191
|
+
const existing = readCurrentCrontab();
|
|
192
|
+
const lines = existing
|
|
193
|
+
.split('\n')
|
|
194
|
+
.filter(line => line.trim())
|
|
195
|
+
.filter(line => !line.includes('# warmup'));
|
|
196
|
+
lines.push(cronLine);
|
|
197
|
+
lines.push(rebootLine);
|
|
198
|
+
writeCrontab(lines, 'Failed to install warmup crontab entries');
|
|
199
|
+
}
|
|
200
|
+
function installLinuxSchedule(options) {
|
|
201
|
+
const backend = determineLinuxSchedulerBackend(hasUsableSystemdUserSession(), hasCrontab());
|
|
202
|
+
if (backend === 'systemd') {
|
|
203
|
+
installSystemdSchedule(options);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
installCronSchedule(options);
|
|
207
|
+
}
|
|
208
|
+
function uninstallLinuxSchedule() {
|
|
209
|
+
if (hasUsableSystemdUserSession()) {
|
|
210
|
+
try {
|
|
211
|
+
runCommand('systemctl', ['--user', 'stop', `${SERVICE_NAME}.timer`]);
|
|
212
|
+
}
|
|
213
|
+
catch { }
|
|
214
|
+
try {
|
|
215
|
+
runCommand('systemctl', ['--user', 'disable', `${SERVICE_NAME}.timer`]);
|
|
216
|
+
}
|
|
217
|
+
catch { }
|
|
218
|
+
if (fs.existsSync(SERVICE_PATH))
|
|
219
|
+
fs.unlinkSync(SERVICE_PATH);
|
|
220
|
+
if (fs.existsSync(TIMER_PATH))
|
|
221
|
+
fs.unlinkSync(TIMER_PATH);
|
|
222
|
+
try {
|
|
223
|
+
runCommand('systemctl', ['--user', 'daemon-reload']);
|
|
224
|
+
}
|
|
225
|
+
catch { }
|
|
226
|
+
}
|
|
227
|
+
if (hasCrontab()) {
|
|
228
|
+
try {
|
|
229
|
+
const lines = readCurrentCrontab()
|
|
230
|
+
.split('\n')
|
|
231
|
+
.filter(line => line.trim())
|
|
232
|
+
.filter(line => !line.includes('# warmup'));
|
|
233
|
+
writeCrontab(lines, 'Failed to remove warmup crontab entries');
|
|
234
|
+
}
|
|
235
|
+
catch { }
|
|
236
|
+
}
|
|
237
|
+
const scriptPath = getWarmupScriptPath();
|
|
238
|
+
if (fs.existsSync(scriptPath))
|
|
239
|
+
fs.unlinkSync(scriptPath);
|
|
240
|
+
}
|
|
241
|
+
function isLinuxScheduleInstalled() {
|
|
242
|
+
if (hasUsableSystemdUserSession()) {
|
|
243
|
+
return fs.existsSync(TIMER_PATH);
|
|
244
|
+
}
|
|
245
|
+
if (!hasCrontab()) {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
try {
|
|
249
|
+
return readCurrentCrontab().includes('# warmup');
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function pauseLinuxSchedule() {
|
|
256
|
+
if (hasUsableSystemdUserSession()) {
|
|
257
|
+
try {
|
|
258
|
+
runCommand('systemctl', ['--user', 'stop', `${SERVICE_NAME}.timer`]);
|
|
259
|
+
}
|
|
260
|
+
catch { }
|
|
261
|
+
}
|
|
262
|
+
if (!hasCrontab())
|
|
263
|
+
return;
|
|
264
|
+
try {
|
|
265
|
+
const existing = readCurrentCrontab();
|
|
266
|
+
if (existing.includes('# warmup')) {
|
|
267
|
+
const lines = existing.split('\n').map(line => {
|
|
268
|
+
if (line.includes('# warmup') && !line.startsWith('#PAUSED#')) {
|
|
269
|
+
return `#PAUSED#${line}`;
|
|
270
|
+
}
|
|
271
|
+
return line;
|
|
272
|
+
});
|
|
273
|
+
writeCrontab(lines, 'Failed to pause warmup crontab entries');
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch { }
|
|
277
|
+
}
|
|
278
|
+
function resumeLinuxSchedule() {
|
|
279
|
+
if (hasUsableSystemdUserSession()) {
|
|
280
|
+
try {
|
|
281
|
+
runCommand('systemctl', ['--user', 'start', `${SERVICE_NAME}.timer`]);
|
|
282
|
+
}
|
|
283
|
+
catch { }
|
|
284
|
+
}
|
|
285
|
+
if (!hasCrontab())
|
|
286
|
+
return;
|
|
287
|
+
try {
|
|
288
|
+
const existing = readCurrentCrontab();
|
|
289
|
+
if (existing.includes('#PAUSED#')) {
|
|
290
|
+
const lines = existing.split('\n').map(line => {
|
|
291
|
+
if (line.startsWith('#PAUSED#') && line.includes('# warmup')) {
|
|
292
|
+
return line.replace('#PAUSED#', '');
|
|
293
|
+
}
|
|
294
|
+
return line;
|
|
295
|
+
});
|
|
296
|
+
writeCrontab(lines, 'Failed to resume warmup crontab entries');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch { }
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=linux.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux.js","sourceRoot":"","sources":["../../src/scheduler/linux.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ScheduleInstallOptions } from './index';
|
|
2
|
+
export declare function buildMacWarmupScript(runtime: ScheduleInstallOptions['runtime']): string;
|
|
3
|
+
/**
|
|
4
|
+
* Install a launchd plist for macOS.
|
|
5
|
+
* Key feature: RunAtLoad=true ensures boot-recovery.
|
|
6
|
+
*/
|
|
7
|
+
export declare function installMacSchedule(options: ScheduleInstallOptions): void;
|
|
8
|
+
/** Remove the launchd plist */
|
|
9
|
+
export declare function uninstallMacSchedule(): void;
|
|
10
|
+
/** Check if macOS schedule is installed */
|
|
11
|
+
export declare function isMacScheduleInstalled(): boolean;
|
|
12
|
+
/** Temporarily disable by unloading (don't delete) */
|
|
13
|
+
export declare function pauseMacSchedule(): void;
|
|
14
|
+
/** Re-enable by loading */
|
|
15
|
+
export declare function resumeMacSchedule(): void;
|
|
16
|
+
//# sourceMappingURL=macos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos.d.ts","sourceRoot":"","sources":["../../src/scheduler/macos.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAkBtD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,MAAM,CAQvF;AAWD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CA4DxE;AAED,+BAA+B;AAC/B,wBAAgB,oBAAoB,IAAI,IAAI,CAa3C;AAED,2CAA2C;AAC3C,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,2BAA2B;AAC3B,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC"}
|