dsh-vault 1.10.63-rc.4 → 1.10.63

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-zh.md CHANGED
@@ -232,7 +232,7 @@ git clone git@github.com:Ox0400/dsh-vault.git
232
232
  cd dsh-vault
233
233
  pnpm install # 安装 devDependencies(typescript/tsdown/vitest 等)
234
234
  pnpm build # 构建 host 侧 lib/*.js 与浏览器 bundle lib/client.js
235
- pnpm test # 运行 41 项 vitest 测试
235
+ pnpm test # 运行 420 项 vitest 测试
236
236
  ```
237
237
 
238
238
  > 测试需要 harness 的 `dsh-llm`/`dsh-system-prompt` 等 peer 包,在 harness monorepo 内开发时由 workspace 链接提供。
@@ -240,7 +240,7 @@ pnpm test # 运行 41 项 vitest 测试
240
240
  常用命令:
241
241
 
242
242
  ```sh
243
- # 单元 + 集成测试(vitest,41 项)
243
+ # 单元 + 集成测试(vitest,420 项)
244
244
  pnpm test # 或 npx vitest run
245
245
 
246
246
  # 类型检查
@@ -253,7 +253,36 @@ pnpm build # = build:host (tsc) + build:client (tsdown)
253
253
  npm pack
254
254
  ```
255
255
 
256
- 仓库内所有测试通过:41/41(crypto/TOTP/密码生成/store CRUD/网关/集成)。
256
+ 仓库内所有测试通过:420/420(crypto/TOTP/密码生成/store CRUD/网关/集成)。
257
+
258
+ 浏览器侧检查跑在真实 `dsh web` 上(不属于 vitest),且**一律拒绝在 default 库上运行**:
259
+
260
+ ```sh
261
+ node tests/e2e/theme-check.mjs # 双主题 token、进度环轨道、附件行
262
+ node tests/e2e/polish-check.mjs # 空态文案、相对时间悬停
263
+ node tests/e2e/contrast-audit.mjs # 8 个标签页 × 双主题的 WCAG 对比度扫描
264
+ ```
265
+
266
+ 安全规则与「让对比度审计说谎的两个坑」见 `tests/e2e/README.md`。
267
+
268
+ ## 主题适配
269
+
270
+ UI 不写死颜色,而是读取宿主的设计变量:本地语义层映射到真实的 `--dsw-alias-*` 命名空间,并带字面量兜底,脱离 DeepSeek Harness 也能正常渲染。
271
+
272
+ ```css
273
+ --v-text: var(--dsw-alias-label-primary, #1f2328);
274
+ --v-border: var(--dsw-alias-border-l2, #d9d9d9);
275
+ --v-success-text: color-mix(in srgb, var(--v-success) 55%, var(--v-text));
276
+ ```
277
+
278
+ 因为别名会随 `body[data-ds-dark-theme]` 翻转,浅色/深色自动跟随宿主 —— 没有第二套样式表,也没有主题参数。
279
+
280
+ 这层语义层要守住的两条规则:
281
+
282
+ - **状态色 `state-*-primary` 不能当正文颜色。** 它们是为填充块和图标调的:白底上 success 只有 2.28:1、warn 只有 2.15:1,远低于 WCAG AA。`--v-*-text` 变体把它们与主题正文色混合,于是同一条声明在浅色下压暗、深色下提亮(浅色 5.8/5.6/7.5:1,深色 12+/11+/6.5:1)。
283
+ - **不要用 `opacity` 弱化文字。** `opacity: .8` 会把 5.8:1 变成 3.9:1。要「次要」就用 token(`--v-text-2`),不要用透明度。
284
+
285
+ `tests/e2e/contrast-audit.mjs` 会在两套主题、全部标签页上验证这两条。
257
286
 
258
287
  ## 打包与发布
259
288
 
package/README.md CHANGED
@@ -259,7 +259,7 @@ git clone git@github.com:Ox0400/dsh-vault.git
259
259
  cd dsh-vault
260
260
  pnpm install # installs devDependencies (typescript/tsdown/vitest, …)
261
261
  pnpm build # builds host lib/*.js and the browser bundle lib/client.js
262
- pnpm test # runs the 41 vitest tests
262
+ pnpm test # runs the 420 vitest tests
263
263
  ```
264
264
 
265
265
  > Tests need harness peer packages such as `dsh-llm`/`dsh-system-prompt`; inside the harness monorepo these resolve via workspace links.
@@ -267,13 +267,53 @@ pnpm test # runs the 41 vitest tests
267
267
  Common commands:
268
268
 
269
269
  ```sh
270
- pnpm test # unit + integration tests (vitest, 41)
270
+ pnpm test # unit + integration tests (vitest, 420)
271
271
  pnpm typecheck # tsc -p tsconfig.json --noEmit
272
272
  pnpm build # = build:host (tsc) + build:client (tsdown)
273
273
  npm pack # optional: tarball for `dsh plugin add ./dsh-vault-0.1.1.tgz`
274
274
  ```
275
275
 
276
- All 41 tests pass (crypto / TOTP / password generation / store CRUD / gateway / integration).
276
+ All 420 tests pass (crypto / TOTP / password generation / store CRUD / gateway / integration).
277
+
278
+ Browser checks run against a real `dsh web` instead of vitest, and every one of
279
+ them refuses to operate on the default vault:
280
+
281
+ ```sh
282
+ node tests/e2e/theme-check.mjs # dual-theme tokens, ring track, attach row
283
+ node tests/e2e/polish-check.mjs # empty-state copy, relative-age hover hints
284
+ node tests/e2e/contrast-audit.mjs # WCAG sweep over all eight tabs, both themes
285
+ ```
286
+
287
+ See `tests/e2e/README.md` for the safety rules and for the two traps that make a
288
+ contrast audit lie (serialised `color(srgb …)` values, and `opacity` counting as
289
+ part of the colour).
290
+
291
+ ## Theming
292
+
293
+ The UI reads the host's design tokens instead of hard-coded colours. A local
294
+ semantic layer maps onto the real `--dsw-alias-*` namespace, with literal
295
+ fallbacks so the page still renders outside DeepSeek Harness:
296
+
297
+ ```css
298
+ --v-text: var(--dsw-alias-label-primary, #1f2328);
299
+ --v-border: var(--dsw-alias-border-l2, #d9d9d9);
300
+ --v-success-text: color-mix(in srgb, var(--v-success) 55%, var(--v-text));
301
+ ```
302
+
303
+ Because the aliases flip with `body[data-ds-dark-theme]`, light and dark follow
304
+ the host automatically — there is no second stylesheet and no theme prop.
305
+
306
+ Two rules the layer exists to enforce:
307
+
308
+ - **Never use `state-*-primary` as body text.** Those tokens are tuned for fills
309
+ and icons: on white they measure 2.28:1 (success) and 2.15:1 (warn), far below
310
+ WCAG AA. The `--v-*-text` variants mix them towards the theme's own text colour,
311
+ so one declaration darkens on light and lightens on dark (light 5.8/5.6/7.5:1,
312
+ dark 12+/11+/6.5:1).
313
+ - **Never dim text with `opacity`.** `opacity: .8` turns a 5.8:1 colour into
314
+ 3.9:1. Express "secondary" with a token (`--v-text-2`), not with transparency.
315
+
316
+ `tests/e2e/contrast-audit.mjs` verifies both across every tab in both themes.
277
317
 
278
318
  ## Packaging & Publishing
279
319
 
package/lib/client.js CHANGED
@@ -445,191 +445,191 @@ window.__ModuleLoader__.load({
445
445
  document.head.appendChild(tag);
446
446
  }
447
447
  var VaultSection_module_css_default = {
448
- "inlineInput": "t_j5va_inlineInput",
449
- "exportChip": "t_j5va_exportChip",
450
- "vaultTarget": "t_j5va_vaultTarget",
451
- "attachBox": "t_j5va_attachBox",
452
- "pwHistPwd": "t_j5va_pwHistPwd",
453
- "field": "t_j5va_field",
454
- "dupGroup": "t_j5va_dupGroup",
455
- "dangerButton": "t_j5va_dangerButton",
448
+ "pwFair": "t_j5va_pwFair",
449
+ "hit": "t_j5va_hit",
450
+ "intro": "t_j5va_intro",
451
+ "dueBadge": "t_j5va_dueBadge",
456
452
  "pwMeter": "t_j5va_pwMeter",
457
- "modeAsk": "t_j5va_modeAsk",
458
- "brandGlyph": "t_j5va_brandGlyph",
459
- "kindChip": "t_j5va_kindChip",
460
- "retryButton": "t_j5va_retryButton",
461
- "badgeBtn": "t_j5va_badgeBtn",
462
- "rowSelected": "t_j5va_rowSelected",
463
- "rowActions": "t_j5va_rowActions",
464
- "row": "t_j5va_row",
465
- "histUpdate": "t_j5va_histUpdate",
466
453
  "emojiPicker": "t_j5va_emojiPicker",
467
- "importName": "t_j5va_importName",
468
- "sortButton": "t_j5va_sortButton",
454
+ "customFieldRows": "t_j5va_customFieldRows",
455
+ "identity": "t_j5va_identity",
456
+ "policyBar": "t_j5va_policyBar",
457
+ "vaultHeader": "t_j5va_vaultHeader",
458
+ "gridName": "t_j5va_gridName",
459
+ "badgeWarn": "t_j5va_badgeWarn",
460
+ "badgeDanger": "t_j5va_badgeDanger",
461
+ "customValueInput": "t_j5va_customValueInput",
462
+ "detailBox": "t_j5va_detailBox",
463
+ "secretField": "t_j5va_secretField",
464
+ "dangerButton": "t_j5va_dangerButton",
465
+ "histDanger": "t_j5va_histDanger",
466
+ "kindChipActive": "t_j5va_kindChipActive",
467
+ "badge": "t_j5va_badge",
468
+ "importList": "t_j5va_importList",
469
+ "pinOn": "t_j5va_pinOn",
470
+ "gridRow": "t_j5va_gridRow",
471
+ "emptyHint": "t_j5va_emptyHint",
469
472
  "genOpts": "t_j5va_genOpts",
473
+ "colorSwatch": "t_j5va_colorSwatch",
474
+ "dupGroup": "t_j5va_dupGroup",
475
+ "selectActive": "t_j5va_selectActive",
476
+ "riskWarn": "t_j5va_riskWarn",
477
+ "riskDanger": "t_j5va_riskDanger",
478
+ "healthSummary": "t_j5va_healthSummary",
479
+ "moreWrap": "t_j5va_moreWrap",
480
+ "recentChip": "t_j5va_recentChip",
481
+ "section": "t_j5va_section",
482
+ "inlineInput": "t_j5va_inlineInput",
483
+ "exportChips": "t_j5va_exportChips",
484
+ "detailActions": "t_j5va_detailActions",
485
+ "reportBox": "t_j5va_reportBox",
486
+ "detailRemain": "t_j5va_detailRemain",
470
487
  "saveButton": "t_j5va_saveButton",
471
- "iconFieldWrap": "t_j5va_iconFieldWrap",
472
- "actionPrimary": "t_j5va_actionPrimary",
488
+ "error": "t_j5va_error",
489
+ "histUpdate": "t_j5va_histUpdate",
490
+ "pwBar": "t_j5va_pwBar",
491
+ "rowSelected": "t_j5va_rowSelected",
492
+ "colorPalette": "t_j5va_colorPalette",
493
+ "histLink": "t_j5va_histLink",
494
+ "modeAuto": "t_j5va_modeAuto",
495
+ "detailItem": "t_j5va_detailItem",
496
+ "editorBody": "t_j5va_editorBody",
497
+ "list": "t_j5va_list",
498
+ "auditChip": "t_j5va_auditChip",
499
+ "attachBox": "t_j5va_attachBox",
500
+ "addButton": "t_j5va_addButton",
501
+ "tagManager": "t_j5va_tagManager",
502
+ "tab": "t_j5va_tab",
503
+ "empty": "t_j5va_empty",
504
+ "policyField": "t_j5va_policyField",
505
+ "customKeyInput": "t_j5va_customKeyInput",
473
506
  "detailDeleteBtn": "t_j5va_detailDeleteBtn",
474
- "histAdd": "t_j5va_histAdd",
475
- "genOptRow": "t_j5va_genOptRow",
507
+ "tabActive": "t_j5va_tabActive",
508
+ "reportSub": "t_j5va_reportSub",
509
+ "brandGlyphSm": "t_j5va_brandGlyphSm",
510
+ "riskBanner": "t_j5va_riskBanner",
511
+ "pinOff": "t_j5va_pinOff",
512
+ "sortButton": "t_j5va_sortButton",
476
513
  "lenChip": "t_j5va_lenChip",
477
- "dupNames": "t_j5va_dupNames",
478
- "tabPane": "t_j5va_tabPane",
514
+ "lenChipActive": "t_j5va_lenChipActive",
515
+ "reportLine": "t_j5va_reportLine",
516
+ "headerMessage": "t_j5va_headerMessage",
517
+ "bulkBar": "t_j5va_bulkBar",
518
+ "moreMenu": "t_j5va_moreMenu",
519
+ "row": "t_j5va_row",
520
+ "tagRow": "t_j5va_tagRow",
521
+ "genHist": "t_j5va_genHist",
522
+ "importActions": "t_j5va_importActions",
523
+ "histAdd": "t_j5va_histAdd",
524
+ "pwHistRow": "t_j5va_pwHistRow",
525
+ "badgeLink": "t_j5va_badgeLink",
526
+ "customFieldRow": "t_j5va_customFieldRow",
527
+ "scoreRing": "t_j5va_scoreRing",
528
+ "searchBox": "t_j5va_searchBox",
529
+ "recentSearch": "t_j5va_recentSearch",
530
+ "importDesc": "t_j5va_importDesc",
531
+ "rowDue": "t_j5va_rowDue",
532
+ "dupMerge": "t_j5va_dupMerge",
533
+ "pwStrong": "t_j5va_pwStrong",
479
534
  "tagManagerHead": "t_j5va_tagManagerHead",
480
- "badgeOk": "t_j5va_badgeOk",
481
- "detailCode": "t_j5va_detailCode",
482
- "copyAllBtn": "t_j5va_copyAllBtn",
483
- "gridActions": "t_j5va_gridActions",
484
535
  "badgeActive": "t_j5va_badgeActive",
485
- "searchBox": "t_j5va_searchBox",
536
+ "histNeutral": "t_j5va_histNeutral",
537
+ "pwWeak": "t_j5va_pwWeak",
538
+ "highBadge": "t_j5va_highBadge",
539
+ "pwLabel": "t_j5va_pwLabel",
540
+ "recentClear": "t_j5va_recentClear",
541
+ "gridActions": "t_j5va_gridActions",
542
+ "deleteButton": "t_j5va_deleteButton",
543
+ "reportJump": "t_j5va_reportJump",
544
+ "revealButton": "t_j5va_revealButton",
545
+ "tabPane": "t_j5va_tabPane",
546
+ "totpRing": "t_j5va_totpRing",
547
+ "gridDetail": "t_j5va_gridDetail",
548
+ "srOnly": "t_j5va_srOnly",
486
549
  "auditWhen": "t_j5va_auditWhen",
550
+ "pinStar": "t_j5va_pinStar",
551
+ "pwHistBox": "t_j5va_pwHistBox",
552
+ "detailCode": "t_j5va_detailCode",
553
+ "searchKbd": "t_j5va_searchKbd",
554
+ "field": "t_j5va_field",
555
+ "status": "t_j5va_status",
556
+ "rowCheck": "t_j5va_rowCheck",
487
557
  "auditChips": "t_j5va_auditChips",
488
- "editorActions": "t_j5va_editorActions",
558
+ "rowExpired": "t_j5va_rowExpired",
559
+ "genOptRow": "t_j5va_genOptRow",
560
+ "genHistItem": "t_j5va_genHistItem",
561
+ "toolbarDivider": "t_j5va_toolbarDivider",
562
+ "backupButton": "t_j5va_backupButton",
563
+ "kindChip": "t_j5va_kindChip",
564
+ "auditIssues": "t_j5va_auditIssues",
489
565
  "auditRow": "t_j5va_auditRow",
490
- "tagManager": "t_j5va_tagManager",
491
- "importActions": "t_j5va_importActions",
492
- "searchKbd": "t_j5va_searchKbd",
493
- "urlGlyph": "t_j5va_urlGlyph",
494
- "headerMessage": "t_j5va_headerMessage",
495
- "bulkBar": "t_j5va_bulkBar",
496
- "selectActive": "t_j5va_selectActive",
497
- "riskWarn": "t_j5va_riskWarn",
498
- "emojiBtn": "t_j5va_emojiBtn",
499
- "trashButton": "t_j5va_trashButton",
500
- "totpRing": "t_j5va_totpRing",
501
- "tabs": "t_j5va_tabs",
566
+ "retryButton": "t_j5va_retryButton",
502
567
  "favActive": "t_j5va_favActive",
503
- "colorPalette": "t_j5va_colorPalette",
504
- "recentChip": "t_j5va_recentChip",
505
- "uriCode": "t_j5va_uriCode",
506
- "kindChipActive": "t_j5va_kindChipActive",
507
- "auditChip": "t_j5va_auditChip",
508
- "moreWrap": "t_j5va_moreWrap",
509
- "detailBox": "t_j5va_detailBox",
510
- "badge": "t_j5va_badge",
511
- "rowCheck": "t_j5va_rowCheck",
512
- "rowDue": "t_j5va_rowDue",
513
- "pwHistTime": "t_j5va_pwHistTime",
514
- "pinOff": "t_j5va_pinOff",
568
+ "exportChip": "t_j5va_exportChip",
569
+ "clearButton": "t_j5va_clearButton",
570
+ "tagCount": "t_j5va_tagCount",
571
+ "moreButton": "t_j5va_moreButton",
515
572
  "bulkItem": "t_j5va_bulkItem",
516
- "srOnly": "t_j5va_srOnly",
517
- "status": "t_j5va_status",
518
- "pinStar": "t_j5va_pinStar",
519
- "intro": "t_j5va_intro",
520
- "pwLabel": "t_j5va_pwLabel",
521
- "totpCopy": "t_j5va_totpCopy",
522
- "detailRemain": "t_j5va_detailRemain",
523
- "tagRow": "t_j5va_tagRow",
524
- "healthSummary": "t_j5va_healthSummary",
525
- "modeReadonly": "t_j5va_modeReadonly",
526
- "hit": "t_j5va_hit",
573
+ "lenChips": "t_j5va_lenChips",
574
+ "editorActions": "t_j5va_editorActions",
575
+ "recentLabel": "t_j5va_recentLabel",
576
+ "tagActions": "t_j5va_tagActions",
527
577
  "lockedBanner": "t_j5va_lockedBanner",
528
- "tagCount": "t_j5va_tagCount",
529
- "pwWeak": "t_j5va_pwWeak",
530
- "badgeWarn": "t_j5va_badgeWarn",
531
- "lockedTag": "t_j5va_lockedTag",
532
- "importList": "t_j5va_importList",
533
- "healthBar": "t_j5va_healthBar",
534
- "gridName": "t_j5va_gridName",
535
- "inlineField": "t_j5va_inlineField",
536
- "highBadge": "t_j5va_highBadge",
537
- "clearButton": "t_j5va_clearButton",
538
- "dupMerge": "t_j5va_dupMerge",
539
- "toolbarMain": "t_j5va_toolbarMain",
540
- "customKeyInput": "t_j5va_customKeyInput",
541
- "importDesc": "t_j5va_importDesc",
542
- "genHistItem": "t_j5va_genHistItem",
543
- "list": "t_j5va_list",
544
- "actionGroup": "t_j5va_actionGroup",
545
- "tabActive": "t_j5va_tabActive",
546
- "reportBox": "t_j5va_reportBox",
578
+ "bulkCount": "t_j5va_bulkCount",
579
+ "totp": "t_j5va_totp",
580
+ "attachAdd": "t_j5va_attachAdd",
581
+ "detailTotp": "t_j5va_detailTotp",
582
+ "toolbarFilters": "t_j5va_toolbarFilters",
583
+ "auditChipActive": "t_j5va_auditChipActive",
584
+ "emojiBtn": "t_j5va_emojiBtn",
547
585
  "actionGroups": "t_j5va_actionGroups",
548
- "identity": "t_j5va_identity",
549
- "tagActions": "t_j5va_tagActions",
550
- "policyField": "t_j5va_policyField",
551
- "checkField": "t_j5va_checkField",
552
- "resultCount": "t_j5va_resultCount",
553
- "emptyBox": "t_j5va_emptyBox",
554
- "brandGlyphSm": "t_j5va_brandGlyphSm",
555
- "copied": "t_j5va_copied",
556
- "detailItem": "t_j5va_detailItem",
586
+ "badgeOk": "t_j5va_badgeOk",
587
+ "actionGroup": "t_j5va_actionGroup",
588
+ "editor": "t_j5va_editor",
557
589
  "actionGroupLabel": "t_j5va_actionGroupLabel",
558
- "addButton": "t_j5va_addButton",
559
- "deleteButton": "t_j5va_deleteButton",
560
- "badgeDanger": "t_j5va_badgeDanger",
561
- "customFieldRows": "t_j5va_customFieldRows",
562
- "toolbar": "t_j5va_toolbar",
563
- "scoreRing": "t_j5va_scoreRing",
564
- "detailTotp": "t_j5va_detailTotp",
565
- "recentSearch": "t_j5va_recentSearch",
566
- "customEq": "t_j5va_customEq",
567
- "moreMenu": "t_j5va_moreMenu",
568
- "kindIcon": "t_j5va_kindIcon",
569
- "vaultHeader": "t_j5va_vaultHeader",
590
+ "vaultSwitch": "t_j5va_vaultSwitch",
591
+ "modeReadonly": "t_j5va_modeReadonly",
592
+ "rowMain": "t_j5va_rowMain",
570
593
  "vaultManageRow": "t_j5va_vaultManageRow",
594
+ "inlineField": "t_j5va_inlineField",
595
+ "actionBtn": "t_j5va_actionBtn",
571
596
  "title": "t_j5va_title",
572
- "reportTitle": "t_j5va_reportTitle",
573
- "pwBar": "t_j5va_pwBar",
574
- "riskBanner": "t_j5va_riskBanner",
575
- "colorFieldWrap": "t_j5va_colorFieldWrap",
576
- "vaultSwitch": "t_j5va_vaultSwitch",
577
- "revealButton": "t_j5va_revealButton",
578
- "tab": "t_j5va_tab",
579
- "emptyHint": "t_j5va_emptyHint",
580
- "modeAuto": "t_j5va_modeAuto",
581
- "tagName": "t_j5va_tagName",
582
- "listCompact": "t_j5va_listCompact",
583
- "genHist": "t_j5va_genHist",
584
- "gridDetail": "t_j5va_gridDetail",
585
- "secretField": "t_j5va_secretField",
586
- "lenChips": "t_j5va_lenChips",
587
- "reportSub": "t_j5va_reportSub",
588
- "riskDanger": "t_j5va_riskDanger",
589
- "pwHistRow": "t_j5va_pwHistRow",
590
- "detailActions": "t_j5va_detailActions",
591
- "pinOn": "t_j5va_pinOn",
592
- "lenChipActive": "t_j5va_lenChipActive",
593
- "favToggle": "t_j5va_favToggle",
597
+ "kindIcon": "t_j5va_kindIcon",
598
+ "badgeBtn": "t_j5va_badgeBtn",
599
+ "uriCode": "t_j5va_uriCode",
600
+ "checkField": "t_j5va_checkField",
601
+ "toolbarMain": "t_j5va_toolbarMain",
594
602
  "reportLineLink": "t_j5va_reportLineLink",
595
- "policyBar": "t_j5va_policyBar",
596
- "editorBody": "t_j5va_editorBody",
597
- "histNeutral": "t_j5va_histNeutral",
598
- "reportJump": "t_j5va_reportJump",
599
- "kindFilter": "t_j5va_kindFilter",
600
- "customFieldRow": "t_j5va_customFieldRow",
601
- "toolbarFilters": "t_j5va_toolbarFilters",
602
- "dueBadge": "t_j5va_dueBadge",
603
+ "actionPrimary": "t_j5va_actionPrimary",
604
+ "lockedTag": "t_j5va_lockedTag",
605
+ "rowActions": "t_j5va_rowActions",
606
+ "vaultTarget": "t_j5va_vaultTarget",
603
607
  "gridInput": "t_j5va_gridInput",
604
- "section": "t_j5va_section",
605
- "colorSwatch": "t_j5va_colorSwatch",
606
- "badgeLink": "t_j5va_badgeLink",
607
- "recentLabel": "t_j5va_recentLabel",
608
- "empty": "t_j5va_empty",
609
- "backupButton": "t_j5va_backupButton",
610
- "pwStrong": "t_j5va_pwStrong",
608
+ "copyAllBtn": "t_j5va_copyAllBtn",
609
+ "totpCopy": "t_j5va_totpCopy",
610
+ "copied": "t_j5va_copied",
611
+ "tabs": "t_j5va_tabs",
612
+ "healthBar": "t_j5va_healthBar",
613
+ "favToggle": "t_j5va_favToggle",
614
+ "brandGlyph": "t_j5va_brandGlyph",
615
+ "listCompact": "t_j5va_listCompact",
616
+ "pwHistPwd": "t_j5va_pwHistPwd",
617
+ "urlGlyph": "t_j5va_urlGlyph",
611
618
  "importRow": "t_j5va_importRow",
612
- "gridRow": "t_j5va_gridRow",
613
- "editor": "t_j5va_editor",
614
- "bulkCount": "t_j5va_bulkCount",
615
- "moreButton": "t_j5va_moreButton",
616
- "histDanger": "t_j5va_histDanger",
617
- "histLink": "t_j5va_histLink",
618
- "actionBtn": "t_j5va_actionBtn",
619
- "rowExpired": "t_j5va_rowExpired",
620
- "attachAdd": "t_j5va_attachAdd",
621
- "customValueInput": "t_j5va_customValueInput",
622
- "auditIssues": "t_j5va_auditIssues",
623
- "pwFair": "t_j5va_pwFair",
624
- "exportChips": "t_j5va_exportChips",
625
- "totp": "t_j5va_totp",
626
- "auditChipActive": "t_j5va_auditChipActive",
627
- "rowMain": "t_j5va_rowMain",
628
- "recentClear": "t_j5va_recentClear",
629
- "toolbarDivider": "t_j5va_toolbarDivider",
630
- "error": "t_j5va_error",
631
- "reportLine": "t_j5va_reportLine",
632
- "pwHistBox": "t_j5va_pwHistBox"
619
+ "reportTitle": "t_j5va_reportTitle",
620
+ "toolbar": "t_j5va_toolbar",
621
+ "emptyBox": "t_j5va_emptyBox",
622
+ "kindFilter": "t_j5va_kindFilter",
623
+ "dupNames": "t_j5va_dupNames",
624
+ "iconFieldWrap": "t_j5va_iconFieldWrap",
625
+ "tagName": "t_j5va_tagName",
626
+ "importName": "t_j5va_importName",
627
+ "pwHistTime": "t_j5va_pwHistTime",
628
+ "resultCount": "t_j5va_resultCount",
629
+ "trashButton": "t_j5va_trashButton",
630
+ "customEq": "t_j5va_customEq",
631
+ "colorFieldWrap": "t_j5va_colorFieldWrap",
632
+ "modeAsk": "t_j5va_modeAsk"
633
633
  };
634
634
  //#endregion
635
635
  //#region src/client/VaultSection.tsx
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-vault",
3
- "version": "1.10.63-rc.4",
3
+ "version": "1.10.63",
4
4
  "description": "Encrypted credential vault for DeepSeek Harness: store and retrieve usernames, emails, phone numbers, passwords, TOTP secrets, SSH/API-key/OAuth developer credentials through model tools and a Settings UI page.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -78,6 +78,9 @@
78
78
  "build:client": "tsdown",
79
79
  "prepare": "npm run build",
80
80
  "test": "vitest run",
81
- "typecheck": "tsc -p tsconfig.json --noEmit"
81
+ "typecheck": "tsc -p tsconfig.json --noEmit",
82
+ "e2e:theme": "node tests/e2e/theme-check.mjs",
83
+ "e2e:polish": "node tests/e2e/polish-check.mjs",
84
+ "e2e:contrast": "node tests/e2e/contrast-audit.mjs"
82
85
  }
83
86
  }