@singbox-iac/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +265 -0
  3. package/dist/cli/command-helpers.d.ts +6 -0
  4. package/dist/cli/command-helpers.js +34 -0
  5. package/dist/cli/command-helpers.js.map +1 -0
  6. package/dist/cli/commands/apply.d.ts +2 -0
  7. package/dist/cli/commands/apply.js +32 -0
  8. package/dist/cli/commands/apply.js.map +1 -0
  9. package/dist/cli/commands/author.d.ts +2 -0
  10. package/dist/cli/commands/author.js +194 -0
  11. package/dist/cli/commands/author.js.map +1 -0
  12. package/dist/cli/commands/build.d.ts +2 -0
  13. package/dist/cli/commands/build.js +198 -0
  14. package/dist/cli/commands/build.js.map +1 -0
  15. package/dist/cli/commands/check.d.ts +2 -0
  16. package/dist/cli/commands/check.js +23 -0
  17. package/dist/cli/commands/check.js.map +1 -0
  18. package/dist/cli/commands/doctor.d.ts +2 -0
  19. package/dist/cli/commands/doctor.js +35 -0
  20. package/dist/cli/commands/doctor.js.map +1 -0
  21. package/dist/cli/commands/init.d.ts +2 -0
  22. package/dist/cli/commands/init.js +23 -0
  23. package/dist/cli/commands/init.js.map +1 -0
  24. package/dist/cli/commands/reload.d.ts +2 -0
  25. package/dist/cli/commands/reload.js +21 -0
  26. package/dist/cli/commands/reload.js.map +1 -0
  27. package/dist/cli/commands/run.d.ts +2 -0
  28. package/dist/cli/commands/run.js +25 -0
  29. package/dist/cli/commands/run.js.map +1 -0
  30. package/dist/cli/commands/schedule.d.ts +2 -0
  31. package/dist/cli/commands/schedule.js +77 -0
  32. package/dist/cli/commands/schedule.js.map +1 -0
  33. package/dist/cli/commands/templates.d.ts +2 -0
  34. package/dist/cli/commands/templates.js +34 -0
  35. package/dist/cli/commands/templates.js.map +1 -0
  36. package/dist/cli/commands/update.d.ts +2 -0
  37. package/dist/cli/commands/update.js +52 -0
  38. package/dist/cli/commands/update.js.map +1 -0
  39. package/dist/cli/commands/verify.d.ts +2 -0
  40. package/dist/cli/commands/verify.js +49 -0
  41. package/dist/cli/commands/verify.js.map +1 -0
  42. package/dist/cli/index.d.ts +5 -0
  43. package/dist/cli/index.js +55 -0
  44. package/dist/cli/index.js.map +1 -0
  45. package/dist/config/load-config.d.ts +2 -0
  46. package/dist/config/load-config.js +29 -0
  47. package/dist/config/load-config.js.map +1 -0
  48. package/dist/config/schema.d.ts +548 -0
  49. package/dist/config/schema.js +92 -0
  50. package/dist/config/schema.js.map +1 -0
  51. package/dist/domain/config.d.ts +8 -0
  52. package/dist/domain/config.js +2 -0
  53. package/dist/domain/config.js.map +1 -0
  54. package/dist/domain/node.d.ts +11 -0
  55. package/dist/domain/node.js +2 -0
  56. package/dist/domain/node.js.map +1 -0
  57. package/dist/domain/outbound.d.ts +15 -0
  58. package/dist/domain/outbound.js +2 -0
  59. package/dist/domain/outbound.js.map +1 -0
  60. package/dist/domain/subscription.d.ts +6 -0
  61. package/dist/domain/subscription.js +2 -0
  62. package/dist/domain/subscription.js.map +1 -0
  63. package/dist/index.d.ts +1 -0
  64. package/dist/index.js +2 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/modules/authoring/index.d.ts +41 -0
  67. package/dist/modules/authoring/index.js +596 -0
  68. package/dist/modules/authoring/index.js.map +1 -0
  69. package/dist/modules/build/index.d.ts +13 -0
  70. package/dist/modules/build/index.js +39 -0
  71. package/dist/modules/build/index.js.map +1 -0
  72. package/dist/modules/compiler/index.d.ts +10 -0
  73. package/dist/modules/compiler/index.js +305 -0
  74. package/dist/modules/compiler/index.js.map +1 -0
  75. package/dist/modules/doctor/index.d.ts +17 -0
  76. package/dist/modules/doctor/index.js +89 -0
  77. package/dist/modules/doctor/index.js.map +1 -0
  78. package/dist/modules/fetcher/index.d.ts +4 -0
  79. package/dist/modules/fetcher/index.js +42 -0
  80. package/dist/modules/fetcher/index.js.map +1 -0
  81. package/dist/modules/init/index.d.ts +12 -0
  82. package/dist/modules/init/index.js +41 -0
  83. package/dist/modules/init/index.js.map +1 -0
  84. package/dist/modules/manager/index.d.ts +29 -0
  85. package/dist/modules/manager/index.js +133 -0
  86. package/dist/modules/manager/index.js.map +1 -0
  87. package/dist/modules/natural-language/index.d.ts +54 -0
  88. package/dist/modules/natural-language/index.js +458 -0
  89. package/dist/modules/natural-language/index.js.map +1 -0
  90. package/dist/modules/parser/index.d.ts +10 -0
  91. package/dist/modules/parser/index.js +113 -0
  92. package/dist/modules/parser/index.js.map +1 -0
  93. package/dist/modules/preview/index.d.ts +22 -0
  94. package/dist/modules/preview/index.js +141 -0
  95. package/dist/modules/preview/index.js.map +1 -0
  96. package/dist/modules/rule-templates/index.d.ts +15 -0
  97. package/dist/modules/rule-templates/index.js +200 -0
  98. package/dist/modules/rule-templates/index.js.map +1 -0
  99. package/dist/modules/schedule/index.d.ts +32 -0
  100. package/dist/modules/schedule/index.js +155 -0
  101. package/dist/modules/schedule/index.js.map +1 -0
  102. package/dist/modules/update/index.d.ts +22 -0
  103. package/dist/modules/update/index.js +38 -0
  104. package/dist/modules/update/index.js.map +1 -0
  105. package/dist/modules/user-rules/index.d.ts +18 -0
  106. package/dist/modules/user-rules/index.js +98 -0
  107. package/dist/modules/user-rules/index.js.map +1 -0
  108. package/dist/modules/verification/index.d.ts +49 -0
  109. package/dist/modules/verification/index.js +432 -0
  110. package/dist/modules/verification/index.js.map +1 -0
  111. package/dist/shared/errors.d.ts +3 -0
  112. package/dist/shared/errors.js +7 -0
  113. package/dist/shared/errors.js.map +1 -0
  114. package/dist/shared/logger.d.ts +2 -0
  115. package/dist/shared/logger.js +5 -0
  116. package/dist/shared/logger.js.map +1 -0
  117. package/dist/shared/result.d.ts +11 -0
  118. package/dist/shared/result.js +7 -0
  119. package/dist/shared/result.js.map +1 -0
  120. package/docs/antigravity-endpoints.md +77 -0
  121. package/docs/competitive-landscape.md +45 -0
  122. package/docs/development-workflow.md +80 -0
  123. package/docs/natural-language-authoring.md +376 -0
  124. package/docs/positioning.md +42 -0
  125. package/docs/releasing.md +72 -0
  126. package/docs/rule-templates.md +122 -0
  127. package/docs/rules-dsl.md +107 -0
  128. package/docs/runtime-on-macos.md +42 -0
  129. package/docs/sing-box-config-primer.md +39 -0
  130. package/docs/subscription-format.md +38 -0
  131. package/examples/builder.config.yaml +220 -0
  132. package/examples/custom.rules.yaml +18 -0
  133. package/package.json +51 -0
@@ -0,0 +1,548 @@
1
+ import { z } from "zod";
2
+ export declare const builderConfigSchema: z.ZodObject<{
3
+ version: z.ZodLiteral<1>;
4
+ subscription: z.ZodObject<{
5
+ url: z.ZodString;
6
+ format: z.ZodLiteral<"base64-lines">;
7
+ protocols: z.ZodArray<z.ZodLiteral<"trojan">, "many">;
8
+ }, "strip", z.ZodTypeAny, {
9
+ format: "base64-lines";
10
+ url: string;
11
+ protocols: "trojan"[];
12
+ }, {
13
+ format: "base64-lines";
14
+ url: string;
15
+ protocols: "trojan"[];
16
+ }>;
17
+ output: z.ZodObject<{
18
+ stagingPath: z.ZodString;
19
+ livePath: z.ZodString;
20
+ backupPath: z.ZodString;
21
+ }, "strip", z.ZodTypeAny, {
22
+ stagingPath: string;
23
+ livePath: string;
24
+ backupPath: string;
25
+ }, {
26
+ stagingPath: string;
27
+ livePath: string;
28
+ backupPath: string;
29
+ }>;
30
+ runtime: z.ZodObject<{
31
+ checkCommand: z.ZodString;
32
+ reload: z.ZodObject<{
33
+ kind: z.ZodEnum<["signal", "command"]>;
34
+ processName: z.ZodOptional<z.ZodString>;
35
+ signal: z.ZodOptional<z.ZodString>;
36
+ command: z.ZodOptional<z.ZodString>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ kind: "command" | "signal";
39
+ command?: string | undefined;
40
+ signal?: string | undefined;
41
+ processName?: string | undefined;
42
+ }, {
43
+ kind: "command" | "signal";
44
+ command?: string | undefined;
45
+ signal?: string | undefined;
46
+ processName?: string | undefined;
47
+ }>;
48
+ }, "strip", z.ZodTypeAny, {
49
+ checkCommand: string;
50
+ reload: {
51
+ kind: "command" | "signal";
52
+ command?: string | undefined;
53
+ signal?: string | undefined;
54
+ processName?: string | undefined;
55
+ };
56
+ }, {
57
+ checkCommand: string;
58
+ reload: {
59
+ kind: "command" | "signal";
60
+ command?: string | undefined;
61
+ signal?: string | undefined;
62
+ processName?: string | undefined;
63
+ };
64
+ }>;
65
+ listeners: z.ZodObject<{
66
+ mixed: z.ZodObject<{
67
+ enabled: z.ZodBoolean;
68
+ listen: z.ZodString;
69
+ port: z.ZodNumber;
70
+ }, "strip", z.ZodTypeAny, {
71
+ enabled: boolean;
72
+ listen: string;
73
+ port: number;
74
+ }, {
75
+ enabled: boolean;
76
+ listen: string;
77
+ port: number;
78
+ }>;
79
+ proxifier: z.ZodObject<{
80
+ enabled: z.ZodBoolean;
81
+ listen: z.ZodString;
82
+ port: z.ZodNumber;
83
+ }, "strip", z.ZodTypeAny, {
84
+ enabled: boolean;
85
+ listen: string;
86
+ port: number;
87
+ }, {
88
+ enabled: boolean;
89
+ listen: string;
90
+ port: number;
91
+ }>;
92
+ }, "strip", z.ZodTypeAny, {
93
+ mixed: {
94
+ enabled: boolean;
95
+ listen: string;
96
+ port: number;
97
+ };
98
+ proxifier: {
99
+ enabled: boolean;
100
+ listen: string;
101
+ port: number;
102
+ };
103
+ }, {
104
+ mixed: {
105
+ enabled: boolean;
106
+ listen: string;
107
+ port: number;
108
+ };
109
+ proxifier: {
110
+ enabled: boolean;
111
+ listen: string;
112
+ port: number;
113
+ };
114
+ }>;
115
+ ruleSets: z.ZodArray<z.ZodObject<{
116
+ tag: z.ZodString;
117
+ format: z.ZodLiteral<"binary">;
118
+ type: z.ZodLiteral<"local">;
119
+ path: z.ZodString;
120
+ }, "strip", z.ZodTypeAny, {
121
+ path: string;
122
+ type: "local";
123
+ tag: string;
124
+ format: "binary";
125
+ }, {
126
+ path: string;
127
+ type: "local";
128
+ tag: string;
129
+ format: "binary";
130
+ }>, "many">;
131
+ groups: z.ZodObject<{
132
+ processProxy: z.ZodObject<{
133
+ type: z.ZodEnum<["selector", "urltest"]>;
134
+ includes: z.ZodArray<z.ZodString, "many">;
135
+ defaultTarget: z.ZodOptional<z.ZodString>;
136
+ defaultNodePattern: z.ZodOptional<z.ZodString>;
137
+ }, "strip", z.ZodTypeAny, {
138
+ type: "selector" | "urltest";
139
+ includes: string[];
140
+ defaultTarget?: string | undefined;
141
+ defaultNodePattern?: string | undefined;
142
+ }, {
143
+ type: "selector" | "urltest";
144
+ includes: string[];
145
+ defaultTarget?: string | undefined;
146
+ defaultNodePattern?: string | undefined;
147
+ }>;
148
+ aiOut: z.ZodObject<{
149
+ type: z.ZodEnum<["selector", "urltest"]>;
150
+ includes: z.ZodArray<z.ZodString, "many">;
151
+ defaultTarget: z.ZodOptional<z.ZodString>;
152
+ defaultNodePattern: z.ZodOptional<z.ZodString>;
153
+ }, "strip", z.ZodTypeAny, {
154
+ type: "selector" | "urltest";
155
+ includes: string[];
156
+ defaultTarget?: string | undefined;
157
+ defaultNodePattern?: string | undefined;
158
+ }, {
159
+ type: "selector" | "urltest";
160
+ includes: string[];
161
+ defaultTarget?: string | undefined;
162
+ defaultNodePattern?: string | undefined;
163
+ }>;
164
+ global: z.ZodObject<{
165
+ type: z.ZodEnum<["selector", "urltest"]>;
166
+ includes: z.ZodArray<z.ZodString, "many">;
167
+ defaultTarget: z.ZodOptional<z.ZodString>;
168
+ defaultNodePattern: z.ZodOptional<z.ZodString>;
169
+ }, "strip", z.ZodTypeAny, {
170
+ type: "selector" | "urltest";
171
+ includes: string[];
172
+ defaultTarget?: string | undefined;
173
+ defaultNodePattern?: string | undefined;
174
+ }, {
175
+ type: "selector" | "urltest";
176
+ includes: string[];
177
+ defaultTarget?: string | undefined;
178
+ defaultNodePattern?: string | undefined;
179
+ }>;
180
+ devCommonOut: z.ZodDefault<z.ZodObject<{
181
+ type: z.ZodEnum<["selector", "urltest"]>;
182
+ includes: z.ZodArray<z.ZodString, "many">;
183
+ defaultTarget: z.ZodOptional<z.ZodString>;
184
+ defaultNodePattern: z.ZodOptional<z.ZodString>;
185
+ }, "strip", z.ZodTypeAny, {
186
+ type: "selector" | "urltest";
187
+ includes: string[];
188
+ defaultTarget?: string | undefined;
189
+ defaultNodePattern?: string | undefined;
190
+ }, {
191
+ type: "selector" | "urltest";
192
+ includes: string[];
193
+ defaultTarget?: string | undefined;
194
+ defaultNodePattern?: string | undefined;
195
+ }>>;
196
+ stitchOut: z.ZodDefault<z.ZodObject<{
197
+ type: z.ZodEnum<["selector", "urltest"]>;
198
+ includes: z.ZodArray<z.ZodString, "many">;
199
+ defaultTarget: z.ZodOptional<z.ZodString>;
200
+ defaultNodePattern: z.ZodOptional<z.ZodString>;
201
+ }, "strip", z.ZodTypeAny, {
202
+ type: "selector" | "urltest";
203
+ includes: string[];
204
+ defaultTarget?: string | undefined;
205
+ defaultNodePattern?: string | undefined;
206
+ }, {
207
+ type: "selector" | "urltest";
208
+ includes: string[];
209
+ defaultTarget?: string | undefined;
210
+ defaultNodePattern?: string | undefined;
211
+ }>>;
212
+ }, "strip", z.ZodTypeAny, {
213
+ processProxy: {
214
+ type: "selector" | "urltest";
215
+ includes: string[];
216
+ defaultTarget?: string | undefined;
217
+ defaultNodePattern?: string | undefined;
218
+ };
219
+ aiOut: {
220
+ type: "selector" | "urltest";
221
+ includes: string[];
222
+ defaultTarget?: string | undefined;
223
+ defaultNodePattern?: string | undefined;
224
+ };
225
+ global: {
226
+ type: "selector" | "urltest";
227
+ includes: string[];
228
+ defaultTarget?: string | undefined;
229
+ defaultNodePattern?: string | undefined;
230
+ };
231
+ devCommonOut: {
232
+ type: "selector" | "urltest";
233
+ includes: string[];
234
+ defaultTarget?: string | undefined;
235
+ defaultNodePattern?: string | undefined;
236
+ };
237
+ stitchOut: {
238
+ type: "selector" | "urltest";
239
+ includes: string[];
240
+ defaultTarget?: string | undefined;
241
+ defaultNodePattern?: string | undefined;
242
+ };
243
+ }, {
244
+ processProxy: {
245
+ type: "selector" | "urltest";
246
+ includes: string[];
247
+ defaultTarget?: string | undefined;
248
+ defaultNodePattern?: string | undefined;
249
+ };
250
+ aiOut: {
251
+ type: "selector" | "urltest";
252
+ includes: string[];
253
+ defaultTarget?: string | undefined;
254
+ defaultNodePattern?: string | undefined;
255
+ };
256
+ global: {
257
+ type: "selector" | "urltest";
258
+ includes: string[];
259
+ defaultTarget?: string | undefined;
260
+ defaultNodePattern?: string | undefined;
261
+ };
262
+ devCommonOut?: {
263
+ type: "selector" | "urltest";
264
+ includes: string[];
265
+ defaultTarget?: string | undefined;
266
+ defaultNodePattern?: string | undefined;
267
+ } | undefined;
268
+ stitchOut?: {
269
+ type: "selector" | "urltest";
270
+ includes: string[];
271
+ defaultTarget?: string | undefined;
272
+ defaultNodePattern?: string | undefined;
273
+ } | undefined;
274
+ }>;
275
+ rules: z.ZodObject<{
276
+ userRulesFile: z.ZodString;
277
+ }, "strip", z.ZodTypeAny, {
278
+ userRulesFile: string;
279
+ }, {
280
+ userRulesFile: string;
281
+ }>;
282
+ verification: z.ZodObject<{
283
+ scenarios: z.ZodArray<z.ZodObject<{
284
+ id: z.ZodString;
285
+ name: z.ZodString;
286
+ url: z.ZodString;
287
+ inbound: z.ZodEnum<["in-mixed", "in-proxifier"]>;
288
+ expectedOutbound: z.ZodString;
289
+ }, "strip", z.ZodTypeAny, {
290
+ id: string;
291
+ name: string;
292
+ url: string;
293
+ inbound: "in-mixed" | "in-proxifier";
294
+ expectedOutbound: string;
295
+ }, {
296
+ id: string;
297
+ name: string;
298
+ url: string;
299
+ inbound: "in-mixed" | "in-proxifier";
300
+ expectedOutbound: string;
301
+ }>, "many">;
302
+ }, "strip", z.ZodTypeAny, {
303
+ scenarios: {
304
+ id: string;
305
+ name: string;
306
+ url: string;
307
+ inbound: "in-mixed" | "in-proxifier";
308
+ expectedOutbound: string;
309
+ }[];
310
+ }, {
311
+ scenarios: {
312
+ id: string;
313
+ name: string;
314
+ url: string;
315
+ inbound: "in-mixed" | "in-proxifier";
316
+ expectedOutbound: string;
317
+ }[];
318
+ }>;
319
+ schedule: z.ZodObject<{
320
+ enabled: z.ZodBoolean;
321
+ intervalMinutes: z.ZodNumber;
322
+ }, "strip", z.ZodTypeAny, {
323
+ enabled: boolean;
324
+ intervalMinutes: number;
325
+ }, {
326
+ enabled: boolean;
327
+ intervalMinutes: number;
328
+ }>;
329
+ authoring: z.ZodDefault<z.ZodObject<{
330
+ provider: z.ZodDefault<z.ZodEnum<["deterministic", "auto", "claude", "exec"]>>;
331
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
332
+ exec: z.ZodOptional<z.ZodObject<{
333
+ command: z.ZodString;
334
+ args: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
335
+ }, "strip", z.ZodTypeAny, {
336
+ command: string;
337
+ args: string[];
338
+ }, {
339
+ command: string;
340
+ args?: string[] | undefined;
341
+ }>>;
342
+ }, "strip", z.ZodTypeAny, {
343
+ provider: "deterministic" | "auto" | "claude" | "exec";
344
+ timeoutMs: number;
345
+ exec?: {
346
+ command: string;
347
+ args: string[];
348
+ } | undefined;
349
+ }, {
350
+ exec?: {
351
+ command: string;
352
+ args?: string[] | undefined;
353
+ } | undefined;
354
+ provider?: "deterministic" | "auto" | "claude" | "exec" | undefined;
355
+ timeoutMs?: number | undefined;
356
+ }>>;
357
+ }, "strip", z.ZodTypeAny, {
358
+ version: 1;
359
+ subscription: {
360
+ format: "base64-lines";
361
+ url: string;
362
+ protocols: "trojan"[];
363
+ };
364
+ output: {
365
+ stagingPath: string;
366
+ livePath: string;
367
+ backupPath: string;
368
+ };
369
+ runtime: {
370
+ checkCommand: string;
371
+ reload: {
372
+ kind: "command" | "signal";
373
+ command?: string | undefined;
374
+ signal?: string | undefined;
375
+ processName?: string | undefined;
376
+ };
377
+ };
378
+ listeners: {
379
+ mixed: {
380
+ enabled: boolean;
381
+ listen: string;
382
+ port: number;
383
+ };
384
+ proxifier: {
385
+ enabled: boolean;
386
+ listen: string;
387
+ port: number;
388
+ };
389
+ };
390
+ ruleSets: {
391
+ path: string;
392
+ type: "local";
393
+ tag: string;
394
+ format: "binary";
395
+ }[];
396
+ groups: {
397
+ processProxy: {
398
+ type: "selector" | "urltest";
399
+ includes: string[];
400
+ defaultTarget?: string | undefined;
401
+ defaultNodePattern?: string | undefined;
402
+ };
403
+ aiOut: {
404
+ type: "selector" | "urltest";
405
+ includes: string[];
406
+ defaultTarget?: string | undefined;
407
+ defaultNodePattern?: string | undefined;
408
+ };
409
+ global: {
410
+ type: "selector" | "urltest";
411
+ includes: string[];
412
+ defaultTarget?: string | undefined;
413
+ defaultNodePattern?: string | undefined;
414
+ };
415
+ devCommonOut: {
416
+ type: "selector" | "urltest";
417
+ includes: string[];
418
+ defaultTarget?: string | undefined;
419
+ defaultNodePattern?: string | undefined;
420
+ };
421
+ stitchOut: {
422
+ type: "selector" | "urltest";
423
+ includes: string[];
424
+ defaultTarget?: string | undefined;
425
+ defaultNodePattern?: string | undefined;
426
+ };
427
+ };
428
+ rules: {
429
+ userRulesFile: string;
430
+ };
431
+ verification: {
432
+ scenarios: {
433
+ id: string;
434
+ name: string;
435
+ url: string;
436
+ inbound: "in-mixed" | "in-proxifier";
437
+ expectedOutbound: string;
438
+ }[];
439
+ };
440
+ schedule: {
441
+ enabled: boolean;
442
+ intervalMinutes: number;
443
+ };
444
+ authoring: {
445
+ provider: "deterministic" | "auto" | "claude" | "exec";
446
+ timeoutMs: number;
447
+ exec?: {
448
+ command: string;
449
+ args: string[];
450
+ } | undefined;
451
+ };
452
+ }, {
453
+ version: 1;
454
+ subscription: {
455
+ format: "base64-lines";
456
+ url: string;
457
+ protocols: "trojan"[];
458
+ };
459
+ output: {
460
+ stagingPath: string;
461
+ livePath: string;
462
+ backupPath: string;
463
+ };
464
+ runtime: {
465
+ checkCommand: string;
466
+ reload: {
467
+ kind: "command" | "signal";
468
+ command?: string | undefined;
469
+ signal?: string | undefined;
470
+ processName?: string | undefined;
471
+ };
472
+ };
473
+ listeners: {
474
+ mixed: {
475
+ enabled: boolean;
476
+ listen: string;
477
+ port: number;
478
+ };
479
+ proxifier: {
480
+ enabled: boolean;
481
+ listen: string;
482
+ port: number;
483
+ };
484
+ };
485
+ ruleSets: {
486
+ path: string;
487
+ type: "local";
488
+ tag: string;
489
+ format: "binary";
490
+ }[];
491
+ groups: {
492
+ processProxy: {
493
+ type: "selector" | "urltest";
494
+ includes: string[];
495
+ defaultTarget?: string | undefined;
496
+ defaultNodePattern?: string | undefined;
497
+ };
498
+ aiOut: {
499
+ type: "selector" | "urltest";
500
+ includes: string[];
501
+ defaultTarget?: string | undefined;
502
+ defaultNodePattern?: string | undefined;
503
+ };
504
+ global: {
505
+ type: "selector" | "urltest";
506
+ includes: string[];
507
+ defaultTarget?: string | undefined;
508
+ defaultNodePattern?: string | undefined;
509
+ };
510
+ devCommonOut?: {
511
+ type: "selector" | "urltest";
512
+ includes: string[];
513
+ defaultTarget?: string | undefined;
514
+ defaultNodePattern?: string | undefined;
515
+ } | undefined;
516
+ stitchOut?: {
517
+ type: "selector" | "urltest";
518
+ includes: string[];
519
+ defaultTarget?: string | undefined;
520
+ defaultNodePattern?: string | undefined;
521
+ } | undefined;
522
+ };
523
+ rules: {
524
+ userRulesFile: string;
525
+ };
526
+ verification: {
527
+ scenarios: {
528
+ id: string;
529
+ name: string;
530
+ url: string;
531
+ inbound: "in-mixed" | "in-proxifier";
532
+ expectedOutbound: string;
533
+ }[];
534
+ };
535
+ schedule: {
536
+ enabled: boolean;
537
+ intervalMinutes: number;
538
+ };
539
+ authoring?: {
540
+ exec?: {
541
+ command: string;
542
+ args?: string[] | undefined;
543
+ } | undefined;
544
+ provider?: "deterministic" | "auto" | "claude" | "exec" | undefined;
545
+ timeoutMs?: number | undefined;
546
+ } | undefined;
547
+ }>;
548
+ export type BuilderConfig = z.infer<typeof builderConfigSchema>;
@@ -0,0 +1,92 @@
1
+ import { z } from "zod";
2
+ const listenerSchema = z.object({
3
+ enabled: z.boolean(),
4
+ listen: z.string(),
5
+ port: z.number().int().positive(),
6
+ });
7
+ const ruleSetSchema = z.object({
8
+ tag: z.string().min(1),
9
+ format: z.literal("binary"),
10
+ type: z.literal("local"),
11
+ path: z.string().min(1),
12
+ });
13
+ const groupSchema = z.object({
14
+ type: z.enum(["selector", "urltest"]),
15
+ includes: z.array(z.string().min(1)).min(1),
16
+ defaultTarget: z.string().min(1).optional(),
17
+ defaultNodePattern: z.string().min(1).optional(),
18
+ });
19
+ const verificationScenarioSchema = z.object({
20
+ id: z.string().min(1),
21
+ name: z.string().min(1),
22
+ url: z.string().url(),
23
+ inbound: z.enum(["in-mixed", "in-proxifier"]),
24
+ expectedOutbound: z.string().min(1),
25
+ });
26
+ const authoringSchema = z
27
+ .object({
28
+ provider: z.enum(["deterministic", "auto", "claude", "exec"]).default("deterministic"),
29
+ timeoutMs: z.number().int().positive().default(4000),
30
+ exec: z
31
+ .object({
32
+ command: z.string().min(1),
33
+ args: z.array(z.string()).default([]),
34
+ })
35
+ .optional(),
36
+ })
37
+ .default({
38
+ provider: "deterministic",
39
+ timeoutMs: 4000,
40
+ });
41
+ export const builderConfigSchema = z.object({
42
+ version: z.literal(1),
43
+ subscription: z.object({
44
+ url: z.string().url(),
45
+ format: z.literal("base64-lines"),
46
+ protocols: z.array(z.literal("trojan")).min(1),
47
+ }),
48
+ output: z.object({
49
+ stagingPath: z.string().min(1),
50
+ livePath: z.string().min(1),
51
+ backupPath: z.string().min(1),
52
+ }),
53
+ runtime: z.object({
54
+ checkCommand: z.string().min(1),
55
+ reload: z.object({
56
+ kind: z.enum(["signal", "command"]),
57
+ processName: z.string().min(1).optional(),
58
+ signal: z.string().min(1).optional(),
59
+ command: z.string().min(1).optional(),
60
+ }),
61
+ }),
62
+ listeners: z.object({
63
+ mixed: listenerSchema,
64
+ proxifier: listenerSchema,
65
+ }),
66
+ ruleSets: z.array(ruleSetSchema),
67
+ groups: z.object({
68
+ processProxy: groupSchema,
69
+ aiOut: groupSchema,
70
+ global: groupSchema,
71
+ devCommonOut: groupSchema.default({
72
+ type: "selector",
73
+ includes: ["US", "SG", "JP", "HK"],
74
+ }),
75
+ stitchOut: groupSchema.default({
76
+ type: "selector",
77
+ includes: ["US", "SG", "JP"],
78
+ }),
79
+ }),
80
+ rules: z.object({
81
+ userRulesFile: z.string().min(1),
82
+ }),
83
+ verification: z.object({
84
+ scenarios: z.array(verificationScenarioSchema).min(1),
85
+ }),
86
+ schedule: z.object({
87
+ enabled: z.boolean(),
88
+ intervalMinutes: z.number().int().positive(),
89
+ }),
90
+ authoring: authoringSchema,
91
+ });
92
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface BuildArtifact {
2
+ readonly config: Record<string, unknown>;
3
+ readonly warnings: readonly string[];
4
+ }
5
+ export interface BuildResult {
6
+ readonly outputPath: string;
7
+ readonly warnings: readonly string[];
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/domain/config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export type SupportedProtocol = "trojan";
2
+ export interface NormalizedNode {
3
+ readonly protocol: SupportedProtocol;
4
+ readonly tag: string;
5
+ readonly server: string;
6
+ readonly serverPort: number;
7
+ readonly password: string;
8
+ readonly sni?: string;
9
+ readonly insecure?: boolean;
10
+ readonly regionHint?: string;
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/domain/node.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ export interface Outbound {
2
+ readonly type: string;
3
+ readonly tag: string;
4
+ }
5
+ export interface TrojanOutbound extends Outbound {
6
+ readonly type: "trojan";
7
+ readonly server: string;
8
+ readonly server_port: number;
9
+ readonly password: string;
10
+ readonly tls: {
11
+ readonly enabled: true;
12
+ readonly server_name?: string;
13
+ readonly insecure?: boolean;
14
+ };
15
+ }