Git City: Pulse VS Code 扩展完整演进解析——从点亮建筑到全维度编码活动追踪 前端数据可视化3D渲染【免费下载链接】git-cityYour GitHub profile as a 3D pixel art building in an interactive city项目地址https://gitcode.com/gh_mirrors/gi/git-city点击查看免费下载Git Citygit-city是一个把 GitHub 个人主页映射为 3D 像素风建筑、并构建成可交互城市的前端项目。本文以仓库内packages/vscode-extension/CHANGELOG.md为骨架结合扩展源码与服务端心跳接口完整解读Git City: Pulse这款 VS Code 扩展从 0.1.0 到 0.3.0 的演进脉络它如何通过心跳机制让你的建筑在你编码时保持点亮、如何追踪 AI Agent 与终端活动、如何以隐私优先的方式控制数据分享以及每个版本背后的配置项、命令、状态栏语义与底层实现。读完你将掌握该扩展的完整工作原理、全部可配置参数与可复制的接入方式。一、Git City: Pulse 在项目中的定位在 Git City 的世界观里每位开发者都拥有一座属于自己的 3D 像素建筑建筑高度由贡献量决定宽度由仓库数量决定而点亮窗户、在实时流中出现的在线存在感则依赖本扩展发出的心跳信号。扩展自身定位为你的建筑的发射器transmitter——packages/vscode-extension/package.json中的描述写道Keep your city alive. When you code, your building glows and powers the signal.。它并不负责渲染城市那部分由 Web 端src/components/CityCanvas.tsx、src/components/Building3D.tsx等承担而是持续检测你在 VS Code 中的编码活动将其压缩成结构化心跳上报到服务端再由服务端通过实时广播通道推送给城市页面参见 心跳接口实现 与 前端实时订阅。VS Code 扩展Pulse Web 服务端 ───────────────────── ───────────────────────────────── 活动检测 → 脱敏 → 队列 → POST /api/heartbeats → developer_sessions 表 tracker (sanitizer) (queue/client) → Realtime 广播 → 城市页面点亮建筑二、0.1.0初始版本的三块基石首个版本确立了扩展的核心能力也是后续所有演进的地基。CHANGELOG.md记录的四项能力在源码中均有完整对应实现。1. 实时存在编码即点亮[活动追踪器](https://link.gitcode.com/i/61f45ad55966abe2563d8e890b5adaa1)订阅了 VS Code 的编辑器事件文本变更、保存、选区变化、活动编辑器切换并在事件到来时调度心跳。关键逻辑50ms 防抖非写入事件先经过DEBOUNCE_MS 50的定时器合并避免击键风暴产生海量请求源码注释明确说明该模式借鉴自 WakaTime 的成熟实践心跳触发条件从空闲中唤醒、切换了文件、保存了文件、或距上次心跳已超过 120 秒HEARTBEAT_THROTTLE_MS 2 * 60 * 1000见 constants.ts写入优先scheduleEvent(isWrite)对保存、文件创建/删除/重命名等显式写入事件跳过防抖直接处理。每个心跳携带timestamp、language编程语言、project项目名、isWrite、activeSeconds、sessionId、editorName、os等字段见 sanitizer.ts 中的RawHeartbeat定义。2. 隐私控制分享什么由你决定扩展从第一版就把隐私作为一等公民。心跳在离开本机前会经过sanitize()脱敏关闭shareLanguage则删除语言字段关闭shareProject则同时删除项目名与分支名命中excludeProjects黑名单的项目同样被剥离。服务端在 presence 接口 中回应公共数据时刻意排除 project 与 developerId只返回githubLogin、avatarUrl、status、language——这是项目名永不公开承诺的服务端兑现。3. 状态栏集成与空闲检测状态栏常驻显示当前发射状态点击可切换暂停/恢复[状态栏实现](https://link.gitcode.com/i/4ab682b32c388c39a33b2ab470d6544b)空闲检测由resetIdleTimer()实现每次事件重置定时器超时未活动则从active迁移到idle空闲阈值默认 300 秒5 分钟可通过gitCity.idleTimeout配置范围 60–3600 秒一个反直觉的设计不追踪窗口焦点。源码注释说明如果开发者把 VS Code 放在副屏窗口失焦不应立刻判为离线而应等到空闲超时自然触发——这让挂机在编辑器里但确实在思考的场景也能保持建筑点亮。三、0.2.0品牌重塑与状态语义重构0.2.0 是一次面向信号系统的品牌升级CHANGELOG.md记录了三个变化全部可溯源到当前仓库1. 更名为 Git City: Pulse扩展 displayName 正式定为Git City: Pulse见 package.json此前的命名不再沿用README 与 CHANGELOG 均统一为新品牌。2. 四态状态栏模型[状态栏实现](https://link.gitcode.com/i/4ab682b32c388c39a33b2ab470d6544b)的updateDisplay()定义了四种展示态对应 README 中的说明表格状态图标文案语义点击行为active$(broadcast)Pulse: Transmitting可附(Nh Nm)累计时长建筑正在城市中点亮暂停togglePauseidle$(circle-outline)Pulse: Standby等待你编码暂停paused$(circle-slash)Pulse: Off警告色背景发射器手动暂停恢复connect$(plug)Pulse: Disconnected未设置 API Key弹出登录login其中active态的时长显示由 30 秒一次的updateTimer刷新累计活跃秒数由 tracker 中每秒递增的activeSecondsTimer统计仅在非暂停且距上次活动小于空闲阈值时累加。3. 命令更名与 API URL 修正四类命令全部统一到Pulse:前缀package.json 的contributes.commandsgitCity.login→Pulse: Connect弹窗粘贴 API Key掩码输入、ignoreFocusOut写入后立即发送一次即时心跳并提示See my building跳转城市gitCity.logout→Pulse: Disconnect删除密钥并发送 offline 信号让建筑立即从城市熄灭gitCity.togglePause→Pulse: Toggle切换暂停/恢复gitCity.showDashboard→Pulse: Open City浏览器打开城市首页。Fixed API URL to use www subdomain对应配置默认值https://www.thegitcity.comDEFAULT_API_URL见 constants.ts。该值同时作为登录成功后的跳转目标与心跳上报地址。四、0.3.0追踪维度全面扩展0.3.0 是本文档信息的最新版本当前扩展版本号为 0.3.0其核心贡献是让建筑点亮不再局限于纯编辑器操作而是覆盖现代开发中大量存在的AI Agent 协作与终端工作流。1. 新增五类活动信号源[活动追踪器](https://link.gitcode.com/i/61f45ad55966abe2563d8e890b5adaa1)的initTracker()在原有编辑器事件之外新增订阅终端活动TerminalonDidStartTerminalShellExecution/onDidEndTerminalShellExecution/onDidOpenTerminal/onDidChangeActiveTerminal——覆盖 Claude Code、Cursor agent 以及手动执行命令的全部场景调试会话DebugonDidStartDebugSession/onDidTerminateDebugSession任务运行器TasksonDidStartTask/onDidEndTask即npm run、build、test 等文件系统操作FilesystemonDidCreateFiles/onDidDeleteFiles/onDidRenameFiles——专门捕捉 Agent 自动增删改文件的行为且这些事件按isWritetrue处理直接触发心跳Notebook 编辑onDidChangeNotebookDocument覆盖 Jupyter 单元编辑。2. AI 编码时建筑保持点亮的实现含义CHANGELOG 中 Your building now stays lit when coding via AI agents or terminal 的落实机制当 Claude Code / Cursor agent 在集成终端中执行命令、或通过文件系统修改文件时上述事件同样进入scheduleEvent()管线重置空闲计时器并推动心跳使开发者即使没在手动敲键盘其建筑也维持Transmitting状态反之Agent 停止活动后空闲计时器照常工作建筑在gitCity.idleTimeout后自然转入 Standby。3. 最低 VS Code 版本提升至 1.93engines.vscode字段为^1.93.0且types/vscode同步锁定^1.93.0。这意味着本扩展依赖 1.93 引入的终端执行事件 APIonDidStartTerminalShellExecution等使用低于该版本的 VS Code 无法安装或运行。五、心跳管线底层原理队列、重试与离线信号综合 0.1.0–0.3.0 的演进完整的心跳链路可拆为四层1. 队列层api/queue.ts心跳先进内存队列并立即持久化到context.globalState键gitCity.pendingHeartbeats保证崩溃不丢数据队列非空时第一条心跳立即触发一次 flushinstant feedback让开发者在登录后几秒内出现在站点上对应 README 中~30 seconds的体验承诺此后每 30 秒FLUSH_INTERVAL_MS批量发送单批上限 25 条MAX_BATCH_SIZE。2. 传输层api/client.tsPOST {apiUrl}/api/heartbeats鉴权头为X-API-KeyBody 为心跳数组最多重试 3 次指数退避1s → 2s401/403 与 429 不重试——前者是密钥问题无需徒劳后者是限流交给时间自然恢复网络错误fetch 抛异常则按退避重试全部失败后批量回插队列头部等待下个周期再发。3. 离线信号extension.ts 的deactivate暂停、空闲、主动断开时transition()会发送status: offline的心跳让服务端立即结束会话而非等待超时VS Code 关闭进程时deactivate()用getCachedKey()同步缓存绕过可能不可用的 SecretStorage直接sendDirect()发送离线心跳——单次尝试、3 秒超时AbortController注释明言这是best effort。4. 服务端校验src/app/api/heartbeats/route.ts服务端对每条心跳做严格白名单校验sessionId必填且 ≤128 字符编辑器名限定vscode/cursor/vscodium/windsurf/positronOS 限定darwin/linux/win32/freebsd/openbsdactiveSeconds截断到 0–3600每批最多 25 条。API Key 通过sha256哈希后与developers.vscode_api_key_hash比对服务端不存明文密钥。时间戳由服务端生成绝不信任客户端并 upsert 到developer_sessions表累加total_heartbeats与active_seconds。广播侧做了 60 秒去抖但离线信号总是立即广播保证建筑熄灭即时生效。六、完整配置参考全部继承自 package.json以下配置项可直接在 VS Code 设置中搜索 Git City 修改package.json 的contributes.configuration配置键类型默认值说明gitCity.enabledbooleantrue全局开关关闭后完全停止活动追踪与传输gitCity.apiUrlstringhttps://www.thegitcity.comAPI 地址application 作用域官方说明修改它会将你的 API Key 发送到其他服务器非必要勿改gitCity.privacy.shareLanguagebooleantrue是否公开分享当前编程语言会显示在你的建筑上gitCity.privacy.shareProjectbooleantrue是否发送项目名仅用于个人统计从不公开展示gitCity.privacy.excludeProjectsstring[][]永不追踪的项目名黑名单如[secret-project, client-work]子串匹配、忽略大小写gitCity.idleTimeoutnumber300判定空闲的无活动秒数范围 60–3600隐私红线README 明确承诺、源码可验证文件内容、代码、diff、剪贴板、终端输出、文件路径、分支名永不收集项目名仅存服务端用于个人分析绝不出现在任何公共 API 或广播中。关闭shareProject后sanitize()会同时剔除project与branch字段双保险。七、构建、打包与本地开发扩展采用 esbuild 构建esbuild.mjsnpm run build打包src/extension.ts到dist/extension.jsexternal: [vscode]、CJS、target: node18、生产模式压缩并输出 sourcemapnpm run watch增量监听模式--watch不压缩便于调试npm run package调用vsce package生成可安装的.vsix。TypeScript 侧开启strict模式module: commonjs、target: ES2022见 tsconfig.json。activationEvents为onStartupFinished即 VS Code 启动完成后自动激活无需用户手动触发从而保证一打开编辑器就在持续检测活动。八、版本演进速览版本核心主题关键变化0.1.0初始发布实时存在编码点亮建筑、隐私控制、状态栏集成、可配置空闲检测0.2.0品牌重塑更名 Git City: Pulse四态状态栏Transmitting/Standby/Off/Disconnected命令统一 Pulse 前缀API 域名修正为 www 子域0.3.0追踪扩展新增终端Claude Code/Cursor agent/手动命令、调试会话、任务运行器、文件系统操作、Notebook 编辑五类信号源AI 编码时建筑保持点亮最低 VS Code 1.93三版演进共同构成一条清晰的工程主线先是把在线做对心跳、脱敏、状态栏再把在线做全覆盖 Agent 与终端工作流同时始终守住隐私边界本机脱敏 服务端白名单 公共数据最小化。对于希望自建编码存在感上报系统的开发者packages/vscode-extension下的 tracker → sanitizer → queue → client 四层结构、src/app/api/heartbeats/route.ts的服务端校验模式以及 presence 接口 的公共字段裁剪策略都是可以直接借鉴的参考实现。赞分享前端数据可视化3D渲染【免费下载链接】git-cityYour GitHub profile as a 3D pixel art building in an interactive city项目地址https://gitcode.com/gh_mirrors/gi/git-city点击查看免费下载相关推荐Nord 主题移植的完整演进史从 VS Code 扩展到 Oni2 原生编辑器Nord 主题移植的完整演进史从 VS Code 扩展到 Oni2 原生编辑器 导读 本文以 Oni2 仓库中内置的 Nord 主题扩展 extension开发工具代码编辑器桌面应用GitHub1s完整发展史从零到一的VS Code在线编辑器演进历程GitHub1s完整发展史从零到一的VS Code在线编辑器演进历程 GitHub1s是一个革命性的开源项目让你能够在一秒钟内用VS Code界面阅读Git开发工具前端VS Code 1.542021 年 2 月版本亮点深度解析Apple Silicon、终端会话恢复与扩展 API 演进VS Code 1.542021 年 2 月版本亮点深度解析Apple Silicon、终端会话恢复与扩展 API 演进 Visual Studio Co文档教程上一篇MoE模型通信优化终极指南DeepSeek中NVLink与RDMA技术实战应用下一篇MongoDB Atlas搜索结果排序Robo 3T自定义评分函数创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考