@dan-ai-studio/dshopencodego 0.1.39 → 0.1.40

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
@@ -215,12 +215,13 @@ Things to keep in mind when maintaining this:
215
215
 
216
216
  ```sh
217
217
  npm ci
218
+ npm run lint # oxlint: static checks (the release workflow runs this too, and fails on it)
218
219
  npm run typecheck # both halves: host and client
219
220
  npm test # contract tests against a real local HTTP mock gateway
220
221
  npm run build # emits lib/index.js and lib/client.js
221
222
  ```
222
223
 
223
- 148 tests across 24 files cover configuration validation, the protocol ladder, gateway and online metadata, the catalog projection, the adapter on the wire (all three protocols), Remote contracts and services, session-header invariants, usage windows and the meter, the client controller and usage pill, and both halves' mounting and registration.
224
+ The suite covers configuration validation, the protocol ladder, gateway and online metadata, the catalog projection, the adapter on the wire (all three protocols), Remote contracts and services, session-header invariants, usage windows and the meter, the client controller and usage pill, both halves' mounting and registration, and several **structural invariants** (inject declarations match the source's reads, peer coverage holds both ways, the READMEs match the manifest). That is **33 test files** — a number `tests/readme-consistency.spec.ts` checks against the `tests/` directory, so it cannot drift.
224
225
 
225
226
  ## Releasing (maintainers)
226
227
 
package/README.md CHANGED
@@ -215,12 +215,13 @@ API Key 通过 Harness 凭证库提供(引用名 `OPENCODE_GO_API_KEY`),
215
215
 
216
216
  ```sh
217
217
  npm ci
218
+ npm run lint # oxlint:静态检查(发布流程也会跑,失败即阻断)
218
219
  npm run typecheck # host 与 client 两半
219
220
  npm test # 契约测试:真实 HTTP mock 网关,断言请求头/体、目录阶梯、用量
220
221
  npm run build # 产出 lib/index.js 与 lib/client.js
221
222
  ```
222
223
 
223
- 测试 148 个用例 / 24 个文件,覆盖配置校验、协议阶梯、网关与在线元数据、目录投影、适配器(三种协议的线上请求)、Remote 契约与服务、会话头不变量、用量窗口与计量、客户端控制器与用量组件、以及两半的挂载与登记。
224
+ 测试覆盖配置校验、协议阶梯、网关与在线元数据、目录投影、适配器(三种协议的线上请求)、Remote 契约与服务、会话头不变量、用量窗口与计量、客户端控制器与用量组件、两半的挂载与登记、以及几条**结构性不变量**(inject 声明与源码读取一致、peer 覆盖双向、README 与 manifest 一致)。共 **33 个测试文件**——这个数字由 `tests/readme-consistency.spec.ts` 对着 `tests/` 目录校验,不会漂移。
224
225
 
225
226
  ## 发布(维护者)
226
227
 
package/lib/client.js CHANGED
@@ -562,7 +562,7 @@ if (!document.querySelector("style[data-plugin-css=" + JSON.stringify(id) + "]")
562
562
  style.textContent = ".d7lz0W_root{color:var(--dsw-alias-label-primary);flex-direction:column;gap:1.25rem;display:flex}.d7lz0W_title{margin:0;font-size:1.05rem}.d7lz0W_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:.8rem}.d7lz0W_warn{color:var(--dsw-alias-state-warn-primary);margin:0;font-size:.8rem}.d7lz0W_ok{color:var(--dsw-alias-state-success-primary);font-size:.8rem}.d7lz0W_block{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:.6rem;flex-direction:column;gap:.5rem;padding:.85rem;display:flex}.d7lz0W_row{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.d7lz0W_row>strong{margin-right:auto}.d7lz0W_input{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);min-width:10rem;color:var(--dsw-alias-label-primary);font:inherit;border-radius:.35rem;flex:14rem;padding:.35rem .5rem;font-size:.85rem}.d7lz0W_button{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border-radius:.35rem;padding:.35rem .7rem;font-size:.8rem}.d7lz0W_button:disabled{color:var(--dsw-alias-state-idle-primary);cursor:default}.d7lz0W_number{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:5rem;color:var(--dsw-alias-label-primary);font:inherit;border-radius:.35rem;padding:.25rem .4rem;font-size:.8rem}.d7lz0W_select{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:auto;max-width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:.35rem;padding:.25rem .4rem;font-size:.8rem}.d7lz0W_list{flex-direction:column;display:flex}.d7lz0W_item{border-top:1px solid var(--dsw-alias-border-l1);align-items:flex-start;gap:.5rem;padding:.45rem .15rem;display:flex}.d7lz0W_item input[type=checkbox]{accent-color:var(--dsw-alias-brand-primary);margin-top:.15rem}.d7lz0W_itemBody{flex-direction:column;gap:.15rem;min-width:0;display:flex}.d7lz0W_itemMain{flex-wrap:wrap;align-items:baseline;gap:.6rem;display:flex}.d7lz0W_itemMeta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:.75rem;font-size:.75rem;display:flex}.d7lz0W_itemModalities{color:var(--dsw-alias-label-secondary);font-size:.75rem}.d7lz0W_name{color:var(--dsw-alias-label-primary)}.d7lz0W_mono{color:var(--dsw-alias-label-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.d7lz0W_badge{color:var(--dsw-alias-brand-primary)}";
563
563
  document.head.appendChild(style);
564
564
  }
565
- var section_default = { "item": "d7lz0W_item", "name": "d7lz0W_name", "input": "d7lz0W_input", "block": "d7lz0W_block", "number": "d7lz0W_number", "itemMeta": "d7lz0W_itemMeta", "itemModalities": "d7lz0W_itemModalities", "badge": "d7lz0W_badge", "ok": "d7lz0W_ok", "select": "d7lz0W_select", "row": "d7lz0W_row", "itemMain": "d7lz0W_itemMain", "list": "d7lz0W_list", "mono": "d7lz0W_mono", "itemBody": "d7lz0W_itemBody", "title": "d7lz0W_title", "warn": "d7lz0W_warn", "button": "d7lz0W_button", "root": "d7lz0W_root", "hint": "d7lz0W_hint" };
565
+ var section_default = { "itemBody": "d7lz0W_itemBody", "list": "d7lz0W_list", "itemMeta": "d7lz0W_itemMeta", "mono": "d7lz0W_mono", "number": "d7lz0W_number", "root": "d7lz0W_root", "ok": "d7lz0W_ok", "itemModalities": "d7lz0W_itemModalities", "item": "d7lz0W_item", "name": "d7lz0W_name", "block": "d7lz0W_block", "warn": "d7lz0W_warn", "button": "d7lz0W_button", "hint": "d7lz0W_hint", "select": "d7lz0W_select", "input": "d7lz0W_input", "title": "d7lz0W_title", "badge": "d7lz0W_badge", "row": "d7lz0W_row", "itemMain": "d7lz0W_itemMain" };
566
566
 
567
567
  // src/client/Section.tsx
568
568
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -1335,7 +1335,7 @@ if (!document.querySelector("style[data-plugin-css=" + JSON.stringify(id2) + "]"
1335
1335
  style.textContent = ".mMNkkW_root{align-items:center;display:inline-flex;position:relative}.mMNkkW_trigger{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;white-space:nowrap;border-radius:999px;padding:.35rem .6rem;font-size:.8rem;line-height:1}.mMNkkW_trigger:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.mMNkkW_panel{z-index:20;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-overlay);width:18rem;color:var(--dsw-alias-label-primary);border-radius:.6rem;flex-direction:column;gap:.6rem;padding:.75rem .85rem;display:flex;position:absolute;bottom:calc(100% + .5rem);right:0;box-shadow:0 8px 24px #0000002e}.mMNkkW_window{flex-direction:column;gap:.25rem;display:flex}.mMNkkW_row{justify-content:space-between;gap:.5rem;font-size:.85rem;display:flex}.mMNkkW_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:.75rem}.mMNkkW_progress{width:100%;height:.35rem;accent-color:var(--dsw-alias-brand-primary)}.mMNkkW_limited{color:var(--dsw-alias-state-warn-primary);font-size:.75rem}.mMNkkW_warning{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-label-primary);border-radius:.4rem;padding:.4rem .5rem;font-size:.75rem}.mMNkkW_retry{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border-radius:.35rem;align-self:flex-start;padding:.25rem .5rem;font-size:.75rem}.mMNkkW_local{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:.2rem;padding-top:.5rem;display:flex}";
1336
1336
  document.head.appendChild(style);
1337
1337
  }
1338
- var pill_default = { "hint": "mMNkkW_hint", "progress": "mMNkkW_progress", "root": "mMNkkW_root", "row": "mMNkkW_row", "trigger": "mMNkkW_trigger", "warning": "mMNkkW_warning", "limited": "mMNkkW_limited", "retry": "mMNkkW_retry", "panel": "mMNkkW_panel", "local": "mMNkkW_local", "window": "mMNkkW_window" };
1338
+ var pill_default = { "hint": "mMNkkW_hint", "local": "mMNkkW_local", "panel": "mMNkkW_panel", "warning": "mMNkkW_warning", "retry": "mMNkkW_retry", "trigger": "mMNkkW_trigger", "window": "mMNkkW_window", "limited": "mMNkkW_limited", "root": "mMNkkW_root", "row": "mMNkkW_row", "progress": "mMNkkW_progress" };
1339
1339
 
1340
1340
  // src/client/UsagePill.tsx
1341
1341
  var import_jsx_runtime2 = require("react/jsx-runtime");
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.39" : "0.0.0-dev";
45508
+ var PLUGIN_VERSION = true ? "0.1.40" : "0.0.0-dev";
45509
45509
 
45510
45510
  // src/update/service.ts
45511
45511
  import { TypertRemoteService as TypertRemoteService2 } from "@deepseek-ai/dsh-typert-protocol";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dan-ai-studio/dshopencodego",
3
- "version": "0.1.39",
3
+ "version": "0.1.40",
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",
@@ -58,6 +58,8 @@
58
58
  }
59
59
  },
60
60
  "scripts": {
61
+ "lint": "oxlint",
62
+ "lint:fix": "oxlint --fix",
61
63
  "build": "node scripts/build.mjs",
62
64
  "typecheck": "tsc -p tsconfig.host.json --noEmit && tsc -p tsconfig.client.json --noEmit && tsc -p tsconfig.tests.json --noEmit",
63
65
  "test": "vitest run",
@@ -129,21 +131,22 @@
129
131
  "@deepseek-ai/dsh-timeout": "0.2.1-alpha.5",
130
132
  "@deepseek-ai/dsh-typert-protocol": "0.2.1-alpha.5",
131
133
  "@deepseek-ai/dsh-typert-registry": "0.2.1-alpha.5",
134
+ "@deepseek-ai/schemastery": "~3.18.5-alpha.2",
135
+ "@earendil-works/pi-ai": "~1.3.0",
132
136
  "@testing-library/dom": "^10.4.1",
133
137
  "@testing-library/react": "^16.3.0",
134
138
  "@types/node": "^22.20.0",
135
139
  "@types/react": "~18.3.1",
136
140
  "@types/react-dom": "~18.3.0",
137
- "@vitest/coverage-v8": "^4.1.11",
141
+ "@vitest/coverage-v8": "^5.0.5",
138
142
  "esbuild": "^0.28.2",
139
- "jsdom": "^29.0.0",
143
+ "jsdom": "^30.1.3",
140
144
  "lightningcss": "^1.32.0",
145
+ "oxlint": "^1.88.0",
141
146
  "react": "^18.3.1",
142
147
  "react-dom": "^18.3.1",
143
148
  "typescript": "^6.0.3",
144
- "vitest": "^4.1.8",
145
- "@earendil-works/pi-ai": "~1.3.0",
146
- "@deepseek-ai/schemastery": "~3.18.5-alpha.2"
149
+ "vitest": "^5.0.5"
147
150
  },
148
151
  "keywords": [
149
152
  "deepseek-harness",