DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-app-packager

App Packager

AppPackager for DeepSeek Harness · 使用 HBuilderX 一键配置好 iOS / Android / HarmonyOS 环境,生成安装包并一键上传

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-app-packager@0.7.2
README兼容性版本

兼容性与来源证明

App Packager 以 dsh-app-packager 发布,当前版本为 0.7.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/11/4

版本

0.7.3stable
2026/10/30
0.7.2stable
2026/10/29
0.7.1stable
2026/10/29
查看其余 12 个版本收起版本
0.7.0stable
2026/10/29
0.6.10stable
2026/10/24
0.6.9stable
2026/10/24
0.6.8stable
2026/10/24
0.6.7stable
2026/10/24
0.6.6stable
2026/10/23
0.6.5stable
2026/10/19
0.6.4stable
2026/10/14
0.6.3stable
2026/10/11
0.6.2stable
2026/10/11
0.2.0stable
2026/10/7
0.1.0stable
2026/10/7

相关插件

正在加载相关插件…

最新版
0.7.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
906 kB
文件数
92
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
711
安全扫描
✓ v0.7.2 扫描通过
最近提交
2026/10/30
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Experimental Inspector@deepseek-ai/dsh-experimental-inspector用于 Host 调试和 Client Runtime 检查的实验性跨 realm CDP hub

README

English | 简体中文

dsh-app-packager

DeepSeek Harness bundle for AppPackager: list your uni-app x projects, check the local toolchain, and build iOS IPA / Android APK / HarmonyOS HAP without leaving a Harness session — from the agent (four tools) or from a panel in the web GUI.

Install

Search for AppPackager in the Harness plugin market, or:

dsh plugin --profile desktop add dsh-app-packager

Restart the profile afterwards. The plugin depends on app-packager (the CLI and the packaging engine), which is installed with it.

Panel in the web GUI

The bundle ships a client half (./src/client.ts), so the web GUI gains an App packaging entry in the sidebar's own panel list, with its page in the centre column:

  • Engine — engine directory, engine version, whether it is materialized, and which bash bridge was found (macOS/Linux bash, Windows Git Bash or WSL). Init engine materializes a missing engine in one click.
  • Environment check (Node) — the same report as app_packager_doctor, for one platform or all of them, with hints for every failed item. It runs by itself as soon as the panel has the engine state (you never sit on Loading…), re-runs when you switch the platform in that card, and a failure is written into the card so Run check can retry.
  • Folding — every section (Engine / Environment check / SDK / Projects / Build options & scope / Upload / Job) starts collapsed; click its title to open. The fold state lives with the component, so refreshing state or polling a job never loses where the user left it.
  • Projects — every config/projects/*.env, its source directory (flagging a missing one), the platforms it enables, and per-project Env check / Build buttons; the whole list folds under the Project list header, and each row keeps its own Remove button. The Choose folder… button opens the host's own folder dialog and Add project registers the picked directory through the engine's register subcommand, so a project anywhere on disk gets the same config/projects/<id>.env the wizard would write. The field is the folder that holds your projects (e.g. /Users/you/work/projects) — the engine scans one level below it and registers every uni-app x project it finds, so picking projects one by one is unnecessary (several picked folders are joined into that one field).
  • Build options & scope — one card for both halves of "how to build" and "what to build": the version override, the Upload after build row, the Advanced fold, and underneath the boxed scope block — any set of platforms (tick All for the three) and any subset of projects (none ticked = every project that platform enables), with the one Env check / Build pair. The engine CLI takes a single platform and a single project per run, so a selection becomes several engine runs executed back to back inside one job, each marked ▶ i/n in the log; the job succeeds only if every run did, keeping the first failing exit code. A build can still upload what it just produced: the Upload after build row ticks the distribution platforms (the same selection the Upload card's Distribution row edits, sent as one comma separated --upload), and ticking none sends noUpload, so uploading without a rebuild stays the Upload card's job. HarmonyOS debug HAP and Keep work dir live in that Advanced fold, each with a one-line explanation.
  • Upload — the installers the engine has already archived, straight from state.artifacts (listArtifacts reads packages/iOS|Android|HarmonyOS/ <项目ID>-latest.json): display name, version, file size (or a no installer archived tag when the JSON outlived the file) and build time, each with an Upload button that starts a kind: 'upload' job for that one artifact — the engine's upload <platform> <project> --to <平台> action, which never rebuilds and fails the job when the engine skipped rather than uploaded. The card also holds the distribution targets (the usable uploaders from config/upload.env, ticked ones sent as one comma separated --to) and the credential rows: an uploader that declares UPLOAD_PLATFORM_<id>_API_KEY_VAR (pgyer declares PGYER_API_KEY) or _USER_KEY_VAR (PGYER_USER_KEY, pgyer's optional API 1.0 uKey) gets a masked row each, with a Configured / Not set chip next to its Save button. Save writes only the field you typed into, so storing one never clears the other: POST /api/app-packager/upload/credential updates config/upload.local.env (mode 600, the file lib/init.sh sources), and the key only ever travels engine-ward — GET state carries the booleans credentialConfigured / userKeyConfigured, never a secret. The card also reports whether the official CLI is installed (with its package and version once it is).
  • SDK — the detected HBuilderX app/CLI and its version series, and each platform's SDK directory with its state (ready / mismatch / missing). One-click setup asks the engine to download and unpack the matching SDK for the ticked platforms, Process downloaded SDKs imports archives already in sdk/, and each row links to DCloud's official download page — plus the direct iOS archive URL, which follows from the version series alone.
  • Upgrade plugin — reinstalls dsh-app-packager@latest into the current profile. The engine directory is renamed out of the way for the duration, so an upgrade can never delete your downloaded SDKs, certificates or registered projects; the button is hidden when the plugin does not run from a profile's node_modules. Once the upgrade job succeeds the card tells you to restart DeepSeek Harness and deliberately offers no Reload page button: the browser asks for client modules by the revision from its boot-time manifest, and after an upgrade that revision no longer exists on the server (plugins/??<id>/src/client.ts&rev=<old> answers 404), so a reload takes the sidebar entry away instead of bringing it back. Restarting DSH rebuilds the manifest.
  • Job — the running check/build/upload with its live engine log, its verdict ([FAIL] or a non-zero exit code counts as failed) and a Stop button. Engine [FAIL] … / [WARN] … lines are also lifted into their own box above the log together with the totals, so a missing profile, p12 or SDK is readable without scrolling the raw output. The job lives in the host process, not in the browser tab: switching to another DeepSeek Harness tab (or reloading the panel) re-adopts the newest job from GET state, so a build that is still running comes back with its log, verdict and Stop button, and a finished one stays on screen until you start another build or press Clear (settled jobs only — a running one is never dropped, or there would be nothing left to stop).

The panel only calls same-origin routes registered by this plugin (/api/app-packager/state|init|doctor|pick|project|project/remove|job|job/log|job/kill|job/clear|upload/credential) — no build logic runs in the browser. It needs a profile that ships the web app (@deepseek-ai/dsh-web-app, as the desktop and web profiles do); in a headless profile the panel is simply absent and the four tools keep working.

Tools

app_packager_list

Lists the projects configured in the engine directory (config/projects/*.env): project id, app name, whether the source directory exists, enabled platforms.

AppPackager 引擎目录:<plugin>/home
引擎版本:0.6.2
项目(1):
- shop(商城)
  平台: iOS (IPA), Android (APK)
  源码: /Users/me/work/shop

Pure Node, so it also works on Windows. The first call materializes the engine.

app_packager_doctor

Reports whether this machine can build: Node version, the bash bridge, Xcode / signing tools, HBuilderX CLI, JDK, Android SDK, DevEco Studio, the HarmonyOS signing directory and the project config. platform: ios / android / harmony / all (default all). Also pure Node.

app_packager_check

Runs the engine's check subcommand for one platform (certificates, SDK directories, HBuilderX CLI) and returns the tail of its output plus a verdict. Parameters: platform (default all), project (project id, omit for all), home.

app_packager_build

Runs a real build; minutes per platform (iOS especially), timeout 90 minutes.

ParameterDescription
platformrequired, ios / android / harmony / all
projectproject id; optional with platform=all (means every project)
uploadupload after building, e.g. pgyer
noUploadskip the upload stage
versionoverride the artifact version
harmonyDebugemit a HarmonyOS debug side-load HAP
keepWorkkeep the intermediate work directory
homeengine directory (usually omitted, see below)

When unsure, run app_packager_check first.

Configuration

The bundle patch provides the config; override it in your own profile cordis.patch.yml by re-inserting id: app-packager:

- insert:
    - id: app-packager
      name: 'dsh-app-packager'
      config:
        home: ''                 # engine dir; empty = <plugin>/home or APP_PACKAGER_HOME
        searchRoots: []          # extra project scan roots (outside the engine's parent)
        checkTimeoutMs: 600000   # check timeout (ms)
        buildTimeoutMs: 5400000  # build timeout (ms)
        outputLimit: 12000       # engine output kept in a tool result (tail)

The same values are editable in Harness under Settings → Plugins → Plugin config.

Engine directory and first use

The engine directory lives inside the plugin (<plugin>/home), so it travels with the plugin; APP_PACKAGER_HOME or the home config key points it somewhere else. An existing ~/AppPackager from an earlier version is renamed into place on first use — a rename, never a copy, so multi-GB SDKs and registered projects move instantly.

The first tool call (or the panel's Init engine) releases the bundled engine there; later upgrades refresh the engine files (when the .engine-version in the directory differs from the package version, the next tool call or panel button refreshes it in place, and until then that panel row reads "the directory holds X — needs a refresh") but never overwrite your own config, certificates, SDKs or artifacts. Upgrade plugin in the panel goes one step further and reinstalls the npm package, keeping the engine directory stashed until the install finishes.

Do not reinstall this package around the panel. <plugin>/home sits inside the package directory, so any pnpm command that really reinstalls it — pnpm install --force, adding another version, changing the file: spec — deletes the engine directory along with it, SDKs, certificates and registered projects included. Use Upgrade plugin in the panel, or node <plugin>/upgrade.ts, which stashes the engine directory first; both also refuse to move you onto an older release than the one installed.

When the sidebar entry disappears. The host composes the plugin list once at startup and silently skips a plugin whose package directory is missing. Check in order: (1) ls <plugin> (i.e. <profile>/node_modules/dsh-app-packager); (2) if it is gone, read <profile>/.plugin-manager/logs/*/pnpm.log — a failed install leaves Command failed with exit code 1, and pnpm removes the old package directory first, taking the SDKs, certificates and projects in home with it; (3) install it back (plugin market, or dsh plugin --profile <profile> add dsh-app-packager) and restart DSH — the list is composed at startup only.

For the interactive wizard (register uni-app x projects found next to the engine, pick platforms, configure signing), use the CLI:

npx app-packager init
npx app-packager register ~/work/shop   # or register a directory directly

Platform support

list / doctor work anywhere. check / build need bash: built in on macOS/Linux, and on Windows through Git for Windows (recommended) or WSL. iOS packaging is macOS only — elsewhere doctor reports iOS as failed rather than pretending otherwise.

Licence

MIT