@goodandready/dsh-dsml-artifact-guard 0.2.0 → 0.2.1

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.md CHANGED
@@ -183,3 +183,9 @@ MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
183
183
  - #19: Sanitized repository from internal AGENTS.md and updated .gitignore.
184
184
  - #20: Optimized npm package allowlist, eliminating duplicate READMEs and reducing package size by ~40%.
185
185
  - #21: Removed legacy build archives from source tree.
186
+
187
+ ## Changed in v0.2.1
188
+
189
+ - #26: Theme tokenization for settings card in `lib/client.js`: eliminated all 42 hardcoded hex/rgba color literals, migrating to canonical `--dsw-alias-...` CSS custom properties and `color-mix()` for flawless Dark and Light mode rendering.
190
+ - #26: Added automated theme regression test guard (`test/theme.test.js`).
191
+ - #26: Fixed `.gitignore` rule for `AGENTS.md` and untracked `package-lock.json` for pure zero-dependency repository hygiene.
package/README.ru.md CHANGED
@@ -183,3 +183,9 @@ MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
183
183
  - #19: Санитайзинг репозитория от внутреннего AGENTS.md и обновление .gitignore.
184
184
  - #20: Оптимизация состава npm-пакета, удаление дубликатов README и сокращение размера пакета на ~40%.
185
185
  - #21: Очистка дерева исходников от архивных пакетов .tgz.
186
+
187
+ ## Изменения в v0.2.1
188
+
189
+ - #26: Полная токенизация темы для карточки настроек в `lib/client.js`: устранены все 42 вхождения захардкоженных hex/rgba цветов с переходом на канонические переменные ядра `--dsw-alias-...` и `color-mix()` для идеальной читаемости в тёмной и светлой темах.
190
+ - #26: Добавлен автоматический тест-страж соответствия теме (`test/theme.test.js`).
191
+ - #26: Исправлено правило игнорирования `AGENTS.md` в `.gitignore` и снято отслеживание с `package-lock.json` в рамках стандарта нулевых зависимостей.
package/README.zh.md CHANGED
@@ -183,3 +183,9 @@ MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
183
183
  - #19: 清理公开代码仓库中的内部 AGENTS.md 规则文件并更新 .gitignore。
184
184
  - #20: 优化 npm 发布包白名单,移除冗余 README 副本,安装包体积缩减约 40%FD。
185
185
  - #21: 清理源代码目录中的旧版本 .tgz 打包归档。
186
+
187
+ ## v0.2.1 更新日志
188
+
189
+ - #26:配置面板全量主题语义化规范(`lib/client.js`):彻底清除全部 42 处硬编码 hex/rgba 颜色,全面接入 `--dsw-alias-...` 核心变量与 `color-mix()`,保障深色与浅色主题下的极致对比度与可读性。
190
+ - #26:新增前端主题规范自动化回归防护测试(`test/theme.test.js`)。
191
+ - #26:修复 `.gitignore` 对 `AGENTS.md` 的忽略匹配,移除 `package-lock.json` 跟踪以践行极致零依赖标准。
package/lib/client.js CHANGED
@@ -246,8 +246,8 @@ window.__ModuleLoader__.load({
246
246
  className: 'dsh-dsml-artifact-guard-card',
247
247
  style: {
248
248
  borderRadius: 12,
249
- border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,0.08))',
250
- background: 'var(--dsw-alias-bg-card, rgba(255,255,255,0.02))',
249
+ border: '1px solid var(--dsw-alias-border-l2)',
250
+ background: 'var(--dsw-alias-bg-card, var(--dsw-alias-bg-layer-3))',
251
251
  overflow: 'hidden',
252
252
  marginBottom: 12,
253
253
  },
@@ -271,7 +271,7 @@ window.__ModuleLoader__.load({
271
271
  style: {
272
272
  fontSize: 15,
273
273
  fontWeight: 600,
274
- color: 'var(--dsw-alias-label-primary, #f1f5f9)',
274
+ color: 'var(--dsw-alias-label-primary)',
275
275
  },
276
276
  }, tt('title')),
277
277
  React.createElement('span', {
@@ -280,8 +280,8 @@ window.__ModuleLoader__.load({
280
280
  fontWeight: 500,
281
281
  padding: '2px 6px',
282
282
  borderRadius: 6,
283
- background: 'rgba(59,130,246,0.15)',
284
- color: 'var(--dsw-alias-accent-primary, #3b82f6)',
283
+ background: 'color-mix(in srgb, var(--dsw-alias-brand-primary, var(--dsw-alias-state-brand-primary)) 15%, transparent)',
284
+ color: 'var(--dsw-alias-brand-primary, var(--dsw-alias-state-brand-primary))',
285
285
  },
286
286
  }, 'v' + updateState.currentVersion),
287
287
  isDisabled && React.createElement('span', {
@@ -290,15 +290,15 @@ window.__ModuleLoader__.load({
290
290
  fontWeight: 600,
291
291
  padding: '2px 6px',
292
292
  borderRadius: 6,
293
- background: 'rgba(239,68,68,0.15)',
294
- color: '#ef4444',
293
+ background: 'color-mix(in srgb, var(--dsw-alias-state-danger-primary, var(--dsw-alias-state-error-primary)) 15%, transparent)',
294
+ color: 'var(--dsw-alias-state-danger-primary, var(--dsw-alias-state-error-primary))',
295
295
  },
296
296
  }, 'OFF')
297
297
  ),
298
298
  React.createElement('span', {
299
299
  style: {
300
300
  fontSize: 13,
301
- color: 'var(--dsw-alias-label-secondary, #94a3b8)',
301
+ color: 'var(--dsw-alias-label-secondary)',
302
302
  },
303
303
  }, tt('sub'))
304
304
  ),
@@ -306,7 +306,7 @@ window.__ModuleLoader__.load({
306
306
  style: {
307
307
  display: 'flex',
308
308
  alignItems: 'center',
309
- color: 'var(--dsw-alias-label-tertiary, #64748b)',
309
+ color: 'var(--dsw-alias-label-tertiary)',
310
310
  },
311
311
  },
312
312
  CoreChevron
@@ -319,7 +319,7 @@ window.__ModuleLoader__.load({
319
319
  expanded && React.createElement('div', {
320
320
  style: {
321
321
  padding: '0 16px 16px',
322
- borderTop: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,0.08))',
322
+ borderTop: '1px solid var(--dsw-alias-border-l2)',
323
323
  },
324
324
  },
325
325
  // One-Click Updater block
@@ -327,9 +327,9 @@ window.__ModuleLoader__.load({
327
327
  style: {
328
328
  padding: '12px 14px',
329
329
  margin: '14px 0',
330
- background: 'rgba(255,255,255,0.03)',
330
+ background: 'color-mix(in srgb, var(--dsw-alias-label-primary) 3%, transparent)',
331
331
  borderRadius: 8,
332
- border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,0.08))',
332
+ border: '1px solid var(--dsw-alias-border-l2)',
333
333
  display: 'flex',
334
334
  alignItems: 'center',
335
335
  justifyContent: 'space-between',
@@ -338,19 +338,19 @@ window.__ModuleLoader__.load({
338
338
  },
339
339
  },
340
340
  React.createElement('div', { style: { fontSize: 13, display: 'flex', alignItems: 'center', gap: 8 } },
341
- React.createElement('span', { style: { color: 'var(--dsw-alias-label-secondary, #94a3b8)' } },
341
+ React.createElement('span', { style: { color: 'var(--dsw-alias-label-secondary)' } },
342
342
  tt('version') + ': ' + updateState.currentVersion
343
343
  ),
344
- updateState.checking && React.createElement('span', { style: { color: 'var(--dsw-alias-label-tertiary, #64748b)', fontSize: 12 } },
344
+ updateState.checking && React.createElement('span', { style: { color: 'var(--dsw-alias-label-tertiary)', fontSize: 12 } },
345
345
  tt('updateChecking')
346
346
  ),
347
- !updateState.checking && updateState.updateAvailable && React.createElement('span', { style: { color: '#f59e0b', fontWeight: 600, fontSize: 12 } },
347
+ !updateState.checking && updateState.updateAvailable && React.createElement('span', { style: { color: 'var(--dsw-alias-state-warning-primary)', fontWeight: 600, fontSize: 12 } },
348
348
  tt('updateAvailable', { v: updateState.latestVersion })
349
349
  ),
350
- !updateState.checking && !updateState.updateAvailable && !updateState.error && React.createElement('span', { style: { color: '#10b981', fontSize: 12 } },
350
+ !updateState.checking && !updateState.updateAvailable && !updateState.error && React.createElement('span', { style: { color: 'var(--dsw-alias-state-success-primary)', fontSize: 12 } },
351
351
  '✓ ' + tt('upToDate')
352
352
  ),
353
- updateState.error && React.createElement('span', { style: { color: '#ef4444', fontSize: 12 } },
353
+ updateState.error && React.createElement('span', { style: { color: 'var(--dsw-alias-state-danger-primary, var(--dsw-alias-state-error-primary))', fontSize: 12 } },
354
354
  updateState.error
355
355
  )
356
356
  ),
@@ -360,8 +360,8 @@ window.__ModuleLoader__.load({
360
360
  style: {
361
361
  padding: '6px 14px',
362
362
  borderRadius: 6,
363
- background: 'var(--dsw-alias-accent-primary, #3b82f6)',
364
- color: '#fff',
363
+ background: 'var(--dsw-alias-label-primary)',
364
+ color: 'var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-card))',
365
365
  border: 0,
366
366
  fontSize: 12,
367
367
  fontWeight: 600,
@@ -373,11 +373,11 @@ window.__ModuleLoader__.load({
373
373
  style: {
374
374
  padding: '8px 12px',
375
375
  marginBottom: 12,
376
- background: 'rgba(16,185,129,0.1)',
377
- color: '#10b981',
376
+ background: 'color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent)',
377
+ color: 'var(--dsw-alias-state-success-primary)',
378
378
  borderRadius: 6,
379
379
  fontSize: 12,
380
- border: '1px solid rgba(16,185,129,0.2)',
380
+ border: '1px solid color-mix(in srgb, var(--dsw-alias-state-success-primary) 20%, transparent)',
381
381
  },
382
382
  }, updateState.notice),
383
383
 
@@ -386,20 +386,20 @@ window.__ModuleLoader__.load({
386
386
  style: {
387
387
  padding: '8px 12px',
388
388
  marginBottom: 14,
389
- background: 'rgba(239,68,68,0.1)',
390
- color: '#f87171',
389
+ background: 'color-mix(in srgb, var(--dsw-alias-state-danger-primary, var(--dsw-alias-state-error-primary)) 10%, transparent)',
390
+ color: 'var(--dsw-alias-state-danger-primary, var(--dsw-alias-state-error-primary))',
391
391
  borderRadius: 6,
392
392
  fontSize: 12,
393
- border: '1px solid rgba(239,68,68,0.2)',
393
+ border: '1px solid color-mix(in srgb, var(--dsw-alias-state-danger-primary, var(--dsw-alias-state-error-primary)) 20%, transparent)',
394
394
  },
395
395
  }, tt('disabledNotice')),
396
396
 
397
397
  // Status Loading / Unavailable
398
398
  status === 'loading' && React.createElement('div', {
399
- style: { padding: '16px 0', fontSize: 13, color: 'var(--dsw-alias-label-tertiary, #64748b)' },
399
+ style: { padding: '16px 0', fontSize: 13, color: 'var(--dsw-alias-label-tertiary)' },
400
400
  }, tt('saving')),
401
401
  status === 'unavailable' && React.createElement('div', {
402
- style: { padding: '16px 0', fontSize: 13, color: '#ef4444' },
402
+ style: { padding: '16px 0', fontSize: 13, color: 'var(--dsw-alias-state-danger-primary, var(--dsw-alias-state-error-primary))' },
403
403
  }, tt('statusUnavailable')),
404
404
 
405
405
  // Settings Fields
@@ -407,7 +407,7 @@ window.__ModuleLoader__.load({
407
407
  // Mode Select
408
408
  React.createElement('div', { style: { display: 'flex', flexDirection: 'column', gap: 6 } },
409
409
  React.createElement('label', {
410
- style: { fontSize: 13, fontWeight: 500, color: 'var(--dsw-alias-label-primary, #f1f5f9)' },
410
+ style: { fontSize: 13, fontWeight: 500, color: 'var(--dsw-alias-label-primary)' },
411
411
  }, tt('mode')),
412
412
  React.createElement('select', {
413
413
  value: draft.mode,
@@ -415,9 +415,9 @@ window.__ModuleLoader__.load({
415
415
  style: {
416
416
  height: 34,
417
417
  borderRadius: 6,
418
- border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,0.08))',
419
- background: 'var(--dsw-alias-bg-field, rgba(0,0,0,0.2))',
420
- color: 'var(--dsw-alias-label-primary, #f1f5f9)',
418
+ border: '1px solid var(--dsw-alias-border-l2)',
419
+ background: 'var(--dsw-alias-bg-field, var(--dsw-alias-bg-layer-2))',
420
+ color: 'var(--dsw-alias-label-primary)',
421
421
  padding: '0 10px',
422
422
  fontSize: 13,
423
423
  },
@@ -431,7 +431,7 @@ window.__ModuleLoader__.load({
431
431
  // Provider ID Field
432
432
  React.createElement('div', { style: { display: 'flex', flexDirection: 'column', gap: 6 } },
433
433
  React.createElement('label', {
434
- style: { fontSize: 13, fontWeight: 500, color: 'var(--dsw-alias-label-primary, #f1f5f9)' },
434
+ style: { fontSize: 13, fontWeight: 500, color: 'var(--dsw-alias-label-primary)' },
435
435
  }, tt('providerId')),
436
436
  React.createElement('input', {
437
437
  type: 'text',
@@ -440,9 +440,9 @@ window.__ModuleLoader__.load({
440
440
  style: {
441
441
  height: 34,
442
442
  borderRadius: 6,
443
- border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,0.08))',
444
- background: 'var(--dsw-alias-bg-field, rgba(0,0,0,0.2))',
445
- color: 'var(--dsw-alias-label-primary, #f1f5f9)',
443
+ border: '1px solid var(--dsw-alias-border-l2)',
444
+ background: 'var(--dsw-alias-bg-field, var(--dsw-alias-bg-layer-2))',
445
+ color: 'var(--dsw-alias-label-primary)',
446
446
  padding: '0 10px',
447
447
  fontSize: 13,
448
448
  },
@@ -452,7 +452,7 @@ window.__ModuleLoader__.load({
452
452
  // Model ID Field
453
453
  React.createElement('div', { style: { display: 'flex', flexDirection: 'column', gap: 6 } },
454
454
  React.createElement('label', {
455
- style: { fontSize: 13, fontWeight: 500, color: 'var(--dsw-alias-label-primary, #f1f5f9)' },
455
+ style: { fontSize: 13, fontWeight: 500, color: 'var(--dsw-alias-label-primary)' },
456
456
  }, tt('modelId')),
457
457
  React.createElement('input', {
458
458
  type: 'text',
@@ -461,9 +461,9 @@ window.__ModuleLoader__.load({
461
461
  style: {
462
462
  height: 34,
463
463
  borderRadius: 6,
464
- border: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,0.08))',
465
- background: 'var(--dsw-alias-bg-field, rgba(0,0,0,0.2))',
466
- color: 'var(--dsw-alias-label-primary, #f1f5f9)',
464
+ border: '1px solid var(--dsw-alias-border-l2)',
465
+ background: 'var(--dsw-alias-bg-field, var(--dsw-alias-bg-layer-2))',
466
+ color: 'var(--dsw-alias-label-primary)',
467
467
  padding: '0 10px',
468
468
  fontSize: 13,
469
469
  },
@@ -477,7 +477,7 @@ window.__ModuleLoader__.load({
477
477
  alignItems: 'center',
478
478
  gap: 12,
479
479
  paddingTop: 12,
480
- borderTop: '1px solid var(--dsw-alias-border-l2, rgba(255,255,255,0.08))',
480
+ borderTop: '1px solid var(--dsw-alias-border-l2)',
481
481
  marginTop: 4,
482
482
  },
483
483
  },
@@ -489,8 +489,8 @@ window.__ModuleLoader__.load({
489
489
  padding: '0 18px',
490
490
  border: 0,
491
491
  borderRadius: 8,
492
- background: 'var(--dsw-alias-accent-primary, #3b82f6)',
493
- color: '#fff',
492
+ background: 'var(--dsw-alias-label-primary)',
493
+ color: 'var(--dsw-alias-bg-layer-3, var(--dsw-alias-bg-card))',
494
494
  fontSize: 13,
495
495
  fontWeight: 600,
496
496
  cursor: saving ? 'default' : 'pointer',
@@ -499,7 +499,7 @@ window.__ModuleLoader__.load({
499
499
  msg && React.createElement('span', {
500
500
  style: {
501
501
  fontSize: 13,
502
- color: msg === tt('saved') ? '#10b981' : '#f87171',
502
+ color: msg === tt('saved') ? 'var(--dsw-alias-state-success-primary)' : 'var(--dsw-alias-state-danger-primary, var(--dsw-alias-state-error-primary))',
503
503
  },
504
504
  }, msg)
505
505
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodandready/dsh-dsml-artifact-guard",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Sanitizes leaked DeepSeek DSML closing tags from model text streams",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",