dsh-plugin-wukong-cli 0.22.0 → 0.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,36 @@
6
6
 
7
7
  格式基于 [Keep a Changelog](https://keepachangelog.com/),版本遵循 [Semantic Versioning](https://semver.org/)。
8
8
 
9
+ ## [0.22.2] - 2026-10
10
+
11
+ ### 新增 · Added
12
+ - **会话「编辑重发」与「分叉」**:把鼠标移到某条用户消息上,「时间 + 复制」那一行(整行只在悬停时显示)多出「编辑」「分叉」两个图标。「编辑」把这条消息就地换成与底部输入框同款的编辑框(带圆形发送按钮),发送后跳转到新会话,原会话移入回收站,可恢复:编辑**第一条**消息等同新建对话(同一工作区新建会话,标题由宿主按新对话生成);编辑**后面**的消息从该消息所在轮次之前分叉,并沿用原标题。「分叉」只从该消息之前分叉并跳转,不发送。入口通过 Portal 落到宿主的用户消息节点上(依赖 `data-chat-flow-kind="user"` 与 `data-clock="start"`),宿主没有给用户消息开扩展座位。
13
+ **Edit & resend and Fork on a user message**: hover a user message and its "time + copy" row (shown only on hover) gains two icons, Edit and Fork. Edit swaps the message in place for an editor styled like the composer below (with a round send button); sending switches to the new session and moves the original to the recycle bin, where it can be restored. Editing the **first** message is a brand-new conversation (a fresh session in the same workspace, titled by the host like any new one); editing a **later** message forks from just before its turn and keeps the original title. Fork only forks from just before the message and switches, sending nothing. The entry points are portalled onto the host's user-message node (relying on `data-chat-flow-kind="user"` and `data-clock="start"`); the host exposes no extension seat for user messages.
14
+ - **归档管理(设置 → 归档管理)**:已归档 / 未归档 / 回收站三个页签,按工作区分组;支持单条与工作区/全部的归档、取消归档、移入回收站、恢复,永久删除与清空回收站先确认范围与数量。宿主日志只追加、没有删除接口,所以「移入回收站」是把会话目录 `rename` 到 `$DSH_HOME/wukong/trash/`、写入 `trash.json` 并清理工作区注册表;宿主里一直驻留内存的已归档会话会先按宿主自己的销毁顺序卸载再移动;永久删除先持久化意图再删数据,中断后启动时自动续作或修复。设计参考 [Ultronen/dsh-archived-chats](https://github.com/Ultronen/dsh-archived-chats)(MIT),为本插件独立实现,本版不含预览、搜索、备份、保留策略与来源树。新增路由 `GET /api/wukong/archive/state`,`POST /api/wukong/archive/{archive,unarchive,trash,restore,purge,discard,fork-point}`。设置导航里「归档管理」使用宿主自带的归档盒图标,「Wukong」换成自己的图标。
15
+ **Archive management (Settings → Archive Management)**: Archived / Active / Recycle bin tabs grouped by workspace, with archive, unarchive, move to the bin and restore for one session, a workspace or everything; permanent delete and emptying the bin confirm the scope and count first. The host log is append-only and has no delete API, so "move to the bin" `rename`s the session directory into `$DSH_HOME/wukong/trash/`, records it in `trash.json` and cleans the workspace registry; an archived session the host keeps resident is first unloaded with the host's own teardown sequence; a permanent delete persists its intent before deleting bytes, and an interrupted one is finished or repaired at startup. The design follows [Ultronen/dsh-archived-chats](https://github.com/Ultronen/dsh-archived-chats) (MIT) but is an independent implementation; this version has no preview, search, backup, retention policy or lineage tree. New routes: `GET /api/wukong/archive/state` and `POST /api/wukong/archive/{archive,unarchive,trash,restore,purge,discard,fork-point}`. In the settings navigation, Archive Management uses the host's own archive-box icon and Wukong gets its own glyph.
16
+
17
+ ### 修复 · Fixed
18
+ - **编辑重发不再留下空的「已完成」轮次**:宿主日志里用户消息位于 `turn/start` 之后,原先在「消息 seq − 1」处分叉会切在未结束的轮次中间,宿主补出空轮次,每次编辑多一个。现在由宿主按日志算出干净的分叉点(上一轮的 `turn/end`,跳过排队用的 `agent/inbox/spliced`)。
19
+ **Edit & resend no longer leaves empty "completed" turns**: in the host log a user message sits after its `turn/start`, so forking at "message seq − 1" cut inside an open turn and the host closed it with an empty one — one more per edit. The host now computes a clean fork point from the log (the previous turn's `turn/end`, skipping the `agent/inbox/spliced` that queued the message).
20
+
21
+ ## [0.22.1] - 2026-10
22
+
23
+ ### 新增 · Added
24
+ - **`npm run build:dev`:不压缩、不混淆的开发版构建**:写出与正式构建相同的文件、相同的位置(软链着本仓库的 profile 重启即可使用),代码可读、堆栈里有真实函数名,用来调试混淆后读不出的报错。每个开发版产物首行是 `DEV BUILD` 注释;`npm run verify`、`build-lib.mjs --check` 与两个包新增的 `prepublishOnly` 钩子见到它都会失败并提示先跑 `npm run build`,所以它不会被误提交或误发布。
25
+ **`npm run build:dev`: a readable, non-minified, non-obfuscated build**: it writes the same files to the same places as the official build (a profile linked to this repo just needs a restart), with readable code and real function names in stack traces, for debugging what the obfuscated build makes unreadable. Every dev artifact starts with a `DEV BUILD` comment; `npm run verify`, `build-lib.mjs --check` and the new `prepublishOnly` hook of both packages fail on it and say to run `npm run build` first, so it cannot be committed or published by accident.
26
+ - **README「开发」章节补上「连接本地开发版 / 切回已发布版」**:怎么用 `--spec link:` 把 profile 连到工作副本、改完怎么重建生效、怎么确认连的是哪一份、怎么切回 npm 版,以及隔离 `DSH_HOME`、混淆产物难读堆栈、`npm install` 清掉 `link:dev` 软链这几个坑;PUBLISHING 补上两个包的发布前钩子说明。
27
+ **The README's Development chapter gains "Connecting to the local dev build / switching back to the published one"**: how to point a profile at the working copy with `--spec link:`, how to rebuild for an edit to take effect, how to tell which one a profile is on, how to switch back to the npm build, and the traps — an isolated `DSH_HOME`, unreadable stack traces from the obfuscated build, and `npm install` removing the `link:dev` symlinks; PUBLISHING documents the pre-publish hook of both packages.
28
+
29
+ ### 变更 · Changed
30
+ - **成功提示改成绿色,失败仍是红色**:顶部的提示条原来不论成败都是红色错误样式,「已保存增强模型」「已复制 …的配置」「已复制 N 台服务器」这类成功消息看起来像出错了。现在提示条带语气:成功用成功色(绿),失败保持红色,`名称未更改` 这类说明用琥珀色;成功与说明的 `role` 是 `status`,失败仍是 `alert`,读屏软件不会把成功当成警报念出来。所有原有调用默认仍是失败,只有明确成功的几处改了。
31
+ **A success notice is now green; a failure stays red**: the bar at the top used the red error style whatever happened, so a success such as "Saved the enhancement model", "Copied the config for …" or "Copied N servers" looked like an error. The bar now carries a tone: green for a success, red for a failure, amber for a plain note such as "Name unchanged"; a success or a note has `role="status"` while a failure keeps `role="alert"`, so a screen reader does not announce a success as an alarm. Every existing call still defaults to a failure; only the ones that clearly succeed changed.
32
+ - **提示词增强的 Provider / 模型改成下拉选择,不再手填**:两个输入框换成两个下拉,选项来自宿主模型选择器用的同一份目录(`sessionController.modelCatalog()`,经新增的 `GET /api/wukong/models` 读出,按提供商分组),所以固定下来的一定是真实存在的模型。选了 Provider 会自动带出它的模型,并预选部署默认模型(若属于它);选项显示名称,id 放在悬浮提示里,仅两项重名时才附上 id。之前存下的路由如果已不在目录里(提供商被移除、换了账号),仍显示为「xxx(不在可用列表中)」,可以看见、替换或清除。宿主没有该服务、读取失败或目录为空时,退回原来的手填输入框并给出刷新按钮,功能不受影响。目录逐项校验,畸形或重复的条目会被丢弃,没有可选模型的提供商不出现。
33
+ **The Prompt-enhancement Provider / Model fields are now dropdowns instead of free text**: the two inputs became two selects fed by the same catalog the host's model picker uses (`sessionController.modelCatalog()`, read through the new `GET /api/wukong/models`, grouped by provider), so a pinned route is always a model that exists. Choosing a provider fills in its model, preselecting the deployment default when it belongs to that provider; options show the name with the id in the tooltip, appending the id only when two entries share a name. A route stored earlier that the catalog no longer lists (a provider removed, a different account) still shows as "xxx (not in the available list)", so it can be seen, replaced or cleared. When the host has no such service, the read fails or the catalog is empty, the original free-text fields come back with a refresh button, so nothing stops working. The catalog is validated entry by entry: malformed or duplicate entries are dropped and a provider with no model to pick does not appear.
34
+
35
+ ### 修复 · Fixed
36
+ - **「今天」统计的测试在整点后的第一分钟会误报失败**(仅测试,不影响发布产物):它把「1 分钟前」的步骤断言落在当前这一小时里,整点后第一分钟会跨进上一小时甚至上一天。改为用当前整点,并核对了几个边界时刻。
37
+ **The test for the "today" usage view failed during the first minute after each hour** (test only; the published artifacts are unaffected): it asserted a step from "a minute ago" into the current hour, which crosses into the previous hour — or day — right after a boundary. It now uses the top of the current hour, checked at several boundary times.
38
+
9
39
  ## [0.22.0] - 2026-10
10
40
 
11
41
  ### 新增 · Added
package/README.en.md CHANGED
@@ -12,7 +12,7 @@
12
12
  |--|--|--|--|--|
13
13
  | Light theme | Prompts | Skills | MCP | Wallpaper |
14
14
 
15
- ![version](https://img.shields.io/badge/version-0.22.0-00ff9c)
15
+ ![version](https://img.shields.io/badge/version-0.22.2-00ff9c)
16
16
  ![license](https://img.shields.io/badge/license-MIT-blue)
17
17
  ![platform](https://img.shields.io/badge/platform-web%20%2B%20desktop-00ff9c)
18
18
  ![runtime](https://img.shields.io/badge/runtime-DSH%200.2.0--rc.2-8957e5)
@@ -171,6 +171,7 @@ The panel talks to the Host only through the plugin's own **same-origin HTTP rou
171
171
  |---|---|
172
172
  | `GET` / `POST /api/wukong/state` | read / write the state document (all panel CRUD goes here): `GET` answers `{ok, revision, state}`; `POST` takes `{state, ifRevision}` and normalizes the document on every accepted write, incrementing `revision` |
173
173
  | `GET /api/wukong/skills` | the skill + managed-command catalog the panel needs: `{ok, revision, skills, commands}`, so the browser no longer reconstructs it from the whole state document |
174
+ | `GET /api/wukong/models` | the models a Prompt-enhancement route can be pinned to: the same catalog the host's model picker uses (`sessionController.modelCatalog()`), grouped by provider; answers 503 when the host has no such service, and the panel falls back to typing them in |
174
175
  | `POST /api/wukong/mcp/test` | one-shot MCP connect test |
175
176
  | `GET /api/wukong/market` · `POST /api/wukong/market/install` | marketplace: search the aggregated catalogs (`kind=mcp\|skill` plus `q`) — official MCP Registry, DSH MCP Market, ClawHub, SkillsMP and the bundled set — and install one explicit item id; an MCP server that needs env vars is installed disabled and the answer lists `needsEnv` |
176
177
  | `POST /api/wukong/skills/zip` | upload a zip skill bundle and extract it into `$DSH_HOME/skills` |
@@ -338,10 +339,13 @@ npm run link:dev # symlink the installed harness @deepseek-ai/* into
338
339
  node scripts/build-lib.mjs # or: npm run build — rebuild the shipped artifacts
339
340
  ```
340
341
 
341
- Outputs, all inside the plugin package `dsh-plugin-wukong`:
342
+ Build outputs (the first two inside the plugin package `dsh-plugin-wukong`, the third in the installer package):
342
343
 
343
344
  - `packages/wukong/lib/index.js` + `lib/invariant.js` (ESM; every `@deepseek-ai/*` and `node:*` import stays external so the profile's own copies resolve)
344
345
  - `packages/wukong/client/client.js` — the browser panel as a harness module-loader bundle: `window.__ModuleLoader__.load({ id, factory })`, with `react` / `react/jsx-runtime` left external for the loader's module table
346
+ - `dist/cli.cjs` — the published installer, built from the readable `cli.cjs` at the repo root (the package's `bin` and `postinstall` point at it)
347
+
348
+ Everything published is minified and obfuscated, **not readable code**; the readable sources live only in the repository (`packages/wukong/src/` and the root `cli.cjs`) and the published packages do not carry them. The build is deterministic (the obfuscator's random seed is fixed), so `npm run verify` can check that the committed artifacts match the sources.
345
349
 
346
350
  Self-check before publishing:
347
351
 
@@ -367,6 +371,59 @@ Keep four places in sync on version bumps:
367
371
  4. `CHANGELOG.md`
368
372
 
369
373
  Then rebuild the panel bundle so the version badge updates.
374
+ ### Connecting to the local dev build / switching back to the published one
375
+
376
+ While developing, point one of DSH's profiles at the working copy in this repo so a rebuild is all it takes to see a change, and switch back when you want the release. Both directions use the same installer; only `--spec` differs.
377
+
378
+ **Switch to the local dev build** (from the repo root; `--profile` picks the profile, comma-separate several):
379
+
380
+ ```bash
381
+ node cli.cjs --profile web --spec link:$PWD/packages/wukong
382
+ ```
383
+
384
+ It replaces `node_modules/dsh-plugin-wukong` in the profile with a symlink to `packages/wukong`, and the dependency record becomes `link:…`. Then restart `dsh web` (or DSH.app for the desktop client).
385
+
386
+ **Make an edit take effect**: the symlink points at the built output (`lib/`, `client/`), not at `src/`, so rebuild after every change, then restart or reload the page:
387
+
388
+ ```bash
389
+ npm run build
390
+ ```
391
+
392
+ **Debug with the dev build**: the output of `npm run build` is minified and obfuscated, so stack traces carry no function names. While debugging, run:
393
+
394
+ ```bash
395
+ npm run build:dev
396
+ ```
397
+
398
+ It writes **the same files to the same places** (so a profile that links to the working copy just needs a restart), but neither minified nor obfuscated: the code reads like the source and stack traces show real function names. The first line of every dev artifact is a `DEV BUILD` comment. **Do not commit or publish it**: `npm run verify`, `node scripts/build-lib.mjs --check` and the `prepublishOnly` hook of both packages (run automatically before `npm publish`) fail on that marker and tell you to run `npm run build` first. Run `npm run build` again when you are done.
399
+
400
+ **Check which one a profile is on**:
401
+
402
+ ```bash
403
+ ls -l ~/.dsh/profiles/web/node_modules/dsh-plugin-wukong # an `->` means the symlink = local dev build; a plain directory = the published one
404
+ ```
405
+
406
+ You can also read `~/.dsh/profiles/web/package.json`: a `link:…` dependency is the dev build, `^x.y.z` / `x.y.z` is the npm one. Both may carry the same version number, so the panel's version badge cannot tell them apart.
407
+
408
+ **Switch back to the published build** (no `--spec`: it installs the npm package at the installer's own version):
409
+
410
+ ```bash
411
+ npx dsh-plugin-wukong-cli --profile web
412
+ ```
413
+
414
+ Notes:
415
+
416
+ - A profile has exactly one source at a time; the symlink and the npm install replace each other and never coexist.
417
+ - Both read and write the **same data** (`$DSH_HOME/wukong/`: prompts, skills, MCP, wallpaper), so breaking the data format while developing affects the copy you use every day. To experiment safely use an isolated `DSH_HOME` (step 2 of [`TESTING.en.md`](./TESTING.en.md)):
418
+
419
+ ```bash
420
+ DSH_HOME=/tmp/wukong-dev node cli.cjs --profile web --spec link:$PWD/packages/wukong
421
+ DSH_HOME=/tmp/wukong-dev dsh --profile web --no-open --port 3917 # pick a port that is free
422
+ ```
423
+
424
+ - The official build is obfuscated, so stack traces in the browser console and the host log **do not show the original function names**. Use the **dev build** while debugging; see the previous section.
425
+ - `npm install` removes the `node_modules/@deepseek-ai/` symlinks that `npm run link:dev` created; run `npm run link:dev` again afterwards, or the type check stops being strict.
426
+
370
427
 
371
428
  ## ❓ FAQ
372
429
 
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
  |--|--|--|--|--|
13
13
  | 浅色主题 | 提示词 | 技能 | MCP | 壁纸 |
14
14
 
15
- ![version](https://img.shields.io/badge/version-0.22.0-00ff9c)
15
+ ![version](https://img.shields.io/badge/version-0.22.2-00ff9c)
16
16
  ![license](https://img.shields.io/badge/license-MIT-blue)
17
17
  ![platform](https://img.shields.io/badge/platform-web%20%2B%20desktop-00ff9c)
18
18
  ![runtime](https://img.shields.io/badge/runtime-DSH%200.2.0--rc.2-8957e5)
@@ -171,6 +171,7 @@ dsh web # 或直接重启 DSH Desktop 客户端
171
171
  |---|---|
172
172
  | `GET` / `POST /api/wukong/state` | 读写状态文档(面板的增删改查都走这里):读返回 `{ok, revision, state}`;写收 `{state, ifRevision}`,每次写入都会归一化文档并让 `revision` 加一 |
173
173
  | `GET /api/wukong/skills` | 面板要的技能 + 托管命令目录:`{ok, revision, skills, commands}`,不必再从整份状态文档里重建 |
174
+ | `GET /api/wukong/models` | 提示词增强可固定的模型列表:宿主模型选择器用的同一份目录(`sessionController.modelCatalog()`),按提供商分组;宿主没有该服务时回 503,面板退回手填 |
174
175
  | `POST /api/wukong/mcp/test` | 一次性 MCP 连接测试 |
175
176
  | `GET /api/wukong/market` · `POST /api/wukong/market/install` | 扩展市场:按 `kind=mcp\|skill` 与 `q` 搜索聚合目录(官方 MCP Registry、DSH MCP Market、ClawHub、SkillsMP + 随包精选),安装时只接受显式条目 id;MCP 需要环境变量时以禁用状态装好并返回 `needsEnv` |
176
177
  | `POST /api/wukong/skills/zip` | 上传 zip 技能包并解压到 `$DSH_HOME/skills` |
@@ -338,10 +339,13 @@ npm run link:dev # 把本机已安装 harness 的 @deepseek-ai/* 软
338
339
  node scripts/build-lib.mjs # 或 npm run build:重建发布产物
339
340
  ```
340
341
 
341
- 产物都在插件包 `dsh-plugin-wukong` 里:
342
+ 构建产物(前两项在插件包 `dsh-plugin-wukong` 里,第三项在安装器包里):
342
343
 
343
344
  - `packages/wukong/lib/index.js` + `lib/invariant.js`(ESM,`@deepseek-ai/*` 与 `node:*` 全部 external,由 profile 自身解析)
344
345
  - `packages/wukong/client/client.js`——浏览器面板打成 harness module-loader bundle:`window.__ModuleLoader__.load({ id, factory })`,`react` / `react/jsx-runtime` 也留 external 交给 loader 的模块表
346
+ - `dist/cli.cjs`——安装器的发布版,由仓库根目录可读的 `cli.cjs` 构建(包的 `bin` 与 `postinstall` 指向它)
347
+
348
+ 所有发布产物都经过压缩与混淆,**不是可读代码**;可读的源码只在仓库里(`packages/wukong/src/` 与根目录 `cli.cjs`),发布的包不带它们。构建是确定性的(固定了混淆的随机种子),所以 `npm run verify` 能检查提交的产物与源码一致。
345
349
 
346
350
  发布前自检:
347
351
 
@@ -367,6 +371,59 @@ npm run typecheck # 只跑类型检查(tsc -p packages/wukong/tsconf
367
371
  4. `CHANGELOG.md`
368
372
 
369
373
  然后重建面板 bundle,让版本徽章跟着更新。
374
+ ### 连接本地开发版 / 切回已发布版
375
+
376
+ 日常开发时,让 DSH 的某个 profile 直接用仓库里的工作副本,改完重建就能看到效果;想用回正式版时再切回去。两者都用同一个安装器,区别只在 `--spec`。
377
+
378
+ **切到本地开发版**(在仓库根目录,`--profile` 选要连的那个,多个用逗号分隔):
379
+
380
+ ```bash
381
+ node cli.cjs --profile web --spec link:$PWD/packages/wukong
382
+ ```
383
+
384
+ 它把 profile 里的 `node_modules/dsh-plugin-wukong` 换成指向 `packages/wukong` 的软链,依赖记录变成 `link:…`。然后重启 `dsh web`(桌面端则重启 DSH.app)。
385
+
386
+ **改完源码让它生效**:软链指向的是构建后的产物(`lib/`、`client/`),不是 `src/`,所以每次改动后要重建,再重启或刷新页面:
387
+
388
+ ```bash
389
+ npm run build
390
+ ```
391
+
392
+ **调试时用开发版构建**:`npm run build` 的产物经过压缩与混淆,报错堆栈里没有函数名。调试时改跑:
393
+
394
+ ```bash
395
+ npm run build:dev
396
+ ```
397
+
398
+ 它把**同样的文件写到同样的位置**(所以软链着的 profile 重启就能用),只是不压缩、不混淆,代码读起来和源码一致,堆栈里有真实的函数名。每个开发版产物的第一行都是 `DEV BUILD` 注释。**别把它提交或发布**:`npm run verify`、`node scripts/build-lib.mjs --check` 和两个包的 `prepublishOnly` 钩子(`npm publish` 前自动运行)看到这个标记都会失败并提示先跑 `npm run build`。调试完记得 `npm run build` 切回正式构建。
399
+
400
+ **确认当前连的是哪一份**:
401
+
402
+ ```bash
403
+ ls -l ~/.dsh/profiles/web/node_modules/dsh-plugin-wukong # 带 `->` 的是软链 = 本地开发版;普通目录 = 已发布版
404
+ ```
405
+
406
+ 也可以看 `~/.dsh/profiles/web/package.json`:依赖是 `link:…` 就是开发版,是 `^x.y.z` / `x.y.z` 就是 npm 版。两者版本号可能一样,面板里的版本徽章区分不出来。
407
+
408
+ **切回已发布版**(不带 `--spec`,装的是 npm 上与安装器同版本的包):
409
+
410
+ ```bash
411
+ npx dsh-plugin-wukong-cli --profile web
412
+ ```
413
+
414
+ 注意:
415
+
416
+ - 一个 profile 同一时间只有一个来源,软链与 npm 版互相替换,不会共存。
417
+ - 两种方式读写的是**同一份数据**(`$DSH_HOME/wukong/`:提示词、技能、MCP、壁纸),开发中改坏数据格式会影响你日常在用的那份。想放心折腾,就用隔离的 `DSH_HOME`(见 [`TESTING.md`](./TESTING.md) 的第 2 步):
418
+
419
+ ```bash
420
+ DSH_HOME=/tmp/wukong-dev node cli.cjs --profile web --spec link:$PWD/packages/wukong
421
+ DSH_HOME=/tmp/wukong-dev dsh --profile web --no-open --port 3917 # 换一个没被占用的端口
422
+ ```
423
+
424
+ - 正式构建是混淆过的,浏览器控制台和宿主日志里的报错堆栈**读不出原函数名**。调试时改用**开发版构建**,见下一节。
425
+ - `npm install` 会清掉 `npm run link:dev` 建的 `node_modules/@deepseek-ai/` 软链,之后要再跑一次 `npm run link:dev`,类型检查才会恢复严格。
426
+
370
427
 
371
428
  ## ❓ FAQ
372
429
 
package/dist/cli.cjs CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';const jk=n;(function(o,i){const jW=n,v=o();while(!![]){try{const a=-parseInt(jW(0x18d))/0x1*(-parseInt(jW(0x183))/0x2)+parseInt(jW(0x14b))/0x3+parseInt(jW(0x125))/0x4*(-parseInt(jW(0x133))/0x5)+parseInt(jW(0x129))/0x6*(parseInt(jW(0x15b))/0x7)+-parseInt(jW(0x13f))/0x8*(parseInt(jW(0x197))/0x9)+parseInt(jW(0x19d))/0xa+-parseInt(jW(0x118))/0xb*(parseInt(jW(0x145))/0xc);if(a===i)break;else v['push'](v['shift']());}catch(x){v['push'](v['shift']());}}}(h,0xa2eb9));var W=Object[jk(0x12f)],l=(o,i)=>W(o,jk(0x182),{'value':i,'configurable':!0x0});const {existsSync:f,mkdirSync:O,readFileSync:k,readdirSync:q,realpathSync:B,rmSync:y,writeFileSync:$}=require(jk(0x180)),{homedir:D}=require(jk(0xfe)),{basename:g,dirname:_,join:c}=require(jk(0x18a)),{execFileSync:F,spawnSync:w}=require(jk(0x193)),E=__dirname,d=jk(0xff),Y=jk(0x189),P=[jk(0x142),jk(0x106)],L=[jk(0x106),jk(0x161)],A=jk(0x143),U=jk(0x113),V=[jk(0x175),jk(0x114),jk(0x11c)],m=process.env.DSH_HOME??c(D(),jk(0x170)),b=c(m,jk(0x16a)),J=c(m,jk(0x174)),z=0x4*0x400*0x400;function S(...o){const jD=jk;return process[jD(0x181)][jD(0x17e)](0x2)[jD(0x1a3)](i=>o[jD(0x17b)](i));}function n(j,S){j=j-0xf8;const L=h();let X=L[j];if(n['MsMzHc']===undefined){var B=function(D){const Z='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let l='',C='';for(let g=0x0,Q,T,F=0x0;T=D['charAt'](F++);~T&&(Q=g%0x4?Q*0x40+T:T,g++%0x4)?l+=String['fromCharCode'](0xff&Q>>(-0x2*g&0x6)):0x0){T=Z['indexOf'](T);}for(let z=0x0,m=l['length'];z<m;z++){C+='%'+('00'+l['charCodeAt'](z)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(C);};n['mBKxin']=B,n['escNUp']={},n['MsMzHc']=!![];}const W=L[0x0];n['OaHqwf']!==W&&(n['escNUp']={},n['OaHqwf']=W);const k=n['escNUp'][j];return k===undefined?(X=n['mBKxin'](X),n['escNUp'][j]=X):X=k,X;}l(S,jk(0xf8));function K(i){const jZ=jk,v=process[jZ(0x181)][jZ(0x17e)](0x2);for(let a=0x0;a<v[jZ(0x158)];a+=0x1){const x=v[a];if(x==='--'+i){const p=v[a+0x1];return p!==void 0x0&&!p[jZ(0x1a2)]('-')?p:void 0x0;}if(x[jZ(0x1a2)]('--'+i+'='))return x[jZ(0x17e)](i[jZ(0x158)]+0x3);}}l(K,jk(0x11b));function C(){const jl=jk,i=[],v=process[jl(0x181)][jl(0x17e)](0x2);for(let a=0x0;a<v[jl(0x158)];a+=0x1){const x=v[a];if(x===jl(0x186)||x==='-p'){const p=v[a+0x1];p!==void 0x0&&!p[jl(0x1a2)]('-')&&(i[jl(0x14e)](...p[jl(0x165)](',')),a+=0x1);continue;}x[jl(0x1a2)](jl(0x154))&&i[jl(0x14e)](...x[jl(0x17e)](0xa)[jl(0x165)](','));}return i[jl(0xfd)](r=>r[jl(0x196)]())[jl(0x1a7)](r=>r!=='');}l(C,jk(0x103));function Q(){const jC=jk;if(!f(J))return;const o=k(J,jC(0x192))[jC(0x158)];o>z&&(console[jC(0x10f)](jC(0x1a8)+(o/0x400/0x400)[jC(0x11a)](0x1)+jC(0x188)),console[jC(0x10f)](jC(0x13b)));}l(Q,jk(0xfc));const j=[0x0,0x2,0x0];function X(){const jg=jk;try{const v=process[jg(0x119)]===jg(0x16f)?jg(0x151):jg(0x11f),a=F(v,[jg(0x137)],{'encoding':jg(0x192)})[jg(0x165)]('\x0a')[0x0][jg(0x196)]();if(a==='')return;let x=_(B(a));for(let p=0x0;p<0x8;p+=0x1){const u=c(x,jg(0x147));if(f(u)){const j1=JSON[jg(0x163)](k(u,jg(0x192)));if(j1[jg(0x182)]===jg(0x131))return j1[jg(0x19c)];}const j0=_(x);if(j0===x)break;x=j0;}}catch{}}l(X,jk(0x18b));function Z(){const jQ=jk,o=X();if(o===void 0x0)return;console[jQ(0x105)](jQ(0x101)+o);const i=o[jQ(0x126)](/^[^0-9]*/,'')[jQ(0x165)]('.')[jQ(0xfd)](v=>Number[jQ(0x177)](v,0xa)||0x0);(i[0x0]<j[0x0]||i[0x0]===j[0x0]&&i[0x1]<j[0x1])&&(console[jQ(0x10f)](jQ(0x199)+j[jQ(0x1a6)]('.')+jQ(0x160)),console[jQ(0x10f)](jQ(0x115)));}l(Z,jk(0x10c));function H(){const jT=jk;for(const o of[process.env.DSH_PNPM,jT(0x153)][jT(0x1a7)](i=>typeof i==jT(0x172)&&i!==''))if(w(o,[jT(0x12d)],{'encoding':jT(0x192)})[jT(0x134)]===0x0)return o;}l(H,jk(0x19f));function M(){const jF=jk;if(!f(b))return[];const i=[];for(const v of q(b)){const a=c(b,v);f(c(a,jF(0x147)))&&f(c(a,jF(0x1a9)))&&i[jF(0x14e)](a);}return i;}l(M,jk(0x195));function ee(v=[]){const jh=jk;f(b)||O(b,{'recursive':!0x0});const a=[{'name':jh(0x15c),'bundles':[jh(0x1a1),jh(0x156)]},{'name':jh(0x11e),'bundles':[jh(0x1a1),jh(0x156)]}],x=v[jh(0x1a7)](j1=>!a[jh(0x1a3)](j2=>j2[jh(0x182)]===j1));for(const j1 of x)a[jh(0x14e)]({'name':j1,'bundles':[jh(0x1a1),jh(0x156)]});const p=v[jh(0x158)]===0x0?a:a[jh(0x1a7)](j2=>v[jh(0x17b)](j2[jh(0x182)])),j0=[];for(const j2 of p){const j3=c(b,j2[jh(0x182)]);O(c(j3,jh(0x1a9)),{'recursive':!0x0});const j4=c(j3,jh(0x147));f(j4)||($(j4,JSON[jh(0x162)]({'name':jh(0x146)+j2[jh(0x182)],'private':!0x0,'dependencies':{},'dsh':{'profile':{'bundles':j2[jh(0x130)]}}},null,0x2)),console[jh(0x105)](jh(0x140)+j3)),j0[jh(0x14e)](j3);}return j0;}l(ee,jk(0x108));function G(v,a){const jz=jk;if(a[jz(0x158)]===0x0)return v;const x=v[jz(0x1a7)](u=>a[jz(0x17b)](g(u))),p=new Set(x[jz(0xfd)](u=>g(u))),r=a[jz(0x1a7)](u=>!p[jz(0x164)](u));if(r[jz(0x158)]>0x0){console[jz(0x10f)](jz(0x107)+r[jz(0x1a6)](',\x20'));const u=v[jz(0xfd)](j0=>g(j0));console[jz(0x10f)](jz(0x19e)+(u[jz(0x158)]>0x0?u[jz(0x1a6)](',\x20'):jz(0x112)));}if(x[jz(0x158)]!==0x0)return x;}l(G,jk(0x117));function N(o){const jm=jk,i=c(o,jm(0x147));if(f(i))try{return JSON[jm(0x163)](k(i,jm(0x192)));}catch{console[jm(0x10f)](jm(0x10b)+i+jm(0x102));return;}}l(N,jk(0x128));function ne(i){const jG=jk,v=N(i);if(v===void 0x0)return;const a=v[jG(0x137)]?.[jG(0x18e)]?.[jG(0x130)]??[];if(a[jG(0x17b)](d)){console[jG(0x105)](jG(0x11d)+d+jG(0x150)+g(i)+jG(0x178));return;}a[jG(0x14e)](d),v[jG(0x137)]={...v[jG(0x137)]??{},'profile':{...v[jG(0x137)]?.[jG(0x18e)]??{},'bundles':a}},$(c(i,jG(0x147)),JSON[jG(0x162)](v,null,0x2)+'\x0a'),console[jG(0x105)](jG(0x19a)+d+jG(0x14f)+g(i)+jG(0x178));}l(ne,jk(0x12b));function oe(i){const jI=jk,v=N(i);if(v===void 0x0)return;const a=v[jI(0x137)]?.[jI(0x18e)]?.[jI(0x130)]??[];if(!a[jI(0x17b)](d)){console[jI(0x105)](jI(0x11d)+d+jI(0x12e)+g(i)+jI(0x178));return;}const x=a[jI(0x1a7)](p=>p!==d);v[jI(0x137)]={...v[jI(0x137)]??{},'profile':{...v[jI(0x137)]?.[jI(0x18e)]??{},'bundles':x}},$(c(i,jI(0x147)),JSON[jI(0x162)](v,null,0x2)+'\x0a'),console[jI(0x105)](jI(0x18c)+d+jI(0x14f)+g(i)+jI(0x178));}l(oe,jk(0x141));function se(i,v,a){const jc=jk;console[jc(0x105)](jc(0x194)+v+jc(0x138)+i+')');const x=w(a,[jc(0x132),v],{'cwd':i,'stdio':jc(0x16e)});return x[jc(0x134)]!==0x0?(console[jc(0x10f)](jc(0x1aa)+(x[jc(0x134)]??jc(0x14d)+String(x[jc(0x17c)]))+')'),!0x1):!0x0;}l(se,jk(0xfa));function te(i,v){const jq=jk,a=N(i);return(a?.[jq(0x16c)]?.[d]??a?.[jq(0x17d)]?.[d])===void 0x0?(console[jq(0x105)](jq(0x11d)+d+jq(0x15f)+g(i)),!0x1):(console[jq(0x105)](jq(0x14a)+d+jq(0x138)+i+')'),w(v,[jq(0x166),d],{'cwd':i,'stdio':jq(0x16e)})[jq(0x134)]!==0x0?(console[jq(0x10f)](jq(0x155)),!0x1):!0x0);}l(te,jk(0x10a));function R(v,a){const jO=jk,x=N(v);if(x!==void 0x0){const p=x[jO(0x137)]?.[jO(0x18e)]?.[jO(0x130)]??[],r=p[jO(0x1a7)](u=>!P[jO(0x17b)](u));if(r[jO(0x158)]!==p[jO(0x158)]&&(x[jO(0x137)]={...x[jO(0x137)]??{},'profile':{...x[jO(0x137)]?.[jO(0x18e)]??{},'bundles':r}},$(c(v,jO(0x147)),JSON[jO(0x162)](x,null,0x2)+'\x0a'),console[jO(0x105)](jO(0x121)+p[jO(0x1a7)](u=>P[jO(0x17b)](u))[jO(0x1a6)](',\x20'))),a!==void 0x0){for(const u of[...P,...L])x[jO(0x16c)]?.[u]===void 0x0&&x[jO(0x17d)]?.[u]===void 0x0||w(a,[jO(0x166),u],{'cwd':v,'stdio':jO(0x16e)});}}for(const j0 of L){const j1=j0[jO(0x17e)](0xd),j2=c(v,jO(0x1a9),jO(0x144),j1);f(j2)&&(y(j2,{'recursive':!0x0,'force':!0x0}),console[jO(0x105)](jO(0x13c)+j0));}ie(v);}l(R,jk(0x171));function T(){const jy=jk;for(const o of V){const i=c(m,o);f(i)&&(y(i,{'recursive':!0x0,'force':!0x0}),console[jy(0x105)](jy(0x13d)+i));}}l(T,jk(0x15a));function ie(j0){const jn=jk,j1=c(j0,jn(0x124));if(!f(j1))return;const j2=k(j1,jn(0x192)),j3=jn(0xfb);if(!j2[jn(0x17b)](j3)&&!new RegExp(jn(0x176)+A+jn(0x152),'m')[jn(0x120)](j2))return;const j4=j2[jn(0x165)]('\x0a')[jn(0xfd)](j9=>j9[jn(0x126)](/\r$/,'')),j5=j4[jn(0x15d)](j9=>j9[jn(0x196)]()===jn(0x176)+A);let j6=j5,j7=j5+0x1;if(j5===-0x1)j6=j4[jn(0x15d)](j9=>j9[jn(0x196)]()===j3),j7=j6+0x1;else{const j9=l(jS=>jS[jn(0x158)]-jS[jn(0x149)]()[jn(0x158)],jn(0x157)),jj=j9(j4[j5]);for(let jS=j5-0x1;jS>=0x0;jS-=0x1){const jL=j4[jS][jn(0x196)]();if(jL!==''){if(jL===jn(0xf9)&&j9(j4[jS])<jj){j6=jS;break;}if(j9(j4[jS])<jj)break;}}for(let jX=j5+0x1;jX<j4[jn(0x158)];jX+=0x1){const jB=j4[jX][jn(0x196)]();if(jB!==''){if(j9(j4[jX])>jj){j7=jX+0x1;continue;}if(jB===jn(0xf9)||j9(j4[jX])>j9(j4[j6])){j7=jX+0x1;continue;}break;}}j6>0x0&&j4[j6-0x1][jn(0x196)]()===j3&&(j6-=0x1);}if(j6===-0x1)return;const j8=[...j4[jn(0x17e)](0x0,j6),...j4[jn(0x17e)](j7)];for(;j8[jn(0x158)]>0x0&&j8[j8[jn(0x158)]-0x1][jn(0x196)]()==='';)j8[jn(0x179)]();j8[jn(0x158)]===0x0?(y(j1,{'force':!0x0}),console[jn(0x105)](jn(0x191))):($(j1,j8[jn(0x1a6)]('\x0a')+'\x0a'),console[jn(0x105)](jn(0x187)+j1));}l(ie,jk(0x12a));function re(o){const jw=jk,i=c(o,jw(0x1a9),d,jw(0x147));if(f(i))try{return JSON[jw(0x163)](k(i,jw(0x192)))[jw(0x19c)];}catch{return;}}l(re,jk(0x116));function I(){const jo=jk;for(const o of[E,c(E,'..')])try{return JSON[jo(0x163)](k(c(o,jo(0x147)),jo(0x192)))[jo(0x19c)];}catch{}return jo(0x1a4);}l(I,jk(0x190));function le(){const jd=jk,v=K(jd(0x111))??d+'@'+I(),a=H();a===void 0x0&&(console[jd(0x10f)](jd(0x12c)),process[jd(0x135)](0x1));let x=M();const p=C(),j0=ee(p);for(const j3 of j0)x[jd(0x17b)](j3)||x[jd(0x14e)](j3);const j1=G(x,p);j1===void 0x0&&process[jd(0x135)](0x1),x=j1,x[jd(0x158)]===0x0&&(console[jd(0x10f)](jd(0x104)),process[jd(0x135)](0x1)),p[jd(0x158)]>0x0&&console[jd(0x105)](jd(0x167)+p[jd(0x1a6)](','));let j2=0x0;for(const j4 of x){if(console[jd(0x105)](jd(0x17f)+j4),R(j4,a),!se(j4,v,a)){j2+=0x1;continue;}ne(j4);const j5=re(j4);console[jd(0x105)](jd(0x110)+d+(j5===void 0x0?'':'\x20'+j5)+jd(0x168));}j2===0x0&&T(),console[jd(0x105)](''),j2>0x0&&(console[jd(0x10f)](jd(0x10b)+j2+jd(0x139)),process[jd(0x135)](0x1)),console[jd(0x105)](jd(0x169)),console[jd(0x105)](jd(0x10e)),console[jd(0x105)](''),console[jd(0x105)](jd(0x198)),console[jd(0x105)](jd(0x184)),console[jd(0x105)](jd(0x15e));}l(le,jk(0x10d));function ce(){const jP=jk;console[jP(0x105)](jP(0x1a0)),console[jP(0x105)](jP(0x127)+m);const i=H(),v=C(),a=G(M(),v);if(a===void 0x0&&process[jP(0x135)](0x1),a[jP(0x158)]===0x0)console[jP(0x105)](jP(0x14c));else{for(const p of a)console[jP(0x105)](jP(0x17f)+p),i===void 0x0?console[jP(0x10f)](jP(0x159)):te(p,i),oe(p),R(p,i);}const x=c(m,U);f(x)&&(y(x,{'recursive':!0x0,'force':!0x0}),console[jP(0x105)](jP(0x13e)+x)),T(),console[jP(0x105)](''),console[jP(0x105)](jP(0x16d)),console[jP(0x105)](jP(0x109)+c(m,jP(0x18f))+jP(0x1a5));}l(ce,jk(0x16b));function ae(){const jf=jk;console[jf(0x105)](jf(0x173));}function h(){const jJ=['icdINjmG','C3bLyW','kg5VBMuP','D3vRB25N','D2fSBhbHCgvYCW','icaGie9Uig9SzgvYihj1BNrPBwvZihrOzsbWBhvNAw4Gy2fUBM90ig1VDw50oIb0AguGCgfUzwWGC3rHExmGAgLKzgvUigfUzcb0AguGCM91DgvZidqWnc4','Aw5ZDgfSBgvKvMvYC2LVBG','C2vSzwn0uhjVzMLSzxm','mtiZnJqYotDQsg54ywy','CgXHDgzVCM0','Dg9gAxHLza','B3b0Aw9U','yxjTB3j5lwv4Cg9YDhm','icdcTYa','zgvZA3rVCa','D2HPy2G','DgvZDa','icdINjmGzhjVChbLzcbSzwDHy3KGyNvUzgXLig5HBwuOCYKG','icHPBNn0ywXSCYa','DxnHz2u','y29YzgLZlNbHDgnOlNLTBa','mtK4nJHqyxr6DwK','CMvWBgfJzq','icbOyxjUzxnZigHVBwu6ia','CMvHze1HBMLMzxn0','otqYvuvmzvnQ','CMvTB3zLtgvNywn5ugf0y2HsB3C','ywrKqNvUzgXL','icdINjyGCg5WBsbUB3qGzM91BMqG4OcuigeGChjVzMLSzsbPBNn0ywXSieLtigeGCg5WBsbKzxbLBMrLBMn5lcbZBYbWBNbTigLZihjLCxvPCMvK','ls12zxjZAw9U','ig5VDcbZzwXLy3rLzcbPBIa','zgvMAw5LuhjVCgvYDhK','yNvUzgXLCW','qgrLzxbZzwvRlwfPl2rZAa','ywrK','nJCWvKnPvNLX','C3rHDhvZ','zxHPDa','BwfPBG','zhnO','icaOAw4G','ihbYB2zPBguOCYKGzMfPBgvKiokaLcbZzwuGDgHLihbUCg0GB3v0Chv0igfIB3zL','ls11BMLUC3rHBgW','icaGie1VDMuGBgfYz2uGyMXVyNmGB3v0ig9MihrOzsbZzxr0Aw5NCYbKB2n1BwvUDcbVCIb0AguGy2XPzw50ig1HEsbLBNrLCIbYzwnVDMvYEsbTB2rLlG','icdINjmGCMvTB3zLzcbSzwDHy3KG','icdINjmGCMvTB3zLzcbSzwDHy3KGzgf0ysa','icdINjmGCMvTB3zLzca','ogjAvvPKzW','icdINjmGy3jLyxrLzcbWCM9MAwXLia','CMvTB3zLqNvUzgXL','zhnOlxn3AxrJAgjSywrL','DwKTC3DPDgnOyMXHzgu','qgrLzxbZzwvRlwfP','mtjNA1roANC','zhnOlxbYB2zPBguT','CgfJA2fNzs5QC29U','icaOCg9ZDgLUC3rHBgWGAg9VAYdIGjqGBM8GChjVzMLSzsbPBNn0ywXSigHLCMuP','DhjPBvn0yxj0','icbWBNbTihjLBw92zsa','mJC5oda4mM5pyvzmvG','icdcTYbUBYbWCM9MAwXLCYbMB3vUzcdIGjqGBM90AgLUzYb0BYb1BMLUC3rHBgW','C2LNBMfSia','ChvZAa','igLUia','igfSCMvHzhKGC2vSzwn0zwqGAw4G','D2HLCMu','xhmQja','Cg5WBq','ls1WCM9MAwXLpq','icdINjyGCg5WBsbYzw1VDMuGzMfPBgvKiokaLcbYzw1VDMLUzYb0AguGzgLYzwn0B3j5igrPCMvJDgX5','qgrLzxbZzwvRlwfPl2rZAc13zwiTyxbW','Aw5Kzw50t2y','BgvUz3rO','icdIMQaGCg5WBsbUB3qGzM91BMqG4OcuigrYB3bWAw5NihrOzsbIDw5KBguGC2vSzwn0Aw9UlcbSzwf2Aw5NihrOzsbKzxbLBMrLBMn5','y2XLyw5mzwDHy3LeyxrH','mtm4odfmrLnprwq','D2vI','zMLUzeLUzgv4','icbtzxr0Aw5NCYdIHPiG5O+s5lU2lcb3AgvYzsb0AguGAgfYBMvZCYbWBhvNAw4GBwfUywDLCIbJyw4GDg9Nz2XLigL0lG','igLZig5VDcbHigrLy2XHCMvKigrLCgvUzgvUy3KGB2yG','icHPBNrLCM5HBcbbueKGz2vUzxjHDgLVBIaWlJiPlG','qgrLzxbZzwvRlwfPl2rZAc1JBgLLBNqTDwKTC3DPDgnOyMXHzgu','C3rYAw5NAwz5','CgfYC2u','AgfZ','C3bSAxq','CMvTB3zL','icbZy29WztOGls1WCM9MAwXLia','ihjLywr5icHOB3n0igj1BMrSzsaRihDLyIbWyw5LBcK','icbozxH0ihn0zxbZoG','ChjVzMLSzxm','Dw5PBNn0ywXS','zgvWzw5Kzw5JAwvZ','icbeB25LlIbuAguGCgX1z2LUigfUzcbPDhmGzgf0ysbHCMuGCMvTB3zLzdSGCMvSyxvUy2GGrfniierLC2T0B3aGDg8GCMvMCMvZAc4','Aw5OzxjPDa','D2LUmZi','lMrZAa','y2XLyw5mzwDHy3LjBNn0ywXS','C3rYAw5N','vxnHz2u6ihD1A29UzYbBB3b0Aw9UC10Gw3vUAw5ZDgfSBf0kcKLUC3rHBgXZihrOzsbKC2GTCgX1z2LUlxD1A29UzYbWBhvNAw4GyNvUzgXLigLUDg8GzxzLCNKGAgfYBMvZCYbWCM9MAwXLicHVCIb0AguGB25LcM5HBwvKigj5ic0TChjVzMLSzsK6ihbUCg0GywrKicSGyNvUzgXLihjLz2LZDhjHDgLVBI4GtM90AgLUzYbPCYbJAgfUz2vKihvUDgLScNrOzsbPBNn0ywXSigfJDhvHBgX5ihn0yxj0CYWGC28Gls1OzwXWlY0TDMvYC2LVBIbHCMuGywX3yxLZihnHzMuGDg8GCNvUlGOkt3b0Aw9UCZOkicaTlxbYB2zPBguGpg5HBwu+icaGAw5ZDgfSBcbPBNrVig9UzsbWCM9MAwXLig9UBhKGkgrLzMf1Bhq6igfSBcbWCM9MAwXLCYKkicaTlxnWzwmGphnWzwm+icaGicaGAw5ZDgfSBcbHBIbLEhbSAwnPDcbZCgvJoIbUCg0GBMfTzsWGBg9JywWGCgf0AcWGDgfYyMfSBcbVCIbNAxqkicaGicaGicaGicaGicaGicaGicaGywrKCMvZCYaOzgvMyxvSDdOGzhnOlxbSDwDPBI13DwTVBMDapgLUC3rHBgXLCIb2zxjZAw9UpIKkicaTlxbVC3rPBNn0ywXSicaGicaGDgHLig5WBsbWB3n0Aw5ZDgfSBcbOB29RicHKB2vZig5VDgHPBMCGyNKGAxrZzwXMkqOGic1OlcaTlwHLBhaGicaGicaGicbZAg93ihrOAxmGAgvSCaOGic12lcaTlxzLCNnPB24GicaGicbZAg93ihrOzsbPBNn0ywXSzxiGDMvYC2LVBGOkq29TBwfUzhm6cIaGDw5PBNn0ywXSicaGicaGicaGihjLBw92zsb0AguGCgX1z2LUlcbPDhmGyNvUzgXLihjVDYbHBMqGAxrZigrHDgek','C2v0DgLUz3mUEwfTBa','C3DPDgnOyMXHzgu','lsbPzdOG','CgfYC2vjBNq','l3bHy2THz2uUANnVBG','Cg9W','ls1WB3n0Aw5ZDgfSBa','Aw5JBhvKzxm','C2LNBMfS','zgv2rgvWzw5Kzw5JAwvZ','C2XPy2u','icbWCM9MAwXLoIa','BM9KztPMCW','yxjNDG','BMfTzq','mtHjuLLoExa','icbuAguGCgX1z2LUigLZigfSC28GBgLZDgvKigfZicjKC2GTCgX1z2LUlxD1A29UzYiGB24GDgHLihnPzgvIyxiG5O+s5lU2ihbHz2uGlW','ls1OzwXW','ls1WCM9MAwXL','icdINjmGCMvTB3zLzcbSzwDHy3KGCgfUzwWGCM93igzYB20G','tuiG4Ocuig92zxiGDgHLidrnqIbJBgLLBNqGBgLTAxqU','zhnOlxbSDwDPBI13DwTVBMCTy2XP','BM9KztPWyxrO','zgv0zwn0sgfYBMvZC1zLCNnPB24','icdINjmGDw5ZzwXLy3rLzcbIDw5KBguG','ody5mdzTywrJrNO','ChjVzMLSzq','C2TPBgXZ','CgfJA2fNzvzLCNnPB24','icdINjmGCMvTB3zLzcbSzwDHy3KGCgfUzwWGCM93icHWyxrJAcbMAwXLigLZigvTChr5lcbKzwXLDgvKkq','DxrMoa','BM9KztPJAgLSzf9WCM9JzxnZ','icbWBNbTigfKzca','zMLUzfbYB2zPBgvZ','DhjPBq','odaYmti1oufhuwPMvG','icbuAguGCgfUzwWGAxmGyxqGu2v0DgLUz3mG4OAsifD1A29UzYaOyM9VAYbPy29Uks4','icdIMQaGDgHPCYbWBhvNAw4GyNvPBgqGDgfYz2v0CYbazgvLChnLzwSTywKVzhnOid49ia','icdINjmGC2vSzwn0zwqGyNvUzgXLia','AgvSCa','DMvYC2LVBG','mtmYmtK5odb4uwPLzu8','icaGigf2ywLSywjSzsbWCM9MAwXLCZOG','zMLUzfbUCg0','zhnOlxbSDwDPBI13DwTVBMCGDw5PBNn0ywXSzxi','qgrLzxbZzwvRlwfPl2rZAc1IyxnL','C3rHCNrZv2L0Aa','C29Tzq','mc4WlJa','igfYzsbRzxb0ig9Uihb1CNbVC2uUkq','AM9PBG','zMLSDgvY','icdIMQaGC2v0DgLUz3mUEwfTBcbPCYa','BM9Kzv9TB2r1BgvZ','icdINjyGCg5WBsbHzgqGzMfPBgvKicHLEgL0ia','zMXHzW','lsbPBNnLCNq6','ywrKrgvWzw5Kzw5JEq','iYbqCM9TChqTu2TPBgXbCM1VCNKGy2XPzw50ihbHBMvSlG','AgvHBhrOq2HLy2S','BwfW','BM9KztPVCW','zhnOlxbSDwDPBI13DwTVBMC','zhnOlxbSDwDPBI13DwTVBMCGAw5ZDgfSBgvY','icbOyxjUzxnZoIbazgvLChnLzwSTywKVzhnOia','igLZig5VDcb2ywXPzcbku09oiokaLcbMAxGGAxqGzMLYC3q','CMvXDwvZDgvKuhjVzMLSzxm','icdINjyGBM8GChjVzMLSzxmGyxzHAwXHyMXL','Bg9N','qgrLzxbZzwvRlwfPl2rZAc1ZD2L0y2HIBgfKzq','icdINjyGBM8GC3vJAcbWCM9MAwXLoIa','zw5ZDxjLuhjVzMLSzxm','icaOu2TPBgXZigv4DhjHy3rLzcb1BMrLCIa','CMvTB3zLrgvWzw5Kzw5JEq','icdINjyG','AgfYBMvZC0nOzwnR','Aw5ZDgfSBa','icaGigrZAcb3zwiGicaGicaGicaGicaOB3iGCMvSyxvUy2GGDgHLiertscbezxnRDg9WignSAwvUDcK','zxjYB3i'];h=function(){return jJ;};return h();}l(ae,jk(0x123));function de(){const jU=jk;if(S('-h',jU(0x185),jU(0x19b))){ae();return;}if(S('-v',jU(0x12d))){console[jU(0x105)](Y+'\x20'+I()+jU(0x122)+d+'@'+I()+')');return;}if(console[jU(0x105)](jU(0x100)),console[jU(0x105)](jU(0x127)+m),S(jU(0x17a))){console[jU(0x105)](jU(0x148));return;}if(S(jU(0x16b),jU(0x13a))){ce();return;}Q(),Z(),le();}l(de,jk(0x136)),de();
2
+ 'use strict';const Ru=x;(function(s,i){const RD=x,h=s();while(!![]){try{const o=-parseInt(RD(0x18d))/0x1*(-parseInt(RD(0x183))/0x2)+parseInt(RD(0x14b))/0x3+parseInt(RD(0x125))/0x4*(-parseInt(RD(0x133))/0x5)+parseInt(RD(0x129))/0x6*(parseInt(RD(0x15b))/0x7)+-parseInt(RD(0x13f))/0x8*(parseInt(RD(0x197))/0x9)+parseInt(RD(0x19d))/0xa+-parseInt(RD(0x118))/0xb*(parseInt(RD(0x145))/0xc);if(o===i)break;else h['push'](h['shift']());}catch(a){h['push'](h['shift']());}}}(u,0xa2eb9));var W=Object[Ru(0x12f)],l=(s,i)=>W(s,Ru(0x182),{'value':i,'configurable':!0x0});const {existsSync:f,mkdirSync:O,readFileSync:k,readdirSync:q,realpathSync:B,rmSync:y,writeFileSync:$}=require(Ru(0x180)),{homedir:D}=require(Ru(0xfe)),{basename:g,dirname:_,join:c}=require(Ru(0x18a)),{execFileSync:F,spawnSync:w}=require(Ru(0x193)),E=__dirname,d=Ru(0xff),Y=Ru(0x189),P=[Ru(0x142),Ru(0x106)],L=[Ru(0x106),Ru(0x161)],A=Ru(0x143),U=Ru(0x113),V=[Ru(0x175),Ru(0x114),Ru(0x11c)],m=process.env.DSH_HOME??c(D(),Ru(0x170)),b=c(m,Ru(0x16a)),J=c(m,Ru(0x174)),z=0x4*0x400*0x400;function S(...s){const RL=Ru;return process[RL(0x181)][RL(0x17e)](0x2)[RL(0x1a3)](i=>s[RL(0x17b)](i));}function x(R,Y){R=R-0xf8;const C=u();let Z=C[R];if(x['MsMzHc']===undefined){var Q=function(P){const F='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let s='',z='';for(let y=0x0,O,M,i=0x0;M=P['charAt'](i++);~M&&(O=y%0x4?O*0x40+M:M,y++%0x4)?s+=String['fromCharCode'](0xff&O>>(-0x2*y&0x6)):0x0){M=F['indexOf'](M);}for(let h=0x0,S=s['length'];h<S;h++){z+='%'+('00'+s['charCodeAt'](h)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(z);};x['mBKxin']=Q,x['escNUp']={},x['MsMzHc']=!![];}const D=C[0x0];x['OaHqwf']!==D&&(x['escNUp']={},x['OaHqwf']=D);const L=x['escNUp'][R];return L===undefined?(Z=x['mBKxin'](Z),x['escNUp'][R]=Z):Z=L,Z;}l(S,Ru(0xf8));function K(i){const Rx=Ru,h=process[Rx(0x181)][Rx(0x17e)](0x2);for(let a=0x0;a<h[Rx(0x158)];a+=0x1){const p=h[a];if(p==='--'+i){const v=h[a+0x1];return v!==void 0x0&&!v[Rx(0x1a2)]('-')?v:void 0x0;}if(p[Rx(0x1a2)]('--'+i+'='))return p[Rx(0x17e)](i[Rx(0x158)]+0x3);}}l(K,Ru(0x11b));function C(){const RP=Ru,i=[],h=process[RP(0x181)][RP(0x17e)](0x2);for(let a=0x0;a<h[RP(0x158)];a+=0x1){const p=h[a];if(p===RP(0x186)||p==='-p'){const v=h[a+0x1];v!==void 0x0&&!v[RP(0x1a2)]('-')&&(i[RP(0x14e)](...v[RP(0x165)](',')),a+=0x1);continue;}p[RP(0x1a2)](RP(0x154))&&i[RP(0x14e)](...p[RP(0x17e)](0xa)[RP(0x165)](','));}return i[RP(0xfd)](r=>r[RP(0x196)]())[RP(0x1a7)](r=>r!=='');}l(C,Ru(0x103));function Q(){const RF=Ru;if(!f(J))return;const s=k(J,RF(0x192))[RF(0x158)];s>z&&(console[RF(0x10f)](RF(0x1a8)+(s/0x400/0x400)[RF(0x11a)](0x1)+RF(0x188)),console[RF(0x10f)](RF(0x13b)));}l(Q,Ru(0xfc));const j=[0x0,0x2,0x0];function X(){const Rs=Ru;try{const h=process[Rs(0x119)]===Rs(0x16f)?Rs(0x151):Rs(0x11f),a=F(h,[Rs(0x137)],{'encoding':Rs(0x192)})[Rs(0x165)]('\x0a')[0x0][Rs(0x196)]();if(a==='')return;let p=_(B(a));for(let v=0x0;v<0x8;v+=0x1){const R0=c(p,Rs(0x147));if(f(R0)){const R2=JSON[Rs(0x163)](k(R0,Rs(0x192)));if(R2[Rs(0x182)]===Rs(0x131))return R2[Rs(0x19c)];}const R1=_(p);if(R1===p)break;p=R1;}}catch{}}l(X,Ru(0x18b));function Z(){const Rz=Ru,s=X();if(s===void 0x0)return;console[Rz(0x105)](Rz(0x101)+s);const i=s[Rz(0x126)](/^[^0-9]*/,'')[Rz(0x165)]('.')[Rz(0xfd)](h=>Number[Rz(0x177)](h,0xa)||0x0);(i[0x0]<j[0x0]||i[0x0]===j[0x0]&&i[0x1]<j[0x1])&&(console[Rz(0x10f)](Rz(0x199)+j[Rz(0x1a6)]('.')+Rz(0x160)),console[Rz(0x10f)](Rz(0x115)));}l(Z,Ru(0x10c));function H(){const Ry=Ru;for(const s of[process.env.DSH_PNPM,Ry(0x153)][Ry(0x1a7)](i=>typeof i==Ry(0x172)&&i!==''))if(w(s,[Ry(0x12d)],{'encoding':Ry(0x192)})[Ry(0x134)]===0x0)return s;}l(H,Ru(0x19f));function M(){const RO=Ru;if(!f(b))return[];const s=[];for(const i of q(b)){const h=c(b,i);f(c(h,RO(0x147)))&&f(c(h,RO(0x1a9)))&&s[RO(0x14e)](h);}return s;}l(M,Ru(0x195));function ee(h=[]){const RM=Ru;f(b)||O(b,{'recursive':!0x0});const a=[{'name':RM(0x15c),'bundles':[RM(0x1a1),RM(0x156)]},{'name':RM(0x11e),'bundles':[RM(0x1a1),RM(0x156)]}],p=h[RM(0x1a7)](R1=>!a[RM(0x1a3)](R2=>R2[RM(0x182)]===R1));for(const R1 of p)a[RM(0x14e)]({'name':R1,'bundles':[RM(0x1a1),RM(0x156)]});const v=h[RM(0x158)]===0x0?a:a[RM(0x1a7)](R2=>h[RM(0x17b)](R2[RM(0x182)])),R0=[];for(const R2 of v){const R3=c(b,R2[RM(0x182)]);O(c(R3,RM(0x1a9)),{'recursive':!0x0});const R4=c(R3,RM(0x147));f(R4)||($(R4,JSON[RM(0x162)]({'name':RM(0x146)+R2[RM(0x182)],'private':!0x0,'dependencies':{},'dsh':{'profile':{'bundles':R2[RM(0x130)]}}},null,0x2)),console[RM(0x105)](RM(0x140)+R3)),R0[RM(0x14e)](R3);}return R0;}l(ee,Ru(0x108));function G(h,a){const Ri=Ru;if(a[Ri(0x158)]===0x0)return h;const p=h[Ri(0x1a7)](R0=>a[Ri(0x17b)](g(R0))),v=new Set(p[Ri(0xfd)](R0=>g(R0))),r=a[Ri(0x1a7)](R0=>!v[Ri(0x164)](R0));if(r[Ri(0x158)]>0x0){console[Ri(0x10f)](Ri(0x107)+r[Ri(0x1a6)](',\x20'));const R0=h[Ri(0xfd)](R1=>g(R1));console[Ri(0x10f)](Ri(0x19e)+(R0[Ri(0x158)]>0x0?R0[Ri(0x1a6)](',\x20'):Ri(0x112)));}if(p[Ri(0x158)]!==0x0)return p;}l(G,Ru(0x117));function N(s){const Rh=Ru,i=c(s,Rh(0x147));if(f(i))try{return JSON[Rh(0x163)](k(i,Rh(0x192)));}catch{console[Rh(0x10f)](Rh(0x10b)+i+Rh(0x102));return;}}l(N,Ru(0x128));function ne(s){const RS=Ru,i=N(s);if(i===void 0x0)return;const h=i[RS(0x137)]?.[RS(0x18e)]?.[RS(0x130)]??[];if(h[RS(0x17b)](d)){console[RS(0x105)](RS(0x11d)+d+RS(0x150)+g(s)+RS(0x178));return;}h[RS(0x14e)](d),i[RS(0x137)]={...i[RS(0x137)]??{},'profile':{...i[RS(0x137)]?.[RS(0x18e)]??{},'bundles':h}},$(c(s,RS(0x147)),JSON[RS(0x162)](i,null,0x2)+'\x0a'),console[RS(0x105)](RS(0x19a)+d+RS(0x14f)+g(s)+RS(0x178));}l(ne,Ru(0x12b));function oe(s){const RJ=Ru,i=N(s);if(i===void 0x0)return;const h=i[RJ(0x137)]?.[RJ(0x18e)]?.[RJ(0x130)]??[];if(!h[RJ(0x17b)](d)){console[RJ(0x105)](RJ(0x11d)+d+RJ(0x12e)+g(s)+RJ(0x178));return;}const a=h[RJ(0x1a7)](p=>p!==d);i[RJ(0x137)]={...i[RJ(0x137)]??{},'profile':{...i[RJ(0x137)]?.[RJ(0x18e)]??{},'bundles':a}},$(c(s,RJ(0x147)),JSON[RJ(0x162)](i,null,0x2)+'\x0a'),console[RJ(0x105)](RJ(0x18c)+d+RJ(0x14f)+g(s)+RJ(0x178));}l(oe,Ru(0x141));function se(s,i,h){const RN=Ru;console[RN(0x105)](RN(0x194)+i+RN(0x138)+s+')');const a=w(h,[RN(0x132),i],{'cwd':s,'stdio':RN(0x16e)});return a[RN(0x134)]!==0x0?(console[RN(0x10f)](RN(0x1aa)+(a[RN(0x134)]??RN(0x14d)+String(a[RN(0x17c)]))+')'),!0x1):!0x0;}l(se,Ru(0xfa));function te(s,i){const RA=Ru,h=N(s);return(h?.[RA(0x16c)]?.[d]??h?.[RA(0x17d)]?.[d])===void 0x0?(console[RA(0x105)](RA(0x11d)+d+RA(0x15f)+g(s)),!0x1):(console[RA(0x105)](RA(0x14a)+d+RA(0x138)+s+')'),w(i,[RA(0x166),d],{'cwd':s,'stdio':RA(0x16e)})[RA(0x134)]!==0x0?(console[RA(0x10f)](RA(0x155)),!0x1):!0x0);}l(te,Ru(0x10a));function R(h,a){const Rq=Ru,p=N(h);if(p!==void 0x0){const v=p[Rq(0x137)]?.[Rq(0x18e)]?.[Rq(0x130)]??[],r=v[Rq(0x1a7)](R0=>!P[Rq(0x17b)](R0));if(r[Rq(0x158)]!==v[Rq(0x158)]&&(p[Rq(0x137)]={...p[Rq(0x137)]??{},'profile':{...p[Rq(0x137)]?.[Rq(0x18e)]??{},'bundles':r}},$(c(h,Rq(0x147)),JSON[Rq(0x162)](p,null,0x2)+'\x0a'),console[Rq(0x105)](Rq(0x121)+v[Rq(0x1a7)](R0=>P[Rq(0x17b)](R0))[Rq(0x1a6)](',\x20'))),a!==void 0x0){for(const R0 of[...P,...L])p[Rq(0x16c)]?.[R0]===void 0x0&&p[Rq(0x17d)]?.[R0]===void 0x0||w(a,[Rq(0x166),R0],{'cwd':h,'stdio':Rq(0x16e)});}}for(const R1 of L){const R2=R1[Rq(0x17e)](0xd),R3=c(h,Rq(0x1a9),Rq(0x144),R2);f(R3)&&(y(R3,{'recursive':!0x0,'force':!0x0}),console[Rq(0x105)](Rq(0x13c)+R1));}ie(h);}l(R,Ru(0x171));function T(){const Rm=Ru;for(const s of V){const i=c(m,s);f(i)&&(y(i,{'recursive':!0x0,'force':!0x0}),console[Rm(0x105)](Rm(0x13d)+i));}}l(T,Ru(0x15a));function ie(R0){const Ro=Ru,R1=c(R0,Ro(0x124));if(!f(R1))return;const R2=k(R1,Ro(0x192)),R3=Ro(0xfb);if(!R2[Ro(0x17b)](R3)&&!new RegExp(Ro(0x176)+A+Ro(0x152),'m')[Ro(0x120)](R2))return;const R4=R2[Ro(0x165)]('\x0a')[Ro(0xfd)](R9=>R9[Ro(0x126)](/\r$/,'')),R5=R4[Ro(0x15d)](R9=>R9[Ro(0x196)]()===Ro(0x176)+A);let R6=R5,R7=R5+0x1;if(R5===-0x1)R6=R4[Ro(0x15d)](R9=>R9[Ro(0x196)]()===R3),R7=R6+0x1;else{const R9=l(RY=>RY[Ro(0x158)]-RY[Ro(0x149)]()[Ro(0x158)],Ro(0x157)),RR=R9(R4[R5]);for(let RY=R5-0x1;RY>=0x0;RY-=0x1){const RC=R4[RY][Ro(0x196)]();if(RC!==''){if(RC===Ro(0xf9)&&R9(R4[RY])<RR){R6=RY;break;}if(R9(R4[RY])<RR)break;}}for(let RZ=R5+0x1;RZ<R4[Ro(0x158)];RZ+=0x1){const RQ=R4[RZ][Ro(0x196)]();if(RQ!==''){if(R9(R4[RZ])>RR){R7=RZ+0x1;continue;}if(RQ===Ro(0xf9)||R9(R4[RZ])>R9(R4[R6])){R7=RZ+0x1;continue;}break;}}R6>0x0&&R4[R6-0x1][Ro(0x196)]()===R3&&(R6-=0x1);}if(R6===-0x1)return;const R8=[...R4[Ro(0x17e)](0x0,R6),...R4[Ro(0x17e)](R7)];for(;R8[Ro(0x158)]>0x0&&R8[R8[Ro(0x158)]-0x1][Ro(0x196)]()==='';)R8[Ro(0x179)]();R8[Ro(0x158)]===0x0?(y(R1,{'force':!0x0}),console[Ro(0x105)](Ro(0x191))):($(R1,R8[Ro(0x1a6)]('\x0a')+'\x0a'),console[Ro(0x105)](Ro(0x187)+R1));}l(ie,Ru(0x12a));function re(s){const Rc=Ru,i=c(s,Rc(0x1a9),d,Rc(0x147));if(f(i))try{return JSON[Rc(0x163)](k(i,Rc(0x192)))[Rc(0x19c)];}catch{return;}}l(re,Ru(0x116));function I(){const RW=Ru;for(const s of[E,c(E,'..')])try{return JSON[RW(0x163)](k(c(s,RW(0x147)),RW(0x192)))[RW(0x19c)];}catch{}return RW(0x1a4);}l(I,Ru(0x190));function le(){const RE=Ru,a=K(RE(0x111))??d+'@'+I(),p=H();p===void 0x0&&(console[RE(0x10f)](RE(0x12c)),process[RE(0x135)](0x1));let v=M();const R0=C(),R1=ee(R0);for(const R4 of R1)v[RE(0x17b)](R4)||v[RE(0x14e)](R4);const R2=G(v,R0);R2===void 0x0&&process[RE(0x135)](0x1),v=R2,v[RE(0x158)]===0x0&&(console[RE(0x10f)](RE(0x104)),process[RE(0x135)](0x1)),R0[RE(0x158)]>0x0&&console[RE(0x105)](RE(0x167)+R0[RE(0x1a6)](','));let R3=0x0;for(const R5 of v){if(console[RE(0x105)](RE(0x17f)+R5),R(R5,p),!se(R5,a,p)){R3+=0x1;continue;}ne(R5);const R6=re(R5);console[RE(0x105)](RE(0x110)+d+(R6===void 0x0?'':'\x20'+R6)+RE(0x168));}R3===0x0&&T(),console[RE(0x105)](''),R3>0x0&&(console[RE(0x10f)](RE(0x10b)+R3+RE(0x139)),process[RE(0x135)](0x1)),console[RE(0x105)](RE(0x169)),console[RE(0x105)](RE(0x10e)),console[RE(0x105)](''),console[RE(0x105)](RE(0x198)),console[RE(0x105)](RE(0x184)),console[RE(0x105)](RE(0x15e));}l(le,Ru(0x10d));function ce(){const RV=Ru;console[RV(0x105)](RV(0x1a0)),console[RV(0x105)](RV(0x127)+m);const i=H(),h=C(),a=G(M(),h);if(a===void 0x0&&process[RV(0x135)](0x1),a[RV(0x158)]===0x0)console[RV(0x105)](RV(0x14c));else{for(const v of a)console[RV(0x105)](RV(0x17f)+v),i===void 0x0?console[RV(0x10f)](RV(0x159)):te(v,i),oe(v),R(v,i);}const p=c(m,U);f(p)&&(y(p,{'recursive':!0x0,'force':!0x0}),console[RV(0x105)](RV(0x13e)+p)),T(),console[RV(0x105)](''),console[RV(0x105)](RV(0x16d)),console[RV(0x105)](RV(0x109)+c(m,RV(0x18f))+RV(0x1a5));}l(ce,Ru(0x16b));function ae(){const RK=Ru;console[RK(0x105)](RK(0x173));}function u(){const Ra=['icdINjmG','C3bLyW','kg5VBMuP','D3vRB25N','D2fSBhbHCgvYCW','icaGie9Uig9SzgvYihj1BNrPBwvZihrOzsbWBhvNAw4Gy2fUBM90ig1VDw50oIb0AguGCgfUzwWGC3rHExmGAgLKzgvUigfUzcb0AguGCM91DgvZidqWnc4','Aw5ZDgfSBgvKvMvYC2LVBG','C2vSzwn0uhjVzMLSzxm','mtiZnJqYotDQsg54ywy','CgXHDgzVCM0','Dg9gAxHLza','B3b0Aw9U','yxjTB3j5lwv4Cg9YDhm','icdcTYa','zgvZA3rVCa','D2HPy2G','DgvZDa','icdINjmGzhjVChbLzcbSzwDHy3KGyNvUzgXLig5HBwuOCYKG','icHPBNn0ywXSCYa','DxnHz2u','y29YzgLZlNbHDgnOlNLTBa','mtK4nJHqyxr6DwK','CMvWBgfJzq','icbOyxjUzxnZigHVBwu6ia','CMvHze1HBMLMzxn0','otqYvuvmzvnQ','CMvTB3zLtgvNywn5ugf0y2HsB3C','ywrKqNvUzgXL','icdINjyGCg5WBsbUB3qGzM91BMqG4OcuigeGChjVzMLSzsbPBNn0ywXSieLtigeGCg5WBsbKzxbLBMrLBMn5lcbZBYbWBNbTigLZihjLCxvPCMvK','ls12zxjZAw9U','ig5VDcbZzwXLy3rLzcbPBIa','zgvMAw5LuhjVCgvYDhK','yNvUzgXLCW','qgrLzxbZzwvRlwfPl2rZAa','ywrK','nJCWvKnPvNLX','C3rHDhvZ','zxHPDa','BwfPBG','zhnO','icaOAw4G','ihbYB2zPBguOCYKGzMfPBgvKiokaLcbZzwuGDgHLihbUCg0GB3v0Chv0igfIB3zL','ls11BMLUC3rHBgW','icaGie1VDMuGBgfYz2uGyMXVyNmGB3v0ig9MihrOzsbZzxr0Aw5NCYbKB2n1BwvUDcbVCIb0AguGy2XPzw50ig1HEsbLBNrLCIbYzwnVDMvYEsbTB2rLlG','icdINjmGCMvTB3zLzcbSzwDHy3KG','icdINjmGCMvTB3zLzcbSzwDHy3KGzgf0ysa','icdINjmGCMvTB3zLzca','ogjAvvPKzW','icdINjmGy3jLyxrLzcbWCM9MAwXLia','CMvTB3zLqNvUzgXL','zhnOlxn3AxrJAgjSywrL','DwKTC3DPDgnOyMXHzgu','qgrLzxbZzwvRlwfP','mtjNA1roANC','zhnOlxbYB2zPBguT','CgfJA2fNzs5QC29U','icaOCg9ZDgLUC3rHBgWGAg9VAYdIGjqGBM8GChjVzMLSzsbPBNn0ywXSigHLCMuP','DhjPBvn0yxj0','icbWBNbTihjLBw92zsa','mJC5oda4mM5pyvzmvG','icdcTYbUBYbWCM9MAwXLCYbMB3vUzcdIGjqGBM90AgLUzYb0BYb1BMLUC3rHBgW','C2LNBMfSia','ChvZAa','igLUia','igfSCMvHzhKGC2vSzwn0zwqGAw4G','D2HLCMu','xhmQja','Cg5WBq','ls1WCM9MAwXLpq','icdINjyGCg5WBsbYzw1VDMuGzMfPBgvKiokaLcbYzw1VDMLUzYb0AguGzgLYzwn0B3j5igrPCMvJDgX5','qgrLzxbZzwvRlwfPl2rZAc13zwiTyxbW','Aw5Kzw50t2y','BgvUz3rO','icdIMQaGCg5WBsbUB3qGzM91BMqG4OcuigrYB3bWAw5NihrOzsbIDw5KBguGC2vSzwn0Aw9UlcbSzwf2Aw5NihrOzsbKzxbLBMrLBMn5','y2XLyw5mzwDHy3LeyxrH','mtm4odfmrLnprwq','D2vI','zMLUzeLUzgv4','icbtzxr0Aw5NCYdIHPiG5O+s5lU2lcb3AgvYzsb0AguGAgfYBMvZCYbWBhvNAw4GBwfUywDLCIbJyw4GDg9Nz2XLigL0lG','igLZig5VDcbHigrLy2XHCMvKigrLCgvUzgvUy3KGB2yG','icHPBNrLCM5HBcbbueKGz2vUzxjHDgLVBIaWlJiPlG','qgrLzxbZzwvRlwfPl2rZAc1JBgLLBNqTDwKTC3DPDgnOyMXHzgu','C3rYAw5NAwz5','CgfYC2u','AgfZ','C3bSAxq','CMvTB3zL','icbZy29WztOGls1WCM9MAwXLia','ihjLywr5icHOB3n0igj1BMrSzsaRihDLyIbWyw5LBcK','icbozxH0ihn0zxbZoG','ChjVzMLSzxm','Dw5PBNn0ywXS','zgvWzw5Kzw5JAwvZ','icbeB25LlIbuAguGCgX1z2LUigfUzcbPDhmGzgf0ysbHCMuGCMvTB3zLzdSGCMvSyxvUy2GGrfniierLC2T0B3aGDg8GCMvMCMvZAc4','Aw5OzxjPDa','D2LUmZi','lMrZAa','y2XLyw5mzwDHy3LjBNn0ywXS','C3rYAw5N','vxnHz2u6ihD1A29UzYbBB3b0Aw9UC10Gw3vUAw5ZDgfSBf0kcKLUC3rHBgXZihrOzsbKC2GTCgX1z2LUlxD1A29UzYbWBhvNAw4GyNvUzgXLigLUDg8GzxzLCNKGAgfYBMvZCYbWCM9MAwXLicHVCIb0AguGB25LcM5HBwvKigj5ic0TChjVzMLSzsK6ihbUCg0GywrKicSGyNvUzgXLihjLz2LZDhjHDgLVBI4GtM90AgLUzYbPCYbJAgfUz2vKihvUDgLScNrOzsbPBNn0ywXSigfJDhvHBgX5ihn0yxj0CYWGC28Gls1OzwXWlY0TDMvYC2LVBIbHCMuGywX3yxLZihnHzMuGDg8GCNvUlGOkt3b0Aw9UCZOkicaTlxbYB2zPBguGpg5HBwu+icaGAw5ZDgfSBcbPBNrVig9UzsbWCM9MAwXLig9UBhKGkgrLzMf1Bhq6igfSBcbWCM9MAwXLCYKkicaTlxnWzwmGphnWzwm+icaGicaGAw5ZDgfSBcbHBIbLEhbSAwnPDcbZCgvJoIbUCg0GBMfTzsWGBg9JywWGCgf0AcWGDgfYyMfSBcbVCIbNAxqkicaGicaGicaGicaGicaGicaGicaGywrKCMvZCYaOzgvMyxvSDdOGzhnOlxbSDwDPBI13DwTVBMDapgLUC3rHBgXLCIb2zxjZAw9UpIKkicaTlxbVC3rPBNn0ywXSicaGicaGDgHLig5WBsbWB3n0Aw5ZDgfSBcbOB29RicHKB2vZig5VDgHPBMCGyNKGAxrZzwXMkqOGic1OlcaTlwHLBhaGicaGicaGicbZAg93ihrOAxmGAgvSCaOGic12lcaTlxzLCNnPB24GicaGicbZAg93ihrOzsbPBNn0ywXSzxiGDMvYC2LVBGOkq29TBwfUzhm6cIaGDw5PBNn0ywXSicaGicaGicaGihjLBw92zsb0AguGCgX1z2LUlcbPDhmGyNvUzgXLihjVDYbHBMqGAxrZigrHDgek','C2v0DgLUz3mUEwfTBa','C3DPDgnOyMXHzgu','lsbPzdOG','CgfYC2vjBNq','l3bHy2THz2uUANnVBG','Cg9W','ls1WB3n0Aw5ZDgfSBa','Aw5JBhvKzxm','C2LNBMfS','zgv2rgvWzw5Kzw5JAwvZ','C2XPy2u','icbWCM9MAwXLoIa','BM9KztPMCW','yxjNDG','BMfTzq','mtHjuLLoExa','icbuAguGCgX1z2LUigLZigfSC28GBgLZDgvKigfZicjKC2GTCgX1z2LUlxD1A29UzYiGB24GDgHLihnPzgvIyxiG5O+s5lU2ihbHz2uGlW','ls1OzwXW','ls1WCM9MAwXL','icdINjmGCMvTB3zLzcbSzwDHy3KGCgfUzwWGCM93igzYB20G','tuiG4Ocuig92zxiGDgHLidrnqIbJBgLLBNqGBgLTAxqU','zhnOlxbSDwDPBI13DwTVBMCTy2XP','BM9KztPWyxrO','zgv0zwn0sgfYBMvZC1zLCNnPB24','icdINjmGDw5ZzwXLy3rLzcbIDw5KBguG','ody5mdzTywrJrNO','ChjVzMLSzq','C2TPBgXZ','CgfJA2fNzvzLCNnPB24','icdINjmGCMvTB3zLzcbSzwDHy3KGCgfUzwWGCM93icHWyxrJAcbMAwXLigLZigvTChr5lcbKzwXLDgvKkq','DxrMoa','BM9KztPJAgLSzf9WCM9JzxnZ','icbWBNbTigfKzca','zMLUzfbYB2zPBgvZ','DhjPBq','odaYmti1oufhuwPMvG','icbuAguGCgfUzwWGAxmGyxqGu2v0DgLUz3mG4OAsifD1A29UzYaOyM9VAYbPy29Uks4','icdIMQaGDgHPCYbWBhvNAw4GyNvPBgqGDgfYz2v0CYbazgvLChnLzwSTywKVzhnOid49ia','icdINjmGC2vSzwn0zwqGyNvUzgXLia','AgvSCa','DMvYC2LVBG','mtmYmtK5odb4uwPLzu8','icaGigf2ywLSywjSzsbWCM9MAwXLCZOG','zMLUzfbUCg0','zhnOlxbSDwDPBI13DwTVBMCGDw5PBNn0ywXSzxi','qgrLzxbZzwvRlwfPl2rZAc1IyxnL','C3rHCNrZv2L0Aa','C29Tzq','mc4WlJa','igfYzsbRzxb0ig9Uihb1CNbVC2uUkq','AM9PBG','zMLSDgvY','icdIMQaGC2v0DgLUz3mUEwfTBcbPCYa','BM9Kzv9TB2r1BgvZ','icdINjyGCg5WBsbHzgqGzMfPBgvKicHLEgL0ia','zMXHzW','lsbPBNnLCNq6','ywrKrgvWzw5Kzw5JEq','iYbqCM9TChqTu2TPBgXbCM1VCNKGy2XPzw50ihbHBMvSlG','AgvHBhrOq2HLy2S','BwfW','BM9KztPVCW','zhnOlxbSDwDPBI13DwTVBMC','zhnOlxbSDwDPBI13DwTVBMCGAw5ZDgfSBgvY','icbOyxjUzxnZoIbazgvLChnLzwSTywKVzhnOia','igLZig5VDcb2ywXPzcbku09oiokaLcbMAxGGAxqGzMLYC3q','CMvXDwvZDgvKuhjVzMLSzxm','icdINjyGBM8GChjVzMLSzxmGyxzHAwXHyMXL','Bg9N','qgrLzxbZzwvRlwfPl2rZAc1ZD2L0y2HIBgfKzq','icdINjyGBM8GC3vJAcbWCM9MAwXLoIa','zw5ZDxjLuhjVzMLSzxm','icaOu2TPBgXZigv4DhjHy3rLzcb1BMrLCIa','CMvTB3zLrgvWzw5Kzw5JEq','icdINjyG','AgfYBMvZC0nOzwnR','Aw5ZDgfSBa','icaGigrZAcb3zwiGicaGicaGicaGicaOB3iGCMvSyxvUy2GGDgHLiertscbezxnRDg9WignSAwvUDcK','zxjYB3i'];u=function(){return Ra;};return u();}l(ae,Ru(0x123));function de(){const RX=Ru;if(S('-h',RX(0x185),RX(0x19b))){ae();return;}if(S('-v',RX(0x12d))){console[RX(0x105)](Y+'\x20'+I()+RX(0x122)+d+'@'+I()+')');return;}if(console[RX(0x105)](RX(0x100)),console[RX(0x105)](RX(0x127)+m),S(RX(0x17a))){console[RX(0x105)](RX(0x148));return;}if(S(RX(0x16b),RX(0x13a))){ce();return;}Q(),Z(),le();}l(de,Ru(0x136)),de();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-wukong-cli",
3
- "version": "0.22.0",
3
+ "version": "0.22.2",
4
4
  "description": "Installer for the dsh-plugin-wukong DeepSeek Harness plugin bundle (prompts + skills + MCP + wallpaper manager)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -19,11 +19,13 @@
19
19
  "scripts": {
20
20
  "postinstall": "node ./dist/cli.cjs --postinstall",
21
21
  "build": "node scripts/build-lib.mjs",
22
+ "build:dev": "node scripts/build-lib.mjs --dev",
22
23
  "build:shipped": "node scripts/build-shipped.mjs",
23
24
  "test": "node --test",
24
25
  "typecheck": "node scripts/typecheck.mjs",
25
26
  "verify": "node scripts/verify-shipped.mjs && node scripts/typecheck.mjs && node --test",
26
- "link:dev": "node scripts/link-dev.mjs"
27
+ "link:dev": "node scripts/link-dev.mjs",
28
+ "prepublishOnly": "node scripts/build-lib.mjs --check"
27
29
  },
28
30
  "devDependencies": {
29
31
  "@types/node": "^26.6.4",