@logictan/dsh-imagegen 1.5.13 → 2.0.1
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/README.md +34 -363
- package/lib/client.js +741 -65659
- package/lib/client.js.map +1 -1
- package/lib/index.js +1669 -8466
- package/lib/locale-tables.js +2269 -1
- package/package.json +8 -10
- package/docs/skill-config.md +0 -172
- package/lib/locale-tables-B2442vjN.js +0 -2387
- package/lib/locale-tables-BLbJfsrX.js +0 -2384
- package/src/templates/canghe-cases.json +0 -11126
- package/src/templates/cases.json +0 -10196
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@logictan/dsh-imagegen",
|
|
3
|
-
"description": "AI image generation
|
|
4
|
-
"version": "
|
|
3
|
+
"description": "Chat-invoked AI image generation for the dsh web GUI: text-to-image and image-to-image through configurable provider channels (gpt-image-2 / grok-imagine-image / nanobanana series / seedream-5.0-pro / dall-e-3, with native xAI Grok Imagine, Google Nano Banana and ByteDance Seedream request shaping) and per-channel model catalogs.",
|
|
4
|
+
"version": "2.0.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"exports": {
|
|
@@ -29,8 +29,7 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"
|
|
33
|
-
"schemastery": "^3.18.0"
|
|
32
|
+
"@deepseek-ai/schemastery": "^3.18.4"
|
|
34
33
|
},
|
|
35
34
|
"devDependencies": {
|
|
36
35
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
@@ -58,15 +57,14 @@
|
|
|
58
57
|
"lightningcss": "1.32.0",
|
|
59
58
|
"react": "^18.3.1",
|
|
60
59
|
"react-dom": "^18.3.1",
|
|
61
|
-
"schemastery": "^3.18.0",
|
|
62
60
|
"tsdown": "0.22.2",
|
|
63
|
-
"typescript": "~5.7.2"
|
|
61
|
+
"typescript": "~5.7.2",
|
|
62
|
+
"@deepseek-ai/schemastery": "^3.18.4",
|
|
63
|
+
"@deepseek-ai/dsh-credentials": "0.1.6-alpha.2"
|
|
64
64
|
},
|
|
65
65
|
"files": [
|
|
66
66
|
"lib",
|
|
67
|
-
"src/templates",
|
|
68
67
|
"cordis.patch.yml",
|
|
69
|
-
"docs/skill-config.md",
|
|
70
68
|
"README.md"
|
|
71
69
|
],
|
|
72
70
|
"license": "Apache-2.0",
|
|
@@ -77,8 +75,8 @@
|
|
|
77
75
|
},
|
|
78
76
|
"scripts": {
|
|
79
77
|
"build": "tsdown",
|
|
78
|
+
"prepack": "tsdown",
|
|
80
79
|
"watch": "tsdown --watch",
|
|
81
|
-
"typecheck": "tsc --noEmit"
|
|
82
|
-
"fetch-templates": "node scripts/fetch-templates.mjs"
|
|
80
|
+
"typecheck": "tsc --noEmit"
|
|
83
81
|
}
|
|
84
82
|
}
|
package/docs/skill-config.md
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
# 技能配置(Skill configuration)
|
|
2
|
-
|
|
3
|
-
无限画布把 `~/.dsh/skills` 下**可被模型调用**的技能列进节点技能菜单。技能本身是纯数据
|
|
4
|
-
(`SKILL.md` + 资源),DSH 只负责发现与加载 —— registry / provider 层没有"配置"概念,
|
|
5
|
-
`ctx.shellEnv` 那套托管环境也只收 `DSH_*` 前缀的可信变量。所以技能自己的配置(API 密钥、
|
|
6
|
-
OCR token、模型名、后端地址…)过去只能靠技能文档手敲命令行或改 dotfile。
|
|
7
|
-
|
|
8
|
-
本文定义本插件提供的那一层:**技能声明它要什么配置,画布的技能库负责渲染、保存、生效**。
|
|
9
|
-
目标有两个:
|
|
10
|
-
|
|
11
|
-
1. 任何一个技能都能用同一套机制暴露配置,不需要插件为它写代码;
|
|
12
|
-
2. 什么都没声明的老技能行为完全不变(仍然走它自己的文档 / Agent 配置)。
|
|
13
|
-
|
|
14
|
-
## 1. 声明:`skill.config.json`
|
|
15
|
-
|
|
16
|
-
技能目录(与 `SKILL.md` 同级)可以放一份 JSON 声明:
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
~/.dsh/skills/<name>/SKILL.md
|
|
20
|
-
~/.dsh/skills/<name>/skill.config.json ← 可选
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
```json
|
|
24
|
-
{
|
|
25
|
-
"version": 1,
|
|
26
|
-
"note": "密钥只写入本机 ~/.editppt/config.yaml,不会进入 run 目录或提示词。",
|
|
27
|
-
"fields": [
|
|
28
|
-
{
|
|
29
|
-
"id": "image-api-key",
|
|
30
|
-
"label": "图像 API 密钥",
|
|
31
|
-
"description": "任何 OpenAI 兼容的图像 API 密钥",
|
|
32
|
-
"type": "secret",
|
|
33
|
-
"required": true
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"id": "image-base-url",
|
|
37
|
-
"label": "API 地址",
|
|
38
|
-
"type": "string",
|
|
39
|
-
"default": "https://api.openai.com/v1",
|
|
40
|
-
"expose": true
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"id": "image-model",
|
|
44
|
-
"label": "图像模型",
|
|
45
|
-
"type": "select",
|
|
46
|
-
"default": "gpt-image-2",
|
|
47
|
-
"options": [
|
|
48
|
-
{ "value": "gpt-image-2", "label": "gpt-image-2" },
|
|
49
|
-
{ "value": "doubao-seedream-5-0-pro-260628", "label": "Seedream 5.0 Pro" }
|
|
50
|
-
]
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"id": "paddle-ocr-token",
|
|
54
|
-
"label": "PaddleOCR token(可选)",
|
|
55
|
-
"type": "secret"
|
|
56
|
-
}
|
|
57
|
-
],
|
|
58
|
-
"apply": [
|
|
59
|
-
{
|
|
60
|
-
"kind": "command",
|
|
61
|
-
"argv": [
|
|
62
|
-
"editppt", "config",
|
|
63
|
-
"--api-key", "{image-api-key}",
|
|
64
|
-
"--base-url", "{image-base-url}",
|
|
65
|
-
"--model", "{image-model}"
|
|
66
|
-
]
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"kind": "command",
|
|
70
|
-
"argv": ["editppt", "config", "--paddle-ocr-token", "{paddle-ocr-token}"],
|
|
71
|
-
"when": { "field": "paddle-ocr-token", "set": true }
|
|
72
|
-
}
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### 字段(`fields[]`)
|
|
78
|
-
|
|
79
|
-
| 字段 | 必填 | 说明 |
|
|
80
|
-
|---|---|---|
|
|
81
|
-
| `id` | ✅ | `^[a-z0-9][a-z0-9-]{0,63}$`,在 `apply` 里用 `{id}` 引用 |
|
|
82
|
-
| `label` | | 表单标签;缺省用 `id`(作者语言原样展示) |
|
|
83
|
-
| `description` | | 一行说明 |
|
|
84
|
-
| `type` | | `string` / `secret` / `boolean` / `number` / `select`,缺省 `string` |
|
|
85
|
-
| `required` | | 未填时在节点菜单里显示"需要配置"提示 |
|
|
86
|
-
| `default` | | 默认值;`secret` 不建议给默认值 |
|
|
87
|
-
| `options` | | 仅 `select`:`[{ value, label }]` |
|
|
88
|
-
| `expose` | | `true` 时把该字段值以"已配置"上下文块暴露给模型;`secret` 恒为 `false` |
|
|
89
|
-
|
|
90
|
-
### 生效步骤(`apply[]`)
|
|
91
|
-
|
|
92
|
-
按顺序执行,两种 kind:
|
|
93
|
-
|
|
94
|
-
- `{ "kind": "command", "argv": [...], "cwd"?: "skill" }`
|
|
95
|
-
以**数组参数、无 shell** 方式执行;`{field}` 会被替换成保存的值。`cwd: "skill"` 表示在技能
|
|
96
|
-
目录里执行(默认在 run 目录)。执行只在用户点击「保存并应用」时发生,界面会先展示确切 argv。
|
|
97
|
-
- `{ "kind": "file", "path": "~/.editppt/config.yaml", "content": "...{field}..." }`
|
|
98
|
-
物化一份配置文件(`~` 展开,禁止 `..` 逃逸,写入前展示内容)。
|
|
99
|
-
|
|
100
|
-
`when: { "field": "<id>", "set": true }` 让某一步只在对应字段有值时执行(可选跳过)。
|
|
101
|
-
|
|
102
|
-
### 约束(前向兼容 + 安全)
|
|
103
|
-
|
|
104
|
-
- `version` 不是 `1` 时整份声明被忽略(界面给出说明),老插件不会误读新格式。
|
|
105
|
-
- 未知 kind / 未知字段被忽略,不报错。
|
|
106
|
-
- 上限:32 个字段、16 个步骤、单文件内容 8KB。
|
|
107
|
-
- 声明来自**已安装的技能**,因此是不可信数据:解析阶段不做任何执行、不写任何文件。
|
|
108
|
-
|
|
109
|
-
## 2. 声明从哪里来
|
|
110
|
-
|
|
111
|
-
按优先级取第一个命中的:
|
|
112
|
-
|
|
113
|
-
1. `<技能目录>/skill.config.json` —— 技能自带(推荐,上游可直接提供);
|
|
114
|
-
2. 插件内置配方(`src/skill-config-recipes.ts`)—— 给已知但没带声明的技能用,
|
|
115
|
-
目前有 `image-to-editable-ppt`(`editppt config`);
|
|
116
|
-
3. 都没有 → 面板只给通用提示(见 §6)。
|
|
117
|
-
|
|
118
|
-
内置配方让"已知技能开箱可用",而技能自己的声明永远优先,上游更新带上声明后自动接管。
|
|
119
|
-
|
|
120
|
-
## 3. 值存在哪
|
|
121
|
-
|
|
122
|
-
技能配置值存在**插件自己的 settings 命名空间**里,和渠道密钥同一套存储与脱敏:
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
dsh-imagegen:
|
|
126
|
-
skillConfig: { "<skill>/<field>": "<明文非密钥值>" }
|
|
127
|
-
skillConfigSecrets: { "<skill>/<field>": "<密钥,role('secret') 脱敏>" }
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
- 密钥字段写进 `skillConfigSecrets`(settings 的红acted 视图只回 `set: true/false`,不回值);
|
|
131
|
-
- 非密钥字段写进 `skillConfig`;
|
|
132
|
-
- 删除技能不会自动删值(重装后配置还在);把字段清空即从 dict 里 `unset`;
|
|
133
|
-
- 值**不写回技能目录**,所以 `--force` 覆盖安装不会冲掉配置。
|
|
134
|
-
|
|
135
|
-
## 4. 生效(apply)
|
|
136
|
-
|
|
137
|
-
「保存并应用」在宿主侧按声明顺序执行步骤,返回逐步结果(`kind` / 详情 / 成功与否 / 输出尾部):
|
|
138
|
-
|
|
139
|
-
- `command`:`spawn(argv[0], argv.slice(1), { cwd, shell: false, timeout })`,输出有上限,
|
|
140
|
-
失败信息回显在面板里;
|
|
141
|
-
- `file`:原子写入(同目录临时文件 + rename),缺失的父目录会被创建;
|
|
142
|
-
- 返回给浏览器的详情与输出里,**已配置的密钥值会被替换成 `•••`**;
|
|
143
|
-
- 没有 `apply` 声明的技能只保存值(靠 `expose` 走提示词,或技能自己读配置文件)。
|
|
144
|
-
|
|
145
|
-
### 环境变量为什么不在这一层
|
|
146
|
-
|
|
147
|
-
DSH 的托管 shell 环境(`ctx.shellEnv`)只接受 `DSH_*` 前缀的可信键,无法按技能注入
|
|
148
|
-
`PADDLE_OCR_TOKEN` / `OPENAI_API_KEY` 这类变量。因此技能若依赖 env,应该在声明里用
|
|
149
|
-
`command` 调用自己的 CLI(写配置文件,如 `editppt config`),或提供 `file` 目标。
|
|
150
|
-
插件不假装能注入 env —— 声明里也没有 `env` 这个 kind。
|
|
151
|
-
|
|
152
|
-
## 5. 界面
|
|
153
|
-
|
|
154
|
-
- **技能库面板**:每条已安装技能若有声明,展开「配置」:字段表单(密钥输入框只显示
|
|
155
|
-
"已设置/未设置")、必填标记、说明、`select` 下拉、密钥的「清除」按钮,以及
|
|
156
|
-
「保存」/「保存并应用」和逐步结果。
|
|
157
|
-
- **节点技能菜单**:声明了必填字段但还没值的技能,显示「需要配置:<字段名>」和「去配置」
|
|
158
|
-
按钮(点开技能库并展开该技能)。提示不等于禁用:技能可能在没有该值时也能跑,真正的
|
|
159
|
-
失败仍由运行时给出可读错误。
|
|
160
|
-
|
|
161
|
-
## 6. 没声明的技能
|
|
162
|
-
|
|
163
|
-
技能库给一段通用提示:该技能没有声明配置项,如果它有环境变量 / 配置文件 / 自己的 CLI,
|
|
164
|
-
可以让 Agent 按它的 `SKILL.md` 配置,或按技能文档手动配置。插件不猜、不擅自写文件。
|
|
165
|
-
|
|
166
|
-
## 7. 已知边界
|
|
167
|
-
|
|
168
|
-
- 只有**目录形态**的技能(`<name>/SKILL.md`)能带 `skill.config.json`;扁平 `<name>.md`
|
|
169
|
-
只能命中内置配方。这是 DSH 的布局约束(扁平技能没有自己的目录)。
|
|
170
|
-
- `command` 只支持可执行文件(无 shell);Windows 上 `.cmd`/`.bat` 包装器需要技能提供
|
|
171
|
-
`.exe` 或 `.py` + 解释器形式的 argv。
|
|
172
|
-
- 同名的两个写入者(两个标签页同时保存)以后写为准;保存接口每次返回刷新后的技能库。
|