3.3 KiB
3.3 KiB
Findings
- Git
main起点干净并与origin/main同步。 - codebase-memory 项目
home-cc-web索引状态为ready。 - 会话运行状态的统一判定入口是
server.js中的isSessionRunning。 - 标准包源码由
lib/javascript-session-runtime.js的packageIndexSource动态注入。 - 内部脚本能力通过
handleSessionCall映射到server.js注入的sessionApi。 - 会话列表刷新入口是
broadcastSessionList,但 idle 边沿不能仅依赖 UI 广播,需要服务端可等待的状态协议或包内封装。 isSessionRunning由多个活动 Map/goal 状态综合推导;查询 API 必须直接复用它,不能另造状态字段。- 当前注入包的 HTTP
call()是短请求模型;最小可靠实现是新增服务端状态查询,监听和边沿判定由@ccweb/session内部封装,调用脚本不需要自行轮询。 onConversationEvent适合设计为异步注册:const unsubscribe = await onConversationEvent(...),注册阶段先验证会话并取得基线状态;注销函数同步停止计时器。scriptsDirFor(..., create=true)目前只在包入口不存在时写入;若不调整,已有.ccweb/scripts无法获得新增导出,因此生成包入口应在内容变化时原子刷新。- 现有运行时单测包含真实注入包 + 本地 HTTP MCP 的端到端骨架,可扩展为状态序列与注销验证。
- “等待子对话回复”已有统一来源:
crossConversationWaitState(sessionId).waitingOnChildren,其范围包括waiting、ready、delivering、failed的未处理跨对话回复。 - 状态优先级采用
running>waiting_for_children>idle,避免会话自身仍在执行时被较弱等待态覆盖。 - 持久子对话关系保存在 session meta 的
createdFromKind='mcp'与createdFromSourceSessionId;listConversationSummaries(scope='children')已验证该筛选语义。 - 新增
getChildConversationIds只返回直接子对话,按现有会话列表排序后提取 ID;不递归包含孙对话。 - 协议定型:公开
onConversationEvent使用异步注册并返回同步注销函数;包内每 100ms 串行查询状态,不产生重叠请求,调用脚本无需自行轮询。 - idle 事件 payload 为
{ conversationId, event, previousStatus, status, occurredAt };只允许事件名idle。 - 注册时先取得基线:初始为 idle 不触发;后续任一活动态(running / waiting_for_children)转 idle 才触发。
- 注销会清理定时器;已在途的状态请求返回后也会先检查 active 标记,因此不会产生注销后的新回调。
- 监听器同步抛错或返回 rejected Promise 时不静默吞掉,按脚本未捕获异常处理;状态查询故障也停止监听并使脚本异常退出。
- 动态包版本提升到 1.1.0,并在创建/写入/运行脚本时原子刷新生成的包入口,确保已有脚本目录获得新导出。
- 用户明确要求抑制等待态登记延迟产生的临时 idle:服务端 idle 查询先等待 500ms 后复核,包内事件再要求 idle 连续稳定 250ms;任一时刻观察到
waiting_for_children都取消 idle 候选。 - 子对话元数据可直接使用
compareSessionsForList排序,返回顺序与会话列表一致(置顶优先,其次最近更新)。