[Bug]: One-click install of DeepSeek Harness (dsh) in Docker fails with npm ETARGET

Ouverte Adaptée aux débutants
#475 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
75/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
docker, go, nodejs
Domaine
cli, devops

Piste de recherche

Commence dans internal/runtime/cli_ondemand.go : l'entrée dsh à la ligne 43 définit Package sur @deepseek-ai/dsh, et les lignes 147 à 153 construisent la commande npm install sans dist-tag. Décide si la spécification doit recevoir @latest à cet endroit, ou si le Dockerfile doit préinstaller le paquet comme c'est le cas pour Codex et CodeBuddy. C'est terminé lorsque l'installation de dsh réussit dans le conteneur loopforge-platform avec npm 10.9.9 et qu'aucune erreur ETARGET n'apparaît.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Summary

Clicking one-click install for DeepSeek Harness (dsh) in the Docker deployment (loopforge-platform:local built from Dockerfile based on node:22-bookworm) fails with HTTP 502 and npm error ETARGET: No matching version found for @deepseek-ai/dsh@*..

Note for maintainers: When evaluating whether to fix this issue, please re-test and reproduce this bug in a Docker container environment first to confirm the behavior on your side.

Environment
  • Commit: b751e09 (v0.3.6-29-gb751e09)
  • Deployment: Docker Compose (./start.sh dev, base image node:22-bookworm)
  • Container npm version: 10.9.9 (contrast with macOS host npm 11.13.0, where installing @deepseek-ai/dsh without @latest succeeds)
  • Registry dist-tags for @deepseek-ai/dsh:
    { alpha: '0.2.2-alpha.3', latest: '0.2.2-rc.1', next: '0.2.2-rc.3' }
    
Reproduction Steps
  1. Start LoopForge via Docker (./start.sh dev).
  2. Open the Studio Assistant UI, select DeepSeek Harness (dsh), and trigger one-click install (POST /api/assistant/cli-install).
  3. Observe the UI error and check docker logs loopforge-platform-1.
Actual Behavior

POST /api/assistant/cli-install returns 502:

2026/11/13 08:37:18 assistant CLI install dsh: 安装 DeepSeek Harness 失败:npm error code ETARGET npm error notarget No matching version found for @deepseek-ai/dsh@*.
2026/11/13 08:37:18 [HTTP] POST /api/assistant/cli-install -> 502 (204 bytes, 1.435s)
Root Cause Analysis
  1. Dockerfile preinstalls @openai/codex and @tencent-ai/codebuddy-code, but does not preinstall @deepseek-ai/dsh, so dsh relies on runtime on-demand installation via internal/runtime/cli_ondemand.go.
  2. In internal/runtime/cli_ondemand.go:
    • Line 43 defines "dsh": {Engine: "dsh", Binary: "dsh", Package: "@deepseek-ai/dsh", RelaxEngines: true}.
    • Lines 147–153 run npm install ... @deepseek-ai/dsh without an explicit @latest dist-tag.
  3. Because @deepseek-ai/dsh currently only has prerelease versions (its latest tag points to 0.2.2-rc.1), npm 10.9.9 inside node:22-bookworm resolves an untagged package spec as @deepseek-ai/dsh@* and rejects prerelease versions with ETARGET.
  4. Verified inside the same loopforge-platform-1 container that appending @latest (@deepseek-ai/dsh@latest) with --dry-run resolves add @deepseek-ai/dsh 0.2.2-rc.1 (added 724 packages, exit code 0).
Possible Fix Directions
  • Append @latest to Package for "dsh" (or when no explicit version/tag is specified in installNPMCLI) in internal/runtime/cli_ondemand.go, or
  • Preinstall @deepseek-ai/dsh@latest in Dockerfile (similar to Codex / CodeBuddy) or upgrade npm in the base image.

中文说明
问题概述

在 Docker 部署环境(基于 node:22-bookworm 构建的 loopforge-platform:local)中,在界面点击一键安装 DeepSeek Harness (dsh) 会直接失败,返回 HTTP 502,底层 npm 报错 ETARGET: No matching version found for @deepseek-ai/dsh@*.。

评估说明:在评估是否需要修复该问题时,希望能够重新在 Docker 环境中复测并复现一次这个 Bug,以确认实际表现。

复现环境
  • 代码版本:b751e09(v0.3.6-29-gb751e09)
  • 部署方式:Docker Compose(./start.sh dev,基础镜像 node:22-bookworm)
  • 容器内 npm 版本:10.9.9(对比 macOS 宿主机 npm 11.13.0 不带 @latest 可正常安装)
  • @deepseek-ai/dsh 的 dist-tags:
    { alpha: '0.2.2-alpha.3', latest: '0.2.2-rc.1', next: '0.2.2-rc.3' }
    
复现步骤
  1. 通过 Docker 启动 LoopForge(./start.sh dev)。
  2. 打开 Studio 助手界面,选择 DeepSeek Harness (dsh) 并触发一键安装(POST /api/assistant/cli-install)。
  3. 观察界面报错并查看 docker logs loopforge-platform-1。
实际表现

POST /api/assistant/cli-install 返回 502:

2026/11/13 08:37:18 assistant CLI install dsh: 安装 DeepSeek Harness 失败:npm error code ETARGET npm error notarget No matching version found for @deepseek-ai/dsh@*.
2026/11/13 08:37:18 [HTTP] POST /api/assistant/cli-install -> 502 (204 bytes, 1.435s)
根因分析
  1. Dockerfile 仅预装了 @openai/codex 和 @tencent-ai/codebuddy-code,未预装 @deepseek-ai/dsh,因此 dsh 依赖 internal/runtime/cli_ondemand.go 在运行时按需安装。
  2. internal/runtime/cli_ondemand.go 中:
    • 第 43 行定义 "dsh": {Engine: "dsh", Binary: "dsh", Package: "@deepseek-ai/dsh", RelaxEngines: true}。
    • 第 147–153 行直接执行 npm install ... @deepseek-ai/dsh,未显式带 @latest 标签。
  3. 由于 @deepseek-ai/dsh 当前只发布了预发布版本(latest 指向 0.2.2-rc.1),node:22-bookworm 自带的 npm 10.9.9 会把未指定标签的包名按 @deepseek-ai/dsh@* 解析,从而拒绝预发布版本并报 ETARGET。
  4. 已在同一个 loopforge-platform-1 容器内使用 --dry-run 实测验证:改传 @deepseek-ai/dsh@latest 后可正常解析出 add @deepseek-ai/dsh 0.2.2-rc.1(added 724 packages,退出码 0)。
修复方向参考
  • 在 internal/runtime/cli_ondemand.go 中为 dsh(或未显式指定版本的包)补全 @latest;或者
  • 在 Dockerfile 中预装 @deepseek-ai/dsh@latest(与 Codex / CodeBuddy 一致),或升级基础镜像中的 npm 版本。
Langage dominant
Go
Étoiles
141
Forks
28
Merge moyen
1 j 15 h
PR mergées (30 j)
113

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de Tencent/LoopForge

Toutes les issues de Tencent/LoopForge

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.