SuperAPI AI 工具集

sem-cli

通用与其它

查看项目

更新于 10-15 23:45

技能介绍

sem(sem-cli)是一个 AST 实体索引器、调用图导航器与语义版本控制工具,跨 39 种语言和数据格式跟踪函数、类、方法与类型。

用途:本地代码探索、调用关系导航、语义化代码审查与影响分析,并可为大语言模型压缩上下文。

主要能力:基于磁盘上 mmap 查询索引(index.sem),无需常驻 LSP 即可在热态下约 7ms 返回结果;sem find 查定义,sem callers 查直接调用者,sem refs 查直接被调用者,sem grep 做 trigram 正则搜索;sem context --headers 只保留签名与文档首行,可将调用图以 5–10 倍宽度塞入 LLM 上下文;sem entities --text 在实体体内按子串搜索并返回实体 ID(file::kind::name);sem log 发现热点实体与共变对;sem diff 展示语义化增删改重命名,去除格式与空白噪声。

使用方式示例:sem find "function diff_command" --json;sem callers diff_command --json;sem entities src/ --text "PERMISSION_DENIED" --json;sem impact <entity_name> --json(可用 --file 或 --entity-id 消歧);sem log --limit 200 --json;sem context <entity_name> --budget 8000 --json;sem grep "TODO"。注意只有 sem diff 使用 --format,其余子命令直接用 --json。

适用场景:调用链追踪、重构影响评估、找受影响测试(--tests)、按 token 预算准备 LLM 上下文、跨提交审阅结构变化。

限制:sem 只索引本地仓库源码中的实体,不解析外部包或传递依赖,因此对 npm、Cargo、pub 等外部类型运行 sem impact 会报 Entity not found。评估外部包用法应先以 grep 或 ripgrep 定位导入与本地封装,再对本地封装实体做 impact。GNU Parallel 会在 /usr/bin/sem 放符号链接导致冲突,需确保 brew 或 cargo 路径优先。超大仓库首次建索引可能耗时数秒,需延长或后台超时。安装与价格信息暂未提供。