@singbox-iac/cli 0.1.17 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README-en.md +117 -20
  2. package/README.md +54 -2
  3. package/dist/cli/commands/apply.js +3 -0
  4. package/dist/cli/commands/apply.js.map +1 -1
  5. package/dist/cli/commands/build.js +15 -1
  6. package/dist/cli/commands/build.js.map +1 -1
  7. package/dist/cli/commands/diagnose.js +21 -5
  8. package/dist/cli/commands/diagnose.js.map +1 -1
  9. package/dist/cli/commands/proxifier.js +13 -4
  10. package/dist/cli/commands/proxifier.js.map +1 -1
  11. package/dist/cli/commands/reload.js +14 -1
  12. package/dist/cli/commands/reload.js.map +1 -1
  13. package/dist/cli/commands/restart.js +52 -8
  14. package/dist/cli/commands/restart.js.map +1 -1
  15. package/dist/cli/commands/rollback.js +1 -0
  16. package/dist/cli/commands/rollback.js.map +1 -1
  17. package/dist/cli/commands/setup.js +2 -1
  18. package/dist/cli/commands/setup.js.map +1 -1
  19. package/dist/cli/commands/start.js +92 -11
  20. package/dist/cli/commands/start.js.map +1 -1
  21. package/dist/cli/commands/status.js +12 -6
  22. package/dist/cli/commands/status.js.map +1 -1
  23. package/dist/cli/commands/stop.js +24 -8
  24. package/dist/cli/commands/stop.js.map +1 -1
  25. package/dist/cli/commands/verify.js +20 -2
  26. package/dist/cli/commands/verify.js.map +1 -1
  27. package/dist/config/load-config.js +24 -1
  28. package/dist/config/load-config.js.map +1 -1
  29. package/dist/config/schema.d.ts +173 -29
  30. package/dist/config/schema.js +63 -1
  31. package/dist/config/schema.js.map +1 -1
  32. package/dist/domain/dns-plan.d.ts +11 -1
  33. package/dist/domain/intent.d.ts +2 -2
  34. package/dist/domain/verification-plan.d.ts +3 -3
  35. package/dist/modules/authoring/index.js +22 -2
  36. package/dist/modules/authoring/index.js.map +1 -1
  37. package/dist/modules/bundle-registry/index.d.ts +8 -2
  38. package/dist/modules/bundle-registry/index.js +54 -13
  39. package/dist/modules/bundle-registry/index.js.map +1 -1
  40. package/dist/modules/compiler/index.js +79 -12
  41. package/dist/modules/compiler/index.js.map +1 -1
  42. package/dist/modules/desktop-runtime/index.d.ts +50 -0
  43. package/dist/modules/desktop-runtime/index.js +236 -16
  44. package/dist/modules/desktop-runtime/index.js.map +1 -1
  45. package/dist/modules/diagnostics/index.js +93 -0
  46. package/dist/modules/diagnostics/index.js.map +1 -1
  47. package/dist/modules/dns-plan/index.js +73 -12
  48. package/dist/modules/dns-plan/index.js.map +1 -1
  49. package/dist/modules/doctor/index.js +41 -0
  50. package/dist/modules/doctor/index.js.map +1 -1
  51. package/dist/modules/intent/index.js +2 -2
  52. package/dist/modules/intent/index.js.map +1 -1
  53. package/dist/modules/layered-authoring/index.js +1 -1
  54. package/dist/modules/layered-authoring/index.js.map +1 -1
  55. package/dist/modules/manager/index.d.ts +3 -1
  56. package/dist/modules/manager/index.js +37 -2
  57. package/dist/modules/manager/index.js.map +1 -1
  58. package/dist/modules/natural-language/index.d.ts +3 -2
  59. package/dist/modules/natural-language/index.js +83 -35
  60. package/dist/modules/natural-language/index.js.map +1 -1
  61. package/dist/modules/proxifier/index.js +3 -4
  62. package/dist/modules/proxifier/index.js.map +1 -1
  63. package/dist/modules/runtime-mode/index.d.ts +1 -1
  64. package/dist/modules/runtime-mode/index.js +0 -5
  65. package/dist/modules/runtime-mode/index.js.map +1 -1
  66. package/dist/modules/runtime-watchdog/index.d.ts +10 -0
  67. package/dist/modules/runtime-watchdog/index.js +33 -0
  68. package/dist/modules/runtime-watchdog/index.js.map +1 -1
  69. package/dist/modules/status/index.d.ts +13 -0
  70. package/dist/modules/status/index.js +106 -9
  71. package/dist/modules/status/index.js.map +1 -1
  72. package/dist/modules/update/index.js +3 -1
  73. package/dist/modules/update/index.js.map +1 -1
  74. package/dist/modules/verification/index.d.ts +27 -5
  75. package/dist/modules/verification/index.js +542 -20
  76. package/dist/modules/verification/index.js.map +1 -1
  77. package/dist/modules/verification-plan/index.js +16 -6
  78. package/dist/modules/verification-plan/index.js.map +1 -1
  79. package/docs/natural-language-authoring.md +6 -0
  80. package/docs/runtime-modes.md +23 -7
  81. package/docs/runtime-on-macos.md +54 -9
  82. package/docs/sing-box-config-primer.md +10 -1
  83. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import { existsSync } from "node:fs";
2
+ import { resolveNativeProcessMatchersFromBundles } from "../bundle-registry/index.js";
2
3
  import { buildDnsPlan, compileDnsPlan, getDefaultDnsServerTag } from "../dns-plan/index.js";
3
4
  const urlTestDefaults = {
4
5
  interval: "10m",
@@ -47,6 +48,7 @@ export function compileConfig(input) {
47
48
  .map((outbound) => (typeof outbound.tag === "string" ? outbound.tag : undefined))
48
49
  .filter((tag) => typeof tag === "string"));
49
50
  const activeRuleSetTags = new Set(availableRuleSets.map((ruleSet) => ruleSet.tag));
51
+ const desktopProfile = input.config.runtime.desktop.profile;
50
52
  if (regionGroupOutbounds.length === 0) {
51
53
  warnings.push("No region groups were inferred from node tags; policy groups fell back to raw node tags.");
52
54
  }
@@ -54,7 +56,13 @@ export function compileConfig(input) {
54
56
  { action: "sniff" },
55
57
  { network: "udp", port: 443, action: "reject" },
56
58
  { protocol: "dns", action: "hijack-dns" },
57
- { inbound: ["in-proxifier"], action: "route", outbound: "Process-Proxy" },
59
+ ...(desktopProfile === "tun" &&
60
+ (input.config.runtime.desktop.tun.processRouting?.enabled ?? true)
61
+ ? compileNativeProcessRules(input.intent.processPolicies, availableOutboundTags)
62
+ : []),
63
+ ...(desktopProfile === "system-proxy"
64
+ ? [{ inbound: ["in-proxifier"], action: "route", outbound: "Process-Proxy" }]
65
+ : []),
58
66
  ];
59
67
  const builtInServiceRules = [
60
68
  {
@@ -124,6 +132,17 @@ export function compileConfig(input) {
124
132
  inbounds: buildInbounds(input.config),
125
133
  outbounds,
126
134
  route,
135
+ ...(dnsPlan.cacheFile?.enabled
136
+ ? {
137
+ experimental: {
138
+ cache_file: {
139
+ enabled: dnsPlan.cacheFile.enabled,
140
+ path: dnsPlan.cacheFile.path,
141
+ store_fakeip: dnsPlan.cacheFile.storeFakeIp,
142
+ },
143
+ },
144
+ }
145
+ : {}),
127
146
  };
128
147
  return { config, warnings };
129
148
  }
@@ -131,17 +150,19 @@ function buildInbounds(config) {
131
150
  const inbounds = [];
132
151
  const desktopProfile = config.runtime.desktop.profile;
133
152
  if (desktopProfile === "tun") {
134
- inbounds.push({
135
- type: "tun",
136
- tag: "in-tun",
137
- ...(config.runtime.desktop.tun.interfaceName
138
- ? { interface_name: config.runtime.desktop.tun.interfaceName }
139
- : {}),
140
- address: [...config.runtime.desktop.tun.addresses],
141
- auto_route: config.runtime.desktop.tun.autoRoute,
142
- strict_route: config.runtime.desktop.tun.strictRoute,
143
- stack: "system",
144
- });
153
+ return [
154
+ {
155
+ type: "tun",
156
+ tag: "in-tun",
157
+ ...(config.runtime.desktop.tun.interfaceName
158
+ ? { interface_name: config.runtime.desktop.tun.interfaceName }
159
+ : {}),
160
+ address: [...config.runtime.desktop.tun.addresses],
161
+ auto_route: config.runtime.desktop.tun.autoRoute,
162
+ strict_route: config.runtime.desktop.tun.strictRoute,
163
+ stack: "system",
164
+ },
165
+ ];
145
166
  }
146
167
  inbounds.push({
147
168
  type: "mixed",
@@ -158,6 +179,52 @@ function buildInbounds(config) {
158
179
  });
159
180
  return inbounds;
160
181
  }
182
+ function compileNativeProcessRules(policies, availableOutboundTags) {
183
+ const rules = [];
184
+ for (const [index, policy] of policies.entries()) {
185
+ const policyName = policy.name ?? `process policy #${index + 1}`;
186
+ if (!availableOutboundTags.has(policy.outboundGroup)) {
187
+ throw new Error(`Intent process rule "${policyName}" references unknown outbound "${policy.outboundGroup}".`);
188
+ }
189
+ const processNames = dedupeStrings([
190
+ ...(policy.match.processName ?? []),
191
+ ...resolveNativeProcessMatchersFromBundles(policy.match.bundleId ?? [])
192
+ .map((matcher) => matcher.processName)
193
+ .filter((matcher) => typeof matcher === "string" && matcher.length > 0),
194
+ ]);
195
+ const processPaths = dedupeStrings(resolveNativeProcessMatchersFromBundles(policy.match.bundleId ?? [])
196
+ .map((matcher) => matcher.processPath)
197
+ .filter((matcher) => typeof matcher === "string" && matcher.length > 0));
198
+ const processPathRegexes = dedupeStrings(resolveNativeProcessMatchersFromBundles(policy.match.bundleId ?? [])
199
+ .map((matcher) => matcher.processPathRegex)
200
+ .filter((matcher) => typeof matcher === "string" && matcher.length > 0));
201
+ if (processNames.length === 0 && processPaths.length === 0 && processPathRegexes.length === 0) {
202
+ continue;
203
+ }
204
+ if (processNames.length > 0) {
205
+ rules.push({
206
+ process_name: processNames,
207
+ action: "route",
208
+ outbound: policy.outboundGroup,
209
+ });
210
+ }
211
+ if (processPaths.length > 0) {
212
+ rules.push({
213
+ process_path: processPaths,
214
+ action: "route",
215
+ outbound: policy.outboundGroup,
216
+ });
217
+ }
218
+ if (processPathRegexes.length > 0) {
219
+ rules.push({
220
+ process_path_regex: processPathRegexes,
221
+ action: "route",
222
+ outbound: policy.outboundGroup,
223
+ });
224
+ }
225
+ }
226
+ return rules;
227
+ }
161
228
  function compileIntentSitePolicies(policies, placement, availableOutboundTags, activeRuleSetTags) {
162
229
  return policies
163
230
  .filter((policy) => policy.placement === placement)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/compiler/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/compiler/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import type { BuilderConfig } from "../../config/schema.js";
2
2
  import type { DesktopRuntimeProfileKind } from "../../domain/runtime-mode.js";
3
+ export type RuntimeServiceKind = "launch-agent" | "launch-daemon";
4
+ export type DesktopRuntimePrivilegeAction = "install" | "remove" | "recover" | "restart" | "reload";
3
5
  export interface DesktopRuntimeProfile {
4
6
  readonly kind: DesktopRuntimeProfileKind;
5
7
  readonly tun?: {
@@ -12,6 +14,7 @@ export interface DesktopRuntimeProfile {
12
14
  export interface RuntimeAgentInstallInput {
13
15
  readonly liveConfigPath: string;
14
16
  readonly singBoxBinary: string;
17
+ readonly serviceKind?: RuntimeServiceKind;
15
18
  readonly label?: string;
16
19
  readonly launchAgentsDir?: string;
17
20
  readonly logsDir?: string;
@@ -26,14 +29,17 @@ export interface RuntimeAgentInstallResult {
26
29
  readonly stderrPath: string;
27
30
  }
28
31
  export interface RuntimeAgentRemoveInput {
32
+ readonly serviceKind?: RuntimeServiceKind;
29
33
  readonly label?: string;
30
34
  readonly launchAgentsDir?: string;
31
35
  readonly unload?: boolean;
32
36
  }
33
37
  export interface RuntimeAgentRestartInput {
38
+ readonly serviceKind?: RuntimeServiceKind;
34
39
  readonly label?: string;
35
40
  }
36
41
  export interface RuntimeAgentRecoverInput {
42
+ readonly serviceKind?: RuntimeServiceKind;
37
43
  readonly label?: string;
38
44
  readonly launchAgentsDir?: string;
39
45
  }
@@ -42,9 +48,53 @@ export interface RuntimeAgentRecoverResult {
42
48
  readonly plistPath: string;
43
49
  readonly method: "kickstart" | "bootstrap";
44
50
  }
51
+ export interface DesktopRuntimePrivilegeState {
52
+ readonly requiresRoot: boolean;
53
+ readonly isRoot: boolean;
54
+ readonly reasons: readonly string[];
55
+ readonly rerunCommand?: string;
56
+ }
45
57
  export declare const defaultRuntimeLaunchAgentLabel = "org.singbox-iac.runtime";
58
+ export declare const defaultRuntimeLaunchDaemonLabel = "org.singbox-iac.runtime.tun";
46
59
  export declare const defaultRuntimeWatchdogLaunchAgentLabel = "org.singbox-iac.runtime.watchdog";
47
60
  export declare function resolveDesktopRuntimeProfile(config: BuilderConfig): DesktopRuntimeProfile;
61
+ export declare function resolveDesktopRuntimeServiceKind(profile: DesktopRuntimeProfileKind): RuntimeServiceKind;
62
+ export declare function resolveDesktopRuntimeServiceLabel(config: BuilderConfig): string;
63
+ export declare function resolveDesktopRuntimePlistDirectory(input: {
64
+ readonly serviceKind: RuntimeServiceKind;
65
+ readonly launchAgentsDir?: string;
66
+ }): string;
67
+ export declare function resolveDesktopRuntimePlistPath(input: {
68
+ readonly serviceKind: RuntimeServiceKind;
69
+ readonly label: string;
70
+ readonly launchAgentsDir?: string;
71
+ }): string;
72
+ export declare function isProcessRoot(uid?: number | undefined): boolean;
73
+ export declare function resolveDesktopRuntimePrivilegeState(input: {
74
+ readonly serviceKind: RuntimeServiceKind;
75
+ readonly action: DesktopRuntimePrivilegeAction;
76
+ readonly launchAgentsDir?: string;
77
+ readonly load?: boolean;
78
+ readonly unload?: boolean;
79
+ readonly configPath?: string;
80
+ readonly uid?: number;
81
+ }): DesktopRuntimePrivilegeState;
82
+ export declare function assertDesktopRuntimePrivileges(input: {
83
+ readonly serviceKind: RuntimeServiceKind;
84
+ readonly action: DesktopRuntimePrivilegeAction;
85
+ readonly launchAgentsDir?: string;
86
+ readonly load?: boolean;
87
+ readonly unload?: boolean;
88
+ readonly configPath?: string;
89
+ }): void;
90
+ export declare function isDesktopRuntimeServiceLoaded(input: {
91
+ readonly serviceKind: RuntimeServiceKind;
92
+ readonly label: string;
93
+ }): Promise<boolean>;
94
+ export declare function resolveDesktopRuntimeServicePid(input: {
95
+ readonly serviceKind: RuntimeServiceKind;
96
+ readonly label: string;
97
+ }): Promise<number | undefined>;
48
98
  export declare function updateBuilderDesktopRuntime(input: {
49
99
  readonly configPath: string;
50
100
  readonly profile: DesktopRuntimeProfileKind;
@@ -5,6 +5,7 @@ import { homedir } from "node:os";
5
5
  import path from "node:path";
6
6
  import YAML from "yaml";
7
7
  export const defaultRuntimeLaunchAgentLabel = "org.singbox-iac.runtime";
8
+ export const defaultRuntimeLaunchDaemonLabel = "org.singbox-iac.runtime.tun";
8
9
  export const defaultRuntimeWatchdogLaunchAgentLabel = "org.singbox-iac.runtime.watchdog";
9
10
  export function resolveDesktopRuntimeProfile(config) {
10
11
  if (config.runtime.desktop.profile === "tun") {
@@ -22,6 +23,123 @@ export function resolveDesktopRuntimeProfile(config) {
22
23
  }
23
24
  return { kind: config.runtime.desktop.profile };
24
25
  }
26
+ export function resolveDesktopRuntimeServiceKind(profile) {
27
+ return profile === "tun" ? "launch-daemon" : "launch-agent";
28
+ }
29
+ export function resolveDesktopRuntimeServiceLabel(config) {
30
+ return config.runtime.desktop.profile === "tun"
31
+ ? config.runtime.desktop.tun.launchDaemonLabel
32
+ : config.runtime.desktop.launchAgentLabel;
33
+ }
34
+ export function resolveDesktopRuntimePlistDirectory(input) {
35
+ if (input.launchAgentsDir) {
36
+ return input.launchAgentsDir;
37
+ }
38
+ return input.serviceKind === "launch-daemon"
39
+ ? "/Library/LaunchDaemons"
40
+ : path.join(homedir(), "Library", "LaunchAgents");
41
+ }
42
+ export function resolveDesktopRuntimePlistPath(input) {
43
+ return path.join(resolveDesktopRuntimePlistDirectory(input), `${input.label}.plist`);
44
+ }
45
+ export function isProcessRoot(uid = resolveCurrentUid()) {
46
+ return uid === 0;
47
+ }
48
+ export function resolveDesktopRuntimePrivilegeState(input) {
49
+ const isRoot = isProcessRoot(input.uid);
50
+ if (input.serviceKind !== "launch-daemon") {
51
+ return {
52
+ requiresRoot: false,
53
+ isRoot,
54
+ reasons: [],
55
+ };
56
+ }
57
+ const plistDirectory = resolveDesktopRuntimePlistDirectory({
58
+ serviceKind: input.serviceKind,
59
+ ...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
60
+ });
61
+ const reasons = [
62
+ "tun runtime uses a root-managed LaunchDaemon on macOS.",
63
+ "native-process routing and utun lifecycle depend on a root-owned sing-box runtime.",
64
+ ];
65
+ let requiresRoot = false;
66
+ if (plistDirectory === "/Library/LaunchDaemons") {
67
+ reasons.push("this action writes or removes files under /Library/LaunchDaemons.");
68
+ requiresRoot = true;
69
+ }
70
+ if (input.action === "restart" ||
71
+ input.action === "recover" ||
72
+ input.action === "reload" ||
73
+ (input.action === "install" && input.load !== false) ||
74
+ (input.action === "remove" && input.unload !== false)) {
75
+ reasons.push("this action touches the system launchd domain.");
76
+ requiresRoot = true;
77
+ }
78
+ return {
79
+ requiresRoot,
80
+ isRoot,
81
+ reasons,
82
+ ...(requiresRoot
83
+ ? {
84
+ rerunCommand: renderDesktopRuntimeSudoCommand({
85
+ action: input.action,
86
+ ...(input.configPath ? { configPath: input.configPath } : {}),
87
+ }),
88
+ }
89
+ : {}),
90
+ };
91
+ }
92
+ export function assertDesktopRuntimePrivileges(input) {
93
+ const state = resolveDesktopRuntimePrivilegeState(input);
94
+ if (!state.requiresRoot || state.isRoot) {
95
+ return;
96
+ }
97
+ const lines = [
98
+ "TUN runtime requires root on macOS.",
99
+ ...(state.rerunCommand ? ["Re-run with:", ` ${state.rerunCommand}`] : []),
100
+ "Reason:",
101
+ ...state.reasons.map((reason) => `- ${reason}`),
102
+ ];
103
+ throw new Error(lines.join("\n"));
104
+ }
105
+ export async function isDesktopRuntimeServiceLoaded(input) {
106
+ return new Promise((resolve, reject) => {
107
+ const child = spawn("/bin/launchctl", ["print", launchctlDomainService(input.serviceKind, input.label)], {
108
+ stdio: ["ignore", "ignore", "ignore"],
109
+ });
110
+ child.on("error", reject);
111
+ child.on("close", (code) => resolve(code === 0));
112
+ });
113
+ }
114
+ export async function resolveDesktopRuntimeServicePid(input) {
115
+ return new Promise((resolve, reject) => {
116
+ const child = spawn("/bin/launchctl", ["print", launchctlDomainService(input.serviceKind, input.label)], {
117
+ stdio: ["ignore", "pipe", "pipe"],
118
+ });
119
+ let stdout = "";
120
+ let stderr = "";
121
+ child.stdout.on("data", (chunk) => {
122
+ stdout += chunk.toString();
123
+ });
124
+ child.stderr.on("data", (chunk) => {
125
+ stderr += chunk.toString();
126
+ });
127
+ child.on("error", reject);
128
+ child.on("close", (code) => {
129
+ if (code !== 0) {
130
+ resolve(undefined);
131
+ return;
132
+ }
133
+ const match = `${stdout}\n${stderr}`.match(/\bpid\s*=\s*(\d+)\b/);
134
+ if (!match?.[1]) {
135
+ resolve(undefined);
136
+ return;
137
+ }
138
+ const pid = Number.parseInt(match[1], 10);
139
+ resolve(Number.isInteger(pid) && pid > 0 ? pid : undefined);
140
+ });
141
+ });
142
+ }
25
143
  export async function updateBuilderDesktopRuntime(input) {
26
144
  const raw = await readFile(input.configPath, "utf8");
27
145
  const parsed = YAML.parse(raw);
@@ -35,10 +153,25 @@ export async function updateBuilderDesktopRuntime(input) {
35
153
  ...(parsed.runtime?.desktop?.tun ?? {}),
36
154
  autoRoute: parsed.runtime?.desktop?.tun?.autoRoute ?? true,
37
155
  strictRoute: parsed.runtime?.desktop?.tun?.strictRoute ?? false,
156
+ dnsMode: parsed.runtime?.desktop?.tun?.dnsMode ?? "fake-ip",
157
+ launchDaemonLabel: parsed.runtime?.desktop?.tun?.launchDaemonLabel ?? defaultRuntimeLaunchDaemonLabel,
38
158
  addresses: parsed.runtime?.desktop?.tun?.addresses ?? [
39
159
  "172.19.0.1/30",
40
160
  "fdfe:dcba:9876::1/126",
41
161
  ],
162
+ processRouting: {
163
+ enabled: parsed.runtime?.desktop?.tun?.processRouting?.enabled ?? true,
164
+ },
165
+ fakeIp: {
166
+ inet4Range: parsed.runtime?.desktop?.tun?.fakeIp?.inet4Range ?? "198.18.0.0/15",
167
+ inet6Range: parsed.runtime?.desktop?.tun?.fakeIp?.inet6Range ?? "fc00::/18",
168
+ },
169
+ cache: {
170
+ enabled: parsed.runtime?.desktop?.tun?.cache?.enabled ?? true,
171
+ path: parsed.runtime?.desktop?.tun?.cache?.path ??
172
+ path.join(homedir(), ".config", "singbox-iac", "runtime", "tun-cache.db"),
173
+ storeFakeIp: parsed.runtime?.desktop?.tun?.cache?.storeFakeIp ?? true,
174
+ },
42
175
  },
43
176
  watchdog: {
44
177
  ...(parsed.runtime?.desktop?.watchdog ?? {}),
@@ -52,19 +185,33 @@ export async function updateBuilderDesktopRuntime(input) {
52
185
  await writeFile(input.configPath, YAML.stringify(parsed), "utf8");
53
186
  }
54
187
  export async function installDesktopRuntimeAgent(input) {
55
- const label = input.label ?? defaultRuntimeLaunchAgentLabel;
56
- const launchAgentsDir = input.launchAgentsDir ?? path.join(homedir(), "Library", "LaunchAgents");
188
+ const serviceKind = input.serviceKind ?? "launch-agent";
189
+ const label = input.label ??
190
+ (serviceKind === "launch-daemon"
191
+ ? defaultRuntimeLaunchDaemonLabel
192
+ : defaultRuntimeLaunchAgentLabel);
193
+ const launchAgentsDir = resolveDesktopRuntimePlistDirectory({
194
+ serviceKind,
195
+ ...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
196
+ });
57
197
  const logsDir = input.logsDir ?? path.join(homedir(), ".config", "singbox-iac", "logs");
58
198
  const plistPath = path.join(launchAgentsDir, `${label}.plist`);
59
199
  const stdoutPath = path.join(logsDir, `${label}.stdout.log`);
60
200
  const stderrPath = path.join(logsDir, `${label}.stderr.log`);
201
+ assertDesktopRuntimePrivileges({
202
+ serviceKind,
203
+ action: "install",
204
+ ...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
205
+ ...(input.load !== undefined ? { load: input.load } : {}),
206
+ });
61
207
  if (input.force !== true && (await pathExists(plistPath))) {
62
208
  throw new Error(`Runtime LaunchAgent already exists: ${plistPath}`);
63
209
  }
64
210
  await mkdir(launchAgentsDir, { recursive: true });
65
211
  await mkdir(logsDir, { recursive: true });
212
+ await ensureRuntimeCacheDirectory(input.liveConfigPath);
66
213
  if (input.load !== false) {
67
- await runLaunchctl(["bootout", launchctlDomainService(label)], true);
214
+ await runLaunchctl(["bootout", launchctlDomainService(serviceKind, label)], true);
68
215
  }
69
216
  const workingDirectory = input.workingDirectory ?? process.cwd();
70
217
  const plist = renderRuntimeLaunchAgentPlist({
@@ -77,7 +224,7 @@ export async function installDesktopRuntimeAgent(input) {
77
224
  });
78
225
  await writeFile(plistPath, plist, "utf8");
79
226
  if (input.load !== false) {
80
- await runLaunchctl(["bootstrap", launchctlDomain(), plistPath]);
227
+ await runLaunchctl(["bootstrap", launchctlDomain(serviceKind), plistPath]);
81
228
  }
82
229
  return {
83
230
  label,
@@ -86,30 +233,83 @@ export async function installDesktopRuntimeAgent(input) {
86
233
  stderrPath,
87
234
  };
88
235
  }
236
+ async function ensureRuntimeCacheDirectory(liveConfigPath) {
237
+ const cacheFilePath = await resolveRuntimeCacheFilePath(liveConfigPath);
238
+ if (!cacheFilePath) {
239
+ return;
240
+ }
241
+ await mkdir(path.dirname(cacheFilePath), { recursive: true });
242
+ }
243
+ async function resolveRuntimeCacheFilePath(liveConfigPath) {
244
+ try {
245
+ const parsed = JSON.parse(await readFile(liveConfigPath, "utf8"));
246
+ const cacheFile = parsed.experimental?.cache_file;
247
+ if (cacheFile?.enabled === false || typeof cacheFile?.path !== "string" || !cacheFile.path) {
248
+ return undefined;
249
+ }
250
+ return cacheFile.path;
251
+ }
252
+ catch {
253
+ return undefined;
254
+ }
255
+ }
89
256
  export async function removeDesktopRuntimeAgent(input) {
90
- const label = input.label ?? defaultRuntimeLaunchAgentLabel;
91
- const launchAgentsDir = input.launchAgentsDir ?? path.join(homedir(), "Library", "LaunchAgents");
257
+ const serviceKind = input.serviceKind ?? "launch-agent";
258
+ const label = input.label ??
259
+ (serviceKind === "launch-daemon"
260
+ ? defaultRuntimeLaunchDaemonLabel
261
+ : defaultRuntimeLaunchAgentLabel);
262
+ const launchAgentsDir = resolveDesktopRuntimePlistDirectory({
263
+ serviceKind,
264
+ ...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
265
+ });
92
266
  const plistPath = path.join(launchAgentsDir, `${label}.plist`);
267
+ assertDesktopRuntimePrivileges({
268
+ serviceKind,
269
+ action: "remove",
270
+ ...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
271
+ ...(input.unload !== undefined ? { unload: input.unload } : {}),
272
+ });
93
273
  if (input.unload !== false) {
94
- await runLaunchctl(["bootout", launchctlDomainService(label)], true);
274
+ await runLaunchctl(["bootout", launchctlDomainService(serviceKind, label)], true);
95
275
  }
96
276
  await rm(plistPath, { force: true });
97
277
  return plistPath;
98
278
  }
99
279
  export async function restartDesktopRuntimeAgent(input) {
100
- const label = input.label ?? defaultRuntimeLaunchAgentLabel;
101
- await runLaunchctl(["kickstart", "-k", launchctlDomainService(label)]);
280
+ const serviceKind = input.serviceKind ?? "launch-agent";
281
+ const label = input.label ??
282
+ (serviceKind === "launch-daemon"
283
+ ? defaultRuntimeLaunchDaemonLabel
284
+ : defaultRuntimeLaunchAgentLabel);
285
+ assertDesktopRuntimePrivileges({
286
+ serviceKind,
287
+ action: "restart",
288
+ });
289
+ await runLaunchctl(["kickstart", "-k", launchctlDomainService(serviceKind, label)]);
102
290
  return label;
103
291
  }
104
292
  export async function recoverDesktopRuntimeAgent(input) {
105
- const label = input.label ?? defaultRuntimeLaunchAgentLabel;
106
- const launchAgentsDir = input.launchAgentsDir ?? path.join(homedir(), "Library", "LaunchAgents");
293
+ const serviceKind = input.serviceKind ?? "launch-agent";
294
+ const label = input.label ??
295
+ (serviceKind === "launch-daemon"
296
+ ? defaultRuntimeLaunchDaemonLabel
297
+ : defaultRuntimeLaunchAgentLabel);
298
+ const launchAgentsDir = resolveDesktopRuntimePlistDirectory({
299
+ serviceKind,
300
+ ...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
301
+ });
107
302
  const plistPath = path.join(launchAgentsDir, `${label}.plist`);
303
+ assertDesktopRuntimePrivileges({
304
+ serviceKind,
305
+ action: "recover",
306
+ ...(input.launchAgentsDir ? { launchAgentsDir: input.launchAgentsDir } : {}),
307
+ });
108
308
  if (!(await pathExists(plistPath))) {
109
309
  throw new Error(`Runtime LaunchAgent does not exist: ${plistPath}`);
110
310
  }
111
311
  try {
112
- await runLaunchctl(["kickstart", "-k", launchctlDomainService(label)]);
312
+ await runLaunchctl(["kickstart", "-k", launchctlDomainService(serviceKind, label)]);
113
313
  return {
114
314
  label,
115
315
  plistPath,
@@ -118,7 +318,7 @@ export async function recoverDesktopRuntimeAgent(input) {
118
318
  }
119
319
  catch (kickstartError) {
120
320
  try {
121
- await runLaunchctl(["bootstrap", launchctlDomain(), plistPath]);
321
+ await runLaunchctl(["bootstrap", launchctlDomain(serviceKind), plistPath]);
122
322
  return {
123
323
  label,
124
324
  plistPath,
@@ -176,14 +376,28 @@ async function pathExists(filePath) {
176
376
  return false;
177
377
  }
178
378
  }
179
- function launchctlDomain() {
379
+ function launchctlDomain(serviceKind) {
380
+ if (serviceKind === "launch-daemon") {
381
+ return "system";
382
+ }
180
383
  if (typeof process.getuid !== "function") {
181
384
  throw new Error("desktop runtime launchd control requires process.getuid().");
182
385
  }
183
386
  return `gui/${process.getuid()}`;
184
387
  }
185
- function launchctlDomainService(label) {
186
- return `${launchctlDomain()}/${label}`;
388
+ function launchctlDomainService(serviceKind, label) {
389
+ return `${launchctlDomain(serviceKind)}/${label}`;
390
+ }
391
+ function renderDesktopRuntimeSudoCommand(input) {
392
+ const command = input.action === "install"
393
+ ? "start"
394
+ : input.action === "remove"
395
+ ? "stop"
396
+ : input.action === "recover"
397
+ ? "start"
398
+ : input.action;
399
+ const configFlag = input.configPath ? ` -c ${shellEscape(input.configPath)}` : "";
400
+ return `sudo singbox-iac ${command}${configFlag}`;
187
401
  }
188
402
  async function runLaunchctl(args, allowFailure = false) {
189
403
  await new Promise((resolve, reject) => {
@@ -226,4 +440,10 @@ function escapeXml(value) {
226
440
  .replaceAll('"', "&quot;")
227
441
  .replaceAll("'", "&apos;");
228
442
  }
443
+ function shellEscape(value) {
444
+ return `'${value.replaceAll("'", `'\"'\"'`)}'`;
445
+ }
446
+ function resolveCurrentUid() {
447
+ return typeof process.getuid === "function" ? process.getuid() : undefined;
448
+ }
229
449
  //# sourceMappingURL=index.js.map