Repository navigation
feat(logging): 接入宿主统一日志 litheLogging 1(Rust SDK 0.2.0) - #4
Merged
Merged
Conversation
- SDK 固定到 lithe-plugin-sdk-rust 0.2.0(sdk.lock.json、backend/Cargo.toml、Cargo.lock); 宿主不提供 litheLogging 1 时 SDK 拒绝 initialize。 - 终态事实交给 SDK 自动上报:成功 operationFinished(INFO),失败 operationFailed(ERROR, code 为 pluginErrorCode)。只有 KEY_OPERATIONS 里的四个关键操作上报成功事实,其余只读函数 注册后用 suppress_success_diagnostics 关闭成功事实。 - 新增 java-domain host::diagnostics:领域代码通过线程局部 reporter 上报降级类别与计数, 不依赖 SDK;后端在每次调用里用 scoped 接到 Diagnostics::degraded。 - 存储清理失败、argfile 删除失败改为上报 storage.cleanup_failed.<stage> 计数,不再写路径或消息。 - 跨插件函数的收集上报 relay.* 降级类别(提供方不可用、失败、超时、设置被拒、键被拒), 只带计数,不带键名或宿主消息。 - 删除旧的 Context::log 调用;main.rs 注册失败只打印稳定错误码。 - 测试:session 集成测试验证 litheLogging 协商、受限日志字段、只读函数的成功事实被关闭, 以及缺少 litheLogging 时 initialize 被拒;领域与后端新增 diagnostics、relay 上报测试。 - 文档:README 新增“日志”一节和级别表;预发布原因加入 litheLogging 1;MIGRATION 更新测试计数, 说明 #1742 已合入、中转形状要等支持插件函数协议 4 的 SDK 再对齐。
xiaoyumuxi
marked this pull request as ready for review
November 5, 2026 07:25
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
背景
主仓库的插件日志已统一到宿主的
litheLogging1,Rust SDK 0.2.0 删除了自由文本的Context::log,并改为自动上报每个函数的终态事实。本 PR 把 Java 插件后端接到这套日志上,不再写 stderr,日志里只有受限字段(类别、计数、耗时、操作 ID),不含路径、源码、工具输出或宿主消息。改动
1. SDK 升级到 0.2.0
sdk.lock.json、backend/Cargo.toml固定到sdk-rust-v0.2.0(commit940394fc),Cargo.lock同步(新增base64)。litheLogging1 时拒绝initialize。2. 后端的级别规则(
backend/src/lib.rs)runConfig.selectJava、debug.javaTestLaunch、execution.planLaunchCommand、java.prepareLaunch(KEY_OPERATIONS)java.runMarkers、java.codeVision、spring.index)suppress_success_diagnosticspluginErrorCode、耗时;不含消息与detailslanguageImport.settings的中转降级(列提供方失败、单个提供方失败或超时、答复不可用、答复含越界键)degraded)backend/src/plugin_functions.rsrelay.*类别与计数;不含提供方 ID 和键名degraded)crates/java-domain/src/host/diagnostics.rsstorage.cleanup_failed.<阶段>与计数plugin.json的-Dosgi.logfile=${logDir}/jdt.logfunction_error只做CoreError→FunctionError的映射,终态事实由 SDK 在 RPC 响应之前写出。key_operations_are_registered_commands_without_duplicates保证KEY_OPERATIONS都是已注册的命令且不重复。3. 领域层的降级上报(
crates/java-domain/src/host/diagnostics.rs,新文件)scoped(reporter, body)在一次调用里安装,Drop时恢复之前的 reporter;degraded(code, count)、cleanup_failed(stage, count)在没有 reporter 时什么也不做。invoke里用scoped把 reporter 接到context.diagnostics().degraded(...)。host/storage.rs:清理失败只累计次数,finish时按阶段上报一次计数,不再保存第一条错误。execution/argfile.rs:argfile 删除失败上报storage.cleanup_failed.java-argfile-remove。4. 中转降级类别(
backend/src/plugin_functions.rs)RELAY_PROVIDERS_UNAVAILABLE、RELAY_PROVIDER_FAILED、RELAY_PROVIDER_TIMED_OUT、RELAY_SETTINGS_REJECTED、RELAY_KEYS_REJECTED和RELAY_CATEGORIES。collect_contributions和record_answer接收上报回调,collect_for_call用调用上下文的diagnostics()上报。5. 入口不写 stderr(
backend/src/main.rs)initialize之前不发任何消息;函数 ID 全是编译期常量,只会因 ID 不合法、重复或超过 SDK 上限而失败,结果每次都一样。the_backend_builds_with_every_command_registered(原every_command_is_a_valid_function_id)断言构建成功,CI 挡住这类构建;main的失败分支不再打印,直接以状态 1 退出,由宿主记录启动失败。on_initialize:SDK 0.2.0 的Initialize钩子没有suppress_success_diagnostics,挪过去以后编辑器高频读取每次都会记 INFO。6. 测试
backend/tests/session.rs:initialize带上litheLogging1,并断言协商结果;新测试the_backend_reports_restricted_facts_and_suppresses_reads检查日志参数只有受限字段、只读函数的成功被抑制、失败按pluginErrorCode上报;新测试initialize_without_lithe_logging_is_refused。host/diagnostics.rs8 个测试;plugin_functions.rs新增 6 个 relay 上报测试,原测试改名为rejected_keys_are_reported_by_count_and_never_stored。7. 文档
README.md:新增“日志”一节和上面的级别表;预发布原因改为三条,第 3 条是 SDK 0.2.0 要求litheLogging1。.github/workflows/release.yml:只改注释(预发布原因三条)。MIGRATION.md:日志行改为已移植;测试计数更新为 312(领域 280、后端 32);写明 #1742 已合入、本仓库中转形状仍是草稿,第 5.7 节改为“草稿与已合入形状的差异”对照表,清单声明补上serverProcess: 1。有意推迟
languageImport.settingsChanged注册:要等支持插件函数协议 4 的 SDK(caller字段、parentOperationID)。plugin.json还没有声明backend,宿主暂时不会启动这个后端;声明之后再在 Lithe 里实测日志。litheLogging1,目前只有 Lithe 最新preview提供,稳定版还没有。验证
cargo fmt --all --check:无改动。cargo clippy --locked --all-targets -- -D warnings:通过。cargo test --locked:全部通过,领域 280、后端单元 23、repository_pins6、session3。scripts/verify-sdk-lock.sh --download:通过,SDK 归档的 SHA-256 与sdk.lock.json一致。