{"owner":"RubyMetric","repo":"chsrc","hasSkills":true,"totalSkillsCount":1,"totalTokensCount":1439,"categories":["copilot-instructions"],"hasMcp":false,"mcpConfig":null,"found":[".github/copilot-instructions.md"],"skills":{".github/copilot-instructions.md":"# chsrc — Change Source Everywhere\n\n跨平台换源 CLI 工具与框架。使用 **C11**（推荐 C17 或更高版本）编写，从 `src/chsrc-main.c` 单文件编译（`#include` 汇聚所有框架与 recipe 文件，无中间目标文件）。支持 Linux、Windows（原生/MSYS2/Cygwin）、macOS、BSD、Android。主程序 GPL-3.0-or-later 许可，`lib/xy.h` 为 MIT 许可。\n\n**本项目在 `doc/` 中维护了详细的中文文档，遇到构建、recipe 编写、代码风格等问题时，请优先阅读对应文档，而不要凭空猜测：**\n\n| 主题                             | 文档                                          |\n| -------------------------------- | --------------------------------------------- |\n| 开发环境、构建（just/make）、Debug、测试 | `doc/01-开发与构建.md`                        |\n| 分支策略、提交与贡献流程          | `doc/02-提交与贡献.md`                        |\n| 为什么不用代码格式化工具、风格哲学 | `doc/03-为什么拒绝使用代码格式化工具.md`      |\n| 如何编写新 recipe（核心概念、步骤、准则） | `doc/10-如何编写recipe.md`                    |\n| 如何设置换源链接与测速链接        | `doc/11-如何设置换源链接与测速链接.md`        |\n| 协作者与维护者                    | `doc/50-协作者与维护者.md`                    |\n\n## 快速命令\n\n```\njust build / bd / br     # DEV / DEBUG / RELEASE 模式构建（推荐原生 Windows）\nmake build / bd / br     # 同上（Linux/macOS/MSYS2）\njust test / test-cli / fastcheck\n```\n\n开发与 PR 请使用 `dev` 分支。详细依赖、调试方式见 `doc/01-开发与构建.md`。\n\n## 架构速览\n\n- `src/chsrc-main.c` — 入口：`main()`、CLI 解析、输出显示\n- `src/framework/` — 核心骨架：`struct.h`（`Dish_t`/`Source_t`/`MirrorSite_t`/Chef DSL 宏定义）、`core.c`（全局状态、测速）、`chef.c`（Chef DSL 实现）、`helper.c`（`hp_*` 辅助函数）、`mirror.c`（通用镜像站）\n- `src/recipe/{lang,os,ware}/` — 按类别（`pl`/`os`/`wr`）组织的 recipe；新 recipe 须在 `src/recipe/menu.c` 中注册（`#include` + `add()`）才会出现在菜单中\n- `lib/xy.h` — 独立 C11 工具库（MIT）：字符串、系统检测、日志、数据结构、文件 I/O。约定 `return caller-free` 表示调用方必须释放返回值\n- 执行流程：`main()` → `chsrc_init_framework()` → 解析 CLI → 在 `pl`/`os`/`wr` 菜单中匹配 dish → `preparefn()` → 按操作分派 `getfn`/`setfn`/`resetfn`\n\n概念（`Dish_t`/`Scope_t`/`SourceProvider_t`/`MirrorSite_t`/Chef DSL）与编写步骤详见 `doc/10-如何编写recipe.md`；换源/测速链接设置详见 `doc/11-如何设置换源链接与测速链接.md`。\n\n## 代码风格与命名\n\n- **不使用代码格式化工具**，采用手动排版对齐（原因见 `doc/03-为什么拒绝使用代码格式化工具.md`）\n- 保留已有注释；函数名与 `()` 之间留空格，如 `foo ()` 而非 `foo()`\n- `pl*`/`os*`/`wr*` 前缀分别对应 `lang`/`os`/`ware` 目录；类型名用 `PascalCase_t`\n- Convention over Configuration，NO UFO 原则（不向用户目录写配置/数据文件）\n\n## 内存管理规则\n\n除非不得不，不要调用 `free()`（单次 CLI 运行，进程退出即回收）。仅当指针来自 xy.h 的 caller-free 函数、且生命周期止于函数内部时才释放。避免改动已有 recipe。\n\n## 代码审查清单\n\n检查：指针/边界/内存安全（NULL 解引用、溢出、use-after-free）、逻辑缺陷、竞态条件（工具单线程，标记任何新引入的并发）、死锁、权限问题、C11 标准合规（POSIX 专有 API 需 `#ifdef` 守卫）、注释与代码一致性、冗余代码、错误处理是否充分、未定义行为、跨平台兼容性（Linux/macOS/Windows MinGW）。\n\n改动后至少本地运行 `just test`（或 `make test`）与 `just test-cli`（或 `make test-cli`）；修改 `*.{c,h}` 后运行 `just bd && ./chsrc-debug get <受影响dish>` 确认不崩溃（lefthook 提交时会自动执行同样检查，见 `doc/01-开发与构建.md`）。\n"},"files":{".github/copilot-instructions.md":"# chsrc — Change Source Everywhere\n\n跨平台换源 CLI 工具与框架。使用 **C11**（推荐 C17 或更高版本）编写，从 `src/chsrc-main.c` 单文件编译（`#include` 汇聚所有框架与 recipe 文件，无中间目标文件）。支持 Linux、Windows（原生/MSYS2/Cygwin）、macOS、BSD、Android。主程序 GPL-3.0-or-later 许可，`lib/xy.h` 为 MIT 许可。\n\n**本项目在 `doc/` 中维护了详细的中文文档，遇到构建、recipe 编写、代码风格等问题时，请优先阅读对应文档，而不要凭空猜测：**\n\n| 主题                             | 文档                                          |\n| -------------------------------- | --------------------------------------------- |\n| 开发环境、构建（just/make）、Debug、测试 | `doc/01-开发与构建.md`                        |\n| 分支策略、提交与贡献流程          | `doc/02-提交与贡献.md`                        |\n| 为什么不用代码格式化工具、风格哲学 | `doc/03-为什么拒绝使用代码格式化工具.md`      |\n| 如何编写新 recipe（核心概念、步骤、准则） | `doc/10-如何编写recipe.md`                    |\n| 如何设置换源链接与测速链接        | `doc/11-如何设置换源链接与测速链接.md`        |\n| 协作者与维护者                    | `doc/50-协作者与维护者.md`                    |\n\n## 快速命令\n\n```\njust build / bd / br     # DEV / DEBUG / RELEASE 模式构建（推荐原生 Windows）\nmake build / bd / br     # 同上（Linux/macOS/MSYS2）\njust test / test-cli / fastcheck\n```\n\n开发与 PR 请使用 `dev` 分支。详细依赖、调试方式见 `doc/01-开发与构建.md`。\n\n## 架构速览\n\n- `src/chsrc-main.c` — 入口：`main()`、CLI 解析、输出显示\n- `src/framework/` — 核心骨架：`struct.h`（`Dish_t`/`Source_t`/`MirrorSite_t`/Chef DSL 宏定义）、`core.c`（全局状态、测速）、`chef.c`（Chef DSL 实现）、`helper.c`（`hp_*` 辅助函数）、`mirror.c`（通用镜像站）\n- `src/recipe/{lang,os,ware}/` — 按类别（`pl`/`os`/`wr`）组织的 recipe；新 recipe 须在 `src/recipe/menu.c` 中注册（`#include` + `add()`）才会出现在菜单中\n- `lib/xy.h` — 独立 C11 工具库（MIT）：字符串、系统检测、日志、数据结构、文件 I/O。约定 `return caller-free` 表示调用方必须释放返回值\n- 执行流程：`main()` → `chsrc_init_framework()` → 解析 CLI → 在 `pl`/`os`/`wr` 菜单中匹配 dish → `preparefn()` → 按操作分派 `getfn`/`setfn`/`resetfn`\n\n概念（`Dish_t`/`Scope_t`/`SourceProvider_t`/`MirrorSite_t`/Chef DSL）与编写步骤详见 `doc/10-如何编写recipe.md`；换源/测速链接设置详见 `doc/11-如何设置换源链接与测速链接.md`。\n\n## 代码风格与命名\n\n- **不使用代码格式化工具**，采用手动排版对齐（原因见 `doc/03-为什么拒绝使用代码格式化工具.md`）\n- 保留已有注释；函数名与 `()` 之间留空格，如 `foo ()` 而非 `foo()`\n- `pl*`/`os*`/`wr*` 前缀分别对应 `lang`/`os`/`ware` 目录；类型名用 `PascalCase_t`\n- Convention over Configuration，NO UFO 原则（不向用户目录写配置/数据文件）\n\n## 内存管理规则\n\n除非不得不，不要调用 `free()`（单次 CLI 运行，进程退出即回收）。仅当指针来自 xy.h 的 caller-free 函数、且生命周期止于函数内部时才释放。避免改动已有 recipe。\n\n## 代码审查清单\n\n检查：指针/边界/内存安全（NULL 解引用、溢出、use-after-free）、逻辑缺陷、竞态条件（工具单线程，标记任何新引入的并发）、死锁、权限问题、C11 标准合规（POSIX 专有 API 需 `#ifdef` 守卫）、注释与代码一致性、冗余代码、错误处理是否充分、未定义行为、跨平台兼容性（Linux/macOS/Windows MinGW）。\n\n改动后至少本地运行 `just test`（或 `make test`）与 `just test-cli`（或 `make test-cli`）；修改 `*.{c,h}` 后运行 `just bd && ./chsrc-debug get <受影响dish>` 确认不崩溃（lefthook 提交时会自动执行同样检查，见 `doc/01-开发与构建.md`）。\n"},"items":[{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/RubyMetric/chsrc/HEAD/.github/copilot-instructions.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# chsrc — Change Source Everywhere\n\n跨平台换源 CLI 工具与框架。使用 **C11**（推荐 C17 或更高版本）编写，从 `src/chsrc-main.c` 单文件编译（`#include` 汇聚所有框架与 recipe 文件，无中间目标文件）。支持 Linux、Windows（原生/MSYS2/Cygwin）、macOS、BSD、Android。主程序 GPL-3.0-or-later 许可，`lib/xy.h` 为 MIT 许可。\n\n**本项目在 `doc/` 中维护了详细的中文文档，遇到构建、recipe 编写、代码风格等问题时，请优先阅读对应文档，而不要凭空猜测：**\n\n| 主题                             | 文档                                          |\n| -------------------------------- | --------------------------------------------- |\n| 开发环境、构建（just/make）、Debug、测试 | `doc/01-开发与构建.md`                        |\n| 分支策略、提交与贡献流程          | `doc/02-提交与贡献.md`                        |\n| 为什么不用代码格式化工具、风格哲学 | `doc/03-为什么拒绝使用代码格式化工具.md`      |\n| 如何编写新 recipe（核心概念、步骤、准则） | `doc/10-如何编写recipe.md`                    |\n| 如何设置换源链接与测速链接        | `doc/11-如何设置换源链接与测速链接.md`        |\n| 协作者与维护者                    | `doc/50-协作者与维护者.md`                    |\n\n## 快速命令\n\n```\njust build / bd / br     # DEV / DEBUG / RELEASE 模式构建（推荐原生 Windows）\nmake build / bd / br     # 同上（Linux/macOS/MSYS2）\njust test / test-cli / fastcheck\n```\n\n开发与 PR 请使用 `dev` 分支。详细依赖、调试方式见 `doc/01-开发与构建.md`。\n\n## 架构速览\n\n- `src/chsrc-main.c` — 入口：`main()`、CLI 解析、输出显示\n- `src/framework/` — 核心骨架：`struct.h`（`Dish_t`/`Source_t`/`MirrorSite_t`/Chef DSL 宏定义）、`core.c`（全局状态、测速）、`chef.c`（Chef DSL 实现）、`helper.c`（`hp_*` 辅助函数）、`mirror.c`（通用镜像站）\n- `src/recipe/{lang,os,ware}/` — 按类别（`pl`/`os`/`wr`）组织的 recipe；新 recipe 须在 `src/recipe/menu.c` 中注册（`#include` + `add()`）才会出现在菜单中\n- `lib/xy.h` — 独立 C11 工具库（MIT）：字符串、系统检测、日志、数据结构、文件 I/O。约定 `return caller-free` 表示调用方必须释放返回值\n- 执行流程：`main()` → `chsrc_init_framework()` → 解析 CLI → 在 `pl`/`os`/`wr` 菜单中匹配 dish → `preparefn()` → 按操作分派 `getfn`/`setfn`/`resetfn`\n\n概念（`Dish_t`/`Scope_t`/`SourceProvider_t`/`MirrorSite_t`/Chef DSL）与编写步骤详见 `doc/10-如何编写recipe.md`；换源/测速链接设置详见 `doc/11-如何设置换源链接与测速链接.md`。\n\n## 代码风格与命名\n\n- **不使用代码格式化工具**，采用手动排版对齐（原因见 `doc/03-为什么拒绝使用代码格式化工具.md`）\n- 保留已有注释；函数名与 `()` 之间留空格，如 `foo ()` 而非 `foo()`\n- `pl*`/`os*`/`wr*` 前缀分别对应 `lang`/`os`/`ware` 目录；类型名用 `PascalCase_t`\n- Convention over Configuration，NO UFO 原则（不向用户目录写配置/数据文件）\n\n## 内存管理规则\n\n除非不得不，不要调用 `free()`（单次 CLI 运行，进程退出即回收）。仅当指针来自 xy.h 的 caller-free 函数、且生命周期止于函数内部时才释放。避免改动已有 recipe。\n\n## 代码审查清单\n\n检查：指针/边界/内存安全（NULL 解引用、溢出、use-after-free）、逻辑缺陷、竞态条件（工具单线程，标记任何新引入的并发）、死锁、权限问题、C11 标准合规（POSIX 专有 API 需 `#ifdef` 守卫）、注释与代码一致性、冗余代码、错误处理是否充分、未定义行为、跨平台兼容性（Linux/macOS/Windows MinGW）。\n\n改动后至少本地运行 `just test`（或 `make test`）与 `just test-cli`（或 `make test-cli`）；修改 `*.{c,h}` 后运行 `just bd && ./chsrc-debug get <受影响dish>` 确认不崩溃（lefthook 提交时会自动执行同样检查，见 `doc/01-开发与构建.md`）。\n","isInternal":false,"tokens":1439,"sizeBytes":4171}],"systemPromptSnippet":"<yakaai_skills repo=\"RubyMetric/chsrc\">\n<!-- File: .github/copilot-instructions.md (Tokens: ~1439 | Category: copilot-instructions) -->\n# chsrc — Change Source Everywhere\n\n跨平台换源 CLI 工具与框架。使用 **C11**（推荐 C17 或更高版本）编写，从 `src/chsrc-main.c` 单文件编译（`#include` 汇聚所有框架与 recipe 文件，无中间目标文件）。支持 Linux、Windows（原生/MSYS2/Cygwin）、macOS、BSD、Android。主程序 GPL-3.0-or-later 许可，`lib/xy.h` 为 MIT 许可。\n\n**本项目在 `doc/` 中维护了详细的中文文档，遇到构建、recipe 编写、代码风格等问题时，请优先阅读对应文档，而不要凭空猜测：**\n\n| 主题                             | 文档                                          |\n| -------------------------------- | --------------------------------------------- |\n| 开发环境、构建（just/make）、Debug、测试 | `doc/01-开发与构建.md`                        |\n| 分支策略、提交与贡献流程          | `doc/02-提交与贡献.md`                        |\n| 为什么不用代码格式化工具、风格哲学 | `doc/03-为什么拒绝使用代码格式化工具.md`      |\n| 如何编写新 recipe（核心概念、步骤、准则） | `doc/10-如何编写recipe.md`                    |\n| 如何设置换源链接与测速链接        | `doc/11-如何设置换源链接与测速链接.md`        |\n| 协作者与维护者                    | `doc/50-协作者与维护者.md`                    |\n\n## 快速命令\n\n```\njust build / bd / br     # DEV / DEBUG / RELEASE 模式构建（推荐原生 Windows）\nmake build / bd / br     # 同上（Linux/macOS/MSYS2）\njust test / test-cli / fastcheck\n```\n\n开发与 PR 请使用 `dev` 分支。详细依赖、调试方式见 `doc/01-开发与构建.md`。\n\n## 架构速览\n\n- `src/chsrc-main.c` — 入口：`main()`、CLI 解析、输出显示\n- `src/framework/` — 核心骨架：`struct.h`（`Dish_t`/`Source_t`/`MirrorSite_t`/Chef DSL 宏定义）、`core.c`（全局状态、测速）、`chef.c`（Chef DSL 实现）、`helper.c`（`hp_*` 辅助函数）、`mirror.c`（通用镜像站）\n- `src/recipe/{lang,os,ware}/` — 按类别（`pl`/`os`/`wr`）组织的 recipe；新 recipe 须在 `src/recipe/menu.c` 中注册（`#include` + `add()`）才会出现在菜单中\n- `lib/xy.h` — 独立 C11 工具库（MIT）：字符串、系统检测、日志、数据结构、文件 I/O。约定 `return caller-free` 表示调用方必须释放返回值\n- 执行流程：`main()` → `chsrc_init_framework()` → 解析 CLI → 在 `pl`/`os`/`wr` 菜单中匹配 dish → `preparefn()` → 按操作分派 `getfn`/`setfn`/`resetfn`\n\n概念（`Dish_t`/`Scope_t`/`SourceProvider_t`/`MirrorSite_t`/Chef DSL）与编写步骤详见 `doc/10-如何编写recipe.md`；换源/测速链接设置详见 `doc/11-如何设置换源链接与测速链接.md`。\n\n## 代码风格与命名\n\n- **不使用代码格式化工具**，采用手动排版对齐（原因见 `doc/03-为什么拒绝使用代码格式化工具.md`）\n- 保留已有注释；函数名与 `()` 之间留空格，如 `foo ()` 而非 `foo()`\n- `pl*`/`os*`/`wr*` 前缀分别对应 `lang`/`os`/`ware` 目录；类型名用 `PascalCase_t`\n- Convention over Configuration，NO UFO 原则（不向用户目录写配置/数据文件）\n\n## 内存管理规则\n\n除非不得不，不要调用 `free()`（单次 CLI 运行，进程退出即回收）。仅当指针来自 xy.h 的 caller-free 函数、且生命周期止于函数内部时才释放。避免改动已有 recipe。\n\n## 代码审查清单\n\n检查：指针/边界/内存安全（NULL 解引用、溢出、use-after-free）、逻辑缺陷、竞态条件（工具单线程，标记任何新引入的并发）、死锁、权限问题、C11 标准合规（POSIX 专有 API 需 `#ifdef` 守卫）、注释与代码一致性、冗余代码、错误处理是否充分、未定义行为、跨平台兼容性（Linux/macOS/Windows MinGW）。\n\n改动后至少本地运行 `just test`（或 `make test`）与 `just test-cli`（或 `make test-cli`）；修改 `*.{c,h}` 后运行 `just bd && ./chsrc-debug get <受影响dish>` 确认不崩溃（lefthook 提交时会自动执行同样检查，见 `doc/01-开发与构建.md`）。\n</yakaai_skills>"}