sem

GitHub
1.7k 48 非常简单 1 次阅读 今天Apache-2.0Agent插件图像
AI 解读 由 AI 自动生成,仅供参考

sem 是一款基于 Git 构建的语义化版本控制命令行工具。与传统工具仅关注代码行数的增减不同,sem 利用 tree-sitter 技术深入解析代码结构,将函数、类和方法识别为独立实体,从而在“实体级别”进行差异对比、责任追溯和影响分析。

它主要解决了传统代码审查中“只见行数变化,不见逻辑改动”的痛点。开发者不再需要面对晦涩的行号差异,而是能直接看到"authenticateUser 函数被修改”这样清晰的语义信息。此外,sem 还能通过跨文件依赖图谱,精准预测修改某个实体可能引发的连锁反应,帮助团队提前规避潜在风险。

这款工具非常适合软件开发者、技术负责人以及 DevOps 工程师使用,尤其适用于需要高质量代码审查、复杂重构或维护大型多语言项目的团队。目前支持包括 Rust、Python、TypeScript 等在内的 23 种主流编程语言。

sem 的独特亮点在于其无需任何配置即可在任何 Git 仓库中运行,并提供 JSON、Markdown 等多种输出格式,轻松集成到 CI 流水线或 AI 辅助开发流程中。无论是日常提交检查还是深度代码演进追踪,sem 都能让版本管理变得更加直观和高效。

使用场景

某电商平台的后端团队正在紧急重构用户认证模块,需要在不破坏现有支付流程的前提下,将 authenticateUser 函数迁移到新的微服务架构中。

没有 sem 时

  • 开发者面对传统的 Git diff 只能看到行号变化,难以快速判断具体是哪个函数逻辑被修改,尤其在文件大幅重组时极易迷失。
  • 评估修改影响范围全靠人工记忆或全局搜索,经常遗漏跨文件的依赖调用,导致支付接口因鉴权逻辑变更而意外崩溃。
  • 代码审查(Code Review)效率低下,评审者需要逐行阅读大量无关的格式调整或注释变动,难以聚焦核心业务逻辑的演进。
  • 追溯某个函数的历史变更时,必须手动翻阅冗长的提交记录,无法直观看到该实体在不同版本中的具体形态演变。

使用 sem 后

  • 通过 sem diff 直接以“函数”为单位展示差异,清晰呈现 authenticateUser 的参数与返回值变化,自动忽略无关的行级噪音。
  • 运行 sem impact authenticateUser 瞬间生成跨文件依赖图,精准定位所有受影响的支付回调和测试用例,提前规避回归风险。
  • 利用 sem blame 在实体级别查看责任人,快速确认谁最后修改了关键方法,结合 sem log 一键追踪该函数完整的迭代历史。
  • 输出 Markdown 或 JSON 格式的语义化报告集成到 PR 描述中,让 AI 助手或非核心成员也能秒懂本次重构的具体业务含义。

sem 将版本控制从枯燥的“文本行对比”升级为智能的“业务实体分析”,让开发者真正掌控代码变更的逻辑本质而非表面字符。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

无 GPU 需求

内存

未说明

依赖
notes该工具是基于 Rust 编写的命令行工具,不依赖 Python 环境。可通过 Homebrew (macOS)、npm/bun (Node.js 环境)、Docker 或直接下载二进制文件安装。若从源码构建,需安装 Rust 稳定版。支持 23 种编程语言的结构化差异分析。
python非必需 (工具基于 Rust,但提供 npm/bun 包装器)
Rust (构建源码时必需)
tree-sitter (内置)
git2
rayon
xxhash
sem hero image

快速开始

sem

基于 Git 的语义版本控制工具。
与按行比较不同,sem 能告诉你哪些代码实体发生了变化:函数、方法、类。

为什么选择 sem? · 安装 · 命令 · MCP 服务器 · 发布记录

发布版本 Rust 测试覆盖率 许可证 支持的语言

sem 是一款基于 Git 的语义版本控制工具。它使用 tree-sitter 解析你的代码,将每个函数、类和方法提取为独立的代码实体,并在实体级别进行差异比较,而不是逐行比较。这意味着你会看到“函数 blahh 被修改”而不是“第 x 行到第 y 行发生了变化”。

它可以在任何 Git 仓库中直接使用,无需额外配置。

sem diff

安装

brew install sem-cli

或者将 npm 包安装到 node_modules 中:

npm install --save-dev @ataraxy-labs/sem

如果你使用 Bun,需要信任该包以便其 postinstall 脚本能下载二进制文件:

bun add -d @ataraxy-labs/sem
bun pm trust @ataraxy-labs/sem

你也可以从源码构建(需要 Rust):

git clone https://github.com/Ataraxy-Labs/sem
cd sem/crates
cargo install --path sem-cli

或者直接从 GitHub Releases 下载预编译的二进制文件。

此外,还可以通过 Docker 运行:

docker build -t sem .
docker run --rm -it -u "$(id -u):$(id -g)" -v "$(pwd):/repo" sem diff

命令

sem 可以在任何 Git 仓库中使用,无需任何配置。它同样适用于非 Git 环境中的任意文件比较。

sem diff

实体级别的差异比较,支持重命名检测、结构化哈希以及单词级别的内联高亮。

# 工作区更改的语义差异
sem diff

# 仅暂存区的更改
sem diff --staged

# 指定提交
sem diff --commit abc1234

# 提交范围
sem diff --from HEAD~5 --to HEAD

# 详细模式(每个实体的单词级内联差异)
sem diff -v

# 纯文本输出(类似 git status 格式)
sem diff --format plain

# JSON 输出(适用于 AI 代理、CI 流水线)
sem diff --format json

# Markdown 输出(适用于 PR、报告)
sem diff --format markdown

# 比较任意两个文件(无需 Git 仓库)
sem diff file1.ts file2.ts

# 从标准输入读取文件变更(无需 Git 仓库)
echo '[{"filePath":"src/main.rs","status":"modified","beforeContent":"...","afterContent":"..."}]' \
  | sem diff --stdin --format json

# 仅针对特定文件类型
sem diff --file-exts .py .rs

sem impact

跨文件依赖图展示了当某个代码实体发生变化时,哪些部分会受到影响。

# 全面的影响分析
sem impact authenticateUser

# 仅显示直接依赖
sem impact authenticateUser --deps

# 仅显示直接被依赖者
sem impact authenticateUser --dependents

# 仅显示受影响的测试
sem impact authenticateUser --tests

# JSON 输出
sem impact authenticateUser --json

# 按文件细化结果
sem impact authenticateUser --file src/auth.ts

sem blame

实体级别的代码归属追踪,显示每个函数、类或方法的最后修改人。

sem blame src/auth.ts

# JSON 输出
sem blame src.auth.ts --json

sem log

跟踪单个代码实体在整个 Git 历史中的演变过程。

sem log authenticateUser

# 详细模式(显示各版本之间的内容差异)
sem log authenticateUser -v

# 限制扫描的提交数量
sem log authenticateUser --limit 20

# JSON 输出
sem log authenticateUser --json

sem entities

列出文件中的所有代码实体及其类型和所在行范围。

sem entities src/auth.ts

# JSON 输出
sem entities src.auth.ts --json

sem context

为大模型量身定制的上下文信息:目标代码实体、其依赖项和被依赖项,可根据指定的 token 预算进行裁剪。

sem context authenticateUser

# 自定义 token 预算
sem context authenticateUser --budget 4000

# JSON 输出
sem context authenticateUser --json

设置为默认的 Git diff

用实体级别的差异替换 git diff 的输出。无论是自动化工具还是人工操作,都会自动获得 sem 的输出,而无需更改任何命令。

sem setup

现在,git diff 将显示实体级别的变更,而非逐行差异。无需任何提示,也无需额外配置代理。所有调用 git diff 的地方都会自动使用 sem 的输出。此外,还会安装一个 pre-commit 钩子,用于展示暂存区更改所影响的实体范围。

若要恢复为正常的 Git diff:

sem unsetup

解析的内容

通过 Tree-sitter 实现完整实体提取的 23 种编程语言:

语言 扩展名 实体
TypeScript .ts .tsx .mts .cts 函数、类、接口、类型、枚举、导出
JavaScript .js .jsx .mjs .cjs 函数、类、变量、导出
Python .py 函数、类、装饰器定义
Go .go 函数、方法、类型、变量、常量
Rust .rs 函数、结构体、枚举、实现块、特质、模块、常量
Java .java 类、方法、接口、枚举、字段、构造函数
C .c .h 函数、结构体、枚举、联合、类型别名
C++ .cpp .cc .hpp 函数、类、结构体、枚举、命名空间、模板
C# .cs 类、方法、接口、枚举、结构体、属性
Ruby .rb 方法、类、模块
PHP .php 函数、类、方法、接口、特质、枚举
Swift .swift 函数、类、协议、结构体、枚举、属性
Elixir .ex .exs 模块、函数、宏、守卫、协议
Bash .sh 函数
HCL/Terraform .hcl .tf .tfvars 块、属性(嵌套块的限定名称)
Kotlin .kt .kts 类、接口、对象、函数、属性、伴生对象
Fortran .f90 .f95 .f 函数、子程序、模块、程序
Vue .vue 模板/脚本/样式块 + 内部 TS/JS 实体
XML .xml .plist .svg .csproj 元素(嵌套,标签名标识)
ERB .erb .html.erb 块、表达式、代码标签
Svelte .svelte .svelte.js .svelte.ts 组件块 + Rune JS/TS 模块
Perl .pl .pm .t 子程序、包
Dart .dart 类、混入、扩展、枚举、类型别名、函数

此外,还包括结构化数据格式:

格式 扩展名 实体
JSON .json 属性、对象(RFC 6901 路径)
YAML .yml .yaml 节、属性(点号路径)
TOML .toml 节、属性
CSV .csv .tsv 行(第一列作为标识)
Markdown .md .mdx 基于标题的章节

其他所有内容则回退到基于块的差异比较。

匹配机制

三阶段实体匹配:

  1. 精确 ID 匹配 — 前后相同的实体 = 已修改或未更改
  2. 结构哈希匹配 — AST 结构相同但名称不同 = 重命名或移动(忽略空格和注释)
  3. 模糊相似度 — 令牌重叠率 >80% = 可能是重命名

这意味着 sem 不仅能检测添加和删除,还能检测重命名和移动。结构哈希还能区分外观上的变化(如空格、格式)与实际逻辑变化。

MCP 服务器

sem 包含一个 MCP 服务器,为 AI 代理提供 6 种工具:sem_entitiessem_diffsem_blamesem_impactsem_logsem_context。这些工具与 CLI 命令完全一致。

{
  "mcpServers": {
    "sem": {
      "command": "sem-mcp"
    }
  }
}

安装 MCP 二进制文件:

cd sem/crates
cargo install --path sem-mcp

JSON 输出

sem diff --format json
{
  "summary": {
    "fileCount": 2,
    "added": 1,
    "modified": 1,
    "deleted": 1,
    "total": 3
  },
  "changes": [
    {
      "entityId": "src/auth.ts::function::validateToken",
      "changeType": "added",
      "entityType": "function",
      "entityName": "validateToken",
      "filePath": "src/auth.ts"
    }
  ]
}

作为库

sem-core 可以作为 Rust 库依赖使用:

[dependencies]
sem-core = { git = "https://github.com/Ataraxy-Labs/sem", version = "0.3" }

weave(语义合并驱动)和 inspect(实体级代码审查)所使用。

架构

  • Tree-sitter 用于代码解析(原生 Rust,非 WASM)
  • git2 用于 Git 操作
  • rayon 用于并行文件处理
  • xxhash 用于结构哈希
  • 插件系统用于添加新语言和格式

贡献

想添加一种新语言吗?请参阅 CONTRIBUTING.md,获取分步指南。

星标历史

星标历史图

许可证

MIT 或 Apache-2.0

版本历史

v0.3.202026/04/14
v0.3.192026/04/13
v0.3.182026/04/13
v0.3.172026/04/12
v0.3.162026/04/11
v0.3.152026/04/10
v0.3.142026/04/07
v0.3.132026/04/03
v0.3.122026/04/02
v0.3.102026/03/15
v0.3.92026/03/10
v0.3.82026/03/09
v0.3.72026/03/08
v0.3.62026/03/08
v0.3.52026/03/06
v0.3.42026/03/01
v0.3.32026/02/22
v0.3.22026/02/15
v0.3.12026/02/13
v0.3.02026/02/12

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

156.8k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|5天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|6天前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架