@yadsh/dsh-qa-surface 0.1.1 → 0.2.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 (89) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +162 -14
  3. package/SPEC-dsh-qa-surface.md +600 -96
  4. package/capability-policy.json +5 -0
  5. package/compatibility.json +7 -1
  6. package/cordis.patch.yml +11 -0
  7. package/docs/ARCHITECTURE.md +49 -7
  8. package/docs/COMPATIBILITY.md +5 -4
  9. package/docs/CONFIGURATION.md +96 -2
  10. package/lib/attestation.js +10 -0
  11. package/lib/attestation.js.map +1 -0
  12. package/lib/client/QaConfigController.js +111 -4
  13. package/lib/client/QaConfigController.js.map +1 -1
  14. package/lib/client/QaSessionController.js +501 -119
  15. package/lib/client/QaSessionController.js.map +1 -1
  16. package/lib/client/QaSurface.js +137 -20
  17. package/lib/client/QaSurface.js.map +1 -1
  18. package/lib/client/QaTranscriptAdapter.js +534 -45
  19. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  20. package/lib/client/attestation.js +60 -0
  21. package/lib/client/attestation.js.map +1 -0
  22. package/lib/client/chat-index.js +86 -0
  23. package/lib/client/chat-index.js.map +1 -0
  24. package/lib/client/components/Markdown.js +75 -5
  25. package/lib/client/components/Markdown.js.map +1 -1
  26. package/lib/client/components/QaAgentsDrawer.js +40 -0
  27. package/lib/client/components/QaAgentsDrawer.js.map +1 -0
  28. package/lib/client/components/QaComposer.js +132 -15
  29. package/lib/client/components/QaComposer.js.map +1 -1
  30. package/lib/client/components/QaMessage.js +184 -10
  31. package/lib/client/components/QaMessage.js.map +1 -1
  32. package/lib/client/components/QaSidebar.js +124 -0
  33. package/lib/client/components/QaSidebar.js.map +1 -0
  34. package/lib/client/components/QaSourcesDrawer.js +46 -0
  35. package/lib/client/components/QaSourcesDrawer.js.map +1 -0
  36. package/lib/client/components/QaWorkGroup.js +135 -0
  37. package/lib/client/components/QaWorkGroup.js.map +1 -0
  38. package/lib/client/components/VariantSwitcher.js +29 -0
  39. package/lib/client/components/VariantSwitcher.js.map +1 -0
  40. package/lib/client/components/format.js +48 -0
  41. package/lib/client/components/format.js.map +1 -0
  42. package/lib/client/index.js +77 -34
  43. package/lib/client/index.js.map +1 -1
  44. package/lib/client/styles.js +308 -43
  45. package/lib/client/styles.js.map +1 -1
  46. package/lib/client/types.js +13 -0
  47. package/lib/client/types.js.map +1 -0
  48. package/lib/client/wait-for.js +49 -0
  49. package/lib/client/wait-for.js.map +1 -0
  50. package/lib/client.js +8228 -383
  51. package/lib/client.js.map +1 -1
  52. package/lib/config.js +61 -9
  53. package/lib/config.js.map +1 -1
  54. package/lib/index.js +166 -70
  55. package/lib/index.js.map +1 -1
  56. package/lib/lockdown-policy.js +20 -0
  57. package/lib/lockdown-policy.js.map +1 -0
  58. package/lib/resolve-config.js +122 -10
  59. package/lib/resolve-config.js.map +1 -1
  60. package/lib/secure-session.js +170 -0
  61. package/lib/secure-session.js.map +1 -0
  62. package/lib/typert.host.d.ts +3 -0
  63. package/lib/typert.host.js +191 -0
  64. package/lib/typert.remote-client.d.ts +24 -0
  65. package/lib/typert.remote-client.js +129 -0
  66. package/lib/types/attestation.d.ts +17 -0
  67. package/lib/types/client/QaConfigController.d.ts +34 -2
  68. package/lib/types/client/QaSessionController.d.ts +106 -19
  69. package/lib/types/client/QaSurface.d.ts +5 -4
  70. package/lib/types/client/QaTranscriptAdapter.d.ts +17 -2
  71. package/lib/types/client/attestation.d.ts +25 -0
  72. package/lib/types/client/chat-index.d.ts +28 -0
  73. package/lib/types/client/components/Markdown.d.ts +7 -3
  74. package/lib/types/client/components/QaAgentsDrawer.d.ts +25 -0
  75. package/lib/types/client/components/QaComposer.d.ts +12 -2
  76. package/lib/types/client/components/QaMessage.d.ts +14 -1
  77. package/lib/types/client/components/QaSidebar.d.ts +41 -0
  78. package/lib/types/client/components/QaSourcesDrawer.d.ts +8 -0
  79. package/lib/types/client/components/QaWorkGroup.d.ts +19 -0
  80. package/lib/types/client/components/VariantSwitcher.d.ts +19 -0
  81. package/lib/types/client/components/format.d.ts +9 -0
  82. package/lib/types/client/index.d.ts +1 -5
  83. package/lib/types/client/types.d.ts +29 -0
  84. package/lib/types/client/wait-for.d.ts +11 -0
  85. package/lib/types/index.d.ts +22 -6
  86. package/lib/types/lockdown-policy.d.ts +18 -0
  87. package/lib/types/secure-session.d.ts +22 -0
  88. package/lib/types/types.d.ts +148 -1
  89. package/package.json +29 -3
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../src/resolve-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../src/resolve-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import { SessionId } from "@deepseek-ai/dsh-session";
2
+ import { WorkspaceId } from "@deepseek-ai/dsh-workspace";
3
+ import { QaAttestationError } from "./attestation.js";
4
+ import { qaToolDenial, qaToolPolicyPlan } from "./lockdown-policy.js";
5
+ /** Grace period in which a fresh session may still be pinned to the QA preset. */
6
+ const FRESH_SESSION_BOOTSTRAP_WINDOW_MS = 120_000;
7
+ /**
8
+ * Compare session cwds the way the host records them: separator- and
9
+ * case-normalized on Windows, so a deployment path written with either
10
+ * separator or case still matches the session header cwd.
11
+ */
12
+ function cwdMatches(headerCwd, pinned) {
13
+ if (headerCwd === undefined)
14
+ return false;
15
+ const normalize = (value) => value.replaceAll("\\", "/").replace(/\/+$/u, "");
16
+ const left = normalize(headerCwd);
17
+ const right = normalize(pinned);
18
+ return process.platform === "win32"
19
+ ? left.toLowerCase() === right.toLowerCase()
20
+ : left === right;
21
+ }
22
+ /**
23
+ * Host-side QA policy admission boundary — the only browser-callable operation
24
+ * that turns a session into a locked QA session. It verifies the immutable
25
+ * session composition against the effective deployment config, refuses to
26
+ * adopt a non-QA session with user history, validates the named permission
27
+ * preset, pins the scoped tool restriction plus the monotonic execution guard,
28
+ * and returns a sanitized proof. Every refusal carries only a coarse reason.
29
+ */
30
+ export class QaPolicyAdmission {
31
+ ctx;
32
+ config;
33
+ logger;
34
+ appliedPolicies = new Map();
35
+ constructor(ctx, config, logger) {
36
+ this.ctx = ctx;
37
+ this.config = config;
38
+ this.logger = logger;
39
+ ctx.on("agent/disposed", ({ agent }) => {
40
+ this.appliedPolicies.delete(agent);
41
+ });
42
+ }
43
+ secureSession(sessionId) {
44
+ const config = this.config();
45
+ const lockdown = config.lockdown;
46
+ const agent = this.ctx.agents.get(SessionId(sessionId));
47
+ if (agent === undefined) {
48
+ throw new QaAttestationError("agent-unavailable", "agent is unavailable");
49
+ }
50
+ if (!lockdown.enabled) {
51
+ return {
52
+ sessionId,
53
+ enabled: false,
54
+ agentPresetMatches: true,
55
+ workspaceMatches: true,
56
+ modelMatches: true,
57
+ sandboxIsReadOnly: false,
58
+ approvalIsNever: false,
59
+ permissionPreset: "",
60
+ toolPolicyLoaded: false,
61
+ toolAllowList: [],
62
+ };
63
+ }
64
+ const expectedWorkspace = config.session.workspaceId;
65
+ const pinnedWorkspace = expectedWorkspace === null
66
+ ? undefined
67
+ : this.ctx.workspaceRegistry.get(WorkspaceId(expectedWorkspace));
68
+ // A pin that resolves to nothing would refuse the cwd comparison anyway,
69
+ // but the precise reason saves an operator a round trip: the surface
70
+ // stays closed until the workspace exists or the id is fixed.
71
+ if (expectedWorkspace !== null && pinnedWorkspace === undefined) {
72
+ throw new QaAttestationError("workspace-unavailable", `workspace ${expectedWorkspace} is not registered`);
73
+ }
74
+ const expectedPreset = config.session.agentPreset;
75
+ const agentPresetMatches = !lockdown.enforceFixedAgentPreset ||
76
+ expectedPreset === null ||
77
+ this.ctx.agentPresets.composedPreset(agent.ctx) === expectedPreset;
78
+ const workspaceMatches = !lockdown.enforceFixedWorkspace ||
79
+ (expectedWorkspace === null && config.session.cwd === null) ||
80
+ (pinnedWorkspace !== undefined &&
81
+ cwdMatches(agent.session.header.cwd, pinnedWorkspace.path)) ||
82
+ (expectedWorkspace === null &&
83
+ config.session.cwd !== null &&
84
+ cwdMatches(agent.session.header.cwd, config.session.cwd));
85
+ const options = agent.options;
86
+ const modelMatches = !lockdown.enforceFixedModel ||
87
+ config.session.provider === null ||
88
+ (options.provider === config.session.provider &&
89
+ options.model === config.session.model &&
90
+ (config.session.reasoningEffort === null ||
91
+ options.reasoningEffort === config.session.reasoningEffort));
92
+ if (!agentPresetMatches || !workspaceMatches || !modelMatches) {
93
+ throw new QaAttestationError("composition-mismatch", `composition mismatch: agent=${agentPresetMatches} workspace=${workspaceMatches} model=${modelMatches}`);
94
+ }
95
+ const permission = this.ctx.permissionPresets.resolve(lockdown.permissionPreset);
96
+ if (permission.sandbox !== lockdown.sandboxMode ||
97
+ permission.approval !== lockdown.approvalPolicy) {
98
+ throw new QaAttestationError("permission-preset", `permission preset ${lockdown.permissionPreset} does not resolve to read-only/never`);
99
+ }
100
+ const currentPermission = this.ctx.permissionPresets.current(agent.session.events);
101
+ const hasUserHistory = agent.session.events.some((event) => event.type === "user/message");
102
+ if (currentPermission !== lockdown.permissionPreset &&
103
+ (hasUserHistory ||
104
+ Date.now() - agent.session.header.createdAt >
105
+ FRESH_SESSION_BOOTSTRAP_WINDOW_MS)) {
106
+ throw new QaAttestationError("adoption-refused", "existing non-QA session cannot be adopted");
107
+ }
108
+ const policy = qaToolPolicyPlan(lockdown.toolPolicy.allow, (toolName) => this.ctx.tools.get(toolName, agent) !== undefined);
109
+ if (policy.unknown.length > 0) {
110
+ throw new QaAttestationError("unknown-tools", `unknown QA tool(s): ${policy.unknown.join(", ")}`);
111
+ }
112
+ const fingerprint = JSON.stringify(policy.allow);
113
+ const prior = this.appliedPolicies.get(agent);
114
+ if (prior?.fingerprint !== fingerprint) {
115
+ const allowed = new Set(policy.allow);
116
+ const disposeGuard = agent.ctx.tools.guard((execution) => qaToolDenial(allowed, execution.name));
117
+ try {
118
+ const disposeRestriction = agent.ctx.tools.restrict({
119
+ allow: policy.allow,
120
+ });
121
+ this.appliedPolicies.set(agent, {
122
+ fingerprint,
123
+ disposeGuard,
124
+ disposeRestriction,
125
+ });
126
+ prior?.disposeRestriction();
127
+ prior?.disposeGuard();
128
+ }
129
+ catch (error) {
130
+ disposeGuard();
131
+ throw error;
132
+ }
133
+ }
134
+ this.ctx.permissionPresets.set(agent.session, lockdown.permissionPreset);
135
+ const effectivePermission = this.ctx.permissionPresets.current(agent.session.events);
136
+ const sandboxIsReadOnly = permission.sandbox === "read-only";
137
+ const approvalIsNever = permission.approval === "never";
138
+ if (effectivePermission !== lockdown.permissionPreset ||
139
+ !sandboxIsReadOnly ||
140
+ !approvalIsNever) {
141
+ throw new QaAttestationError("attestation-failed", "permission attestation failed");
142
+ }
143
+ this.logger.debug("lockdown.attested", {
144
+ sessionId,
145
+ permissionPreset: lockdown.permissionPreset,
146
+ toolAllowList: policy.allow,
147
+ });
148
+ return {
149
+ sessionId,
150
+ enabled: true,
151
+ agentPresetMatches,
152
+ workspaceMatches,
153
+ modelMatches,
154
+ sandboxIsReadOnly,
155
+ approvalIsNever,
156
+ permissionPreset: lockdown.permissionPreset,
157
+ toolPolicyLoaded: true,
158
+ toolAllowList: policy.allow,
159
+ };
160
+ }
161
+ /** Detach every pinned tool policy; wired as a disposal effect by the entry. */
162
+ dispose() {
163
+ for (const policy of this.appliedPolicies.values()) {
164
+ policy.disposeRestriction();
165
+ policy.disposeGuard();
166
+ }
167
+ this.appliedPolicies.clear();
168
+ }
169
+ }
170
+ //# sourceMappingURL=secure-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-session.js","sourceRoot":"","sources":["../src/secure-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from FaceModel — do not edit. */
2
+
3
+ export declare const TYPERT: unknown
@@ -0,0 +1,191 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from FaceModel — do not edit. */
2
+ import { z } from 'zod'
3
+
4
+ const _yadsh_dsh_qa_surface_qaSurface_describe_result$schema = z.object({
5
+ 'enabled': z.boolean().readonly(),
6
+ 'route': z.object({
7
+ 'path': z.string().readonly(),
8
+ 'matchChildren': z.boolean().readonly(),
9
+ }).readonly(),
10
+ 'branding': z.object({
11
+ 'title': z.string().readonly(),
12
+ 'subtitle': z.string().readonly(),
13
+ 'welcomeMessage': z.string().readonly(),
14
+ 'placeholder': z.string().readonly(),
15
+ 'logoUrl': z.union([z.literal(null), z.string()]).readonly(),
16
+ 'disclaimer': z.string().readonly(),
17
+ }).readonly(),
18
+ 'session': z.object({
19
+ 'policy': z.union([z.literal("browser-persistent"), z.literal("new-on-load"), z.literal("fixed")]).readonly(),
20
+ 'storageKey': z.string().readonly(),
21
+ 'cwd': z.union([z.literal(null), z.string()]).readonly(),
22
+ 'workspaceId': z.union([z.literal(null), z.string()]).readonly(),
23
+ 'fixedSessionId': z.union([z.literal(null), z.string()]).readonly(),
24
+ 'agentPreset': z.union([z.literal(null), z.string()]).readonly(),
25
+ 'provider': z.union([z.literal(null), z.string()]).readonly(),
26
+ 'model': z.union([z.literal(null), z.string()]).readonly(),
27
+ 'reasoningEffort': z.union([z.literal(null), z.string()]).readonly(),
28
+ }).readonly(),
29
+ 'ui': z.object({
30
+ 'showHeader': z.boolean().readonly(),
31
+ 'showReset': z.boolean().readonly(),
32
+ 'showStop': z.boolean().readonly(),
33
+ 'showTimestamps': z.boolean().readonly(),
34
+ 'showToolActivity': z.boolean().readonly(),
35
+ 'showReasoning': z.boolean().readonly(),
36
+ 'renderMarkdown': z.boolean().readonly(),
37
+ 'maxContentWidth': z.number().readonly(),
38
+ 'showSessionList': z.boolean().readonly(),
39
+ }).readonly(),
40
+ 'suggestedQuestions': z.array(z.string()).readonly(),
41
+ 'interaction': z.object({
42
+ 'approvals': z.literal("blocked").readonly(),
43
+ 'questions': z.literal("unsupported").readonly(),
44
+ }).readonly(),
45
+ 'lockdown': z.object({
46
+ 'enabled': z.boolean().readonly(),
47
+ 'enforceFixedAgentPreset': z.boolean().readonly(),
48
+ 'enforceFixedWorkspace': z.boolean().readonly(),
49
+ 'enforceFixedModel': z.boolean().readonly(),
50
+ 'sandboxMode': z.literal("read-only").readonly(),
51
+ 'approvalPolicy': z.literal("never").readonly(),
52
+ 'permissionPreset': z.string().readonly(),
53
+ 'allowPermissionChanges': z.literal(false).readonly(),
54
+ 'allowSlashCommands': z.literal(false).readonly(),
55
+ 'allowSettingsMutation': z.literal(false).readonly(),
56
+ 'allowSessionReset': z.boolean().readonly(),
57
+ 'allowSessionRename': z.literal(false).readonly(),
58
+ 'allowSessionDelete': z.literal(false).readonly(),
59
+ 'allowArbitrarySessionOpen': z.literal(false).readonly(),
60
+ 'toolPolicy': z.object({
61
+ 'mode': z.literal("allow-list").readonly(),
62
+ 'allow': z.array(z.string()).readonly(),
63
+ }).readonly(),
64
+ }).readonly(),
65
+ 'embedding': z.object({
66
+ 'frameAncestors': z.union([z.literal(null), z.string()]).readonly(),
67
+ }).readonly(),
68
+ })
69
+ const _yadsh_dsh_qa_surface_qaSurface_secureSession_parameter_0$schema = z.string()
70
+ const _yadsh_dsh_qa_surface_qaSurface_secureSession_result$schema = z.object({
71
+ 'sessionId': z.string().readonly(),
72
+ 'enabled': z.boolean().readonly(),
73
+ 'agentPresetMatches': z.boolean().readonly(),
74
+ 'workspaceMatches': z.boolean().readonly(),
75
+ 'modelMatches': z.boolean().readonly(),
76
+ 'sandboxIsReadOnly': z.boolean().readonly(),
77
+ 'approvalIsNever': z.boolean().readonly(),
78
+ 'permissionPreset': z.string().readonly(),
79
+ 'toolPolicyLoaded': z.boolean().readonly(),
80
+ 'toolAllowList': z.array(z.string()).readonly(),
81
+ })
82
+
83
+ export const TYPERT = {
84
+ package: '@yadsh/dsh-qa-surface',
85
+ face: 'host',
86
+ schemas: [
87
+ ],
88
+ invocations: [
89
+ {
90
+ id: '@yadsh/dsh-qa-surface#qaSurface/describe',
91
+ service: 'qaSurface',
92
+ namespace: 'qaSurface',
93
+ method: 'describe',
94
+ invocation: { kind: 'direct' },
95
+ parameters: [
96
+ ],
97
+ result: {
98
+ mode: 'strict',
99
+ typeSymbol: '@yadsh/dsh-qa-surface/types#ResolvedQaSurfaceConfig',
100
+ schema: _yadsh_dsh_qa_surface_qaSurface_describe_result$schema,
101
+ },
102
+ sourceLocation: {"file":"packages/dsh-qa-surface/src/index.ts","line":130,"column":3},
103
+ },
104
+ {
105
+ id: '@yadsh/dsh-qa-surface#qaSurface/secureSession',
106
+ service: 'qaSurface',
107
+ namespace: 'qaSurface',
108
+ method: 'secureSession',
109
+ invocation: { kind: 'direct' },
110
+ parameters: [
111
+ {
112
+ name: 'sessionId',
113
+ wire: 'sessionId',
114
+ source: 'json',
115
+ codec: {
116
+ mode: 'strict',
117
+ typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/secureSession:sessionId',
118
+ schema: _yadsh_dsh_qa_surface_qaSurface_secureSession_parameter_0$schema,
119
+ },
120
+ },
121
+ ],
122
+ result: {
123
+ mode: 'strict',
124
+ typeSymbol: '@yadsh/dsh-qa-surface/types#QaLockdownProof',
125
+ schema: _yadsh_dsh_qa_surface_qaSurface_secureSession_result$schema,
126
+ },
127
+ sourceLocation: {"file":"packages/dsh-qa-surface/src/index.ts","line":136,"column":3},
128
+ },
129
+ ],
130
+ model: {
131
+ "services": [
132
+ {
133
+ "description": "Host companion: validates config, owns the admission boundary and the route.",
134
+ "summary": "Host companion: validates config, owns the admission boundary and the route.",
135
+ "tags": [],
136
+ "jsDoc": "/** Host companion: validates config, owns the admission boundary and the route. */",
137
+ "key": "qaSurface",
138
+ "exportName": "QaSurface",
139
+ "members": [
140
+ {
141
+ "kind": "method",
142
+ "name": "getConfig",
143
+ "signature": "getConfig(): ResolvedQaSurfaceConfig"
144
+ },
145
+ {
146
+ "kind": "method",
147
+ "name": "describe",
148
+ "signature": "@Remote(\"describe\") describe(): ResolvedQaSurfaceConfig",
149
+ "summary": "Serve the effective QA configuration to the browser.",
150
+ "jsDoc": "/**\n * Serve the effective QA configuration to the browser. The DSH gateway pins\n * settings RPCs to loopback, so a browser served over the LAN always sees\n * the settings namespace as unavailable; this method is the config channel\n * such a browser falls back to. It is read-only projection — the admission\n * boundary stays in {@link secureSession}.\n */"
151
+ },
152
+ {
153
+ "kind": "method",
154
+ "name": "secureSession",
155
+ "signature": "@Remote(\"secureSession\") secureSession(sessionId: string): QaLockdownProof",
156
+ "summary": "Pin and attest the effective policy.",
157
+ "jsDoc": "/** Pin and attest the effective policy. The browser supplies identity only. */"
158
+ }
159
+ ],
160
+ "types": [
161
+ {
162
+ "name": "QaApprovalPolicy",
163
+ "declaration": "export type QaApprovalPolicy = \"never\";"
164
+ },
165
+ {
166
+ "name": "QaLockdownProof",
167
+ "declaration": "export interface QaLockdownProof {\n readonly sessionId: string;\n readonly enabled: boolean;\n readonly agentPresetMatches: boolean;\n readonly workspaceMatches: boolean;\n readonly modelMatches: boolean;\n readonly sandboxIsReadOnly: boolean;\n readonly approvalIsNever: boolean;\n readonly permissionPreset: string;\n readonly toolPolicyLoaded: boolean;\n readonly toolAllowList: readonly string[];\n}"
168
+ },
169
+ {
170
+ "name": "QaSandboxMode",
171
+ "declaration": "export type QaSandboxMode = \"read-only\";"
172
+ },
173
+ {
174
+ "name": "QaSessionPolicy",
175
+ "declaration": "export type QaSessionPolicy = \"browser-persistent\" | \"new-on-load\" | \"fixed\";"
176
+ },
177
+ {
178
+ "name": "QaToolPolicyMode",
179
+ "declaration": "export type QaToolPolicyMode = \"allow-list\";"
180
+ },
181
+ {
182
+ "name": "ResolvedQaSurfaceConfig",
183
+ "declaration": "export interface ResolvedQaSurfaceConfig {\n readonly enabled: boolean;\n readonly route: { readonly path: string; readonly matchChildren: boolean; };\n readonly branding: { readonly title: string; readonly subtitle: string; readonly welcomeMessage: string; readonly placeholder: string; readonly logoUrl: string | null; readonly disclaimer: string; };\n readonly session: { readonly policy: QaSessionPolicy; readonly storageKey: string; readonly cwd: string | null; readonly workspaceId: string | null; readonly fixedSessionId: string | null; readonly agentPreset: string | null; readonly provider: string | null; readonly model: string | null; readonly reasoningEffort: string | null; };\n readonly ui: { readonly showHeader: boolean; readonly showReset: boolean; readonly showStop: boolean; readonly showTimestamps: boolean; readonly showToolActivity: boolean; readonly showReasoning: boolean; readonly renderMarkdown: boolean; readonly maxContentWidth: number; readonly showSessionList: boolean; };\n readonly suggestedQuestions: readonly string[];\n readonly interaction: { readonly approvals: \"blocked\"; readonly questions: \"unsupported\"; };\n readonly lockdown: { readonly enabled: boolean; readonly enforceFixedAgentPreset: boolean; readonly enforceFixedWorkspace: boolean; readonly enforceFixedModel: boolean; readonly sandboxMode: QaSandboxMode; readonly approvalPolicy: QaApprovalPolicy; readonly permissionPreset: string; readonly allowPermissionChanges: false; readonly allowSlashCommands: false; readonly allowSettingsMutation: false; readonly allowSessionReset: boolean; readonly allowSessionRename: false; readonly allowSessionDelete: false; readonly allowArbitrarySessionOpen: false; readonly toolPolicy: { readonly mode: QaToolPolicyMode; readonly allow: readonly string[]; }; };\n readonly embedding: { readonly frameAncestors: string | null; };\n}"
184
+ }
185
+ ]
186
+ }
187
+ ],
188
+ "events": [],
189
+ "objects": []
190
+ },
191
+ }
@@ -0,0 +1,24 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */
2
+ import type {
3
+ RemoteResult,
4
+ TypertRemoteContribution,
5
+ } from '@deepseek-ai/dsh-typert-protocol'
6
+ import type { QaLockdownProof, ResolvedQaSurfaceConfig } from '@yadsh/dsh-qa-surface/types'
7
+
8
+ declare module '@deepseek-ai/dsh-typert-protocol' {
9
+ interface TypertRemoteNamespace$716153757266616365 {
10
+ describe: () => Promise<RemoteResult<ResolvedQaSurfaceConfig>>
11
+ secureSession: (sessionId: string) => Promise<RemoteResult<QaLockdownProof>>
12
+ }
13
+ interface TypertRemoteMap {
14
+ 'qaSurface/describe': () => Promise<RemoteResult<ResolvedQaSurfaceConfig>>
15
+ 'qaSurface/secureSession': (sessionId: string) => Promise<RemoteResult<QaLockdownProof>>
16
+ }
17
+ interface TypertRemoteNamespaceMap {
18
+ 'qaSurface': TypertRemoteNamespace$716153757266616365
19
+ }
20
+ }
21
+
22
+ export declare const TYPERT_REMOTE: TypertRemoteContribution
23
+ export default TYPERT_REMOTE
24
+ //# sourceMappingURL=typert.remote-client.d.ts.map
@@ -0,0 +1,129 @@
1
+ /* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */
2
+ import { z } from 'zod'
3
+
4
+ const _yadsh_dsh_qa_surface_qaSurface_describe_result$schema = z.object({
5
+ 'enabled': z.boolean().readonly(),
6
+ 'route': z.object({
7
+ 'path': z.string().readonly(),
8
+ 'matchChildren': z.boolean().readonly(),
9
+ }).readonly(),
10
+ 'branding': z.object({
11
+ 'title': z.string().readonly(),
12
+ 'subtitle': z.string().readonly(),
13
+ 'welcomeMessage': z.string().readonly(),
14
+ 'placeholder': z.string().readonly(),
15
+ 'logoUrl': z.union([z.literal(null), z.string()]).readonly(),
16
+ 'disclaimer': z.string().readonly(),
17
+ }).readonly(),
18
+ 'session': z.object({
19
+ 'policy': z.union([z.literal("browser-persistent"), z.literal("new-on-load"), z.literal("fixed")]).readonly(),
20
+ 'storageKey': z.string().readonly(),
21
+ 'cwd': z.union([z.literal(null), z.string()]).readonly(),
22
+ 'workspaceId': z.union([z.literal(null), z.string()]).readonly(),
23
+ 'fixedSessionId': z.union([z.literal(null), z.string()]).readonly(),
24
+ 'agentPreset': z.union([z.literal(null), z.string()]).readonly(),
25
+ 'provider': z.union([z.literal(null), z.string()]).readonly(),
26
+ 'model': z.union([z.literal(null), z.string()]).readonly(),
27
+ 'reasoningEffort': z.union([z.literal(null), z.string()]).readonly(),
28
+ }).readonly(),
29
+ 'ui': z.object({
30
+ 'showHeader': z.boolean().readonly(),
31
+ 'showReset': z.boolean().readonly(),
32
+ 'showStop': z.boolean().readonly(),
33
+ 'showTimestamps': z.boolean().readonly(),
34
+ 'showToolActivity': z.boolean().readonly(),
35
+ 'showReasoning': z.boolean().readonly(),
36
+ 'renderMarkdown': z.boolean().readonly(),
37
+ 'maxContentWidth': z.number().readonly(),
38
+ 'showSessionList': z.boolean().readonly(),
39
+ }).readonly(),
40
+ 'suggestedQuestions': z.array(z.string()).readonly(),
41
+ 'interaction': z.object({
42
+ 'approvals': z.literal("blocked").readonly(),
43
+ 'questions': z.literal("unsupported").readonly(),
44
+ }).readonly(),
45
+ 'lockdown': z.object({
46
+ 'enabled': z.boolean().readonly(),
47
+ 'enforceFixedAgentPreset': z.boolean().readonly(),
48
+ 'enforceFixedWorkspace': z.boolean().readonly(),
49
+ 'enforceFixedModel': z.boolean().readonly(),
50
+ 'sandboxMode': z.literal("read-only").readonly(),
51
+ 'approvalPolicy': z.literal("never").readonly(),
52
+ 'permissionPreset': z.string().readonly(),
53
+ 'allowPermissionChanges': z.literal(false).readonly(),
54
+ 'allowSlashCommands': z.literal(false).readonly(),
55
+ 'allowSettingsMutation': z.literal(false).readonly(),
56
+ 'allowSessionReset': z.boolean().readonly(),
57
+ 'allowSessionRename': z.literal(false).readonly(),
58
+ 'allowSessionDelete': z.literal(false).readonly(),
59
+ 'allowArbitrarySessionOpen': z.literal(false).readonly(),
60
+ 'toolPolicy': z.object({
61
+ 'mode': z.literal("allow-list").readonly(),
62
+ 'allow': z.array(z.string()).readonly(),
63
+ }).readonly(),
64
+ }).readonly(),
65
+ 'embedding': z.object({
66
+ 'frameAncestors': z.union([z.literal(null), z.string()]).readonly(),
67
+ }).readonly(),
68
+ })
69
+ const _yadsh_dsh_qa_surface_qaSurface_secureSession_parameter_0$schema = z.string()
70
+ const _yadsh_dsh_qa_surface_qaSurface_secureSession_result$schema = z.object({
71
+ 'sessionId': z.string().readonly(),
72
+ 'enabled': z.boolean().readonly(),
73
+ 'agentPresetMatches': z.boolean().readonly(),
74
+ 'workspaceMatches': z.boolean().readonly(),
75
+ 'modelMatches': z.boolean().readonly(),
76
+ 'sandboxIsReadOnly': z.boolean().readonly(),
77
+ 'approvalIsNever': z.boolean().readonly(),
78
+ 'permissionPreset': z.string().readonly(),
79
+ 'toolPolicyLoaded': z.boolean().readonly(),
80
+ 'toolAllowList': z.array(z.string()).readonly(),
81
+ })
82
+
83
+ export const TYPERT_REMOTE = {
84
+ package: '@yadsh/dsh-qa-surface',
85
+ descriptors: [
86
+ {
87
+ id: '@yadsh/dsh-qa-surface#qaSurface/describe',
88
+ service: 'qaSurface',
89
+ namespace: 'qaSurface',
90
+ method: 'describe',
91
+ invocation: { kind: 'direct' },
92
+ parameters: [
93
+ ],
94
+ result: {
95
+ mode: 'strict',
96
+ typeSymbol: '@yadsh/dsh-qa-surface/types#ResolvedQaSurfaceConfig',
97
+ schema: _yadsh_dsh_qa_surface_qaSurface_describe_result$schema,
98
+ },
99
+ sourceLocation: {"file":"packages/dsh-qa-surface/src/index.ts","line":130,"column":3},
100
+ },
101
+ {
102
+ id: '@yadsh/dsh-qa-surface#qaSurface/secureSession',
103
+ service: 'qaSurface',
104
+ namespace: 'qaSurface',
105
+ method: 'secureSession',
106
+ invocation: { kind: 'direct' },
107
+ parameters: [
108
+ {
109
+ name: 'sessionId',
110
+ wire: 'sessionId',
111
+ source: 'json',
112
+ codec: {
113
+ mode: 'strict',
114
+ typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/secureSession:sessionId',
115
+ schema: _yadsh_dsh_qa_surface_qaSurface_secureSession_parameter_0$schema,
116
+ },
117
+ },
118
+ ],
119
+ result: {
120
+ mode: 'strict',
121
+ typeSymbol: '@yadsh/dsh-qa-surface/types#QaLockdownProof',
122
+ schema: _yadsh_dsh_qa_surface_qaSurface_secureSession_result$schema,
123
+ },
124
+ sourceLocation: {"file":"packages/dsh-qa-surface/src/index.ts","line":136,"column":3},
125
+ },
126
+ ],
127
+ }
128
+
129
+ export default TYPERT_REMOTE
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Stable, coarse reason codes for QA policy attestation rejections.
3
+ *
4
+ * The RPC carrier folds a thrown Host error into `{ code, message, details }`
5
+ * and always empties `details`, so the wire message is the only channel back
6
+ * to the browser. The message therefore carries a `(reason: <code>)` marker:
7
+ * coarse enough to reveal nothing about the deployment policy to the QA
8
+ * audience, precise enough for an operator reading the browser console to
9
+ * know which class of mismatch to look for in the Host logs.
10
+ */
11
+ export type QaAttestationReason = "agent-unavailable" | "workspace-unavailable" | "composition-mismatch" | "permission-preset" | "adoption-refused" | "unknown-tools" | "attestation-failed";
12
+ /** Host rejection whose wire message carries the coarse reason marker. */
13
+ export declare class QaAttestationError extends Error {
14
+ readonly reason: QaAttestationReason;
15
+ constructor(reason: QaAttestationReason, message: string);
16
+ }
17
+ //# sourceMappingURL=attestation.d.ts.map
@@ -5,17 +5,49 @@ export interface QaConfigSnapshot {
5
5
  readonly config: ResolvedQaSurfaceConfig;
6
6
  readonly error: string | null;
7
7
  }
8
- /** Browser projection of the Host-owned qa-surface settings namespace. */
8
+ /** Reads the effective Host configuration when the settings namespace cannot. */
9
+ export type QaConfigFallback = () => Promise<ResolvedQaSurfaceConfig>;
10
+ /**
11
+ * Browser projection of the Host-owned qa-surface settings namespace.
12
+ *
13
+ * The DSH gateway pins settings RPCs to loopback, so a browser served over the
14
+ * LAN always sees the namespace as `unavailable`. When the caller supplies the
15
+ * `qaSurface/describe` Remote as a fallback, that channel answers instead: the
16
+ * projection waits in `loading` until it settles, then reports the Host-owned
17
+ * configuration as `ready`. A rejected fallback returns the projection to
18
+ * `unavailable`, exactly as when no fallback exists.
19
+ */
9
20
  export declare class QaConfigController {
10
21
  private readonly scope;
11
22
  private readonly listeners;
12
23
  private snapshot;
13
24
  private readonly unsubscribe;
14
- constructor(scope: SettingsScope<QaSurfaceConfig>);
25
+ private readonly fallback;
26
+ private fallbackState;
27
+ private fallbackConfig;
28
+ private disposed;
29
+ constructor(scope: SettingsScope<QaSurfaceConfig>, fallback?: QaConfigFallback);
15
30
  getSnapshot: () => QaConfigSnapshot;
16
31
  subscribe: (listener: () => void) => (() => void);
17
32
  dispose(): void;
18
33
  private project;
19
34
  private refresh;
35
+ /**
36
+ * Re-read the Host configuration after a Host reconnect. Without this, an
37
+ * open page keeps the configuration it fetched at load time: after the Host
38
+ * restarts with a changed deployment config, the next attestation compares
39
+ * its proof against the stale client copy and refuses. While re-reading,
40
+ * the previous answer stays projected — no loading flicker; the snapshot
41
+ * updates only when the answer actually changed.
42
+ */
43
+ refreshFallback(): void;
44
+ /**
45
+ * The fallback trigger rides every refresh: the scope flips to
46
+ * `unavailable` whenever the browser is served over the LAN, which a
47
+ * constructor-time check can miss. The state guard makes repeats a no-op,
48
+ * so one fetch runs per controller lifetime; the recursive refresh lets the
49
+ * pending state surface before the first notification pass.
50
+ */
51
+ private requestFallbackIfNeeded;
20
52
  }
21
53
  //# sourceMappingURL=QaConfigController.d.ts.map