vscode-ai-code-marker
一个用于“统计与可视化 AI 生成代码”的 VS Code 扩展。以“侧车文件 + 装饰”的方式标识 AI 代码,不污染源码,适配 Cursor/VS Code 的日常开发习惯。
AI 代码的定义(口径)
- 以“最后修改者”为口径:当某一行的最后一次修改行为判定为 AI 生成时,这一行即被定义为 AI 代码。
- 存量代码不追溯;仅对新增或变更的代码行进行判定与标记。
工作方式概览
- 标记数据存储在侧车文件
.ai-tracker/markers.json 中,编辑器内通过彩色标签装饰展示,不写入源码,同时,插件会在 .gitignore 中增加 .ai-tracker/ 忽略,避免统计信息被提交。
- 自定义 Tab 按键代理记录“接受建议”的时刻;通过 Cursor hooks 捕获 Agent 时间窗口,用于判定“AI 生成”。
- 新机制:侧车文件不再存储“行号”,而是存储“AI 代码行的内容(已 trim)”。展示时,将“最近一次提交的变更内容”与“AI 代码内容”逐行比对,计算得到当前文档中需要标记的行号后进行渲染。
注意事项(重要)
- 新机制的匹配基于“内容等价(trim 后精确匹配)”,以下情况可能导致识别不到 AI 代码:
- 代码格式化引起的行内容变化(缩进、空格、换行风格 CRLF/LF、Tab/Space 切换)。
- import/排序/重排导致同样的逻辑散列到不同行。
- 注释风格/空白字符差异(即使语义相同,内容不同也无法匹配)。
- 大段拼接成长行或被拆分多行,导致行粒度不一致。
- 大小写差异(匹配大小写敏感)。
- 重复行的处理:若变更中出现多行相同内容,而 AI 代码仅包含一次,则只标记其中一行(次数消费模型)。
安装与使用
- 安装插件
应用市场搜索:ai-suggestion-tracker,发布人名称为:zhaopin-ai-maker
- AI代码统计开关
- 在cursor下方右侧状态栏,增加‘’AI统计‘’开关,如果所示:

- 点击AI统计开关,弹出选择框,如果所示:

- 选择项作用说明:
- 关闭AI统计:关闭插件提供的ai标记统计能力
- 隐藏AI标记:隐藏代码上显示的ai标记,但是插件还在运行统计ai代码
- 样式:概览尺表刻度: 在右侧边栏上通过小蓝点标记AI代码
- 样式:行尾小点:在代码行后通过小蓝点标记AI代码
- 样式:侧边栏小图片:在左边侧边栏通过小蓝色图标 标记AI代码,这种样式会影响断点使用
实现原理
该插件代理了大部分的tab命令,并通过注册自定义命令: ""Ai-Tracker: 修改cursor tab按键绑定,使用aiTracker.tabProxy替换cursor原有的tab按键功能""
在keybindings.json文件,将已有的tab命令禁用,实例如下:
{
"key": "tab",
"command": "-editor.action.acceptCursorTabSuggestion",
"when": "cpp.shouldAcceptTab"
}
该插件使用cursor的hook机制,通过自定义命令 ""Ai-Tracker:注册hooks"" 注册了hook文件
确认是否生效:打开cursor-settings,在筛选项输入hooks后找到对应hooks配置,观察hooks中是否有startChat.sh和endChat.sh,如果不生效,请重启cursor
如图所示:
cursor hooks机制说明:https://cursor.com/cn/docs/agent/hooks
数据存储结构(markers.json v3)
- Key:文件相对路径
- Value:该文件中“AI 代码行内容”的字符串数组(均为
trim() 后的行,不包含空白行)
示例:
{
"src/foo.ts": [
"const x = computeValue(input);",
"return result ?? defaultValue;"
]
}
渲染过程:读取最近一次提交的结构化 diff,将新增/更新块中的每一行内容(trim() 后)与上述数组比对,匹配成功的行通过 VS Code Decoration 标记到具体行号上。
问题排查
- 点击ctrol + shift + p,输入 打开键盘快捷方式(JSON) ,打开第一个选项,查看keybindings.json文件中是否存在 -editor.action.acceptCursorTabSuggestion
- 在cursor settings的hook中查看是否存在脚本文件:

- 重启cursor
统计与产出
- 在用户提交代码变更后,插件会在5s内识别到代码提交动作,然后将提交信息和ai代码统计信息进行上报
| |