@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.
Files changed (250) hide show
  1. package/README.md +269 -2
  2. package/lib/access/service.js +49 -10
  3. package/lib/access/service.js.map +1 -1
  4. package/lib/account-remotes.js +41 -0
  5. package/lib/account-remotes.js.map +1 -1
  6. package/lib/accounts/database.js +140 -0
  7. package/lib/accounts/database.js.map +1 -1
  8. package/lib/accounts/errors.js.map +1 -1
  9. package/lib/accounts/service-token.js +103 -0
  10. package/lib/accounts/service-token.js.map +1 -0
  11. package/lib/accounts/store.js +291 -5
  12. package/lib/accounts/store.js.map +1 -1
  13. package/lib/admin/conversation-log.js +14 -8
  14. package/lib/admin/conversation-log.js.map +1 -1
  15. package/lib/admin/permissions.js +5 -0
  16. package/lib/admin/permissions.js.map +1 -1
  17. package/lib/admin/quality-store.js +4 -0
  18. package/lib/admin/quality-store.js.map +1 -1
  19. package/lib/admin/service.js +180 -7
  20. package/lib/admin/service.js.map +1 -1
  21. package/lib/admin/session-log.js +39 -8
  22. package/lib/admin/session-log.js.map +1 -1
  23. package/lib/attachment-rules.js +39 -6
  24. package/lib/attachment-rules.js.map +1 -1
  25. package/lib/cli.js +83 -1
  26. package/lib/cli.js.map +1 -1
  27. package/lib/client/QaAccountsController.js +213 -4
  28. package/lib/client/QaAccountsController.js.map +1 -1
  29. package/lib/client/QaSessionController.js +49 -21
  30. package/lib/client/QaSessionController.js.map +1 -1
  31. package/lib/client/QaSurface.js +51 -9
  32. package/lib/client/QaSurface.js.map +1 -1
  33. package/lib/client/QaSurfaceGuard.js +12 -5
  34. package/lib/client/QaSurfaceGuard.js.map +1 -1
  35. package/lib/client/admin/QaAdmin.js +14 -2
  36. package/lib/client/admin/QaAdmin.js.map +1 -1
  37. package/lib/client/admin/pages/SkillFiles.js +78 -0
  38. package/lib/client/admin/pages/SkillFiles.js.map +1 -0
  39. package/lib/client/admin/pages/Users.js +74 -3
  40. package/lib/client/admin/pages/Users.js.map +1 -1
  41. package/lib/client/admin/routes.js +8 -1
  42. package/lib/client/admin/routes.js.map +1 -1
  43. package/lib/client/admin/shared.js +5 -1
  44. package/lib/client/admin/shared.js.map +1 -1
  45. package/lib/client/admin/styles.js +2 -0
  46. package/lib/client/admin/styles.js.map +1 -1
  47. package/lib/client/attachments.js +41 -11
  48. package/lib/client/attachments.js.map +1 -1
  49. package/lib/client/base64.js +22 -1
  50. package/lib/client/base64.js.map +1 -1
  51. package/lib/client/components/QaAgentsDrawer.js +9 -6
  52. package/lib/client/components/QaAgentsDrawer.js.map +1 -1
  53. package/lib/client/components/QaApproval.js +1 -1
  54. package/lib/client/components/QaApproval.js.map +1 -1
  55. package/lib/client/components/QaAuthGate.js +19 -10
  56. package/lib/client/components/QaAuthGate.js.map +1 -1
  57. package/lib/client/components/QaChangelog.js +56 -0
  58. package/lib/client/components/QaChangelog.js.map +1 -1
  59. package/lib/client/components/QaFilesPanel.js +17 -11
  60. package/lib/client/components/QaFilesPanel.js.map +1 -1
  61. package/lib/client/components/QaHeader.js +3 -11
  62. package/lib/client/components/QaHeader.js.map +1 -1
  63. package/lib/client/components/QaModal.js.map +1 -1
  64. package/lib/client/components/QaQuestions.js +4 -4
  65. package/lib/client/components/QaQuestions.js.map +1 -1
  66. package/lib/client/components/QaSidebar.js +10 -2
  67. package/lib/client/components/QaSidebar.js.map +1 -1
  68. package/lib/client/components/QaWidthHandle.js +111 -5
  69. package/lib/client/components/QaWidthHandle.js.map +1 -1
  70. package/lib/client/components/QaWorkspaceBrowser.js +231 -0
  71. package/lib/client/components/QaWorkspaceBrowser.js.map +1 -0
  72. package/lib/client/index.js +122 -53
  73. package/lib/client/index.js.map +1 -1
  74. package/lib/client/kiosk.js +51 -0
  75. package/lib/client/kiosk.js.map +1 -0
  76. package/lib/client/lineage.js +64 -0
  77. package/lib/client/lineage.js.map +1 -1
  78. package/lib/client/markdown/blocks.js +122 -7
  79. package/lib/client/markdown/blocks.js.map +1 -1
  80. package/lib/client/markdown/inline.js +108 -12
  81. package/lib/client/markdown/inline.js.map +1 -1
  82. package/lib/client/markdown/katex-css.js +12 -0
  83. package/lib/client/markdown/katex-css.js.map +1 -0
  84. package/lib/client/markdown/math.js +84 -0
  85. package/lib/client/markdown/math.js.map +1 -0
  86. package/lib/client/markdown/render.js +74 -5
  87. package/lib/client/markdown/render.js.map +1 -1
  88. package/lib/client/settings/card.js +2 -2
  89. package/lib/client/settings/card.js.map +1 -1
  90. package/lib/client/settings/sections/attachments.js +6 -5
  91. package/lib/client/settings/sections/attachments.js.map +1 -1
  92. package/lib/client/settings/sections/notes.js +64 -0
  93. package/lib/client/settings/sections/notes.js.map +1 -0
  94. package/lib/client/settings/sections/sources.js +4 -1
  95. package/lib/client/settings/sections/sources.js.map +1 -1
  96. package/lib/client/settings/sections.js +1 -0
  97. package/lib/client/settings/sections.js.map +1 -1
  98. package/lib/client/settlement.js +1 -1
  99. package/lib/client/settlement.js.map +1 -1
  100. package/lib/client/source-preview.js +3 -0
  101. package/lib/client/source-preview.js.map +1 -1
  102. package/lib/client/styles.js +106 -18
  103. package/lib/client/styles.js.map +1 -1
  104. package/lib/client/types.js.map +1 -1
  105. package/lib/client/user-settings/IntegrationTokensPage.js +150 -0
  106. package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -0
  107. package/lib/client/user-settings/PasswordSettingsPage.js +48 -0
  108. package/lib/client/user-settings/PasswordSettingsPage.js.map +1 -0
  109. package/lib/client/user-settings/SkillCatalog.js +2 -2
  110. package/lib/client/user-settings/SkillCatalog.js.map +1 -1
  111. package/lib/client/user-settings/UserSettingsDialog.js +17 -2
  112. package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
  113. package/lib/client/user-settings/copy.js +20 -0
  114. package/lib/client/user-settings/copy.js.map +1 -1
  115. package/lib/client.js +31007 -686
  116. package/lib/client.js.map +1 -1
  117. package/lib/config-resolvers/attachments.js +6 -5
  118. package/lib/config-resolvers/attachments.js.map +1 -1
  119. package/lib/config-resolvers/defaults.js +33 -2
  120. package/lib/config-resolvers/defaults.js.map +1 -1
  121. package/lib/config-resolvers/integration.js +94 -0
  122. package/lib/config-resolvers/integration.js.map +1 -0
  123. package/lib/config-resolvers/notes.js +26 -0
  124. package/lib/config-resolvers/notes.js.map +1 -0
  125. package/lib/config-resolvers/sources.js +4 -0
  126. package/lib/config-resolvers/sources.js.map +1 -1
  127. package/lib/config.js +107 -0
  128. package/lib/config.js.map +1 -1
  129. package/lib/index.js +348 -12
  130. package/lib/index.js.map +1 -1
  131. package/lib/integration/answer.js +100 -0
  132. package/lib/integration/answer.js.map +1 -0
  133. package/lib/integration/attachments.js +231 -0
  134. package/lib/integration/attachments.js.map +1 -0
  135. package/lib/integration/contract.js +53 -0
  136. package/lib/integration/contract.js.map +1 -0
  137. package/lib/integration/host-runner.js +243 -0
  138. package/lib/integration/host-runner.js.map +1 -0
  139. package/lib/integration/http.js +538 -0
  140. package/lib/integration/http.js.map +1 -0
  141. package/lib/integration/service.js +331 -0
  142. package/lib/integration/service.js.map +1 -0
  143. package/lib/integration/transcript-reader.js +202 -0
  144. package/lib/integration/transcript-reader.js.map +1 -0
  145. package/lib/integration/transcript.js +148 -0
  146. package/lib/integration/transcript.js.map +1 -0
  147. package/lib/personal-skills/index.js +2 -2
  148. package/lib/personal-skills/index.js.map +1 -1
  149. package/lib/personal-skills/paths.js +14 -8
  150. package/lib/personal-skills/paths.js.map +1 -1
  151. package/lib/personal-skills/provider.js +16 -4
  152. package/lib/personal-skills/provider.js.map +1 -1
  153. package/lib/personal-skills/service.js +240 -30
  154. package/lib/personal-skills/service.js.map +1 -1
  155. package/lib/prompt-notes.js +103 -6
  156. package/lib/prompt-notes.js.map +1 -1
  157. package/lib/provenance/document-preview.js +60 -0
  158. package/lib/provenance/document-preview.js.map +1 -0
  159. package/lib/provenance/file-preview.js +191 -19
  160. package/lib/provenance/file-preview.js.map +1 -1
  161. package/lib/qa-tools/catalog.js +18 -1
  162. package/lib/qa-tools/catalog.js.map +1 -1
  163. package/lib/qa-tools/docs-tools.js +563 -0
  164. package/lib/qa-tools/docs-tools.js.map +1 -0
  165. package/lib/qa-tools/file-delete-gate.js +60 -0
  166. package/lib/qa-tools/file-delete-gate.js.map +1 -0
  167. package/lib/qa-tools/file-delete.js +156 -0
  168. package/lib/qa-tools/file-delete.js.map +1 -0
  169. package/lib/resolve-config.js +6 -0
  170. package/lib/resolve-config.js.map +1 -1
  171. package/lib/secure-session.js +83 -3
  172. package/lib/secure-session.js.map +1 -1
  173. package/lib/shared/documents.js +22 -0
  174. package/lib/shared/documents.js.map +1 -0
  175. package/lib/shared/integration-tokens.js +23 -0
  176. package/lib/shared/integration-tokens.js.map +1 -0
  177. package/lib/typert.host.js +1320 -134
  178. package/lib/typert.remote-client.d.ts +33 -1
  179. package/lib/typert.remote-client.js +1102 -74
  180. package/lib/types/access/service.d.ts +33 -2
  181. package/lib/types/account-remotes.d.ts +30 -1
  182. package/lib/types/accounts/database.d.ts +53 -0
  183. package/lib/types/accounts/errors.d.ts +5 -1
  184. package/lib/types/accounts/service-token.d.ts +70 -0
  185. package/lib/types/accounts/store.d.ts +131 -1
  186. package/lib/types/admin/conversation-log.d.ts +12 -0
  187. package/lib/types/admin/service.d.ts +56 -1
  188. package/lib/types/admin/session-log.d.ts +21 -0
  189. package/lib/types/attachment-rules.d.ts +26 -3
  190. package/lib/types/client/QaAccountsController.d.ts +64 -5
  191. package/lib/types/client/QaSessionController.d.ts +24 -2
  192. package/lib/types/client/admin/pages/SkillFiles.d.ts +17 -0
  193. package/lib/types/client/admin/routes.d.ts +2 -0
  194. package/lib/types/client/admin/shared.d.ts +2 -0
  195. package/lib/types/client/attachments.d.ts +21 -4
  196. package/lib/types/client/base64.d.ts +13 -1
  197. package/lib/types/client/components/QaAgentsDrawer.d.ts +2 -1
  198. package/lib/types/client/components/QaFilesPanel.d.ts +16 -4
  199. package/lib/types/client/components/QaHeader.d.ts +9 -3
  200. package/lib/types/client/components/QaModal.d.ts +4 -3
  201. package/lib/types/client/components/QaWidthHandle.d.ts +48 -2
  202. package/lib/types/client/components/QaWorkspaceBrowser.d.ts +15 -0
  203. package/lib/types/client/index.d.ts +1 -1
  204. package/lib/types/client/kiosk.d.ts +34 -0
  205. package/lib/types/client/lineage.d.ts +42 -0
  206. package/lib/types/client/markdown/blocks.d.ts +14 -1
  207. package/lib/types/client/markdown/inline.d.ts +23 -7
  208. package/lib/types/client/markdown/katex-css.d.ts +11 -0
  209. package/lib/types/client/markdown/math.d.ts +23 -0
  210. package/lib/types/client/markdown/render.d.ts +2 -1
  211. package/lib/types/client/settings/sections/notes.d.ts +12 -0
  212. package/lib/types/client/settings/sections.d.ts +1 -0
  213. package/lib/types/client/settlement.d.ts +4 -1
  214. package/lib/types/client/styles.d.ts +15 -2
  215. package/lib/types/client/types.d.ts +120 -1
  216. package/lib/types/client/user-settings/IntegrationTokensPage.d.ts +21 -0
  217. package/lib/types/client/user-settings/PasswordSettingsPage.d.ts +19 -0
  218. package/lib/types/client/user-settings/UserSettingsDialog.d.ts +11 -2
  219. package/lib/types/client/user-settings/copy.d.ts +10 -1
  220. package/lib/types/config-resolvers/integration.d.ts +47 -0
  221. package/lib/types/config-resolvers/notes.d.ts +10 -0
  222. package/lib/types/config.d.ts +10 -0
  223. package/lib/types/index.d.ts +111 -1
  224. package/lib/types/integration/answer.d.ts +65 -0
  225. package/lib/types/integration/attachments.d.ts +85 -0
  226. package/lib/types/integration/contract.d.ts +196 -0
  227. package/lib/types/integration/host-runner.d.ts +44 -0
  228. package/lib/types/integration/http.d.ts +79 -0
  229. package/lib/types/integration/service.d.ts +120 -0
  230. package/lib/types/integration/transcript-reader.d.ts +100 -0
  231. package/lib/types/integration/transcript.d.ts +59 -0
  232. package/lib/types/personal-skills/index.d.ts +2 -2
  233. package/lib/types/personal-skills/paths.d.ts +15 -3
  234. package/lib/types/personal-skills/provider.d.ts +14 -2
  235. package/lib/types/personal-skills/service.d.ts +89 -14
  236. package/lib/types/prompt-notes.d.ts +37 -0
  237. package/lib/types/provenance/document-preview.d.ts +28 -0
  238. package/lib/types/provenance/file-preview.d.ts +69 -2
  239. package/lib/types/qa-tools/catalog.d.ts +1 -1
  240. package/lib/types/qa-tools/docs-tools.d.ts +160 -0
  241. package/lib/types/qa-tools/file-delete-gate.d.ts +42 -0
  242. package/lib/types/qa-tools/file-delete.d.ts +32 -0
  243. package/lib/types/secure-session.d.ts +52 -1
  244. package/lib/types/shared/documents.d.ts +20 -0
  245. package/lib/types/shared/integration-tokens.d.ts +24 -0
  246. package/lib/types/types.d.ts +263 -3
  247. package/lib/types/ui-mode.d.ts +18 -0
  248. package/lib/ui-mode.js +22 -0
  249. package/lib/ui-mode.js.map +1 -0
  250. 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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"}