下游插件会话事件类型的注册面:append() 无法标 ignorable,未知类型连环炸 #1748
ccch1mneyyy
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
场景
下游插件(如工作状态指示插件 dsh-working-activity)需要往会话日志里写 UI 状态帧:
session.append('activity/status', …)。这类事件是纯 UI 临时帧——不进 surface、不进模型历史,回放时应当被跳过。问题链
目前
append()没有暴露ignorable标志,而activity/status不在KNOWN_SESSION_EVENT_TYPES里。于是一个快照事件就让整个会话在严格读路径上全灭:assertEventsSupported抛unknown to this harness and not marked ignorable,整个会话无法恢复;persistence.load():同样整个抛异常——调用方(如 TUI 的会话选择器)会退化到空列表/目录名兜底;源码里其实预留了口子
known-event-types.ts的注释写着:"a registration surface for them is deferred until such a consumer exists"。消费者出现了——我们就是。:)建议(二选一即可)
registerSessionEventType(name)之类的显式注册 API;append(type, data, …)支持写时标记ignorable: true。另外提醒一个实现细节:运行时可能加载多份 dsh-session 物理副本(CLI 树与 profile 插件树在版本错位的窗口期各有一份),严格校验器只查自己那份 Set——注册 API 如果只在模块级 Set 上操作,文档里值得提醒这一点。
我们的临时方案(供参考)
在插件加载时把类型注册进所有可达的
KNOWN_SESSION_EVENT_TYPES副本(多锚点 createRequire),读取侧另有一层 resume 前补ignorable标记的迁移逻辑。都已验证可行,但官方 API 才是正解。All reactions