@sigil0/looking-glass 0.1.0 → 0.2.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.
- package/README.md +143 -61
- package/dist/agents/coordinator.js +1 -1
- package/dist/agents/coordinator.js.map +1 -1
- package/dist/cli.js +14 -8
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -3
- package/dist/config.js.map +1 -1
- package/dist/paths.d.ts +8 -4
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +39 -15
- package/dist/paths.js.map +1 -1
- package/dist/scheduler/index.d.ts +5 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +3 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/runner.d.ts.map +1 -1
- package/dist/scheduler/runner.js +35 -3
- package/dist/scheduler/runner.js.map +1 -1
- package/dist/scheduler/service.d.ts +15 -0
- package/dist/scheduler/service.d.ts.map +1 -0
- package/dist/scheduler/service.js +20 -0
- package/dist/scheduler/service.js.map +1 -0
- package/dist/scheduler/windows.d.ts +87 -0
- package/dist/scheduler/windows.d.ts.map +1 -0
- package/dist/scheduler/windows.js +506 -0
- package/dist/scheduler/windows.js.map +1 -0
- package/dist/storage/artifact-store.d.ts +2 -1
- package/dist/storage/artifact-store.d.ts.map +1 -1
- package/dist/storage/artifact-store.js +8 -3
- package/dist/storage/artifact-store.js.map +1 -1
- package/dist/storage/database.d.ts +1 -1
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +10 -6
- package/dist/storage/database.js.map +1 -1
- package/dist/tools/apply-patch.d.ts +15 -0
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +81 -12
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/bash.d.ts +2 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +43 -22
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/executable.d.ts +13 -0
- package/dist/tools/executable.d.ts.map +1 -0
- package/dist/tools/executable.js +82 -0
- package/dist/tools/executable.js.map +1 -0
- package/dist/tools/process.d.ts +8 -0
- package/dist/tools/process.d.ts.map +1 -1
- package/dist/tools/process.js +105 -35
- package/dist/tools/process.js.map +1 -1
- package/dist/tools/safety.d.ts +5 -1
- package/dist/tools/safety.d.ts.map +1 -1
- package/dist/tools/safety.js +125 -7
- package/dist/tools/safety.js.map +1 -1
- package/dist/tools/schedule.d.ts.map +1 -1
- package/dist/tools/schedule.js +4 -3
- package/dist/tools/schedule.js.map +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +9 -4
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shell.d.ts +30 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +51 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/ui/tui.d.ts +6 -0
- package/dist/ui/tui.d.ts.map +1 -1
- package/dist/ui/tui.js +44 -21
- package/dist/ui/tui.js.map +1 -1
- package/looking-glass-title.svg +69 -0
- package/package.json +7 -5
package/dist/paths.js
CHANGED
|
@@ -1,26 +1,50 @@
|
|
|
1
1
|
import { mkdirSync, statSync } from "node:fs";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
|
-
import { dirname, join, resolve } from "node:path";
|
|
4
|
-
function
|
|
5
|
-
|
|
6
|
-
return value ? resolve(value) : fallback;
|
|
3
|
+
import { dirname, join, posix, resolve, win32 } from "node:path";
|
|
4
|
+
function pathApi(platform) {
|
|
5
|
+
return platform === "win32" ? win32 : posix;
|
|
7
6
|
}
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
function envPath(environment, name, fallback, paths) {
|
|
8
|
+
const value = environment[name];
|
|
9
|
+
return value ? paths.resolve(value) : fallback;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
/** Return whether POSIX mode bits and umask should be enforced on a platform. */
|
|
12
|
+
export function shouldEnforcePosixPermissions(platform = process.platform) {
|
|
13
|
+
return platform !== "win32";
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
function configRoot(platform, environment, home) {
|
|
16
|
+
const paths = pathApi(platform);
|
|
17
|
+
const fallback = platform === "win32" ? paths.join(home, "AppData", "Roaming") : paths.join(home, ".config");
|
|
18
|
+
const appData = platform === "win32" ? environment.APPDATA : undefined;
|
|
19
|
+
return envPath(environment, "XDG_CONFIG_HOME", appData ? paths.resolve(appData) : fallback, paths);
|
|
16
20
|
}
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
function dataRoot(platform, environment, home) {
|
|
22
|
+
const paths = pathApi(platform);
|
|
23
|
+
const fallback = platform === "win32" ? paths.join(home, "AppData", "Local") : paths.join(home, ".local", "share");
|
|
24
|
+
const localAppData = platform === "win32" ? environment.LOCALAPPDATA : undefined;
|
|
25
|
+
return envPath(environment, "XDG_DATA_HOME", localAppData ? paths.resolve(localAppData) : fallback, paths);
|
|
26
|
+
}
|
|
27
|
+
export function configDir(platform = process.platform, environment = process.env, home = homedir()) {
|
|
28
|
+
return pathApi(platform).join(configRoot(platform, environment, home), "looking-glass");
|
|
29
|
+
}
|
|
30
|
+
export function dataDir(platform = process.platform, environment = process.env, home = homedir()) {
|
|
31
|
+
return pathApi(platform).join(dataRoot(platform, environment, home), "looking-glass");
|
|
32
|
+
}
|
|
33
|
+
export function stateDbPath(platform = process.platform, environment = process.env, home = homedir()) {
|
|
34
|
+
const configured = environment.LOOKING_GLASS_DB;
|
|
35
|
+
const paths = pathApi(platform);
|
|
36
|
+
if (configured)
|
|
37
|
+
return paths.resolve(configured);
|
|
38
|
+
return paths.join(dataDir(platform, environment, home), "state.db");
|
|
39
|
+
}
|
|
40
|
+
export function artifactsDir(platform = process.platform, environment = process.env, home = homedir()) {
|
|
41
|
+
return pathApi(platform).join(dataDir(platform, environment, home), "artifacts");
|
|
19
42
|
}
|
|
20
43
|
export function ensureStateDirectories() {
|
|
21
|
-
|
|
22
|
-
mkdirSync(
|
|
23
|
-
mkdirSync(
|
|
44
|
+
const mode = shouldEnforcePosixPermissions() ? { mode: 0o700 } : {};
|
|
45
|
+
mkdirSync(configDir(), { recursive: true, ...mode });
|
|
46
|
+
mkdirSync(dataDir(), { recursive: true, ...mode });
|
|
47
|
+
mkdirSync(artifactsDir(), { recursive: true, ...mode });
|
|
24
48
|
}
|
|
25
49
|
export function findWorkspaceRoot(start = process.cwd()) {
|
|
26
50
|
let current = resolve(start);
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,10 @@ export type { SchedulerDaemonOptions, SchedulerTickResult } from "./daemon.js";
|
|
|
3
3
|
export { CommandRunner, scheduledSessionReadOnly, SessionPromptRunner } from "./runner.js";
|
|
4
4
|
export { initialDue, nextCronDue, parseOnceSchedule, validateSchedule, validateTimezone } from "./schedule.js";
|
|
5
5
|
export { SchedulerStore } from "./store.js";
|
|
6
|
-
export { installService,
|
|
6
|
+
export { installService, platformScheduler, schedulerForPlatform, serviceStatus, uninstallService } from "./service.js";
|
|
7
|
+
export { renderUnit, userUnitPath } from "./systemd.js";
|
|
8
|
+
export { createWindowsScheduler, powerShellLiteral, renderLauncher, renderPowerShellLauncher, renderTask, renderTaskXml, SERVICE_NAME, TASK_NAME, windowsArgument, xmlText, } from "./windows.js";
|
|
9
|
+
export type { SchedulerService } from "./service.js";
|
|
10
|
+
export type { TaskXmlOptions, WindowsCommandResult, WindowsCommandRunner, WindowsServiceOptions, WindowsScheduler, } from "./windows.js";
|
|
7
11
|
export type { ClaimedCommand, ClaimedSessionPrompt, CommandCompletion, CreateCommandInput, CreateReminderInput, CreateSessionPromptInput, DaemonLease, InboxRecord, JobKind, Occurrence, OccurrenceState, ScheduleKind, SchedulerJob, SessionPromptCompletion, SessionPromptHandler, } from "./types.js";
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,UAAU,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,eAAe,EACf,OAAO,GACR,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,WAAW,EACX,WAAW,EACX,OAAO,EACP,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
|
package/dist/scheduler/index.js
CHANGED
|
@@ -2,5 +2,7 @@ export { SchedulerDaemon } from "./daemon.js";
|
|
|
2
2
|
export { CommandRunner, scheduledSessionReadOnly, SessionPromptRunner } from "./runner.js";
|
|
3
3
|
export { initialDue, nextCronDue, parseOnceSchedule, validateSchedule, validateTimezone } from "./schedule.js";
|
|
4
4
|
export { SchedulerStore } from "./store.js";
|
|
5
|
-
export { installService,
|
|
5
|
+
export { installService, platformScheduler, schedulerForPlatform, serviceStatus, uninstallService } from "./service.js";
|
|
6
|
+
export { renderUnit, userUnitPath } from "./systemd.js";
|
|
7
|
+
export { createWindowsScheduler, powerShellLiteral, renderLauncher, renderPowerShellLauncher, renderTask, renderTaskXml, SERVICE_NAME, TASK_NAME, windowsArgument, xmlText, } from "./windows.js";
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,UAAU,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,eAAe,EACf,OAAO,GACR,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/scheduler/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/scheduler/runner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EAEpB,UAAU,EAEV,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAE5E;AA2CD,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBADhB,KAAK,EAAE,cAAc,EACrB,gBAAgB,GAAE,SAAS,MAAM,EAAO;IAGrD,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAgF5E;AAED,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAFhB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,oBAAoB,EAC7B,gBAAgB,GAAE,SAAS,MAAM,EAAO;IAGrD,GAAG,CAAC,KAAK,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAqElF"}
|
package/dist/scheduler/runner.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { statSync } from "node:fs";
|
|
2
|
+
import { isAbsolute } from "node:path";
|
|
1
3
|
import { runProcess } from "../tools/process.js";
|
|
4
|
+
import { resolveWorkspacePath } from "../tools/paths.js";
|
|
2
5
|
import { shellEnvironment } from "../tools/safety.js";
|
|
6
|
+
import { shellDefinition } from "../tools/shell.js";
|
|
3
7
|
import { sessionPromptReservation } from "./types.js";
|
|
4
8
|
import { redactSensitiveText } from "../security.js";
|
|
5
9
|
export function scheduledSessionReadOnly(approvalMode) {
|
|
@@ -20,6 +24,31 @@ function failedCompletion(error) {
|
|
|
20
24
|
stderrTruncated: false,
|
|
21
25
|
};
|
|
22
26
|
}
|
|
27
|
+
const SCHEDULED_CWD_ROOT_LIMITATION = "the scheduler schema stores no workspace root, so containment against the original workspace cannot be verified";
|
|
28
|
+
/**
|
|
29
|
+
* Validate the launch directory again after a claim is acquired. Command
|
|
30
|
+
* jobs currently persist only an absolute cwd, not the workspace that owned
|
|
31
|
+
* it, so resolveWorkspacePath can only provide the existing path model's
|
|
32
|
+
* lexical/realpath checks against that cwd. The limitation is deliberately
|
|
33
|
+
* included in failures rather than silently implying workspace containment.
|
|
34
|
+
*/
|
|
35
|
+
function revalidateScheduledCwd(cwd) {
|
|
36
|
+
if (cwd.includes("\0"))
|
|
37
|
+
throw new Error(`Scheduled command cwd contains a NUL byte; ${SCHEDULED_CWD_ROOT_LIMITATION}`);
|
|
38
|
+
if (!isAbsolute(cwd))
|
|
39
|
+
throw new Error(`Scheduled command cwd is no longer absolute: ${cwd}; ${SCHEDULED_CWD_ROOT_LIMITATION}`);
|
|
40
|
+
try {
|
|
41
|
+
const resolved = resolveWorkspacePath(cwd, ".");
|
|
42
|
+
if (!statSync(resolved).isDirectory()) {
|
|
43
|
+
throw new Error(`Scheduled command cwd is not a directory: ${cwd}`);
|
|
44
|
+
}
|
|
45
|
+
return resolved;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
49
|
+
throw new Error(`Scheduled command cwd is not a usable directory: ${cwd}; ${detail}; ${SCHEDULED_CWD_ROOT_LIMITATION}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
23
52
|
export class CommandRunner {
|
|
24
53
|
store;
|
|
25
54
|
sensitiveEnvKeys;
|
|
@@ -52,13 +81,16 @@ export class CommandRunner {
|
|
|
52
81
|
}
|
|
53
82
|
else {
|
|
54
83
|
try {
|
|
55
|
-
const
|
|
56
|
-
|
|
84
|
+
const shell = shellDefinition();
|
|
85
|
+
// Keep this immediately before the one spawn performed by
|
|
86
|
+
// runProcess. A cwd can disappear or be replaced after scheduling.
|
|
87
|
+
const cwd = revalidateScheduledCwd(job.cwd);
|
|
88
|
+
const result = await runProcess(shell.executable, shell.args(job.command), {
|
|
89
|
+
cwd,
|
|
57
90
|
env: shellEnvironment({ ...process.env, ...job.env }, this.sensitiveEnvKeys),
|
|
58
91
|
timeoutMs: job.timeoutMs ?? 1,
|
|
59
92
|
captureBytes: job.outputBytes ?? 0,
|
|
60
93
|
...(signal ? { signal } : {}),
|
|
61
|
-
detached: true,
|
|
62
94
|
});
|
|
63
95
|
const state = signal?.aborted
|
|
64
96
|
? "unknown"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/scheduler/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/scheduler/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type WindowsScheduler, type WindowsServiceOptions } from "./windows.js";
|
|
2
|
+
export interface SchedulerService {
|
|
3
|
+
installService(cliPath: string, dbPath: string): string;
|
|
4
|
+
serviceStatus(): string;
|
|
5
|
+
uninstallService(): boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Select the native scheduler without making callers know the host OS. */
|
|
8
|
+
export declare function schedulerForPlatform(platform?: NodeJS.Platform, windowsOptions?: WindowsServiceOptions): SchedulerService;
|
|
9
|
+
/** Alias that reads naturally at call sites which need the selected backend. */
|
|
10
|
+
export declare const platformScheduler: typeof schedulerForPlatform;
|
|
11
|
+
export declare function installService(cliPath: string, dbPath: string): string;
|
|
12
|
+
export declare function serviceStatus(): string;
|
|
13
|
+
export declare function uninstallService(): boolean;
|
|
14
|
+
export type { WindowsScheduler, WindowsServiceOptions };
|
|
15
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/scheduler/service.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAEzG,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,aAAa,IAAI,MAAM,CAAC;IACxB,gBAAgB,IAAI,OAAO,CAAC;CAC7B;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAClC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,cAAc,GAAE,qBAA0B,GACzC,gBAAgB,CAGlB;AAED,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,6BAAuB,CAAC;AAEtD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as systemd from "./systemd.js";
|
|
2
|
+
import { createWindowsScheduler } from "./windows.js";
|
|
3
|
+
/** Select the native scheduler without making callers know the host OS. */
|
|
4
|
+
export function schedulerForPlatform(platform = process.platform, windowsOptions = {}) {
|
|
5
|
+
if (platform === "win32")
|
|
6
|
+
return createWindowsScheduler(windowsOptions);
|
|
7
|
+
return systemd;
|
|
8
|
+
}
|
|
9
|
+
/** Alias that reads naturally at call sites which need the selected backend. */
|
|
10
|
+
export const platformScheduler = schedulerForPlatform;
|
|
11
|
+
export function installService(cliPath, dbPath) {
|
|
12
|
+
return schedulerForPlatform().installService(cliPath, dbPath);
|
|
13
|
+
}
|
|
14
|
+
export function serviceStatus() {
|
|
15
|
+
return schedulerForPlatform().serviceStatus();
|
|
16
|
+
}
|
|
17
|
+
export function uninstallService() {
|
|
18
|
+
return schedulerForPlatform().uninstallService();
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/scheduler/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAqD,MAAM,cAAc,CAAC;AAQzG,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAClC,WAA4B,OAAO,CAAC,QAAQ,EAC5C,iBAAwC,EAAE;IAE1C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACxE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAEtD,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,MAAc;IAC5D,OAAO,oBAAoB,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,oBAAoB,EAAE,CAAC,aAAa,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,oBAAoB,EAAE,CAAC,gBAAgB,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/** The per-user task used by the scheduler on Windows. */
|
|
2
|
+
export declare const TASK_NAME = "Looking Glass Scheduler";
|
|
3
|
+
/** Compatibility name shared with the systemd backend's public vocabulary. */
|
|
4
|
+
export declare const SERVICE_NAME = "Looking Glass Scheduler";
|
|
5
|
+
export declare const LAUNCHER_FILE_NAME = "scheduler-launcher.ps1";
|
|
6
|
+
export declare const TASK_XML_FILE_NAME = "scheduler-task.xml";
|
|
7
|
+
export interface WindowsCommandResult {
|
|
8
|
+
status: number | null;
|
|
9
|
+
stdout?: string;
|
|
10
|
+
stderr?: string;
|
|
11
|
+
/** Optional process details make injected command failures distinguishable in tests. */
|
|
12
|
+
errorCode?: string | number;
|
|
13
|
+
errorMessage?: string;
|
|
14
|
+
code?: string | number;
|
|
15
|
+
message?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* This deliberately has no shell-shaped arguments. Tests can provide this
|
|
19
|
+
* function and therefore never need to invoke schtasks on the test host.
|
|
20
|
+
*/
|
|
21
|
+
export type WindowsCommandRunner = (command: string, args: string[]) => WindowsCommandResult;
|
|
22
|
+
export interface WindowsServiceOptions {
|
|
23
|
+
command?: WindowsCommandRunner;
|
|
24
|
+
/** Additional names accepted for dependency injection by embedders. */
|
|
25
|
+
run?: WindowsCommandRunner;
|
|
26
|
+
spawn?: WindowsCommandRunner;
|
|
27
|
+
/** Alias for command, useful to callers that call this an executor. */
|
|
28
|
+
exec?: WindowsCommandRunner;
|
|
29
|
+
configDirectory?: string;
|
|
30
|
+
taskName?: string;
|
|
31
|
+
launcherPath?: string;
|
|
32
|
+
taskXmlPath?: string;
|
|
33
|
+
nodePath?: string;
|
|
34
|
+
user?: string;
|
|
35
|
+
/** Override SystemRoot in tests without changing the host environment. */
|
|
36
|
+
systemRoot?: string;
|
|
37
|
+
powershellPath?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface TaskXmlOptions {
|
|
40
|
+
taskName?: string;
|
|
41
|
+
user?: string;
|
|
42
|
+
/** Override SystemRoot in tests without changing the host environment. */
|
|
43
|
+
systemRoot?: string;
|
|
44
|
+
powershellPath?: string;
|
|
45
|
+
workingDirectory?: string;
|
|
46
|
+
}
|
|
47
|
+
/** Escape a value used as a single-quoted PowerShell string literal. */
|
|
48
|
+
export declare function powerShellLiteral(value: string): string;
|
|
49
|
+
/** Escape XML text, rejecting characters that XML 1.0 cannot represent. */
|
|
50
|
+
export declare function xmlText(value: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Quote one argument for the command line passed to an Exec action. The
|
|
53
|
+
* launcher path is a Windows path (and thus cannot contain a double quote),
|
|
54
|
+
* but handling backslashes here also makes this safe for synthetic test
|
|
55
|
+
* paths and future callers.
|
|
56
|
+
*/
|
|
57
|
+
export declare function windowsArgument(value: string): string;
|
|
58
|
+
/** Render the PowerShell process launcher used by the scheduled task. */
|
|
59
|
+
export declare function renderLauncher(nodePath: string, cliPath: string, dbPath: string): string;
|
|
60
|
+
/** Descriptive alias for callers that want to make the generated format explicit. */
|
|
61
|
+
export declare const renderPowerShellLauncher: typeof renderLauncher;
|
|
62
|
+
/**
|
|
63
|
+
* Render a Task Scheduler XML definition. The overload accepting positional
|
|
64
|
+
* values keeps this helper convenient for small, pure rendering tests.
|
|
65
|
+
*/
|
|
66
|
+
export declare function renderTaskXml(launcherPath: string, options?: TaskXmlOptions): string;
|
|
67
|
+
export declare function renderTaskXml(launcherPath: string, user?: string, powershellPath?: string, workingDirectory?: string): string;
|
|
68
|
+
/** Alias with a shorter name for callers that only need a pure renderer. */
|
|
69
|
+
export declare const renderTask: typeof renderTaskXml;
|
|
70
|
+
/** Install or replace the current user's logon task and start it once. */
|
|
71
|
+
export declare function installService(cliPath: string, dbPath: string, serviceOptions?: WindowsServiceOptions): string;
|
|
72
|
+
/**
|
|
73
|
+
* Return a stable ActiveState line in addition to useful Task Scheduler
|
|
74
|
+
* details. A confirmed missing task is inactive; access/operational failures
|
|
75
|
+
* are surfaced instead of being misreported as an absent task.
|
|
76
|
+
*/
|
|
77
|
+
export declare function serviceStatus(serviceOptions?: WindowsServiceOptions): string;
|
|
78
|
+
/** Remove the task and only the generated scheduler definition files. */
|
|
79
|
+
export declare function uninstallService(serviceOptions?: WindowsServiceOptions): boolean;
|
|
80
|
+
export interface WindowsScheduler {
|
|
81
|
+
installService(cliPath: string, dbPath: string): string;
|
|
82
|
+
serviceStatus(): string;
|
|
83
|
+
uninstallService(): boolean;
|
|
84
|
+
}
|
|
85
|
+
/** Bind injectable options once for the platform dispatcher and tests. */
|
|
86
|
+
export declare function createWindowsScheduler(options?: WindowsServiceOptions): WindowsScheduler;
|
|
87
|
+
//# sourceMappingURL=windows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../src/scheduler/windows.ts"],"names":[],"mappings":"AAQA,0DAA0D;AAC1D,eAAO,MAAM,SAAS,4BAA4B,CAAC;AACnD,8EAA8E;AAC9E,eAAO,MAAM,YAAY,4BAAY,CAAC;AAEtC,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,oBAAoB,CAAC;AAE7F,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,uEAAuE;IACvE,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,uEAAuE;IACvE,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAcD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAwED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS7C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBrD;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAaxF;AAED,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,uBAAiB,CAAC;AAiCvD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;AACtF,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;AAwD/H,4EAA4E;AAC5E,eAAO,MAAM,UAAU,sBAAgB,CAAC;AAoKxC,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAE,qBAA0B,GAAG,MAAM,CAiElH;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,cAAc,GAAE,qBAA0B,GAAG,MAAM,CAahF;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,cAAc,GAAE,qBAA0B,GAAG,OAAO,CA0BpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,aAAa,IAAI,MAAM,CAAC;IACxB,gBAAgB,IAAI,OAAO,CAAC;CAC7B;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,qBAA0B,GAAG,gBAAgB,CAM5F"}
|