@singbox-iac/cli 0.1.8 → 0.1.10
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-en.md +43 -0
- package/README.md +42 -0
- package/dist/cli/commands/apply.js +5 -1
- package/dist/cli/commands/apply.js.map +1 -1
- package/dist/cli/commands/author.js +10 -0
- package/dist/cli/commands/author.js.map +1 -1
- package/dist/cli/commands/build.js +11 -0
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/check.js +5 -1
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/doctor.js +12 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/reload.js +5 -1
- package/dist/cli/commands/reload.js.map +1 -1
- package/dist/cli/commands/restart.d.ts +2 -0
- package/dist/cli/commands/restart.js +57 -0
- package/dist/cli/commands/restart.js.map +1 -0
- package/dist/cli/commands/rollback.js +6 -2
- package/dist/cli/commands/rollback.js.map +1 -1
- package/dist/cli/commands/run.js +5 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/schedule.js +10 -2
- package/dist/cli/commands/schedule.js.map +1 -1
- package/dist/cli/commands/setup.js +68 -9
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/start.d.ts +2 -0
- package/dist/cli/commands/start.js +51 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.js +65 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +2 -0
- package/dist/cli/commands/stop.js +29 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/verify.js +15 -3
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/index.js +17 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/schema.d.ts +125 -0
- package/dist/config/schema.js +49 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/domain/runtime-mode.d.ts +2 -0
- package/dist/modules/compiler/index.js +32 -14
- package/dist/modules/compiler/index.js.map +1 -1
- package/dist/modules/desktop-runtime/index.d.ts +48 -0
- package/dist/modules/desktop-runtime/index.js +183 -0
- package/dist/modules/desktop-runtime/index.js.map +1 -0
- package/dist/modules/doctor/index.d.ts +5 -0
- package/dist/modules/doctor/index.js +37 -8
- package/dist/modules/doctor/index.js.map +1 -1
- package/dist/modules/init/index.d.ts +2 -0
- package/dist/modules/init/index.js +7 -2
- package/dist/modules/init/index.js.map +1 -1
- package/dist/modules/manager/index.d.ts +1 -1
- package/dist/modules/manager/index.js +6 -28
- package/dist/modules/manager/index.js.map +1 -1
- package/dist/modules/runtime-dependencies/index.d.ts +22 -0
- package/dist/modules/runtime-dependencies/index.js +114 -0
- package/dist/modules/runtime-dependencies/index.js.map +1 -0
- package/dist/modules/runtime-mode/index.d.ts +6 -1
- package/dist/modules/runtime-mode/index.js +14 -0
- package/dist/modules/runtime-mode/index.js.map +1 -1
- package/dist/modules/schedule/index.d.ts +1 -0
- package/dist/modules/schedule/index.js +1 -1
- package/dist/modules/schedule/index.js.map +1 -1
- package/dist/modules/status/index.d.ts +57 -0
- package/dist/modules/status/index.js +295 -0
- package/dist/modules/status/index.js.map +1 -0
- package/dist/modules/update/index.js +5 -3
- package/dist/modules/update/index.js.map +1 -1
- package/dist/modules/verification/index.d.ts +1 -1
- package/dist/modules/verification/index.js +6 -12
- package/dist/modules/verification/index.js.map +1 -1
- package/docs/runtime-on-macos.md +36 -0
- package/examples/builder.config.yaml +9 -0
- package/package.json +1 -1
|
@@ -3,10 +3,11 @@ import { access } from "node:fs/promises";
|
|
|
3
3
|
import { homedir, platform } from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { detectLocalAiClis } from "../authoring/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import { resolveChromeBinary } from "../verification/index.js";
|
|
6
|
+
import { resolveChromeDependency, resolveSingBoxDependency, } from "../runtime-dependencies/index.js";
|
|
8
7
|
export async function runDoctor(input) {
|
|
9
8
|
const checks = [];
|
|
9
|
+
let resolvedSingBox;
|
|
10
|
+
let resolvedChrome;
|
|
10
11
|
checks.push(makeCheck(platform() === "darwin" ? "PASS" : "WARN", "os", `platform=${platform()}`));
|
|
11
12
|
if (input.config && input.configPath) {
|
|
12
13
|
checks.push(makeCheck("PASS", "builder-config", input.configPath));
|
|
@@ -14,8 +15,22 @@ export async function runDoctor(input) {
|
|
|
14
15
|
else {
|
|
15
16
|
checks.push(makeCheck("WARN", "builder-config", "No builder config was found. Use init or pass --config when running commands."));
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
{
|
|
19
|
+
const result = await checkBinary("sing-box", () => resolveSingBoxDependency({
|
|
20
|
+
explicitPath: input.singBoxBinary,
|
|
21
|
+
persistedPath: input.config?.runtime.dependencies.singBoxBinary,
|
|
22
|
+
}), "FAIL", input.config?.runtime.dependencies.singBoxBinary);
|
|
23
|
+
checks.push(result.check);
|
|
24
|
+
resolvedSingBox = result.resolved;
|
|
25
|
+
}
|
|
26
|
+
{
|
|
27
|
+
const result = await checkBinary("chrome", () => resolveChromeDependency({
|
|
28
|
+
explicitPath: input.chromeBinary,
|
|
29
|
+
persistedPath: input.config?.runtime.dependencies.chromeBinary,
|
|
30
|
+
}), "WARN", input.config?.runtime.dependencies.chromeBinary);
|
|
31
|
+
checks.push(result.check);
|
|
32
|
+
resolvedChrome = result.resolved;
|
|
33
|
+
}
|
|
19
34
|
const localAiClis = await detectLocalAiClis();
|
|
20
35
|
const installedAiClis = localAiClis.filter((cli) => cli.installed);
|
|
21
36
|
checks.push(installedAiClis.length > 0
|
|
@@ -54,15 +69,29 @@ export async function runDoctor(input) {
|
|
|
54
69
|
: `provider=${authoringProvider}, timeoutMs=${input.config.authoring.timeoutMs}`;
|
|
55
70
|
checks.push(makeCheck(authoringStatus, "authoring-provider", authoringDetails));
|
|
56
71
|
}
|
|
57
|
-
return {
|
|
72
|
+
return {
|
|
73
|
+
checks,
|
|
74
|
+
resolvedDependencies: {
|
|
75
|
+
...(resolvedSingBox ? { singBox: resolvedSingBox } : {}),
|
|
76
|
+
...(resolvedChrome ? { chrome: resolvedChrome } : {}),
|
|
77
|
+
},
|
|
78
|
+
};
|
|
58
79
|
}
|
|
59
|
-
async function checkBinary(name, resolver, failureStatus) {
|
|
80
|
+
async function checkBinary(name, resolver, failureStatus, persistedPath) {
|
|
60
81
|
try {
|
|
61
82
|
const resolved = await resolver();
|
|
62
|
-
|
|
83
|
+
const status = persistedPath && resolved.source !== "persisted" && resolved.source !== "explicit"
|
|
84
|
+
? "WARN"
|
|
85
|
+
: "PASS";
|
|
86
|
+
const details = persistedPath && resolved.source !== "persisted" && resolved.source !== "explicit"
|
|
87
|
+
? `${resolved.path} (source=${resolved.source}, persisted path unavailable: ${persistedPath})`
|
|
88
|
+
: `${resolved.path} (source=${resolved.source})`;
|
|
89
|
+
return { check: makeCheck(status, name, details), resolved };
|
|
63
90
|
}
|
|
64
91
|
catch (error) {
|
|
65
|
-
return
|
|
92
|
+
return {
|
|
93
|
+
check: makeCheck(failureStatus, name, error instanceof Error ? error.message : String(error)),
|
|
94
|
+
};
|
|
66
95
|
}
|
|
67
96
|
}
|
|
68
97
|
function makeCheck(status, name, details) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/doctor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/doctor/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,11 @@ export interface InitWorkspaceInput {
|
|
|
4
4
|
readonly examplesDir: string;
|
|
5
5
|
readonly subscriptionUrl?: string;
|
|
6
6
|
readonly force?: boolean;
|
|
7
|
+
readonly preserveExistingRules?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export interface InitWorkspaceResult {
|
|
9
10
|
readonly configPath: string;
|
|
10
11
|
readonly rulesPath: string;
|
|
12
|
+
readonly reusedExistingRules: boolean;
|
|
11
13
|
}
|
|
12
14
|
export declare function initWorkspace(input: InitWorkspaceInput): Promise<InitWorkspaceResult>;
|
|
@@ -13,18 +13,23 @@ export async function initWorkspace(input) {
|
|
|
13
13
|
: configTemplate;
|
|
14
14
|
const configWithRulesPath = renderedConfig.replace('userRulesFile: "~/.config/singbox-iac/rules/custom.rules.yaml"', `userRulesFile: "${escapeYamlDoubleQuotedString(input.rulesOutPath)}"`);
|
|
15
15
|
await writeIfAllowed(input.configOutPath, configWithRulesPath, input.force === true);
|
|
16
|
-
await writeIfAllowed(input.rulesOutPath, rulesTemplate, input.force === true);
|
|
16
|
+
const reusedExistingRules = await writeIfAllowed(input.rulesOutPath, rulesTemplate, input.force === true, input.preserveExistingRules === true);
|
|
17
17
|
return {
|
|
18
18
|
configPath: input.configOutPath,
|
|
19
19
|
rulesPath: input.rulesOutPath,
|
|
20
|
+
reusedExistingRules,
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
|
-
async function writeIfAllowed(filePath, content, force) {
|
|
23
|
+
async function writeIfAllowed(filePath, content, force, preserveExisting = false) {
|
|
23
24
|
if (!force && (await pathExists(filePath))) {
|
|
25
|
+
if (preserveExisting) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
24
28
|
throw new Error(`Refusing to overwrite existing file: ${filePath}`);
|
|
25
29
|
}
|
|
26
30
|
await mkdir(path.dirname(filePath), { recursive: true });
|
|
27
31
|
await writeFile(filePath, content, "utf8");
|
|
32
|
+
return false;
|
|
28
33
|
}
|
|
29
34
|
async function pathExists(filePath) {
|
|
30
35
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,IAAI,MAAM,WAAW,CAAC;AAiB7B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAyB;IAC3D,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAC/E,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAE5E,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACpC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe;QAC1C,CAAC,CAAC,cAAc,CAAC,OAAO,CACpB,yCAAyC,EACzC,SAAS,4BAA4B,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAChE;QACH,CAAC,CAAC,cAAc,CAAC;IACnB,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,CAChD,gEAAgE,EAChE,mBAAmB,4BAA4B,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CACvE,CAAC;IAEF,MAAM,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IACrF,MAAM,mBAAmB,GAAG,MAAM,cAAc,CAC9C,KAAK,CAAC,YAAY,EAClB,aAAa,EACb,KAAK,CAAC,KAAK,KAAK,IAAI,EACpB,KAAK,CAAC,qBAAqB,KAAK,IAAI,CACrC,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,aAAa;QAC/B,SAAS,EAAE,KAAK,CAAC,YAAY;QAC7B,mBAAmB;KACpB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,QAAgB,EAChB,OAAe,EACf,KAAc,EACd,gBAAgB,GAAG,KAAK;IAExB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAa;IACjD,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -27,4 +27,4 @@ export declare function reloadRuntime(input: {
|
|
|
27
27
|
readonly runtime: BuilderConfig["runtime"]["reload"];
|
|
28
28
|
}): Promise<void>;
|
|
29
29
|
export declare function shouldAutoReloadRuntime(runtime: BuilderConfig["runtime"]["reload"]): Promise<boolean>;
|
|
30
|
-
export declare function resolveSingBoxBinary(explicitPath?: string): Promise<string>;
|
|
30
|
+
export declare function resolveSingBoxBinary(explicitPath?: string, persistedPath?: string): Promise<string>;
|
|
@@ -2,6 +2,7 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { constants } from "node:fs";
|
|
3
3
|
import { access, copyFile, mkdir } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import { resolveSingBoxDependency } from "../runtime-dependencies/index.js";
|
|
5
6
|
export async function checkConfig(input) {
|
|
6
7
|
const binaryPath = await resolveSingBoxBinary(input.singBoxBinary);
|
|
7
8
|
await runCommand(binaryPath, ["check", "-c", input.configPath]);
|
|
@@ -60,19 +61,12 @@ export async function shouldAutoReloadRuntime(runtime) {
|
|
|
60
61
|
}
|
|
61
62
|
return isProcessRunning(runtime.processName);
|
|
62
63
|
}
|
|
63
|
-
export async function resolveSingBoxBinary(explicitPath) {
|
|
64
|
-
const
|
|
64
|
+
export async function resolveSingBoxBinary(explicitPath, persistedPath) {
|
|
65
|
+
const resolved = await resolveSingBoxDependency({
|
|
65
66
|
explicitPath,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
].filter((candidate) => typeof candidate === "string" && candidate.length > 0);
|
|
70
|
-
for (const candidate of candidates) {
|
|
71
|
-
if (await isExecutable(candidate)) {
|
|
72
|
-
return candidate;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
throw new Error("Unable to find a usable sing-box binary. Set SING_BOX_BIN or install sing-box on PATH.");
|
|
67
|
+
persistedPath,
|
|
68
|
+
});
|
|
69
|
+
return resolved.path;
|
|
76
70
|
}
|
|
77
71
|
async function reloadSingBox(input) {
|
|
78
72
|
if (input.kind === "command") {
|
|
@@ -87,15 +81,6 @@ async function reloadSingBox(input) {
|
|
|
87
81
|
}
|
|
88
82
|
await runCommand("/usr/bin/killall", [`-${input.signal}`, input.processName]);
|
|
89
83
|
}
|
|
90
|
-
async function isExecutable(filePath) {
|
|
91
|
-
try {
|
|
92
|
-
await access(filePath, constants.X_OK);
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
84
|
async function pathExists(filePath) {
|
|
100
85
|
try {
|
|
101
86
|
await access(filePath, constants.F_OK);
|
|
@@ -105,13 +90,6 @@ async function pathExists(filePath) {
|
|
|
105
90
|
return false;
|
|
106
91
|
}
|
|
107
92
|
}
|
|
108
|
-
function resolvePathCandidates(commandName) {
|
|
109
|
-
return (process.env.PATH ?? "")
|
|
110
|
-
.split(path.delimiter)
|
|
111
|
-
.filter((entry) => entry.length > 0)
|
|
112
|
-
.map((entry) => path.join(entry, commandName))
|
|
113
|
-
.filter((candidate, index, items) => items.indexOf(candidate) === index);
|
|
114
|
-
}
|
|
115
93
|
async function runCommand(command, args) {
|
|
116
94
|
await new Promise((resolve, reject) => {
|
|
117
95
|
const child = spawn(command, args, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/manager/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/manager/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type RuntimeDependencySource = "explicit" | "persisted" | "env" | "repo-tool" | "path" | "app-bundle";
|
|
2
|
+
export interface ResolvedRuntimeDependency {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly source: RuntimeDependencySource;
|
|
5
|
+
}
|
|
6
|
+
export interface PersistedRuntimeDependencies {
|
|
7
|
+
readonly singBoxBinary?: string;
|
|
8
|
+
readonly chromeBinary?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function resolveSingBoxDependency(input?: {
|
|
11
|
+
readonly explicitPath?: string | undefined;
|
|
12
|
+
readonly persistedPath?: string | undefined;
|
|
13
|
+
}): Promise<ResolvedRuntimeDependency>;
|
|
14
|
+
export declare function resolveChromeDependency(input?: {
|
|
15
|
+
readonly explicitPath?: string | undefined;
|
|
16
|
+
readonly persistedPath?: string | undefined;
|
|
17
|
+
}): Promise<ResolvedRuntimeDependency>;
|
|
18
|
+
export declare function persistRuntimeDependencies(input: {
|
|
19
|
+
readonly configPath: string;
|
|
20
|
+
readonly singBox?: ResolvedRuntimeDependency;
|
|
21
|
+
readonly chrome?: ResolvedRuntimeDependency;
|
|
22
|
+
}): Promise<boolean>;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { access, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { platform } from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import YAML from "yaml";
|
|
6
|
+
export async function resolveSingBoxDependency(input = {}) {
|
|
7
|
+
const candidates = [];
|
|
8
|
+
if (input.explicitPath) {
|
|
9
|
+
candidates.push({ path: input.explicitPath, source: "explicit" });
|
|
10
|
+
}
|
|
11
|
+
if (input.persistedPath) {
|
|
12
|
+
candidates.push({ path: input.persistedPath, source: "persisted" });
|
|
13
|
+
}
|
|
14
|
+
if (process.env.SING_BOX_BIN) {
|
|
15
|
+
candidates.push({ path: process.env.SING_BOX_BIN, source: "env" });
|
|
16
|
+
}
|
|
17
|
+
candidates.push({
|
|
18
|
+
path: path.resolve(process.cwd(), ".tools", "sing-box-1.13.4-darwin-arm64", "sing-box"),
|
|
19
|
+
source: "repo-tool",
|
|
20
|
+
});
|
|
21
|
+
for (const candidate of resolvePathCandidates("sing-box")) {
|
|
22
|
+
candidates.push({ path: candidate, source: "path" });
|
|
23
|
+
}
|
|
24
|
+
for (const candidate of candidates) {
|
|
25
|
+
if (await isExecutable(candidate.path)) {
|
|
26
|
+
return candidate;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const installHint = platform() === "darwin"
|
|
30
|
+
? " Install it with `brew install sing-box`, set runtime.dependencies.singBoxBinary, or set SING_BOX_BIN."
|
|
31
|
+
: " Set runtime.dependencies.singBoxBinary or SING_BOX_BIN after installing sing-box.";
|
|
32
|
+
throw new Error(`Unable to find a usable sing-box binary.${installHint}`);
|
|
33
|
+
}
|
|
34
|
+
export async function resolveChromeDependency(input = {}) {
|
|
35
|
+
const candidates = [];
|
|
36
|
+
if (input.explicitPath) {
|
|
37
|
+
candidates.push({ path: input.explicitPath, source: "explicit" });
|
|
38
|
+
}
|
|
39
|
+
if (input.persistedPath) {
|
|
40
|
+
candidates.push({ path: input.persistedPath, source: "persisted" });
|
|
41
|
+
}
|
|
42
|
+
if (process.env.CHROME_BIN) {
|
|
43
|
+
candidates.push({ path: process.env.CHROME_BIN, source: "env" });
|
|
44
|
+
}
|
|
45
|
+
candidates.push({
|
|
46
|
+
path: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
47
|
+
source: "app-bundle",
|
|
48
|
+
});
|
|
49
|
+
candidates.push({
|
|
50
|
+
path: "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
|
|
51
|
+
source: "app-bundle",
|
|
52
|
+
});
|
|
53
|
+
for (const candidate of candidates) {
|
|
54
|
+
if (await isExecutable(candidate.path)) {
|
|
55
|
+
return candidate;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
throw new Error("Unable to find a usable Chrome binary. Install Google Chrome, set runtime.dependencies.chromeBinary, or set CHROME_BIN.");
|
|
59
|
+
}
|
|
60
|
+
export async function persistRuntimeDependencies(input) {
|
|
61
|
+
if (!input.singBox && !input.chrome) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
const raw = await readFile(input.configPath, "utf8");
|
|
65
|
+
const parsed = YAML.parse(raw);
|
|
66
|
+
const runtime = asRecord(parsed.runtime);
|
|
67
|
+
const dependencies = asRecord(runtime.dependencies);
|
|
68
|
+
let changed = false;
|
|
69
|
+
if (input.singBox) {
|
|
70
|
+
changed = updateValue(dependencies, "singBoxBinary", input.singBox.path) || changed;
|
|
71
|
+
changed = updateValue(dependencies, "singBoxSource", input.singBox.source) || changed;
|
|
72
|
+
}
|
|
73
|
+
if (input.chrome) {
|
|
74
|
+
changed = updateValue(dependencies, "chromeBinary", input.chrome.path) || changed;
|
|
75
|
+
changed = updateValue(dependencies, "chromeSource", input.chrome.source) || changed;
|
|
76
|
+
}
|
|
77
|
+
changed = updateValue(dependencies, "resolvedAt", new Date().toISOString()) || changed;
|
|
78
|
+
if (!changed) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
runtime.dependencies = dependencies;
|
|
82
|
+
parsed.runtime = runtime;
|
|
83
|
+
await writeFile(input.configPath, YAML.stringify(parsed), "utf8");
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
function asRecord(value) {
|
|
87
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
88
|
+
? { ...value }
|
|
89
|
+
: {};
|
|
90
|
+
}
|
|
91
|
+
function updateValue(target, key, value) {
|
|
92
|
+
if (target[key] === value) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
target[key] = value;
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
async function isExecutable(filePath) {
|
|
99
|
+
try {
|
|
100
|
+
await access(filePath, constants.X_OK);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function resolvePathCandidates(commandName) {
|
|
108
|
+
return (process.env.PATH ?? "")
|
|
109
|
+
.split(path.delimiter)
|
|
110
|
+
.filter((entry) => entry.length > 0)
|
|
111
|
+
.map((entry) => path.join(entry, commandName))
|
|
112
|
+
.filter((candidate, index, items) => items.indexOf(candidate) === index);
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/runtime-dependencies/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BuilderConfig } from "../../config/schema.js";
|
|
2
2
|
import type { IntentIR } from "../../domain/intent.js";
|
|
3
|
-
import type { RuntimeMode, RuntimeModeDefaults } from "../../domain/runtime-mode.js";
|
|
3
|
+
import type { DesktopRuntimeProfileKind, RuntimeMode, RuntimeModeDefaults } from "../../domain/runtime-mode.js";
|
|
4
4
|
interface RuntimeModeInferenceInput {
|
|
5
5
|
readonly phase: "onboarding" | "update";
|
|
6
6
|
readonly prompt?: string;
|
|
@@ -14,5 +14,10 @@ interface RuntimeModeScenario {
|
|
|
14
14
|
}
|
|
15
15
|
export declare function inferRuntimeMode(input: RuntimeModeInferenceInput): RuntimeMode;
|
|
16
16
|
export declare function getRuntimeModeDefaults(mode: RuntimeMode): RuntimeModeDefaults;
|
|
17
|
+
export declare function inferDesktopRuntimeProfile(input: {
|
|
18
|
+
readonly mode: RuntimeMode;
|
|
19
|
+
readonly prompt?: string;
|
|
20
|
+
readonly config?: BuilderConfig;
|
|
21
|
+
}): DesktopRuntimeProfileKind;
|
|
17
22
|
export declare function selectVerificationScenariosForRuntimeMode<T extends RuntimeModeScenario>(mode: RuntimeMode, scenarios: readonly T[]): readonly T[];
|
|
18
23
|
export {};
|
|
@@ -6,6 +6,7 @@ const processKeywords = [
|
|
|
6
6
|
"独立入口",
|
|
7
7
|
"独立的入口",
|
|
8
8
|
];
|
|
9
|
+
const tunKeywords = ["tun", "全局代理", "全局模式", "系统全局", "utun", "全局接管"];
|
|
9
10
|
export function inferRuntimeMode(input) {
|
|
10
11
|
if (input.phase === "update") {
|
|
11
12
|
return "headless-daemon";
|
|
@@ -33,6 +34,7 @@ export function getRuntimeModeDefaults(mode) {
|
|
|
33
34
|
openVisibleBrowserByDefault: true,
|
|
34
35
|
visibleBrowserScenarioLimit: 4,
|
|
35
36
|
scheduleRecommended: true,
|
|
37
|
+
desktopProfile: "system-proxy",
|
|
36
38
|
};
|
|
37
39
|
case "headless-daemon":
|
|
38
40
|
return {
|
|
@@ -41,6 +43,7 @@ export function getRuntimeModeDefaults(mode) {
|
|
|
41
43
|
openVisibleBrowserByDefault: false,
|
|
42
44
|
visibleBrowserScenarioLimit: 0,
|
|
43
45
|
scheduleRecommended: true,
|
|
46
|
+
desktopProfile: "none",
|
|
44
47
|
};
|
|
45
48
|
default:
|
|
46
49
|
return {
|
|
@@ -49,9 +52,20 @@ export function getRuntimeModeDefaults(mode) {
|
|
|
49
52
|
openVisibleBrowserByDefault: true,
|
|
50
53
|
visibleBrowserScenarioLimit: 3,
|
|
51
54
|
scheduleRecommended: false,
|
|
55
|
+
desktopProfile: "system-proxy",
|
|
52
56
|
};
|
|
53
57
|
}
|
|
54
58
|
}
|
|
59
|
+
export function inferDesktopRuntimeProfile(input) {
|
|
60
|
+
const prompt = input.prompt?.toLowerCase() ?? "";
|
|
61
|
+
if (tunKeywords.some((keyword) => prompt.includes(keyword))) {
|
|
62
|
+
return "tun";
|
|
63
|
+
}
|
|
64
|
+
if (input.config?.runtime.desktop.profile) {
|
|
65
|
+
return input.config.runtime.desktop.profile;
|
|
66
|
+
}
|
|
67
|
+
return getRuntimeModeDefaults(input.mode).desktopProfile;
|
|
68
|
+
}
|
|
55
69
|
export function selectVerificationScenariosForRuntimeMode(mode, scenarios) {
|
|
56
70
|
switch (mode) {
|
|
57
71
|
case "process-proxy":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/runtime-mode/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/runtime-mode/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ export interface ScheduleRemoveInput {
|
|
|
22
22
|
readonly launchAgentsDir?: string;
|
|
23
23
|
readonly unload?: boolean;
|
|
24
24
|
}
|
|
25
|
+
export declare const defaultLaunchAgentLabel = "org.singbox-iac.update";
|
|
25
26
|
export declare function installLaunchdSchedule(input: ScheduleInstallInput): Promise<ScheduleInstallResult>;
|
|
26
27
|
export declare function removeLaunchdSchedule(input: ScheduleRemoveInput): Promise<string>;
|
|
27
28
|
export declare function renderLaunchAgentPlist(input: {
|
|
@@ -3,7 +3,7 @@ import { constants } from "node:fs";
|
|
|
3
3
|
import { access, mkdir, rm, writeFile } from "node:fs/promises";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
|
-
const defaultLaunchAgentLabel = "org.singbox-iac.update";
|
|
6
|
+
export const defaultLaunchAgentLabel = "org.singbox-iac.update";
|
|
7
7
|
export async function installLaunchdSchedule(input) {
|
|
8
8
|
const label = input.label ?? defaultLaunchAgentLabel;
|
|
9
9
|
const launchAgentsDir = input.launchAgentsDir ?? path.join(homedir(), "Library", "LaunchAgents");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/schedule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AA6B7B,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/schedule/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { BuilderConfig } from "../../config/schema.js";
|
|
2
|
+
export interface StatusInput {
|
|
3
|
+
readonly config?: BuilderConfig;
|
|
4
|
+
readonly configPath?: string;
|
|
5
|
+
readonly singBoxBinary?: string;
|
|
6
|
+
readonly launchAgentsDir?: string;
|
|
7
|
+
readonly label?: string;
|
|
8
|
+
readonly runtimeLabel?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface StatusReport {
|
|
11
|
+
readonly generatedAt: string;
|
|
12
|
+
readonly builderConfigPath?: string;
|
|
13
|
+
readonly runtime: {
|
|
14
|
+
readonly singBoxBinary?: string;
|
|
15
|
+
readonly binarySource?: string;
|
|
16
|
+
readonly processRunning: boolean;
|
|
17
|
+
readonly processIds: readonly number[];
|
|
18
|
+
readonly mode?: string;
|
|
19
|
+
readonly desktopProfile?: string;
|
|
20
|
+
readonly runtimeLabel: string;
|
|
21
|
+
readonly launchAgentInstalled: boolean;
|
|
22
|
+
readonly launchAgentLoaded?: boolean;
|
|
23
|
+
readonly systemProxyActive?: boolean;
|
|
24
|
+
readonly tunInterfacePresent?: boolean;
|
|
25
|
+
readonly listeners: readonly StatusListener[];
|
|
26
|
+
};
|
|
27
|
+
readonly config: {
|
|
28
|
+
readonly stagingPath?: string;
|
|
29
|
+
readonly livePath?: string;
|
|
30
|
+
readonly backupPath?: string;
|
|
31
|
+
readonly liveExists: boolean;
|
|
32
|
+
};
|
|
33
|
+
readonly scheduler: {
|
|
34
|
+
readonly enabled: boolean;
|
|
35
|
+
readonly label: string;
|
|
36
|
+
readonly installed: boolean;
|
|
37
|
+
readonly loaded?: boolean;
|
|
38
|
+
readonly plistPath: string;
|
|
39
|
+
};
|
|
40
|
+
readonly history: {
|
|
41
|
+
readonly lastTransactionId?: string;
|
|
42
|
+
readonly lastTransactionStatus?: string;
|
|
43
|
+
readonly lastTransactionAt?: string;
|
|
44
|
+
};
|
|
45
|
+
readonly diagnostics: readonly StatusDiagnostic[];
|
|
46
|
+
}
|
|
47
|
+
export interface StatusListener {
|
|
48
|
+
readonly tag: string;
|
|
49
|
+
readonly listen: string;
|
|
50
|
+
readonly port: number;
|
|
51
|
+
readonly active: boolean;
|
|
52
|
+
}
|
|
53
|
+
export interface StatusDiagnostic {
|
|
54
|
+
readonly level: "info" | "warn" | "error";
|
|
55
|
+
readonly message: string;
|
|
56
|
+
}
|
|
57
|
+
export declare function collectStatusReport(input: StatusInput): Promise<StatusReport>;
|