dsh-vault 1.10.67 → 1.10.69

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
@@ -252,6 +252,11 @@ dsh-vault get my-entry --field apiKey # 取指定字段
252
252
  dsh-vault get my-entry --mask # 只确认存在,不打印值
253
253
  dsh-vault show my-entry # 非敏感字段的 JSON
254
254
  dsh-vault env # 带 env 标签的条目 → KEY=VALUE
255
+ dsh-vault env --mask # 人类视角,两段都是 KEY=VALUE:
256
+ # ## exported items
257
+ # NPM_REGISTRY_API_KEY=npm_***
258
+ # ## unexported items
259
+ # EXAMPLE_BILLING_API_KEY=***
255
260
  dsh-vault export-env .env # ……或写成 0600 权限的 .env 文件
256
261
  dsh-vault verify # 校验主密码,stdout 无输出
257
262
  ```
@@ -278,7 +283,7 @@ dsh-vault export-env .env && set -a && . ./.env && set +a
278
283
 
279
284
  ### 4. 主密码
280
285
 
281
- 依次取 `--password-stdin` → `$DSH_VAULT_MASTER_PASSWORD`(或 `$DSH_VAULT_PASSWORD`)→ 交互式提示;它**不会**去读插件配置文件里的密码,所以 CLI 既不依赖、也不会泄露 profile patch 里那份:
286
+ 依次取 `--password-stdin` → `$DSH_VAULT_MASTER_PASSWORD`(或 `$DSH_VAULT_PASSWORD`)→ 交互式提示(**输入不回显**,终端会切到 raw mode;`tests/e2e/cli-prompt.mjs` 会验证这一点);它**不会**去读插件配置文件里的密码,所以 CLI 既不依赖、也不会泄露 profile patch 里那份:
282
287
 
283
288
  ```sh
284
289
  DSH_VAULT_MASTER_PASSWORD=… pnpm vault list
package/README.md CHANGED
@@ -268,6 +268,11 @@ dsh-vault get my-entry --field apiKey # one named field
268
268
  dsh-vault get my-entry --mask # confirm it exists without printing it
269
269
  dsh-vault show my-entry # non-secret metadata as JSON
270
270
  dsh-vault env # env-tagged entries as KEY=VALUE
271
+ dsh-vault env --mask # human view, both sections as KEY=VALUE:
272
+ # ## exported items
273
+ # NPM_REGISTRY_API_KEY=npm_***
274
+ # ## unexported items
275
+ # EXAMPLE_BILLING_API_KEY=***
271
276
  dsh-vault export-env .env # …or write them to a 0600 file
272
277
  dsh-vault verify # check the master password, nothing on stdout
273
278
  ```
@@ -300,7 +305,8 @@ dsh-vault export-env .env && set -a && . ./.env && set +a
300
305
  ### 4. The master password
301
306
 
302
307
  `--password-stdin`, then `$DSH_VAULT_MASTER_PASSWORD` (or `$DSH_VAULT_PASSWORD`),
303
- then an interactive prompt. It is **not** read from the plugin's config file, so
308
+ then an interactive prompt that **hides what you type** (the terminal is switched
309
+ to raw mode; verify with `tests/e2e/cli-prompt.mjs`). It is **not** read from the plugin's config file, so
304
310
  the CLI never depends on (or leaks) whatever the profile patch holds:
305
311
 
306
312
  ```sh
package/lib/cli.js CHANGED
@@ -17,13 +17,14 @@
17
17
  * The core is `runCli(argv, io)`, which tests drive directly without spawning.
18
18
  */
19
19
  import { chmod, mkdir, writeFile } from 'node:fs/promises';
20
- import { existsSync, realpathSync } from 'node:fs';
20
+ import { existsSync, openSync, realpathSync, writeSync } from 'node:fs';
21
21
  import { createRequire } from 'node:module';
22
22
  import { dirname, resolve } from 'node:path';
23
23
  import { fileURLToPath, pathToFileURL } from 'node:url';
24
24
  import { createInterface } from 'node:readline';
25
+ import { ReadStream } from 'node:tty';
25
26
  import { openVault, defaultVaultPath } from "./store.js";
26
- import { envLinesFor, envPairsForEntry, maskSecret, primarySecret } from "./env-export.js";
27
+ import { envLinesFor, envPairsForEntry, maskSecret, primarySecret, shellQuote } from "./env-export.js";
27
28
  function packageVersion() {
28
29
  try {
29
30
  const require = createRequire(import.meta.url);
@@ -79,7 +80,9 @@ env options:
79
80
  --prefix <P> Prefix for derived key names (an explicit envKey is kept verbatim)
80
81
  --kind <k> Only entries of this kind
81
82
  --keys-only Print key names without values
82
- --mask Print masked values
83
+ --mask Human view: masked values PLUS an "unexported items"
84
+ section (what the tag currently leaves out)
85
+ --explain Same two-section view with the real values
83
86
  --file <path> Write to a file instead of stdout
84
87
 
85
88
  Exported lines are shell-quoted (KEY='value'), so read them with
@@ -156,50 +159,63 @@ export function resolveCliVaultPath(parsed, env) {
156
159
  }
157
160
  /** Interactive prompt with echo off, read from the terminal rather than stdin. */
158
161
  async function promptHidden(prompt) {
159
- const { open } = await import('node:fs/promises');
160
- let handle;
162
+ // The terminal echoes what you type unless it is switched to raw mode: the
163
+ // first version of this opened /dev/tty but left echo on, so the master
164
+ // password appeared in clear text. Raw mode also means we handle Enter,
165
+ // backspace and Ctrl-C ourselves (below).
166
+ let fd;
161
167
  try {
162
- handle = await open('/dev/tty', 'r+');
168
+ fd = openSync('/dev/tty', 'r+');
163
169
  }
164
170
  catch {
171
+ // No controlling terminal (piped input): read a plain line from stdin.
165
172
  const rl = createInterface({ input: process.stdin, output: process.stderr });
166
173
  const answer = await new Promise(res => rl.question(prompt, res));
167
174
  rl.close();
168
175
  return answer;
169
176
  }
170
- const reader = handle.createReadStream();
171
- const writer = handle.createWriteStream();
172
- writer.write(prompt);
173
- reader.setEncoding('utf8');
174
- return await new Promise((res, rej) => {
175
- let value = '';
176
- const finish = (result) => {
177
- reader.destroy();
178
- void handle?.close();
179
- res(result);
180
- };
181
- reader.on('data', (chunk) => {
182
- for (const ch of String(chunk)) {
183
- if (ch === '\n' || ch === '\r') {
184
- writer.write('\n');
185
- finish(value);
186
- return;
187
- }
188
- if (ch === '\u0003') {
189
- reader.destroy();
190
- void handle?.close();
191
- rej(new Error('aborted'));
192
- return;
193
- }
194
- if (ch === '\u007f' || ch === '\b') {
195
- value = value.slice(0, -1);
196
- continue;
177
+ const input = new ReadStream(fd);
178
+ input.setRawMode(true);
179
+ input.setEncoding('utf8');
180
+ writeSync(fd, prompt);
181
+ try {
182
+ return await new Promise((resolve, reject) => {
183
+ let value = '';
184
+ const finish = (result) => {
185
+ writeSync(fd, '\n');
186
+ resolve(result);
187
+ };
188
+ input.on('data', (chunk) => {
189
+ for (const ch of String(chunk)) {
190
+ if (ch === '\n' || ch === '\r') {
191
+ finish(value);
192
+ return;
193
+ }
194
+ if (ch === '\u0003') { // Ctrl-C
195
+ writeSync(fd, '\n');
196
+ reject(new Error('aborted'));
197
+ return;
198
+ }
199
+ if (ch === '\u007f' || ch === '\b') {
200
+ value = value.slice(0, -1);
201
+ continue;
202
+ }
203
+ if (ch === '\u0015') {
204
+ value = '';
205
+ continue;
206
+ } // Ctrl-U clears the line
207
+ if (ch < ' ')
208
+ continue; // ignore other control characters
209
+ value += ch;
197
210
  }
198
- value += ch;
199
- }
211
+ });
212
+ input.on('error', err => reject(err instanceof Error ? err : new Error(String(err))));
200
213
  });
201
- reader.on('error', rej);
202
- });
214
+ }
215
+ finally {
216
+ input.setRawMode(false);
217
+ input.destroy(); // owns the fd
218
+ }
203
219
  }
204
220
  async function readStdinLine() {
205
221
  const rl = createInterface({ input: process.stdin });
@@ -343,7 +359,7 @@ export async function runCli(argv, io) {
343
359
  list: ['kind', 'tag'],
344
360
  get: ['field', 'fields', 'mask', 'all'],
345
361
  show: [],
346
- env: ['prefix', 'kind', 'keys-only', 'mask', 'file'],
362
+ env: ['prefix', 'kind', 'keys-only', 'mask', 'explain', 'file'],
347
363
  'export-env': ['prefix', 'kind', 'keys-only'],
348
364
  verify: [],
349
365
  };
@@ -465,7 +481,8 @@ export async function runCli(argv, io) {
465
481
  // env / export-env
466
482
  const prefix = stringFlag(parsed, 'prefix') ?? '';
467
483
  const kind = stringFlag(parsed, 'kind');
468
- const lines = envLinesFor(store.list(), { prefix, ...(kind !== undefined ? { kind } : {}) });
484
+ const matching = store.list().filter(entry => kind === undefined || (entry.kind ?? 'login') === kind);
485
+ const lines = envLinesFor(matching, { prefix, ...(kind !== undefined ? { kind } : {}) });
469
486
  const rendered = lines.map(line => {
470
487
  if (keysOnly)
471
488
  return line.split('=')[0] ?? line;
@@ -474,6 +491,27 @@ export async function runCli(argv, io) {
474
491
  const eq = line.indexOf('=');
475
492
  return `${line.slice(0, eq)}=${maskSecret(line.slice(eq + 1).replace(/^'|'$/g, ''))}`;
476
493
  });
494
+ // `--mask` is the human view (masked values are useless to a script), so it
495
+ // also lists what is NOT exported. Without it the output stays pure
496
+ // `KEY=VALUE`, which is what `eval "$(…)"` and pipelines need.
497
+ const explain = mask || parsed.flags.get('explain') === true;
498
+ const unexported = matching.filter(entry => !(entry.tags ?? []).includes('env'));
499
+ /** `KEY=***` for entries that are not exported (names visible, values not). */
500
+ const envPairsForEntryPairs = (entries) => pairsOf(entries, true).map(line => `${line.slice(0, line.indexOf('='))}=***`);
501
+ /** KEY=VALUE pairs of the given entries, de-duplicated, first entry wins. */
502
+ const pairsOf = (entries, masked) => {
503
+ const seen = new Set();
504
+ const out = [];
505
+ for (const entry of entries) {
506
+ for (const pair of envPairsForEntry(entry, prefix)) {
507
+ if (seen.has(pair.key))
508
+ continue;
509
+ seen.add(pair.key);
510
+ out.push(`${pair.key}=${masked ? maskSecret(pair.value) : shellQuote(pair.value)}`);
511
+ }
512
+ }
513
+ return out;
514
+ };
477
515
  const target = parsed.command === 'export-env' ? parsed.positional[0] : stringFlag(parsed, 'file');
478
516
  if (parsed.command === 'export-env' && target === undefined) {
479
517
  io.err('dsh-vault: export-env needs a file path\n');
@@ -490,6 +528,28 @@ export async function runCli(argv, io) {
490
528
  : `dsh-vault: wrote ${rendered.length} lines to ${file} (mode 0600)\n`);
491
529
  return 0;
492
530
  }
531
+ if (explain) {
532
+ // Both sections use the same KEY=VALUE shape, so a name can be copied from
533
+ // either one. The unexported values stay masked even under --explain: the
534
+ // tag is what says "this one is meant for a shell".
535
+ io.out('## exported items\n');
536
+ if (rendered.length > 0)
537
+ io.out(`${rendered.join('\n')}\n`);
538
+ else
539
+ io.out(' (none — no entry carries the "env" tag)\n');
540
+ io.out('\n## unexported items\n');
541
+ // A fixed placeholder, not `maskSecret`: these did not opt into export, so
542
+ // not even a four-character prefix of a password should be shown.
543
+ const hidden = envPairsForEntryPairs(unexported);
544
+ if (hidden.length > 0) {
545
+ io.out(`${hidden.join('\n')}\n`);
546
+ io.out(' not exported (no "env" tag) — values hidden. `get <name>` still reads them.\n');
547
+ }
548
+ else {
549
+ io.out(' (none — every entry is exported)\n');
550
+ }
551
+ return 0;
552
+ }
493
553
  io.out(rendered.join('\n') + (rendered.length > 0 ? '\n' : ''));
494
554
  if (rendered.length === 0) {
495
555
  // The usual first-run wall: `env` only exports entries tagged `env`, and
package/lib/client.js CHANGED
@@ -495,190 +495,190 @@ window.__ModuleLoader__.load({
495
495
  document.head.appendChild(tag);
496
496
  }
497
497
  var VaultSection_module_css_default = {
498
- "revealButton": "t_j5va_revealButton",
499
- "toolbarMain": "t_j5va_toolbarMain",
500
- "vaultTarget": "t_j5va_vaultTarget",
501
- "lockedBanner": "t_j5va_lockedBanner",
502
498
  "deleteButton": "t_j5va_deleteButton",
503
- "dupMerge": "t_j5va_dupMerge",
504
- "kindIcon": "t_j5va_kindIcon",
505
- "addButton": "t_j5va_addButton",
506
- "searchKbd": "t_j5va_searchKbd",
507
- "histNeutral": "t_j5va_histNeutral",
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",
499
+ "totpRing": "t_j5va_totpRing",
500
+ "genOpts": "t_j5va_genOpts",
501
+ "brandGlyphSm": "t_j5va_brandGlyphSm",
502
+ "detailBox": "t_j5va_detailBox",
503
+ "vaultSwitch": "t_j5va_vaultSwitch",
504
+ "reportBox": "t_j5va_reportBox",
505
+ "brandGlyph": "t_j5va_brandGlyph",
506
+ "field": "t_j5va_field",
507
+ "copyAllBtn": "t_j5va_copyAllBtn",
508
+ "detailItem": "t_j5va_detailItem",
514
509
  "actionGroupLabel": "t_j5va_actionGroupLabel",
510
+ "section": "t_j5va_section",
511
+ "rowCheck": "t_j5va_rowCheck",
512
+ "list": "t_j5va_list",
513
+ "bulkBar": "t_j5va_bulkBar",
514
+ "attachAdd": "t_j5va_attachAdd",
515
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",
521
- "detailActions": "t_j5va_detailActions",
522
- "bulkCount": "t_j5va_bulkCount",
523
- "pwHistBox": "t_j5va_pwHistBox",
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",
533
- "auditChipActive": "t_j5va_auditChipActive",
516
+ "error": "t_j5va_error",
534
517
  "badgeLink": "t_j5va_badgeLink",
535
- "selectActive": "t_j5va_selectActive",
518
+ "tagRow": "t_j5va_tagRow",
519
+ "headerMessage": "t_j5va_headerMessage",
520
+ "reportSub": "t_j5va_reportSub",
521
+ "totp": "t_j5va_totp",
536
522
  "pwHistPwd": "t_j5va_pwHistPwd",
537
- "trashButton": "t_j5va_trashButton",
523
+ "kindFilter": "t_j5va_kindFilter",
524
+ "title": "t_j5va_title",
525
+ "rowDue": "t_j5va_rowDue",
526
+ "actionGroups": "t_j5va_actionGroups",
527
+ "importActions": "t_j5va_importActions",
528
+ "searchKbd": "t_j5va_searchKbd",
529
+ "histNeutral": "t_j5va_histNeutral",
530
+ "gridRow": "t_j5va_gridRow",
531
+ "dupMerge": "t_j5va_dupMerge",
532
+ "pwMeter": "t_j5va_pwMeter",
533
+ "colorSwatch": "t_j5va_colorSwatch",
534
+ "inlineInput": "t_j5va_inlineInput",
538
535
  "rowSelected": "t_j5va_rowSelected",
539
- "policyBar": "t_j5va_policyBar",
540
- "brandGlyphSm": "t_j5va_brandGlyphSm",
536
+ "badgeActive": "t_j5va_badgeActive",
537
+ "auditWhen": "t_j5va_auditWhen",
538
+ "saveButton": "t_j5va_saveButton",
539
+ "genOptRow": "t_j5va_genOptRow",
540
+ "totpCopy": "t_j5va_totpCopy",
541
+ "lenChipActive": "t_j5va_lenChipActive",
542
+ "intro": "t_j5va_intro",
543
+ "pwStrong": "t_j5va_pwStrong",
544
+ "srOnly": "t_j5va_srOnly",
545
+ "lenChip": "t_j5va_lenChip",
546
+ "detailRemain": "t_j5va_detailRemain",
547
+ "reportJump": "t_j5va_reportJump",
548
+ "pwFair": "t_j5va_pwFair",
549
+ "tagManager": "t_j5va_tagManager",
550
+ "row": "t_j5va_row",
551
+ "listCompact": "t_j5va_listCompact",
552
+ "toolbarFilters": "t_j5va_toolbarFilters",
553
+ "vaultHeader": "t_j5va_vaultHeader",
554
+ "pwLabel": "t_j5va_pwLabel",
555
+ "toolbar": "t_j5va_toolbar",
556
+ "gridDetail": "t_j5va_gridDetail",
557
+ "policyField": "t_j5va_policyField",
558
+ "colorFieldWrap": "t_j5va_colorFieldWrap",
559
+ "urlGlyph": "t_j5va_urlGlyph",
560
+ "auditChips": "t_j5va_auditChips",
561
+ "dupNames": "t_j5va_dupNames",
562
+ "favToggle": "t_j5va_favToggle",
563
+ "importName": "t_j5va_importName",
564
+ "importDesc": "t_j5va_importDesc",
541
565
  "dupGroup": "t_j5va_dupGroup",
542
- "dangerButton": "t_j5va_dangerButton",
543
- "healthSummary": "t_j5va_healthSummary",
544
- "secretField": "t_j5va_secretField",
566
+ "scoreRing": "t_j5va_scoreRing",
567
+ "editorActions": "t_j5va_editorActions",
568
+ "exportChip": "t_j5va_exportChip",
569
+ "rowActions": "t_j5va_rowActions",
570
+ "vaultManageRow": "t_j5va_vaultManageRow",
571
+ "lockedBanner": "t_j5va_lockedBanner",
572
+ "policyBar": "t_j5va_policyBar",
573
+ "modeAuto": "t_j5va_modeAuto",
545
574
  "pinOff": "t_j5va_pinOff",
546
- "empty": "t_j5va_empty",
575
+ "pinOn": "t_j5va_pinOn",
576
+ "riskBanner": "t_j5va_riskBanner",
547
577
  "emojiPicker": "t_j5va_emojiPicker",
548
- "customFieldRow": "t_j5va_customFieldRow",
549
- "kindChipActive": "t_j5va_kindChipActive",
550
- "tabPane": "t_j5va_tabPane",
578
+ "moreMenu": "t_j5va_moreMenu",
579
+ "tagManagerHead": "t_j5va_tagManagerHead",
580
+ "histUpdate": "t_j5va_histUpdate",
581
+ "tagActions": "t_j5va_tagActions",
582
+ "searchBox": "t_j5va_searchBox",
583
+ "tabs": "t_j5va_tabs",
584
+ "status": "t_j5va_status",
585
+ "vaultTarget": "t_j5va_vaultTarget",
586
+ "rowExpired": "t_j5va_rowExpired",
551
587
  "favActive": "t_j5va_favActive",
552
- "gridActions": "t_j5va_gridActions",
553
- "gridDetail": "t_j5va_gridDetail",
554
- "totpRing": "t_j5va_totpRing",
588
+ "modeAsk": "t_j5va_modeAsk",
589
+ "emptyHint": "t_j5va_emptyHint",
590
+ "dangerButton": "t_j5va_dangerButton",
591
+ "editorBody": "t_j5va_editorBody",
555
592
  "recentLabel": "t_j5va_recentLabel",
556
- "clearButton": "t_j5va_clearButton",
557
- "pwBar": "t_j5va_pwBar",
558
- "moreButton": "t_j5va_moreButton",
559
- "colorPalette": "t_j5va_colorPalette",
560
- "importList": "t_j5va_importList",
561
- "lockedTag": "t_j5va_lockedTag",
562
- "tagCount": "t_j5va_tagCount",
563
- "field": "t_j5va_field",
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",
593
+ "gridInput": "t_j5va_gridInput",
594
+ "inlineField": "t_j5va_inlineField",
595
+ "pwHistBox": "t_j5va_pwHistBox",
596
+ "auditChipActive": "t_j5va_auditChipActive",
569
597
  "auditRow": "t_j5va_auditRow",
570
- "totp": "t_j5va_totp",
571
- "tab": "t_j5va_tab",
598
+ "identity": "t_j5va_identity",
599
+ "backupButton": "t_j5va_backupButton",
572
600
  "recentChip": "t_j5va_recentChip",
573
- "badgeActive": "t_j5va_badgeActive",
574
- "actionBtn": "t_j5va_actionBtn",
575
- "copied": "t_j5va_copied",
601
+ "customFieldRows": "t_j5va_customFieldRows",
602
+ "histAdd": "t_j5va_histAdd",
603
+ "dueBadge": "t_j5va_dueBadge",
604
+ "badgeBtn": "t_j5va_badgeBtn",
576
605
  "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",
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",
600
- "urlGlyph": "t_j5va_urlGlyph",
601
- "highBadge": "t_j5va_highBadge",
606
+ "editor": "t_j5va_editor",
607
+ "kindIcon": "t_j5va_kindIcon",
602
608
  "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",
609
+ "copied": "t_j5va_copied",
610
+ "revealButton": "t_j5va_revealButton",
611
611
  "sortButton": "t_j5va_sortButton",
612
- "lenChip": "t_j5va_lenChip",
613
- "badgeWarn": "t_j5va_badgeWarn",
614
- "auditIssues": "t_j5va_auditIssues",
615
- "auditWhen": "t_j5va_auditWhen",
616
- "exportChips": "t_j5va_exportChips",
617
- "error": "t_j5va_error",
618
- "kindFilter": "t_j5va_kindFilter",
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",
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
612
  "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",
613
+ "colorPalette": "t_j5va_colorPalette",
614
+ "recentClear": "t_j5va_recentClear",
615
+ "highBadge": "t_j5va_highBadge",
616
+ "badgeWarn": "t_j5va_badgeWarn",
617
+ "bulkCount": "t_j5va_bulkCount",
618
+ "tagCount": "t_j5va_tagCount",
619
+ "toolbarMain": "t_j5va_toolbarMain",
642
620
  "toolbarDivider": "t_j5va_toolbarDivider",
621
+ "iconFieldWrap": "t_j5va_iconFieldWrap",
622
+ "trashButton": "t_j5va_trashButton",
623
+ "empty": "t_j5va_empty",
624
+ "actionBtn": "t_j5va_actionBtn",
625
+ "healthBar": "t_j5va_healthBar",
626
+ "tabPane": "t_j5va_tabPane",
627
+ "uriCode": "t_j5va_uriCode",
628
+ "importList": "t_j5va_importList",
629
+ "gridActions": "t_j5va_gridActions",
630
+ "histDanger": "t_j5va_histDanger",
631
+ "secretField": "t_j5va_secretField",
632
+ "detailDeleteBtn": "t_j5va_detailDeleteBtn",
633
+ "importRow": "t_j5va_importRow",
634
+ "badgeOk": "t_j5va_badgeOk",
635
+ "detailActions": "t_j5va_detailActions",
636
+ "kindChip": "t_j5va_kindChip",
637
+ "hit": "t_j5va_hit",
638
+ "riskWarn": "t_j5va_riskWarn",
643
639
  "emojiBtn": "t_j5va_emojiBtn",
644
- "customFieldRows": "t_j5va_customFieldRows",
645
- "emptyBox": "t_j5va_emptyBox",
640
+ "reportLine": "t_j5va_reportLine",
641
+ "pwBar": "t_j5va_pwBar",
642
+ "detailTotp": "t_j5va_detailTotp",
643
+ "selectActive": "t_j5va_selectActive",
644
+ "healthSummary": "t_j5va_healthSummary",
645
+ "auditIssues": "t_j5va_auditIssues",
646
+ "actionPrimary": "t_j5va_actionPrimary",
647
+ "pwHistTime": "t_j5va_pwHistTime",
646
648
  "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",
649
+ "pwWeak": "t_j5va_pwWeak",
653
650
  "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",
651
+ "moreWrap": "t_j5va_moreWrap",
652
+ "exportChips": "t_j5va_exportChips",
653
+ "customValueInput": "t_j5va_customValueInput",
654
+ "customEq": "t_j5va_customEq",
655
+ "pwHistRow": "t_j5va_pwHistRow",
656
+ "emptyBox": "t_j5va_emptyBox",
657
+ "resultCount": "t_j5va_resultCount",
658
+ "recentSearch": "t_j5va_recentSearch",
659
+ "badgeDanger": "t_j5va_badgeDanger",
659
660
  "rowMain": "t_j5va_rowMain",
661
+ "reportLineLink": "t_j5va_reportLineLink",
662
+ "badge": "t_j5va_badge",
660
663
  "gridName": "t_j5va_gridName",
661
- "tagActions": "t_j5va_tagActions",
662
- "modeAuto": "t_j5va_modeAuto",
664
+ "tab": "t_j5va_tab",
665
+ "genHistItem": "t_j5va_genHistItem",
666
+ "tagName": "t_j5va_tagName",
663
667
  "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",
675
- "detailDeleteBtn": "t_j5va_detailDeleteBtn",
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",
668
+ "moreButton": "t_j5va_moreButton",
669
+ "customKeyInput": "t_j5va_customKeyInput",
670
+ "lenChips": "t_j5va_lenChips",
671
+ "actionGroup": "t_j5va_actionGroup",
672
+ "lockedTag": "t_j5va_lockedTag",
673
+ "clearButton": "t_j5va_clearButton",
674
+ "detailCode": "t_j5va_detailCode",
675
+ "bulkItem": "t_j5va_bulkItem",
676
+ "genHist": "t_j5va_genHist",
677
+ "attachBox": "t_j5va_attachBox",
678
+ "retryButton": "t_j5va_retryButton",
679
+ "addButton": "t_j5va_addButton",
680
+ "customFieldRow": "t_j5va_customFieldRow",
681
+ "kindChipActive": "t_j5va_kindChipActive",
682
682
  "reportTitle": "t_j5va_reportTitle"
683
683
  };
684
684
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-vault",
3
- "version": "1.10.67",
3
+ "version": "1.10.69",
4
4
  "bin": {
5
5
  "dsh-vault": "./lib/cli.js"
6
6
  },
@@ -87,6 +87,7 @@
87
87
  "scan:public": "node scripts/secret-scan.mjs --public",
88
88
  "e2e:theme": "node tests/e2e/theme-check.mjs",
89
89
  "e2e:polish": "node tests/e2e/polish-check.mjs",
90
- "e2e:contrast": "node tests/e2e/contrast-audit.mjs"
90
+ "e2e:contrast": "node tests/e2e/contrast-audit.mjs",
91
+ "e2e:prompt": "node tests/e2e/cli-prompt.mjs"
91
92
  }
92
93
  }