@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.
- package/README.md +192 -15
- package/cordis.patch.yml +8 -0
- package/lib/account-remotes.js +100 -0
- package/lib/account-remotes.js.map +1 -0
- package/lib/accounts/credentials.js +35 -0
- package/lib/accounts/credentials.js.map +1 -0
- package/lib/accounts/errors.js +9 -0
- package/lib/accounts/errors.js.map +1 -0
- package/lib/accounts/file.js +101 -0
- package/lib/accounts/file.js.map +1 -0
- package/lib/accounts/store.js +159 -161
- package/lib/accounts/store.js.map +1 -1
- package/lib/accounts/token.js +61 -0
- package/lib/accounts/token.js.map +1 -0
- package/lib/approvals.js +179 -0
- package/lib/approvals.js.map +1 -0
- package/lib/attachment-rules.js +111 -0
- package/lib/attachment-rules.js.map +1 -0
- package/lib/cli.js +132 -9
- package/lib/cli.js.map +1 -1
- package/lib/client/QaAccountsController.js +32 -2
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaSessionController.js +140 -65
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +134 -107
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +71 -6
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/approvals.js +104 -0
- package/lib/client/approvals.js.map +1 -0
- package/lib/client/attachments.js +150 -0
- package/lib/client/attachments.js.map +1 -0
- package/lib/client/attestation.js +4 -1
- package/lib/client/attestation.js.map +1 -1
- package/lib/client/base64.js +16 -0
- package/lib/client/base64.js.map +1 -0
- package/lib/client/chat-files.js +48 -0
- package/lib/client/chat-files.js.map +1 -0
- package/lib/client/components/Markdown.js +1 -1
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaApproval.js +23 -0
- package/lib/client/components/QaApproval.js.map +1 -0
- package/lib/client/components/QaChangelog.js +62 -19
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaComposer.js +56 -74
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaFileAttachment.js +19 -0
- package/lib/client/components/QaFileAttachment.js.map +1 -0
- package/lib/client/components/QaFilesPanel.js +45 -0
- package/lib/client/components/QaFilesPanel.js.map +1 -0
- package/lib/client/components/QaHeader.js +34 -0
- package/lib/client/components/QaHeader.js.map +1 -0
- package/lib/client/components/QaMessage.js +17 -4
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModal.js +31 -0
- package/lib/client/components/QaModal.js.map +1 -0
- package/lib/client/components/QaProfile.js +64 -0
- package/lib/client/components/QaProfile.js.map +1 -0
- package/lib/client/components/QaQuestions.js +96 -0
- package/lib/client/components/QaQuestions.js.map +1 -0
- package/lib/client/components/QaRightRail.js +15 -0
- package/lib/client/components/QaRightRail.js.map +1 -0
- package/lib/client/components/QaSidebar.js +6 -1
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/{QaSourcesDrawer.js → QaSourcesPanel.js} +3 -3
- package/lib/client/components/QaSourcesPanel.js.map +1 -0
- package/lib/client/components/QaTurnRail.js +15 -0
- package/lib/client/components/QaTurnRail.js.map +1 -1
- package/lib/client/components/QaWidthHandle.js +25 -20
- package/lib/client/components/QaWidthHandle.js.map +1 -1
- package/lib/client/components/QaWorkGroup.js +19 -20
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/components/surface-utils.js +28 -0
- package/lib/client/components/surface-utils.js.map +1 -0
- package/lib/client/components/thinking-phrases.js +24 -0
- package/lib/client/components/thinking-phrases.js.map +1 -0
- package/lib/client/create-session.js +7 -32
- package/lib/client/create-session.js.map +1 -1
- package/lib/client/failure-copy.js +63 -0
- package/lib/client/failure-copy.js.map +1 -0
- package/lib/client/index.js +49 -7
- package/lib/client/index.js.map +1 -1
- package/lib/client/project-session-state.js +5 -3
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/prompt-content.js +54 -0
- package/lib/client/prompt-content.js.map +1 -0
- package/lib/client/questions.js +114 -0
- package/lib/client/questions.js.map +1 -0
- package/lib/client/settings/card.js +143 -0
- package/lib/client/settings/card.js.map +1 -0
- package/lib/client/settings/fields.js +145 -0
- package/lib/client/settings/fields.js.map +1 -0
- package/lib/client/settings/format.js +255 -0
- package/lib/client/settings/format.js.map +1 -0
- package/lib/client/settings/sections/access.js +25 -0
- package/lib/client/settings/sections/access.js.map +1 -0
- package/lib/client/settings/sections/accounts.js +47 -0
- package/lib/client/settings/sections/accounts.js.map +1 -0
- package/lib/client/settings/sections/attachments.js +46 -0
- package/lib/client/settings/sections/attachments.js.map +1 -0
- package/lib/client/settings/sections/branding.js +28 -0
- package/lib/client/settings/sections/branding.js.map +1 -0
- package/lib/client/settings/sections/common.js +20 -0
- package/lib/client/settings/sections/common.js.map +1 -0
- package/lib/client/settings/sections/embedding.js +19 -0
- package/lib/client/settings/sections/embedding.js.map +1 -0
- package/lib/client/settings/sections/interface.js +60 -0
- package/lib/client/settings/sections/interface.js.map +1 -0
- package/lib/client/settings/sections/lockdown.js +82 -0
- package/lib/client/settings/sections/lockdown.js.map +1 -0
- package/lib/client/settings/sections/session.js +53 -0
- package/lib/client/settings/sections/session.js.map +1 -0
- package/lib/client/settings/sections/sources.js +74 -0
- package/lib/client/settings/sections/sources.js.map +1 -0
- package/lib/client/settings/sections/status.js +37 -0
- package/lib/client/settings/sections/status.js.map +1 -0
- package/lib/client/settings/sections.js +23 -0
- package/lib/client/settings/sections.js.map +1 -0
- package/lib/client/settings/styles.js +57 -0
- package/lib/client/settings/styles.js.map +1 -0
- package/lib/client/stream-publisher.js +47 -0
- package/lib/client/stream-publisher.js.map +1 -0
- package/lib/client/styles.js +127 -19
- package/lib/client/styles.js.map +1 -1
- package/lib/client/types.js +2 -0
- package/lib/client/types.js.map +1 -1
- package/lib/client/use-right-rail.js +96 -0
- package/lib/client/use-right-rail.js.map +1 -0
- package/lib/client/use-session-ui-state.js +26 -19
- package/lib/client/use-session-ui-state.js.map +1 -1
- package/lib/client.js +5694 -813
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/accounts.js +60 -0
- package/lib/config-resolvers/accounts.js.map +1 -0
- package/lib/config-resolvers/attachments.js +28 -0
- package/lib/config-resolvers/attachments.js.map +1 -0
- package/lib/config-resolvers/basics.js +61 -0
- package/lib/config-resolvers/basics.js.map +1 -0
- package/lib/config-resolvers/defaults.js +136 -0
- package/lib/config-resolvers/defaults.js.map +1 -0
- package/lib/config-resolvers/lockdown.js +90 -0
- package/lib/config-resolvers/lockdown.js.map +1 -0
- package/lib/config-resolvers/session.js +42 -0
- package/lib/config-resolvers/session.js.map +1 -0
- package/lib/config-resolvers/shared.js +51 -0
- package/lib/config-resolvers/shared.js.map +1 -0
- package/lib/config-resolvers/sources.js +83 -0
- package/lib/config-resolvers/sources.js.map +1 -0
- package/lib/config-resolvers/ui.js +20 -0
- package/lib/config-resolvers/ui.js.map +1 -0
- package/lib/config.js +76 -6
- package/lib/config.js.map +1 -1
- package/lib/entry-redirect.js +2 -1
- package/lib/entry-redirect.js.map +1 -1
- package/lib/index.js +198 -79
- package/lib/index.js.map +1 -1
- package/lib/profile.js +214 -0
- package/lib/profile.js.map +1 -0
- package/lib/prompt-notes.js +231 -0
- package/lib/prompt-notes.js.map +1 -0
- package/lib/provenance/host-store.js +25 -9
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/provenance/reported.js +37 -12
- package/lib/provenance/reported.js.map +1 -1
- package/lib/questions.js +185 -0
- package/lib/questions.js.map +1 -0
- package/lib/resolve-config.js +35 -410
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +139 -21
- package/lib/secure-session.js.map +1 -1
- package/lib/session-ownership.js +55 -0
- package/lib/session-ownership.js.map +1 -0
- package/lib/shared/session-key.js +18 -0
- package/lib/shared/session-key.js.map +1 -0
- package/lib/shared/settings.js +10 -0
- package/lib/shared/settings.js.map +1 -0
- package/lib/thinking-phrases.js +68 -0
- package/lib/thinking-phrases.js.map +1 -0
- package/lib/typert.host.js +506 -21
- package/lib/typert.remote-client.d.ts +15 -1
- package/lib/typert.remote-client.js +407 -15
- package/lib/types/account-remotes.d.ts +42 -0
- package/lib/types/accounts/credentials.d.ts +20 -0
- package/lib/types/accounts/errors.d.ts +11 -0
- package/lib/types/accounts/file.d.ts +82 -0
- package/lib/types/accounts/store.d.ts +74 -43
- package/lib/types/accounts/token.d.ts +31 -0
- package/lib/types/approvals.d.ts +65 -0
- package/lib/types/attachment-rules.d.ts +44 -0
- package/lib/types/cli.d.ts +2 -2
- package/lib/types/client/QaAccountsController.d.ts +8 -1
- package/lib/types/client/QaSessionController.d.ts +53 -16
- package/lib/types/client/QaSurface.d.ts +14 -1
- package/lib/types/client/approvals.d.ts +39 -0
- package/lib/types/client/attachments.d.ts +54 -0
- package/lib/types/client/base64.d.ts +10 -0
- package/lib/types/client/chat-files.d.ts +30 -0
- package/lib/types/client/components/QaApproval.d.ts +13 -0
- package/lib/types/client/components/QaChangelog.d.ts +1 -1
- package/lib/types/client/components/QaComposer.d.ts +8 -4
- package/lib/types/client/components/QaFileAttachment.d.ts +14 -0
- package/lib/types/client/components/QaFilesPanel.d.ts +15 -0
- package/lib/types/client/components/QaHeader.d.ts +41 -0
- package/lib/types/client/components/QaMessage.d.ts +3 -1
- package/lib/types/client/components/QaModal.d.ts +26 -0
- package/lib/types/client/components/QaProfile.d.ts +25 -0
- package/lib/types/client/components/QaQuestions.d.ts +13 -0
- package/lib/types/client/components/QaRightRail.d.ts +23 -0
- package/lib/types/client/components/QaSidebar.d.ts +14 -0
- package/lib/types/client/components/{QaSourcesDrawer.d.ts → QaSourcesPanel.d.ts} +7 -4
- package/lib/types/client/components/QaTurnRail.d.ts +6 -0
- package/lib/types/client/components/QaWidthHandle.d.ts +14 -7
- package/lib/types/client/components/QaWorkGroup.d.ts +5 -3
- package/lib/types/client/components/surface-utils.d.ts +11 -0
- package/lib/types/client/components/thinking-phrases.d.ts +9 -0
- package/lib/types/client/create-session.d.ts +6 -9
- package/lib/types/client/failure-copy.d.ts +19 -0
- package/lib/types/client/project-session-state.d.ts +8 -1
- package/lib/types/client/prompt-content.d.ts +30 -0
- package/lib/types/client/questions.d.ts +45 -0
- package/lib/types/client/settings/card.d.ts +23 -0
- package/lib/types/client/settings/fields.d.ts +139 -0
- package/lib/types/client/settings/format.d.ts +108 -0
- package/lib/types/client/settings/sections/access.d.ts +9 -0
- package/lib/types/client/settings/sections/accounts.d.ts +9 -0
- package/lib/types/client/settings/sections/attachments.d.ts +15 -0
- package/lib/types/client/settings/sections/branding.d.ts +8 -0
- package/lib/types/client/settings/sections/common.d.ts +28 -0
- package/lib/types/client/settings/sections/embedding.d.ts +8 -0
- package/lib/types/client/settings/sections/interface.d.ts +9 -0
- package/lib/types/client/settings/sections/lockdown.d.ts +9 -0
- package/lib/types/client/settings/sections/session.d.ts +9 -0
- package/lib/types/client/settings/sections/sources.d.ts +9 -0
- package/lib/types/client/settings/sections/status.d.ts +22 -0
- package/lib/types/client/settings/sections.d.ts +25 -0
- package/lib/types/client/settings/styles.d.ts +8 -0
- package/lib/types/client/stream-publisher.d.ts +28 -0
- package/lib/types/client/types.d.ts +76 -1
- package/lib/types/client/use-right-rail.d.ts +56 -0
- package/lib/types/client/use-session-ui-state.d.ts +13 -7
- package/lib/types/config-resolvers/accounts.d.ts +15 -0
- package/lib/types/config-resolvers/attachments.d.ts +6 -0
- package/lib/types/config-resolvers/basics.d.ts +8 -0
- package/lib/types/config-resolvers/defaults.d.ts +4 -0
- package/lib/types/config-resolvers/lockdown.d.ts +10 -0
- package/lib/types/config-resolvers/session.d.ts +6 -0
- package/lib/types/config-resolvers/shared.d.ts +23 -0
- package/lib/types/config-resolvers/sources.d.ts +6 -0
- package/lib/types/config-resolvers/ui.d.ts +6 -0
- package/lib/types/index.d.ts +48 -15
- package/lib/types/profile.d.ts +76 -0
- package/lib/types/prompt-notes.d.ts +110 -0
- package/lib/types/provenance/reported.d.ts +9 -1
- package/lib/types/questions.d.ts +83 -0
- package/lib/types/resolve-config.d.ts +8 -3
- package/lib/types/secure-session.d.ts +46 -2
- package/lib/types/session-ownership.d.ts +30 -0
- package/lib/types/shared/session-key.d.ts +23 -0
- package/lib/types/shared/settings.d.ts +10 -0
- package/lib/types/thinking-phrases.d.ts +17 -0
- package/lib/types/types.d.ts +203 -9
- package/lib/types/user-workspace.d.ts +42 -0
- package/lib/user-workspace.js +246 -0
- package/lib/user-workspace.js.map +1 -0
- package/package.json +15 -8
- package/CHANGELOG.md +0 -176
- package/SPEC-dsh-qa-surface.md +0 -2425
- package/docs/ARCHITECTURE.md +0 -66
- package/docs/COMPATIBILITY.md +0 -14
- package/docs/CONFIGURATION.md +0 -199
- package/docs/EMBEDDING.md +0 -13
- package/docs/SOURCES-MIGRATION.md +0 -28
- package/docs/SOURCES-PROVENANCE-AUDIT.md +0 -88
- package/docs/SPEC-dsh-qa-surface-accounts.md +0 -219
- package/docs/SPEC-dsh-qa-surface-sources-provenance.md +0 -1692
- 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
|
-
|
|
53
|
+
minContentWidth: z
|
|
52
54
|
.number()
|
|
53
55
|
.step(1)
|
|
54
56
|
.min(480)
|
|
55
57
|
.max(1600)
|
|
56
|
-
.default(D.ui.
|
|
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
|
|
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({
|
|
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":"AAAA,OAAO,CAAC,MAAM,0BAA0B,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,8EAA8E;AAC9E,8EAA8E;AAC9E,oEAAoE;AACpE,yEAAyE;AACzE,MAAM,CAAC,GAAG,yBAAyB,CAAC;AAEpC,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE5D,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACvC,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACtC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;KAC1D,CAAC;SACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1B,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QACvD,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnD,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;KAC1D,CAAC;SACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,MAAM,EAAE,CAAC;aACN,KAAK,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,OAAO,CAAU,CAAC;aAC9D,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACpD,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1C,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1D,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QAChE,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1D,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACpD,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9C,eAAe,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;KACnE,CAAC;SACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5B,EAAE,EAAE,CAAC;SACF,MAAM,CAAC;QACN,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;QAChD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;QAC9C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QAC5C,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;QACxD,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC;QAC5D,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;QACtD,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;QACxD,eAAe,EAAE,CAAC;aACf,MAAM,EAAE;aACR,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,GAAG,CAAC;aACR,GAAG,CAAC,IAAI,CAAC;aACT,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC;QAChC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC;KAC3D,CAAC;SACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IACvB,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC1E,WAAW,EAAE,CAAC;SACX,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;QACzE,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,aAAa,CAAU,CAAC;aAC/B,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;KACpC,CAAC;SACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChD,uBAAuB,EAAE,CAAC;aACvB,OAAO,EAAE;aACT,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC9C,qBAAqB,EAAE,CAAC;aACrB,OAAO,EAAE;aACT,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC5C,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACpE,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,WAAW,CAAU,CAAC;aAC7B,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClC,cAAc,EAAE,CAAC;aACd,KAAK,CAAC,CAAC,OAAO,CAAU,CAAC;aACzB,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjE,sBAAsB,EAAE,CAAC;aACtB,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC7C,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACzE,qBAAqB,EAAE,CAAC;aACrB,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC5C,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACpE,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACzE,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACzE,yBAAyB,EAAE,CAAC;aACzB,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChD,UAAU,EAAE,CAAC;aACV,MAAM,CAAC;YACN,IAAI,EAAE,CAAC;iBACJ,KAAK,CAAC,CAAC,YAAY,CAAU,CAAC;iBAC9B,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YACtC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACrE,CAAC;aACD,OAAO,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI;YAChC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;SACxC,CAAC;KACL,CAAC;SACD,OAAO,CAAC;QACP,GAAG,CAAC,CAAC,QAAQ;QACb,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI;YAChC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;SACxC;KACF,CAAC;IACJ,SAAS,EAAE,CAAC;SACT,MAAM,CAAC;QACN,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC;KACnE,CAAC;SACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IAC9B,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChD,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACpE,cAAc,EAAE,CAAC;aACd,MAAM,EAAE;aACR,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrC,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACzE,CAAC;SACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7B,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;KACtE,CAAC;SACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1B,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/C,OAAO,EAAE,CAAC;aACP,MAAM,CAAC;YACN,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3D,gBAAgB,EAAE,CAAC;iBAChB,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;SAC/C,CAAC;aACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;aACP,MAAM,CAAC;YACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YACvD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACrD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/D,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;YACrE,gBAAgB,EAAE,CAAC;iBAChB,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC9C,2BAA2B,EAAE,CAAC;iBAC3B,MAAM,EAAE;iBACR,IAAI,CAAC,CAAC,CAAC;iBACP,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC;SAC1D,CAAC;aACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,SAAS,EAAE,CAAC;aACT,MAAM,CAAC;YACN,gCAAgC,EAAE,CAAC;iBAChC,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,gCAAgC,CAAC;YAChE,oBAAoB,EAAE,CAAC;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,CAAC,CAAC;iBACP,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC;SACrD,CAAC;aACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAClE,mBAAmB,EAAE,CAAC;iBACnB,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAChD,eAAe,EAAE,CAAC;iBACf,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;SAC7C,CAAC;aACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,WAAW,EAAE,CAAC;aACX,MAAM,CAAC;YACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC3D,yBAAyB,EAAE,CAAC;iBACzB,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC;YAC3D,cAAc,EAAE,CAAC;iBACd,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC;YAChD,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,IAAI,CAAC,CAAC,CAAC;iBACP,GAAG,CAAC,IAAI,CAAC;iBACT,GAAG,CAAC,UAAU,CAAC;iBACf,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC1C,sBAAsB,EAAE,CAAC;iBACtB,MAAM,EAAE;iBACR,IAAI,CAAC,CAAC,CAAC;iBACP,GAAG,CAAC,IAAI,CAAC;iBACT,GAAG,CAAC,UAAU,CAAC;iBACf,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC;SACzD,CAAC;aACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACxC,SAAS,EAAE,CAAC;aACT,MAAM,CAAC;YACN,cAAc,EAAE,CAAC;iBACd,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC;YAC9C,wBAAwB,EAAE,CAAC;iBACxB,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,wBAAwB,CAAC;YACxD,wBAAwB,EAAE,CAAC;iBACxB,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,wBAAwB,CAAC;SACzD,CAAC;aACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,0BAA0B,EAAE,CAAC;iBAC1B,OAAO,EAAE;iBACT,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAC;SACxD,CAAC;aACD,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KACpC,CAAC;SACD,OAAO,CAAC;QACP,GAAG,CAAC,CAAC,OAAO;QACZ,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;QACjC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;QACjC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;QACrC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE;QAC/B,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE;QACzC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;QACrC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE;KAChC,CAAC;CACL,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,YAA6C,CAAC;AAC1E,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,aAAa,GACd,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/lib/entry-redirect.js
CHANGED
|
@@ -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
|
|
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;
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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.
|
|
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
|
-
|
|
235
|
-
return this.accountsRemote(() => accounts.register(email, password));
|
|
253
|
+
return this.accountRemotes.register(email, password);
|
|
236
254
|
}
|
|
237
255
|
accountsLogin(email, password) {
|
|
238
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|