dsh-vault 1.10.65 → 1.10.67

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
@@ -207,7 +207,7 @@ npx dsh-vault list
207
207
 
208
208
  ### 1. `env` 是干什么的
209
209
 
210
- `dsh-vault env` 把**打了 `env` 标签**的条目打印成 shell 赋值语句,让脚本自己把密钥取走:
210
+ `get` 取**一个**值,不需要任何标签。`dsh-vault env` 是另一种场景:脚本要**一次拿好几个**密钥。它把**打了 `env` 标签**的条目打印成 shell 赋值语句,让脚本自己取走:
211
211
 
212
212
  ```
213
213
  $ dsh-vault env
@@ -228,10 +228,25 @@ echo "$DEMO_API_KEY"
228
228
  "no entries are tagged for environment export";先在 UI 里给条目的标签加上 `env`,或让助手执行 `vault_update { id, tags: ["env"] }`。
229
229
  - 名字默认由标题 + 字段推导(`DASHSCOPE` + `apiKey` → `DASHSCOPE_API_KEY`);想固定名字就在条目的 `envKeys` 里指定 —— 见[环境变量导出](#环境变量导出)。
230
230
 
231
+
232
+ **命名 —— 只有三个,其中两个故意都叫 `env`:**
233
+
234
+ | 名字 | 是什么 | 含义 |
235
+ |---|---|---|
236
+ | `env` | 条目的**标签** | 决定哪些条目会被 `dsh-vault env` 导出;不打标签就不导出 |
237
+ | `env` | **命令** | 打印带该标签的条目 |
238
+ | `envKeys` | 条目的**字段**(可选) | 固定确切名字,例如 `["DASHSCOPE_API_KEY"]`;旧的单数写法 `envKey` 仍作为"只写一个"的简写接受 |
239
+
240
+ 除此之外没有任何叫 `env*` 的东西:`list --json` / `show` 只报 `envKeys`(该条目会导出的名字,也就是 `get` 接受的名字)与 `envTagged`(是否被 `env` 包含)。
241
+
231
242
  ### 2. 有哪些命令
232
243
 
233
244
  ```sh
234
- dsh-vault list # id、类型、标题、导出的变量名,绝不含密钥
245
+ dsh-vault list # 分组显示:哪些会被 env 导出、哪些不会
246
+ # Exported by `env` (tag "env") — 1 entry:
247
+ # a1b2c3d4-… api-key DASHSCOPE → DASHSCOPE_API_KEY
248
+ # Not exported (no "env" tag) — 1 entry; `get <name>` still works for it:
249
+ # 9f8e7d6c-… api-key Example Billing → EXAMPLE_BILLING_API_KEY
235
250
  dsh-vault get my-entry # 取该条目的主密钥,仅 stdout
236
251
  dsh-vault get my-entry --field apiKey # 取指定字段
237
252
  dsh-vault get my-entry --mask # 只确认存在,不打印值
package/README.md CHANGED
@@ -216,8 +216,9 @@ row (`pnpm vault …` in a checkout).
216
216
 
217
217
  ### 1. What `env` is for
218
218
 
219
- `dsh-vault env` prints the entries you tagged `env` as shell assignments, so a
220
- script can pick the secrets up itself:
219
+ `get` fetches **one** value and needs no tag. `dsh-vault env` is for the other
220
+ case: a script that needs **several** secrets at once. It prints the entries you
221
+ tagged `env` as shell assignments, so the script picks them up itself:
221
222
 
222
223
  ```
223
224
  $ dsh-vault env
@@ -242,10 +243,26 @@ Two things worth knowing:
242
243
  `DASHSCOPE_API_KEY`) unless the entry sets `envKeys` — see
243
244
  [Environment export](#environment-export).
244
245
 
246
+
247
+ **Names — there are only three, and two of them are the word `env` on purpose:**
248
+
249
+ | name | what it is | meaning |
250
+ |---|---|---|
251
+ | `env` | an entry **tag** | which entries `dsh-vault env` exports; nothing is exported without it |
252
+ | `env` | the **command** | prints exactly the entries carrying that tag |
253
+ | `envKeys` | an entry **field** (optional) | pin exact names, e.g. `["DASHSCOPE_API_KEY"]`; the old singular `envKey` is accepted as a one-element shorthand |
254
+
255
+ Nothing else is called `env*`: `list --json` / `show` report `envKeys` (the names
256
+ an entry exports — what `get` accepts) and `envTagged` (whether `env` includes it).
257
+
245
258
  ### 2. The commands
246
259
 
247
260
  ```sh
248
- dsh-vault list # id, kind, title, exported env name — never secrets
261
+ dsh-vault list # grouped: what `env` exports vs the rest
262
+ # Exported by `env` (tag "env") — 1 entry:
263
+ # a1b2c3d4-… api-key DASHSCOPE → DASHSCOPE_API_KEY
264
+ # Not exported (no "env" tag) — 1 entry; `get <name>` still works for it:
265
+ # 9f8e7d6c-… api-key Example Billing → EXAMPLE_BILLING_API_KEY
249
266
  dsh-vault get my-entry # the entry's primary secret, stdout only
250
267
  dsh-vault get my-entry --field apiKey # one named field
251
268
  dsh-vault get my-entry --mask # confirm it exists without printing it
package/lib/cli.js CHANGED
@@ -43,7 +43,9 @@ Commands:
43
43
  list List entries with their env name (never secrets)
44
44
  get <id|title|ENVKEY> Print one field of an entry (default: its main secret)
45
45
  show <id|title|ENVKEY> Print an entry's non-secret fields as JSON
46
- env Print env-tagged entries as KEY=VALUE lines
46
+ env Print env-TAGGED entries as KEY=VALUE lines (an entry
47
+ must carry the tag "env"; "list" marks those [env]).
48
+ One value only? "get <entry>" needs no tag.
47
49
  export-env <path> Write those lines to a file (mode 0600)
48
50
  verify Check the master password (nothing on stdout)
49
51
 
@@ -62,6 +64,10 @@ list options:
62
64
  the count of further keys in parentheses, and [env]
63
65
  when the entry is included in "dsh-vault env")
64
66
 
67
+ JSON output ("list --json", "show") reports per entry:
68
+ envKeys the env names it exports (what "get" accepts)
69
+ envTagged whether "dsh-vault env" includes it
70
+
65
71
  get options:
66
72
  --field <name> apiKey | secret | accessToken | refreshToken | privateKey
67
73
  | password | cardNumber | username | url | fields.<custom>
@@ -302,13 +308,12 @@ function publicFields(entry) {
302
308
  out[key] = value;
303
309
  }
304
310
  out.hasSecret = primarySecret(entry) !== undefined;
305
- // Every env name this entry would export, and whether it is actually
306
- // included in `dsh-vault env` (the tag decides that).
307
- // `envKeys` is what the user configured; `exportedKeys` is what the entry
308
- // will actually emit (and what `get` accepts). Keeping them apart is the
309
- // whole point — they used to be one confusingly-similar pair of names.
310
- out.envKeys = Array.isArray(entry.envKeys) ? entry.envKeys : (entry.envKey !== undefined ? [entry.envKey] : []);
311
- out.exportedKeys = envPairsForEntry(entry).map(pair => pair.key);
311
+ // ONE name for "the env names this entry exports": `envKeys`. It used to be a
312
+ // configured `envKeys` plus a computed `exportedKeys`, which read as two
313
+ // similar things — the computed list is the useful one (it already starts with
314
+ // whatever was pinned), so only that is reported.
315
+ out.envKeys = envPairsForEntry(entry).map(pair => pair.key);
316
+ // Whether `dsh-vault env` includes this entry (the tag decides).
312
317
  out.envTagged = (entry.tags ?? []).includes('env');
313
318
  return out;
314
319
  }
@@ -382,18 +387,33 @@ export async function runCli(argv, io) {
382
387
  io.out(`${JSON.stringify(entries.map(publicFields), null, 2)}\n`);
383
388
  return 0;
384
389
  }
385
- for (const entry of entries) {
390
+ // Group by what `env` actually does, because a bare `→ NAME` column used
391
+ // to read as "this is exported" for every entry: the name is only
392
+ // POTENTIAL until the entry carries the tag.
393
+ const line = (entry) => {
386
394
  const identity = [entry.username, entry.host, entry.url]
387
395
  .filter((v) => typeof v === 'string' && v.length > 0).join(' · ');
388
- // Show the env name `get`/`env` would use, so a script author can copy
389
- // it straight out of the listing (plus how many more keys follow).
390
396
  const keys = envPairsForEntry(entry).map(pair => pair.key);
391
- const envSuffix = keys.length > 0
392
- ? ` → ${keys[0]}${keys.length > 1 ? ` (+${keys.length - 1})` : ''}`
393
- : '';
394
- const tagged = (entry.tags ?? []).includes('env') ? ' [env]' : '';
395
- io.out(`${entry.id} ${(entry.kind ?? 'login').padEnd(8)} ${entry.title}`
396
- + `${identity.length > 0 ? ` (${identity})` : ''}${envSuffix}${tagged}\n`);
397
+ const suffix = keys.length > 0 ? ` → ${keys[0]}${keys.length > 1 ? ` (+${keys.length - 1})` : ''}` : '';
398
+ return `${entry.id} ${(entry.kind ?? 'login').padEnd(8)} ${entry.title}`
399
+ + `${identity.length > 0 ? ` (${identity})` : ''}${suffix}`;
400
+ };
401
+ const tagged = entries.filter(entry => (entry.tags ?? []).includes('env'));
402
+ const untagged = entries.filter(entry => !(entry.tags ?? []).includes('env'));
403
+ if (tagged.length > 0) {
404
+ io.out(`Exported by \`env\` (tag "env") — ${tagged.length} ${tagged.length === 1 ? 'entry' : 'entries'}:\n`);
405
+ for (const entry of tagged)
406
+ io.out(` ${line(entry)}\n`);
407
+ }
408
+ else {
409
+ io.out('Exported by `env` (tag "env"): none.\n');
410
+ io.out(' `env` prints only tagged entries; add the tag to one (UI: the entry\'s tags field)\n');
411
+ io.out(' or ask the assistant: vault_update { id, tags: ["env"] }.\n');
412
+ }
413
+ if (untagged.length > 0) {
414
+ io.out(`\nNot exported (no "env" tag) — ${untagged.length} ${untagged.length === 1 ? 'entry' : 'entries'}; \`get <name>\` still works for them:\n`);
415
+ for (const entry of untagged)
416
+ io.out(` ${line(entry)}\n`);
397
417
  }
398
418
  return 0;
399
419
  }
@@ -472,12 +492,16 @@ export async function runCli(argv, io) {
472
492
  }
473
493
  io.out(rendered.join('\n') + (rendered.length > 0 ? '\n' : ''));
474
494
  if (rendered.length === 0) {
475
- // The usual first-run wall: `env` only exports entries tagged `env`.
476
- io.err('dsh-vault: no entries are tagged for environment export.\n');
477
- io.err(' `env` prints the entries whose tags include "env". Tag one first:\n');
478
- io.err(' - in the UI: Settings → Credentials → the entry → 标签/Fields\' "tags" → env\n');
479
- io.err(' - or ask the assistant: vault_update { id, tags: ["env"] }\n');
480
- io.err(' `dsh-vault list` shows each entry and the env name it would export.\n');
495
+ // The usual first-run wall: `env` only exports entries tagged `env`, and
496
+ // that tag exists so a shell never receives every secret in the vault.
497
+ io.err('dsh-vault: nothing to export — no entry carries the "env" tag.\n');
498
+ io.err(' `env` exports only entries whose tags include "env"; that tag is what\n');
499
+ io.err(' keeps the rest of the vault (cards, notes, unrelated logins) out of your shell.\n');
500
+ io.err(' Tag one entry and run it again:\n');
501
+ io.err(' UI: Settings → Credentials → the entry → tags → env\n');
502
+ io.err(' assistant: vault_update { id, tags: ["env"] }\n');
503
+ io.err(' `dsh-vault list` marks tagged entries with [env] and shows the name each exports.\n');
504
+ io.err(' Only need one value? `dsh-vault get <entry>` needs no tag at all.\n');
481
505
  }
482
506
  return 0;
483
507
  }
package/lib/client.js CHANGED
@@ -495,191 +495,191 @@ window.__ModuleLoader__.load({
495
495
  document.head.appendChild(tag);
496
496
  }
497
497
  var VaultSection_module_css_default = {
498
- "editorActions": "t_j5va_editorActions",
499
- "tabActive": "t_j5va_tabActive",
500
- "listCompact": "t_j5va_listCompact",
501
- "reportTitle": "t_j5va_reportTitle",
502
- "customValueInput": "t_j5va_customValueInput",
503
- "badgeBtn": "t_j5va_badgeBtn",
504
- "section": "t_j5va_section",
505
- "emptyBox": "t_j5va_emptyBox",
506
- "reportLineLink": "t_j5va_reportLineLink",
507
- "customFieldRow": "t_j5va_customFieldRow",
508
- "vaultSwitch": "t_j5va_vaultSwitch",
509
- "headerMessage": "t_j5va_headerMessage",
510
- "identity": "t_j5va_identity",
511
- "reportSub": "t_j5va_reportSub",
512
- "policyField": "t_j5va_policyField",
513
- "totpRing": "t_j5va_totpRing",
514
- "badgeLink": "t_j5va_badgeLink",
515
- "importDesc": "t_j5va_importDesc",
516
- "toolbar": "t_j5va_toolbar",
517
- "lenChips": "t_j5va_lenChips",
518
- "tabs": "t_j5va_tabs",
519
- "importList": "t_j5va_importList",
520
- "saveButton": "t_j5va_saveButton",
521
- "importActions": "t_j5va_importActions",
522
- "copied": "t_j5va_copied",
523
- "rowSelected": "t_j5va_rowSelected",
524
- "histDanger": "t_j5va_histDanger",
525
- "auditChips": "t_j5va_auditChips",
526
- "colorFieldWrap": "t_j5va_colorFieldWrap",
527
- "pwLabel": "t_j5va_pwLabel",
528
- "dupNames": "t_j5va_dupNames",
529
- "kindChip": "t_j5va_kindChip",
530
- "modeReadonly": "t_j5va_modeReadonly",
531
- "scoreRing": "t_j5va_scoreRing",
532
- "rowMain": "t_j5va_rowMain",
533
- "bulkBar": "t_j5va_bulkBar",
534
- "hit": "t_j5va_hit",
535
- "pinOff": "t_j5va_pinOff",
536
- "copyAllBtn": "t_j5va_copyAllBtn",
537
- "emojiBtn": "t_j5va_emojiBtn",
538
- "actionGroups": "t_j5va_actionGroups",
539
- "pwWeak": "t_j5va_pwWeak",
540
- "policyBar": "t_j5va_policyBar",
541
- "modeAuto": "t_j5va_modeAuto",
542
- "intro": "t_j5va_intro",
543
- "reportJump": "t_j5va_reportJump",
544
- "emojiPicker": "t_j5va_emojiPicker",
545
- "gridDetail": "t_j5va_gridDetail",
546
- "recentLabel": "t_j5va_recentLabel",
547
- "actionPrimary": "t_j5va_actionPrimary",
548
- "riskBanner": "t_j5va_riskBanner",
549
- "srOnly": "t_j5va_srOnly",
550
- "bulkItem": "t_j5va_bulkItem",
551
- "reportLine": "t_j5va_reportLine",
552
- "auditWhen": "t_j5va_auditWhen",
553
- "dangerButton": "t_j5va_dangerButton",
554
- "detailBox": "t_j5va_detailBox",
555
- "auditRow": "t_j5va_auditRow",
556
- "exportChips": "t_j5va_exportChips",
557
- "moreWrap": "t_j5va_moreWrap",
558
- "editorBody": "t_j5va_editorBody",
559
- "pwBar": "t_j5va_pwBar",
560
- "status": "t_j5va_status",
561
- "gridRow": "t_j5va_gridRow",
562
- "gridName": "t_j5va_gridName",
563
- "inlineInput": "t_j5va_inlineInput",
564
- "backupButton": "t_j5va_backupButton",
565
- "inlineField": "t_j5va_inlineField",
566
- "rowExpired": "t_j5va_rowExpired",
567
- "secretField": "t_j5va_secretField",
498
+ "revealButton": "t_j5va_revealButton",
499
+ "toolbarMain": "t_j5va_toolbarMain",
500
+ "vaultTarget": "t_j5va_vaultTarget",
501
+ "lockedBanner": "t_j5va_lockedBanner",
568
502
  "deleteButton": "t_j5va_deleteButton",
569
- "actionGroup": "t_j5va_actionGroup",
503
+ "dupMerge": "t_j5va_dupMerge",
504
+ "kindIcon": "t_j5va_kindIcon",
505
+ "addButton": "t_j5va_addButton",
506
+ "searchKbd": "t_j5va_searchKbd",
570
507
  "histNeutral": "t_j5va_histNeutral",
571
- "uriCode": "t_j5va_uriCode",
508
+ "pwHistRow": "t_j5va_pwHistRow",
509
+ "resultCount": "t_j5va_resultCount",
510
+ "editor": "t_j5va_editor",
511
+ "customEq": "t_j5va_customEq",
512
+ "detailTotp": "t_j5va_detailTotp",
513
+ "bulkBar": "t_j5va_bulkBar",
572
514
  "actionGroupLabel": "t_j5va_actionGroupLabel",
573
- "badgeDanger": "t_j5va_badgeDanger",
574
- "iconFieldWrap": "t_j5va_iconFieldWrap",
575
- "error": "t_j5va_error",
576
- "lockedTag": "t_j5va_lockedTag",
515
+ "auditChip": "t_j5va_auditChip",
516
+ "badgeOk": "t_j5va_badgeOk",
517
+ "detailItem": "t_j5va_detailItem",
518
+ "reportLine": "t_j5va_reportLine",
519
+ "detailBox": "t_j5va_detailBox",
520
+ "importRow": "t_j5va_importRow",
577
521
  "detailActions": "t_j5va_detailActions",
578
- "customKeyInput": "t_j5va_customKeyInput",
579
- "vaultManageRow": "t_j5va_vaultManageRow",
580
- "badgeActive": "t_j5va_badgeActive",
581
- "pwStrong": "t_j5va_pwStrong",
582
- "tabPane": "t_j5va_tabPane",
583
- "dupMerge": "t_j5va_dupMerge",
584
- "toolbarMain": "t_j5va_toolbarMain",
585
- "histAdd": "t_j5va_histAdd",
586
- "healthBar": "t_j5va_healthBar",
587
- "brandGlyphSm": "t_j5va_brandGlyphSm",
588
- "modeAsk": "t_j5va_modeAsk",
589
- "histLink": "t_j5va_histLink",
590
- "badge": "t_j5va_badge",
591
- "genOpts": "t_j5va_genOpts",
592
- "tagManager": "t_j5va_tagManager",
593
- "list": "t_j5va_list",
594
- "trashButton": "t_j5va_trashButton",
595
- "pinOn": "t_j5va_pinOn",
596
- "customEq": "t_j5va_customEq",
597
- "recentClear": "t_j5va_recentClear",
598
- "toolbarFilters": "t_j5va_toolbarFilters",
599
- "gridActions": "t_j5va_gridActions",
600
522
  "bulkCount": "t_j5va_bulkCount",
601
- "emptyHint": "t_j5va_emptyHint",
602
- "pwHistPwd": "t_j5va_pwHistPwd",
603
- "brandGlyph": "t_j5va_brandGlyph",
604
- "riskWarn": "t_j5va_riskWarn",
605
- "recentChip": "t_j5va_recentChip",
606
- "empty": "t_j5va_empty",
607
- "importName": "t_j5va_importName",
608
- "searchBox": "t_j5va_searchBox",
609
- "genHist": "t_j5va_genHist",
610
- "tagManagerHead": "t_j5va_tagManagerHead",
611
- "selectActive": "t_j5va_selectActive",
612
- "editor": "t_j5va_editor",
613
- "sortButton": "t_j5va_sortButton",
614
- "retryButton": "t_j5va_retryButton",
615
- "gridInput": "t_j5va_gridInput",
616
- "tagActions": "t_j5va_tagActions",
617
- "lockedBanner": "t_j5va_lockedBanner",
618
- "detailTotp": "t_j5va_detailTotp",
619
- "reportBox": "t_j5va_reportBox",
620
- "kindIcon": "t_j5va_kindIcon",
621
- "recentSearch": "t_j5va_recentSearch",
622
- "row": "t_j5va_row",
623
- "rowActions": "t_j5va_rowActions",
624
523
  "pwHistBox": "t_j5va_pwHistBox",
625
- "resultCount": "t_j5va_resultCount",
626
- "pwHistTime": "t_j5va_pwHistTime",
524
+ "moreMenu": "t_j5va_moreMenu",
525
+ "backupButton": "t_j5va_backupButton",
526
+ "editorBody": "t_j5va_editorBody",
527
+ "detailRemain": "t_j5va_detailRemain",
528
+ "srOnly": "t_j5va_srOnly",
529
+ "saveButton": "t_j5va_saveButton",
530
+ "moreWrap": "t_j5va_moreWrap",
531
+ "emptyHint": "t_j5va_emptyHint",
532
+ "modeAsk": "t_j5va_modeAsk",
627
533
  "auditChipActive": "t_j5va_auditChipActive",
628
- "rowDue": "t_j5va_rowDue",
629
- "lenChip": "t_j5va_lenChip",
630
- "addButton": "t_j5va_addButton",
631
- "lenChipActive": "t_j5va_lenChipActive",
632
- "totpCopy": "t_j5va_totpCopy",
534
+ "badgeLink": "t_j5va_badgeLink",
535
+ "selectActive": "t_j5va_selectActive",
536
+ "pwHistPwd": "t_j5va_pwHistPwd",
537
+ "trashButton": "t_j5va_trashButton",
538
+ "rowSelected": "t_j5va_rowSelected",
539
+ "policyBar": "t_j5va_policyBar",
540
+ "brandGlyphSm": "t_j5va_brandGlyphSm",
633
541
  "dupGroup": "t_j5va_dupGroup",
634
- "auditChip": "t_j5va_auditChip",
635
- "favActive": "t_j5va_favActive",
636
- "tagCount": "t_j5va_tagCount",
637
- "checkField": "t_j5va_checkField",
638
- "detailCode": "t_j5va_detailCode",
639
- "exportChip": "t_j5va_exportChip",
640
- "customFieldRows": "t_j5va_customFieldRows",
542
+ "dangerButton": "t_j5va_dangerButton",
543
+ "healthSummary": "t_j5va_healthSummary",
544
+ "secretField": "t_j5va_secretField",
545
+ "pinOff": "t_j5va_pinOff",
546
+ "empty": "t_j5va_empty",
547
+ "emojiPicker": "t_j5va_emojiPicker",
548
+ "customFieldRow": "t_j5va_customFieldRow",
641
549
  "kindChipActive": "t_j5va_kindChipActive",
642
- "actionBtn": "t_j5va_actionBtn",
550
+ "tabPane": "t_j5va_tabPane",
551
+ "favActive": "t_j5va_favActive",
552
+ "gridActions": "t_j5va_gridActions",
553
+ "gridDetail": "t_j5va_gridDetail",
554
+ "totpRing": "t_j5va_totpRing",
555
+ "recentLabel": "t_j5va_recentLabel",
556
+ "clearButton": "t_j5va_clearButton",
557
+ "pwBar": "t_j5va_pwBar",
558
+ "moreButton": "t_j5va_moreButton",
643
559
  "colorPalette": "t_j5va_colorPalette",
644
- "revealButton": "t_j5va_revealButton",
645
- "vaultTarget": "t_j5va_vaultTarget",
646
- "auditIssues": "t_j5va_auditIssues",
647
- "title": "t_j5va_title",
648
- "pwHistRow": "t_j5va_pwHistRow",
649
- "genHistItem": "t_j5va_genHistItem",
560
+ "importList": "t_j5va_importList",
561
+ "lockedTag": "t_j5va_lockedTag",
562
+ "tagCount": "t_j5va_tagCount",
650
563
  "field": "t_j5va_field",
651
- "attachAdd": "t_j5va_attachAdd",
652
- "rowCheck": "t_j5va_rowCheck",
653
- "pwMeter": "t_j5va_pwMeter",
564
+ "importActions": "t_j5va_importActions",
565
+ "riskBanner": "t_j5va_riskBanner",
566
+ "colorFieldWrap": "t_j5va_colorFieldWrap",
567
+ "list": "t_j5va_list",
568
+ "reportSub": "t_j5va_reportSub",
569
+ "auditRow": "t_j5va_auditRow",
654
570
  "totp": "t_j5va_totp",
655
- "moreButton": "t_j5va_moreButton",
656
- "histUpdate": "t_j5va_histUpdate",
657
571
  "tab": "t_j5va_tab",
572
+ "recentChip": "t_j5va_recentChip",
573
+ "badgeActive": "t_j5va_badgeActive",
574
+ "actionBtn": "t_j5va_actionBtn",
575
+ "copied": "t_j5va_copied",
576
+ "histLink": "t_j5va_histLink",
577
+ "vaultHeader": "t_j5va_vaultHeader",
578
+ "customKeyInput": "t_j5va_customKeyInput",
579
+ "healthBar": "t_j5va_healthBar",
580
+ "pwLabel": "t_j5va_pwLabel",
581
+ "inlineField": "t_j5va_inlineField",
582
+ "retryButton": "t_j5va_retryButton",
583
+ "lenChipActive": "t_j5va_lenChipActive",
584
+ "genOptRow": "t_j5va_genOptRow",
585
+ "vaultSwitch": "t_j5va_vaultSwitch",
658
586
  "tagRow": "t_j5va_tagRow",
587
+ "exportChip": "t_j5va_exportChip",
588
+ "title": "t_j5va_title",
589
+ "totpCopy": "t_j5va_totpCopy",
590
+ "brandGlyph": "t_j5va_brandGlyph",
591
+ "pwWeak": "t_j5va_pwWeak",
592
+ "hit": "t_j5va_hit",
593
+ "vaultManageRow": "t_j5va_vaultManageRow",
594
+ "pwHistTime": "t_j5va_pwHistTime",
595
+ "bulkItem": "t_j5va_bulkItem",
596
+ "row": "t_j5va_row",
597
+ "pwStrong": "t_j5va_pwStrong",
598
+ "rowDue": "t_j5va_rowDue",
599
+ "tabs": "t_j5va_tabs",
659
600
  "urlGlyph": "t_j5va_urlGlyph",
660
- "pwFair": "t_j5va_pwFair",
661
- "tagName": "t_j5va_tagName",
662
601
  "highBadge": "t_j5va_highBadge",
602
+ "tabActive": "t_j5va_tabActive",
603
+ "recentClear": "t_j5va_recentClear",
604
+ "histUpdate": "t_j5va_histUpdate",
605
+ "genHistItem": "t_j5va_genHistItem",
606
+ "toolbar": "t_j5va_toolbar",
607
+ "policyField": "t_j5va_policyField",
608
+ "actionGroup": "t_j5va_actionGroup",
609
+ "iconFieldWrap": "t_j5va_iconFieldWrap",
610
+ "attachAdd": "t_j5va_attachAdd",
611
+ "sortButton": "t_j5va_sortButton",
612
+ "lenChip": "t_j5va_lenChip",
663
613
  "badgeWarn": "t_j5va_badgeWarn",
664
- "detailItem": "t_j5va_detailItem",
665
- "badgeOk": "t_j5va_badgeOk",
666
- "dueBadge": "t_j5va_dueBadge",
667
- "riskDanger": "t_j5va_riskDanger",
668
- "favToggle": "t_j5va_favToggle",
669
- "detailRemain": "t_j5va_detailRemain",
614
+ "auditIssues": "t_j5va_auditIssues",
615
+ "auditWhen": "t_j5va_auditWhen",
616
+ "exportChips": "t_j5va_exportChips",
617
+ "error": "t_j5va_error",
670
618
  "kindFilter": "t_j5va_kindFilter",
671
- "attachBox": "t_j5va_attachBox",
672
- "pinStar": "t_j5va_pinStar",
673
- "moreMenu": "t_j5va_moreMenu",
619
+ "gridRow": "t_j5va_gridRow",
620
+ "dueBadge": "t_j5va_dueBadge",
621
+ "badgeDanger": "t_j5va_badgeDanger",
622
+ "pwFair": "t_j5va_pwFair",
623
+ "copyAllBtn": "t_j5va_copyAllBtn",
674
624
  "colorSwatch": "t_j5va_colorSwatch",
625
+ "tagName": "t_j5va_tagName",
626
+ "customValueInput": "t_j5va_customValueInput",
627
+ "rowExpired": "t_j5va_rowExpired",
628
+ "reportJump": "t_j5va_reportJump",
629
+ "scoreRing": "t_j5va_scoreRing",
630
+ "genHist": "t_j5va_genHist",
631
+ "inlineInput": "t_j5va_inlineInput",
632
+ "editorActions": "t_j5va_editorActions",
633
+ "checkField": "t_j5va_checkField",
634
+ "auditChips": "t_j5va_auditChips",
635
+ "intro": "t_j5va_intro",
636
+ "lenChips": "t_j5va_lenChips",
637
+ "attachBox": "t_j5va_attachBox",
638
+ "tagManagerHead": "t_j5va_tagManagerHead",
639
+ "detailCode": "t_j5va_detailCode",
640
+ "kindChip": "t_j5va_kindChip",
641
+ "toolbarFilters": "t_j5va_toolbarFilters",
675
642
  "toolbarDivider": "t_j5va_toolbarDivider",
643
+ "emojiBtn": "t_j5va_emojiBtn",
644
+ "customFieldRows": "t_j5va_customFieldRows",
645
+ "emptyBox": "t_j5va_emptyBox",
646
+ "pinStar": "t_j5va_pinStar",
647
+ "identity": "t_j5va_identity",
648
+ "status": "t_j5va_status",
649
+ "uriCode": "t_j5va_uriCode",
650
+ "reportBox": "t_j5va_reportBox",
651
+ "headerMessage": "t_j5va_headerMessage",
652
+ "importName": "t_j5va_importName",
653
+ "riskDanger": "t_j5va_riskDanger",
654
+ "favToggle": "t_j5va_favToggle",
655
+ "importDesc": "t_j5va_importDesc",
656
+ "riskWarn": "t_j5va_riskWarn",
657
+ "genOpts": "t_j5va_genOpts",
658
+ "reportLineLink": "t_j5va_reportLineLink",
659
+ "rowMain": "t_j5va_rowMain",
660
+ "gridName": "t_j5va_gridName",
661
+ "tagActions": "t_j5va_tagActions",
662
+ "modeAuto": "t_j5va_modeAuto",
663
+ "modeReadonly": "t_j5va_modeReadonly",
664
+ "searchBox": "t_j5va_searchBox",
665
+ "rowActions": "t_j5va_rowActions",
666
+ "section": "t_j5va_section",
667
+ "gridInput": "t_j5va_gridInput",
668
+ "recentSearch": "t_j5va_recentSearch",
669
+ "tagManager": "t_j5va_tagManager",
670
+ "actionGroups": "t_j5va_actionGroups",
671
+ "badge": "t_j5va_badge",
672
+ "dupNames": "t_j5va_dupNames",
673
+ "pwMeter": "t_j5va_pwMeter",
674
+ "listCompact": "t_j5va_listCompact",
676
675
  "detailDeleteBtn": "t_j5va_detailDeleteBtn",
677
- "genOptRow": "t_j5va_genOptRow",
678
- "importRow": "t_j5va_importRow",
679
- "vaultHeader": "t_j5va_vaultHeader",
680
- "clearButton": "t_j5va_clearButton",
681
- "healthSummary": "t_j5va_healthSummary",
682
- "searchKbd": "t_j5va_searchKbd"
676
+ "badgeBtn": "t_j5va_badgeBtn",
677
+ "rowCheck": "t_j5va_rowCheck",
678
+ "histAdd": "t_j5va_histAdd",
679
+ "histDanger": "t_j5va_histDanger",
680
+ "pinOn": "t_j5va_pinOn",
681
+ "actionPrimary": "t_j5va_actionPrimary",
682
+ "reportTitle": "t_j5va_reportTitle"
683
683
  };
684
684
  //#endregion
685
685
  //#region src/client/VaultSection.tsx
package/lib/index.js CHANGED
@@ -4549,7 +4549,7 @@ export async function apply(ctx, config) {
4549
4549
  const m = /^(.*)\.json$/.exec(entry);
4550
4550
  if (!m)
4551
4551
  continue;
4552
- if (['access', 'meta'].includes(m[1]) || m[1].startsWith('vault-export-') || isBackupFile(entry))
4552
+ if (isNonVaultFile(m[1]) || isBackupFile(entry))
4553
4553
  continue;
4554
4554
  names.push(m[1]);
4555
4555
  }
@@ -4594,7 +4594,7 @@ export async function apply(ctx, config) {
4594
4594
  const m = /^(.*)\.json$/.exec(entry);
4595
4595
  if (!m)
4596
4596
  continue;
4597
- if (['access', 'meta'].includes(m[1]) || m[1].startsWith('vault-export-') || isBackupFile(entry))
4597
+ if (isNonVaultFile(m[1]) || isBackupFile(entry))
4598
4598
  continue;
4599
4599
  names.push(m[1]);
4600
4600
  }
@@ -6611,9 +6611,12 @@ function resolveVaultPath(config) {
6611
6611
  * `access-<name>.json`, so two vaults in the same directory never share (or
6612
6612
  * overwrite) each other's mode / auto-capture / auto-lock settings. */
6613
6613
  /** Files that live beside vaults but are NOT vaults: sidecars and metadata. */
6614
+ /** Files that live beside vaults but are NOT vaults: sidecars and metadata.
6615
+ * Accepts the name with or without its `.json` suffix. */
6614
6616
  function isNonVaultFile(name) {
6615
- return name === 'access' || name.startsWith('access-') || name === 'tools' || name === 'meta'
6616
- || name.endsWith('-audit') || name.startsWith('vault-export-');
6617
+ const base = name.replace(/\.json$/i, '');
6618
+ return base === 'access' || base.startsWith('access-') || base === 'tools' || base === 'meta'
6619
+ || base.endsWith('-audit') || base.startsWith('vault-export-');
6617
6620
  }
6618
6621
  function accessPolicyFile(config) {
6619
6622
  const path = resolveVaultPath(config);
@@ -6981,7 +6984,7 @@ async function listVaultRoster(config, activeName) {
6981
6984
  const m = /^(.*)\.json$/.exec(entry);
6982
6985
  if (!m)
6983
6986
  continue;
6984
- if (['access', 'meta'].includes(m[1]) || m[1].startsWith('vault-export-') || isBackupFile(entry))
6987
+ if (isNonVaultFile(m[1]) || isBackupFile(entry))
6985
6988
  continue;
6986
6989
  names.push(m[1]);
6987
6990
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-vault",
3
- "version": "1.10.65",
3
+ "version": "1.10.67",
4
4
  "bin": {
5
5
  "dsh-vault": "./lib/cli.js"
6
6
  },
@@ -77,7 +77,7 @@
77
77
  },
78
78
  "scripts": {
79
79
  "build": "npm run build:host && npm run build:client",
80
- "build:host": "tsc -p tsconfig.host.json && node -e \"require('node:fs').chmodSync('lib/cli.js', 0o755)\"",
80
+ "build:host": "tsc -p tsconfig.host.json && node -e \"require('node:fs').chmodSync('lib/cli.js', 0o755)\" && node lib/cli.js --version > /dev/null && echo \"host build ok (cli starts)\"",
81
81
  "build:client": "tsdown",
82
82
  "vault": "node lib/cli.js",
83
83
  "prepare": "npm run build",