@yadsh/dsh-qa-surface 0.3.0 → 0.5.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 (276) hide show
  1. package/README.md +192 -15
  2. package/cordis.patch.yml +8 -0
  3. package/lib/account-remotes.js +100 -0
  4. package/lib/account-remotes.js.map +1 -0
  5. package/lib/accounts/credentials.js +35 -0
  6. package/lib/accounts/credentials.js.map +1 -0
  7. package/lib/accounts/errors.js +9 -0
  8. package/lib/accounts/errors.js.map +1 -0
  9. package/lib/accounts/file.js +101 -0
  10. package/lib/accounts/file.js.map +1 -0
  11. package/lib/accounts/store.js +159 -161
  12. package/lib/accounts/store.js.map +1 -1
  13. package/lib/accounts/token.js +61 -0
  14. package/lib/accounts/token.js.map +1 -0
  15. package/lib/approvals.js +179 -0
  16. package/lib/approvals.js.map +1 -0
  17. package/lib/attachment-rules.js +111 -0
  18. package/lib/attachment-rules.js.map +1 -0
  19. package/lib/cli.js +132 -9
  20. package/lib/cli.js.map +1 -1
  21. package/lib/client/QaAccountsController.js +32 -2
  22. package/lib/client/QaAccountsController.js.map +1 -1
  23. package/lib/client/QaSessionController.js +140 -65
  24. package/lib/client/QaSessionController.js.map +1 -1
  25. package/lib/client/QaSurface.js +134 -107
  26. package/lib/client/QaSurface.js.map +1 -1
  27. package/lib/client/QaTranscriptAdapter.js +71 -6
  28. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  29. package/lib/client/approvals.js +104 -0
  30. package/lib/client/approvals.js.map +1 -0
  31. package/lib/client/attachments.js +150 -0
  32. package/lib/client/attachments.js.map +1 -0
  33. package/lib/client/attestation.js +4 -1
  34. package/lib/client/attestation.js.map +1 -1
  35. package/lib/client/base64.js +16 -0
  36. package/lib/client/base64.js.map +1 -0
  37. package/lib/client/chat-files.js +48 -0
  38. package/lib/client/chat-files.js.map +1 -0
  39. package/lib/client/components/Markdown.js +1 -1
  40. package/lib/client/components/Markdown.js.map +1 -1
  41. package/lib/client/components/QaApproval.js +23 -0
  42. package/lib/client/components/QaApproval.js.map +1 -0
  43. package/lib/client/components/QaChangelog.js +62 -19
  44. package/lib/client/components/QaChangelog.js.map +1 -1
  45. package/lib/client/components/QaComposer.js +56 -74
  46. package/lib/client/components/QaComposer.js.map +1 -1
  47. package/lib/client/components/QaFileAttachment.js +19 -0
  48. package/lib/client/components/QaFileAttachment.js.map +1 -0
  49. package/lib/client/components/QaFilesPanel.js +45 -0
  50. package/lib/client/components/QaFilesPanel.js.map +1 -0
  51. package/lib/client/components/QaHeader.js +34 -0
  52. package/lib/client/components/QaHeader.js.map +1 -0
  53. package/lib/client/components/QaMessage.js +17 -4
  54. package/lib/client/components/QaMessage.js.map +1 -1
  55. package/lib/client/components/QaModal.js +31 -0
  56. package/lib/client/components/QaModal.js.map +1 -0
  57. package/lib/client/components/QaProfile.js +64 -0
  58. package/lib/client/components/QaProfile.js.map +1 -0
  59. package/lib/client/components/QaQuestions.js +96 -0
  60. package/lib/client/components/QaQuestions.js.map +1 -0
  61. package/lib/client/components/QaRightRail.js +15 -0
  62. package/lib/client/components/QaRightRail.js.map +1 -0
  63. package/lib/client/components/QaSidebar.js +6 -1
  64. package/lib/client/components/QaSidebar.js.map +1 -1
  65. package/lib/client/components/{QaSourcesDrawer.js → QaSourcesPanel.js} +3 -3
  66. package/lib/client/components/QaSourcesPanel.js.map +1 -0
  67. package/lib/client/components/QaTurnRail.js +15 -0
  68. package/lib/client/components/QaTurnRail.js.map +1 -1
  69. package/lib/client/components/QaWidthHandle.js +25 -20
  70. package/lib/client/components/QaWidthHandle.js.map +1 -1
  71. package/lib/client/components/QaWorkGroup.js +19 -20
  72. package/lib/client/components/QaWorkGroup.js.map +1 -1
  73. package/lib/client/components/surface-utils.js +28 -0
  74. package/lib/client/components/surface-utils.js.map +1 -0
  75. package/lib/client/components/thinking-phrases.js +24 -0
  76. package/lib/client/components/thinking-phrases.js.map +1 -0
  77. package/lib/client/create-session.js +7 -32
  78. package/lib/client/create-session.js.map +1 -1
  79. package/lib/client/failure-copy.js +63 -0
  80. package/lib/client/failure-copy.js.map +1 -0
  81. package/lib/client/index.js +49 -7
  82. package/lib/client/index.js.map +1 -1
  83. package/lib/client/project-session-state.js +5 -3
  84. package/lib/client/project-session-state.js.map +1 -1
  85. package/lib/client/prompt-content.js +54 -0
  86. package/lib/client/prompt-content.js.map +1 -0
  87. package/lib/client/questions.js +114 -0
  88. package/lib/client/questions.js.map +1 -0
  89. package/lib/client/settings/card.js +143 -0
  90. package/lib/client/settings/card.js.map +1 -0
  91. package/lib/client/settings/fields.js +145 -0
  92. package/lib/client/settings/fields.js.map +1 -0
  93. package/lib/client/settings/format.js +255 -0
  94. package/lib/client/settings/format.js.map +1 -0
  95. package/lib/client/settings/sections/access.js +25 -0
  96. package/lib/client/settings/sections/access.js.map +1 -0
  97. package/lib/client/settings/sections/accounts.js +47 -0
  98. package/lib/client/settings/sections/accounts.js.map +1 -0
  99. package/lib/client/settings/sections/attachments.js +46 -0
  100. package/lib/client/settings/sections/attachments.js.map +1 -0
  101. package/lib/client/settings/sections/branding.js +28 -0
  102. package/lib/client/settings/sections/branding.js.map +1 -0
  103. package/lib/client/settings/sections/common.js +20 -0
  104. package/lib/client/settings/sections/common.js.map +1 -0
  105. package/lib/client/settings/sections/embedding.js +19 -0
  106. package/lib/client/settings/sections/embedding.js.map +1 -0
  107. package/lib/client/settings/sections/interface.js +60 -0
  108. package/lib/client/settings/sections/interface.js.map +1 -0
  109. package/lib/client/settings/sections/lockdown.js +82 -0
  110. package/lib/client/settings/sections/lockdown.js.map +1 -0
  111. package/lib/client/settings/sections/session.js +53 -0
  112. package/lib/client/settings/sections/session.js.map +1 -0
  113. package/lib/client/settings/sections/sources.js +74 -0
  114. package/lib/client/settings/sections/sources.js.map +1 -0
  115. package/lib/client/settings/sections/status.js +37 -0
  116. package/lib/client/settings/sections/status.js.map +1 -0
  117. package/lib/client/settings/sections.js +23 -0
  118. package/lib/client/settings/sections.js.map +1 -0
  119. package/lib/client/settings/styles.js +57 -0
  120. package/lib/client/settings/styles.js.map +1 -0
  121. package/lib/client/stream-publisher.js +47 -0
  122. package/lib/client/stream-publisher.js.map +1 -0
  123. package/lib/client/styles.js +127 -19
  124. package/lib/client/styles.js.map +1 -1
  125. package/lib/client/types.js +2 -0
  126. package/lib/client/types.js.map +1 -1
  127. package/lib/client/use-right-rail.js +96 -0
  128. package/lib/client/use-right-rail.js.map +1 -0
  129. package/lib/client/use-session-ui-state.js +26 -19
  130. package/lib/client/use-session-ui-state.js.map +1 -1
  131. package/lib/client.js +5694 -813
  132. package/lib/client.js.map +1 -1
  133. package/lib/config-resolvers/accounts.js +60 -0
  134. package/lib/config-resolvers/accounts.js.map +1 -0
  135. package/lib/config-resolvers/attachments.js +28 -0
  136. package/lib/config-resolvers/attachments.js.map +1 -0
  137. package/lib/config-resolvers/basics.js +61 -0
  138. package/lib/config-resolvers/basics.js.map +1 -0
  139. package/lib/config-resolvers/defaults.js +136 -0
  140. package/lib/config-resolvers/defaults.js.map +1 -0
  141. package/lib/config-resolvers/lockdown.js +90 -0
  142. package/lib/config-resolvers/lockdown.js.map +1 -0
  143. package/lib/config-resolvers/session.js +42 -0
  144. package/lib/config-resolvers/session.js.map +1 -0
  145. package/lib/config-resolvers/shared.js +51 -0
  146. package/lib/config-resolvers/shared.js.map +1 -0
  147. package/lib/config-resolvers/sources.js +83 -0
  148. package/lib/config-resolvers/sources.js.map +1 -0
  149. package/lib/config-resolvers/ui.js +20 -0
  150. package/lib/config-resolvers/ui.js.map +1 -0
  151. package/lib/config.js +76 -6
  152. package/lib/config.js.map +1 -1
  153. package/lib/entry-redirect.js +2 -1
  154. package/lib/entry-redirect.js.map +1 -1
  155. package/lib/index.js +198 -79
  156. package/lib/index.js.map +1 -1
  157. package/lib/profile.js +214 -0
  158. package/lib/profile.js.map +1 -0
  159. package/lib/prompt-notes.js +231 -0
  160. package/lib/prompt-notes.js.map +1 -0
  161. package/lib/provenance/host-store.js +25 -9
  162. package/lib/provenance/host-store.js.map +1 -1
  163. package/lib/provenance/reported.js +37 -12
  164. package/lib/provenance/reported.js.map +1 -1
  165. package/lib/questions.js +185 -0
  166. package/lib/questions.js.map +1 -0
  167. package/lib/resolve-config.js +35 -410
  168. package/lib/resolve-config.js.map +1 -1
  169. package/lib/secure-session.js +139 -21
  170. package/lib/secure-session.js.map +1 -1
  171. package/lib/session-ownership.js +55 -0
  172. package/lib/session-ownership.js.map +1 -0
  173. package/lib/shared/session-key.js +18 -0
  174. package/lib/shared/session-key.js.map +1 -0
  175. package/lib/shared/settings.js +10 -0
  176. package/lib/shared/settings.js.map +1 -0
  177. package/lib/thinking-phrases.js +68 -0
  178. package/lib/thinking-phrases.js.map +1 -0
  179. package/lib/typert.host.js +506 -21
  180. package/lib/typert.remote-client.d.ts +15 -1
  181. package/lib/typert.remote-client.js +407 -15
  182. package/lib/types/account-remotes.d.ts +42 -0
  183. package/lib/types/accounts/credentials.d.ts +20 -0
  184. package/lib/types/accounts/errors.d.ts +11 -0
  185. package/lib/types/accounts/file.d.ts +82 -0
  186. package/lib/types/accounts/store.d.ts +74 -43
  187. package/lib/types/accounts/token.d.ts +31 -0
  188. package/lib/types/approvals.d.ts +65 -0
  189. package/lib/types/attachment-rules.d.ts +44 -0
  190. package/lib/types/cli.d.ts +2 -2
  191. package/lib/types/client/QaAccountsController.d.ts +8 -1
  192. package/lib/types/client/QaSessionController.d.ts +53 -16
  193. package/lib/types/client/QaSurface.d.ts +14 -1
  194. package/lib/types/client/approvals.d.ts +39 -0
  195. package/lib/types/client/attachments.d.ts +54 -0
  196. package/lib/types/client/base64.d.ts +10 -0
  197. package/lib/types/client/chat-files.d.ts +30 -0
  198. package/lib/types/client/components/QaApproval.d.ts +13 -0
  199. package/lib/types/client/components/QaChangelog.d.ts +1 -1
  200. package/lib/types/client/components/QaComposer.d.ts +8 -4
  201. package/lib/types/client/components/QaFileAttachment.d.ts +14 -0
  202. package/lib/types/client/components/QaFilesPanel.d.ts +15 -0
  203. package/lib/types/client/components/QaHeader.d.ts +41 -0
  204. package/lib/types/client/components/QaMessage.d.ts +3 -1
  205. package/lib/types/client/components/QaModal.d.ts +26 -0
  206. package/lib/types/client/components/QaProfile.d.ts +25 -0
  207. package/lib/types/client/components/QaQuestions.d.ts +13 -0
  208. package/lib/types/client/components/QaRightRail.d.ts +23 -0
  209. package/lib/types/client/components/QaSidebar.d.ts +14 -0
  210. package/lib/types/client/components/{QaSourcesDrawer.d.ts → QaSourcesPanel.d.ts} +7 -4
  211. package/lib/types/client/components/QaTurnRail.d.ts +6 -0
  212. package/lib/types/client/components/QaWidthHandle.d.ts +14 -7
  213. package/lib/types/client/components/QaWorkGroup.d.ts +5 -3
  214. package/lib/types/client/components/surface-utils.d.ts +11 -0
  215. package/lib/types/client/components/thinking-phrases.d.ts +9 -0
  216. package/lib/types/client/create-session.d.ts +6 -9
  217. package/lib/types/client/failure-copy.d.ts +19 -0
  218. package/lib/types/client/project-session-state.d.ts +8 -1
  219. package/lib/types/client/prompt-content.d.ts +30 -0
  220. package/lib/types/client/questions.d.ts +45 -0
  221. package/lib/types/client/settings/card.d.ts +23 -0
  222. package/lib/types/client/settings/fields.d.ts +139 -0
  223. package/lib/types/client/settings/format.d.ts +108 -0
  224. package/lib/types/client/settings/sections/access.d.ts +9 -0
  225. package/lib/types/client/settings/sections/accounts.d.ts +9 -0
  226. package/lib/types/client/settings/sections/attachments.d.ts +15 -0
  227. package/lib/types/client/settings/sections/branding.d.ts +8 -0
  228. package/lib/types/client/settings/sections/common.d.ts +28 -0
  229. package/lib/types/client/settings/sections/embedding.d.ts +8 -0
  230. package/lib/types/client/settings/sections/interface.d.ts +9 -0
  231. package/lib/types/client/settings/sections/lockdown.d.ts +9 -0
  232. package/lib/types/client/settings/sections/session.d.ts +9 -0
  233. package/lib/types/client/settings/sections/sources.d.ts +9 -0
  234. package/lib/types/client/settings/sections/status.d.ts +22 -0
  235. package/lib/types/client/settings/sections.d.ts +25 -0
  236. package/lib/types/client/settings/styles.d.ts +8 -0
  237. package/lib/types/client/stream-publisher.d.ts +28 -0
  238. package/lib/types/client/types.d.ts +76 -1
  239. package/lib/types/client/use-right-rail.d.ts +56 -0
  240. package/lib/types/client/use-session-ui-state.d.ts +13 -7
  241. package/lib/types/config-resolvers/accounts.d.ts +15 -0
  242. package/lib/types/config-resolvers/attachments.d.ts +6 -0
  243. package/lib/types/config-resolvers/basics.d.ts +8 -0
  244. package/lib/types/config-resolvers/defaults.d.ts +4 -0
  245. package/lib/types/config-resolvers/lockdown.d.ts +10 -0
  246. package/lib/types/config-resolvers/session.d.ts +6 -0
  247. package/lib/types/config-resolvers/shared.d.ts +23 -0
  248. package/lib/types/config-resolvers/sources.d.ts +6 -0
  249. package/lib/types/config-resolvers/ui.d.ts +6 -0
  250. package/lib/types/index.d.ts +48 -15
  251. package/lib/types/profile.d.ts +76 -0
  252. package/lib/types/prompt-notes.d.ts +110 -0
  253. package/lib/types/provenance/reported.d.ts +9 -1
  254. package/lib/types/questions.d.ts +83 -0
  255. package/lib/types/resolve-config.d.ts +8 -3
  256. package/lib/types/secure-session.d.ts +46 -2
  257. package/lib/types/session-ownership.d.ts +30 -0
  258. package/lib/types/shared/session-key.d.ts +23 -0
  259. package/lib/types/shared/settings.d.ts +10 -0
  260. package/lib/types/thinking-phrases.d.ts +17 -0
  261. package/lib/types/types.d.ts +203 -9
  262. package/lib/types/user-workspace.d.ts +42 -0
  263. package/lib/user-workspace.js +246 -0
  264. package/lib/user-workspace.js.map +1 -0
  265. package/package.json +15 -8
  266. package/CHANGELOG.md +0 -176
  267. package/SPEC-dsh-qa-surface.md +0 -2425
  268. package/docs/ARCHITECTURE.md +0 -66
  269. package/docs/COMPATIBILITY.md +0 -14
  270. package/docs/CONFIGURATION.md +0 -199
  271. package/docs/EMBEDDING.md +0 -13
  272. package/docs/SOURCES-MIGRATION.md +0 -28
  273. package/docs/SOURCES-PROVENANCE-AUDIT.md +0 -88
  274. package/docs/SPEC-dsh-qa-surface-accounts.md +0 -219
  275. package/docs/SPEC-dsh-qa-surface-sources-provenance.md +0 -1692
  276. package/lib/client/components/QaSourcesDrawer.js.map +0 -1
package/lib/config.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import z from "@deepseek-ai/schemastery";
2
+ import { QA_MAX_FILE_BYTES_MAX, QA_MAX_FILE_BYTES_MIN, QA_MAX_PENDING_MAX, QA_MAX_PENDING_MIN, QA_PASTED_TEXT_LINES_MAX, QA_PASTED_TEXT_LINES_MIN, } from "./attachment-rules.js";
2
3
  import { DEFAULT_QA_SURFACE_CONFIG } from "./resolve-config.js";
4
+ import { QA_PROFILE_INSTRUCTIONS_MAX_MAX, QA_PROFILE_INSTRUCTIONS_MAX_MIN, } from "./profile.js";
3
5
  // Every schema default derives from the canonical resolved defaults: the Host
4
6
  // feeds the schema-parsed config into resolveConfig, so a default that exists
5
7
  // only here would reach the resolver as an explicit value (and, for
@@ -48,21 +50,24 @@ const configSchema = z.object({
48
50
  showToolActivity: z.boolean().default(D.ui.showToolActivity),
49
51
  showReasoning: z.boolean().default(D.ui.showReasoning),
50
52
  renderMarkdown: z.boolean().default(D.ui.renderMarkdown),
51
- maxContentWidth: z
53
+ minContentWidth: z
52
54
  .number()
53
55
  .step(1)
54
56
  .min(480)
55
57
  .max(1600)
56
- .default(D.ui.maxContentWidth),
58
+ .default(D.ui.minContentWidth),
57
59
  showSessionList: z.boolean().default(D.ui.showSessionList),
58
60
  })
59
61
  .default({ ...D.ui }),
60
62
  suggestedQuestions: z.array(z.string()).default([...D.suggestedQuestions]),
63
+ thinkingPhrases: z.array(z.string()).default([...D.thinkingPhrases]),
61
64
  interaction: z
62
65
  .object({
63
- approvals: z.union(["blocked"]).default(D.interaction.approvals),
66
+ approvals: z
67
+ .union(["blocked", "interactive"])
68
+ .default(D.interaction.approvals),
64
69
  questions: z
65
- .union(["unsupported"])
70
+ .union(["unsupported", "interactive"])
66
71
  .default(D.interaction.questions),
67
72
  })
68
73
  .default({ ...D.interaction }),
@@ -77,7 +82,7 @@ const configSchema = z.object({
77
82
  .default(D.lockdown.enforceFixedWorkspace),
78
83
  enforceFixedModel: z.boolean().default(D.lockdown.enforceFixedModel),
79
84
  sandboxMode: z
80
- .union(["read-only"])
85
+ .union(["read-only", "workspace-write"])
81
86
  .default(D.lockdown.sandboxMode),
82
87
  approvalPolicy: z
83
88
  .union(["never"])
@@ -107,6 +112,9 @@ const configSchema = z.object({
107
112
  mode: D.lockdown.toolPolicy.mode,
108
113
  allow: [...D.lockdown.toolPolicy.allow],
109
114
  }),
115
+ sharedReadOnlyRoots: z
116
+ .array(z.string())
117
+ .default([...D.lockdown.sharedReadOnlyRoots]),
110
118
  })
111
119
  .default({
112
120
  ...D.lockdown,
@@ -114,6 +122,7 @@ const configSchema = z.object({
114
122
  mode: D.lockdown.toolPolicy.mode,
115
123
  allow: [...D.lockdown.toolPolicy.allow],
116
124
  },
125
+ sharedReadOnlyRoots: [...D.lockdown.sharedReadOnlyRoots],
117
126
  }),
118
127
  embedding: z
119
128
  .object({
@@ -131,8 +140,36 @@ const configSchema = z.object({
131
140
  .max(365)
132
141
  .default(D.accounts.sessionTtlDays),
133
142
  showOtherUsersChats: z.boolean().default(D.accounts.showOtherUsersChats),
143
+ perUserWorkspace: z.boolean().default(D.accounts.perUserWorkspace),
144
+ profile: z
145
+ .object({
146
+ enabled: z.boolean().default(D.accounts.profile.enabled),
147
+ inject: z.boolean().default(D.accounts.profile.inject),
148
+ identities: z
149
+ .array(z.object({
150
+ key: z.string().required(),
151
+ label: z.string(),
152
+ }))
153
+ .default([]),
154
+ instructionsMaxLength: z
155
+ .number()
156
+ .step(1)
157
+ .min(QA_PROFILE_INSTRUCTIONS_MAX_MIN)
158
+ .max(QA_PROFILE_INSTRUCTIONS_MAX_MAX)
159
+ .default(D.accounts.profile.instructionsMaxLength),
160
+ })
161
+ .default({
162
+ ...D.accounts.profile,
163
+ identities: [...D.accounts.profile.identities],
164
+ }),
134
165
  })
135
- .default({ ...D.accounts }),
166
+ .default({
167
+ ...D.accounts,
168
+ profile: {
169
+ ...D.accounts.profile,
170
+ identities: [...D.accounts.profile.identities],
171
+ },
172
+ }),
136
173
  entry: z
137
174
  .object({
138
175
  redirectNonLoopback: z.boolean().default(D.entry.redirectNonLoopback),
@@ -225,6 +262,9 @@ const configSchema = z.object({
225
262
  markIncompleteOpaqueRuns: z
226
263
  .boolean()
227
264
  .default(D.sources.subagents.markIncompleteOpaqueRuns),
265
+ validateReportedSources: z
266
+ .boolean()
267
+ .default(D.sources.subagents.validateReportedSources),
228
268
  })
229
269
  .default({ ...D.sources.subagents }),
230
270
  legacy: z
@@ -245,6 +285,36 @@ const configSchema = z.object({
245
285
  subagents: { ...D.sources.subagents },
246
286
  legacy: { ...D.sources.legacy },
247
287
  }),
288
+ attachments: z
289
+ .object({
290
+ textFiles: z.boolean().default(D.attachments.textFiles),
291
+ pastedTextLines: z
292
+ .number()
293
+ .step(1)
294
+ .min(QA_PASTED_TEXT_LINES_MIN)
295
+ .max(QA_PASTED_TEXT_LINES_MAX)
296
+ .default(D.attachments.pastedTextLines),
297
+ maxFileBytes: z
298
+ .number()
299
+ .step(1)
300
+ .min(QA_MAX_FILE_BYTES_MIN)
301
+ .max(QA_MAX_FILE_BYTES_MAX)
302
+ .default(D.attachments.maxFileBytes),
303
+ maxPending: z
304
+ .number()
305
+ .step(1)
306
+ .min(QA_MAX_PENDING_MIN)
307
+ .max(QA_MAX_PENDING_MAX)
308
+ .default(D.attachments.maxPending),
309
+ // Free-form here: the resolver normalizes (lowercase, leading dots
310
+ // stripped) and drops malformed entries, so a schema-level union would
311
+ // only duplicate that rule.
312
+ extensions: z.array(z.string()).default([...D.attachments.extensions]),
313
+ })
314
+ .default({
315
+ ...D.attachments,
316
+ extensions: [...D.attachments.extensions],
317
+ }),
248
318
  });
249
319
  export const ConfigSchema = configSchema;
250
320
  export { DEFAULT_QA_SURFACE_CONFIG, normalizeRoutePath, resolveConfig, } from "./resolve-config.js";
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { QA_NAVIGATION_MARKER } from "./navigation-marker.js";
2
+ import { qaStorageNamespace } from "./shared/session-key.js";
2
3
  /**
3
4
  * The operator/LAN split is decided client-side on `location.hostname` on
4
5
  * purpose: behind the qa-deploy proxy every request appears loopback to the
@@ -9,7 +10,7 @@ import { QA_NAVIGATION_MARKER } from "./navigation-marker.js";
9
10
  export function entryRedirectScript(config) {
10
11
  const routePath = JSON.stringify(config.route.path);
11
12
  const marker = JSON.stringify(QA_NAVIGATION_MARKER);
12
- const flagKey = JSON.stringify(`${config.session.storageKey}:v1:${config.route.path}:entry-ui`);
13
+ const flagKey = JSON.stringify(`${qaStorageNamespace(config)}:entry-ui`);
13
14
  return [
14
15
  "(function(){try{",
15
16
  "var s=new URLSearchParams(location.search);",
@@ -1 +1 @@
1
- {"version":3,"file":"entry-redirect.js","sourceRoot":"","sources":["../src/entry-redirect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA+B;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAC5B,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,CAChE,CAAC;IACF,OAAO;QACL,kBAAkB;QAClB,6CAA6C;QAC7C,YAAY,MAAM,WAAW;QAC7B,SAAS,OAAO,GAAG;QACnB,qBAAqB;QACrB,yEAAyE;QACzE,0DAA0D;QAC1D,qDAAqD;QACrD,wBAAwB;QACxB,0BAA0B;QAC1B,4GAA4G;QAC5G,4BAA4B;QAC5B,SAAS;QACT,IAAI;QACJ,kBAAkB;KACnB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA+B;IAE/B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAC3E,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"entry-redirect.js","sourceRoot":"","sources":["../src/entry-redirect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA+B;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACzE,OAAO;QACL,kBAAkB;QAClB,6CAA6C;QAC7C,YAAY,MAAM,WAAW;QAC7B,SAAS,OAAO,GAAG;QACnB,qBAAqB;QACrB,yEAAyE;QACzE,0DAA0D;QAC1D,qDAAqD;QACrD,wBAAwB;QACxB,0BAA0B;QAC1B,4GAA4G;QAC5G,4BAA4B;QAC5B,SAAS;QACT,IAAI;QACJ,kBAAkB;KACnB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA+B;IAE/B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAC3E,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC"}
package/lib/index.js CHANGED
@@ -32,17 +32,25 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
32
32
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
33
33
  done = true;
34
34
  };
35
+ import { randomUUID } from "node:crypto";
35
36
  import { Remote, TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
37
+ import { SessionId } from "@deepseek-ai/dsh-session/types";
38
+ import { WorkspaceId } from "@deepseek-ai/dsh-workspace";
36
39
  import { createHostLoggerSink, getPluginLogger, } from "@yadsh/dsh-plugin-log";
37
40
  import { ConfigSchema, resolveConfig } from "./config.js";
38
- import { QaAccounts, QaAccountsError, defaultAccountsFilePath, } from "./accounts/store.js";
41
+ import { createQaAccountRemotes } from "./account-remotes.js";
42
+ import { QaApprovalGate } from "./approvals.js";
39
43
  import { QaAttestationError } from "./attestation.js";
44
+ import { QaQuestionGate } from "./questions.js";
45
+ import { QaSessionOwnership } from "./session-ownership.js";
40
46
  import { entryRedirectRow } from "./entry-redirect.js";
41
47
  import { registerQaNavigationRoute } from "./host-route.js";
42
48
  import { makeLaunchTokenSource } from "./launch-token.js";
43
49
  import { QaPolicyAdmission } from "./secure-session.js";
50
+ import { QaPromptNotes } from "./prompt-notes.js";
44
51
  import { QaProvenanceHost } from "./provenance/host-store.js";
45
52
  import { readSourceFilePreview } from "./provenance/file-preview.js";
53
+ import { existingQaUserWorkspace, prepareQaUserWorkspace, } from "./user-workspace.js";
46
54
  export const name = "qa-surface";
47
55
  export const inject = [
48
56
  "agents",
@@ -52,11 +60,15 @@ export const inject = [
52
60
  "tools",
53
61
  "systemPrompt",
54
62
  "workspaceRegistry",
63
+ "sessionController",
55
64
  ];
56
- export const QA_SURFACE_SETTINGS_NAMESPACE = "qa-surface";
65
+ // One home for the namespace: the browser card binds to the same constant
66
+ // through `src/shared/settings.ts`, which avoids importing this module (and
67
+ // schemastery with it) into the page.
68
+ import { QA_SURFACE_SETTINGS_NAMESPACE } from "./shared/settings.js";
69
+ export { QA_SURFACE_SETTINGS_NAMESPACE };
57
70
  export const Config = ConfigSchema;
58
71
  const CONFIGURATION_ERROR = "Assistant configuration is unavailable.";
59
- const ACCOUNTS_DISABLED_ERROR = "QA accounts are not enabled on this deployment.";
60
72
  /** The `(reason: <code>)` marker contract shared with the attestation path. */
61
73
  const ACCOUNTS_REASON_MARKER = /\(reason: ([a-z-]+)\)/u;
62
74
  /** Host companion: validates config, owns the admission boundary and the route. */
@@ -69,9 +81,16 @@ let QaSurface = (() => {
69
81
  let _accountsClaimSessions_decorators;
70
82
  let _accountsOwnedSessions_decorators;
71
83
  let _accountsListOwnership_decorators;
84
+ let _accountsUpdateProfile_decorators;
72
85
  let _describe_decorators;
86
+ let _createSession_decorators;
73
87
  let _secureSession_decorators;
74
88
  let _sources_decorators;
89
+ let _pendingApprovals_decorators;
90
+ let _answerApproval_decorators;
91
+ let _pendingQuestions_decorators;
92
+ let _answerQuestion_decorators;
93
+ let _cancelQuestion_decorators;
75
94
  let _readSourceFile_decorators;
76
95
  return class QaSurface extends _classSuper {
77
96
  static {
@@ -82,9 +101,16 @@ let QaSurface = (() => {
82
101
  _accountsClaimSessions_decorators = [Remote("accountsClaimSessions")];
83
102
  _accountsOwnedSessions_decorators = [Remote("accountsOwnedSessions")];
84
103
  _accountsListOwnership_decorators = [Remote("accountsListOwnership")];
104
+ _accountsUpdateProfile_decorators = [Remote("accountsUpdateProfile")];
85
105
  _describe_decorators = [Remote("describe")];
106
+ _createSession_decorators = [Remote("createSession")];
86
107
  _secureSession_decorators = [Remote("secureSession")];
87
108
  _sources_decorators = [Remote("sources")];
109
+ _pendingApprovals_decorators = [Remote("pendingApprovals")];
110
+ _answerApproval_decorators = [Remote("answerApproval")];
111
+ _pendingQuestions_decorators = [Remote("pendingQuestions")];
112
+ _answerQuestion_decorators = [Remote("answerQuestion")];
113
+ _cancelQuestion_decorators = [Remote("cancelQuestion")];
88
114
  _readSourceFile_decorators = [Remote("readSourceFile")];
89
115
  __esDecorate(this, null, _accountsRegister_decorators, { kind: "method", name: "accountsRegister", static: false, private: false, access: { has: obj => "accountsRegister" in obj, get: obj => obj.accountsRegister }, metadata: _metadata }, null, _instanceExtraInitializers);
90
116
  __esDecorate(this, null, _accountsLogin_decorators, { kind: "method", name: "accountsLogin", static: false, private: false, access: { has: obj => "accountsLogin" in obj, get: obj => obj.accountsLogin }, metadata: _metadata }, null, _instanceExtraInitializers);
@@ -92,9 +118,16 @@ let QaSurface = (() => {
92
118
  __esDecorate(this, null, _accountsClaimSessions_decorators, { kind: "method", name: "accountsClaimSessions", static: false, private: false, access: { has: obj => "accountsClaimSessions" in obj, get: obj => obj.accountsClaimSessions }, metadata: _metadata }, null, _instanceExtraInitializers);
93
119
  __esDecorate(this, null, _accountsOwnedSessions_decorators, { kind: "method", name: "accountsOwnedSessions", static: false, private: false, access: { has: obj => "accountsOwnedSessions" in obj, get: obj => obj.accountsOwnedSessions }, metadata: _metadata }, null, _instanceExtraInitializers);
94
120
  __esDecorate(this, null, _accountsListOwnership_decorators, { kind: "method", name: "accountsListOwnership", static: false, private: false, access: { has: obj => "accountsListOwnership" in obj, get: obj => obj.accountsListOwnership }, metadata: _metadata }, null, _instanceExtraInitializers);
121
+ __esDecorate(this, null, _accountsUpdateProfile_decorators, { kind: "method", name: "accountsUpdateProfile", static: false, private: false, access: { has: obj => "accountsUpdateProfile" in obj, get: obj => obj.accountsUpdateProfile }, metadata: _metadata }, null, _instanceExtraInitializers);
95
122
  __esDecorate(this, null, _describe_decorators, { kind: "method", name: "describe", static: false, private: false, access: { has: obj => "describe" in obj, get: obj => obj.describe }, metadata: _metadata }, null, _instanceExtraInitializers);
123
+ __esDecorate(this, null, _createSession_decorators, { kind: "method", name: "createSession", static: false, private: false, access: { has: obj => "createSession" in obj, get: obj => obj.createSession }, metadata: _metadata }, null, _instanceExtraInitializers);
96
124
  __esDecorate(this, null, _secureSession_decorators, { kind: "method", name: "secureSession", static: false, private: false, access: { has: obj => "secureSession" in obj, get: obj => obj.secureSession }, metadata: _metadata }, null, _instanceExtraInitializers);
97
125
  __esDecorate(this, null, _sources_decorators, { kind: "method", name: "sources", static: false, private: false, access: { has: obj => "sources" in obj, get: obj => obj.sources }, metadata: _metadata }, null, _instanceExtraInitializers);
126
+ __esDecorate(this, null, _pendingApprovals_decorators, { kind: "method", name: "pendingApprovals", static: false, private: false, access: { has: obj => "pendingApprovals" in obj, get: obj => obj.pendingApprovals }, metadata: _metadata }, null, _instanceExtraInitializers);
127
+ __esDecorate(this, null, _answerApproval_decorators, { kind: "method", name: "answerApproval", static: false, private: false, access: { has: obj => "answerApproval" in obj, get: obj => obj.answerApproval }, metadata: _metadata }, null, _instanceExtraInitializers);
128
+ __esDecorate(this, null, _pendingQuestions_decorators, { kind: "method", name: "pendingQuestions", static: false, private: false, access: { has: obj => "pendingQuestions" in obj, get: obj => obj.pendingQuestions }, metadata: _metadata }, null, _instanceExtraInitializers);
129
+ __esDecorate(this, null, _answerQuestion_decorators, { kind: "method", name: "answerQuestion", static: false, private: false, access: { has: obj => "answerQuestion" in obj, get: obj => obj.answerQuestion }, metadata: _metadata }, null, _instanceExtraInitializers);
130
+ __esDecorate(this, null, _cancelQuestion_decorators, { kind: "method", name: "cancelQuestion", static: false, private: false, access: { has: obj => "cancelQuestion" in obj, get: obj => obj.cancelQuestion }, metadata: _metadata }, null, _instanceExtraInitializers);
98
131
  __esDecorate(this, null, _readSourceFile_decorators, { kind: "method", name: "readSourceFile", static: false, private: false, access: { has: obj => "readSourceFile" in obj, get: obj => obj.readSourceFile }, metadata: _metadata }, null, _instanceExtraInitializers);
99
132
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
100
133
  }
@@ -103,9 +136,12 @@ let QaSurface = (() => {
103
136
  source = __runInitializers(this, _instanceExtraInitializers);
104
137
  logger;
105
138
  admission;
139
+ approvals;
140
+ userQuestions;
106
141
  provenance;
107
- accounts;
108
- accountsOptions;
142
+ notes;
143
+ /** Account-remote bodies; the wire signatures stay on this class. */
144
+ accountRemotes;
109
145
  launchToken;
110
146
  webServer;
111
147
  disposeRoute;
@@ -118,14 +154,40 @@ let QaSurface = (() => {
118
154
  pluginId: "dsh-qa-surface",
119
155
  consoleSink: createHostLoggerSink(ctx.logger),
120
156
  });
157
+ this.accountRemotes = createQaAccountRemotes({
158
+ getConfig: () => this.getConfig(),
159
+ logger: this.logger,
160
+ });
121
161
  this.admission = new QaPolicyAdmission(ctx, () => this.getConfig(), this.logger,
122
162
  // Identity half of admission; no-ops while accounts stay disabled.
123
163
  {
124
164
  enforceSessionAccess: (token, sessionId) => {
125
- this.accountsFor(this.getConfig())?.ensureSessionAccess(token, sessionId);
165
+ return this.accountRemotes
166
+ .resolve(this.getConfig())
167
+ ?.ensureSessionAccess(token, sessionId);
126
168
  },
169
+ userWorkspace: (userId, registeredWorkspacePath) => existingQaUserWorkspace(registeredWorkspacePath, userId),
127
170
  });
128
171
  this.provenance = new QaProvenanceHost(ctx, () => this.getConfig());
172
+ // The one place a composed gate's `ask` becomes a decision for an attested
173
+ // chat: refused outright while approvals are blocked, parked for the
174
+ // operator's answer while they are interactive. The question seam shares
175
+ // the ownership map: one chat, one surface answering it.
176
+ const ownership = new QaSessionOwnership((sessionId) => this.admission.knowsSession(sessionId));
177
+ this.approvals = new QaApprovalGate(ctx, () => this.getConfig().interaction.approvals === "interactive", ownership, this.logger);
178
+ this.userQuestions = new QaQuestionGate(ctx, () => this.getConfig().interaction.questions === "interactive", ownership, this.logger);
179
+ this.approvals.install();
180
+ this.userQuestions.install();
181
+ // The identity note and the provenance rule ride the conversation as
182
+ // durable context messages, delegated experts included: the QA preset's
183
+ // complete persona closes the system prompt to plugins, the conversation
184
+ // stays open.
185
+ this.notes = new QaPromptNotes(ctx, {
186
+ config: () => this.getConfig(),
187
+ accounts: () => this.accountRemotes.resolve(this.getConfig()),
188
+ isQaSession: (sessionId) => this.admission.knowsSession(sessionId),
189
+ logger: this.logger,
190
+ });
129
191
  // The /qa route hands cookie-less browsers to the one-time host token
130
192
  // exchange; the proxy in the deploy kit does the same and either alone
131
193
  // suffices. Resolved lazily and once per process; unavailable bridges
@@ -133,7 +195,10 @@ let QaSurface = (() => {
133
195
  this.launchToken = makeLaunchTokenSource(() => ctx.get("connection"), (message) => this.logger.warn("entry.token-bridge", { message }));
134
196
  ctx.effect(() => async () => this.logger.close(), "dsh-qa-surface.logger");
135
197
  ctx.effect(() => () => this.admission.dispose(), "dsh-qa-surface.lockdown-policies");
198
+ ctx.effect(() => () => this.approvals.dispose(), "dsh-qa-surface.approvals");
199
+ ctx.effect(() => () => this.userQuestions.dispose(), "dsh-qa-surface.user-questions");
136
200
  ctx.effect(() => () => this.provenance.dispose(), "dsh-qa-surface.provenance");
201
+ ctx.effect(() => () => this.notes.dispose(), "dsh-qa-surface.prompt-notes");
137
202
  // The root index gains one head script: non-loopback hostnames continue
138
203
  // into /qa, the loopback operator keeps the full harness UI.
139
204
  ctx.on("webserver/index-inject", (table) => {
@@ -179,85 +244,28 @@ let QaSurface = (() => {
179
244
  getConfig() {
180
245
  return resolveConfig(this.source());
181
246
  }
182
- /**
183
- * The accounts store behind the runtime toggle. Rebuilt only when the
184
- * account-affecting options change; the file is shared across rebuilds.
185
- */
186
- accountsFor(config) {
187
- if (!config.accounts.enabled)
188
- return undefined;
189
- const options = JSON.stringify([
190
- config.accounts.sessionTtlDays,
191
- config.accounts.allowRegistration,
192
- ]);
193
- if (this.accounts === undefined || this.accountsOptions !== options) {
194
- this.accounts = new QaAccounts(defaultAccountsFilePath(), {
195
- sessionTtlDays: config.accounts.sessionTtlDays,
196
- allowRegistration: config.accounts.allowRegistration,
197
- });
198
- this.accountsOptions = options;
199
- }
200
- return this.accounts;
201
- }
202
- /** The accounts store, or the disabled refusal the browser maps to copy. */
203
- requireAccounts() {
204
- const accounts = this.accountsFor(this.getConfig());
205
- if (accounts === undefined) {
206
- throw new Error(ACCOUNTS_DISABLED_ERROR);
207
- }
208
- return accounts;
209
- }
210
- /** Account failures ride the shared `(reason: <code>)` wire marker. */
211
- accountsRemote(operation, sessionIdForLog) {
212
- try {
213
- return operation();
214
- }
215
- catch (error) {
216
- if (error instanceof QaAccountsError) {
217
- this.logger.warn("accounts.rejected", {
218
- reason: error.reason,
219
- sessionId: sessionIdForLog,
220
- });
221
- throw new Error(`QA accounts refused the request (reason: ${error.reason})`, {
222
- cause: error,
223
- });
224
- }
225
- throw error;
226
- }
227
- }
228
247
  /**
229
248
  * Self-service signup; the first account ever created becomes admin. The
230
249
  * display name derives from the email: the generated client enforces exact
231
250
  * wire arity, so an optional name parameter would still be required.
232
251
  */
233
252
  accountsRegister(email, password) {
234
- const accounts = this.requireAccounts();
235
- return this.accountsRemote(() => accounts.register(email, password));
253
+ return this.accountRemotes.register(email, password);
236
254
  }
237
255
  accountsLogin(email, password) {
238
- const accounts = this.requireAccounts();
239
- return this.accountsRemote(() => accounts.login(email, password));
256
+ return this.accountRemotes.login(email, password);
240
257
  }
241
258
  /** Identity probe; safe to call with an empty or expired token. */
242
259
  accountsWhoami(token) {
243
- if (!this.getConfig().accounts.enabled)
244
- return { authenticated: false };
245
- const accounts = this.requireAccounts();
246
- return this.accountsRemote(() => accounts.whoami(token));
260
+ return this.accountRemotes.whoami(token);
247
261
  }
248
262
  /** Migrate a browser's local chat index into server-side ownership. */
249
263
  accountsClaimSessions(token, sessionIds) {
250
- const accounts = this.requireAccounts();
251
- return this.accountsRemote(() => accounts.claimSessions(token, sessionIds));
264
+ return this.accountRemotes.claimSessions(token, sessionIds);
252
265
  }
253
266
  /** The token user's owned session ids; the sidebar list authority. */
254
267
  accountsOwnedSessions(token) {
255
- if (!this.getConfig().accounts.enabled)
256
- return { ids: [] };
257
- const accounts = this.requireAccounts();
258
- return this.accountsRemote(() => ({
259
- ids: accounts.ownedSessionIds(token),
260
- }));
268
+ return this.accountRemotes.ownedSessions(token);
261
269
  }
262
270
  /**
263
271
  * Every chat-ownership entry with owner display names; the cross-user view
@@ -265,12 +273,16 @@ let QaSurface = (() => {
265
273
  * the dedicated reason, anonymous ones with auth-required.
266
274
  */
267
275
  accountsListOwnership(token) {
268
- if (!this.getConfig().accounts.enabled)
269
- return { entries: [] };
270
- const accounts = this.requireAccounts();
271
- return this.accountsRemote(() => ({
272
- entries: accounts.listOwnership(token),
273
- }));
276
+ return this.accountRemotes.listOwnership(token);
277
+ }
278
+ /**
279
+ * Replace the caller's own self-declared profile. The token is the only
280
+ * identity the wire carries: a browser can never name a profile but its own,
281
+ * and the deployment's declared fields and length limits are enforced in the
282
+ * store before anything is written.
283
+ */
284
+ accountsUpdateProfile(token, input) {
285
+ return this.accountRemotes.updateProfile(token, input);
274
286
  }
275
287
  /**
276
288
  * Serve the effective QA configuration to the browser. The DSH gateway pins
@@ -282,10 +294,77 @@ let QaSurface = (() => {
282
294
  describe() {
283
295
  return this.getConfig();
284
296
  }
297
+ /**
298
+ * Create a QA session from Host-owned inputs. With account workspaces on,
299
+ * cwd is `<configured workspace>/.qa-users/<account UUID>` and the child is
300
+ * intentionally not registered or attached as another DSH workspace.
301
+ */
302
+ async createSession(token) {
303
+ const config = this.getConfig();
304
+ if (config.session.policy === "fixed") {
305
+ throw new Error("Fixed QA sessions cannot be created.");
306
+ }
307
+ const id = SessionId(`session-${randomUUID()}`);
308
+ const accounts = this.accountRemotes.resolve(config);
309
+ const owner = accounts === undefined
310
+ ? undefined
311
+ : this.accountRemotes.run(() => accounts.reserveSession(token, String(id)));
312
+ let hostCreated = false;
313
+ try {
314
+ let userCwd;
315
+ if (config.accounts.perUserWorkspace) {
316
+ const workspaceId = config.session.workspaceId;
317
+ if (owner === undefined || workspaceId === null) {
318
+ throw new Error("Per-user QA workspace configuration is unavailable.");
319
+ }
320
+ const workspace = this.ctx.workspaceRegistry.get(WorkspaceId(workspaceId));
321
+ if (workspace === undefined) {
322
+ throw new Error(`Configured QA workspace ${workspaceId} is unavailable.`);
323
+ }
324
+ userCwd = prepareQaUserWorkspace(workspace.path, owner.id);
325
+ }
326
+ const created = await this.ctx.sessionController.create({
327
+ sessionId: id,
328
+ ...(userCwd !== undefined
329
+ ? { cwd: userCwd }
330
+ : config.session.workspaceId !== null
331
+ ? { workspaceId: WorkspaceId(config.session.workspaceId) }
332
+ : config.session.cwd !== null
333
+ ? { cwd: config.session.cwd }
334
+ : {}),
335
+ ...(config.session.agentPreset === null
336
+ ? {}
337
+ : { agentPreset: config.session.agentPreset }),
338
+ });
339
+ hostCreated = true;
340
+ if (config.session.provider !== null && config.session.model !== null) {
341
+ await this.ctx.sessionController.selectModel({
342
+ sessionId: created.sessionId,
343
+ provider: config.session.provider,
344
+ model: config.session.model,
345
+ ...(config.session.reasoningEffort === null
346
+ ? {}
347
+ : { reasoningEffort: config.session.reasoningEffort }),
348
+ });
349
+ }
350
+ await this.admission.secureSession(token, String(created.sessionId));
351
+ return String(created.sessionId);
352
+ }
353
+ catch (error) {
354
+ if (!hostCreated && owner !== undefined) {
355
+ accounts?.releaseSessionReservation(owner.id, String(id));
356
+ }
357
+ this.logger.error("session.create-rejected", {
358
+ sessionId: String(id),
359
+ error: error instanceof Error ? error.message : String(error),
360
+ });
361
+ throw new Error("Unable to create a QA session.", { cause: error });
362
+ }
363
+ }
285
364
  /** Pin and attest the effective policy. The browser supplies identity only. */
286
- secureSession(token, sessionId) {
365
+ async secureSession(token, sessionId) {
287
366
  try {
288
- return this.admission.secureSession(token, sessionId);
367
+ return await this.admission.secureSession(token, sessionId);
289
368
  }
290
369
  catch (error) {
291
370
  // The carrier empties error.details, so the coarse reason rides the
@@ -305,13 +384,52 @@ let QaSurface = (() => {
305
384
  }
306
385
  }
307
386
  /** Return canonical Host snapshots; replay is rebuilt from qa/sources events. */
308
- sources(token, sessionId) {
309
- this.admission.secureSession(token, sessionId);
387
+ async sources(token, sessionId) {
388
+ await this.admission.secureSession(token, sessionId);
310
389
  return this.provenance.bundles(sessionId);
311
390
  }
391
+ /**
392
+ * The tool calls of one chat that wait for the operator. Read-only: a
393
+ * deployment with blocked approvals answers with an empty list.
394
+ */
395
+ async pendingApprovals(token, sessionId) {
396
+ await this.admission.secureSession(token, sessionId);
397
+ return this.approvals.list(sessionId);
398
+ }
399
+ /**
400
+ * Apply the operator's answer to one parked call. The id must belong to a
401
+ * request of this chat; an answer that lost the race (the turn was stopped,
402
+ * the agent went away) is refused with `false`.
403
+ */
404
+ async answerApproval(token, sessionId, requestId, decision) {
405
+ await this.admission.secureSession(token, sessionId);
406
+ return this.approvals.answer(sessionId, requestId, decision);
407
+ }
408
+ /**
409
+ * The questions of one chat that wait for the operator. Read-only: a
410
+ * deployment with unsupported questions answers with an empty list.
411
+ */
412
+ async pendingQuestions(token, sessionId) {
413
+ await this.admission.secureSession(token, sessionId);
414
+ return this.userQuestions.list(sessionId);
415
+ }
416
+ /**
417
+ * Apply the operator's answers to one parked question request. Every question
418
+ * of the request must be present in `answers`; one the browser omits reads as
419
+ * a skip.
420
+ */
421
+ async answerQuestion(token, sessionId, requestId, answers) {
422
+ await this.admission.secureSession(token, sessionId);
423
+ return this.userQuestions.answer(sessionId, requestId, answers);
424
+ }
425
+ /** Close a parked question request without answering it. */
426
+ async cancelQuestion(token, sessionId, requestId) {
427
+ await this.admission.secureSession(token, sessionId);
428
+ return this.userQuestions.cancel(sessionId, requestId);
429
+ }
312
430
  /** Narrow read-only preview capability for files already present as sources. */
313
431
  async readSourceFile(token, sessionId, sourcePath) {
314
- this.admission.secureSession(token, sessionId);
432
+ await this.admission.secureSession(token, sessionId);
315
433
  const config = this.getConfig().sources.filePreview;
316
434
  if (!config.enabled ||
317
435
  !this.provenance.sourceAllowed(sessionId, sourcePath)) {
@@ -360,6 +478,7 @@ export { entryRedirectRow, entryRedirectScript } from "./entry-redirect.js";
360
478
  export { registerQaNavigationRoute } from "./host-route.js";
361
479
  export { qaToolDenial, qaToolPolicyPlan } from "./lockdown-policy.js";
362
480
  export { QaPolicyAdmission } from "./secure-session.js";
481
+ export { QaPromptNotes, renderUserIdentity, QA_IDENTITY_NOTE, QA_SOURCES_NOTE, } from "./prompt-notes.js";
363
482
  export * from "./provenance/index.js";
364
483
  export default QaSurface;
365
484
  //# sourceMappingURL=index.js.map