@yadsh/dsh-qa-surface 0.1.1 → 0.3.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 (192) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/README.md +239 -16
  3. package/SPEC-dsh-qa-surface.md +600 -96
  4. package/capability-policy.json +5 -0
  5. package/compatibility.json +18 -4
  6. package/cordis.patch.yml +11 -0
  7. package/docs/ARCHITECTURE.md +50 -8
  8. package/docs/COMPATIBILITY.md +5 -4
  9. package/docs/CONFIGURATION.md +184 -3
  10. package/docs/SOURCES-MIGRATION.md +28 -0
  11. package/docs/SOURCES-PROVENANCE-AUDIT.md +88 -0
  12. package/docs/SPEC-dsh-qa-surface-accounts.md +219 -0
  13. package/docs/SPEC-dsh-qa-surface-sources-provenance.md +1692 -0
  14. package/lib/accounts/index.js +2 -0
  15. package/lib/accounts/index.js.map +1 -0
  16. package/lib/accounts/store.js +478 -0
  17. package/lib/accounts/store.js.map +1 -0
  18. package/lib/attestation.js +10 -0
  19. package/lib/attestation.js.map +1 -0
  20. package/lib/cli.js +143 -0
  21. package/lib/cli.js.map +1 -0
  22. package/lib/client/QaAccountsController.js +329 -0
  23. package/lib/client/QaAccountsController.js.map +1 -0
  24. package/lib/client/QaConfigController.js +111 -4
  25. package/lib/client/QaConfigController.js.map +1 -1
  26. package/lib/client/QaSessionController.js +621 -163
  27. package/lib/client/QaSessionController.js.map +1 -1
  28. package/lib/client/QaSurface.js +303 -24
  29. package/lib/client/QaSurface.js.map +1 -1
  30. package/lib/client/QaTranscriptAdapter.js +324 -49
  31. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  32. package/lib/client/attestation.js +66 -0
  33. package/lib/client/attestation.js.map +1 -0
  34. package/lib/client/chat-index.js +86 -0
  35. package/lib/client/chat-index.js.map +1 -0
  36. package/lib/client/components/Markdown.js +124 -13
  37. package/lib/client/components/Markdown.js.map +1 -1
  38. package/lib/client/components/QaAgentsDrawer.js +40 -0
  39. package/lib/client/components/QaAgentsDrawer.js.map +1 -0
  40. package/lib/client/components/QaAuthGate.js +40 -0
  41. package/lib/client/components/QaAuthGate.js.map +1 -0
  42. package/lib/client/components/QaChangelog.js +112 -0
  43. package/lib/client/components/QaChangelog.js.map +1 -0
  44. package/lib/client/components/QaComposer.js +132 -15
  45. package/lib/client/components/QaComposer.js.map +1 -1
  46. package/lib/client/components/QaMessage.js +214 -10
  47. package/lib/client/components/QaMessage.js.map +1 -1
  48. package/lib/client/components/QaSidebar.js +167 -0
  49. package/lib/client/components/QaSidebar.js.map +1 -0
  50. package/lib/client/components/QaSourcesDrawer.js +127 -0
  51. package/lib/client/components/QaSourcesDrawer.js.map +1 -0
  52. package/lib/client/components/QaTurnRail.js +281 -0
  53. package/lib/client/components/QaTurnRail.js.map +1 -0
  54. package/lib/client/components/QaWelcomeNotice.js +125 -0
  55. package/lib/client/components/QaWelcomeNotice.js.map +1 -0
  56. package/lib/client/components/QaWidthHandle.js +142 -0
  57. package/lib/client/components/QaWidthHandle.js.map +1 -0
  58. package/lib/client/components/QaWorkGroup.js +135 -0
  59. package/lib/client/components/QaWorkGroup.js.map +1 -0
  60. package/lib/client/components/VariantSwitcher.js +29 -0
  61. package/lib/client/components/VariantSwitcher.js.map +1 -0
  62. package/lib/client/components/format.js +48 -0
  63. package/lib/client/components/format.js.map +1 -0
  64. package/lib/client/components/source-refs.js +78 -0
  65. package/lib/client/components/source-refs.js.map +1 -0
  66. package/lib/client/create-session.js +51 -0
  67. package/lib/client/create-session.js.map +1 -0
  68. package/lib/client/index.js +166 -35
  69. package/lib/client/index.js.map +1 -1
  70. package/lib/client/project-session-state.js +78 -0
  71. package/lib/client/project-session-state.js.map +1 -0
  72. package/lib/client/session-admission.js +38 -0
  73. package/lib/client/session-admission.js.map +1 -0
  74. package/lib/client/session-assets.js +52 -0
  75. package/lib/client/session-assets.js.map +1 -0
  76. package/lib/client/session-sources.js +61 -0
  77. package/lib/client/session-sources.js.map +1 -0
  78. package/lib/client/settlement.js +24 -0
  79. package/lib/client/settlement.js.map +1 -0
  80. package/lib/client/styles.js +450 -43
  81. package/lib/client/styles.js.map +1 -1
  82. package/lib/client/tool-presentation.js +102 -0
  83. package/lib/client/tool-presentation.js.map +1 -0
  84. package/lib/client/turn-sources.js +98 -0
  85. package/lib/client/turn-sources.js.map +1 -0
  86. package/lib/client/types.js +15 -0
  87. package/lib/client/types.js.map +1 -0
  88. package/lib/client/use-session-ui-state.js +68 -0
  89. package/lib/client/use-session-ui-state.js.map +1 -0
  90. package/lib/client/use-transcript-view.js +44 -0
  91. package/lib/client/use-transcript-view.js.map +1 -0
  92. package/lib/client/wait-for.js +49 -0
  93. package/lib/client/wait-for.js.map +1 -0
  94. package/lib/client.js +12551 -918
  95. package/lib/client.js.map +1 -1
  96. package/lib/config.js +226 -58
  97. package/lib/config.js.map +1 -1
  98. package/lib/entry-redirect.js +44 -0
  99. package/lib/entry-redirect.js.map +1 -0
  100. package/lib/host-route.js +25 -1
  101. package/lib/host-route.js.map +1 -1
  102. package/lib/index.js +354 -72
  103. package/lib/index.js.map +1 -1
  104. package/lib/launch-token.js +42 -0
  105. package/lib/launch-token.js.map +1 -0
  106. package/lib/lockdown-policy.js +20 -0
  107. package/lib/lockdown-policy.js.map +1 -0
  108. package/lib/provenance/collector.js +40 -0
  109. package/lib/provenance/collector.js.map +1 -0
  110. package/lib/provenance/connectors.js +147 -0
  111. package/lib/provenance/connectors.js.map +1 -0
  112. package/lib/provenance/dedupe.js +89 -0
  113. package/lib/provenance/dedupe.js.map +1 -0
  114. package/lib/provenance/extractors.js +340 -0
  115. package/lib/provenance/extractors.js.map +1 -0
  116. package/lib/provenance/file-preview.js +39 -0
  117. package/lib/provenance/file-preview.js.map +1 -0
  118. package/lib/provenance/host-store.js +387 -0
  119. package/lib/provenance/host-store.js.map +1 -0
  120. package/lib/provenance/index.js +9 -0
  121. package/lib/provenance/index.js.map +1 -0
  122. package/lib/provenance/normalize.js +128 -0
  123. package/lib/provenance/normalize.js.map +1 -0
  124. package/lib/provenance/reported.js +53 -0
  125. package/lib/provenance/reported.js.map +1 -0
  126. package/lib/provenance/types.js +2 -0
  127. package/lib/provenance/types.js.map +1 -0
  128. package/lib/resolve-config.js +283 -10
  129. package/lib/resolve-config.js.map +1 -1
  130. package/lib/secure-session.js +212 -0
  131. package/lib/secure-session.js.map +1 -0
  132. package/lib/typert.host.d.ts +3 -0
  133. package/lib/typert.host.js +784 -0
  134. package/lib/typert.remote-client.d.ts +40 -0
  135. package/lib/typert.remote-client.js +597 -0
  136. package/lib/types/accounts/index.d.ts +2 -0
  137. package/lib/types/accounts/store.d.ts +121 -0
  138. package/lib/types/attestation.d.ts +17 -0
  139. package/lib/types/cli.d.ts +9 -0
  140. package/lib/types/client/QaAccountsController.d.ts +95 -0
  141. package/lib/types/client/QaConfigController.d.ts +35 -3
  142. package/lib/types/client/QaSessionController.d.ts +146 -20
  143. package/lib/types/client/QaSurface.d.ts +11 -5
  144. package/lib/types/client/QaTranscriptAdapter.d.ts +13 -3
  145. package/lib/types/client/attestation.d.ts +25 -0
  146. package/lib/types/client/chat-index.d.ts +28 -0
  147. package/lib/types/client/components/Markdown.d.ts +17 -3
  148. package/lib/types/client/components/QaAgentsDrawer.d.ts +25 -0
  149. package/lib/types/client/components/QaAuthGate.d.ts +15 -0
  150. package/lib/types/client/components/QaChangelog.d.ts +21 -0
  151. package/lib/types/client/components/QaComposer.d.ts +12 -2
  152. package/lib/types/client/components/QaMessage.d.ts +22 -2
  153. package/lib/types/client/components/QaSidebar.d.ts +69 -0
  154. package/lib/types/client/components/QaSourcesDrawer.d.ts +20 -0
  155. package/lib/types/client/components/QaTurnRail.d.ts +59 -0
  156. package/lib/types/client/components/QaWelcomeNotice.d.ts +27 -0
  157. package/lib/types/client/components/QaWidthHandle.d.ts +36 -0
  158. package/lib/types/client/components/QaWorkGroup.d.ts +19 -0
  159. package/lib/types/client/components/VariantSwitcher.d.ts +19 -0
  160. package/lib/types/client/components/format.d.ts +9 -0
  161. package/lib/types/client/components/source-refs.d.ts +16 -0
  162. package/lib/types/client/create-session.d.ts +16 -0
  163. package/lib/types/client/index.d.ts +2 -5
  164. package/lib/types/client/project-session-state.d.ts +30 -0
  165. package/lib/types/client/session-admission.d.ts +23 -0
  166. package/lib/types/client/session-assets.d.ts +20 -0
  167. package/lib/types/client/session-sources.d.ts +28 -0
  168. package/lib/types/client/settlement.d.ts +6 -0
  169. package/lib/types/client/tool-presentation.d.ts +6 -0
  170. package/lib/types/client/turn-sources.d.ts +14 -0
  171. package/lib/types/client/types.d.ts +93 -0
  172. package/lib/types/client/use-session-ui-state.d.ts +35 -0
  173. package/lib/types/client/use-transcript-view.d.ts +20 -0
  174. package/lib/types/client/wait-for.d.ts +11 -0
  175. package/lib/types/entry-redirect.d.ts +20 -0
  176. package/lib/types/host-route.d.ts +14 -1
  177. package/lib/types/index.d.ts +67 -7
  178. package/lib/types/launch-token.d.ts +21 -0
  179. package/lib/types/lockdown-policy.d.ts +18 -0
  180. package/lib/types/provenance/collector.d.ts +26 -0
  181. package/lib/types/provenance/connectors.d.ts +11 -0
  182. package/lib/types/provenance/dedupe.d.ts +6 -0
  183. package/lib/types/provenance/extractors.d.ts +14 -0
  184. package/lib/types/provenance/file-preview.d.ts +10 -0
  185. package/lib/types/provenance/host-store.d.ts +54 -0
  186. package/lib/types/provenance/index.d.ts +10 -0
  187. package/lib/types/provenance/normalize.d.ts +13 -0
  188. package/lib/types/provenance/reported.d.ts +5 -0
  189. package/lib/types/provenance/types.d.ts +78 -0
  190. package/lib/types/secure-session.d.ts +31 -0
  191. package/lib/types/types.d.ts +304 -1
  192. package/package.json +70 -27
@@ -2,15 +2,17 @@ export const DEFAULT_QA_SURFACE_CONFIG = Object.freeze({
2
2
  enabled: true,
3
3
  route: Object.freeze({ path: "/qa", matchChildren: true }),
4
4
  branding: Object.freeze({
5
- title: "Assistant",
5
+ title: "Помощник",
6
6
  subtitle: "",
7
- welcomeMessage: "How can I help?",
8
- placeholder: "Ask a question...",
7
+ welcomeMessage: "Чем могу помочь?",
8
+ placeholder: "Задайте вопрос…",
9
9
  logoUrl: null,
10
+ disclaimer: "Диалоги могут быть видны другим пользователям сервера и используются для улучшения качества ответов.",
10
11
  }),
11
12
  session: Object.freeze({
12
13
  policy: "browser-persistent",
13
- storageKey: "dsh-qa-surface",
14
+ storageKey: "dsh-qa-surface.session",
15
+ cwd: null,
14
16
  workspaceId: null,
15
17
  fixedSessionId: null,
16
18
  agentPreset: null,
@@ -20,20 +22,93 @@ export const DEFAULT_QA_SURFACE_CONFIG = Object.freeze({
20
22
  }),
21
23
  ui: Object.freeze({
22
24
  showHeader: true,
23
- showReset: true,
25
+ showReset: false,
24
26
  showStop: true,
25
27
  showTimestamps: false,
26
28
  showToolActivity: false,
27
29
  showReasoning: false,
28
30
  renderMarkdown: true,
29
31
  maxContentWidth: 900,
32
+ showSessionList: false,
30
33
  }),
31
- suggestedQuestions: Object.freeze([]),
34
+ suggestedQuestions: Object.freeze([
35
+ "Что ты умеешь?",
36
+ "С чего начать?",
37
+ "Помоги разобраться с ошибкой",
38
+ ]),
32
39
  interaction: Object.freeze({
33
40
  approvals: "blocked",
34
41
  questions: "unsupported",
35
42
  }),
43
+ lockdown: Object.freeze({
44
+ enabled: true,
45
+ enforceFixedAgentPreset: true,
46
+ enforceFixedWorkspace: true,
47
+ enforceFixedModel: true,
48
+ sandboxMode: "read-only",
49
+ approvalPolicy: "never",
50
+ permissionPreset: "qa-read-only",
51
+ allowPermissionChanges: false,
52
+ allowSlashCommands: false,
53
+ allowSettingsMutation: false,
54
+ allowSessionReset: false,
55
+ allowSessionRename: false,
56
+ allowSessionDelete: false,
57
+ allowArbitrarySessionOpen: false,
58
+ toolPolicy: Object.freeze({
59
+ mode: "allow-list",
60
+ allow: Object.freeze([]),
61
+ }),
62
+ }),
36
63
  embedding: Object.freeze({ frameAncestors: null }),
64
+ accounts: Object.freeze({
65
+ enabled: false,
66
+ allowRegistration: true,
67
+ sessionTtlDays: 30,
68
+ showOtherUsersChats: false,
69
+ }),
70
+ entry: Object.freeze({
71
+ redirectNonLoopback: true,
72
+ cookieBootstrap: true,
73
+ }),
74
+ sources: Object.freeze({
75
+ enabled: true,
76
+ collect: Object.freeze({
77
+ parentAgent: true,
78
+ subagents: true,
79
+ persistTurnEvent: true,
80
+ }),
81
+ display: Object.freeze({
82
+ sidebar: true,
83
+ footer: true,
84
+ groupByKind: true,
85
+ showDiscovered: false,
86
+ showOriginBadges: false,
87
+ maxInitiallyVisiblePerGroup: 8,
88
+ }),
89
+ webSearch: Object.freeze({
90
+ promoteSearchResultsWithoutFetch: true,
91
+ maxPromotedPerSearch: 5,
92
+ }),
93
+ dedupe: Object.freeze({
94
+ normalizeUrls: true,
95
+ stripTrackingParams: true,
96
+ mergeFileRanges: true,
97
+ }),
98
+ filePreview: Object.freeze({
99
+ enabled: true,
100
+ markdownRenderedByDefault: true,
101
+ allowRawToggle: true,
102
+ maxBytes: 2_000_000,
103
+ maxMarkdownRenderBytes: 1_000_000,
104
+ }),
105
+ subagents: Object.freeze({
106
+ inheritSources: true,
107
+ enableReportToolFallback: true,
108
+ markIncompleteOpaqueRuns: true,
109
+ }),
110
+ legacy: Object.freeze({ parseAssistantSourcesBlock: false }),
111
+ }),
37
112
  });
38
113
  function optionalText(value) {
39
114
  const trimmed = value?.trim() ?? "";
@@ -65,6 +140,15 @@ function uniqueQuestions(values) {
65
140
  }
66
141
  return Object.freeze(questions);
67
142
  }
143
+ function uniqueToolNames(values) {
144
+ const names = [
145
+ ...new Set(values.map((value) => value.trim()).filter(Boolean)),
146
+ ];
147
+ if (names.some((value) => value.length > 200)) {
148
+ throw new TypeError("dsh-qa-surface: lockdown.toolPolicy.allow names must be at most 200 characters");
149
+ }
150
+ return Object.freeze(names);
151
+ }
68
152
  /** Materialize defaults and enforce route/session/model safety constraints. */
69
153
  export function resolveConfig(input = {}) {
70
154
  const routePath = normalizeRoutePath(input.route?.path ?? DEFAULT_QA_SURFACE_CONFIG.route.path);
@@ -73,6 +157,16 @@ export function resolveConfig(input = {}) {
73
157
  if (policy === "fixed" && fixedSessionId === null) {
74
158
  throw new TypeError("dsh-qa-surface: session.fixedSessionId is required for fixed policy");
75
159
  }
160
+ // The cwd pin is the no-registry alternative to workspaceId; both pin the
161
+ // session to one directory, so together they are a configuration error.
162
+ const cwd = optionalText(input.session?.cwd);
163
+ if (cwd !== null && !/^([a-zA-Z]:[/\\]|\/)/u.test(cwd)) {
164
+ throw new TypeError("dsh-qa-surface: session.cwd must be an absolute directory path");
165
+ }
166
+ const workspaceId = optionalText(input.session?.workspaceId);
167
+ if (workspaceId !== null && cwd !== null) {
168
+ throw new TypeError("dsh-qa-surface: session.workspaceId and session.cwd are mutually exclusive");
169
+ }
76
170
  const provider = optionalText(input.session?.provider);
77
171
  const model = optionalText(input.session?.model);
78
172
  if ((provider === null) !== (model === null)) {
@@ -89,8 +183,81 @@ export function resolveConfig(input = {}) {
89
183
  maxContentWidth > 1600) {
90
184
  throw new TypeError("dsh-qa-surface: ui.maxContentWidth must be an integer from 480 to 1600");
91
185
  }
92
- if (input.ui?.showReasoning === true) {
93
- throw new TypeError("dsh-qa-surface: ui.showReasoning is not supported by the safe MVP surface");
186
+ const lockdownEnabled = input.lockdown?.enabled ?? DEFAULT_QA_SURFACE_CONFIG.lockdown.enabled;
187
+ const rawLockdown = input.lockdown;
188
+ const forbiddenCapabilityFlags = [
189
+ ["allowPermissionChanges", rawLockdown?.allowPermissionChanges],
190
+ ["allowSlashCommands", rawLockdown?.allowSlashCommands],
191
+ ["allowSettingsMutation", rawLockdown?.allowSettingsMutation],
192
+ ["allowSessionRename", rawLockdown?.allowSessionRename],
193
+ ["allowSessionDelete", rawLockdown?.allowSessionDelete],
194
+ ["allowArbitrarySessionOpen", rawLockdown?.allowArbitrarySessionOpen],
195
+ ];
196
+ const weakenedFlag = forbiddenCapabilityFlags.find(([, value]) => value === true);
197
+ if (weakenedFlag !== undefined) {
198
+ throw new TypeError(`dsh-qa-surface: lockdown.${weakenedFlag[0]} cannot be enabled`);
199
+ }
200
+ if (input.lockdown?.sandboxMode !== undefined &&
201
+ input.lockdown.sandboxMode !== "read-only") {
202
+ throw new TypeError("dsh-qa-surface: lockdown.sandboxMode must be read-only");
203
+ }
204
+ if (input.lockdown?.approvalPolicy !== undefined &&
205
+ input.lockdown.approvalPolicy !== "never") {
206
+ throw new TypeError("dsh-qa-surface: lockdown.approvalPolicy must be never");
207
+ }
208
+ if (input.lockdown?.toolPolicy?.mode !== undefined &&
209
+ input.lockdown.toolPolicy.mode !== "allow-list") {
210
+ throw new TypeError("dsh-qa-surface: lockdown.toolPolicy.mode must be allow-list");
211
+ }
212
+ const permissionPreset = input.lockdown?.permissionPreset?.trim() ??
213
+ DEFAULT_QA_SURFACE_CONFIG.lockdown.permissionPreset;
214
+ if (lockdownEnabled && permissionPreset === "") {
215
+ throw new TypeError("dsh-qa-surface: lockdown.permissionPreset is required when lockdown is enabled");
216
+ }
217
+ const allowSessionReset = input.lockdown?.allowSessionReset ??
218
+ DEFAULT_QA_SURFACE_CONFIG.lockdown.allowSessionReset;
219
+ if (lockdownEnabled &&
220
+ (input.ui?.showReset ?? DEFAULT_QA_SURFACE_CONFIG.ui.showReset) &&
221
+ !allowSessionReset) {
222
+ throw new TypeError("dsh-qa-surface: ui.showReset requires lockdown.allowSessionReset");
223
+ }
224
+ const maxInitiallyVisiblePerGroup = input.sources?.display?.maxInitiallyVisiblePerGroup ??
225
+ DEFAULT_QA_SURFACE_CONFIG.sources.display.maxInitiallyVisiblePerGroup;
226
+ const maxPromotedPerSearch = input.sources?.webSearch?.maxPromotedPerSearch ??
227
+ DEFAULT_QA_SURFACE_CONFIG.sources.webSearch.maxPromotedPerSearch;
228
+ const maxBytes = input.sources?.filePreview?.maxBytes ??
229
+ DEFAULT_QA_SURFACE_CONFIG.sources.filePreview.maxBytes;
230
+ const maxMarkdownRenderBytes = input.sources?.filePreview?.maxMarkdownRenderBytes ??
231
+ DEFAULT_QA_SURFACE_CONFIG.sources.filePreview.maxMarkdownRenderBytes;
232
+ for (const [name, value, min, max] of [
233
+ [
234
+ "sources.display.maxInitiallyVisiblePerGroup",
235
+ maxInitiallyVisiblePerGroup,
236
+ 1,
237
+ 100,
238
+ ],
239
+ ["sources.webSearch.maxPromotedPerSearch", maxPromotedPerSearch, 0, 50],
240
+ ["sources.filePreview.maxBytes", maxBytes, 1_024, 20_000_000],
241
+ [
242
+ "sources.filePreview.maxMarkdownRenderBytes",
243
+ maxMarkdownRenderBytes,
244
+ 1_024,
245
+ 10_000_000,
246
+ ],
247
+ ]) {
248
+ if (!Number.isSafeInteger(value) || value < min || value > max) {
249
+ throw new TypeError(`dsh-qa-surface: ${name} must be an integer from ${min} to ${max}`);
250
+ }
251
+ }
252
+ if (maxMarkdownRenderBytes > maxBytes) {
253
+ throw new TypeError("dsh-qa-surface: sources.filePreview.maxMarkdownRenderBytes cannot exceed maxBytes");
254
+ }
255
+ const sessionTtlDays = input.accounts?.sessionTtlDays ??
256
+ DEFAULT_QA_SURFACE_CONFIG.accounts.sessionTtlDays;
257
+ if (!Number.isSafeInteger(sessionTtlDays) ||
258
+ sessionTtlDays < 1 ||
259
+ sessionTtlDays > 365) {
260
+ throw new TypeError("dsh-qa-surface: accounts.sessionTtlDays must be an integer from 1 to 365");
94
261
  }
95
262
  return Object.freeze({
96
263
  enabled: input.enabled ?? DEFAULT_QA_SURFACE_CONFIG.enabled,
@@ -108,10 +275,16 @@ export function resolveConfig(input = {}) {
108
275
  placeholder: input.branding?.placeholder?.trim() ||
109
276
  DEFAULT_QA_SURFACE_CONFIG.branding.placeholder,
110
277
  logoUrl: optionalText(input.branding?.logoUrl),
278
+ // Undefined falls back to the default notice; an explicit null or
279
+ // empty string hides the plate entirely.
280
+ disclaimer: input.branding?.disclaimer === undefined
281
+ ? DEFAULT_QA_SURFACE_CONFIG.branding.disclaimer
282
+ : (optionalText(input.branding.disclaimer) ?? ""),
111
283
  }),
112
284
  session: Object.freeze({
113
285
  policy,
114
286
  storageKey,
287
+ cwd,
115
288
  workspaceId: optionalText(input.session?.workspaceId),
116
289
  fixedSessionId,
117
290
  agentPreset: optionalText(input.session?.agentPreset),
@@ -126,18 +299,118 @@ export function resolveConfig(input = {}) {
126
299
  showTimestamps: input.ui?.showTimestamps ?? DEFAULT_QA_SURFACE_CONFIG.ui.showTimestamps,
127
300
  showToolActivity: input.ui?.showToolActivity ??
128
301
  DEFAULT_QA_SURFACE_CONFIG.ui.showToolActivity,
129
- showReasoning: false,
302
+ showReasoning: input.ui?.showReasoning ?? DEFAULT_QA_SURFACE_CONFIG.ui.showReasoning,
130
303
  renderMarkdown: input.ui?.renderMarkdown ?? DEFAULT_QA_SURFACE_CONFIG.ui.renderMarkdown,
131
304
  maxContentWidth,
305
+ showSessionList: input.ui?.showSessionList ??
306
+ DEFAULT_QA_SURFACE_CONFIG.ui.showSessionList,
132
307
  }),
133
- suggestedQuestions: uniqueQuestions(input.suggestedQuestions ?? []),
308
+ suggestedQuestions: uniqueQuestions(input.suggestedQuestions ?? DEFAULT_QA_SURFACE_CONFIG.suggestedQuestions),
134
309
  interaction: Object.freeze({
135
310
  approvals: "blocked",
136
311
  questions: "unsupported",
137
312
  }),
313
+ lockdown: Object.freeze({
314
+ enabled: lockdownEnabled,
315
+ enforceFixedAgentPreset: input.lockdown?.enforceFixedAgentPreset ??
316
+ DEFAULT_QA_SURFACE_CONFIG.lockdown.enforceFixedAgentPreset,
317
+ enforceFixedWorkspace: input.lockdown?.enforceFixedWorkspace ??
318
+ DEFAULT_QA_SURFACE_CONFIG.lockdown.enforceFixedWorkspace,
319
+ enforceFixedModel: input.lockdown?.enforceFixedModel ??
320
+ DEFAULT_QA_SURFACE_CONFIG.lockdown.enforceFixedModel,
321
+ sandboxMode: "read-only",
322
+ approvalPolicy: "never",
323
+ permissionPreset,
324
+ allowPermissionChanges: false,
325
+ allowSlashCommands: false,
326
+ allowSettingsMutation: false,
327
+ allowSessionReset,
328
+ allowSessionRename: false,
329
+ allowSessionDelete: false,
330
+ allowArbitrarySessionOpen: false,
331
+ toolPolicy: Object.freeze({
332
+ mode: "allow-list",
333
+ allow: uniqueToolNames(input.lockdown?.toolPolicy?.allow ?? []),
334
+ }),
335
+ }),
138
336
  embedding: Object.freeze({
139
337
  frameAncestors: optionalText(input.embedding?.frameAncestors),
140
338
  }),
339
+ accounts: Object.freeze({
340
+ enabled: input.accounts?.enabled ?? DEFAULT_QA_SURFACE_CONFIG.accounts.enabled,
341
+ allowRegistration: input.accounts?.allowRegistration ??
342
+ DEFAULT_QA_SURFACE_CONFIG.accounts.allowRegistration,
343
+ sessionTtlDays,
344
+ showOtherUsersChats: input.accounts?.showOtherUsersChats ??
345
+ DEFAULT_QA_SURFACE_CONFIG.accounts.showOtherUsersChats,
346
+ }),
347
+ entry: Object.freeze({
348
+ redirectNonLoopback: input.entry?.redirectNonLoopback ??
349
+ DEFAULT_QA_SURFACE_CONFIG.entry.redirectNonLoopback,
350
+ cookieBootstrap: input.entry?.cookieBootstrap ??
351
+ DEFAULT_QA_SURFACE_CONFIG.entry.cookieBootstrap,
352
+ }),
353
+ sources: Object.freeze({
354
+ enabled: input.sources?.enabled ?? DEFAULT_QA_SURFACE_CONFIG.sources.enabled,
355
+ collect: Object.freeze({
356
+ parentAgent: input.sources?.collect?.parentAgent ??
357
+ DEFAULT_QA_SURFACE_CONFIG.sources.collect.parentAgent,
358
+ subagents: input.sources?.collect?.subagents ??
359
+ DEFAULT_QA_SURFACE_CONFIG.sources.collect.subagents,
360
+ persistTurnEvent: input.sources?.collect?.persistTurnEvent ??
361
+ DEFAULT_QA_SURFACE_CONFIG.sources.collect.persistTurnEvent,
362
+ }),
363
+ display: Object.freeze({
364
+ sidebar: input.sources?.display?.sidebar ??
365
+ DEFAULT_QA_SURFACE_CONFIG.sources.display.sidebar,
366
+ footer: input.sources?.display?.footer ??
367
+ DEFAULT_QA_SURFACE_CONFIG.sources.display.footer,
368
+ groupByKind: input.sources?.display?.groupByKind ??
369
+ DEFAULT_QA_SURFACE_CONFIG.sources.display.groupByKind,
370
+ showDiscovered: input.sources?.display?.showDiscovered ??
371
+ DEFAULT_QA_SURFACE_CONFIG.sources.display.showDiscovered,
372
+ showOriginBadges: input.sources?.display?.showOriginBadges ??
373
+ DEFAULT_QA_SURFACE_CONFIG.sources.display.showOriginBadges,
374
+ maxInitiallyVisiblePerGroup,
375
+ }),
376
+ webSearch: Object.freeze({
377
+ promoteSearchResultsWithoutFetch: input.sources?.webSearch?.promoteSearchResultsWithoutFetch ??
378
+ DEFAULT_QA_SURFACE_CONFIG.sources.webSearch
379
+ .promoteSearchResultsWithoutFetch,
380
+ maxPromotedPerSearch,
381
+ }),
382
+ dedupe: Object.freeze({
383
+ normalizeUrls: input.sources?.dedupe?.normalizeUrls ??
384
+ DEFAULT_QA_SURFACE_CONFIG.sources.dedupe.normalizeUrls,
385
+ stripTrackingParams: input.sources?.dedupe?.stripTrackingParams ??
386
+ DEFAULT_QA_SURFACE_CONFIG.sources.dedupe.stripTrackingParams,
387
+ mergeFileRanges: input.sources?.dedupe?.mergeFileRanges ??
388
+ DEFAULT_QA_SURFACE_CONFIG.sources.dedupe.mergeFileRanges,
389
+ }),
390
+ filePreview: Object.freeze({
391
+ enabled: input.sources?.filePreview?.enabled ??
392
+ DEFAULT_QA_SURFACE_CONFIG.sources.filePreview.enabled,
393
+ markdownRenderedByDefault: input.sources?.filePreview?.markdownRenderedByDefault ??
394
+ DEFAULT_QA_SURFACE_CONFIG.sources.filePreview
395
+ .markdownRenderedByDefault,
396
+ allowRawToggle: input.sources?.filePreview?.allowRawToggle ??
397
+ DEFAULT_QA_SURFACE_CONFIG.sources.filePreview.allowRawToggle,
398
+ maxBytes,
399
+ maxMarkdownRenderBytes,
400
+ }),
401
+ subagents: Object.freeze({
402
+ inheritSources: input.sources?.subagents?.inheritSources ??
403
+ DEFAULT_QA_SURFACE_CONFIG.sources.subagents.inheritSources,
404
+ enableReportToolFallback: input.sources?.subagents?.enableReportToolFallback ??
405
+ DEFAULT_QA_SURFACE_CONFIG.sources.subagents.enableReportToolFallback,
406
+ markIncompleteOpaqueRuns: input.sources?.subagents?.markIncompleteOpaqueRuns ??
407
+ DEFAULT_QA_SURFACE_CONFIG.sources.subagents.markIncompleteOpaqueRuns,
408
+ }),
409
+ legacy: Object.freeze({
410
+ parseAssistantSourcesBlock: input.sources?.legacy?.parseAssistantSourcesBlock ??
411
+ DEFAULT_QA_SURFACE_CONFIG.sources.legacy.parseAssistantSourcesBlock,
412
+ }),
413
+ }),
141
414
  });
142
415
  }
143
416
  //# sourceMappingURL=resolve-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../src/resolve-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../src/resolve-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,212 @@
1
+ // The `types` subpath keeps the client ISessions Context merge authoritative;
2
+ // the package root merges a conflicting host `sessions` service type.
3
+ import { SessionId } from "@deepseek-ai/dsh-session/types";
4
+ import { WorkspaceId } from "@deepseek-ai/dsh-workspace";
5
+ import { QaAccountsError } from "./accounts/store.js";
6
+ import { QaAttestationError } from "./attestation.js";
7
+ import { qaToolDenial, qaToolPolicyPlan } from "./lockdown-policy.js";
8
+ import { QA_REPORT_SOURCES_TOOL } from "./provenance/host-store.js";
9
+ /** Grace period in which a fresh session may still be pinned to the QA preset. */
10
+ const FRESH_SESSION_BOOTSTRAP_WINDOW_MS = 120_000;
11
+ /**
12
+ * Compare session cwds the way the host records them: separator- and
13
+ * case-normalized on Windows, so a deployment path written with either
14
+ * separator or case still matches the session header cwd.
15
+ */
16
+ function cwdMatches(headerCwd, pinned) {
17
+ if (headerCwd === undefined)
18
+ return false;
19
+ const normalize = (value) => value.replaceAll("\\", "/").replace(/\/+$/u, "");
20
+ const left = normalize(headerCwd);
21
+ const right = normalize(pinned);
22
+ return process.platform === "win32"
23
+ ? left.toLowerCase() === right.toLowerCase()
24
+ : left === right;
25
+ }
26
+ /**
27
+ * Host-side QA policy admission boundary — the only browser-callable operation
28
+ * that turns a session into a locked QA session. It verifies the immutable
29
+ * session composition against the effective deployment config, refuses to
30
+ * adopt a non-QA session with user history, validates the named permission
31
+ * preset, pins the scoped tool restriction plus the monotonic execution guard,
32
+ * and returns a sanitized proof. Every refusal carries only a coarse reason.
33
+ */
34
+ export class QaPolicyAdmission {
35
+ ctx;
36
+ config;
37
+ logger;
38
+ accounts;
39
+ appliedPolicies = new Map();
40
+ constructor(ctx, config, logger, accounts) {
41
+ this.ctx = ctx;
42
+ this.config = config;
43
+ this.logger = logger;
44
+ this.accounts = accounts;
45
+ ctx.on("agent/disposed", ({ agent }) => {
46
+ this.appliedPolicies.delete(agent);
47
+ });
48
+ }
49
+ secureSession(token, sessionId) {
50
+ const config = this.config();
51
+ const lockdown = config.lockdown;
52
+ // Account identity is checked before any policy work: an invalid token
53
+ // must not learn whether a session exists or how the deployment composes.
54
+ // Independent of lockdown — a deployment may gate users without pinning
55
+ // the policy, and the gate itself no-ops while accounts are disabled.
56
+ if (this.accounts !== undefined) {
57
+ try {
58
+ this.accounts.enforceSessionAccess(token, sessionId);
59
+ }
60
+ catch (error) {
61
+ if (error instanceof QaAccountsError) {
62
+ throw new QaAttestationError(error.reason === "session-owned-elsewhere"
63
+ ? "session-owned-elsewhere"
64
+ : "auth-required", error.message);
65
+ }
66
+ throw error;
67
+ }
68
+ }
69
+ const agent = this.ctx.agents.get(SessionId(sessionId));
70
+ if (agent === undefined) {
71
+ throw new QaAttestationError("agent-unavailable", "agent is unavailable");
72
+ }
73
+ if (!lockdown.enabled) {
74
+ return {
75
+ sessionId,
76
+ enabled: false,
77
+ agentPresetMatches: true,
78
+ workspaceMatches: true,
79
+ modelMatches: true,
80
+ sandboxIsReadOnly: false,
81
+ approvalIsNever: false,
82
+ permissionPreset: "",
83
+ toolPolicyLoaded: false,
84
+ toolAllowList: [],
85
+ };
86
+ }
87
+ const expectedWorkspace = config.session.workspaceId;
88
+ const pinnedWorkspace = expectedWorkspace === null
89
+ ? undefined
90
+ : this.ctx.workspaceRegistry.get(WorkspaceId(expectedWorkspace));
91
+ // A pin that resolves to nothing would refuse the cwd comparison anyway,
92
+ // but the precise reason saves an operator a round trip: the surface
93
+ // stays closed until the workspace exists or the id is fixed.
94
+ if (expectedWorkspace !== null && pinnedWorkspace === undefined) {
95
+ throw new QaAttestationError("workspace-unavailable", `workspace ${expectedWorkspace} is not registered`);
96
+ }
97
+ const expectedPreset = config.session.agentPreset;
98
+ const agentPresetMatches = !lockdown.enforceFixedAgentPreset ||
99
+ expectedPreset === null ||
100
+ this.ctx.agentPresets.composedPreset(agent.ctx) === expectedPreset;
101
+ const workspaceMatches = !lockdown.enforceFixedWorkspace ||
102
+ (expectedWorkspace === null && config.session.cwd === null) ||
103
+ (pinnedWorkspace !== undefined &&
104
+ cwdMatches(agent.session.header.cwd, pinnedWorkspace.path)) ||
105
+ (expectedWorkspace === null &&
106
+ config.session.cwd !== null &&
107
+ cwdMatches(agent.session.header.cwd, config.session.cwd));
108
+ const options = agent.options;
109
+ const modelMatches = !lockdown.enforceFixedModel ||
110
+ config.session.provider === null ||
111
+ (options.provider === config.session.provider &&
112
+ options.model === config.session.model &&
113
+ (config.session.reasoningEffort === null ||
114
+ options.reasoningEffort === config.session.reasoningEffort));
115
+ if (!agentPresetMatches || !workspaceMatches || !modelMatches) {
116
+ throw new QaAttestationError("composition-mismatch", `composition mismatch: agent=${agentPresetMatches} workspace=${workspaceMatches} model=${modelMatches}`);
117
+ }
118
+ const permission = this.ctx.permissionPresets.resolve(lockdown.permissionPreset);
119
+ if (permission.sandbox !== lockdown.sandboxMode ||
120
+ permission.approval !== lockdown.approvalPolicy) {
121
+ throw new QaAttestationError("permission-preset", `permission preset ${lockdown.permissionPreset} does not resolve to read-only/never`);
122
+ }
123
+ const currentPermission = this.ctx.permissionPresets.current(agent.session);
124
+ // History check over the model-visible surface: `user/message` is a
125
+ // surface event, so any adopted conversation shows up here regardless of
126
+ // window pagination.
127
+ const hasUserHistory = agent.session.surface.nodes.some((seq) => agent.session.eventAt(seq)?.type === "user/message");
128
+ if (currentPermission !== lockdown.permissionPreset &&
129
+ (hasUserHistory ||
130
+ Date.now() - agent.session.header.createdAt >
131
+ FRESH_SESSION_BOOTSTRAP_WINDOW_MS)) {
132
+ throw new QaAttestationError("adoption-refused", "existing non-QA session cannot be adopted");
133
+ }
134
+ const policyAllow = config.sources.enabled &&
135
+ config.sources.subagents.enableReportToolFallback &&
136
+ !lockdown.toolPolicy.allow.includes(QA_REPORT_SOURCES_TOOL)
137
+ ? [...lockdown.toolPolicy.allow, QA_REPORT_SOURCES_TOOL]
138
+ : lockdown.toolPolicy.allow;
139
+ const policy = qaToolPolicyPlan(policyAllow, (toolName) => this.ctx.tools.get(toolName, agent) !== undefined);
140
+ if (policy.unknown.length > 0) {
141
+ throw new QaAttestationError("unknown-tools", `unknown QA tool(s): ${policy.unknown.join(", ")}`);
142
+ }
143
+ const fingerprint = JSON.stringify(policy.allow);
144
+ const prior = this.appliedPolicies.get(agent);
145
+ if (prior?.fingerprint !== fingerprint) {
146
+ const allowed = new Set(policy.allow);
147
+ const disposeGuard = agent.ctx.tools.guard((execution) => qaToolDenial(allowed, execution.name));
148
+ const disposeGuidance = agent.ctx.systemPrompt.section({
149
+ name: "dsh-qa-surface:structured-sources",
150
+ order: 950,
151
+ text: "Source provenance is collected automatically from tools. Do not append a manual Sources/Источники bibliography to the answer. Delegated providers that cannot expose tool events should call qa_report_sources before finishing.",
152
+ });
153
+ try {
154
+ const disposeRestriction = agent.ctx.tools.restrict({
155
+ allow: policy.allow,
156
+ });
157
+ this.appliedPolicies.set(agent, {
158
+ fingerprint,
159
+ disposeGuard,
160
+ disposeRestriction,
161
+ disposeGuidance,
162
+ });
163
+ prior?.disposeRestriction();
164
+ prior?.disposeGuard();
165
+ prior?.disposeGuidance();
166
+ }
167
+ catch (error) {
168
+ disposeGuard();
169
+ disposeGuidance();
170
+ throw error;
171
+ }
172
+ }
173
+ this.ctx.permissionPresets.set(agent.session, lockdown.permissionPreset);
174
+ const effectivePermission = this.ctx.permissionPresets.current(agent.session);
175
+ const sandboxIsReadOnly = permission.sandbox === "read-only";
176
+ const approvalIsNever = permission.approval === "never";
177
+ if (effectivePermission !== lockdown.permissionPreset ||
178
+ !sandboxIsReadOnly ||
179
+ !approvalIsNever) {
180
+ throw new QaAttestationError("attestation-failed", "permission attestation failed");
181
+ }
182
+ this.logger.debug("lockdown.attested", {
183
+ sessionId,
184
+ permissionPreset: lockdown.permissionPreset,
185
+ toolAllowList: policy.allow,
186
+ });
187
+ return {
188
+ sessionId,
189
+ enabled: true,
190
+ agentPresetMatches,
191
+ workspaceMatches,
192
+ modelMatches,
193
+ sandboxIsReadOnly,
194
+ approvalIsNever,
195
+ permissionPreset: lockdown.permissionPreset,
196
+ toolPolicyLoaded: true,
197
+ // The fallback reporter is an internal read-only provenance capability,
198
+ // not an operator-configured QA tool grant.
199
+ toolAllowList: lockdown.toolPolicy.allow,
200
+ };
201
+ }
202
+ /** Detach every pinned tool policy; wired as a disposal effect by the entry. */
203
+ dispose() {
204
+ for (const policy of this.appliedPolicies.values()) {
205
+ policy.disposeRestriction();
206
+ policy.disposeGuard();
207
+ policy.disposeGuidance();
208
+ }
209
+ this.appliedPolicies.clear();
210
+ }
211
+ }
212
+ //# sourceMappingURL=secure-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-session.js","sourceRoot":"","sources":["../src/secure-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from FaceModel — do not edit. */
2
+
3
+ export declare const TYPERT: unknown