Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions apps/desktop/src-tauri/capabilities/default.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"description": "Default permissions for the CodeIsCheap workbench",
"description": "Minimum system API permissions for the CodeIsCheap workbench",
"windows": ["main"],
"permissions": ["core:default", "dialog:allow-save"]
"permissions": [
"core:event:allow-listen",
"core:event:allow-unlisten",
"dialog:allow-save"
]
}
2 changes: 1 addition & 1 deletion docs/architecture.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ <h2 id="stack">技术选型</h2>
<tr><td>控制核心</td><td>Rust + Tokio</td><td>进程、网络、加密和性能</td></tr>
<tr><td>TLS 捕获</td><td>mitmproxy sidecar</td><td>复用成熟协议栈,避免自研 MITM</td></tr>
<tr><td>数据</td><td>SQLite / SQLCipher</td><td>本地事务、全文检索和加密</td></tr>
<tr><td>扩展</td><td>声明式映射,复杂插件用 WASI</td><td>最小权限、可隔离</td></tr>
<tr><td>扩展</td><td>MVP 不加载可执行插件;后续复杂插件用 WASI</td><td>启用前定义最小权限与隔离验收</td></tr>
</tbody></table></div>
<p>桌面边界使用版本化 Desktop API:Rust DTO 同时生成 <a href="../schemas/desktop-api/v0.1.schema.json">JSON Schema</a> 与 React TypeScript bindings。Tauri command 惰性打开 OS 凭据库和 SQLCipher,失败时保留 WebView 并允许用户重试。</p>

Expand Down
2 changes: 1 addition & 1 deletion docs/delivery.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<h2 id="scope">范围切线</h2>
<div class="two-column">
<section class="plain-panel"><h3>MVP 必须有</h3><ul><li>Gateway + 显式代理</li><li>四类协议适配</li><li>Anatomy / Raw / Timeline</li><li>结构化比较</li><li>本地搜索与脱敏导出</li><li>Windows / macOS</li></ul></section>
<section class="plain-panel"><h3>后续再做</h3><ul><li>浏览器扩展与 TUN</li><li>团队云同步</li><li>AI 语义分析</li><li>完整评测平台</li><li>移动和远程设备</li><li>Linux GA</li></ul></section>
<section class="plain-panel"><h3>后续再做</h3><ul><li>浏览器扩展与 TUN</li><li>第三方 WASI 插件</li><li>团队云同步</li><li>AI 语义分析</li><li>完整评测平台</li><li>移动和远程设备</li><li>Linux GA</li></ul></section>
</div>

<h2 id="phases">建议阶段</h2>
Expand Down
7 changes: 4 additions & 3 deletions docs/progress.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ <h2 id="streams">4. 工作流进度</h2>
<tr><td>Desktop / Frontend</td><td>APP-001~006</td><td>97%</td><td><span class="status active">In progress</span></td><td>Codex / TBD</td><td>完成屏幕阅读器、首次捕获耗时与真实运行验收</td></tr>
<tr><td>Capture / Network</td><td>CAP-001~007</td><td>88%</td><td><span class="status active">In progress</span></td><td>Codex / TBD</td><td>完成 macOS helper 真实故障矩阵;生产签名随发布凭据补齐</td></tr>
<tr><td>Prompt / Adapters</td><td>PAR-001~007</td><td>100%</td><td><span class="status done">Done</span></td><td>Codex / TBD</td><td>保持价格目录与 provider usage 映射可追溯</td></tr>
<tr><td>Data / Security</td><td>DAT-001~002、SEC-001~004</td><td>95%</td><td><span class="status active">In progress</span></td><td>Codex / TBD</td><td>继续 WASI 权限、正式签名制品与独立安全评审</td></tr>
<tr><td>Data / Security</td><td>DAT-001~002、SEC-001~004</td><td>96%</td><td><span class="status active">In progress</span></td><td>Codex / TBD</td><td>完成正式签名制品与独立安全评审;第三方 WASI 插件属于后续范围</td></tr>
<tr><td>Test / Release</td><td>TST-001~004、REL-001~003</td><td>86%</td><td><span class="status active">In progress</span></td><td>Codex / TBD</td><td>收集真实 Beta 证据并逐项关闭九个人工/真实环境 gate</td></tr>
</tbody></table></div>

Expand Down Expand Up @@ -89,7 +89,7 @@ <h2 id="current-sprint">5. 当前迭代:S5 / S6</h2>
<tr><td class="task-id">DAT-002</td><td>写入、查询、保留与磁盘压力</td><td><span class="status done">Done</span></td><td>100%</td><td>Codex / TBD</td><td>2026-07-15</td><td>批量写入原子提交;默认保留 30 天/50,000 条并以 500 条事务清理;低于 256 MiB 或 SQLITE_FULL 时暂停记录但保持 Gateway 转发</td></tr>
<tr><td class="task-id">SEC-001</td><td>范围策略和凭据 scrubber</td><td><span class="status done">Done</span></td><td>100%</td><td>Codex / Security Reviewer TBD</td><td>2026-07-22</td><td>请求与响应 header/JSON body 双层脱敏;Profile 管理保持既有 method/path allowlist,仅扩展最多 16 个精确 host;canary 在 DB、WAL、诊断日志、临时文件和支持包中零命中</td></tr>
<tr><td class="task-id">SEC-002</td><td>脱敏与导出</td><td><span class="status done">Done</span></td><td>100%</td><td>Codex / Security Reviewer TBD</td><td>2026-07-18</td><td>单请求、筛选批量及支持包均强制扫描、完整预览、SHA-256 防陈旧和只新建文件;版本化 corpus 以 36 个字段名、17 类文本 secret 及近似反例覆盖 Rust/Python/Web</td></tr>
<tr><td class="task-id">SEC-003</td><td>本地 IPC 与插件隔离</td><td><span class="status active">In progress</span></td><td>97%</td><td>Codex / Security Reviewer TBD</td><td>2026-08-25</td><td>IPC 0.6 在 Windows 使用当前用户与 SYSTEM protected DACL、拒绝远端连接的随机 named pipe,创建后回读 owner/ACE 并逐连接核对 sidecar PID;macOS/Linux 使用当前 eUID `0700` 私有目录内 `0600` Unix socket,并逐连接核对 peer eUID/PID;统一使用 256-bit token、常量时间比较、1 KiB 认证帧、2 秒截止和 ACK,真实传输、超时恢复与旧 0.5 bundle 拒绝均有测试;仅插件启用后的 WASI 最小权限待完成</td></tr>
<tr><td class="task-id">SEC-003</td><td>本地 IPC 与插件隔离</td><td><span class="status done">Done</span></td><td>100%</td><td>Codex / Security Reviewer TBD</td><td>2026-07-22</td><td>IPC 0.6 在 Windows 使用当前用户与 SYSTEM protected DACL、拒绝远端连接的随机 named pipe,macOS/Linux 使用当前 eUID 私有目录与 Unix peer credential;统一使用 256-bit token、常量时间比较、1 KiB 认证帧、2 秒截止和 ACK。主 WebView 仅获事件 listen/unlisten 与保存对话框权限,禁止 remote origin;MVP 不提供可执行插件面,未来启用第三方插件前必须另行完成 WASI 最小权限验收</td></tr>
<tr><td class="task-id">SEC-004</td><td>更新与供应链</td><td><span class="status active">In progress</span></td><td>96%</td><td>Codex / Release Owner TBD</td><td>2026-08-25</td><td>依赖、Action、所有权与高危漏洞门禁已接入。签名发布工作流仅接受 main 中版本 tag,要求 updater 私钥、Windows Authenticode、macOS Developer ID/notarization、已签名 sidecar,并在发布前复核版本、`.sig`、大小与 SHA-256;正式凭据和首批制品待发布负责人配置</td></tr>
<tr><td class="task-id">PAR-001</td><td>Prompt IR v0.1 与首批 fixtures</td><td><span class="status done">Done</span></td><td>100%</td><td>Codex / TBD</td><td>2026-07-14</td><td>OpenAI/Anthropic fixtures、校验与 schema 完成</td></tr>
<tr><td class="task-id">PAR-002</td><td>解析器注册表与检测链</td><td><span class="status done">Done</span></td><td>100%</td><td>Codex / TBD</td><td>2026-07-15</td><td>置信度排序、错误/panic 隔离、IR 校验、partial issues 与 Raw fallback 完成</td></tr>
Expand Down Expand Up @@ -127,7 +127,7 @@ <h2 id="backlog">6. 后续迭代承诺</h2>
<tr><td>S2</td><td>CAP-001/002、PAR-002/003、APP-003</td><td><span class="status done">Done</span></td><td>Gateway、OpenAI 解析与千条实时工作台全部通过验收</td></tr>
<tr><td>S3</td><td>PAR-004、APP-004、TST-001、DAT-002</td><td><span class="status done">Done</span></td><td>双厂商 Inspector、能力矩阵与数据生命周期全部通过验收</td></tr>
<tr><td>S4</td><td>CAP-003~005、TST-002</td><td><span class="status active">In progress</span></td><td>sidecar bundle、桌面运行时、协议矩阵、Proxy 取消/背压、跨平台 CA 状态及两平台用户级信任生命周期已实现;签名、其余协议一致性与交互式验收待推进</td></tr>
<tr><td>S5</td><td>CAP-006/007、SEC-002/003、APP-006、TST-003</td><td><span class="status active">In progress</span></td><td>SEC-002、CAP-007 完成,IPC 抗阻塞、双模式 OS PID 归因、Unix owner-only socket、Windows owner-only named pipe、readiness 身份校验、PAC/CA 拒绝恢复、macOS 授权 helper 和兼容诊断树已接入;继续真实故障验收与 WASI 最小权限</td></tr>
<tr><td>S5</td><td>CAP-006/007、SEC-002/003、APP-006、TST-003</td><td><span class="status active">In progress</span></td><td>SEC-002/003、CAP-007 完成,IPC 抗阻塞、双模式 OS PID 归因、owner-only transport、readiness 身份校验、PAC/CA 拒绝恢复、macOS 授权 helper、最小 WebView capability 和兼容诊断树已接入;继续真实管理员故障验收</td></tr>
<tr><td>S6</td><td>PAR-005~007、APP-005</td><td><span class="status done">Done</span></td><td>四厂商适配器、token/成本/指纹、全文搜索和结构/文本 Compare 全部完成</td></tr>
<tr><td>S7</td><td>TST-004、性能、可访问性、诊断与保留</td><td><span class="status active">In progress</span></td><td>axe、键盘与焦点、双主题截图、千条列表预算及 Gateway P95 门禁完成;继续屏幕阅读器和 Beta 真实环境测量</td></tr>
<tr><td>S8</td><td>SEC-004、REL-001/002、安全评审</td><td><span class="status active">In progress</span></td><td>仓库供应链门禁、失败关闭的跨平台签名发布流水线、应用内更新、预更新恢复快照、只读历史恢复与支持处理闭环已接入;正式凭据、首批制品、真实回滚与安全评审待推进</td></tr>
Expand Down Expand Up @@ -245,6 +245,7 @@ <h2 id="decisions">11. 决策与变更记录</h2>
<tr><td>2026-07-21</td><td>Desktop / Beta Metrics</td><td>APP-006 / REL-003 本地证据采集完成</td><td>独立双槽文件记录首次捕获和干净/异常会话,SQLCipher 聚合声明支持端点的解析率;设置页可复核、复制和只新建导出,不包含 Prompt、请求标识、日志或自动上传</td><td>Codex</td></tr>
<tr><td>2026-07-21</td><td>Release / Beta Evidence</td><td>REL-003 离线聚合链完成</td><td>每个安装使用随机 128-bit ID 防止重复贡献;严格验证器拒绝隐私异常、未知字段、重复、symlink、伪造率和错误版本,按 30 位贡献者与 1,000 请求/会话最小量计算三个 gate,最终报告不保留样本 ID</td><td>Codex</td></tr>
<tr><td>2026-07-22</td><td>Desktop / Capture Profiles</td><td>APP-006 / TM-02 Profile 管理闭环</td><td>设置页新增可访问的 Profiles 视图,编辑名称、无凭据 HTTP(S) Gateway origin 和最多 16 个逐行精确 host;活跃捕获或 Proxy 模式下失败关闭并提供 Pause/Return to Gateway,保存使用后端规范化结果回填,Restore defaults 可恢复内置 OpenAI 配置;桌面与 600×620 紧凑视口均无重叠或无意义溢出</td><td>Codex</td></tr>
<tr><td>2026-07-22</td><td>Security / WebView</td><td>SEC-003 Tauri capability 最小化</td><td>主 WebView 从 `core:default` 收紧为事件 listen/unlisten 与保存对话框三项权限,只匹配本地 `main` 窗口并禁止 remote origins;供应链门禁精确校验 capability 集合,宽窗口匹配、远端来源、非本地访问或额外权限均使 CI 失败。MVP 不加载可执行插件,WASI 隔离随未来插件功能单独验收</td><td>Codex</td></tr>
<tr><td colspan="5">后续范围、架构、日期或资源变化均在此追加,并链接对应 ADR/会议结论。</td></tr>
</tbody></table></div>

Expand Down
4 changes: 2 additions & 2 deletions docs/threat-model.html
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ <h2 id="threats">威胁台账</h2>
<div class="table-wrap"><table><thead><tr><th>ID</th><th>威胁</th><th>现有证据</th><th>剩余控制 / 门槛</th></tr></thead><tbody>
<tr><td class="task-id">TM-01</td><td>鉴权凭据进入 IPC、日志或 DB</td><td>共享敏感字段策略;sidecar 与 Core 双层 scrubber;DB、WAL、诊断日志、临时文件和支持包端到端 canary 零命中</td><td>独立安全评审与 corpus 持续维护</td></tr>
<tr><td class="task-id">TM-02</td><td>捕获非目标应用或端点</td><td>Rust/Python 共用精确 host、POST method 与 path pattern 策略;版本化 Profile 仅接受无凭据 HTTP(S) origin 和最多 16 个精确附加 host,拒绝重复内置 host,Gateway 与 Proxy 共用同一策略;设置页仅允许在暂停的 Gateway 中原子更新并失败回滚</td><td>独立安全评审与真实自定义端点验收</td></tr>
<tr><td class="task-id">TM-03</td><td>本机其他进程伪造、读取或阻塞 IPC</td><td>IPC 0.6 在 Windows 使用随机本地 named pipe,拒绝远端客户端,protected DACL 仅允许当前用户与 SYSTEM,创建后回读 owner/ACE 并逐连接匹配 sidecar PID;每个连接使用独立 instance,处理当前连接前预建下一实例,超时或错误直接丢弃旧 handle。macOS/Linux 使用当前 eUID 所有的 `0700` 目录内 `0600` Unix socket,逐连接匹配 sidecar eUID/PID,symlink 与错误 owner 失败关闭;所有传输使用 256-bit 会话 token、常量时间比较、mitmproxy 来源、1 KiB 认证帧、4 MiB Envelope、2 秒全流程截止和 ACK;临时归因端点不进入 Envelope;旧 0.5 bundle 启动前拒绝</td><td>插件启用后的 WASI 最小权限</td></tr>
<tr><td class="task-id">TM-03</td><td>本机其他进程伪造、读取或阻塞 IPC</td><td>IPC 0.6 在 Windows 使用随机本地 named pipe,拒绝远端客户端,protected DACL 仅允许当前用户与 SYSTEM,创建后回读 owner/ACE 并逐连接匹配 sidecar PID;每个连接使用独立 instance,处理当前连接前预建下一实例,超时或错误直接丢弃旧 handle。macOS/Linux 使用当前 eUID 所有的 `0700` 目录内 `0600` Unix socket,逐连接匹配 sidecar eUID/PID,symlink 与错误 owner 失败关闭;所有传输使用 256-bit 会话 token、常量时间比较、mitmproxy 来源、1 KiB 认证帧、4 MiB Envelope、2 秒全流程截止和 ACK;临时归因端点不进入 Envelope;旧 0.5 bundle 启动前拒绝;MVP 不加载可执行插件</td><td>未来启用第三方插件前完成 WASI 最小权限与隔离验收</td></tr>
<tr><td class="task-id">TM-04</td><td>数据库文件被离线读取</td><td>SQLCipher、WAL、迁移、加密备份、错误密钥、DB/WAL canary 与跨平台 OS 凭据库 CI</td><td>锁定状态与 key 丢失恢复体验</td></tr>
<tr><td class="task-id">TM-05</td><td>本地 CA 私钥泄露或残留信任</td><td>每设备 CA、跨平台私钥权限检查、指纹 UI、Windows CurrentUser 与 macOS User 幂等卸载已实现;macOS 信任拒绝会清理本次新增证书,桌面保持未信任并允许重试</td><td>两平台交互式验收;发布前独立安全评审</td></tr>
<tr><td class="task-id">TM-06</td><td>崩溃后系统代理残留</td><td>Windows/macOS 强杀恢复实验;Windows 桌面已接入私有 journal、watchdog、启动恢复和活 owner 校验;sidecar 单独退出会按代际恢复代理并回退 Gateway;端口占用者无法通过独立 256-bit readiness token 校验,冲突启动会清理进程树且不会切换系统代理;PAC 双重失败由 watchdog 恢复;macOS 使用静态逐参数 quote 的授权命令启动受校验可执行文件,helper 控制 socket 分别校验用户 owner 与 root peer,owner 断连、helper 崩溃和下次启动均进入独立恢复链</td><td>macOS 授权桌面 helper 的真实管理员交互与强杀故障矩阵</td></tr>
<tr><td class="task-id">TM-07</td><td>依赖、sidecar 或更新包被替换</td><td>依赖、Action、所有权和高危漏洞由仓库策略门禁;sidecar manifest、SBOM 与启动前 hash 校验已接入。签名发布仅接受 main 中版本 tag,要求 Windows Authenticode、macOS Developer ID/notarization、有效 sidecar 平台签名和独立 Tauri updater 签名;公开前复核 artifact 大小、SHA-256、`.sig` 与 `latest.json`,并先上传草稿。安装前重新核对版本、恢复代理并生成加密恢复快照;主库失败只读打开受校验备份</td><td>正式密钥托管、首批平台签名制品、真实回滚和发布演练;持续跟踪 Tauri Linux GTK3 链的 glib 上游修复</td></tr>
<tr><td class="task-id">TM-08</td><td>复制或导出泄露秘密</td><td>单请求、最多 200 条批量导出及支持包均强制扫描与完整预览;版本化 corpus 覆盖 36 个敏感字段名、17 类文本 secret 及近似反例,Rust/Python/Web 一致性回归通过;稳定占位符、策略版本、SHA-256 防陈旧和只新建文件已实现</td><td>独立安全评审与 corpus 持续维护</td></tr>
<tr><td class="task-id">TM-09</td><td>恶意 Prompt 触发 UI 注入</td><td>React 默认转义、Tauri CSP</td><td>Raw 仅纯文本、URL 不自动执行、XSS fixture</td></tr>
<tr><td class="task-id">TM-09</td><td>恶意 Prompt 触发 UI 注入</td><td>React 默认转义、Tauri CSP;主 WebView 只匹配本地 `main` 窗口,无 remote origin,仅允许事件 listen/unlisten 与保存对话框系统 API,策略门禁拒绝 `core:default` 或额外权限</td><td>Raw 仅纯文本、URL 不自动执行、XSS fixture 与独立安全评审</td></tr>
<tr><td class="task-id">TM-10</td><td>超大/高速流量耗尽内存或磁盘</td><td>认证帧 1 KiB、Envelope 4 MiB、sidecar 有界队列、IPC 连接截止时间、存储配额与磁盘压力暂停</td><td>完善丢弃/降级指标与高压故障注入</td></tr>
<tr><td class="task-id">TM-11</td><td>将推断内容误标为已观察 Prompt</td><td>Prompt IR evidence 类型</td><td>UI 强制显示 observed / inferred / unknown</td></tr>
<tr><td class="task-id">TM-12</td><td>诊断、崩溃报告或遥测外泄</td><td>当前无产品遥测;256 KiB 诊断 journal 仅保存受限事件代码和时间戳;支持包最多包含最近 100 条事件,排除 Prompt、Raw、请求标识和日志详情,并由用户预览后保存;接收、保留与删除流程已发布</td><td>未来遥测必须显式选择且先脱敏</td></tr>
Expand Down
Loading
Loading