persiyanov/herdr-reviewr

GitHub: persiyanov/herdr-reviewr

为 herdr 终端 AI 编程助手打造的代码审查侧边栏插件,让开发者在终端内审查 agent 生成的 diff、逐行评论并一键反馈。

Stars: 67 | Forks: 7

# herdr-reviewr [herdr](https://herdr.dev) 的代码审查侧边栏。你的 agent 编写代码。你在聊天旁边的窗格中阅读它的 diff,对相关行进行评论,并将备注发回去。你永远不需要 离开终端。 ![demo](https://static.pigsec.cn/wp-content/uploads/repos/cas/65/658ccd9edf03a224f5eb6a728c938f42ddd17747b00973978c148fd47be202a5.gif) 在一个指向 git worktree 的持久化窗格中,你能获得: - **Diff 审查** — agent 修改的文件,带有语法高亮,范围限定为*未提交 (uncommitted)*、 *分支 (branch)* 或*上一轮 (last turn)*。 - **变更集遍历** — `]` 和 `[` 逐个 hunk 遍历更改。当到达文件的最后一个 hunk 时,步进会停止, 底部会提示跨越,再按一次即可打开下一个文件。`f` 和 `F` 可直接在文件之间跳转。 - **行评论** — 选择一个范围并写下备注。它会作为卡片显示在代码下方, 而不是隐藏在标记后面。 - **发送** — 只需一次按键,即可将每条评论以 `path:start-end — comment` 的形式放入 agent 的输入框中。你可以补充上下文并按回车键。 - **文件查看器** — 整个 worktree,而不仅仅是 diff,任何文件的当前内容 都可以在窗格中渲染。 - **PR 视图** — 分支的打开状态 pull request,只读,无需切换窗口。 描述和每条评论都会渲染为带样式的 markdown。 - **Markdown 预览** — 按一个键即可在 `.md` 文件的源码和渲染视图之间切换, 标题、列表、表格、链接和代码块会像 diff 一样高亮显示。切换会保持 你的阅读位置。 - **主题** — 18 种命名的暗色和亮色调色板,只需一行配置即可切换。Catppuccin, Dracula, Nord, Gruvbox, Tokyo Night, Rosé Pine, Solarized 等。 它**从不编辑你的 worktree**,也不会自行发送任何内容。它对 git 唯一的写入是一个私有的 `last-turn` 基准 ref,位于 `refs/reviewr/` 下。**PR** 标签页会读取 GitHub,但从不向其发布内容。 ## 环境要求 - **herdr ≥ 0.7.0**(插件系统)。 - **git** 位于 `PATH` 中。 - 一个支持 Unicode 框线绘制的 **truecolor (24位)** 终端。选择一个与 其亮色或暗色背景匹配的主题(参见 [主题](#theme))。 - **macOS 或 Linux。** - **`gh`**(GitHub CLI),已通过身份验证。可选,仅 **PR** 标签页需要它。其他所有功能 没有它也能正常工作。 ## 安装 从 herdr marketplace 安装。你会获得一个预构建的二进制文件,无需 Rust 工具链: ``` herdr plugin install persiyanov/herdr-reviewr ``` 侧边栏会**为新建的 worktree 自动打开**,因此安装插件就足够了。设置 `auto_open = false` 可以让它保持隐藏,直到你调用它(参见 [配置](#configuration))。若要 按需切换,请在你的 herdr 配置中为 **reviewr: toggle sidebar** 操作绑定一个快捷键。 快捷键位于用户配置中,而不是插件清单中: ``` [[keys.command]] key = "cmd+r" type = "plugin_action" command = "persiyanov.reviewr.toggle" # . — note the id, not the name ``` `cmd+…` 组合键可以触达 herdr。macOS 会拦截 `alt+…` 组合键。如果未绑定快捷键,可以使用 `herdr plugin action invoke toggle --plugin persiyanov.reviewr` 运行一次该操作。 除了 `toggle` 之外,还有两个专门用于脚本和布局插件的操作。`open` 会打开 侧边栏,如果已经打开则不做任何事。`close` 会关闭它,如果没有打开则不做 任何事。以相同的方式绑定或调用它们,即 `persiyanov.reviewr.open` 和 `persiyanov.reviewr.close`。 有关布局方案,请参见 [自动打开和布局插件](#auto-open-and-layout-plugins)。 ## 快速开始 核心循环只需要五个按键。在你的 agent 旁边打开侧边栏,然后: 1. **选择一个文件。** agent 修改的文件位于右侧窗格。`j` / `k` 移动光标。 当你移动时,diff 会在左侧打开。或者按 `]` 逐个 hunk、 挨个文件地遍历更改。 2. **聚焦 diff。** 按 `Tab` 从文件列表移至 diff 中。 3. **选择行。** 按 `v`,然后按 `j` / `k` 扩展选择(或点击拖拽)。 4. **评论。** 按 `c`,输入你的备注,按 `Enter` 保存。它会作为卡片保留在 该行下方的屏幕上。 5. **发送。** 完成后,按 `s`。每条评论都会以 `path:start-end — comment` 的形式进入 agent 的输入框。你可以补充上下文并发送。 底部总是会显示当前可用的快捷键,因此你可以在使用中学习。下表 是完整的参考。 ## 控制 以下单键快捷键是默认设置。它们中的任何一个都可以针对每个操作重新绑定,甚至可以 一次绑定到多个键([快捷键](#keybindings))。 **导航** | 按键 | 操作 | | --- | --- | | `1` `2` `3` | 切换标签页 — Changes / All files / PR | | `u` `b` `t` | 切换范围 — 未提交 / 分支 / 上一轮 | | `j` `k` · `↑` `↓` | 在聚焦的窗格中移动光标 | | `]` `[` | 跳转到下一个 / 上一个 hunk — 在文件边缘再按一次即可进入相邻文件 | | `f` `F` | 跳转到下一个 / 上一个文件 | | `PageUp` `PageDown` | 移动一页 | | `Ctrl+U` `Ctrl+D` | 移动半页 | | `Tab` | 在文件列表和 diff 之间切换焦点 | | `→` `←` | 展开或折叠目录或折叠区域,或横向滚动 diff | | `w` | 切换自动换行 | | `m` | 切换 `.md` 文件的 markdown 预览(Changes 或 All files) | | `<` `>` | 向左 / 向右移动窗格分隔线 | | `r` | 立即刷新 | | `q` | 退出 | **审查中**(在 diff 中) | 按键 | 操作 | | --- | --- | | `v` | 开始行选择,然后 `j` / `k` 扩展(或点击拖拽) | | `c` | 对所选内容或当前行进行评论 | | `e` `d` | 编辑 / 删除光标下的评论 | | `n` `N` | 跳转到下一个 / 上一个评论 | | `l` | 列出所有评论 | | `s` | 将所有评论发送给 agent | | `y` | 将所有评论复制到剪贴板 | | `esc` | 清除选择 | **在评论框中** | 按键 | 操作 | | --- | --- | | `Enter` | 保存评论 | | `Esc` | 取消 | | `Shift+Enter` · `Alt+Enter` · `Ctrl+J` | 插入换行符 | 此外还有常见的插入符移动:方向键,`Home` / `End`,`Ctrl+A` / `Ctrl+E`,使用 `Alt+b` / `Alt+f` 进行单词跳转,以及使用 `Ctrl+W` / `Ctrl+U` / `Ctrl+K` 按单词或至行边缘删除。 **PR 标签页**(只读) | 按键 | 操作 | | --- | --- | | `j` `k` | 在描述和评论中移动 | | `PageUp` `PageDown` | 滚动阅读窗格 | | `o` | 在浏览器中打开 PR | | `r` | 刷新 | herdr 是原生支持鼠标操作的,因此点击文件、拖拽选择行、点击标签页或 `Send` 按钮以及滚轮也都能正常工作。渲染后的 markdown 中的链接在点击时会在你的浏览器中打开 (仅限 `http`/`https`),而锚点链接(`#section`)会跳转到其对应的标题。 ## 三个标签页 - **Changes** — 当前作用域内已更改的文件,每个文件带有 `+/-` 统计信息,及其 总计位于标题中。选择一个文件以阅读其带有语法高亮的 diff。这是你进行审查和评论的地方。在 `.md` 文件上,`m` 会打开 它的渲染预览。再次按 `m` 可返回到你离开时的 diff 处。 - **All files** — 整个 worktree 树,而不仅仅是更改的内容。diff 窗格会渲染任何 文件的当前内容。Git 忽略的路径也会显示,但颜色会变暗。作为一个整体被忽略的目录 (`target/`、`node_modules/`)是一行折叠的记录,只有当你展开它时才会加载其内容。 你也可以在这里进行评论。在 `.md` 文件上,`m` 会在源码和渲染后的 markdown 预览之间切换。预览是只读的,因此评论会保留在源码视图中。 - **PR** — 分支打开状态 pull request 的只读镜像,通过 `gh` 从 GitHub 读取。它 显示 PR 的状态(草稿、打开、已合并或已关闭,以及可合并性和未推送提交的 同步状态)、带有通过/失败汇总的检查及其评论。PR 描述位于列表 的顶部。评论涵盖审查、行内发现和普通评论,最新的在前,并带有 `resolved` 和 `outdated` 标记。描述和每个评论正文都呈现为带样式的 markdown,代码块使用你的主题高亮显示。`o` 在浏览器中打开 PR。该标签页 只读取 GitHub。它从不发布、解决、重新运行或合并。 ## Diff 作用域 - **未提交** — 工作区与 `HEAD` 的对比(已暂存、未暂存和未追踪)。 - **分支** — 工作区与基础分支的 merge-base 进行对比。默认基础是 `origin/main`,然后是 `origin/master`、`main`、`master`,可通过 `base_branches` 或 `--base` 设置。 此作用域是**未提交**加上分支已提交的工作。 - **上一轮** — 仅限 agent 自最近一轮开始以来更改的内容(参见 [限制](#limitations))。 侧边栏在**未提交**状态下启动。要在其他作用域中启动,请在 配置文件中设置 `default_scope`(`"uncommitted"`、`"branch"` 或 `"last-turn"`)。使用 `u`/`b`/`t` 切换始终 优先,并应用于会话的其余时间。 每个作用域都遵循 `.gitignore`,因此构建输出永远不会弄乱 **Changes**。要审查一个文件, 请在 git 中追踪它。一个被忽略但有意保留的文件(计划、示例 env)应该包含在 repo 中。 在那里它显示为更改,一旦提交就会过期。**All files** 仍然可以浏览任何 被忽略的路径(颜色变暗),甚至包括未追踪的文件。 ## 配置 窗格命令上的 CLI 标志: | 标志 | 默认值 | 含义 | | --- | --- | --- | | `--poll ` | `2000` | worktree 轮询间隔(最小 `200`) | | `--base ` | 自动 | `branch` 作用域的基础分支,覆盖 `base_branches` | | `--theme ` | `catppuccin` | UI + 语法主题(见下文) | | `--wrap ` | `on` | 自动换行显示过长的 diff 行(`w` 在运行时切换) | 其他所有内容都在 reviewr 自己的配置文件中设置: ``` ~/.config/herdr/plugins/config/persiyanov.reviewr/config.toml ``` 如果文件尚不存在,请创建它。herdr 将此目录作为 `$HERDR_PLUGIN_CONFIG_DIR` 传递给插件,而上面的路径就是它在磁盘上的位置。请注意这是 reviewr 的文件,而不是 herdr 的。添加到 herdr 自己的 `~/.config/herdr/config.toml` 中的设置永远不会 到达 reviewr。 该文件接受以下八个键: ``` theme = "tokyo-night" base_branches = ["origin/develop", "origin/main", "main", "master"] default_scope = "branch" toggle_placement = "overlay" toggle_direction = "down" auto_open = false github_host = "github.example.com" [keybindings] comment = ["c", "ㅊ"] select = ["v", "ㅍ"] ``` 缺少文件或省略的键会使用其默认值。任何未知的键、错误的类型或无效的值 都会使整个文件无效。reviewr 从不应用看起来有效的部分。然后侧边栏 仅显示配置错误,操作或事件将以非零状态退出,而不会触及工作区。 修复该文件,正在运行的侧边栏会在下次刷新时恢复。如果你的编辑器或配置器 可能暴露部分保存,请原子性地替换文件。 ### 主题 一个主题为整个 UI 着色,同时作用于界面和语法。在 reviewr 的配置文件中设置它。 reviewr 会在刷新时重新读取文件,因此编辑并刷新可以更改主题,而无需重新启动: ``` # ~/.config/herdr/plugins/config/persiyanov.reviewr/config.toml theme = "tokyo-night" ``` `--theme` 会覆盖配置文件(便于开发运行)。选择一个与你的 终端的亮色或暗色背景匹配的名称。窗格保留终端的背景,因此在暗色 终端上使用亮色主题阅读体验很差,反之亦然。可用主题: - **暗色:** `catppuccin`, `catppuccin-frappe`, `catppuccin-macchiato`, `dracula`, `nord`, `gruvbox`, `one-dark`, `solarized`, `monokai`, `tokyo-night`, `rose-pine`。 - **亮色:** `catppuccin-latte`, `gruvbox-light`, `one-light`, `solarized-light`, `github-light`, `tokyo-night-day`, `rose-pine-dawn`。 在两者都提供调色板的地方,名称与 herdr 的相匹配。未知的配置名称是一个错误。独立的 `--theme` 开发标志保留了其较早版本回退到 `catppuccin` 的行为。 ### 基础分支 **分支**作用域针对与基础分支的 merge-base 进行 diff。reviewr 会尝试一个有序 的候选列表,并使用在你的 repo 中存在的第一个,因此一个设置适用于具有不同主干的 repo 。默认值为 `origin/main`,然后是 `origin/master`、`main`、`master`。 要针对不同的基础进行审查,比如 `develop` 主干,请在同一个 配置文件中设置 `base_branches`。reviewr 在刷新时重新读取它,因此编辑它并按 `r` 即可重新设置基准,而无需 重新启动: ``` # ~/.config/herdr/plugins/config/persiyanov.reviewr/config.toml base_branches = ["origin/develop", "origin/main", "main", "master"] ``` reviewr 会选择 repo 中存在的第一个条目。当 `--base ` 标志指定了 现有的 ref 时,它仍然优先。缺少文件或省略的键会使用默认列表。格式错误的值 会像任何其他无效配置一样阻止插件。 ### 快捷键 每个单键快捷键都可以针对每个操作重新绑定。在同一个配置文件中设置 `[keybindings]`。 每个条目将一个操作名称映射到一个键数组。该数组替换该操作的默认 键,而你没有提到的操作则保留其原有快捷键。底部和顶部的提示会显示数组中的第一个键。reviewr 在刷新时重新读取文件,因此快捷键编辑无需重新启动即可生效。 ``` # ~/.config/herdr/plugins/config/persiyanov.reviewr/config.toml [keybindings] comment = ["c", "ㅊ"] select = ["v", "ㅍ"] ``` 当启用了 CJK 输入法时,每个操作对应多个按键就是关键所在。操作系统会将 组合好的字符发送给终端,因此纯 ASCII 快捷键永远不会到达。请绑定你的 键盘布局在同一个物理按键上产生的字符,这样快捷键就可以在不 将输入法切换到英语的情况下工作。 操作名称及其默认值: | 操作 | 默认值 | | --- | --- | | `down` / `up` | `j` / `k` | | `next-hunk` / `prev-hunk` | `]` / `[` | | `next-file` / `prev-file` | `f` / `F` | | `scope-uncommitted` / `scope-branch` / `scope-last-turn` | `u` / `b` / `t` | | `tab-changes` / `tab-all-files` / `tab-pr` | `1` / `2` / `3` | | `wrap` | `w` | | `preview` | `m` | | `list-wider` / `list-narrower` | `<` / `>` | | `select` | `v` | | `comment` | `c` | | `edit` / `delete` | `e` / `d` | | `next-comment` / `prev-comment` | `n` / `N` | | `comments` | `l` | | `send` | `s`, `S` | | `copy` | `y`, `Y` | | `open-pr` | `o` | | `refresh` | `r` | | `quit` | `q` | 一个键即一个字符,任何可打印的字符都可以。方向键、`Tab`、`Esc`、`Enter` 和翻页键是固定的,并且始终有效。在评论框中按键仍然会正常输入字符。两个 操作永远不能共享同一个键。冲突会使整个文件无效,并且错误会同时指出 这两个操作,因此拼写错误无法在不被发现的情况下覆盖另一个快捷键。 ### GitHub 主机 GitHub.com 无需配置即可工作。要从一个 GitHub Enterprise 主机读取 pull request, 请设置其裸主机名: ``` github_host = "github.example.com" ``` reviewr 会匹配该确切的 origin 主机,或者匹配以 `github.example.com-` 开头的受信任 SSH 别名,例如 `git@github.example.com-work:owner/repo.git`。此别名约定 仅适用于 scp 风格和 `ssh://` origin。HTTPS 主机必须完全匹配。当配置了 Enterprise 时,GitHub.com 及其 SSH 别名将继续工作。 主机身份来自 Git 的 `url.*.insteadOf` 重写后的 origin 获取 URL。单独的 推送 URL 不会改变它。API 调用在每次请求时都会指明规范主机,因此 `GH_HOST` 无法重定向获取操作。请使用 `gh auth login --hostname github.example.com` 对 Enterprise 主机进行身份验证。 ### 侧边栏位置 默认情况下,切换键会将 reviewr 作为你 agent 右侧的分割窗口打开。你可以通过在同一个配置文件中设置 `toggle_placement` 来更改它 的打开方式。reviewr 会在每次 切换时重新读取该文件,因此更改将在你下次按下该键时生效。 ``` # ~/.config/herdr/plugins/config/persiyanov.reviewr/config.toml toggle_placement = "overlay" # split | overlay | zoomed | tab (default: split) toggle_direction = "down" # right | down — split only (default: right) ``` - **`split`** 位于你的 agent 旁边,并将键盘焦点留在 agent 上。设置 `toggle_direction` 以 将 reviewr 放在右侧(默认)或下方。 - **`overlay`** 用 reviewr 覆盖整个标签页,并将键盘焦点交给它。再次切换即可 返回你的 agent。 - **`zoomed`** 像覆盖一样填满标签页,并将键盘焦点交给 reviewr。 - **`tab`** 在自己的标签页中打开 reviewr,并将键盘焦点交给它。 当你创建新的 worktree 时,reviewr 仅针对 `split` 和 `tab` 自动打开。使用 `overlay` 或 `zoomed` 时,它会避让,直到你自己按下切换键。无法识别的值会使 配置无效。你也可以完全关闭自动打开功能。下一节将展示如何操作。 ### 自动打开和布局插件 reviewr 默认情况下会为每个新的 worktree 自动打开。要让它等待切换键,请 在同一个配置文件中设置 `auto_open = false`: ``` # ~/.config/herdr/plugins/config/persiyanov.reviewr/config.toml auto_open = false # default: true ``` 当另一个插件为你安排新的 worktree 时执行此操作,例如 [herdr-plus](https://github.com/cloudmanic/herdr-plus) worktree 布局。这两个插件都会对同一个 worktree 事件做出反应并相互竞争,任何一方都可能失败。竞争可能会完全跳过布局, 或者将 reviewr 作为分割窗口丢弃在布局中间。设置了 `auto_open = false` 后,reviewr 将不再 管新生成的工作区。布局构建不受干扰,并且切换键可以在其上 以你配置的任何位置打开 reviewr。 布局也可以在其窗格就位后自行打开 reviewr: ``` herdr plugin action invoke open --plugin persiyanov.reviewr ``` `open` 会忽略 `auto_open`,因为显式调用代表你的意愿。它会以你配置的 位置打开,如果侧边栏已经打开则不做任何事,因此布局可以在每次过程中运行它。 有两点需要了解。该操作会在**聚焦的** workspace 中打开 reviewr,因此请在 新的 workspace 获得焦点时调用它。而且它会将 reviewr 作为其**自己的新窗格**打开。一个命令 为该调用的布局窗格将在调用返回后退出。请将调用作为一次性命令从你的 布局 hook 中运行,而不是作为一个应该保留下来的窗格。 ## 限制 这是一个专注且年轻的工具。已知的限制: **终端与主题** - **需要 Truecolor** — 颜色为 24 位 RGB,没有 256/8 位颜色回退。基础终端 会渲染出错误的颜色。 - **主题必须与终端匹配** — 窗格保留终端的背景,因此在暗色 终端上使用亮色主题阅读体验很差,反之亦然。目前还没有自动亮/暗检测 。你需要手动设置主题以使其匹配。 - **添加 / 删除为红色 / 绿色** — 目前还没有针对色盲用户的辅助提示。 - **需要框线绘制字形** — UI 使用 Unicode 框字符绘制。不需要 Nerd Font。 **平台** - **仅限 macOS 和 Linux** — 不支持 Windows。 - **剪贴板导出** 在 macOS 上使用 `pbcopy`,或在 Linux 上使用 `wl-copy` / `xclip` / `xsel`。如果 未安装任何剪贴板工具,它会进行提示,但 **发送** 仍然有效。OSC 52 和 Windows 已列入路线图。 **herdr 耦合** - **发送需要找到 agent 窗格** — 即你标签页中的 agent,或者工作区中唯一的 agent。否则发送将不起作用,并保留你的评论。浏览和 diff 不需要 herdr。 - **上一轮依赖于轮询**(默认为 2 秒)— 在一次轮询内开始并完成的 turn 永远不会 获得自己的快照。然后,该作用域会显示自上次*观察到的* turn 开始以来的所有内容。那绝对不是 agent 没有写的行,但可能涉及不止一轮。 **PR 标签页** - **仅限 GitHub 且为只读** — 需要经过身份验证的 `gh` 和 GitHub 远程仓库。如果缺少其中之一 ,它会显示一行文字告诉你需要修复什么,而 Changes 和 All files 会继续工作。 - **仅镜像分支*打开的* PR** — 已合并或已关闭的 PR 显示为历史记录。每个评论 界面最多显示一页(100 行),当有更多内容时,会显示 `+more on GitHub ↗` 标记。 **审查模型** - **评论位于内存中且为单会话** — 关闭窗格会丢失你尚未发送或 复制出来的任何评论。 - **发送是全有或全无** — 发送(或复制到剪贴板)会传递整个集合并清除 它。没有针对单条评论的发送,也没有重复传递。失败会使所有内容保留 在原处。 - **没有行号变基** — 评论通过其 diff 片段保持可定位,而不是通过其行 号。reviewr 会标记过期的评论,而不是将其丢弃。 - **每个 worktree 一个侧边栏** — 同一个 worktree 上的两个侧边栏会竞争基准 ref,最后 写入者获胜。 **预算** - 超过 **2 MB** 或 **50,000 行**的文件会显示“太大”通知。**二进制**文件没有 diff。 ## 从源码构建 面向贡献者。`herdr plugin link` 会跳过下载构建步骤,因此请在窗格命令寻找它的地方放置本地构建的 二进制文件,即 `$HERDR_PLUGIN_ROOT/bin/herdr-reviewr`: ``` git clone https://github.com/persiyanov/herdr-reviewr cd herdr-reviewr just install # build release → bin/herdr-reviewr, ad-hoc re-signed on macOS herdr plugin link . ``` `just install` 会用新文件替换二进制文件,并对其进行 ad-hoc 重新签名。在 Apple Silicon 上这很重要。原地覆盖经过代码签名的二进制文件会使其签名失效,然后 macOS 会在 启动时对其发送 SIGKILL 信号。因此,简单的 `cp target/release/herdr-reviewr bin/` 会使窗格 瞬间打开并关闭。 **第一次链接后的开发循环:** 1. 编辑代码。 2. 运行 `just install` 以重新构建并重新签名 `bin/` 下的二进制文件。 3. 通过使用你的快捷键关闭再重新打开侧边栏来重新启动它。在此之前,打开的窗格会继续 运行*旧*进程,因此仅仅重新构建并不会改变屏幕上的内容。 此循环仅在插件处于**链接**状态时有效,而不是从 marketplace 安装的。使用 `herdr plugin list` 进行检查。`github:…` 源意味着窗格运行的是位于 `~/.config/herdr/plugins/github/` 下的*下载的*二进制文件,并且无论你多么频繁地运行 `just install`,本地重新构建都不会出现在那里。将 GitHub 安装切换为开发链接: ``` herdr plugin uninstall persiyanov.reviewr # config is keyed by id and survives herdr plugin link . ``` ## 路线图 结构化 (JSON) 导出、diff 内搜索、并排分割视图、标记文件已审查、 快捷键的修饰符和命名键表示法、OSC 亮/暗主题自动检测、更多主题 (`kanagawa`、`vesper`、`everforest`、`ayu`、暗色 `github`)、`terminal` 跟随调色板 ,以及 OSC 52 剪贴板。 ## 设计 生动的设计位于 [`specs/`](_URL_7/>) 中,每个文档一个概念,始终保持最新。 ## 许可证 [MIT](LICENSE)。语法高亮来自 [syntect](https://github.com/trishume/syntect) 和 [two-face](https://github.com/CosmicHorrorDev/two-face)。大多数主题的语法颜色来自 two-face 的内置集合。 `assets/` 中内置的 `.tmTheme` 语法文件,各自拥有其许可证: - [Catppuccin Mocha](https://github.com/catppuccin/bat) — MIT。 - [Tokyo Night](https://github.com/folke/tokyonight.nvim)(`tokyo-night`, `tokyo-night-day`)— Apache-2.0。 - [Rosé Pine](https://github.com/rose-pine/tm-theme)(`rose-pine`, `rose-pine-dawn`)— MIT。
标签:AI编程助手, Git, Python安全, SOC Prime, 代码审查, 可视化界面, 开发工具, 插件, 通知系统