dsh-tap 0.20.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/AGENTS.md +99 -0
- package/CHANGELOG.md +751 -0
- package/LICENSE +21 -0
- package/README.en.md +59 -0
- package/README.md +256 -0
- package/cordis.patch.yml +385 -0
- package/core/bridge.js +698 -0
- package/core/json-store.js +91 -0
- package/core/rotation.js +108 -0
- package/core/usage-meter.js +176 -0
- package/docs/diagnosis-cache-quota.md +181 -0
- package/docs/diagnosis-qoder-flash.md +67 -0
- package/docs/diagnosis-trae-3003.md +302 -0
- package/docs/goals/bridge-port-host-split.md +91 -0
- package/docs/goals/desktop-adaptation.md +106 -0
- package/docs/goals/qoder-cn-provider-design.md +308 -0
- package/docs/goals/settings-card-ux-redesign-plan.md +1680 -0
- package/docs/goals/settings-card-ux-redesign.md +162 -0
- package/docs/goals/trae-agent-v3.md +41 -0
- package/docs/goals/trae-work-cn-repair.md +44 -0
- package/docs/goals/v0.8-/351/242/235/345/272/246/345/217/257/350/247/201-/346/250/241/345/236/213/345/212/250/346/200/201/345/214/226-/345/244/232/346/234/215/345/212/241/345/225/206.md +85 -0
- package/docs/pitfalls.md +105 -0
- package/docs/reverse/trae-cloud-api.md +218 -0
- package/docs/reverse/trae-model-catalog.md +129 -0
- package/docs/reverse/traework-cn.md +520 -0
- package/docs/rules/STATE.md +198 -0
- package/docs/rules/content-moderation.md +54 -0
- package/docs/rules/dev-role-boundary.md +94 -0
- package/docs/rules/extra-providers.md +42 -0
- package/docs/rules/gateway-facts.md +91 -0
- package/docs/rules/oauth-handshake.md +76 -0
- package/docs/rules/prompt-cache.md +93 -0
- package/docs/rules/quota-signals.md +125 -0
- package/docs/rules/routing.md +84 -0
- package/docs/rules/templates/oauth-reverse-checklist.md +42 -0
- package/docs/rules/trae-surface.md +242 -0
- package/docs/rules/ua-validation.md +81 -0
- package/host-config.js +282 -0
- package/index.js +2306 -0
- package/lib/client.js +2893 -0
- package/local-scan.js +104 -0
- package/package.json +82 -0
- package/providers/ark/index.js +11 -0
- package/providers/bailian/index.js +10 -0
- package/providers/bigmodel/index.js +11 -0
- package/providers/codebuddy/agenttool.js +122 -0
- package/providers/codebuddy/catalog.js +227 -0
- package/providers/codebuddy/errors.js +44 -0
- package/providers/codebuddy/headers.js +36 -0
- package/providers/codebuddy/images.js +125 -0
- package/providers/codebuddy/index.js +123 -0
- package/providers/codebuddy/oauth.js +279 -0
- package/providers/deepseek/index.js +11 -0
- package/providers/moonshot/index.js +11 -0
- package/providers/openai-compat.js +177 -0
- package/providers/openrouter/index.js +27 -0
- package/providers/qoder/catalog.js +145 -0
- package/providers/qoder/cosy.js +419 -0
- package/providers/qoder/gateway.js +563 -0
- package/providers/qoder/index.js +116 -0
- package/providers/qoder/oauth.js +364 -0
- package/providers/qoder/qoder_auth.wasm +0 -0
- package/providers/qoder/quota.js +56 -0
- package/providers/qwen/index.js +15 -0
- package/providers/tool-pairing.js +129 -0
- package/providers/trae/catalog.js +103 -0
- package/providers/trae/errors.js +85 -0
- package/providers/trae/gateway.js +853 -0
- package/providers/trae/index.js +126 -0
- package/providers/trae/oauth.js +443 -0
- package/providers/trae/quota.js +75 -0
- package/providers/trae/remote.js +365 -0
- package/scripts/capture-cache.mjs +65 -0
- package/scripts/capture-traffic.mjs +83 -0
- package/scripts/hermes-probe-dev-role.mjs +263 -0
- package/scripts/measure-latency.mjs +253 -0
- package/scripts/probe-ark-thinking.mjs +298 -0
- package/scripts/probe-cache-decline.mjs +292 -0
- package/scripts/probe-cache-ttl.mjs +221 -0
- package/scripts/probe-cache.mjs +156 -0
- package/scripts/probe-codebuddy-efforts.mjs +355 -0
- package/scripts/probe-codebuddy-tier-wiring.mjs +244 -0
- package/scripts/probe-effort-gaps.mjs +133 -0
- package/scripts/probe-media.mjs +115 -0
- package/scripts/probe-moderation.mjs +159 -0
- package/scripts/probe-oauth.mjs +617 -0
- package/scripts/probe-qoder-attribution-arm8.mjs +92 -0
- package/scripts/probe-qoder-attribution-arm9.mjs +102 -0
- package/scripts/probe-qoder-attribution.mjs +266 -0
- package/scripts/probe-qoder-flash-confirm.mjs +94 -0
- package/scripts/probe-qoder-live.mjs +344 -0
- package/scripts/probe-qoder-matrix.mjs +274 -0
- package/scripts/probe-qoder-null-content.mjs +153 -0
- package/scripts/probe-qoder-pairing.mjs +308 -0
- package/scripts/probe-qoder-quota.mjs +162 -0
- package/scripts/probe-qoder-thinking-config.mjs +52 -0
- package/scripts/probe-qoder-thinking-efforts.mjs +269 -0
- package/scripts/probe-quota.mjs +136 -0
- package/scripts/probe-quota2.mjs +144 -0
- package/scripts/probe-routing.mjs +226 -0
- package/scripts/probe-trae-3003-diagnosis.mjs +139 -0
- package/scripts/probe-trae-agent-v3.mjs +399 -0
- package/scripts/probe-trae-efforts.mjs +149 -0
- package/scripts/probe-trae-live.mjs +147 -0
- package/scripts/probe-trae-max-effort.mjs +179 -0
- package/scripts/probe-trae-model-routing.mjs +381 -0
- package/scripts/probe-trae-thinking-scene.mjs +238 -0
- package/scripts/probe-trae-transport-outage.mjs +176 -0
- package/scripts/probe-ua.mjs +508 -0
- package/scripts/trae-model-catalog.mjs +632 -0
- package/scripts/verify-agents-md.mjs +45 -0
- package/scripts/verify-bridge.mjs +1041 -0
- package/scripts/verify-core-generic.mjs +302 -0
- package/scripts/verify-desktop-acceptance.mjs +184 -0
- package/scripts/verify-host-config.mjs +265 -0
- package/scripts/verify-models.mjs +390 -0
- package/scripts/verify-providers.mjs +255 -0
- package/scripts/verify-qoder-provider.mjs +1020 -0
- package/scripts/verify-rotation.mjs +308 -0
- package/scripts/verify-trae-model-catalog.mjs +284 -0
- package/scripts/verify-trae-provider.mjs +1451 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# AGENTS.md — dsh-tap 开发指南
|
|
2
|
+
|
|
3
|
+
面向在本仓库工作的 AI 编码 agent(以及未来的你自己)。本文只放"每次都要的"薄索引:定位、架构、通则、命令、文档地图。**所有"为什么"都在下层文档**——网关事实全表 docs/rules/gateway-facts.md、踩坑全本 docs/pitfalls.md、版本史 CHANGELOG.md、模块叙述 wiki/01-architecture.md ~ 10-provider-qoder.md;别凭记忆改,按文末文档地图去读。本文预算 ≤150 行 / ≤12KB,CI 硬闸门锁定(踩坑 #52)。
|
|
4
|
+
|
|
5
|
+
## 项目是什么
|
|
6
|
+
|
|
7
|
+
把腾讯 CodeBuddy 网关(`copilot.tencent.com`)接入 DeepSeek Harness(dsh)的插件:23 个模型静态兜底 + `/v3/config` 目录动态同步、本地流式桥、`web_search`/`web_fetch`/`image_generate` 后端、Web UI 设置卡(4 区块通道手风琴);另两条订阅上游 TraeWork CN(:3902)与 Qoder CN(:3903)翻译网关,加 7 家 key 型 OpenAI 兼容服务商。纯 ESM,Node ≥ 22。版本沿革见 CHANGELOG.md。
|
|
8
|
+
|
|
9
|
+
## 三层架构(改动时先想清楚落在哪层)
|
|
10
|
+
|
|
11
|
+
| 层 | 文件 | 职责 | 裁判文档 |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| 静态配置 | `cordis.patch.yml` | provider 路由指向本地桥 + 模型清单 + web 钉选 + `insert` 入口 | wiki/01-architecture.md |
|
|
14
|
+
| 组合根 | `index.js` + `host-config.js` | Config/schema、模型管理与宿主配置层镜像(host-config 按宿主版本选路)、凭据编排、设置路由、apply 生命周期 | wiki/02-composition-root.md |
|
|
15
|
+
| 凭据边缘层 | `core/` | **provider 无关**:json-store / rotation / usage-meter / bridge;禁止任何 CodeBuddy 特化(verify-core-generic 锁) | wiki/03-core-layer.md |
|
|
16
|
+
| 上游适配器 | `providers/codebuddy/` | CodeBuddy 全部网关事实:headers/errors/oauth/catalog/agenttool/images | docs/rules/ + wiki/04-provider-codebuddy.md |
|
|
17
|
+
| 上游适配器 | `providers/trae/` | TraeWork CN:自持设备密钥 OAuth / state.vscdb 目录 / 翻译网关 :3902 | docs/reverse/ + wiki/05-provider-trae.md |
|
|
18
|
+
| 上游适配器 | `providers/qoder/` | Qoder CN:PKCE 设备流 / COSY WASM 签名 / 加密信封翻译网关 :3903 | docs/goals/qoder-cn-provider-design.md + wiki/10-provider-qoder.md |
|
|
19
|
+
| 多服务商 | `providers/openai-compat.js` + `ark`/`bailian`/`deepseek`/`bigmodel`/`moonshot`/`openrouter`/`qwen` | key 型上游共享骨架 + 每上游 preset(热加载免重启) | docs/rules/extra-providers.md + wiki/06-provider-openai-compat.md |
|
|
20
|
+
| 浏览器半 | `lib/client.js` | 设置卡(4 区块通道手风琴;宿主 UI 原语 + cbc- 样式;刷新生效注意缓存) | wiki/07-web-client.md |
|
|
21
|
+
|
|
22
|
+
改动生效方式:静态配置、组合根、core、codebuddy 适配器 = 重启 dsh(desktop 宿主 = 退出并重启桌面应用);trae/qoder 网关端口域名热生效、patch 路由改动重启;多服务商热加载;浏览器半刷新页面。
|
|
23
|
+
|
|
24
|
+
设置数据流:设置卡 → `POST /dsh-tap/settings`(自有路由)→ `~/.dsh/codebuddy-plugin.json`(文件层)→ `Config({entry, file})` 活解析。OAuth 令牌单独存 `~/.dsh/*-plugin-auth.json`,**永不回传浏览器**(key 也只回脱敏 `ck_a…5678`)。
|
|
25
|
+
|
|
26
|
+
## 网关事实通则(全表:docs/rules/gateway-facts.md,改上游行为前必读)
|
|
27
|
+
|
|
28
|
+
- `/v2/chat/completions` **仅流式**(非流式报 11101);网关无 `GET /models`(404,dsh 内置"获取可用模型"对本网关永远失效)。
|
|
29
|
+
- `/agenttool/v1/*` 与 `/v3/config` 要求 **CLI 形态 UA**(`CodeBuddyCode/1.0` 被拒 12403)。
|
|
30
|
+
- pi-ai 会把推理模型的 system prompt 序列化成 `role:"developer"`——桥/翻译网关出站一律重写 developer→system。
|
|
31
|
+
- **目录有 ≠ /v2 可路由**:恒 11102 的条目不铺静态清单,`providers/codebuddy/catalog.js` 的 `UNROUTABLE_MODELS` 是唯一真源。
|
|
32
|
+
- 严格上游(Qoder dmodel/kmodel/mmodel)把 `content:null`/缺键消息当"不存在"——出站必须做可见性归一 + tool 配对体检(踩坑 #39/#41)。
|
|
33
|
+
|
|
34
|
+
## 踩坑速查(全本含代价与修复:docs/pitfalls.md;动手前先 grep 对应编号)
|
|
35
|
+
|
|
36
|
+
`#1` bundle入口insert · `#2` 双settings实例 · `#3` 客户端模块加载 · `#4` hooks规则 · `#5` 合成事件 · `#6` 模型同步纯净态 · `#7` 错误带原因 · `#8` 增删插件重启
|
|
37
|
+
`#9` 禁import宿主包 · `#10` 断言响应完成 · `#11` 启动环境快照 · `#12` schema白名单 · `#13` tools最终schema · `#14` 工厂传函数 · `#15` UI原生化 · `#16` puppeteer三坑
|
|
38
|
+
`#17` listen挂error · `#18` 槽位keyed化 · `#19` dump真实字节 · `#20` 实例状态非全局 · `#21` 坏块毒化全层 · `#22` 逆向非协议真相 · `#23` 无存量token · `#24` harness懒启动
|
|
39
|
+
`#25` 路由存在性管理 · `#26` 响应整体脱敏 · `#27` useRef同值去重 · `#28` 禁逐分片拼接 · `#29` socket必消费 · `#30` 0.1.5三变更 · `#31` 原子写落盘 · `#32` 去重失败销账
|
|
40
|
+
`#33` 异步生命周期 · `#34` 0.1.6拆槽 · `#35` curl中文GBK · `#36` wasm头是Map · `#37` 未知key改派 · `#38` fixture禁绝对日期 · `#39` 孤儿tool消息 · `#40` 计数器分辨率
|
|
41
|
+
`#41` content:null不可见 · `#42` 能力声明≠线值 · `#43` 0.1.7配置换代 · `#44` 写入即重载 · `#45` 写完≠生效完 · `#46` 可信按键 · `#47` 主题属性驱动 · `#48` fullPage空操作
|
|
42
|
+
`#49` 模块改名静默跳过 · `#50` 预言机覆盖率 · `#51` 剪贴板权限 · `#52` 本文无锁增长 · `#53` checkbox命中面走label
|
|
43
|
+
`#54` 桌面组合不合并bundle的codebuddy块·接入手放完整块
|
|
44
|
+
`#55` cordis传apply的entry恒含schema默认·显式判定须比对默认
|
|
45
|
+
`#56` 壳转发剥Origin头·curl模拟≠壳内真实请求·同源门须留无-Origin语义
|
|
46
|
+
`#57` wasm retptr-first栈槽错一位静默全废·兜底分支须断言被走过
|
|
47
|
+
`#58` wasm堆对象不受GC管·__wbg_*_free不调即无界泄漏·free须幂等
|
|
48
|
+
`#59` 并发闸release只在finally一处·分支顺手释放即击穿上限
|
|
49
|
+
`#60` SSE重试判据是用户可见内容·writeHead与角色chunk分步
|
|
50
|
+
`#61` 回环网关须Host+Origin双门·无-Origin放行(壳转发/非浏览器)
|
|
51
|
+
`#62` 令牌刷新读-改-写与logout竞态·存储代际守卫落盘前校验
|
|
52
|
+
`#63` 同类防护跨子面成对审计·单侧覆盖断点即缺陷
|
|
53
|
+
`#64` 目录有声明≠宿主有入口·档位表须投影进镜像且路由声明compat
|
|
54
|
+
`#65` 确定性安全门按通用Web建模误拦回环网关·git门须留豁免通道
|
|
55
|
+
`#66` 宿主reasoningEfforts键固定枚举·越界键静默整块拒收·写后读回/lastError
|
|
56
|
+
`#67` 环境探测路径勿写死单平台形态·发现空结果须配原因出口
|
|
57
|
+
`#68` 同端点不同function面各有出站方言·历史tool_calls键按面实测·proto错念proto字段名
|
|
58
|
+
|
|
59
|
+
## 常用命令(probe/联调/取证脚本的用法注释见 wiki/09-run-and-test.md)
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
dsh web
|
|
63
|
+
node scripts/verify-models.mjs --list
|
|
64
|
+
node scripts/verify-bridge.mjs
|
|
65
|
+
node scripts/verify-rotation.mjs
|
|
66
|
+
node scripts/verify-core-generic.mjs
|
|
67
|
+
node scripts/verify-providers.mjs
|
|
68
|
+
node scripts/verify-trae-provider.mjs
|
|
69
|
+
node scripts/verify-qoder-provider.mjs
|
|
70
|
+
node scripts/verify-host-config.mjs
|
|
71
|
+
node scripts/verify-desktop-acceptance.mjs
|
|
72
|
+
node scripts/verify-agents-md.mjs
|
|
73
|
+
npm run verify
|
|
74
|
+
CODEBUDDY_BRIDGE_LOG=/tmp/bridge.jsonl dsh web
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 浏览器回归
|
|
78
|
+
|
|
79
|
+
全套知识(套件清单与断言基线 / 区块驱动口径 / 实例与 token / 零真实写入纪律)在项目 skill `.agents/skills/dsh-ui-regression/`——跑 UI 回归前先加载它。
|
|
80
|
+
|
|
81
|
+
## 文档地图(改哪类代码,先读哪份)
|
|
82
|
+
|
|
83
|
+
- 改 CodeBuddy 出站行为(headers/UA/错误码/目录/额度/缓存/审核)→ docs/rules/ 对应专题:routing、ua-validation、quota-signals、prompt-cache、content-moderation、dev-role-boundary、oauth-handshake;错误码表在 providers/codebuddy/errors.js
|
|
84
|
+
- 接入新的 key 型 OpenAI 兼容上游 → docs/rules/extra-providers.md
|
|
85
|
+
- 改 Trae 通道 → docs/reverse/traework-cn.md + trae-cloud-api.md(目录提取另见 trae-model-catalog.md);错误码表在 providers/trae/errors.js
|
|
86
|
+
- 改 Qoder 通道 → docs/goals/qoder-cn-provider-design.md + wiki/10-provider-qoder.md
|
|
87
|
+
- 排查"缓存命中率低/重复提问" → docs/diagnosis-cache-quota.md + docs/diagnosis-cache-decline.md;"trae 3003" → docs/diagnosis-trae-3003.md;Qoder "provider_error / Flash 不可用" → docs/diagnosis-qoder-flash.md
|
|
88
|
+
- 跑命令/测试/浏览器回归 → wiki/09-run-and-test.md + skill `.agents/skills/dsh-ui-regression/`
|
|
89
|
+
- 要原始实测证据 → docs/probes/(历次探测 JSON/JSONL 落盘)
|
|
90
|
+
- 要同类实现对比与改进清单(CodeBuddy/Trae/Qoder 生态调研,2026-10-05 快照)→ docs/research-eco-comparison.md
|
|
91
|
+
- 要架构与模块叙述 → wiki/01-architecture.md ~ 10-provider-qoder.md
|
|
92
|
+
- 要某版本改了什么 → CHANGELOG.md;要课题交接状态 → docs/rules/STATE.md
|
|
93
|
+
|
|
94
|
+
## 维护纪律
|
|
95
|
+
|
|
96
|
+
- 本文是薄索引,不铺长段落:新实测事实 → docs/rules/gateway-facts.md(或对应专题);新坑 → docs/pitfalls.md 取新编号 + 本文踩坑速查加一个 `#N` 标签;命令/probe 用法 → wiki/09-run-and-test.md;浏览器回归知识 → `.agents/skills/dsh-ui-regression/`。
|
|
97
|
+
- 体积与口径由断言锁维护:本地 `node scripts/verify-agents-md.mjs`(行数/字节/引用路径/踩坑编号连续性),CI 双闸门(`agents-md lint` + `alint`,见 .github/workflows/node.js.yml)。**不写会增长的硬编码口径**(如"踩坑 #1–#48")。
|
|
98
|
+
- 版本历史只写 CHANGELOG.md,不在本文铺章节。
|
|
99
|
+
- Git 纪律:长期分支只有 `main`;每次 `chore(release)` 当场打 annotated tag `vX.Y.Z` 并随分支推送;**永不 rebase 已推送历史**(CHANGELOG 引用提交 SHA)。细则见 docs/rules/STATE.md「分支拓扑」。
|