npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-connect-trae

v3.5.0

Published

把本机登录的 Trae 模型接入 DeepSeek Harness:国内版与国际版双供应商并行,提供用量/积分概览与每日签到领取。

Readme

一个独立的 DeepSeek Harness (DSH) bundle 插件。它把本机已登录的 Trae 账号(国内版与国际版均支持)接到 DSH 的模型选择器:模型负责生成结构化工具调用,bash / read / write / edit 等工具由 DSH 本地执行;同时提供用量概览(国内版 Work/通用积分、国际版订阅状态)、每日签到领取与模型管理界面。国内版与国际版是两个并行的供应商(trae / trae-global),可同时使用;插件设置卡片以 tab 区分两者,方便统一管理。

支持 macOS、Windows 与 Linux:CI 在 ubuntu-latest 与 windows-latest 上跑完整 typecheck / 测试 / 构建;Windows 侧的目录探测、应用版本头与锁行为均有针对性处理,详见 Windows 说明。

除每日签到领取外,插件的所有查询都是只读的、不消耗额度;签到领取也只在你点击按钮时才发生。

功能特性

  • 双供应商并行接入 —— 国内版注册为 DSH 的 trae provider(DeepSeek-V4-Flash、DeepSeek-V4-Pro 等),国际版注册为 trae-global(Gemini / GPT / MiniMax 阵容),两边模型同时出现在 DSH 模型选择器里:不同会话可以各选一边,互不干扰。

  • 可单独关闭任一版本 —— 两个 tab 各带一个勾选(默认都勾选):取消勾选即把该版本的供应商整个从 DSH 模型选择器撤掉(不是只藏起 tab),并且不再发起任何请求;重新勾选即恢复,账号、目录、勾选与上下文预算全部保留。用不到国际版就把国际版关掉即可。

  • 插件卡片 tab 切换 —— 设置卡片顶部为「国内版 / 国际版」两个 tab,各含独立的账号选择、用量概览与模型管理;每个 tab 的账号、目录、勾选与未保存草稿完全隔离——在一个 tab 里切账号或刷新模型,不会触碰另一边的运行时目录与会话。

  • 倍率内嵌模型名 —— 模型名称按 Trae 自身菜单的格式显示积分倍率(如 GLM-5.2 · x0.79),倍率随目录刷新更新。

  • DSH 本地工具循环 —— 通过 Trae llm_utils_chat 获取待执行的结构化 tool_calls,交由 DSH 自带的本地工具执行,再将工具结果回传模型。

  • 国内国际双区域自动识别 —— 自动发现 Trae CN / TRAE SOLO CN / Trae / TRAE SOLO 四个本地安装的登录账号;区域由凭证自带的 userRegion 声明自动判定(host 后缀与 edition 标签兜底),无需手动指定。

  • 目录与勾选按区域隔离 —— 国内版与国际版各一套模型目录、勾选、图片开关与上下文预算,两个供应商各自读各自的槽位。

  • 识图能力跟随 Trae 自身的标注 —— Trae 把某个模型标为 multimodal 时,插件直接按多模态对外声明,无需你在卡片上逐一手勾(issue #16)。判据是「你手动勾选的 ∪ Trae 标注多模态的」:Trae 明确标 false 或未标注的模型保持纯文本,你可以照旧手动为它们打开图片输入。卡片上被自动开启的那一行显示为已勾选且只读,并说明原因。详见下方「图片输入(识图)」。

  • 多账号切换 —— 支持重新读取 Token 列表并选择账号;Token 不写入 DSH 设置。你的选择会被记住并长期生效:插件不会因为某个账号额度用尽、或检测到另一个可用账号就自作主张替你切换(换账号意味着换人计费)。所以当绑定的账号额度耗尽时,卡片会明确告诉你,并把本机其他还有额度的账号连同其可用积分数列出来,由你一键切换——而不是让面板一直空着、也不自动把你切走。「刷新账号与 Token」每次都会回报结果(找到几个账号、当前仍绑定谁),不会再「点了没反应」。下拉里显示的是产品名(Trae / TRAE SOLO / 国际版),便于分辨凭据来自哪个安装。

  • 跟随 Trae 当前登录的账号 —— 你在 Trae 桌面端退出并换登录后,卡片会检测到「插件绑定的账号」与「Trae 现在登录的账号」不一致,并给出一行提示与一键切换(复用账号下拉的同一次写入,不引入第二条切换路径)。想让插件自动跟随,可打开设置卡片里的「跟随 Trae 当前登录的账号」开关:此后每次配置生效都会把 accounts.<region> 重绑到 App 当前登录的账号。该开关默认关闭——已有配置保持原来的严格绑定,自动换绑意味着换人计费,必须由你主动勾选;未勾选时上面那行提示就是你的手动通道。(issue #29)

  • 只读用量与模型管理 —— 国内版查看 Work 积分与通用积分,国际版查看订阅/试用状态;刷新/启用 Trae 模型;只读查询不消耗额度。

  • 积分临近到期会提醒 —— 剩余额度只回答「还有多少」,回答不了「哪一笔先到期」;提醒条按到期紧迫程度逐级加重(7 天 → 24 小时 → 已过期),写明金额、套餐数和最早到期时间,避免只盯总额时悄悄丢掉最先到期的额度。国内版在用量页与输入框积分面板两处都显示(国际版是订阅制,没有逐包到期数据)。

  • 一键测试启用模型 —— 给已启用的每个模型发一条最小消息(一句 ping、不带工具),逐个告诉你能不能真的应答:可用 / 需要更高档位(Trae 1005,你的套餐不覆盖)/ 上游不提供(4001,SOLO 通道没有这个模型)/ 被限流(4011,Trae 限了这条通道)/ 登录凭据被拒 / 本次未测出。最后一项是一等公民:超时、断连、代理、5xx 一律不算「不可用」——只有上游明确的拒绝才算负面结论。这是插件里唯一消耗额度的操作(签到改变的是账号状态,不消耗),只在你点击时运行,结果只留在当前会话里不写入设置。

    4011 是限流不是「模型不可用」(issue #33 实测):它额度耗尽走的是另一个码 4008,所以「额度还有很多却报 4011」两句话可以同时成立。被限流的模型等你一会儿再试即可,不要删。

  • 一键测试所有模型 —— 同一套探测,作用于当前 region 的全部可见模型(不限于已启用的)。想知道「没启用的那些到底还能不能用」时用它——比如套餐降级后,或 Trae 调整了模型阵容之后。

  • 每日签到领取(逐账号) —— 国内版每个账号行各有一个签到按钮,当日奖励直接写在按钮上(签到 +150);该账号当天已领显示「已领取」并禁用,本机今日名额已被别的账号用掉时显示「本机已签」并禁用——如实区分「这个账号领了」和「这台设备领过了」,绝不把后者说成「已领取」。这是插件里唯一会改变账号状态的操作,由你主动点击触发;一次点击只针对该行账号、只发一次请求,刻意没有「一键全签」——Trae 的签到按「每台设备每天一次」计(换账号不会重置当天名额),批量只会酿成一排假失败。国际版没有签到活动,因此不显示该按钮。

  • 输入框读数 —— 在输入框工具栏(「专家」与模型选择器之间)显示一块可点击读数,5 分钟自动刷新。两个区域都显示,但显示的东西不同,这是数据决定的:国内版是积分制,显示「Trae CN · <通用积分>」;国际版是订阅制,它的用量文档里根本没有积分字段,所以显示「Trae 国际版 · <套餐>」(如 Pro / Free)。整块可点击,弹出浮层显示一张表格:本区域每个账号一行,国内版列通用积分、国际版列套餐,点行即可切换账号(写入与卡片相同的 accounts 字段、合并时不丢掉另一个区域的选择),并把手动刷新按钮放在浮层里。只在当前会话选中的模型属于本插件时出现——选其它供应商的模型时整块不渲染。这样两个连接器插件不会争同一个位置(侧边栏底部是共享的根级行,输入框工具栏是按会话、按供应商的)。

    读数显示在哪里可以选(学自同族 dsh-connect-workbuddy issue #62)。默认在输入框工具栏(即上面说的位置);如果那里被别的插件占了、读数不显示,改成输入框下方——那是「轮次 / 步数 / token」统计所在的那一行,读数是追加在官方统计之后,不会顶掉它们。位置按区域分别设置(国内版与国际版各存各的),在卡片「设置」区紧挨「在输入框工具栏显示积分读数」那个勾选框。之所以要有第二个位置:输入框工具栏是共享的 list 插槽,外壳自己的控件和其他插件都注册在那里,而共享插槽无法保证每个占用者都可见——同族的报告者装了第三方插件后读数就整个消失了(本插件早年放在侧边栏底部时也被挤成过一个「Tr」的残片)。

  • 安全 loopback shim —— 每区域一个随机端口 + 进程内随机 secret,真实 Trae token 不交给 pi-ai。

工作原理

DSH PiAiAdapter(每个 provider 一套)
  -> 安全 loopback shim(每区域一个随机端口 + 进程内随机 secret)
  -> TraeSoloBridge
  -> 国内版 https://trae-api-cn.mchost.guru/api/agent/v3/llm_utils_chat
  -> 国际版 https://coresg-normal.trae.ai/api/agent/v3/llm_utils_chat
  -> Trae SSE / pending function_call
  -> OpenAI SSE tool_calls
  -> DSH 本地执行工具并回传结果

国内版与国际版各持一套完整的运行时栈——凭据 store、模型 catalog、wire 映射、上游客户端、回环 shim、adapter——按凭证自带的区域声明隔离可见账号,所以两个区域的账号可以同时在线、同时被不同会话使用。

用量概览走 https://api.trae.cn/trae/api/v2/pay/* 与 /trae/api/v2/ug/* 只读接口(国际账号走其自有网关的订阅状态端点);每日签到领取是其中唯一的写操作,走 POST /trae/api/v2/ug/checkin_credits/claim,需要携带本机安装的设备号(x-device-id,与聊天通道同源)。该设备号也正是签到「每台设备每天一次」的判定依据,所以换账号不会重置当天名额。刷新得到的 token 按区域存放在 $DSH_HOME/.trae-auth.cn.json 与 $DSH_HOME/.trae-auth.ai.json(两个账号同时在线互不覆盖;旧的单文件 .trae-auth.json 作为迁移来源保留读取)。

详见 docs/IMPLEMENTATION_PLAN.md、docs/SOLO_ROUTE_DECISION.md、docs/USAGE_API_RESEARCH.md。

图片输入(识图)

插件对外声明「这个模型是否接受图片」,DSH 据此决定附图是原样发出还是降级成文字描述。所以这条声明是硬开关,不是一个无关紧要的标记。

判据是两个来源的并集(issue #16):

| 来源 | 含义 | |---|---| | Trae 目录自带的 multimodal 字段 | Trae 自己对「这模型读不读图」的回答。Trae IDE 本体的附图按钮就是纯粹由这个字段驱动的,没有用户开关 | | 你在卡片上手动勾选的 imageModelIds | 显式选择。即便 Trae 后来不再标注该模型,你的勾选也不会被撤掉 |

要点:

  • 只有 multimodal === true 才自动开启。 字段缺失(旧版本保存的目录、兜底目录)或明确 false,都按纯文本处理——宁可不发,也不对一个能力不确定的模型谎报「支持图片」。
  • 自动开启并不等于自动发图。 它只是让 DSH 允许你给该模型附图;图片始终由你在对话里自己贴,插件不会替你发送任何东西。
  • 被自动开启的行在卡片上显示为已勾选且只读。 因为并集语义下取消勾选会被立刻重新加上,给它一个可点的框是在撒谎。目前不为单个模型提供「强制关闭」的出口;如果你需要这个开关,可以在 issue #16 下提出。
  • 手动勾选对 Trae 标注 false(或未标注)的模型依然有效,这是为那些「上游没标但实际可用」的情况留的口子。

模型覆盖范围

插件提供的是 Trae SOLO 通道的模型(DeepSeek-V4-Flash-Official、DeepSeek-V4-Pro-Official、GLM-5.3、GLM-5.2、Kimi-K3、MiniMax-M3、Qwen3.8-Max、Doubao-Seed-* 等),国内版与国际版均走这条通道。

以下 3 个模型目前来自 TraeCode(Trae IDE)通道,尚未开放到 SOLO 通道:

| 模型 | | --- | | glm-5.3-flash | | kimi-k2.8-preview | | qwen3.8-flash |

它们会出现在模型列表里(Trae 的目录列出了它们),但插件侧暂时没有可调用它们的通道。选中后发送消息会得到一条明确的错误,例如:

Trae does not serve this model under the SOLO function the request used
(config_name rejected) · Trae code 4001 · upstream: We're sorry, the param is invalid…

即「上游不提供该模型」被如实说明,而不是静默失败或像网络故障。官方把它们开放到 SOLO 通道后,插件会自动可用(判据就是能不能拿到调用 id),无需升级插件。

为什么现在会显示(2026-10-02 起的策略):此前这类「目录里有、但拿不到调用 id」的模型会被直接隐藏,理由是「放出来只会报错」。但可调用名单是按账号档位下发的——在免费账号上测不到,不等于付费账号用不了(issue #19 的报告人就是 Pro:他的账号能调用本机免费账号被门禁挡住的模型)。隐藏用户自己 Trae IDE 里有的模型,比让他看到一条明确的错误更糟,所以改为:全部呈现 + 如实报错。

deepseek-v4.1-flash 曾在此列——docs/DS41_CALLABILITY.md(2026-09-15 取证)实测 8 个 SOLO function 全部返回 4001 param is invalid。上游后来把它开放到了 SOLO 通道:当前实时目录里它带 wireFunction: solo_work_remote,可正常调用(已实测刷新确认)。文档此前未同步,现已从表中移除。

注意区分:GLM-5.3 是支持的(走 SOLO 通道),但 glm-5.3-flash 不支持——两者是不同的模型。

如果你现在就要用这 3 个模型,请直接在 Trae IDE 本体中使用。

安装

推荐使用 DSH 插件命令安装 npm 已发布版本:

dsh plugin --profile desktop add dsh-connect-trae

或直接通过 npm 安装:

npm install dsh-connect-trae

安装、更新或卸载 bundle 后,需要重启对应的 DSH 进程。

DSH 版本兼容

要求 DSH 0.1.7-rc.1 及以上(2.3.0 起不再支持 0.1.7 之前的宿主;peer 依赖范围已按此收窄)。 peer 上界为 <0.3.0-0:0.1.7 与 0.2 两条线均受支持。

同时支持 pi-ai 的两代上下文(3.4.2 起)

DSH 自己横跨 @earendil-works/pi-ai 的两代,而本插件解析到哪一代由你的安装环境决定, 未必是宿主那一代——插件声明它是 peer,这是对的,但两代对「上下文长什么样」的定义不同:

| | 旧代(≤0.85) | 新代(0.86+) | | --- | --- | --- | | 形状 | { systemPrompt, tools, messages } | { messages: [ {role:'system', content, toolsAdded}, … ] } | | 系统提示 | 顶层 systemPrompt | 只挂在那条 system 消息上 | | 工具声明 | 顶层 tools | 只挂在那条 system 消息的 toolsAdded 上 |

错配两个方向都会坏,所以 3.4.2 起插件会按自己解析到的那一代双向适配(issue #27):

  • 新宿主 + 旧库:必崩——旧代的 token 估算没有 role === 'system' 分支,会去迭代一个字符串并抛 Cannot read properties of undefined (reading 'length')。这一步在请求构造之前,所以表现为 「任意模型都崩、耗时极短、usage 恒为 0」。
  • 旧宿主 + 新库:不崩,但现代 api 只读那条 system 消息,顶层字段被静默忽略——系统提示与 全部工具声明丢失(模型永远不会产生 toolCall)。这类故障更隐蔽,同样已修。

代际判据是本插件自己解析到的那份包(读它的 manifest 版本;读不到时看包布局), 不是宿主版本——因为嵌套的旧副本会盖过宿主的新副本,反之亦然。启动时日志里会有一行 dsh-connect-trae: pi-ai <版本> (<代数>),legacy 表示你这份安装解析到了 ≤0.85 的旧代。

分界线是 0.86:dist/utils/transcript.js、normalizeContext、估算器的 system 分支、 以及「不再读顶层字段」这四件事同时出现在 0.86.0。按 0.87 划分会把 0.86.x 误判成旧代而错误折返, 反而丢掉提示与工具。

0.2.0 线对本插件没有契约破坏——逐符号核对确认插件消费的 API 全部未变(完整的 0.2.0-rc.1 影响面核对)。但 0.1.7 起 DSH 有一道bundle 级 peer 门禁: peer 范围不满足的 bundle 会被整体跳过,只往 stderr 写一行,界面上表现为「插件凭空消失」。

peer 上界为什么不写 <0.2.0

2.3.1 曾写 <0.2.0-0,意图是「先不支持 0.2.0 正式版」。这个写法是错的: SemVer 里 0.2.0-rc.1 < 0.2.0-0,于是它把整个 0.2.0 预发布线也一并排除, 用户装上第一个 0.2.0 预发布版后插件立即整体失效(2.3.1 的实际故障)。

| 写法 | 0.1.7 线 | 0.2.0 alpha/rc | 0.2.0 正式 | 0.3.0 | | --- | --- | --- | --- | --- | | >=0.1.7-rc.1 <0.2.0-0 ❌ | ✅ | ❌ | ❌ | ❌ | | >=0.1.7-rc.1 <0.2.0 | ✅ | ✅ | ❌ | ❌ | | >=0.1.7-rc.1 <0.3.0-0 ✅ | ✅ | ✅ | ✅ | ❌ |

tests/dsh-peer-range.spec.ts 钉住这条不变式:逐条断言每个 peer 范围必须放行 0.1.7 与 0.2 两条线、必须挡住 0.3 线,并禁止 <0.2.0-0 这种写法回归。

为什么需要专门的测试:范围写错时 tsc 通过、全部单测通过、pnpm install 通过、 CI 全绿——只有真实宿主会拒绝加载。这正是 2.3.1 一路绿着上线的原因。

0.1.7 把设置体系整体重建,插件按 0.1.7 的契约工作:

  • 宿主端注册:SettingsForms.configure({auto}, owner)(0.1.7 起 installSection 已删除),命名空间取宿主实际服务的 Loader 条目 id(ctx.fiber.entry?.options.id,回落到 trae)——harness 按精确匹配查找 provider 的命名空间,写死 trae 会让 provider 被判「未配置」。
  • 客户端设置面:configForms(0.1.7 起 settingsScope 已移除)。inject 只声明 slots / locale,设置面用 ctx.get() 软探测——Cordis 的依赖闸门是硬闸,inject 里任一服务在运行线上不存在,apply() 就永远不会执行(这正是 2.2.0 及更早版本在 0.1.7 上卡在 pending (waiting for service: settingsScope) 的原因)。
  • 配置卡片槽位:plugins.bundle.config / plugins.row.config(settings.plugin.item 已删除)。
  • schema 可写声明:可写字段必须标 volatile()(asVolatile),否则写入被 0.1.7 的写入门直接拒绝;0.1.7 以 {get(): T} 活引用交付配置值,所有读取与合并路径都先解包(unwrapVolatile / unwrapVolatileDeep)。
  • 折叠箭头用纯 CSS,不静态导入任何 primitives 图标——图标命名族随版本变动,静态导入不是稳定契约。

平台支持

| 平台 | 状态 | 说明 | | --- | --- | --- | | macOS | ✅ 完全支持 | 开发与验证环境;目录名均经真机确认 | | Windows | ✅ 支持 | CI 跑 windows-latest;账号目录、应用版本头、锁行为均有专门处理。已在一台真机(Windows 10.0.22621 + TRAE SOLO CN)通过验证,见下方 | | Linux | ✅ 支持 | 含 WSL2 + Trae CLI 场景(issue #5);目录名按多候选探测 |

三个平台共享同一套逻辑:账号读取、解密、区域判定、签到与用量查询均与平台无关,平台差异只集中在路径解析(src/paths.ts)与设备指纹(src/identity.ts)两处。

Windows 说明

  • 账号数据目录:插件读取 %APPDATA%\<目录名>\User\globalStorage\storage.json(与安装目录无关——Electron 系应用的用户数据固定放 %APPDATA%,装到 D 盘也一样)。插件会并列探测多个目录拼写(Trae CN 与 trae-cn、TRAE SOLO CN 与 trae-solo-cn),命中任一即可;Windows 文件名不区分大小写,因此不会重复探测同一目录。
  • 应用版本头:插件从安装目录 <LOCALAPPDATA>\Programs\<安装目录名>\resources\app\product.json 读取 appVersion(LOCALAPPDATA 缺失时回退 <home>\AppData\Local),随请求发送 x-app-version / x-ide-version;读不到时这些头不发送,不影响登录与聊天。
  • 设备指纹:x-device-type 发 windows,x-os-version 为 Windows <版本>。机器 ID 取自数据目录的 telemetry.machineId(或同目录 machineid),该推导在 Windows 上成立。
  • 文件锁:宿主 dsh-atomic-write 原生处理 Windows 的独占创建语义(EPERM / EBUSY 重试),无需插件侧适配。
  • Raw Chat 探测(已知限制):model-cache 依赖 sqlite3 命令行,Windows 默认未安装,该探测会失败并安全回退。Raw Chat 默认关闭,不影响主流程。
  • 权限位:写凭据副本时传 mode: 0o600 / dirMode: 0o700,Windows 忽略 POSIX 权限位——不报错,属已知且无害。

真机验证结果(2026-09-26,Windows 10.0.22621 + TRAE SOLO CN)

node scripts/verify-windows.mjs 实测全部通过(退出码 0):

| 检查项 | 实测结果 | | --- | --- | | 目录探测 | 命中 %APPDATA%\TRAE SOLO CN\User\globalStorage\storage.json(其余候选为 missing) | | 账号解析 | 解出 1 个账号,solo / cn 区域 | | x-device-type | windows ✅ | | x-os-version | Windows 10.0.22621 ✅ | | x-device-id | 16 位纯数字(来自数据目录,非兜底哈希)✅ | | x-app-version | 0.1.56,取自 %LOCALAPPDATA%\Programs\TRAE SOLO CN\resources\app\product.json ✅ |

这确认了什么:win32DirName 作依据是正确的——TRAE SOLO CN 这个拼写确实是 Windows 真机上的实际目录名,且 product.json 的安装路径推导与设备指纹各字段都成立。即「Windows 上插件读得到 Trae 登录」已由真机证据支持,不再是推断。

脚本之外的运行路径(同一台真机,2026-09-26)

上表四项只覆盖路径探测与设备指纹,不等于「整个插件在 Windows 上跑得通」。因此另外单独实测了插件的主流程(直接调用 lib/ 的导出,即产品代码本身):

| 运行路径 | 实测结果 | | --- | --- | | TraeCredentialStore.resolve() | ✅ 返回凭据,host https://api.trae.cn,token 有效期正常解析 | | identityHeaders() 全部请求头 | ✅ 10 个头全部生成(x-device-id / x-machine-id / x-device-cpu / x-ide-version-code 等) | | 用量查询(只读,不消耗积分) | ✅ 拿到 9 个积分包,总额 2050 / 已用 1522.85 | | 模型目录拉取(只读) | ✅ 拉到 42 个模型 | | 原子写 writeFileAtomic | ✅ 写入 + 回读一致 | | 并发文件锁 withFileLock | ✅ 8 个并发写串行化正确,无丢失更新(Windows 独占创建语义由宿主处理,验证成立) | | SSE 解码 | ✅ 代码按 \r?\n 切分,CRLF 与分块均支持 |

也就是说:登录、身份、用量、模型目录、并发写入这些主流程在 Windows 上均实测可用。

已知限制(本机实测确认其行为):model-cache 依赖 sqlite3 命令行,本机未安装,实测抛 ENOENT(spawn sqlite3 ENOENT),调用方 .catch(() => undefined) 正确兜底——不影响主流程,Raw Chat 默认关闭。

该模块的目录拼写缺口已修复(同轮发现并修掉):它原先把 state.vscdb 路径硬编码为 Trae CN 单一拼写,而 paths.ts 是多候选,且它自己重算了一遍目录而没复用 traeStorageCandidates。在本机(真实目录名为 TRAE SOLO CN)上,旧代码指向的 ...\Trae CN\...\state.vscdb 根本不存在;只因 sqlite3 缺失、该调用必然失败并兜底,才把一个错误的路径藏在了另一个看似合理的错误(依赖缺失)后面。

修法是让缓存路径从凭据路径推导——state.vscdb 与 storage.json 同在 globalStorage,因而同一个候选目录既管登录也管缓存;raw-resolver 现在把命中的候选传下去,多版本共存时不会读到另一个安装的模型表。真机复测:新代码正确选中 %APPDATA%\TRAE SOLO CN\User\globalStorage\state.vscdb(存在),旧代码只找 Trae CN(不存在)。

仍然未验证的部分:本机只装了 TRAE SOLO CN,因此 Trae CN / trae-cn 这两个拼写仍未经真机确认——但它们在此机器上不存在只反映「本机没装这个版本」,不代表拼写有误。装了 Trae 中国版的 Windows 用户仍欢迎跑一次上面的命令回报。

安装 Trae 中国版或别的情形?一条命令即可回报:node scripts/verify-windows.mjs —— 它用插件自身的构建产物列出在这台机器上探测的每条路径、能否解出账号、以及设备指纹,输出已脱敏(用户名替换为 <user>,账号名与设备号只给长度),可直接贴进 issue。完整的验证步骤与结论判读见 docs/WINDOWS_VERIFY_GUIDE.md;手工逐步排查见 docs/WINDOWS_TOKEN_PROBE.md(只要目录名与 key 名,不要 token)。若目录名仍对不上,可用 authFile + edition 直接指定完整路径救急。

开发

pnpm install
pnpm run check   # typecheck + test + build

本地开发用 link: 安装到 desktop profile(改码后重启 DSH Desktop 生效):

dsh plugin --profile desktop add /path/to/dsh-connect-trae

致谢

第三方开源依赖

本项目参考的与 Trae 接入直接相关的开源项目,以及它们的许可证与合规说明,见 THIRD_PARTY_NOTICES.md。引入新的 Trae 相关外部依赖或复用其他项目代码时,请同步更新该文件并遵守对应许可证要求。

许可证

本项目采用 MIT 许可证,版权归属:Copyright (c) 2026 LaoDing。