Skip to content

[Grok/dsh 55] 图片生成与编辑服务 #187

Closed

Description

@Blackman99

Parent

#132

Ticket: 55

Status: ready-for-agent

User Stories: 56(见父规格)

What to build

用户在兼容交互中生成或编辑图片,结果保存、预览并可在会话中打开,服务可自行配置。

Acceptance criteria

  • 公开生成/编辑入口和参数映射到真实替代提供商,调用由 dsh 工具执行路径授权。
  • 参考图片、返回文件、任务进度、取消、服务拒绝和收费说明完整,不隐藏使用官方端点。
  • 失败不留下虚假成品或错误路径;保存与会话链接在恢复后仍正确。
  • 协议模拟与一条真实服务链验证齐备;未经批准不购买服务或大批量调用。

Blocked by

Delivery contract

用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。

Activity

  1. Blackman99 commented on Sep 26, 2026

    @Blackman99
    OwnerAuthor

    已集成到 rewrite/grok-dsh-20260920:022a417(图片生成与编辑服务,基于 33c1699,无需 rebase)。

    实现(对照验收标准)

    • 公开入口与参数映射到真实替代提供商,由 dsh 工具路径授权:[models] image_gen(可选 image_edit)指向带 base_url 且标记 supports_image_generation / supports_image_edit 的 [model.<id>];protocol = "xai"(默认,参考实现 JSON 请求体:prompt、aspect_ratio、resolution、data URL 参考图、b64_json)或 "openai"(OpenAI Images:size 来自 image_size,编辑为 multipart image[],可直接对接本地 stable-diffusion.cpp sd-server)。未配置时两个工具都不注册、不发任何请求;聊天模型不会被当作图片服务,单模型默认也不会选中图片服务。模型的 image_gen / image_edit 由 dsh 执行(rust-acp-image.mjs,仅在客户端开启时注册),/imagine <描述> 逐字发送参考指令;codsh --rust image generate|edit|list(--json)会话外使用同一配置。
    • 参考图片、返回文件、进度、取消、服务拒绝、收费说明,不隐藏官方端点:每次请求都走 dsh 审批,卡片为 Allow Generate image "<提示词>" via <主机>?(编辑为 Edit image (N ref) …),并注明发送内容、codsh 不知道该服务价格、费用由该服务决定。参考图支持 [Image #N] 标签(Ctrl+V 粘贴)、绝对路径、file://、data:,Read deny 规则会拒绝参考图路径。运行中行显示已用时间;Ctrl+C 结束请求进程组。官方主机(api.x.ai、grok.com)作为配置错误拒绝,inspect 显示 imagine (refused; see Invalid configuration) 与原因。
    • 失败不留虚假成品;恢复后保存与会话链接仍正确:回复先校验真实 png/jpeg/webp/gif 字节,再原子写入 <会话>/images/<n>.<ext>(目录 0700,不覆盖);服务拒绝、只返回 URL、字节损坏、HTTP 错误(如 402)、超时、取消都不保存文件并显示原因。/images 列出、/images open [N] 打开(CODSH_IMAGE_OPENER,否则 open/xdg-open)。--resume 后工具行保留标题(修复了会话投影丢失插件工具 tool/call 导致显示 [tool tool] 的问题),/imagine 按输入原样显示,/images 仍列出并打开同一批文件。
    • 协议模拟 + 一条真实服务链;未购买服务:见下。
    • 文档:README / README.zh 图片章节(含配置示例)、CONTEXT 术语、CONTRIBUTING 测试说明、长帮助、changeset、rust/upstream/MODIFICATIONS(对照 grok-build a28ee2b image_gen/image_edit/storage/imagine 编写,/imagine 指令与用法逐字,工具描述去品牌化)。

    检查(本机 Linux x86_64,keyless mock 模型,隔离临时 HOME,真实 dsh @deepseek-ai/dsh@0.1.5-rc.2)

    • python3 scripts/rust-image-gen-pty-test.py(新增,已加入 test:rust:pty,packed 安装产物 + 回环 xAI 形态假服务):通过。覆盖卡片 n 拒绝 / y 允许并保存 images/1.png(96x54)、/imagine 逐字、Ctrl+V [Image #1] 编辑保存 3.png、REFUSE/MALFORMED/URLONLY/HTTP 402 四种失败不落盘、挂起请求 Ctrl+C [cancelled] 无文件、/images 与 open、resume(标题//imagine/文件)、关闭时 RUST_ACP_IMAGE_TOOLS (none) 与 /imagine needs image_gen、官方主机被拒。
    • scripts/rust-image-gen.spec.mjs 22/22;pnpm test 106 文件 / 2620 passed / 15 skipped;pnpm run typecheck 通过。
    • cargo test --locked --workspace:codsh-rust 741 passed / 4 失败(2 个 filesystem_sandbox、privacy、voice,Linux 基线 33c1699 同样 729/4),其他 crate 1043 passed;新增 12 个 image_gen/config 单测。cargo fmt --check 干净;严格 Clippy -D warnings 仅基线已有的 filesystem_sandbox.rs:743(tail_marker)与 :1372(needless_return)2 项,-A dead_code -A clippy::needless_return 下 0 警告。
    • pnpm run build、pnpm run build:rust 成功(native linux-x64 SHA-256 ce4f97ed9fd0e5ee10568038b4a3fca4ede0d2936d0d723ac49fc3a92adc5d7d);check:rust-package(linux-x64)与 rust-install-test.py 通过。
    • legacy e2e(pnpm 10)全套 19 文件 / 177 passed / 1 skipped(含 wrapper/pty-input/pty-session/images)。
    • rust-pty-test.py、rust-turn/file/cancel-pty-test.py 在 Linux 上按设计拒绝(需 macOS 证据);伪造平台门后 turn/file/cancel 通过,仅作补充。

    真实服务链(本机 localhost,无密钥,无费用)

    stable-diffusion.cpp sd-server(commit 2f88688,SD-Turbo q8_0,--steps 1 --cfg-scale 1.0),protocol = "openai"、image_size = 256:

    • image generate:256x256 PNG,7.5 s;image edit(1 张参考图):256x256 PNG,12.2 s。
    • 实际 UI:/imagine a lighthouse at dusk, watercolor → 卡片 Allow Generate image "a lighthouse at dusk, watercolor" via 127.0.0.1:18187? y=allow once n=reject / Sends the prompt to 127.0.0.1:18187. codsh does not know its price; any charge is set by that service. Each image request asks again. → y → Image saved to images/1.png (256x256),Service: 127.0.0.1:18187 (sd-turbo) in 7.1s.

    未验证 / 未覆盖

    • 真实 xAI 形态或任何付费图片服务(按规格不购买、不调用官方端点;xai 协议仅用回环假服务验证)。
    • macOS 上的 PTY 运行与 open 打开器;Windows 未运行。Linux 下 xdg-open 真实查看器未打开(测试用记录脚本)。
    • 编辑器 ACP(codsh --rust agent stdio)不提供图片工具;视频生成属于 [Grok/dsh 56] 视频生成与媒体任务状态 #188。

    未改动

    main、npm 发布、默认切换均未改动。

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions