# 群房间 + 话题会话:v2.0 产品法 > 版本:v1.23(决策 56:待办 + AI推进从公开仓撤出,见 §13;v1.22 = 决策 55:丢进群 UI 退役,见 §12;v1.21 = 决策 53:话题功能面退役删除,见 §11;v1.20 = 话题功能 UI 撤下——决策 50) > 日期:2026-08-19(v1.19 / v1.18 / v1.17 / v1.16);2026-08-18(v1.6 / v1.5 / v1.4 / v1.3 / v1.2);v1.1 2026-08-17 下午;v1.0 2026-08-17 上午 > 决策人:Guoxin Shan > 定位:**v2.0 产品法**,覆盖 [`dsh-home-session.md`](dsh-home-session.md) v1.x 的会话基数与视图模型(D2/D3/D5/D6),以及 [`dsh-home-transcript.md`](dsh-home-transcript.md) 的融合视图与 composer 双意图条款(T2/T10/T11)。存储事实(T1:①② 不进 `Session.append`)与写路径(D9)继续有效。机器人协议仍见 [`robot-channel-plan.md`](robot-channel-plan.md);其 §3.6 S1 的 per-thread 锚定在本法复活(见 §5)。 > 缘起:v1.x 融合一条流落地后,用户两次反馈「双发送复杂」「群对话和 agent 对话没打通」;第一性分析定位为模型错误而非交互细节(§1);「群房间 + N 话题」可交互原型走查通过(2026-08-17)。 > 对照:实现缺口记 [`../status/gap-analysis.md`](../status/gap-analysis.md) §23。 --- ## 0. 北极星 **一个云之家群 = 一个群房间 + N 条话题会话。群房间是 IM 桥(读群、轻发送、长话题),话题会话是 agent 对话(工作发生地)。每个视图只有一个发送动词。** DSH 仍是唯一家园(D1 精神不变):群房间和话题都住在 DSH 里,云之家仍是投递面与召唤面。被取代的不是「家园在 DSH」,而是「一个群挤进一条会话、四类消息共一条流」。 --- ## 1. 为什么推翻融合一条流(决策依据,第一性) 五条公理: 1. **两种对话物理性质不同**:群聊公开、低密度、中断驱动、说话即全部效果;agent 会话私密、高密度(长回复 + 工具卡)、专注驱动、有副作用。压进一条流互相摧毁节奏。 2. **可见性边界跟容器不跟条目**:同一条流里 ①② 公开、③④ 私密,用户要逐条判断「别人看得到吗」,看错即泄密。容器级(这个视图=公开,那个=私密)一眼即懂。 3. **一个输入框一个动词**:双发送按钮或「助手|本群」模式切换都是在收认知税,且模式残留误发进群踩中不可撤回的高风险侧。 4. **空间 : 任务 = 1 : N**:群活几个月,一个 agent 任务活几小时。1:1 绑死两者寿命 → mega-session、上下文爆炸、找不到历史任务。 5. **群是多人的,任务是并发的**(决定性):张三让机器人排期、李四让它查 bug,1:1 意味着所有人的任务挤同一条 session 时间线,人找不到、模型上下文互相污染。 历史订正:robot-channel §3.6 S1 最初就是 per-thread 多会话(对齐 Claude Tag),v1.8 收成 1:1 的理由是「工作藏在隐藏 `yzj-robot-*` 里看不见」。**1:1 是对『隐藏』的过度矫正——病根在不可见,不在多条。** 本法以「话题必须在群房间可见列出」治本(R4 不变量 3),锚定机制照抄 S1。 --- ## 2. 决策表 | # | 决策 | 结论 | 理由 | |---|---|---|---| | R1 | 基数 | **1 云之家群 ↔ 1 群房间 + 0..N 话题会话**(取代 D2 的 1:1) | 公理 4/5;1:1 mega-session 与多人任务互串在结构上装不下 | | R2 | 视图与发送 | **两种视图各配唯一发送动词**:群房间发送 = 本人发进群(无卡);话题/私聊发送 = 问助手。融合一条流、composer 双意图、dock「发进群」全部退役 | 公理 1/2/3;用户两次「感觉怪」都是压缩症状 | | R3 | 话题入口 | 四个入口长出**同一种对象**:DSH 群房间消息「交给助手」;云之家顶层 @机器人;回复链带 @ 续接;私聊「丢进群」(落地 ② + 可选新话题) | 群侧 @机器人 = 「交给助手」的孪生手势;入口多、对象一 | | R4 | 锚定 | **(yzjConversationId, rootMsgId) → topicSessionId** 映射表;机器人出站帖子 msgId 登记回同话题;顶层每个新 @ = 新话题(幂等:同根重复 @ = 续)。复活 robot-channel S1,但**话题必须在群房间可见列出**(不变量 3) | Claude Tag 的 thread 锚思路;云之家无 thread 原语,回复链(replyMsgId/rootMsgId)即话题 | | R5 | 续接手势 | 回复链上续话题**须带 @机器人** | 协议保守:云之家默认只投递 @ 消息;「回复机器人不带 @ 是否送达」是 robot-channel 开放问题 7,未验证前不赌 | | R6 | 可见性 | 跟容器:群房间 = 公开面(组织内),话题会话 = 私密工作面(DSH 本机)。agent 产出经确认卡投回群房间/回复链。**D9 写路径原封不动**(用户发无卡 / agent 发标准确认 / 删除强确认) | 公理 2;闸门看发起者不变 | | R7 | 群房间边界(红线) | **只做桥**:读群时间线、轻发送、从消息长话题、显示助手帖子及话题回链。轻发送 = CLI `im message send` 全集(回复、@ / @all、正文表情、图、文件)。身份/媒体复用悬浮窗渲染器;**布局跟 canvas**:自己靠右气泡、他人靠左(头像 + 名 · 时)、助手帖子左边强调;行操作 hover 才出。禁止用人名占位「群消息」。**接不上因无 CLI**:表情回应、已读回执、撤回、转发、名片、群管理——不造假按钮。悬浮窗第二聊天淘汰:挑群 = 打开群房间;球保留给知识库/日程/待办 | 做全 IM 做不过云之家原生;缺身份则桥不可读。CLI 没有的命令不假装有。**(v1.1:尾句「悬浮窗淘汰第二聊天、球保留」被 R16 改写——球与悬浮窗整体退役,四页签迁入工作台)** | | R8 | 存储分工 | 群房间时间线 = **插件消息日志**(沿用 `yzj_home_logs` 语义与 T1/T7/T8/T9:主键 `(yzjConversationId, msgId)`、回填、去重),按群索引,不再从属单一 dshSessionId;话题会话 = **官方 harness session**(③④ + 工具/确认审计);话题内展示的回复链续接消息是日志行的**投影**,不 `Session.append` | T1 是 harness 硬约束;新模型天然顺纹——群消息本就不用挤进 agent session,不再需要融合画布魔法 | | R9 | 机器人出站帖子 | **进群房间时间线**(说话人=助手,标「来自话题 X」回链);在话题会话内是 ④ 终态「已投递」。改写 T12(原「不进日志防双影」):两个容器不再双影,群房间需要完整群脸 | 群成员在云之家看得见的帖子,群房间必须同样看得见;回链解决「它从哪来」 | | R10 | 话题身份 | 标题默认取锚消息摘要(可改名);session id 前缀 **`yzj-topic-`**(群房间宿主保留 `yzj-home-`);共享助手身份,`allowFrom` 白名单内任何人可续(D4/D6 精神) | 可指认、可枚举;**WRITE_SPECS `whenSession` 必须同步覆盖 `yzj-topic-*`**——pitfall-012 的教训:闸写在 id 前缀上,id 空间变了闸必须跟着走 | | R11 | 确认卡落点 | 人在 DSH 聚焦该话题 → GUI 卡;群侧发起且无人聚焦 → 群内建议卡(ConfirmBroker,@机器人 确认 N)。同一 writeId,两面同一张卡(T13 机制沿用,认领范围扩到 `yzj-topic-*`) | 既有机制平移,不发明第二套 | | R12 | 导航落点 | 官方会话列表仍平铺(harness 只按工作区分组,没有 IM 树)。**群空间树内嵌在侧栏脚**(`sidebar.footer.action`,文档流,不是浮层):已打开的群房间为父行,话题缩进挂在其下(对齐原型「群空间」);父行可折叠话题;点行 = focus。树分「已打开 / 最近」两区;未打开的也可点开成群房间,「加载更多会话」翻页,与悬浮窗会话列表同一 CLI 源。官方列表标题仍用「群名 · 话题」作双通道。对话格:群房间 IM 视图占住;话题用官方 Chat + 头部锚点卡 | harness 侧栏无树形原语,工作区 ≠ 云之家群。**不**用 `id: 'chat'` 替换官方 Chat。做法:侧栏脚内嵌树 + 标题前缀;群房间自动切「群聊」view 并藏 tab ring;`conversation.composer` takeover「发进群」;话题/未绑定**必须点「对话」**把持久化 view 拨回官方 Chat,不能只藏「群聊」tab(R22)。不 fork harness。**(v1.1:侧栏树整体被 R15 改写——树退役,导航改为「云之家」入口块 + 工作台三栏;标题前缀与 view/composer 占用不变)(v1.2:官方列表标题改为「话题 · 群名」——群名前缀在窄侧栏截断后整列同名不可区分,见 gap-analysis 2026-08-18 批注;工作台内展示用 `topicNavLabel` 剥离群名缀,新旧两种方向都剥)** | | R13 | 未绑定私聊 | 不变(D7/D8 全保留):单一发送、无群流、「丢进群」默认摘要 + 确认卡,着陆群房间 ②,可选顺势开新话题续工作。拖入引用已退役(R23),@ 仍可插 chip | 私聊与群工作可分的原则未被挑战 | | R14 | 群房间宿主必须非 blank(v1.8 维持) | 打开时写一次已关闭空 turn + `session/title`。不调用模型、不写 ①②。房间不是官方「云之家」行(R20),但必须是「已开过回合」的 conversation,否则没有 tab ring,`conversation.view` 挂不上 | 官方「新会话」= blank:只在 current 时露一行、点走即藏。试过让挂钩走这条(v1.8 草案):侧栏是干净了,点「对话」主面停在「选择工作区 / 新会话」,`yzj-room-shell` 为 0,并可能栈溢出。blank 与「能挂工作台」是同一开关的两面,不能两全 | | R15 | 导航(v1.1,改写 R12 树;v1.11 载体改 R27;v1.17 入口改 R31) | **云之家工作台三栏**:左边一个「云之家」入口打开中间栏盖层(R27);四域用工作台**顶栏页签**切(对话 / 待办 / 日程 / 知识库)。对话域中栏 = **统一会话列表**;右栏 = 时间线常驻 + **话题抽屉**。侧栏树、时间线话题 chips、话题整面页签、侧栏脚四钮全部退役。**记忆入口搁置**(R21) | 树形塌陷、侧栏被群列表挤占;四域并排入口和官方侧栏抢注意力。用户原话「对话日程那些有多个入口不太对,应该统一左边一个入口然后用页签」 | | R16 | 悬浮球退役(v1.1,改写 R7 尾句与 D5) | 悬浮球 + 悬浮窗面板整体退役:四页签(会话 / 待办 / 日程 / 知识库)迁入工作台各域;`shell.overlay` 注册摘除;composer 为球预留的 72px 空白删除(pitfall-017 根除) | 工作台全量承接后浮层无剩余职责;球是 pitfall-017 的坑源 | | R17 | 单聊房间(v1.1,推广 R1) | **1 云之家会话 = 1 房间**:单聊 = 无话题抽屉的房间会话,复用 `yzj-home-*` 全套(本人身份直发、消息日志、确认流豁免、R14 宿主非 blank);话题仍只挂群。单聊房间与群聊房间一样**不**进官方侧栏「云之家」分组 | 单聊在 CLI 侧与群同为 groupId(`im message list/send` 通用),零新机制;话题的多人并发动机在单聊不存在 | | R18 | 话题×列表联动(v1.1) | 六条联动规则 L1–L6,见 §9.2 | 会话列表是云之家数据、话题是 DSH 会话,不定联动规则就有「话题在干活、列表无动静」死区 | | R19 | 话题双投影(v1.1) | 同一 `yzj-topic-*` 会话两个投影:群内话题抽屉 → **IM 透镜**(气泡流 + 轻交互,抽屉 header「原生会话 ↗」);官方侧栏 → **原生视图**(完整轨迹 / 工具卡 / 确认卡 / 全量 composer,头部锚点卡沿用)。跳转 = 官方 focus 同一 sessionId | 透镜贴聊天心智、原生保全量能力;双入口各按来路落投影,不强行二选一 | | R20 | 云之家 Host Workspace(v1.4 修订) | **官方侧栏「云之家」分组只收话题**(`yzj-topic-*`,群聊/私聊长出的 agent session)。群房间宿主(`yzj-home-*`)**不** `attachSession` 进该 workspace——群聊本身不是一条 AI session。cwd 仍用固定专属目录(房间与话题都建在这里,避免 `process.cwd()` 污染编码工作区),但 **attach 只对话题**。房间导航只在工作台对话域(R15) | 工作区分组 = 官方侧栏分类。把 IM 房间挂进去等于把群聊伪装成 agent 会话,和北极星(房间是桥、话题才是工作发生地)打架。v1.1 曾 attach 全部 yzj 会话,是为防污染编码区矫枉过正 | | R21 | 工作台入口清单(v1.1;v1.6 修订;v1.11 修订;v1.17 入口面 R31;v1.18 曾增「推进」;**v1.23 收回待办/推进**) | 工作台三域:对话 / 日程 / 知识库。**左边只留一个「云之家」入口**(新建会话下);域切换是工作台顶栏页签。**机器人状态不在入口挂绿点**(设置 → 云之家管理)。**记忆搁置**:dock / 工作台域 / 设置「记忆库」分段先不露。**不做**:通讯录、多维表格、文件、未读数、待办页签、推进看板(理由见 §13) | 先把群聊工作台做稳;记忆面未拍板前不占入口;多域并排入口与「一个入口」打架;待办/推进已从公开仓撤出 | | R22 | 视图归属(v1.5) | **IM 工作台只服务 `yzj-home-*`**。`conversation.view` id `yzj-home`(「群聊」)无 per-session `select`(harness 该槽是 list,tab 对每个 session 都在)。话题(`yzj-topic-*`)/ 未绑定 / 普通 session 打开时必须点官方「对话」,把该 session 持久化的 `ChatStoreState.view` 写成 `chat`;只把「群聊」tab 设 `hidden` **不够**——残留 `view=yzj-home` 仍会挂 IM 壳。壳组件对非 `yzj-home-*` 直接不画。view-ring 的 kind **只跟 session id 前缀**,binding 不得把普通会话提升成房间 | harness `resolveActiveView` 按持久化 view id 选视图,缺省才回落 `chat`。v1.4 只藏 tab、不拨 view,于是「有些 session 打开是群聊三栏」。composer 已按前缀闸(`selectGroupRoomComposer`);视图必须同一口径 | | R23 | 拖入引用退役(v1.6) | 工作台不再把条目拖进 composer 成 ☁ chip。悬浮窗「一切皆可拖」随球一起退役:面板/待办无 `draggable`、无全屏 drop overlay、无 drop-bus。引用只走 `@` 候选源(同事 / 会话 / 文档);草稿里残留的旧 chip 仍可经 codec 回源 | 球已退役后工作台残留拖源是上一时代的面;@ 是官方 InputBar 的原生插入,不是拖入 | | R24 | 点群不是开会话(v1.7) | **群聊不是一条 DSH 对话。** 工作台会话列表点一行 = 切 `groupId` 换时间线,**不** `homeOpen`、**不** `sessions.open`。`conversation.view` 仍要挂在一个已打开的 `yzj-home-*` 挂钩座位上(harness 主面是 session 画布),但挂钩最多一条:首次进对话域才 focus/建座位;之后切群零 session 切换。发进群 / 交给助手 / 回填只 `ensureBound`(写绑定表 + 日志,不 create 活 agent、不 publishHostSession)。官方侧栏「未分组」不得每点一个群就多一行 | 旧路径每点一个群就 resume/create 一条 `yzj-home-*` 并 focus:要等 session 列表、官方超长 InputBar 闪一下、publish 后因未 attach「云之家」掉进未分组。那是桥的实现细节漏到脸上,不是产品 | | R25 | 话题不写空 turn(v1.7) | 话题只钉 `session/title`。揭开靠第一次真提问。禁止给话题写 `turn/start {turn:1}`。房间同样不写空 turn(R14 v1.8) | 话题是真 agent session:空 turn 1 + 第一次提问再开 turn 1 → 官方 Chat 回放失败(pitfall-025) | | R26 | 未登录入口(v1.10) | **工作台会话列 + 非对话域顶栏 + 设置→云之家** 展示登录卡。按钮经 `/yzj auth-login` 拉起本机 `yzj-cli auth login`(系统浏览器),完成后点「我已登录」再探测。插件**不**自建 OAuth、**不**读写 token/keychain。工具失败摘要仍可带 CLI 命令兜底 | 认证只复用 CLI 登录态(integration-master-plan §2.1)不改;缺的是页面动词。home-nav 是本地绑定表,未登录时仍成功,会话列会空着——必须主动探测 `contact user get`,不能只靠错误文案 | | R27 | 工作台盖层(v1.11,改写 R14/R15/R22/R24 的「挂钩座位」) | **开云之家工作台不建、不 focus `yzj-home-*`。** `openBoundHome` 只写绑定表,不再 `agents.create` / `publishHostSession`(否则掉进官方「未分组」)。中间栏 DOM 盖一层;入口在「新建会话」下。点侧栏会话 / 打开话题 = 关盖层。存量挂钩目录删除(绑定表与消息日志保留)。话题仍是 `yzj-topic-*`。 | 群聊不是 DSH 对话。R20 不 attach 房间 → 一 publish 就进未分组。盖层后挂钩没有存在理由 | | R28 | 话题用哪套 agent 组装(v1.13) | **官方默认 preset(`agentPresets.defaultId`,出厂是 `standard`)+ host 上的 yzj 工具。** 禁止再造一份「云之家 preset」。create/resume 必须 `meta.agentPreset` + `setup: agentPresets.mount`,与 GUI「新建会话」同一条缝。不挂 梁神/minimal。云之家工具留在 `cordis.patch.yml` host 层,任何 preset 都能看见。 | `agents.create` 不传 preset = 裸作用域:只有 host 注册的 `yzj_*` / `memory_*`,没有 bash / 读文件(pitfall-007 / 030)。话题是标准 agent 工作面,不是阉割 IM 机器人 | | R29 | 话题 job-done 投递(v1.17) | **问助手的一轮结束(`agent/status` idle)后,产品把本轮总结以 CLI 本人身份回复到话题锚点**(`--reply-msg-id = rootMsgId`)。只投结论。图片进同一条 richText 回复;其它文件因 CLI `msg-type file` 不支持 `--reply-msg-id`,跟发群时间线。无确认卡。跳过 plugin 入站 / 已调 `yzj_im_message_send` / 写闸 pending / 假锚点 / 无正文。**本刀不改机器人通道** | 对齐 Claude Tag:工作在 session,结果落 thread | | R30 | 话题透镜产物卡(v1.17) | **群里照发(R29),话题抽屉也要看见。** IM 透镜把本轮 `write`/`edit` 文件画在助手气泡下(DSH 本地卡)。不是替代发群 | CLI file 不能挂回复链(pitfall-033)只挡住云之家回复气泡,挡不住 DSH 透镜 | | R31 | 侧栏单入口(v1.17;v1.18 曾页签 +1;**v1.23 收回待办/推进**) | **左边只留「云之家」一个入口。** 点它 = `openWorkbench()` 打开盖层,不切域、不 focus 挂钩。对话 / 日程 / 知识库是工作台顶栏页签。已打开再点入口不换域。卡片「查看」仍切对应页签 | 用户原话「对话日程那些有多个入口不太对应该要统一左边一个入口然后用页签」 | --- ## 3. 对象模型 只读 docs/ 的下一个 agent 必须能凭本节重建对象。 ``` GroupRoom // 每群一个 yzjConversationId: string // 云之家 groupId(与 CLI 同 ID 空间)——主键 hostSessionId: string // 承载 session(yzj-home-,沿用既有绑定 id) roomLog: YzjBoundMessageLog // 群时间线,语义沿用 transcript §3(按群索引) TopicSession // 每群 0..N 条 dshSessionId: string // yzj-topic-- yzjConversationId: string // 属于哪个群 anchor: // 从哪长出来 | { kind: 'yzj'; rootMsgId: string; from: string; excerpt: string; sentAt: number } | { kind: 'dsh'; rootMsgId?: string } // DSH「交给助手」(有锚)或群房间内直接新建(无锚) | { kind: 'handoff'; fromSessionId: string } // 丢进群交接来 title: string // 默认锚消息摘要,可改名 TopicAnchorIndex // S1 复活 (yzjConversationId, rootMsgId) → dshSessionId // 顶层 @ 与「交给助手」写入 机器人出站 msgId → dshSessionId // 出站登记,回复链续接靠它归位 ``` 不变量: 1. 一群至多一个群房间;话题 0..N,同群并存。 2. 同一 `(yzjConversationId, rootMsgId)` 至多一条话题:同根重复 @ / 重复「交给助手」= focus 已有话题。 3. **话题必须可见**:群房间列出本群全部话题;禁止任何形式的隐藏平行 session(D10 精神,治 S1 当年被砍的病)。 4. 群房间时间线不写 `Session.append`(T1);话题会话是官方 session。 5. 顶层新 @(新 rootMsgId)= 新话题,不做「续最近一条」启发式(可预测性 > 便利)。 6. 持久化:GroupRoom 映射沿用 `yzj_home_bindings` domain(语义从「群↔会话」变为「群↔群房间」);TopicAnchorIndex 新 domain,重启后锚定仍在。 7. 群房间宿主必须非 blank:打开时补一次已关闭空 turn + `session/title`(R14)。blank「新会话」点走会藏,但没有对话 tab,工作台挂不上。房间不 attach「云之家」(R20)。话题官方列表标题 = `话题标题 · 群名`。 --- ## 4. 两种视图 ### 4.1 群房间(IM 桥) > UI 标签说明(v1.3,2026-08-18):视图的可见名称是「群聊」(单聊房间「私聊」),「群房间」保留为设计概念名。view tab、pill、提示文案统一用前者。 - 时间线 = roomLog 全量投影:他人消息、本人消息(云之家发的 ① `isSelf` 与 DSH 发的 ②,渲染同为「我」)、助手帖子(R9,带话题回链)。回填(T9)、去重(T8)、非文本(transcript §3.3)全部沿用。身份和媒体复用悬浮窗渲染器(头像、`MessageBody`、`[握手]` 表情、图文/文件经 `file-data` 代理、回复引用);**IM 两侧都有可见气泡**(官方 Chat 只给用户一侧上色,不能照搬):自己靠右、`22px`、`--dsw-specific-bubble`;他人 / 助手靠左同圆角,底 `--dsw-alias-interactive-bg-hover-solid`(浅色 `bg-layer-*` 与画布同色,见 pitfall-023)。同人连发合并;日期分隔线。顶部「加载更早消息」再回填一页。人名空时走通讯录,禁止「群消息」占位。 - 行操作(回复 / 交给助手)hover 才出,16px 文字链。已是话题根:气泡内嵌「N 条回复」chip,不再显示「交给助手」。助手文件帖子在气泡内出产物卡。 - 本群话题主入口是右侧话题抽屉(header「话题 N」开关;v1.1 改写原侧栏树)。时间线不再铺顶部话题列表 chips(气泡内嵌回复 chip 除外,见 §9.1)。 - composer:唯一动词**发进群**(乐观 ②、`/yzj` 直写、无 user-turn、无确认卡——transcript §6.1 时序沿用)。占住 `conversation.composer` chain 以藏官方输入条,**可见面 portal 进时间线列**(不压会话列表、不铺到话题抽屉底下)。脸跟官方 InputBar:圆角卡片 + 底部工具行 + **圆形发送**(`aria-label` 发进群,不在右下角挂「发进群」字)。placeholder「发到 群名…」。工具条接 CLI send 全集(回复条、表情、图、文件、@ / @all)。**没有** dock「发进群」、没有「发给助手」、没有模型选择;要用助手就长话题。**界面不朗读发送语义**。 ### 4.2 话题会话(agent 对话) - **落官方 Chat,不是 IM 工作台**(R19 / R22):从官方侧栏「云之家」点进话题,必须看见 ③④ + 工具卡 + 确认卡。tab ring 打开时点「对话」并藏「群聊」tab;禁止让持久化 `view=yzj-home` 把话题画成群聊三栏。 - 官方 chat 形态:③④ + 工具卡 + 确认卡(GUI 卡机制沿用)。**三层分缝**:记忆 = snapshot 里的 `yzj-memory`;带过来的上下文 = 一条独立 plugin 消息(第一次问助手 `inject` / pre-step,`plugin: yzj-summon-window`,正文是锚点回复链);话题本身 = 这条 session 的 ③④,不再注入一层。 - 工具面 = **默认 preset 的标准工具**(读文件 / bash / …)**加上** host 的 `yzj_*`。不是「只有云之家工具的专用模式」。 - 回群入口叠在官方 composer dock 上(`conversation.input.dock`):与 InputBar 卡同一列宽(`--dsh-composer-card-max-width` + 两侧 clearance),22px 圆角、同一套 input 表面 token,坐在输入卡正上方,不进标题行。文案只写「回群聊」(单聊「回私聊」);锚摘要作次行省略,不写「群消息锚点 / 点这里」。**这是话题里唯一回群入口**。官方发送 = 问助手。 - 回复链续进来的群消息:作为日志投影节点插入话题流(标「XX · 从云之家回复链续入」),同时它也出现在群房间时间线(同一日志行,两个容器投影)。 - composer:唯一动词**问助手**。近窗是第一次问助手时的一条 plugin 消息(不是 snapshot)。`formatSummonWindow` 对有锚话题走回复链,无锚才用群近窗。必须带 `groupId`、每行 `msgId`、话题锚 `msgId`、文件 `fileId=`。 - **job-done 投递(R29)**:本轮 idle 后,host 把最后一条助手正文做成有界总结,以 CLI 本人身份回复锚点;产物随附。不是每条助手气泡都回群。 - **话题透镜产物卡(R30)**:同一批 `write`/`edit` 文件在抽屉助手气泡下出卡。群里照发,面板也要看见。 - agent **另起**发群:`WRITE_SPECS` 确认卡(标准),放行后投回群房间/回复链。本轮若已走这条,R29 不再自动投。 ### 4.3 未绑定私聊 不变(D7):无群流、单一发送、「丢进群」(D8:默认摘要 + 确认卡)。引用只走 `@` 候选源,不提供拖入 chip(R23)。普通 DSH session 与未绑定私聊同样走官方 Chat:view-ring 点「对话」、IM 壳不画(R22)。binding 表里若残留「某普通 session = 房间」也不得把它提升成群聊视图。 --- ## 5. 四入口时序 | 入口 | 时序 | |---|---| | DSH「交给助手」 | 群房间消息 → 查锚定表 → 无则 create 话题(锚=该消息)+ 写锚定表 → **抽屉透镜打开(时间线仍在场)**;开话题本身不启轮。第一次问助手才注入锚 + 近窗:抽屉「问助手」只 `followup` 问句;官方 Chat 与抽屉共用 T5 `yzj-bound-window`(同一 `formatSummonWindow`)。云之家 `@机器人` 仍 `inject` 再 followup。「原生会话 ↗」才 focus 官方 Chat | | 云之家顶层 @机器人 | 写 ① 进 roomLog → 查 `(groupId, msgId)` → 无则建话题 → `formatSummonWindow` + `agent.inject` → `followup` 进该话题 session(robot-yzj `resolveSession` 改指话题,不再指单一绑定会话) | | 回复链带 @ 续接 | 解析 rootMsgId(入站 `replyRootMsgId`,缺则经出站登记的机器人 msgId 归位)→ 命中话题 → 写 ① + 投影进话题 + followup 续;未命中(回复的不是机器人链)→ 按顶层处理 | | 丢进群(私聊 → 群) | D8 不变:勾选摘要 → 确认卡 → 群房间落 ② → 着陆群房间;可选「继续在新话题工作」(anchor kind `handoff`) | `!fork` / `robot_fork`:目标从「打开/恢复绑定会话」改为「锚定或新建目标群话题」(覆盖 robot-channel §9 相应条款)。 --- ## 6. 与 v1.x 的关系(保留 / 作废对照) | v1.x 条款 | 本法 | |---|---| | D1 家园在 DSH | **保留**(表述修订:家园 = 群房间 + 话题的组合,仍全在 DSH) | | D2 1:1 绑定 | **作废** → R1 | | D3 四类节点一条流 | **作废** → R2(四类消息仍全部可见,但分住两个容器) | | D4 机器人身份 = 助手 | **保留**(R9 补:群房间里也以助手身份呈现) | | D5 面板 = 挑选器 | **改写**:挑群 = 打开群房间(R7);面板会话 IM 与快捷发进群退役 | | D6 @机器人 召唤进绑定会话 | **改写** → R3/R4:召唤锚出话题 | | D7 未绑定私聊 / D8 丢进群 / D9 写路径 / D10 反隐藏 / D11 不做 ambient | **全部保留**(D10 以「话题可见列出」满足;D11 免 @ 仍不做) | | transcript T1/T3–T9/T13 | **机制沿用**(存储、去重、回填、召唤窗口、write-gate 分流;日志改按群索引 R8) | | transcript T2 融合时间线 / T10–T11 composer 条款 | **作废** → R2 | | transcript T12 出站不进日志 | **改写** → R9 | | robot-channel §3.6 S1 锚定 | **复活** → R4(加「必须可见」不变量) | | robot-channel §9「打开/恢复绑定会话」 | **改写** → 锚定或新建话题(§5) | 迁移(H9,2026-08-18 拍板;**2026-08-25 已拆除**,gap §24.39——真机存量核查 fromSessionId/legacy-host 均零行,迁移路径按死代码删除,下述行为不再存在):既有 `yzj-home-*` 降为群房间宿主。打开群房间时,若宿主已有真实 ③④(`user/message` / `assistant/message` / `tool/call`),则幂等 `ensureTopic({ source: 'handoff', rootMsgId: 'legacy-host', title: '历史对话', fromSessionId: hostSessionId, quiet: true })`。**不**复制 Session 事件(harness 无跨 session 搬日志 API,且 `KNOWN_SESSION_EVENT_TYPES` 白名单)。`lastActivity` 取宿主 ③④ 原时间,**不**写成打开当下——否则 L1 会把该群顶到列表最上并刷成「话题·历史对话」。透镜合并 `fromSessionId` 上的宿主事件 + 话题自身新事件;新「问助手」打进话题 session。空白宿主(仅 `publishHostSession` 的 `turn/start` + `turn/end` + `session/title`)不迁。单聊不迁(R17)。打开房间落在时间线**底部(最新)**;切会话工作台列表用模块缓存,禁止空窗再刷。融合「群工作」tab、dock「发进群」、双意图 composer、面板快捷 IM 在实现刀中移除。 --- ## 7. 验收口径(实现对照用) 1. 打开群 A 两次 → 同一个群房间;工作台会话列表标题 = 群名;官方侧栏「云之家」分组**不**出现该群聊行(R20)。 2. 群房间发送:立刻 ② 气泡、无确认卡、不触发模型;输入框没有第二个动词。 3. 群房间消息「交给助手」→ 新话题并在抽屉打开(时间线仍在场);对同一条消息再点 → 抽屉重开已有话题,不新建。 4. 云之家顶层 @机器人 → 群房间话题列表出现新话题;回复链带 @ 续 → 进同一话题,不新建。 5. 话题里 agent 提议发群 → 标准确认卡;放行后群房间出现助手帖子,带「来自话题 X」回链;话题内标「已投递」。 5b. (v1.17 / R29)DSH 话题里问助手、轮次结束后:云之家该条锚点的回复链出现一条总结(本人身份),不是整轮工具过程;有 `write`/`edit` 产物则随附(图在回复里,其它文件跟发在群里)。plugin 入站 / 已调 `yzj_im_message_send` / 无真实锚点不投。 5c. (v1.17 / R30)同一轮产物在话题抽屉透镜的助手气泡下出文件卡。发群(R29)仍发生。 6. 群侧发起、无人聚焦 DSH → 群内建议卡(@机器人 确认 N)裁决,与 GUI 卡同一 writeId。 7. `robot_notify` / `robot_continue` 在 `yzj-topic-*` 会话上同样入闸(R10;pitfall-012 回归)。 8. 未绑定私聊:单一发送;丢进群默认摘要 + 确认卡,着陆群房间。 9. 无隐藏话题:群房间话题列表 = 该群全部话题;不存在列表外的 `yzj-topic-*` / `yzj-robot-*` 家园。 10. 退役面干净:无「群工作」旁路 tab、无 dock 发进群、无双意图 composer、无面板第二 IM composer。 11. 侧栏脚「群空间」树:已打开的群房间为父行,其话题缩进挂在下面;父行可折叠;点行 focus 对应 session。未打开的最近群也可出现在树里,「加载更多会话」翻页,点开 = 打开群房间。 12. 群房间时间线能认出真人名+头像(不是「群消息」);自己靠右、他人靠左;表情/图片/文件可读;「加载更早消息」能翻到回填窗口以外。hover 出「回复 / 交给助手」。 --- ## 8. 本版明确不做 - 完整 IM 客户端:表情回应、已读回执、撤回、转发、名片、群管理(R7 红线;CLI 无对应命令,不造假)。 - 免 @ / ambient / 顶层无 @ 自动响应(D11 沿用)。 - ①② 写入 `Session.append`、自定义 session 事件(T1 沿用)。 - 话题自动归档 / 生命周期管理(堆积治理留后期;先靠状态标记 + 可改名)。 - 群搜索(G5 仍开放,沿用最近会话翻页)。 - 跨群话题、一条话题绑多群。 - 改 harness(侧栏树形原语、确认卡 session 事件族——缺什么记 gap,不 fork)。 - (v1.1)通讯录 / 多维表格 / 文件独立入口、未读数(R21:无数据源不造假)。 --- ## 9. v1.1 增补:云之家工作台(已拍板 2026-08-17 下午) > 缘起:用户对 R12 侧栏树提出三连反馈——「UI 要更精致」「群空间应有独立子页承载而非侧栏铺开」「群与对话之间要一层会话/话题列表」,随后确认导航范式为「IM 统一入口」;拍板后追加修正「话题应是对话中很轻的东西」——话题面从整面页签改为右侧抽屉(Slack 线程式)。可交互原型(Cursor canvas `group-room-three-column.canvas.tsx`)走查通过后拍板六项(§9.6)。本节是 R15–R21 的展开;与 v1.0 冲突处以本节为准(冲突点已在原条款内标注)。 ### 9.1 三栏结构 ``` ① 官方侧栏(不动) ② 工作台(中间栏盖层 + 页签切域) 「新建会话」下「云之家」一口 顶栏页签:对话 | 日程 | 知识库 DSH 会话(含云之家 workspace 分组) 对话:会话列表 | 时间线 日程 / 知识库:原面板 embed ``` - 载体(R27):入口 DOM 注入在「新建会话」下(官方无上方槽,pitfall-028);工作台是中间栏盖层,**不** focus / 不建 `yzj-home-*`。不 fork harness。**视图根必须带 `data-conversation-composer-overlay`**(pitfall-020)。时间线打开即触底(pitfall-020)。 - **点「云之家」= `openWorkbench()`**:打开盖层,不切页签、不 focus 挂钩。已打开再点仍不换域。会话列 `convListHold` 仍跨重挂保左栏。 - **三域用顶栏页签切**(R31):`setWorkbenchDomain`。卡片「查看」切到对应页签。发送条只跟对话页签。 - **发送条只跟对话域**:群聊「发进群」与话题官方「问助手」只在工作台域 = 对话(或官方 Chat 话题页)出现。日程 / 知识库不挂任何 composer——房间 takeover 仍占住官方条以免露出发给助手,但组件画 `null` 并收起 `data-composer-seat`。时间线卸掉时禁止把发进群回退到官方座位(否则非对话域底下会冒出发送卡)。 - 对话域会话列表 = `im group recent`(原生混排群/单聊,按时间序);滑到列底自动翻下一页(列未填满视口也会继续取)。单聊行点开即聊(R17),无话题抽屉。绑定房间不在 recent 首页时由 host 分页回填真实群名(禁止「群聊」鬼影行)。 - **话题抽屉是「对话中很轻的东西」**:时间线永远是主体、永不被顶走;抽屉固定窄栏(≈340px)、随手可关(×);列表态 ⇄ 透镜态在抽屉内切换(‹ 返回);抽屉底部「问助手」轻输入。反跳(L6)时抽屉不关——左时间线高亮定位、右透镜保持,两边同屏对照。锚点卡摘要 clamp 两行,不 dump 原文。 - 精致度基线(P1 验收对照):同人连发合并(首条带头像名,后续缩进)、日期分隔线、自己 8/2/8/8 右气泡 / 他人 2/8/8/8 左气泡 / 助手左描边、行操作 hover 16px 文字链、助手产物卡(类型徽标 + 文件名 + 落库指引)、话题入口 = 气泡内嵌「N 条回复」chip(取代行尾文字链)。**机器人身份**:`BOT-` 前缀 openId 标「机器人」(联系人目录查不到机器人,禁止渲染 openId 尾巴);**机器人长帖折叠**:超 240 字的机器人/助手文本帖收 4 行 +「展开全文」(IM 流不是 markdown 画布)。 ### 9.2 联动规则 L1–L6(话题 × 会话列表) 合并发生在客户端:中栏把 recent 列表与 `ctx.yzjTopics` 快照按 groupId 拼接。`TopicRecord` 有 `lastActivity`(P0)和 `status`(P3:`running` / `confirm` / `done`)。write-gate 在 `yzj-topic-*` pending/approved 写时把该话题打成 `confirm`,交付或取消后按 L5 回落 `running`。 | # | 规则 | 行为 | |---|---|---| | L1 | 上浮 | 群行时间与摘要 = max(最新群消息, 最新话题活动);话题动态带「话题·标题」前缀 | | L2 | 徽标分级 | accent 数字 = 待确认话题数(`status=confirm`)> 细点 = 有进行中 > 全完成无标;**不是未读数** | | L3 | 就地成话题 | 时间线「交给助手」→ 建话题并在右侧抽屉打开(时间线不被顶走);该消息行操作立刻变「N 条回复」chip(幂等,二次点击 = 抽屉重开该话题) | | L4 | 双入口一会话 | 话题在官方侧栏照常列出(不隐藏不复制);两个入口进同一会话,默认投影不同(R19) | | L5 | 交付回落 | 话题内「发进群」过确认卡后成为真实群消息:群行摘要回普通消息、话题降级、徽标随之降 | | L6 | 全量反跳 | 话题内一切群消息引用可点、跳回时间线定位高亮:头部锚点条、过程中引用的群消息卡(记 msgId + 摘要快照)、交付回执「已发进群 · 查看群消息」;目标不在已加载窗口先 backfill 再定位。与内嵌 chip 构成双向闭环 | 群行点击**永远落时间线、抽屉不自动弹开**(拍板 #5):落点可预测,话题动态靠 L1 前缀 + L2 徽标引导。 ### 9.3 话题双投影(R19 展开) - **IM 透镜**(群内话题抽屉):气泡流、轻交互、锚点条、引用卡、回执、助手气泡下的本轮产物卡(R27);抽屉 header「原生会话 ↗」。 - **原生视图**(官方 conversation):完整轨迹 / 工具卡 / 确认卡 / 全量 composer;回群聊叠在官方 composer dock(§4.2)。 - 两个投影读同一份 session 事件日志;跳转 = 官方 focus API,零新机制。 ### 9.4 云之家 Host Workspace(R20 展开) - 固定专属目录作为全部 yzj 会话的 `meta.cwd`(目录位置 = 实现决策,落地记 gap)——房间和话题都建在这里,避免 `process.cwd()` 污染编码工作区。启动时 ensure「云之家」workspace(`ctx.workspaceRegistry`)。 - **attach 只对话题**(`yzj-topic-*`)。群房间宿主(`yzj-home-*`)即使 cwd 落在同一目录,也**不** `attachSession`。harness 侧栏按 workspace 成员分组:只有被 attach 的会话出现在「云之家」分类下。 - **存量清扫**:插件 ensure workspace 时 `detachSession` 摘掉已挂上的 `yzj-home-*`(v1.1 误 attach 的房间)。不归档、不删 session 文件、不动话题。打开工作台或重启 GUI 后旧房间从该分组消失。 - 效果:官方侧栏「云之家」= 群聊长出的 agent 工作(话题);群聊本身只活在工作台对话域(R15)。v1.1 曾 attach 全部 yzj 会话,把 IM 房间也挂进该分类——v1.4 纠正。 - 不用归档藏房间(pitfall-021:归档单向,归档后打不开)。正确手段是根本不 attach;已挂上的用 detach 撤回成员资格。 ### 9.5 分刀 | 刀 | 内容 | 验收要点 | |---|---|---| | P0 | 三栏骨架:入口块(仅对话生效,其余暂开旧面板页签)、会话列表栏 + 时间线 + 话题抽屉、workspace/cwd 修复、`TopicRecord.lastActivity` | 入口进会话列表;单聊直接可聊;群聊开话题抽屉;官方侧栏「云之家」分组里是话题、不是群聊房间(R20 v1.4) | | P1 | 精致度六条(§9.1 基线) | 组件测试断言合并与 chip;真机截图对照原型 | | P2 | 面板四域迁入工作台 + 记忆域;悬浮球/悬浮窗退役(`shell.overlay` 摘除、pitfall-017 留白删除) | e2e 逐域走查;悬浮球消失 | | P3 | `TopicRecord.status`(进行中/待确认/已完成)+ 抽屉按钮徽标数 | 单测:pending 写 → 待确认;末轮结束 → 进行中/已完成 | ### 9.6 拍板记录 | # | 议题 | 结论 | |---|---|---| | 1 | 悬浮球去留 | 退役(P2;连同 pitfall-017 留白) | | 2 | 单聊产品法 | 「1 会话 = 1 房间」,复用 `yzj-home-*` 全套,话题仍只挂群(R17) | | 3 | 通讯录入口 | 不做(无组织树接口;联系人解析留底层)(R21) | | 4 | 记忆入口(v1.6) | **搁置**:工作台 dock / 设置分段先不露。memory-yzj 与工具保留,不删包 | | 11 | 拖入云之家引用(v1.6) | **退役**。悬浮窗时代「一切皆可拖 → composer chip」。球已退役,工作台不再提供拖入引用;@ 候选源保留 | | 12 | 点群要不要开 DSH 会话(v1.7) | **不要。** IM 是工作台域,不是 agent session。挂钩座位只为挂 `conversation.view`,切群只换 groupId(R24) | | 13 | 话题要不要空 turn 揭开(v1.7) | **不要。** 话题靠第一次真提问揭开(R25) | | 14 | 房间能不能走「新会话」点走就藏(v1.8) | **不能。** 真机:blank 挂钩 focus 后标题已是群名,但 tab ring 为空、`yzj-room-shell` 不挂。空 turn 换的是主面画布,不是为了占侧栏 | | 15 | 话题问助手的近窗从哪来(v1.9 / v1.12) | **只走 T5 `systemPrompt.context` `yzj-bound-window`。** 窗口函数同一份 `formatSummonWindow`。查 id 必须覆盖话题 session。抽屉不再 inject 窗口(只 followup)。门控是 `shouldAttachSummonWindow`:本轮已有机器人窗口 inject → 空;历史只有 inject、快照从未带窗 → 空;快照曾带该 section → 仍返回同一段(稳住记忆所在的原子快照)。`none` 仍给窗。注册必须走 `ctx.inject(['systemPrompt'], scope => scope.systemPrompt.context)`,与 `sandbox:policy` 同层(pitfall-027 / 029) | | 16 | 话题要不要自造 preset(v1.13) | **不要。** 挂 `agentPresets.defaultId`(standard)。yzj 工具在 host patch。梁神是用户显式选的编码预设,话题不默认它 | | 17 | 话题结果回不回云之家话题(v1.17) | **job done 回一条总结,不是每条气泡。** 投递走 CLI 本人身份(可带文件);机器人通道本刀不动(R29) | | 18 | 产物文件能不能进回复链 | **图片能,普通文件不能。** CLI `msg-type file` 不支持 `--reply-msg-id`(pitfall-033) | | 19 | 话题面板能不能带产物 | **能,而且群里照发。** 抽屉透镜助手气泡下挂本轮 write/edit 文件卡(R30) | | 20 | 对话/日程要几个侧栏入口 | **一个。** 左边只留「云之家」;三域是工作台顶栏页签(R31) | | 5 | 群行点击落点 | 永远落时间线(抽屉不自动开) | | 6 | 话题默认投影 | 双投影并存:工作台 → 透镜,官方侧栏 → 原生(R19) | | 7 | 旧宿主 ③④(H9) | **已拆除**(2026-08-25,gap §24.39):存量核查为零后删迁移路径;旧宿主 ③④ 不再铸「历史对话」话题 | | 8 | 抽屉透镜体(H18) | 气泡流读话题 session;底部「问助手」`followup` 进话题、**不** focus 原生;「原生会话 ↗」仍是唯一跳官方 Chat | | 9 | 官方侧栏「云之家」收谁(v1.4) | **只收群聊长出的 agent session(`yzj-topic-*`)**。群聊/私聊房间(`yzj-home-*`)不进该分组。房间导航只在工作台对话域。cwd 仍用专属目录,attach 只对话题(R20) | | 10 | 谁可以画 IM 壳(v1.5) | **只有 `yzj-home-*`**。话题 / 普通会话打开官方 Chat;残留 `view=yzj-home` 必须点「对话」清掉。kind 只跟 id 前缀(R22) | ### 9.7 v1.1 验收增补(替换验收 11) 11. (替换原 11;v1.17;v1.23 三域)「新建会话」下只有一个「云之家」入口、树不存在、侧栏没有多域并排钮;点它打开盖层。工作台顶栏页签切对话 / 日程 / 知识库。对话页签:会话列表(群/单聊混排);单聊行点开即聊;时间线始终在场。 13. 会话行联动:话题有待确认 → 群行 accent 数字徽标 + 摘要「话题·」前缀;交付发群后徽标降级(L1/L2/L5)。 14. 时间线「交给助手」→ 抽屉打开该话题、时间线仍在场,原消息行操作变回复 chip;同消息再点 = 抽屉重开该话题(L3)。 15. 抽屉透镜内锚点条 / 引用卡 / 交付回执三处反跳均在左侧时间线定位高亮、抽屉不关(L6);抽屉「原生会话」聚焦官方视图(R19)。 16. 官方侧栏出现「云之家」工作区分组,**只有** `yzj-topic-*` 在其下(标题「话题 · 群名」);打开群聊/私聊**不**把 `yzj-home-*` 挂进该分组(R20 v1.4)。 17. 悬浮球与悬浮窗不存在(P2 后)。 18. 抽屉透镜内是气泡流(用户右 / 助手左),不是「只作对照」占位;底部「问助手」提交后气泡出现、官方 Chat 不被 focus。 19. (H9 已拆除,2026-08-25 gap §24.39)打开仍带旧 ③④ 的群房间不再铸「历史对话」话题;空白新房间同样不出现该条。 20. (v1.2)群房间三栏有界:shell ≤ 视口高、时间线内部滚动且打开即触底、发进群 composer 在视口内;会话列无「群聊」鬼影行;`BOT-` 发送者标「机器人」、长帖折叠「展开全文」;话题抽屉有界且锚点卡 clamp 两行。回归 = `.acceptance/verify-room-layout.mjs`。 21. (v1.4)打开群聊后,官方侧栏「云之家」分组不出现该群名行;从该群「交给助手」长出的话题出现在该分组,标题为「话题 · 群名」。 22. (v1.5)从官方侧栏打开话题 / 普通会话:主面是官方 Chat,不是群聊三栏;header 选中「对话」。只有 `yzj-home-*` 占「群聊」view。 23. (v1.6)工作台条目(会话 / 文档 / 日程 / 消息)不可拖;输入框上方无「松开以插入云之家引用」overlay。`@` 同事 / 会话 / 文档仍可插 chip。 24. (v1.7)工作台会话列点另一群:时间线立刻换群,官方侧栏未分组不新增长行,不闪官方超长 composer。`home-open` 不在点击热路径上。切群 cache-miss 仍挂 `#yzj-room-composer-host`,不得提前 return 卸宿主。 25. (v1.7 补)抽屉「问助手」的 `followup` 必须带 `message.id`;话题 `create`/`resume` 必须带 `agentOptions` 模型路由。缺 id 则历史装不上;缺模型则 `{{model}}` 装配失败。 25. (v1.7)群里「交给助手」再问助手:官方 Chat 能回放,不报 `turn-error1 received more than one start Match`。话题日志里只有一轮 `turn/start`。 26. (v1.9)话题里问助手 / 官方 Chat 发给助手:模型本轮能看见 `[本群最近消息]`、`groupId`、锚点 `msgId`。runtime snapshot 的 context 含 `yzj-bound-window`。空窗但已有 groupId 仍给头块。 27. (v1.16;v1.23 三域)工作台顶栏是页签:对话 / 日程 / 知识库。日程对齐灵基原型:工具栏「今天 + ‹ › + 区间」+ **日 / 周 / 月 / 年** 切换;周/日是时间轴,月格里画事件条,年是 12 个迷你月。不造「会议 / AI速记」子页(yzj-cli 无对应命令)。 28. (v1.17)DSH 话题问助手一轮结束后,云之家锚点回复链出现总结帖(本人身份);图片进同一条回复,其它文件跟发群时间线(CLI `file` 不能挂回复链,pitfall-033)。 29. (v1.17)话题抽屉透镜助手气泡下出现本轮 write/edit 文件卡;群时间线仍有对应文件帖(R29 发群未停)。 30. (v1.17;v1.23 三域)左边没有并排的「对话 / 日程 / 知识库」钮;工作台顶栏有这三个页签。点「云之家」打开盖层。 31. (v1.19 曾要求「喂给推进」;**v1.23 作废**)公开仓不再有待办页签、推进看板、群房间 hover「喂给推进」。 ## 10. v1.16 增补:工作台页签 + 日程多视图(2026-08-19) 对照灵基原型 `lingee-ai-advancement-v0-cross-page`:日历模块是顶栏页签(日历 / 会议 / AI速记)+ 主体 `日/周/月/年`。本仓三域已是工作台域,顶栏用同一套下划线页签切域,不再只靠侧栏 dock。 日程主体跟原型 `.cal`: | 控件 | 行为 | |---|---| | 今天 | 回到当天,保持当前视图 | | ‹ › | 日 ±1 / 周 ±7 / 月 ±1 / 年 ±1 | | 日 / 周 / 月 / 年 | 切换视图;点月格进日视图 | | 周 / 日 | 7:00–21:00 时间轴,事件按 `startDate`/`endDate` 绝对定位 | 不做:创建日程表单、会议页、AI 速记页、左侧「我的日历」勾选(无多日历 CLI)。 ## 11. 决策 53 增补:话题功能面退役(2026-08-25) 决策 50(撤 UI 入口)→ 51(机器人/记忆摘挂载)→ **53(彻底退役删除)** 的终局。用户拍板「机器人话题记忆那些那种都干掉吧」: - **删除**:话题抽屉(topic-drawer)、话题 latch(requestTopicOpen/consumeTopicOpen)、`home-topic-open/lens/ask` RPC、R29 话题产物投递(topic-deliver)、机器人/记忆两包及其全部外围。 - **保留(存储,非功能)**:`topics.ts` 的 TopicRecord 与 home.ts 绑定表——群房间视图(roomSnapshot/groupSpaceSnapshot)与 conv-list L1 聚合仍消费它;历史会话(yzj-topic-*)仍在侧栏可见。这是「1 群 = 1 群房间 + N 话题」存储模型的延续,不是功能面。 - **恢复路径**:无软恢复,git 历史重建。 本 spec 其余章节为 v2.0 产品法历史记录(群房间模型仍有效;话题交互面以本节退役状态为准)。 ## 12. 决策 55 增补:丢进群 UI 退役(2026-08-27) 用户拍板「把一些奇怪的 UI 都去掉,例如丢进群」。D8 私聊交接入口在话题退役后只剩一条挂在普通 DSH 会话 composer 上的链,产品面已经说不通: - **删除**:未绑定 dock「丢进群」按钮与确认模态;`/yzj home-digest` / `home-handoff`;`handoffToGroup`(会再 mint 话题,与决策 53 冲突)。 - **删除**:群房间「打开话题后会出现在问助手栏」banner(话题已撤,文案是假的)。 - **保留**:存量 `yzj-topic-*` 会话上的「回群聊」(历史会话回群房间的导航,不是新功能入口);digest 投影 `candidates` 仍随 fused snapshot 计算(无 picker)。 - **恢复路径**:无软恢复,git 历史重建。 ## 13. 决策 56 增补:待办 + AI推进从公开仓撤出(2026-08-27) 用户拍板:本公开插件只保留 yzj-cli 桥、六域工具、群房间 + 话题、确认卡、工作台三域(对话 / 日程 / 知识库)。 - **删除**:`yzj_todo_*` / `yzj_advance_*` 工具、待办泳道、AI推进看板、群房间 hover「喂给推进」、Dream / 巡检、相关 RPC / 页签 / spec。 - **保留**:IM L2 缓存仍写 `~/.dsh/storages/yzj_advance.db` 的 `im_cache` 表(路径不改,避免已有缓存失效)。 - **完整实现**:私有归档 GuoxinShan/dsh-yzj-archive(不是公开安装路径)。 - **恢复路径**:无软恢复,git 历史或私有归档重建。