展开本页目录
开始前准备什么
- 下载练习包,先阅读 README 中的依赖和运行范围。
- 使用独立练习目录;starter 是待完成任务,reference 是作者参考实现。
- 账号型功能须在自己的授权环境执行;本题不要求提供真实凭据。
- 保留跨文件合同
- 连接真实诊断
- 定位类型错误
- 约束Agent补丁
- 回读修复诊断
- 加业务边界
- 交付诊断对照
先下载样例,再完成自己的首次调用
示例不含密钥。API 按实际用量计费;下载和点击不代表调用成功。
LSP 没诊断时,先验证是否被配置关闭
OpenCode 1.3.13;本地命令核验。没有模型请求。
在隔离项目写 const count: number = 'oops',在 opencode.json 设 lsp: false。
运行 opencode --pure debug lsp diagnostics input.ts,记录输出与退出码。
如果结果没有 TypeScript 诊断,先检查 LSP 配置和语言服务器状态,再用原教程的两文件样本复测。
没有诊断不证明源码没有错。新增复验仅覆盖关闭状态,不证明语言服务器已安装或完成修复。
- 通过:LSP 关闭时无诊断
- 通过:未发模型请求
- 通过:CLI 已执行
本地样例复跑
python3 lab.py --output ./result o041. 保留跨文件合同
models.ts定义massGrams为number。坏调用把1200写成字符串;先保留共享类型,不能为了通过检查改成any。
2. 连接真实诊断
在自己的OpenCode检查TypeScript LSP状态。作者参考直接启动真实tsserver,按协议打开文件并请求semanticDiagnosticsSync。
本题本地命令
TSSERVER_JS="<typescript/lib/tsserver.js>" node lsp.mjs3. 定位类型错误
回读2322及relatedInformation:调用端第二行和models.ts属性声明关联起来。不是凭截图猜哪个文件应修改。
4. 约束Agent补丁
要求只修调用方数值输入,保留克单位与destination枚举。禁止ts-ignore、any或放松共享类型来消除红线。
5. 回读修复诊断
打开fixed.ts并请求相同原生诊断。坏输入有2322,修复后body为空,两个查询使用同一工具链。
6. 加业务边界
在自己的任务中补空值和单位错误测试。类型诊断不证明运费算法正确,也不能把克与千克混为一谈。
7. 交付诊断对照
保存源码、原生前后诊断和实际修改范围。页面展示tsserver输出,OpenCode账号生成补丁仍需单独运行。
怎样确认已经完成
- 不是仅tsc退出0
- LSP指向的两个错误消失,正常/空值行为均正确
- 已运行 TypeScript tsserver 原生协议,跨文件得到2322诊断并在修复后清空;未调用OpenCode模型或伪装OpenCode会话。
常见问题
OpenCode 为什么改完代码还看不到类型错误?
让Agent读取LSP返回的诊断及关联定义位置,再限制补丁只修真正错配的调用端。本题实际以tsserver取得跨文件2322诊断。
怎么让 Agent 根据跨文件 LSP 报错修对接口?
先确认诊断归属文件和更新版本,再请求修复后的诊断。不要用any、ts-ignore或改共享类型把错误隐藏;还需另做业务测试。
哪些功能已经实际执行?
已运行 TypeScript tsserver 原生协议,跨文件得到2322诊断并在修复后清空;未调用OpenCode模型或伪装OpenCode会话。




