@michengai/dsh-codex-pet 1.0.2 → 1.0.6

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
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.0.6] - 2026-10-24
4
+
5
+ - Upgrade host admission policy: Declare `engines.dsh: ">=0.2.0-rc.1 <0.3.0-0"` to support the entire DeepSeek Harness `0.2.x` line (including `0.2.0-rc.1` onwards, future alphas, RCs, and stable releases) without requiring routine plugin version bumps.
6
+ - Decouple peerDependencies locks: Broaden all `@deepseek-ai/dsh-*` peer dependencies to the `0.2.x` generation range.
7
+ - Upgrade build-time development dependencies: Synchronize all `@deepseek-ai/dsh-*` devDependencies to latest `0.2.1-rc.3`.
8
+
9
+ ## [1.0.4] - 2026-10-24
10
+
11
+ - Fix e2e assertions and smoke tests for pseudo-element nav icon.
12
+
13
+ ## [1.0.3] - 2026-10-24
14
+
15
+ - Add compatibility with DeepSeek Harness `0.2.1-rc.3` while retaining all existing supported versions.
16
+
3
17
  ## [1.0.2] - 2026-10-19
4
18
 
5
19
  - Settings navigation draws the pet icon with a skin-safe CSS mask. It covers both the native DSH settings dialog and the dsh-codex-ui settings page without rewriting the host SVG.
@@ -1,5 +1,19 @@
1
1
  # 更新日志
2
2
 
3
+ ## [1.0.6] - 2026-10-24
4
+
5
+ - 宿主准入机制全面升级:声明 `engines.dsh: ">=0.2.0-rc.1 <0.3.0-0"`,全面开放对 DeepSeek Harness 整个 `0.2.x` 系列的支持(包含已支持的 `0.2.0-rc.1` 起及后续全部 alpha/rc/正式版),非破坏性宿主升级无需再重复发版。
6
+ - 解除 peerDependencies 逐版本锁定:所有 `@deepseek-ai/dsh-*` peer 依赖统一放宽至 `0.2.x` 代际范围。
7
+ - 升级编译期开发依赖:将全部 `@deepseek-ai/dsh-*` 开发依赖对齐升级至最新 `0.2.1-rc.3`。
8
+
9
+ ## [1.0.4] - 2026-10-24
10
+
11
+ - 修复伪元素导航图标端到端断言与冒烟测试。
12
+
13
+ ## [1.0.3] - 2026-10-24
14
+
15
+ - 新增 DeepSeek Harness `0.2.1-rc.3` 兼容,继续支持此前已声明的宿主版本。
16
+
3
17
  ## [1.0.2] - 2026-10-19
4
18
 
5
19
  - 设置导航的宠物图标改用皮肤安全的 CSS mask,同时覆盖原生 DSH 设置弹窗与 dsh-codex-ui 设置页,不再改写宿主 SVG。
package/README.md CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  </div>
20
20
 
21
- > DSH Codex Pet is a community-maintained pet plugin for DeepSeek Harness (DSH), not an official OpenAI or DeepSeek AI product. From 1.0.1 it supports DSH `0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-rc.1`, and `0.2.1-rc.2`. Earlier hosts and the `0.2.1` alphas are rejected by the version gate, so the plugin will not run; local pet settings and custom pets are not deleted.
21
+ > DSH Codex Pet is a community-maintained pet plugin for DeepSeek Harness (DSH), not an official OpenAI or DeepSeek AI product. From 1.0.1 it supports DSH `0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-rc.1`, `0.2.1-rc.2`, and `0.2.1-rc.3`. Earlier hosts and the `0.2.1` alphas are rejected by the version gate, so the plugin will not run; local pet settings and custom pets are not deleted.
22
22
 
23
23
  ## Features
24
24
 
@@ -74,7 +74,7 @@ For a desktop workbench, download [DSH Codex Desktop](https://github.com/Micheng
74
74
 
75
75
  ## Installation
76
76
 
77
- Supported DeepSeek Harness versions: **`0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-rc.1`, and `0.2.1-rc.2`**. Hosts before `0.2.0` (including the previously supported `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, and `0.1.7-rc.2`) and `0.2.1-alpha.1` through `0.2.1-alpha.5` are rejected by the version gate, and the plugin will not run. If you still use one of those hosts, install `@michengai/dsh-codex-pet@0.1.19` instead of `@latest`. The version gate only refuses to load the plugin. It does not delete pet selection, position, or custom pets under `DSH_HOME/codex-pet`. Make sure the `dsh` command is available. The example uses the `web` profile; replace it with your target profile.
77
+ Supported DeepSeek Harness versions: **`0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-rc.1`, `0.2.1-rc.2`, and `0.2.1-rc.3`**. Hosts before `0.2.0` (including the previously supported `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, and `0.1.7-rc.2`) and `0.2.1-alpha.1` through `0.2.1-alpha.5` are rejected by the version gate, and the plugin will not run. If you still use one of those hosts, install `@michengai/dsh-codex-pet@0.1.19` instead of `@latest`. The version gate only refuses to load the plugin. It does not delete pet selection, position, or custom pets under `DSH_HOME/codex-pet`. Make sure the `dsh` command is available. The example uses the `web` profile; replace it with your target profile.
78
78
 
79
79
  ```powershell
80
80
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
package/README.zh-CN.md CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  </div>
20
20
 
21
- > DSH Codex Pet 是社区维护的 DeepSeek Harness(DSH)宠物插件,并非 OpenAI 或 DeepSeek AI 官方产品。1.0.1 起支持 DSH `0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-rc.1`、`0.2.1-rc.2`。更早的宿主和 `0.2.1` 的 alpha 会被版本门拒绝,插件不会运行;本机宠物配置和自定义宠物不会因此删除。
21
+ > DSH Codex Pet 是社区维护的 DeepSeek Harness(DSH)宠物插件,并非 OpenAI 或 DeepSeek AI 官方产品。1.0.1 起支持 DSH `0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-rc.1`、`0.2.1-rc.2`、`0.2.1-rc.3`。更早的宿主和 `0.2.1` 的 alpha 会被版本门拒绝,插件不会运行;本机宠物配置和自定义宠物不会因此删除。
22
22
 
23
23
  ## 功能概览
24
24
 
@@ -74,7 +74,7 @@
74
74
 
75
75
  ## 安装
76
76
 
77
- 支持的 DeepSeek Harness 版本:**`0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-rc.1`、`0.2.1-rc.2`**。`0.2.0` 之前的宿主(包括此前支持的 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2`)以及 `0.2.1-alpha.1` 至 `0.2.1-alpha.5` 会被版本门拒绝,插件不会运行。仍在使用这些宿主时,请安装 `@michengai/dsh-codex-pet@0.1.19`,不要装 `@latest`。版本门只拒绝加载,不删除 `DSH_HOME/codex-pet` 里的宠物选择、位置和自定义宠物。需要可用的 `dsh` 命令。以下示例使用 `web` profile,请按实际环境替换。
77
+ 支持的 DeepSeek Harness 版本:**`0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-rc.1`、`0.2.1-rc.2`、`0.2.1-rc.3`**。`0.2.0` 之前的宿主(包括此前支持的 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2`)以及 `0.2.1-alpha.1` 至 `0.2.1-alpha.5` 会被版本门拒绝,插件不会运行。仍在使用这些宿主时,请安装 `@michengai/dsh-codex-pet@0.1.19`,不要装 `@latest`。版本门只拒绝加载,不删除 `DSH_HOME/codex-pet` 里的宠物选择、位置和自定义宠物。需要可用的 `dsh` 命令。以下示例使用 `web` profile,请按实际环境替换。
78
78
 
79
79
  ```powershell
80
80
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
package/lib/client.js CHANGED
@@ -333,6 +333,7 @@ var import_react2 = require("react");
333
333
 
334
334
  // src/project-icons.tsx
335
335
  var import_react = __toESM(require("react"), 1);
336
+ var primitives = __toESM(require("@deepseek-ai/dsh-client-ui-primitives"), 1);
336
337
  function GithubMark16() {
337
338
  return import_react.default.createElement(
338
339
  "svg",
@@ -340,16 +341,15 @@ function GithubMark16() {
340
341
  import_react.default.createElement("path", { fill: "currentColor", d: "M8 0a8 8 0 0 0-2.53 15.59c.4.074.547-.173.547-.385 0-.19-.007-.693-.01-1.36-2.226.484-2.695-1.073-2.695-1.073-.364-.924-.89-1.17-.89-1.17-.726-.496.055-.486.055-.486.803.056 1.225.824 1.225.824.714 1.223 1.872.87 2.328.665.072-.517.28-.87.508-1.07-1.777-.202-3.645-.888-3.645-3.956 0-.874.31-1.588.823-2.148-.083-.202-.357-1.017.078-2.12 0 0 .672-.215 2.2.82A7.65 7.65 0 0 1 8 4.8c.68.003 1.365.092 2.004.27 1.527-1.035 2.197-.82 2.197-.82.437 1.103.162 1.918.08 2.12.513.56.822 1.274.822 2.148 0 3.076-1.872 3.752-3.654 3.95.288.248.544.735.544 1.482 0 1.07-.01 1.932-.01 2.195 0 .214.144.463.55.384A8.001 8.001 0 0 0 8 0Z" })
341
342
  );
342
343
  }
344
+ var IconEditOutlineRegular2 = primitives.IconEditOutlineRegular;
343
345
  function FeedbackMark16() {
346
+ if (typeof IconEditOutlineRegular2 === "function") {
347
+ return import_react.default.createElement(IconEditOutlineRegular2, { size: 16 });
348
+ }
344
349
  return import_react.default.createElement(
345
350
  "svg",
346
- { viewBox: "0 0 16 16", width: 16, height: 16, fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": true, focusable: false },
347
- import_react.default.createElement("path", { d: "M10.8239 3.54733V4.78443H4.63437V3.54733H10.8239Z", fill: "currentColor" }),
348
- import_react.default.createElement("path", { d: "M10.8239 6.12629V7.36338H4.63437V6.12629H10.8239Z", fill: "currentColor" }),
349
- import_react.default.createElement("path", { d: "M9.073 8.70524V9.94234H4.63437V8.70524H9.073Z", fill: "currentColor" }),
350
- import_react.default.createElement("path", { d: "M9.13321 0.573526C10.0076 0.573525 10.7179 0.572522 11.285 0.63397C11.8645 0.696791 12.3743 0.831648 12.8193 1.1548C13.0776 1.34246 13.3056 1.57047 13.4933 1.82875C13.8164 2.2737 13.9513 2.7836 14.0141 3.36303C14.0755 3.93015 14.0745 4.64049 14.0745 5.51485V6.1757L12.7327 7.5629V5.51485C12.7327 4.61092 12.732 3.9862 12.6803 3.5081C12.6298 3.0427 12.5379 2.79497 12.4083 2.61654C12.3033 2.47211 12.176 2.34472 12.0315 2.23977C11.8531 2.11016 11.6054 2.01823 11.14 1.96777C10.6618 1.91601 10.0372 1.91539 9.13321 1.91539H6.32658C5.42262 1.91539 4.79796 1.91604 4.31983 1.96777C3.85451 2.01819 3.60672 2.11029 3.42827 2.23977C3.28392 2.34465 3.15643 2.47223 3.0515 2.61654C2.9219 2.79496 2.82997 3.04274 2.7795 3.5081C2.72774 3.9862 2.72712 4.61092 2.72712 5.51485V10.023C2.72712 10.9273 2.72773 11.5525 2.7795 12.0307C2.82992 12.4959 2.92205 12.7429 3.0515 12.9213C3.15645 13.0657 3.28384 13.1931 3.42827 13.2981C3.60676 13.4277 3.85408 13.5206 4.31983 13.5711C4.79797 13.6228 5.42259 13.6234 6.32658 13.6234H6.87057L5.57707 14.9593C5.03527 14.9556 4.57031 14.9467 4.17476 14.9039C3.59508 14.841 3.08558 14.7063 2.64048 14.383C2.38215 14.1953 2.15422 13.9684 1.96653 13.7101C1.64319 13.2649 1.50851 12.7546 1.4457 12.1748C1.38432 11.6076 1.38525 10.8974 1.38525 10.023V5.51485C1.38525 4.64049 1.38426 3.93015 1.4457 3.36303C1.50853 2.78363 1.64341 2.27368 1.96653 1.82875C2.15417 1.57059 2.38228 1.34239 2.64048 1.1548C3.08544 0.831805 3.59533 0.696762 4.17476 0.63397C4.74193 0.572552 5.45218 0.573525 6.32658 0.573526H9.13321Z", fill: "currentColor" }),
351
- import_react.default.createElement("path", { d: "M14.2193 14.9553H10.0124L11.3744 13.6134H14.2193V14.9553Z", fill: "currentColor" }),
352
- import_react.default.createElement("path", { d: "M8.24493 13.3711L7.49015 14.8806C7.40148 15.058 7.58961 15.2461 7.76695 15.1574L9.27651 14.4027L14.6147 9.09934L13.5832 8.06775L8.24493 13.3711Z", fill: "currentColor" })
351
+ { viewBox: "0 0 16 16", width: 16, height: 16, "aria-hidden": true, focusable: false },
352
+ import_react.default.createElement("path", { fill: "currentColor", d: "M11.06 1.94a1.5 1.5 0 0 1 2.12 2.12l-8.5 8.5a1.5 1.5 0 0 1-.64.38l-2.5.71a.5.5 0 0 1-.61-.61l.71-2.5a1.5 1.5 0 0 1 .38-.64l8.5-8.5Z" })
353
353
  );
354
354
  }
355
355
 
@@ -836,7 +836,7 @@ function PluginUpdateHeader({ locale }) {
836
836
  zh2 ? "\u5BA0\u7269" : "Pets",
837
837
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "dcp-version", children: [
838
838
  "v",
839
- "1.0.2"
839
+ "1.0.6"
840
840
  ] })
841
841
  ] }),
842
842
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("nav", { className: "dcp-project-links", children: [
@@ -2107,10 +2107,27 @@ var PAW_MASK = `url("data:image/svg+xml,${encodeURIComponent(
2107
2107
  `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${PAW}</svg>`
2108
2108
  )}")`;
2109
2109
  var PET_NAV_ICON_MARKER = "data-dcp-nav-icon";
2110
- var PET_NAV_ICON_CLASS = "dcp-settings-nav-icon";
2111
2110
  var PET_NAV_ROW_SELECTOR = '[role="dialog"] nav button, .dcu-settings-link';
2112
2111
  var NAV_ICON_STYLE_ID = "dcp-settings-nav-icon-style";
2113
- var NAV_ICON_CSS = `[${PET_NAV_ICON_MARKER}]>svg{display:none!important}.${PET_NAV_ICON_CLASS}{display:inline-block;flex:none;width:16px;height:16px;color:var(--dcu-sidebar-icon,currentColor);background:currentColor;-webkit-mask:${PAW_MASK} center/contain no-repeat;mask:${PAW_MASK} center/contain no-repeat}`;
2112
+ var NAV_ICON_CSS = [
2113
+ `[${PET_NAV_ICON_MARKER}] > svg { display: none !important; }`,
2114
+ `[${PET_NAV_ICON_MARKER}]::before {`,
2115
+ ` content: '';`,
2116
+ ` flex: none;`,
2117
+ ` width: 16px;`,
2118
+ ` height: 16px;`,
2119
+ ` color: var(--dcu-sidebar-icon, currentColor);`,
2120
+ ` background: currentColor;`,
2121
+ ` -webkit-mask: ${PAW_MASK} center / contain no-repeat;`,
2122
+ ` mask: ${PAW_MASK} center / contain no-repeat;`,
2123
+ ` -webkit-mask-repeat: no-repeat;`,
2124
+ ` mask-repeat: no-repeat;`,
2125
+ ` -webkit-mask-position: center;`,
2126
+ ` mask-position: center;`,
2127
+ ` -webkit-mask-size: 16px 16px;`,
2128
+ ` mask-size: 16px 16px;`,
2129
+ `}`
2130
+ ].join("\n");
2114
2131
  function ensureNavIconStyle() {
2115
2132
  if (typeof document === "undefined") return;
2116
2133
  if (document.getElementById(NAV_ICON_STYLE_ID) !== null) return;
@@ -2124,24 +2141,21 @@ function isPetNavRow(button) {
2124
2141
  return label === "\u5BA0\u7269" || label === "Pets";
2125
2142
  }
2126
2143
  function applyPetSettingsIcon(button) {
2127
- if (!isPetNavRow(button)) return false;
2128
- if (button.querySelector(":scope > svg") === null) return false;
2129
- if (button.getAttribute(PET_NAV_ICON_MARKER) === "pet" && button.querySelector(`.${PET_NAV_ICON_CLASS}`) !== null)
2130
- return false;
2131
- const doc = button.ownerDocument;
2132
- if (!doc) return false;
2133
- button.setAttribute(PET_NAV_ICON_MARKER, "pet");
2134
- const icon = doc.createElement("span");
2135
- icon.className = PET_NAV_ICON_CLASS;
2136
- icon.setAttribute("aria-hidden", "true");
2137
- button.prepend(icon);
2138
- return true;
2144
+ const isOwn = isPetNavRow(button);
2145
+ if (isOwn) {
2146
+ if (button.getAttribute(PET_NAV_ICON_MARKER) === "") return false;
2147
+ button.setAttribute(PET_NAV_ICON_MARKER, "");
2148
+ return true;
2149
+ }
2150
+ if (button.hasAttribute(PET_NAV_ICON_MARKER)) {
2151
+ button.removeAttribute(PET_NAV_ICON_MARKER);
2152
+ return true;
2153
+ }
2154
+ return false;
2139
2155
  }
2140
2156
  function restorePetSettingsIcon(button) {
2157
+ if (!button.hasAttribute(PET_NAV_ICON_MARKER)) return false;
2141
2158
  button.removeAttribute(PET_NAV_ICON_MARKER);
2142
- const icon = button.querySelector(`.${PET_NAV_ICON_CLASS}`);
2143
- if (!icon) return false;
2144
- icon.remove();
2145
2159
  return true;
2146
2160
  }
2147
2161
  function observePetSettingsIcon() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michengai/dsh-codex-pet",
3
- "version": "1.0.2",
3
+ "version": "1.0.6",
4
4
  "license": "Apache-2.0",
5
5
  "description": "DSH Codex Pet — 为 DeepSeek Harness 提供宠物陪伴、多任务提醒与交互,以及 Skill 自定义宠物 · A pet companion with multi-task notifications, interactions, and Skill-based custom pets for DeepSeek Harness",
6
6
  "type": "module",
@@ -61,8 +61,8 @@
61
61
  "assets:import": "tsx scripts/import-codex.ts"
62
62
  },
63
63
  "peerDependencies": {
64
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
65
- "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
64
+ "@deepseek-ai/dsh-client-ui-primitives": ">=0.2.0-rc.1 <0.3.0-0",
65
+ "@deepseek-ai/dsh-host-webserver": ">=0.2.0-rc.1 <0.3.0-0",
66
66
  "react": "^18.2.0",
67
67
  "react-dom": "^18.2.0"
68
68
  },
@@ -73,15 +73,15 @@
73
73
  },
74
74
  "devDependencies": {
75
75
  "@deepseek-ai/cordis": "4.0.5",
76
- "@deepseek-ai/dsh": "0.2.1-rc.2",
77
- "@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.2",
78
- "@deepseek-ai/dsh-client-locale": "0.2.1-rc.2",
79
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
80
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
81
- "@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.2",
82
- "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
83
- "@deepseek-ai/dsh-client-ui-workspace": "0.2.1-rc.2",
84
- "@deepseek-ai/dsh-host-webserver": "0.2.1-rc.2",
76
+ "@deepseek-ai/dsh": "0.2.1-rc.3",
77
+ "@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.3",
78
+ "@deepseek-ai/dsh-client-locale": "0.2.1-rc.3",
79
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.3",
80
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.3",
81
+ "@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.3",
82
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.3",
83
+ "@deepseek-ai/dsh-client-ui-workspace": "0.2.1-rc.3",
84
+ "@deepseek-ai/dsh-host-webserver": "0.2.1-rc.3",
85
85
  "@electron/asar": "^3.4.1",
86
86
  "@radix-ui/react-icons": "^1.3.2",
87
87
  "@types/node": "^24.0.0",
@@ -95,6 +95,7 @@
95
95
  "typescript": "^5.9.0"
96
96
  },
97
97
  "engines": {
98
- "node": ">=22.19.0"
98
+ "node": ">=22.19.0",
99
+ "dsh": ">=0.2.0-rc.1 <0.3.0-0"
99
100
  }
100
101
  }