[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-Ataraxy-Labs--sem":3,"tool-Ataraxy-Labs--sem":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",157379,2,"2026-04-15T23:32:42",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":77,"owner_email":78,"owner_twitter":77,"owner_website":79,"owner_url":80,"languages":81,"stars":108,"forks":109,"last_commit_at":110,"license":111,"difficulty_score":112,"env_os":113,"env_gpu":114,"env_ram":115,"env_deps":116,"category_tags":125,"github_topics":126,"view_count":32,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":136,"updated_at":137,"faqs":138,"releases":179},7863,"Ataraxy-Labs\u002Fsem","sem","Semantic version control CLI. Entity-level diff, blame, graph, and impact analysis for code. 23 languages via tree-sitter.","sem 是一款基于 Git 构建的语义化版本控制命令行工具。与传统工具仅关注代码行数的增减不同，sem 利用 tree-sitter 技术深入解析代码结构，将函数、类和方法识别为独立实体，从而在“实体级别”进行差异对比、责任追溯和影响分析。\n\n它主要解决了传统代码审查中“只见行数变化，不见逻辑改动”的痛点。开发者不再需要面对晦涩的行号差异，而是能直接看到\"authenticateUser 函数被修改”这样清晰的语义信息。此外，sem 还能通过跨文件依赖图谱，精准预测修改某个实体可能引发的连锁反应，帮助团队提前规避潜在风险。\n\n这款工具非常适合软件开发者、技术负责人以及 DevOps 工程师使用，尤其适用于需要高质量代码审查、复杂重构或维护大型多语言项目的团队。目前支持包括 Rust、Python、TypeScript 等在内的 23 种主流编程语言。\n\nsem 的独特亮点在于其无需任何配置即可在任何 Git 仓库中运行，并提供 JSON、Markdown 等多种输出格式，轻松集成到 CI 流水线或 AI 辅助开发流程中。无论是日常提交检查还是深度代码演进追踪，sem 都能让版本管理变得","sem 是一款基于 Git 构建的语义化版本控制命令行工具。与传统工具仅关注代码行数的增减不同，sem 利用 tree-sitter 技术深入解析代码结构，将函数、类和方法识别为独立实体，从而在“实体级别”进行差异对比、责任追溯和影响分析。\n\n它主要解决了传统代码审查中“只见行数变化，不见逻辑改动”的痛点。开发者不再需要面对晦涩的行号差异，而是能直接看到\"authenticateUser 函数被修改”这样清晰的语义信息。此外，sem 还能通过跨文件依赖图谱，精准预测修改某个实体可能引发的连锁反应，帮助团队提前规避潜在风险。\n\n这款工具非常适合软件开发者、技术负责人以及 DevOps 工程师使用，尤其适用于需要高质量代码审查、复杂重构或维护大型多语言项目的团队。目前支持包括 Rust、Python、TypeScript 等在内的 23 种主流编程语言。\n\nsem 的独特亮点在于其无需任何配置即可在任何 Git 仓库中运行，并提供 JSON、Markdown 等多种输出格式，轻松集成到 CI 流水线或 AI 辅助开发流程中。无论是日常提交检查还是深度代码演进追踪，sem 都能让版本管理变得更加直观和高效。","\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fbanner.svg\" alt=\"sem\" width=\"600\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Semantic version control built on Git.\u003C\u002Fstrong>\u003Cbr>\n  Instead of lines changed, sem tells you what entities changed: functions, methods, classes.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fataraxy-labs.com\u002Fblogs\u002Fcode-is-not-text\">Why sem?\u003C\u002Fa> ·\n  \u003Ca href=\"#install\">Install\u003C\u002Fa> ·\n  \u003Ca href=\"#commands\">Commands\u003C\u002Fa> ·\n  \u003Ca href=\"#mcp-server\">MCP Server\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases\u002Flatest\">Releases\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases\u002Flatest\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FAtaraxy-Labs\u002Fsem?color=blue&label=release\" alt=\"Release\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Frust-stable-orange\" alt=\"Rust\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Ftests-133_passing-brightgreen\" alt=\"Tests\">\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-yellow\" alt=\"License\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguages-23-blue\" alt=\"Languages\">\n\u003C\u002Fp>\n\nsem is a semantic version control tool that works on top of Git. It parses your code with tree-sitter, extracts every function, class, and method as an entity, and diffs at the entity level instead of lines. This means you see \"function `blahh` was modified\" instead of \"lines x-y changed.\"\n\nIt works in any Git repo with no setup.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fterminal.svg\" alt=\"sem diff\" width=\"800\" \u002F>\n\u003C\u002Fp>\n\n## Install\n\n```bash\nbrew install sem-cli\n```\n\nOr install the npm wrapper into `node_modules`:\n\n```bash\nnpm install --save-dev @ataraxy-labs\u002Fsem\n```\n\nWith Bun, trust the package so its `postinstall` script can download the binary:\n\n```bash\nbun add -d @ataraxy-labs\u002Fsem\nbun pm trust @ataraxy-labs\u002Fsem\n```\n\nOr build from source (requires Rust):\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\ncd sem\u002Fcrates\ncargo install --path sem-cli\n```\n\nOr grab a binary from [GitHub Releases](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases).\n\nOr run via Docker:\n\n```bash\ndocker build -t sem .\ndocker run --rm -it -u \"$(id -u):$(id -g)\" -v \"$(pwd):\u002Frepo\" sem diff\n```\n\n## Commands\n\nWorks in any Git repo. No setup required. Also works outside Git for arbitrary file comparison.\n\n### sem diff\n\nEntity-level diff with rename detection, structural hashing, and word-level inline highlights.\n\n```bash\n# Semantic diff of working changes\nsem diff\n\n# Staged changes only\nsem diff --staged\n\n# Specific commit\nsem diff --commit abc1234\n\n# Commit range\nsem diff --from HEAD~5 --to HEAD\n\n# Verbose mode (word-level inline diffs for each entity)\nsem diff -v\n\n# Plain text output (git status style)\nsem diff --format plain\n\n# JSON output (for AI agents, CI pipelines)\nsem diff --format json\n\n# Markdown output (for PRs, reports)\nsem diff --format markdown\n\n# Compare any two files (no git repo needed)\nsem diff file1.ts file2.ts\n\n# Read file changes from stdin (no git repo needed)\necho '[{\"filePath\":\"src\u002Fmain.rs\",\"status\":\"modified\",\"beforeContent\":\"...\",\"afterContent\":\"...\"}]' \\\n  | sem diff --stdin --format json\n\n# Only specific file types\nsem diff --file-exts .py .rs\n```\n\n### sem impact\n\nCross-file dependency graph shows what breaks if an entity changes.\n\n```bash\n# Full impact analysis\nsem impact authenticateUser\n\n# Direct dependencies only\nsem impact authenticateUser --deps\n\n# Direct dependents only\nsem impact authenticateUser --dependents\n\n# Affected tests only\nsem impact authenticateUser --tests\n\n# JSON output\nsem impact authenticateUser --json\n\n# Disambiguate by file\nsem impact authenticateUser --file src\u002Fauth.ts\n```\n\n### sem blame\n\nEntity-level blame showing who last modified each function, class, or method.\n\n```bash\nsem blame src\u002Fauth.ts\n\n# JSON output\nsem blame src\u002Fauth.ts --json\n```\n\n### sem log\n\nTrack how a single entity evolved through git history.\n\n```bash\nsem log authenticateUser\n\n# Verbose mode (show content diff between versions)\nsem log authenticateUser -v\n\n# Limit commits scanned\nsem log authenticateUser --limit 20\n\n# JSON output\nsem log authenticateUser --json\n```\n\n### sem entities\n\nList all entities in a file with their types and line ranges.\n\n```bash\nsem entities src\u002Fauth.ts\n\n# JSON output\nsem entities src\u002Fauth.ts --json\n```\n\n### sem context\n\nToken-budgeted context for LLMs: the entity, its dependencies, and its dependents, fitted to a token budget.\n\n```bash\nsem context authenticateUser\n\n# Custom token budget\nsem context authenticateUser --budget 4000\n\n# JSON output\nsem context authenticateUser --json\n```\n\n## Use as default Git diff\n\nReplace `git diff` output with entity-level diffs. Agents and humans get sem output automatically without changing any commands.\n\n```bash\nsem setup\n```\n\nNow `git diff` shows entity-level changes instead of line-level. No prompts, no agent configuration needed. Everything that calls `git diff` gets sem output automatically. Also installs a pre-commit hook that shows entity-level blast radius of staged changes.\n\nTo disable and go back to normal git diff:\n\n```bash\nsem unsetup\n```\n\n## What it parses\n\n23 programming languages with full entity extraction via tree-sitter:\n\n| Language | Extensions | Entities |\n|----------|-----------|----------|\n| TypeScript | `.ts` `.tsx` `.mts` `.cts`  | functions, classes, interfaces, types, enums, exports |\n| JavaScript | `.js` `.jsx` `.mjs` `.cjs` | functions, classes, variables, exports |\n| Python | `.py` | functions, classes, decorated definitions |\n| Go | `.go` | functions, methods, types, vars, consts |\n| Rust | `.rs` | functions, structs, enums, impls, traits, mods, consts |\n| Java | `.java` | classes, methods, interfaces, enums, fields, constructors |\n| C | `.c` `.h` | functions, structs, enums, unions, typedefs |\n| C++ | `.cpp` `.cc` `.hpp` | functions, classes, structs, enums, namespaces, templates |\n| C# | `.cs` | classes, methods, interfaces, enums, structs, properties |\n| Ruby | `.rb` | methods, classes, modules |\n| PHP | `.php` | functions, classes, methods, interfaces, traits, enums |\n| Swift | `.swift` | functions, classes, protocols, structs, enums, properties |\n| Elixir | `.ex` `.exs` | modules, functions, macros, guards, protocols |\n| Bash | `.sh` | functions |\n| HCL\u002FTerraform | `.hcl` `.tf` `.tfvars` | blocks, attributes (qualified names for nested blocks) |\n| Kotlin | `.kt` `.kts` | classes, interfaces, objects, functions, properties, companion objects |\n| Fortran | `.f90` `.f95` `.f` | functions, subroutines, modules, programs |\n| Vue | `.vue` | template\u002Fscript\u002Fstyle blocks + inner TS\u002FJS entities |\n| XML | `.xml` `.plist` `.svg` `.csproj` | elements (nested, tag-name identity) |\n| ERB | `.erb` `.html.erb` | blocks, expressions, code tags |\n| Svelte | `.svelte` `.svelte.js` `.svelte.ts` | component blocks + rune JS\u002FTS modules |\n| Perl | `.pl` `.pm` `.t` | subroutines, packages |\n| Dart | `.dart` | classes, mixins, extensions, enums, type aliases, functions |\n\nPlus structured data formats:\n\n| Format | Extensions | Entities |\n|--------|-----------|----------|\n| JSON | `.json` | properties, objects (RFC 6901 paths) |\n| YAML | `.yml` `.yaml` | sections, properties (dot paths) |\n| TOML | `.toml` | sections, properties |\n| CSV | `.csv` `.tsv` | rows (first column as identity) |\n| Markdown | `.md` `.mdx` | heading-based sections |\n\nEverything else falls back to chunk-based diffing.\n\n## How matching works\n\nThree-phase entity matching:\n\n1. **Exact ID match** — same entity in before\u002Fafter = modified or unchanged\n2. **Structural hash match** — same AST structure, different name = renamed or moved (ignores whitespace\u002Fcomments)\n3. **Fuzzy similarity** — >80% token overlap = probable rename\n\nThis means sem detects renames and moves, not just additions and deletions. Structural hashing also distinguishes cosmetic changes (whitespace, formatting) from real logic changes.\n\n## MCP Server\n\nsem includes an MCP server with 6 tools for AI agents: `sem_entities`, `sem_diff`, `sem_blame`, `sem_impact`, `sem_log`, `sem_context`. These mirror the CLI commands exactly.\n\n```json\n{\n  \"mcpServers\": {\n    \"sem\": {\n      \"command\": \"sem-mcp\"\n    }\n  }\n}\n```\n\nInstall the MCP binary:\n\n```bash\ncd sem\u002Fcrates\ncargo install --path sem-mcp\n```\n\n## JSON output\n\n```bash\nsem diff --format json\n```\n\n```json\n{\n  \"summary\": {\n    \"fileCount\": 2,\n    \"added\": 1,\n    \"modified\": 1,\n    \"deleted\": 1,\n    \"total\": 3\n  },\n  \"changes\": [\n    {\n      \"entityId\": \"src\u002Fauth.ts::function::validateToken\",\n      \"changeType\": \"added\",\n      \"entityType\": \"function\",\n      \"entityName\": \"validateToken\",\n      \"filePath\": \"src\u002Fauth.ts\"\n    }\n  ]\n}\n```\n\n## As a library\n\nsem-core can be used as a Rust library dependency:\n\n```toml\n[dependencies]\nsem-core = { git = \"https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\", version = \"0.3\" }\n```\n\nUsed by [weave](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fweave) (semantic merge driver) and [inspect](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Finspect) (entity-level code review).\n\n## Architecture\n\n- **tree-sitter** for code parsing (native Rust, not WASM)\n- **git2** for Git operations\n- **rayon** for parallel file processing\n- **xxhash** for structural hashing\n- Plugin system for adding new languages and formats\n\n## Contributing\n\nWant to add a new language? See [CONTRIBUTING.md](CONTRIBUTING.md) for a step-by-step guide.\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAtaraxy-Labs_sem_readme_05dd3e07aca3.png)](https:\u002F\u002Fstar-history.com\u002F#Ataraxy-Labs\u002Fsem&Date)\n\n## License\n\nMIT OR Apache-2.0\n","\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fbanner.svg\" alt=\"sem\" width=\"600\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>基于 Git 的语义版本控制工具。\u003C\u002Fstrong>\u003Cbr>\n  与按行比较不同，sem 能告诉你哪些代码实体发生了变化：函数、方法、类。\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fataraxy-labs.com\u002Fblogs\u002Fcode-is-not-text\">为什么选择 sem？\u003C\u002Fa> ·\n  \u003Ca href=\"#install\">安装\u003C\u002Fa> ·\n  \u003Ca href=\"#commands\">命令\u003C\u002Fa> ·\n  \u003Ca href=\"#mcp-server\">MCP 服务器\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases\u002Flatest\">发布记录\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases\u002Flatest\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FAtaraxy-Labs\u002Fsem?color=blue&label=release\" alt=\"发布版本\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Frust-stable-orange\" alt=\"Rust\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Ftests-133_passing-brightgreen\" alt=\"测试覆盖率\">\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-yellow\" alt=\"许可证\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguages-23-blue\" alt=\"支持的语言\">\n\u003C\u002Fp>\n\nsem 是一款基于 Git 的语义版本控制工具。它使用 tree-sitter 解析你的代码，将每个函数、类和方法提取为独立的代码实体，并在实体级别进行差异比较，而不是逐行比较。这意味着你会看到“函数 `blahh` 被修改”而不是“第 x 行到第 y 行发生了变化”。\n\n它可以在任何 Git 仓库中直接使用，无需额外配置。\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fterminal.svg\" alt=\"sem diff\" width=\"800\" \u002F>\n\u003C\u002Fp>\n\n## 安装\n\n```bash\nbrew install sem-cli\n```\n\n或者将 npm 包安装到 `node_modules` 中：\n\n```bash\nnpm install --save-dev @ataraxy-labs\u002Fsem\n```\n\n如果你使用 Bun，需要信任该包以便其 `postinstall` 脚本能下载二进制文件：\n\n```bash\nbun add -d @ataraxy-labs\u002Fsem\nbun pm trust @ataraxy-labs\u002Fsem\n```\n\n你也可以从源码构建（需要 Rust）：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\ncd sem\u002Fcrates\ncargo install --path sem-cli\n```\n\n或者直接从 [GitHub Releases](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases) 下载预编译的二进制文件。\n\n此外，还可以通过 Docker 运行：\n\n```bash\ndocker build -t sem .\ndocker run --rm -it -u \"$(id -u):$(id -g)\" -v \"$(pwd):\u002Frepo\" sem diff\n```\n\n## 命令\n\nsem 可以在任何 Git 仓库中使用，无需任何配置。它同样适用于非 Git 环境中的任意文件比较。\n\n### sem diff\n\n实体级别的差异比较，支持重命名检测、结构化哈希以及单词级别的内联高亮。\n\n```bash\n# 工作区更改的语义差异\nsem diff\n\n# 仅暂存区的更改\nsem diff --staged\n\n# 指定提交\nsem diff --commit abc1234\n\n# 提交范围\nsem diff --from HEAD~5 --to HEAD\n\n# 详细模式（每个实体的单词级内联差异）\nsem diff -v\n\n# 纯文本输出（类似 git status 格式）\nsem diff --format plain\n\n# JSON 输出（适用于 AI 代理、CI 流水线）\nsem diff --format json\n\n# Markdown 输出（适用于 PR、报告）\nsem diff --format markdown\n\n# 比较任意两个文件（无需 Git 仓库）\nsem diff file1.ts file2.ts\n\n# 从标准输入读取文件变更（无需 Git 仓库）\necho '[{\"filePath\":\"src\u002Fmain.rs\",\"status\":\"modified\",\"beforeContent\":\"...\",\"afterContent\":\"...\"}]' \\\n  | sem diff --stdin --format json\n\n# 仅针对特定文件类型\nsem diff --file-exts .py .rs\n```\n\n### sem impact\n\n跨文件依赖图展示了当某个代码实体发生变化时，哪些部分会受到影响。\n\n```bash\n# 全面的影响分析\nsem impact authenticateUser\n\n# 仅显示直接依赖\nsem impact authenticateUser --deps\n\n# 仅显示直接被依赖者\nsem impact authenticateUser --dependents\n\n# 仅显示受影响的测试\nsem impact authenticateUser --tests\n\n# JSON 输出\nsem impact authenticateUser --json\n\n# 按文件细化结果\nsem impact authenticateUser --file src\u002Fauth.ts\n```\n\n### sem blame\n\n实体级别的代码归属追踪，显示每个函数、类或方法的最后修改人。\n\n```bash\nsem blame src\u002Fauth.ts\n\n# JSON 输出\nsem blame src.auth.ts --json\n```\n\n### sem log\n\n跟踪单个代码实体在整个 Git 历史中的演变过程。\n\n```bash\nsem log authenticateUser\n\n# 详细模式（显示各版本之间的内容差异）\nsem log authenticateUser -v\n\n# 限制扫描的提交数量\nsem log authenticateUser --limit 20\n\n# JSON 输出\nsem log authenticateUser --json\n```\n\n### sem entities\n\n列出文件中的所有代码实体及其类型和所在行范围。\n\n```bash\nsem entities src\u002Fauth.ts\n\n# JSON 输出\nsem entities src.auth.ts --json\n```\n\n### sem context\n\n为大模型量身定制的上下文信息：目标代码实体、其依赖项和被依赖项，可根据指定的 token 预算进行裁剪。\n\n```bash\nsem context authenticateUser\n\n# 自定义 token 预算\nsem context authenticateUser --budget 4000\n\n# JSON 输出\nsem context authenticateUser --json\n```\n\n## 设置为默认的 Git diff\n\n用实体级别的差异替换 `git diff` 的输出。无论是自动化工具还是人工操作，都会自动获得 sem 的输出，而无需更改任何命令。\n\n```bash\nsem setup\n```\n\n现在，`git diff` 将显示实体级别的变更，而非逐行差异。无需任何提示，也无需额外配置代理。所有调用 `git diff` 的地方都会自动使用 sem 的输出。此外，还会安装一个 pre-commit 钩子，用于展示暂存区更改所影响的实体范围。\n\n若要恢复为正常的 Git diff：\n\n```bash\nsem unsetup\n```\n\n## 解析的内容\n\n通过 Tree-sitter 实现完整实体提取的 23 种编程语言：\n\n| 语言       | 扩展名            | 实体               |\n|------------|------------------|--------------------|\n| TypeScript | `.ts` `.tsx` `.mts` `.cts`  | 函数、类、接口、类型、枚举、导出 |\n| JavaScript | `.js` `.jsx` `.mjs` `.cjs` | 函数、类、变量、导出 |\n| Python     | `.py`             | 函数、类、装饰器定义 |\n| Go         | `.go`             | 函数、方法、类型、变量、常量 |\n| Rust       | `.rs`             | 函数、结构体、枚举、实现块、特质、模块、常量 |\n| Java       | `.java`           | 类、方法、接口、枚举、字段、构造函数 |\n| C          | `.c` `.h`         | 函数、结构体、枚举、联合、类型别名 |\n| C++        | `.cpp` `.cc` `.hpp` | 函数、类、结构体、枚举、命名空间、模板 |\n| C#         | `.cs`             | 类、方法、接口、枚举、结构体、属性 |\n| Ruby       | `.rb`             | 方法、类、模块 |\n| PHP        | `.php`            | 函数、类、方法、接口、特质、枚举 |\n| Swift      | `.swift`          | 函数、类、协议、结构体、枚举、属性 |\n| Elixir     | `.ex` `.exs`      | 模块、函数、宏、守卫、协议 |\n| Bash       | `.sh`             | 函数 |\n| HCL\u002FTerraform | `.hcl` `.tf` `.tfvars` | 块、属性（嵌套块的限定名称） |\n| Kotlin     | `.kt` `.kts`      | 类、接口、对象、函数、属性、伴生对象 |\n| Fortran    | `.f90` `.f95` `.f` | 函数、子程序、模块、程序 |\n| Vue        | `.vue`            | 模板\u002F脚本\u002F样式块 + 内部 TS\u002FJS 实体 |\n| XML        | `.xml` `.plist` `.svg` `.csproj` | 元素（嵌套，标签名标识） |\n| ERB        | `.erb` `.html.erb` | 块、表达式、代码标签 |\n| Svelte     | `.svelte` `.svelte.js` `.svelte.ts` | 组件块 + Rune JS\u002FTS 模块 |\n| Perl       | `.pl` `.pm` `.t`  | 子程序、包 |\n| Dart       | `.dart`           | 类、混入、扩展、枚举、类型别名、函数 |\n\n此外，还包括结构化数据格式：\n\n| 格式   | 扩展名            | 实体               |\n|--------|------------------|--------------------|\n| JSON   | `.json`           | 属性、对象（RFC 6901 路径） |\n| YAML   | `.yml` `.yaml`    | 节、属性（点号路径） |\n| TOML   | `.toml`           | 节、属性 |\n| CSV    | `.csv` `.tsv`     | 行（第一列作为标识） |\n| Markdown | `.md` `.mdx`      | 基于标题的章节 |\n\n其他所有内容则回退到基于块的差异比较。\n\n## 匹配机制\n\n三阶段实体匹配：\n\n1. **精确 ID 匹配** — 前后相同的实体 = 已修改或未更改\n2. **结构哈希匹配** — AST 结构相同但名称不同 = 重命名或移动（忽略空格和注释）\n3. **模糊相似度** — 令牌重叠率 >80% = 可能是重命名\n\n这意味着 sem 不仅能检测添加和删除，还能检测重命名和移动。结构哈希还能区分外观上的变化（如空格、格式）与实际逻辑变化。\n\n## MCP 服务器\n\nsem 包含一个 MCP 服务器，为 AI 代理提供 6 种工具：`sem_entities`、`sem_diff`、`sem_blame`、`sem_impact`、`sem_log`、`sem_context`。这些工具与 CLI 命令完全一致。\n\n```json\n{\n  \"mcpServers\": {\n    \"sem\": {\n      \"command\": \"sem-mcp\"\n    }\n  }\n}\n```\n\n安装 MCP 二进制文件：\n\n```bash\ncd sem\u002Fcrates\ncargo install --path sem-mcp\n```\n\n## JSON 输出\n\n```bash\nsem diff --format json\n```\n\n```json\n{\n  \"summary\": {\n    \"fileCount\": 2,\n    \"added\": 1,\n    \"modified\": 1,\n    \"deleted\": 1,\n    \"total\": 3\n  },\n  \"changes\": [\n    {\n      \"entityId\": \"src\u002Fauth.ts::function::validateToken\",\n      \"changeType\": \"added\",\n      \"entityType\": \"function\",\n      \"entityName\": \"validateToken\",\n      \"filePath\": \"src\u002Fauth.ts\"\n    }\n  ]\n}\n```\n\n## 作为库\n\nsem-core 可以作为 Rust 库依赖使用：\n\n```toml\n[dependencies]\nsem-core = { git = \"https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\", version = \"0.3\" }\n```\n\n被 [weave](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fweave)（语义合并驱动）和 [inspect](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Finspect)（实体级代码审查）所使用。\n\n## 架构\n\n- **Tree-sitter** 用于代码解析（原生 Rust，非 WASM）\n- **git2** 用于 Git 操作\n- **rayon** 用于并行文件处理\n- **xxhash** 用于结构哈希\n- 插件系统用于添加新语言和格式\n\n## 贡献\n\n想添加一种新语言吗？请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)，获取分步指南。\n\n## 星标历史\n\n[![星标历史图](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAtaraxy-Labs_sem_readme_05dd3e07aca3.png)](https:\u002F\u002Fstar-history.com\u002F#Ataraxy-Labs\u002Fsem&Date)\n\n## 许可证\n\nMIT 或 Apache-2.0","# sem 快速上手指南\n\n**sem** 是一个基于 Git 构建的语义版本控制工具。它利用 tree-sitter 解析代码，将函数、类、方法等提取为独立实体（Entity），从而在**实体级别**而非行级别进行差异对比。这意味着你能看到“函数 `blahh` 被修改了”，而不是\"X-Y 行发生了变化”。\n\n## 环境准备\n\n*   **操作系统**：macOS, Linux, Windows (通过 Docker 或二进制文件)\n*   **前置依赖**：\n    *   **Git**：必须在系统中安装并配置好 Git。\n    *   **Rust** (可选)：仅当你需要从源码编译时需要。\n*   **支持语言**：原生支持 23 种编程语言（包括 TypeScript, JavaScript, Python, Go, Rust, Java, C\u002FC++ 等）及多种结构化数据格式（JSON, YAML, TOML 等）。\n\n## 安装步骤\n\n根据你的开发环境选择以下任一方式安装：\n\n### 方式一：使用 Homebrew (推荐 macOS 用户)\n```bash\nbrew install sem-cli\n```\n\n### 方式二：使用 npm (Node.js 项目)\n将其作为开发依赖安装到 `node_modules`：\n```bash\nnpm install --save-dev @ataraxy-labs\u002Fsem\n```\n\n### 方式三：使用 Bun\nBun 需要信任包以便执行下载二进制文件的脚本：\n```bash\nbun add -d @ataraxy-labs\u002Fsem\nbun pm trust @ataraxy-labs\u002Fsem\n```\n\n### 方式四：从 GitHub Releases 下载二进制文件\n访问 [GitHub Releases](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases\u002Flatest) 下载对应平台的二进制文件并放入 PATH。\n\n### 方式五：使用 Docker\n无需本地安装，直接通过容器运行：\n```bash\ndocker build -t sem .\ndocker run --rm -it -u \"$(id -u):$(id -g)\" -v \"$(pwd):\u002Frepo\" sem diff\n```\n\n### 方式六：从源码编译 (需要 Rust)\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\ncd sem\u002Fcrates\ncargo install --path sem-cli\n```\n\n## 基本使用\n\n`sem` 无需任何配置即可在任何 Git 仓库中工作。\n\n### 1. 执行语义差异对比 (核心功能)\n替代传统的 `git diff`，查看实体级别的变更（如函数重命名、移动检测）：\n\n```bash\n# 查看工作区的语义差异\nsem diff\n\n# 仅查看暂存区的差异\nsem diff --staged\n\n# 查看特定提交的差异\nsem diff --commit abc1234\n\n# 详细模式：显示每个实体内部的单词级差异\nsem diff -v\n\n# 输出为 JSON 格式（适合 AI Agent 或 CI 流水线）\nsem diff --format json\n```\n\n### 2. 替换默认 Git Diff (可选)\n如果你希望所有调用 `git diff` 的命令（包括 IDE 插件或 AI 助手）自动获得语义差异输出，可以运行设置命令：\n\n```bash\n# 将 git diff 替换为 sem diff\nsem setup\n\n# 恢复为原始的 git diff\nsem unsetup\n```\n\n### 3. 分析代码影响范围\n查看如果修改某个实体（如函数），会影响哪些其他文件或测试：\n\n```bash\n# 分析 authenticateUser 函数的影响范围\nsem impact authenticateUser\n\n# 仅查看受影响的测试\nsem impact authenticateUser --tests\n```\n\n### 4. 实体级追溯 (Blame)\n查看是谁最后修改了特定的函数或类，而不是某一行代码：\n\n```bash\nsem blame src\u002Fauth.ts\n```\n\n### 5. 为 LLM 生成上下文\n生成包含实体及其依赖关系的精简上下文，适配 Token 预算：\n\n```bash\n# 生成适合 4000 token 预算的上下文\nsem context authenticateUser --budget 4000\n```","某电商平台的后端团队正在紧急重构用户认证模块，需要在不破坏现有支付流程的前提下，将 `authenticateUser` 函数迁移到新的微服务架构中。\n\n### 没有 sem 时\n- 开发者面对传统的 Git diff 只能看到行号变化，难以快速判断具体是哪个函数逻辑被修改，尤其在文件大幅重组时极易迷失。\n- 评估修改影响范围全靠人工记忆或全局搜索，经常遗漏跨文件的依赖调用，导致支付接口因鉴权逻辑变更而意外崩溃。\n- 代码审查（Code Review）效率低下，评审者需要逐行阅读大量无关的格式调整或注释变动，难以聚焦核心业务逻辑的演进。\n- 追溯某个函数的历史变更时，必须手动翻阅冗长的提交记录，无法直观看到该实体在不同版本中的具体形态演变。\n\n### 使用 sem 后\n- 通过 `sem diff` 直接以“函数”为单位展示差异，清晰呈现 `authenticateUser` 的参数与返回值变化，自动忽略无关的行级噪音。\n- 运行 `sem impact authenticateUser` 瞬间生成跨文件依赖图，精准定位所有受影响的支付回调和测试用例，提前规避回归风险。\n- 利用 `sem blame` 在实体级别查看责任人，快速确认谁最后修改了关键方法，结合 `sem log` 一键追踪该函数完整的迭代历史。\n- 输出 Markdown 或 JSON 格式的语义化报告集成到 PR 描述中，让 AI 助手或非核心成员也能秒懂本次重构的具体业务含义。\n\nsem 将版本控制从枯燥的“文本行对比”升级为智能的“业务实体分析”，让开发者真正掌控代码变更的逻辑本质而非表面字符。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAtaraxy-Labs_sem_835b9f67.png","Ataraxy-Labs","Ataraxy Labs Inc.","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FAtaraxy-Labs_fba65867.png","We are building software for agents.",null,"rohan@ataraxy-labs.com","ataraxy-labs.com","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs",[82,86,90,94,98,102,105],{"name":83,"color":84,"percentage":85},"Rust","#dea584",91.9,{"name":87,"color":88,"percentage":89},"Python","#3572A5",4.8,{"name":91,"color":92,"percentage":93},"JavaScript","#f1e05a",2.7,{"name":95,"color":96,"percentage":97},"Nix","#7e7eff",0.2,{"name":99,"color":100,"percentage":101},"Ruby","#701516",0.1,{"name":103,"color":104,"percentage":101},"TypeScript","#3178c6",{"name":106,"color":107,"percentage":101},"Dockerfile","#384d54",1717,48,"2026-04-15T12:27:04","Apache-2.0",1,"Linux, macOS, Windows","无 GPU 需求","未说明",{"notes":117,"python":118,"dependencies":119},"该工具是基于 Rust 编写的命令行工具，不依赖 Python 环境。可通过 Homebrew (macOS)、npm\u002Fbun (Node.js 环境)、Docker 或直接下载二进制文件安装。若从源码构建，需安装 Rust 稳定版。支持 23 种编程语言的结构化差异分析。","非必需 (工具基于 Rust，但提供 npm\u002Fbun 包装器)",[120,121,122,123,124],"Rust (构建源码时必需)","tree-sitter (内置)","git2","rayon","xxhash",[13,52,15],[127,128,129,130,131,132,133,134,135],"ai-agents","cli","code-review","developer-tools","diff","git","rust","semantic-diff","tree-sitter","2026-03-27T02:49:30.150509","2026-04-16T08:17:10.117561",[139,144,149,154,159,164,169,174],{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},35220,"如何修复 Homebrew 安装的 sem 版本过时或版本号显示不正确的问题？","运行命令 `brew update && brew upgrade sem` 更新到最新版本。如果问题仍然存在，可能是因为 tap 仓库尚未同步，项目即将合并到 homebrew core，届时可直接通过核心库安装。更新后使用 `sem --version` 验证版本号（例如应显示 0.3.8 或更高）。","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fissues\u002F17",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},35221,"为什么从源码构建时提示找不到 `sem-api` crate 导致失败？","这是因为工作区配置中引用了一个不存在的 `sem-api` 成员。解决方法是编辑 `crates\u002FCargo.toml` 文件，从 `members` 列表中移除 `sem-api`，然后重新运行构建命令即可正常编译。","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fissues\u002F7",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},35222,"是否支持 PHP 和 Vue (.vue) 文件的语义分析？","已完全支持。PHP 支持类、函数、方法、特征 (traits)、接口、枚举和命名空间。Vue (.vue) 文件支持提取 `\u003Ctemplate>`、`\u003Cscript>` 和 `\u003Cstyle>` 块，其中 `\u003Cscript>` 内容会委托给现有的 TS\u002FJS 解析器处理实体提取，支持 `\u003Cscript setup>` 和 `lang=\"ts\"`，并能正确映射回 .vue 文件的行号。","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fissues\u002F9",{"id":155,"question_zh":156,"answer_zh":157,"source_url":158},35223,"是否支持 XML 及相关配置文件格式？","已支持 XML 格式。覆盖的文件扩展名包括：`.xml`, `.plist`, `.svg`, `.csproj`, `.fsproj`, `.vbproj`, `.props`, `.targets`, `.nuspec`, `.resx`, `.xaml`, `.axml`。实体识别基于 XML 元素标签名称进行匹配。","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fissues\u002F25",{"id":160,"question_zh":161,"answer_zh":162,"source_url":163},35224,"是否支持 HCL (Terraform\u002FOpenTofu) 文件格式？","是的，HCL 支持已经添加。您可以直接使用 sem 处理 Terraform 或 OpenTofu 的配置文件。","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fissues\u002F26",{"id":165,"question_zh":166,"answer_zh":167,"source_url":168},35225,"终端较小或不喜欢 Unicode 块状输出时，是否有纯文本模式？","有的，项目已实现纯文本模式。该模式不使用 Unicode 块，而是采用类似 `git status` 的 ANSI 颜色编码输出，适合小尺寸终端或偏好简洁风格的用户。","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fissues\u002F29",{"id":170,"question_zh":171,"answer_zh":172,"source_url":173},35226,"Windows 用户是否有可用的发布版本？","是的，Windows 版本的发布工件 (artifacts) 已经发布，现在可以与 Linux 和 macOS 版本一样下载使用。","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fissues\u002F42",{"id":175,"question_zh":176,"answer_zh":177,"source_url":178},35227,"Perl 的 `.t` 测试文件未被正确识别为 Perl 代码怎么办？","维护者已将 `.t` 扩展名添加到 Perl 支持列表中。此外，工具现在也支持基于 Shebang (`#!`) 的行来检测文件类型，确保 Perl 测试文件能被正确解析和处理。","https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fissues\u002F69",[180,184,188,192,196,201,205,209,214,218,223,228,232,237,242,247,252,257,262,267],{"id":181,"version":182,"summary_zh":77,"released_at":183},280258,"v0.3.20","2026-04-14T22:50:21",{"id":185,"version":186,"summary_zh":77,"released_at":187},280259,"v0.3.19","2026-04-13T01:09:24",{"id":189,"version":190,"summary_zh":77,"released_at":191},280260,"v0.3.18","2026-04-13T00:31:41",{"id":193,"version":194,"summary_zh":77,"released_at":195},280261,"v0.3.17","2026-04-12T17:10:21",{"id":197,"version":198,"summary_zh":199,"released_at":200},280262,"v0.3.16","### 新增功能\n\n- **Shebang 检测**：适用于所有 23 种语言中的无扩展名文件（如 `#!\u002Fusr\u002Fbin\u002Fenv perl`、`#!\u002Fusr\u002Fbin\u002Fpython3` 等）\n- **Vim 模型行检测**：适用于无扩展名文件（如 `# vim: ft=python`）\n- **Fortran 解析器修复**：模块、程序、函数和子程序现已正确提取\n- **Perl `.t` 测试文件**：现被识别为 Perl 文件\n- **JS\u002FTS 的常量箭头函数**：已从 `variable` 提升为 `function` 实体类型（感谢 @MattCozendey）\n- **JS\u002FTS 的生成器函数**（`function*`、`async function*`）：现已作为实体被检测到（感谢 @MattCozendey）\n- **详细 Markdown 差异显示**：改用标准的统一差异格式，不再直接输出完整的前后内容对比（感谢 @Benjas333）\n\n### 贡献者\n@MattCozendey、@Benjas333、@so-fancy","2026-04-11T20:28:42",{"id":202,"version":203,"summary_zh":77,"released_at":204},280263,"v0.3.15","2026-04-10T16:23:26",{"id":206,"version":207,"summary_zh":77,"released_at":208},280264,"v0.3.14","2026-04-07T15:14:47",{"id":210,"version":211,"summary_zh":212,"released_at":213},280265,"v0.3.13","**6 个与 CLI 命令匹配的 MCP 工具**\n\n- `sem_entities`（由 `sem_extract_entities` 重命名而来）\n- `sem_diff`\n- `sem_blame`（新增：实体级别的 Git blame）\n- `sem_impact`\n- `sem_log`（新增：实体演化历史）\n- `sem_context`\n\n移除了 `sem_hotspot`。更新了官网，新增了全部 6 个命令、英雄动画、变更日志和基准测试。\n\n在 `sem diff --verbose` 中实现了词级内联差异显示。修复了所有文档页面的固定导航栏问题。","2026-04-03T20:24:36",{"id":215,"version":216,"summary_zh":77,"released_at":217},280266,"v0.3.12","2026-04-02T15:25:54",{"id":219,"version":220,"summary_zh":221,"released_at":222},280267,"v0.3.10","## 新增内容\n\n- 为 `sem-core` 和 `sem-cli` 添加 crates.io 发布元数据\n- 在 `sem-cli` 中固定 `sem-core` 的版本依赖","2026-03-15T17:50:25",{"id":224,"version":225,"summary_zh":226,"released_at":227},280268,"v0.3.9","**Kotlin 语言支持** (.kt, .kts)\n\n提取内容：类、接口、对象、函数、属性、伴生对象、构造函数、类型别名。\n\n本次发布还包括：\n- 结构化哈希现排除实体名称，修复了小型函数的重命名检测问题 (#20)\n- 支持 19 种语言，通过 46 项测试","2026-03-10T05:33:52",{"id":229,"version":230,"summary_zh":77,"released_at":231},280269,"v0.3.8","2026-03-09T09:44:30",{"id":233,"version":234,"summary_zh":235,"released_at":236},280270,"v0.3.7","### 新增功能\n\n- **嵌套函数提取**，现已支持所有语言。函数内部的函数现在会被提取为子实体，并通过 `parent_id` 指向外部函数。此前仅 Python 支持此功能。\n- **`sem diff` 清洁工作区修复**（PR #14，由 @MattCozendey 提供）。在干净的仓库中运行 `sem diff` 不再会重放最近一次提交。\n- **发布二进制文件**，现已包含。请在下方下载 `sem-linux-x86_64.tar.gz` 或 `sem-darwin-arm64.tar.gz`。\n\n### 下载\n\n| 平台 | 下载链接 |\n|---|---|\n| Linux x86_64 | [sem-linux-x86_64.tar.gz](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases\u002Fdownload\u002Fv0.3.7\u002Fsem-linux-x86_64.tar.gz) |\n| macOS ARM64 | [sem-darwin-arm64.tar.gz](https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Freleases\u002Fdownload\u002Fv0.3.7\u002Fsem-darwin-arm64.tar.gz) |\n\n或通过 Cargo 安装：\n```\ncargo install --git https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem --bin sem\n```\n\n### 统计信息\n- 43 个测试通过\n- 支持 17 种语言","2026-03-08T18:07:51",{"id":238,"version":239,"summary_zh":240,"released_at":241},280271,"v0.3.6","### 新增功能\n\n- **Vue (.vue) 单文件组件支持** — 将 `\u003Ctemplate>`、`\u003Cscript>` 和 `\u003Cstyle>` 提取为 SFC 块实体。Script 块内容交由现有的 TS\u002FJS 解析器进行内部实体提取（如函数、类等）。支持 `\u003Cscript setup>`、`lang=\"ts\"`，并实现正确的行号映射。\n- **JSON 键重命名检测**（通过 @nminev 提交的 PR #11）— 使用 `structural_hash` 检测值结构完全相同的已重命名 JSON 键。\n- **PHP** 自 v0.3.4 起已支持。\n\n### 支持的语言（17 种）\nTypeScript、TSX、JavaScript、Python、Go、Rust、Java、C、C++、Ruby、C#、PHP、Fortran、Swift、Elixir、Bash、**Vue**\n\n### 统计\n- 37 个测试通过","2026-03-08T07:38:45",{"id":243,"version":244,"summary_zh":245,"released_at":246},280272,"v0.3.5","### 新增语言\n- **Elixir** (.ex, .exs): defmodule、def、defp、defmacro、defmacrop、defguard、defguardp、defprotocol、defimpl、defstruct、defexception、defdelegate\n- **Bash** (.sh): 函数定义（包括 `greet() {}` 和 `function deploy {}` 两种语法）\n\n### 变更\n- 向 `LanguageConfig` 添加了 `call_entity_identifiers` 字段，用于那些实体是 `call` 节点的语言（如 Elixir）\n- 现已支持 16 种语言：TypeScript、TSX、JavaScript、Python、Go、Rust、Java、C、C++、Ruby、C#、PHP、Fortran、Swift、Elixir、Bash\n\n关闭 #5","2026-03-06T18:29:28",{"id":248,"version":249,"summary_zh":250,"released_at":251},280273,"v0.3.4","### 新增功能\n\n**节点解析器改进：**\n- 修复 TSX 语法加载问题：`.tsx` 文件现在正确使用 TSX 语法，而 `.ts` 文件则使用 TypeScript 语法。\n- 将类似函数的对象对（例如 `onClick: () => {}`）提取为方法实体。\n- 将 `const foo = () => {}` 声明归类为 `function` 类型，而非 `variable` 类型。\n- 在顶层提取时跳过函数作用域内声明的内部变量。\n- 改进遍历逻辑：采用一致的递归方式，同时保留父子关系。\n- 提取 TS\u002FJS 中的嵌套类方法和字段。\n\n**完整更新日志：** https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fcompare\u002Fv0.3.3...v0.3.4","2026-03-01T17:04:36",{"id":253,"version":254,"summary_zh":255,"released_at":256},280274,"v0.3.3","- 线程本地解析器缓存，以提升性能\n- 在 structural_hash 中对节点类型进行哈希处理，以提高准确性\n- 图结构准确性提升，并修复了 decorated_definition 类型映射问题","2026-02-22T00:42:43",{"id":258,"version":259,"summary_zh":260,"released_at":261},280275,"v0.3.2","## 新增功能\n\n- **TS\u002FTSX\u002FJS 的子实体提取**：类内部的方法 now 会被提取为带有 `parent_id` 的子实体，从而使下游工具（如 weave）能够在类内部进行方法级别的合并。\n- **MIT\u002FApache-2.0 双重许可**：符合 Rust 生态系统的标准许可。\n\n## 新增实体类型\n- TypeScript\u002FTSX 的 `method_definition` 和 `public_field_definition`\n- JavaScript 的 `method_definition` 和 `field_definition`","2026-02-15T06:35:29",{"id":263,"version":264,"summary_zh":265,"released_at":266},280276,"v0.3.1","## What's new\n\n**`--file-exts` flag** for language filtering in multi-language repos. Available on `sem diff`, `sem graph`, and `sem impact`.\n\n```bash\nsem graph --file-exts .py\nsem diff --file-exts .py .rs\nsem impact validateToken --file-exts .py\n```\n\nAccepts extensions with or without the leading dot.\n\nCloses #1 (thanks @0xalpharush for the feature request).\n\n**Full changelog:** https:\u002F\u002Fgithub.com\u002FAtaraxy-Labs\u002Fsem\u002Fcompare\u002Fv0.3.0...v0.3.1","2026-02-13T16:52:26",{"id":268,"version":269,"summary_zh":270,"released_at":271},280277,"v0.3.0","## Performance\n\n5 optimizations that make sem significantly faster:\n\n- **xxHash64** replaces SHA-256 for content and structural hashing (~10x faster)\n- **Zero-allocation streaming structural hash** hashes AST tokens directly from source bytes\n- **Cached tree resolution** resolves git trees once per scope instead of per file (31% faster on ranges)\n- **LTO + codegen-units=1** for better cross-crate inlining\n- **HashSet\u003C&str>** eliminates String allocations in entity matching\n\n### Benchmarks (hyperfine -N, 50 runs)\n\n| Scenario | v0.2.0 | v0.3.0 | Change |\n|---|---|---|---|\n| Small (1 file) | 7ms | **5ms** | 29% faster |\n| Medium (5 files) | 10ms | **8ms** | 20% faster |\n| Large (13 files) | 22ms | **19ms** | 14% faster |\n| Range (8 commits) | 35ms | **24ms** | 31% faster |\n\nsem diff is now **faster than git diff** on medium commits (8ms vs 9ms) while providing full entity-level semantic analysis.\n\n## New since v0.2.0\n\n- **PHP support** (13 languages total)\n- **Fortran support**\n- **C++, Ruby, C# support**\n- **Java and C support**\n- **sem blame** for entity-level blame\n- **sem graph** for cross-file dependency graph\n- **sem impact** for transitive impact analysis\n- **Parallel entity extraction** via rayon\n- **Cosmetic vs structural change detection** via AST-normalized structural hashing\n- **Incremental graph updates**\n- **llms.txt** for AI agent consumption","2026-02-12T20:10:20"]