@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/secure-session.js
CHANGED
|
@@ -6,6 +6,7 @@ import { QaAccountsError } from "./accounts/store.js";
|
|
|
6
6
|
import { QaAttestationError } from "./attestation.js";
|
|
7
7
|
import { qaToolDenial, qaToolPolicyPlan } from "./lockdown-policy.js";
|
|
8
8
|
import { QA_REPORT_SOURCES_TOOL } from "./provenance/host-store.js";
|
|
9
|
+
import { qaUserWorkspaceDenial } from "./user-workspace.js";
|
|
9
10
|
/** Grace period in which a fresh session may still be pinned to the QA preset. */
|
|
10
11
|
const FRESH_SESSION_BOOTSTRAP_WINDOW_MS = 120_000;
|
|
11
12
|
/**
|
|
@@ -37,25 +38,109 @@ export class QaPolicyAdmission {
|
|
|
37
38
|
logger;
|
|
38
39
|
accounts;
|
|
39
40
|
appliedPolicies = new Map();
|
|
41
|
+
/**
|
|
42
|
+
* Sessions the QA surface has attested. The provenance note is written for
|
|
43
|
+
* exactly these, and a delegated child resolves through its root session, so
|
|
44
|
+
* one set answers for the whole chat.
|
|
45
|
+
*/
|
|
46
|
+
attested = new Set();
|
|
47
|
+
workspaceAccess = new Map();
|
|
48
|
+
disposeWorkspaceGuard;
|
|
40
49
|
constructor(ctx, config, logger, accounts) {
|
|
41
50
|
this.ctx = ctx;
|
|
42
51
|
this.config = config;
|
|
43
52
|
this.logger = logger;
|
|
44
53
|
this.accounts = accounts;
|
|
54
|
+
this.disposeWorkspaceGuard = ctx.tools.guard((execution) => {
|
|
55
|
+
const session = execution.agent?.session;
|
|
56
|
+
if (session === undefined)
|
|
57
|
+
return undefined;
|
|
58
|
+
const access = this.workspaceAccess.get(String(session.id));
|
|
59
|
+
if (access === undefined)
|
|
60
|
+
return undefined;
|
|
61
|
+
if (!cwdMatches(session.header.cwd, access.root)) {
|
|
62
|
+
return "QA workspace boundary: session cwd is outside this user's directory.";
|
|
63
|
+
}
|
|
64
|
+
return qaUserWorkspaceDenial(execution, access.root, this.attachmentRoot(), access);
|
|
65
|
+
});
|
|
66
|
+
ctx.on("session/created", (session) => {
|
|
67
|
+
const parent = session.header.parentSession;
|
|
68
|
+
if (parent === undefined)
|
|
69
|
+
return;
|
|
70
|
+
const access = this.workspaceAccess.get(String(parent));
|
|
71
|
+
if (access !== undefined) {
|
|
72
|
+
this.workspaceAccess.set(String(session.id), access);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
45
75
|
ctx.on("agent/disposed", ({ agent }) => {
|
|
46
76
|
this.appliedPolicies.delete(agent);
|
|
77
|
+
this.workspaceAccess.delete(String(agent.session.id));
|
|
47
78
|
});
|
|
48
79
|
}
|
|
49
|
-
|
|
80
|
+
/**
|
|
81
|
+
* The mounted attachment store's verbatim root, when the backend exposes
|
|
82
|
+
* one. It sits outside every workspace, so the per-user fence would
|
|
83
|
+
* otherwise deny the model the exact file an upload produced and the prompt
|
|
84
|
+
* points it at. A backend without a resolvable root simply keeps the fence
|
|
85
|
+
* closed — attachments then only work where reads are not fenced per user.
|
|
86
|
+
*/
|
|
87
|
+
attachmentRoot() {
|
|
88
|
+
const store = this.ctx.get("attachments");
|
|
89
|
+
return typeof store?.root === "string" ? store.root : undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The live agent for one session, resuming a Session the Host has not
|
|
93
|
+
* materialized in this process.
|
|
94
|
+
*
|
|
95
|
+
* DSH builds an agent on demand: a session's journal opens straight from
|
|
96
|
+
* persistence (`session/page` reads the durable log), and only Agent-bound
|
|
97
|
+
* operations — a prompt, a model selection, renaming, an upload — resolve or
|
|
98
|
+
* resume one. So a chat from an earlier Host run has a readable transcript
|
|
99
|
+
* and no agent at all, and attestation, which pins the tool policy ON that
|
|
100
|
+
* agent, is the first thing here that needs one. Refusing instead would make
|
|
101
|
+
* every restored chat unopenable until something else in the Host happened
|
|
102
|
+
* to wake it.
|
|
103
|
+
*
|
|
104
|
+
* The resume composes the session's OWN recorded preset — the same
|
|
105
|
+
* composition a stock prompt would produce — so a session composed outside
|
|
106
|
+
* the QA preset still lands on the mismatch refusals below ("composition
|
|
107
|
+
* mismatch"), and the adoption and permission checks stay the gate.
|
|
108
|
+
*/
|
|
109
|
+
async liveAgent(sessionId) {
|
|
110
|
+
const live = this.ctx.agents.get(SessionId(sessionId));
|
|
111
|
+
if (live !== undefined)
|
|
112
|
+
return live;
|
|
113
|
+
try {
|
|
114
|
+
const resolved = await this.ctx.sessionController.resolveAgent(SessionId(sessionId));
|
|
115
|
+
if (!("error" in resolved))
|
|
116
|
+
return resolved.agent;
|
|
117
|
+
this.logger.error("session.agent-resolve-rejected", {
|
|
118
|
+
sessionId,
|
|
119
|
+
error: resolved.error.message,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
// Either the composition itself failed (a preset that no longer mounts,
|
|
124
|
+
// a log the Host refuses to read) or the resolution threw before it
|
|
125
|
+
// could classify itself. Both are the same coarse fact for the browser.
|
|
126
|
+
this.logger.error("session.agent-resolve-rejected", {
|
|
127
|
+
sessionId,
|
|
128
|
+
error: error instanceof Error ? error.message : String(error),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
throw new QaAttestationError("agent-unavailable", "agent is unavailable");
|
|
132
|
+
}
|
|
133
|
+
async secureSession(token, sessionId) {
|
|
50
134
|
const config = this.config();
|
|
51
135
|
const lockdown = config.lockdown;
|
|
52
136
|
// Account identity is checked before any policy work: an invalid token
|
|
53
137
|
// must not learn whether a session exists or how the deployment composes.
|
|
54
138
|
// Independent of lockdown — a deployment may gate users without pinning
|
|
55
139
|
// the policy, and the gate itself no-ops while accounts are disabled.
|
|
140
|
+
let sessionOwner;
|
|
56
141
|
if (this.accounts !== undefined) {
|
|
57
142
|
try {
|
|
58
|
-
this.accounts.enforceSessionAccess(token, sessionId);
|
|
143
|
+
sessionOwner = this.accounts.enforceSessionAccess(token, sessionId);
|
|
59
144
|
}
|
|
60
145
|
catch (error) {
|
|
61
146
|
if (error instanceof QaAccountsError) {
|
|
@@ -66,10 +151,8 @@ export class QaPolicyAdmission {
|
|
|
66
151
|
throw error;
|
|
67
152
|
}
|
|
68
153
|
}
|
|
69
|
-
const agent = this.
|
|
70
|
-
|
|
71
|
-
throw new QaAttestationError("agent-unavailable", "agent is unavailable");
|
|
72
|
-
}
|
|
154
|
+
const agent = await this.liveAgent(sessionId);
|
|
155
|
+
this.attested.add(sessionId);
|
|
73
156
|
if (!lockdown.enabled) {
|
|
74
157
|
return {
|
|
75
158
|
sessionId,
|
|
@@ -77,7 +160,7 @@ export class QaPolicyAdmission {
|
|
|
77
160
|
agentPresetMatches: true,
|
|
78
161
|
workspaceMatches: true,
|
|
79
162
|
modelMatches: true,
|
|
80
|
-
|
|
163
|
+
sandboxModeMatches: false,
|
|
81
164
|
approvalIsNever: false,
|
|
82
165
|
permissionPreset: "",
|
|
83
166
|
toolPolicyLoaded: false,
|
|
@@ -94,13 +177,28 @@ export class QaPolicyAdmission {
|
|
|
94
177
|
if (expectedWorkspace !== null && pinnedWorkspace === undefined) {
|
|
95
178
|
throw new QaAttestationError("workspace-unavailable", `workspace ${expectedWorkspace} is not registered`);
|
|
96
179
|
}
|
|
180
|
+
let expectedUserRoot;
|
|
181
|
+
if (config.accounts.perUserWorkspace) {
|
|
182
|
+
if (sessionOwner === undefined || pinnedWorkspace === undefined) {
|
|
183
|
+
throw new QaAttestationError("workspace-unavailable", "per-user workspace identity is unavailable");
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
expectedUserRoot = this.accounts?.userWorkspace(sessionOwner.id, pinnedWorkspace.path);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
throw new QaAttestationError("workspace-unavailable", error instanceof Error ? error.message : String(error));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
97
192
|
const expectedPreset = config.session.agentPreset;
|
|
98
193
|
const agentPresetMatches = !lockdown.enforceFixedAgentPreset ||
|
|
99
194
|
expectedPreset === null ||
|
|
100
195
|
this.ctx.agentPresets.composedPreset(agent.ctx) === expectedPreset;
|
|
101
196
|
const workspaceMatches = !lockdown.enforceFixedWorkspace ||
|
|
102
197
|
(expectedWorkspace === null && config.session.cwd === null) ||
|
|
103
|
-
(
|
|
198
|
+
(expectedUserRoot !== undefined &&
|
|
199
|
+
cwdMatches(agent.session.header.cwd, expectedUserRoot)) ||
|
|
200
|
+
(!config.accounts.perUserWorkspace &&
|
|
201
|
+
pinnedWorkspace !== undefined &&
|
|
104
202
|
cwdMatches(agent.session.header.cwd, pinnedWorkspace.path)) ||
|
|
105
203
|
(expectedWorkspace === null &&
|
|
106
204
|
config.session.cwd !== null &&
|
|
@@ -118,7 +216,7 @@ export class QaPolicyAdmission {
|
|
|
118
216
|
const permission = this.ctx.permissionPresets.resolve(lockdown.permissionPreset);
|
|
119
217
|
if (permission.sandbox !== lockdown.sandboxMode ||
|
|
120
218
|
permission.approval !== lockdown.approvalPolicy) {
|
|
121
|
-
throw new QaAttestationError("permission-preset", `permission preset ${lockdown.permissionPreset} does not resolve to
|
|
219
|
+
throw new QaAttestationError("permission-preset", `permission preset ${lockdown.permissionPreset} does not resolve to ${lockdown.sandboxMode}/never`);
|
|
122
220
|
}
|
|
123
221
|
const currentPermission = this.ctx.permissionPresets.current(agent.session);
|
|
124
222
|
// History check over the model-visible surface: `user/message` is a
|
|
@@ -145,11 +243,6 @@ export class QaPolicyAdmission {
|
|
|
145
243
|
if (prior?.fingerprint !== fingerprint) {
|
|
146
244
|
const allowed = new Set(policy.allow);
|
|
147
245
|
const disposeGuard = agent.ctx.tools.guard((execution) => qaToolDenial(allowed, execution.name));
|
|
148
|
-
const disposeGuidance = agent.ctx.systemPrompt.section({
|
|
149
|
-
name: "dsh-qa-surface:structured-sources",
|
|
150
|
-
order: 950,
|
|
151
|
-
text: "Source provenance is collected automatically from tools. Do not append a manual Sources/Источники bibliography to the answer. Delegated providers that cannot expose tool events should call qa_report_sources before finishing.",
|
|
152
|
-
});
|
|
153
246
|
try {
|
|
154
247
|
const disposeRestriction = agent.ctx.tools.restrict({
|
|
155
248
|
allow: policy.allow,
|
|
@@ -158,27 +251,42 @@ export class QaPolicyAdmission {
|
|
|
158
251
|
fingerprint,
|
|
159
252
|
disposeGuard,
|
|
160
253
|
disposeRestriction,
|
|
161
|
-
disposeGuidance,
|
|
162
254
|
});
|
|
163
255
|
prior?.disposeRestriction();
|
|
164
256
|
prior?.disposeGuard();
|
|
165
|
-
prior?.disposeGuidance();
|
|
166
257
|
}
|
|
167
258
|
catch (error) {
|
|
168
259
|
disposeGuard();
|
|
169
|
-
disposeGuidance();
|
|
170
260
|
throw error;
|
|
171
261
|
}
|
|
172
262
|
}
|
|
173
263
|
this.ctx.permissionPresets.set(agent.session, lockdown.permissionPreset);
|
|
174
264
|
const effectivePermission = this.ctx.permissionPresets.current(agent.session);
|
|
175
|
-
const
|
|
265
|
+
const sandboxModeMatches = permission.sandbox === lockdown.sandboxMode;
|
|
176
266
|
const approvalIsNever = permission.approval === "never";
|
|
177
267
|
if (effectivePermission !== lockdown.permissionPreset ||
|
|
178
|
-
!
|
|
268
|
+
!sandboxModeMatches ||
|
|
179
269
|
!approvalIsNever) {
|
|
180
270
|
throw new QaAttestationError("attestation-failed", "permission attestation failed");
|
|
181
271
|
}
|
|
272
|
+
if (expectedUserRoot !== undefined) {
|
|
273
|
+
const currentAccess = this.workspaceAccess.get(sessionId);
|
|
274
|
+
if (currentAccess === undefined) {
|
|
275
|
+
this.workspaceAccess.set(sessionId, {
|
|
276
|
+
root: expectedUserRoot,
|
|
277
|
+
sharedReadOnlyRoots: lockdown.sharedReadOnlyRoots,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// Children share this object, so a re-attestation also revokes stale
|
|
282
|
+
// roots from already-running subagent sessions.
|
|
283
|
+
currentAccess.root = expectedUserRoot;
|
|
284
|
+
currentAccess.sharedReadOnlyRoots = lockdown.sharedReadOnlyRoots;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
this.workspaceAccess.delete(sessionId);
|
|
289
|
+
}
|
|
182
290
|
this.logger.debug("lockdown.attested", {
|
|
183
291
|
sessionId,
|
|
184
292
|
permissionPreset: lockdown.permissionPreset,
|
|
@@ -190,7 +298,7 @@ export class QaPolicyAdmission {
|
|
|
190
298
|
agentPresetMatches,
|
|
191
299
|
workspaceMatches,
|
|
192
300
|
modelMatches,
|
|
193
|
-
|
|
301
|
+
sandboxModeMatches,
|
|
194
302
|
approvalIsNever,
|
|
195
303
|
permissionPreset: lockdown.permissionPreset,
|
|
196
304
|
toolPolicyLoaded: true,
|
|
@@ -199,14 +307,24 @@ export class QaPolicyAdmission {
|
|
|
199
307
|
toolAllowList: lockdown.toolPolicy.allow,
|
|
200
308
|
};
|
|
201
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* Whether one session went through this boundary. The provenance note is
|
|
312
|
+
* written only for attested sessions, which is what keeps a deployment's
|
|
313
|
+
* source rules out of unrelated chats served by the same process.
|
|
314
|
+
*/
|
|
315
|
+
knowsSession(sessionId) {
|
|
316
|
+
return this.attested.has(sessionId);
|
|
317
|
+
}
|
|
202
318
|
/** Detach every pinned tool policy; wired as a disposal effect by the entry. */
|
|
203
319
|
dispose() {
|
|
204
320
|
for (const policy of this.appliedPolicies.values()) {
|
|
205
321
|
policy.disposeRestriction();
|
|
206
322
|
policy.disposeGuard();
|
|
207
|
-
policy.disposeGuidance();
|
|
208
323
|
}
|
|
209
324
|
this.appliedPolicies.clear();
|
|
325
|
+
this.attested.clear();
|
|
326
|
+
this.workspaceAccess.clear();
|
|
327
|
+
this.disposeWorkspaceGuard();
|
|
210
328
|
}
|
|
211
329
|
}
|
|
212
330
|
//# sourceMappingURL=secure-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-session.js","sourceRoot":"","sources":["../src/secure-session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"secure-session.js","sourceRoot":"","sources":["../src/secure-session.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,sEAAsE;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AA0B5D,kFAAkF;AAClF,MAAM,iCAAiC,GAAG,OAAO,CAAC;AAElD;;;;GAIG;AACH,SAAS,UAAU,CAAC,SAA6B,EAAE,MAAc;IAC/D,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAClC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO;QACjC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;QAC5C,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IAYT,GAAG;IACH,MAAM;IACN,MAAM;IACN,QAAQ;IAdV,eAAe,GAAG,IAAI,GAAG,EAAwB,CAAC;IACnE;;;;OAIG;IACc,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,eAAe,GAAG,IAAI,GAAG,EAA+B,CAAC;IACzD,qBAAqB,CAAa;IAEnD,YACmB,GAAY,EACZ,MAAqC,EACrC,MAAoB,EACpB,QAAyB;mBAHzB,GAAG;sBACH,MAAM;sBACN,MAAM;wBACN,QAAQ;QAEzB,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE;YACzD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;YACzC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,OAAO,sEAAsE,CAAC;YAChF,CAAC;YACD,OAAO,qBAAqB,CAC1B,SAAS,EACT,MAAM,CAAC,IAAI,EACX,IAAI,CAAC,cAAc,EAAE,EACrB,MAAM,CACP,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAC5C,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACxD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACrC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACK,cAAc;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CACC,CAAC;QAC1C,OAAO,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACK,KAAK,CAAC,SAAS,CAAC,SAAiB;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAC5D,SAAS,CAAC,SAAS,CAAC,CACrB,CAAC;YACF,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;gBAClD,SAAS;gBACT,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO;aAC9B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wEAAwE;YACxE,oEAAoE;YACpE,wEAAwE;YACxE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;gBAClD,SAAS;gBACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,kBAAkB,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,SAAiB;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,uEAAuE;QACvE,0EAA0E;QAC1E,wEAAwE;QACxE,sEAAsE;QACtE,IAAI,YAAiD,CAAC;QACtD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;oBACrC,MAAM,IAAI,kBAAkB,CAC1B,KAAK,CAAC,MAAM,KAAK,yBAAyB;wBACxC,CAAC,CAAC,yBAAyB;wBAC3B,CAAC,CAAC,eAAe,EACnB,KAAK,CAAC,OAAO,CACd,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO;gBACL,SAAS;gBACT,OAAO,EAAE,KAAK;gBACd,kBAAkB,EAAE,IAAI;gBACxB,gBAAgB,EAAE,IAAI;gBACtB,YAAY,EAAE,IAAI;gBAClB,kBAAkB,EAAE,KAAK;gBACzB,eAAe,EAAE,KAAK;gBACtB,gBAAgB,EAAE,EAAE;gBACpB,gBAAgB,EAAE,KAAK;gBACvB,aAAa,EAAE,EAAE;aAClB,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QACrD,MAAM,eAAe,GACnB,iBAAiB,KAAK,IAAI;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACrE,yEAAyE;QACzE,qEAAqE;QACrE,8DAA8D;QAC9D,IAAI,iBAAiB,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAChE,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,EACvB,aAAa,iBAAiB,oBAAoB,CACnD,CAAC;QACJ,CAAC;QACD,IAAI,gBAAoC,CAAC;QACzC,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACrC,IAAI,YAAY,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChE,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,EACvB,4CAA4C,CAC7C,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAC7C,YAAY,CAAC,EAAE,EACf,eAAe,CAAC,IAAI,CACrB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,EACvB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAClD,MAAM,kBAAkB,GACtB,CAAC,QAAQ,CAAC,uBAAuB;YACjC,cAAc,KAAK,IAAI;YACvB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC;QAErE,MAAM,gBAAgB,GACpB,CAAC,QAAQ,CAAC,qBAAqB;YAC/B,CAAC,iBAAiB,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC;YAC3D,CAAC,gBAAgB,KAAK,SAAS;gBAC7B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YACzD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB;gBAChC,eAAe,KAAK,SAAS;gBAC7B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC,iBAAiB,KAAK,IAAI;gBACzB,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI;gBAC3B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAErB,CAAC;QACF,MAAM,YAAY,GAChB,CAAC,QAAQ,CAAC,iBAAiB;YAC3B,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;YAChC,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,CAAC,QAAQ;gBAC3C,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK;gBACtC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI;oBACtC,OAAO,CAAC,eAAe,KAAK,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;QAEnE,IAAI,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9D,MAAM,IAAI,kBAAkB,CAC1B,sBAAsB,EACtB,+BAA+B,kBAAkB,cAAc,gBAAgB,UAAU,YAAY,EAAE,CACxG,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,CACnD,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;QACF,IACE,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,WAAW;YAC3C,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,cAAc,EAC/C,CAAC;YACD,MAAM,IAAI,kBAAkB,CAC1B,mBAAmB,EACnB,qBAAqB,QAAQ,CAAC,gBAAgB,wBAAwB,QAAQ,CAAC,WAAW,QAAQ,CACnG,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5E,oEAAoE;QACpE,yEAAyE;QACzE,qBAAqB;QACrB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CACrD,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,cAAc,CAC7D,CAAC;QACF,IACE,iBAAiB,KAAK,QAAQ,CAAC,gBAAgB;YAC/C,CAAC,cAAc;gBACb,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS;oBACzC,iCAAiC,CAAC,EACtC,CAAC;YACD,MAAM,IAAI,kBAAkB,CAC1B,kBAAkB,EAClB,2CAA2C,CAC5C,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GACf,MAAM,CAAC,OAAO,CAAC,OAAO;YACtB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,wBAAwB;YACjD,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACzD,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,sBAAsB,CAAC;YACxD,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,gBAAgB,CAC7B,WAAW,EACX,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,SAAS,CAChE,CAAC;QACF,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,kBAAkB,CAC1B,eAAe,EACf,uBAAuB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnD,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,KAAK,EAAE,WAAW,KAAK,WAAW,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CACvD,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CACtC,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAClD,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC,CAAC;gBACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE;oBAC9B,WAAW;oBACX,YAAY;oBACZ,kBAAkB;iBACnB,CAAC,CAAC;gBACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;gBAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACzE,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAC5D,KAAK,CAAC,OAAO,CACd,CAAC;QACF,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,WAAW,CAAC;QACvE,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC;QACxD,IACE,mBAAmB,KAAK,QAAQ,CAAC,gBAAgB;YACjD,CAAC,kBAAkB;YACnB,CAAC,eAAe,EAChB,CAAC;YACD,MAAM,IAAI,kBAAkB,CAC1B,oBAAoB,EACpB,+BAA+B,CAChC,CAAC;QACJ,CAAC;QACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1D,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE;oBAClC,IAAI,EAAE,gBAAgB;oBACtB,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;iBAClD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,qEAAqE;gBACrE,gDAAgD;gBAChD,aAAa,CAAC,IAAI,GAAG,gBAAgB,CAAC;gBACtC,aAAa,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;YACnE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE;YACrC,SAAS;YACT,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,aAAa,EAAE,MAAM,CAAC,KAAK;SAC5B,CAAC,CAAC;QACH,OAAO;YACL,SAAS;YACT,OAAO,EAAE,IAAI;YACb,kBAAkB;YAClB,gBAAgB;YAChB,YAAY;YACZ,kBAAkB;YAClB,eAAe;YACf,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,gBAAgB,EAAE,IAAI;YACtB,wEAAwE;YACxE,4CAA4C;YAC5C,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK;SACzC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAiB;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,gFAAgF;IAChF,OAAO;QACL,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which sessions belong to this deployment.
|
|
3
|
+
*
|
|
4
|
+
* The admission boundary attests chat roots. A delegated child never appears
|
|
5
|
+
* there — its scope chain does not reach the chat's own agent context — so it
|
|
6
|
+
* inherits its chat from the session that created it. Both interactive seams
|
|
7
|
+
* (tool approvals and user questions) read ownership from here, which is what
|
|
8
|
+
* keeps one chat answered by exactly one surface.
|
|
9
|
+
*/
|
|
10
|
+
export class QaSessionOwnership {
|
|
11
|
+
isAttested;
|
|
12
|
+
/** Child session → the attested chat that owns it. */
|
|
13
|
+
inherited = new Map();
|
|
14
|
+
disposeListener;
|
|
15
|
+
installed = false;
|
|
16
|
+
constructor(isAttested) {
|
|
17
|
+
this.isAttested = isAttested;
|
|
18
|
+
}
|
|
19
|
+
/** Listen for the children of an attested chat; safe to call from each seam. */
|
|
20
|
+
install(ctx) {
|
|
21
|
+
if (this.installed)
|
|
22
|
+
return;
|
|
23
|
+
this.installed = true;
|
|
24
|
+
this.disposeListener = ctx.on("session/created", (session) => {
|
|
25
|
+
const parent = session.header.parentSession;
|
|
26
|
+
if (parent === undefined)
|
|
27
|
+
return;
|
|
28
|
+
const root = this.rootOf(String(parent));
|
|
29
|
+
if (root !== undefined)
|
|
30
|
+
this.inherited.set(String(session.id), root);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** The attested chat behind a session: itself, or the root it inherited. */
|
|
34
|
+
rootOf(sessionId) {
|
|
35
|
+
const inherited = this.inherited.get(sessionId);
|
|
36
|
+
if (inherited !== undefined)
|
|
37
|
+
return inherited;
|
|
38
|
+
return this.isAttested(sessionId) ? sessionId : undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Drop one session's inheritance. Called when its agent is gone; the chat's
|
|
42
|
+
* own claim needs no bookkeeping here, because it resolves through the
|
|
43
|
+
* admission's attested set, which owns that lifetime.
|
|
44
|
+
*/
|
|
45
|
+
forget(sessionId) {
|
|
46
|
+
this.inherited.delete(sessionId);
|
|
47
|
+
}
|
|
48
|
+
dispose() {
|
|
49
|
+
this.inherited.clear();
|
|
50
|
+
this.disposeListener?.();
|
|
51
|
+
this.disposeListener = undefined;
|
|
52
|
+
this.installed = false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=session-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-ownership.js","sourceRoot":"","sources":["../src/session-ownership.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAMA,UAAU;IALvC,sDAAsD;IACrC,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,eAAe,CAA2B;IAC1C,SAAS,GAAG,KAAK,CAAC;IAE1B,YAA6B,UAA0C;0BAA1C,UAAU;IAAmC,CAAC;IAE3E,gFAAgF;IAChF,OAAO,CAAC,GAAY;QAClB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAC5C,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,MAAM,CAAC,SAAiB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAiB;QACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The browser-local key namespace every QA-side index derives from: the
|
|
3
|
+
* configured storage key pinned to the served route, versioned once so the
|
|
4
|
+
* Host's head-script injection and the client bundle cannot drift apart.
|
|
5
|
+
*
|
|
6
|
+
* Dependency-free like every `src/shared` module: both bundles inline it.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The versioned key prefix for browser-local QA state of one deployment.
|
|
10
|
+
* Callers append their own scope suffix (`:account-token`, `:welcome-notice`,
|
|
11
|
+
* `:chat:<id>`, …).
|
|
12
|
+
* @param config - configuration holding the storage key and the route path.
|
|
13
|
+
* @returns the versioned prefix, e.g. `dsh-qa-surface.session:v1:/qa`.
|
|
14
|
+
*/
|
|
15
|
+
export function qaStorageNamespace(config) {
|
|
16
|
+
return `${config.session.storageKey}:v1:${config.route.path}`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=session-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-key.js","sourceRoot":"","sources":["../../src/shared/session-key.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAGE;IAEF,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity shared by the Host plugin and its browser settings card.
|
|
3
|
+
*
|
|
4
|
+
* This module must stay dependency-free: the card bundle inlines it, and a
|
|
5
|
+
* browser build must not pull the Host config surface (schemastery) into the
|
|
6
|
+
* page just to learn the namespace name.
|
|
7
|
+
*/
|
|
8
|
+
/** Settings namespace the QA surface owns and its card binds to. */
|
|
9
|
+
export const QA_SURFACE_SETTINGS_NAMESPACE = "qa-surface";
|
|
10
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/shared/settings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,6BAA6B,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phrases the running indicator cycles through. The list deliberately mixes
|
|
3
|
+
* Russian idiom with workshop imagery: a turn that keeps reshuffling the same
|
|
4
|
+
* thought in new words reads as alive, while a frozen one reads as stuck.
|
|
5
|
+
*
|
|
6
|
+
* Operators replace the list through `thinkingPhrases`; this module holds the
|
|
7
|
+
* canonical default so the config schema, the resolver and the browser all
|
|
8
|
+
* read one list.
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_THINKING_PHRASES = Object.freeze([
|
|
11
|
+
"Скребу по сусекам…",
|
|
12
|
+
"Кумекаю…",
|
|
13
|
+
"Навожу резкость…",
|
|
14
|
+
"Собираю мысли в кучку…",
|
|
15
|
+
"Раскладываю по полочкам…",
|
|
16
|
+
"Сверяю приметы…",
|
|
17
|
+
"Шлифую мысли…",
|
|
18
|
+
"Раскидываю умом…",
|
|
19
|
+
"Обтачиваю формулировки…",
|
|
20
|
+
"Ломаю голову…",
|
|
21
|
+
"Затачиваю аргументы…",
|
|
22
|
+
"Шевелю извилинами…",
|
|
23
|
+
"Правлю напильником…",
|
|
24
|
+
"Разматываю клубок…",
|
|
25
|
+
"Снимаю стружку…",
|
|
26
|
+
"Вяжу концы с концами…",
|
|
27
|
+
"Фрезерую крайние случаи…",
|
|
28
|
+
"Меряю семь раз…",
|
|
29
|
+
"Прокаливаю гипотезы…",
|
|
30
|
+
"Смотрю в корень…",
|
|
31
|
+
"Отливаю форму решения…",
|
|
32
|
+
"Ставлю точки над i…",
|
|
33
|
+
"Кую версию…",
|
|
34
|
+
"Разбираю по косточкам…",
|
|
35
|
+
"Калибрую допуски…",
|
|
36
|
+
"Прикидываю так и эдак…",
|
|
37
|
+
"Считаю допуски и посадки…",
|
|
38
|
+
"Взвешиваю за и против…",
|
|
39
|
+
"Меряю штангенциркулем…",
|
|
40
|
+
"Читаю между строк…",
|
|
41
|
+
"Сверяю по чертежу…",
|
|
42
|
+
"Тяну за ниточку…",
|
|
43
|
+
"Проверяю биение…",
|
|
44
|
+
"Перебираю варианты…",
|
|
45
|
+
"Зачищаю заусенцы…",
|
|
46
|
+
"Жонглирую версиями…",
|
|
47
|
+
"Центрую заготовку…",
|
|
48
|
+
"Подшиваю факты к делу…",
|
|
49
|
+
"Обкатываю механизм…",
|
|
50
|
+
"Плету сеть доводов…",
|
|
51
|
+
"Собираю узел…",
|
|
52
|
+
"Думаю думу…",
|
|
53
|
+
"Гну по шаблону…",
|
|
54
|
+
"Сверяю с ГОСТом…",
|
|
55
|
+
]);
|
|
56
|
+
/** How long one phrase stays on screen before the next one takes over. */
|
|
57
|
+
const PHRASE_INTERVAL_MS = 4_000;
|
|
58
|
+
/**
|
|
59
|
+
* Phrase shown `elapsedMs` into a running turn. The list is operator supplied,
|
|
60
|
+
* so an empty one falls back to the default: the indicator always needs a
|
|
61
|
+
* label.
|
|
62
|
+
*/
|
|
63
|
+
export function thinkingPhrase(elapsedMs, phrases = DEFAULT_THINKING_PHRASES) {
|
|
64
|
+
const pool = phrases.length === 0 ? DEFAULT_THINKING_PHRASES : phrases;
|
|
65
|
+
const index = Math.floor(Math.max(0, elapsedMs) / PHRASE_INTERVAL_MS) % pool.length;
|
|
66
|
+
return pool[index];
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=thinking-phrases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking-phrases.js","sourceRoot":"","sources":["../src/thinking-phrases.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsB,MAAM,CAAC,MAAM,CAAC;IACvE,oBAAoB;IACpB,UAAU;IACV,kBAAkB;IAClB,wBAAwB;IACxB,0BAA0B;IAC1B,iBAAiB;IACjB,eAAe;IACf,kBAAkB;IAClB,yBAAyB;IACzB,eAAe;IACf,sBAAsB;IACtB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,iBAAiB;IACjB,uBAAuB;IACvB,0BAA0B;IAC1B,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;IAClB,wBAAwB;IACxB,qBAAqB;IACrB,aAAa;IACb,wBAAwB;IACxB,mBAAmB;IACnB,wBAAwB;IACxB,2BAA2B;IAC3B,wBAAwB;IACxB,wBAAwB;IACxB,oBAAoB;IACpB,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;IACrB,eAAe;IACf,aAAa;IACb,iBAAiB;IACjB,kBAAkB;CACnB,CAAC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,OAAO,GAAsB,wBAAwB;IAErD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,kBAAkB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACxE,OAAO,IAAI,CAAC,KAAK,CAAW,CAAC;AAC/B,CAAC"}
|