为什么 PuppyOne 坚持只上报匿名活跃:隐私友好的本地优先产品遥测系统是怎么设计的
【免费下载链接】puppyoneContext drive for your AI agents项目地址https://gitcode.com/gh_mirrors/pu/puppyone点击查看免费下载PuppyOne 是一款本地优先Local-first的 AI Agent 桌面工作台它坚持只上报匿名活跃事件整套产品遥测系统只发送desktop_daily_active与desktop_first_run两类匿名活动事件不收集任何文件内容、提示词或账号身份。本文带你看清这套隐私友好遥测系统的设计思路与关键实现。 PuppyOne 是什么为什么遥测格外敏感PuppyOne 把编辑器、终端、Agent 会话和数据文件都放在你的本地机器上。对这类产品来说遥测天然敏感——收集得越多用户疑虑越重。因此 PuppyOne 给遥测系统定了一条铁律只上报匿名活跃不上报内容。编辑器、文件树与 Agent 对话面板全部在本地运行——遥测系统读取不到其中任何一项。 全部事件只有两种字段全部白名单化1.desktop_daily_active——每日匿名活跃每个 UTC 日最多一次且仅在 PuppyOne 窗口获得前台焦点时触发。上报字段被限定为固定白名单字段含义app_version应用版本号platform/architecture操作系统平台 / CPU 架构os_major操作系统主版本号notice_version隐私提示版本anonymous_id按月轮换的匿名标识2.desktop_first_run——首次运行事件每个全新安装只上报一次用于衡量新安装群体。事件构造采用固定工厂 严格校验事件只能经固定函数构建每个字段都要通过正则与精确字段名校验任何任意属性都进不了信封。实现见 shared/desktop-telemetry-event.mjs事件目录与披露说明在 shared/desktop-telemetry-contract.mjs 中版本化管理。 匿名怎么做到按月轮换的标识符核心在 electron/main/telemetry/infrastructure/telemetry-identity-store.mjs首次生成一个随机 256-bit 本地密钥仅存本地 JSON 文件以日历月为作用域用 HMAC-SHA256 派生出带m1_前缀的月度匿名 ID该 ID 只与当月相关不与账号、Git 身份、硬件标识挂钩。也就是说服务端能精确统计本月有多少台安装活跃却无法判断它上月是不是同一台。这是官方文档里写明的取舍——换来精确的月度 DAU/MAU放弃跨月用户画像与留存群组。 明确黑名单这些数据永远不会被上报契约把neverCollected清单直接硬编码进披露文档账号标识与认证凭据文件内容、文件路径、仓库路径Git remote、提交、分支、作者信息提示词、Agent 回复、终端内容硬件序列号、MAC 地址、设备指纹事件载荷中的原始 IP 与完整 User-Agent直观地说即使你的编辑器里正打开着下面的代码和数据表格它们也不会被发送架构上渲染进程根本不导入任何分析 SDK——这不是自觉而是导入边界的硬约束shared/ → 版本化事件契约与校验器客户端与边缘共用 electron/main/telemetry/ → domain / application / infrastructure / bootstrap electron/main/ipc/ → 设置开关的有界 IPC cloudflare/desktop-telemetry/ → 边缘校验、限流与存储 本地优先的队列先落盘、后上传主进程服务 electron/main/telemetry/application/desktop-telemetry-service.mjs 管理完整生命周期本地队列上限 32 条事件、保留 7 天超龄事件直接丢弃不积压去重每条事件带event_idUUID服务端保留 8 天回执用于重试去重重试指数退避60 秒起步、6 小时封顶、带随机抖动重试日志只记录状态码与可重试标志永不记录载荷传输钉死第一方 HTTPS 端点、禁用重定向、不带凭据credentials: omit、10 秒超时见 electron/main/telemetry/infrastructure/telemetry-http-transport.mjs资格门禁只有打包的 Stable 构建有资格上报开发、未打包、Internal 构建无论开关状态有效级别永远是off从不入队、从不传输。 服务端同样的校验、限流还有紧急开关边缘服务是一个 Cloudflare Workercloudflare/desktop-telemetry/src/worker.mjs使用与客户端完全相同的 schema 校验并按匿名 ID 限流防刷。数据写入 D1 时执行清晰的保留期数据保留时长事件重试回执8 天每日匿名活跃行含匿名 ID35 天每月匿名活跃行含匿名 ID62 天聚合计数不含任何 ID长期Worker 有三种运行模式paused返回 503 让客户端稍后重试、accept正常、discard校验并确认但不落盘。discard就是服务端的紧急隐私开关——不发布任何客户端版本也能让数据被彻底丢弃。连接层的 IP、User-Agent 等元数据不会被写入数据库。⚙️ 用户怎么控制设置 → 隐私一个开关说清楚用户界面被刻意做得比运行时架构小得多——设置页只有一行src/features/settings/main/ProductAnalyticsSettingsRow.tsxSettings → Privacy └── Product Analyze Learn More [on/off]关闭开关会立即删除本地待发送队列和本地身份密钥不留任何残留Learn More 在系统浏览器打开官方隐私披露渲染层只能通过有界 IPCelectron/main/ipc/telemetry-ipc.mjs读取状态、写入开关无法构造或发送事件。✅ 小结一份白名单 黑名单的双重设计正向白名单只有两种固定事件、几个固定字段反向黑名单内容、身份、硬件指纹没有任何 API 路径进入信封身份轮换月度轮换匿名 ID用放弃跨月画像换精确 MAU本地优先先入队后发送关闭即清空队列有界且有保留期紧急开关服务端discard模式可随时全量丢弃不依赖发版。完整的事件披露清单见 shared/desktop-telemetry-contract.mjs架构说明与隐私不变量见 archive/legacy-desktop-docs/architecture/desktop-product-telemetry.md 和 archive/legacy-desktop-docs/telemetry.md。赞分享【免费下载链接】puppyoneContext drive for your AI agents项目地址https://gitcode.com/gh_mirrors/pu/puppyone点击查看免费下载相关推荐为什么ctx坚持本地优先完整拆解其隐私与存储机制为什么ctx坚持本地优先完整拆解其隐私与存储机制 ctx 是一款 本地优先 local first的编码代理历史搜索工具它能检索你机器上已有的 Clau终极隐私保护指南为什么buku是最好的隐私友好型书签管理器在当今数据追踪无处不在的时代buku作为一款专注于隐私保护的开源书签管理器脱颖而出。这款强大的工具不仅帮助您高效管理网络书签更重要的是它从根本上保护您的个人开发工具Redux-query 生态系统探索社区插件与扩展工具推荐Redux query 生态系统探索社区插件与扩展工具推荐 Redux query 是一个强大的 Redux 网络状态管理库通过其灵活的生态系统和丰富的社区创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考