让智能体直接驱动十二款创作应用完成制图、表格与音视频任务
数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
dsh plugin --profile web add lznnnnn1998/dsh-artcraft状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 15:18:36
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
查看扫描证据(共 103 处,展示前 99 条)
- 读取本地文件dsh-plugins/craft-kit/lib/catalog.js:195
const raw = readFileSync(join(packageRoot, CATALOG_DIR, `${craftId}.json`), 'utf8') - 读取本地文件dsh-plugins/craft-kit/lib/discover.js:33
if (!statSync(path).isFile()) return false - 读取本地文件dsh-plugins/craft-kit/lib/discover.js:34
accessSync(path, constants.X_OK) - 读取本地文件dsh-plugins/craft-kit/lib/discover.js:98
const parsed = JSON.parse(readFileSync(file, 'utf8')) - 执行外部命令来自配置/变量dsh-plugins/craft-kit/lib/discover.js:197
const out = execFileSync(path, [flag], { encoding: 'utf8', timeout: timeoutMs, stdio: ['ignore', 'pipe', 'pipe'] }) - 执行外部命令固定命令dsh-plugins/craft-kit/lib/exec.js:34
spawnSync('taskkill', ['/pid', String(child.pid), '/T', '/F'], { stdio: 'ignore' }) - 写入本地文件dsh-plugins/craft-kit/lib/exec.js:81
appendFileSync(process.env.DSH_ARTCRAFT_TRACE, `${binary.path} ${full.map(a => JSON.stringify(a)).join(' ')}\n`) - 执行外部命令来自配置/变量dsh-plugins/craft-kit/lib/exec.js:88
const child = spawn(binary.path, full, { - 执行外部命令来自配置/变量dsh-plugins/craft-kit/lib/exec.js:204
const child = spawn(binary.path, [...argv], { - 写入本地文件dsh-plugins/craft-kit/lib/exec.js:212
appendFileSync(logPath, chunk) - 写入本地文件dsh-plugins/craft-kit/lib/journal.js:45
mkdirSync(dir, { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/lib/journal.js:50
appendFileSync(join(dir, `${profile.id}.md`), `${time} · ${entry.kind} · ${entry.summary}${artifacts}\n`) - 写入本地文件dsh-plugins/craft-kit/lib/journal.js:51
appendFileSync(join(dir, 'events.jsonl'), JSON.stringify({ craft: profile.id, ...entry }) + '\n') - 写入本地文件dsh-plugins/craft-kit/lib/mcp.js:54
mkdirSync(dir, { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/lib/mcp.js:56
writeFileSync(file, Buffer.from(data, 'base64')) - 执行外部命令来自配置/变量dsh-plugins/craft-kit/lib/mcp.js:113
const child = spawn(this.#binary.path, [...(this.#profile.mcpArgs ?? ['mcp']), ...this.#args], { - 读取本地文件dsh-plugins/craft-kit/lib/preview.js:123
if (!existsSync(options.file)) return undefined - 写入本地文件dsh-plugins/craft-kit/lib/preview.js:125
mkdirSync(options.dir, { recursive: true }) - 读取本地文件dsh-plugins/craft-kit/lib/preview.js:128
return result.ok && existsSync(options.out) ? options.out : undefined - 读取本地文件dsh-plugins/craft-kit/lib/preview.js:146
const state = JSON.parse(readFileSync(join(root, craft, 'state.json'), 'utf8')) - 写入本地文件dsh-plugins/craft-kit/lib/preview.js:163
mkdirSync(craftDir, { recursive: true }) - 读取本地文件dsh-plugins/craft-kit/lib/preview.js:167
previous = JSON.parse(readFileSync(statePath, 'utf8')) - 写入本地文件dsh-plugins/craft-kit/lib/preview.js:185
writeFileSync(statePath, JSON.stringify(state, undefined, 2) + '\n') - 读取本地文件dsh-plugins/craft-kit/lib/preview.js:192
index = JSON.parse(readFileSync(indexPath, 'utf8')) - 写入本地文件dsh-plugins/craft-kit/lib/preview.js:198
writeFileSync(indexPath, JSON.stringify(index, undefined, 2) + '\n') - 写入本地文件dsh-plugins/craft-kit/lib/tools.js:199
mkdirSync(jobDir, { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/lib/tools.js:588
mkdirSync(dirname(created), { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/lib/tools.js:599
mkdirSync(dirname(scriptPath), { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/lib/tools.js:615
writeFileSync(scriptPath, typeof body === 'string' ? body : JSON.stringify(body, null, 2) + '\n') - 写入本地文件dsh-plugins/craft-kit/lib/tools.js:621
mkdirSync(dirname(scriptPath), { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/lib/tools.js:624
writeFileSync(scriptPath, JSON.stringify(commands.map(command => ({ - 读取本地文件dsh-plugins/craft-kit/lib/tools.js:831
const text = readFileSync(path, 'utf8') - 读取本地文件dsh-plugins/craft-kit/src/catalog.ts:195
const raw = readFileSync(join(packageRoot, CATALOG_DIR, `${craftId}.json`), 'utf8') - 读取本地文件dsh-plugins/craft-kit/src/discover.ts:33
if (!statSync(path).isFile()) return false - 读取本地文件dsh-plugins/craft-kit/src/discover.ts:34
accessSync(path, constants.X_OK) - 读取本地文件dsh-plugins/craft-kit/src/discover.ts:98
const parsed: unknown = JSON.parse(readFileSync(file, 'utf8')) - 执行外部命令来自配置/变量dsh-plugins/craft-kit/src/discover.ts:197
const out = execFileSync(path, [flag], { encoding: 'utf8', timeout: timeoutMs, stdio: ['ignore', 'pipe', 'pipe'] }) - 执行外部命令固定命令dsh-plugins/craft-kit/src/exec.ts:34
spawnSync('taskkill', ['/pid', String(child.pid), '/T', '/F'], { stdio: 'ignore' }) - 写入本地文件dsh-plugins/craft-kit/src/exec.ts:81
appendFileSync(process.env.DSH_ARTCRAFT_TRACE, `${binary.path} ${full.map(a => JSON.stringify(a)).join(' ')}\n`) - 执行外部命令来自配置/变量dsh-plugins/craft-kit/src/exec.ts:88
const child = spawn(binary.path, full, { - 执行外部命令来自配置/变量dsh-plugins/craft-kit/src/exec.ts:204
const child = spawn(binary.path, [...argv], { - 写入本地文件dsh-plugins/craft-kit/src/exec.ts:212
appendFileSync(logPath, chunk) - 写入本地文件dsh-plugins/craft-kit/src/journal.ts:45
mkdirSync(dir, { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/src/journal.ts:50
appendFileSync(join(dir, `${profile.id}.md`), `${time} · ${entry.kind} · ${entry.summary}${artifacts}\n`) - 写入本地文件dsh-plugins/craft-kit/src/journal.ts:51
appendFileSync(join(dir, 'events.jsonl'), JSON.stringify({ craft: profile.id, ...entry }) + '\n') - 写入本地文件dsh-plugins/craft-kit/src/mcp.ts:54
mkdirSync(dir, { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/src/mcp.ts:56
writeFileSync(file, Buffer.from(data, 'base64')) - 执行外部命令来自配置/变量dsh-plugins/craft-kit/src/mcp.ts:113
const child = spawn(this.#binary.path, [...(this.#profile.mcpArgs ?? ['mcp']), ...this.#args], { - 读取本地文件dsh-plugins/craft-kit/src/preview.ts:123
if (!existsSync(options.file)) return undefined - 写入本地文件dsh-plugins/craft-kit/src/preview.ts:125
mkdirSync(options.dir, { recursive: true }) - 读取本地文件dsh-plugins/craft-kit/src/preview.ts:128
return result.ok && existsSync(options.out) ? options.out : undefined - 读取本地文件dsh-plugins/craft-kit/src/preview.ts:146
const state = JSON.parse(readFileSync(join(root, craft, 'state.json'), 'utf8')) as PreviewState - 写入本地文件dsh-plugins/craft-kit/src/preview.ts:163
mkdirSync(craftDir, { recursive: true }) - 读取本地文件dsh-plugins/craft-kit/src/preview.ts:167
previous = JSON.parse(readFileSync(statePath, 'utf8')) as PreviewState - 写入本地文件dsh-plugins/craft-kit/src/preview.ts:185
writeFileSync(statePath, JSON.stringify(state, undefined, 2) + '\n') - 读取本地文件dsh-plugins/craft-kit/src/preview.ts:192
index = JSON.parse(readFileSync(indexPath, 'utf8')) as typeof index - 写入本地文件dsh-plugins/craft-kit/src/preview.ts:198
writeFileSync(indexPath, JSON.stringify(index, undefined, 2) + '\n') - 写入本地文件dsh-plugins/craft-kit/src/tools.ts:199
mkdirSync(jobDir, { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/src/tools.ts:588
mkdirSync(dirname(created), { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/src/tools.ts:599
mkdirSync(dirname(scriptPath), { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/src/tools.ts:615
writeFileSync(scriptPath, typeof body === 'string' ? body : JSON.stringify(body, null, 2) + '\n') - 写入本地文件dsh-plugins/craft-kit/src/tools.ts:621
mkdirSync(dirname(scriptPath), { recursive: true }) - 写入本地文件dsh-plugins/craft-kit/src/tools.ts:624
writeFileSync(scriptPath, JSON.stringify(commands.map(command => ({ - 读取本地文件dsh-plugins/craft-kit/src/tools.ts:831
const text = readFileSync(path, 'utf8') - 读取本地文件dsh-plugins/plugin-cadcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-cadcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-deckcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-deckcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-designcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-designcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-effectcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-effectcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-figcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-figcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-filmcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-filmcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-gridcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-gridcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-lightcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-lightcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-pdfcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-pdfcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-photocraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-photocraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-soundcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-soundcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-texturecraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-texturecraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-vectorcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-vectorcraft/src/index.ts:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-wordcraft/src/index.js:41
data: readFileSync(path), - 读取本地文件dsh-plugins/plugin-wordcraft/src/index.ts:41
data: readFileSync(path), - 发起网络请求dsh-plugins/preview-panel/lib/client.js:143
const response = await fetch(`${PREVIEW_ORIGIN}/state`, { signal, cache: 'no-store' }); - 发起网络请求dsh-plugins/preview-panel/src/index.js:34
const response = await fetch(`http://127.0.0.1:${PORT}/state`, { signal: AbortSignal.timeout(400) }); - 读取本地文件dsh-plugins/preview-panel/src/index.js:51
if (!existsSync(server)) - 执行外部命令来自配置/变量dsh-plugins/preview-panel/src/index.js:56
const child = spawn(process.execPath, [server, '--port', String(PORT), '--dir', previewDirectory()], { - 发起网络请求dsh-plugins/preview-panel/src/index.ts:37
const response = await fetch(`http://127.0.0.1:${PORT}/state`, { signal: AbortSignal.timeout(400) }) - 读取本地文件dsh-plugins/preview-panel/src/index.ts:54
if (!existsSync(server)) return - 执行外部命令来自配置/变量dsh-plugins/preview-panel/src/index.ts:57
const child = spawn(process.execPath, [server, '--port', String(PORT), '--dir', previewDirectory()], {
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
展开完整介绍(125 字)↓
每个 ArtCraft(storytold)创作应用都是一个 DSH 插件——12 个 Cordis 插件以无头方式驱动 CADCraft、GridCraft、SoundCraft 等 9 个应用,每个插件各自通过自己的命令行和 MCP 服务器运行。
README
由 DeepSeek 最新模型翻译生成展开完整文档(README 剩余 1 节)
ArtCraft × DSH
十二个创作应用,一个智能体,零源码改动。
ArtCraft 组织的全部应用 —— CAD、表格、音频、视频、照片、矢量、 PDF、幻灯片、文档 —— 全部以一等插件的形式接入 DeepSeek Harness。
English · 中文
$ dsh --profile web
你 › 帮我做一份 Q3 销售表格,带个柱状图,存到 ~/Documents
⏺ gridcraft_commands {"search": "chart"} 315 条命令,8 个分类 ⏺ gridcraft_describe {"id": "insert.chart"} {range?, type?, title?, at?} ⏺ gridcraft_run sample "sales",2 条命令 退出码 0,耗时 41ms ⏺ gridcraft_inspect ~/Documents/q3.xlsx 1 个工作表,1 个图表,A1:H24
✔ GridCraft 已写入 ~/Documents/q3.xlsx(14,208 字节)
这是什么
ArtCraft 套件是十二个原生 Rust 应用。每一个都已经自带无头 CLI 和自己的 MCP server —— 但没有任何东西告诉智能体它们存在、能做什么、该怎么调用。
这个仓库补上这一环。每个应用变成一个 DSH 插件,在 ctx.tools 上注册可被模型调用的工具, 自动在你这台机器上找到该应用的二进制,并以外部进程的方式驱动它。
绝不修改任何 craft 的源码。 所有插件都住在这个仓库里 —— 那些应用是依赖,不是 fork。
十二个应用
| | 应用 | 用途 | 命令数 | MCP 工具数 |
| 📐 | CADCraft | CAD 与制图(AutoCAD 风格) | 305 | 11 |
| 📊 | GridCraft | 电子表格(Excel 风格) | 315 | 21 |
| 🎚️ | SoundCraft | 数字音频工作站 | 465 | 17 |
| 🖼️ | PhotoCraft | 位图编辑(Photoshop 风格) | 858 | 21 |
| 🌄 | LightCraft | 照片库与 RAW 冲图 | 296 | 318 |
| 📄 | PdfCraft | PDF 阅读与编辑 | 161 | 161 |
| 🖋️ | VectorCraft | 矢量绘图(Illustrator 风格) | 743 | 32 |
| 🎬 | EffectCraft | 动态图形与合成(After Effects 风格) | 669 | 27 |
| 🎞️ | FilmCraft | 非线性视频剪辑 | 693 | 17 |
| 🎨 | DesignCraft | 版式与页面设计(InDesign 风格) | 446 | 25 |
| 📽️ | DeckCraft | 演示文稿(PowerPoint 风格) | 226 | 25 |
| 📝 | WordCraft | 文字处理(Word 风格) | 460 | 16 |
命令数是从各二进制实时读出来的;MCP 工具数是各 server 自己声明的。
每个应用两个接口
每个插件同时暴露两套接口,因为它们回答的是不同的问题:
通用命令应用自带的 MCP server
可以触达整个应用 —— 每一个菜单项都是一个命令 id。
gridcraft_commands {"search": "chart"}
gridcraft_describe {"id": "insert.chart"}
gridcraft_run {"commands": [...], "save": "..."}
gridcraft_inspect {"file": "..."}
gridcraft_convert {"input": "...", "output": "..."}
建模过的操作,带真正的 JSON Schema,由应用自己通过 JSON-RPC 提供。
gridcraft_mcp_tools {"search": "range"}
gridcraft_mcp_call {"tool": "write_range",
"arguments": {"range": "A1",
"values": [["x"]]}}
gridcraft_mcp_status {}
MCP server 每个插件只启动一次并保持常驻(启动 GridCraft 引擎要 ~600ms),空闲五分钟或插件卸载时关闭。
快速开始
Windows —— 克隆后在 PowerShell 里执行:
git clone https://github.com/lznnnnn1998/dsh-artcraft
cd dsh-artcraft
.\install.ps1 # 或者: install.cmd (如果 .ps1 被策略禁止运行)
它会自动找到 harness 自带的 Node(PATH 里没有 node / npm / pnpm 也能装),下载本平台所需的全部 craft CLI,再把十二个插件装进你的 DSH profile。只想装一个 craft、先试运行、或者装完立刻验证:
.\install.ps1 -Crafts gridcraft,wordcraft -Profile desktop -List # 只看看会做什么 .\install.ps1 -Crafts gridcraft -Verify # 装一个并验证
macOS / Linux —— 同样两步,手动执行:
git clone https://github.com/lznnnnn1998/dsh-artcraft
cd dsh-artcraft
1. 下载各 craft 的 CLI —— macOS / Windows / Linux 通用,不需要 Rust 工具链
node scripts/install-craft.mjs
2. 把插件装进一个 DSH profile,然后重启它
node scripts/install-into-profile.mjs --profile web
两个平台跑的是同一套 Node 脚本;install.ps1 只是额外负责找 Node、并按 PowerShell 的习惯给出默认值。安装不会改动系统级设置,也不会改你的 shell 配置。
也可以直接从 npm 装某一个 craft:
dsh plugin --profile web add dsh-artcraft-plugin-gridcraft
每个 craft 是独立的包:dsh-artcraft-plugin-<craft>,对应 cadcraft、gridcraft、 soundcraft、deckcraft、wordcraft、photocraft、lightcraft、pdfcraft、 vectorcraft、effectcraft、filmcraft、designcraft。
然后直接说:
「打开 CADCraft 的示例户型图,把厨房导出成 PNG。」
「把 SoundCraft 的示例曲子里的底鼓降 6 dB,然后 bounce 出来。」
「把这个 PDF 的第 3 页按 300 dpi 渲染出来。」
完整安装、配置与排错:docs/INSTALL.md
环境要求
- Node.js ^22.19.0 || >=24.0.0 —— Windows 上会自动使用 harness 自带的 Node,不必加进 PATH
- 一个正在运行的 DeepSeek Harness profile
- macOS、Windows 11 或 Ubuntu 24.04 —— 安装脚本会自动选对构建,且不需要别的东西 (不需要 Rust,也不需要 unzip / tar / npm / pnpm)
没有别的了。这些 craft 应用不需要从源码构建;第 1 步下载的是官方签名的 release 二进制。
自己验证
node scripts/verify.mjs
每个 craft 都必须:找到自己的二进制、加载实时命令目录、暴露正确的工具集、完成 MCP 握手、并通过一次真实无头运行产出非空文件:
craft binary catalog tools mcp run
cadcraft cadcraft-cli 0.5.0 305 (live) 8 11 tools (list_commands ok) ok → out.dxf (34140 B)
gridcraft gridcraft-cli 0.5.0 315 (live) 8 21 tools (list_commands ok) ok → out.xlsx (7682 B)
soundcraft SoundCraft CLI 0.6.1 465 (live) 8 17 tools (list_commands ok) ok → out.wav (16094696 B)
… 12 个插件全部通过
工作原理
每个 craft 只在 dsh-plugins/craft-kit/src/profiles.mjs 里描述一次。
内核把这份描述变成工具,并把各应用之间的差异全部藏起来:
| 应用 | 无头运行怎么写 |
| GridCraft、CADCraft、DeckCraft、WordCraft、SoundCraft、DesignCraft | --cmd 'id={...}' |
| PhotoCraft、VectorCraft | --cmd id --params '{...}' |
| LightCraft、PdfCraft | 位置参数 id key=value |
| EffectCraft | 位置参数 id {...} |
| FilmCraft | 生成一个 JSONL 脚本文件 |
dsh-plugins/
├── craft-kit/ 共享内核 │ ├── src/ 发现 · 执行 · 命令目录 · 工具工厂 · MCP 客户端 │ ├── lib/ 生成的纯 ESM │ └── catalog/ 命令快照 + 探测到的二进制路径 ├── plugin-cadcraft/ 每个 craft 一个 DSH 插件 ├── plugin-gridcraft/ …
└── plugin-wordcraft/
关于这些二进制的每一条事实都是跑出来的,不是猜的。当某个 craft 的真实 CLI 与预期不符时, 原始输出会记录在 docs/craft-notes/。
十二个之外
github.com/storytold 下所有名字含 craft 的 23 个仓库都被克隆并评估过 (docs/CRAFT-MATRIX.md)。其中十二个是有官方无头 CLI 的应用,做成了插件。
另外十一个是库、素材包,或没有可脚本化入口的 GUI —— 包括伞形应用 artcraft,它的 MCP 支持是文档中明确标注的 UI 桩。
文档
| docs/INSTALL.md | 安装、配置、使用、排错 |
| docs/CRAFT-MATRIX.md | 23 个仓库及其已验证的 CLI 接口 |
| docs/craft-notes/ | 各 craft 的证据、怪癖与限制 |
参与贡献
发现某个 craft 的 CLI 行为和这里描述的不一致?这些笔记本来就是用来被修正的 —— 带上原始输出开个 issue,或者自己跑一遍并开启追踪:
macOS / Linux
DSH_ARTCRAFT_TRACE=/tmp/trace.log node scripts/verify.mjs <craft>
Windows (PowerShell)
$env:DSH_ARTCRAFT_TRACE = "$env:TEMP\artcraft-trace.log"; node scripts\verify.mjs <craft>
这会把每次调用的完整 argv 写进该追踪文件。
许可证
MIT 或 Apache-2.0 双许可,任选其一 —— 与这些 craft 应用保持一致。
craft 二进制从各自的 GitHub release 下载,仍归各自的许可证管辖;本仓库没有内嵌它们的任何源码。
基于 DeepSeek Harness 构建 · 由 Cordis 驱动 · 献给 ArtCraft 社区预览分享卡片长什么样 ↓
让智能体直接驱动十二款创作应用完成制图、表格与音视频任务
相关插件 · 市场 / 管理
这是你的仓库?认领条目