@yadsh/dsh-qa-surface 0.9.0 → 0.11.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 +269 -2
- package/lib/access/service.js +49 -10
- package/lib/access/service.js.map +1 -1
- package/lib/account-remotes.js +41 -0
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/database.js +140 -0
- package/lib/accounts/database.js.map +1 -1
- package/lib/accounts/errors.js.map +1 -1
- package/lib/accounts/service-token.js +103 -0
- package/lib/accounts/service-token.js.map +1 -0
- package/lib/accounts/store.js +291 -5
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/conversation-log.js +14 -8
- package/lib/admin/conversation-log.js.map +1 -1
- package/lib/admin/permissions.js +5 -0
- package/lib/admin/permissions.js.map +1 -1
- package/lib/admin/quality-store.js +4 -0
- package/lib/admin/quality-store.js.map +1 -1
- package/lib/admin/service.js +180 -7
- package/lib/admin/service.js.map +1 -1
- package/lib/admin/session-log.js +39 -8
- package/lib/admin/session-log.js.map +1 -1
- package/lib/attachment-rules.js +39 -6
- package/lib/attachment-rules.js.map +1 -1
- package/lib/cli.js +83 -1
- package/lib/cli.js.map +1 -1
- package/lib/client/QaAccountsController.js +213 -4
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaSessionController.js +49 -21
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +51 -9
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaSurfaceGuard.js +12 -5
- package/lib/client/QaSurfaceGuard.js.map +1 -1
- package/lib/client/admin/QaAdmin.js +14 -2
- package/lib/client/admin/QaAdmin.js.map +1 -1
- package/lib/client/admin/pages/SkillFiles.js +78 -0
- package/lib/client/admin/pages/SkillFiles.js.map +1 -0
- package/lib/client/admin/pages/Users.js +74 -3
- package/lib/client/admin/pages/Users.js.map +1 -1
- package/lib/client/admin/routes.js +8 -1
- package/lib/client/admin/routes.js.map +1 -1
- package/lib/client/admin/shared.js +5 -1
- package/lib/client/admin/shared.js.map +1 -1
- package/lib/client/admin/styles.js +2 -0
- package/lib/client/admin/styles.js.map +1 -1
- package/lib/client/attachments.js +41 -11
- package/lib/client/attachments.js.map +1 -1
- package/lib/client/base64.js +22 -1
- package/lib/client/base64.js.map +1 -1
- package/lib/client/components/QaAgentsDrawer.js +9 -6
- package/lib/client/components/QaAgentsDrawer.js.map +1 -1
- package/lib/client/components/QaApproval.js +1 -1
- package/lib/client/components/QaApproval.js.map +1 -1
- package/lib/client/components/QaAuthGate.js +19 -10
- package/lib/client/components/QaAuthGate.js.map +1 -1
- package/lib/client/components/QaChangelog.js +56 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaFilesPanel.js +17 -11
- package/lib/client/components/QaFilesPanel.js.map +1 -1
- package/lib/client/components/QaHeader.js +3 -11
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaModal.js.map +1 -1
- package/lib/client/components/QaQuestions.js +4 -4
- package/lib/client/components/QaQuestions.js.map +1 -1
- package/lib/client/components/QaSidebar.js +10 -2
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaWidthHandle.js +111 -5
- package/lib/client/components/QaWidthHandle.js.map +1 -1
- package/lib/client/components/QaWorkspaceBrowser.js +231 -0
- package/lib/client/components/QaWorkspaceBrowser.js.map +1 -0
- package/lib/client/index.js +122 -53
- package/lib/client/index.js.map +1 -1
- package/lib/client/kiosk.js +51 -0
- package/lib/client/kiosk.js.map +1 -0
- package/lib/client/lineage.js +64 -0
- package/lib/client/lineage.js.map +1 -1
- package/lib/client/markdown/blocks.js +122 -7
- package/lib/client/markdown/blocks.js.map +1 -1
- package/lib/client/markdown/inline.js +108 -12
- package/lib/client/markdown/inline.js.map +1 -1
- package/lib/client/markdown/katex-css.js +12 -0
- package/lib/client/markdown/katex-css.js.map +1 -0
- package/lib/client/markdown/math.js +84 -0
- package/lib/client/markdown/math.js.map +1 -0
- package/lib/client/markdown/render.js +74 -5
- package/lib/client/markdown/render.js.map +1 -1
- package/lib/client/settings/card.js +2 -2
- package/lib/client/settings/card.js.map +1 -1
- package/lib/client/settings/sections/attachments.js +6 -5
- package/lib/client/settings/sections/attachments.js.map +1 -1
- package/lib/client/settings/sections/notes.js +64 -0
- package/lib/client/settings/sections/notes.js.map +1 -0
- package/lib/client/settings/sections/sources.js +4 -1
- package/lib/client/settings/sections/sources.js.map +1 -1
- package/lib/client/settings/sections.js +1 -0
- package/lib/client/settings/sections.js.map +1 -1
- package/lib/client/settlement.js +1 -1
- package/lib/client/settlement.js.map +1 -1
- package/lib/client/source-preview.js +3 -0
- package/lib/client/source-preview.js.map +1 -1
- package/lib/client/styles.js +106 -18
- package/lib/client/styles.js.map +1 -1
- package/lib/client/types.js.map +1 -1
- package/lib/client/user-settings/IntegrationTokensPage.js +150 -0
- package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -0
- package/lib/client/user-settings/PasswordSettingsPage.js +48 -0
- package/lib/client/user-settings/PasswordSettingsPage.js.map +1 -0
- package/lib/client/user-settings/SkillCatalog.js +2 -2
- package/lib/client/user-settings/SkillCatalog.js.map +1 -1
- package/lib/client/user-settings/UserSettingsDialog.js +17 -2
- package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
- package/lib/client/user-settings/copy.js +20 -0
- package/lib/client/user-settings/copy.js.map +1 -1
- package/lib/client.js +31007 -686
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/attachments.js +6 -5
- package/lib/config-resolvers/attachments.js.map +1 -1
- package/lib/config-resolvers/defaults.js +33 -2
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/integration.js +94 -0
- package/lib/config-resolvers/integration.js.map +1 -0
- package/lib/config-resolvers/notes.js +26 -0
- package/lib/config-resolvers/notes.js.map +1 -0
- package/lib/config-resolvers/sources.js +4 -0
- package/lib/config-resolvers/sources.js.map +1 -1
- package/lib/config.js +107 -0
- package/lib/config.js.map +1 -1
- package/lib/index.js +348 -12
- package/lib/index.js.map +1 -1
- package/lib/integration/answer.js +100 -0
- package/lib/integration/answer.js.map +1 -0
- package/lib/integration/attachments.js +231 -0
- package/lib/integration/attachments.js.map +1 -0
- package/lib/integration/contract.js +53 -0
- package/lib/integration/contract.js.map +1 -0
- package/lib/integration/host-runner.js +243 -0
- package/lib/integration/host-runner.js.map +1 -0
- package/lib/integration/http.js +538 -0
- package/lib/integration/http.js.map +1 -0
- package/lib/integration/service.js +331 -0
- package/lib/integration/service.js.map +1 -0
- package/lib/integration/transcript-reader.js +202 -0
- package/lib/integration/transcript-reader.js.map +1 -0
- package/lib/integration/transcript.js +148 -0
- package/lib/integration/transcript.js.map +1 -0
- package/lib/personal-skills/index.js +2 -2
- package/lib/personal-skills/index.js.map +1 -1
- package/lib/personal-skills/paths.js +14 -8
- package/lib/personal-skills/paths.js.map +1 -1
- package/lib/personal-skills/provider.js +16 -4
- package/lib/personal-skills/provider.js.map +1 -1
- package/lib/personal-skills/service.js +240 -30
- package/lib/personal-skills/service.js.map +1 -1
- package/lib/prompt-notes.js +103 -6
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/document-preview.js +60 -0
- package/lib/provenance/document-preview.js.map +1 -0
- package/lib/provenance/file-preview.js +191 -19
- package/lib/provenance/file-preview.js.map +1 -1
- package/lib/qa-tools/catalog.js +18 -1
- package/lib/qa-tools/catalog.js.map +1 -1
- package/lib/qa-tools/docs-tools.js +563 -0
- package/lib/qa-tools/docs-tools.js.map +1 -0
- package/lib/qa-tools/file-delete-gate.js +60 -0
- package/lib/qa-tools/file-delete-gate.js.map +1 -0
- package/lib/qa-tools/file-delete.js +156 -0
- package/lib/qa-tools/file-delete.js.map +1 -0
- package/lib/resolve-config.js +6 -0
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +83 -3
- package/lib/secure-session.js.map +1 -1
- package/lib/shared/documents.js +22 -0
- package/lib/shared/documents.js.map +1 -0
- package/lib/shared/integration-tokens.js +23 -0
- package/lib/shared/integration-tokens.js.map +1 -0
- package/lib/typert.host.js +1320 -134
- package/lib/typert.remote-client.d.ts +33 -1
- package/lib/typert.remote-client.js +1102 -74
- package/lib/types/access/service.d.ts +33 -2
- package/lib/types/account-remotes.d.ts +30 -1
- package/lib/types/accounts/database.d.ts +53 -0
- package/lib/types/accounts/errors.d.ts +5 -1
- package/lib/types/accounts/service-token.d.ts +70 -0
- package/lib/types/accounts/store.d.ts +131 -1
- package/lib/types/admin/conversation-log.d.ts +12 -0
- package/lib/types/admin/service.d.ts +56 -1
- package/lib/types/admin/session-log.d.ts +21 -0
- package/lib/types/attachment-rules.d.ts +26 -3
- package/lib/types/client/QaAccountsController.d.ts +64 -5
- package/lib/types/client/QaSessionController.d.ts +24 -2
- package/lib/types/client/admin/pages/SkillFiles.d.ts +17 -0
- package/lib/types/client/admin/routes.d.ts +2 -0
- package/lib/types/client/admin/shared.d.ts +2 -0
- package/lib/types/client/attachments.d.ts +21 -4
- package/lib/types/client/base64.d.ts +13 -1
- package/lib/types/client/components/QaAgentsDrawer.d.ts +2 -1
- package/lib/types/client/components/QaFilesPanel.d.ts +16 -4
- package/lib/types/client/components/QaHeader.d.ts +9 -3
- package/lib/types/client/components/QaModal.d.ts +4 -3
- package/lib/types/client/components/QaWidthHandle.d.ts +48 -2
- package/lib/types/client/components/QaWorkspaceBrowser.d.ts +15 -0
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/kiosk.d.ts +34 -0
- package/lib/types/client/lineage.d.ts +42 -0
- package/lib/types/client/markdown/blocks.d.ts +14 -1
- package/lib/types/client/markdown/inline.d.ts +23 -7
- package/lib/types/client/markdown/katex-css.d.ts +11 -0
- package/lib/types/client/markdown/math.d.ts +23 -0
- package/lib/types/client/markdown/render.d.ts +2 -1
- package/lib/types/client/settings/sections/notes.d.ts +12 -0
- package/lib/types/client/settings/sections.d.ts +1 -0
- package/lib/types/client/settlement.d.ts +4 -1
- package/lib/types/client/styles.d.ts +15 -2
- package/lib/types/client/types.d.ts +120 -1
- package/lib/types/client/user-settings/IntegrationTokensPage.d.ts +21 -0
- package/lib/types/client/user-settings/PasswordSettingsPage.d.ts +19 -0
- package/lib/types/client/user-settings/UserSettingsDialog.d.ts +11 -2
- package/lib/types/client/user-settings/copy.d.ts +10 -1
- package/lib/types/config-resolvers/integration.d.ts +47 -0
- package/lib/types/config-resolvers/notes.d.ts +10 -0
- package/lib/types/config.d.ts +10 -0
- package/lib/types/index.d.ts +111 -1
- package/lib/types/integration/answer.d.ts +65 -0
- package/lib/types/integration/attachments.d.ts +85 -0
- package/lib/types/integration/contract.d.ts +196 -0
- package/lib/types/integration/host-runner.d.ts +44 -0
- package/lib/types/integration/http.d.ts +79 -0
- package/lib/types/integration/service.d.ts +120 -0
- package/lib/types/integration/transcript-reader.d.ts +100 -0
- package/lib/types/integration/transcript.d.ts +59 -0
- package/lib/types/personal-skills/index.d.ts +2 -2
- package/lib/types/personal-skills/paths.d.ts +15 -3
- package/lib/types/personal-skills/provider.d.ts +14 -2
- package/lib/types/personal-skills/service.d.ts +89 -14
- package/lib/types/prompt-notes.d.ts +37 -0
- package/lib/types/provenance/document-preview.d.ts +28 -0
- package/lib/types/provenance/file-preview.d.ts +69 -2
- package/lib/types/qa-tools/catalog.d.ts +1 -1
- package/lib/types/qa-tools/docs-tools.d.ts +160 -0
- package/lib/types/qa-tools/file-delete-gate.d.ts +42 -0
- package/lib/types/qa-tools/file-delete.d.ts +32 -0
- package/lib/types/secure-session.d.ts +52 -1
- package/lib/types/shared/documents.d.ts +20 -0
- package/lib/types/shared/integration-tokens.d.ts +24 -0
- package/lib/types/types.d.ts +263 -3
- package/lib/types/ui-mode.d.ts +18 -0
- package/lib/ui-mode.js +22 -0
- package/lib/ui-mode.js.map +1 -0
- package/package.json +12 -10
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { SessionId } from "@deepseek-ai/dsh-session/types";
|
|
3
|
+
import { WorkspaceId } from "@deepseek-ai/dsh-workspace";
|
|
4
|
+
import { prepareQaUserWorkspace } from "../user-workspace.js";
|
|
5
|
+
import { answerAfter, lastPromptSeq } from "./answer.js";
|
|
6
|
+
import { attachmentPromptParts } from "./attachments.js";
|
|
7
|
+
import { QaIntegrationTranscriptReader } from "./transcript-reader.js";
|
|
8
|
+
/** Build the runner for one plugin instance. */
|
|
9
|
+
export function createQaIntegrationRunner(options) {
|
|
10
|
+
const { ctx, logger } = options;
|
|
11
|
+
// One reader for the plugin's lifetime: its whole value is the windows it
|
|
12
|
+
// keeps between calls, so a per-request instance would be a slower copy of
|
|
13
|
+
// the plain projection.
|
|
14
|
+
const transcripts = new QaIntegrationTranscriptReader({
|
|
15
|
+
log: options.sessionLog,
|
|
16
|
+
logger,
|
|
17
|
+
});
|
|
18
|
+
const requireAccounts = () => {
|
|
19
|
+
const accounts = options.accounts();
|
|
20
|
+
if (accounts === undefined) {
|
|
21
|
+
throw new Error("QA accounts are not enabled on this deployment.");
|
|
22
|
+
}
|
|
23
|
+
return accounts;
|
|
24
|
+
};
|
|
25
|
+
const openChat = async (input) => {
|
|
26
|
+
const config = options.getConfig();
|
|
27
|
+
const accounts = requireAccounts();
|
|
28
|
+
const owner = accounts.accountById(input.userId);
|
|
29
|
+
if (owner === undefined) {
|
|
30
|
+
throw new Error("the integration token's account no longer exists");
|
|
31
|
+
}
|
|
32
|
+
const id = SessionId(`session-${randomUUID()}`);
|
|
33
|
+
// The ownership record is written before the session exists, exactly as
|
|
34
|
+
// the browser path does it: the id is minted here, so no other caller can
|
|
35
|
+
// claim it in between, and a failure below rolls the record back.
|
|
36
|
+
options.access.reserveSessionForUser(owner, String(id));
|
|
37
|
+
try {
|
|
38
|
+
options.admission.preflightDeployment();
|
|
39
|
+
let userCwd;
|
|
40
|
+
if (config.accounts.perUserWorkspace) {
|
|
41
|
+
const workspaceId = config.session.workspaceId;
|
|
42
|
+
if (workspaceId === null) {
|
|
43
|
+
throw new Error("Per-user QA workspace configuration is unavailable.");
|
|
44
|
+
}
|
|
45
|
+
const workspace = ctx.workspaceRegistry.get(WorkspaceId(workspaceId));
|
|
46
|
+
if (workspace === undefined) {
|
|
47
|
+
throw new Error(`Configured QA workspace ${workspaceId} is unavailable.`);
|
|
48
|
+
}
|
|
49
|
+
userCwd = prepareQaUserWorkspace(workspace.path, owner.id);
|
|
50
|
+
}
|
|
51
|
+
const created = await ctx.sessionController.create({
|
|
52
|
+
sessionId: id,
|
|
53
|
+
...(userCwd !== undefined
|
|
54
|
+
? { cwd: userCwd }
|
|
55
|
+
: config.session.workspaceId !== null
|
|
56
|
+
? { workspaceId: WorkspaceId(config.session.workspaceId) }
|
|
57
|
+
: config.session.cwd !== null
|
|
58
|
+
? { cwd: config.session.cwd }
|
|
59
|
+
: {}),
|
|
60
|
+
...(config.session.agentPreset === null
|
|
61
|
+
? {}
|
|
62
|
+
: { agentPreset: config.session.agentPreset }),
|
|
63
|
+
});
|
|
64
|
+
if (config.session.provider !== null && config.session.model !== null) {
|
|
65
|
+
await ctx.sessionController.selectModel({
|
|
66
|
+
sessionId: created.sessionId,
|
|
67
|
+
provider: config.session.provider,
|
|
68
|
+
model: config.session.model,
|
|
69
|
+
...(config.session.reasoningEffort === null
|
|
70
|
+
? {}
|
|
71
|
+
: { reasoningEffort: config.session.reasoningEffort }),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const sessionId = String(created.sessionId);
|
|
75
|
+
await options.admission.secureSessionForUser(owner.id, sessionId);
|
|
76
|
+
logger.info("integration.chat-opened", {
|
|
77
|
+
sessionId,
|
|
78
|
+
userId: owner.id,
|
|
79
|
+
ticketKey: input.ticketKey,
|
|
80
|
+
});
|
|
81
|
+
return sessionId;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
// Nothing else would ever remove the record: the chat was never
|
|
85
|
+
// returned to the caller, so no later call can name it.
|
|
86
|
+
accounts.releaseSessionReservation(owner.id, String(id));
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
/** The newest durable cursor in a log, or 0 when there is nothing to read. */
|
|
91
|
+
const floorOf = async (sessionId) => {
|
|
92
|
+
const read = await options.sessionLog.read(sessionId);
|
|
93
|
+
if (!read.ok)
|
|
94
|
+
return 0;
|
|
95
|
+
return read.events.reduce((max, event) => Math.max(max, event.seq), 0);
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* The prompt of one question: the question, then the attachments.
|
|
99
|
+
*
|
|
100
|
+
* Images keep the shape the harness carries them in. Files are read on the
|
|
101
|
+
* Host — a text file decoded, a document extracted through the deployment's
|
|
102
|
+
* pipeline — and arrive as text under a heading per file, preceded by one
|
|
103
|
+
* lead line so the model knows why the question has more than it asked for.
|
|
104
|
+
* A file that cannot be read throws, which the service turns into the 415
|
|
105
|
+
* the caller's fallback understands: publishing an answer to a question the
|
|
106
|
+
* model could not see the attachment for is worse than asking again without
|
|
107
|
+
* it.
|
|
108
|
+
*/
|
|
109
|
+
const promptParts = async (message, attachments, sessionId, signal) => {
|
|
110
|
+
const images = attachments
|
|
111
|
+
.filter((attachment) => attachment.kind === "image")
|
|
112
|
+
.map((attachment) => ({
|
|
113
|
+
type: "image",
|
|
114
|
+
mediaType: attachment.mediaType,
|
|
115
|
+
data: attachment.data,
|
|
116
|
+
...(attachment.name === undefined ? {} : { name: attachment.name }),
|
|
117
|
+
}));
|
|
118
|
+
const files = attachments.filter((attachment) => attachment.kind === "file");
|
|
119
|
+
if (files.length === 0) {
|
|
120
|
+
return [{ type: "text", text: message }, ...images];
|
|
121
|
+
}
|
|
122
|
+
const extracted = await attachmentPromptParts(files, {
|
|
123
|
+
documents: options.documents(),
|
|
124
|
+
sessionId,
|
|
125
|
+
signal,
|
|
126
|
+
logger,
|
|
127
|
+
});
|
|
128
|
+
return [
|
|
129
|
+
{ type: "text", text: message },
|
|
130
|
+
...images,
|
|
131
|
+
{ type: "text", text: QA_ATTACHMENT_LEAD },
|
|
132
|
+
...extracted,
|
|
133
|
+
];
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
async run(input) {
|
|
137
|
+
const chatId = input.chatId === null
|
|
138
|
+
? await openChat({
|
|
139
|
+
userId: input.userId,
|
|
140
|
+
ticketKey: input.ticketKey,
|
|
141
|
+
})
|
|
142
|
+
: input.chatId;
|
|
143
|
+
input.onChat?.(chatId);
|
|
144
|
+
if (input.chatId !== null) {
|
|
145
|
+
// A continued chat is re-attested before every question. The same call
|
|
146
|
+
// the browser makes when it opens a session: it is what refuses a
|
|
147
|
+
// chat belonging to another account (the ownership record is the
|
|
148
|
+
// authority) and what keeps the tool policy applied to a session
|
|
149
|
+
// resumed by a process that has never seen it.
|
|
150
|
+
await options.admission.secureSessionForUser(input.userId, chatId);
|
|
151
|
+
}
|
|
152
|
+
const floor = await floorOf(chatId);
|
|
153
|
+
const content = await promptParts(input.message, input.attachments, chatId, input.signal);
|
|
154
|
+
// The client mints this identity; the harness brands it. A plain UUID
|
|
155
|
+
// is exactly what a browser sends, and it is what makes the prompt
|
|
156
|
+
// idempotent if the same question is ever retried.
|
|
157
|
+
const requestId = randomUUID();
|
|
158
|
+
await ctx.sessionController.prompt({
|
|
159
|
+
requestId,
|
|
160
|
+
sessionId: SessionId(chatId),
|
|
161
|
+
mode: "queue",
|
|
162
|
+
content,
|
|
163
|
+
}, input.signal);
|
|
164
|
+
const agent = ctx.agents.get(SessionId(chatId));
|
|
165
|
+
if (agent === undefined) {
|
|
166
|
+
throw new Error("the QA session has no live agent");
|
|
167
|
+
}
|
|
168
|
+
await whenIdleOrAborted(agent, input.signal);
|
|
169
|
+
const read = await options.sessionLog.read(chatId);
|
|
170
|
+
if (!read.ok) {
|
|
171
|
+
throw new Error(`the session log is unavailable (${read.reason})`);
|
|
172
|
+
}
|
|
173
|
+
// The prompt's own event may be missing from an empty snapshot, so the
|
|
174
|
+
// floor is the later of the cursor taken before the question and the
|
|
175
|
+
// newest human prompt the log knows about. Either way the answer is the
|
|
176
|
+
// last assistant message after it, and no earlier turn can be read as
|
|
177
|
+
// this one's answer.
|
|
178
|
+
const projected = answerAfter(read.events, Math.max(floor, lastPromptSeq(read.events)));
|
|
179
|
+
return Object.freeze({
|
|
180
|
+
chatId,
|
|
181
|
+
answer: projected.answer,
|
|
182
|
+
sources: sourcesOf(chatId),
|
|
183
|
+
interrupted: projected.interrupted,
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
async transcript(input) {
|
|
187
|
+
return await transcripts.page(input.chatId, {
|
|
188
|
+
after: input.after,
|
|
189
|
+
limit: input.limit,
|
|
190
|
+
});
|
|
191
|
+
},
|
|
192
|
+
async models() {
|
|
193
|
+
const catalog = await ctx.sessionController.modelCatalog();
|
|
194
|
+
return catalog.groups.flatMap((group) => group.models.map((model) => model.id));
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* The evidence of the chat's latest turn, for the bridge's citations. The
|
|
199
|
+
* provenance store materializes one bundle per turn; the newest is the one
|
|
200
|
+
* that belongs to the answer just written. A deployment that switched
|
|
201
|
+
* source collection off answers with an empty list rather than no answer.
|
|
202
|
+
*/
|
|
203
|
+
function sourcesOf(sessionId) {
|
|
204
|
+
try {
|
|
205
|
+
const bundles = options.provenance.bundles(sessionId);
|
|
206
|
+
return bundles.at(-1)?.sources ?? [];
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
logger.warn("integration.sources-unavailable", {
|
|
210
|
+
sessionId,
|
|
211
|
+
message: error instanceof Error ? error.message : String(error),
|
|
212
|
+
});
|
|
213
|
+
return [];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* The one line that explains the text parts after the question. It says where
|
|
219
|
+
* the material came from and nothing about what to do with it: the deployment's
|
|
220
|
+
* own prompt notes own the instructions, and this block is content.
|
|
221
|
+
*/
|
|
222
|
+
const QA_ATTACHMENT_LEAD = "Вложения к этому вопросу — файлы, пришедшие из внешней системы вместе с " +
|
|
223
|
+
"обращением. Их содержимое приведено ниже под заголовком с именем файла.";
|
|
224
|
+
/** Wait for the agent to reach quiescence, or for the caller to give up. */
|
|
225
|
+
async function whenIdleOrAborted(agent, signal) {
|
|
226
|
+
if (signal.aborted)
|
|
227
|
+
throw abortReason(signal);
|
|
228
|
+
await Promise.race([
|
|
229
|
+
agent.whenIdle(),
|
|
230
|
+
new Promise((_resolve, reject) => {
|
|
231
|
+
signal.addEventListener("abort", () => {
|
|
232
|
+
reject(abortReason(signal));
|
|
233
|
+
}, { once: true });
|
|
234
|
+
}),
|
|
235
|
+
]);
|
|
236
|
+
}
|
|
237
|
+
function abortReason(signal) {
|
|
238
|
+
const reason = signal.reason;
|
|
239
|
+
return reason instanceof Error
|
|
240
|
+
? reason
|
|
241
|
+
: new Error("the integration request was aborted");
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=host-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-runner.js","sourceRoot":"","sources":["../../src/integration/host-runner.ts"],"names":[],"mappings":"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"}
|