Skip to content

[Context Watch] Add session watch WebSocket service for live context inspection #20

Description

@zhuqingyv

目标模式执行版

目标:把 Context Watch 做成稳定的本地观测工具,辅助调试 LLM 视角、pool 和用户可见 transcript;它不是 release-ready 的核心阻塞项。

当前状态基线

以当前代码为准:

  • 已有 src/cli/watch.ts
  • 已有 ma watch [sessionId] --host --port
  • 已有 buildContextWatchSnapshot()
  • 已有 test/context-watch.test.ts 覆盖三类视图映射。

本 issue 剩余目标

完成 Context Watch v1 硬化:

  1. 非交互模式:ma watch --latest --once 输出当前 snapshot JSON 后退出。
  2. WS 协议:连接后先发 hello,再发 snapshot;事件里明确 channel 或 snapshot 类型。
  3. session 选择:支持显式 session、--latest,session 不存在时返回非 0 和清晰错误。
  4. 安全边界:默认只绑定 127.0.0.1;不输出 API key、secret、环境变量原值。
  5. 鲁棒性:缺失 sidecar、损坏 JSONL、空 pool、空 active context 都不能崩。

非目标

  • 不做远程访问/鉴权系统。
  • 不做复杂前端产品化。
  • 不在本 issue 改 agent/UI 写入侧车文件的架构;如缺写入点,另开 issue。
  • 不让 watch 依赖 Ink 或交互终端。

执行切片

  1. --once--latest
  2. 补 session 不存在、端口非法、host 安全提示。
  3. 补 WS hello / snapshot 协议测试。
  4. 补缺失/损坏 sidecar 单测。
  5. 最后再考虑文件监听/debounce;如果继续用轮询,也要写清楚设计取舍。

验收标准

  • ma watch --latest --once 可在非交互 shell 输出 JSON snapshot。
  • ma watch <sessionId> 启动本地服务,WS 连接收到 hello 和 snapshot。
  • session 不存在时 exit code 非 0,错误清晰。
  • 缺失 sidecar、损坏 JSONL 不导致 watch 崩溃。
  • 默认 host 是 127.0.0.1
  • snapshot 不包含 secret/API key/env 原值。
  • 单元测试覆盖 snapshot、server、WS hello、错误路径。
  • npm testnpm run build 通过。

#21 的关系

本 issue 是观测辅助。核心稳定性目标应先完成测试门禁、工具协议、上下文主线,再推进 watch 硬化。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions