Skip to content

feat(sharing): 支持跨账号共享任务并与同一 Agent 协作 - #4554

Merged
DavidShenXD merged 35 commits into
mainfrom
cindy/witty-kepler
Sep 22, 2026
Merged

DavidShenXD merged 35 commits into
mainfrom
cindy/witty-kepler

Conversation

@DavidShenXD

@DavidShenXD DavidShenXD commented Sep 16, 2026 •

Copy link
Copy Markdown
Collaborator

这次改了什么

摘要

支持跨账号共享单个任务:访客读取全部上下文,直接与房主的同一 Agent 交流,复用 device-link、任务界面和输入队列。房主确认离线后保留 60 秒重连宽限,持续离线才关闭共享;主动关闭立即生效。原任务 sessionId 不变,共享只增加授权关系。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护

范围

  • 需求与规则:docs/product-rules/shared-task-mode.md。配套服务端:https://github.com/xindong/cindy-server/pull/685。
  • 包含邀请、加入、退出、成员移除、关闭全部共享、任务上下文与媒体范围校验、作者标识、Agent 输入与撤权处理。
  • 每账号同时开启最多两个、加入最多两个,分别计数;每个任务最多两名访客,服务端事务约束。
  • 访客使用原任务 Agent 权限;已有权限审批沿用房主处理流程。无新增讨论频道或独立会议服务器。
  • relay 的 src/dst 只承载真实设备 ID;独立 sharedTask 字段传递任务范围,服务端按账号、设备和成员关系重写来源。共享要求 shared-task-v2;普通同账号远控(包括带旧共享前缀的真实设备 ID)保持兼容,不兼容未发布共享 v1。
  • 客户端连接状态按设备与共享范围分开,响应核对请求编号、类型和来源连接;跨任务响应/错误不能结算当前请求。移除旧开发接口别名与旧开发数据库搬迁脚本。

UI 变化

  • Desktop 顶部仅保留共享图标;侧栏按“我开启的共享 / 我加入的共享”分组,两类同时存在时使用胶囊切换。无共享时隐藏分组,不显示计数,任务行沿用 Agent 图标。
  • 共享管理采用方案 B;加入界面关闭全部共享采用方案 C,危险操作与取消左右分开,确认在同一窗口内替换。
  • Mobile 共享主页面全屏,关闭、移除、退出用紧凑确认弹窗;iOS 复用现有原生控件。访客任务详情直接退出共享,避免重复进入任务造成白屏。
  • 引用的设计规范:docs/design-rules/DESIGN.md §2 语义颜色、§4 按钮与弹窗、§5 圆角与点击目标,以及 docs/design-rules/design-governance.md;Light/Dark 均使用主题 token。
  • 设计 HTML 和真实客户端截图仅本地保存,不提交工程。

怎么验证的

自动验证

本轮显式共享范围改造:pnpm test:unit:related、Desktop/Mobile typecheck、两个 device-link 包的 build(tsc --noEmit)通过。新增真实设备 ID 与本地连接索引无碰撞、旧 relay 拒绝共享、同设备普通远控与两个共享任务的响应/错误/ACK/重发/关闭隔离回归。

此前整合轮的数据库和 UI 等专项记录(未作为本轮重新执行的证据):

  • pnpm test:unit:related:通过,涵盖 test:runner、Desktop、Mobile、device-link、lizi-mcps、maker-core、maker-shared、orca-workflow。
  • pnpm --filter desktop --filter mobile --filter @cindy/device-link --filter @cindy/device-link-protocol --filter @cindy/maker-shared run --if-present typecheck:通过;没有 typecheck script 的包按命令语义跳过。
  • pnpm --filter desktop db:validate:通过,0000..0114 连续且主干历史迁移冻结。
  • pnpm --filter desktop test:migration-replay:11 项通过。
  • Desktop 数据库专项:sharedTasks 7 项、sessionsUpdate 61 项通过。
  • mobile envBundleTransform / usePromptRecommendation 定向回归:27 项通过。
  • pnpm check:i18n:通过,有存量文案警告;pnpm check:dco:通过。

手工验证

此前在隔离服务、两个真实 Electron 客户端与 CN Android 模拟器上做过分步 UI/流程检查;本轮完成协议与路由自动回归,未将历史截图算作当前提交的完整黑盒验收。

未执行的验证

本轮未重新完整验收双客户端、Android 和 iOS;正式旧版客户端实连、真实多实例/对象存储、SSH、完整双主题实机验证仍需验收。

风险

风险分类

  • SQLite / migration
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 跨平台差异
  • 原生层 / fingerprint / OTA

影响与回滚

  • 共享记录迁移基于最新主干重新生成为 0114_shared_task_events;旧主干 migration 未修改。已删除旧开发版搬迁 companion;旧开发沙箱保留原库,使用新隔离库验收,不自动升级未发布开发库,禁止强改 schema_version。
  • 不升级正式用户数据库进行验收,不做破坏性降级。回滚需遵守数据库版本准入,不能把本 PR 迁移后的数据库直接当成任意旧版本可读。
  • 服务端先完成迁移与全部 relay 实例升级,再发布新客户端。能力缺失时拒绝共享,不降级为全设备授权;旧普通远控协议仍为 v1。
  • 故障半径:单共享连接的响应、错误、ACK 和关闭仅操作该连接;不为一个任务重置其他任务或整条 relay。测试同一物理设备的普通连接与两个共享连接并存,确认一个共享的 ACK/关闭不阻断其他连接。
  • SSH:本轮仅改变 relay 地址与共享范围的表示,原任务执行和文件能力仍走已有远程通道。Mobile 与 Desktop 共用 socket 编解码;无新增 IPC channel 或 push topic。
  • 移动端冷更判断:本 PR 相对 main 未修改原生配置、原生依赖、config plugins、modules 或依赖补丁,仅 JS/TS/UI,不新增 native fingerprint 输入。main 自身的原生版本要求仍须满足。
  • 存量插件影响:无,未修改插件基座。保持 Draft,本轮不部署、不合并。

提交前检查

  • 已 review 整体 diff 与主干冲突解决
  • 每个 commit 都带 DCO 签名
  • UI 改动注明设计规范
  • 未提交凭证、临时设计 HTML 或截图
  • 已同步产品规则、验证与风险

共享附件存储前缀调整(2026-09-20)

  • 本轮提交 ed211be 与服务端 PR fix(desktop): Codex 远端 401 不再走 CC/XD 静默重试,直接显「同步登录态」 #685 的 03731011 配套:附件路径统一为 cindy/device-link/shared-task///<uuid.ext>,复用既有中转前缀的 OSS 授权与生命周期,避免要求新增顶层前缀配置。
  • Desktop/Mobile 共用的任务附件校验同步更新,仍拒绝普通账号附件、其他任务附件、旧开发路径和畸形路径;同步桌面与手机上传相关测试。普通同账号远控附件不变,无新增 UI、原生配置或 migration。
  • 本轮验证:pnpm test:unit:related 通过;Desktop/Mobile typecheck 通过;@cindy/device-link 543 项测试及 tsc --noEmit 通过;git diff --check、DCO 检查通过。Windows 测试进程补充 Git Bash 到 PATH 后完成脚本门禁,未修改测试断言或跳过失败用例。
  • 未重新运行真实 OSS 或三端黑盒;开发版两端需配套升级,不保留未发布 cindy/shared-task/ 路径兼容别名。

@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 已读取运行 35193904155 的失败日志。Linux unit tests (2/2) 失败来自 cindyMakeInlineEntry 的固定源码字符串断言;verify 因 Linux 分片失败而汇总失败,verify-checks 本身成功。

变更:

  • 改用 TypeScript AST 提取实际输入框条件,验证本机、同账号远控与访客在七类待处理交互下的行为,保留交互提示优先级检查。
  • 修复本地 Windows 符号链接权限导致的测试失败:Windows 使用真实 junction,POSIX 保留文件 symlink,并校验链接身份和 PATH_NOT_ALLOWED 拒绝结果。没有跳过测试或修改生产权限逻辑。
  • 提交:54f6fcb36。

验证:

  • pnpm test:unit:related:退出码 0,相关工作区全部通过;测试调度器 537 项通过、8 项按既有条件跳过。
  • 两个修改文件的定向测试共 115 项通过。
  • pnpm --filter desktop run --if-present typecheck:通过。@cindy/mcps 无 typecheck script,按仓库约定跳过。
  • git diff --check、pnpm check:dco:通过。

备注:

  • 仅修改两个测试文件,没有移动端原生输入变动,不触发冷更。未合并 PR;推送后不等待新一轮 GitHub 自动检查。

@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 已逐项核对运行 35514065372 的 7 项失败。verify-checks、Windows unit tests (1/2) 和 Desktop Git integration 都在测试调度器的文档链接检查中失败;verify 与 Windows unit tests 是汇总失败。
  • Linux unit tests (2/2) 与 Windows unit tests (2/2) 失败于 PI 审批用例等待真实轮询的时序。

变更:

  • 提交 15f2e87:共享任务文档明确设计 HTML 仅保存在本地,移除指向未跟踪文件的仓库链接;不上传临时设计稿,也不放宽文档门禁。
  • 三组 PI 审批测试改为在审批回调安装后释放首次模拟状态发现,避免真实 500ms 轮询与默认 1s 断言期限竞争;保留允许、拒绝、异常拒绝及 payload 断言,并在 finally 中回收测试会话。审批业务代码未改。
  • 额外类型检查发现 Codex fork 测试缺少必填字段,补充 upToMessageId: undefined,保持原测试语义。

验证:

  • pnpm test:unit:related:通过,涵盖 test:runner、Desktop、Mobile、device-link、maker-core、maker-shared、lizi-mcps、orca-workflow。仅为测试进程补充 Git Bash 的 PATH,未修改机器或仓库测试配置。
  • test:runner:551 项通过、8 项按既有条件跳过,文档链接检查与 Windows 原子重命名检查通过。
  • PI 失败用例定向回归:5 项通过;整包 maker-core 回归也通过。
  • pnpm --filter @cindy/maker-core run --if-present typecheck:该包无同名脚本;另执行 pnpm --filter @cindy/maker-core build(tsc --noEmit)通过。
  • git diff --check:通过。

备注:

  • 本轮只修改文档与测试,不修改客户端功能、权限策略、CI 门禁或移动端原生配置,不触发冷更。
  • 本地在 Windows 验证,Linux 结果由新一轮 CI 确认;已推送,不等待远端自动检查。未合并 PR,未改变 Draft 状态。

@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 本轮由两个 subagent 分别审查客户端与服务端协议改造。客户端发现合法长设备 ID 经 JSON 转义生成共享连接标识后,超过 Desktop 缓存 IPC 的 256 字符限制,导致缓存读写、清理失败及列表条目丢弃;已修复。服务端未发现新增可行动问题。

变更:

  • 提交 d4dd70b:仅对通过现有规范解析器校验的共享 deviceId 接受其有界长度;普通 ID、sessionId 限制保持不变。
  • 消息读写、设备清理和列表持久化统一校验,新增 9 个回归用例,覆盖 host/guest 长标识、非规范标识、超长输入和 sessionId 限制。修复已由原 reviewer 复核通过。

验证:

  • pnpm --filter desktop exec vitest run src/main/device-link/tests/mirrorCacheIpc.test.ts:49 项通过。
  • pnpm test:unit:related:通过。
  • pnpm --filter desktop run --if-present typecheck:通过。
  • git diff --check、pnpm check:dco:通过。
  • 服务端 reviewer 定向运行 sharedTaskRouting、sharedTaskDeviceId、deviceLinkRelay 三个测试文件:80 项通过,包含 38 项本机真实 WebSocket 测试,Redis 与仓储使用 mock。

备注:

  • 本轮未重跑三端黑盒或 macOS 实机验证。未修改服务器代码、线上协议、权限和 UI。
  • 已推送原 PR;未等待远端自动检查,不操作合并或部署。

Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Preserve left-click navigation and sidebar blank-space menus. Add owned, joined and combined-role regression coverage. Verified related unit tests and desktop typecheck; Light/Dark client interaction not manually verified.

Signed-off-by: DavidShen <david@xd.com>
Resolve mobile home icon imports by retaining both shared-task FileText and Cindy Make Hammer.

Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD
DavidShenXD marked this pull request as ready for review September 21, 2026 13:54
@DavidShenXD
DavidShenXD requested a review from a team as a code owner September 21, 2026 13:54

@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: 96c1c499fe

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/renderer/features/device-link/SharedTaskButton.tsx Outdated
@greptile-apps

greptile-apps Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 3/5

当前不宜合并;必须先保证共享终止日志失败时账号交接不会继续完成,并且 device-link 持有权释放始终得到执行。

Findings

  1. P1 Security 登出撤权可能失效 ▶
Fix with agent prompt
### Issue 1
apps/desktop/src/main/bootstrap-electron.ts:2052-2053
当共享日志写入失败时,`closeSharedTasksBeforeLogout()` 会抛错。由于它与 `releaseDeviceLinkOwnershipBeforeLogout()` 位于同一个 `try` 中,后者会被跳过,但旧账号数据库随后仍被释放。结果是共享任务既没有可恢复的终止记录,也没有向服务端发送关闭请求,device-link 持有权也未释放;访客权限可能持续到独立的离线清理生效,而不是在登出或切换账号时立即撤销。第 2077–2078 行的第二段账号边界清理也有相同问题。

**How this was verified:** 日志写入失败会使共享关闭 Promise 被拒绝,而当前顺序会跳过后续持有权释放并继续销毁旧账号数据库。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
Summary

此 PR 为 Desktop、Mobile 和 device-link 协议引入跨账号共享单个任务的完整流程,包括成员授权、共享范围路由、任务与媒体访问、输入作者、撤权恢复、SQLite 权威日志和多端管理界面。

  • relay 地址继续使用真实设备 ID,并通过独立 sharedTask 范围隔离普通远控和多个共享任务。
  • Desktop 主机按服务端成员关系约束任务读取、输入、设置、附件和事件推送,并持久化关闭记录。
  • Desktop 与 Mobile 增加邀请、加入、移除、退出、关闭及共享任务分组界面。
  • 当前账号边界清理存在一处阻断问题:日志写入失败会被吞掉并继续释放数据库,使共享权限无法保证在登出时立即撤销。
Diagram
sequenceDiagram
  participant G as 访客客户端
  participant R as Relay / 服务端
  participant H as 房主 Desktop
  participant DB as 房主 SQLite
  participant A as 原任务 Agent

  G->>R: 携带 sharedTask 范围建立连接
  R->>H: 重写并验证来源账号、设备和成员
  H->>R: 获取权威共享快照
  H->>DB: 记录 authority revision
  G->>H: 读取历史或发送输入
  H->>H: 校验 sharedTask、session、成员与操作
  H->>A: 进入原任务输入队列
  A-->>H: 输出任务事件
  H-->>G: 仅向该共享范围推送事件
  Note over H,DB: 登出必须先持久化 terminal,再关闭服务端共享并释放持有权
Loading

Reviews (1) · Last reviewed commit: "Merge origin/main into cindy/witty-keple..."

Comment thread apps/desktop/src/main/bootstrap-electron.ts Outdated
Signed-off-by: DavidShen <david@xd.com>

@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: 693284db52

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/localDb/ipc/sessions.ts Outdated
@MagicLizi MagicLizi added status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) and removed status:conflict 与目标分支有冲突(review-pr 自动维护,仅展示) labels Sep 22, 2026
Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • Desktop 关闭当前共享的确认操作绑定打开时的 sharedTaskId,避免共享代次变化后误关闭新共享。
  • Mobile 关闭全部改为按确认快照逐项串行执行,并在每项前后校验页面、账号代次和挂载状态,避免页面离开或授权切换后继续关闭。
  • 长标题反馈已核对:创建共享时 trim 后按 128 个 UTF-16 码元安全截短且不拆分代理对,原任务标题保持不变;无需新增代码。

变更:

  • 更新 SharedTaskButton.tsx 与 shared-session.tsx。
  • 新增 Desktop 当前共享代次回归测试和 Mobile 批量关闭代次回归测试。

验证:

  • pnpm test:unit:related:通过(553 passed,8 skipped,0 failed)。
  • Desktop SharedTaskButton:17 项通过;Mobile sharedTaskFlow:18 项通过。
  • packages/device-link sharedTaskApi:21 项通过。
  • Desktop、Mobile、device-link typecheck:通过。
  • pnpm check:dco:通过。

备注:

  • GitHub 自动检查可能仍在运行,未等待其完成。

@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: 41d62f9ef9

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/localDb/ipc/sessions.ts
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理\n\n已处理:\n- 修复 relay 暂时断线时共享入口误报“需要升级”的问题;断线与共享能力不支持现在分别返回可重试错误和能力错误。\n- 归档或删除“我开启的共享”前校验关闭结果;服务端返回失败、结果缺失或异常时中止终态操作,避免任务已归档但共享仍存续。\n- 桌面端关闭确认绑定打开时的 sharedTaskId,避免轮询或并发重开后误关新的共享代次。\n- 移动端批量关闭逐项校验页面与账号代次,页面退出、失焦或账号切换后不再继续操作后续任务。\n\n变更:\n- Desktop IPC 注入 relay 在线状态,断线返回 DEVICE_LINK_NOT_CONNECTED,在线但不支持共享才返回 UNSUPPORTED_CAPABILITY;补充断线、恢复、能力区分及权限边界测试。\n- 补充共享关闭失败时归档/删除守卫的回归测试。\n\n验证:\n- pnpm test:unit:related:通过;测试调度器 553 项通过、8 项按条件跳过,Desktop、Mobile、device-link 及关联包均通过。\n- pnpm --filter desktop run --if-present typecheck:通过。\n- 共享定向测试:4 个测试文件、74 项通过;pnpm check:dco:通过。\n\n备注:\n- 已更正此前对 relay 断线反馈的结论:该问题是错误分类,不是单纯的入口可用性问题。未等待云端检查,不执行合并。

@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: 945b904bae

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/device-link/sharedTaskHost.ts
Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 区分 relay 临时断线与不支持共享能力,断线时返回 DEVICE_LINK_NOT_CONNECTED,在线但能力缺失时返回 UNSUPPORTED_CAPABILITY。
  • 共享关闭失败时阻止归档或删除,避免本地终态先于共享任务关闭。
  • 补齐 Bot 生命周期终态变更路径:Bot 任务归档或彻底删除后,按已持久化的任务清单关闭对应共享任务,并复用现有账号边界与关闭 journal。

变更:

  • 新增 Bot 保留历史与彻底删除两种场景的共享关闭回归测试。
  • 相关修复已提交并推送至 cindy/witty-kepler,最新提交为 77e0370。

验证:

  • pnpm --filter desktop exec vitest run src/main/localDb/ipc/tests/sessionsUpdate.test.ts:63/63 通过。
  • pnpm --filter desktop run --if-present typecheck:通过。
  • pnpm test:unit:related:已执行;仓库现有 hardcoded-color-audit 合同测试 2 项在 Windows 环境失败,失败点位于 scripts/tests/hardcoded-color-audit.test.mjs,与本次共享任务改动无关。
  • git diff --check:通过。

备注:

  • 未执行合并;GitHub 自动检查继续按 PR 流程运行。

@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: 77e03700c8

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/renderer/features/device-link/SharedTaskButton.tsx Outdated
Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • Bot Profile 删除现在先写入可回滚的共享关闭 intent,删除事务成功后再提升为 terminal 并执行共享关闭,避免 Bot 生命周期遗漏共享任务关闭。
  • 所有任务终态入口现在先持久化共享关闭 intent;终态提交成功后再标记 terminal,终态写入失败则回滚本次 intent。

变更:

  • 新增共享关闭 intent 的 prepare / finalize / rollback 两阶段 journal API。
  • 普通任务更新、远程 patch、批量归档、Bot Profile 删除统一接入该流程,并补充 journal、runtime、session IPC 回归测试。

验证:

  • pnpm --filter desktop exec vitest run src/main/localDb/tests/sharedTasks.test.ts src/main/device-link/tests/sharedTaskRuntime.test.ts src/main/device-link/tests/sharedTaskHost.test.ts src/main/localDb/ipc/tests/sessionsUpdate.test.ts:95 tests passed。
  • pnpm --filter desktop run --if-present typecheck:通过。
  • pnpm test:unit:related:仓库 runner 的两条既有 hardcoded-color-audit contract 测试失败(与本次共享任务改动无关),其余 runner 检查通过;未运行禁止的 pnpm test:unit。

备注:

  • 已签名提交 f76daa0 并推送到 cindy/witty-kepler;未合并 PR。

@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: f76daa04a8

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/localDb/ipc/sessions.ts Outdated
Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • IM rotateSession 归档旧任务时持久化共享关闭记录,覆盖 Telegram/飞书切换任务场景。
  • 终态任务采用两阶段共享关闭持久化,确保共享关闭记录写入失败时不会留下不可重试的终态。
  • Desktop 移除确认绑定打开时捕获的共享 ID,避免轮询期间共享切换或 detail 清空导致误操作或异常。

变更:

  • 在归档旧任务的事务中写入 terminal local-close journal,并补充事务与 shared_task_events 测试。
  • 保留并验证共享关闭 prepare、terminal 状态写入、finalize/rollback 流程。
  • 补充移除确认期间共享切换的回归测试。

验证:

  • SharedTaskButton 定向测试:18/18 通过。
  • tx 定向测试:92/92 通过;共享 runtime/host/journal/import 定向测试:80/80 通过;合并定向测试:110/110 通过。
  • Desktop typecheck、pnpm check:dco 通过。
  • pnpm test:unit:related:仅 2 条既有 hardcoded-color-audit contract 测试失败,与本次改动无关;按仓库规则未执行 pnpm test:unit。

备注:

  • 3 条相关 review conversation 已标记 resolved。GitHub 自动检查无需等待;无其他事项。

@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: 02eb04d866

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/renderer/features/device-link/SharedTaskButton.tsx
Comment thread apps/desktop/src/renderer/features/device-link/SharedTaskButton.tsx
Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

已处理该 conversation:终态任务状态与共享关闭 fence 现在由同一个 SQLite transaction 写入。单任务新增 sessions.setTerminalStatus,批量归档通过 sessions.setStatus 携带 closeSharedTasks 在同一事务内写入 local-close terminal=1;worker 与 inline worker 都覆盖。已补充两种执行路径的事务测试。

@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

已处理该 conversation:访客确认退出成功后立即移除对应 peer、清理 remoteProjectsStore 与 push fence,并关闭 device-link,再触发共享状态刷新;不再等待下一次轮询,当前任务页面由现有远程 session 收敛逻辑返回普通任务页。已补充即时清理测试。

@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

已处理该 conversation:relay 断开或请求超时不再回落为普通空状态,而是显示对应的连接失败/请求超时提示,并提供重试按钮;重试成功后恢复共享任务界面。已补充断线、超时与重试测试。

@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 终态更新与共享关闭 fence 已改为同一 SQLite transaction,覆盖单任务和批量归档。
  • 访客退出成功后立即清理 peer、远端任务投影、push fence 和 device-link 连接。
  • relay 断线/超时显示可重试状态,重试成功后恢复共享任务界面。

变更:

  • 新增 sessions.setTerminalStatus transaction,并让 archived 批量状态更新在事务内写入 local-close terminal=1。
  • 补充 Desktop worker/inline worker、访客退出和断线重试测试;提交 2efc626 已推送到 cindy/witty-kepler。

验证:

  • pnpm --filter desktop run --if-present typecheck 通过。
  • 定向 Vitest 通过:SharedTaskButton 20/20、tx 94/94、sessionsUpdate 65/65、setSessionsStatusInDb 35/35。
  • pnpm check:dco 通过。
  • pnpm test:unit:related 未完全通过:551 passed、2 failed、8 skipped;仅 hardcoded-color-audit 的两条 runner 测试失败。

备注:

  • 未等待 GitHub Actions;不 merge PR。上述 3 个 review conversation 已逐条回复并标记 resolved。

@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: 2efc6268b5

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/device-link/mediaFetch.ts Outdated
Signed-off-by: DavidShen <david@xd.com>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

已处理该 conversation:将 mediaFetch.ts 中对 sharedTaskMediaAccess 的运行时动态 import 改为文件顶部静态导入,保持共享媒体授权校验逻辑不变,避免 main 进程运行时模块解析风险。相关媒体取件、共享媒体授权与 file peer 测试均通过。

@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 将共享媒体授权校验从 main 进程运行时动态 import 改为文件顶部静态导入。

变更:

  • 修改 apps/desktop/src/main/device-link/mediaFetch.ts,仅调整模块导入方式,保留原有授权校验和媒体取件逻辑。
  • 提交 e2dd262 已推送到 cindy/witty-kepler。

验证:

  • Desktop 定向 Vitest 通过:mediaFetch、sharedTaskMediaAccess、filePeer 共 73/73。
  • pnpm --filter desktop run --if-present typecheck 通过。
  • git diff --check 通过(仅有换行符提示)。

备注:

  • review conversation 已回复并标记 resolved;未等待 GitHub Actions,不 merge PR。

@DavidShenXD
DavidShenXD merged commit 9770627 into main Sep 22, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:redline 改动碰到红线路径(updater / DB schema 等,review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示) touches:security 改动碰到安全边界(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants