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

AI 原生编辑器 642463401/DSHIDE

DeepSeek Harness
64246340174 天前有提交已提供中文文档扫描:高危

在 VS Code 里直接调用 dsh 智能体写代码

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

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

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 tools/fixtures/panel-test-plugin/package.json。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 642463401/DSHIDE
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · dev
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 74 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/27) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 tools/fixtures/panel-test-plugin/package.json

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包fleetide-panel-test-plugin(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 23:39:01

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 90 处,展示前 88 条)
  • 执行外部命令固定命令
    vscode/build/copilot-migrate-pr.ts:139
    return execFileSync('gh', args, { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 });
  • 执行外部命令固定命令
    vscode/build/copilot-migrate-pr.ts:143
    return execFileSync('git', args, {
  • 读取本地文件
    vscode/build/copilot-migrate-pr.ts:360
    return fs.existsSync(path.join(repoRoot, '.git', 'rebase-apply'));
  • 写入本地文件
    vscode/build/copilot-migrate-pr.ts:438
    fs.writeFileSync(tmpPatch, rewrittenPatch);
  • 删除本地文件
    vscode/build/copilot-migrate-pr.ts:450
    fs.unlinkSync(tmpPatch);
  • 执行外部命令固定命令
    vscode/build/gulpfile.cli.ts:47
    const r = cp.spawnSync('cargo', ['--version']);
  • 执行外部命令固定命令
    vscode/build/gulpfile.cli.ts:58
    const proc = cp.spawn('cargo', ['--color', 'always', 'build'], {
  • 读取本地文件
    vscode/build/gulpfile.cli.ts:61
    env: existsSync(platformOpensslDir) ? { OPENSSL_DIR: platformOpensslDir, ...process.env } : process.env
  • 写入本地文件
    vscode/build/gulpfile.cli.ts:79
    mkdirSync(dir, { recursive: true });
  • 执行外部命令来自配置/变量
    vscode/build/gulpfile.cli.ts:81
    cp.spawnSync(
  • 删除本地文件递归
    vscode/build/gulpfile.cli.ts:93
    rmSync(dir, { recursive: true, force: true });
  • 读取本地文件
    vscode/build/gulpfile.cli.ts:102
    } else if (err.toString().includes('Could not find directory of OpenSSL installation') && !existsSync(platformOpensslDir)) {
  • 删除本地文件
    vscode/build/gulpfile.extensions.ts:178
    fs.rmSync(tsBuildInfoFile, { force: true });
  • 读取本地文件
    vscode/build/gulpfile.reh.ts:144
    const npmrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.npmrc'), 'utf8');
  • 读取本地文件
    vscode/build/gulpfile.reh.ts:151
    const nodeJsChecksums = fs.readFileSync(path.join(REPO_ROOT, 'build', 'checksums', 'nodejs.txt'), 'utf8');
  • 执行外部命令运行时拼接
    vscode/build/gulpfile.reh.ts:164
    const contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, enc
  • 读取本地文件
    vscode/build/gulpfile.reh.ts:255
    if (!fs.existsSync(nodePath)) {
  • 读取本地文件
    vscode/build/gulpfile.reh.ts:377
    const manifest = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, extensionPath)).toString());
  • 读取本地文件
    vscode/build/gulpfile.reh.ts:381
    const builtInExtensions: Array<{ name: string; platforms?: string[]; clientOnly?: boolean }> = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'produc
  • 执行外部命令固定命令
    vscode/build/gulpfile.reh.ts:538
    const proc = cp.spawn('signtool.exe', ['verify', '/pa', filePath]);
  • 执行外部命令固定命令
    vscode/build/gulpfile.reh.ts:552
    const proc = cp.spawn('signtool.exe', ['remove', '/s', filePath]);
  • 读取本地文件
    vscode/build/gulpfile.scan.ts:117
    readdirSync(destinationExe).forEach(file => {
  • 读取本地文件
    vscode/build/gulpfile.scan.ts:124
    if (!existsSync(path.join(destinationPdb, pdb))) {
  • 读取本地文件
    vscode/build/gulpfile.vscode.ts:47
    const packageLock = JSON.parse(fs.readFileSync(path.join(root, 'package-lock.json'), 'utf8')) as {
  • 读取本地文件
    vscode/build/gulpfile.vscode.ts:244
    const contents = fs.readFileSync(filename);
  • 执行外部命令固定命令
    vscode/build/gulpfile.vscode.ts:608
    const proc = cp.spawn('signtool.exe', ['verify', '/pa', filePath]);
  • 执行外部命令固定命令
    vscode/build/gulpfile.vscode.ts:622
    const proc = cp.spawn('signtool.exe', ['remove', '/s', filePath]);
  • 读取本地文件
    vscode/build/gulpfile.vscode.ts:693
    if (fs.existsSync(builtInCopilotExtensionDir)) {
  • 执行外部命令来自配置/变量
    vscode/build/gulpfile.vscode.web.ts:48
    const proc = cp.spawn(process.execPath, args, {
  • 执行外部命令来自配置/变量
    vscode/build/gulpfile.vscode.win32.ts:50
    cp.spawn(innoSetupPath, args, { stdio: ['ignore', 'inherit', 'inherit'] })
  • 写入本地文件
    vscode/build/gulpfile.vscode.win32.ts:72
    fs.mkdirSync(outputPath, { recursive: true });
  • 读取本地文件
    vscode/build/gulpfile.vscode.win32.ts:81
    const productJson = JSON.parse(fs.readFileSync(originalProductJsonPath, 'utf8'));
  • 写入本地文件
    vscode/build/gulpfile.vscode.win32.ts:126
    fs.writeFileSync(productJsonPath, JSON.stringify(productJson, undefined, '\t'));
  • 发起网络请求
    vscode/build/lib/builtInExtensionsCG.ts:40
    const response = await fetch(`${repositoryContentBaseUrl}/${fileName}`);
  • 读取本地文件
    vscode/build/lib/copilot.ts:258
    if (!fs.existsSync(copilotSdkBase)) {
  • 读取本地文件
    vscode/build/lib/copilot.ts:267
    if (!fs.existsSync(ripgrepSource)) {
  • 读取本地文件
    vscode/build/lib/copilot.ts:271
    diagnostics = fs.existsSync(binDir)
  • 读取本地文件
    vscode/build/lib/copilot.ts:272
    ? `Available bin entries: ${JSON.stringify(fs.readdirSync(binDir))}`
  • 写入本地文件
    vscode/build/lib/copilot.ts:284
    fs.mkdirSync(ripgrepDest, { recursive: true });
  • 写入本地文件
    vscode/build/lib/copilot.ts:287
    fs.writeFileSync(shimMarkerPath, 'Shims created successfully');
  • 删除本地文件
    vscode/build/lib/copilot.ts:318
    fs.rmSync(path.join(sdkPrebuildsTarget, 'mediaremote-adapter'), { recursive: true, force: true });
  • 删除本地文件
    vscode/build/lib/copilot.ts:368
    return { dir: stagedPackageDir, cleanup: () => fs.rmSync(staged, { recursive: true, force: true }) };
  • 删除本地文件
    vscode/build/lib/copilot.ts:370
    fs.rmSync(staged, { recursive: true, force: true });
  • 读取本地文件
    vscode/build/lib/copilot.ts:386
    lock = JSON.parse(fs.readFileSync(lockfilePath, 'utf8'));
  • 读取本地文件
    vscode/build/lib/copilot.ts:414
    const version = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json'), 'utf8')).version;
  • 删除本地文件
    vscode/build/lib/copilot.ts:426
    fs.rmSync(target, { recursive: true, force: true });
  • 写入本地文件
    vscode/build/lib/copilot.ts:427
    fs.mkdirSync(path.dirname(target), { recursive: true });
  • 删除本地文件
    vscode/build/lib/copilot.ts:440
    fs.rmSync(path.join(prebuildsDir, platformArch), { recursive: true, force: true });
  • 执行外部命令固定命令
    vscode/build/lib/date.ts:19
    return execSync('git log -1 --format=%cI HEAD', { cwd: root, encoding: 'utf8' }).trim();
  • 执行外部命令来自配置/变量
    vscode/build/lib/esbuild.ts:21
    const proc = cp.spawn(process.execPath, args, {
  • 执行外部命令来自配置/变量
    vscode/build/lib/esbuild.ts:52
    const proc = cp.spawn(process.execPath, args, {
  • 发起网络请求
    vscode/build/lib/fetch.ts:55
    const response = await fetch(url, {
  • 读取密钥环境变量
    vscode/build/lib/fetch.ts:111
    if (process.env.GITHUB_TOKEN) {
  • 读取密钥环境变量
    vscode/build/lib/fetch.ts:112
    ghApiHeaders.Authorization = 'Basic ' + Buffer.from(process.env.GITHUB_TOKEN).toString('base64');
  • 读取本地文件
    vscode/build/lib/npmPackage.ts:30
    if (fs.existsSync(packageDir)) {
  • 写入本地文件
    vscode/build/lib/npmPackage.ts:46
    fs.mkdirSync(packageDir, { recursive: true });
  • 删除本地文件
    vscode/build/lib/npmPackage.ts:50
    fs.rmSync(packageDir, { recursive: true, force: true });
  • 删除本地文件
    vscode/build/lib/npmPackage.ts:53
    fs.rmSync(tempDir, { recursive: true, force: true });
  • 删除本地文件
    vscode/build/lib/npmPackage.ts:71
    fs.rmSync(targetDir, { recursive: true, force: true });
  • 写入本地文件
    vscode/build/lib/npmPackage.ts:72
    fs.mkdirSync(targetDir, { recursive: true });
  • 删除本地文件
    vscode/build/lib/npmPackage.ts:76
    fs.rmSync(targetDir, { recursive: true, force: true });
  • 删除本地文件
    vscode/build/lib/npmPackage.ts:79
    fs.rmSync(tempDir, { recursive: true, force: true });
  • 执行外部命令来自配置/变量
    vscode/build/lib/npmPackage.ts:85
    execFileSync(process.platform === 'win32' ? 'npm.cmd' : 'npm', ['pack', `${packageName}@${version}`, '--pack-destination', tempDir, '--silent'], { std
  • 读取本地文件
    vscode/build/lib/npmPackage.ts:87
    const tarball = fs.readdirSync(tempDir).find(name => name.endsWith('.tgz'));
  • 读取本地文件
    vscode/build/lib/npmPackage.ts:97
    return JSON.parse(fs.readFileSync(lockFilePath, 'utf8'));
  • 读取本地文件
    vscode/build/lib/npmPackage.ts:114
    const actual = createHash('sha512').update(fs.readFileSync(tarballPath)).digest('base64');
  • 执行外部命令来自配置/变量
    vscode/build/lib/preLaunch.ts:14
    const child = spawn(command, args, { cwd: rootDir, stdio: 'inherit', env: process.env, shell: process.platform === 'win32' });
  • 读取本地文件
    vscode/build/lib/propertyInitOrderChecker.ts:48
    const configHostParser: ts.ParseConfigHost = { fileExists: fs.existsSync, readDirectory: ts.sys.readDirectory, readFile: file => fs.readFileSync(file,
  • 读取本地文件
    vscode/build/lib/screenshotBlocksCi.ts:76
    const manifest: Manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
  • 读取本地文件
    vscode/build/lib/screenshotBlocksCi.ts:80
    if (fs.existsSync(markdownPath)) {
  • 读取本地文件
    vscode/build/lib/screenshotBlocksCi.ts:81
    committed = fs.readFileSync(markdownPath, 'utf8');
  • 发起网络请求
    vscode/build/lib/screenshotDiffReport.ts:159
    https.get(url, (res) => {
  • 读取本地文件
    vscode/build/lib/screenshotDiffReport.ts:503
    if (!fs.existsSync(localManifestPath)) {
  • 读取本地文件
    vscode/build/lib/screenshotDiffReport.ts:508
    const baseManifestPath = baseManifestPathArg && fs.existsSync(baseManifestPathArg) ? baseManifestPathArg : null;
  • 读取本地文件
    vscode/build/lib/screenshotDiffReport.ts:514
    const local = JSON.parse(fs.readFileSync(localManifestPath, 'utf8')) as LocalManifest;
  • 读取本地文件
    vscode/build/lib/screenshotDiffReport.ts:516
    ? JSON.parse(fs.readFileSync(baseManifestPath, 'utf8')) as BaseCommitResponse
  • 写入本地文件
    vscode/build/lib/screenshotDiffReport.ts:530
    fs.mkdirSync(tmpDir, { recursive: true });
  • 写入本地文件
    vscode/build/lib/screenshotDiffReport.ts:531
    fs.writeFileSync(
  • 执行外部命令来自配置/变量
    vscode/build/lib/tsgo.ts:43
    const child = cp.spawn(process.execPath, args, {
  • 读取本地文件
    vscode/extensions/esbuild-common.mts:116
    const watchPathStat = await stat(watchPath);
  • 读取本地文件
    vscode/extensions/postinstall.mjs:17
    for (const name of fs.readdirSync(root)) {
  • 删除本地文件
    vscode/extensions/postinstall.mjs:21
    fs.rmSync(filePath, { recursive: true });
  • 读取本地文件
    vscode/extensions/postinstall.mjs:39
    for (const name of fs.readdirSync(libRoot)) {
  • 删除本地文件
    vscode/extensions/postinstall.mjs:50
    fs.unlinkSync(path.join(libRoot, name));
  • 读取本地文件
    vscode/src/bootstrap-node.ts:239
    const isPortable = !('target' in product) && fs.existsSync(portableDataPath);
  • 读取本地文件
    vscode/src/bootstrap-node.ts:241
    const isTempPortable = isPortable && fs.existsSync(portableTempPath);
  • 写入本地文件
    vscode/src/server-main.ts:193
    fs.mkdirSync(logsPath, { recursive: true });
  • 写入本地文件
    vscode/src/server-main.ts:219
    fs.appendFileSync(diagnosticsFile, `${line}\n`);
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

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

功能亮点

  • VSCode分支
  • 进程内智能体内核
  • 调用智能体写代码

DSH 生态 IDE——VS Code 分支,把 dsh 作为进程内智能体内核

README

由 DeepSeek 最新模型翻译生成
DSHIDE DSHIDE 是构建在 Visual Studio Code 与 dsh(DeepSeek 开源 Agent 框架)之上的 AI 原生 IDE。编辑器层是 VS Code,全部原生功能完整保留(编辑、调试、Git、终端、扩展生态);AI 层是 dsh,以进程内内核的形式直接跑在 IDE 里。 与其它 AI IDE 的不同 - dsh 即 IDE 内核。 无伴生进程、无 localhost 服务。dsh 的整套 Agent 树(agent preset、沙箱、审批栈、存储、插件系统)在扩展宿主内以 fleetide profile 启动(位于 ~/.dsh),与 dsh CLI 完全同款协议栈,零翻译层。 - 原生 Chat,无自绘面板。 聊天界面就是 VS Code 原生 Chat 面板,dsh 是默认参与者;审批与提问走原生弹窗(fail-closed,关窗即拒绝)。 - 四模式 + 思考长度 + 多模型/多供应商,聊天里直接切。
展开完整文档(README 剩余 1 节)
DSHIDE

DSHIDE 是构建在 Visual Studio Code 与 dsh(DeepSeek 开源 Agent 框架)之上的 AI 原生 IDE。编辑器层是 VS Code,全部原生功能完整保留(编辑、调试、Git、终端、扩展生态);AI 层是 dsh,以进程内内核的形式直接跑在 IDE 里。

与其它 AI IDE 的不同

- dsh 即 IDE 内核。 无伴生进程、无 localhost 服务。dsh 的整套 Agent 树(agent preset、沙箱、审批栈、存储、插件系统)在扩展宿主内以 fleetide profile 启动(位于 ~/.dsh),与 dsh CLI 完全同款协议栈,零翻译层。
- 原生 Chat,无自绘面板。 聊天界面就是 VS Code 原生 Chat 面板,dsh 是默认参与者;审批与提问走原生弹窗(fail-closed,关窗即拒绝)。
- 四模式 + 思考长度 + 多模型/多供应商,聊天里直接切。 /mode 切换 standard / code(PTC)/ minimal / cordis 四种 agent preset;/think 切换思考长度(off / low / high / max);/model 切换模型供应方与型号(如 deepseek-v4-flash / deepseek-v4-pro);/provider 新增供应方(36 家内置路由一键启用,或自定义 OpenAI 兼容网关)。
- 插件管理在 IDE 内。 dsh 插件面板为 fleetide profile 安装/移除插件,转发到 dsh CLI 执行。
- Copilot 已彻底移除。 唯一的 AI 入口是 dsh,唯一的认证是 DeepSeek API Key(/auth),由 dsh 统一存放在 ~/.dsh/.credentials.yaml——IDE 自身从不落盘密钥。
- 与浏览器端 dsh 共享同一 home。 本机若同时使用 dsh 的 web UI(3080 端口),两者共享 ~/.dsh 与 API Key;IDE 会话独立存放于 ~/.dsh/sessions-fleetide,互不干扰。

快速上手(Windows)

1. 前置:Node.js ≥ 22.19(推荐 24 LTS)+ dsh CLI:
npm i -g @deepseek-ai/dsh

2. 用安装包安装 DSHIDE(user / system 安装器),或直接运行解压版构建目录里的 DSH Code.exe。
3. 在 Chat 面板输入 /auth,粘贴 DeepSeek API Key(写入 ~/.dsh/.credentials.yaml)。
4. 直接在 Chat 里提问即可,无需 @ 前缀。

| 命令 | 作用 |
| /auth | 配置 / 更换 DeepSeek API Key |
| /mode | 选择 agent preset:标准(standard)/ PTC(code)/ 极简(minimal)/ 创造(cordis),下一次新会话起生效、会话开始后锁定 |
| /think | 切换思考长度:off / low / high / max,当前会话立即生效 |
| /model | 切换模型供应方/型号(如 deepseek-v4-flash / deepseek-v4-pro),当前会话立即生效并成为全局默认 |
| /provider | 新增模型供应方:启用内置路由(Anthropic / OpenAI / OpenRouter…)或自定义 OpenAI 兼容网关 |

自动补全:输入 / 即弹出五条命令的补全列表;在 /mode 、/think 或 /model 后(命令后跟一个空格)会自动弹出参数列表,继续输入可过滤(支持输入中文名过滤,如输入「标」即可匹配「标准模式」),回车即补全。/model 的参数来自 dsh 实时模型目录。无需记忆完整拼写。

完整手册与故障排查见 docs/MANUAL.zh.md。

从源码构建

DSHIDE 是 VS Code 的 fork,自带内置扩展 extensions/fleetide-dsh。

rem 一次性环境(独立 Node 24 + 国内镜像 + signtool PATH) tools\build-env.cmd rem 全量 win32-x64 构建(输出:VSCode-win32-x64\) tools\build-ide.cmd rem 安装器链
npm run gulp vscode-win32-x64-inno-updater vscode-win32-x64-user-setup vscode-win32-x64-system-setup

注意:
- Electron 二进制经 ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ 下载(已内置在 build-env.cmd)。
- 扩展用 esbuild 打包:cd extensions\fleetide-dsh && node --experimental-transform-types esbuild.mts。
- 对上游源码的改动记录在 patches/ 目录,便于未来 rebase。

架构

DSHIDE(桌面应用)
├─ 工作台(编辑器 / 调试 / 终端) ← VS Code,原封不动 ├─ 扩展宿主 │ └─ fleetide-dsh(内置扩展) │ ├─ Chat participant:/auth /mode /think /model /provider、流式回合 │ ├─ dsh 内核:进程内 boot,fleetide profile(sessions-fleetide) │ │ └─ agent preset · 沙箱 · 审批栈 · 插件 · 存储 │ ├─ 语言模型桥(VS Code LM API ⇄ dsh 模型路由) │ └─ 插件管理面板 └─ ~/.dsh(与本机 dsh CLI / web UI 共享)

与 dsh 的关系

DSHIDE 不属于 dsh 仓库,它是 dsh 的消费方。dsh 代码在运行时从 $DSH_HOME/profiles/node_modules 加载(由 dsh CLI 物化),因此本仓库不含任何第三方 Agent 代码,dsh 升级与 IDE 发版互不耦合。

许可与署名

- 本仓库 fork 自 microsoft/vscode,遵循 MIT 协议。产品品牌(名称、图标、安装器、遥测标识)已全部更换;本项目与 Microsoft 无隶属关系,亦未经其背书。
- GitHub Copilot 已从本 fork 移除,DSHIDE 中没有任何 Copilot / GitHub 认证代码在运行。
- dsh 及其各包版权归其所有者,不随本仓库分发。
- fleetide-dsh 扩展与全部 fork 改动与基座同为 MIT 协议。

常见问题

- 需要先跑一个 dsh 服务吗? 不需要。内核进程内启动;本机的 dsh CLI / web UI(3080)可并行运行,互不影响。
- Key 存在哪里? ~/.dsh/.credentials.yaml,由 dsh 管理。DSHIDE 自身不写、不持久化密钥。
- 改名后快捷方式失效? 主程序由 FleetIDE.exe 更名为 DSH Code.exe,请重建快捷方式或重新安装。
预览分享卡片长什么样 ↓642463401/DSHIDE
分享 · DeepSeek Harness Hub
642463401/DSHIDE

在 VS Code 里直接调用 dsh 智能体写代码

这是你的仓库?认领条目

回到顶部