Skip to content

feat(i18n): session 中文改称「任务」,并厘清任务/对话/消息的边界 - #1171

Merged
MagicLizi merged 23 commits into
mainfrom
dash/session-task-naming
Jul 31, 2026
Merged

feat(i18n): session 中文改称「任务」,并厘清任务/对话/消息的边界#1171
MagicLizi merged 23 commits into
mainfrom
dash/session-task-naming

Conversation

@dashhuang

@dashhuang dashhuang commented Jul 31, 2026

Copy link
Copy Markdown
Member

这次改了什么

摘要

session 的中文译名从「对话」改成「任务」,并把「任务 / 对话 / 消息」三个词的边界一次定清楚。

改名前中文把 session 译作「对话」,这个词表达不了 Cindy 最重要的一个能力:同时跑多个互不干扰的工作。「对话」听起来是一次问答,用户看不出左侧列表里每一条其实是一个有独立空间、可以并行推进的工作。

但这不是把所有「对话」替换成「任务」——用户在每个任务里做的事确实是在跟 AI 对话。所以先定分层:

任务 (Session)     左侧列表里的一个条目,可单独打开/删除/分享,能同时跑多个
└── 对话 (Chat)    你在这个任务里跟 AI 交互的过程(对话区、对话正文、对话记录)
    └── 消息 (Message)  一条往来,用户看到的最小单元

「轮次」不是第四层:AI 在一轮里的思考、工具调用、多次输出最终折叠成一条消息,所以面向用户一律说「消息」。现有删除行为就是这个口径(AI 消息删除的是上次用户输入之后的整轮输出)。

权威规则落在新增的 docs/product-rules/task-and-conversation-naming.md,机器口径落在 i18n/glossary.json

变更类型

  • feat 新功能
  • docs / test / chore 文档、测试或工程维护
  • 其他:i18n 文案与术语裁决(无源码逻辑改动)

范围

  • 关联 Issue / 需求:[产品讨论] PR #951 feat(desktop): 新任务上下文快捷入口与一键启动 #977(产品讨论:session 中文译名),承接 feat(desktop): 「新任务」上下文快捷入口与一键启动 #951 引出的译名问题
  • 本 PR 包含:
    • zh-CN 文案:含「对话」的 565 条候选逐条人工判断,改 478 条、保持「对话」87 条
    • en 文案conversation / dialogue 收敛:110 处 → session、26 处 → chat(指交流过程或归属分类的)、16 处保留不动(IM 平台概念、复合词、隐私文案);chat 只按白名单改 11 处明确指条目的
    • task 歧义消解:与 session 同句时改写 task 一侧(「当前任务正在运行」而非「当前任务正在执行任务」)
    • automation 去掉「任务」二字(23 处):原「自动化任务」与 session 同句会出现「删除任务和任务」
    • 修掉两批既有译名错误(与改名无关,本来就该修):42 处 message 误译成「对话」、7 处 turn 误译成「对话」,以及 1 处 Copy current conversation link —— 该链接实际带 messageClientId,指向单条消息,英文原文写错了
    • 术语表 7 个条目:改译 3 个(session 改译 +alsoAllowed 语境豁免、chatthread),新增 4 个(task / message / turn / working-directory)。working-directory 是把散落在 worktree 条目 note 里的既有裁决提为独立条目并加上门禁
    • ja / ko 收敛到音译:ja 136 条 / ko 130 条(逐条人工判断,7 条刻意保留;韩语助词随之交替 / / 으로 /
    • 测试断言更新 8 个文件
  • 明确不包含:
    • 代码标识符session / sessionId / SessionView / IPC channel / DB 字段 / 协议字段一律不动
    • ja / ko 文案已改为一并收敛(产品决策,见 review 讨论)。ja 136 条 / ko 130 条共 266 条,理由与取舍见新增的 docs/product-rules/task-and-conversation-naming.md §5.1 —— 简言之 ja/ko 改名前就在混用(音译 271/277 处 vs 会話대화 16/11 处),英文侧收敛后不一致放大到 133 处,所以向既有主流(音译)靠回去。タスク / 작업(task)不动
    • 侧栏全局「新建」入口ccAgent.layout.new 仍是「新建」/ New,改成「新任务」由 feat(desktop): 「新任务」上下文快捷入口与一键启动 #951 承担(它同时重构该入口的快捷卡片与一键启动),本 PR 不抢那个 key
    • task 未全量改写:不同句、语境清晰时仍用「任务」(104 处)。「后台任务」「定时任务」这类有限定词的说法本身不歧义,强行统一反而生硬
  • 用户可见变化:中文界面里指「左侧列表那个条目」的地方一律改称「任务」;指交流过程与内容的地方保持「对话」;单条往来改称「消息」
  • 是否存在 breaking change:无

UI 变化

纯文案改动,不动布局、颜色、组件与动效。已在 macOS 实机目检(沙箱实例,见「手工验证」)。

  • 引用的设计规范:
    • DESIGN.md §11 Voice & Content(微文案规范) —— 本 PR 的主要依据。逐条过了 §11.3 自查清单:
      • 「动作 = 动词 + 对象」:改名后仍带对象(「开启一个新任务」「复制当前消息链接」「删除本条消息」),没有产生无对象的裸动词
      • 「结果说明改了什么,不说成功」:沿用既有写法,未引入「成功」类填充词
      • 「进行中 = 现在进行时 + …」:automation 去「任务」时保持了「正在统计由这条自动化生成的任务…」的形态
      • §11.3 最后一项「4 个 common.json 全部更新」在本 PR 是有意例外:本次不新增 key,只改既有 key 的,四语 key 完全对齐(pnpm check:i18n 通过);ja / ko 按术语表既定口径不跟改中文裁决
    • DESIGN.md §11.2 Casing & Punctuation Per Language:zh-CN 不用 Title Case、toast / label 结尾不加句号;en 侧 label 保持 Title Case(Start a new session)、正文 sentence case
    • DESIGN.md §11.1「空状态指向第一个动作」:空态文案(「暂无任务」)沿用既有结构,未改成只报「无数据」
    • 未新增或修改任何颜色、token、间距、圆角、动效,因此不涉及 §5 / §10 / §14;双模式无需单独验证(无颜色改动)

怎么验证的

自动验证

pnpm test:unit
结果:EXIT=0,零 FAIL(apps/desktop unit PASS 53.7s / apps/mobile unit PASS 9.0s)

pnpm --filter desktop run --if-present typecheck
结果:EXIT=0

pnpm --filter mobile run --if-present typecheck
结果:EXIT=0

pnpm check:i18n-glossary
结果:✅ 术语表 31 条已裁决 / 23 条待讨论,en / zh-CN / ja / ko 无新增违规

pnpm check:i18n
结果:✅ zh-CN / en / ja / ko 共 6083 个 key 全部一致
      (另有 480 处 ja/ko 未翻译占位的警告,是既有问题,与本 PR 无关)

pnpm check:dco
结果:DCO check passed: 1 commit signed off

术语表门禁做过反向验证:把 独立任务空间 / Independent Task Space 注入 ccAgent.layout.taskWorkspaceLabel,门禁按预期报错并指回 Working directory 条目,随后回滚该注入。

手工验证

macOS,pnpm restart:desktop:remote -- --isolated=tasknaming 沙箱实例,desktop:whoami 校验 root + commit 均 MATCH。逐处目检并按反馈修正了 3 轮:

  1. 项目选择器原本被改成「任务或选择项目」——那是归属分类(不绑项目的那一桶),不是单条条目,改回「对话或选择项目」;同源的 3 处(设置→任务导入的位置筛选、归属标签、统计)一并改回
  2. 消息 ··· 菜单:「在新任务中继续」→「开启一个新任务」;「复制当前任务链接」→「复制当前消息链接」
  3. 任务顶部归属 chip:权衡后维持「对话 <编号>」(编号用于区分同时开着的多条任务),未改成「工作目录」

未执行的验证

  • Windows 未实机验证:纯 renderer 文案,无平台分支逻辑
  • pnpm --filter desktop test(全 tier,比提交门禁范围大)有 3 个失败makerSendToSessionOrdering.test.ts,断言是 expected -1 to be greater than or equal to 0(源码字符串锚点找不到)。已在干净的主 checkout(无本地改动)上跑同一文件,同样 3 个失败,与本 PR 无关,且不在 pnpm test:unit 范围内
  • ja / ko 界面未目检:本 PR 对这两个 locale 文件零差异

风险

风险分类

  • 无已知风险

纯 i18n 文案 + 文档 + 术语表,无源码逻辑改动(git diff --stat 里唯一的非 locale/测试/文档改动是 apps/mobile/app/sessions/new.tsx 的一行中文注释——它被 newSession.test.ts 当作 indexOf 源码锚点,术语不同步会让锚点返回 -1)。

影响与回滚

  • 影响范围:中文与英文界面文案、i18n/glossary.jsondocs/product-rules/。不涉及 main 进程、SQLite、system prompt、协议、原生层、fingerprint
  • 回滚 / 降级方式:revert 单 commit,无数据迁移、无配置残留

已知代价(需要产品承担,已确认接受)

两个月内第二次大规模改名。 glossary.jsonsession 条目原先记录着上一次裁决:落地时把 440 处「会话」+ 22 处「聊天」统一改为「对话」(2026-07)。再改一次,已发布的截图、教程、帮助内容,以及用户已形成的认知都要跟着变。

落地方法(写进了文档 §6.0,后来者别再踩)

最初让脚本按正则自动判断并批量替换、人工事后 review。结果改坏了:代码标识符(buildDialogueWorkspaceDir,靠 typecheck 才暴露)、OpenAI 协议名(Chat Completions)、动词(you chat from hereyou session from here)、飞书的群/单聊、以及 5 条同类文案改得互相不一致。抽查命中率约 9%

正确流程:脚本只负责列出候选(key + 英文原文 + 当前中文),逐条人工判断要不要转、转成什么,只写入确认的那些,默认不转。 最终 565 条里 87 条判定保持「对话」——这 36 条正是自动规则最容易改错的地方。

chat 尤其不能批量替换,它同时承载至少五种互不相干的含义(协议名 / 模型类型 / 外部平台概念 / 动词 / 界面区域 / 那个条目);conversation 也不能——IM 集成里的 conversation 指的是飞书、微信、Telegram 自己的会话。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

术语不变量清单(给后续 review 当锚点)

改名类 PR 逐条打补丁容易发散,这里把判据固定下来。三条不变量,全部细则见
docs/product-rules/task-and-conversation-naming.md

I1 — 指条目就说「任务」。 「那个能单独打开/删除/归档/重命名的东西」= 任务;
任务内人与 AI 交流的过程或内容 = 对话;单条 = 消息。「会话」是 forbidden 译法,只在
指 Agent 进程 / runtime session 时保留(§2、§6.0.2,门禁靠 glossary.json
exempt 白名单登记)。

I2 — 「新 X」按落库行为定名,不按命令名字。(§6.0.3)

触点 底层 说法
IM 平台首次私聊 INSERT 新任务
已有私聊 /new UPDATE 原行 新对话
消息菜单 fork INSERT 新任务
/ctr → ➕ 新建 INSERT 新任务

前两条共用同一份设置和同一句文案 → 必须取两者都成立的「新对话」。

I3 — 同形副本要成组改。(§6.0.4)im/{telegram,discord,feishu,wechat}/uiText.ts
是四份近亲文案包;改任一渠道必须同轮把四个一起过。判据是「这句话在别的包里有没有
同形副本」,不是「reviewer 点了哪个」。

按读者划的改动边界(全仓 102 处硬编码「会话」已逐条归类,§6.0.4):

类别 处理
渠道直接发给用户(4 个 uiText.ts 改,已清零
main 抛给 renderer 的 Error message 不改:renderer 按 error code 渲染 i18n(fork.tschat.userMessage.forkErrors.*rewind.tschat.rewind.errors.*),这串只进日志
插件 / MCP / LLM 读的字符串 不改:不是 UI 文案
Orca 协同术语 不改:归 orca-team-architecture.md
测试 fixture 不改

刻意保留:discord / feishu / wechat 的「存档 / 上号」是渠道语气(feishu/uiText.ts
文件头写明「偶尔带点游戏味的隐喻(上号、存档、副本、AFK 之类)」),非错译。要不要统一
成「任务」是产品语气取舍,记在 §8 遗留。

Copilot AI review requested due to automatic review settings July 31, 2026 06:25
@dashhuang
dashhuang requested a review from a team as a code owner July 31, 2026 06:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

本 PR 将面向用户的中文术语体系做了裁决与落地:把 session 的中文译名从「对话」调整为「任务」,并明确「任务 / 对话 / 消息」三层概念边界,同时同步更新术语表门禁、产品规则文档,以及 Desktop/Mobile 的多语言文案与相关测试断言。

Changes:

  • 更新 i18n/glossary.json 与生成的 i18n/GLOSSARY.md,新增/调整 session/chat/task/message/turn/working-directory 等条目与豁免/禁用规则。
  • 新增权威产品规则文档 docs/product-rules/task-and-conversation-naming.md 并在索引与 Agent 入口规则中挂载。
  • 批量更新 Desktop/Mobile 的 zh-CN/en 文案与测试断言,匹配新的术语分层与歧义消解口径。

Reviewed changes

Copilot reviewed 26 out of 27 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
i18n/GLOSSARY.md 术语表文档(由 glossary.json 生成)的裁决结果更新,反映新的 session/task/message 等口径与禁用项。
i18n/glossary.json 术语门禁规则更新:Session→「任务」,补充 alsoAllowed 与新增 task/message/turn/working-directory 条目。
docs/product-rules/task-and-conversation-naming.md 新增权威产品规则,定义「任务/对话/消息」分层与判定规则,并记录落地方法与边界案例。
docs/product-rules/README.md 产品规则索引新增 task/conversation 命名规则入口。
apps/mobile/src/i18n/locales/zh-CN/settings.json Mobile 设置页相关文案将「对话」调整为「任务」语义。
apps/mobile/src/i18n/locales/zh-CN/session.json Mobile 会话流程、菜单、错误提示等大范围从「对话」迁移到「任务」,并将 message 相关表述改为「消息」。
apps/mobile/src/i18n/locales/zh-CN/models.json Mobile 模型切换确认文案按「任务」口径更新。
apps/mobile/src/i18n/locales/zh-CN/message.json Mobile 消息级 UI 文案中 automation/会话 chip/fork 等用词更新为「任务/自动化」。
apps/mobile/src/i18n/locales/zh-CN/interaction.json Mobile 权限确认与交互错误文案按「任务」口径更新。
apps/mobile/src/i18n/locales/zh-CN/files.json Mobile 文件浏览空态等从「对话」改为「任务」。
apps/mobile/src/i18n/locales/zh-CN/devices.json Mobile 设备与远程会话列表文案从 conversation 改为 session,对应中文从「对话」改为「任务」。
apps/mobile/src/i18n/locales/en/session.json Mobile 英文文案收敛:将 conversation 表述改为 session。
apps/mobile/src/i18n/locales/en/message.json Mobile 英文消息菜单从 “Fork conversation” 收敛为 “Fork session”。
apps/mobile/src/i18n/locales/en/interaction.json Mobile 英文 rewind/截断相关文案将 conversation 更精确区分为 chat。
apps/mobile/src/i18n/locales/en/devices.json Mobile 英文设备页从 conversation 收敛为 session。
apps/mobile/src/tests/sessionTailBannerModel.test.ts 更新断言以匹配「新建任务」等新文案。
apps/mobile/src/tests/sessionSwipe.test.ts 更新 action menu 的中文 label 断言(删除对话→删除任务)。
apps/mobile/src/tests/sessionMenu.test.ts 更新菜单 header 与 copy link label 的中文断言(远程对话→远程任务等)。
apps/mobile/src/tests/newSession.test.ts 更新源码锚点注释与新建确认文案断言以匹配「任务」口径。
apps/mobile/app/sessions/new.tsx 更新用于测试锚点的中文注释(新建对话→新建任务)。
apps/desktop/src/renderer/i18n/locales/zh-CN/common.json Desktop zh-CN 大范围术语落地:session→任务、task 歧义消解、automation 去“任务”等。
apps/desktop/src/renderer/i18n/locales/en/common.json Desktop en 大范围收敛:conversation→session;并在部分语境中使用 chat 表示交流内容。
apps/desktop/src/renderer/tests/PermissionPrompt.i18n.test.tsx 更新权限提示的 zh-CN 断言(本对话总是允许→本任务总是允许)。
apps/desktop/src/renderer/tests/builtinToolsCollabDescriptionI18n.test.ts 更新协同模式描述的 zh-CN 断言(新建对话→新建任务)。
apps/desktop/src/renderer/tests/automationGeneratedSessions.test.ts 更新自动化运行历史相关的 zh-CN 断言(对话开销/价值→任务开销/价值;持续对话→持续任务)。
apps/desktop/src/main/agent-island/tests/service.test.ts 更新 Agent Island 发布数据的 zh-CN 标题断言(未命名对话→未命名任务)。
AGENTS.md Agent 工作入口规则索引补充:遇到「任务/对话/消息」文案变更需先读对应产品规则。

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/product-rules/task-and-conversation-naming.md Outdated
Comment thread i18n/glossary.json

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0f30fd9e0f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/renderer/i18n/locales/en/common.json Outdated
Comment thread apps/desktop/src/renderer/i18n/locales/en/common.json Outdated
Comment thread apps/desktop/src/renderer/i18n/locales/zh-CN/common.json Outdated
Comment thread apps/desktop/src/renderer/i18n/locales/zh-CN/common.json Outdated
@greptile-apps

greptile-apps Bot commented Jul 31, 2026

Copy link
Copy Markdown

Greptile Summary

本 PR 统一了任务、对话和消息的多语言产品术语。

  • 更新桌面端、移动端、原生菜单及 IM 渠道中的相关文案
  • 新增权威命名规则,并扩充术语表及其生成文档
  • 同步调整帮助内容和依赖具体文案的测试断言

Confidence Score: 5/5

本 PR 看起来可以安全合并。

未发现需要阻止合并的功能性失败。

Important Files Changed

Filename Overview
docs/product-rules/task-and-conversation-naming.md 新增任务、对话和消息的分层定义、跨语言裁决及迁移方法。
i18n/glossary.json 更新 session、chat、thread 的裁决,并新增 task、message、turn 与 working-directory 条目。
apps/desktop/src/renderer/i18n/locales/zh-CN/common.json 按新术语边界更新桌面端中文界面文案。
apps/mobile/src/i18n/locales/zh-CN/session.json 按新术语边界更新移动端任务相关中文文案。

Reviews (33): Last reviewed commit: "docs: 修正 Orca 协作任务命名指引" | Re-trigger Greptile

Comment thread docs/product-rules/task-and-conversation-naming.md Outdated
@MagicLizi

Copy link
Copy Markdown
Contributor

@dashhuang 👋 这个 PR 还有 7 条 review conversation 没 resolve(docs/product-rules/task-and-conversation-naming.md / i18n/glossary.json / apps/desktop/src/renderer/i18n/locales/en/common.json / apps/desktop/src/renderer/i18n/locales/zh-CN/common.json),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

@MagicLizi

Copy link
Copy Markdown
Contributor

@dashhuang 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

@MagicLizi

Copy link
Copy Markdown
Contributor

💡 本 PR 改动涉及 UI 代码路径,但 description 未附界面效果证据(截图/录屏/HTML 预览)。建议补充改动后效果,便于确认界面符合 DESIGN.md 设计规范。

这不是阻断性问题,审查会正常进行。

Copilot AI review requested due to automatic review settings July 31, 2026 08:56
@dashhuang
dashhuang force-pushed the dash/session-task-naming branch from 0f30fd9 to b04d001 Compare July 31, 2026 08:56
@dashhuang

Copy link
Copy Markdown
Member Author

本轮反馈已全部处理,6 条 review thread 均已回复并 resolve,push 到 b04d0019

逐条

按底层不变量归了 3 族,一族一并修,避免逐条打补丁:

族 A — 英文侧把「指内容的词」改成了「指条目的词」@chatgpt-codex-connector ×2)

  • chat.rewind.dialog.continueWillTruncate / summaryRunninglater sessionsubsequent messages
  • settings.chatEmbedding.cell.descriptionNew session messagesNew chat messages(回到原文)

顺这条不变量扫全仓,又查出一处同类残留一并修chat.messageActionBar.deleteConfirmDescriptionLater session stays in placeLater messages stay in place。现在 later session 在全仓 en 文案清零。

族 B — 中文侧同句歧义没消解干净@chatgpt-codex-connector ×2)

  • stopBashTitle:括号恢复「不关闭会话进程」。这条判据比英文原文更硬——该 key 本来就在 glossary.jsonsession 条目的 exempt 列表中,我改成「任务进程」等于违反自己登记的豁免
  • workspaceDetail:「不会自动开始任何任务」→「不会自动开始运行」。英文原文 nothing starts running on its own 里根本没有 task,那个「任务」是旧中文的过度翻译

族 C — 文档自身准确性@copilot-pull-request-reviewer ×2、@greptile-apps ×1)

  • 章节编号:### 2.4 误落在 ## 4. 下,已整段搬回 §2.3 之后
  • working-directory 的 forbidden:门禁本来就能拦(子串匹配,「独立任务空间」含「任务空间」,提交前实测过),问题在 note 措辞误导人。已把说明改成「禁用是子串匹配,前缀变体都会被一条拦下」并附实测结果,没有加永远命中不到的冗余条目
  • §6 落地统计:确实是旧版本,已按当前 HEAD 重新实测更正

统计数字更正说明

@greptile-apps 指出的数字问题里有一层它没看到的原因:这个 PR 期间 origin/main 前进了 24 个提交(本仓很活跃),每次 rebase 都会带进新的含「对话」文案,基数因此变动。所以我这次不是照 PR 描述抄,而是重跑脚本按 origin/main..HEAD 实测:

数量
含「对话」的中文候选 565(改 478 / 保持 87)
en conversation/dialogueSession 110
en conversation/dialogueChat 26
en conversation 保留不动 16
en chatSession(白名单) 11
术语表 7 个(新增 4 + 改译 3)

本轮 rebase 也按同一套规则处理了新进来的 2 条文案:subagentModels.toast.deferredSuffixsessions + task 同句,按 §3.1 消解)、mobile systemCard.autoResume.details(与 desktop 同款 key 对齐)。

验证

run-unit-gate.sh          GATE_EXIT=0
desktop / mobile typecheck  双 EXIT=0
pnpm check:i18n           ✅ 6091 个 key 四语一致
pnpm check:i18n-glossary  ✅ 31 条已裁决,无新增违规
pnpm check:dco            ✅ b1c19aca..b04d0019

首轮门禁有 2 个失败,都已定位并修掉:mobile systemCard.test.ts 断言依赖我改动前的文案;desktop 12 个 suite 报 Cannot find package '@cindy/responses-anthropic-bridge',是 rebase 带进 #1055 的新 package 后未 pnpm install,与本 PR 改动无关。

关于 UI 证据

改动是纯文案(无布局/颜色/组件/动效),已在 macOS 沙箱实例(--isolated)实机目检,并据目检结果修正了 3 处:项目选择器改回「对话或选择项目」(那是归属分类不是单条条目)、消息菜单改为「开启一个新任务」「复制当前消息链接」、顶部 chip 维持「对话 <编号>」。详见 PR 描述的「手工验证」。

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@greptile-apps

greptile-apps Bot commented Jul 31, 2026

Copy link
Copy Markdown

整理得很清晰,三族归并处理是正确的思路,避免了逐条打补丁导致的规则漂移。

几个具体确认:

族 Alater session 全仓清零,且 settings.chatEmbedding.cell.description 回到 New chat messages 而非强行套 session,这是对的——那个 key 描述的是内容维度,不是条目。

族 BstopBashTitle 恢复「会话进程」,这个判断很准:glossary.jsonexempt 列表本身就是产品裁决的一部分,自己改掉等于破坏了唯一权威来源。workspaceDetail 去掉多译出来的「任务」也对——回译是个好检验,英文没有的词中文不应该凭空生。

族 C — 门禁说明改成「子串匹配,前缀变体一条拦下」比列冗余条目更干净,后来者能直接理解而不是靠猜。

统计数字随 rebase 基数变动是正常现象,重跑脚本按当前 HEAD 实测更新是正确的,不应该去对齐一个历史快照。

所有 gate 通过,逻辑自洽,文档与实现对齐。这个 PR 可以合。

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 27 out of 28 changed files in this pull request and generated no new comments.

Suppressed comments (1)

apps/mobile/src/i18n/locales/zh-CN/devices.json:152

  • 这里的文案位于 automationScope(上方 eyebrow/title 都是「自动化」),但 emptyTitle 仍写「这个任务」,在本 PR 将 session 译为「任务」后会产生歧义(读起来像在说某条会话)。建议改为指代自动化本身。
      "emptyTitle": "这个任务还没有运行记录"

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b04d00195c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/renderer/i18n/locales/en/common.json
Comment thread apps/mobile/src/i18n/locales/zh-CN/session.json
Comment thread apps/desktop/src/renderer/i18n/locales/zh-CN/common.json Outdated
Comment thread apps/desktop/src/renderer/i18n/locales/zh-CN/common.json Outdated
Copilot AI review requested due to automatic review settings July 31, 2026 09:20
@dashhuang
dashhuang force-pushed the dash/session-task-naming branch from b04d001 to 6698c0b Compare July 31, 2026 09:20

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6698c0b2a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/renderer/i18n/locales/zh-CN/common.json Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 27 out of 28 changed files in this pull request and generated no new comments.

Suppressed comments (1)

apps/mobile/src/i18n/locales/zh-CN/devices.json:103

  • 这里的无障碍提示文案仍使用“自动化任务”,与本文件其它位置已将可见标签统一为“自动化”且刻意移除“自动化任务”用词的方向不一致;对读屏用户也更容易把它误解为“自动化实体”而不是“自动化生成的条目”。建议改为“筛选自动化生成的任务”以保持一致。
      "automationA11y": "筛选自动化任务"

Comment thread apps/mobile/src/i18n/locales/zh-CN/devices.json Outdated
Comment thread apps/mobile/src/i18n/locales/zh-CN/devices.json Outdated
@MagicLizi

Copy link
Copy Markdown
Contributor

@dashhuang 👋 这个 PR 还有 4 条 review conversation 没 resolve(apps/desktop/src/renderer/i18n/locales/en/common.json / apps/desktop/src/renderer/i18n/locales/zh-CN/common.json / apps/mobile/src/i18n/locales/zh-CN/devices.json),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

Copilot AI review requested due to automatic review settings July 31, 2026 09:41
@dashhuang
dashhuang force-pushed the dash/session-task-naming branch from 6698c0b to 272634f Compare July 31, 2026 09:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 27 out of 28 changed files in this pull request and generated no new comments.

Suppressed comments (2)

apps/mobile/src/i18n/locales/zh-CN/devices.json:103

  • 这里的无障碍文案仍使用「自动化任务」,但本 PR 的命名规则里已明确 automation 中文统一为「自动化」(避免与 Session=「任务」同句撞词)。建议改成不含「自动化任务」这一说法,避免与新规则冲突。
      "waiting": "待处理",
      "automation": "自动化",
      "activeA11y": "筛选活跃任务",
      "waitingA11y": "筛选待处理任务",
      "automationA11y": "筛选自动化任务"

apps/mobile/src/i18n/locales/zh-CN/files.json:11

  • sendToSession 仍是「发送到对话」,但其它语言为 “Send to Session”,且本 PR 已将 Session 的中文统一为「任务」。这里会导致同一概念在移动端出现「任务/对话」混用;另外 preview.sendToSession 也建议同步改为「发送到任务」。
    "noWorkdir": "该任务没有工作目录,无法浏览文件。",
    "rootDir": "(根目录)",
    "copyPath": "复制路径",
    "sendToSession": "发送到对话",

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 155 out of 157 changed files in this pull request and generated no new comments.

dashhuang and others added 22 commits August 1, 2026 03:45
`session` 原先中文译作「对话」,这个词表达不出 Cindy 最重要的能力——同时跑
多个互不干扰的工作。用户看不出左侧列表里的每一条其实是一个有自己空间、可以
并行推进的独立工作。

但这不是全局替换。概念分三层,各有明确所指:

  任务 (Session) —— 左侧列表里可打开 / 删除 / 分享的条目
  对话 (Chat)    —— 任务内人与 AI 交流的过程与内容
  消息 (Message) —— 对话里的一条往来

「轮次」刻意不作为界面术语:AI 在一轮里的思考与工具调用最终折叠成一条消息,
所以消息与轮次是同粒度的两种切法、不是包含关系——现有删除行为就是这个口径
(「AI 消息会删除上一次用户输入之后产生的整轮输出」)。弹窗 (Dialog) 与本次
改名无关,未动。

英文侧一并收敛。改名前同一个东西有五种写法,只改中文治不了根——写文案的人看到
`Dialogue` 仍会译成「对话」:`conversation`(124) 与 `dialogue`(16) 全部改为
`session`,指容器的 `chat`(53) 同样改为 `session`,`chat` 仅保留 12 处指交流
过程与内容(chat history / chat panel / chat text)。

「任务」与 `task` 的歧义是落地最大的坑:"This session is currently running a
task" 直译会变成「当前任务正在执行任务」。原则是**同句出现时 task 一侧必须
改写**(优先动词化,确需名词用「执行」/「作业」),不同句且语境清晰时沿用
「任务」(104 处未动,「后台任务」「定时任务」本身不歧义)。`automation` 原先
叫「自动化任务」,与 session 同句会出现「删除任务和任务」这种读不通的文案,
中文统一为「自动化」——英文侧本来就以 `automation`(38) 为主、只有 4 处叫
`automation task`。

顺带修掉两批既有译名错误(与改名无关,本来就该修):42 处英文是 `message` 却
译成「对话」("Delete this message" → 「删除本条对话」)、7 处英文是 `turn`
同样译成「对话」。

未改:代码标识符与内部字段;ja / ko 文案(セッション / 세션 是音译,不存在中文
这种一词多义);SSH 远程会话 / Agent 进程会话 / 登录绑定会话 / 操作系统桌面
会话(那是另一类 session,与产品概念无关)。

门禁不能笼统禁「对话」——那会把「对话区」「对话正文」这些合法用法一并拦下。
`session` 用 alsoAllowed + when 按语境豁免;`message` 的 forbidden 收窄到精确
的错译形式「条对话」,因为一句话里可能既有 message 又有合法的「对话X」,机器
分不清对应关系。

验证:pnpm test:unit 全绿(desktop 16537 / mobile 2660 / 根 316,零失败);
desktop 与 mobile typecheck 通过;pnpm check:i18n-glossary 通过。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Dash <dashhuang@gmail.com>
review 第 8 轮。两条反馈同一不变量: IM 的 `/new` 走 resetSessionToDefaults,
只 UPDATE 原 session 行、不产生可单独打开的条目,所以描述这条路径的文案不能
说「新任务」。按落库行为(INSERT / UPDATE)重新判定了整族触点:

- settings.wechatBot.workingDir.* 与 toasts.workingDir*: 四语回 origin/main
  的 conversation 口径(该设置同时管首次私聊与 /new,只有「新对话」两边都成立)
- settings.telegramBot.commandMenu.new: zh 回「开启新对话」;en/ja/ko 一并按
  §4.2 成对改成 chat / 会話 / 대화(原文 session 同样不准确)
- settings.telegramBot.commandMenu.stop: 「停止当前任务」→「中止当前执行」。
  /stop 只中止执行、条目保留,而本 PR 让「任务」专指条目;en/ja/ko 的
  task/タスク/작업 不与 session 撞车,保持不动

同时做收敛检查点(同族第 3 轮返工): 上轮只改了 telegram/uiText.ts,而 discord /
feishu / wechat 是同形近亲文案包。本轮四个包一起过完,「会话」在这四个文件清零
——接管流程指桌面条目的改「任务」,同句含 task 的按 §3.1 消歧,引用设置项名字的
改成「新对话配置」,🤖 自动任务 → 🤖 自动化。刻意保留三个渠道的「存档 / 上号」
(feishu/uiText.ts 文件头写明的渠道语气,非错译)。

另修 copilot 指出的两处:
- sessionActionStrip 的 filesDisabledReason 判据只是 !!workingDir,不能断言
  「因为不绑项目」(同文件测试 fixture 恰好是有 worktreePath 的 Orca Worker),
  改成只陈述状态;测试断言同步
- codex agent 的 memory description: 「从聊天中」→「从对话中」(聊天是 chat
  条目的 forbidden 译法)

规则落进 task-and-conversation-naming.md §6.0.3 / §6.0.4,并按读者把全仓 102 处
硬编码「会话」分了改与不改。

Signed-off-by: Dash <dashhuang@gmail.com>
review 第 9 轮。copilot 连两轮列出不同实例,做检查点后归成一族: 注释或测试常量
里**断言「用户看到的是 X」**的地方,X 已被本 PR 改掉,注释就变成了错的 —— 比不改
更坏,后来人会照注释把代码往反方向"修正"。

- 「未命名对话」→「未命名任务」41 处 / 20 个文件: 兜底文案实际值已是「未命名任务」
  (ccAgent.common.unnamedSession / sessionHeader.untitled / mobile
  devices.list.untitled 实测)。含 test 里 `const UNNAMED = '未命名对话'` 这类替身
  常量 —— 值是注入的、不影响行为,但留着会变成下一个人改代码的依据
- hook-control/__tests__/interactions.test.ts: 「注:按钮文案用「对话」」而按钮已是
  「本任务总是允许」
- sessionList.ts / sessionTitleProjection.test.ts: 同段注释里「会话」与「任务」混用

泛指 session 的普通注释仍按 §8 不动(「idle 会话直接显示」这类)。

另把 im/shared/__tests__/threadUiFixture.ts 整体回退到 origin/main: 它保存的是
2026-07-17 退役的 SlackIM 文案包原件(文件头写明不进产品包),价值就是忠实副本;
上轮误改 4 句,反而让「开一个新会话」与「同一个任务」并列进同一句。三个引用它的
测试只按结构使用,不断言这些字面量。

copilot 另提的 shared 层硬编码中文(remoteSessionListTitle /
deviceSessionEmptyState / mobile messageActionMenu)是 origin/main 既有状态,
下沉到 i18n 属独立重构,已记进 §8 遗留。规则落进 §6.0.5。

Signed-off-by: Dash <dashhuang@gmail.com>
review 第 10 轮。三条反馈都指向同一件事: 判据不能按文件目录归类,只能按
**这句话会不会原样出现在用户眼前**。

- maker-ipc/sessionReferenceResolver.ts(14 处): SessionReferenceError 经
  agent-input-coordinator::resolveReferenceContexts 落进 projection.error,
  CCAgentSessionView 的 ErrorBanner **原样展示**(同文件测试
  `error).toContain('snapshot is missing')` 钉着这条链)。所以粘贴「任务链接」
  失败时用户看到的是「找不到本机会话」「最多引用 N 个会话」。全部改「任务」;
  「无效的会话历史」按 §2 改「无效的对话记录」
- maker-ipc/register.ts: renameSessionsConfirmBridge 把「批量重命名会话」的确认卡
  交给 desktopConfirmImNotifier,飞书通知原文即此串,而桌面卡片已是「确认批量
  重命名任务」—— 同一次确认两套术语
- commands/builtins.ts: /clear 描述引用了侧栏「New Chat」按钮,该标签已不存在
  (现为 New / 新建)。改成不引用标签的说法;顺带 /jump-session 的「跳转到该会话」
- help-knowledge/collaboration.md 同样引用 "New Chat",改后跑 pnpm gen:help-kb
  重新生成 helpKnowledge.generated.ts(help-kb-guard PASS)

顺带修掉一处 origin/main 既有乱码: sessionReferenceResolver.ts 有两句
`来源设备返回了无效的会话历史` 存成了 UTF-8 字节按 GBK 解过一遍的形态
(鏉ユ簮璁惧杩斿洖浜嗘棤鏁堢殑浼氳瘇鍘嗗彶),真触发时用户看到乱码。

文档侧把 §6.0.4 那条过宽的规则改掉(原文把「main 抛给 renderer 的 Error」整类判成
不改,只对 fork / rewind 那种按 code 映射 i18n 的成立),并补上连续四轮返工的路径
清单 —— 每轮漏的都是一条**展示路径**,不是一个目录。

Signed-off-by: Dash <dashhuang@gmail.com>
review 第 11 轮,同族第 5 次返工 —— 触发收敛检查点,这轮不再逐条等 reviewer 点,
把 main 侧的出口(sink)一次枚举干净。判据不是文件在哪个目录,而是这个函数把
字符串送去了哪里。

codex 点到的:
- notificationService.buildFeishuText(): 飞书完成/失败/需回复通知实际发的是
  `Cindy · 会话「X」…`,而设置页已是「任务完成或需要回复时发送飞书消息」——
  同一条通知两套术语。改「任务「X」」,3 条测试断言同步
- 同文件 showDesktopSessionEvent 的 safeTitle 兜底 '会话' → '任务'(标题为空时
  直接显示在系统 toast 上),两条描述 toast 内容的 jsdoc 一并跟改(§6.0.5)

检查点顺带查出的同族两处(reviewer 未点):
- device-link/ipc.ts ×3: throwIpcError('SESSION_REFERENCE_UNSUPPORTED' /
  '..._UNAVAILABLE', '…会话引用…')。确认 ipcError.* 里没有这两个 code 的 i18n
  条目,所以 message 原样展示 —— 与上一轮改的 sessionReferenceResolver 同一功能、
  同一展示路径
- ORCA_WORKER_READY_MESSAGE: 注入 worker 对话流的系统消息,「Orca Worker 会话已
  就绪」→「Orca Worker 已就绪」(去掉冗余名词,不动 Orca 自己的 Worker/Lead 术语);
  测试断言同步

文档新增「main 侧直接送到用户眼前的出口清单」(12 行表 + 两条可复现的 grep),
连续五轮的返工路径表补上第 5 行。

门禁:GATE_EXIT=1,唯一失败是 voice-input/ElevenLabsScribeProvider 的 WS 握手撞
HTTP 403(单文件复跑 7/7 通过,与本轮 diff 无代码路径交集),其余 17137 passed。

Signed-off-by: Dash <dashhuang@gmail.com>
codex 指出 §4 那张表自相矛盾: 表里写「Conversation 已全部改为 Session、英文侧不再
使用」,而同文档 §4.1 明确要求保留 IM 平台 / conversation lane / 隐私文案三类,en
catalog 里也确实还有 New Feishu conversations 这类合法实例;`Chat` 的「改了 12 处」
又和 §6 的 11 处冲突。这份文档是后续改术语的权威入口,这种表会让维护者去删掉刻意
保留的表达 —— 属实。

三张表全部按当前 HEAD 重新实测,并写清口径:

- §4 英文侧: Session 365→476 / Conversation 136→**19** / Dialogue 16→**0** /
  Chat 131→144 / Thread 11→11。去向拆开写(conversation: 101→Session、12→Chat、
  4 改写、19 保留),并加了一条醒目提示「不要读成 Conversation 已清零」
- §5.1 ja/ko: 原表的 271/16、277/11 用当前口径复现不出来(它们来自会话早期一次
  针对旧 origin/main 的测量)。换成「key 名含 session 的条目」这个可复现口径:
  ja セッション 124→143 / 会話 23→4;ko 세션 127→143 / 대화 25→8
- §6 落地记录: chat→Session 11→14;新增「conversation 改写成别的说法 4」一行;
  conversation 保留 16→19;ja/ko 收敛数改成实测并注明两种口径的差别
  (全部 key 残留 60/96 里多数与 session 无关,如 会話コンテキスト)
- zh 侧 478/87 → 466/99: review 期间的多次回退(imBot.defaults、wechatBot
  .workingDir、commandMenu.new 等)把条目从「改动」挪回了「原样保留」

§4 末尾附了可复现的统计脚本(口径 = 值里含该词的 key 数,不看 key 名、不数出现
次数),并在 §6 开头写明数字会随 rebase 漂移、重跑脚本而不是拿旧数字对账。

上一轮报告的 ElevenLabs WS 握手失败本轮未复现,GATE_EXIT=0。

Signed-off-by: Dash <dashhuang@gmail.com>
copilot 第 4 次提 messageActionMenu.ts 硬编码中文,这次给了个之前被我忽略的证据:
同目录 sessionMenu.ts 的注释明写「文案走 i18n:本模块四语言都在用 i18n.t,不能塞
硬编码中文(mobile 支持 en / ja / ko)」——也就是说这个目录本来就有规则,
messageActionMenu.ts 是唯一的例外。原判「pre-existing、属独立重构」不成立:改法
就是照抄隔壁,5 个 label 而已。

- apps/mobile/src/i18n/locales/{zh-CN,en,ja,ko}/session.json 新增 messageMenu 段
  (fork / addToChat / copyLink / rewind / deleteOne),措辞与 desktop 的
  chat.messageActionBar.* 对齐;四语各 235 key,手工核对一致
- messageActionMenu.ts 改为 i18n.t('session.messageMenu.*'),并把「为什么必须走
  i18n」写进文件头注释
- 测试按 sessionMenu.test.ts 的先例加 beforeAll(changeLanguage('zh-CN')),让字面量
  断言与语言环境解耦

顺手修一处同源漏改:desktop 的 chat.messageActionBar.copyLink 在 ja/ko 仍是
「現在の会話リンクをコピー」/「현재 대화 링크 복사」,而该操作复制的是带
messageClientId 的**消息**深链 —— zh/en 早先已按此改过,ja/ko 漏了。

文档 §8 两条遗留更新:messageActionMenu 移出「仍硬编码」清单;新增一条记录
pnpm check:i18n 只覆盖 desktop common.json、mobile 的 15 个 locale json 没有 key
对齐门禁(本次靠手工核对),扩门禁属独立改动。

Signed-off-by: Dash <dashhuang@gmail.com>
## 上一轮我自己引入的回归(codex 指出)

messageActionMenu 改走 i18n.t 之后,MessageRenderer.tsx:1648 那个 useMemo 只依赖
5 个 capability,于是 label 只在首次计算时取值 —— 用户在任务页挂载期间切显示语言,
菜单会一直停在切换前的语言。把 i18nInstance.language 加进依赖(同目录
SessionMenuSheet 的做法是不 memo,这里是热路径、保留 memo 更合适)。

## 映射竞态守卫(codex 指出)

- hook-control/dispatcher.ts:1142:「这个对话所在的目录已不在工作目录映射里…」经
  outcome.errorMessage → turn.end.errorMessage 原样发给渠道用户
- hook-control/session-runner.ts:520:复用运行中实例的守卫,「这个对话正在一个…」
  且让用户「关掉这个对话」

两处都指条目,改「任务」。同目录另两条 IM 通知上轮已改,这两条是同一流程的守卫分支。

## 补扫「对话」查出的两处同源漏改

上一轮枚举 main 侧出口时只反向扫了「会话」,没扫「对话」—— 补扫 35 处后逐条判过:

- im/wechat/WechatIM.ts:1210 的 /help:「/stop 停止当前任务;/stop all 停止全部任务」
  → 「中止当前执行 / 中止全部执行」。核过实现:/stop 走 stopActiveTurn,/stop all 走
  disposeAllSessions + stopActiveTurn,都不删任务条目;原文会让人以为任务被停掉
- maker-core codex 的 memory description:「在新任务中召回」→「在新会话中召回」。
  按 §6.0.2 判据(会不会让用户做多余动作)——说「新任务」会让人以为必须新建任务才能
  用上记忆;同款的 claude-code/index.ts:563 本来就写「新会话」,两条现已一致

其余 33 处判为正确保留(IM 的 /new 语义、§2.3 归属分类、对话记录/对话压缩等)。

## 文档

§6.0.4 出口清单补两条方法论:①「按出口函数名 grep」看不见文案当返回值逐层传出的
情形(dispatcher/session-runner 就是),必须配反向扫描;②反向扫描要同时搜「会话」
和「对话」。返工路径表补第 6 行。

Signed-off-by: Dash <dashhuang@gmail.com>
rebase 到最新 origin/main(带进 Lark 接入 #1133、钉钉连接器一整串、侧栏 mod+1..9
快速切换 #1184 等 20+ 提交),按 task-and-conversation-naming.md 逐条过了新增文案。

冲突 1 处(zh-CN/common.json 的 settings.notifications):main 把飞书改成
「飞书 / Lark」,本 PR 把「对话」改成「任务」—— 取两者合并。

新带进的 21 条含术语词文案,逐条判断后改 19 条:

- settings.shortcuts.items.switch-session-1..9 的 label + description(18 条):
  zh 写「切换到第 N 个对话」「跳转到侧边栏第 N 个可见对话」,而 en 是
  `Go to session N` / `…visible session in the sidebar`,ja/ko 也已是
  セッション / 세션 —— 典型的中英不成对(§4.2),且指的就是侧栏条目(§2.2)。
  只改 zh,其余三语本就正确
- im/dingtalk/uiText.ts 的 `/stop 停止当前任务,并撤掉排队消息` →「中止当前执行」。
  新渠道的文案包重复了同一个坑:/stop 只中止执行、任务条目保留(§3.1、与
  telegram / wechat 已改的同款)

判为正确保留的:
- channelDescriptions.dingtalk「钉钉新对话会使用…已有对话发送 /new 后应用」——
  与其它渠道同款,且 /new 不产生新任务(§6.0.3)
- dingtalk 的 `/new 开个新对话(清掉当前上下文)`——同上
- imBot.tips.personalFeishuOnly 里的「新对话配置」——设置项真名
- 新增的 hook-control LLM 指令串(「当前是 Slack 会话」「飞书 / Lark session」等)
  ——给模型读的,不是 UI 文案(§6.0.4)

门禁:GATE_EXIT=0;desktop / mobile / maker-shared / maker-core typecheck 全 0;
check:i18n ✅ 6168 key 四语一致;check:i18n-glossary ✅。

Signed-off-by: Dash <dashhuang@gmail.com>
本轮两位 reviewer 给了**相反**的建议,核过之后各取其正确的一半。

## codex:computerUse 三处 toggleHint 句中换了概念(对)

「这个开关只对之后新建的 **Agent 会话**生效;已在运行的**任务**不受影响。」——前半句
说运行时、后半句跳到产品条目,用户读完不知道该重启当前任务还是新建一个。对照三语:
en `does not affect a session that is already running`、ja「実行中のセッション」、
ko「진행 중인 세션」,两个半句都用同一个 session,只有 zh 在句中换了概念。而且这三个 key
本来就登记在 glossary 的 session.exempt 里,改一半更不自洽。改回「已在运行的 Agent
会话不受影响」,en/ja/ko 本就正确、不动。

顺手把 exempt 列表里 desktop: 前缀的条目全打出来自查了一遍同句混用:另外 5 处
(stopBashTitle、forkErrors.unsupportedHistory、collaboration 两条、subagentModels.hint)
都是两个词各指其物、句意清晰,刻意保留 —— 要看的是「同一个所指被换了两种叫法」。

## copilot:maker-core 的 memory description 该用「新任务」(与 codex 口径冲突)

copilot 说「新会话」是禁用译法、应写「新任务」;而按 §6.0.2,写「新任务」会让用户以为
必须新建任务才能用上记忆(rewind / 重启同一任务也生效)。两边都对,说明是**这个名词本身
选错了**:该 capability 描述的是「记忆之后会被自动召回」,且它落在 maker-core、不是
locale 文件、没法登记 exempt。所以两个 agent 的描述统一改成「从对话中生成新记忆并在
**后续对话**中召回」——用户视角真实、不含禁用词、也不暗示任何多余动作。

## 文档

§6.0.2 从一条判据扩成三条:①会不会让用户做多余动作;②同句前后两半必须在同一个概念上
(附 exempt 自查办法,并说明同句混用不等于错);③两个词都不合适时把名词绕开——遇到
reviewer 意见相反,先怀疑名词选错了。

Signed-off-by: Dash <dashhuang@gmail.com>
## MCP 生效范围(codex,对)

「保存后新建的**任务**即可调用,已在进行中的任务不受影响」会让用户为用上 MCP 白开一条
新任务。核过代码:claude-code/index.ts:1935 的 buildMcpServers() 在 buildQuery 里求值,
而同文件 :982 注释写明「一次性 buildQuery + buildMcpServers」——/clear、rewind 等重启
同一任务的 Agent runtime 时会重新执行,所以同一任务的下一个 Agent 会话就生效。

zh 两条改成与兄弟文案 settings.builtinTools.toggleHint 同款措辞:
「新建或重启的 Agent 会话即可调用,正在运行的 Agent 会话不受影响」;deleteConfirm
.message 同步。en/ja/ko 与 origin 一致、本就用 session/セッション/세션,不动。

两个 key 现在含「会话」,已登记进 glossary session.exempt(共 37 条),并重跑
pnpm i18n:glossary-doc 同步 GLOSSARY.md(门禁的「文档过期」分支会拦)。

## 帮助文档(codex,对)—— 这次扫全 24 篇

sidebar.md 的任务菜单说明仍写 **Copy conversation link**,而界面已是
`Copy session link`,帮助把用户指向一个不存在的菜单项。这是同一目录第 3 次被点
(前两次是 collaboration.md 的 "New Chat"),所以这轮不再只改被点的行,把 24 篇扫完:

- sidebar.md ×2:Copy conversation link → Copy session link
- import-sessions.md:「by dialogue」→「by chat」(位置筛选的真实标签是 `Chat`,
  见 settings.sessionImport.filters.dialogue)
- sessions-and-chat.md:小标题 **Conversation controls:** → **Chat controls:**

判为内容义、保持不动的 9 处:conversation history / Memory across conversations /
rewinds the conversation / Codex and Claude conversations(CLI 磁盘上的)等。

改完跑 gen:help-kb 重新生成 helpKnowledge.generated.ts,gen:help-kb:check PASS。

## 文档

§6.0.4 返工路径表补第 7 行,并新增一节:帮助内容要单独扫,判据是「引用的是界面标签
还是交流内容」,附 grep 与「改完必须 gen:help-kb + gen:help-kb:check」。

Signed-off-by: Dash <dashhuang@gmail.com>
## /clear 的描述与实现不符(copilot,对)

上一轮我为了去掉过时的「New Chat」标签引用重写了这条描述,但**沿用了 origin 里本来
就错的行为声明**。核过实现:renderer 收到 DESKTOP_COMMAND_TRIGGERED 后调
clearSession() → clearSessionAfterGuard,注释写明「把窗口清空、从最新重新拉起」,
是**原地**清空当前任务的对话上下文,不新建草稿、也不切走。

而 help-knowledge/{commands,sessions-and-chat}.md 写的才是对的(「resets the
conversation in place without creating a new session」),两边一直互相矛盾。改成与
实现和帮助一致的说法,并把判据写进代码注释。

## mobile fork 确认弹窗硬编码中文(copilot,对)

同页其它 Alert 已走 t('session.screen.*'),这个弹窗是唯一例外 —— 与上一轮
messageActionMenu 同一类缺陷、同一个论据(en/ja/ko 环境下显示中文)。

- 四语 session.json 的 screen 段新增 forkConfirmTitle / forkConfirmDescription /
  forkConfirm / forkCancel,措辞与 desktop 的 chat.messageActionBar.fork* 逐条对齐
- [sessionId].tsx 改为 t(...),并把「为什么必须走 i18n」写进注释

## rebase 到最新 origin/main(X hook / device-link 协同入口 / scheduler 阶段机等 6 提交)

冲突 1 处(settings.tina.chat.description):main 把平台清单加了 X,本 PR 把
「独立复用 session」改成「独立对应一个任务」—— 取两者合并。

新带进 2 条含术语词文案,处理 1 条:
- newChat.collaboration.remoteContinueNotice(新):四语都与**同流程的兄弟 key**
  startFailedContinue 不一致 —— 后者已是「单任务 / a single session / 単一セッション /
  단일 세션」,前者却写「单对话 / a single conversation / 単一の対話 / 단일 대화」。
  同一功能两种叫法,四语一并对齐
- 硬编码新增的「当前是 X (Twitter) 会话」是给模型读的指令串,不改(§6.0.4)

门禁:GATE_EXIT=0;mobile / desktop typecheck 双 0;check:i18n ✅ 6195 key;
check:i18n-glossary ✅。

Signed-off-by: Dash <dashhuang@gmail.com>
codex 指出:agentIsland.native.newConversationTitle 改成 New Session 后,Agent Island
的**冷启动 / 回退态**仍会露出旧名 —— 该 helper 是独立进程,拿到 main 的本地化状态之前
用自带默认值。核实并改了两处:

- apps/desktop/src/shared/agentIsland.ts 的 DEFAULT_AGENT_ISLAND_STRINGS:
  'New Chat' / 'Start a new conversation' → 'New Session' / 'Start a new session'
- native/agent-island/macos-agent-island-helper.swift 的 AgentIslandStrings.fallback:
  "New Maker" / "Start a new conversation" → "New Session" / "Start a new session"
  (前者是更早的品牌名,比 locale 落后两代)

两处都与 en locale 逐字对齐。该目录只有 .swift 源、无签入产物,改源即生效。

## 顺手穷尽了「影子 catalog」这一类

§6.0.1 早把影子 catalog 列为一类,但我只找过 applicationMenuLabels.ts。这次换成
**在 locale 之外搜英文旧标签**(而不是搜代码里的中文),确认本仓只有这两处;命中的其余
结果全是数据库默认标题哨兵 'New Maker'(deviceLinkCreateArgs 写入、
isDefaultDraftSessionTitle 判定、swift 侧 normalized != "new maker"),**绝对不能改**
——projectDraftSessionTitle 那套机制存在的意义就是把哨兵挡在用户视线外。

文档把这两处 + 搜法 + 哨兵红线写成了表。

## copilot:glossary note 里的韩文错字

session 条目 note 里同一句写了「대話」(末字误用汉字)又写了正确的「대화」,已统一;
重跑 pnpm i18n:glossary-doc 同步 GLOSSARY.md。

门禁:GATE_EXIT=0(首轮 SIGSEGV,是与另一 worktree 门禁并发跑时崩的,非断言失败;
另一门禁结束后重跑通过);desktop typecheck 0;check:i18n ✅ 6195 key;
check:i18n-glossary ✅;定向跑 agent-island 6 文件 243 tests 全过。

Signed-off-by: Dash <dashhuang@gmail.com>
codex:这两条报的都是「Codex 运行时状态 / live Query 不可用」,产品任务本身没坏,
说「任务」会让用户以为任务损坏。对照 en/ja/ko —— 三语说的都是 runtime
(`The Codex session state` / `Codex セッションの状態` / `Codex 세션 상태`;
`Session is inactive` / `セッションが非アクティブ` / `세션이 비활성 상태`),又是只有 zh
被我改坏。

- chat.userMessage.forkErrors.codexStateUnavailable:「Codex 任务状态不可用,无法开启
  新任务」→「Codex **Agent 会话**状态不可用,无法开启新任务」。前半句指 runtime、
  后半句指 fork 真的产出一条新任务,两半各指其物(§6.0.2 第二条允许的那种混用)
- chat.rewind.errors.noLiveQuery:「任务未激活」→「Agent 会话未激活」。抛错条件就是
  SDK live Query 没起来,提示也正是「先发一条消息把 SDK 唤起来」

两个 key 登记进 glossary session.exempt(共 39 条),重跑 i18n:glossary-doc 同步
GLOSSARY.md。en/ja/ko 与 origin 一致,不动。

## 文档:把共享层 i18n 缺口的清单记全

copilot 已就这一类点了 4 轮,每轮多报一个函数。§8 那条从「两个函数」扩成完整表:
sessionList 的 remoteSessionListTitle / deviceSessionEmptyState、sessionSelection 的
summarizeMobileSessionBulkAction、scheduleModel 的 summarizeRun,并写明各自被哪个
mobile 页面直接渲染。

同时点明**修法不是改用词、而是让共享层不产出文案**(调用方传 t/strings,或只返回结构化
数据),要动 3 个模块 + 调用点 + 测试,属独立重构;并区分它与本 PR 内已迁 i18n 的
messageActionMenu / fork 弹窗——后者是页面自己的文案,改法就是照抄同目录既有写法。

门禁:GATE_EXIT=0;desktop typecheck 0;check:i18n ✅ 6195 key;check:i18n-glossary ✅。

Signed-off-by: Dash <dashhuang@gmail.com>
这条不是 reviewer 提的,是我复盘 20+ 轮反馈后认定的**根因修复**。

## 问题

本 PR 的反馈里有 4 轮是同一类错误:把 Agent 运行时会话译成了「任务」
(memory toast / computerUse toggleHint / MCP 生效范围 / forkErrors 与 rewind)。
每一次 en/ja/ko 都是对的 —— 因为它们一词通用、没有可错的空间;**只有中文被迫二分**。

而术语表把这件事表达成了「一个 session 条目 + 39 条路径白名单」。白名单只说明
「这里允许出现『会话』」,没说明「这里指的是哪一种 session」—— 逐条判断时没有可对照的
名字,于是同一个错反复犯。实际上那 39 条覆盖了**五个**不同概念:

  产品条目 / Agent 运行时会话(22 条) / 登录校验会话(2) / SSH 远程与传输(5) /
  操作系统桌面与 mobile 语音连接(6)

## 改动

新增 **agent-session** 条目(decided):

- 译法:zh「Agent 会话」/ ja「Agent セッション」/ ko「Agent 세션」——把最容易译错、
  且唯一「译错会改变用户行为」的那一类给了名字,可正向查
- forbidden: zh 禁「任务」when 英文源含 agent session。精确、当前零误报;唯一的合法
  混用 forkErrors.unsupportedHistory(前半指运行时、后半指条目)已登记 exempt
- note 写明**门禁拦不住哪一半**:英文只写 session 的那批(`The Codex session state` /
  `Session is inactive` / `in-flight sessions`)机器判不出来 —— 英语本身不区分,同句
  两个所指并存也合法。与其加个会误伤的词形规则,不如把「为什么不能加」写清楚

实测:把 computerUse 三处 toggleHint 改回犯错时的写法,门禁报 3 处违规并阻断;
回滚后恢复绿。

session 条目的 note 从散述改成明确交叉引用 agent-session。

## 文档

§6.0.2 从「Agent 进程会话不跟改」改写成「英文的 session 在本仓是五个概念」,开头给
五语义对照表 + 术语表条目归属,再给三条人工判据(多余动作 / 同句同概念 / 绕开名词),
并说明门禁能拦与不能拦的边界。文档抬头加了「动手前先读 §6.0.2」。

门禁:GATE_EXIT=0;check:i18n-glossary ✅ 32 条已裁决;GLOSSARY.md 已重新生成(60 条)。

Signed-off-by: Dash <dashhuang@gmail.com>
codex 指出被过滤掉的不是产品任务。核实 maker-host/codex-local-sessions.ts 的
isInternalSourceValue:过滤的是 source / originator 为 exec、codex_exec、subagent 的
底层 thread —— 即 Codex 的非交互运行与子代理线程,用户在侧栏里根本没有对应条目。
说「已跳过的内部任务」会让用户以为自己有一批任务被藏起来了。

en/ja/ko 也都是 runtime 口径(`skipped internal sessions` /「内部セッション」/
「내부 세션」),又是只有 zh 被我改坏:

- settings.sessionImport.description:「已跳过的内部任务」→「已跳过的内部 Agent 会话」。
  同句前半「只有列表里勾选的任务会被导入」保持不变 —— 那些确实会变成产品任务,属
  §6.0.2 判据二允许的「两个词各指其物」
- settings.sessionImport.summary.filteredHint:「内部任务或已在应用内」→
  「内部 Agent 会话或已在应用内」

两个 key 登记进 glossary session.exempt(共 41 条),重跑 i18n:glossary-doc 同步。

顺带说明:这一条的判断直接来自上一轮新建的 agent-session 条目与 §6.0.2 的五语义表
(「Agent / 引擎运行时会话 → Agent 会话」),不再需要临时权衡 —— 那个术语条目开始起作用了。

另本轮 rebase 到最新 origin/main(auto-review 基础设施、SkillHub 本地导入、插件基座
revert 等 12 提交)。冲突 1 处 × 四语:main 给 issueTracker 加了 emptyTitleUnverified,
本 PR 改了同段 startIssueChat —— 取两者合并。按规则检查 rebase 带进的新文案:locale
侧 0 条含术语词,硬编码侧 0 条,无需跟改。

门禁:GATE_EXIT=0;四包 typecheck 全 0;check:i18n ✅ 6204 key;check:i18n-glossary ✅。

Signed-off-by: Dash <dashhuang@gmail.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Dash <dashhuang@gmail.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Dash <dashhuang@gmail.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Dash <dashhuang@gmail.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Dash <dashhuang@gmail.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Dash <dashhuang@gmail.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Dash <dashhuang@gmail.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 155 out of 157 changed files in this pull request and generated no new comments.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e0183f2380

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/product-rules/task-and-conversation-naming.md Outdated
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Dash <dashhuang@gmail.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 155 out of 157 changed files in this pull request and generated no new comments.

@MagicLizi

Copy link
Copy Markdown
Contributor

术语体系梳理得很到位——「任务/对话/消息」三层对应清晰,IM 四端同步改动也毫无遗漏,glossary 的豁免注释写得很细心。🎯

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants