DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

minglo /

minglo/dsh-plugin-llm-codebuddy

Verified

Tencent CodeBuddy LLM adapter for DeepSeek Harness (dsh)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@591fa721

dsh-plugin-llm-codebuddy

CI npm license

腾讯 CodeBuddy 的 DeepSeek Harness(dsh)适配插件。

它把 CodeBuddy 的模型目录与对话端点接入 harness,注册为名为 codebuddy 的 LLM 路由,让你的 CodeBuddy 账号额度直接用于 dsh 里的对话。插件是只读的: 读取凭据与目录、流式对话、按需刷新令牌,不会自行创建或删除凭据。

装上之后你会多得到这些:

  • 模型选择器上直接看价格与促销——模型名后面挂促销徽章,最右边是积分倍率。
  • 账号额度可视化——侧栏进度条、输入框旁的胶囊、插件详情页的同心圆环,三处同源。
  • 用 CodeBuddy 账号接管网页搜索与抓取——一个开关,不抢别人的位置。
  • 限流与偶发失败有人兜底——429 会告诉你重置时刻,瞬时失败自动退避重试。

安装

dsh plugin 会把参数转交给该 profile 目录下的包管理器,因此安装就是一次普通的包安装:

dsh plugin --profile web add dsh-plugin-llm-codebuddy

装好后重启 dsh web(或让 profile 重新加载)生效。

登录

CodeBuddy 使用浏览器签发的令牌认证。安装后在 设置 → 插件 → CodeBuddy 里点「登录」,浏览器完成授权即可;令牌写入 harness 的凭据存储,不作为配置项,也不会被本插件另存一份。

  • 未登录时模型列表为空,实际发起请求会以「缺少凭据」失败。
  • 访问令牌临近过期会自动刷新;刷新失败不会删除凭据,只有刷新令牌本身也过期 才会提示重新登录。

配置

配置项 默认值 说明
baseURL https://copilot.tencent.com/v2 对话接口地址。
defaultContextWindow 128000 目录未标注容量的模型所用上下文窗口。
defaultMaxTokens 8192 目录未标注容量的模型所用最大输出。
streamIdleTimeoutMs 300000 对话流的空闲超时。

模型目录

模型来自 CodeBuddy 的目录接口,会随服务端编辑自动更新,无需重启。只在目录里 标注了容量(上下文与最大输出均为正)的模型才会出现在选择器中;未标注容量的 条目不出现在列表里,但仍可用模型 id 直接指定,此时按上面的默认值保守处理。

已知问题:部分模型的自动压缩不会触发

CodeBuddy 目录里标注的「最大输出」有时比模型本身的上下文窗口还大:

模型 上下文窗口 目录标注的最大输出
minimax-m3 512,000 524,288
kimi-k3-1 1,000,000 1,048,576

harness 判断「什么时候该自动压缩会话」时,会先把这段输出预留从窗口里减掉。这两个 模型减出来是负数,于是自动压缩永远不触发,上下文一路增长,最后由网关报上下文 超限。

已经验证过:这不是网关的限制(发同样大的 max_tokens 网关照收,而且输出会精确 停在那个数),是客户端按目录声明值算出来的结果。把输出预留压到窗口以内,这两个 模型的判断就恢复正常,其余模型不受影响。

本插件目前没有修这个(仍然直接使用目录声明的值)。如果你常用上面这两个模型、 又遇到了上下文超限,先换一个模型试试。

模型选择器上的价格与促销

CodeBuddy 的模型目录里带着促销与订阅信息,插件把它们直接摆到模型选择器里,省得 每次去官方 IDE 里对一遍:

Hy3 [限时免费] x0
  • 徽章:模型名后面是当前生效的促销(限时免费、夜间折扣、错峰使用……)与订阅 权益(订阅优先)。徽章颜色由 CodeBuddy 服务端给出。
  • 倍率:最右边的 x0.29 是这个模型的积分倍率,倍率越低越便宜(x0 就是 免费)。促销生效时显示的是折后的倍率——限时免费期间是 x0。
  • 悬停看详情:基础倍率 → 当前生效倍率、促销说明、促销的时间窗、模型简介。

促销按 CodeBuddy 给的时间窗自动出现和消失(比如「每晚 23:00–次日 8:00」那种夜间 折扣,白天就没有)。插件每分钟向 CodeBuddy 对一次目录,所以时间窗翻转后最多一分 钟内生效。

徽章只属于 CodeBuddy 提供的模型:用别的 provider 时,模型名照常显示,不会有徽章 或倍率。

用量额度

插件提供三个入口查看账号额度,数据同源,因此任何两处显示的数字都不会互相矛盾。

侧栏指示器(默认关闭)

侧栏底部用两条进度条回答「还剩多少、还能自由花多少」:

  • 第一条「本月剩余」:灰轨是总剩余,高亮段是本月内到期的那部分,条长就是 本月剩余占总剩余的比例——一眼看出「总剩看着不少,本月能自由花的只是一小段」。 右侧数字是本月消耗率,消耗率越高颜色在同一灰蓝色系内越深。
  • 第二条「最近剩余」:把未来到期的额度按 ≤1 天 / 1–2 天 / 2–7 天分成三段, 每段宽度按该档额度分配,段内实心部分是该档的已用比例。没有任何短期到期额度时 整条隐藏。

悬停可看到本月已用/额度、本月剩余、总剩余,以及每个到期段的精确数值。

默认关闭是因为侧栏底部是常驻区域,加进度条会改变默认界面。

输入框额度胶囊(默认开启)

输入框工具行、模型选择器左侧显示 CodeBuddy · 本月 xx%,点击打开完整明细。 只在当前选中 CodeBuddy 模型时出现——额度是 CodeBuddy 账号的属性,用别的 provider 时它既无意义也不该占位。

同心圆环

插件详情页与胶囊弹窗展示同一套同心圆环,中心与三环由内向外分别是:

位置 内容
中心 总剩余积分
内环 已用积分(占总额度的比例)
中环 本月到期(占本月额度的比例)
外环 未来 7 天,按天分段

三个环是同一种读法:空轨表示未使用,彩色弧表示已使用,弧长就是已用的比例。 分段环也不例外——每一天未用的部分与另外两环同一个底色,只有已用的部分才是 当天自己的颜色,所以七个环段彼此可分辨,一眼能看出「哪几天有额度、各用了多少」。

按天分段的宽度按当天发放的额度分配,段与段之间留有空隙。当天没有发放额度 是特殊情况:它不画彩色弧,只留一小段很淡的占位,既让七个位置保持稳定(便于记住 「第几天」),又不会让人误以为那天有额度可花;图例里也会显式写「—」而不是 0 / 0。

打开或数据刷新时,三个环会从零顺时针生长出来,并逐环错开;如果你在系统里设置了 「减少动态效果」,动画会被跳过,静态图形照常显示。

每日签到

圆心是签到按钮:点它就给 CodeBuddy 账号签到,领当日积分(Buddy 加油站)。

  • 未签到时圆心是干净的,鼠标移上去会浮起一圈淡底,提示「这里可点」。
  • 签到成功后圆心铺上一层灰绿,中心数字换成深墨色——铺色的过程与三环的生长 动画同一个节奏(同一条曲线、同一时长),读起来是一次动作。
  • 已签到时圆心再点不动:按钮是真的 disabled,键盘也到不了。
  • 签到失败才会弹一条提示(成功不打扰,因为「颜色变了」本身就是结果);提示里 会带上服务端给的原因,例如「活动未开启」。

签到成功会顺带刷新一次额度读数——签到加了积分,数字得跟着变。

签到只在你点的时候发生,插件不会定时替你签。

读数时效

额度读数由宿主向 CodeBuddy 拉取,每 60 秒刷新一次。

同账号的重复读取由宿主缓存吸收:多个入口、多次重开面板或刷新页面都不会各自再打 一次 CodeBuddy,只有缓存过期后才在后台刷新一次。

用 CodeBuddy 接管网页搜索与抓取

开启后,harness 内置的 web_search 与 web_fetch 会改走 CodeBuddy 网关, 复用同一个账号,不需要额外凭据。

开关在 设置 → 插件 → CodeBuddy → 「使用 CodeBuddy 搜索」,且只在已登录时 出现(未登录时插件根本不注册相关后端,开关无从生效)。

行为 说明
默认值 关闭。安装插件不会静默抢走搜索位。
生效时机 即时,无需重启。
范围 一个开关同时控制搜索与抓取。
退出登录 自动释放,不影响其他搜索提供方。
重新登录 开关仍为开时自动恢复接管。

开关旁有一枚生效态徽标,用来区分「开关想怎样」和「实际怎样」:

徽标 含义
CodeBuddy 搜索生效中(绿) 搜索确实走 CodeBuddy 网关。
未接管搜索(灰) 你主动关掉了,或未登录。
接管未生效(琥珀) 开关已开且已登录,但接管没成立(宿主未提供相关能力等)。

没有这枚徽标时,「开关开着却没生效」与「开关是关的」看起来一模一样。接管通过 运行时选择实现,关闭时会还原成原来那个提供方,因此可以和其他搜索插件共存。

遇到频率限制(429)时的行为

当账号额度被限流,CodeBuddy 返回 429,并在提示里给出重置时刻(例如 「将在 2026-09-27 17:30:18 UTC+8 重置」)。插件会读出这个时刻,接下来怎么走 由一个开关决定:

「遇到 429 等待重置」开关 行为
关(默认) 429 按普通失败处理:快速重试几次(约 5 次、15 秒内)后抛出错误,报文里的重置时刻随错误消息原样保留,可据此切换模型继续。
开 等到服务给出的重置时刻再自动重试;但最多只等 5 小时。
  • 5 小时是硬上限,与开关无关:重置时刻更远时,插件也不会挂上这个等待——一个 回合为一个可能长到隔夜的重置默默挂住,不如立刻失败让人接手。
  • 等待路径(开关开且 ≤5 小时)在对话里有一条可展开的倒计时提示,说明第几次 重试与失败原因,随时可中断。
  • 报文里读不出重置时刻时(服务抽风,少见):与开关无关,按普通失败重试几次后 失败;宿主日志会留一份报文原文供核对。
  • 提示里的重置时间会原样保留,不会因为错误分类而丢失(分类特意不用 QUOTA—— 界面会把它换成一句通用文案,把那句话吃掉)。

开关在 设置 → 插件 → CodeBuddy →「遇到 429 等待重置」,即时生效,无需重启。

与 CodeBuddy 网关的两处兼容

CodeBuddy 网关对请求的写法有自己的规矩,harness 默认发出来的样子过不去。插件在 请求出门前做了两处调整——不调整的话,每一轮对话都会被网关当场拒收。

去掉系统提示开头的身份声明

harness 给每轮对话加的系统提示,开头固定有一句「You are an AI agent powered by DeepSeek Harness…」。CodeBuddy 网关按渠道校验调用方,以这句开头的请求一律 拒收:

HTTP 400 · code=11128 · Illegal API invocation from an unapproved channel

界面上表现为一句「Request blocked. Please send it again」。这看着像登录出了问题, 其实不是:同一份凭据、同一组请求头,只要把这句去掉就立刻正常返回。

网关只认开头那一句(出现在别处不拦),也不区分大小写。所以插件只在开头摘掉 它,系统提示的其余部分一个字都不动;整条系统提示只剩这一句时干脆整条不发 (空提示对网关没有意义,还可能被当成非法请求)。

把你这一轮说的话放在最后

harness 在你的消息后面还会附上运行时上下文(AGENTS.md、运行时快照、技能清单、 当前时间),而 CodeBuddy 把一轮里最后一条用户消息当成你这次的提问。不重排的话, 网关读到的是那些附带内容,不是你问的话。

所以插件把每一轮里你的话挪到该轮用户消息的末尾。每一轮都这么排(包括已经结束的 轮次),这样一轮对话无论出现在哪都长得一样,请求前缀保持稳定,网关那边的缓存照旧 命中。

尚未支持

  • 命令行登录命令。
  • 目录与用户自定义模型条目的合并。

许可证

MIT,见 LICENSE。

—/ 5

No ratings yet

Verified DSH bundle

Commit 591fa721d84c

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout