Skip to content

维护者确认:#4856 模型图片输入声明与运行期对账 #4889

Open

Description

@MagicLizi

需要维护者确认

PR:#4856
head:c864c6204ed9df81b7122e4afc6608c2677a6d70

这次改动给目录未声明图片能力的自定义模型补上本地声明,并在 Pi 运行期把目录声明和已启动会话对上。

改了什么

  • 设置 → 模型 → 高级设置的「图片输入」变成三态下拉:跟随供应商 / 支持图片输入 / 不支持图片输入,写入本机目录 override 的 supportsImageInput。
  • 新增两条本机 IPC(读/写该字段),不进入 device-link allowlist。
  • 切模和发送带图消息时,若目录声明与会话快照不一致,热写该模型 input 并 switch_session 重载子进程;写失败回滚,重载不确认则终止任务。
  • 图片不支持的报错文案改为「切换一次模型或新建 Pi 任务」,并新增「图片输入能力更新未生效」的可重试提示。

为什么需要确认

  • 产品 / UI:用户能看见新的下拉交互,失败时也能看见新文案。这不是界面零变化的内部改动。
  • 技术架构:新增 preload / IPC 契约,override store 增加可写字段,maker-core 在发图和切模路径上重载 Pi 子进程。这改变了跨进程数据契约和会话生命周期,不是同结构里的实现替换。核心路径约 1642 行,总 diff 2601 行。
  • 规则文档:docs/design-rules/design-inventory.md 只把生成清单里 desktop.settings 的计数从 717 改为 718,不改变规则含义。这一条本身不单独构成确认理由;拦截来自上面的产品与架构变更。

请维护者直接在该 PR 上 Approve。如果需要作者修改,请使用 Request Changes。普通评论不能代替 Approve。


关联 PR:#4856(作者 @zyjisdog);本 issue 由 review-pr 流程自动创建,用于先讨论该 PR 涉及的产品 / UI 变更,维护者确认后 PR 会恢复推进。

Activity

  1. dash-s-cindy commented on Sep 22, 2026

    @dash-s-cindy

    判断

    这个确认门对应两个产品点:给目录模型补「图片输入」三态声明入口(跟随供应商 / 支持 / 不支持),以及让声明对已启动的 Pi 会话即时生效。两者都有真实用户诉求和仓库既有设计预留支撑,方向成立,值得放行推进。

    从当前 main(62400c8)看,这个 PR 正是仓库自己预留的后续工作:apps/desktop/src/main/maker-host/model-catalog-override-store.ts 头注释明确写着「本轮(PR-C)刻意不加 IPC/写 API:设置 UI 是后续 PR」,且 model-plane/localCatalogOverrides.ts 的 ModelCatalogOverrideFields 已包含 supportsImageInput(base 与 perAgent 均支持,sanitize 只收布尔)。本 PR 只为这一个字段开窄写入面(两条本机 IPC,不进 device-link allowlist;按 PR 描述复用 assertTrustedProviderMutationSender 断言链,该断言在 main 的 providerHandlers 已有先例),不开放通用 patch 写入口,与 #4269 请求的三态声明方向一致。

    行动

    1. 请维护者直接在 feat(desktop): 模型图片输入能力本地声明与运行期对账 #4856 上做门禁决定:认可下述两点即 Approve;有异议用 Request Changes 写明点位(普通评论不放行)。
      • 高级设置「图片输入」行从只读展示变为三态下拉;
      • 切模 / 发送带图消息时,目录声明与会话快照不一致则热写 models.json 并 switch_session 重载子进程,重载不确认即终止任务(fail-closed)。
    2. CI 当前有一条与本 PR 无关的 main 侧红:apps/desktop/src/renderer/__tests__/cindyMakeInlineEntry.test.ts:56 仍断言旧字面量 ) : cindyMakeRecoveryId && session ? (,而 feat(plugins): add remote authorization and private setup cards #4813 已把 CCAgentSessionView.tsx(约 5274 行)改为 topSlot={cindyMakeRecoveryId && session ? (。该测试在 main 上即失败,需要 main 侧单独修一行断言(feat(desktop): 支持远程消息文件与变更撤销 #4879 分支已带等效修复);不修会挡住所有并入 main 的 PR。
    3. bug: XD DeepSeek V4 Flash 下发仅文本能力,Pi 拦截图片但 Claude Code 可识图 #4857(XD DeepSeek V4 Flash 服务端声明 text-only 但 Claude Code 路径可识图)不在本 PR 范围(PR 明确不含 xd 网关模型声明面),需服务端目录数据另行修正,验收不要压在本 PR 上。

    动机与现状的关系

    PR 摘要中「未声明即拒收」描述的是 #4854 合入前的行为。#4854 已并入 main(按最近发布记录推断尚未进入安装包),Pi 对未声明图片能力改为默认放行:packages/maker-core/src/agents/pi/index.ts 约 2344 行 input: m.input ?? ['text', 'image']、约 5996 行 (nativeModel.input ?? ['text', 'image']).includes('image')。作者已把分支 rebase 到 upstream/main 并对齐两端口径(对账基线同样用 ?? ['text', 'image'],否则对未写 input 的模型声明 false 会被判成「无变化」而落不下去),pi-provider-routing 相关用例报告全绿。

    因此本 PR 当前的价值重心是:

    机制核对(已在 main 确认的部分)

    • switch_session 热重载与写失败回滚在 main 已有先例:packages/maker-core/src/agents/pi/__tests__/pi-provider-routing.test.ts 覆盖 xAI 目录刷新后的重载(SuperGrok appears after session start)与回滚(rolls models.json back when switch_session fails)用例;本 PR 复用同一机制与失败语义,不是新造的会话生命周期。
    • 目录 override 的 sanitize 面本就只接受显式契约字段(未知字段整条隔离),supportsImageInput 只收布尔;坏文件按既有语义隔离保留。
    • 回滚干净:删除 override 文件中 supportsImageInput 键即回到「跟随目录」;整 PR revert 后 UI 入口与 IPC 一并消失,无持久残留。

    建议 review / 验收重点

    • 新默认下的端到端:未声明模型默认放行 → 声明「不支持」→ 旧会话对账后本地拒收(不再打到上游);声明「支持」对已启动会话生效。
    • 发图路径上的热重载失败语义(重载不确认即终止任务):与 xAI 刷新一致的 fail-closed 选择,但发生在用户发图时,确认该 UX 可接受。
    • 远控 / 旧版本宿主为安装版时无对账代码,属版本差既定行为,建议在文案或文档中说明。
    • 五语文案已过 glossary 检查(作者报告);Light 模式未单独目检,颜色全走语义 token。

    以上基于 main 62400c8 的只读核对与仓库历史记录;未运行修改版客户端,PR 中的手工验证结论(Windows dev 构建、用户实测发图生效)为作者报告,最终以 review 与 CI 为准。

    相关记录

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions