@singbox-iac/cli 0.1.15 → 0.1.17

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 (80) hide show
  1. package/README.md +70 -24
  2. package/dist/cli/commands/author.d.ts +2 -0
  3. package/dist/cli/commands/author.js +49 -19
  4. package/dist/cli/commands/author.js.map +1 -1
  5. package/dist/cli/commands/build.js +25 -13
  6. package/dist/cli/commands/build.js.map +1 -1
  7. package/dist/cli/commands/diagnose.d.ts +2 -0
  8. package/dist/cli/commands/diagnose.js +120 -0
  9. package/dist/cli/commands/diagnose.js.map +1 -0
  10. package/dist/cli/commands/doctor.js +21 -1
  11. package/dist/cli/commands/doctor.js.map +1 -1
  12. package/dist/cli/commands/restart.js +42 -2
  13. package/dist/cli/commands/restart.js.map +1 -1
  14. package/dist/cli/commands/rulesets.d.ts +2 -0
  15. package/dist/cli/commands/rulesets.js +125 -0
  16. package/dist/cli/commands/rulesets.js.map +1 -0
  17. package/dist/cli/commands/runtime-watchdog.d.ts +2 -0
  18. package/dist/cli/commands/runtime-watchdog.js +45 -0
  19. package/dist/cli/commands/runtime-watchdog.js.map +1 -0
  20. package/dist/cli/commands/setup.js +190 -20
  21. package/dist/cli/commands/setup.js.map +1 -1
  22. package/dist/cli/commands/start.js +29 -1
  23. package/dist/cli/commands/start.js.map +1 -1
  24. package/dist/cli/commands/status.js +135 -28
  25. package/dist/cli/commands/status.js.map +1 -1
  26. package/dist/cli/commands/stop.js +19 -1
  27. package/dist/cli/commands/stop.js.map +1 -1
  28. package/dist/cli/commands/use.js +3 -1
  29. package/dist/cli/commands/use.js.map +1 -1
  30. package/dist/cli/index.js +12 -4
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/config/schema.d.ts +49 -6
  33. package/dist/config/schema.js +17 -0
  34. package/dist/config/schema.js.map +1 -1
  35. package/dist/modules/authoring/index.js +25 -8
  36. package/dist/modules/authoring/index.js.map +1 -1
  37. package/dist/modules/build/index.d.ts +4 -1
  38. package/dist/modules/build/index.js +17 -4
  39. package/dist/modules/build/index.js.map +1 -1
  40. package/dist/modules/bundle-registry/index.d.ts +46 -0
  41. package/dist/modules/bundle-registry/index.js +650 -0
  42. package/dist/modules/bundle-registry/index.js.map +1 -0
  43. package/dist/modules/desktop-runtime/index.d.ts +11 -0
  44. package/dist/modules/desktop-runtime/index.js +41 -0
  45. package/dist/modules/desktop-runtime/index.js.map +1 -1
  46. package/dist/modules/diagnostics/index.d.ts +28 -0
  47. package/dist/modules/diagnostics/index.js +288 -0
  48. package/dist/modules/diagnostics/index.js.map +1 -0
  49. package/dist/modules/layered-authoring/index.d.ts +45 -0
  50. package/dist/modules/layered-authoring/index.js +549 -0
  51. package/dist/modules/layered-authoring/index.js.map +1 -0
  52. package/dist/modules/natural-language/index.d.ts +6 -3
  53. package/dist/modules/natural-language/index.js +74 -69
  54. package/dist/modules/natural-language/index.js.map +1 -1
  55. package/dist/modules/proxifier/index.d.ts +1 -14
  56. package/dist/modules/proxifier/index.js +10 -139
  57. package/dist/modules/proxifier/index.js.map +1 -1
  58. package/dist/modules/rule-set-catalog/index.d.ts +25 -0
  59. package/dist/modules/rule-set-catalog/index.js +135 -0
  60. package/dist/modules/rule-set-catalog/index.js.map +1 -0
  61. package/dist/modules/runtime-watchdog/index.d.ts +73 -0
  62. package/dist/modules/runtime-watchdog/index.js +532 -0
  63. package/dist/modules/runtime-watchdog/index.js.map +1 -0
  64. package/dist/modules/status/index.d.ts +48 -0
  65. package/dist/modules/status/index.js +254 -23
  66. package/dist/modules/status/index.js.map +1 -1
  67. package/dist/modules/system-proxy/index.d.ts +31 -0
  68. package/dist/modules/system-proxy/index.js +164 -0
  69. package/dist/modules/system-proxy/index.js.map +1 -0
  70. package/docs/agent-context.md +131 -0
  71. package/docs/natural-language-authoring.md +106 -1
  72. package/docs/proxifier-onboarding.md +15 -4
  73. package/docs/rule-templates.md +2 -0
  74. package/docs/runtime-modes.md +84 -0
  75. package/docs/runtime-on-macos.md +53 -4
  76. package/examples/builder.config.yaml +60 -0
  77. package/package.json +3 -2
  78. package/dist/cli/commands/quickstart.d.ts +0 -2
  79. package/dist/cli/commands/quickstart.js +0 -54
  80. package/dist/cli/commands/quickstart.js.map +0 -1
@@ -0,0 +1,532 @@
1
+ import { spawn } from "node:child_process";
2
+ import { constants } from "node:fs";
3
+ import { access, mkdir, readFile, rm, writeFile } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import path from "node:path";
6
+ import { recoverDesktopRuntimeAgent, } from "../desktop-runtime/index.js";
7
+ import { collectSystemProxyRuntimeSnapshot, } from "../system-proxy/index.js";
8
+ export const defaultRuntimeWatchdogLaunchAgentLabel = "org.singbox-iac.runtime.watchdog";
9
+ export const defaultRuntimeWatchdogRestartCooldownMs = 5 * 60 * 1000;
10
+ export async function installRuntimeWatchdogAgent(input) {
11
+ const label = input.label ?? defaultRuntimeWatchdogLaunchAgentLabel;
12
+ const launchAgentsDir = input.launchAgentsDir ?? path.join(homedir(), "Library", "LaunchAgents");
13
+ const logsDir = input.logsDir ?? path.join(homedir(), ".config", "singbox-iac", "logs");
14
+ const plistPath = path.join(launchAgentsDir, `${label}.plist`);
15
+ const stdoutPath = path.join(logsDir, `${label}.stdout.log`);
16
+ const stderrPath = path.join(logsDir, `${label}.stderr.log`);
17
+ if (input.force !== true && (await pathExists(plistPath))) {
18
+ throw new Error(`Runtime watchdog LaunchAgent already exists: ${plistPath}`);
19
+ }
20
+ await mkdir(launchAgentsDir, { recursive: true });
21
+ await mkdir(logsDir, { recursive: true });
22
+ if (input.load !== false) {
23
+ await runLaunchctl(["bootout", launchctlDomainService(label)], true);
24
+ }
25
+ const workingDirectory = input.workingDirectory ?? process.cwd();
26
+ const programArguments = resolveWatchdogProgramArguments({
27
+ cliEntrypoint: path.resolve(input.cliEntrypoint),
28
+ configPath: path.resolve(input.configPath),
29
+ workingDirectory,
30
+ });
31
+ const plist = renderRuntimeWatchdogLaunchAgentPlist({
32
+ label,
33
+ intervalSeconds: input.intervalSeconds,
34
+ workingDirectory,
35
+ stdoutPath,
36
+ stderrPath,
37
+ programArguments,
38
+ });
39
+ await writeFile(plistPath, plist, "utf8");
40
+ if (input.load !== false) {
41
+ await runLaunchctl(["bootstrap", launchctlDomain(), plistPath]);
42
+ }
43
+ return {
44
+ label,
45
+ plistPath,
46
+ stdoutPath,
47
+ stderrPath,
48
+ };
49
+ }
50
+ export async function removeRuntimeWatchdogAgent(input) {
51
+ const label = input.label ?? defaultRuntimeWatchdogLaunchAgentLabel;
52
+ const launchAgentsDir = input.launchAgentsDir ?? path.join(homedir(), "Library", "LaunchAgents");
53
+ const plistPath = path.join(launchAgentsDir, `${label}.plist`);
54
+ if (input.unload !== false) {
55
+ await runLaunchctl(["bootout", launchctlDomainService(label)], true);
56
+ }
57
+ await rm(plistPath, { force: true });
58
+ return plistPath;
59
+ }
60
+ export function renderRuntimeWatchdogLaunchAgentPlist(input) {
61
+ return `<?xml version="1.0" encoding="UTF-8"?>
62
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
63
+ <plist version="1.0">
64
+ <dict>
65
+ <key>Label</key>
66
+ <string>${escapeXml(input.label)}</string>
67
+ <key>ProgramArguments</key>
68
+ <array>
69
+ ${input.programArguments
70
+ .map((argument) => ` <string>${escapeXml(argument)}</string>`)
71
+ .join("\n")}
72
+ </array>
73
+ <key>WorkingDirectory</key>
74
+ <string>${escapeXml(input.workingDirectory)}</string>
75
+ <key>StartInterval</key>
76
+ <integer>${input.intervalSeconds}</integer>
77
+ <key>RunAtLoad</key>
78
+ <true/>
79
+ <key>StandardOutPath</key>
80
+ <string>${escapeXml(input.stdoutPath)}</string>
81
+ <key>StandardErrorPath</key>
82
+ <string>${escapeXml(input.stderrPath)}</string>
83
+ <key>EnvironmentVariables</key>
84
+ <dict>
85
+ <key>PATH</key>
86
+ <string>${escapeXml(resolveLaunchdPath())}</string>
87
+ </dict>
88
+ </dict>
89
+ </plist>
90
+ `;
91
+ }
92
+ export async function runRuntimeWatchdogTick(input) {
93
+ const label = input.config.runtime.desktop.watchdog.launchAgentLabel;
94
+ const runtimeLabel = input.config.runtime.desktop.launchAgentLabel;
95
+ const statePath = input.statePath ?? resolveRuntimeWatchdogStatePath(label);
96
+ const previousState = await readRuntimeWatchdogState(statePath);
97
+ const now = new Date().toISOString();
98
+ if (input.config.runtime.desktop.profile !== "system-proxy") {
99
+ const state = await persistRuntimeWatchdogState(statePath, previousState, createRuntimeWatchdogState({
100
+ previousState,
101
+ label,
102
+ now,
103
+ lastResult: "unsupported-profile",
104
+ lastMessage: `Watchdog skipped because desktop profile is ${input.config.runtime.desktop.profile}.`,
105
+ }));
106
+ return { statePath, state };
107
+ }
108
+ if (input.config.runtime.desktop.watchdog.enabled !== true) {
109
+ const state = await persistRuntimeWatchdogState(statePath, previousState, createRuntimeWatchdogState({
110
+ previousState,
111
+ label,
112
+ now,
113
+ lastResult: "disabled",
114
+ lastMessage: "Watchdog is disabled in the builder config.",
115
+ }));
116
+ return { statePath, state };
117
+ }
118
+ const collectSnapshot = input.snapshotCollector ?? collectSystemProxyRuntimeSnapshot;
119
+ const commandRunner = input.commandRunner ?? runCommand;
120
+ const runtimeAgentRecoverer = input.runtimeAgentRecoverer ?? recoverDesktopRuntimeAgent;
121
+ const snapshot = await collectSnapshot(input.config);
122
+ if (snapshot.systemProxy.state === "unknown") {
123
+ const state = await persistRuntimeWatchdogState(statePath, previousState, createRuntimeWatchdogState({
124
+ previousState,
125
+ label,
126
+ now,
127
+ lastResult: "proxy-unknown",
128
+ lastMessage: "The current macOS proxy state could not be inspected.",
129
+ }));
130
+ return { statePath, state };
131
+ }
132
+ if (isHealthyRuntimeSnapshot(snapshot)) {
133
+ const state = await persistRuntimeWatchdogState(statePath, previousState, createRuntimeWatchdogState({
134
+ previousState,
135
+ label,
136
+ now,
137
+ lastResult: "healthy",
138
+ lastMessage: "Runtime and macOS proxy state are healthy.",
139
+ }));
140
+ return { statePath, state };
141
+ }
142
+ const trigger = resolveRuntimeWatchdogTrigger(snapshot);
143
+ if (!trigger) {
144
+ const state = await persistRuntimeWatchdogState(statePath, previousState, createRuntimeWatchdogState({
145
+ previousState,
146
+ label,
147
+ now,
148
+ lastResult: "healthy",
149
+ lastMessage: "Runtime and macOS proxy state are healthy.",
150
+ }));
151
+ return { statePath, state };
152
+ }
153
+ if (trigger === "proxy-drift") {
154
+ try {
155
+ const services = await reassertSystemProxy({
156
+ expected: snapshot.systemProxy.expected,
157
+ commandRunner,
158
+ });
159
+ const verifiedSnapshot = await collectSnapshot(input.config);
160
+ if (isHealthyRuntimeSnapshot(verifiedSnapshot)) {
161
+ const state = await persistRuntimeWatchdogState(statePath, previousState, createRuntimeWatchdogState({
162
+ previousState,
163
+ label,
164
+ now,
165
+ lastResult: "reasserted",
166
+ lastMessage: `Reasserted the macOS system proxy on ${services.length} network service(s).`,
167
+ lastTrigger: trigger,
168
+ lastRecoveryAction: "reassert-proxy",
169
+ lastReassertAt: now,
170
+ }));
171
+ return { statePath, state };
172
+ }
173
+ return attemptRuntimeRestart({
174
+ config: input.config,
175
+ now,
176
+ label,
177
+ runtimeLabel,
178
+ trigger,
179
+ reason: `Proxy drift is still present after reassert: ${describeRuntimeSnapshotProblem(verifiedSnapshot)}.`,
180
+ statePath,
181
+ previousState,
182
+ collectSnapshot,
183
+ runtimeAgentRecoverer,
184
+ runtimeLaunchAgentsDir: input.runtimeLaunchAgentsDir,
185
+ });
186
+ }
187
+ catch (error) {
188
+ const message = error instanceof Error ? error.message : String(error);
189
+ return attemptRuntimeRestart({
190
+ config: input.config,
191
+ now,
192
+ label,
193
+ runtimeLabel,
194
+ trigger,
195
+ reason: `Failed to reassert the macOS system proxy: ${message}`,
196
+ statePath,
197
+ previousState,
198
+ collectSnapshot,
199
+ runtimeAgentRecoverer,
200
+ runtimeLaunchAgentsDir: input.runtimeLaunchAgentsDir,
201
+ });
202
+ }
203
+ }
204
+ return attemptRuntimeRestart({
205
+ config: input.config,
206
+ now,
207
+ label,
208
+ runtimeLabel,
209
+ trigger,
210
+ reason: `Detected ${trigger}.`,
211
+ statePath,
212
+ previousState,
213
+ collectSnapshot,
214
+ runtimeAgentRecoverer,
215
+ runtimeLaunchAgentsDir: input.runtimeLaunchAgentsDir,
216
+ });
217
+ }
218
+ async function attemptRuntimeRestart(input) {
219
+ if (isRestartCooldownActive(input.previousState?.lastRestartAt, input.now)) {
220
+ const state = await persistRuntimeWatchdogState(input.statePath, input.previousState, createRuntimeWatchdogState({
221
+ previousState: input.previousState,
222
+ label: input.label,
223
+ now: input.now,
224
+ lastResult: "restart-skipped-cooldown",
225
+ lastMessage: `Watchdog detected ${describeRuntimeWatchdogTrigger(input.trigger)}, but skipped runtime restart because the previous restart is still within the 5-minute cooldown.`,
226
+ lastTrigger: input.trigger,
227
+ lastError: input.reason,
228
+ }));
229
+ return { statePath: input.statePath, state };
230
+ }
231
+ try {
232
+ const recovery = await input.runtimeAgentRecoverer({
233
+ label: input.runtimeLabel,
234
+ ...(input.runtimeLaunchAgentsDir ? { launchAgentsDir: input.runtimeLaunchAgentsDir } : {}),
235
+ });
236
+ const verifiedSnapshot = await input.collectSnapshot(input.config);
237
+ if (isHealthyRuntimeSnapshot(verifiedSnapshot)) {
238
+ const state = await persistRuntimeWatchdogState(input.statePath, input.previousState, createRuntimeWatchdogState({
239
+ previousState: input.previousState,
240
+ label: input.label,
241
+ now: input.now,
242
+ lastResult: "restarted",
243
+ lastMessage: `Restarted the desktop runtime via ${recovery.method} after ${describeRuntimeWatchdogTrigger(input.trigger)}.`,
244
+ lastTrigger: input.trigger,
245
+ lastRecoveryAction: "restart-runtime",
246
+ lastRestartAt: input.now,
247
+ }));
248
+ return { statePath: input.statePath, state };
249
+ }
250
+ const state = await persistRuntimeWatchdogState(input.statePath, input.previousState, createRuntimeWatchdogState({
251
+ previousState: input.previousState,
252
+ label: input.label,
253
+ now: input.now,
254
+ lastResult: "restart-failed",
255
+ lastMessage: `Restarted the desktop runtime via ${recovery.method}, but verification still reports ${describeRuntimeSnapshotProblem(verifiedSnapshot)}.`,
256
+ lastTrigger: input.trigger,
257
+ lastRecoveryAction: "restart-runtime",
258
+ lastRestartAt: input.now,
259
+ lastError: `${input.reason} Recovery verification still reports ${describeRuntimeSnapshotProblem(verifiedSnapshot)}.`,
260
+ }));
261
+ return { statePath: input.statePath, state };
262
+ }
263
+ catch (error) {
264
+ const message = error instanceof Error ? error.message : String(error);
265
+ const state = await persistRuntimeWatchdogState(input.statePath, input.previousState, createRuntimeWatchdogState({
266
+ previousState: input.previousState,
267
+ label: input.label,
268
+ now: input.now,
269
+ lastResult: "restart-failed",
270
+ lastMessage: `Failed to restart the desktop runtime after ${describeRuntimeWatchdogTrigger(input.trigger)}.`,
271
+ lastTrigger: input.trigger,
272
+ lastError: `${input.reason} ${message}`.trim(),
273
+ }));
274
+ return { statePath: input.statePath, state };
275
+ }
276
+ }
277
+ function isHealthyRuntimeSnapshot(snapshot) {
278
+ return (snapshot.processRunning && snapshot.listenerActive && snapshot.systemProxy.state === "active");
279
+ }
280
+ function resolveRuntimeWatchdogTrigger(snapshot) {
281
+ if (!snapshot.processRunning) {
282
+ return "process-missing";
283
+ }
284
+ if (snapshot.systemProxy.state === "listener-missing") {
285
+ return "listener-missing";
286
+ }
287
+ if (snapshot.systemProxy.state === "inactive" ||
288
+ snapshot.systemProxy.state === "endpoint-mismatch") {
289
+ return "proxy-drift";
290
+ }
291
+ return undefined;
292
+ }
293
+ function describeRuntimeWatchdogTrigger(trigger) {
294
+ switch (trigger) {
295
+ case "process-missing":
296
+ return "process-missing";
297
+ case "listener-missing":
298
+ return "listener-missing";
299
+ case "proxy-drift":
300
+ return "proxy-drift";
301
+ }
302
+ }
303
+ function describeRuntimeSnapshotProblem(snapshot) {
304
+ if (!snapshot.processRunning) {
305
+ return "process-missing";
306
+ }
307
+ if (snapshot.systemProxy.state === "listener-missing") {
308
+ return "listener-missing";
309
+ }
310
+ return snapshot.systemProxy.state;
311
+ }
312
+ function isRestartCooldownActive(previousRestartAt, now) {
313
+ if (!previousRestartAt) {
314
+ return false;
315
+ }
316
+ const previousRestartMs = Date.parse(previousRestartAt);
317
+ const nowMs = Date.parse(now);
318
+ if (Number.isNaN(previousRestartMs) || Number.isNaN(nowMs)) {
319
+ return false;
320
+ }
321
+ return nowMs - previousRestartMs < defaultRuntimeWatchdogRestartCooldownMs;
322
+ }
323
+ function createRuntimeWatchdogState(input) {
324
+ return {
325
+ version: 1,
326
+ label: input.label,
327
+ lastCheckedAt: input.now,
328
+ lastResult: input.lastResult,
329
+ lastMessage: input.lastMessage,
330
+ ...(input.lastTrigger ? { lastTrigger: input.lastTrigger } : {}),
331
+ ...(input.lastRecoveryAction ? { lastRecoveryAction: input.lastRecoveryAction } : {}),
332
+ ...(input.lastReassertAt
333
+ ? { lastReassertAt: input.lastReassertAt }
334
+ : input.previousState?.lastReassertAt
335
+ ? { lastReassertAt: input.previousState.lastReassertAt }
336
+ : {}),
337
+ ...(input.lastRestartAt
338
+ ? { lastRestartAt: input.lastRestartAt }
339
+ : input.previousState?.lastRestartAt
340
+ ? { lastRestartAt: input.previousState.lastRestartAt }
341
+ : {}),
342
+ ...(input.lastError ? { lastError: input.lastError } : {}),
343
+ };
344
+ }
345
+ export async function readRuntimeWatchdogState(statePath) {
346
+ try {
347
+ const raw = await readFile(statePath, "utf8");
348
+ const parsed = JSON.parse(raw);
349
+ if (parsed.version !== 1 ||
350
+ typeof parsed.label !== "string" ||
351
+ typeof parsed.lastCheckedAt !== "string" ||
352
+ typeof parsed.lastResult !== "string" ||
353
+ typeof parsed.lastMessage !== "string") {
354
+ return undefined;
355
+ }
356
+ return {
357
+ version: 1,
358
+ label: parsed.label,
359
+ lastCheckedAt: parsed.lastCheckedAt,
360
+ lastResult: parsed.lastResult,
361
+ lastMessage: parsed.lastMessage,
362
+ ...(typeof parsed.lastTrigger === "string"
363
+ ? { lastTrigger: parsed.lastTrigger }
364
+ : {}),
365
+ ...(typeof parsed.lastRecoveryAction === "string"
366
+ ? { lastRecoveryAction: parsed.lastRecoveryAction }
367
+ : {}),
368
+ ...(typeof parsed.lastReassertAt === "string"
369
+ ? { lastReassertAt: parsed.lastReassertAt }
370
+ : {}),
371
+ ...(typeof parsed.lastRestartAt === "string" ? { lastRestartAt: parsed.lastRestartAt } : {}),
372
+ ...(typeof parsed.lastError === "string" ? { lastError: parsed.lastError } : {}),
373
+ };
374
+ }
375
+ catch {
376
+ return undefined;
377
+ }
378
+ }
379
+ export function resolveRuntimeWatchdogStatePath(label = defaultRuntimeWatchdogLaunchAgentLabel) {
380
+ return path.join(homedir(), ".config", "singbox-iac", "runtime-watchdog", `${label}.json`);
381
+ }
382
+ async function writeRuntimeWatchdogState(statePath, state) {
383
+ await mkdir(path.dirname(statePath), { recursive: true });
384
+ await writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
385
+ return state;
386
+ }
387
+ async function persistRuntimeWatchdogState(statePath, previousState, nextState) {
388
+ if (previousState && isSameRuntimeWatchdogState(previousState, nextState)) {
389
+ return previousState;
390
+ }
391
+ return writeRuntimeWatchdogState(statePath, nextState);
392
+ }
393
+ function isSameRuntimeWatchdogState(left, right) {
394
+ return (left.version === right.version &&
395
+ left.label === right.label &&
396
+ left.lastResult === right.lastResult &&
397
+ left.lastMessage === right.lastMessage &&
398
+ left.lastTrigger === right.lastTrigger &&
399
+ left.lastRecoveryAction === right.lastRecoveryAction &&
400
+ left.lastReassertAt === right.lastReassertAt &&
401
+ left.lastRestartAt === right.lastRestartAt &&
402
+ left.lastError === right.lastError);
403
+ }
404
+ async function reassertSystemProxy(input) {
405
+ const services = await listEnabledNetworkServices(input.commandRunner);
406
+ if (services.length === 0) {
407
+ throw new Error("No enabled macOS network services were found for proxy reassert.");
408
+ }
409
+ for (const service of services) {
410
+ await input.commandRunner("/usr/sbin/networksetup", [
411
+ "-setwebproxy",
412
+ service,
413
+ input.expected.host,
414
+ String(input.expected.port),
415
+ "off",
416
+ ]);
417
+ await input.commandRunner("/usr/sbin/networksetup", [
418
+ "-setsecurewebproxy",
419
+ service,
420
+ input.expected.host,
421
+ String(input.expected.port),
422
+ "off",
423
+ ]);
424
+ await input.commandRunner("/usr/sbin/networksetup", [
425
+ "-setsocksfirewallproxy",
426
+ service,
427
+ input.expected.host,
428
+ String(input.expected.port),
429
+ "off",
430
+ ]);
431
+ }
432
+ return services;
433
+ }
434
+ async function listEnabledNetworkServices(commandRunner) {
435
+ const result = await commandRunner("/usr/sbin/networksetup", ["-listallnetworkservices"]);
436
+ return result.stdout
437
+ .split("\n")
438
+ .slice(1)
439
+ .map((line) => line.trim())
440
+ .filter((line) => line.length > 0 && !line.startsWith("*"));
441
+ }
442
+ async function pathExists(filePath) {
443
+ try {
444
+ await access(filePath, constants.F_OK);
445
+ return true;
446
+ }
447
+ catch {
448
+ return false;
449
+ }
450
+ }
451
+ function resolveWatchdogProgramArguments(input) {
452
+ if (path.extname(input.cliEntrypoint) === ".ts") {
453
+ const tsxBinary = path.resolve(input.workingDirectory, "node_modules", ".bin", "tsx");
454
+ return [tsxBinary, input.cliEntrypoint, "runtime-watchdog", "--config", input.configPath];
455
+ }
456
+ return [process.execPath, input.cliEntrypoint, "runtime-watchdog", "--config", input.configPath];
457
+ }
458
+ function launchctlDomain() {
459
+ if (typeof process.getuid !== "function") {
460
+ throw new Error("runtime watchdog launchd control requires process.getuid().");
461
+ }
462
+ return `gui/${process.getuid()}`;
463
+ }
464
+ function launchctlDomainService(label) {
465
+ return `${launchctlDomain()}/${label}`;
466
+ }
467
+ async function runLaunchctl(args, allowFailure = false) {
468
+ await new Promise((resolve, reject) => {
469
+ const child = spawn("/bin/launchctl", args, {
470
+ stdio: ["ignore", "pipe", "pipe"],
471
+ });
472
+ let stdout = "";
473
+ let stderr = "";
474
+ child.stdout.on("data", (chunk) => {
475
+ stdout += chunk.toString();
476
+ });
477
+ child.stderr.on("data", (chunk) => {
478
+ stderr += chunk.toString();
479
+ });
480
+ child.on("error", reject);
481
+ child.on("close", (code) => {
482
+ if (code === 0 || allowFailure) {
483
+ resolve();
484
+ return;
485
+ }
486
+ const details = [stdout.trim(), stderr.trim()].filter((value) => value.length > 0).join("\n");
487
+ reject(new Error(details || `launchctl ${args.join(" ")} failed`));
488
+ });
489
+ });
490
+ }
491
+ function resolveLaunchdPath() {
492
+ const entries = [
493
+ process.env.PATH,
494
+ "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin",
495
+ ]
496
+ .filter((value) => typeof value === "string" && value.length > 0)
497
+ .flatMap((value) => value.split(path.delimiter));
498
+ return [...new Set(entries)].join(path.delimiter);
499
+ }
500
+ function escapeXml(value) {
501
+ return value
502
+ .replaceAll("&", "&amp;")
503
+ .replaceAll("<", "&lt;")
504
+ .replaceAll(">", "&gt;")
505
+ .replaceAll('"', "&quot;")
506
+ .replaceAll("'", "&apos;");
507
+ }
508
+ async function runCommand(command, args) {
509
+ return new Promise((resolve, reject) => {
510
+ const child = spawn(command, args, {
511
+ stdio: ["ignore", "pipe", "pipe"],
512
+ });
513
+ let stdout = "";
514
+ let stderr = "";
515
+ child.stdout.on("data", (chunk) => {
516
+ stdout += chunk.toString();
517
+ });
518
+ child.stderr.on("data", (chunk) => {
519
+ stderr += chunk.toString();
520
+ });
521
+ child.on("error", reject);
522
+ child.on("close", (code) => {
523
+ if (code === 0) {
524
+ resolve({ stdout, stderr });
525
+ return;
526
+ }
527
+ const details = [stdout.trim(), stderr.trim()].filter((value) => value.length > 0).join("\n");
528
+ reject(new Error(details || `Command failed: ${command} ${args.join(" ")}`));
529
+ });
530
+ });
531
+ }
532
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/runtime-watchdog/index.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export interface StatusReport {
21
21
  readonly launchAgentInstalled: boolean;
22
22
  readonly launchAgentLoaded?: boolean;
23
23
  readonly systemProxyActive?: boolean;
24
+ readonly systemProxy?: StatusSystemProxyState;
25
+ readonly watchdog?: StatusRuntimeWatchdog;
24
26
  readonly tunInterfacePresent?: boolean;
25
27
  readonly listeners: readonly StatusListener[];
26
28
  };
@@ -54,4 +56,50 @@ export interface StatusDiagnostic {
54
56
  readonly level: "info" | "warn" | "error";
55
57
  readonly message: string;
56
58
  }
59
+ export interface StatusProxyEndpoint {
60
+ readonly host: string;
61
+ readonly port: number;
62
+ }
63
+ export interface StatusSystemProxyService {
64
+ readonly kind: "http" | "https" | "socks";
65
+ readonly enabled: boolean;
66
+ readonly host?: string;
67
+ readonly port?: number;
68
+ }
69
+ export interface StatusSystemProxyState {
70
+ readonly expected: StatusProxyEndpoint;
71
+ readonly actual: readonly StatusSystemProxyService[];
72
+ readonly state: "active" | "inactive" | "endpoint-mismatch" | "listener-missing" | "unknown";
73
+ readonly drift?: boolean;
74
+ readonly nextAction?: string;
75
+ }
76
+ export interface SystemProxyRuntimeSnapshot {
77
+ readonly processRunning: boolean;
78
+ readonly processIds: readonly number[];
79
+ readonly listenerActive: boolean;
80
+ readonly systemProxy: StatusSystemProxyState;
81
+ }
82
+ export interface StatusRuntimeWatchdog {
83
+ readonly enabled: boolean;
84
+ readonly intervalSeconds: number;
85
+ readonly label: string;
86
+ readonly launchAgentInstalled: boolean;
87
+ readonly launchAgentLoaded?: boolean;
88
+ readonly statePath: string;
89
+ readonly lastCheckedAt?: string;
90
+ readonly lastResult?: string;
91
+ readonly lastMessage?: string;
92
+ readonly lastTrigger?: string;
93
+ readonly lastRecoveryAction?: string;
94
+ readonly lastReassertAt?: string;
95
+ readonly lastRestartAt?: string;
96
+ readonly lastError?: string;
97
+ }
57
98
  export declare function collectStatusReport(input: StatusInput): Promise<StatusReport>;
99
+ export declare function collectSystemProxyRuntimeSnapshot(config: BuilderConfig): Promise<SystemProxyRuntimeSnapshot>;
100
+ export declare function assessSystemProxyState(input: {
101
+ readonly processRunning: boolean;
102
+ readonly listenerActive: boolean;
103
+ readonly expected: StatusProxyEndpoint;
104
+ readonly actual?: readonly StatusSystemProxyService[];
105
+ }): StatusSystemProxyState;