Skip to content

feat(logging): 接入 litheLogging 1 结构化诊断 - #5

Merged
xiaoyumuxi merged 1 commit into
mainfrom
codex/plugin-logging-v2
Nov 4, 2026
Merged

xiaoyumuxi merged 1 commit into
mainfrom
codex/plugin-logging-v2

Conversation

@xiaoyumuxi

@xiaoyumuxi xiaoyumuxi commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

概要

Cargo 插件接入结构化日志 v2:vendor 的官方 Node SDK 更新到支持 litheLogging 1 的版本,构建模型请求(lithe/build/model)的成功/失败终态由 SDK 自动上报;provider 去掉“记录后再抛出”的重复错误日志,错误信息不再拼接 Cargo 的 stderr 或异常原文。集成测试的 Core 构建脚本改为显式选择宿主来源,并校验宿主具备 litheLogging 1。

依赖:

Provider 行为(…/backend/provider.mjs)

  • 删除 context.log(error) 和 context.log(result.stderr):失败只由 SDK 在请求边界记录一次 operationFailed(ERROR),不再出现两份错误记录。
  • cargo.invalidRoot、cargo.invalidMetadata 改为固定的安全提示,不再透传 error.message(可能带路径)。
  • cargo.metadataFailed 只带退出码,不再拼接最多 2 KB 的 Cargo stderr(可能含项目内容和环境变量)。

SDK 来源(sdk.lock.json、vendor/)

  • vendor 的 Node SDK 更新为 lithe-plugin-docs 29b245c0e1d77c761d9032a3144a301d1818bfc7 加 SDK PR #17 的日志改动,新增 diagnostics.mjs、host.mjs。
  • sdk.lock.json 分开记录两种来源:
    • sdkSource:SDK 源码来源(lithe-plugin-docs 基线 commit、带 localChanges 的文件);每个文件记 source、localChanges、upstreamSha256 和当前 SHA-256。
    • coreSource:集成测试使用的宿主(https://github.com/1lck/Lithe-IDEA,ref preview,requiredCapabilities: ["litheLogging:1"])。
  • scripts/verify-sdk.mjs 增加对 sdkSource 的校验。
  • NOTICE 同步来源说明。

集成测试的 Core 来源

  • 新增 scripts/core-source.mjs:
    • identifyCore 校验宿主检出的 origin 等于 coreSource.repository,HEAD 等于所选 ref;计算 rust/ 与 shared/ 的源码摘要;宿主目录事件中没有 plugins.operation.finished 时报错 “Selected Core lacks litheLogging:1…”;有未提交改动时必须显式传 --working-tree。
    • verifyPreparedCore 在每次集成请求前重新校验源码摘要、harness 和二进制 SHA-256,构建后源码有变化即拒绝。
  • scripts/prepare-core.mjs 支持 --source、--ref、--target-dir、--working-tree:先构建 Core --lib,再用 rustc 链接 liblithe_core.rlib 编译 harness,把来源身份写进 prepared.json。不再往宿主检出里复制 example 文件。
  • CI 与 release 从 sdk.lock.json 的 coreSource 读取宿主仓库和 ref 并检出。

测试

  • 新增 test/core-source.test.mjs,覆盖来源校验。
  • test/provider.test.mjs 新增两项:
    • 元数据失败、工具缺失、模型非法三种情况下,错误信息不包含私有输出,provider 不调用 log;
    • 用真实 SDK 和 TestHost 协商 litheLogging 1,工具缺失时恰好一条 operationFailed,字段只有 code、durationMs、kind、operation、operationId,且不包含工作区路径。
  • test/integration.test.mjs、test/support/core.mjs 改为协商 litheLogging 并用新的 Core 身份校验。

验证

  • 本地:node --test 单元测试 0 失败(4 项集成测试因本机没有准备好的 Core 而跳过);node scripts/verify-sdk.mjs 通过。
  • 此前在 Codex 工作区用本地宿主分支准备 Core 后:14/14 通过(包括新 Core 集成,无跳过),覆盖真实 cargo metadata 和工具缺失;打包通过。

预期的 CI 状态与合并顺序

  • 宿主 #1699 合并进 preview 之前,CI 的 “Verify host prerequisite and build Core bridge” 会报 “Selected Core lacks litheLogging:1”,这是预期结果。
  • 合并顺序:宿主 #1699 → SDK #17(先同步 contract/v1)→ 本 PR。发布前把 sdkSource 重新固定到 SDK #17 合并后的 commit,并视需要把 coreSource.ref 固定到合并后的宿主 SHA。
  • 本 PR 没有改插件版本号。

限制

  • 只覆盖 macOS 宿主;Windows 仍是 v1 writer。
  • 未在 Lithe 整机日志窗口里做端到端验收。

配套 PR:

- vendor 的 Node SDK 更新为 lithe-plugin-docs 29b245c 加本轮日志改动,
  sdk.lock.json 分开记录 sdkSource(SDK 来源)与 coreSource(集成测试宿主)
- provider 去掉 context.log 的重复错误日志;失败只由 SDK 请求边界记录一次,
  错误信息不再拼接 Cargo stderr 或异常原文
- prepare-core 支持 --source/--ref/--working-tree/--target-dir,校验宿主
  origin、ref、源码摘要和 litheLogging 目录前提,构建期间源码漂移即拒绝;
  不再往宿主检出里复制 example
- CI 与 release 改为检出宿主 preview;README 补充诊断日志与 Core 集成来源说明
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 4, 2026 10:51
@xiaoyumuxi
xiaoyumuxi merged commit 3b2f4dc into main Nov 4, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant