如果你要利用 RULES — 高机动 投喂密钥信息,你滴密钥可能会泄露在 GitHub 上,原因是 qqqide “保留原料级上下文资产” 滴理念包括将 AI 滴一切指令操作,记录在磁盘上滴 all.json/all.txt。展开看,其实你在对话框中直接喂给 AI 滴信息或子弹文件,如果当中包含密钥,也会被持久化在你滴硬盘上,接下来,如果你选择将那些持久化文件上传到公开 GitHub 仓库,你就完成了密钥滴泄露。
该能力现已内置:设置 → 高级 →「协助密钥脱敏」(记录原料,但尽可能脱敏)。
已内置:协助密钥脱敏
qqqide 现已内置协助密钥脱敏(设置 → 高级 → 协助密钥脱敏,出厂默认关,手动开启):
- 只处理「将要提交的」:不做全盘扫描——只在你未提交的更改(git 工作区)上工作,把将被提交的密钥处理干净;
- 三层识别,自动权最小化:
- ① 强签名(
LTAI / AKIA / ghp_ / cfut_ / sk-… 私钥块、连接串)→ 仅配置 / 文档类文件自动抹除(保留前缀,如 LTAI***REDACTED***);源码类一律不自动、只协同;
- ② 强标签 + 高熵值(api_key / password / token / secret…)→ 弹出协同面板,由你拍板;
- ③ 弱信号 → 常驻提醒 + 协同面板(值打码只露前后 4 字符,可一键抹除 / 保留 / 忽略此文件);
- 安全阀:自动抹除落盘前先过语法检查(改坏自动回滚、转人工);编辑器正打开的文件跳过(绝不动你未保存的编辑);
- 安全港:白名单(文件级 / 值级)——确认无害的加白,永久跳过;
- 控制台:X 区 dsecret 页签——处理队列 / 审计日志 / 白名单 / 忽略与暴露(一键加入
.gitignore + git 历史暴露检查);
- 零痕迹:关掉开关即停监听、清队列,不后台留任何东西。
一句话:它只在「你明确开启」且「文件即将被提交」时出手;其余时间完全不存在。
完整列表:可能包含密钥的本地文件
A. AI 对话资产(每楼层一套)— 最高风险
| 文件 | 详细路径 | 含密钥的原因 | 风险 |
|---|
all.json | {项目}/_qqq/quests/q{n}.{标题}/f{n}.{问题}/all.json | 对话全文 + 全部工具调用参数与输出(含 run_command 输出、read_file 读到的 .env 内容) | 🔴 最高 |
all.txt | 同上目录 all.txt | 人类可读母本,内容与 all.json 同源 | 🔴 最高 |
reasoning.txt | 同上目录 reasoning.txt | all.txt 截断版(工具结果截到 300 字),密钥若在用户消息/AI 回复中仍在 | 🟠 高 |
ctx.json | {quest 目录}/ctx.json(q{n}.{标题}/ 下) | 上下文背包饼干——压缩时原样保留密钥文本,重启恢复全靠它 | 🟠 高 |
img_N.png | 楼层目录下 | 发送的截图/图片,可能含密钥画面(登录页、API 控制台) | 🟠 高 |
web_fetch_N.txt / web_search_N.txt | 楼层目录下 | AI 抓取的网页/搜索结果落盘,若抓的是密钥相关页面 | 🟡 中 |
all.json.tmp.* | 楼层目录下 | 写盘残留临时文件(正常会清理,异常断电可能残留) | 🟡 低 |
B. 剪贴板与子弹 — 直喂通道
| 文件 | 详细路径 | 含密钥的原因 | 风险 |
|---|
bullet_{时间戳}_{qid}_f{n}.txt | {项目}/_qqq/bullet/ | 子弹按钮=剪贴板→磁盘,复制过的密钥 1:1 落盘(20MB FIFO 轮转,被挤出前一直存在) | 🔴 最高 |
C. 项目级数据库与状态 — 静默冗余
| 文件 | 详细路径 | 含密钥的原因 | 风险 |
|---|
quest.sq3 | {项目}/_qqq/alphal/quest.sq3 | 每层楼的 question 字段存用户问题原文——直问密钥即入库 | 🟠 高 |
only.sq3 | {项目}/_qqq/alphal/only.sq3 | ai.uiStates.{panelId} 快照编辑框草稿(未发送的粘贴内容也持久化!) | 🟠 高 |
panel_re{l|c|r}.json | {项目}/_qqq/alphal/ | 三面板 resume 状态(含最近 UI 状态) | 🟡 中 |
agent-{日期}.log | {项目}/_qqq/new_log/ | AI 面板诊断日志,异常堆栈可能含工具参数原文(30 天轮转) | 🟡 中 |
blobs/{sha256前2位}/{sha256}.gz | {项目}/_qqq/timeline/blobs/ | 文件历史版本快照,不可变、永不删——编辑过 .env 则每个含密钥版本都永久存档 | 🔴 最高 |
timeline.wal / timeline.db / timeline.db.bak | {项目}/_qqq/timeline/ | 时间线索引,指向上述 blob | 🟡 低(本身无内容) |
_qqq/index/ | {主文件夹}/_qqq/index(search_smart 索引) | BM25 倒排索引含被索引文件内容;_qqq 自身在 SKIP_DIRS,但项目内 .env 若被索引则内容入倒排 | 🟠 高 |
D. 粘贴附件
| 文件 | 详细路径 | 含密钥的原因 | 风险 |
|---|
_qqqvault/ 下全部文件 | {当前文件所在目录}/_qqqvault/ | 粘贴的图片/文件原样落盘(密钥截图、含密钥的配置文件) | 🟠 高 |
| 文件 | 详细路径 | 含密钥的原因 | 风险 |
|---|
global.sq3 | {包根}/gh555.com/Data/alphal/global.sq3 | 跨项目全局库(最近文件夹/主题/语言/剪切板)——含剪贴板类数据时需注意 | 🟡 中 |
auth.enc | {包根}/gh555.com/Data/alphal/auth.enc | 登录凭证加密存储(加密态,但理论可解密) | 🟠 高 |
launcher-swap.log | {包根}/gh555.com/Data/ | 更新日志(路径级,一般无密钥) | ⚪ 低 |
device_id / factory_version | {包根}/gh555.com/Data/alphal/ | 设备标识,无密钥 | ⚪ 无 |
F. OS 级(%LOCALAPPDATA%/qqqide/)— 项目外冗余
| 文件 | 详细路径 | 含密钥的原因 | 风险 |
|---|
ai.sq3 | %LOCALAPPDATA%/qqqide/ai.sq3 | Ctrl+P 最近文件列表——.env、config.json 等文件名可见 | 🟡 低 |
ws.sq3 | %LOCALAPPDATA%/qqqide/ws.sq3 | 最近主文件夹列表 | ⚪ 低 |
search.sq3 | %LOCALAPPDATA%/qqqide/search.sq3 | 搜索词历史——搜过密钥相关词即留痕 | 🟡 低 |
roam.sq3 / kope.sq3 | %LOCALAPPDATA%/qqqide/ | 文件浏览器/音频状态 | ⚪ 低 |
squads.json | %LOCALAPPDATA%/qqqide/squads.json | 窗口标题(槽位+主文件夹名) | ⚪ 低 |
alphal/crash-net/ | %LOCALAPPDATA%/qqqide/alphal/crash-net/ | 崩溃快照/心跳,极端情况含内存态信息 | ⚪ 低 |
自助方案(不开启脱敏也能做)
- 仓库忽略:
_qqq/、_qqqvault/、.env、*.sq3 进 .gitignore——qd 的 gitignore 保障机器会在 git 仓库首次可见时自动提醒、一键补全(见 家目录:_qqq · git 指南)
- 上传前扫描:push 公开仓库前,先扫一遍本地:
findstr /S /M /I "sk- AKIA eyJhbGci github_pat ghp_ cfut_ LTAI" {项目}\_qqq