Skip to content

♻️ sdk: 简化批——token 估算口径矛盾、四份 writeFileAtomic、registry 双轨、@ts-nocheck 摘除 #389

Description

@CavinHuang

严重度: P3(质量)

全量 review 发现的重复实现与口径矛盾收敛清单:

口径矛盾(优先)

  1. estimateToolSchemaTokens 漏算 inputSchema:engine.ts:521-526 只算 (description+name)/4,同仓 tool-search.ts:34 的 getDeferredToolTokenCount 是 name+description+JSON.stringify(inputSchema)。30+ 工具 schema 可达上万 token——无 provider 锚点时 toolSchemaTokens 系统性偏低。且 estimateToolSchemaTokens 与 getContextUsage 内联(:2145-2148)还有一份重复实现
  2. usage.ts:124 createAgentProgressTracker 混用绝对/累计语义(inputTokens 取快照、outputTokens 累加)——当前在死代码清单(🔥 sdk: 死代码大扫除第二批——宿主旁路的五整块子系统 + 死 API 面(PR#283 续篇,~2000 行) #388),若保留须统一口径

重复实现收敛

  1. writeFileAtomic 四份拷贝:edit.ts:201 / write.ts:147 / notebook-edit.ts:245 / lsp-tool.ts:1115(仅后缀不同)→ 抽 utils 一处
  2. skills/registry.ts 双轨:全局单例函数组(:79-251) 与 SkillRegistry 类(:11-76) 平行维护两套注册/别名/归一化逻辑 ~150 行
  3. commandToolFromManifest(loader.ts:251-305) 复刻 buildCommandToolDefinition(:112-181) ~55 行且缺 sandbox 分支(在 🔥 sdk: 死代码大扫除第二批——宿主旁路的五整块子系统 + 死 API 面(PR#283 续篇,~2000 行) #388 死代码块内,随删)
  4. validateManifest(manifest.ts:420) 与 normalized.ts:135 逐字相同
  5. sliceSessionMessages 两份逐字符相同(agent.ts:135 / session.ts:293)
  6. retry 错误分类三元链在流式/非流式两条路径重复(engine.ts:1243-1251 vs 1273-1281)
  7. truncateText 双份(messages.ts:346 零调用 + mcp/manager.ts:382 私有版)
  8. 内容块联合类型三套平行定义(types.ts:6-20 与 providers/types.ts:62-67 字段几乎逐一对齐),normalizeMessagesForAPI/fixToolResultPairing 全程 any 消解了收益

@ts-nocheck 摘除

  1. web/scrapers/*.ts 74/74 文件首行 @ts-nocheck(~11k 行绕过 typecheck;🐛 fix: packages review 批次 #232-#246(实修 12 项,#233-#235 已修随附关闭) #273 摘过 SDK 其他文件,scraper 层遗留)

其他

  1. types.ts(1718 行) 与 types/ 目录(仅 3 个第三方 ambient 声明)名字撞车易误导;types.ts 本体混杂十个域 + class AbortError,建议按域拆分
  2. SDKMessage 联合成员导出面不齐:SDKRunAbortedMessage/SDKLspDiagnosticsMessage/SDKMemorySavedMessage 等实际发出的类型未导出,sidecar 只能 Extract 取形状——要么补导出要么立规则
  3. stopReason: ...|string(providers/types.ts:85)等 | string 吸收字面量致 narrowing 失效

来源: packages/sdk 全量 review 第二轮(2026-08-22,PR#283 后),发现已逐条代码实证。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions