From b1c057acce9743dfb7989b3f25cd409cd3e0440b Mon Sep 17 00:00:00 2001 From: zepan Date: Wed, 7 Oct 2026 00:20:41 +0800 Subject: [PATCH] docs: add AGENTS.md wiki authoring guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 给后续 AI / 自动化协作者的编写规范:仓库结构、构建与双语机制、 产品文档 5 页模板、图片与叙事规范、首页 layout 与 babel 陷阱、 提交前自检清单与坑速查表。CLAUDE.md 指向它。 --- AGENTS.md | 313 ++++++++++++++++++ CLAUDE.md | 1 + .../{UG.md => Hardware_Specification.md} | 0 .../slogic32u3/{Intro.md => Introduction.md} | 0 .../zh/logic_analyzer/slogic32u3/QS.md | 95 ------ static/home/slogic_combo8.png | Bin 21801 -> 0 bytes 6 files changed, 314 insertions(+), 95 deletions(-) create mode 100644 AGENTS.md create mode 100644 CLAUDE.md rename docs/hardware/zh/logic_analyzer/slogic32u3/{UG.md => Hardware_Specification.md} (100%) rename docs/hardware/zh/logic_analyzer/slogic32u3/{Intro.md => Introduction.md} (100%) delete mode 100644 docs/hardware/zh/logic_analyzer/slogic32u3/QS.md delete mode 100755 static/home/slogic_combo8.png diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..1e08208c --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,313 @@ +# AGENTS.md — sipeed_wiki 编写指南 + +> 面向 AI 助手 / 自动化协作者。人类贡献者请先看 [README.md](./README.md) 与 [share_docs/zh/readme.md](./share_docs/zh/readme.md)。 +> For AI agents working on this repo. Written in Chinese because the source language of this wiki is Chinese; English docs are translations. + +## 0. 四条铁律 + +1. **不编造参数。** 事实只能来自:用户确认、官方 GitHub 仓库 / Release、官网、实物实测。拿不准就问,不要推测后当事实写。 +2. **不动别人的目录。** 本仓库多个产品线共用,只改你负责的产品目录与明确授权的公共文件。 +3. **不写内部信息。** 本仓库是公开仓库。内网地址、NAS/共享盘路径、本机绝对路径、内部工具链接、人员账号、密钥,一律不进文档、不进注释、不进示例命令。粘贴日志前先脱敏。 +4. **改完必须本地构建 + 浏览器截图自检。** 只看代码不算验证,这里的坑大多只在构建产物里暴露。 + +--- + +## 1. 仓库结构 + +``` +docs/hardware/zh/ 中文硬件文档(主语种,图片实体都放这里) +docs/hardware/en/ 英文译本(文件名必须与 zh 一一对应) +docs/hardware/{zh,en}/sidebar.yaml 左侧导航,中英各一份 +docs/soft/ 软件文档(maixpy / longan / Tang ...) +pages/index/{zh,en}/ 首页、短链页、404 +layout/*.html 首页与分类页模板(home.html、slogic.html、maix.html ...) +layout/locales/ babel 翻译;.po/.pot 入库,.mo 构建时生成(已 gitignore) +static/ 全站静态资源(首页卡片图、轮播 banner) +site_config.json route(路由)/ translate(双语映射)/ plugins +out/ 构建产物,gitignore +``` + +路由在 `site_config.json` 的 `route.docs` 里,例如 `/hardware/zh/` → `docs/hardware/zh`。 +新增产品目录不需要改 `site_config.json`,只需放进已有路由下并加侧边栏条目。 + +--- + +## 2. 本地预览与构建 + +在仓库根目录执行: + +```bash +uv sync # 从 pyproject.toml/uv.lock 建 .venv,已含 teedoc 及全部插件 +uv run teedoc serve --host 127.0.0.1 --port 2333 # http://127.0.0.1:2333 +``` + +**什么时候必须干净全量构建**(增量构建会骗你):重命名或删除文档、改 `sidebar.yaml` 结构、改 `layout/` 或 `locales/`。 + +```bash +pkill -f 'teedoc.*serve' # 注意别让 pattern 匹配到你自己这条命令 +rm -rf out +mkdir -p /tmp/teedoc_plugin_search # 不建会报 FileNotFoundError .../index_0.json +.venv/bin/python -m teedoc build +``` + +**watch 范围**:`teedoc serve` 只可靠监听 `docs/`。 +- 改了 `layout/` → touch 一下引用它的模板,或直接全量重建; +- 改了 `static/` 下的图 → 手动 `cp` 到 `out/static/...`,否则浏览器看到的还是旧图。 + +--- + +## 3. 产品文档的标准结构 + +参考 `logic_analyzer/slogic16u3` 与 `logic_analyzer/slogic32u3`,一个产品拆 5 页,不要堆成一篇长文: + +| 文件 | 回答读者的哪个问题 | +|---|---| +| `Introduction.md` | 这是什么?能干什么?给谁用?(核心特性、规格表、产品图、相关链接) | +| `Quick_Start.md` | 我怎么把它跑起来?(开箱 → 装软件 → 驱动权限 → 连接 → 接线接地 → 第一次采集 → 查看解码 → 下一步) | +| `Hardware_Specification.md` | 硬件上有什么?(接口与引脚、指示灯、尺寸、配件、电气参数) | +| `Software_User_Guide.md` | 怎么用深入?(上位机使用、参数取舍、解码、进阶) | +| `FAQ.md` | 我卡住了怎么办?(问句式小标题,一问一答,按主题分组) | + +目录下建 `assets/`,图片按 3 个子目录归类(见 §6)。 + +### frontmatter + +每个 md 必须有,`update` 倒序排列(最新在最前): + +```yaml +--- +title: SLogic32U3 简介 +keywords: LogicAnalyzer, SLogic, SLogic32U3, USB3.2, sigrok, 逻辑分析仪 +update: + - date: 2026-10-06 + version: v0.3 + author: Sipeed + content: + - 拆出独立的快速上手页,简介只保留产品与规格 + - 校正数字信号带宽、探头线、ADC 模组等参数表述 + - date: 2026-09-30 + version: v0.1 + author: Sipeed + content: + - 初始化文档 +--- +``` + +`content` 写**这次改了什么**,一条一句,不要写"更新文档"这种废话。 + +### 标题层级 + +文件开头 `# 页面名`,正文从 `##` 起。不要手写 `1.1` `1.2` 这类编号(teedoc 自己生成目录);只有"快速上手"这类真有先后顺序的步骤才用 `## 1. 开箱` `## 2. 安装软件`。 + +--- + +## 4. 中英双语 + +### 机制 + +`site_config.json` 的 `translate.docs` 把 `/hardware/zh/` 映射到 `docs/hardware/en`。 +**翻译状态是构建期按「相对路径同名」匹配算出来的**:zh 下有 `logic_analyzer/foo/Bar.md`、en 下没有同名文件,英文页顶部就会出现 `This page not translated yet` 横幅。 + +### 规则 + +- **重命名中文文件时,必须同步重命名英文文件**,然后干净全量构建(增量构建不重算翻译索引,横幅不会消失,会误导你以为没修好)。 +- 校验中英文件是否对齐: + + ```bash + cd docs/hardware && comm -3 \ + <(cd zh && find . -name '*.md' | sort) \ + <(cd en && find . -name '*.md' | sort) + ``` + + 输出中与你产品相关的行应为空。 + +- **图片只在 zh 下存一份**,英文页用相对路径回引: + + ```markdown + ![SLogic32U3 product](../../../zh/logic_analyzer/slogic32u3/assets/DCIM/SLogic32U3-hero.jpg) + ``` + +- **含文字的图(流程图、接线示意图、标注图)需要出英文版**,命名加 `_en` 后缀,与中文图放同一目录:`gba-channel-map.jpg` / `gba-channel-map_en.jpg`。生成图的脚本也一并保留两份。 +- **页内锚点要用目标语言的标题 slug**。中文页 `#采样率与通道数` 在英文页是 `#sample-rate-vs-channel-count`,直接照搬会断链。 +- 英文不是中文的逐句直译。中文里的口语化连接词、排比、语气词在英文里删掉;句子拆短,用主动语态。 +- `sidebar.yaml` 两份都要改,**英文那份的 label 必须是英文**(最常见的漏网之鱼)。 + +--- + +## 5. 侧边栏与短链 + +`docs/hardware/{zh,en}/sidebar.yaml` 是嵌套的 `label` / `items` / `file`: + +```yaml +- label: SLogic32U3 + items: + - label: 简介 + file: ./logic_analyzer/slogic32u3/Introduction.md + - label: 快速上手 + file: ./logic_analyzer/slogic32u3/Quick_Start.md +``` + +侧边栏顺序就是推荐阅读顺序:简介 → 快速上手 → 硬件 → 软件 → FAQ,不要按字母序排。 + +短链在 `pages/index/zh/.html`,按浏览器语言跳转到简介页。 +**文档改名后一定要改这里的目标文件名**,否则 `wiki.sipeed.com/` 直接 404。 + +--- + +## 6. 图片 + +### 来源与质感 + +- **先确认是否已有正式素材**:动手出图之前,先向产品 / 项目负责人确认该产品有没有现成的官方素材(六视图、透视图、爆炸图、棚拍实拍、电商切片)。**有就优先用现成的**,不要自己另做一套风格不一致的图。素材存放位置向负责人索取,**不要把路径写进文档或注释**。 +- **禁用**:工程样机裸板、手机随手拍、桌面/木纹等生活化背景、带水印或截图工具红字的图。 +- 产品图统一白底棚拍或渲染。 + +### 压缩(硬指标) + +单张 **<300KB 为宜,500KB 为上限**。现状全站 4332 张图共约 897MB,其中 429 张超 500KB、118 张超 1MB——别再往上加。 + +```bash +# 检查自己新加的图 +find docs/hardware/zh/logic_analyzer/ -type f -size +500k -printf '%s\t%p\n' | sort -rn +``` + +- 照片/渲染:`convert in.jpg -resize '1600x>' -quality 82 out.jpg`,宽度一般不需要超过 1600px。 +- 软件截图:PNG 先做调色板量化,仍超标就转 JPG。 +- **动图/示意图如果是 html 渲染出来的,去改源 html 的输出尺寸**,不要硬压已经生成的大图。 + +### 命名与归类 + +有意义的英文短名 + 连字符,**不要 `a1.jpg` / `IMG_2034.jpg` / `1.png`**: +`view-front-mini-hdmi.jpg`、`dimensions.jpg`、`tpm-spi-setup_en.jpg`。 + +``` +assets/DCIM/ 实拍与渲染产品图 +assets/Screenshots/ 上位机 / 网页截图 +assets/MISC/ 示意图、接线图、尺寸图、流程图 +``` + +--- + +## 7. 叙事与可读性(图文并茂、小白友好) + +**默认读者是第一次拿到这个产品的人**,不是已经熟悉它的工程师。他不知道缩写,不知道该先做哪一步,也不知道做对了没有。所有写法围绕这一条展开。 + +### 整站的叙事路线 + +5 个页面连起来要是一条完整的路:**这是什么 → 怎么跑起来 → 硬件细节 → 软件深入 → 卡住了怎么办**。 +页与页之间**显式互链**,不要让读者自己在侧边栏里找:简介页末尾指向快速上手,快速上手每一步引用到硬件页/软件页的对应小节,FAQ 的每个答案链回正文。**每页结尾都要有"下一步"**,不留死胡同。 + +### 单页内部 + +- **倒金字塔**:开头 2~3 句说清"它是什么、能干什么、给谁用",然后才展开。**不要一上来就甩参数表**。 +- **先结论后细节**:长表格、长列表前先给一句话结论("简单说:奇数脚是 GND,偶数脚是信号"),让不想细读的人也能拿走答案。 +- **术语首次出现要就地解释或链接**(Stream 模式、阈值电压、annular ring 这类),不要假定读者知道。 +- 面向读者用"你",步骤用动词开头。 + +### 操作类内容 + +- **必须是线性编号步骤**,一步一个动作。 +- **每步给出可验证的结果**,让读者确认自己做对了:"指示灯应变为青色""设备列表里应出现 SLogic32U3"。这是小白和老手体验差别最大的地方。 +- 常见失败就地给出口("如果只亮蓝灯,见 FAQ · 指示灯"),不要让他先失败一次再去翻 FAQ。 +- 危险或易错操作用引用块显式告警:接线顺序、电压范围、会清空数据的动作。 + + ```markdown + > ⚠️ 接线前先接地线,且确认被测信号电压在 0~10 V 范围内。 + ``` + +- **措辞不要把产品写复杂**。例:确认通道线序写"肉眼从第一根依次数过去即可",而不是"用软件逐根拉高电平确认"——后者让人以为产品难用。 + +### 图文并茂 + +- **每一两节配一张图**,不要出现整屏纯文字。 +- 按内容选图:概念/数据流用**示意图或 mermaid 流程图**;操作步骤用**界面截图**(关键位置加框标注);产品形态用**实拍或渲染**;引脚、尺寸用**线稿标注图**。 +- 较长的流程在开头先放一张总览图,读者先看懂骨架再读细节。 +- 图要有说明文字,`![]()` 的 alt 写清楚图里是什么,不要留空或写 "image1"。 +- mermaid 用 ```mermaid 代码块(teedoc 支持)。注意边标签不要太长,否则左侧箭头会被裁掉。 + +--- + +## 8. 内容口径 + +- **上位机 / 软件清单写之前,先去读对应 GitHub 仓库和 Release 资产**,不要凭印象列。 +- 未实测的案例或教程,明确标注"方法与预期,非实测结果"。 +- **定位性描述按产品负责人拍板的口径**,不要自由发挥。例:ALL LOGIC 写成"基于 DSView 的社区优秀上位机,适合熟悉 DSView 的用户",不要强调"非官方出品"。 +- **跨页参数必须一致**。同一参数会出现在简介、规格表、对比表、首页卡片、短链页多处,改一处后全仓库 grep 一遍: + + ```bash + grep -rn "350 MHz\|59×51×13" docs/ layout/ pages/ + ``` + +--- + +## 9. 首页与 layout + +- `layout/slogic.html` 等分类页的产品卡片 **按发布时间顺序排列**,不是新品优先。 +- 同一组卡片图必须**同比例、同底色**,否则图文分割线参差。 +- 卡片里产品的视觉体量要符合定位:入门款不能画得比旗舰还大。 +- 图片居中要按**主体本身**居中,不要按含投影的外接矩形(投影会把主体顶偏)。 +- `layout/home.html` 的轮播与文案走 babel i18n。 + +### babel 的坑(务必手动复查) + +构建时 teedoc 会自动跑 `pybabel extract/update`,**新增的 msgid 会被 fuzzy 匹配到无关的旧翻译**(真出过商品链接、按钮文案错配到别的产品)。 +而 teedoc 的 `compile_catalog` **不带 `--use-fuzzy`**,所以 fuzzy 条目**根本不会编进 `.mo`**——结果是英文页直接显示中文原文。两种错都要查。 + +改完 `layout/*.html` 后: + +```bash +grep -n -B3 "fuzzy" layout/locales/*/LC_MESSAGES/messages.po +``` + +逐条核对 `msgstr`: +- 译文正确 → 删掉 `#, fuzzy` 这一行,译文才会生效; +- 译文是乱配的(尤其**商品链接**)→ **不要盲目清 fuzzy**,清了等于把错误链接发布出去;留着 fuzzy 至少会回退到中文原链接,然后找负责人要正确的对照链接再填。 + +重建后抽查英文产物里有没有中文漏出: + +```bash +grep -o '[一-龥]\{2,\}' out/en/index.html | sort -u | head +``` + +`.mo` 是构建产物(已 gitignore),只提交 `.po` / `.pot`。 + +--- + +## 10. 提交前自检清单 + +- [ ] 干净全量构建通过(`.venv/bin/python -m teedoc build` 输出 build ok) +- [ ] `comm -3` 中英文件名对齐无差异 +- [ ] 浏览器实际点一遍:侧边栏每个二级页、短链、页内锚点、所有图片都正常 +- [ ] 英文页顶部没有 `This page not translated yet` 横幅;英文页没有中文漏出 +- [ ] 新加图片全部 <500KB、命名有意义、放对了 assets 子目录 +- [ ] 含文字的图有 `_en` 版本 +- [ ] 每页有"下一步"出口,操作步骤有可验证结果 +- [ ] 跨页参数一致(grep 过) +- [ ] frontmatter 的 `update` 写了这次的实际改动 +- [ ] **没有内网地址、共享盘路径、本机绝对路径、账号或密钥** +- [ ] 只改了自己负责的目录 + +--- + +## 11. 坑速查表 + +| 现象 | 原因 | 解法 | +|---|---|---| +| 英文页顶部 `This page not translated yet` | 改名/删文件后增量构建没重算翻译索引 | 中英文件名对齐 + 干净全量构建 | +| 英文页显示中文原文 | 该条目在 .po 里被标了 `#, fuzzy`,compile 时被跳过 | 核对译文后删掉 `#, fuzzy` 行再重建 | +| 首页商品链接/文案串到别的产品 | babel fuzzy 误配 | 核对后改 `msgstr`;拿不到正确链接就保留 fuzzy | +| 构建报 `FileNotFoundError .../teedoc_plugin_search/index_0.json` | 临时目录不存在 | `mkdir -p /tmp/teedoc_plugin_search` | +| 改了 `layout/` 页面没变化 | serve 不监听 layout | touch 引用它的模板,或全量重建 | +| 改了 `static/` 下的图没变化 | 未同步到 `out/` | `cp` 到 `out/static/...`,或全量重建 | +| 短链 404 | 文档改名后短链目标文件名没跟着改 | 改 `pages/index/zh/.html` | +| 访问目录路径以为 404 | `readme.md` 会构建成该目录的 `index.html` | 直接访问目录路径即可,不是 bug | +| CI 显示构建完成但线上还是 404 | `build_doc_upload` 在对象存储上传步失败(RequestTimeout,teedoc-upload 无重试) | 去 Actions 重跑失败的 job | +| `pkill` 把自己的命令也杀了 | pattern 匹配到了自身命令行 | 用 `pkill -f 'teedoc.*serve'` 之类不自匹配的写法 | + +--- + +## 12. 参考 + +- 本地预览:http://127.0.0.1:2333 +- CI:`.github/workflows/publish.yml`,push 到 main 后构建 → 推 gh-pages → 上传对象存储 +- 构建工具文档:[teedoc](https://github.com/teedoc/teedoc) diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..b892eaf4 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +本仓库的协作规范见 [AGENTS.md](./AGENTS.md),开始动手前请先读完。 diff --git a/docs/hardware/zh/logic_analyzer/slogic32u3/UG.md b/docs/hardware/zh/logic_analyzer/slogic32u3/Hardware_Specification.md similarity index 100% rename from docs/hardware/zh/logic_analyzer/slogic32u3/UG.md rename to docs/hardware/zh/logic_analyzer/slogic32u3/Hardware_Specification.md diff --git a/docs/hardware/zh/logic_analyzer/slogic32u3/Intro.md b/docs/hardware/zh/logic_analyzer/slogic32u3/Introduction.md similarity index 100% rename from docs/hardware/zh/logic_analyzer/slogic32u3/Intro.md rename to docs/hardware/zh/logic_analyzer/slogic32u3/Introduction.md diff --git a/docs/hardware/zh/logic_analyzer/slogic32u3/QS.md b/docs/hardware/zh/logic_analyzer/slogic32u3/QS.md deleted file mode 100644 index 73d9c9d9..00000000 --- a/docs/hardware/zh/logic_analyzer/slogic32u3/QS.md +++ /dev/null @@ -1,95 +0,0 @@ - ---- -title: SLogic32U3 快速上手 -keywords: SLogic32U3, Quick Start, PulseView, sigrok, 上手 -update: - - date: 2026-09-30 - version: v0.1 - author: Sipeed - content: - - 初始化快速上手骨架 ---- - -# SLogic32U3 快速上手 - -本页用最短路径带你完成第一次采集。深入配置、原理与全部功能见[用户指南](./UG.md);遇到问题见[常见问题](./FAQ.md)。 - -## 开箱 - -> [!NOTE] -> **📷 配图待补(TODO)**:开箱全家福(配件清单定稿后拍摄)。 -> 文件:`assets/DCIM/unboxing.jpg`|要求:俯拍平铺、所有配件入镜。 - -一套完整硬件包含 **SLogic32U3 主机** 与以下附件: - -> 🚧 **TODO**:确认最终配件清单与数量(下表为占位,请按实物修正)。 - -- SLogic32U3 主机 × 1 -- Mini-HDMI 屏蔽探头线 × **(待确认)**(对应 4 组通道) -- 逻辑分析仪测试夹 × **(待确认)** -- USB-C 数据线(USB3 规格)× 1 -- 可选:ADC 示波器模组 × **(待确认)** -- **(待确认:卡针 / 说明卡 / 收纳包等)** - -## 安装软件(PulseView) - -SLogic32U3 为绿色便携软件,无系统级安装。从 [GitHub Release](https://github.com/sipeed/SLogic/releases/latest) 下载对应平台的最新版(下载站为备份镜像,见 [Intro · 软件下载](./Intro.md#软件下载))。 - -| 平台 | 操作 | -| - | - | -| Windows 10/11 | 解压便携包,双击 `pulseview.exe` | -| Linux x86_64 | `chmod +x Pulseview.appimage && ./Pulseview.appimage` | -| macOS | 打开 `Pulseview.dmg` 直接运行 | - -> 🚧 **TODO(配图)**:三平台各一张软件启动截图。建议:`assets/Screenshots/pv-win.png` / `pv-linux.png` / `pv-macos.png` - -## 安装驱动 / 配置权限 - -不同平台首次使用需要一次性配置,否则软件可能扫描不到设备。 - -- **Windows**:**免驱**——SLogic 默认即 WinUSB 设备,Windows 10/11 即插即用,无需 Zadig。详见 [UG · 驱动与安装](./UG.md#驱动与安装)。 -- **Linux**:需安装 udev 规则(设备 VID `359f`),否则普通用户无权限访问 USB。见 [UG · Linux udev 规则](./UG.md#linux-udev-规则)。 -- **macOS**:支持;若首次运行被系统阻止,在「系统设置 → 隐私与安全性」放行。 - -## 接线与接地 - -> 🚧 **TODO(配图)**:接线示意图(Mini-HDMI 探头方向 + 信号/GND 对应)。建议:`assets/MISC/wiring.jpg` - -1. 用 USB-C 线把 SLogic32U3 直连电脑的 **USB3** 口(避免无源 HUB / 机箱前面板)。 -2. 将 Mini-HDMI 屏蔽探头线插入对应通道组(Mini-HDMI 为防呆接口,只能单向插入);探头远端每组 8 路信号按 红/橙/黄/绿/棕/蓝/白/灰 八色循环区分。 -3. 把待测信号接到任一空闲 **CH**,并**务必将被测设备 GND 与 SLogic GND 相连**。 -4. 高速信号建议**每根信号线就近配一根地线**——详见 [UG · 探测与信号完整性](./UG.md#探测与信号完整性)。 - -## 第一次采集(以 UART 为例) - -以采集一路 115200 8N1 的 UART 为例: - -1. 连接设备后启动 PulseView,确认设备被自动识别(未识别见 [FAQ](./FAQ.md#为什么找不到-slogic32u3-设备))。 -2. 只使能用到的通道(如 D0),其余关闭以留出带宽余量。 -3. 设置**电压阈值**匹配 DUT 电平(如 3.3V 逻辑设 ~1.6V)。 -4. 选择合适的**采样率**(经验:≥ 信号最高频率的 10 倍;本例 115200 UART 选 10M 即可)。 -5. 点击采集。 - -> 🚧 **TODO(配图)**:采集参数设置面板 + 采到的波形各一张。建议:`assets/Screenshots/qs-capture-cfg.png` / `qs-uart-wave.png` - -## 看结果并解码 - -1. 打开 Decoder 面板,添加 **UART** 解码器。 -2. 配置引脚映射(RX/TX)、波特率 115200、8N1。 -3. 波形上会标注解码出的字符。 - -> 🚧 **TODO(配图)**:UART 解码标注结果。建议:`assets/Screenshots/qs-uart-decode.png` - ---- - -## 下一步 - -- 想深入采集模式 / 触发 / 更多协议:[用户指南](./UG.md) -- 想用 GPU 加速界面或 ADC 示波器模式:[ngscopeclient](../ngscopeclient/ngscopeclient.md) -- 想让 AI 代跑采集与解码:[SLogic 接入 AI Agent](../slogic_agent/readme.md) -- 遇到问题:[常见问题](./FAQ.md) diff --git a/static/home/slogic_combo8.png b/static/home/slogic_combo8.png deleted file mode 100755 index 87c1cd2d574879fd445ddb34368a897d5bd50dc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21801 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 H)*|G8=s`}M