@yadsh/dsh-qa-surface 0.16.0 → 0.18.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 (325) hide show
  1. package/README.md +34 -5
  2. package/compatibility.json +1 -1
  3. package/lib/account-remotes.js +13 -0
  4. package/lib/account-remotes.js.map +1 -1
  5. package/lib/accounts/database.js +120 -4
  6. package/lib/accounts/database.js.map +1 -1
  7. package/lib/accounts/file.js.map +1 -1
  8. package/lib/accounts/store.js +131 -5
  9. package/lib/accounts/store.js.map +1 -1
  10. package/lib/accounts/token.js +8 -2
  11. package/lib/accounts/token.js.map +1 -1
  12. package/lib/admin/metrics.js +15 -2
  13. package/lib/admin/metrics.js.map +1 -1
  14. package/lib/admin/read-budget.js +28 -0
  15. package/lib/admin/read-budget.js.map +1 -0
  16. package/lib/admin/service.js +135 -40
  17. package/lib/admin/service.js.map +1 -1
  18. package/lib/admin/session-log.js +63 -4
  19. package/lib/admin/session-log.js.map +1 -1
  20. package/lib/chat-sharing/native-fence.js +31 -2
  21. package/lib/chat-sharing/native-fence.js.map +1 -1
  22. package/lib/chat-sharing/store.js +9 -3
  23. package/lib/chat-sharing/store.js.map +1 -1
  24. package/lib/chat-sharing/transport.js +74 -13
  25. package/lib/chat-sharing/transport.js.map +1 -1
  26. package/lib/chat-sharing/uploads.js +79 -6
  27. package/lib/chat-sharing/uploads.js.map +1 -1
  28. package/lib/cli.js +13 -0
  29. package/lib/cli.js.map +1 -1
  30. package/lib/client/QaAccountsController.js +79 -0
  31. package/lib/client/QaAccountsController.js.map +1 -1
  32. package/lib/client/QaRouteController.js +3 -1
  33. package/lib/client/QaRouteController.js.map +1 -1
  34. package/lib/client/QaSessionController.js +102 -29
  35. package/lib/client/QaSessionController.js.map +1 -1
  36. package/lib/client/QaSurface.js +89 -19
  37. package/lib/client/QaSurface.js.map +1 -1
  38. package/lib/client/QaTranscriptAdapter.js +15 -2
  39. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  40. package/lib/client/account-sessions.js +74 -8
  41. package/lib/client/account-sessions.js.map +1 -1
  42. package/lib/client/admin/CapabilityPicker.js +50 -0
  43. package/lib/client/admin/CapabilityPicker.js.map +1 -0
  44. package/lib/client/admin/CoverageNotice.js +9 -0
  45. package/lib/client/admin/CoverageNotice.js.map +1 -0
  46. package/lib/client/admin/QaAdmin.js +3 -150
  47. package/lib/client/admin/QaAdmin.js.map +1 -1
  48. package/lib/client/admin/RoleEditor.js +46 -0
  49. package/lib/client/admin/RoleEditor.js.map +1 -0
  50. package/lib/client/admin/capability-selection.js +63 -0
  51. package/lib/client/admin/capability-selection.js.map +1 -0
  52. package/lib/client/admin/pages/Conversations.js +35 -17
  53. package/lib/client/admin/pages/Conversations.js.map +1 -1
  54. package/lib/client/admin/pages/Overview.js +3 -2
  55. package/lib/client/admin/pages/Overview.js.map +1 -1
  56. package/lib/client/admin/pages/Quality.js +77 -20
  57. package/lib/client/admin/pages/Quality.js.map +1 -1
  58. package/lib/client/admin/pages/SkillFiles.js +14 -3
  59. package/lib/client/admin/pages/SkillFiles.js.map +1 -1
  60. package/lib/client/admin/shared.js +68 -3
  61. package/lib/client/admin/shared.js.map +1 -1
  62. package/lib/client/answer-review.js +89 -0
  63. package/lib/client/answer-review.js.map +1 -0
  64. package/lib/client/chat-artifacts.js +1 -0
  65. package/lib/client/chat-artifacts.js.map +1 -1
  66. package/lib/client/components/QaAnswerReviewStatus.js +45 -0
  67. package/lib/client/components/QaAnswerReviewStatus.js.map +1 -0
  68. package/lib/client/components/QaAuthGate.js +31 -28
  69. package/lib/client/components/QaAuthGate.js.map +1 -1
  70. package/lib/client/components/QaChangelog.js +79 -0
  71. package/lib/client/components/QaChangelog.js.map +1 -1
  72. package/lib/client/components/QaChatActions.js +52 -0
  73. package/lib/client/components/QaChatActions.js.map +1 -0
  74. package/lib/client/components/QaChatSharing.js +22 -19
  75. package/lib/client/components/QaChatSharing.js.map +1 -1
  76. package/lib/client/components/QaComposer.js +27 -4
  77. package/lib/client/components/QaComposer.js.map +1 -1
  78. package/lib/client/components/QaFormItem.js +63 -0
  79. package/lib/client/components/QaFormItem.js.map +1 -0
  80. package/lib/client/components/QaInputForm.js +281 -0
  81. package/lib/client/components/QaInputForm.js.map +1 -0
  82. package/lib/client/components/QaMarkdownPreview.js +86 -0
  83. package/lib/client/components/QaMarkdownPreview.js.map +1 -0
  84. package/lib/client/components/QaMessage.js +8 -2
  85. package/lib/client/components/QaMessage.js.map +1 -1
  86. package/lib/client/components/QaModal.js +34 -4
  87. package/lib/client/components/QaModal.js.map +1 -1
  88. package/lib/client/components/QaRightRail.js +6 -4
  89. package/lib/client/components/QaRightRail.js.map +1 -1
  90. package/lib/client/components/QaRightRailResize.js +129 -0
  91. package/lib/client/components/QaRightRailResize.js.map +1 -0
  92. package/lib/client/components/QaSidebar.js +10 -1
  93. package/lib/client/components/QaSidebar.js.map +1 -1
  94. package/lib/client/components/QaSourceFilters.js +22 -0
  95. package/lib/client/components/QaSourceFilters.js.map +1 -0
  96. package/lib/client/components/QaSourcesPanel.js +57 -13
  97. package/lib/client/components/QaSourcesPanel.js.map +1 -1
  98. package/lib/client/components/QaSpreadsheetPreview.js +56 -0
  99. package/lib/client/components/QaSpreadsheetPreview.js.map +1 -0
  100. package/lib/client/components/QaWelcomeNotice.js +2 -2
  101. package/lib/client/components/QaWelcomeNotice.js.map +1 -1
  102. package/lib/client/components/QaWorkspaceBrowser.js +22 -9
  103. package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
  104. package/lib/client/components/QaZoomImage.js +56 -0
  105. package/lib/client/components/QaZoomImage.js.map +1 -0
  106. package/lib/client/components/source-refs.js +18 -4
  107. package/lib/client/components/source-refs.js.map +1 -1
  108. package/lib/client/forms-styles.js +14 -0
  109. package/lib/client/forms-styles.js.map +1 -0
  110. package/lib/client/forms.js +40 -0
  111. package/lib/client/forms.js.map +1 -0
  112. package/lib/client/index.js +31 -3
  113. package/lib/client/index.js.map +1 -1
  114. package/lib/client/markdown/SourceImage.js +52 -0
  115. package/lib/client/markdown/SourceImage.js.map +1 -0
  116. package/lib/client/markdown/blocks.js +150 -115
  117. package/lib/client/markdown/blocks.js.map +1 -1
  118. package/lib/client/markdown/render.js +23 -5
  119. package/lib/client/markdown/render.js.map +1 -1
  120. package/lib/client/markdown/source-chip.js +2 -1
  121. package/lib/client/markdown/source-chip.js.map +1 -1
  122. package/lib/client/oidc-browser.js +39 -0
  123. package/lib/client/oidc-browser.js.map +1 -0
  124. package/lib/client/panels/PanelHost.js +23 -1
  125. package/lib/client/panels/PanelHost.js.map +1 -1
  126. package/lib/client/settings/sections/interface.js +2 -1
  127. package/lib/client/settings/sections/interface.js.map +1 -1
  128. package/lib/client/settings/sections/sources.js +1 -1
  129. package/lib/client/settings/sections/sources.js.map +1 -1
  130. package/lib/client/settings/sections/status.js +3 -1
  131. package/lib/client/settings/sections/status.js.map +1 -1
  132. package/lib/client/settings/styles.js +18 -28
  133. package/lib/client/settings/styles.js.map +1 -1
  134. package/lib/client/source-filters-styles.js +11 -0
  135. package/lib/client/source-filters-styles.js.map +1 -0
  136. package/lib/client/styles.js +56 -5
  137. package/lib/client/styles.js.map +1 -1
  138. package/lib/client/types.js.map +1 -1
  139. package/lib/client/use-right-rail.js +1 -1
  140. package/lib/client/use-right-rail.js.map +1 -1
  141. package/lib/client/user-settings/IntegrationTokensPage.js +30 -6
  142. package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
  143. package/lib/client.js +540 -71128
  144. package/lib/client.js.map +1 -1
  145. package/lib/config-resolvers/accounts.js +5 -4
  146. package/lib/config-resolvers/accounts.js.map +1 -1
  147. package/lib/config-resolvers/defaults.js +20 -3
  148. package/lib/config-resolvers/defaults.js.map +1 -1
  149. package/lib/config-resolvers/oidc.js +53 -0
  150. package/lib/config-resolvers/oidc.js.map +1 -0
  151. package/lib/config-resolvers/sources.js +2 -0
  152. package/lib/config-resolvers/sources.js.map +1 -1
  153. package/lib/config.js +74 -0
  154. package/lib/config.js.map +1 -1
  155. package/lib/forms/attachments.js +214 -0
  156. package/lib/forms/attachments.js.map +1 -0
  157. package/lib/forms/errors.js +37 -0
  158. package/lib/forms/errors.js.map +1 -0
  159. package/lib/forms/fingerprint.js +21 -0
  160. package/lib/forms/fingerprint.js.map +1 -0
  161. package/lib/forms/gate.js +125 -0
  162. package/lib/forms/gate.js.map +1 -0
  163. package/lib/forms/schema.js +182 -0
  164. package/lib/forms/schema.js.map +1 -0
  165. package/lib/forms/service.js +220 -0
  166. package/lib/forms/service.js.map +1 -0
  167. package/lib/forms/store.js +194 -0
  168. package/lib/forms/store.js.map +1 -0
  169. package/lib/forms/types.js +2 -0
  170. package/lib/forms/types.js.map +1 -0
  171. package/lib/forms/validation.js +113 -0
  172. package/lib/forms/validation.js.map +1 -0
  173. package/lib/index.js +276 -5
  174. package/lib/index.js.map +1 -1
  175. package/lib/integration/host-runner.js +1 -0
  176. package/lib/integration/host-runner.js.map +1 -1
  177. package/lib/integration/question-policy.js +126 -0
  178. package/lib/integration/question-policy.js.map +1 -0
  179. package/lib/integration/service.js +2 -0
  180. package/lib/integration/service.js.map +1 -1
  181. package/lib/llm-identity.js +27 -0
  182. package/lib/llm-identity.js.map +1 -0
  183. package/lib/markdown-frontmatter.js +47 -0
  184. package/lib/markdown-frontmatter.js.map +1 -0
  185. package/lib/markdown-images.js +33 -0
  186. package/lib/markdown-images.js.map +1 -0
  187. package/lib/oidc/http.js +30 -0
  188. package/lib/oidc/http.js.map +1 -0
  189. package/lib/oidc/service.js +250 -0
  190. package/lib/oidc/service.js.map +1 -0
  191. package/lib/prompt-notes.js +1 -1
  192. package/lib/prompt-notes.js.map +1 -1
  193. package/lib/provenance/collector.js +2 -0
  194. package/lib/provenance/collector.js.map +1 -1
  195. package/lib/provenance/connectors.js +25 -19
  196. package/lib/provenance/connectors.js.map +1 -1
  197. package/lib/provenance/dedupe.js +17 -0
  198. package/lib/provenance/dedupe.js.map +1 -1
  199. package/lib/provenance/document-preview.js +12 -2
  200. package/lib/provenance/document-preview.js.map +1 -1
  201. package/lib/provenance/extractors.js +23 -5
  202. package/lib/provenance/extractors.js.map +1 -1
  203. package/lib/provenance/file-preview.js +9 -2
  204. package/lib/provenance/file-preview.js.map +1 -1
  205. package/lib/provenance/integration-extractor.js +5 -6
  206. package/lib/provenance/integration-extractor.js.map +1 -1
  207. package/lib/provenance/snapshot-store.js +2 -0
  208. package/lib/provenance/snapshot-store.js.map +1 -1
  209. package/lib/provenance/source-content.js +103 -0
  210. package/lib/provenance/source-content.js.map +1 -0
  211. package/lib/provenance/source-image.js +57 -0
  212. package/lib/provenance/source-image.js.map +1 -0
  213. package/lib/provenance/spreadsheet-preview.js +52 -0
  214. package/lib/provenance/spreadsheet-preview.js.map +1 -0
  215. package/lib/qa-tools/activation-manager.js +24 -2
  216. package/lib/qa-tools/activation-manager.js.map +1 -1
  217. package/lib/qa-tools/catalog.js +11 -1
  218. package/lib/qa-tools/catalog.js.map +1 -1
  219. package/lib/qa-tools/index.js +27 -0
  220. package/lib/qa-tools/index.js.map +1 -1
  221. package/lib/qa-tools/request-user-form.js +121 -0
  222. package/lib/qa-tools/request-user-form.js.map +1 -0
  223. package/lib/questions.js +6 -1
  224. package/lib/questions.js.map +1 -1
  225. package/lib/resolve-config.js +2 -0
  226. package/lib/resolve-config.js.map +1 -1
  227. package/lib/secure-session.js +14 -8
  228. package/lib/secure-session.js.map +1 -1
  229. package/lib/shared/documents.js +12 -0
  230. package/lib/shared/documents.js.map +1 -1
  231. package/lib/typert.host.js +5136 -1341
  232. package/lib/typert.remote-client.d.ts +141 -7
  233. package/lib/typert.remote-client.js +5896 -2255
  234. package/lib/types/account-remotes.d.ts +3 -0
  235. package/lib/types/accounts/database.d.ts +13 -0
  236. package/lib/types/accounts/file.d.ts +2 -0
  237. package/lib/types/accounts/store.d.ts +23 -1
  238. package/lib/types/accounts/token.d.ts +3 -1
  239. package/lib/types/admin/metrics.d.ts +5 -1
  240. package/lib/types/admin/read-budget.d.ts +8 -0
  241. package/lib/types/admin/service.d.ts +17 -0
  242. package/lib/types/admin/session-log.d.ts +30 -1
  243. package/lib/types/answer-review.js +2 -0
  244. package/lib/types/answer-review.js.map +1 -0
  245. package/lib/types/chat-sharing/store.d.ts +1 -0
  246. package/lib/types/chat-sharing/transport.d.ts +1 -0
  247. package/lib/types/chat-sharing/uploads.d.ts +2 -1
  248. package/lib/types/client/QaAccountsController.d.ts +5 -0
  249. package/lib/types/client/QaRouteController.d.ts +1 -0
  250. package/lib/types/client/QaSessionController.d.ts +12 -3
  251. package/lib/types/client/QaSurface.d.ts +2 -0
  252. package/lib/types/client/admin/CapabilityPicker.d.ts +14 -0
  253. package/lib/types/client/admin/CoverageNotice.d.ts +6 -0
  254. package/lib/types/client/admin/RoleEditor.d.ts +15 -0
  255. package/lib/types/client/admin/capability-selection.d.ts +27 -0
  256. package/lib/types/client/admin/shared.d.ts +39 -1
  257. package/lib/types/client/answer-review.d.ts +16 -0
  258. package/lib/types/client/components/QaAnswerReviewStatus.d.ts +8 -0
  259. package/lib/types/client/components/QaAuthGate.d.ts +2 -0
  260. package/lib/types/client/components/QaChatActions.d.ts +7 -0
  261. package/lib/types/client/components/QaChatSharing.d.ts +4 -2
  262. package/lib/types/client/components/QaFormItem.d.ts +20 -0
  263. package/lib/types/client/components/QaInputForm.d.ts +18 -0
  264. package/lib/types/client/components/QaMarkdownPreview.d.ts +13 -0
  265. package/lib/types/client/components/QaModal.d.ts +9 -0
  266. package/lib/types/client/components/QaRightRail.d.ts +3 -2
  267. package/lib/types/client/components/QaRightRailResize.d.ts +9 -0
  268. package/lib/types/client/components/QaSidebar.d.ts +2 -0
  269. package/lib/types/client/components/QaSourceFilters.d.ts +12 -0
  270. package/lib/types/client/components/QaSpreadsheetPreview.d.ts +8 -0
  271. package/lib/types/client/components/QaWelcomeNotice.d.ts +1 -1
  272. package/lib/types/client/components/QaZoomImage.d.ts +38 -0
  273. package/lib/types/client/forms-styles.d.ts +2 -0
  274. package/lib/types/client/forms.d.ts +23 -0
  275. package/lib/types/client/markdown/SourceImage.d.ts +7 -0
  276. package/lib/types/client/markdown/blocks.d.ts +8 -1
  277. package/lib/types/client/markdown/render.d.ts +5 -1
  278. package/lib/types/client/markdown/source-chip.d.ts +1 -0
  279. package/lib/types/client/oidc-browser.d.ts +12 -0
  280. package/lib/types/client/settings/styles.d.ts +2 -5
  281. package/lib/types/client/source-filters-styles.d.ts +2 -0
  282. package/lib/types/client/types.d.ts +18 -6
  283. package/lib/types/config-resolvers/oidc.d.ts +3 -0
  284. package/lib/types/forms/attachments.d.ts +48 -0
  285. package/lib/types/forms/errors.d.ts +11 -0
  286. package/lib/types/forms/fingerprint.d.ts +9 -0
  287. package/lib/types/forms/gate.d.ts +33 -0
  288. package/lib/types/forms/schema.d.ts +72 -0
  289. package/lib/types/forms/service.d.ts +15 -0
  290. package/lib/types/forms/store.d.ts +25 -0
  291. package/lib/types/forms/types.d.ts +215 -0
  292. package/lib/types/forms/validation.d.ts +20 -0
  293. package/lib/types/index.d.ts +36 -3
  294. package/lib/types/integration/contract.d.ts +1 -0
  295. package/lib/types/integration/question-policy.d.ts +20 -0
  296. package/lib/types/integration/service.d.ts +1 -0
  297. package/lib/types/llm-identity.d.ts +20 -0
  298. package/lib/types/markdown-frontmatter.d.ts +10 -0
  299. package/lib/types/markdown-images.d.ts +3 -0
  300. package/lib/types/oidc/http.d.ts +5 -0
  301. package/lib/types/oidc/service.d.ts +30 -0
  302. package/lib/types/oidc.js +2 -0
  303. package/lib/types/oidc.js.map +1 -0
  304. package/lib/types/prompt-notes.d.ts +1 -1
  305. package/lib/types/provenance/document-preview.d.ts +3 -2
  306. package/lib/types/provenance/file-preview.d.ts +2 -1
  307. package/lib/types/provenance/source-content.d.ts +19 -0
  308. package/lib/types/provenance/source-image.d.ts +4 -0
  309. package/lib/types/provenance/spreadsheet-preview.d.ts +5 -0
  310. package/lib/types/provenance/types.d.ts +3 -0
  311. package/lib/types/qa-tools/activation-manager.d.ts +5 -0
  312. package/lib/types/qa-tools/catalog.d.ts +4 -1
  313. package/lib/types/qa-tools/index.d.ts +5 -1
  314. package/lib/types/qa-tools/request-user-form.d.ts +5 -0
  315. package/lib/types/questions.d.ts +2 -1
  316. package/lib/types/secure-session.d.ts +1 -0
  317. package/lib/types/shared/documents.d.ts +2 -0
  318. package/lib/types/types/accounts.d.ts +7 -1
  319. package/lib/types/types/admin.d.ts +6 -0
  320. package/lib/types/types/answer-review.d.ts +11 -0
  321. package/lib/types/types/config.d.ts +9 -0
  322. package/lib/types/types/oidc.d.ts +36 -0
  323. package/lib/types/types/session.d.ts +18 -3
  324. package/lib/types/types.d.ts +3 -0
  325. package/package.json +58 -56
@@ -71,6 +71,7 @@ export declare class QaPolicyAdmission {
71
71
  * one set answers for the whole chat.
72
72
  */
73
73
  private readonly attested;
74
+ private readonly questionWarnings;
74
75
  private readonly workspaceAccess;
75
76
  /**
76
77
  * Removers of the document input roots granted per session, so a grant lives
@@ -17,4 +17,6 @@ export declare const QA_PDF_MEDIA_TYPE = "application/pdf";
17
17
  * previewable (Markdown as text, PDF through the browser's own viewer).
18
18
  */
19
19
  export declare function isConvertibleDocument(mediaType: string): boolean;
20
+ export declare function isSpreadsheetDocument(mediaType: string): boolean;
21
+ export declare function isPreviewableDocument(mediaType: string): boolean;
20
22
  //# sourceMappingURL=documents.d.ts.map
@@ -1,6 +1,8 @@
1
1
  import type { QaAccountRole } from "./policy.js";
2
2
  /** The account fields projected to browsers; never includes credentials. */
3
3
  export interface QaAccountUserPublic {
4
+ /** Corporate passwords are managed outside QA. Absent on legacy/local accounts. */
5
+ readonly authMethod?: "oidc";
4
6
  readonly id: string;
5
7
  readonly email: string;
6
8
  readonly displayName: string;
@@ -134,8 +136,10 @@ export type QaServiceTokenScope = "ask" | "sessions:read";
134
136
  export interface QaServiceTokenCreateInput {
135
137
  /** A note the operator's list shows; empty becomes a generic label. */
136
138
  readonly label?: string;
137
- /** Requested scopes; unknown ones are dropped, empty falls back to `ask`. */
139
+ /** Requested scopes; unknown ones are dropped, explicit empty grants none. */
138
140
  readonly scopes?: readonly string[];
141
+ /** Whether API turns may ask clarifying questions; omitted preserves existing behavior. */
142
+ readonly allowClarifications?: boolean;
139
143
  /** How long the token lives, in days; bounded server-side. */
140
144
  readonly ttlDays?: number;
141
145
  }
@@ -148,6 +152,8 @@ export interface QaServiceTokenSummary {
148
152
  readonly id: string;
149
153
  readonly label: string;
150
154
  readonly scopes: readonly QaServiceTokenScope[];
155
+ /** Older Hosts omit this field and keep clarifications enabled. */
156
+ readonly allowClarifications?: boolean;
151
157
  readonly createdAt: string;
152
158
  readonly expiresAt: string;
153
159
  readonly lastUsedAt: string | null;
@@ -196,6 +196,12 @@ export interface QaQualityTrendPoint {
196
196
  readonly negative: number;
197
197
  }
198
198
  export interface QaQualityMetrics {
199
+ /** Counts derived from journals are incomplete until every journal was read. */
200
+ readonly coverage?: {
201
+ readonly complete: boolean;
202
+ readonly readConversations: number;
203
+ readonly totalConversations: number;
204
+ };
199
205
  readonly conversations: number;
200
206
  readonly activeUsers: number;
201
207
  readonly assistantMessages: number;
@@ -0,0 +1,11 @@
1
+ /** Host-recorded review of one immutable assistant message. */
2
+ export interface QaAnswerReview {
3
+ readonly version: 1;
4
+ readonly candidateSeq: number;
5
+ readonly candidateHash: string;
6
+ readonly requestSeq: number | null;
7
+ readonly round: number;
8
+ readonly status: "reviewing" | "recovering" | "pass" | "revise" | "failure" | "cancelled" | "waived";
9
+ readonly at: number;
10
+ }
11
+ //# sourceMappingURL=answer-review.d.ts.map
@@ -38,6 +38,8 @@ export interface QaSourcesConfig {
38
38
  readonly filePreview?: {
39
39
  readonly enabled?: boolean;
40
40
  readonly markdownRenderedByDefault?: boolean;
41
+ /** Render a leading YAML mapping as a document metadata card. */
42
+ readonly renderFrontmatter?: boolean;
41
43
  readonly allowRawToggle?: boolean;
42
44
  readonly maxBytes?: number;
43
45
  readonly maxMarkdownRenderBytes?: number;
@@ -92,6 +94,7 @@ export interface QaNotesConfig {
92
94
  };
93
95
  }
94
96
  export interface QaSurfaceConfig {
97
+ readonly forms?: Partial<import("../forms/types.js").QaFormPolicy>;
95
98
  readonly enabled?: boolean;
96
99
  readonly route?: {
97
100
  readonly path?: string;
@@ -235,6 +238,8 @@ export interface QaSurfaceConfig {
235
238
  readonly frameAncestors?: string | null;
236
239
  };
237
240
  readonly accounts?: {
241
+ readonly localLogin?: boolean;
242
+ readonly oidc?: import("./oidc.js").QaOidcConfig;
238
243
  /** Opt-in; the QA gate stays off until the deployment turns this on. */
239
244
  readonly enabled?: boolean;
240
245
  readonly allowRegistration?: boolean;
@@ -370,6 +375,7 @@ export interface QaAttachmentsConfig {
370
375
  readonly extensions?: readonly string[];
371
376
  }
372
377
  export interface ResolvedQaSurfaceConfig {
378
+ readonly forms: Readonly<import("../forms/types.js").QaFormPolicy>;
373
379
  readonly enabled: boolean;
374
380
  readonly route: {
375
381
  readonly path: string;
@@ -439,6 +445,8 @@ export interface ResolvedQaSurfaceConfig {
439
445
  readonly frameAncestors: string | null;
440
446
  };
441
447
  readonly accounts: {
448
+ readonly localLogin: boolean;
449
+ readonly oidc: import("./oidc.js").ResolvedQaOidcConfig;
442
450
  readonly enabled: boolean;
443
451
  readonly allowRegistration: boolean;
444
452
  readonly sessionTtlDays: number;
@@ -534,6 +542,7 @@ export interface ResolvedQaSurfaceConfig {
534
542
  readonly filePreview: {
535
543
  readonly enabled: boolean;
536
544
  readonly markdownRenderedByDefault: boolean;
545
+ readonly renderFrontmatter: boolean;
537
546
  readonly allowRawToggle: boolean;
538
547
  readonly maxBytes: number;
539
548
  readonly maxMarkdownRenderBytes: number;
@@ -0,0 +1,36 @@
1
+ /** Server OIDC configuration. Secrets are referenced by environment name only. */
2
+ export interface QaOidcConfig {
3
+ readonly enabled?: boolean;
4
+ readonly issuer?: string;
5
+ readonly clientId?: string;
6
+ readonly clientSecretEnv?: string;
7
+ /** Exact public HTTPS callback URL, including any reverse proxy prefix. */
8
+ readonly redirectUri?: string;
9
+ readonly buttonLabel?: string;
10
+ readonly autoProvision?: boolean;
11
+ /** Client roles included in the signed ID token's resource_access claim. */
12
+ readonly requiredRole?: string;
13
+ readonly adminRole?: string;
14
+ readonly reviewerRole?: string;
15
+ /** Upper bound on QA access before another OIDC authentication. */
16
+ readonly sessionTtlSeconds?: number;
17
+ }
18
+ export interface ResolvedQaOidcConfig {
19
+ readonly enabled: boolean;
20
+ readonly issuer: string;
21
+ readonly clientId: string;
22
+ readonly clientSecretEnv: string;
23
+ readonly redirectUri: string;
24
+ readonly buttonLabel: string;
25
+ readonly autoProvision: boolean;
26
+ readonly requiredRole: string;
27
+ readonly adminRole: string;
28
+ readonly reviewerRole: string;
29
+ readonly sessionTtlSeconds: number;
30
+ }
31
+ /** The browser retains completionKey in sessionStorage before leaving QA. */
32
+ export interface QaOidcStart {
33
+ readonly authorizationUrl: string;
34
+ readonly completionKey: string;
35
+ }
36
+ //# sourceMappingURL=oidc.d.ts.map
@@ -9,18 +9,32 @@ export interface QaSourceFilePreview {
9
9
  readonly markdown: boolean;
10
10
  readonly renderableMarkdown: boolean;
11
11
  readonly document?: QaDocumentPreview;
12
+ readonly frontmatter?: import("../markdown-frontmatter.js").MarkdownFrontmatter;
12
13
  }
13
14
  /**
14
- * A file the panel renders by conversion rather than by bytes: the document
15
- * pipeline turned a Word file into PDF, and the browser shows that PDF.
15
+ * A PDF payload, including Word documents rendered by the document pipeline.
16
16
  */
17
- export interface QaDocumentPreview {
17
+ export interface QaPdfPreview {
18
18
  readonly kind: "pdf";
19
19
  readonly base64: string;
20
20
  readonly mime: "application/pdf";
21
21
  readonly name: string;
22
22
  readonly bytes: number;
23
23
  }
24
+ /** A bounded cell window; the complete workbook stays on the Host. */
25
+ export interface QaSpreadsheetPreview {
26
+ readonly kind: "spreadsheet";
27
+ readonly name: string;
28
+ readonly bytes: number;
29
+ readonly inventory: import("@yadsh/dsh-documents").SpreadsheetInspectResult;
30
+ readonly page: import("@yadsh/dsh-documents").SpreadsheetReadResult;
31
+ }
32
+ export interface QaSpreadsheetPreviewSelection {
33
+ readonly sheet?: string;
34
+ readonly startRow?: number;
35
+ readonly startColumn?: number;
36
+ }
37
+ export type QaDocumentPreview = QaPdfPreview | QaSpreadsheetPreview;
24
38
  /** One directory entry of a chat's own workspace, as the files panel browses it. */
25
39
  export interface QaWorkspaceEntry {
26
40
  readonly name: string;
@@ -111,6 +125,7 @@ export type QaMessage = QaUserMessage | {
111
125
  * while the browser's own message id does not.
112
126
  */
113
127
  readonly seq?: number;
128
+ readonly review?: import("./answer-review.js").QaAnswerReview;
114
129
  /** Final text of a completed turn with a durable fork boundary. */
115
130
  readonly forkable?: boolean;
116
131
  /** Host turn this answer belongs to; groups regenerations into variants. */
@@ -1,13 +1,16 @@
1
1
  export type * from "./types/policy.js";
2
+ export type * from "./forms/types.js";
2
3
  export type * from "./types/capability.js";
3
4
  export type * from "./types/access.js";
4
5
  export type * from "./types/accounts.js";
6
+ export type * from "./types/oidc.js";
5
7
  export type * from "./types/skills.js";
6
8
  export type * from "./types/expert-memory.js";
7
9
  export type * from "./types/config.js";
8
10
  export type * from "./types/slash.js";
9
11
  export type * from "./types/documents.js";
10
12
  export type * from "./types/session.js";
13
+ export type * from "./types/answer-review.js";
11
14
  export type * from "./types/quality.js";
12
15
  export type * from "./types/admin.js";
13
16
  export type { QaSourceEvidence, QaSourceKind, QaSourceLocation, QaSourceOrigin, QaSourceReference, QaTurnSources, } from "./provenance/types.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yadsh/dsh-qa-surface",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "A focused end-user QA surface backed by native DeepSeek Harness sessions",
5
5
  "repository": {
6
6
  "type": "git",
@@ -104,73 +104,75 @@
104
104
  },
105
105
  "peerDependencies": {
106
106
  "@deepseek-ai/cordis": "^4.0.4",
107
- "@deepseek-ai/dsh-agent": ">=0.1.7-rc.2 <0.2.0",
108
- "@deepseek-ai/dsh-agent-preset-registry": ">=0.1.7-rc.2 <0.2.0",
109
- "@deepseek-ai/dsh-api-gateway": ">=0.1.7-rc.2 <0.2.0",
110
- "@deepseek-ai/dsh-api-session-controller": ">=0.1.7-rc.2 <0.2.0",
111
- "@deepseek-ai/dsh-api-workspace-controller": ">=0.1.7-rc.2 <0.2.0",
112
- "@deepseek-ai/dsh-client-connection": ">=0.1.7-rc.2 <0.2.0",
113
- "@deepseek-ai/dsh-client-ui-chat": ">=0.1.7-rc.2 <0.2.0",
114
- "@deepseek-ai/dsh-client-ui-conversation": ">=0.1.7-rc.2 <0.2.0",
115
- "@deepseek-ai/dsh-client-ui-layout": ">=0.1.7-rc.2 <0.2.0",
116
- "@deepseek-ai/dsh-client-ui-plugin-manager": ">=0.1.7-rc.2 <0.2.0",
117
- "@deepseek-ai/dsh-client-ui-renderer": ">=0.1.7-rc.2 <0.2.0",
118
- "@deepseek-ai/dsh-client-ui-settings": ">=0.1.7-rc.2 <0.2.0",
119
- "@deepseek-ai/dsh-client-ui-slots": ">=0.1.7-rc.2 <0.2.0",
120
- "@deepseek-ai/dsh-client-ui-theme": ">=0.1.7-rc.2 <0.2.0",
121
- "@deepseek-ai/dsh-host-webserver": ">=0.1.7-rc.2 <0.2.0",
122
- "@deepseek-ai/dsh-llm": ">=0.1.7-rc.2 <0.2.0",
123
- "@deepseek-ai/dsh-permission-presets": ">=0.1.7-rc.2 <0.2.0",
124
- "@deepseek-ai/dsh-session": ">=0.1.7-rc.2 <0.2.0",
125
- "@deepseek-ai/dsh-scope": ">=0.1.7-rc.2 <0.2.0",
126
- "@deepseek-ai/dsh-settings": ">=0.1.7-rc.2 <0.2.0",
127
- "@deepseek-ai/dsh-skill": ">=0.1.7-rc.2 <0.2.0",
128
- "@deepseek-ai/dsh-system-prompt": ">=0.1.7-rc.2 <0.2.0",
129
- "@deepseek-ai/dsh-tools": ">=0.1.7-rc.2 <0.2.0",
130
- "@deepseek-ai/dsh-typert-protocol": ">=0.1.7-rc.2 <0.2.0",
131
- "@deepseek-ai/dsh-workspace": ">=0.1.7-rc.2 <0.2.0",
107
+ "@deepseek-ai/dsh-agent": ">=0.1.7-rc.2 <0.3.0-0",
108
+ "@deepseek-ai/dsh-agent-preset-registry": ">=0.1.7-rc.2 <0.3.0-0",
109
+ "@deepseek-ai/dsh-api-gateway": ">=0.1.7-rc.2 <0.3.0-0",
110
+ "@deepseek-ai/dsh-api-session-controller": ">=0.1.7-rc.2 <0.3.0-0",
111
+ "@deepseek-ai/dsh-api-workspace-controller": ">=0.1.7-rc.2 <0.3.0-0",
112
+ "@deepseek-ai/dsh-client-connection": ">=0.1.7-rc.2 <0.3.0-0",
113
+ "@deepseek-ai/dsh-client-ui-chat": ">=0.1.7-rc.2 <0.3.0-0",
114
+ "@deepseek-ai/dsh-client-ui-conversation": ">=0.1.7-rc.2 <0.3.0-0",
115
+ "@deepseek-ai/dsh-client-ui-layout": ">=0.1.7-rc.2 <0.3.0-0",
116
+ "@deepseek-ai/dsh-client-ui-plugin-manager": ">=0.1.7-rc.2 <0.3.0-0",
117
+ "@deepseek-ai/dsh-client-ui-renderer": ">=0.1.7-rc.2 <0.3.0-0",
118
+ "@deepseek-ai/dsh-client-ui-settings": ">=0.1.7-rc.2 <0.3.0-0",
119
+ "@deepseek-ai/dsh-client-ui-slots": ">=0.1.7-rc.2 <0.3.0-0",
120
+ "@deepseek-ai/dsh-client-ui-theme": ">=0.1.7-rc.2 <0.3.0-0",
121
+ "@deepseek-ai/dsh-host-webserver": ">=0.1.7-rc.2 <0.3.0-0",
122
+ "@deepseek-ai/dsh-llm": ">=0.1.7-rc.2 <0.3.0-0",
123
+ "@deepseek-ai/dsh-permission-presets": ">=0.1.7-rc.2 <0.3.0-0",
124
+ "@deepseek-ai/dsh-scope": ">=0.1.7-rc.2 <0.3.0-0",
125
+ "@deepseek-ai/dsh-session": ">=0.1.7-rc.2 <0.3.0-0",
126
+ "@deepseek-ai/dsh-settings": ">=0.1.7-rc.2 <0.3.0-0",
127
+ "@deepseek-ai/dsh-skill": ">=0.1.7-rc.2 <0.3.0-0",
128
+ "@deepseek-ai/dsh-system-prompt": ">=0.1.7-rc.2 <0.3.0-0",
129
+ "@deepseek-ai/dsh-tools": ">=0.1.7-rc.2 <0.3.0-0",
130
+ "@deepseek-ai/dsh-typert-protocol": ">=0.1.7-rc.2 <0.3.0-0",
131
+ "@deepseek-ai/dsh-workspace": ">=0.1.7-rc.2 <0.3.0-0",
132
132
  "@deepseek-ai/schemastery": "^3.18.4",
133
133
  "react": "^18.2.0",
134
134
  "react-dom": "^18.2.0"
135
135
  },
136
136
  "dependencies": {
137
+ "openid-client": "6.8.8",
137
138
  "yaml": "^2.9.0",
138
139
  "zod": "^4.4.3",
139
140
  "@yadsh/dsh-audit-core": "^0.1.2",
140
- "@yadsh/dsh-plugin-kit": "^0.5.1",
141
- "@yadsh/dsh-documents": "^0.7.0",
142
141
  "@yadsh/dsh-audit-ui": "^0.1.3",
142
+ "@yadsh/dsh-documents": "^0.8.1",
143
+ "@yadsh/dsh-plugin-kit": "^0.6.0",
143
144
  "@yadsh/dsh-plugin-log": "^0.4.2"
144
145
  },
145
146
  "devDependencies": {
146
- "@deepseek-ai/cordis": "4.0.4",
147
- "@deepseek-ai/dsh-agent": "0.1.7-rc.2",
148
- "@deepseek-ai/dsh-agent-preset-registry": "0.1.7-rc.2",
149
- "@deepseek-ai/dsh-api-gateway": "0.1.7-rc.2",
150
- "@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.2",
151
- "@deepseek-ai/dsh-api-workspace-controller": "0.1.7-rc.2",
152
- "@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
153
- "@deepseek-ai/dsh-client-ui-chat": "0.1.7-rc.2",
154
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.7-rc.2",
155
- "@deepseek-ai/dsh-client-ui-layout": "0.1.7-rc.2",
156
- "@deepseek-ai/dsh-client-ui-plugin-manager": "0.1.7-rc.2",
157
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
158
- "@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.2",
159
- "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
160
- "@deepseek-ai/dsh-client-ui-theme": "0.1.7-rc.2",
161
- "@deepseek-ai/dsh-host-webserver": "0.1.7-rc.2",
162
- "@deepseek-ai/dsh-llm": "0.1.7-rc.2",
163
- "@deepseek-ai/dsh-permission-presets": "0.1.7-rc.2",
164
- "@deepseek-ai/dsh-scope": "0.1.7-rc.2",
165
- "@deepseek-ai/dsh-session": "0.1.7-rc.2",
166
- "@deepseek-ai/dsh-settings": "0.1.7-rc.2",
167
- "@deepseek-ai/dsh-skill": "0.1.7-rc.2",
168
- "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
169
- "@deepseek-ai/dsh-tools": "0.1.7-rc.2",
170
- "@deepseek-ai/dsh-typert-generator": "0.1.7-rc.2",
171
- "@deepseek-ai/dsh-typert-protocol": "0.1.7-rc.2",
172
- "@deepseek-ai/dsh-workspace": "0.1.7-rc.2",
173
- "@deepseek-ai/schemastery": "3.18.4",
147
+ "@deepseek-ai/cordis": "4.0.5",
148
+ "@deepseek-ai/dsh-agent": "0.2.1-rc.3",
149
+ "@deepseek-ai/dsh-agent-preset-registry": "0.2.1-rc.3",
150
+ "@deepseek-ai/dsh-api-gateway": "0.2.1-rc.3",
151
+ "@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.3",
152
+ "@deepseek-ai/dsh-api-workspace-controller": "0.2.1-rc.3",
153
+ "@deepseek-ai/dsh-client-connection": "0.2.1-rc.3",
154
+ "@deepseek-ai/dsh-client-ui-chat": "0.2.1-rc.3",
155
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.3",
156
+ "@deepseek-ai/dsh-client-ui-layout": "0.2.1-rc.3",
157
+ "@deepseek-ai/dsh-client-ui-plugin-manager": "0.2.1-rc.3",
158
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.3",
159
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.1-rc.3",
160
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.3",
161
+ "@deepseek-ai/dsh-client-ui-theme": "0.2.1-rc.3",
162
+ "@deepseek-ai/dsh-host-webserver": "0.2.1-rc.3",
163
+ "@deepseek-ai/dsh-llm": "0.2.1-rc.3",
164
+ "@deepseek-ai/dsh-permission-presets": "0.2.1-rc.3",
165
+ "@deepseek-ai/dsh-scope": "0.2.1-rc.3",
166
+ "@deepseek-ai/dsh-session": "0.2.1-rc.3",
167
+ "@deepseek-ai/dsh-settings": "0.2.1-rc.3",
168
+ "@deepseek-ai/dsh-skill": "0.2.1-rc.3",
169
+ "@deepseek-ai/dsh-system-prompt": "0.2.1-rc.3",
170
+ "@deepseek-ai/dsh-tools": "0.2.1-rc.3",
171
+ "@deepseek-ai/dsh-typert-generator": "0.2.1-rc.3",
172
+ "@deepseek-ai/dsh-typert-protocol": "0.2.1-rc.3",
173
+ "@deepseek-ai/dsh-util-values": "0.2.1-rc.3",
174
+ "@deepseek-ai/dsh-workspace": "0.2.1-rc.3",
175
+ "@deepseek-ai/schemastery": "3.18.5",
174
176
  "@testing-library/react": "^16.3.0",
175
177
  "@types/node": "^26.4.0",
176
178
  "@types/react": "18.3.28",