把本机已登录的 Trae 模型接入 DSH 供调用
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/15 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add rumilhz/dsh-pylon-trae该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 134 处,展示前 59 条)
- 读取本地文件src/index.ts:143
if (!existsSync(legacy)) return - 读取本地文件src/index.ts:146
names = readdirSync(legacy) - 写入本地文件src/index.ts:155
mkdirSync(next, { recursive: true }) - 写入本地文件src/index.ts:156
appendFileSync(join(next, 'boot.log'), `${new Date().toISOString()} ${line}\n`, 'utf8') - 读取本地文件src/index.ts:165
if (existsSync(to)) return - 写入本地文件src/index.ts:168
mkdirSync(next, { recursive: true }) - 写入本地文件src/index.ts:169
copyFileSync(from, to) - 写入本地文件src/index.ts:328
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件src/index.ts:329
appendFileSync(path, `${new Date().toISOString()} ${message}\n`, 'utf8') - 读取本地文件src/index.ts:371
if (existsSync(path)) { - 读取本地文件src/index.ts:372
const existing = readFileSync(path, 'utf8').trim() - 读取本地文件src/index.ts:852
const parsed: unknown = JSON.parse(readFileSync(statePath, 'utf8')) - 读取本地文件src/auth.ts:285
const parsed = parseTraeCliToken(readFileSync(candidate.path, 'utf8')) - 读取本地文件src/auth.ts:299
const document = parseTraeStorageDocument(readFileSync(candidate.path, 'utf8')) - 读取本地文件src/auth.ts:556
const parsed: unknown = JSON.parse(readFileSync(storagePath, 'utf8')) - 写入本地文件src/auth.ts:927
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件src/auth.ts:930
writeFileSync(part, `${JSON.stringify(storeDocument(credential), null, 2)}\n`, { encoding: 'utf8', mode: 0o600 }) - 写入本地文件src/auth.ts:931
renameSync(part, path) - 删除本地文件src/auth.ts:934
rmSync(part, { force: true }) - 读取本地文件src/auth.ts:953
const parsed: unknown = JSON.parse(readFileSync(path, 'utf8')) - 读取本地文件src/auth.ts:1249
if (!existsSync(dir)) return [] - 读取本地文件src/auth.ts:1251
return readdirSync(dir) - 删除本地文件src/auth.ts:1265
rmSync(path, { force: true }) - 写入本地文件src/auth.ts:1325
mkdirSync(dir, { recursive: true }) - 写入本地文件src/auth.ts:1327
copyFileSync(path, backupPath) - 写入本地文件src/auth.ts:1342
copyFileSync(snapshot.backupPath, snapshot.path) - 删除本地文件src/auth.ts:1345
if (snapshot.before !== undefined && !snapshot.before.exists) rmSync(snapshot.path, { force: true }) - 读取本地文件src/guard.ts:128
if (!existsSync(profilesRoot)) return undefined - 读取本地文件src/guard.ts:130
for (const entry of readdirSync(profilesRoot, { withFileTypes: true })) { - 读取本地文件src/guard.ts:134
if (!existsSync(patch) || !existsSync(manifest)) continue - 读取本地文件src/guard.ts:136
const parsed: unknown = JSON.parse(readFileSync(manifest, 'utf8')) - 读取本地文件src/guard.ts:207
if (!existsSync(profilesRoot)) { - 读取本地文件src/guard.ts:211
for (const entry of readdirSync(profilesRoot, { withFileTypes: true })) { - 删除本地文件src/guard.ts:264
rmSync(path, { force: true }) - 写入本地文件src/guard.ts:299
mkdirSync(dir, { recursive: true }) - 写入本地文件src/guard.ts:301
copyFileSync(patchPath, backupPath) - 写入本地文件src/guard.ts:421
writeFileSync(snapshot.patchPath, readFileSync(snapshot.backupPath)) - 读取本地文件src/identity.ts:38
const parsed: unknown = JSON.parse(readFileSync(path, 'utf8')) - 读取本地文件src/identity.ts:70
machineFile = nonEmpty(readFileSync(join(appDataRoot(storagePath), 'machineid'), 'utf8')) - 读取本地文件src/paths.ts:135
exists: existsSync(candidate.path) - 读取本地文件install.mjs:106
const header = readFileSync(new URL(import.meta.url), 'utf8').split('*/')[0] - 读取本地文件install.mjs:125
const fileSha256 = (path) => sha256(readFileSync(path)) - 读取本地文件install.mjs:162
const raw = readFileSync(path, 'utf8') - 读取本地文件install.mjs:170
if (!existsSync(HOME)) { - 读取本地文件install.mjs:173
if (!existsSync(PROFILE_DIR)) { - 读取本地文件install.mjs:174
const names = existsSync(join(HOME, 'profiles')) - 执行外部命令来自配置/变量install.mjs:197
const doctor = spawnSync(process.execPath, args, { - 写入本地文件install.mjs:286
mkdirSync(dir, { recursive: true }) - 写入本地文件install.mjs:289
copyFileSync(PACKAGE_PATH, packageBackup) - 写入本地文件install.mjs:290
if (existsSync(PATCH_PATH)) copyFileSync(PATCH_PATH, patchBackup) - 删除本地文件递归install.mjs:299
rmSync(join(BACKUP_ROOT, stale), { recursive: true, force: true }) - 删除本地文件install.mjs:331
rmdirSync(linkPath) - 写入本地文件install.mjs:341
mkdirSync(parent, { recursive: true }) - 删除本地文件install.mjs:350
if (existsSync(tempLink)) rmSync(tempLink, { recursive: false, force: true }) - 删除本地文件install.mjs:353
rmSync(tempLink, { force: true, recursive: false }) - 删除本地文件install.mjs:359
if (previous !== undefined) rmdirSync(linkPath) - 写入本地文件install.mjs:360
renameSync(tempLink, linkPath) - 删除本地文件install.mjs:363
if (existsSync(tempLink)) rmSync(tempLink, { force: true, recursive: false }) - 写入本地文件install.mjs:449
writeFileSync(tmp, serialized, 'utf8')
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
Trae 的 LLM 服务商,给 DeepSeek Harness 用:读取已登录 Trae 桌面端/命令行写下的凭证,在固定回环端口上提供 OpenAI 兼容端点,并在模型页预置一条可编辑的服务商条目。绝不写入 Trae 数据。
README
由 DeepSeek 最新模型翻译生成dsh-pylon-trae
DeepSeek Harness(DSH)的 Trae LLM 服务商插件。
仓库:<https://github.com/rumilhz/dsh-pylon-trae> 包名:dsh-pylon-trae(这是 dsh-pylon- 前缀下的第一个插件)。
这是什么
这个插件给 DeepSeek Harness 加上 Trae 服务商。安装并重启 DSH 后,Settings → Models 里会多出一个可编辑的 Trae 服务商,它的模型列表来自本机已登录的 Trae 安装(Trae 桌面应用,或 Trae 命令行)。
它不依赖、不导入、也不打补丁到 dsh-connect-trae。
工作原理
1. 读取 Trae 桌面应用或 Trae 命令行已经写好的凭据文件,用自己实现的逻辑在本地解密。
2. 拉取已登录版本(国内版或国际版)的实时模型目录,并解码流式响应。
3. 从固定的回环端口提供 OpenAI 兼容端点(/healthz、/v1/models、/v1/chat/completions)。
4. 往 llm-pi-ai 命名空间里种入一条服务商条目——Models 页面渲染编辑器的正是这个命名空间,所以你可以在界面上增删和测试模型。
Trae 自己的数据是只读的。
展开完整文档(README 剩余 1 节)
dsh-pylon-trae
DeepSeek Harness(DSH)的 Trae LLM 服务商插件。
仓库:<https://github.com/rumilhz/dsh-pylon-trae> 包名:dsh-pylon-trae(这是 dsh-pylon- 前缀下的第一个插件)。
这是什么
这个插件给 DeepSeek Harness 加上 Trae 服务商。安装并重启 DSH 后,Settings → Models 里会多出一个可编辑的 Trae 服务商,它的模型列表来自本机已登录的 Trae 安装(Trae 桌面应用,或 Trae 命令行)。
它不依赖、不导入、也不打补丁到 dsh-connect-trae。
工作原理
1. 读取 Trae 桌面应用或 Trae 命令行已经写好的凭据文件,用自己实现的逻辑在本地解密。
2. 拉取已登录版本(国内版或国际版)的实时模型目录,并解码流式响应。
3. 从固定的回环端口提供 OpenAI 兼容端点(/healthz、/v1/models、/v1/chat/completions)。
4. 往 llm-pi-ai 命名空间里种入一条服务商条目——Models 页面渲染编辑器的正是这个命名空间,所以你可以在界面上增删和测试模型。
Trae 自己的数据是只读的。 插件从不写入 Trae 的文件;代码里有一条断言会拒绝这么做。
硬性前提——四条全都要满足
| # | 要求 | 缺失后果 |
| 1 | 本机已登录 Trae(桌面应用最省事;命令行也算) | 插件能启动,但不暴露任何模型,并报告「no usable credential」 |
| 2 | 端口 7864 空闲(国内版;国际版是 7865) | 回环服务起不来,等于完全没有通道 |
| 3 | 配置档里没有挂载 dsh-connect-trae | 两个 Trae 服务商会抢同一个路由 id(trae / trae-global) |
| 4 | Windows | macOS / Linux 的代码路径存在,但没在真机上测过 |
安装不会启动或重启 DSH。请完全退出 DSH 再重新打开。只重载窗口不够。
安装
发布.md 里写了三条路径。简单说:
- 从本仓库(GitHub 源码)安装。 安装目标是 pnpm 的 GitHub spec,github:rumilhz/dsh-pylon-trae。任何能从 GitHub 源码添加插件的 DSH 版本都能这样装。
- 从插件市场安装。 ⛔ 目前还搜不到。 已经/将会向精选的 awesome-dsh-plugin 目录提交条目,但市场只提供该目录内的来源,所以这条路径只有等那个 pull request 合并之后才可用。见 发布.md。
- 从预构建 tarball 安装。 node tools/pack.mjs 会生成 dist/dsh-pylon-trae-<version>.tgz,外加一对校验文件 .sha256 和 .manifest.txt;node install.mjs --from <tgz> 可以离线安装。
Node ≥ 22.6 能直接跑 .ts 源码(类型剥离),所以没有构建步骤。
这是什么
DSH 的 Trae 供应商插件(自研实现;不依赖、不引用、不打补丁于 dsh-connect-trae)。
目标形态:在「设置 → 模型」里出现一条可编辑、含 Trae 全量模型、能自己筛的供应商。
- 包名 dsh-pylon-trae,仓库名 dsh-pylon-trae。
- 状态/数据目录只有一个:$DSH_HOME\.dsh-pylon-trae\(token、state.json、备份、boot.log 都在里面)。
旧 .dsh-trae\ 首次启动时会自动复制迁移,原目录保留给用户自己清理。
四硬前提见上面英文小节的表格(Trae 已登录 · 7864 空闲 · profile 里没有 dsh-connect-trae · Windows)。
装完必须完全退出 DSH 再打开,刷新页面不算。
状态(截至 2026-10-14 深夜)
M1~M6 是什么:不是版本号,是施工顺序(M = milestone)。
每一步都刻意做成「做完就能单独验证」的一小段,且顺序保证越早可用: M1 只读不碰配置 → M2 让链路能说话 → M3 才把它接进「设置 → 模型」→ M4 之后就都是加功能。
状态口径:✅ = 本机实测通过 · ⏳ = 没做完,或做完但还没验收。
| 里程碑 | 一句话:这一步在干什么 | 做完你会看到什么 | 状态 |
| M0 | 先把别人的插件读透、把行号钉死、选路线 | 一份带行号的现状与选路文档 | ✅ |
| M1 | 只读:找到 Trae 的凭据并解开、把线上模型清单拉下来 | 一条命令打出「读到几个账号、线上有多少模型」 | ✅ 本机 CN 79 个模型(4 个接口全 200) |
| M2 | 让本插件自己的服务能「代替 Trae 说话」(固定端口 + 协议 + 流式解码) | 打自己的端口,能收到带工具调用的流式回复 | ✅ 文本/thinking/usage/tool_calls 全通 |
| M3 | 把这条供应商写进「设置 → 模型」(workbuddy 那种可编辑条目) | 模型页出现 Trae 一行,能勾选模型、保存、重启不丢 | ✅ 真冷启动通过(79 模型写入;二次启动 no-op) |
| M4 | 服务端:插件自带端点 + 宿主路由 + 不开 UI 的 CLI | 没有浏览器也能读账号/目录/用量/签到/测试 | ✅ 端点两条前缀都在;/models/reload(只读重拉)与 /models/refresh(只增不删写配置)已分开 |
| 卡片 | 浏览器半边:设置卡片(账号/目录/「刷新目录」/「重建清单」/用量/签到/测试) | 设置 → 插件里出现 dsh-pylon-trae 卡片,按钮点得动 | ⏳ 代码已落地;两个离线闸门全绿。仍差真人重启后点一次 |
| M5 | 功能对齐(用量积分 / 输入框读数 / 每日签到 / 一键测试 / 图片 / 推理档位) | 上游有的那些功能逐项出现 | ⏳ 已做:推理档位映射、用量/签到/测试端点与卡片按钮。未做:输入框积分读数 + 账号浮层。图片输入刻意不做:协议层不翻译 image_url,于是目录也不宣告 image(理由写在 src/protocol.ts 顶部) |
| M6 | 收尾:把上游 dsh-connect-trae 从 profile 移除 | 选择器里只剩本插件那一条 Trae | ⏳ |
验证全部跑在临时 profile 上:<工作区>\_trae-coldstart\home(独立 DSH_HOME,里面只装本插件)。
把插件装进真 profile(~/.dsh/profiles/)是部署动作。
怎么验(全部可复制)
把 <node> 换成你本机的 Node ≥ 22.6 可执行文件(DSH 自带的那份即可):
set NODE=<node>
① 服务端离线回归(不联网、不花额度)—— 当前 10/10 套件 PASS
%NODE% tools\_run-suites.mjs
任一失败即退出码非 0(缺脚本记 SKIP,不算过)。想单跑某一项(排查时更省时间,退出码 0 才算过):
%NODE% tools\check-entry.ts :: 入口能 import、Config 校验(本机:ENTRY OK)
%NODE% tools\test-seed.ts :: 写路径 create/present/refresh/回滚 + 备份保留策略(真文件系统 e2e)
%NODE% tools\test-api.ts :: 端点处理函数
%NODE% tools\test-reasoning.ts :: 推理档位映射
%NODE% tools\client-bundle-check.mjs :: 卡片 bundle
%NODE% tools\client-route-check.mjs :: 宿主路由 handler,走真 HTTP
tools/test-seed.ts 与 client-.mjs 自己不打总数(只打 ALL CHECKS PASSED / N/N),所以判据始终是退出码 0,不是某一行的数字。
再加两项联网只读检查(只拉目录、只起回环服务,不产生生成、不花额度):
%NODE% tools\_run-suites.mjs --network
② 冷启动验收(起真 DSH 进程)—— 当前 19/19
%NODE% tools\coldstart-verify.mjs
它自己会:重建临时 profile → 起真 DSH(显式给 DSH_HOME)→ 轮询 $DSH_HOME\.dsh-pylon-trae\boot.log 与 profile patch → 断言 seed: created → 断言 providers.trae 与模型数 > 0 → 用 Bearer 打 http://127.0.0.1:7864/admin/status 得到 ok:true → 停进程 → 再起一次断言 seed: present 且 patch sha256 未变 → 打印结论与耗时,并确认 7864 已释放。
%NODE% tools\coldstart-verify.mjs --keep-profile
%NODE% tools\coldstart-verify.mjs --skip-restart
%NODE% tools\coldstart-verify.mjs --capture
%NODE% tools\coldstart-verify.mjs --timeout 120 --port 7864 --dsh-profile unset
铁律不变:脚本只写工作区下的 _trae-coldstart\(临时 home\ 加上它自己的 PID 账本 coldstart-pids.json、可选捕获日志),不引用活体 ~/.dsh;启动的每个进程都记账,结束前连子进程一起杀,并复查端口。它能重复跑。
③ 真机六条用法(不需要 UI;只有 test 花一点点额度,refresh 可能写配置,其余只读)
%NODE% tools\trae.ts status
%NODE% tools\trae.ts models --limit 30
%NODE% tools\trae.ts usage
%NODE% tools\trae.ts checkin
%NODE% tools\trae.ts test --model mimo-v2.6-flash
%NODE% tools\trae.ts refresh --host
· status —— 账号(desktop + CLI)+ 模型数 + 当前凭据(只有 sha256[0:12] 指纹)
· models --limit 30 —— 实时目录逐条列出:id / 名字 / 上下文 / 输入模态 / 所属 function
· usage —— 总额与各 pack 的 credits_amount(只读,不花额度)
· checkin —— 今日签到状态(只读);加 --claim 才真的领,那会改变账号状态
· test --model <id> —— ⚠️ 会向 Trae 发一条极小真实消息,消耗一点点额度
· refresh --host —— 让正在运行的宿主重建清单(只增不删;需要 7864 上已经有宿主在跑)
④ 客户端半边的两个离线闸门(不需要浏览器)
%NODE% tools\client-bundle-check.mjs
%NODE% tools\client-route-check.mjs
client-bundle-check 查:经典脚本可加载、席位注册、无任何凭据、四个状态都渲染,外加: 「刷新目录」必须打到 POST /models/reload、「重建清单」必须打到 POST /models/refresh(两者不许互换)、 reload 之后目录行里的 模型 N 个 只出现一次、accountWarning 原样透传到卡片(红字)。
client-route-check 查:两条前缀路由、disposer 反注册、失败一律回 {ok:false,detail},以及栅栏口径——只有「Host 与 Origin 都是回环」的 403 被容忍(且只 trace 一次), 401 永不放过,非回环 Host/Origin 仍然 403。
这两个数字会继续长,所以只当"跑没跑过"的判据:退出码 0 才算过。
⑤ M1 只读探针(原来的入口,仍然可用;不联网不花额度)
tools\probe-m1.cmd --no-network
去掉 --no-network 就是再拉一次实时模型目录(会联网,只读)。
已知限制(都会静默失败,所以写在这里)
① 卡片这条通道依赖宿主的两件事,任一件变了卡片就整片 403。
卡片的数据走宿主 web server 上本插件自己注册的路由(/plugins/dsh-pylon-trae 与 /api/plugins/dsh-pylon-trae),而请求要过宿主自己的栅栏 connection.requestRejection。桌面 app 的 UI 层只转发 /api/,并且会把 Host 改写成宿主端口、Origin 仍是 app 端口 —— 于是同一个栅栏对回环请求也回 403。
我们的处理是容忍这一种 403(Host 与 Origin 都是回环,端口可不同):仅此情形放行并 trace 一次; 401 绝不放行,非回环 Host/Origin 仍然 403。
⇒ 若某天宿主改了这套判据,症状是卡片五个区块全是 HTTP 403 … 没有返回 JSON(这条路没被转发到插件)。先看 $DSH_HOME\.dsh-pylon-trae\boot.log 里有没有这行:
host route: fence 403 tolerated as a loopback port hop (host=… origin=…) — the card is served through the desktop app's proxy
有 ⇒ 栅栏已放行,问题在别处;没有 ⇒ 请求在栅栏处就被判掉了(handleApi 一次都没被调用)。
另一种"没数据"是插件根本没被 import:模块顶层会打 [dsh-pylon-trae] module loaded, 没有这行 = 没被 import;有这行但没有 apply: 行 = import 了但 apply 没跑(inject 依赖没到,插件停在 PENDING)。
② 图片输入是刻意没开的,不是漏了。
src/protocol.ts 顶部有 NOT IMPLEMENTED — image input (deliberate) 一节:请求侧不翻译 image_url 内容块,所以目录里 multimodal === true 的模型也不往 provider 条目的 input 里写 'image' (恒为 ['text'])。理由是"先宣告、再让用户的图片静默消失"比不支持更糟。
③ 单次「测试启用模型」最多 10 个,而且每个都是真请求。
/models/test 的 MAX_PROBE_MODELS = 10(src/api.ts):显式给 modelIds 时,去重、丢掉未知 id 之后最多真的测 10 个,被截掉的用 requested / tested / truncated 明说;不给 modelIds 只测前 5 个。
每个 verdict 都是一次真的发往 Trae 的请求(30s 超时、串行),所以这一步会花一点点额度。
反过来,/models/reload 与 /models/refresh 只拉目录,不发消息、不花额度(refresh 会写配置)。
④ 只在 Windows + Trae CN 上实测过。
路径与 edition 表按三平台(win32/darwin/linux)写好,但 macOS / Linux 没有真机验证;国际版(ai 区域)同理 —— 本机没有国际版凭据,代码结构保留了 cn/ai 双桶,等有账号时再验。
目录结构
src/format.ts ← 生成物(tools/extract-format.mjs):Trae 自身格式常量(salt 表、storage key、directory functions) src/paths.ts ← 三个平台的安装/数据目录探测(4 个 edition,desktop + CLI) src/auth.ts ← 凭据读取与解密(自研实现)、账号归一化、CLI JWT 解析 src/identity.ts ← 机器/设备身份(读 Trae 自己的文件,绝不伪造) src/catalog.ts ← 实时目录拉取(逐 function 取并集)+ 静态兜底 + 请求头契约 + 推理档位解析 src/protocol.ts ← 请求翻译(OpenAI → Trae)+ 命名 SSE 解码(Trae → OpenAI chunk) src/shim.ts ← 固定端口回环门面:/healthz · /v1/models · /v1/chat/completions 以及 /admin/ 与 /plugins/dsh-pylon-trae/* 两条插件端点前缀,同一条 Bearer src/seed.ts ← 找 namespace、生成供应商条目、create / present / refresh(只增不删) src/guard.ts ← 写路径安全网:写前备份、写后由纯函数 judgePatchWrite 核对四条(条目不少 / 文件不空 / provider 真在 providers 字典里 / 模型数等于期望); "读不到"判失败("无法确认" ≠ "确认无误"),任一不过就逐字节回滚 src/api.ts ← 端点处理函数(与传输无关,可离线测);/models/reload(只读重拉)与 /models/refresh(只增不删写配置)是两条不同的路由 src/index.ts ← 插件入口:配置 + 起服务 + 种子 + 账号状态/墓碑集合(落 .dsh-pylon-trae/state.json) lib/client.js ← 浏览器半边:设置卡片(两个席位;不碰回环 token,只走宿主路由) tools/ ← 见上面「怎么验」;另有 make-temp-profile.mjs(临时 profile 配方) cordis.patch.yml ← 本插件的 bundle 补丁(声明它是怎么被 profile 挂上的) install.mjs ← 装机入口(源码目录 link / tgz --from / --uninstall / --rollback)
安全约定
· 探针只打印 token 的 sha256[0:12] 指纹;真实 token 只在内存里,且永不写入 cordis.patch.yml、日志或任何 HTTP 响应(写进供应商条目的是本插件自己的回环 token,不是 Trae 的凭据 —— 它只用来挡住别的本机进程蹭额度)
· 凭据值、token 值一律不打印;冷启动脚本比对 Authorization 时也只比 sha256 指纹
· 绝不碰活体 profile(~/.dsh):所有验证都在工作区下的临时 home 里做
· 写文件一律用编辑工具或 Node 的 fs.writeFileSync(p, s, 'utf8') —— 不用 PowerShell 的 Set-Content / Out-File
· Trae 的数据只读:install.mjs / doctor.ts 里都有断言拦着写 AppData\Roaming\Trae*
许可
MIT,见 LICENSE。
src/format.ts 是由 tools/extract-format.mjs 生成的格式常量(Trae 自身 storage key 与 salt 表),数据来源是同样以 MIT 分发的 dsh-connect-trae@3.4.0;本仓库没有 vendor 它的任何代码。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
rumilhz/dsh-pylon-trae
把本机已登录的 Trae 模型接入 DSH 供调用
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1