dsh-plugin 1.1.1 → 1.1.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.
Files changed (64) hide show
  1. package/README.en.md +5 -5
  2. package/README.md +5 -5
  3. package/client/client.js +242 -153
  4. package/client/client.js.map +1 -1
  5. package/lib/http/routes.js +15 -8
  6. package/lib/index.js +4 -0
  7. package/lib/services/install-types.js +8 -2
  8. package/lib/services/install.js +1 -1
  9. package/lib/services/installed-versions.js +5 -1
  10. package/lib/services/loader.js +4 -0
  11. package/lib/services/npm-resolve.js +4 -0
  12. package/lib/services/pending-restart.js +1 -1
  13. package/lib/services/preflight.js +9 -4
  14. package/lib/services/profile.js +30 -3
  15. package/lib/services/progress.js +4 -0
  16. package/lib/services/task-queue.js +13 -7
  17. package/lib/types/index.d.ts +4 -0
  18. package/lib/types/services/install-types.d.ts +10 -4
  19. package/lib/types/services/install.d.ts +5 -1
  20. package/lib/types/services/loader.d.ts +4 -0
  21. package/lib/types/services/pending-restart.d.ts +8 -2
  22. package/lib/types/services/profile.d.ts +4 -2
  23. package/lib/types/services/progress.d.ts +4 -0
  24. package/package.json +1 -1
  25. package/src/client/components/AboutModal.tsx +4 -0
  26. package/src/client/components/CatalogControls.tsx +4 -0
  27. package/src/client/components/CatalogHeader.tsx +4 -0
  28. package/src/client/components/CatalogList.tsx +4 -0
  29. package/src/client/components/CategoryTabs.tsx +4 -0
  30. package/src/client/components/Dropdown.tsx +4 -0
  31. package/src/client/components/HubUpdateModal.tsx +4 -0
  32. package/src/client/components/NotificationsModal.tsx +4 -0
  33. package/src/client/components/PluginCard.tsx +5 -1
  34. package/src/client/components/PluginHubSection.tsx +5 -1
  35. package/src/client/components/ProgressView.tsx +4 -0
  36. package/src/client/components/icons.tsx +4 -0
  37. package/src/client/components/modals.tsx +4 -0
  38. package/src/client/hooks/useCatalog.ts +9 -5
  39. package/src/client/hooks/useTaskQueue.ts +13 -9
  40. package/src/client/index.tsx +4 -0
  41. package/src/client/lib/catalog.ts +27 -6
  42. package/src/client/lib/env.ts +4 -0
  43. package/src/client/lib/failures.ts +5 -1
  44. package/src/client/lib/format.ts +4 -0
  45. package/src/client/lib/renderMarkdown.ts +4 -0
  46. package/src/client/locales.ts +7 -1
  47. package/src/client/styles/Dropdown.module.css +5 -1
  48. package/src/client/styles/Header.module.css +5 -1
  49. package/src/client/styles/List.module.css +5 -1
  50. package/src/client/styles/Modal.module.css +5 -1
  51. package/src/client/styles/tokens.module.css +5 -1
  52. package/src/client/types.ts +5 -1
  53. package/src/server/http/routes.ts +14 -8
  54. package/src/server/index.ts +4 -0
  55. package/src/server/services/install-types.ts +10 -4
  56. package/src/server/services/install.ts +5 -1
  57. package/src/server/services/installed-versions.ts +5 -1
  58. package/src/server/services/loader.ts +4 -0
  59. package/src/server/services/npm-resolve.ts +4 -0
  60. package/src/server/services/pending-restart.ts +8 -2
  61. package/src/server/services/preflight.ts +9 -4
  62. package/src/server/services/profile.ts +27 -3
  63. package/src/server/services/progress.ts +4 -0
  64. package/src/server/services/task-queue.ts +13 -7
package/client/client.js CHANGED
@@ -6,7 +6,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6
6
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
7
  let react = require("react");
8
8
  //#region src/client/locales.ts
9
- /** zh/en dictionaries for the DSH-Plugin Hub settings section. */
9
+ /**
10
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
11
+ * Website: https://dsh-plugin.org
12
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
13
+ *
14
+ * zh/en dictionaries for the DSH-Plugin Hub settings section.
15
+ */
10
16
  const zh = {
11
17
  nav: "插件中心",
12
18
  title: "DSH-Plugin Hub",
@@ -278,43 +284,43 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
278
284
  document.head.appendChild(tag);
279
285
  }
280
286
  var Header_module_css_default = {
281
- "githubIcon": "qikqja_githubIcon",
282
- "installedBtnActive": "qikqja_installedBtnActive",
283
- "taglineLink": "qikqja_taglineLink",
284
287
  "tagline": "qikqja_tagline",
288
+ "filterResults": "qikqja_filterResults",
289
+ "adBanner": "qikqja_adBanner",
285
290
  "installedBtn": "qikqja_installedBtn",
286
- "installedBtnDisabled": "qikqja_installedBtnDisabled",
287
- "searchRow": "qikqja_searchRow",
288
- "segCount": "qikqja_segCount",
289
- "resultCount": "qikqja_resultCount",
291
+ "version": "qikqja_version",
292
+ "brandTitle": "qikqja_brandTitle",
293
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
290
294
  "title": "qikqja_title",
291
- "segCountActive": "qikqja_segCountActive",
295
+ "segCount": "qikqja_segCount",
296
+ "headerTitleRow": "qikqja_headerTitleRow",
292
297
  "githubLink": "qikqja_githubLink",
298
+ "headerRight": "qikqja_headerRight",
299
+ "adArrow": "qikqja_adArrow",
293
300
  "tabActive": "qikqja_tabActive",
294
- "failBadge": "qikqja_failBadge",
295
- "header": "qikqja_header",
301
+ "copyIcon": "qikqja_copyIcon",
296
302
  "tab": "qikqja_tab",
303
+ "controls": "qikqja_controls",
304
+ "installedBtnDisabled": "qikqja_installedBtnDisabled",
305
+ "failBadge": "qikqja_failBadge",
306
+ "taglineLink": "qikqja_taglineLink",
297
307
  "search": "qikqja_search",
308
+ "header": "qikqja_header",
309
+ "githubIcon": "qikqja_githubIcon",
298
310
  "tabCount": "qikqja_tabCount",
299
- "headerRight": "qikqja_headerRight",
300
- "brandTitle": "qikqja_brandTitle",
301
- "controls": "qikqja_controls",
302
- "filterResults": "qikqja_filterResults",
303
- "adArrow": "qikqja_adArrow",
304
- "root": "qikqja_root",
305
- "adBanner": "qikqja_adBanner",
311
+ "failBtn": "qikqja_failBtn",
306
312
  "adBadge": "qikqja_adBadge",
307
313
  "logoIcon": "qikqja_logoIcon",
308
- "version": "qikqja_version",
309
- "versionBtn": "qikqja_versionBtn",
310
- "failBtn": "qikqja_failBtn",
314
+ "searchRow": "qikqja_searchRow",
315
+ "installedBtnActive": "qikqja_installedBtnActive",
311
316
  "adText": "qikqja_adText",
312
- "aboutBtn": "qikqja_aboutBtn",
313
- "headerTitleRow": "qikqja_headerTitleRow",
314
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
315
- "copyIcon": "qikqja_copyIcon",
317
+ "root": "qikqja_root",
316
318
  "tabs": "qikqja_tabs",
317
- "langBtn": "qikqja_langBtn"
319
+ "aboutBtn": "qikqja_aboutBtn",
320
+ "segCountActive": "qikqja_segCountActive",
321
+ "langBtn": "qikqja_langBtn",
322
+ "resultCount": "qikqja_resultCount",
323
+ "versionBtn": "qikqja_versionBtn"
318
324
  };
319
325
  //#endregion
320
326
  //#region src/client/lib/failures.ts
@@ -462,14 +468,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
462
468
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
463
469
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
464
470
  */
465
- const PLUGIN_VERSION = "1.1.1";
471
+ const PLUGIN_VERSION = "1.1.2";
466
472
  /** dsh-plugin.org 中文页挂在 /zh/ 前缀下,英文在根路径。 */
467
473
  function langPathOf(lang) {
468
474
  return lang === "zh" ? "zh/" : "";
469
475
  }
470
476
  /**
471
477
  * 官网详情页两级路径:/plugins/{ownerSlug}/{slug};
472
- * 旧数据缺 ownerSlug 时从 repo 推导(卡片详情按钮与弹窗来源行共用)。
478
+ * 缺 ownerSlug 时从 repo 推导(卡片详情按钮与弹窗来源行共用)。
473
479
  */
474
480
  function pluginDetailUrl(plugin, langPath) {
475
481
  const repo = plugin.source?.repo ?? "";
@@ -504,7 +510,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
504
510
  "",
505
511
  `## [DSH-Plugin 插件中心](${SITE_URL}) · 安装 Plugin 失败错误信息`,
506
512
  `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件中心的安装程序自动生成,随本次安装失败一并提交。`,
507
- `- 实际执行的安装命令:\`${command ?? `dsh plugin${env?.profile ? ` --profile ${env.profile}` : ""} add github:${repo}`}\``,
513
+ `- 实际执行的安装命令:\`${command ?? `dsh plugin${env?.profile ? ` --profile ${env.profile}` : ""} add git+https://github.com/${repo}.git`}\``,
508
514
  `- 执行结果:安装失败,未能安装该插件。`,
509
515
  ...attempts && attempts.length > 0 ? [
510
516
  "",
@@ -514,7 +520,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
514
520
  .../\[packaging\]/i.test(message) ? [
515
521
  "",
516
522
  "## 安装方式说明",
517
- "DSH 插件支持两种官方安装通道:`dsh plugin add <npm-package>`(npm 分发,需发布完整构建产物)与 `dsh plugin add github:owner/repo`(git 直装,仓库需提交构建产物或在 package.json 提供 `prepare` 脚本)。当前插件的分发物缺少 package.json 声明的入口文件,请按所用通道补齐后重新发布。"
523
+ "DSH 插件支持两种官方安装通道:`dsh plugin add <npm-package>`(npm 分发,需发布完整构建产物)与 `dsh plugin add git+https://github.com/owner/repo.git`(Git 直装,仓库需提交构建产物或在 package.json 提供 `prepare` 脚本)。当前插件的分发物缺少 package.json 声明的入口文件,请按所用通道补齐后重新发布。"
518
524
  ] : [],
519
525
  "",
520
526
  "## Environment",
@@ -619,10 +625,25 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
619
625
  via: "github"
620
626
  };
621
627
  }
622
- /** 展示用安装命令(复制/弹窗):npm 通道显示包名,git 通道显示 github: 源。 */
628
+ /** 展示用安装命令(复制/弹窗):npm 通道显示包名,git 通道显示显式 HTTPS URL。 */
623
629
  function installCommandOf(p, withProfile = false) {
624
630
  const { target, via } = installTargetOf(p);
625
- return via === "npm" ? `dsh plugin${withProfile ? " --profile web" : ""} add ${target}` : `dsh plugin${withProfile ? " --profile web" : ""} add github:${target}`;
631
+ return via === "npm" ? `dsh plugin${withProfile ? " --profile web" : ""} add ${target}` : `dsh plugin${withProfile ? " --profile web" : ""} add git+https://github.com/${target}.git`;
632
+ }
633
+ /** Normalize a task/install target to its owner/repo display identity. */
634
+ function repoFromInstallTarget(value) {
635
+ const input = value.trim();
636
+ if (/^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/.test(input)) return input;
637
+ for (const pattern of [
638
+ /^github:([^/]+)\/([^/]+)$/i,
639
+ /^(?:git\+)?https:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\.git)?(?:[?#].*)?$/i,
640
+ /^(?:git\+)?ssh:\/\/(?:git@)?github\.com\/([^/]+)\/([^/]+?)(?:\.git)?(?:[?#].*)?$/i,
641
+ /^git@github\.com:([^/]+)\/([^/]+?)(?:\.git)?(?:[?#].*)?$/i
642
+ ]) {
643
+ const match = pattern.exec(input);
644
+ if (match !== null) return `${match[1]}/${match[2]}`;
645
+ }
646
+ return value;
626
647
  }
627
648
  const CATEGORY_LABELS = {
628
649
  interface: {
@@ -733,6 +754,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
733
754
  //#endregion
734
755
  //#region src/client/hooks/useCatalog.ts
735
756
  /**
757
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
758
+ * Website: https://dsh-plugin.org
759
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
760
+ *
736
761
  * Catalog data + view state for the Plugin Hub section.
737
762
  *
738
763
  * Owns the online-data pipeline (live fetch from dsh-plugin.org), the local
@@ -847,12 +872,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
847
872
  cancelled = true;
848
873
  };
849
874
  }, [reloadKey]);
850
- /** 插件是否已安装:匹配 installed spec 中的 `github:<owner>/<repo>`,或 npm 通道安装的依赖包名;命中返回 npm 包名。 */
875
+ /** 插件是否已安装:匹配 Git spec 中的 owner/repo,或 npm 通道安装的依赖包名;命中返回 npm 包名。 */
851
876
  const installedName = (p) => {
852
877
  const repo = p.source?.repo;
853
878
  if (!repo) return null;
854
- const needle = `github:${repo.toLowerCase()}`;
855
- for (const [name, spec] of Object.entries(installed)) if (spec.toLowerCase().includes(needle)) return name;
879
+ const needle = repo.toLowerCase();
880
+ for (const [name, spec] of Object.entries(installed)) if (repoFromInstallTarget(spec).toLowerCase() === needle) return name;
856
881
  const pkg = ((p.source?.npmPackage || versions[repo.toLowerCase()]?.npmPackage) ?? "").toLowerCase();
857
882
  if (pkg) {
858
883
  for (const name of Object.keys(installed)) if (name.toLowerCase() === pkg) return name;
@@ -888,7 +913,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
888
913
  */
889
914
  const hubHasUpdate = (() => {
890
915
  if (!hubUpdateInfo) return false;
891
- return hubUpdateInfo.version !== "1.1.1";
916
+ return hubUpdateInfo.version !== "1.1.2";
892
917
  })();
893
918
  /** 当前分类下的插件(「全部」时为整个目录)。 */
894
919
  const categoryPlugins = (0, react.useMemo)(() => {
@@ -970,6 +995,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
970
995
  //#endregion
971
996
  //#region src/client/hooks/useTaskQueue.ts
972
997
  /**
998
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
999
+ * Website: https://dsh-plugin.org
1000
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
1001
+ *
973
1002
  * Background install/remove task queue for the Plugin Hub.
974
1003
  *
975
1004
  * Mirrors the server-side FIFO active queue by polling /active, settles
@@ -1020,7 +1049,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1020
1049
  queueRef.current = next;
1021
1050
  setQueue(next);
1022
1051
  };
1023
- /** 解析服务端待重启列表(`github:` 前缀已去掉,与安装任务的 target 对齐)。 */
1052
+ /** 解析服务端待重启列表(安装目标归一化为 owner/repo,与安装任务对齐)。 */
1024
1053
  const parsePendingRestarts = (value) => {
1025
1054
  if (!Array.isArray(value)) return [];
1026
1055
  const out = [];
@@ -1030,7 +1059,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1030
1059
  if (typeof target !== "string" || target === "") continue;
1031
1060
  const at = x.at;
1032
1061
  out.push({
1033
- target: target.replace(/^github:/, ""),
1062
+ target: repoFromInstallTarget(target),
1034
1063
  kind: x.kind === "uninstall" ? "uninstall" : "install",
1035
1064
  at: typeof at === "number" ? at : 0
1036
1065
  });
@@ -1179,9 +1208,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1179
1208
  next.push({
1180
1209
  id,
1181
1210
  kind: isRemove ? "uninstall" : "install",
1182
- target: typeof a.target === "string" ? a.target.replace(/^github:/, "") : prevTask?.target ?? "",
1211
+ target: typeof a.target === "string" ? repoFromInstallTarget(a.target) : prevTask?.target ?? "",
1183
1212
  desc: prevTask?.desc,
1184
- repo: prevTask?.repo ?? (isRemove ? null : typeof a.target === "string" ? a.target.replace(/^github:/, "") : null),
1213
+ repo: prevTask?.repo ?? (isRemove ? null : typeof a.target === "string" ? repoFromInstallTarget(a.target) : null),
1185
1214
  version: prevTask?.version,
1186
1215
  updatedAt: prevTask?.updatedAt,
1187
1216
  status: a.status === "running" ? "running" : "pending",
@@ -1221,8 +1250,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1221
1250
  applyPending(parsePendingRestarts(data.pendingRestarts));
1222
1251
  const items = (data.tasks ?? []).filter((a) => typeof a.id === "number").map((a) => {
1223
1252
  const isRemove = a.action === "remove";
1224
- const display = typeof a.displayTarget === "string" ? a.displayTarget.replace(/^github:/, "") : "";
1225
- const fallback = typeof a.target === "string" ? a.target.replace(/^github:/, "") : "";
1253
+ const display = typeof a.displayTarget === "string" ? repoFromInstallTarget(a.displayTarget) : "";
1254
+ const fallback = typeof a.target === "string" ? repoFromInstallTarget(a.target) : "";
1226
1255
  return {
1227
1256
  id: a.id,
1228
1257
  kind: isRemove ? "uninstall" : "install",
@@ -1402,107 +1431,111 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1402
1431
  document.head.appendChild(tag);
1403
1432
  }
1404
1433
  var Modal_module_css_default = {
1405
- "modalTitle": "BiQ1zG_modalTitle",
1406
- "errorHint": "BiQ1zG_errorHint",
1407
- "resultCheck": "BiQ1zG_resultCheck",
1408
- "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
1409
- "toastIn": "BiQ1zG_toastIn",
1410
- "modalLabel": "BiQ1zG_modalLabel",
1411
1434
  "resultDesc": "BiQ1zG_resultDesc",
1412
- "modalDesc": "BiQ1zG_modalDesc",
1413
- "pendingRowActions": "BiQ1zG_pendingRowActions",
1414
- "errorCopySoft": "BiQ1zG_errorCopySoft",
1415
- "modalLink": "BiQ1zG_modalLink",
1416
- "overlay": "BiQ1zG_overlay",
1435
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
1436
+ "modalBody": "BiQ1zG_modalBody",
1437
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
1438
+ "queueRowDesc": "BiQ1zG_queueRowDesc",
1439
+ "trustHint": "BiQ1zG_trustHint",
1417
1440
  "uninstallConfirm": "BiQ1zG_uninstallConfirm",
1441
+ "progressText": "BiQ1zG_progressText",
1442
+ "noticeList": "BiQ1zG_noticeList",
1443
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
1444
+ "queueRowHead": "BiQ1zG_queueRowHead",
1445
+ "result": "BiQ1zG_result",
1446
+ "restartNow": "BiQ1zG_restartNow",
1447
+ "modalIn": "BiQ1zG_modalIn",
1448
+ "modalInstall": "BiQ1zG_modalInstall",
1449
+ "errorBox": "BiQ1zG_errorBox",
1450
+ "toastIn": "BiQ1zG_toastIn",
1451
+ "noticeRemove": "BiQ1zG_noticeRemove",
1452
+ "resultTitle": "BiQ1zG_resultTitle",
1453
+ "progressHead": "BiQ1zG_progressHead",
1454
+ "modal": "BiQ1zG_modal",
1455
+ "modalCmd": "BiQ1zG_modalCmd",
1456
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
1457
+ "modalCmdText": "BiQ1zG_modalCmdText",
1418
1458
  "modalTitleQueued": "BiQ1zG_modalTitleQueued",
1419
- "failHead": "BiQ1zG_failHead",
1420
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
1421
- "progress": "BiQ1zG_progress",
1422
1459
  "queuedHint": "BiQ1zG_queuedHint",
1460
+ "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
1461
+ "progressFill": "BiQ1zG_progressFill",
1462
+ "noticeTextFail": "BiQ1zG_noticeTextFail",
1463
+ "aboutModal": "BiQ1zG_aboutModal",
1464
+ "failList": "BiQ1zG_failList",
1465
+ "modalHead": "BiQ1zG_modalHead",
1466
+ "noticeRow": "BiQ1zG_noticeRow",
1467
+ "toast": "BiQ1zG_toast",
1468
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
1469
+ "failEmpty": "BiQ1zG_failEmpty",
1470
+ "noticeRowOk": "BiQ1zG_noticeRowOk",
1471
+ "aboutMeta": "BiQ1zG_aboutMeta",
1472
+ "resultRestarting": "BiQ1zG_resultRestarting",
1423
1473
  "modalCancel": "BiQ1zG_modalCancel",
1424
- "stripCancel": "BiQ1zG_stripCancel",
1425
- "restartNow": "BiQ1zG_restartNow",
1426
- "result": "BiQ1zG_result",
1427
- "modalRow": "BiQ1zG_modalRow",
1428
- "queueRowBody": "BiQ1zG_queueRowBody",
1429
- "modalInstall": "BiQ1zG_modalInstall",
1430
- "noticeMain": "BiQ1zG_noticeMain",
1431
- "linkIcon": "BiQ1zG_linkIcon",
1474
+ "restartLater": "BiQ1zG_restartLater",
1432
1475
  "noticeTime": "BiQ1zG_noticeTime",
1433
1476
  "queueSection": "BiQ1zG_queueSection",
1434
- "noticeRowOk": "BiQ1zG_noticeRowOk",
1435
- "errorModal": "BiQ1zG_errorModal",
1436
- "aboutMeta": "BiQ1zG_aboutMeta",
1437
- "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
1438
- "noticeRemove": "BiQ1zG_noticeRemove",
1439
- "modalClose": "BiQ1zG_modalClose",
1440
- "progressFillFail": "BiQ1zG_progressFillFail",
1477
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
1478
+ "modalRow": "BiQ1zG_modalRow",
1479
+ "failBigIssue": "BiQ1zG_failBigIssue",
1480
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
1481
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
1482
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
1483
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
1441
1484
  "overlayIn": "BiQ1zG_overlayIn",
1485
+ "modalClose": "BiQ1zG_modalClose",
1486
+ "failRow": "BiQ1zG_failRow",
1487
+ "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
1488
+ "failRepo": "BiQ1zG_failRepo",
1489
+ "noticeHead": "BiQ1zG_noticeHead",
1490
+ "noticeFoot": "BiQ1zG_noticeFoot",
1442
1491
  "aboutContent": "BiQ1zG_aboutContent",
1443
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
1444
- "queueRowPct": "BiQ1zG_queueRowPct",
1445
- "queueRowDesc": "BiQ1zG_queueRowDesc",
1446
- "failList": "BiQ1zG_failList",
1492
+ "errorModal": "BiQ1zG_errorModal",
1493
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
1494
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
1495
+ "progressTrack": "BiQ1zG_progressTrack",
1496
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
1497
+ "progress": "BiQ1zG_progress",
1498
+ "linkIcon": "BiQ1zG_linkIcon",
1447
1499
  "toastFail": "BiQ1zG_toastFail",
1448
- "modalActions": "BiQ1zG_modalActions",
1449
- "progressText": "BiQ1zG_progressText",
1450
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
1451
- "modalCopy": "BiQ1zG_modalCopy",
1452
- "resultRestarting": "BiQ1zG_resultRestarting",
1453
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
1454
- "modalBody": "BiQ1zG_modalBody",
1455
- "failKind": "BiQ1zG_failKind",
1500
+ "modalDesc": "BiQ1zG_modalDesc",
1501
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
1502
+ "queueRowPct": "BiQ1zG_queueRowPct",
1503
+ "resultCheck": "BiQ1zG_resultCheck",
1456
1504
  "queueRowTrack": "BiQ1zG_queueRowTrack",
1457
- "modalCmd": "BiQ1zG_modalCmd",
1458
- "noticeRow": "BiQ1zG_noticeRow",
1459
- "modalCloseIcon": "BiQ1zG_modalCloseIcon",
1460
- "resultTitle": "BiQ1zG_resultTitle",
1461
- "failKindUninstall": "BiQ1zG_failKindUninstall",
1505
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
1506
+ "queueRow": "BiQ1zG_queueRow",
1507
+ "failKindInstall": "BiQ1zG_failKindInstall",
1462
1508
  "failCopy": "BiQ1zG_failCopy",
1463
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
1464
- "queueRowHead": "BiQ1zG_queueRowHead",
1465
- "noticeRowMain": "BiQ1zG_noticeRowMain",
1466
- "failRepo": "BiQ1zG_failRepo",
1467
- "progressFill": "BiQ1zG_progressFill",
1468
- "aboutModal": "BiQ1zG_aboutModal",
1469
- "failedCopyHint": "BiQ1zG_failedCopyHint",
1509
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
1510
+ "modalLabel": "BiQ1zG_modalLabel",
1511
+ "overlay": "BiQ1zG_overlay",
1512
+ "modalActions": "BiQ1zG_modalActions",
1513
+ "queueRowBody": "BiQ1zG_queueRowBody",
1514
+ "modalLink": "BiQ1zG_modalLink",
1470
1515
  "queueRowStatus": "BiQ1zG_queueRowStatus",
1471
- "progressTrack": "BiQ1zG_progressTrack",
1472
- "modalHead": "BiQ1zG_modalHead",
1473
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
1474
- "modal": "BiQ1zG_modal",
1516
+ "stripCancel": "BiQ1zG_stripCancel",
1517
+ "errorTitle": "BiQ1zG_errorTitle",
1518
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
1475
1519
  "modalValue": "BiQ1zG_modalValue",
1476
- "failKindInstall": "BiQ1zG_failKindInstall",
1477
- "noticeFoot": "BiQ1zG_noticeFoot",
1520
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
1521
+ "errorHint": "BiQ1zG_errorHint",
1522
+ "modalCopy": "BiQ1zG_modalCopy",
1478
1523
  "failClear": "BiQ1zG_failClear",
1479
- "queueRow": "BiQ1zG_queueRow",
1480
- "toast": "BiQ1zG_toast",
1481
- "noticeTextOk": "BiQ1zG_noticeTextOk",
1482
- "noticeTextFail": "BiQ1zG_noticeTextFail",
1483
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
1484
- "noticeHead": "BiQ1zG_noticeHead",
1485
- "failPrepareHint": "BiQ1zG_failPrepareHint",
1486
- "trustHint": "BiQ1zG_trustHint",
1487
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
1488
- "progressHead": "BiQ1zG_progressHead",
1489
- "failBigIssue": "BiQ1zG_failBigIssue",
1490
- "failRow": "BiQ1zG_failRow",
1491
1524
  "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
1492
- "queueRowTarget": "BiQ1zG_queueRowTarget",
1493
- "restartLater": "BiQ1zG_restartLater",
1494
- "modalIn": "BiQ1zG_modalIn",
1495
- "errorBox": "BiQ1zG_errorBox",
1496
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
1497
- "noticeList": "BiQ1zG_noticeList",
1498
- "errorTitle": "BiQ1zG_errorTitle",
1499
- "modalCmdText": "BiQ1zG_modalCmdText",
1500
- "failEmpty": "BiQ1zG_failEmpty",
1501
- "noticeBadgeFail": "BiQ1zG_noticeBadgeFail"
1525
+ "noticeMain": "BiQ1zG_noticeMain",
1526
+ "progressFillFail": "BiQ1zG_progressFillFail",
1527
+ "modalTitle": "BiQ1zG_modalTitle",
1528
+ "failHead": "BiQ1zG_failHead",
1529
+ "failKind": "BiQ1zG_failKind",
1530
+ "hubUpdateNotes": "BiQ1zG_hubUpdateNotes"
1502
1531
  };
1503
1532
  //#endregion
1504
1533
  //#region src/client/components/icons.tsx
1505
1534
  /**
1535
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
1536
+ * Website: https://dsh-plugin.org
1537
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
1538
+ *
1506
1539
  * Inline SVG icons used across the client. Icons inherit currentColor so
1507
1540
  * they adapt to themes and disabled states automatically.
1508
1541
  */
@@ -1658,6 +1691,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1658
1691
  //#endregion
1659
1692
  //#region src/client/components/ProgressView.tsx
1660
1693
  /**
1694
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
1695
+ * Website: https://dsh-plugin.org
1696
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
1697
+ *
1661
1698
  * Inline progress block shared by the install and uninstall dialogs:
1662
1699
  * a real percentage bar (server-estimated, client-polled). No live terminal
1663
1700
  * window — pnpm emits nothing during git clone/build, so a log pane would be
@@ -1672,6 +1709,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1672
1709
  //#endregion
1673
1710
  //#region src/client/components/modals.tsx
1674
1711
  /**
1712
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
1713
+ * Website: https://dsh-plugin.org
1714
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
1715
+ *
1675
1716
  * Dialog layer for the Plugin Hub: the install-confirm dialog, the uninstall
1676
1717
  * dialog and the global toast. Both dialogs lock themselves while a mutation
1677
1718
  * or restart is running, then switch to a result view offering an immediate
@@ -1869,6 +1910,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1869
1910
  //#endregion
1870
1911
  //#region src/client/lib/renderMarkdown.ts
1871
1912
  /**
1913
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
1914
+ * Website: https://dsh-plugin.org
1915
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
1916
+ *
1872
1917
  * 轻量 Markdown 渲染器:仅用于 Hub 自我更新的变更记录(Worker 下发的 notes)。
1873
1918
  *
1874
1919
  * 内容由插件作者自己编写、属可信内容,但渲染端仍先整体 HTML 转义,再按
@@ -1956,6 +2001,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1956
2001
  //#endregion
1957
2002
  //#region src/client/components/AboutModal.tsx
1958
2003
  /**
2004
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2005
+ * Website: https://dsh-plugin.org
2006
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2007
+ *
1959
2008
  * 头部「关注我们」弹窗:介绍 DSH-Plugin Hub 是干什么的 + 用户反馈群二维码。
1960
2009
  * 内容以 Markdown 形式由 dsh-update Worker 的 /about 接口下发(key = hub:about),
1961
2010
  * 作者想怎么写就怎么写、随写随推,客户端只负责渲染 —— 非写死。
@@ -1993,6 +2042,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1993
2042
  //#endregion
1994
2043
  //#region src/client/components/HubUpdateModal.tsx
1995
2044
  /**
2045
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2046
+ * Website: https://dsh-plugin.org
2047
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2048
+ *
1996
2049
  * Hub 版本信息 / 自我更新说明弹窗:
1997
2050
  * - 有更新(hasUpdate=true):标题「有新版本」,展示新版本号、发布时间与 Worker 下发的
1998
2051
  * Markdown 变更记录(renderMarkdown 渲染,双语言按界面语言取 {zh,en} 对象),
@@ -2038,6 +2091,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2038
2091
  //#endregion
2039
2092
  //#region src/client/components/NotificationsModal.tsx
2040
2093
  /**
2094
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2095
+ * Website: https://dsh-plugin.org
2096
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2097
+ *
2041
2098
  * Notification-center dialog: a persistent log of every settled install /
2042
2099
  * remove task — successes and failures alike.
2043
2100
  *
@@ -2181,6 +2238,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2181
2238
  //#endregion
2182
2239
  //#region src/client/components/CatalogHeader.tsx
2183
2240
  /**
2241
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2242
+ * Website: https://dsh-plugin.org
2243
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2244
+ *
2184
2245
  * Section header: brand title row (H1 + open-site button) + tagline, followed
2185
2246
  * by the purple ad banner that promotes the catalog stats.
2186
2247
  */
@@ -2239,6 +2300,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2239
2300
  //#endregion
2240
2301
  //#region src/client/components/CategoryTabs.tsx
2241
2302
  /**
2303
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2304
+ * Website: https://dsh-plugin.org
2305
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2306
+ *
2242
2307
  * Category tabs: an "all" chip followed by one chip per catalog category.
2243
2308
  * The "all" chip carries the total plugin count; the per-category chips
2244
2309
  * carry no counts so their widths stay uniform.
@@ -2266,21 +2331,25 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2266
2331
  document.head.appendChild(tag);
2267
2332
  }
2268
2333
  var Dropdown_module_css_default = {
2269
- "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
2270
- "dropdownCount": "B_Gxsq_dropdownCount",
2334
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
2335
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
2336
+ "dropdown": "B_Gxsq_dropdown",
2271
2337
  "dropdownBtn": "B_Gxsq_dropdownBtn",
2272
- "dropdownArrow": "B_Gxsq_dropdownArrow",
2273
- "dropdownPanel": "B_Gxsq_dropdownPanel",
2274
2338
  "dropdownItem": "B_Gxsq_dropdownItem",
2339
+ "dropdownPanel": "B_Gxsq_dropdownPanel",
2340
+ "dropdownCount": "B_Gxsq_dropdownCount",
2275
2341
  "dropdownCountActive": "B_Gxsq_dropdownCountActive",
2342
+ "dropdownArrow": "B_Gxsq_dropdownArrow",
2276
2343
  "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
2277
- "dropdownItemActive": "B_Gxsq_dropdownItemActive",
2278
- "dropdownLabel": "B_Gxsq_dropdownLabel",
2279
- "dropdown": "B_Gxsq_dropdown"
2344
+ "dropdownItemLabel": "B_Gxsq_dropdownItemLabel"
2280
2345
  };
2281
2346
  //#endregion
2282
2347
  //#region src/client/components/Dropdown.tsx
2283
2348
  /**
2349
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2350
+ * Website: https://dsh-plugin.org
2351
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2352
+ *
2284
2353
  * Custom dropdown (native <select> replacement).
2285
2354
  *
2286
2355
  * macOS/浏览器原生下拉无法跟随宿主主题,这里自绘:触发器按钮 + 绝对定位面板,
@@ -2333,6 +2402,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2333
2402
  //#endregion
2334
2403
  //#region src/client/components/CatalogControls.tsx
2335
2404
  /**
2405
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2406
+ * Website: https://dsh-plugin.org
2407
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2408
+ *
2336
2409
  * Toolbar above the list: search input + sort dropdown + installed / not
2337
2410
  * installed filter buttons + the notifications entry. All buttons share the
2338
2411
  * same size (24px high, like the notification entry button).
@@ -2391,36 +2464,36 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2391
2464
  document.head.appendChild(tag);
2392
2465
  }
2393
2466
  var List_module_css_default = {
2394
- "star": "_3XaZHa_star",
2395
- "cardTitle": "_3XaZHa_cardTitle",
2396
- "actions": "_3XaZHa_actions",
2397
- "stateTitle": "_3XaZHa_stateTitle",
2398
2467
  "body": "_3XaZHa_body",
2399
- "installBtn": "_3XaZHa_installBtn",
2400
- "desc": "_3XaZHa_desc",
2468
+ "star": "_3XaZHa_star",
2401
2469
  "footer": "_3XaZHa_footer",
2402
- "topic": "_3XaZHa_topic",
2403
- "installBtnCopied": "_3XaZHa_installBtnCopied",
2404
- "verified": "_3XaZHa_verified",
2470
+ "footLink": "_3XaZHa_footLink",
2471
+ "installBtnUpdate": "_3XaZHa_installBtnUpdate",
2472
+ "updateBadge": "_3XaZHa_updateBadge",
2473
+ "stateTitle": "_3XaZHa_stateTitle",
2474
+ "fork": "_3XaZHa_fork",
2405
2475
  "versionBadge": "_3XaZHa_versionBadge",
2406
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
2407
- "stateDesc": "_3XaZHa_stateDesc",
2476
+ "topic": "_3XaZHa_topic",
2408
2477
  "state": "_3XaZHa_state",
2478
+ "date": "_3XaZHa_date",
2479
+ "cardSide": "_3XaZHa_cardSide",
2480
+ "verified": "_3XaZHa_verified",
2409
2481
  "stats": "_3XaZHa_stats",
2482
+ "installBtn": "_3XaZHa_installBtn",
2483
+ "topics": "_3XaZHa_topics",
2484
+ "stateDesc": "_3XaZHa_stateDesc",
2410
2485
  "categoryBadge": "_3XaZHa_categoryBadge",
2411
- "updateBadge": "_3XaZHa_updateBadge",
2412
- "footLink": "_3XaZHa_footLink",
2413
- "retryBtn": "_3XaZHa_retryBtn",
2414
2486
  "uninstallBtn": "_3XaZHa_uninstallBtn",
2487
+ "cardHead": "_3XaZHa_cardHead",
2415
2488
  "detailBtn": "_3XaZHa_detailBtn",
2416
- "date": "_3XaZHa_date",
2417
- "cardMain": "_3XaZHa_cardMain",
2418
- "topics": "_3XaZHa_topics",
2419
2489
  "list": "_3XaZHa_list",
2420
- "fork": "_3XaZHa_fork",
2421
- "cardHead": "_3XaZHa_cardHead",
2422
- "installBtnUpdate": "_3XaZHa_installBtnUpdate",
2423
- "cardSide": "_3XaZHa_cardSide",
2490
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
2491
+ "actions": "_3XaZHa_actions",
2492
+ "cardTitle": "_3XaZHa_cardTitle",
2493
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
2494
+ "cardMain": "_3XaZHa_cardMain",
2495
+ "desc": "_3XaZHa_desc",
2496
+ "retryBtn": "_3XaZHa_retryBtn",
2424
2497
  "card": "_3XaZHa_card"
2425
2498
  };
2426
2499
  //#endregion
@@ -2444,6 +2517,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2444
2517
  //#endregion
2445
2518
  //#region src/client/components/PluginCard.tsx
2446
2519
  /**
2520
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2521
+ * Website: https://dsh-plugin.org
2522
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2523
+ *
2447
2524
  * One plugin card in the catalog list: name/category/verified badge,
2448
2525
  * description + topics, star/fork/date stats, and the detail/install/
2449
2526
  * uninstall actions.
@@ -2491,6 +2568,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2491
2568
  //#endregion
2492
2569
  //#region src/client/components/CatalogList.tsx
2493
2570
  /**
2571
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2572
+ * Website: https://dsh-plugin.org
2573
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2574
+ *
2494
2575
  * Catalog list: the scrollable container with the loading / failed / empty
2495
2576
  * states, the plugin cards, and the count footer. Resets scroll position when
2496
2577
  * the category or install-status filter changes so the replaced content is
@@ -2530,10 +2611,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2530
2611
  //#endregion
2531
2612
  //#region src/client/components/PluginHubSection.tsx
2532
2613
  /**
2614
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
2615
+ * Website: https://dsh-plugin.org
2616
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
2617
+ *
2533
2618
  * Plugin Hub section: wires the catalog data pipeline, the background task
2534
2619
  * queue and the feedback state together. Data/queue logic lives in hooks/,
2535
2620
  * rendering is delegated to the small presentational components in this
2536
- * folder; only the dialogs/toast and the section-level copy actions remain.
2621
+ * folder; it hosts the dialogs/toast and the section-level copy actions.
2537
2622
  */
2538
2623
  function PluginHubSection({ t: _hostT, locale }) {
2539
2624
  /** 界面语言:默认跟随宿主(系统)语言;右上角按钮可手动切换,切换后以手动选择为准 */
@@ -2800,7 +2885,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2800
2885
  setUninstallPlugin(p);
2801
2886
  }
2802
2887
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
2803
- info: catalog.hubUpdateInfo ?? { version: "1.1.1" },
2888
+ info: catalog.hubUpdateInfo ?? { version: "1.1.2" },
2804
2889
  lang,
2805
2890
  t,
2806
2891
  hasUpdate: catalog.hubHasUpdate,
@@ -2911,6 +2996,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2911
2996
  //#endregion
2912
2997
  //#region src/client/index.tsx
2913
2998
  /**
2999
+ * DSH-Plugin Hub — the community plugin marketplace for DeepSeek Harness.
3000
+ * Website: https://dsh-plugin.org
3001
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
3002
+ *
2914
3003
  * dsh-plugin client entry: wires the Plugin Hub into the host settings via
2915
3004
  * the module-loader bundle (see tsdown.config.ts). All UI logic lives in
2916
3005
  * PluginHubSection; this file only performs the cordis apply wiring.