@yadsh/dsh-qa-surface 0.12.0 → 0.13.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 (50) hide show
  1. package/lib/admin/service.js +254 -52
  2. package/lib/admin/service.js.map +1 -1
  3. package/lib/client/QaAccountsController.js +19 -1
  4. package/lib/client/QaAccountsController.js.map +1 -1
  5. package/lib/client/admin/pages/Conversations.js +9 -2
  6. package/lib/client/admin/pages/Conversations.js.map +1 -1
  7. package/lib/client/admin/pages/Overview.js +1 -1
  8. package/lib/client/admin/pages/Overview.js.map +1 -1
  9. package/lib/client/admin/pages/Quality.js +1 -1
  10. package/lib/client/admin/pages/Quality.js.map +1 -1
  11. package/lib/client/admin/pages/Review.js +8 -4
  12. package/lib/client/admin/pages/Review.js.map +1 -1
  13. package/lib/client/admin/shared.js +42 -4
  14. package/lib/client/admin/shared.js.map +1 -1
  15. package/lib/client/components/QaChangelog.js +23 -0
  16. package/lib/client/components/QaChangelog.js.map +1 -1
  17. package/lib/client/index.js +18 -4
  18. package/lib/client/index.js.map +1 -1
  19. package/lib/client/markdown/MermaidBlock.js +80 -0
  20. package/lib/client/markdown/MermaidBlock.js.map +1 -0
  21. package/lib/client/markdown/render.js +4 -0
  22. package/lib/client/markdown/render.js.map +1 -1
  23. package/lib/client/rating-harvest.js +138 -0
  24. package/lib/client/rating-harvest.js.map +1 -0
  25. package/lib/client/styles.js +23 -0
  26. package/lib/client/styles.js.map +1 -1
  27. package/lib/client/types.js.map +1 -1
  28. package/lib/client.js +2289 -107
  29. package/lib/client.js.map +1 -1
  30. package/lib/index.js +26 -9
  31. package/lib/index.js.map +1 -1
  32. package/lib/provenance/extractors.js +1 -1
  33. package/lib/provenance/extractors.js.map +1 -1
  34. package/lib/provenance/host-store.js +5 -1
  35. package/lib/provenance/host-store.js.map +1 -1
  36. package/lib/qa-tools/docs-tools.js +63 -10
  37. package/lib/qa-tools/docs-tools.js.map +1 -1
  38. package/lib/typert.host.js +137 -72
  39. package/lib/typert.remote-client.d.ts +11 -9
  40. package/lib/typert.remote-client.js +117 -67
  41. package/lib/types/admin/service.d.ts +60 -9
  42. package/lib/types/client/QaAccountsController.d.ts +12 -1
  43. package/lib/types/client/admin/shared.d.ts +16 -1
  44. package/lib/types/client/markdown/MermaidBlock.d.ts +6 -0
  45. package/lib/types/client/rating-harvest.d.ts +49 -0
  46. package/lib/types/client/types.d.ts +11 -4
  47. package/lib/types/index.d.ts +18 -6
  48. package/lib/types/qa-tools/docs-tools.d.ts +2 -2
  49. package/lib/types/types.d.ts +20 -0
  50. package/package.json +5 -4
@@ -0,0 +1,138 @@
1
+ /**
2
+ * One-shot replay of the ratings this browser still holds locally.
3
+ *
4
+ * A thumbs given before the surface could file it lives in the chat's ratings
5
+ * map and nowhere else. That map carries no timestamp and no reasons, so it
6
+ * cannot tell a lost rating from one the Host already holds a fuller version
7
+ * of — which is why the harvest writes through an insert-only call, offers only
8
+ * the ratings of the chats the signing-in account owns, and marks an account as
9
+ * read rather than re-offering its verdicts on every login.
10
+ */
11
+ /** Chat-scoped ratings keys sit under this marker: `<ns>:chat:<id>:ratings`. */
12
+ const CHAT_MARKER = ":chat:";
13
+ /** The suffix the message row writes its ratings map under. */
14
+ const RATINGS_SUFFIX = ":ratings";
15
+ /** Prefix of the per-account marker: `<ns>:ratings-harvested:<account>`. */
16
+ const HARVESTED_MARKER = ":ratings-harvested:";
17
+ /** How many ratings one request carries. */
18
+ const BATCH_SIZE = 100;
19
+ /** The durable log position an answer row's browser id carries. */
20
+ const RATED_ANSWER = /^assistant:(\d+)$/u;
21
+ const ALREADY_HARVESTED = Object.freeze({
22
+ status: "already-harvested",
23
+ entries: 0,
24
+ recorded: 0,
25
+ });
26
+ function harvestedKey(namespace, accountId) {
27
+ return `${namespace}${HARVESTED_MARKER}${accountId}`;
28
+ }
29
+ /** Whether this browser has already been read out for that account. */
30
+ export function ratingsHarvested(storage, namespace, accountId) {
31
+ try {
32
+ return storage.getItem(harvestedKey(namespace, accountId)) === "1";
33
+ }
34
+ catch {
35
+ // A store that will not answer has not been read out.
36
+ return false;
37
+ }
38
+ }
39
+ function markRatingsHarvested(storage, namespace, accountId) {
40
+ try {
41
+ storage.setItem(harvestedKey(namespace, accountId), "1");
42
+ }
43
+ catch {
44
+ // A denied write costs a replay at the next login, which the Host answers
45
+ // as already recorded. It must not fail the harvest that just succeeded.
46
+ }
47
+ }
48
+ function readKeys(storage) {
49
+ const keys = [];
50
+ try {
51
+ for (let index = 0; index < storage.length; index += 1) {
52
+ const key = storage.key(index);
53
+ if (typeof key === "string")
54
+ keys.push(key);
55
+ }
56
+ }
57
+ catch {
58
+ // A store that refuses enumeration yields what it yielded until then.
59
+ }
60
+ return keys;
61
+ }
62
+ function parseRatings(raw) {
63
+ if (raw === null)
64
+ return {};
65
+ try {
66
+ const parsed = JSON.parse(raw);
67
+ return typeof parsed === "object" &&
68
+ parsed !== null &&
69
+ !Array.isArray(parsed)
70
+ ? parsed
71
+ : {};
72
+ }
73
+ catch {
74
+ return {};
75
+ }
76
+ }
77
+ function ratingOf(thumbs) {
78
+ if (thumbs === "up")
79
+ return "positive";
80
+ return thumbs === "down" ? "negative" : undefined;
81
+ }
82
+ /**
83
+ * Every rating this browser holds for that namespace, addressed by the
84
+ * conversation and by the durable log position the Host files a verdict under.
85
+ *
86
+ * An answer row's browser id is `assistant:<position>`, so those keys are
87
+ * addressable. Anything else — a work row, a half-streamed answer, an id the
88
+ * Host named rather than numbered — cannot be traced back to a log position,
89
+ * and is left where it is instead of guessed at.
90
+ */
91
+ export function collectLocalRatings(storage, namespace) {
92
+ const prefix = `${namespace}${CHAT_MARKER}`;
93
+ const entries = [];
94
+ for (const key of readKeys(storage)) {
95
+ if (!key.startsWith(prefix) || !key.endsWith(RATINGS_SUFFIX))
96
+ continue;
97
+ const conversationId = key.slice(prefix.length, -RATINGS_SUFFIX.length);
98
+ if (conversationId === "")
99
+ continue;
100
+ for (const [messageId, thumbs] of Object.entries(parseRatings(storage.getItem(key)))) {
101
+ const position = RATED_ANSWER.exec(messageId)?.[1];
102
+ const rating = ratingOf(thumbs);
103
+ if (position === undefined || rating === undefined)
104
+ continue;
105
+ entries.push({ conversationId, messageId: position, rating });
106
+ }
107
+ }
108
+ return entries;
109
+ }
110
+ /**
111
+ * Read this browser's ratings out through `send`, once per account.
112
+ *
113
+ * `send` is the Host call; the caller chooses the token and the remote it
114
+ * travels on. The marker is written only after every batch landed, so a
115
+ * half-failed harvest is retried by the next login rather than lost.
116
+ */
117
+ export async function harvestLocalRatings(options) {
118
+ const { storage, namespace, accountId, ownedIds, send } = options;
119
+ if (ratingsHarvested(storage, namespace, accountId))
120
+ return ALREADY_HARVESTED;
121
+ const owned = new Set(ownedIds);
122
+ const entries = collectLocalRatings(storage, namespace).filter((entry) => owned.has(entry.conversationId));
123
+ if (entries.length === 0) {
124
+ markRatingsHarvested(storage, namespace, accountId);
125
+ return { status: "nothing-to-harvest", entries: 0, recorded: 0 };
126
+ }
127
+ let recorded = 0;
128
+ for (let offset = 0; offset < entries.length; offset += BATCH_SIZE) {
129
+ const result = await send(entries.slice(offset, offset + BATCH_SIZE));
130
+ if (!result.ok) {
131
+ return { status: "failed", entries: entries.length, recorded };
132
+ }
133
+ recorded += result.value.recorded;
134
+ }
135
+ markRatingsHarvested(storage, namespace, accountId);
136
+ return { status: "harvested", entries: entries.length, recorded };
137
+ }
138
+ //# sourceMappingURL=rating-harvest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating-harvest.js","sourceRoot":"","sources":["../../src/client/rating-harvest.ts"],"names":[],"mappings":"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"}
@@ -204,6 +204,12 @@ export const QA_SURFACE_STYLES = String.raw `
204
204
  .dsh-qa-audit-dialog__body .dsh-audit-json{height:100%;min-height:320px}
205
205
  .dsh-qa-modal__body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:6px 18px 18px}
206
206
  .dsh-qa-modal__footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:none;padding:12px 18px;border-top:1px solid var(--dsw-alias-border-l2)}
207
+ .dsh-qa-modal__footer button{appearance:none;padding:8px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;font-weight:500;line-height:19px;cursor:pointer;transition:border-color .12s,background .12s,color .12s}
208
+ .dsh-qa-modal__footer button:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
209
+ .dsh-qa-modal__footer button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
210
+ .dsh-qa-modal__footer button:disabled{opacity:.5;cursor:default}
211
+ .dsh-qa-modal__footer .dsh-qa-modal__primary{border-color:transparent;background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast)}
212
+ .dsh-qa-modal__footer .dsh-qa-modal__primary:hover:not(:disabled){border-color:transparent;background:var(--dsh-qa-accent-hover);color:var(--dsh-qa-accent-contrast)}
207
213
  .dsh-qa-changelog__entry{padding-top:10px}
208
214
  .dsh-qa-changelog__version{display:flex;align-items:baseline;gap:8px;margin:0 0 2px;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}
209
215
  .dsh-qa-changelog__date{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:16px}
@@ -314,6 +320,7 @@ export const QA_SURFACE_STYLES = String.raw `
314
320
  .dsh-qa-toolpicker__description{display:-webkit-box;overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;min-width:0;-webkit-box-orient:vertical;-webkit-line-clamp:2}
315
321
  .dsh-qa-toolpicker__selected{margin-right:auto;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}
316
322
  @media (max-width:720px){.dsh-qa-modal__panel--settings{height:min(640px,calc(100vh - 48px))}.dsh-qa-settings{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.dsh-qa-settings__nav{flex-direction:row;gap:4px;padding:8px 10px;border-right:0;border-bottom:1px solid var(--dsw-alias-border-l2);overflow-x:auto;overflow-y:hidden}.dsh-qa-settings__tab{white-space:nowrap}.dsh-qa-settings__content{padding:12px 14px 0}.dsh-qa-settings__page{padding-bottom:18px}.dsh-qa-settings__actions{margin:auto -14px -18px;padding:10px 14px}}
323
+ @media (max-width:520px){.dsh-qa-modal{padding:12px}.dsh-qa-modal__footer{align-items:stretch;flex-direction:column-reverse}.dsh-qa-modal__footer button{width:100%}}
317
324
  .dsh-qa-surface *{box-sizing:border-box}
318
325
  .dsh-qa-surface ::selection{background:var(--dsh-qa-text-select)}
319
326
  .dsh-qa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@@ -690,6 +697,22 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
690
697
  .dsh-qa-md-code__copy:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
691
698
  .dsh-qa-md-code pre{overflow-x:auto;margin:0;padding:16px;border:0;border-radius:0 0 12px 12px;background:transparent;font-family:var(--ds-font-family-code,ui-monospace,SFMono-Regular,Consolas,monospace);font-size:var(--dsw-font-markdown-code-block-font-size,11px);line-height:var(--dsw-font-markdown-code-block-line-height,19px);white-space:pre-wrap;word-break:break-word}
692
699
  .dsh-qa-md-code pre code{display:block;padding:0;border:0;background:transparent;font:inherit}
700
+ .dsh-qa-mermaid{position:relative;overflow:hidden;margin:16px 0;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}
701
+ .dsh-qa-mermaid__toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 8px 14px;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);font-size:12px;line-height:20px}
702
+ .dsh-qa-mermaid__actions{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}
703
+ .dsh-qa-mermaid__actions button{appearance:none;padding:3px 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer}
704
+ .dsh-qa-mermaid__actions button:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
705
+ .dsh-qa-mermaid__actions button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
706
+ .dsh-qa-mermaid__viewport{min-height:180px;max-height:68vh;overflow:auto;overscroll-behavior:contain;padding:20px;background:var(--dsw-alias-bg-layer-1)}
707
+ .dsh-qa-mermaid__canvas{min-width:320px;margin:auto;transition:width .16s ease}
708
+ .dsh-qa-mermaid__canvas svg{display:block;width:100%;max-width:none!important;height:auto;margin:auto}
709
+ .dsh-qa-mermaid__loading{display:grid;place-items:center;min-height:140px;color:var(--dsw-alias-label-tertiary)}
710
+ .dsh-qa-mermaid>.dsh-qa-md-code{margin:0;border-radius:0;border-top:1px solid var(--dsw-alias-border-l2)}
711
+ .dsh-qa-mermaid--error{padding:12px}
712
+ .dsh-qa-mermaid--error>p{margin:0 0 10px;color:var(--dsh-qa-error)}
713
+ .dsh-qa-mermaid--error>.dsh-qa-md-code{margin:0;border-radius:10px;border-top:0}
714
+ .dsh-qa-mermaid--expanded{position:fixed;inset:16px;z-index:1000;display:flex;flex-direction:column;margin:0;box-shadow:var(--dsw-shadow-lv3)}
715
+ .dsh-qa-mermaid--expanded .dsh-qa-mermaid__viewport{flex:1;max-height:none}
693
716
  .dsh-qa-md-tok[data-tok="comment"]{color:var(--shiki-token-comment)}
694
717
  .dsh-qa-md-tok[data-tok="string"]{color:var(--shiki-token-string)}
695
718
  .dsh-qa-md-tok[data-tok="keyword"]{color:var(--shiki-token-keyword)}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AA2nBA,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAmB,MAAM,CAAC,MAAM,CAAC;IACjE,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B,cAAc,EAAE,IAAI;IACpB,KAAK,EAAE,IAAI;IACX,qBAAqB,EAAE,KAAK;IAC5B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,eAAe,EAAE,IAAI;IACrB,uBAAuB,EAAE,SAAS;IAClC,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,0EAA0E;IAC1E,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC;KACV,CAAC;CACH,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AA0oBA,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAmB,MAAM,CAAC,MAAM,CAAC;IACjE,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B,cAAc,EAAE,IAAI;IACpB,KAAK,EAAE,IAAI;IACX,qBAAqB,EAAE,KAAK;IAC5B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,eAAe,EAAE,IAAI;IACrB,uBAAuB,EAAE,SAAS;IAClC,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,0EAA0E;IAC1E,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC;KACV,CAAC;CACH,CAAC,CAAC"}