Skip to content

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

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

概要

Maven 插件接入结构化日志 v2:后端改为直接编译 vendor 的官方 Java SDK 生产源码(支持 litheLogging 1),构建模型请求的成功/失败终态由 SDK 自动上报到 plugins/io.github.lithe-idea.maven-build/host;原来 backend.log 写 stderr 的三处改为受控的 WARN degraded 事实,Maven 失败时不再额外打印构建输出。同时去掉远程 SDK JAR 下载,改为按逐文件 SHA-256 校验 vendor 源码。

依赖:

诊断行为(backend/src/…/maven/backend/)

  • MavenBackend:没有 --state 目录时,backend.log("No --state directory…") 改为 degraded("initialize", "maven.stateUnavailable")。
  • MavenRuns:
    • 读取过程中项目发生变化时,改为 degraded("lithe/build/model", "maven.inputsChanged")。
    • 删除 backend.log("Maven exited with status …:\n" + output)。失败只由 SDK 在请求边界记录一次 operationFailed(ERROR),构建输出属于响应,不进诊断流。
  • Snapshots:快照保存失败改为 degraded("lithe/build/model", "maven.snapshotSaveFailed"),不再拼接异常信息(可能带路径)。
  • 成功终态(INFO)和失败终态(ERROR)由 SDK 自动产生,带单调耗时和稳定分类;取消不记失败。

SDK 来源:从远程 JAR 改为 vendor 源码

  • backend/pom.xml:
    • 删除 system scope 的 lithe-plugin-sdk-java:0.1.0(${lithe.sdk.jar})依赖和 maven-shade-plugin。
    • sourceDirectory 指向仓库根,maven-compiler-plugin 3.14.0 只编译 backend/src/main/java/** 和 vendor/lithe-plugin-sdk-java/src/main/java/**(仍按 Java 8)。
    • jar manifest 指定 mainClass。
  • vendor/:官方 Java SDK 的 15 个生产源码和 Apache-2.0 LICENSE,不带测试、JAR 或 target。
  • sdk.lock.json 改写为源码锁:
    • 记录上游基线 lithe-plugin-docs 29b245c0e1d77c761d9032a3144a301d1818bfc7 和本轮日志改动说明。
    • 每个文件记 upstream、path、sha256;有本地改动的 7 个文件(Backend、CallContext、Cancellation、Diagnostics、HostChannel、PluginError、Processes)另记 localChanges 和 upstreamSha256。
    • 不声称存在已发布的 SDK 版本,也没有沿用旧 JAR 的校验值。
  • 新增 scripts/sdk/verify-sdk.mjs:校验锁文件结构和每个 vendor 文件的 SHA-256,发现漂移、遗漏、非普通文件或未登记的额外文件就拒绝。
  • scripts/package.mjs:
    • 删除 SDK JAR 下载、.cache/sdk、LITHE_SDK_JAR 覆盖和发布时的 SDK sha256 检查。
    • 编译前先跑 verifySdk,不再传 -Dlithe.sdk.jar。
    • 安装包附带 SDK-LICENSE(来自 vendor/LICENSE)。
  • CI 新增 “Verify vendored Java SDK sources” 步骤;verify-scripts.mjs 的检查范围加入 vendor。
  • NOTICE 增加 SDK 的 Apache-2.0 来源说明;README 更新目录说明、SDK 更新流程和发布检查项。

测试

  • scripts/backend-client.mjs:initialize 提供 litheLogging: {versions:[1]},并把收到的 lithe/log 收集到 diagnostics。
  • scripts/test-backend.mjs:假 Maven 失败时,最后一条事实必须是 operationFailed / lithe/build/model / maven.loadFailed,不包含伪造的失败输出,且 stderr 为空。
  • scripts/test.mjs 新增 “model diagnostics use one typed terminal without Maven output”:真实 Maven 读取模型后恰好一条 operationFinished,字段只有 durationMs、kind、operation、operationId,operationId 为请求号,stderr 为空。

README 新增“诊断日志”

  • 写明本分支要求宿主提供 litheLogging: 1,事实写入当前会话的 plugins/io.github.lithe-idea.maven-build/host。
  • 模型快照仍在 ${workspaceStateDir},不搬到会话日志目录。
  • 完整构建输出属于 Build Output,模型和依赖树 JSON 属于工作流数据,都不进日志。
  • 排障用 Lithe 的日志窗口和诊断导出。
  • Windows 仍是 v1,不声明 Windows v2 已验收。

验证

  • 本地按 CI 的步骤执行(Java 17、本机 Maven 3.10.0):
    • node scripts/test-process.mjs 8/8 通过。
    • node scripts/sdk/verify-sdk.mjs 通过。
    • node scripts/package.mjs 5/5 通过。
    • node scripts/test-backend.mjs(假 Maven)16/16 通过。
    • node scripts/test.mjs(真实 Maven)17/17 通过,包含上面新增的单条终态检查。
  • 未在本机跑 CI 矩阵里的 Java 8 和 Maven 3.6.3 组合,也没有跑 Lithe Store 规则校验,交给 CI。

预期的 CI 状态与合并顺序

  • 本仓库 CI 用假 Maven 和真实 Maven 直接驱动后端,不检出宿主,所以不会因为 #1699 尚未合并而失败。
  • 但新 SDK 要求宿主支持 litheLogging 1,必须等宿主 #1699 进入可发布版本后才能发布本插件,否则在旧宿主上 initialize 会失败。
  • 合并顺序:宿主 #1699 → SDK #17(先同步 contract/v1)→ 本 PR。
  • 发布前把 vendor/ 和 sdk.lock.json 重新固定到 SDK #17 合并后的 commit。当前 vendor 副本早于 SDK #17 rebase 后加入的快捷键导入改动,Backend.java、Diagnostics.java 与 SDK PR 现在的版本不同;本插件不提供快捷键导入,功能上不受影响,但发布前仍要统一重新固定。
  • 本 PR 没有改插件版本号。

限制

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

配套 PR:

- 后端改为直接编译 vendor/ 下官方 Java SDK 的生产源码(基线 lithe-plugin-docs
  29b245c 加本轮日志改动),去掉远程 SDK JAR 下载、LITHE_SDK_JAR 覆盖和 shade
- 新增 scripts/sdk/verify-sdk.mjs,按逐文件 SHA-256 拒绝漂移、遗漏或额外文件,
  CI 与打包都会先跑;安装包附带 SDK-LICENSE
- backend.log 改为受控事实:无 --state 目录、快照保存失败、读取中项目变化
  各记 WARN degraded;Maven 失败不再额外打印构建输出,只由 SDK 记录一次 ERROR
- README 与 NOTICE 补充诊断日志和 SDK 来源说明
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 4, 2026 10:56
@xiaoyumuxi
xiaoyumuxi merged commit ac0797f into main Nov 4, 2026
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