@rayadesu/dsh-billing 0.3.14 → 0.3.15

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/AGENTS.md CHANGED
@@ -41,23 +41,24 @@ cordis.patch.yml DSH profile bundle 补丁层:挂载 llm-billing + ui-
41
41
  - **发布前校验**:`pnpm run verify`(每个包 `prepublishOnly` 自动运行)检查
42
42
  `lib/typert.host.js` 的 `TYPERT.package` 必须等于导出它的包名,且 lib 中不得残留
43
43
  其他包名的清单;失败即禁止发布。
44
- - **依赖以发布形态声明**:`@deepseek-ai/dsh-*` 依赖写 `^0.1.6-alpha.1`(对应官方 monorepo 当前发布基线,monorepo 内为
44
+ - **依赖以发布形态声明**:`@deepseek-ai/dsh-*` 依赖写 `^0.1.7-alpha.2`(对应官方 monorepo 当前发布基线,monorepo 内为
45
45
  `workspace:^`);本插件的三个包发布到 npm 的
46
46
  `@rayadesu` scope,直接 `dsh plugin add @rayadesu/...` 安装。
47
47
  - **补客户端包漏声明的运行时依赖**:`dsh-client-store`(`zustand`/`immer`)与
48
48
  `dsh-client-ui-primitives`(markdown 视图栈:`mdast-util-*`、`micromark-*`、`shiki`、
49
- `katex`、`diff`、`anser`、`clsx`)把它们只声明为上游 devDependencies,产物却直接 import;
50
- 发布 bundle 运行时由 dsh 安装提供,独立 workspace 的测试要自己解析,故在 `ui-billing`
51
- 的 devDependencies 里按上游同版本范围补齐。dsh 依赖线升级后若测试报 `Cannot find package`,
52
- 照此补即可。
53
- - **typert codec 跨基线桥接(`scripts/typert-compat.mjs`)**:npm 上最新的
54
- `@deepseek-ai/dsh-typert-generator@0.1.6-alpha.1` 把 strict codec 生成为
55
- `{ mode, typeSymbol, schema }`,而 dsh checkout(HEAD,含 `perf(typert): materialize
56
- generated schemas on first use`)改成 `{ mode, typeSymbol, create() }`,其 `dsh-typert-loader`
57
- 见不到 `create` 就拒绝注册(`... parameter codec has no create() factory`),宿主行随之
58
- 启动失败、Web 启动页报 `1 entry did not activate`。两个读取方都不拒绝自己不读的字段,
59
- 所以产物**两个字段都带**即可同时满足 checkout 与 npm alpha 线。该步骤挂在 `build:host`
60
- 末尾(tsdown 之后),幂等;`verify` 检查 strict codec 数 == `create: () =>` 数。
49
+ `katex`、`diff`、`anser`、`clsx`、`simple-icons`)、`dsh-client-web`
50
+ (`dsh-client-ui-dockkit`)把它们只声明为上游 devDependencies(或干脆不声明),产物却直接
51
+ import;发布 bundle 运行时由 dsh 安装提供,独立 workspace 的测试要自己解析,故在
52
+ `ui-billing` 的 devDependencies 里按上游同版本范围补齐。dsh 依赖线升级后若测试报
53
+ `Cannot find package`,照此补即可。
54
+ - **typert codec 的 create 工厂(`scripts/typert-compat.mjs`)**:DSH 的 `dsh-typert-loader`
55
+ 要求每个 strict codec 带 `create` 工厂,见不到就拒绝注册
56
+ (`... parameter codec has no create() factory`),宿主行随之启动失败、Web 启动页报
57
+ `1 entry did not activate`。自 0.1.7-alpha.2 起 generator 原生产出 `create: schema`,
58
+ 构建产物直接可用;`scripts/typert-compat.mjs` 降级为安全网(幂等,遇无 create 的 codec
59
+ 或未知形状即非零退出,防 generator 回退)。该步骤挂在 `build:host` 末尾(tsdown 之后);
60
+ `verify` 按 codec 块检查每个块都带 `create`(逐行计数会误伤清单里 `TYPERT.schemas`
61
+ 的 `create` 条目)。
61
62
  **改完与 typert 产物相关的代码务必走 `pnpm run build:host`,不要只跑 tsdown。**
62
63
  - **workspace 关掉 pnpm 发布龄门槛**:`pnpm-workspace.yaml` 显式 `minimumReleaseAge: 0`。
63
64
  pnpm ≥11 默认 1 天门槛会把刚发布的 alpha 包挡在 lockfile 校验外,而校验阶段不认
@@ -65,7 +66,7 @@ cordis.patch.yml DSH profile bundle 补丁层:挂载 llm-billing + ui-
65
66
  - **密钥不进仓库**:`DEEPSEEK_API_KEY` 等一律由用户环境或凭据 seam 提供,仓库不含真实值。
66
67
  - **README 双语**:每个 README 遵循 DSH 结构 `README.md`(EN) + `README.zh.md`(ZH) +
67
68
  `README.i18n.yaml`(记录两文件 git blob hash,改动后需更新)。
68
- - **版本对齐**:根 bundle 与两个包统一版本号(当前 0.3.14),`pnpm-lock.yaml` 随依赖变更更新。
69
+ - **版本对齐**:根 bundle 与两个包统一版本号(当前 0.3.15),`pnpm-lock.yaml` 随依赖变更更新。
69
70
  - **提交与发布流程**:见 `.agents/skills/dsh-release/SKILL.md` —— 阶段 A(改代码 → 按档位校验/打包 →
70
71
  本地 pack 安装 → 交用户验证)**不提交**,改动留在工作区;用户说「发布」进入阶段 B 才 bump 版本、
71
72
  **按类型分别提交**、推送、发 npm 与 GitHub Release。
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # last confirmed-consistent state. Both languages carry equal authority; after
3
3
  # editing either side, bring the other along and re-record both hashes with:
4
4
  # git hash-object README.md README.zh.md
5
- README.md: 1e65c00d536d0c589976b3bbbe2c551afc54957b
6
- README.zh.md: b38c56782db1edd4ed3d5d3ab75a463f6996d16a
5
+ README.md: 2ccd0964f45caa63e76356b579ecfb9a53cf8865
6
+ README.zh.md: 77b895e2c2f089959e27641c58a51594f63a2d5a
package/README.md CHANGED
@@ -130,7 +130,7 @@ commands.
130
130
 
131
131
  The two plugin packages declare the DeepSeek Harness packages they build on
132
132
  (`@deepseek-ai/cordis`, `@deepseek-ai/dsh-credentials`, `@deepseek-ai/dsh-session`,
133
- and the client runtime packages) as `peerDependencies` at `^0.1.6-alpha.1`. A dsh
133
+ and the client runtime packages) as `peerDependencies` at `^0.1.7-alpha.2`. A dsh
134
134
  profile does not auto-install peers, so these are provided by the dsh
135
135
  installation itself through the `profiles/node_modules` fallback rather than
136
136
  fetched from the registry — no extra packages to install, and no registry token
@@ -139,12 +139,14 @@ needed on the installing machine.
139
139
  Two of those published client packages import runtime modules their manifests
140
140
  list only under `devDependencies` (`dsh-client-store` → `zustand`/`immer`;
141
141
  `dsh-client-ui-primitives` → the markdown view stack: `mdast-util-*`,
142
- `micromark-*`, `shiki`, `katex`, `diff`, `anser`, `clsx`). The shipped bundles
142
+ `micromark-*`, `shiki`, `katex`, `diff`, `anser`, `clsx`, `simple-icons`;
143
+ `dsh-client-web` → `dsh-client-ui-dockkit`, which its manifest does not declare
144
+ at all). The shipped bundles
143
145
  are external and load them from the dsh installation at runtime, but this
144
146
  standalone workspace resolves them itself, so `ui-billing` declares them as its
145
147
  own `devDependencies` for the browser-half specs.
146
148
 
147
- The plugin builds against the 0.1.6-alpha.1 published line and keeps both DSH
149
+ The plugin builds against the 0.1.7-alpha.2 published line and keeps both DSH
148
150
  runtime families readable: the live `Session` log surface
149
151
  (`Session.events` + `header.seedLength` at/before 0.1.1-rc.2,
150
152
  `snapshotEvents()` + `inheritedEventCount` since 0.1.2-alpha.4), and the
@@ -201,18 +203,17 @@ it. If a typert manifest ever names a package other than its own
201
203
 
202
204
  The typert generator recognizes `Remote`/`TypertRemoteService` only from a
203
205
  workspace-registered protocol package, so `packages/typert-protocol` vendors
204
- the published `@deepseek-ai/dsh-typert-protocol@0.1.6-alpha.1` declarations; when
206
+ the published `@deepseek-ai/dsh-typert-protocol@0.1.7-alpha.2` declarations; when
205
207
  the dsh dependency line moves, refresh it from the installed package.
206
208
 
207
- The generated codecs also straddle a baseline skew. The newest *published*
208
- generator emits `{ mode, typeSymbol, schema }`, while the harness checkout the
209
- web app actually runs from is ahead of that publish (`perf(typert): materialize
210
- generated schemas on first use`) and reads `{ mode, typeSymbol, create() }`,
211
- refusing any codec whose `create` is not a function. `scripts/typert-compat.mjs`
212
- — run at the end of `build:host`, enforced by `verify` — adds the `create`
213
- factory beside the emitted `schema`, so a single artifact loads on both lines.
214
- Run `pnpm run build:host` (not bare `tsdown`) after touching anything that
215
- regenerates these artifacts.
209
+ The generated codecs must carry a `create` factory: the `dsh-typert-loader`
210
+ refuses any strict codec without one (`... parameter codec has no create()
211
+ factory`), which fails the host line's activation. Generator 0.1.7+ emits
212
+ `create` natively, so a current build passes through unchanged;
213
+ `scripts/typert-compat.mjs` — run at the end of `build:host`, enforced by
214
+ `verify` — stays as a safety net that exits non-zero if a codec ever ships
215
+ without its factory. Run `pnpm run build:host` (not bare `tsdown`) after
216
+ touching anything that regenerates these artifacts.
216
217
 
217
218
  Publishing (the bundle and both plugins share one version; `prepublishOnly`
218
219
  runs the `verify` gate automatically). Use `npm publish` from **inside each
package/README.zh.md CHANGED
@@ -121,17 +121,18 @@ dsh plugin --profile web update --latest # 忽略声明的版本区间,把所
121
121
 
122
122
  两个插件包把它们依赖的 DeepSeek Harness 包(`@deepseek-ai/cordis`、
123
123
  `@deepseek-ai/dsh-credentials`、`@deepseek-ai/dsh-session` 以及客户端运行时包)
124
- 声明为 `peerDependencies`(`^0.1.6-alpha.1`)。dsh profile 默认不自动安装 peer,所以
124
+ 声明为 `peerDependencies`(`^0.1.7-alpha.2`)。dsh profile 默认不自动安装 peer,所以
125
125
  这些由 dsh 安装本身通过 `profiles/node_modules` 回退提供,而不是从 registry 拉取——
126
126
  无需额外安装,安装机也不需要 registry token。
127
127
 
128
128
  这些已发布的客户端包里有两个会把只写在 `devDependencies` 里的运行时模块直接 import 进
129
129
  产物(`dsh-client-store` → `zustand`/`immer`;`dsh-client-ui-primitives` → markdown 视图栈
130
- `mdast-util-*`、`micromark-*`、`shiki`、`katex`、`diff`、`anser`、`clsx`)。发布的 bundle
130
+ `mdast-util-*`、`micromark-*`、`shiki`、`katex`、`diff`、`anser`、`clsx`、`simple-icons`;
131
+ `dsh-client-web` → 清单里完全没声明的 `dsh-client-ui-dockkit`)。发布的 bundle
131
132
  把这些留作外部依赖、运行时由 dsh 安装提供,但本仓库是独立 workspace、要自己解析,所以
132
133
  `ui-billing` 把它们声明为自己的 `devDependencies` 供浏览器半测使用。
133
134
 
134
- 插件按 0.1.6-alpha.1 发布线构建,同时兼容读取两代 DSH 运行时:live `Session` 日志面
135
+ 插件按 0.1.7-alpha.2 发布线构建,同时兼容读取两代 DSH 运行时:live `Session` 日志面
135
136
  (0.1.1-rc.2 及以前为 `Session.events` + `header.seedLength`,0.1.2-alpha.4 起为
136
137
  `snapshotEvents()` + `inheritedEventCount`),以及持久化服务面(0.1.1-rc.2 及以前为
137
138
  `inspect`/`listSnapshots`,0.1.2-alpha.5 的 handle 化改造后为
@@ -180,16 +181,14 @@ host 面会从源码重新生成 `lib/typert.host.js` 与 `lib/typert.remote-cli
180
181
  的 name 不一致,`verify` 会在发布前直接失败。
181
182
 
182
183
  typert 生成器只认工作区内已注册协议包里的 `Remote`/`TypertRemoteService` 声明,所以
183
- `packages/typert-protocol` 内嵌了 npm 上 `@deepseek-ai/dsh-typert-protocol@0.1.6-alpha.1` 的
184
+ `packages/typert-protocol` 内嵌了 npm 上 `@deepseek-ai/dsh-typert-protocol@0.1.7-alpha.2` 的
184
185
  声明文件;dsh 依赖线升级时,从安装包重新刷新它。
185
186
 
186
- 生成出来的 codec 还横跨了一次基线错位:npm 上最新的**发布版**生成器输出
187
- `{ mode, typeSymbol, schema }`,而 Web 实际运行的那份 harness checkout 领先于该次发布
188
- (`perf(typert): materialize generated schemas on first use`),读的是
189
- `{ mode, typeSymbol, create() }`,`create` 不是函数就拒绝注册。`scripts/typert-compat.mjs`
190
- 挂在 `build:host` 末尾、并由 `verify` 把关,在生成的 `schema` 旁补上 `create` 工厂,
191
- 让同一份产物在两条线上都能加载。**动到会重新生成这些产物的代码后,请跑
192
- `pnpm run build:host`,不要只跑 tsdown。**
187
+ 生成的每个 strict codec 必须带 `create` 工厂:`dsh-typert-loader` 对没有 `create` 的
188
+ codec 直接拒绝注册(`... parameter codec has no create() factory`),宿主行随之启动
189
+ 失败。0.1.7 起生成器原生产出 `create`,当前构建直接可用;`scripts/typert-compat.mjs`
190
+ 挂在 `build:host` 末尾、并由 `verify` 把关,降级为安全网——一旦再有 codec 缺工厂就非零
191
+ 退出。**动到会重新生成这些产物的代码后,请跑 `pnpm run build:host`,不要只跑 tsdown。**
193
192
 
194
193
  发布(bundle 与两个插件包统一版本号;`prepublishOnly` 会自动跑 `verify` 门禁)。
195
194
  要用 `npm publish` 且**必须在各包目录内执行**——`pnpm publish` 会失败(token 读取方式问题),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rayadesu/dsh-billing",
3
- "version": "0.3.14",
3
+ "version": "0.3.15",
4
4
  "description": "DeepSeek Harness billing plugin: account balance and this session's billed spend with a session-header badge.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -40,13 +40,13 @@
40
40
  "access": "public"
41
41
  },
42
42
  "peerDependencies": {
43
- "@rayadesu/dsh-client-ui-billing": "^0.3.14",
44
- "@rayadesu/dsh-llm-billing": "^0.3.14"
43
+ "@rayadesu/dsh-client-ui-billing": "^0.3.15",
44
+ "@rayadesu/dsh-llm-billing": "^0.3.15"
45
45
  },
46
46
  "devDependencies": {
47
- "@deepseek-ai/cordis": "^4.0.2",
48
- "@deepseek-ai/dsh-invariants": "^0.1.6-alpha.1",
49
- "@deepseek-ai/dsh-typert-generator": "^0.1.6-alpha.1",
47
+ "@deepseek-ai/cordis": "^4.0.4",
48
+ "@deepseek-ai/dsh-invariants": "^0.1.7-alpha.2",
49
+ "@deepseek-ai/dsh-typert-generator": "^0.1.7-alpha.2",
50
50
  "@eslint/js": "^10.0.1",
51
51
  "@types/node": "^22.20.0",
52
52
  "eslint": "^10.9.1",