Skip to content

Commit b2a3827

Browse files
See USee U
authored andcommitted
docs: record NEEDS-JUDGMENT audit verdicts and OAuth XSS deviation
- PLAN.md: add security hardening cycle + 6-item KEEP verdicts with rationale - MERGE.md: register OAuth escapeHtml hardening (4 files), account/sync test cleanup, auth-override retarget, stats help-snapshot pruning
1 parent df1f5df commit b2a3827

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

MERGE.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ fork 与上游改了同一处(常见于 TUI 视觉/UX、core 加固逻辑)
133133
| `packages/opencode/src/cli/{cmd/tui.ts,tui/worker.ts}` (mdns 参数移除) || 保留 --mdns 检查项与 worker server 签名的 mdns 移除 |
134134
| `packages/opencode/src/project/bootstrap.ts` (ShareNext 移除) || 保留 ShareNext import/init/deps 移除 |
135135
| `packages/tui/src/config/keybind.ts` + `routes/session/index.tsx` + `feature-plugins/home/tips-view.tsx` (share 命令接线移除) || 保留 session_share/session_unshare keybind、share/unshare 命令、share 提示文案移除 |
136-
| `packages/opencode/test/cli/help/help-snapshots.test.ts` (命令清单) || 保留 acp/web/import/github/pr 从 TOP_LEVEL/SUBCOMMANDS 移除;快照变化时删除 `.snap``bun test test/cli/help` 重生成 |
136+
| `packages/opencode/test/cli/help/help-snapshots.test.ts` (命令清单) || 保留 acp/web/import/github/pr/stats 从 TOP_LEVEL/SUBCOMMANDS 移除;快照变化时删除 `.snap``bun test test/cli/help` 重生成 |
137+
| `packages/opencode/{src/cli/cmd/account.ts, server/routes/instance/httpapi/groups/sync.ts}` + 关联测试 (`test/{account,fake/account.ts,cli/account.test.ts,server/httpapi-sync.test.ts,plugin/github-copilot-models.test.ts,plugin/cloudflare.test.ts}`) | 每次 | `bun script/merge-clean.ts` 自动 `git rm` 保留删除(账号/sync 已裁剪,本轮补入 merge-clean 清单 `removedOpencodePaths` + `residualScans`|
138+
| `packages/opencode/test/plugin/auth-override.test.ts` (内置 auth 覆盖机制测试) || 保留将测试目标从已删的 github-copilot 内置 auth 改为存活的 xai(`provider: "xai"`,断言 `methods[xai]`/`plainMethods[xai][0].label`);机制不变,仅换载体 provider |
137139
| `packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts` (share/unshare 移除) || 保留 share/unshare handler 和 SessionShare import 移除 |
138140
| `packages/opencode/src/server/routes/instance/httpapi/groups/session.ts` (share/unshare endpoint 移除) || 保留 share/unshare endpoint 和 SessionPaths.share 移除 |
139141
| `packages/opencode/src/cli/cmd/run.ts` (--share 选项移除) || 保留 --share 选项和 share() 函数移除 |
@@ -152,6 +154,7 @@ fork 与上游改了同一处(常见于 TUI 视觉/UX、core 加固逻辑)
152154
| `packages/core/src/database/migration.ts` (跨进程 fenced claiming) || 保留 `{ behavior: "immediate" }` + 事务内 re-check(上游若已做可取上游版本) |
153155
| `packages/opencode/src/cli/cmd/run/footer.prompt.tsx` (@ 补全 debounce) || 保留 `debouncedQuery` 100ms debounce(上游若已做可取上游版本) |
154156
| `packages/opencode/src/cli/cmd/run/theme.ts` (muted 灰度对比度提升) || 保留 dark mode gray 200/220(上游若已做可取上游版本) |
157+
| `packages/opencode/src/{plugin/openai/codex.ts,mcp/oauth-callback.ts,plugin/xai.ts,plugin/snowflake-cortex.ts}` (OAuth 回调 HTML 转义) || 保留 `escapeHtml()` 包裹 `error`/`error_description` 插值。上游删除 `core/src/oauth/page.ts`(统一转义页)后,fork 内联的 `Authorization failed: ${error}` 存在反射型 XSS;补 `@/util/html` 转义修复(上游若恢复统一转义页可取上游版本) |
155158

156159
### TUI 偏离(四批 23 轮审计打磨,全域)
157160

PLAN.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,25 @@ SSE │ 🔴慢 5.4x │ 🟢async │ 🟡中 │ 🔴4.0MB│
125125

126126
这些偏离已计入 MERGE.md 偏离清单,后续 sync 时与上游对抗审计。
127127

128+
### 安全加固与测试套件修复(模块深度审计一轮)✅
129+
130+
在模块化深度审计中发现并处理:
131+
132+
- **反射型 XSS 修复**:上游 `a2b5baf793` 删除 `core/src/oauth/page.ts`(统一转义 OAuth 页)后,fork 的 4 处 OAuth 回调 handler 仍内联未转义的 `Authorization failed: ${error}`。用现有 `@/util/html``escapeHtml()` 包裹(`plugin/openai/codex.ts``mcp/oauth-callback.ts``plugin/xai.ts``plugin/snowflake-cortex.ts`)。已登记 MERGE.md 加固偏离。
133+
- **测试套件修复(15 失败 → 3 环境失败)**:删除已删功能的孤儿测试、修剪混合测试、移除过期断言(`autoShare`)、重定位机制测试(auth-override 从已删的 github-copilot 改为存活的 xai),并把 account CLI cmd、sync httpapi group 及关联测试补入 `merge-clean.ts` 清单。剩余 3 个失败为本地 npm registry(`registry.npmmirror.com`)环境问题,非代码缺陷。
134+
135+
### NEEDS-JUDGMENT 审计裁决(对抗审计结论:均维持现状)
136+
137+
对前一轮标记的 6 项存疑项逐一对抗审计,结论**全部维持现状(不动)**,理由记录如下(供下次复审):
138+
139+
1. **`experimental.ts` Console 路由**(console/consoleOrgs/consoleSwitch)→ **保留**。虽是账号功能删除后的空 stub,但 fork 自有 TUI 仍消费这些端点(`tui/component/dialog-console-org.tsx``context/sync.tsx:462`)且生成的 SDK 依赖其形状;删除会破坏 TUI,属"载力代码",非死码。
140+
2. **`handlers/tui.ts:13` `session_share` 别名****保留**。legacy 命令别名映射,发布未知命令对 TUI 无害;上游所有权代码,改动即冲突成本,收益为零。
141+
3. **OTEL 配置****保留(非残留)**`cfg.experimental?.openTelemetry``llm.ts`/`agent.ts` 实际生效,`workspace.ts` 正常转发 OTLP 环境变量,功能存活。
142+
4. **`build.ts` 内嵌 Web UI 路径****保留(非死路径)**`packages/app` 仍在(构建路径有 `fs.existsSync` 守卫,缺失时优雅跳过)。
143+
5. **`cli/error.ts:105` "auth login" 文案****保留**`auth login <url>` 命令经 `providers.ts` 别名(`auth``providers login [url]`)实际存活;唯一瑕疵是二进制名 `opencode` vs `ocx`,属遍布多文件的独立文案议题,非删除残留,超出本轮范围。
144+
145+
**裁决准则**:上游所有权代码的每处改动都是永久合并冲突成本,"只删不改"下的诚实默认是"保留上游",除非收益大、隔离好、冲突低。以上 6 项无一满足,故均不动。
146+
128147
## 保留包清单(12 个包)
129148

130149
```

0 commit comments

Comments
 (0)