@hpyperry/dsh-ref-lib 0.8.0 → 0.9.0

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.
Files changed (49) hide show
  1. package/README.md +2 -1
  2. package/lib/client/RefLibCommandCard.d.ts +29 -0
  3. package/lib/client/RefLibCommandCard.d.ts.map +1 -0
  4. package/lib/client/RefLibCommandCard.js +48 -0
  5. package/lib/client/RefLibCommandCard.js.map +1 -0
  6. package/lib/client/RefLibDock.d.ts.map +1 -1
  7. package/lib/client/RefLibDock.js +91 -15
  8. package/lib/client/RefLibDock.js.map +1 -1
  9. package/lib/client/RefLibPanel.d.ts.map +1 -1
  10. package/lib/client/RefLibPanel.js +7 -2
  11. package/lib/client/RefLibPanel.js.map +1 -1
  12. package/lib/client/index.d.ts.map +1 -1
  13. package/lib/client/index.js +8 -0
  14. package/lib/client/index.js.map +1 -1
  15. package/lib/client/locales.d.ts +16 -0
  16. package/lib/client/locales.d.ts.map +1 -1
  17. package/lib/client/locales.js +20 -0
  18. package/lib/client/locales.js.map +1 -1
  19. package/lib/client/refresh-guard.d.ts +31 -0
  20. package/lib/client/refresh-guard.d.ts.map +1 -0
  21. package/lib/client/refresh-guard.js +38 -0
  22. package/lib/client/refresh-guard.js.map +1 -0
  23. package/lib/client/styles.d.ts.map +1 -1
  24. package/lib/client/styles.js +111 -0
  25. package/lib/client/styles.js.map +1 -1
  26. package/lib/client.js +911 -582
  27. package/lib/client.js.map +1 -1
  28. package/lib/logic.d.ts +16 -1
  29. package/lib/logic.d.ts.map +1 -1
  30. package/lib/logic.js +19 -0
  31. package/lib/logic.js.map +1 -1
  32. package/lib/render.d.ts +6 -4
  33. package/lib/render.d.ts.map +1 -1
  34. package/lib/render.js +14 -7
  35. package/lib/render.js.map +1 -1
  36. package/lib/routes.d.ts.map +1 -1
  37. package/lib/routes.js +5 -1
  38. package/lib/routes.js.map +1 -1
  39. package/lib/service.d.ts +30 -2
  40. package/lib/service.d.ts.map +1 -1
  41. package/lib/service.js +71 -10
  42. package/lib/service.js.map +1 -1
  43. package/lib/spec.d.ts +9 -0
  44. package/lib/spec.d.ts.map +1 -1
  45. package/lib/validate.d.ts +1 -1
  46. package/lib/validate.d.ts.map +1 -1
  47. package/lib/validate.js +11 -3
  48. package/lib/validate.js.map +1 -1
  49. package/package.json +15 -15
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 并发读守卫(竞态控制核心):只接受"最后发起"的请求结果。
3
+ *
4
+ * RefLibDock 有多个并发"拉取列表"来源——挂载预载、打开面板、30s 轮询、操作后的
5
+ * 刷新——网络返回顺序不保证,旧快照可能覆盖新快照。守卫用递增编号标记每次发起:
6
+ * 返回时只有仍持有**最新编号**的请求结果才被应用,其余一律丢弃。
7
+ *
8
+ * 为什么"最后发起"就代表最新:`list` 返回的是请求发起时刻的服务端快照,发起越晚
9
+ * 快照越新,所以只信最后发起者 ≈ 只信最新快照。操作后的刷新总是最后发起(操作
10
+ * 完成后才发起),天然胜出;响应乱序时旧号被丢弃,最终一致。
11
+ *
12
+ * 纯 TS、零依赖、零 DOM——node 环境可直接单元测试(tests/refresh-guard.spec.ts)。
13
+ * @module @hpyperry/dsh-ref-lib/src/client/refresh-guard
14
+ */
15
+ export class RefreshGuard {
16
+ seq = 0;
17
+ /** 发起一次请求,返回本次请求的编号。 */
18
+ begin() {
19
+ this.seq += 1;
20
+ return this.seq;
21
+ }
22
+ /**
23
+ * 该编号是否仍是最新发起者。
24
+ * @param mine - 发起时 {@link begin} 返回的编号。
25
+ * @returns true 表示应应用该请求的结果;false 表示期间又有新请求发起,结果已过期。
26
+ */
27
+ isLatest(mine) {
28
+ return mine === this.seq;
29
+ }
30
+ /**
31
+ * 作废所有 in-flight 请求的结果(会话切换 / 组件卸载时调用):seq 递增后,
32
+ * 任何旧编号的 {@link isLatest} 都返回 false。
33
+ */
34
+ invalidate() {
35
+ this.seq += 1;
36
+ }
37
+ }
38
+ //# sourceMappingURL=refresh-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-guard.js","sourceRoot":"","sources":["../../src/client/refresh-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAY;IACf,GAAG,GAAG,CAAC,CAAA;IAEf,wBAAwB;IACxB,KAAK;QACH,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QACb,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACf,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmnBH,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAkuBH,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}
@@ -92,6 +92,22 @@ const CSS = `
92
92
  font-weight: 500;
93
93
  }
94
94
 
95
+ /* 失效条目计数角标(v9):红色系,与普通数量徽标区分。 */
96
+ .reflib-chipWarn {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ min-width: 18px;
101
+ height: 18px;
102
+ padding: 0 5px;
103
+ border-radius: 9px;
104
+ background: var(--dsw-alias-state-error-primary);
105
+ color: #fff;
106
+ font-size: 11px;
107
+ line-height: 18px;
108
+ font-weight: 500;
109
+ }
110
+
95
111
  /* ── 应用内目录浏览器(browse 后端)── */
96
112
  .reflib-browser {
97
113
  width: min(460px, 100%);
@@ -307,6 +323,11 @@ const CSS = `
307
323
  color: var(--dsw-alias-label-tertiary);
308
324
  }
309
325
 
326
+ /* 失效条目行图标(v9):警示色。 */
327
+ .reflib-rowIconWarn {
328
+ color: var(--dsw-alias-state-error-primary);
329
+ }
330
+
310
331
  .reflib-rowBody {
311
332
  display: flex;
312
333
  flex: 1;
@@ -345,6 +366,16 @@ const CSS = `
345
366
  white-space: nowrap;
346
367
  }
347
368
 
369
+ /* 失效条目状态行(v9):红色警示文案,位于路径之下 */
370
+ .reflib-rowStatus {
371
+ overflow: hidden;
372
+ color: var(--dsw-alias-state-error-primary);
373
+ font-size: 12px;
374
+ line-height: 16px;
375
+ text-overflow: ellipsis;
376
+ white-space: nowrap;
377
+ }
378
+
348
379
  .reflib-rowRemove {
349
380
  display: inline-flex;
350
381
  align-items: center;
@@ -618,6 +649,86 @@ const CSS = `
618
649
  color: var(--dsw-alias-label-caption);
619
650
  }
620
651
 
652
+ /* ── /ref-lib 命令结果卡片(conversation.chat.commandview)── */
653
+ .reflib-cmd {
654
+ display: flex;
655
+ flex-direction: column;
656
+ gap: 6px;
657
+ min-width: 0;
658
+ }
659
+
660
+ .reflib-cmdHead {
661
+ display: flex;
662
+ align-items: center;
663
+ gap: 8px;
664
+ min-width: 0;
665
+ }
666
+
667
+ .reflib-cmdHeadIcon {
668
+ flex: none;
669
+ }
670
+
671
+ .reflib-cmdName {
672
+ flex: none;
673
+ color: var(--dsw-alias-label-primary);
674
+ font-size: 14px;
675
+ line-height: 20px;
676
+ font-weight: 500;
677
+ }
678
+
679
+ /* 摘要行 = 结果首行;过长单行省略(完整结果见下方 body) */
680
+ .reflib-cmdSummary {
681
+ min-width: 0;
682
+ flex: 1 1 auto;
683
+ overflow: hidden;
684
+ color: var(--dsw-alias-label-tertiary);
685
+ font-size: 13px;
686
+ line-height: 20px;
687
+ text-overflow: ellipsis;
688
+ white-space: nowrap;
689
+ }
690
+
691
+ .reflib-cmdSummary[data-error] {
692
+ color: var(--dsw-alias-state-error-primary);
693
+ }
694
+
695
+ .reflib-cmdCopy {
696
+ flex: none;
697
+ display: inline-flex;
698
+ align-items: center;
699
+ gap: 4px;
700
+ padding: 2px 8px;
701
+ border: 1px solid var(--dsw-alias-border-l1);
702
+ border-radius: 6px;
703
+ background: transparent;
704
+ color: var(--dsw-alias-label-secondary);
705
+ font-size: 12px;
706
+ line-height: 18px;
707
+ cursor: pointer;
708
+ }
709
+
710
+ .reflib-cmdCopy:hover {
711
+ background: var(--dsw-alias-interactive-bg-hover);
712
+ }
713
+
714
+ /* 完整结果:默认全展开(无 max-height 截断),超宽自动换行 */
715
+ .reflib-cmdBody {
716
+ margin: 0;
717
+ padding: 10px 14px;
718
+ overflow: auto;
719
+ border: 1px solid var(--dsw-alias-border-l1);
720
+ border-radius: 10px;
721
+ background: var(--dsw-alias-markdown-code-block);
722
+ color: var(--dsw-alias-label-primary);
723
+ font: var(--dsw-font-markdown-code-block-small);
724
+ white-space: pre-wrap;
725
+ word-break: break-word;
726
+ }
727
+
728
+ .reflib-cmdBody[data-error] {
729
+ color: var(--dsw-alias-state-error-primary);
730
+ }
731
+
621
732
  /* 窄视口:路径行换行,输入框占满一行 */
622
733
  @media (max-width: 440px) {
623
734
  .reflib-addRow {
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,yDAAyD;AACzD,MAAM,SAAS,GAAG,uBAAuB,CAAA;AACzC,0BAA0B;AAC1B,MAAM,YAAY,GAAG,8BAA8B,CAAA;AAEnD,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0mBX,CAAA;AAED,mDAAmD;AACnD,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAM;IAC3C,IAAI,QAAQ,CAAC,aAAa,CAAC,yBAAyB,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI;QAAE,OAAM;IAC5F,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC3C,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAA;IAC9B,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAA;IACpC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,yDAAyD;AACzD,MAAM,SAAS,GAAG,uBAAuB,CAAA;AACzC,0BAA0B;AAC1B,MAAM,YAAY,GAAG,8BAA8B,CAAA;AAEnD,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAytBX,CAAA;AAED,mDAAmD;AACnD,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAM;IAC3C,IAAI,QAAQ,CAAC,aAAa,CAAC,yBAAyB,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI;QAAE,OAAM;IAC5F,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC3C,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAA;IAC9B,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAA;IACpC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC"}