Part of #273 ## Question Session Name 的 task 半边(描述性任务名)最终用哪套来源规则?要在 grilling 里把下面几点定死: 1. 来源优先级:照搬 Claude Code 自己的顺序(自定义名 > AI 生成标题 > 第一条提示节选 > 派生名),还是只用其中一部分;Codex 同构地用 `Thread.name` > `Thread.preview` 还是别的。 2. 是否允许名字变化(节选 → 标题 → 用户改名),还是像地址一样一次冻结;变化时语音和 Telegram 怎么处理。 3. 名字难看的情况怎么办:第一条提示是斜杠命令、以图片开头、超长、多行、含分隔符。 4. 硬约束:不给用户或 session 在启动时增加任何动作,不引入会超时阻断流程的同步步骤(legacy 教训,见研究票结论)。 输入:#273 里的官方能力事实、研究票「Legacy 是怎么给 session 起任务名的」的结论。输出:一条能直接写进 `adapters/agent/_naming.py` 的规则和它的输入事实清单,作为 resolution comment。
Activity
Simon-AI-coding commentedon Sep 7, 2026
结论(2026-09-07 grilling,Simon 决定)
Q1 替换,不加新概念。 Session Name 的 task 半边就是描述性任务名,只留这一个字段。它的职责是让用户听懂这个 Session 在干嘛;寻址一律靠 Session id(地址),名字不参与任何寻址。
CONTEXT.md的 Session Name 词条改写,不新增词条。Q2 取值优先级。 任一时刻取「当前能拿到的最高一级」:
nameSource不是derived)② AI 生成标题(转录里最新一条ai-title)③ 第一条提示的节选(清洗后)④ 派生名<dir>-<2hex>(兜底)Thread.name,且不等于preview②Thread.preview(清洗后)③ 线程 id 前 8 位(兜底)Q3 变化规则。 (a) 只升不降:拿到更高级就换,来源消失时保留上一次的值。(b) 同级内跟最新值:官方改了我们就改,不自己冻结。(c) 不播报:名字变化时语音和 Telegram 静默使用新名字。
Q4 节选级清洗(选 A)。 剥掉斜杠命令包裹只留
<command-args>正文(没有正文就留命令名),去掉[Image #n]标记,多行压一行,按配置的长度截断(长度不写死在函数里,由调用方从配置传入)。清洗后为空则跳到兜底级。Q5 删掉
@名字片段: 话的 Telegram 写法(选 C)。 名字彻底不参与寻址,Telegram 只靠回复 Anchor 和菜单按位置选。这一条会动到 router 和match_name。Q6 撞名沿用现状(选 A)。 roster 上读起来一样的两行仍加
(地址)后缀;语音不做额外处理,靠状态和最新一句话区分。设计立场。 简洁、用户无感:启动不多一步,没有注册和自报,没有同步等待。全部判断收在
adapters/agent/_naming.py一个纯函数里,输入是各级候选字串加上一次的结果,输出一个名字;adapter 只搬运事实,Core 只写入。实现细节(无需再问):project 半边不动;子进程(#79)仍不起名;「只升不降」的记忆放在 Core 已有的 Session 记录里,纯函数不存状态。
文档落地:
CONTEXT.mdSession Name 词条改写、ADR 0024 记录本决定(推翻 #78 的「不用 ai-title、不用可变名字」)。后续:Simon 决定跳过原型票直接开发,spec 票由本 session 用
/to-spec开出。The task half of a Session Name describes the Session and climbs (#273,