[Feature] 日志 v2 未覆盖的来源:Monaco 控制台、远端 lithe-remote-server、Windows 仍是 v1

オープン
#1,680 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
14/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
rust, swift, typescript

調査の方向性

This spans three separate areas: the Monaco console forwarding, the rust/lithe-remote/src/server/ and src/bin/lithe-remote-server.rs stderr paths, and the Windows v1 log page. Start with the scanRepository exclusions in scripts/logging/verify-log-usage.mjs and the Rust Core diagnostics/ module. Done means the new sources appear in the log window and diagnostic bundle, and the logging gate passes with zero violations. Design decisions should be settled first.

索引モデルが issue の本文から書いたものです。

説明

area:logging enhancement P2 platform:cross-platform review: high
Problem to solve / 要解决的问题

结构化日志 v2 已经覆盖:

  • macOS Swift;
  • Rust Core;
  • 链接进 Core 的辅助库(agent-host、git-host、ide-host、lithe-remote 客户端)。

语言服务、插件宿主和 Git 子进程的 stderr 也已经作为目录事件进入日志。日志用法门禁 scripts/logging/verify-log-usage.mjs 对这些范围要求零违规。见 #1676(PR3)和 PR4(分支 claude/logging-v2-window)。

还有三类来源没有进入 v2。排查时,日志窗口和诊断包里看不到它们,只能去别处找,或者根本找不到:

  1. macOS 编辑器 Monaco(WKWebView)的 JS 控制台。 页面里的 console.error / console.warn、未捕获异常和未处理的 Promise rejection 没有转发给宿主,只有打开 Web Inspector 才能看到。发布版用户遇到编辑器脚本错误时,日志窗口和诊断包里没有任何记录。
  2. 运行在远端主机上的 lithe-remote-server。 rust/lithe-remote/src/server/ 和 src/bin/lithe-remote-server.rs 里约 19 处 eprintln!,守护进程把 stderr 追加到远端状态目录里的纯文本日志。本地日志窗口和诊断包都拿不到这些内容,排查远程问题时要 SSH 到远端手动翻文件。门禁目前显式排除了这两个目录。
  3. Windows 仍是 v1 日志。
    • 写入的还是 v1 格式,入口是“设置 → 工具 → 日志与诊断”页。
    • 没有独立日志窗口,也没有目录事件。
    • 门禁不扫描 Windows 代码。

插件自己输出的日志不在本 issue 范围内。

Proposed solution / 建议方案

三部分可以分别交付:

  1. Monaco 控制台
    • 在编辑器页面注入只读的转发脚本,把 console.error / console.warn、window.onerror 和 unhandledrejection 经已有的 litheEditor 消息通道交给宿主。
    • 宿主记录为限流的目录事件(例如 editor.web.console),只带级别、来源脚本的相对标识、消息摘要和稳定类别。不记录文档内容、用户代码或完整调用栈里的绝对路径。
    • console.log 默认不转发,只在开启详细诊断时转发。
  2. 远端 lithe-remote-server
    • 服务端把关键失败(连接、会话、守护进程、上传、文件系统、进程管理)改为结构化事件。
    • 事件经已有协议连接回传给客户端,由 Core 按目录校验、脱敏后进入本地日志。连接不可用时,服务端在远端状态目录按 v2 格式落盘;导出诊断包时,客户端经连接拉取最近的有界片段。
    • 完成后把这两个目录纳入日志门禁。
  3. Windows 迁移到 v2
    • Windows 改为写入 v2 格式,用独立日志窗口替代设置里的日志页。
    • 直接复用 Rust Core diagnostics/ 里已有的过滤解析、折叠键、事件分布、调用链摘要、复制格式和导出清单。
    • 门禁扩展到 Windows 源码。
    • 跨平台功能矩阵中 diagnostics-export 和 lsp-status-logs 的 Windows 状态随之更新。

完成标准: 上述来源的警告和错误都能在日志窗口按通道和事件过滤,并出现在诊断包里;门禁覆盖新范围且零违规。

Target platform / 目标平台

Cross-platform / 跨平台

Area / 模块

Other / 其他

Priority / 优先级

P2 / 后续考虑:目前不着急,可安排到后续版本

Alternatives considered / 已考虑的替代方案
  • Monaco:开发构建里可以用 Web Inspector 查看控制台,但发布版用户无法使用,诊断包里也没有。
  • 远端服务:现在只能 SSH 登录远端主机,手动查看状态目录里的纯文本日志,没有脱敏,也没有和本地操作的 op 关联。
  • Windows:继续使用 v1 日志页能满足基本导出,但没有过滤语法、调用链和提示跳转日志等能力,两端行为不一致。
Additional context / 补充信息
  • 设计依据:macOS 端日志窗口和门禁规则见 .agents/notes/implemented/feature/2026-11-03-structured-logging-log-window.md 和 .agents/skills/develop-lithe/references/logging.md。
  • 门禁排除:当前排除的目录写在 scripts/logging/verify-log-usage.mjs 的 scanRepository 中。
  • Windows 时机:macOS 一次切到 v2、旧 v1 日志不再显示。Windows 迁移按既定取舍放到以后单独进行。
Checklist / 提交前检查
  • I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复建议。
主要言語
TypeScript
スター
1.8k
フォーク
151
平均マージ
11時間 41分
マージ済み PR(30日)
416

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

1lck/Lithe-IDEA のほかの issue

1lck/Lithe-IDEA の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。