dsh-plugin, 在DSH中使用华为codearts的积分,token,
36.7/100
综合分
6
GitHub 星标
1,448
npm 周下载
—/5
用户评分
数据截至 2026/10/28 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-codeartsnpm 源 · dsh-codearts 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-codearts @ 1.2.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/27 23:43:10
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 41 处,展示前 29 条)
- 发起网络请求lib/client/index.js:567
const res = await fetch("/api/codearts/dock", { headers: { Accept: "application/json" } }); - 发起网络请求lib/client/index.js:589
const res = await fetch("/api/codearts/dock", { - 发起网络请求lib/client/index.js:620
const data = await (await fetch("/api/codearts/claim", { - 发起网络请求lib/client/index.js:652
const data = await (await fetch("/api/codearts/status", { headers: { Accept: "application/json" } })).json(); - 发起网络请求lib/client/index.js:664
const data = await (await fetch("/api/codearts/enabled-models", { headers: { Accept: "application/json" } })).json(); - 发起网络请求lib/client/index.js:689
const res = await fetch("/api/codearts/token", { - 读取本地文件lib/bin.mjs:277
const exists = existsSync(accountsPath); - 读取本地文件lib/bin.mjs:306
process.stdout.write(` file exists : ${out.authFileExists ? "yes" : "no"}${exists ? ` (${statSync(accountsPath).size} bytes)` : ""}\n`); - 发起网络请求lib/usage-05PgtUIP.mjs:153
const res = await fetch(`${htu}`, { - 发起网络请求lib/usage-05PgtUIP.mjs:178
const res = await fetch(`${htu}`, { - 读取本地文件lib/usage-05PgtUIP.mjs:312
const raw = await readFile(path, "utf8"); - 写入本地文件lib/usage-05PgtUIP.mjs:325
await mkdir(dirname(path), { recursive: true }); - 写入本地文件lib/usage-05PgtUIP.mjs:329
await writeFile(tmp, body, { mode: 384 }); - 写入本地文件lib/usage-05PgtUIP.mjs:330
await chmod(tmp, 384).catch(() => {}); - 写入本地文件lib/usage-05PgtUIP.mjs:331
await rename(tmp, path); - 删除本地文件lib/usage-05PgtUIP.mjs:333
await unlink(tmp).catch(() => {}); - 写入本地文件lib/usage-05PgtUIP.mjs:334
await writeFile(path, body, { mode: 384 }); - 删除本地文件lib/usage-05PgtUIP.mjs:342
await unlink(path); - 读取本地文件lib/usage-05PgtUIP.mjs:606
const parsed = JSON.parse(await readFile(path, "utf8")); - 发起网络请求lib/usage-05PgtUIP.mjs:1657
return fetch(req.url, { - 读取本地文件lib/usage-05PgtUIP.mjs:2647
async readFile() { - 读取本地文件lib/usage-05PgtUIP.mjs:2648
if (this.loaded || this.path === void 0 || !existsSync(this.path)) { - 读取本地文件lib/usage-05PgtUIP.mjs:2653
const raw = await readFile(this.path, "utf8"); - 发起网络请求lib/openai-completions-Cn5ZQvOO.mjs:2564
const response = await this.fetch(this.tokenExchangeUrl, { - 发起网络请求lib/openai-completions-Cn5ZQvOO.mjs:2564
const response = await this.fetch(this.tokenExchangeUrl, { - 发起网络请求lib/openai-completions-Cn5ZQvOO.mjs:3269
fetch() { - 发起网络请求lib/openai-completions-Cn5ZQvOO.mjs:3269
fetch() { - 发起网络请求lib/openai-completions-Cn5ZQvOO.mjs:3622
if ("Response" in fetch) FetchResponse = fetch.Response; - 发起网络请求lib/openai-completions-Cn5ZQvOO.mjs:3624
const response = await fetch("data:,");
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-attachment@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session@deepseek-ai/dsh-client-ui-settings-plugins@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-credentials给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
最近更新
在 GitHub 查看全部 →v1.2.12026-10-28
· [1.2.1]
· 2026-10-28
· 新增
· 底部那一行改成段式,与 dsh-codebuddy-cli 同构:积分 24,091 · Provider CodeArts ·
Model DeepSeek-V4.1-Flash-1017 · x0.18。积分挪到最前,倍率单独成段(不再粘在模型名
尾巴上),段与段用 · 连接,和邻居那一行的观感一致。只有积分那一段是开积分弹层
的按钮(原来的设定不变):模型、倍率、排队都是纯文本,点它们不会弹面板。
/api/codearts/status 与 /api/codearts/models 的模型条目因此多了一个 ratio 字段
(x0.18;福利恒为 x0.00;上游没给倍率的模型缺席),免得客户端去拆显示名。
· 对话底部那行先说自己是谁了:中间是 Provider CodeArts · Model · 。
这一段不受「显示剩余积分 / 显示上游排队位置」两个开关影响,始终出现;
开关只管积分与排队两段。
· 这一行以前是靠邻居插件(dsh-codebuddy-cli 的 dock 会替任何 provider 画
Provider · Model )顺带显示的,但它在 codearts 下只给模型 id、
给不出倍率,而且受那个插件自己的「切换到其它 provider 时也显示这一行」开关控制
(关了整行就消失)。现在身份行由本插件自己负责,不依赖别人。
· 选中我们的模型时,那一行里别人的条目会暂时消失:我们改不了别人的注册,但
conversation.composer.dock 是 list 槽位、每条注册都被宿主平铺成同一个
[data-composer-dock] 行里的兄弟节点,所以我们这条会认出新出现的别人、给它们
打上 data-codearts-dock-suppressed 属性,由我们注入的一条 CSS 隐藏。切换 provider
或卸载时逐个摘掉属性,别人的行立刻回来。不碰宿主自己的轮次/token 统计 pill
(data-composer-stat)和上下文占用格子。规则与边界在 src/client/dock-suppress.ts,
单测见 test/dock-suppress.spec.ts。
· 模型勾选区标出「识图」:/api/codearts/enabled-models 的 choices 多了
supportsImages,卡片给支持图片输入的模型挂一个「识图」Tag。声明了 reasoning 之外
的模型能力本来就该在勾选时看得见,不然只有发了图才知道谁不吃图。
· 新增 DeepSeek-V4.1-Flash-1017 种子条目(1,048,576 context)。
· 修复
· deepseek-v4.1-flash 带图必报 The request model is not multimodal(issue #4):
这个裸别名在上游不算多模态,种子目录却标了 supportsImages: true,于是带图的请求在
出网前就被当成合法、到了上游才被拒。现在它标 false;多模态的是带日期的 -1017。
上游发现接口对 -1017 的 supports_images 也给 false,但 issue 报告者实测带图可用,
按实测为准标 true。
· 模型目录为空时会干等一小时:启动/热重载后第一次模型发现如果正好撞上上游抖动,
目录会一直空着,期间每条消息都死在 pi-ai 的 has no configured model,而重试要等整
整 CATALOG_REFRESH_MS(1 小时)。现在发现循环自我重排:目录为空时 60 秒后重试,
有货后回到每小时。
· 开发
· scripts/deploy.mjs 不再改写 profile 的依赖版本:它以前把仓库 version 无条件写成
profile dependencies 的值,本地产物先于 npm 发布升版本时,profile 就会依赖一个
registry 里不存在的 specifier,宿主重载后整个 bundle 掉线(表现是模型选择器里
provider 消失,而 HTTP 路由还活着)。现在只在缺这一条时才补,版本不一致时打一行提示。
仍建议先发布、再升仓库版本。
v1.2.02026-10-27
· 1.2.0 - 2026-10-27
· 新增
· 对话底部那行积分可以点开看明细了:以前只有一行聚合数字(多账号把所有号加在
一起),看不出是哪个号还剩多少。现在那一行是个按钮,点开是逐号明细——账号名、各自
剩余积分、哪个号有积分将在本周期结束时作废、最近刷新时间,右上角一个「刷新积分」。
它是唯一绕开 60 秒积分缓存的出口(GET /api/codearts/status?force=1):点了必定打
上游,不会拿旧数字糊弄。弹层用 fixed 定位挂在按钮上方(放不下就翻到下方),不撑宽
宿主那条共享的 composer dock 行。
· 两个显隐开关:设置卡片新增「显示」页,分别管输入框下方那一行的剩余积分与
上游排队位置(showCreditDock / showQueueDock)。默认都开,老配置行为不变。
开关值随 /status 一起下发,底部条每 60 秒读一次,所以关掉最多要等一分钟才见效——
这句写在设置页上,不让人自己猜。
v1.1.32026-10-26
· [1.1.3] - 2026-10-26
· 修复
· 与 billion-context 同用时账号被永久禁用,报「当前没有可用账号」(issue #1):
billion-context 拦下 SDK-HMAC-SHA256 签名请求做压缩、找不到重签凭据时在本地回 403
(signed_request_requires_resign),插件把它当凭据失效,账号被禁用且没有任何恢复
路径。现在按 body 里的拒签标记识别这类本地拦截:不再禁用账号,直接回 400(宿主不会
再拿它重试 5 次),报错里给出 resign.passthrough 的配置方法。带标记的 401/403 之外
的真凭据失效行为不变。
· 重新登录救不回被禁用的账号:disabled 以前只能靠重启清掉,pool.sync() 对同一
userId 保留运行时状态。现在登录成功(OAuth 与手工贴 token 两条路)会调用池的
revive(),清掉该账号的禁用/冷却/错误计数。
· 「没有可用账号」不再一概而论:一个账号都选不出来时,报错分清原因——全禁用(401,
附各号最后错误并提示重新登录)、全在冷却(429,附剩余秒数)、本地并发槽位全满
(429,说明每账号 2 个在飞上限)。
· 已登录却报「积分不可用:statistics HTTP 0 Failed to parse URL from [object
Request]」(模型清单同时变空,issue #2):出网原本是 fetch(new Request(url, ...), {signal})
——邻居插件(如 IP 池出口路由)会把 globalThis.fetch 换成它自己那份 undici 的
fetch,而 globalThis.Request 还是另一份实例。undici 用 instanceof 认自己的
Request,认不出就当 URL 字符串处理,于是每条请求在出网之前抛错(HTTP 0)。现在
Request 只当签名的载体,出网统一走 dispatch():交「字符串 URL + 已展开的普通
头 + 原字节请求体」,7 处调用点一并收口。
· 选中 CodeArts 模型后每条消息都「本轮运行失败:Cannot read properties of undefined
(reading 'length')」(issue #2):@earendil-works/pi-ai 过去只写在 peerDependencies
(>=0.84.2 = 1.3.0」,不再让每条消息各自崩在一个看不懂的
TypeError 上。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成DSH CodeArts Connect
把华为云 CodeArts 接入 DeepSeek Harness(DSH),在 DSH 对话窗口里直接使用 CodeArts 提供的模型(GLM-5.2、盘古、Qwen、DeepSeek 等)。
功能
- 账号登录:在设置卡片里点一次「使用华为云账号登录」,浏览器完成授权后凭证自动落盘,无需手工填写密钥。
- 自动续期:凭证过期前自动续期;续期失败会在卡片上提示重新登录,不会静默使用失效凭证。
- 多账号轮转:可以存多个账号(在卡片上再登录一次即可添加)。某个账号的会话槽位被占时,请求会自动换到下一个账号,不必干等 —— 这是「停止生成后重新提问要等半分钟」的正解。
- 可选模型:可在设置卡片里勾选要出现在模型选择器中的模型(配置项 enabledModels)。未勾选的模型只是不再被推荐,已经选定它的会话仍可继续使用;不勾选等同于提供全部模型。
- 模型清单自动发现:启动后与每小时各拉一次账号真实可用的模型(内置 / 限时福利 / agent-center 三路合并),失败时退回内置种子清单。
- 本机用量:卡片与 dsh-codearts usage 展示今日/累计的请求数与输入输出 token(按模型、按账号),以及每个账号的会话槽位占用(占用时正好解释了「为什么刚才要等半分钟」)。
展开完整文档(README 剩余 1 节)
DSH CodeArts Connect 把华为云 CodeArts 接入 DeepSeek Harness(DSH),在 DSH 对话窗口里直接使用 CodeArts 提供的模型(GLM-5.2、盘古、Qwen、DeepSeek 等)。 功能 - 账号登录:在设置卡片里点一次「使用华为云账号登录」,浏览器完成授权后凭证自动落盘,无需手工填写密钥。 - 自动续期:凭证过期前自动续期;续期失败会在卡片上提示重新登录,不会静默使用失效凭证。 - 多账号轮转:可以存多个账号(在卡片上再登录一次即可添加)。某个账号的会话槽位被占时,请求会自动换到下一个账号,不必干等 —— 这是「停止生成后重新提问要等半分钟」的正解。 - 可选模型:可在设置卡片里勾选要出现在模型选择器中的模型(配置项 enabledModels)。未勾选的模型只是不再被推荐,已经选定它的会话仍可继续使用;不勾选等同于提供全部模型。 - 模型清单自动发现:启动后与每小时各拉一次账号真实可用的模型(内置 / 限时福利 / agent-center 三路合并),失败时退回内置种子清单。 - 本机用量:卡片与 dsh-codearts usage 展示今日/累计的请求数与输入输出 token(按模型、按账号),以及每个账号的会话槽位占用(占用时正好解释了「为什么刚才要等半分钟」)。CodeArts 没有额度接口,这里只统计本机经插件发出的请求,官方额度明细见卡片上的链接。 - 图片输入:支持视觉的模型可直接在对话里粘贴或拖入图片。 - 降级路径:也可以在卡片里直接粘贴安全令牌,适用于脚本或排查场景。 - 命令行:status / models / usage / identity / doctor / logout 六个子命令,便于在无图形界面时检查登录状态、发现模型与查用量。 安装 详见 INSTALL.md。核心是把 package.json + lib/ + cordis.patch.yml 放进 profiles/<profile>/node_modules/dsh-codearts/,并在 profile 的 package.json、 node_modules/.package-map.json、node_modules/.modules.yaml 登记。 从本仓库构建产物 pnpm install && pnpm run build node scripts/deploy.mjs [profileDir] # profileDir 默认 <用户目录>/.dsh/profiles/desktop 改代码调试时不必反复重启:见 DEV.md(宿主侧走 dsh-hmr 模块热重载,客户端卡片走 dsh-client-hmr 自动替换进浏览器)。 使用 1. 打开 DSH 设置 → CodeArts 卡片 → 「使用华为云账号登录」。 2. 浏览器打开授权页 → 登录华为云账号 → 自动跳回本机回调,凭证写入 $DSH_HOME/.codearts-auth.json。 3. 新建对话,provider 选择 codearts,再选一个模型即可开始。 命令行 dsh plugin --profile <profile> exec dsh-codearts status [--json] # 登录状态与种子模型清单 dsh plugin --profile <profile> exec dsh-codearts models [--json] # 向上游发现当前账号的真实模型 dsh plugin --profile <profile> exec dsh-codearts usage [--json] # 本机用量账本(非账号额度) dsh plugin --profile <profile> exec dsh-codearts identity [--fix] # 查/回填账号稳定身份,合并重复条目 dsh plugin --profile <profile> exec dsh-codearts doctor # 不涉及密钥的环境诊断 dsh plugin --profile <profile> exec dsh-codearts logout # 清除本插件保存的凭证 models 是排查「模型选择器里怎么没有某个模型」的第一手段:它打印上游真实返回的清单(内置 / 限时福利 / agent-center 三路合并),而不是插件里那份手维护的种子清单。 usage 读的是插件自己的账本($DSH_HOME/.codearts-usage.json,按天保留 60 天)—— 不是账号额度:CodeArts 没有额度接口,官方明细在 codearts.huaweicloud.com/portal/settings/personal-usage,卡片上也有这个链接。 identity 打印每个已存账号在上游的稳定 user_id(同一个 id 出现两次就是重复条目);加 --fix 会把它们合并到稳定键上,顺带补上 user_name / domain_id。 doctor 只输出路径、状态与版本,不会打印任何令牌内容,输出可以直接贴进问题反馈;logout 只删除本插件自己的凭证副本,不影响账号本身。 架构 沿用 dsh-codebuddy-cli 的结构:本地 loopback shim + pi-ai adapter。 DSH 对话窗口 │ OpenAI /chat/completions 格式, Bearer=<本进程随机密钥> ▼ dsh-codearts shim (127.0.0.1:随机端口) │ 注入 x-auth-token: <华为云 STS security_token> │ + 华为云 AK/SK SDK-HMAC-SHA256 签名 ▼ CodeArts /api/v2/chat/completions shim 只监听回环地址,并校验 Host、Origin 与本进程随机密钥,其他本机进程无法冒用。 已知限制 - 凭证有效期约 2 小时,过期前会自动续期(刷新令牌与 DPoP 密钥绑定);续期失败会提示重新登录。 - 上游对每个账号的并发会话数有硬性限制(3 个),每个会话占用约 1 分钟才释放,而且中途停止生成并不减免这个占用:即使只跑了不到一秒就停,同样会占满一个名额。这是上游行为,客户端无法提前释放。在卡片上添加第二个账号即可化解 —— 插件会把请求自动轮转到还有余量的账号上。 - 只有一个账号时,刚停止过一次生成就立刻重新提问,仍可能要等约半分钟。插件会自动排队重试,不需要手动重发,但等待期间界面上不会有新内容。 - 上游的登录响应不返回用户标识(实测 user_id / user_name 都是空串),所以插件在登录完成后会再问一次 /snap-manager/v1/current/user 拿稳定的 user_id 作为账号的自然键:同一个账号重新登录会更新原条目,不再变成新账号。这一步失败(网络/接口变动)时退回旧行为 —— 用 DPoP 公钥当键,此时同一账号重新登录会被当成新账号,旧条目会因凭据失效而自行停用。历史遗留的重复条目可以用 dsh-codearts identity --fix 合并到稳定键上(先不带 --fix 跑一次是只读的)。 - 某个模型没出现时,用 dsh-codearts models 看上游到底返回了什么;上游标称的参数不一定可用:福利网关把 max_tokens 标成 393216,而聊天端点实测超过 65536 就报 InferHub.001001005.400。插件按实测上限下发请求(免费 DeepSeek 系列 65536、GLM-5.2 已实测可到 131072),没实测过的模型退回 65536 保守值。上下文长度用发现值,它只影响 DSH 的上下文计量与截断余量。 - 用量账本只统计本机经插件发出的请求,不等于账号总额度;额度/积分以卡片上的账号余额为准,官方明细走卡片里的链接。账本按天保留 60 天,换机器/清 $DSH_HOME 即丢失。 - 文档:README 与 INSTALL 有英文版(README.en.md / INSTALL.en.md),DEV.md(热重载开发循环)目前只有中文。 更新日志 各版本的改动见 CHANGELOG.md。 免责声明 - 本项目仅供个人学习和研究使用,仅驱动使用者自己的账号在本机调用,请勿用于商业用途或超出个人合理使用的场景。 - 使用者需遵守华为云及 CodeArts 的服务条款;因使用本项目产生的任何后果(包括但不限于账号被限制、服务中断),由使用者自行承担。 - 本项目作者不对任何因使用或滥用本项目产生的直接或间接损失负责。 - 本项目与华为、DeepSeek 均无关联,未获其授权或认可;文中出现的名称仅用于描述兼容关系,其商标权利归各自所有。 致谢 - dsh-codebuddy-cli(MIT)— 本插件的 DSH 插件结构、loopback shim 与 provider 注册方式均以其为参照。 许可证 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
elegant01/dsh-codearts
dsh-plugin, 在DSH中使用华为codearts的积分,token,
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7