dsh-llm-verifier 0.9.2 → 0.9.4

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 ADDED
@@ -0,0 +1,22 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.9.4 - 2026-10-10
6
+
7
+ - **[构建 / 发布] `lib/` 转为构建产物,不再入库**
8
+ - `lib/` 加入 `.gitignore` 并解除跟踪;发布时由 `prepublishOnly`(`verify:release`)重建,再经 `files` 字段打进 tarball
9
+ - `files` 新增 `CHANGELOG.md`,并固定 `publishConfig.access` 为 `public`
10
+ - **[自动化] 接入 GitHub Actions 自动发版工作流与发版技能**
11
+ - `v*` tag 触发:typecheck → build → test → 从 CHANGELOG 提取 release notes → `pnpm pack` 打包 → 发布 npm 与 GitHub Release
12
+ - 附带 CI 工作流,在 Ubuntu 与 Windows 双平台验证
13
+ - **[修复] 发版工作流的三处失败点**
14
+ - 锁定 pnpm 11:pnpm 9 无法解析 `pnpm-workspace.yaml` 的 `minimumReleaseAgeExclude`,会把每条命令都误报成 `packages field missing or empty`
15
+ - 移除会在任何测试运行前就失败的 pnpm 缓存步骤
16
+ - `pnpm pack` 的完整清单曾被整体写入 `$GITHUB_OUTPUT`,导致 Release 收到多行 blob;现只取 `.tgz` 那一行,并在 `NPM_TOKEN` 缺失时直接给出补救提示,而非只抛裸 `ENEEDAUTH`
17
+ - **[测试] 两处断言改为平台无关表达**:缓存路径断言与 topic-storage fixture 改用平台辅助函数构造,不再依赖 POSIX 形式路径
18
+ - **[杂项] 清理失效的 `.claude/skills` 指针与临时截图**,`AGENTS.md` 硬性规矩 1 同步更正为「`lib/` 不入库」
19
+
20
+ ## 0.9.3 - 2026-10-05
21
+
22
+ - **[UI / Client] 新增 LLM Verifier Web 界面组件与源码映射**
package/lib/client.js CHANGED
@@ -3421,7 +3421,8 @@ window.__ModuleLoader__.load({
3421
3421
  //#endregion
3422
3422
  //#region src/client.tsx
3423
3423
  /**
3424
- * Icons, resolved by name across the two vocabularies this plugin spans.
3424
+ * The one glyph still borrowed from the host, resolved by name across the two vocabularies this
3425
+ * plugin spans.
3425
3426
  *
3426
3427
  * DSH 0.1.7 renamed the whole host icon set from a size suffix to a stroke suffix
3427
3428
  * (`IconDataOutline16` → `IconDataOutlineRegular`). The icon module is external to this bundle, so
@@ -3429,9 +3430,11 @@ window.__ModuleLoader__.load({
3429
3430
  * React throws on an undefined element type, which would take the entire settings page down
3430
3431
  * instead of dropping one glyph. Probing the namespace at runtime keeps one bundle working on
3431
3432
  * either line; a name that neither line defines renders nothing.
3433
+ *
3434
+ * The statistics mark is deliberately NOT in this list: every host glyph paints on `currentColor`,
3435
+ * so as a guide entry it rendered grey-on-navy. `VerifierSidebarIcon` paints its own brand ramp.
3432
3436
  */
3433
3437
  const hostIcons = _deepseek_ai_dsh_client_ui_primitives;
3434
- const IconData = hostIcons.IconDataOutlineRegular ?? hostIcons.IconDataOutline16 ?? (() => null);
3435
3438
  const IconRefresh = hostIcons.IconRefreshOutlineRegular ?? hostIcons.IconRefreshOutline16 ?? (() => null);
3436
3439
  const NS = "llm-verifier";
3437
3440
  const shell = {
@@ -5014,12 +5017,9 @@ window.__ModuleLoader__.load({
5014
5017
  display: "grid",
5015
5018
  placeItems: "center",
5016
5019
  width: 34,
5017
- height: 34,
5018
- borderRadius: 10,
5019
- background: "color-mix(in srgb, var(--dsw-alias-state-business-primary) 14%, transparent)",
5020
- color: "var(--dsw-alias-state-business-primary)"
5020
+ height: 34
5021
5021
  },
5022
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconData, { size: 18 })
5022
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VerifierSidebarIcon, { size: 26 })
5023
5023
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
5024
5024
  style: {
5025
5025
  margin: 0,
@@ -6039,17 +6039,72 @@ window.__ModuleLoader__.load({
6039
6039
  })
6040
6040
  });
6041
6041
  }
6042
- function VerifierSidebarIcon({ size, active }) {
6043
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6044
- style: {
6045
- display: "inline-flex",
6046
- alignItems: "center",
6047
- justifyContent: "center",
6048
- width: size,
6049
- height: size,
6050
- color: active ? "var(--dsw-alias-state-business-primary)" : "currentColor"
6051
- },
6052
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconData, { size: Math.min(18, size) })
6042
+ /**
6043
+ * The statistics mark: a brand-gradient tile carrying the verifier's shield-and-check.
6044
+ *
6045
+ * The host's glyph vocabulary is monochrome by contract (every icon draws on
6046
+ * `currentColor`, and the guide capsule pins that ink to a grey label alias), so a
6047
+ * host icon registered as a guide entry always reads as grey-on-navy — dim next
6048
+ * to a plugin whose glyph is coloured. This mark therefore ships its own paint:
6049
+ * the same violet→blue→teal ramp the dashboard header already wears, a white
6050
+ * shield, and a check cut back out of the ramp in the badge's own coordinates.
6051
+ *
6052
+ * Props follow the host's `IconProps` shape (`size` is the square edge in px,
6053
+ * `className` is for placement), so the same component serves the guide capsule
6054
+ * (26px) and the dashboard header (26px in a 34px well).
6055
+ *
6056
+ * @param props - rendered size and placement class.
6057
+ * @returns the statistics badge.
6058
+ */
6059
+ function VerifierSidebarIcon({ size = 26, className }) {
6060
+ const gradientId = `llm-verifier-badge-${(0, react.useId)().replace(/[^a-zA-Z0-9-]/g, "")}`;
6061
+ const paint = `url(#${gradientId})`;
6062
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
6063
+ width: size,
6064
+ height: size,
6065
+ viewBox: "0 0 24 24",
6066
+ fill: "none",
6067
+ "aria-hidden": "true",
6068
+ className,
6069
+ children: [
6070
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("defs", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("linearGradient", {
6071
+ id: gradientId,
6072
+ x1: "1.5",
6073
+ y1: "1",
6074
+ x2: "22.5",
6075
+ y2: "23",
6076
+ gradientUnits: "userSpaceOnUse",
6077
+ children: [
6078
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("stop", { stopColor: "#8A63FF" }),
6079
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("stop", {
6080
+ offset: "0.5",
6081
+ stopColor: "#4F7BFF"
6082
+ }),
6083
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("stop", {
6084
+ offset: "1",
6085
+ stopColor: "#2FC5C9"
6086
+ })
6087
+ ]
6088
+ }) }),
6089
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
6090
+ width: "24",
6091
+ height: "24",
6092
+ rx: "7.5",
6093
+ fill: paint
6094
+ }),
6095
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
6096
+ d: "M12 4.4 18.4 6.9v5.2c0 3.6-2.7 6.4-6.4 7.6-3.7-1.2-6.4-4-6.4-7.6V6.9L12 4.4Z",
6097
+ fill: "#FFFFFF",
6098
+ fillOpacity: "0.94"
6099
+ }),
6100
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
6101
+ d: "M8.8 12.3 11 14.5 15.3 9.7",
6102
+ stroke: paint,
6103
+ strokeWidth: "2.1",
6104
+ strokeLinecap: "round",
6105
+ strokeLinejoin: "round"
6106
+ })
6107
+ ]
6053
6108
  });
6054
6109
  }
6055
6110
  function GlobalVerifierDashboard({ rpc }) {