@dan-ai-studio/dshopencodego 0.1.41 → 0.1.43

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/README.en.md CHANGED
@@ -173,7 +173,7 @@ The "OpenCode Go" section shows the live gateway catalog (the count follows the
173
173
  - any mismatch → **that plugin row is disabled with a printed reason** (`Plugin … is incompatible with dsh …`), leaving other plugins untouched;
174
174
  - to take the risk anyway, grant an **exact-version exemption**: `dsh plugin --profile <profile> allow-version <pkg>@<version> --dsh-version <exact> --accept-risk` (applies only to that package and that exact runtime version); `dsh plugin --profile <profile> version-exemptions` lists what a profile holds.
175
175
 
176
- The `engines.dsh` field is informational for readers and package managers; **DSH's compatibility gate reads only `peerDependencies`**. `@deepseek-ai/cordis` is declared separately as `4.0.4 || 4.0.5-alpha.1 || 4.0.5-alpha.2` — the runtimes used by DSH `0.2.0-rc.1`/`rc.2`, `0.2.1-alpha.1`/`alpha.2`, and `0.2.1-alpha.3` and later respectively (`4.0.2`/`4.0.3` were dropped along with pre-`0.2.0` support).
176
+ The `engines.dsh` field is informational for readers and package managers; **DSH's compatibility gate reads only `peerDependencies`**. `@deepseek-ai/cordis` is declared separately as `4.0.4 || 4.0.5-alpha.1 || 4.0.5-alpha.2 || 4.0.5` — the runtimes used by DSH `0.2.0-rc.1`/`rc.2`, `0.2.1-alpha.1`/`alpha.2`, `0.2.1-alpha.3`–`alpha.5`, and `0.2.1-rc.2` respectively (`4.0.2`/`4.0.3` were dropped along with pre-`0.2.0` support).
177
177
 
178
178
  **Outside the declared range**: everything before `0.2.0-rc.1`, and `0.3.0+`, are refused. If the seam is compatible, widen the peer range in your own build (never in DSH core), or wait for a plugin release.
179
179
 
@@ -182,7 +182,7 @@ The `engines.dsh` field is informational for readers and package managers; **DSH
182
182
  | Binding layer | Declared | Enforced by |
183
183
  | --- | --- | --- |
184
184
  | `peerDependencies` (17 `@deepseek-ai/dsh-*` packages) | all `>=0.2.0-rc.1 <0.3.0` | **DSH's gate, at plugin load time** |
185
- | `@deepseek-ai/cordis` | `4.0.4 \|\| 4.0.5-alpha.1 \|\| 4.0.5-alpha.2` | the same gate |
185
+ | `@deepseek-ai/cordis` | `4.0.4 \|\| 4.0.5-alpha.1 \|\| 4.0.5-alpha.2 \|\| 4.0.5` | the same gate |
186
186
  | `engines.dsh` | `>=0.2.0-rc.1 <0.3.0` | informational only; DSH never reads it |
187
187
  | `engines.node` | `^22.19.0 \|\| >=24.0.0` | the package manager |
188
188
  | bundled `@earendil-works/pi-ai` | `~1.3.0` (within 1.3.x), **compiled into `lib/`** (devDependency) | an independent coupling: a change in pi-ai's request construction changes this plugin's wire behaviour, and its opencode-go builtin catalog is this plugin's fallback data. Bundling leaves the plugin with **no runtime dependencies** for an installer to resolve |
@@ -191,7 +191,7 @@ The `engines.dsh` field is informational for readers and package managers; **DSH
191
191
  Things to keep in mind when maintaining this:
192
192
 
193
193
  - **Required versus optional peers**: six of the eighteen are marked `optional` (`dsh-api-remotes`, `dsh-client-locale`, `dsh-client-store`, `dsh-client-ui-model-selection`, `dsh-client-ui-settings`, `dsh-client-ui-slots`). The twelve that actually block loading are `cordis`, `dsh-attachment`, `dsh-brand`, `dsh-client-ui-conversation`, `dsh-client-ui-renderer`, `dsh-credentials`, `dsh-fs`, `dsh-launch-environment`, `dsh-llm`, `dsh-timeout`, `dsh-typert-protocol`, and `dsh-typert-registry`. `dsh-llm` is the heaviest coupling — more than twenty imports across the source.
194
- - **Declared range ≠ verified range**: the declaration is `>=0.2.0-rc.1 <0.3.0`. What was actually verified here, in order, is `0.2.0-rc.1` (the dev-dependency baseline: gate verdict + typecheck + full suite), `0.2.0-rc.2` (the same plus a `prepareCall` generation freeze), `0.2.1-alpha.3` (the first target release), `0.2.1-alpha.4` (T-24), and `0.2.1-alpha.5` (T-26). Other versions inside the range were not verified one by one.
194
+ - **Declared range ≠ verified range**: the declaration is `>=0.2.0-rc.1 <0.3.0`. What was actually verified here, in order, is `0.2.0-rc.1` (the dev-dependency baseline: gate verdict + typecheck + full suite), `0.2.0-rc.2` (the same plus a `prepareCall` generation freeze), `0.2.1-alpha.3` (the first target release), `0.2.1-alpha.4` (T-24), `0.2.1-alpha.5` (T-26), and `0.2.1-rc.2` (T-31, where the runtime moved to cordis `4.0.5`; the upstream contract layer had zero source changes). Other versions inside the range were not verified one by one.
195
195
  - **The upper bound is a tracking line**: `<0.3.0` means that the moment DSH ships `0.3.0`, this plugin must ship a new release in the same window or every user loses the plugin. After changing a range, `npm test` is the verification (local mock gateway, no network, no tokens) — ranges follow what the interfaces declare, and are never "measured" with live probes.
196
196
  - **Peer coverage is now guarded both ways**: `dsh-typert-registry`, `dsh-client-ui-conversation`, and `dsh-client-ui-renderer` were imported by the source but absent from `peerDependencies`, invisible to the gate; they are declared now, and `tests/peer-coverage.spec.ts` asserts both directions — anything the source imports must be declared, and anything declared but unreached must be removed (`dsh-settings` went that way: the settings form is actually provided by `dsh-client-ui-settings`).
197
197
  - **Exemptions are per profile**: only a profile that ran `dsh plugin allow-version` has one, and no record means the plugin must stay inside the declared range. `dsh plugin version-exemptions` lists a profile's exemptions.
package/README.md CHANGED
@@ -173,7 +173,7 @@ API Key 通过 Harness 凭证库提供(引用名 `OPENCODE_GO_API_KEY`),
173
173
  - 任一不满足 → **该插件行被禁用并打印原因**(`Plugin … is incompatible with dsh …`),其他插件不受影响;
174
174
  - 需要冒险时可用**精确版本豁免**:`dsh plugin --profile <profile> allow-version <包>@<版本> --dsh-version <精确版本> --accept-risk`(只对该包与该精确版本生效);`dsh plugin --profile <profile> version-exemptions` 可列出当前 profile 的豁免。
175
175
 
176
- `package.json` 里的 `engines.dsh` 是本插件为读者/包管理器写的信息字段;**DSH 的兼容门禁只读 `peerDependencies`**,请以它为准。`@deepseek-ai/cordis` 单独声明为 `4.0.4 || 4.0.5-alpha.1 || 4.0.5-alpha.2`——三者分别是 DSH `0.2.0-rc.1`/`rc.2`、`0.2.1-alpha.1`/`alpha.2`、`0.2.1-alpha.3` 及之后所用的运行时(`4.0.2`/`4.0.3` 随 `0.2.0` 之前的支持一并移除)。
176
+ `package.json` 里的 `engines.dsh` 是本插件为读者/包管理器写的信息字段;**DSH 的兼容门禁只读 `peerDependencies`**,请以它为准。`@deepseek-ai/cordis` 单独声明为 `4.0.4 || 4.0.5-alpha.1 || 4.0.5-alpha.2 || 4.0.5`——依次是 DSH `0.2.0-rc.1`/`rc.2`、`0.2.1-alpha.1`/`alpha.2`、`0.2.1-alpha.3`–`alpha.5`、以及 `0.2.1-rc.2` 所用的运行时(`4.0.2`/`4.0.3` 随 `0.2.0` 之前的支持一并移除)。
177
177
 
178
178
  **声明范围之外**:`0.2.0-rc.1` 之前的所有版本、以及 `0.3.0+` 会被拒绝加载。如果 DSH 侧接口兼容,可自行放宽该插件的 peer 范围并重新构建(不改 DSH 核心);否则请等插件跟进发版。
179
179
 
@@ -182,7 +182,7 @@ API Key 通过 Harness 凭证库提供(引用名 `OPENCODE_GO_API_KEY`),
182
182
  | 绑定层 | 声明 | 谁在把关 |
183
183
  | --- | --- | --- |
184
184
  | `peerDependencies`(17 个 `@deepseek-ai/dsh-*`) | 均为 `>=0.2.0-rc.1 <0.3.0` | **DSH 加载时的真门禁** |
185
- | `@deepseek-ai/cordis` | `4.0.4 \|\| 4.0.5-alpha.1 \|\| 4.0.5-alpha.2` | 同一门禁 |
185
+ | `@deepseek-ai/cordis` | `4.0.4 \|\| 4.0.5-alpha.1 \|\| 4.0.5-alpha.2 \|\| 4.0.5` | 同一门禁 |
186
186
  | `engines.dsh` | `>=0.2.0-rc.1 <0.3.0` | 仅信息字段,DSH 不读 |
187
187
  | `engines.node` | `^22.19.0 \|\| >=24.0.0` | 包管理器 |
188
188
  | 已打包依赖 `@earendil-works/pi-ai` | `~1.3.0`(1.3.x 内),**打进产物**(devDependency) | 独立耦合:pi-ai 改请求构造即影响本插件的线上行为;其 opencode-go 内置目录同时是本插件的打底数据。打包后本插件**没有任何运行时依赖**,安装者不必再解析它 |
@@ -191,7 +191,7 @@ API Key 通过 Harness 凭证库提供(引用名 `OPENCODE_GO_API_KEY`),
191
191
  维护时需要注意:
192
192
 
193
193
  - **必选与可选之分**:18 个 peer(17 个 `dsh-*` 加框架 `cordis`)中 6 个标了 `optional`(`dsh-api-remotes`、`dsh-client-locale`、`dsh-client-store`、`dsh-client-ui-model-selection`、`dsh-client-ui-settings`、`dsh-client-ui-slots`);真正卡住加载的是 12 个——`cordis`、`dsh-attachment`、`dsh-brand`、`dsh-client-ui-conversation`、`dsh-client-ui-renderer`、`dsh-credentials`、`dsh-fs`、`dsh-launch-environment`、`dsh-llm`、`dsh-timeout`、`dsh-typert-protocol`、`dsh-typert-registry`。其中 `dsh-llm` 是最重的一处耦合(源码 import 二十余处)。
194
- - **名义范围 ≠ 实测范围**:声明范围是 `>=0.2.0-rc.1 <0.3.0`,本项目实际验证过的基线依次是 `0.2.0-rc.1`(开发依赖基线:门禁判定 + typecheck + 全量用例)、`0.2.0-rc.2`(同上 + `prepareCall` 代次冻结)、`0.2.1-alpha.3`(首个目标版本)、`0.2.1-alpha.4`(T-24)与 `0.2.1-alpha.5`(T-26)。范围内的其他版本没有逐个验证过。
194
+ - **名义范围 ≠ 实测范围**:声明范围是 `>=0.2.0-rc.1 <0.3.0`,本项目实际验证过的基线依次是 `0.2.0-rc.1`(开发依赖基线:门禁判定 + typecheck + 全量用例)、`0.2.0-rc.2`(同上 + `prepareCall` 代次冻结)、`0.2.1-alpha.3`(首个目标版本)、`0.2.1-alpha.4`(T-24)、`0.2.1-alpha.5`(T-26)与 `0.2.1-rc.2`(T-31,运行时升到 cordis `4.0.5`;上游契约层源码零变更)。范围内的其他版本没有逐个验证过。
195
195
  - **上界就是跟版线**:`<0.3.0` 意味着 DSH 一旦发布 `0.3.0`,本插件必须同批发新版,否则所有用户加载失败。调整范围后用 `npm test` 验证即可(本地 mock 网关,零网络零 token)——范围以接口声明为准,不要用线上探测来"测"出一个范围。
196
196
  - **peer 覆盖已双向守住**:`dsh-typert-registry`、`dsh-client-ui-conversation`、`dsh-client-ui-renderer` 曾被源码 import 却未声明、门禁管不到,现已补进 `peerDependencies`;`tests/peer-coverage.spec.ts` 双向断言——源码用到的必须声明,声明了却没人用的必须删(`dsh-settings` 就这样被移除:设置表单实际由 `dsh-client-ui-settings` 提供)。
197
197
  - **豁免是按 profile 记的**:只有显式执行过 `dsh plugin allow-version` 的 profile 才享有豁免;没有记录就代表必须落在声明范围内。用 `dsh plugin version-exemptions` 可查看当前 profile 的豁免。
package/lib/client.js CHANGED
@@ -472,6 +472,7 @@ var import_react = require("react");
472
472
 
473
473
  // src/update/check.ts
474
474
  var PACKAGE_NAME = "@dan-ai-studio/dshopencodego";
475
+ var REPOSITORY = "dan-ai-studio/dshopencodego";
475
476
  var REGISTRY_LATEST_URL = `https://registry.npmjs.org/${encodeURIComponent(PACKAGE_NAME)}/latest`;
476
477
  var CHECK_CACHE_MS = 6 * 60 * 60 * 1e3;
477
478
 
@@ -948,7 +949,7 @@ function quotaLabel(model, t) {
948
949
  function UpdateBanner({ controller, t, busy, act, update }) {
949
950
  if (update.phase === "idle") return null;
950
951
  const status = update.status;
951
- const notes = `https://www.npmjs.com/package/${encodeURIComponent(PACKAGE_NAME)}`;
952
+ const notes = status?.latest === void 0 ? `https://github.com/${REPOSITORY}/releases` : `https://github.com/${REPOSITORY}/releases/tag/v${status.latest}`;
952
953
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: section_default.block, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: section_default.row, children: [
953
954
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: t("updateTitle") }),
954
955
  update.phase === "checking" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: section_default.hint, children: t("updateChecking") }),
package/lib/index.js CHANGED
@@ -45505,7 +45505,7 @@ function createUpdateChecker(deps) {
45505
45505
  }
45506
45506
 
45507
45507
  // src/update/version.ts
45508
- var PLUGIN_VERSION = true ? "0.1.41" : "0.0.0-dev";
45508
+ var PLUGIN_VERSION = true ? "0.1.43" : "0.0.0-dev";
45509
45509
 
45510
45510
  // src/update/service.ts
45511
45511
  import { TypertRemoteService as TypertRemoteService2 } from "@deepseek-ai/dsh-typert-protocol";
@@ -10,13 +10,16 @@
10
10
  * HMR lifecycle, so it is deliberately not implemented here.
11
11
  *
12
12
  * The check runs only when the settings page asks (page open or manual
13
- * refresh), never on the model-request path, and fails silent: an unreachable
14
- * registry simply hides the banner instead of erroring the page.
13
+ * refresh), never on the model-request path. An unreachable registry is
14
+ * reported as exactly that: `UpdateStatus.checked` stays false so the page
15
+ * says the lookup failed instead of presenting it as "already up to date".
15
16
  *
16
17
  * @module @dan-ai-studio/dshopencodego/update/check
17
18
  */
18
19
  /** This package as addressed on the registry. */
19
20
  export declare const PACKAGE_NAME = "@dan-ai-studio/dshopencodego";
21
+ /** The GitHub repository, used to link a release's own notes. */
22
+ export declare const REPOSITORY = "dan-ai-studio/dshopencodego";
20
23
  /** Document address answering `{ "version": "x.y.z", ... }`. */
21
24
  export declare const REGISTRY_LATEST_URL: string;
22
25
  /** How long one lookup answers for before the registry is asked again. */
@@ -10,13 +10,16 @@
10
10
  * HMR lifecycle, so it is deliberately not implemented here.
11
11
  *
12
12
  * The check runs only when the settings page asks (page open or manual
13
- * refresh), never on the model-request path, and fails silent: an unreachable
14
- * registry simply hides the banner instead of erroring the page.
13
+ * refresh), never on the model-request path. An unreachable registry is
14
+ * reported as exactly that: `UpdateStatus.checked` stays false so the page
15
+ * says the lookup failed instead of presenting it as "already up to date".
15
16
  *
16
17
  * @module @dan-ai-studio/dshopencodego/update/check
17
18
  */
18
19
  /** This package as addressed on the registry. */
19
20
  export const PACKAGE_NAME = '@dan-ai-studio/dshopencodego';
21
+ /** The GitHub repository, used to link a release's own notes. */
22
+ export const REPOSITORY = 'dan-ai-studio/dshopencodego';
20
23
  /** Document address answering `{ "version": "x.y.z", ... }`. */
21
24
  export const REGISTRY_LATEST_URL = `https://registry.npmjs.org/${encodeURIComponent(PACKAGE_NAME)}/latest`;
22
25
  /** How long one lookup answers for before the registry is asked again. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dan-ai-studio/dshopencodego",
3
- "version": "0.1.41",
3
+ "version": "0.1.43",
4
4
  "description": "OpenCode Go provider for DeepSeek Harness: live gateway catalog, per-conversation session header, usage",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -69,7 +69,7 @@
69
69
  "prepack": "npm run build"
70
70
  },
71
71
  "peerDependencies": {
72
- "@deepseek-ai/cordis": "4.0.4 || 4.0.5-alpha.1 || 4.0.5-alpha.2",
72
+ "@deepseek-ai/cordis": "4.0.4 || 4.0.5-alpha.1 || 4.0.5-alpha.2 || 4.0.5",
73
73
  "@deepseek-ai/dsh-api-remotes": ">=0.2.0-rc.1 <0.3.0",
74
74
  "@deepseek-ai/dsh-attachment": ">=0.2.0-rc.1 <0.3.0",
75
75
  "@deepseek-ai/dsh-brand": ">=0.2.0-rc.1 <0.3.0",
@@ -109,28 +109,28 @@
109
109
  }
110
110
  },
111
111
  "devDependencies": {
112
- "@deepseek-ai/cordis": "4.0.5-alpha.2",
113
- "@deepseek-ai/dsh-api-remotes": "0.2.1-alpha.5",
114
- "@deepseek-ai/dsh-attachment": "0.2.1-alpha.5",
115
- "@deepseek-ai/dsh-brand": "0.2.1-alpha.5",
116
- "@deepseek-ai/dsh-client-locale": "0.2.1-alpha.5",
117
- "@deepseek-ai/dsh-client-store": "0.2.1-alpha.5",
118
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-alpha.5",
119
- "@deepseek-ai/dsh-client-ui-model-selection": "0.2.1-alpha.5",
120
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-alpha.5",
121
- "@deepseek-ai/dsh-client-ui-settings": "0.2.1-alpha.5",
122
- "@deepseek-ai/dsh-client-ui-slots": "0.2.1-alpha.5",
123
- "@deepseek-ai/dsh-credentials": "0.2.1-alpha.5",
124
- "@deepseek-ai/dsh-fs": "0.2.1-alpha.5",
125
- "@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.5",
126
- "@deepseek-ai/dsh-llm": "0.2.1-alpha.5",
127
- "@deepseek-ai/dsh-sandbox": "0.2.1-alpha.5",
128
- "@deepseek-ai/dsh-scope": "0.2.1-alpha.5",
129
- "@deepseek-ai/dsh-session": "0.2.1-alpha.5",
130
- "@deepseek-ai/dsh-settings": "0.2.1-alpha.5",
131
- "@deepseek-ai/dsh-timeout": "0.2.1-alpha.5",
132
- "@deepseek-ai/dsh-typert-protocol": "0.2.1-alpha.5",
133
- "@deepseek-ai/dsh-typert-registry": "0.2.1-alpha.5",
112
+ "@deepseek-ai/cordis": "4.0.5",
113
+ "@deepseek-ai/dsh-api-remotes": "0.2.1-rc.2",
114
+ "@deepseek-ai/dsh-attachment": "0.2.1-rc.2",
115
+ "@deepseek-ai/dsh-brand": "0.2.1-rc.2",
116
+ "@deepseek-ai/dsh-client-locale": "0.2.1-rc.2",
117
+ "@deepseek-ai/dsh-client-store": "0.2.1-rc.2",
118
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.2",
119
+ "@deepseek-ai/dsh-client-ui-model-selection": "0.2.1-rc.2",
120
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
121
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.1-rc.2",
122
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
123
+ "@deepseek-ai/dsh-credentials": "0.2.1-rc.2",
124
+ "@deepseek-ai/dsh-fs": "0.2.1-rc.2",
125
+ "@deepseek-ai/dsh-launch-environment": "0.2.1-rc.2",
126
+ "@deepseek-ai/dsh-llm": "0.2.1-rc.2",
127
+ "@deepseek-ai/dsh-sandbox": "0.2.1-rc.2",
128
+ "@deepseek-ai/dsh-scope": "0.2.1-rc.2",
129
+ "@deepseek-ai/dsh-session": "0.2.1-rc.2",
130
+ "@deepseek-ai/dsh-settings": "0.2.1-rc.2",
131
+ "@deepseek-ai/dsh-timeout": "0.2.1-rc.2",
132
+ "@deepseek-ai/dsh-typert-protocol": "0.2.1-rc.2",
133
+ "@deepseek-ai/dsh-typert-registry": "0.2.1-rc.2",
134
134
  "@deepseek-ai/schemastery": "~3.18.5-alpha.2",
135
135
  "@earendil-works/pi-ai": "~1.3.0",
136
136
  "@testing-library/dom": "^10.4.1",