dsh-seework 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +102 -0
- package/assets/seework-image-capabilities.md +65 -0
- package/cordis.patch.yml +13 -0
- package/lib/client.js +6966 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +3930 -0
- package/package.json +80 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dehuadong
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# dsh-seework — 在对话里用 SeeAI Hub 生图
|
|
2
|
+
|
|
3
|
+
DeepSeek Harness(DSH)的插件:在对话里直接让 Agent 生图,图片显示在对应工具调用的那一行,并同时落进本机素材目录。会话右上角的「素材库」用来回看历史,「画布」用来把它们摆到一块自由空间板上(两个面都开在 DSH 右侧栏;没有会话的首页用右下角浮动按钮)。
|
|
4
|
+
|
|
5
|
+
只用自己的 SeeAI Hub 用户 API Key:地址和 Key 在设置里填一次,生图请求由本机宿主转发到 SeeAI Hub 的图片接口,密钥不出这台机器。
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
插件装进 DSH 的 profile;桌面客户端用的是 `desktop` profile。
|
|
10
|
+
|
|
11
|
+
**从 npm 安装**(正式使用):打开「设置 → 插件 → 添加插件」,输入包名 `dsh-seework`。
|
|
12
|
+
|
|
13
|
+
**从本地目录安装**(自己开发时):同一个对话框里选「本地插件目录」填工程路径;或者让 Agent 用 `plugin_manager` 装 `file:<工程路径>`。
|
|
14
|
+
|
|
15
|
+
桌面客户端把 dsh 收在自己的 `resources/app.asar` 里、没有暴露到 PATH,所以 `dsh plugin --profile desktop add ...` 这条命令行走不通(会被拒绝:`profile "desktop" is managed exclusively by the Electron application`)。上面两种方式返回 `application: applied` 就表示已在运行中的客户端里生效。
|
|
16
|
+
|
|
17
|
+
> 本地目录安装装的是**副本**,不是链接:改完代码要 `pnpm build && pnpm sync` 再重启客户端,否则客户端一直加载旧 bundle,而且**不会报任何错**。
|
|
18
|
+
|
|
19
|
+
### 首次使用
|
|
20
|
+
|
|
21
|
+
1. 打开「设置 → SeeWork」(设置对话框左侧导航,「Agent 预设」之后)。
|
|
22
|
+
2. 填两个地址——API 地址默认 `http://127.0.0.1:8080/v1`,模型目录地址默认 `http://127.0.0.1:8081`——以及你在 SeeAI Hub 后台创建的设备 Key。
|
|
23
|
+
3. 点「检测可用模型」,勾选要用的模型,保存。
|
|
24
|
+
4. 回到对话,让 Agent 画一张图。
|
|
25
|
+
|
|
26
|
+
**为什么是两个地址**:SeeAI Hub 把 Gateway(`/v1/*`,模型生成)和 service(`/api/v1/*`,登录、账户、模型目录、账务)分得很清楚,目录端点在 service 上、网关不代答它。如果你的部署把两者挂在同一个域名下(反向代理),两个都填那个域名即可——插件两个地址都会试,并在结果里告诉你哪个答的。
|
|
27
|
+
|
|
28
|
+
## 用法
|
|
29
|
+
|
|
30
|
+
### 对话里生图
|
|
31
|
+
|
|
32
|
+
Agent 用 `generate_image` 工具:不传参考图就是文生图,带上会话里已有的图就是改图。生成是同步的——一次调用就拿到结果,没有任务号可查、也没有可取消的任务。
|
|
33
|
+
|
|
34
|
+
图片出现在两个地方:助手回复的正文里,和工具调用那一行的图片卡片。正文里的图按缩略图显示(最长边 320px),点一下在原位放大看原图(Esc 或点背景关闭,Ctrl / 中键仍是新标签页打开);卡片则是标题 + 状态 + 缩略图。
|
|
35
|
+
|
|
36
|
+
插件只发**五个常规参数**(`model` / `n` / `resolution` / `aspect_ratio` / `output_format`)加上可选的 `reference_images`,并按模型目录声明的能力裁剪——目录里没有的值不发。模型特有的额外字段(画质、水印、种子、`background`、`size` …)插件一律不发,工具 schema 里也没有它们。
|
|
37
|
+
|
|
38
|
+
### 素材库
|
|
39
|
+
|
|
40
|
+
会话右上角的「素材库」在右侧栏打开,里面是你用本插件生成过的全部图片。
|
|
41
|
+
|
|
42
|
+
- **按天分组**:今天 / 昨天 / 具体日期,每组显示当天生成了几次。
|
|
43
|
+
- **搜索与筛选**:搜提示词(不区分大小写)、按模型、按来源(对话 / 面板 / 画布);点某天的标题只看那天,再点一下取消。
|
|
44
|
+
- **详情大图**:点缩略图或提示词打开,多张时用底部左右翻页(也可以按 ← / →),Esc 关闭。详情里有「复制提示词」「加到画布」「加入到对话框」。
|
|
45
|
+
- **完整信息**:模型、档位、比例、像素尺寸、格式、张数、扣费、参考图名。
|
|
46
|
+
- **删除**:删单条会弹一次确认,图片文件同时从磁盘移除。
|
|
47
|
+
- **读取失败不清空**:暂时读不到时保留上次读到的内容并提示原因,不会白屏。
|
|
48
|
+
|
|
49
|
+
### 画布
|
|
50
|
+
|
|
51
|
+
「画布」打开一块**自由空间板**——不是节点图,没有端口也没有连线:卡片就是摆在那儿的矩形。
|
|
52
|
+
|
|
53
|
+
- **多块画布**:左侧列表新建、切换、重命名、删除(只删这块板,不动素材库)。
|
|
54
|
+
- **上板是手动的**:生图之后画布不会自动打开、也不会有图自动上板。上板有四种办法——对话里点开大图后按「加到画布」、工具卡片里每张图下面的「加到画布」、素材库卡片上的「加到画布」,或画布里的「从素材库选图」。图片落在当前视野中央。
|
|
55
|
+
- **点图浮出指令条**,三个入口:
|
|
56
|
+
- 「**加入到对话框**」把这张图塞回输入框当草稿附件,接着改图或追问,不用重新上传;
|
|
57
|
+
- 「**标注**」打开编辑器:画笔 / 矩形 / 箭头 / 文字 / 橡皮擦五种可以混用,可选颜色粗细、撤销重做(Ctrl+Z / Ctrl+Shift+Z)。文字是松手就出现输入框,回车确认、Esc 取消这次输入、点框外也确认;橡皮擦按对象擦除。保存后烧录成一张合成图,作为新卡片放回画布(原图与素材库都不动);
|
|
58
|
+
- 「**裁剪**」就地裁剪:三分格线、八个手柄、可整体拖动,能选比例(自定义 / 1:1 / 4:3 / 3:4 / 16:9 / 9:16)。确认后生成新卡片,原图保留。
|
|
59
|
+
- **标注与裁剪的产物不进素材库**:它们存在 `<数据根>/canvas/assets/`。素材库记的是「生成过什么」,涂改过的一张不是一次生成。每张图卡片的标题栏有**来源徽标**(对话生成 / 面板生成 / 标注合成 / 裁剪合成);移除合成图卡片时它的文件会一起删掉,素材库图片则原样保留,攒下的孤儿图片用工具栏「清理无用图片」一次清掉。
|
|
60
|
+
- **摆放与缩放**:拖标题栏移动、右下角调整大小;点中哪张卡片它就升到最上层;滚轮以光标为锚点缩放,工具栏有 ± / 100% / 适应内容。卡片被压在最底下点不到时,用工具栏「图层」按从下到上列出,点一行就选中并提到最上层,点画布任意处收起。
|
|
61
|
+
- **自动保存**:改动 0.8 秒后存盘,工具栏右侧显示「已保存 / 待保存 / 保存中 / 保存失败」。同一块板在别处被改过时,宿主会拒绝这次写入,插件重新读取版本号后把你的版本重试保存。
|
|
62
|
+
|
|
63
|
+
数据存在 `<数据根>/canvas/<id>.json`,一块板一份文件。
|
|
64
|
+
|
|
65
|
+
## 更新
|
|
66
|
+
|
|
67
|
+
DSH 的插件管理**没有 update 动作**(`plugin_manager` 只有 install / remove / enable,GUI 的插件页也没有更新按钮),所以「更新」= 重新安装一次,而重装能不能当更新用取决于当初怎么装的:
|
|
68
|
+
|
|
69
|
+
| 安装方式 | 重装当更新 | 说明 |
|
|
70
|
+
| --- | --- | --- |
|
|
71
|
+
| npm registry | 能 | spec 用 `包名@latest`:profile 的依赖声明会从 `^0.1.0` 变成 `^0.2.0`,管理器靠这个差异定位到目标并重新激活 |
|
|
72
|
+
| Git / tarball / 本地目录 | 不能 | spec 不变,管理器定位不到目标,报 `ambiguous-install`;要先移除再安装 |
|
|
73
|
+
|
|
74
|
+
**从设置卡片更新**:卡片底部的「版本」区显示当前版本,「检查更新」查注册表,有新版本时出现「更新到 x.y.z」。点下去宿主会重载插件(页面可能短暂失联,属正常),装完后**刷新页面**让客户端半边也用上新版本。这个按钮只在 registry 安装下出现;本地目录安装会说明走 `pnpm build && pnpm sync`。
|
|
75
|
+
|
|
76
|
+
## 设置项
|
|
77
|
+
|
|
78
|
+
- **API 地址**(默认 `http://127.0.0.1:8080/v1`):生图请求走这里。
|
|
79
|
+
- **模型目录地址**(默认 `http://127.0.0.1:8081`):只在「检测可用模型」时用。
|
|
80
|
+
- **用户 API Key**:存进本机设置文档,界面只显示「已保存」。
|
|
81
|
+
- **生成默认值**:默认模型、默认比例(8 个统一比例,出厂 `3:4`)、输出格式(出厂 `png`)。
|
|
82
|
+
- **素材目录**:点「选择目录…」弹系统的文件夹选择窗口,选完立刻生效,旧目录里的文件不会被删;想回到默认点「恢复默认」。宿主开不出系统窗口时(远程 / SSH 场景)按钮不出现,卡片会说明原因。
|
|
83
|
+
- **本地与行为**:启用插件、允许 Agent 生图、把插件与模型告知 Agent,三个开关。
|
|
84
|
+
|
|
85
|
+
**设置里没有水印开关**:加水印与随机种子是豆包(Seedream)系模型自己的请求参数,插件不负责发它们——不填就用网关默认(不加水印、种子随机)。
|
|
86
|
+
|
|
87
|
+
## 安全与额度
|
|
88
|
+
|
|
89
|
+
- **密钥**:只存在本机 DSH 设置文档(`~/.dsh/settings.yaml` 的 `dsh-seework` 段)。设置桥读到的是脱敏值,写入走路径操作,不会把密钥回传浏览器;生图请求由宿主转发,所以也没有 CORS 问题。
|
|
90
|
+
- **额度**:每次都真实扣 SeeAI Hub 账户额度。成功响应里的 `cost` 会被记进素材库记录。
|
|
91
|
+
- **并发**:SeeAI Hub 对同一用户同一模型同时只允许一个生图请求,那把锁要到该请求结束才释放。插件自己也按模型串行排队;万一同一个 Key 在别处占着这把锁(另一个会话、别的客户端),插件只如实报错并提示**请勿重试**。
|
|
92
|
+
- **内容**:图片由上游模型生成,可能不符合预期,使用前请自行检查。
|
|
93
|
+
- **图生图**:参考图会以 data URL 发给你配置的 SeeAI Hub 网关,敏感图片不要上传。
|
|
94
|
+
|
|
95
|
+
## 进一步阅读
|
|
96
|
+
|
|
97
|
+
工程与实现细节不在这个文件里:
|
|
98
|
+
|
|
99
|
+
- [架构与实现地图](https://github.com/dehuadong/dsh-seework/blob/main/docs/architecture.md)——每处行为的现状与简短的「为什么」
|
|
100
|
+
- [设计文档](https://github.com/dehuadong/dsh-seework/tree/main/docs/design)——技术方案与取舍
|
|
101
|
+
- [领域术语](https://github.com/dehuadong/dsh-seework/blob/main/CONTEXT.md)
|
|
102
|
+
- 构建、测试、同步、探针等开发入口:[AGENTS.md](https://github.com/dehuadong/dsh-seework/blob/main/AGENTS.md)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# 使用 generate_image 生成或编辑图像
|
|
2
|
+
|
|
3
|
+
当用户想要生成、编辑、转换或迭代图像时,使用该技能。生成和编辑都用 `generate_image`;对于编辑或基于参考的生成,通过 `reference_images` 提供相关图像。
|
|
4
|
+
|
|
5
|
+
## 核心行为
|
|
6
|
+
|
|
7
|
+
- 在准备请求之前,先理解用户的视觉意图。
|
|
8
|
+
- 不要要求用户手动提供每一个生成参数。
|
|
9
|
+
- 尽可能推断合理的值。
|
|
10
|
+
- 只有当缺失信息会实质性改变结果时才追问。
|
|
11
|
+
- 用户显式给出的指令优先于推断出的默认值。
|
|
12
|
+
- 生成前,先概括解析后的请求,并请用户确认。
|
|
13
|
+
- 除非用户明确要求立即执行,否则在确认之前不要调用 `generate_image`。
|
|
14
|
+
|
|
15
|
+
## 参考图像
|
|
16
|
+
|
|
17
|
+
`reference_images` 可能来自:当前对话中的图像 / 用户上传的附件 / 先前生成的图像 / 用户明确引用的图像。
|
|
18
|
+
|
|
19
|
+
根据用户意图确定每张参考图像的角色:正在被编辑的图像 / 主体或内容参考 / 风格参考 / 构图参考。除非用户意图就是修改某张参考图像,否则不要把它当作编辑目标。用户明确指向一张可用图像时,直接用它,不要再要求用户指认一遍。存在多张候选图像、而目标或角色不明确时,在生成前询问。
|
|
20
|
+
|
|
21
|
+
## 提示词准备
|
|
22
|
+
|
|
23
|
+
把用户的请求转换成清晰的图像生成指令;用户不需要先写出正式提示词。保留用户明确要求的内容:主体 / 场景 / 风格 / 构图 / 光照 / 颜色 / 相机或视角 / 文字 / 重要的视觉约束。不要悄悄引入对用户预期的主体、含义或视觉方向的重大更改。
|
|
24
|
+
|
|
25
|
+
### 编辑
|
|
26
|
+
|
|
27
|
+
清楚区分"应当更改的内容"与"应当保持不变的内容",默认保留不相关的内容。例如用户只要求改天空时,不要不必要地改动主体、身份、姿势、背景对象或构图。
|
|
28
|
+
|
|
29
|
+
## 参数
|
|
30
|
+
|
|
31
|
+
从用户请求中推断生成参数,而不是逐个追问。
|
|
32
|
+
|
|
33
|
+
### `n`
|
|
34
|
+
|
|
35
|
+
用户指定时用请求的数量;未指定时 `n = 1`;用户要求多个方案但没有指定数量时,选工具支持的一个较小的合理数量。
|
|
36
|
+
|
|
37
|
+
### `resolution`
|
|
38
|
+
|
|
39
|
+
支持的值(**示例,实际按该模型支持的值**):`1K` / `2K` / `4K`。一般指导:快速预览或概念探索用低档,普通生成用中档,高细节或最终质量用高档。未指定时,用**该模型 schema 里的 `default`**。有帮助时告诉用户可选档位,而不是要求他们先选。
|
|
40
|
+
|
|
41
|
+
### `aspect_ratio`
|
|
42
|
+
|
|
43
|
+
取值以该模型 schema 为准。改图时除非用户指定,否则优先沿用原图比例(不支持时选最接近的支持比例,并尽量减少裁剪或扩展);新图按预期用途或构图判断比例;推断不出来时用工具默认值。除非用户要求,不要悄悄把横向改成纵向,或实质性改变构图。
|
|
44
|
+
|
|
45
|
+
## 确认
|
|
46
|
+
|
|
47
|
+
调用 `generate_image` 前,简要总结解析后的任务:将生成或更改什么 / 参考图如何使用(适用时)/ `n` / `resolution` / `aspect_ratio`;编辑还要带上重要的保留约束。
|
|
48
|
+
|
|
49
|
+
示例(生成):
|
|
50
|
+
|
|
51
|
+
> 将生成:黄昏时分海边的灯塔,2 张,2K,16:9。可调整为 1K/4K 或其他支持的比例,确认后生成。
|
|
52
|
+
|
|
53
|
+
示例(编辑):
|
|
54
|
+
|
|
55
|
+
> 将修改:把天空换成星空;主体、姿势与构图保持不变。2K,优先按原图比例适配,确认后生成。
|
|
56
|
+
|
|
57
|
+
保持简洁;除非用户要求,不要展示完整的内部提示词。以下肯定回复视为执行授权:`确认` / `可以` / `生成` / `开始` / `就这样` / `按这个来`。用户改动请求时,更新并确认修订版;用户明确要求立即生成或跳过确认时,直接执行。
|
|
58
|
+
|
|
59
|
+
## 迭代
|
|
60
|
+
|
|
61
|
+
除非用户明确开始新任务,把后续请求视为当前任务的延续,复用 `reference_images`、当前编辑目标、视觉方向、保留约束与先前参数。示例:`再亮一点` / `背景简单一些` / `改成晚上` / `人物小一点` / `改成 16:9` / `再生成两个版本`。不要要求用户重复完整的请求;下一次实际生成前仍按确认规则。
|
|
62
|
+
|
|
63
|
+
## 工具使用
|
|
64
|
+
|
|
65
|
+
调用前视情况解析 prompt / `reference_images` / `n` / `resolution` / `aspect_ratio`。**以实际的 `generate_image` schema 为事实来源,不要发明不受支持的参数或枚举值。** 简而言之:理解 → 推断 → 确认 → 生成。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# dsh-seework bundle patch: inserts the plugin row into the profile roster.
|
|
2
|
+
# The row id **is** the settings namespace the plugin addresses (`dsh-seework`):
|
|
3
|
+
# since DSH 0.2 a profile entry's Config is what the settings forms project, and
|
|
4
|
+
# every form is keyed by the entry id, so the two spellings have to agree or the
|
|
5
|
+
# settings bridge finds no form to read or write.
|
|
6
|
+
# The row is a bare plugin by package name: the host half (exports ".") runs in
|
|
7
|
+
# the host process (settings section + SeeAI Hub proxy routes + agent image
|
|
8
|
+
# tools), and the `dsh.client` declaration in package.json makes the browser
|
|
9
|
+
# half (exports "./client", served at /plugins/dsh-seework/client.js) load in
|
|
10
|
+
# the web GUI.
|
|
11
|
+
- insert:
|
|
12
|
+
- id: dsh-seework
|
|
13
|
+
name: 'dsh-seework'
|