claude-code-best/docs/plans/tsc-decompile-fix-plan.md
James Feng 315b0bd80e fix(tsc): Phase 1 — add 25 stub files, eliminate all Cannot find module errors (270→204)
- 25 stub files: types/tools, types/utils, contextCollapse, mcpSkills, etc.
- 11 reused from chore/bridge-green, 14 created from scratch
- All stubs documented in docs/devlog/02-tsc-stubs.md
- Build passes, tests not regressed
2026-06-07 10:41:02 +08:00

110 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TSC 类型错误修复计划 — 反编译残留235 个)
> **目标:** 基于 `chore/bridge-green`1 错误)参考,修复 acp 分支 270 个类型错误中的 235 个反编译残留(排除 35 个社区自写代码 bug
**基线:** `chore/bridge-green` commit `27682acf` — 1 error
**当前:** `acp` — 270 errors排除社区代码后 235
---
## 错误分类
### A 类:缺文件 stub75 errors
| 缺失模块 | 引用次数 | Bridge-green 状态 |
|---|---|---|
| `src/types/tools.js` | 17 | 文件不存在但无引用(或导出已补齐) |
| `src/types/utils.js` | 15 | 同上 |
| `src/services/contextCollapse/persist.js` | 3 | 同上 |
| `src/services/contextCollapse/operations.js` | 2 | 同上 |
| `src/services/compact/snipProjection.js` | 3 | 同上 |
| `src/types/messageQueueTypes.js` | 3 | 同上 |
| `src/skills/mcpSkills.js` | 2 | 同上 |
| `src/services/skillSearch/signals.js` | 2 | 同上 |
| `src/services/compact/cachedMCConfig.js` | 1 | 同上 |
| `src/utils/toolSearch.js` | 1 | 同上 |
| `src/utils/postCommitAttribution.js` | 1 | 同上 |
| `src/memdir/memoryShapeTelemetry.js` | 2 | 同上 |
| `components/messages/SnipBoundaryMessage.js` | 1 | 同上 |
| `components/messages/UserGitHubWebhookMessage.js` | 1 | 同上 |
| `components/messages/UserForkBoilerplateMessage.js` | 1 | 同上 |
| `components/messages/UserCrossSessionMessage.js` | 1 | 同上 |
| `components/permissions/.../ReviewArtifactPermissionRequest.js` | 1 | 同上 |
| `components/design-system/Byline.js` | 2 | 同上 |
| `components/design-system/Dialog.js` | 2 | 同上 |
| `components/design-system/KeyboardShortcutHint.js` | 2 | 同上 |
| `tools/ToolSearchTool/constants.js` | 2 | 同上 |
| `commands/peers/index.js` | 1 | 同上 |
| `commands/fork/index.js` | 1 | 同上 |
| `environment-runner/main.js` | 1 | 同上 |
| `self-hosted-runner/main.js` | 1 | 同上 |
| 其他零散 | ~5 | 同上 |
**修复策略:** 每个缺失文件创建最小 stub注释标记为 `// STUB: 待补全`。**每个 stub 必须在 `docs/devlog/02-tsc-stubs.md` 中详细记录**,包含:
- 文件路径
- 被哪些文件引用
- 最小导出内容
- 补全优先级(高/中/低)
### B 类:`unknown` 类型泛滥78 errors
| 重灾区文件 | 数量 | 根因 |
|---|---|---|
| `src/utils/task/framework.ts` | 9 | `getState()` 返回 `unknown` |
| `src/utils/teammate.ts` | 8 | 状态对象类型为 `unknown` |
| `src/hooks/useCancelRequest.ts` | 7 | 任务对象类型丢失 |
| `src/commands/context/context-noninteractive.ts` | 8 | `contextCollapse` 方法类型缺失 |
| `src/components/PromptInput/PromptInput.tsx` | 7 | 多处 `unknown` 参数 |
| `src/components/ContextVisualization.tsx` | 7 | 同上 |
| `src/components/TokenWarning.tsx` | 6 | 同上 |
| 其他 | 26 | — |
**修复策略:** 逐文件加类型标注,参考 bridge-green 版本。部分 `unknown` 来自缺失的类型定义文件(与 A 类关联)。
### C 类:缺导出/缺名字27 errors
| 根因 | 数量 | 修复 |
|---|---|---|
| `Cannot find name 'feature'` | 2 | 加 import |
| `Cannot find name` — contextCollapse 方法 | ~10 | 补 contextCollapse/index.js 导出 |
| `Cannot find name` — 其他 | ~13 | 逐项补 import 或 stub |
| `no exported member` | 2 | 补导出 |
### D 类类型不匹配50+ errors
| 类别 | 数量 | 修复 |
|---|---|---|
| Property 不存在 | ~40 | 加类型字段或 `as` 断言 |
| 类型转换错误 | 4 | 加 `as unknown as` |
| 重复标识符 | 2 | 删重 |
| 参数类型错误 | ~10 | 收窄类型 |
---
## 执行顺序
### Phase 1A 类——批量建 stub预计消 75 错误)
1. 创建 `src/types/tools.js` stub
2. 创建 `src/types/utils.js` stub
3. 创建其他缺失文件的 stub
4. 记录所有 stub 到 `docs/devlog/02-tsc-stubs.md`
### Phase 2C 类——补导出和名字(预计消 27 错误)
1.`contextCollapse` 导出
2.`feature()` import
3. 补其他缺失的名字
### Phase 3B + D 类——类型收窄(预计消 130+ 错误)
1. 从 bridge-green 逐文件参考修复
2. 优先高密度文件task/framework.ts 9 个teammate.ts 8 个)
---
## 约束
1. **不修社区代码**ACP、RCS、Bridge、autofix-pr、swarm、ssh 等社区自写功能
2. **每个 stub 必须文档化**`docs/devlog/02-tsc-stubs.md` 详细记录
3. **构建必须保持通过**:每批修复后 `bun run build`
4. **测试不能回归**:每批修复后 `bun run test`
5. **不引入 `as any`**:用正确类型或 `// @ts-expect-error` 标注