@singbox-iac/cli 0.1.16 → 0.1.18

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 (113) hide show
  1. package/README-en.md +70 -19
  2. package/README.md +75 -23
  3. package/dist/cli/commands/apply.js +3 -0
  4. package/dist/cli/commands/apply.js.map +1 -1
  5. package/dist/cli/commands/author.d.ts +2 -0
  6. package/dist/cli/commands/author.js +49 -19
  7. package/dist/cli/commands/author.js.map +1 -1
  8. package/dist/cli/commands/build.js +39 -13
  9. package/dist/cli/commands/build.js.map +1 -1
  10. package/dist/cli/commands/diagnose.d.ts +2 -0
  11. package/dist/cli/commands/diagnose.js +122 -0
  12. package/dist/cli/commands/diagnose.js.map +1 -0
  13. package/dist/cli/commands/doctor.js +21 -1
  14. package/dist/cli/commands/doctor.js.map +1 -1
  15. package/dist/cli/commands/proxifier.js +13 -4
  16. package/dist/cli/commands/proxifier.js.map +1 -1
  17. package/dist/cli/commands/reload.js +1 -0
  18. package/dist/cli/commands/reload.js.map +1 -1
  19. package/dist/cli/commands/restart.js +71 -7
  20. package/dist/cli/commands/restart.js.map +1 -1
  21. package/dist/cli/commands/rollback.js +1 -0
  22. package/dist/cli/commands/rollback.js.map +1 -1
  23. package/dist/cli/commands/rulesets.d.ts +2 -0
  24. package/dist/cli/commands/rulesets.js +125 -0
  25. package/dist/cli/commands/rulesets.js.map +1 -0
  26. package/dist/cli/commands/runtime-watchdog.d.ts +2 -0
  27. package/dist/cli/commands/runtime-watchdog.js +45 -0
  28. package/dist/cli/commands/runtime-watchdog.js.map +1 -0
  29. package/dist/cli/commands/setup.js +40 -14
  30. package/dist/cli/commands/setup.js.map +1 -1
  31. package/dist/cli/commands/start.js +56 -5
  32. package/dist/cli/commands/start.js.map +1 -1
  33. package/dist/cli/commands/status.js +140 -28
  34. package/dist/cli/commands/status.js.map +1 -1
  35. package/dist/cli/commands/stop.js +28 -5
  36. package/dist/cli/commands/stop.js.map +1 -1
  37. package/dist/cli/commands/use.js +3 -1
  38. package/dist/cli/commands/use.js.map +1 -1
  39. package/dist/cli/commands/verify.js +1 -1
  40. package/dist/cli/commands/verify.js.map +1 -1
  41. package/dist/cli/index.js +12 -4
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/config/schema.d.ts +222 -35
  44. package/dist/config/schema.js +80 -1
  45. package/dist/config/schema.js.map +1 -1
  46. package/dist/domain/dns-plan.d.ts +11 -1
  47. package/dist/domain/intent.d.ts +2 -2
  48. package/dist/domain/verification-plan.d.ts +3 -3
  49. package/dist/modules/authoring/index.js +26 -9
  50. package/dist/modules/authoring/index.js.map +1 -1
  51. package/dist/modules/build/index.d.ts +4 -1
  52. package/dist/modules/build/index.js +17 -4
  53. package/dist/modules/build/index.js.map +1 -1
  54. package/dist/modules/bundle-registry/index.d.ts +52 -0
  55. package/dist/modules/bundle-registry/index.js +691 -0
  56. package/dist/modules/bundle-registry/index.js.map +1 -0
  57. package/dist/modules/compiler/index.js +79 -12
  58. package/dist/modules/compiler/index.js.map +1 -1
  59. package/dist/modules/desktop-runtime/index.d.ts +36 -0
  60. package/dist/modules/desktop-runtime/index.js +154 -12
  61. package/dist/modules/desktop-runtime/index.js.map +1 -1
  62. package/dist/modules/diagnostics/index.d.ts +28 -0
  63. package/dist/modules/diagnostics/index.js +306 -0
  64. package/dist/modules/diagnostics/index.js.map +1 -0
  65. package/dist/modules/dns-plan/index.js +73 -12
  66. package/dist/modules/dns-plan/index.js.map +1 -1
  67. package/dist/modules/intent/index.js +2 -2
  68. package/dist/modules/intent/index.js.map +1 -1
  69. package/dist/modules/layered-authoring/index.d.ts +45 -0
  70. package/dist/modules/layered-authoring/index.js +549 -0
  71. package/dist/modules/layered-authoring/index.js.map +1 -0
  72. package/dist/modules/manager/index.d.ts +3 -1
  73. package/dist/modules/manager/index.js +26 -1
  74. package/dist/modules/manager/index.js.map +1 -1
  75. package/dist/modules/natural-language/index.d.ts +8 -5
  76. package/dist/modules/natural-language/index.js +74 -69
  77. package/dist/modules/natural-language/index.js.map +1 -1
  78. package/dist/modules/proxifier/index.d.ts +1 -14
  79. package/dist/modules/proxifier/index.js +13 -143
  80. package/dist/modules/proxifier/index.js.map +1 -1
  81. package/dist/modules/rule-set-catalog/index.d.ts +25 -0
  82. package/dist/modules/rule-set-catalog/index.js +135 -0
  83. package/dist/modules/rule-set-catalog/index.js.map +1 -0
  84. package/dist/modules/runtime-mode/index.d.ts +1 -1
  85. package/dist/modules/runtime-mode/index.js +0 -5
  86. package/dist/modules/runtime-mode/index.js.map +1 -1
  87. package/dist/modules/runtime-watchdog/index.d.ts +73 -0
  88. package/dist/modules/runtime-watchdog/index.js +532 -0
  89. package/dist/modules/runtime-watchdog/index.js.map +1 -0
  90. package/dist/modules/status/index.d.ts +57 -0
  91. package/dist/modules/status/index.js +307 -31
  92. package/dist/modules/status/index.js.map +1 -1
  93. package/dist/modules/system-proxy/index.d.ts +31 -0
  94. package/dist/modules/system-proxy/index.js +164 -0
  95. package/dist/modules/system-proxy/index.js.map +1 -0
  96. package/dist/modules/update/index.js +3 -1
  97. package/dist/modules/update/index.js.map +1 -1
  98. package/dist/modules/verification/index.d.ts +5 -5
  99. package/dist/modules/verification/index.js +93 -12
  100. package/dist/modules/verification/index.js.map +1 -1
  101. package/dist/modules/verification-plan/index.js +13 -4
  102. package/dist/modules/verification-plan/index.js.map +1 -1
  103. package/docs/agent-context.md +131 -0
  104. package/docs/natural-language-authoring.md +106 -1
  105. package/docs/proxifier-onboarding.md +15 -4
  106. package/docs/rule-templates.md +2 -0
  107. package/docs/runtime-modes.md +84 -0
  108. package/docs/runtime-on-macos.md +59 -4
  109. package/examples/builder.config.yaml +60 -0
  110. package/package.json +3 -2
  111. package/dist/cli/commands/quickstart.d.ts +0 -2
  112. package/dist/cli/commands/quickstart.js +0 -54
  113. package/dist/cli/commands/quickstart.js.map +0 -1
@@ -0,0 +1,549 @@
1
+ import { constants } from "node:fs";
2
+ import { access, mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import YAML from "yaml";
5
+ import { z } from "zod";
6
+ import { intentFromNaturalLanguagePlan } from "../intent/index.js";
7
+ import { getRuleTemplate } from "../rule-templates/index.js";
8
+ import { loadUserRules } from "../user-rules/index.js";
9
+ const nonEmptyString = z.string().min(1);
10
+ const routeRuleSchema = z
11
+ .object({
12
+ name: nonEmptyString.optional(),
13
+ inbound: z.array(nonEmptyString).min(1).optional(),
14
+ protocol: nonEmptyString.optional(),
15
+ network: z.enum(["tcp", "udp"]).optional(),
16
+ port: z.number().int().positive().optional(),
17
+ domain: z.array(nonEmptyString).min(1).optional(),
18
+ domainSuffix: z.array(nonEmptyString).min(1).optional(),
19
+ ruleSet: z.array(nonEmptyString).min(1).optional(),
20
+ route: nonEmptyString.optional(),
21
+ action: z.literal("reject").optional(),
22
+ })
23
+ .superRefine((rule, ctx) => {
24
+ const hasMatch = rule.inbound !== undefined ||
25
+ rule.protocol !== undefined ||
26
+ rule.network !== undefined ||
27
+ rule.port !== undefined ||
28
+ rule.domain !== undefined ||
29
+ rule.domainSuffix !== undefined ||
30
+ rule.ruleSet !== undefined;
31
+ if (!hasMatch) {
32
+ ctx.addIssue({
33
+ code: z.ZodIssueCode.custom,
34
+ message: "Each stored authored rule must define at least one matcher.",
35
+ });
36
+ }
37
+ const actionCount = Number(rule.route !== undefined) + Number(rule.action !== undefined);
38
+ if (actionCount !== 1) {
39
+ ctx.addIssue({
40
+ code: z.ZodIssueCode.custom,
41
+ message: 'Each stored authored rule must define exactly one action via "route" or action="reject".',
42
+ });
43
+ }
44
+ });
45
+ const verificationOverrideSchema = z
46
+ .object({
47
+ inbound: z.enum(["in-mixed", "in-proxifier", "in-tun"]).optional(),
48
+ domain: nonEmptyString.optional(),
49
+ domainSuffix: nonEmptyString.optional(),
50
+ expectedOutbound: nonEmptyString,
51
+ })
52
+ .superRefine((override, ctx) => {
53
+ if (!override.domain && !override.domainSuffix) {
54
+ ctx.addIssue({
55
+ code: z.ZodIssueCode.custom,
56
+ message: "Verification overrides must define domain or domainSuffix.",
57
+ });
58
+ }
59
+ });
60
+ const groupOverrideSchema = z.object({
61
+ defaultTarget: nonEmptyString.optional(),
62
+ defaultNodePattern: nonEmptyString.optional(),
63
+ });
64
+ const naturalLanguagePlanSchema = z.object({
65
+ beforeBuiltins: z.array(routeRuleSchema).default([]),
66
+ afterBuiltins: z.array(routeRuleSchema).default([]),
67
+ templateIds: z.array(nonEmptyString).default([]),
68
+ notes: z.array(nonEmptyString).default([]),
69
+ scheduleIntervalMinutes: z.number().int().positive().optional(),
70
+ groupDefaults: z
71
+ .object({
72
+ processProxy: groupOverrideSchema.optional(),
73
+ aiOut: groupOverrideSchema.optional(),
74
+ devCommonOut: groupOverrideSchema.optional(),
75
+ stitchOut: groupOverrideSchema.optional(),
76
+ })
77
+ .optional(),
78
+ verificationOverrides: z.array(verificationOverrideSchema).optional(),
79
+ });
80
+ const authoringLayerSchema = z.object({
81
+ prompt: nonEmptyString.optional(),
82
+ appliedAt: nonEmptyString.optional(),
83
+ plan: naturalLanguagePlanSchema,
84
+ });
85
+ const layeredAuthoringStateSchema = z.object({
86
+ version: z.literal(1),
87
+ base: authoringLayerSchema,
88
+ patches: z.array(authoringLayerSchema).default([]),
89
+ });
90
+ export async function resolveLayeredAuthoringState(input) {
91
+ const rulesPath = input.rulesPath ?? input.config.rules.userRulesFile;
92
+ const filePath = resolveLayeredAuthoringPath(rulesPath);
93
+ if (await pathExists(filePath)) {
94
+ const raw = await readFile(filePath, "utf8");
95
+ const state = parseLayeredAuthoringState(YAML.parse(raw) ?? {});
96
+ return materializeLayeredAuthoringState({
97
+ filePath,
98
+ exists: true,
99
+ state,
100
+ });
101
+ }
102
+ const loadedUserRules = input.loadedUserRules ?? (await loadUserRules(rulesPath));
103
+ const state = createLegacyLayeredAuthoringState(input.config, loadedUserRules);
104
+ return materializeLayeredAuthoringState({
105
+ filePath,
106
+ exists: false,
107
+ state,
108
+ });
109
+ }
110
+ export function resolveLayeredAuthoringPath(rulesPath) {
111
+ const parsed = path.parse(rulesPath);
112
+ const extension = parsed.ext || ".yaml";
113
+ return path.join(parsed.dir, `${parsed.name}.authoring${extension}`);
114
+ }
115
+ export function applyLayeredAuthoringUpdate(input) {
116
+ const nextLayer = {
117
+ prompt: input.prompt,
118
+ ...(input.appliedAt ? { appliedAt: input.appliedAt } : {}),
119
+ plan: normalizePlan(input.plan),
120
+ };
121
+ if (input.mode === "replace") {
122
+ return parseLayeredAuthoringState({
123
+ version: 1,
124
+ base: nextLayer,
125
+ patches: [],
126
+ });
127
+ }
128
+ return parseLayeredAuthoringState({
129
+ version: 1,
130
+ base: input.current.base,
131
+ patches: [...input.current.patches, nextLayer],
132
+ });
133
+ }
134
+ export async function writeLayeredAuthoringState(input) {
135
+ const filePath = resolveLayeredAuthoringPath(input.rulesPath);
136
+ await mkdir(path.dirname(filePath), { recursive: true });
137
+ const normalized = parseLayeredAuthoringState(input.state);
138
+ await writeFile(filePath, YAML.stringify(normalized), "utf8");
139
+ return filePath;
140
+ }
141
+ export function mergeNaturalLanguagePlans(plans) {
142
+ if (plans.length === 0) {
143
+ return {
144
+ beforeBuiltins: [],
145
+ afterBuiltins: [],
146
+ templateIds: [],
147
+ notes: [],
148
+ };
149
+ }
150
+ const notes = new Set();
151
+ let scheduleIntervalMinutes;
152
+ const groupDefaults = {};
153
+ const verificationOverridesByKey = new Map();
154
+ for (const plan of plans) {
155
+ for (const note of plan.notes) {
156
+ notes.add(note);
157
+ }
158
+ if (plan.scheduleIntervalMinutes !== undefined) {
159
+ scheduleIntervalMinutes = plan.scheduleIntervalMinutes;
160
+ }
161
+ if (plan.groupDefaults?.processProxy) {
162
+ groupDefaults.processProxy = {
163
+ ...(groupDefaults.processProxy ?? {}),
164
+ ...plan.groupDefaults.processProxy,
165
+ };
166
+ }
167
+ if (plan.groupDefaults?.aiOut) {
168
+ groupDefaults.aiOut = {
169
+ ...(groupDefaults.aiOut ?? {}),
170
+ ...plan.groupDefaults.aiOut,
171
+ };
172
+ }
173
+ if (plan.groupDefaults?.devCommonOut) {
174
+ groupDefaults.devCommonOut = {
175
+ ...(groupDefaults.devCommonOut ?? {}),
176
+ ...plan.groupDefaults.devCommonOut,
177
+ };
178
+ }
179
+ if (plan.groupDefaults?.stitchOut) {
180
+ groupDefaults.stitchOut = {
181
+ ...(groupDefaults.stitchOut ?? {}),
182
+ ...plan.groupDefaults.stitchOut,
183
+ };
184
+ }
185
+ for (const override of plan.verificationOverrides ?? []) {
186
+ const key = verificationOverrideKey(override);
187
+ verificationOverridesByKey.delete(key);
188
+ verificationOverridesByKey.set(key, normalizeVerificationOverride(override));
189
+ }
190
+ }
191
+ const beforeBuiltins = [];
192
+ const afterBuiltins = [];
193
+ const seenBefore = new Set();
194
+ const seenAfter = new Set();
195
+ const selectedTemplateFamilies = new Set();
196
+ const selectedTemplateIds = [];
197
+ for (let index = plans.length - 1; index >= 0; index -= 1) {
198
+ const plan = normalizePlan(plans[index] ?? emptyPlan());
199
+ const { explicitBeforeBuiltins, explicitAfterBuiltins } = splitExplicitRules(plan);
200
+ appendRules(explicitBeforeBuiltins, beforeBuiltins, seenBefore);
201
+ appendRules(explicitAfterBuiltins, afterBuiltins, seenAfter);
202
+ for (const templateId of plan.templateIds) {
203
+ const family = templateFamily(templateId);
204
+ if (selectedTemplateFamilies.has(family)) {
205
+ continue;
206
+ }
207
+ const template = getRuleTemplate(templateId);
208
+ if (!template) {
209
+ throw new Error(`Unknown authored template "${templateId}".`);
210
+ }
211
+ selectedTemplateFamilies.add(family);
212
+ selectedTemplateIds.push(templateId);
213
+ appendRules(template.beforeBuiltins, beforeBuiltins, seenBefore);
214
+ appendRules(template.afterBuiltins, afterBuiltins, seenAfter);
215
+ }
216
+ }
217
+ return {
218
+ beforeBuiltins,
219
+ afterBuiltins,
220
+ templateIds: selectedTemplateIds,
221
+ notes: [...notes],
222
+ ...(scheduleIntervalMinutes !== undefined ? { scheduleIntervalMinutes } : {}),
223
+ ...(hasGroupDefaults(groupDefaults) ? { groupDefaults } : {}),
224
+ ...(verificationOverridesByKey.size > 0
225
+ ? { verificationOverrides: [...verificationOverridesByKey.values()] }
226
+ : {}),
227
+ };
228
+ }
229
+ export function materializeLayeredAuthoringState(input) {
230
+ const mergedPlan = mergeNaturalLanguagePlans([
231
+ input.state.base.plan,
232
+ ...input.state.patches.map((layer) => layer.plan),
233
+ ]);
234
+ return {
235
+ filePath: input.filePath,
236
+ exists: input.exists,
237
+ state: input.state,
238
+ mergedPlan,
239
+ mergedIntent: intentFromNaturalLanguagePlan(mergedPlan),
240
+ };
241
+ }
242
+ function createLegacyLayeredAuthoringState(config, loadedUserRules) {
243
+ const verificationOverrides = config.verification.scenarios.map((scenario) => ({
244
+ inbound: scenario.inbound,
245
+ domain: new URL(scenario.url).hostname.toLowerCase(),
246
+ expectedOutbound: scenario.expectedOutbound,
247
+ }));
248
+ const groupDefaults = {
249
+ ...(config.groups.processProxy.defaultTarget || config.groups.processProxy.defaultNodePattern
250
+ ? {
251
+ processProxy: {
252
+ ...(config.groups.processProxy.defaultTarget
253
+ ? { defaultTarget: config.groups.processProxy.defaultTarget }
254
+ : {}),
255
+ ...(config.groups.processProxy.defaultNodePattern
256
+ ? { defaultNodePattern: config.groups.processProxy.defaultNodePattern }
257
+ : {}),
258
+ },
259
+ }
260
+ : {}),
261
+ ...(config.groups.aiOut.defaultTarget
262
+ ? {
263
+ aiOut: {
264
+ defaultTarget: config.groups.aiOut.defaultTarget,
265
+ },
266
+ }
267
+ : {}),
268
+ ...(config.groups.devCommonOut.defaultTarget
269
+ ? {
270
+ devCommonOut: {
271
+ defaultTarget: config.groups.devCommonOut.defaultTarget,
272
+ },
273
+ }
274
+ : {}),
275
+ ...(config.groups.stitchOut.defaultTarget
276
+ ? {
277
+ stitchOut: {
278
+ defaultTarget: config.groups.stitchOut.defaultTarget,
279
+ },
280
+ }
281
+ : {}),
282
+ };
283
+ return parseLayeredAuthoringState({
284
+ version: 1,
285
+ base: {
286
+ plan: {
287
+ beforeBuiltins: loadedUserRules.beforeBuiltins.map(normalizeRule),
288
+ afterBuiltins: loadedUserRules.afterBuiltins.map(normalizeRule),
289
+ templateIds: [],
290
+ notes: [],
291
+ ...(config.schedule.enabled
292
+ ? { scheduleIntervalMinutes: config.schedule.intervalMinutes }
293
+ : {}),
294
+ ...(hasGroupDefaults(groupDefaults) ? { groupDefaults } : {}),
295
+ ...(verificationOverrides.length > 0 ? { verificationOverrides } : {}),
296
+ },
297
+ },
298
+ patches: [],
299
+ });
300
+ }
301
+ function parseLayeredAuthoringState(value) {
302
+ const parsed = layeredAuthoringStateSchema.parse(value);
303
+ return {
304
+ version: 1,
305
+ base: parseLayer(parsed.base),
306
+ patches: parsed.patches.map(parseLayer),
307
+ };
308
+ }
309
+ function parseLayer(layer) {
310
+ return {
311
+ ...(layer.prompt ? { prompt: layer.prompt } : {}),
312
+ ...(layer.appliedAt ? { appliedAt: layer.appliedAt } : {}),
313
+ plan: parseNaturalLanguagePlan(layer.plan),
314
+ };
315
+ }
316
+ function parseNaturalLanguagePlan(value) {
317
+ const parsed = naturalLanguagePlanSchema.parse(value);
318
+ return {
319
+ beforeBuiltins: parsed.beforeBuiltins.map(normalizeParsedRule),
320
+ afterBuiltins: parsed.afterBuiltins.map(normalizeParsedRule),
321
+ templateIds: [...parsed.templateIds],
322
+ notes: [...parsed.notes],
323
+ ...(parsed.scheduleIntervalMinutes !== undefined
324
+ ? { scheduleIntervalMinutes: parsed.scheduleIntervalMinutes }
325
+ : {}),
326
+ ...(parsed.groupDefaults
327
+ ? { groupDefaults: normalizeGroupDefaults(parsed.groupDefaults) }
328
+ : {}),
329
+ ...(parsed.verificationOverrides
330
+ ? {
331
+ verificationOverrides: parsed.verificationOverrides.map(normalizeParsedVerificationOverride),
332
+ }
333
+ : {}),
334
+ };
335
+ }
336
+ function splitExplicitRules(plan) {
337
+ if (plan.templateIds.length === 0) {
338
+ return {
339
+ explicitBeforeBuiltins: plan.beforeBuiltins.map(normalizeRule),
340
+ explicitAfterBuiltins: plan.afterBuiltins.map(normalizeRule),
341
+ };
342
+ }
343
+ const templateBeforeKeys = new Set();
344
+ const templateAfterKeys = new Set();
345
+ for (const templateId of plan.templateIds) {
346
+ const template = getRuleTemplate(templateId);
347
+ if (!template) {
348
+ throw new Error(`Unknown authored template "${templateId}".`);
349
+ }
350
+ for (const rule of template.beforeBuiltins) {
351
+ templateBeforeKeys.add(exactRuleKey(rule));
352
+ }
353
+ for (const rule of template.afterBuiltins) {
354
+ templateAfterKeys.add(exactRuleKey(rule));
355
+ }
356
+ }
357
+ return {
358
+ explicitBeforeBuiltins: plan.beforeBuiltins
359
+ .map(normalizeRule)
360
+ .filter((rule) => !templateBeforeKeys.has(exactRuleKey(rule))),
361
+ explicitAfterBuiltins: plan.afterBuiltins
362
+ .map(normalizeRule)
363
+ .filter((rule) => !templateAfterKeys.has(exactRuleKey(rule))),
364
+ };
365
+ }
366
+ function appendRules(candidates, output, seenKeys) {
367
+ for (const rule of candidates) {
368
+ const key = matchRuleKey(rule);
369
+ if (seenKeys.has(key)) {
370
+ continue;
371
+ }
372
+ seenKeys.add(key);
373
+ output.push(normalizeRule(rule));
374
+ }
375
+ }
376
+ function normalizePlan(plan) {
377
+ return parseNaturalLanguagePlan({
378
+ beforeBuiltins: plan.beforeBuiltins.map(normalizeRule),
379
+ afterBuiltins: plan.afterBuiltins.map(normalizeRule),
380
+ templateIds: [...plan.templateIds],
381
+ notes: [...plan.notes],
382
+ ...(plan.scheduleIntervalMinutes !== undefined
383
+ ? { scheduleIntervalMinutes: plan.scheduleIntervalMinutes }
384
+ : {}),
385
+ ...(plan.groupDefaults ? { groupDefaults: plan.groupDefaults } : {}),
386
+ ...(plan.verificationOverrides
387
+ ? {
388
+ verificationOverrides: plan.verificationOverrides.map(normalizeVerificationOverride),
389
+ }
390
+ : {}),
391
+ });
392
+ }
393
+ function normalizeParsedRule(rule) {
394
+ return {
395
+ ...(rule.name ? { name: rule.name } : {}),
396
+ ...(rule.inbound ? { inbound: normalizeStringList(rule.inbound) } : {}),
397
+ ...(rule.protocol ? { protocol: rule.protocol } : {}),
398
+ ...(rule.network ? { network: rule.network } : {}),
399
+ ...(rule.port ? { port: rule.port } : {}),
400
+ ...(rule.domain ? { domain: normalizeStringList(rule.domain) } : {}),
401
+ ...(rule.domainSuffix ? { domainSuffix: normalizeStringList(rule.domainSuffix) } : {}),
402
+ ...(rule.ruleSet ? { ruleSet: normalizeStringList(rule.ruleSet) } : {}),
403
+ ...(rule.route ? { route: rule.route } : {}),
404
+ ...(rule.action ? { action: rule.action } : {}),
405
+ };
406
+ }
407
+ function normalizeRule(rule) {
408
+ return {
409
+ ...(rule.name ? { name: rule.name } : {}),
410
+ ...(rule.inbound ? { inbound: normalizeStringList(rule.inbound) } : {}),
411
+ ...(rule.protocol ? { protocol: rule.protocol } : {}),
412
+ ...(rule.network ? { network: rule.network } : {}),
413
+ ...(rule.port ? { port: rule.port } : {}),
414
+ ...(rule.domain ? { domain: normalizeStringList(rule.domain) } : {}),
415
+ ...(rule.domainSuffix ? { domainSuffix: normalizeStringList(rule.domainSuffix) } : {}),
416
+ ...(rule.ruleSet ? { ruleSet: normalizeStringList(rule.ruleSet) } : {}),
417
+ ...(rule.route ? { route: rule.route } : {}),
418
+ ...(rule.action ? { action: rule.action } : {}),
419
+ };
420
+ }
421
+ function normalizeVerificationOverride(override) {
422
+ const normalized = verificationOverrideSchema.parse({
423
+ ...(override.inbound ? { inbound: override.inbound } : {}),
424
+ ...(override.domain ? { domain: override.domain.toLowerCase() } : {}),
425
+ ...(override.domainSuffix ? { domainSuffix: override.domainSuffix.toLowerCase() } : {}),
426
+ expectedOutbound: override.expectedOutbound,
427
+ });
428
+ return {
429
+ ...(normalized.inbound ? { inbound: normalized.inbound } : {}),
430
+ ...(normalized.domain ? { domain: normalized.domain } : {}),
431
+ ...(normalized.domainSuffix ? { domainSuffix: normalized.domainSuffix } : {}),
432
+ expectedOutbound: normalized.expectedOutbound,
433
+ };
434
+ }
435
+ function normalizeParsedVerificationOverride(override) {
436
+ return {
437
+ ...(override.inbound ? { inbound: override.inbound } : {}),
438
+ ...(override.domain ? { domain: override.domain.toLowerCase() } : {}),
439
+ ...(override.domainSuffix ? { domainSuffix: override.domainSuffix.toLowerCase() } : {}),
440
+ expectedOutbound: override.expectedOutbound,
441
+ };
442
+ }
443
+ function normalizeGroupDefaults(groupDefaults) {
444
+ return {
445
+ ...(groupDefaults.processProxy
446
+ ? {
447
+ processProxy: {
448
+ ...(groupDefaults.processProxy.defaultTarget
449
+ ? { defaultTarget: groupDefaults.processProxy.defaultTarget }
450
+ : {}),
451
+ ...(groupDefaults.processProxy.defaultNodePattern
452
+ ? { defaultNodePattern: groupDefaults.processProxy.defaultNodePattern }
453
+ : {}),
454
+ },
455
+ }
456
+ : {}),
457
+ ...(groupDefaults.aiOut
458
+ ? {
459
+ aiOut: {
460
+ ...(groupDefaults.aiOut.defaultTarget
461
+ ? { defaultTarget: groupDefaults.aiOut.defaultTarget }
462
+ : {}),
463
+ ...(groupDefaults.aiOut.defaultNodePattern
464
+ ? { defaultNodePattern: groupDefaults.aiOut.defaultNodePattern }
465
+ : {}),
466
+ },
467
+ }
468
+ : {}),
469
+ ...(groupDefaults.devCommonOut
470
+ ? {
471
+ devCommonOut: {
472
+ ...(groupDefaults.devCommonOut.defaultTarget
473
+ ? { defaultTarget: groupDefaults.devCommonOut.defaultTarget }
474
+ : {}),
475
+ ...(groupDefaults.devCommonOut.defaultNodePattern
476
+ ? { defaultNodePattern: groupDefaults.devCommonOut.defaultNodePattern }
477
+ : {}),
478
+ },
479
+ }
480
+ : {}),
481
+ ...(groupDefaults.stitchOut
482
+ ? {
483
+ stitchOut: {
484
+ ...(groupDefaults.stitchOut.defaultTarget
485
+ ? { defaultTarget: groupDefaults.stitchOut.defaultTarget }
486
+ : {}),
487
+ ...(groupDefaults.stitchOut.defaultNodePattern
488
+ ? { defaultNodePattern: groupDefaults.stitchOut.defaultNodePattern }
489
+ : {}),
490
+ },
491
+ }
492
+ : {}),
493
+ };
494
+ }
495
+ function emptyPlan() {
496
+ return {
497
+ beforeBuiltins: [],
498
+ afterBuiltins: [],
499
+ templateIds: [],
500
+ notes: [],
501
+ };
502
+ }
503
+ function matchRuleKey(rule) {
504
+ return JSON.stringify({
505
+ inbound: rule.inbound ? normalizeStringList(rule.inbound) : [],
506
+ protocol: rule.protocol ?? null,
507
+ network: rule.network ?? null,
508
+ port: rule.port ?? null,
509
+ domain: rule.domain ? normalizeStringList(rule.domain) : [],
510
+ domainSuffix: rule.domainSuffix ? normalizeStringList(rule.domainSuffix) : [],
511
+ ruleSet: rule.ruleSet ? normalizeStringList(rule.ruleSet) : [],
512
+ });
513
+ }
514
+ function exactRuleKey(rule) {
515
+ return JSON.stringify({
516
+ ...JSON.parse(matchRuleKey(rule)),
517
+ route: rule.route ?? null,
518
+ action: rule.action ?? null,
519
+ });
520
+ }
521
+ function verificationOverrideKey(override) {
522
+ return JSON.stringify({
523
+ inbound: override.inbound ?? null,
524
+ domain: override.domain?.toLowerCase() ?? null,
525
+ domainSuffix: override.domainSuffix?.toLowerCase() ?? null,
526
+ });
527
+ }
528
+ function templateFamily(templateId) {
529
+ if (templateId === "video-us" || templateId === "video-hk" || templateId === "video-sg") {
530
+ return "video-global";
531
+ }
532
+ return templateId;
533
+ }
534
+ function hasGroupDefaults(groupDefaults) {
535
+ return Object.keys(groupDefaults).length > 0;
536
+ }
537
+ function normalizeStringList(values) {
538
+ return [...new Set(values)].sort((left, right) => left.localeCompare(right));
539
+ }
540
+ async function pathExists(filePath) {
541
+ try {
542
+ await access(filePath, constants.F_OK);
543
+ return true;
544
+ }
545
+ catch {
546
+ return false;
547
+ }
548
+ }
549
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/layered-authoring/index.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export interface ApplyConfigInput {
10
10
  readonly singBoxBinary?: string;
11
11
  readonly reload?: boolean;
12
12
  readonly runtime?: BuilderConfig["runtime"]["reload"];
13
+ readonly desktopRuntime?: BuilderConfig["runtime"]["desktop"];
13
14
  }
14
15
  export interface RunConfigInput {
15
16
  readonly configPath: string;
@@ -25,6 +26,7 @@ export declare function runConfig(input: RunConfigInput): Promise<number>;
25
26
  export declare function reloadRuntime(input: {
26
27
  readonly singBoxBinary?: string;
27
28
  readonly runtime: BuilderConfig["runtime"]["reload"];
29
+ readonly desktopRuntime?: BuilderConfig["runtime"]["desktop"];
28
30
  }): Promise<void>;
29
- export declare function shouldAutoReloadRuntime(runtime: BuilderConfig["runtime"]["reload"]): Promise<boolean>;
31
+ export declare function shouldAutoReloadRuntime(runtime: BuilderConfig["runtime"]["reload"], desktopRuntime?: BuilderConfig["runtime"]["desktop"]): Promise<boolean>;
30
32
  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 { resolveDesktopRuntimeServiceKind, resolveDesktopRuntimeServicePid, } from "../desktop-runtime/index.js";
5
6
  import { resolveSingBoxDependency } from "../runtime-dependencies/index.js";
6
7
  export async function checkConfig(input) {
7
8
  const binaryPath = await resolveSingBoxBinary(input.singBoxBinary);
@@ -25,6 +26,7 @@ export async function applyConfig(input) {
25
26
  ...(input.runtime.processName ? { processName: input.runtime.processName } : {}),
26
27
  ...(input.runtime.signal ? { signal: input.runtime.signal } : {}),
27
28
  ...(input.runtime.command ? { command: input.runtime.command } : {}),
29
+ ...(input.desktopRuntime ? { desktopRuntime: input.desktopRuntime } : {}),
28
30
  binaryPath,
29
31
  });
30
32
  }
@@ -52,10 +54,20 @@ export async function reloadRuntime(input) {
52
54
  ...(input.runtime.processName ? { processName: input.runtime.processName } : {}),
53
55
  ...(input.runtime.signal ? { signal: input.runtime.signal } : {}),
54
56
  ...(input.runtime.command ? { command: input.runtime.command } : {}),
57
+ ...(input.desktopRuntime ? { desktopRuntime: input.desktopRuntime } : {}),
55
58
  binaryPath,
56
59
  });
57
60
  }
58
- export async function shouldAutoReloadRuntime(runtime) {
61
+ export async function shouldAutoReloadRuntime(runtime, desktopRuntime) {
62
+ if (desktopRuntime?.profile === "tun") {
63
+ const pid = await resolveDesktopRuntimeServicePid({
64
+ serviceKind: resolveDesktopRuntimeServiceKind(desktopRuntime.profile),
65
+ label: desktopRuntime.profile === "tun"
66
+ ? desktopRuntime.tun.launchDaemonLabel
67
+ : desktopRuntime.launchAgentLabel,
68
+ });
69
+ return pid !== undefined;
70
+ }
59
71
  if (runtime.kind !== "signal" || !runtime.processName) {
60
72
  return false;
61
73
  }
@@ -79,6 +91,19 @@ async function reloadSingBox(input) {
79
91
  if (!input.processName || !input.signal) {
80
92
  throw new Error("Signal-based reload requires processName and signal.");
81
93
  }
94
+ if (input.desktopRuntime?.profile === "tun") {
95
+ const serviceKind = resolveDesktopRuntimeServiceKind(input.desktopRuntime.profile);
96
+ const serviceLabel = input.desktopRuntime.tun.launchDaemonLabel;
97
+ const pid = await resolveDesktopRuntimeServicePid({
98
+ serviceKind,
99
+ label: serviceLabel,
100
+ });
101
+ if (!pid) {
102
+ throw new Error(`No managed sing-box ${serviceKind} PID was found for ${serviceLabel}.`);
103
+ }
104
+ await runCommand("/bin/kill", [`-${input.signal}`, String(pid)]);
105
+ return;
106
+ }
82
107
  await runCommand("/usr/bin/killall", [`-${input.signal}`, input.processName]);
83
108
  }
84
109
  async function pathExists(filePath) {