🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

JoyCode 代理 2151649856sjs-create/joycode-proxy

DeepSeek Harness
2151649856sjs-create15 天前有提交已提供中文文档扫描:含敏感能力

把京东云 JoyCoder 积分接入为智能体模型后端

30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 2151649856sjs-create/joycode-proxy
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · model
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 16 处,展示前 15 条)
  • 读取密钥环境变量
    server.mjs:25
    const API_KEY = process.env.JOYCODE_PROXY_API_KEY || '';
  • 读取密钥环境变量
    server.mjs:30
    const PT_KEY = process.env.JOYCODE_PT_KEY || '';
  • 读取密钥环境变量
    server.mjs:49
    process.env.JOYCODE_SIGN_KEY || '0691a3f0b37b4a85aeb63ad0fc7db3ed';
  • 发起网络请求
    server.mjs:185
    const resp = await fetch(url, { method: 'POST', headers, body: JSON.stringify(body), signal });
  • 读取本地文件
    install-dsh-plugin.mjs:19
    const pluginPkg = JSON.parse(readFileSync(join(pluginDir, 'package.json'), 'utf8'));
  • 读取本地文件
    install-dsh-plugin.mjs:31
    if (existsSync(target)) {
  • 读取本地文件
    install-dsh-plugin.mjs:33
    const real = statSync(target).isDirectory() ? target : null;
  • 读取本地文件
    install-dsh-plugin.mjs:37
    const realPath = existsSync(target) ? realResolve(target) : null;
  • 读取本地文件
    install-dsh-plugin.mjs:47
    if (!existsSync(nodeModules)) {
  • 读取本地文件
    install-dsh-plugin.mjs:76
    if (existsSync(patchFile)) content = readFileSync(patchFile, 'utf8');
  • 写入本地文件
    install-dsh-plugin.mjs:83
    writeFileSync(patchFile, content, { encoding: 'utf8' });
  • 读取本地文件
    setup.mjs:40
    const dbPath = candidates.find((p) => existsSync(p));
  • 读取本地文件
    setup.mjs:79
    if (existsSync(envPath)) {
  • 读取本地文件
    setup.mjs:80
    try { existing = parseEnv(readFileSync(envPath, 'utf8')); } catch {}
  • 写入本地文件
    setup.mjs:86
    writeFileSync(envPath, body, 'utf8');
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

兼容 OpenAI 的本地代理,用来暴露 JoyCode(京东云 JoyCoder)额度,另附一个 DSH 模型服务商插件

README

由 DeepSeek 最新模型翻译生成
joycode-proxy 📘 英文文档:README.en.md 把 JoyCode(京东云 JoyCoder 积分) 反代成一个 OpenAI 兼容的 HTTP 服务,再通过一个 DSH provider 插件把它的积分池接进 DSH,当作智能体的模型后端。整体思路与 qoder-proxy / dsh-llm-qoder 完全一致,只是后端换成了 JoyCode 的「color gateway」协议。 架构 DSH agent └─ ctx.llm.registerAdapter(["joycode"], adapter) ← dsh-llm-joycode 插件 └─ PiAiAdapter → openAICompletionsApi(baseUrl=本地 shim) └─ POST http://127.0.0.1:8318/v1/chat/completions └─ joycode-proxy (server.mjs) └─ POST https://api-ai.jd.com/api?
展开完整文档(README 剩余 1 节)
joycode-proxy

📘 英文文档:README.en.md

把 JoyCode(京东云 JoyCoder 积分) 反代成一个 OpenAI 兼容的 HTTP 服务,再通过一个 DSH provider 插件把它的积分池接进 DSH,当作智能体的模型后端。整体思路与 qoder-proxy / dsh-llm-qoder 完全一致,只是后端换成了 JoyCode 的「color gateway」协议。

架构

DSH agent
└─ ctx.llm.registerAdapter(["joycode"], adapter) ← dsh-llm-joycode 插件 └─ PiAiAdapter → openAICompletionsApi(baseUrl=本地 shim) └─ POST http://127.0.0.1:8318/v1/chat/completions └─ joycode-proxy (server.mjs) └─ POST https://api-ai.jd.com/api?appid=joycode_ide&functionId=chat_completions&t=...&sign=... (HMAC-SHA256 签名 + ptKey 头) └─ JoyCode 后端(同一账号的积分计费)

端点

| 方法 | 路径 | 说明 |
| GET | /v1/models | 返回 JoyCode 后端模型列表 |
| POST | /v1/chat/completions | OpenAI 兼容,支持 stream: true/false |
| GET | /health | 探活 + 配置自检 |

为什么用「color gateway」而不是逆向

JoyCode IDE 的请求签名与鉴权都在它自带的 extension.js 里明文实现,核心只有三样东西:

1. 网关地址:https://api-ai.jd.com/api(登录态里的 colorBaseUrl)。
2. 鉴权头:ptKey(登录态里的 ptKey,即京东云账号票据)+ 可选 loginType/tenant。
3. 签名:对 {appid, functionId, t} 排序后取非空值 & 拼接,用 HMAC-SHA256 + IDE 内置签名密钥算 hex,作为 sign 查询参数。

因此不需要逆向任何加密/WASM,直接把这段签名逻辑复刻成 server.mjs 里的 signQuery() / gatewayUrl() 即可。

关于那个签名密钥:它是 IDE 客户端内置的公开协议常量,随 IDE 分发给每个用户,不是账号凭据——单独拿到它无法发起任何有效请求。真正的凭据是 ptKey,只从环境变量读、永不入库。若上游轮换密钥,重新从 extension.js 提取,或用 JOYCODE_SIGN_KEY 覆盖。

配置(环境变量)

| 变量 | 必需 | 默认 | 说明 |
| JOYCODE_PT_KEY | ✅ | 空 | 账号票据(登录态 jdhLoginInfo.ptKey) |
| JOYCODE_TENANT | ⭕ | 空 | 租户 ID(登录态 tenant) |
| JOYCODE_COLOR_BASE_URL | ⭕ | https://api-ai.jd.com | 网关 origin(登录态 colorBaseUrl) |
| JOYCODE_MASTER_BASE_URL | ⭕ | 空 | 直连 origin(登录态 masterBaseUrl),网关不可用时兜底 |
| JOYCODE_LOGIN_TYPE | ⭕ | PIN_JD_CLOUD | 登录类型 |
| JOYCODE_SIGN_KEY | ⭕ | 内置常量 | 覆盖签名密钥(上游轮换时用) |
| JOYCODE_PROXY_PORT | ⭕ | 8318 | 本地监听端口 |
| JOYCODE_PROXY_HOST | ⭕ | 127.0.0.1 | 监听地址 |
| JOYCODE_PROXY_MODEL | ⭕ | JoyAI-Code-1.6 | 缺省模型 |
| JOYCODE_PROXY_API_KEY | ⭕ | 空 | 设置后要求 Authorization: Bearer <key> |

怎么拿到自己的凭据:JoyCode IDE 的登录态存在一个 SQLite 库里(Windows %APPDATA%\JoyCode\User\globalStorage\state.vscdb; macOS ~/Library/Application Support/JoyCode/User/globalStorage/state.vscdb; Linux ~/.config/JoyCode/User/globalStorage/state.vscdb)。
读 ItemTable 表里 key 为 JoyCoder.IDE 的那一行,其 JSON 的 joyCoderUser 里就有 ptKey / colorBaseUrl / masterBaseUrl / tenant。
把这些填进 .env(见 .env.example)。.env 已在 .gitignore 里,绝不要提交。

不想手动抠?跑 npm run setup,它会自动从本机 IDE 登录态读出凭据写进 .env。

模型列表(后端实时返回)

- JoyAI-Code-1.6
- GLM-5.3-agent(GLM-5.3)
- Kimi-K2.6-agent(Kimi-K2.6,多模态)
- MiniMax-M3-agent(MiniMax-M3,多模态)
- Doubao-Seed-2.0-pro-agent(Doubao-Seed-2.0-pro,多模态)

启动

$env:JOYCODE_PT_KEY = "<ptKey>"
node server.mjs

验证:

bash
curl.exe -s http://127.0.0.1:8318/v1/models
curl.exe -s http://127.0.0.1:8318/v1/chat/completions
-H "Content-Type: application/json"
-d ']}'

快速开始 bash
git clone <this-repo> && cd joycode-proxy
npm run setup # 自动从本机 JoyCode IDE 登录态读出 ptKey / tenant 写进 .env
npm start

没装 JoyCode IDE?手动也行: bash
cp .env.example .env # 然后填入你自己的 ptKey / tenant
npm start

验证: bash
curl -s http://127.0.0.1:8318/v1/models
curl -s http://127.0.0.1:8318/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"JoyAI-Code-1.6","messages":[{"role":"user","content":"reply exactly PONG"}]}'

零运行时依赖:只用 Node 内置的 node:http / node:crypto,npm install 不是必需的。

接 DSH

一条命令即可完成挂载(自动建 junction + 追加 patch 条目,幂等): bash
npm run install:dsh # 等价于 node install-dsh-plugin.mjs

可选:指定 profile / DSH_HOME

DSH_PROFILE=web DSH_HOME=/path/to/.dsh node install-dsh-plugin.mjs

手动方式:

1. 把 dsh-plugin/ 挂进你的 DSH profile(例如用 junction / symlink 放到 <DSH_HOME>/profiles/web/node_modules/dsh-llm-joycode,或直接 dsh plugin add 该目录)。
2. 在 <DSH_HOME>/profiles/web/cordis.patch.yml 末尾追加:

yaml
- insert:
- id: llm-joycode
name: dsh-llm-joycode

3. 重启 DSH,模型选择器里应出现 joycode provider(5 个模型)。

已知限制

- 无状态:把 OpenAI messages 拍平成单个 prompt,不保留跨请求会话(和 qoder-proxy 一致)。
- 不支持 function calling / tools:JoyCode 网关的 chat completions 走纯文本路径。
- 单账号串行:凭据来自一个登录态,多并发请求共享同一账号的积分。
- 签名密钥可能轮换:密钥是 IDE 内置常量,上游更换后需重新提取,或用 JOYCODE_SIGN_KEY 覆盖。

免责声明

本项目仅用于在你自己的账号下、于本机把已有的 JoyCode 积分接到其它客户端,便于个人开发使用。请自行确认你的用法符合服务商条款。作者不对账号封禁、额度损失或任何间接损害负责。

License

MIT
预览分享卡片长什么样 ↓2151649856sjs-create/joycode-proxy
分享 · DeepSeek Harness Hub
2151649856sjs-create/joycode-proxy

把京东云 JoyCoder 积分接入为智能体模型后端

回到顶部