@singbox-iac/cli 0.1.0 → 0.1.2

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/README.md CHANGED
@@ -1,265 +1,337 @@
1
- # Sing-box IaC Builder
1
+ # Singbox IaC
2
2
 
3
- Policy-first subscription compiler for `sing-box` on macOS.
3
+ [English](./README-en.md)
4
4
 
5
- `Sing-box IaC Builder` turns fragile proxy subscriptions into deterministic, verifiable `sing-box` infrastructure. It fetches provider subscriptions, parses share links into a normalized intermediate model, compiles them with a controlled routing policy, validates the generated configuration, and applies updates safely in a headless macOS environment.
5
+ [![CI](https://github.com/menlong999/singbox-iac/actions/workflows/ci.yml/badge.svg)](https://github.com/menlong999/singbox-iac/actions/workflows/ci.yml)
6
+ [![npm version](https://img.shields.io/npm/v/%40singbox-iac%2Fcli)](https://www.npmjs.com/package/@singbox-iac/cli)
7
+ [![license](https://img.shields.io/npm/l/%40singbox-iac%2Fcli)](https://github.com/menlong999/singbox-iac/blob/main/LICENSE)
6
8
 
7
- This project is built for users who have outgrown GUI clients and template patch scripts:
9
+ 面向 macOS 无头场景的 `sing-box` 订阅编译器。
8
10
 
9
- - Subscriptions should provide nodes, not define your whole routing architecture.
10
- - Route priority should be explicit and testable.
11
- - Runtime updates should be validated before they touch the live config.
12
- - `Proxifier`, multiple listeners, AI application routing, and custom rule sets should be first-class use cases.
11
+ `Singbox IaC` 把机场订阅当作节点输入,而不是最终配置本身,再结合固定路由策略、规则集和用户意图,生成可验证、可发布、可定时更新的 `sing-box` 配置。
13
12
 
14
- ## Why This Exists
13
+ ## 项目简介
15
14
 
16
- Most GUI-centric workflows solve "import subscription", not "manage proxy infrastructure".
15
+ 这是一个面向开发者的代理基础设施 CLI。它解决的不是“导入订阅”这个单点问题,而是把订阅、规则、验证、发布和定时更新串成一条可控链路。
17
16
 
18
- Typical pain points:
17
+ 核心理念:
19
18
 
20
- - Large provider groups with poor or unstable region segmentation
21
- - Template- or JavaScript-based patching that breaks whenever the upstream subscription changes
22
- - Opaque config merge behavior and hard-to-debug rule precedence issues
23
- - High resource usage from GUI shells that should not be involved in a headless proxy runtime
24
- - Weak support for process-aware routing, `Proxifier`, and application-specific AI egress policies
19
+ - 订阅只负责提供节点
20
+ - 路由策略由你掌控
21
+ - 配置生成后必须可验证
22
+ - 进程级分流和站点级分流都应该是一等能力
25
23
 
26
- `Sing-box IaC Builder` treats `sing-box` as infrastructure:
24
+ ## 为什么要做这个项目
27
25
 
28
- - `subscription -> parser -> compiler -> check -> publish -> reload`
29
- - Deterministic route ordering
30
- - Human-friendly rule authoring
31
- - Safe rollout with staging and validation
32
- - macOS-first headless operation via `launchd`
26
+ 很多用户在 macOS 上会使用 Clash Verge 一类 GUI 客户端,再配合机场订阅、全局 JS merge 脚本、Proxifier、规则分组做复杂定制。这个方案能用,但常见问题也很明显:
33
27
 
34
- ## Positioning
28
+ - 订阅分组粗糙,无法直接表达开发者真实需求
29
+ - GUI 内部合并和脚本 patch 过于黑盒
30
+ - 规则优先级容易被上游订阅变化破坏
31
+ - 某些 AI IDE 或桌面应用不走系统代理,必须依赖 Proxifier
32
+ - 开启 TUN 或全局代理后,本地其他访问可能明显变慢
33
+ - GUI 壳本身资源占用高,不适合长期无头运行
35
34
 
36
- This is not:
35
+ `Singbox IaC` 的目标就是把这些需求收敛成:
37
36
 
38
- - another GUI client
39
- - an online converter
40
- - a one-off template filler
41
- - a generic multi-client subscription merger
37
+ `subscription -> parse -> compile -> verify -> apply -> schedule`
42
38
 
43
- This is:
39
+ ## 架构图
44
40
 
45
- - a `sing-box` configuration compiler
46
- - a runtime-safe CLI for headless macOS setups
47
- - a policy-first abstraction over fragile provider subscriptions
48
- - a foundation for future natural-language rule authoring
41
+ ```mermaid
42
+ flowchart LR
43
+ A["订阅地址 / 本地订阅文件"] --> B["Fetcher + Decoder"]
44
+ B --> C["Parser (Trojan 链接 -> 中间模型)"]
45
+ C --> D["Compiler"]
46
+ E["自然语言意图 / 极简 DSL"] --> D
47
+ F["内建策略 + Rule Set (.srs)"] --> D
48
+ D --> G["生成 sing-box staging config"]
49
+ G --> H["Check + Route Verification"]
50
+ H --> I["发布 live config"]
51
+ I --> J["Reload / Run sing-box"]
52
+ I --> K["launchd 定时任务"]
53
+ ```
54
+
55
+ 系统本质上分三层:
56
+
57
+ - 输入层:订阅、规则集、用户意图
58
+ - 编译层:解析器、编译器、策略组装
59
+ - 运行层:校验、发布、重载、定时任务
60
+
61
+ ## 用户旅程
62
+
63
+ ```mermaid
64
+ flowchart TD
65
+ A["用户提供订阅地址 + 一句话需求"] --> B["setup"]
66
+ B --> C["检测本地环境<br/>macOS / sing-box / Chrome / AI CLI"]
67
+ C --> D["根据意图生成规则"]
68
+ D --> E["同步本地 rule set"]
69
+ E --> F["构建 staging config"]
70
+ F --> G["验证关键路由"]
71
+ G --> H["发布 live config"]
72
+ H --> I["安装 schedule"]
73
+ I --> J["运行或重载 sing-box"]
74
+ ```
75
+
76
+ 典型开发者路径:
77
+
78
+ 1. 填订阅地址
79
+ 2. 用一句话描述需求
80
+ 3. 自动生成配置并验证关键分流
81
+ 4. IDE / AI 应用走 Proxifier,浏览器走普通代理入口
82
+ 5. 通过 `launchd` 自动更新配置
83
+
84
+ ## 核心功能
85
+
86
+ ### 1. 自然语言描述
87
+
88
+ 你可以直接用自然语言表达需求,而不是手写原始 `sing-box` JSON:
89
+
90
+ - `GitHub 这类开发类都走香港`
91
+ - `Antigravity 进程级走美国`
92
+ - `Gemini 走新加坡`
93
+ - `Apple TV 和 Netflix 走新加坡`
94
+
95
+ 系统会把这些意图编译成内部规则,再进一步生成 `sing-box` 配置。
96
+
97
+ ### 2. 极简 DSL
98
+
99
+ 对于高级用户,仍然保留了一个极简 YAML DSL,用于补充少量例外规则,而不是逼用户手写整份 `sing-box` JSON。
100
+
101
+ 适合的场景:
102
+
103
+ - 某个域名单独走 AI-Out
104
+ - 某个入口固定走特定组
105
+ - 某个站点强制直连
106
+ - 某个端口直接拒绝
107
+
108
+ ### 3. 进程级分流
49
109
 
50
- ## How It Differs
110
+ 这是很多程序员不会配、但实际非常关键的一类能力。
51
111
 
52
- | Dimension | Subscription Converters | GUI Clients / Launchers | Sing-box IaC Builder |
53
- | --- | --- | --- | --- |
54
- | Core goal | Convert one config format into another | Provide visual client UX | Compile subscriptions into managed `sing-box` infrastructure |
55
- | Policy control | Often template-driven | Often merged inside the client | Explicit compiler-controlled route policy |
56
- | Rule priority | Easy to drift with upstream changes | Often opaque | Fixed ordering and testable behavior |
57
- | Runtime safety | Usually writes output only | Apply path is often hidden | `build -> check -> publish -> reload` |
58
- | macOS headless | Usually not a focus | Usually not a focus | First-class |
59
- | `Proxifier` / multi-listener | Rarely central | Awkward to maintain | Core scenario |
60
- | AI app routing | Usually manual | Possible but brittle | Policy-level capability |
61
- | User customization | Template edits / scripts | GUI clicks / raw config edits | Declarative DSL, later NL-to-DSL |
112
+ 某些 AI IDE、language server 或桌面应用并不遵守系统代理。`Singbox IaC` 提供专用的 `in-proxifier` 入口,让 Proxifier 可以把指定进程强制送进独立链路,再固定到特定出口组或叶子节点。
62
113
 
63
- ## Implemented Today
114
+ 典型用途:
64
115
 
65
- The current repository is already beyond Phase 0. It includes:
116
+ - `Antigravity`
117
+ - Cursor
118
+ - 某些 AI IDE 或 language server
119
+ - 其他不走系统代理的桌面应用
66
120
 
67
- - Base64 Trojan subscription fetching and parsing
68
- - `sing-box` config compilation with fixed route ordering
69
- - runtime-safe commands: `build`, `check`, `apply`, `run`, `verify`, `update`
70
- - config-driven route verification with real `sing-box` and headless Chrome
71
- - simple YAML user-rules DSL with protected insertion points
72
- - built-in rule templates for common developer and video-site patterns
73
- - natural-language authoring that generates DSL, builds config, can install `launchd`, and can optionally probe local AI CLIs
74
- - macOS helper commands: `init`, `doctor`, `schedule install`, `schedule remove`
121
+ 这让你可以把这些应用固定到独立入口和独立出口,而不会被普通站点规则打散。
75
122
 
76
- ## Install
123
+ ### 4. 站点级与服务级分流
77
124
 
78
- For local dogfooding today, the CLI can already be installed from a packed tarball:
125
+ 除了进程级,另一个高频需求就是站点级分流:
126
+
127
+ - `GitHub`、Google 服务、常见开发类网站走香港或新加坡
128
+ - `Gemini`、`OpenAI`、`Anthropic` 等 AI 服务走不同出口组
129
+ - `Google Stitch` 这类必须走特定国家出口的站点走专门分组
130
+ - 中国大陆域名和 IP 直连
131
+ - 视频站点如 `Netflix`、`YouTube`、`Amazon Prime`、`Apple TV` 按地区分流
132
+
133
+ ## 项目能做什么
134
+
135
+ - 拉取 Base64 Trojan 订阅并解析 share links
136
+ - 编译固定优先级的 `sing-box` 配置
137
+ - 提供普通代理入口和 Proxifier 专用入口
138
+ - 用真实 `sing-box` 和无头 Chrome 做闭环验证
139
+ - 支持“一句话规则生成”
140
+ - 自动同步本地 `.srs` 规则集
141
+ - 发布配置到 `~/.config/sing-box/config.json`
142
+ - 通过 `launchd` 做定时更新
143
+
144
+ ## 安装
145
+
146
+ 先安装 `sing-box`,确保终端里可以直接执行 `sing-box`。
147
+
148
+ 官方文档:
149
+
150
+ - [sing-box package manager docs](https://sing-box.sagernet.org/installation/package-manager/)
151
+
152
+ 然后安装 CLI:
79
153
 
80
154
  ```bash
81
- npm pack
82
- npm install -g ./singbox-iac-cli-0.1.0.tgz
155
+ npm install -g @singbox-iac/cli
83
156
  singbox-iac --help
84
157
  ```
85
158
 
86
- For repository-based installs during development:
159
+ ## 快速开始
160
+
161
+ ### 一步完成初始化
87
162
 
88
163
  ```bash
89
- npm install
90
- npm run build
91
- npx singbox-iac --help
164
+ singbox-iac setup \
165
+ --subscription-url '你的机场订阅地址' \
166
+ --prompt 'GitHub 这类开发类走香港,Antigravity 进程级走美国,Gemini 走新加坡,每30分钟自动更新'
92
167
  ```
93
168
 
94
- The package name is now aligned to the intended public scope, but the repository still stays `"private": true` until the first real publish. The distribution shape is already prepared for npm publishing:
169
+ `setup` 会自动:
95
170
 
96
- - Node shebang on the compiled CLI entrypoint
97
- - `dist`-only package contents plus docs/examples
98
- - `prepare` and `prepack` build hooks
99
- - `bin` and `exports` metadata
171
+ - 生成 `~/.config/singbox-iac/builder.config.yaml`
172
+ - 生成 `~/.config/singbox-iac/rules/custom.rules.yaml`
173
+ - 检查本地环境
174
+ - 下载默认本地 `.srs` 规则集
175
+ - 把一句自然语言转成路由规则
176
+ - 构建 `~/.config/singbox-iac/generated/config.staging.json`
100
177
 
101
- For a full repeatable distribution smoke, run:
178
+ 如果你希望首次安装时尽可能自动化,可以这样:
102
179
 
103
180
  ```bash
104
- npm run release:check
181
+ singbox-iac setup \
182
+ --subscription-url '你的机场订阅地址' \
183
+ --prompt 'GitHub 这类开发类走香港,Antigravity 进程级走美国,Gemini 走新加坡,每30分钟自动更新' \
184
+ --ready
105
185
  ```
106
186
 
107
- That command executes:
108
-
109
- - `npm run typecheck`
110
- - `npm run lint`
111
- - `npm test`
112
- - `npm run build`
113
- - `npm pack`
114
- - clean-directory install smoke with `singbox-iac --help`
187
+ `--ready` 会额外执行:
115
188
 
116
- On success it cleans up the tarball and temp install directory. On failure it keeps them for debugging.
189
+ - 路由验证
190
+ - 发布 live config
191
+ - 安装定时更新
117
192
 
118
- For a publish-level dry run without changing the repository's `"private": true` setting:
193
+ ### 前台运行测试
119
194
 
120
195
  ```bash
121
- npm run release:dry-run
196
+ singbox-iac run
122
197
  ```
123
198
 
124
- That command stages a temporary publishable package copy and runs `npm publish --dry-run`. You can also test a future public package name without editing `package.json`:
199
+ 默认监听端口:
125
200
 
126
- ```bash
127
- SINGBOX_IAC_PACKAGE_NAME=@singbox-iac/experimental-cli npm run release:dry-run
128
- ```
201
+ - `127.0.0.1:39097`:浏览器 / 系统代理流量
202
+ - `127.0.0.1:39091`:Proxifier 进程流量
129
203
 
130
- Detailed publish notes are in [Releasing](/Users/lvyuanfang/Code/SingBoxConfig/docs/releasing.md).
131
-
132
- ## Planned CLI
204
+ ### 日常使用
133
205
 
134
206
  ```bash
135
- singbox-iac init
136
- singbox-iac author
137
- singbox-iac build
138
- singbox-iac apply
139
- singbox-iac update
140
- singbox-iac doctor
141
- singbox-iac schedule install
142
- singbox-iac schedule remove
143
- singbox-iac templates list
207
+ singbox-iac update --reload
144
208
  ```
145
209
 
146
- ## Project Status
210
+ 这条命令会执行:
147
211
 
148
- The project is currently at a usable MVP-plus stage:
212
+ - fetch
213
+ - build
214
+ - verify
215
+ - apply
216
+ - optional reload
149
217
 
150
- - real subscription ingestion works
151
- - real route verification works
152
- - real publish flow works
153
- - simple rule DSL works
154
- - macOS launchd integration is available
218
+ ### 定时更新
155
219
 
156
- The highest-value remaining areas are:
220
+ ```bash
221
+ singbox-iac schedule install
222
+ ```
157
223
 
158
- - more protocol support beyond Trojan
159
- - first real npm publish and release automation
224
+ ## 自然语言规则编写
160
225
 
161
- ## Authoring Shortcuts
226
+ 对于大多数场景,不需要手写 `sing-box` JSON,也不需要理解 DSL。
162
227
 
163
- For day-to-day usage, the practical authoring stack is:
228
+ 示例:
164
229
 
165
- - built-in policy for protected routes
166
- - Proxifier for process-aware IDE and app routing
167
- - built-in templates for common developer and video-site rules
168
- - natural-language prompts for fast generation
169
- - YAML DSL only for small exceptions
230
+ ```bash
231
+ singbox-iac author \
232
+ --prompt 'GitHub 这类开发类都走香港出口,Antigravity 进程级都走独立入口并路由到美国节点,Gemini 都出口到新加坡'
233
+ ```
170
234
 
171
- Docs:
235
+ ```bash
236
+ singbox-iac author \
237
+ --prompt 'Google 服务和 GitHub 走香港,Amazon Prime 和 Apple TV 走新加坡,国内直连,每45分钟自动更新' \
238
+ --update
239
+ ```
172
240
 
173
- - [Rules DSL](/Users/lvyuanfang/Code/SingBoxConfig/docs/rules-dsl.md)
174
- - [Rule Templates](/Users/lvyuanfang/Code/SingBoxConfig/docs/rule-templates.md)
175
- - [Natural-Language Authoring](/Users/lvyuanfang/Code/SingBoxConfig/docs/natural-language-authoring.md)
241
+ 作者层支持:
176
242
 
177
- ## Local AI CLI Support
243
+ - 默认使用本地确定性意图解析
244
+ - 可选接入本地 AI CLI
245
+ - 写入前先 preview
246
+ - 生成规则后直接闭环 update
178
247
 
179
- This project does not require API keys for authoring.
248
+ ## 它和 sing-box 是怎么配合的
180
249
 
181
- The recommended flow is:
250
+ 它不会替代 `sing-box` 内核本身,而是负责生成和维护 `sing-box` 配置。
182
251
 
183
- - default to deterministic local authoring
184
- - optionally probe a local AI CLI with `provider=auto`
185
- - optionally integrate any other CLI through `provider=exec`
186
- - use `author --preview` before writing when changing prompts or providers
187
- - always validate and compile through the same DSL and `sing-box` pipeline
252
+ 典型流程:
188
253
 
189
- Current support model:
254
+ 1. 拉取订阅
255
+ 2. 解析节点
256
+ 3. 编译 staging config
257
+ 4. 校验配置
258
+ 5. 验证关键路由
259
+ 6. 发布到 live config 路径
260
+ 7. 重载或启动 `sing-box`
190
261
 
191
- - built-in provider:
192
- - `claude`
193
- - generic `exec` integrations:
194
- - `gemini`
195
- - `codebuddy`
196
- - `codex`
197
- - `opencode`
198
- - `qodercli` / `qoder`
199
- - tooling-only detection:
200
- - `trae`
262
+ 默认 live 配置路径:
201
263
 
202
- The project should not hard-code every AI CLI vendor. Instead:
264
+ ```text
265
+ ~/.config/sing-box/config.json
266
+ ```
203
267
 
204
- - keep one or two verified built-ins
205
- - support broad developer tooling through `provider=exec`
206
- - allow wrapper scripts for CLIs with noisy or event-stream output
268
+ ## 安全性
207
269
 
208
- The `exec` adapter already supports:
270
+ 这个项目默认尽量把敏感信息留在本地:
209
271
 
210
- - `{{prompt}}`
211
- - `{{schema}}`
212
- - `{{context_json}}`
213
- - `{{full_prompt}}`
214
- - `{{schema_file}}`
215
- - `{{output_file}}`
272
+ - 订阅地址只保存在本地 builder config 中
273
+ - 生成的配置写入你的本地配置目录
274
+ - 自然语言作者层默认使用本地确定性解析器
275
+ - 本地 AI CLI 接入是可选的,不是强制依赖
276
+ - 仓库默认忽略本地 token、缓存、生成配置和 `.env`
216
277
 
217
- and will accept:
278
+ 当前项目不会把订阅地址自动上传到任何远端服务。除非你主动配置外部 AI CLI 或外部命令,否则默认作者层不依赖外部 API。
218
279
 
219
- - exact JSON stdout
220
- - fenced JSON blocks
221
- - a balanced JSON object extracted from longer text
222
- - output written to `{{output_file}}`
280
+ ## 常用命令
223
281
 
224
- This is the compatibility layer that makes “support most AI CLIs” practical without turning the project into a vendor-specific adapter zoo.
282
+ ```bash
283
+ singbox-iac init
284
+ singbox-iac setup
285
+ singbox-iac author
286
+ singbox-iac build
287
+ singbox-iac check
288
+ singbox-iac apply
289
+ singbox-iac run
290
+ singbox-iac verify
291
+ singbox-iac update
292
+ singbox-iac doctor
293
+ singbox-iac schedule install
294
+ singbox-iac schedule remove
295
+ singbox-iac templates list
296
+ ```
225
297
 
226
- Natural-language authoring is now intent-first for common developer use cases. The user does not need to know the DSL or internal selector names for routine requests such as:
298
+ ## 项目结构
227
299
 
228
- - `GitHub 这类开发类都走香港出口`
229
- - `Antigravity 进程级都走独立入口并路由到美国节点`
230
- - `Gemini 都出口到新加坡`
300
+ - [rules-dsl.md](./docs/rules-dsl.md)
301
+ - [rule-templates.md](./docs/rule-templates.md)
302
+ - [natural-language-authoring.md](./docs/natural-language-authoring.md)
303
+ - [runtime-on-macos.md](./docs/runtime-on-macos.md)
304
+ - [openspec/project.md](./openspec/project.md)
231
305
 
232
- The authoring layer can compile those sentences into:
306
+ ## 当前状态
233
307
 
234
- - explicit site rules
235
- - selector default changes
236
- - verification expectation updates
308
+ 项目已经是一个可用的 MVP+ CLI:
237
309
 
238
- so the normal `author -> build -> verify` pipeline still stays consistent.
310
+ - 真实订阅拉取可用
311
+ - 真实路由验证可用
312
+ - 真实发布链路可用
313
+ - 自然语言作者层可用
314
+ - npm 包已发布
315
+ - macOS `launchd` 集成可用
239
316
 
240
- It also understands more mainstream subscription vocabulary, for example:
317
+ 当前最值得继续推进的方向:
241
318
 
242
- - `Google 服务和 GitHub 这类开发类都走香港`
243
- - `Apple 服务走香港`
244
- - `Amazon Prime Apple TV 走新加坡`
245
- - `视频网站走美国`
319
+ - 支持 Trojan 之外的更多协议
320
+ - 提升自然语言覆盖范围
321
+ - 增加更多本地 AI CLI provider preset
322
+ - 把首次上手继续收敛到真正的一键可用
246
323
 
247
- And it can now go all the way to publish from one sentence:
324
+ ## 参与贡献
248
325
 
249
- ```bash
250
- ./node_modules/.bin/tsx src/cli/index.ts author \
251
- --config ./builder.config.local.yaml \
252
- --provider deterministic \
253
- --prompt "Google 服务和 GitHub 这类开发类都走香港,Gemini 走新加坡,Antigravity 进程级走美国,每30分钟自动更新" \
254
- --update
255
- ```
326
+ 欢迎提交 issue、PR 和场景反馈,详见 [CONTRIBUTING.md](./CONTRIBUTING.md)。
256
327
 
257
- See:
328
+ 特别欢迎:
258
329
 
259
- - [Natural-Language Authoring](/Users/lvyuanfang/Code/SingBoxConfig/docs/natural-language-authoring.md)
330
+ - 新的开发者场景模板
331
+ - 不同机场订阅的兼容性样本
332
+ - 自然语言规则表达改进
333
+ - 新的验证用例
260
334
 
261
- ## References
335
+ ## 许可证
262
336
 
263
- - [OpenSpec](https://openspec.pro/)
264
- - [sing-box documentation](https://sing-box.sagernet.org/configuration/)
265
- - [sing-box migration guide](https://sing-box.sagernet.org/migration/)
337
+ [MIT](./LICENSE)
@@ -2,5 +2,10 @@ import type { BuilderConfig } from "../config/schema.js";
2
2
  export interface SharedCommandOptions {
3
3
  readonly config?: string;
4
4
  }
5
+ export declare function getDefaultConfigDir(): string;
6
+ export declare function getDefaultConfigPath(): string;
7
+ export declare function getDefaultRulesPath(): string;
5
8
  export declare function resolveBuilderConfig(options: SharedCommandOptions): Promise<BuilderConfig | undefined>;
6
9
  export declare function findDefaultConfigPath(): Promise<string | undefined>;
10
+ export declare function resolvePackageRoot(moduleUrl: string): string;
11
+ export declare function resolveCliEntrypoint(moduleUrl: string): string;
@@ -1,8 +1,18 @@
1
1
  import { constants } from "node:fs";
2
2
  import { access } from "node:fs/promises";
3
+ import { homedir } from "node:os";
3
4
  import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
4
6
  import { loadConfig } from "../config/load-config.js";
5
- const defaultConfigCandidates = ["builder.config.local.yaml", "builder.config.yaml"];
7
+ export function getDefaultConfigDir() {
8
+ return path.join(homedir(), ".config", "singbox-iac");
9
+ }
10
+ export function getDefaultConfigPath() {
11
+ return path.join(getDefaultConfigDir(), "builder.config.yaml");
12
+ }
13
+ export function getDefaultRulesPath() {
14
+ return path.join(getDefaultConfigDir(), "rules", "custom.rules.yaml");
15
+ }
6
16
  export async function resolveBuilderConfig(options) {
7
17
  if (options.config) {
8
18
  return loadConfig(options.config);
@@ -14,8 +24,7 @@ export async function resolveBuilderConfig(options) {
14
24
  return loadConfig(configPath);
15
25
  }
16
26
  export async function findDefaultConfigPath() {
17
- for (const candidate of defaultConfigCandidates) {
18
- const filePath = path.resolve(process.cwd(), candidate);
27
+ for (const filePath of getDefaultConfigCandidates()) {
19
28
  if (await fileExists(filePath)) {
20
29
  return filePath;
21
30
  }
@@ -31,4 +40,19 @@ async function fileExists(filePath) {
31
40
  return false;
32
41
  }
33
42
  }
43
+ function getDefaultConfigCandidates() {
44
+ return [
45
+ path.resolve(process.cwd(), "builder.config.local.yaml"),
46
+ path.resolve(process.cwd(), "builder.config.yaml"),
47
+ getDefaultConfigPath(),
48
+ ];
49
+ }
50
+ export function resolvePackageRoot(moduleUrl) {
51
+ return path.resolve(path.dirname(fileURLToPath(moduleUrl)), "../../..");
52
+ }
53
+ export function resolveCliEntrypoint(moduleUrl) {
54
+ const commandModulePath = fileURLToPath(moduleUrl);
55
+ const extension = path.extname(commandModulePath);
56
+ return path.resolve(path.dirname(commandModulePath), "..", `index${extension}`);
57
+ }
34
58
  //# sourceMappingURL=command-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/cli/command-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,MAAM,uBAAuB,GAAG,CAAC,2BAA2B,EAAE,qBAAqB,CAAC,CAAC;AAMrF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA6B;IAE7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,qBAAqB,EAAE,CAAC;IACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,KAAK,MAAM,SAAS,IAAI,uBAAuB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,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"}
1
+ {"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/cli/command-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAOtD,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,qBAAqB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA6B;IAE7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,qBAAqB,EAAE,CAAC;IACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,KAAK,MAAM,QAAQ,IAAI,0BAA0B,EAAE,EAAE,CAAC;QACpD,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,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,0BAA0B;IACjC,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,2BAA2B,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC;QAClD,oBAAoB,EAAE;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,SAAS,EAAE,CAAC,CAAC;AAClF,CAAC"}
@@ -1,12 +1,11 @@
1
1
  import path from "node:path";
2
- import { fileURLToPath } from "node:url";
3
2
  import { generateAuthoringPlan } from "../../modules/authoring/index.js";
4
3
  import { buildConfigArtifact } from "../../modules/build/index.js";
5
4
  import { applyPlanToBuilderConfig, updateBuilderAuthoring, writeGeneratedRules, } from "../../modules/natural-language/index.js";
6
5
  import { generateAuthoringPreview } from "../../modules/preview/index.js";
7
6
  import { installLaunchdSchedule } from "../../modules/schedule/index.js";
8
7
  import { runUpdate } from "../../modules/update/index.js";
9
- import { findDefaultConfigPath, resolveBuilderConfig } from "../command-helpers.js";
8
+ import { findDefaultConfigPath, resolveBuilderConfig, resolveCliEntrypoint, } from "../command-helpers.js";
10
9
  export function registerAuthorCommand(program) {
11
10
  program
12
11
  .command("author")
@@ -183,11 +182,6 @@ export function registerAuthorCommand(program) {
183
182
  function resolvePath(filePath) {
184
183
  return filePath.startsWith("/") ? filePath : path.resolve(process.cwd(), filePath);
185
184
  }
186
- function resolveCliEntrypoint(moduleUrl) {
187
- const commandModulePath = fileURLToPath(moduleUrl);
188
- const extension = path.extname(commandModulePath);
189
- return path.resolve(path.dirname(commandModulePath), "..", `index${extension}`);
190
- }
191
185
  function collectOption(value, previous) {
192
186
  return [...previous, value];
193
187
  }
@@ -1 +1 @@
1
- {"version":3,"file":"author.js","sourceRoot":"","sources":["../../../src/cli/commands/author.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"author.js","sourceRoot":"","sources":["../../../src/cli/commands/author.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,2FAA2F,CAC5F;SACA,cAAc,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;SACxE,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;SAC5D,MAAM,CAAC,uBAAuB,EAAE,uDAAuD,CAAC;SACxF,MAAM,CAAC,0BAA0B,EAAE,oCAAoC,CAAC;SACxE,MAAM,CAAC,0BAA0B,EAAE,yCAAyC,CAAC;SAC7E,MAAM,CACL,kBAAkB,EAClB,qDAAqD,EACrD,aAAa,EACb,EAAE,CACH;SACA,MAAM,CAAC,oBAAoB,EAAE,uCAAuC,CAAC;SACrE,MAAM,CAAC,0BAA0B,EAAE,yCAAyC,CAAC;SAC7E,MAAM,CAAC,4BAA4B,EAAE,mDAAmD,CAAC;SACzF,MAAM,CAAC,WAAW,EAAE,4DAA4D,CAAC;SACjF,MAAM,CAAC,cAAc,EAAE,6CAA6C,CAAC;SACrE,MAAM,CAAC,UAAU,EAAE,mDAAmD,CAAC;SACvE,MAAM,CAAC,eAAe,EAAE,mEAAmE,CAAC;SAC5F,MAAM,CAAC,UAAU,EAAE,wDAAwD,CAAC;SAC5E,MAAM,CAAC,oBAAoB,EAAE,+CAA+C,CAAC;SAC7E,MAAM,CAAC,sBAAsB,EAAE,iDAAiD,CAAC;SACjF,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;SAC1D,MAAM,CAAC,qBAAqB,EAAE,gDAAgD,CAAC;SAC/E,MAAM,CAAC,oBAAoB,EAAE,wDAAwD,CAAC;SACtF,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,wBAAwB,CAAC;SACxE,MAAM,CAAC,4BAA4B,EAAE,iCAAiC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;SAC7D,MAAM,CAAC,sBAAsB,EAAE,sDAAsD,CAAC;SACtF,MAAM,CAAC,WAAW,EAAE,2DAA2D,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC9C,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpD,oBAAoB,CAAC,OAAO,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;SACxF,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC;YAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,aAAa;YACrB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,OAAO,CAAC,eAAe;gBACzB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE;gBAC7D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ;YAChC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC;QACtC,MAAM,eAAe,GAAG,wBAAwB,CAAC,aAAa,EAAE;YAC9D,SAAS;YACT,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC;gBAC7C,UAAU;gBACV,MAAM,EAAE,aAAa;gBACrB,IAAI;gBACJ,SAAS;gBACT,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,YAAY,EAAE,CAAC,OAAO,CAAC,SAAS;aACjC,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG;gBACZ,WAAW,UAAU,EAAE;gBACvB,UAAU,SAAS,EAAE;gBACrB,uBAAuB,UAAU,CAAC,iBAAiB,EAAE;gBACrD,kBAAkB,UAAU,CAAC,YAAY,EAAE;gBAC3C,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACpF,oBAAoB,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBAC5E,sCAAsC;aACvC,CAAC;YACF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACrE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,mBAAmB,CAAC;YACxB,QAAQ,EAAE,SAAS;YACnB,IAAI;SACL,CAAC,CAAC;QACH,MAAM,sBAAsB,CAAC;YAC3B,UAAU;YACV,SAAS;YACT,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,IAAI,CAAC,qBAAqB;gBAC5B,CAAC,CAAC,EAAE,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG;YACZ,WAAW,UAAU,EAAE;YACvB,UAAU,SAAS,EAAE;YACrB,uBAAuB,UAAU,CAAC,iBAAiB,EAAE;YACrD,kBAAkB,UAAU,CAAC,YAAY,EAAE;YAC3C,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACpF,oBAAoB,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;SAC7E,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,eAAe,GACnB,IAAI,CAAC,uBAAuB,IAAI,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC;YAE3E,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC;gBAC5C,UAAU;gBACV,eAAe;gBACf,aAAa,EAAE,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpD,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,GAAG,CAAC,OAAO,CAAC,eAAe;oBACzB,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;oBAC3D,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,KAAK,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI;gBACrC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,KAAK;aAC7B,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC;gBACnC,MAAM,EAAE,eAAe;gBACvB,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9E,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9E,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU;gBAC3B,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5C,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,YAAY,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YACxD,KAAK,CAAC,IAAI,CACR,YAAY,CAAC,YAAY;gBACvB,CAAC,CAAC,uBACE,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAC5E,IAAI,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE;gBAClD,CAAC,CAAC,6BAA6B,CAClC,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7C,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC;gBACtC,MAAM,EAAE,eAAe;gBACvB,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC;AA6BD,SAAS,WAAW,CAAC,QAAgB;IACnC,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,QAA2B;IAC/D,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC"}