@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.
- package/LICENSE +21 -0
- package/README.md +265 -0
- package/dist/cli/command-helpers.d.ts +6 -0
- package/dist/cli/command-helpers.js +34 -0
- package/dist/cli/command-helpers.js.map +1 -0
- package/dist/cli/commands/apply.d.ts +2 -0
- package/dist/cli/commands/apply.js +32 -0
- package/dist/cli/commands/apply.js.map +1 -0
- package/dist/cli/commands/author.d.ts +2 -0
- package/dist/cli/commands/author.js +194 -0
- package/dist/cli/commands/author.js.map +1 -0
- package/dist/cli/commands/build.d.ts +2 -0
- package/dist/cli/commands/build.js +198 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/check.d.ts +2 -0
- package/dist/cli/commands/check.js +23 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +35 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.js +23 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/reload.d.ts +2 -0
- package/dist/cli/commands/reload.js +21 -0
- package/dist/cli/commands/reload.js.map +1 -0
- package/dist/cli/commands/run.d.ts +2 -0
- package/dist/cli/commands/run.js +25 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/schedule.d.ts +2 -0
- package/dist/cli/commands/schedule.js +77 -0
- package/dist/cli/commands/schedule.js.map +1 -0
- package/dist/cli/commands/templates.d.ts +2 -0
- package/dist/cli/commands/templates.js +34 -0
- package/dist/cli/commands/templates.js.map +1 -0
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.js +52 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +2 -0
- package/dist/cli/commands/verify.js +49 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.js +55 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/load-config.d.ts +2 -0
- package/dist/config/load-config.js +29 -0
- package/dist/config/load-config.js.map +1 -0
- package/dist/config/schema.d.ts +548 -0
- package/dist/config/schema.js +92 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/domain/config.d.ts +8 -0
- package/dist/domain/config.js +2 -0
- package/dist/domain/config.js.map +1 -0
- package/dist/domain/node.d.ts +11 -0
- package/dist/domain/node.js +2 -0
- package/dist/domain/node.js.map +1 -0
- package/dist/domain/outbound.d.ts +15 -0
- package/dist/domain/outbound.js +2 -0
- package/dist/domain/outbound.js.map +1 -0
- package/dist/domain/subscription.d.ts +6 -0
- package/dist/domain/subscription.js +2 -0
- package/dist/domain/subscription.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/authoring/index.d.ts +41 -0
- package/dist/modules/authoring/index.js +596 -0
- package/dist/modules/authoring/index.js.map +1 -0
- package/dist/modules/build/index.d.ts +13 -0
- package/dist/modules/build/index.js +39 -0
- package/dist/modules/build/index.js.map +1 -0
- package/dist/modules/compiler/index.d.ts +10 -0
- package/dist/modules/compiler/index.js +305 -0
- package/dist/modules/compiler/index.js.map +1 -0
- package/dist/modules/doctor/index.d.ts +17 -0
- package/dist/modules/doctor/index.js +89 -0
- package/dist/modules/doctor/index.js.map +1 -0
- package/dist/modules/fetcher/index.d.ts +4 -0
- package/dist/modules/fetcher/index.js +42 -0
- package/dist/modules/fetcher/index.js.map +1 -0
- package/dist/modules/init/index.d.ts +12 -0
- package/dist/modules/init/index.js +41 -0
- package/dist/modules/init/index.js.map +1 -0
- package/dist/modules/manager/index.d.ts +29 -0
- package/dist/modules/manager/index.js +133 -0
- package/dist/modules/manager/index.js.map +1 -0
- package/dist/modules/natural-language/index.d.ts +54 -0
- package/dist/modules/natural-language/index.js +458 -0
- package/dist/modules/natural-language/index.js.map +1 -0
- package/dist/modules/parser/index.d.ts +10 -0
- package/dist/modules/parser/index.js +113 -0
- package/dist/modules/parser/index.js.map +1 -0
- package/dist/modules/preview/index.d.ts +22 -0
- package/dist/modules/preview/index.js +141 -0
- package/dist/modules/preview/index.js.map +1 -0
- package/dist/modules/rule-templates/index.d.ts +15 -0
- package/dist/modules/rule-templates/index.js +200 -0
- package/dist/modules/rule-templates/index.js.map +1 -0
- package/dist/modules/schedule/index.d.ts +32 -0
- package/dist/modules/schedule/index.js +155 -0
- package/dist/modules/schedule/index.js.map +1 -0
- package/dist/modules/update/index.d.ts +22 -0
- package/dist/modules/update/index.js +38 -0
- package/dist/modules/update/index.js.map +1 -0
- package/dist/modules/user-rules/index.d.ts +18 -0
- package/dist/modules/user-rules/index.js +98 -0
- package/dist/modules/user-rules/index.js.map +1 -0
- package/dist/modules/verification/index.d.ts +49 -0
- package/dist/modules/verification/index.js +432 -0
- package/dist/modules/verification/index.js.map +1 -0
- package/dist/shared/errors.d.ts +3 -0
- package/dist/shared/errors.js +7 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/logger.d.ts +2 -0
- package/dist/shared/logger.js +5 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/result.d.ts +11 -0
- package/dist/shared/result.js +7 -0
- package/dist/shared/result.js.map +1 -0
- package/docs/antigravity-endpoints.md +77 -0
- package/docs/competitive-landscape.md +45 -0
- package/docs/development-workflow.md +80 -0
- package/docs/natural-language-authoring.md +376 -0
- package/docs/positioning.md +42 -0
- package/docs/releasing.md +72 -0
- package/docs/rule-templates.md +122 -0
- package/docs/rules-dsl.md +107 -0
- package/docs/runtime-on-macos.md +42 -0
- package/docs/sing-box-config-primer.md +39 -0
- package/docs/subscription-format.md +38 -0
- package/examples/builder.config.yaml +220 -0
- package/examples/custom.rules.yaml +18 -0
- package/package.json +51 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export async function initWorkspace(input) {
|
|
5
|
+
const configTemplatePath = path.join(input.examplesDir, "builder.config.yaml");
|
|
6
|
+
const rulesTemplatePath = path.join(input.examplesDir, "custom.rules.yaml");
|
|
7
|
+
const [configTemplate, rulesTemplate] = await Promise.all([
|
|
8
|
+
readFile(configTemplatePath, "utf8"),
|
|
9
|
+
readFile(rulesTemplatePath, "utf8"),
|
|
10
|
+
]);
|
|
11
|
+
const renderedConfig = input.subscriptionUrl
|
|
12
|
+
? configTemplate.replace('url: "https://example.com/subscription"', `url: "${escapeYamlDoubleQuotedString(input.subscriptionUrl)}"`)
|
|
13
|
+
: configTemplate;
|
|
14
|
+
const configWithRulesPath = renderedConfig.replace('userRulesFile: "~/.config/singbox-iac/rules/custom.rules.yaml"', `userRulesFile: "${escapeYamlDoubleQuotedString(input.rulesOutPath)}"`);
|
|
15
|
+
await writeIfAllowed(input.configOutPath, configWithRulesPath, input.force === true);
|
|
16
|
+
await writeIfAllowed(input.rulesOutPath, rulesTemplate, input.force === true);
|
|
17
|
+
return {
|
|
18
|
+
configPath: input.configOutPath,
|
|
19
|
+
rulesPath: input.rulesOutPath,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function writeIfAllowed(filePath, content, force) {
|
|
23
|
+
if (!force && (await pathExists(filePath))) {
|
|
24
|
+
throw new Error(`Refusing to overwrite existing file: ${filePath}`);
|
|
25
|
+
}
|
|
26
|
+
await mkdir(path.dirname(filePath), { recursive: true });
|
|
27
|
+
await writeFile(filePath, content, "utf8");
|
|
28
|
+
}
|
|
29
|
+
async function pathExists(filePath) {
|
|
30
|
+
try {
|
|
31
|
+
await access(filePath, constants.F_OK);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function escapeYamlDoubleQuotedString(value) {
|
|
39
|
+
return value.replaceAll("\\", "\\\\").replaceAll('"', '\\"');
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,IAAI,MAAM,WAAW,CAAC;AAe7B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAyB;IAC3D,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAC/E,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAE5E,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACpC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe;QAC1C,CAAC,CAAC,cAAc,CAAC,OAAO,CACpB,yCAAyC,EACzC,SAAS,4BAA4B,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAChE;QACH,CAAC,CAAC,cAAc,CAAC;IACnB,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,CAChD,gEAAgE,EAChE,mBAAmB,4BAA4B,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CACvE,CAAC;IAEF,MAAM,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IACrF,MAAM,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAE9E,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,aAAa;QAC/B,SAAS,EAAE,KAAK,CAAC,YAAY;KAC9B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe,EAAE,KAAc;IAC7E,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAa;IACjD,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { BuilderConfig } from "../../config/schema.js";
|
|
2
|
+
export interface CheckConfigInput {
|
|
3
|
+
readonly configPath: string;
|
|
4
|
+
readonly singBoxBinary?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ApplyConfigInput {
|
|
7
|
+
readonly stagingPath: string;
|
|
8
|
+
readonly livePath: string;
|
|
9
|
+
readonly backupPath?: string;
|
|
10
|
+
readonly singBoxBinary?: string;
|
|
11
|
+
readonly reload?: boolean;
|
|
12
|
+
readonly runtime?: BuilderConfig["runtime"]["reload"];
|
|
13
|
+
}
|
|
14
|
+
export interface RunConfigInput {
|
|
15
|
+
readonly configPath: string;
|
|
16
|
+
readonly singBoxBinary?: string;
|
|
17
|
+
readonly validateFirst?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface CheckConfigResult {
|
|
20
|
+
readonly binaryPath: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function checkConfig(input: CheckConfigInput): Promise<CheckConfigResult>;
|
|
23
|
+
export declare function applyConfig(input: ApplyConfigInput): Promise<void>;
|
|
24
|
+
export declare function runConfig(input: RunConfigInput): Promise<number>;
|
|
25
|
+
export declare function reloadRuntime(input: {
|
|
26
|
+
readonly singBoxBinary?: string;
|
|
27
|
+
readonly runtime: BuilderConfig["runtime"]["reload"];
|
|
28
|
+
}): Promise<void>;
|
|
29
|
+
export declare function resolveSingBoxBinary(explicitPath?: string): Promise<string>;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { access, copyFile, mkdir } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
export async function checkConfig(input) {
|
|
6
|
+
const binaryPath = await resolveSingBoxBinary(input.singBoxBinary);
|
|
7
|
+
await runCommand(binaryPath, ["check", "-c", input.configPath]);
|
|
8
|
+
return { binaryPath };
|
|
9
|
+
}
|
|
10
|
+
export async function applyConfig(input) {
|
|
11
|
+
const { binaryPath } = await checkConfig({
|
|
12
|
+
configPath: input.stagingPath,
|
|
13
|
+
...(input.singBoxBinary ? { singBoxBinary: input.singBoxBinary } : {}),
|
|
14
|
+
});
|
|
15
|
+
await mkdir(path.dirname(input.livePath), { recursive: true });
|
|
16
|
+
if (input.backupPath && (await pathExists(input.livePath))) {
|
|
17
|
+
await mkdir(path.dirname(input.backupPath), { recursive: true });
|
|
18
|
+
await copyFile(input.livePath, input.backupPath);
|
|
19
|
+
}
|
|
20
|
+
await copyFile(input.stagingPath, input.livePath);
|
|
21
|
+
if (input.reload && input.runtime) {
|
|
22
|
+
await reloadSingBox({
|
|
23
|
+
kind: input.runtime.kind,
|
|
24
|
+
...(input.runtime.processName ? { processName: input.runtime.processName } : {}),
|
|
25
|
+
...(input.runtime.signal ? { signal: input.runtime.signal } : {}),
|
|
26
|
+
...(input.runtime.command ? { command: input.runtime.command } : {}),
|
|
27
|
+
binaryPath,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function runConfig(input) {
|
|
32
|
+
const binaryPath = await resolveSingBoxBinary(input.singBoxBinary);
|
|
33
|
+
if (input.validateFirst !== false) {
|
|
34
|
+
await checkConfig({
|
|
35
|
+
configPath: input.configPath,
|
|
36
|
+
singBoxBinary: binaryPath,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
const child = spawn(binaryPath, ["run", "-c", input.configPath], {
|
|
41
|
+
stdio: "inherit",
|
|
42
|
+
});
|
|
43
|
+
child.on("error", reject);
|
|
44
|
+
child.on("close", (code) => resolve(code ?? 0));
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export async function reloadRuntime(input) {
|
|
48
|
+
const binaryPath = await resolveSingBoxBinary(input.singBoxBinary);
|
|
49
|
+
await reloadSingBox({
|
|
50
|
+
kind: input.runtime.kind,
|
|
51
|
+
...(input.runtime.processName ? { processName: input.runtime.processName } : {}),
|
|
52
|
+
...(input.runtime.signal ? { signal: input.runtime.signal } : {}),
|
|
53
|
+
...(input.runtime.command ? { command: input.runtime.command } : {}),
|
|
54
|
+
binaryPath,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export async function resolveSingBoxBinary(explicitPath) {
|
|
58
|
+
const candidates = [
|
|
59
|
+
explicitPath,
|
|
60
|
+
process.env.SING_BOX_BIN,
|
|
61
|
+
path.resolve(process.cwd(), ".tools", "sing-box-1.13.4-darwin-arm64", "sing-box"),
|
|
62
|
+
...resolvePathCandidates("sing-box"),
|
|
63
|
+
].filter((candidate) => typeof candidate === "string" && candidate.length > 0);
|
|
64
|
+
for (const candidate of candidates) {
|
|
65
|
+
if (await isExecutable(candidate)) {
|
|
66
|
+
return candidate;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
throw new Error("Unable to find a usable sing-box binary. Set SING_BOX_BIN or install sing-box on PATH.");
|
|
70
|
+
}
|
|
71
|
+
async function reloadSingBox(input) {
|
|
72
|
+
if (input.kind === "command") {
|
|
73
|
+
if (!input.command) {
|
|
74
|
+
throw new Error("Reload command was requested but no command was configured.");
|
|
75
|
+
}
|
|
76
|
+
await runCommand("/bin/sh", ["-lc", input.command]);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (!input.processName || !input.signal) {
|
|
80
|
+
throw new Error("Signal-based reload requires processName and signal.");
|
|
81
|
+
}
|
|
82
|
+
await runCommand("/usr/bin/killall", [`-${input.signal}`, input.processName]);
|
|
83
|
+
}
|
|
84
|
+
async function isExecutable(filePath) {
|
|
85
|
+
try {
|
|
86
|
+
await access(filePath, constants.X_OK);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function pathExists(filePath) {
|
|
94
|
+
try {
|
|
95
|
+
await access(filePath, constants.F_OK);
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function resolvePathCandidates(commandName) {
|
|
103
|
+
return (process.env.PATH ?? "")
|
|
104
|
+
.split(path.delimiter)
|
|
105
|
+
.filter((entry) => entry.length > 0)
|
|
106
|
+
.map((entry) => path.join(entry, commandName))
|
|
107
|
+
.filter((candidate, index, items) => items.indexOf(candidate) === index);
|
|
108
|
+
}
|
|
109
|
+
async function runCommand(command, args) {
|
|
110
|
+
await new Promise((resolve, reject) => {
|
|
111
|
+
const child = spawn(command, args, {
|
|
112
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
113
|
+
});
|
|
114
|
+
let stdout = "";
|
|
115
|
+
let stderr = "";
|
|
116
|
+
child.stdout.on("data", (chunk) => {
|
|
117
|
+
stdout += chunk.toString();
|
|
118
|
+
});
|
|
119
|
+
child.stderr.on("data", (chunk) => {
|
|
120
|
+
stderr += chunk.toString();
|
|
121
|
+
});
|
|
122
|
+
child.on("error", reject);
|
|
123
|
+
child.on("close", (code) => {
|
|
124
|
+
if (code === 0) {
|
|
125
|
+
resolve();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const details = [stdout.trim(), stderr.trim()].filter((value) => value.length > 0).join("\n");
|
|
129
|
+
reject(new Error(details || `Command failed: ${command} ${args.join(" ")}`));
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/manager/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { BuilderConfig } from "../../config/schema.js";
|
|
2
|
+
import type { UserRouteRule } from "../user-rules/index.js";
|
|
3
|
+
export interface NaturalLanguageGroupOverride {
|
|
4
|
+
readonly defaultTarget?: string;
|
|
5
|
+
readonly defaultNodePattern?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface NaturalLanguageVerificationOverride {
|
|
8
|
+
readonly inbound?: "in-mixed" | "in-proxifier";
|
|
9
|
+
readonly domain?: string;
|
|
10
|
+
readonly domainSuffix?: string;
|
|
11
|
+
readonly expectedOutbound: string;
|
|
12
|
+
}
|
|
13
|
+
export interface NaturalLanguagePlan {
|
|
14
|
+
readonly beforeBuiltins: readonly UserRouteRule[];
|
|
15
|
+
readonly afterBuiltins: readonly UserRouteRule[];
|
|
16
|
+
readonly templateIds: readonly string[];
|
|
17
|
+
readonly notes: readonly string[];
|
|
18
|
+
readonly scheduleIntervalMinutes?: number;
|
|
19
|
+
readonly groupDefaults?: Partial<{
|
|
20
|
+
processProxy: NaturalLanguageGroupOverride;
|
|
21
|
+
aiOut: NaturalLanguageGroupOverride;
|
|
22
|
+
devCommonOut: NaturalLanguageGroupOverride;
|
|
23
|
+
stitchOut: NaturalLanguageGroupOverride;
|
|
24
|
+
}>;
|
|
25
|
+
readonly verificationOverrides?: readonly NaturalLanguageVerificationOverride[];
|
|
26
|
+
}
|
|
27
|
+
export declare function generateRulesFromPrompt(prompt: string): NaturalLanguagePlan;
|
|
28
|
+
export declare function writeGeneratedRules(input: {
|
|
29
|
+
readonly filePath: string;
|
|
30
|
+
readonly plan: NaturalLanguagePlan;
|
|
31
|
+
}): Promise<string>;
|
|
32
|
+
export declare function renderGeneratedRules(plan: NaturalLanguagePlan): string;
|
|
33
|
+
export declare function updateBuilderSchedule(input: {
|
|
34
|
+
readonly configPath: string;
|
|
35
|
+
readonly intervalMinutes: number;
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
export declare function updateBuilderAuthoring(input: {
|
|
38
|
+
readonly configPath: string;
|
|
39
|
+
readonly rulesPath?: string;
|
|
40
|
+
readonly intervalMinutes?: number;
|
|
41
|
+
readonly groupDefaults?: NaturalLanguagePlan["groupDefaults"];
|
|
42
|
+
readonly verificationOverrides?: NaturalLanguagePlan["verificationOverrides"];
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
export declare function renderUpdatedBuilderConfig(input: {
|
|
45
|
+
readonly rawConfig: string;
|
|
46
|
+
readonly rulesPath?: string;
|
|
47
|
+
readonly intervalMinutes?: number;
|
|
48
|
+
readonly groupDefaults?: NaturalLanguagePlan["groupDefaults"];
|
|
49
|
+
readonly verificationOverrides?: NaturalLanguagePlan["verificationOverrides"];
|
|
50
|
+
}): string;
|
|
51
|
+
export declare function applyPlanToBuilderConfig(config: BuilderConfig, input: {
|
|
52
|
+
readonly rulesPath: string;
|
|
53
|
+
readonly plan: NaturalLanguagePlan;
|
|
54
|
+
}): BuilderConfig;
|