Skip to content

Commit 89dc716

Browse files
committed
docs(progress): record Skills S3 evidence
1 parent f41d858 commit 89dc716

1 file changed

Lines changed: 38 additions & 14 deletions

File tree

docs/project/WORKSPACE_SECURITY_SKILLS_PROGRESS.md

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
> **用途:** 作为本轮 Skills/安全检查/Git 标识/终端/Sandbox/最终架构审查的单一进度台账。
44
> **受众:** 项目负责人、开发、测试、安全和后续接手者。
55
> **最后审阅 / Last reviewed:** 2026-08-01
6-
> **代码基线:** `main@e118d63`
6+
> **代码基线:** `main@f41d858`
77
> **重要说明:** 本文按实际代码审计记录,不把“已有 UI 外壳”计作完整功能;`DEVELOPMENT_STATUS.md` 中关于 Phase 5 Skills 尚未开始的描述已落后于当前代码,最终架构阶段需统一修订。
88
99
---
@@ -22,13 +22,13 @@
2222

2323
| 能力 | 当前状态 | 判断 |
2424
|---|---:|---|
25-
| Skills 基础 inventory/本地与远端安装 | 🟡 | 主流程已存在;仅有归档级风险检查,未经过完整 Security Gate |
25+
| Skills 基础 inventory/本地与远端安装 | | 本地、远端与外部发现统一经过 quarantine/扫描/策略 Gate;发布只接受不可伪造的 ApprovedArtifactId |
2626
| 受管 Skill 启用/禁用 || stable ID、统一 Gate、activation generation 与 Python 只读逐项挂载已闭环 |
27-
| 外部 Skill 启用/禁用 | 🟡 | 来源与开关已持久化、默认禁用且不改原目录;S3 扫描裁决仍待实现 |
27+
| 外部 Skill 启用/禁用 | | 来源与开关持久化、默认禁用且不改原目录;发现/文件变化会扫描,hash/规则/策略失效时转 stale |
2828
| composer Skill 选择过滤 || 仅展示 `effective_active` 来源,发送 stable ID;失效事件会移除 chip 并非阻塞提示 |
2929
| 详情按需文件浏览 || summary/tree/read-file 已拆分;文件正文仅在用户选择后按 200 KiB 分段读取 |
3030
| Skills 迁入 Settings/MCP 下方 || Settings 导航顺序为 MCP → Skills;旧 `skills` route 仅保留兼容重定向 |
31-
| Skills 安全检查 | 🟡 | 有安全解包和脚本/二进制布尔标注;无 quarantine、多引擎、policy、findingrescan |
31+
| Skills 安全检查 | | 内置离线引擎、quarantine、versioned policy、finding/审批/rescan/export 与统一 Gate 已闭环;Sandbox deep scanner 按范围延后 |
3232
| Git/本地项目 badge || 无 Git service/DTO/UI |
3333
| 嵌入式终端 || 现有 Terminal 图标实际打开 Tool Logs;无 xterm/PTY |
3434
| Tauri 终端安全收口 || 主 WebView shell/fs/http 权限偏宽且 CSP 为空,终端上线前必须修复 |
@@ -41,17 +41,20 @@
4141
### 3.1 Skills 已有能力
4242

4343
- `src-tauri/src/services/skills/installer.rs`
44-
- 可列出数据库受管 Skills,并发现 Codex/Claude/Cursor 外部目录。
45-
- 受管 Skill 可 `set_enabled`;外部记录不是 DB 实体,当前总是构造为 enabled。
46-
- `get_detail` 会读取完整 `SKILL.md` 并列举文件。
47-
- `installed_selection` 对受管 Skill 再检查 enabled/healthy。
44+
- 可列出受管 Skills,并将 Codex/Claude/Cursor 外部目录同步为稳定 source;所有来源的开关状态均持久化。
45+
- `get_detail` 全文接口只保留兼容;生产 Settings UI 使用 summary/tree/read-file 按需接口。
46+
- 受管发布在文件替换与 SQLite transaction 任一步失败时回滚;发布入口要求安全模块签发的 `ApprovedArtifactId`
4847
- `src-tauri/src/services/skills/archive.rs`
4948
- 已限制 ZIP/解压大小、文件数、压缩比、路径穿越、绝对/反斜杠路径、重复项和符号链接。
50-
- 已计算 hash,并识别常见脚本/二进制扩展;尚非语义/行为安全扫描。
49+
- 归档验证与语义分析已拆分;嵌套归档、MIME、Unicode/ADS/设备名和 ZIP bomb 均有回归测试。
50+
- `src-tauri/src/services/skills/security/`
51+
- 扫描器按 archive/content/manifest/secret/command/permission/policy 职责拆分,只读且从不执行目标 Skill。
52+
- 2 并发队列、取消/超时/progress、启动恢复、90 天历史清理、500 MiB quarantine/7 天过期和文件 watcher debounce 已落地。
53+
- balanced-v1 将 Critical/High block、Medium review、Low/Info warnings;engine error/timeout fail closed。
5154
- `src-tauri/src/services/skills/manifest.rs`
5255
- 已校验 YAML frontmatter、名称/描述等基础规范。
5356
- `src-tauri/src/commands/skills.rs`
54-
- list/detail/install/export/download/set_enabled/uninstall 等 commands 已注册
57+
- 除 inventory/file/install 外,已注册 findings、审批/拒绝/撤销、重新扫描/取消、JSON/SARIF 导出和隐私契约 commands;安全错误使用稳定 code/correlation ID
5558
- `src/components/chat/composer/MessageInput.tsx``SkillSelectorPopover.tsx`
5659
- 已按 enabled/healthy 过滤并支持 Skill 选择。
5760
- `src/__tests__/composer-skills.test.ts``skills-components.test.tsx``skills-page-selection.test.tsx`
@@ -110,11 +113,11 @@
110113
|---|---:|---|---|
111114
| M0 调研与方案 || 仓库审计、官方资料调研、总体架构、UI、分项计划、总执行指导、进度台账 | 文档 review 通过 |
112115
| M1 契约与回归基线 || S0/W0 特征测试、稳定 DTO/error/event、默认关闭 feature flags、capability/CSP 审计 | 进入 S1/W1 前保持基线测试绿色 |
113-
| M2 Skills 闭环 | 🟡 | S0/S1 完成:稳定来源、全来源持久开关、activation view、只读 Sidecar 挂载 | S2 lazy files/Settings;S3 强制扫描 Gate |
116+
| M2 Skills 闭环 | 🟡 | S0–S3 完成:稳定来源、按需文件、只读挂载、quarantine/内置扫描/统一 Gate | S4 Sandbox deep scanner 延后;S5 存量迁移与旧路径清理 |
114117
| M3 工作区体验 | 🟡 | W0 行为/安全基线完成;Explorer/resize 基础可复用 | Git/local badge、WorkspacePanel、三平台 PTY、CSP/IPC 收窄 |
115118
| M4 Sandbox Spike | 📄 | 调研和 ADR | 三平台 filesystem/network/process attack fixtures 通过 |
116119
| M5 Sandbox 默认化 || 逻辑 guard/审批可复用 | Agent/Skill/MCP 无 host Shell fallback,严格模式发布 gate |
117-
| M6 安全强化 | | 基础 archive checks | 深度扫描、存量 rescan、恶意样本、独立安全 review |
120+
| M6 安全强化 | 🟡 | S3 内置离线扫描、恶意/良性 corpus、审批与 stale 生命周期 | S4 deep scanner(Sandbox 延后)、S5 存量 rescan、独立安全 review |
118121
| M7 架构审查 || 已有计划 | 热点拆分、旧路径清理、功能/性能/安全无回退 |
119122

120123
## 6. 建议执行顺序
@@ -131,9 +134,9 @@
131134
| 编号 | 类型 | 内容 | 处理阶段 |
132135
|---|---|---|---|
133136
| B-01 | 安全 | ✅ S1 已解除:Python 不再挂载整目录,只读取 generation-stamped activation view | 已关闭 |
134-
| B-02 | 安全 | 外部 Skill 已有稳定身份和持久开关;quarantine/扫描裁决仍缺失 | M2 / S3 |
137+
| B-02 | 安全 | ✅ S3 已解除:外部 Skill 发现/变更统一扫描,裁决、审批、stale 与持久开关闭环 | 已关闭 |
135138
| B-03 | UX/API | ✅ S2 已解除:详情首载不再返回正文,文件树与预览独立滚动并按需分段读取 | 已关闭 |
136-
| B-04 | 安全 | 所有安装入口缺统一 Security Gate/quarantine | M2 / S3 |
139+
| B-04 | 安全 | ✅ S3 已解除:本地/远端/外部入口统一 Security Gate;发布需要 `ApprovedArtifactId` | 已关闭 |
137140
| B-05 | 安全 | 主 WebView 通用 Shell 权限 + CSP null | M3 上线门 |
138141
| B-06 | 安全 | Agent Shell 宿主执行和环境继承 | M4-M5 |
139142
| B-07 | 选型 | Windows strong sandbox 需 UAC setup/专用用户/firewall 的产品接受度 | M4 Spike review |
@@ -156,6 +159,9 @@
156159
- [x][`SKILLS_REPOSITORY_AND_SECURITY_PLAN.md`](../planning/SKILLS_REPOSITORY_AND_SECURITY_PLAN.md) 的 S0 与 [`WORKSPACE_CONTEXT_AND_TERMINAL_PLAN.md`](../planning/WORKSPACE_CONTEXT_AND_TERMINAL_PLAN.md) 的 W0 建立回归基线。
157160
- [x] 执行 Skills S1,关闭 disabled Skill 仍被全目录挂载的 B-01。
158161
- [x] 执行 Skills S2,迁入 Settings 并关闭详情首载全文的 B-03。
162+
- [x] 执行 Skills S3,交付 quarantine、内置离线扫描、finding/policy/审批和强制安装 Gate,关闭 B-02/B-04。
163+
- [ ] Skills S4 — DEFERRED(Sandbox):第三方 deep scanner 必须在 read-only/offline Sandbox helper 中验证;按用户范围暂不实现,不以宿主直接运行替代。
164+
- [ ] 执行 Skills S5,完成存量扫描迁移和旧生产旁路清理。
159165
- [ ] 执行 Workspace W1/W2,交付只读工作区标识与 panel 容器。
160166
- [ ] Sandbox B0–B7:按用户当前范围暂不实施;未获得新指令前不启动 Spike 或生产执行链改造。
161167

@@ -202,3 +208,21 @@
202208
- 风险/阻断:B-03 已关闭;B-02/B-04 的 quarantine、多引擎扫描与统一安装 Security Gate 仍由 S3 负责;B-05 仍待 Workspace W5。
203209
- 回滚:代码回滚到 `9f1c235`;本阶段无数据库或外部 Skill 目录变更。若回滚,新 UI/API 与安全文件读取提供器会整体退出。
204210
- 下一步:Skills S3,建立 artifact/scan/finding/approval 数据模型、quarantine 与所有入口统一 Security Gate;继续排除 Sandbox 实施。
211+
212+
### 2026-08-01 Skills S3 隔离扫描与强制安装门
213+
214+
- 状态:已完成;实现提交 `f41d858`,Sandbox helper/deep scanner 未实施。
215+
- 完成 TODO:Skills S3 全部 16 项;v12 新增 artifact/scan/finding/approval、索引和 `skill_sources.current_scan_id`,升级前自动生成可恢复 v11 备份。
216+
- Gate 证据:本地 ZIP、SkillHub/ClawHub/ModelScope 远端 ZIP 与 Codex/Claude/Cursor external discover 均进入同一扫描服务;安装器发布只接受安全模块在 allow/审计批准后签发的 `ApprovedArtifactId`,旧 install command 不再接收任意暂存目录。
217+
- 隔离/一致性:500 MiB quarantine、7 天过期、90 天非当前扫描历史清理;启动把 queued/scanning 恢复为 fail-closed error。发布使用原子目录替换 + SQLite transaction,任一步失败恢复旧目录和 DB。
218+
- 内置扫描:只读、不执行目标 Skill;拆为 archive/content/manifest/secret/command/permission/policy。`balanced-v1` 固定 Critical/High block、Medium review、Low/Info warnings;2 并发、15 秒队列预算、8 秒扫描预算、取消/progress/restart recovery 已验证。
219+
- 生命周期:artifact hash、内置引擎版本、policy 版本、审批到期/撤销和 source revocation 会转 stale 并禁用;500 ms watcher 自动 reconcile,启用/选择/挂载仍同步校验 hash 与 activation generation。
220+
- UI/隐私:Security tab 按需加载 summary、cursor findings 与审批历史;支持严重度过滤、脱敏证据、修复建议、实时进度/取消、重新扫描、理由审批/拒绝/撤销、JSON/SARIF 保存。内置扫描网络、VT hash、文件上传和云 LLM 均为 false;不存在绕过同意的上传代码路径。
221+
- 安全语料:Windows persistence、Linux download-exec、macOS persistence、Prompt Injection、credential access/exfiltration、obfuscation 和良性 fixture;另有 traversal/ADS/设备名/Unicode、symlink/junction、ZIP bomb、嵌套 archive/MIME、长行/文件数/超时/取消测试。三平台脚本是静态语料覆盖,不等同 macOS/Linux 实机验证。
222+
- 测试证据:前端 full 33 files / 247 tests passed;Rust `cargo test --all-features -j 1` 全量通过,S3 定向 security 15、migration 18、corpus 4 均通过;Python 120 passed / 1 skipped;`npm run build``cargo check``cargo fmt --check``git diff --check` 通过。普通 `cargo test` 因仓库既有 `fs_explorer_tests` 需要 `test-private` 无法编译,按项目规定用 all-features 全量命令验证。
223+
- 性能证据:500 文件/长行/扫描预算用例在 security lib suite 总执行 `< 1 s`;Windows `--all-features` 全量首次链接约 4–7.5 分钟,测试执行本身不足 1 秒;Vite 仍只有既有大 chunk 警告。
224+
- 环境差异:本次仅 Windows 实机;Python 实际解释器 3.13.9,非目标 3.11.x。macOS/Linux 打包和实机扫描/terminal 验证不得据此标完成。
225+
- 规范同步:`SKILLS_WORKSPACE_TERMINAL_UI_DESIGN.md` 与三份全局 UI 规范已加入 findings、审批恢复/撤销、进度取消、隐私与导出规则;`ui-ux-pro-max` skill 的本地脚本缺失,改按已读取规范人工落实键盘、ARIA 与性能要求。
226+
- 特性开关:S0 Skills flags 仍默认 false 且未参与生产分支;S3 是单一生产 Gate。S5 必须删除休眠 flags 或实现真实可验证回滚,不能把当前 flags 记作可用 rollout。
227+
- 回滚:代码回滚到 `3fa8f6c`;数据库使用同目录 `.pre-v12.sqlite3` 恢复。quarantine/外部源不被回滚删除,外部目录从未被修改。
228+
- 下一步:S4 依赖 Sandbox helper 的第三方深度扫描按用户范围延后;继续 Skills S5,完成存量迁移/兼容清理,再进入 Workspace W1–W6。

0 commit comments

Comments
 (0)