@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
package/lib/prompt-notes.js
CHANGED
|
@@ -12,6 +12,28 @@ export const QA_IDENTITY_NOTE = "dsh-qa-surface:user-identity";
|
|
|
12
12
|
export const QA_SOURCES_NOTE = "dsh-qa-surface:structured-sources";
|
|
13
13
|
/** Note name asking the model to name its delegations. */
|
|
14
14
|
export const QA_DELEGATION_NOTE = "dsh-qa-surface:delegation-naming";
|
|
15
|
+
/** Note name routing an attached office document to the document pipeline. */
|
|
16
|
+
export const QA_DOCUMENTS_NOTE = "dsh-qa-surface:attached-documents";
|
|
17
|
+
/** Note name carrying the deployment's rule about where an answer comes from. */
|
|
18
|
+
export const QA_SOURCE_PRIORITY_NOTE = "dsh-qa-surface:source-priority";
|
|
19
|
+
/**
|
|
20
|
+
* Built-in note texts. Each is the fallback for its settings template
|
|
21
|
+
* (`notes.*.template`); the placeholders mark the parts the injector
|
|
22
|
+
* substitutes. Unknown or empty placeholders render as empty text.
|
|
23
|
+
*/
|
|
24
|
+
export const QA_IDENTITY_NOTE_TEMPLATE = "{identity}\n\n{instructions}";
|
|
25
|
+
export const QA_SOURCES_NOTE_TEMPLATE = "Source provenance is collected automatically from your tool calls; the QA surface lists what it collected beside the answer. Do not append a manual Sources/Источники bibliography of your own.";
|
|
26
|
+
export const QA_SOURCES_FALLBACK_TEMPLATE = "A delegated run whose provider cannot expose tool events must call {reportTool} before finishing.";
|
|
27
|
+
export const QA_DELEGATION_NOTE_TEMPLATE = "When you start a background subagent, give the delegation a short vivid name in its description field: two or three words in the user's language that say what the run is for («Сверка отчётов», \"Log triage\"). The QA surface shows that description as the subagent's display name in the operator's panel and completion notices.";
|
|
28
|
+
export const QA_DOCUMENTS_NOTE_TEMPLATE = "A document a chat user attached is a path on disk, not text: read it with the deployment's document pipeline — `document_inspect` says what a DOCX or PDF is, `document_to_markdown` extracts its text, `document_from_url` stores the text of an attachment that only exists behind a URL. The plain file reader refuses those formats as binary, so that refusal is expected and is not a hint to go looking for the file somewhere else. When the pipeline itself refuses a path, report the refusal and the path it named instead of trying another reader.";
|
|
29
|
+
export const QA_SOURCE_PRIORITY_NOTE_TEMPLATE = "Answer from the source that owns the question: read what the conversation and its attachments already carry, then search the product documentation and ask the domain expert, and only then look in memory. Recalled memory is background from earlier sessions — a miss there is not evidence that no source exists, and it is not where a document, a page or a product fact should be looked up.";
|
|
30
|
+
/** Substitute `{name}` placeholders; a placeholder without a value drops out. */
|
|
31
|
+
function renderTemplate(template, tokens) {
|
|
32
|
+
return template.replace(/\{(\w+)\}/g, (token, name) => {
|
|
33
|
+
const value = tokens[name];
|
|
34
|
+
return value === undefined ? token : value;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
15
37
|
/** Bound on the durable delegation chain walked to find a chat's root session. */
|
|
16
38
|
const QA_NOTES_MAX_DEPTH = 64;
|
|
17
39
|
/**
|
|
@@ -117,6 +139,8 @@ export class QaPromptNotes {
|
|
|
117
139
|
...this.identityNotes(root, config),
|
|
118
140
|
...this.sourcesNotes(root, config),
|
|
119
141
|
...this.delegationNotes(root),
|
|
142
|
+
...this.documentsNotes(root),
|
|
143
|
+
...this.sourcePriorityNotes(root),
|
|
120
144
|
].filter((note) => this.carriedText(agent, note.name) !== note.text);
|
|
121
145
|
if (pending.length === 0)
|
|
122
146
|
return decision;
|
|
@@ -144,6 +168,8 @@ export class QaPromptNotes {
|
|
|
144
168
|
const profileConfig = config.accounts.profile;
|
|
145
169
|
if (!profileConfig.enabled || !profileConfig.inject)
|
|
146
170
|
return [];
|
|
171
|
+
if (!config.notes.identity.enabled)
|
|
172
|
+
return [];
|
|
147
173
|
const identity = this.identityOf(rootSessionId);
|
|
148
174
|
if (identity === undefined)
|
|
149
175
|
return [];
|
|
@@ -152,9 +178,16 @@ export class QaPromptNotes {
|
|
|
152
178
|
profile: identity.profile,
|
|
153
179
|
identities: profileConfig.identities,
|
|
154
180
|
});
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
181
|
+
const parts = [rendered.identity, rendered.instructions];
|
|
182
|
+
// `{identity}` is the payload: a template without it would inject a note
|
|
183
|
+
// that never says who the user is, so it falls back to the built-in order.
|
|
184
|
+
const template = config.notes.identity.template;
|
|
185
|
+
const text = template === "" || !template.includes("{identity}")
|
|
186
|
+
? parts.filter((part) => part !== "").join("\n\n")
|
|
187
|
+
: renderTemplate(template, {
|
|
188
|
+
identity: rendered.identity,
|
|
189
|
+
instructions: rendered.instructions,
|
|
190
|
+
}).trim();
|
|
158
191
|
return text === "" ? [] : [{ name: QA_IDENTITY_NOTE, text }];
|
|
159
192
|
}
|
|
160
193
|
/** What the deployment expects around the sources the surface collects. */
|
|
@@ -162,11 +195,20 @@ export class QaPromptNotes {
|
|
|
162
195
|
const sources = config.sources;
|
|
163
196
|
if (!sources.enabled || !this.options.isQaSession(rootSessionId))
|
|
164
197
|
return [];
|
|
198
|
+
if (!config.notes.sources.enabled)
|
|
199
|
+
return [];
|
|
165
200
|
const lines = [
|
|
166
|
-
|
|
201
|
+
renderTemplate(config.notes.sources.template === ""
|
|
202
|
+
? QA_SOURCES_NOTE_TEMPLATE
|
|
203
|
+
: config.notes.sources.template, { reportTool: QA_REPORT_SOURCES_TOOL }),
|
|
167
204
|
];
|
|
168
205
|
if (sources.subagents.enableReportToolFallback) {
|
|
169
|
-
|
|
206
|
+
const fallback = config.notes.sources.fallbackTemplate;
|
|
207
|
+
// `{reportTool}` is what makes the fallback actionable; without it the
|
|
208
|
+
// built-in sentence is the safer carrier.
|
|
209
|
+
lines.push(renderTemplate(fallback === "" || !fallback.includes("{reportTool}")
|
|
210
|
+
? QA_SOURCES_FALLBACK_TEMPLATE
|
|
211
|
+
: fallback, { reportTool: QA_REPORT_SOURCES_TOOL }));
|
|
170
212
|
}
|
|
171
213
|
return [{ name: QA_SOURCES_NOTE, text: lines.join("\n") }];
|
|
172
214
|
}
|
|
@@ -179,10 +221,65 @@ export class QaPromptNotes {
|
|
|
179
221
|
delegationNotes(rootSessionId) {
|
|
180
222
|
if (!this.options.isQaSession(rootSessionId))
|
|
181
223
|
return [];
|
|
224
|
+
if (!this.options.config().notes.delegation.enabled)
|
|
225
|
+
return [];
|
|
226
|
+
const template = this.options.config().notes.delegation.template;
|
|
182
227
|
return [
|
|
183
228
|
{
|
|
184
229
|
name: QA_DELEGATION_NOTE,
|
|
185
|
-
text:
|
|
230
|
+
text: template === ""
|
|
231
|
+
? QA_DELEGATION_NOTE_TEMPLATE
|
|
232
|
+
: renderTemplate(template, {}).trim(),
|
|
233
|
+
},
|
|
234
|
+
];
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Which reader an attached document belongs to.
|
|
238
|
+
*
|
|
239
|
+
* A chat user's `.docx` or `.pdf` arrives as a path into the attachment
|
|
240
|
+
* store, and the reader the model reaches for by habit answers `binary file`
|
|
241
|
+
* for it. That answer is a fact about the format, not about the file being
|
|
242
|
+
* missing, and a run that reads it as the second one searches the workspace
|
|
243
|
+
* for a document it was already handed. The note names the pipeline and both
|
|
244
|
+
* halves of the trap: the plain reader's refusal is expected, and the
|
|
245
|
+
* pipeline's own refusal is a report to make, not a reason to try a third
|
|
246
|
+
* reader.
|
|
247
|
+
*/
|
|
248
|
+
documentsNotes(rootSessionId) {
|
|
249
|
+
if (!this.options.isQaSession(rootSessionId))
|
|
250
|
+
return [];
|
|
251
|
+
if (!this.options.config().notes.documents.enabled)
|
|
252
|
+
return [];
|
|
253
|
+
const template = this.options.config().notes.documents.template;
|
|
254
|
+
return [
|
|
255
|
+
{
|
|
256
|
+
name: QA_DOCUMENTS_NOTE,
|
|
257
|
+
text: template === ""
|
|
258
|
+
? QA_DOCUMENTS_NOTE_TEMPLATE
|
|
259
|
+
: renderTemplate(template, {}).trim(),
|
|
260
|
+
},
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Where an answer comes from, in this deployment's terms.
|
|
265
|
+
*
|
|
266
|
+
* The memory plugin's own skill says the same thing in its own words, but a
|
|
267
|
+
* persona may be the entire system prompt and a skill is read only once the
|
|
268
|
+
* model decides to reach for it: the rule that outlives both is the one
|
|
269
|
+
* delivered as a note, ahead of the first tool call that would break it.
|
|
270
|
+
*/
|
|
271
|
+
sourcePriorityNotes(rootSessionId) {
|
|
272
|
+
if (!this.options.isQaSession(rootSessionId))
|
|
273
|
+
return [];
|
|
274
|
+
if (!this.options.config().notes.sourcePriority.enabled)
|
|
275
|
+
return [];
|
|
276
|
+
const template = this.options.config().notes.sourcePriority.template;
|
|
277
|
+
return [
|
|
278
|
+
{
|
|
279
|
+
name: QA_SOURCE_PRIORITY_NOTE,
|
|
280
|
+
text: template === ""
|
|
281
|
+
? QA_SOURCE_PRIORITY_NOTE_TEMPLATE
|
|
282
|
+
: renderTemplate(template, {}).trim(),
|
|
186
283
|
},
|
|
187
284
|
];
|
|
188
285
|
}
|
package/lib/prompt-notes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-notes.js","sourceRoot":"","sources":["../src/prompt-notes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAOpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAC5C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AAC/D,wEAAwE;AACxE,MAAM,CAAC,MAAM,eAAe,GAAG,mCAAmC,CAAC;AACnE,0DAA0D;AAC1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-notes.js","sourceRoot":"","sources":["../src/prompt-notes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { basename } from "node:path";
|
|
3
|
+
import { mediaTypeOf, QaSourcePreviewError, resolveAllowedFile, } from "./file-preview.js";
|
|
4
|
+
import { isConvertibleDocument } from "../shared/documents.js";
|
|
5
|
+
/** The produced PDF, base64-encoded for the wire. */
|
|
6
|
+
function toPreview(bytes, name) {
|
|
7
|
+
return {
|
|
8
|
+
kind: "pdf",
|
|
9
|
+
base64: bytes.toString("base64"),
|
|
10
|
+
mime: "application/pdf",
|
|
11
|
+
name,
|
|
12
|
+
bytes: bytes.byteLength,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Render one Word document as a PDF for the files panel.
|
|
17
|
+
*
|
|
18
|
+
* The conversion is the document pipeline's own — the same runtime, providers
|
|
19
|
+
* and limits the `document_*` tools use — reached through the face that plugin
|
|
20
|
+
* publishes for its Host siblings; a deployment without the pipeline installed
|
|
21
|
+
* refuses with `unsupported` rather than growing a second converter here. The
|
|
22
|
+
* input path passes the same containment check the panel's other reads use, so
|
|
23
|
+
* a preview cannot read what a listing could not reach.
|
|
24
|
+
*
|
|
25
|
+
* The resolved root the check opened is handed to the pipeline as well (§26.2):
|
|
26
|
+
* an uploaded Word file lives in the attachment store, and a pipeline that is
|
|
27
|
+
* not told about that root refuses the file this check just accepted.
|
|
28
|
+
*/
|
|
29
|
+
export async function previewConvertibleDocument({ documents, sessionId, maxBytes, ...file }) {
|
|
30
|
+
const face = documents();
|
|
31
|
+
if (face === undefined)
|
|
32
|
+
throw new QaSourcePreviewError("unsupported");
|
|
33
|
+
const resolved = await resolveAllowedFile(file);
|
|
34
|
+
if (!isConvertibleDocument(mediaTypeOf(resolved.canonical))) {
|
|
35
|
+
throw new QaSourcePreviewError("unsupported");
|
|
36
|
+
}
|
|
37
|
+
const extraInputRoots = file.attachmentRoot === undefined ? [] : [file.attachmentRoot];
|
|
38
|
+
let rendered;
|
|
39
|
+
try {
|
|
40
|
+
const converted = await face.convert({ file: resolved.canonical, targetFormat: "pdf" }, {
|
|
41
|
+
workspaceRoot: file.cwd,
|
|
42
|
+
sessionId,
|
|
43
|
+
...(extraInputRoots.length === 0 ? {} : { extraInputRoots }),
|
|
44
|
+
});
|
|
45
|
+
const pdf = converted.files.find((output) => output.format === "pdf" && output.status === "created");
|
|
46
|
+
if (pdf === undefined)
|
|
47
|
+
throw new QaSourcePreviewError("unsupported");
|
|
48
|
+
rendered = pdf.path;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw new QaSourcePreviewError(error instanceof QaSourcePreviewError ? error.reason : "unsupported");
|
|
52
|
+
}
|
|
53
|
+
const bytes = await readFile(rendered).catch(() => undefined);
|
|
54
|
+
if (bytes === undefined)
|
|
55
|
+
throw new QaSourcePreviewError("unavailable");
|
|
56
|
+
if (bytes.byteLength > maxBytes)
|
|
57
|
+
throw new QaSourcePreviewError("unsupported");
|
|
58
|
+
return toPreview(bytes, basename(resolved.canonical));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=document-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-preview.js","sourceRoot":"","sources":["../../src/provenance/document-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAa/D,qDAAqD;AACrD,SAAS,SAAS,CAAC,KAAa,EAAE,IAAY;IAC5C,OAAO;QACL,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChC,IAAI,EAAE,iBAAiB;QACvB,IAAI;QACJ,KAAK,EAAE,KAAK,CAAC,UAAU;KACxB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAC/C,SAAS,EACT,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACkB;IACzB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,eAAe,GACnB,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACjE,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAClC,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EACjD;YACE,aAAa,EAAE,IAAI,CAAC,GAAG;YACvB,SAAS;YACT,GAAG,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;SAC7D,CACF,CAAC;QACF,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAC9B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CACnE,CAAC;QACF,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACrE,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,oBAAoB,CAC5B,KAAK,YAAY,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CACrE,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,UAAU,GAAG,QAAQ;QAC7B,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAChD,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { open, realpath, stat } from "node:fs/promises";
|
|
1
|
+
import { open, realpath, stat, lstat, readdir } from "node:fs/promises";
|
|
2
2
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
3
3
|
import { canonicalizeWorkspacePath } from "./normalize.js";
|
|
4
4
|
/** Host refusal whose wire message carries the coarse reason marker. */
|
|
@@ -28,20 +28,16 @@ function insideRoot(root, file) {
|
|
|
28
28
|
!isAbsolute(fromRoot));
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Resolve one requested file and check it against the readable roots.
|
|
32
32
|
*
|
|
33
|
-
* The
|
|
34
|
-
*
|
|
35
|
-
* the
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* refused as foreign evidence.
|
|
33
|
+
* The roots mirror the per-user execution guard — the chat's own cwd plus the
|
|
34
|
+
* deployment's shared read-only directories and the attachment store — so a
|
|
35
|
+
* file the model was explicitly allowed to read stays readable in the panel,
|
|
36
|
+
* while anything else is refused with the coarse `outside-roots` reason
|
|
37
|
+
* instead of leaking whether it exists.
|
|
39
38
|
*/
|
|
40
|
-
export async function
|
|
41
|
-
const canonicalPath = canonicalizeWorkspacePath(
|
|
42
|
-
if (!isEvidence(canonicalPath)) {
|
|
43
|
-
throw new QaSourcePreviewError("not-evidence");
|
|
44
|
-
}
|
|
39
|
+
export async function resolveAllowedFile({ filePath, cwd, sharedReadOnlyRoots = [], attachmentRoot, }) {
|
|
40
|
+
const canonicalPath = canonicalizeWorkspacePath(filePath, cwd);
|
|
45
41
|
const chatRoot = await canonicalRoot(cwd);
|
|
46
42
|
if (chatRoot === undefined)
|
|
47
43
|
throw new QaSourcePreviewError("unavailable");
|
|
@@ -62,25 +58,201 @@ export async function readSourceFilePreview({ sourcePath, cwd, isEvidence, share
|
|
|
62
58
|
if (info === undefined || !info.isFile()) {
|
|
63
59
|
throw new QaSourcePreviewError("unavailable");
|
|
64
60
|
}
|
|
65
|
-
|
|
61
|
+
return { canonicalPath, canonical, size: info.size };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Read one evidence file from the roots the QA read policy opens.
|
|
65
|
+
*
|
|
66
|
+
* The bundle canonicalized each recorded path against the chat cwd, while the
|
|
67
|
+
* browser may hold either spelling of the same file: it projects sources with
|
|
68
|
+
* the *configured* session cwd, which is null whenever the chat is pinned by
|
|
69
|
+
* workspaceId or by an account directory. So the request is canonicalized the
|
|
70
|
+
* same way before it is matched, or a file inside the chat's own workspace is
|
|
71
|
+
* refused as foreign evidence.
|
|
72
|
+
*/
|
|
73
|
+
export async function readSourceFilePreview({ sourcePath, cwd, isEvidence, sharedReadOnlyRoots = [], attachmentRoot, maxBytes, maxMarkdownRenderBytes, }) {
|
|
74
|
+
const canonicalPath = canonicalizeWorkspacePath(sourcePath, cwd);
|
|
75
|
+
if (!isEvidence(canonicalPath)) {
|
|
76
|
+
throw new QaSourcePreviewError("not-evidence");
|
|
77
|
+
}
|
|
78
|
+
const file = await resolveAllowedFile({
|
|
79
|
+
filePath: canonicalPath,
|
|
80
|
+
cwd,
|
|
81
|
+
sharedReadOnlyRoots,
|
|
82
|
+
...(attachmentRoot === undefined ? {} : { attachmentRoot }),
|
|
83
|
+
});
|
|
84
|
+
const limit = Math.min(maxBytes, file.size);
|
|
66
85
|
const buffer = Buffer.alloc(limit);
|
|
67
|
-
const handle = await open(canonical, "r").catch(() => undefined);
|
|
86
|
+
const handle = await open(file.canonical, "r").catch(() => undefined);
|
|
68
87
|
if (handle === undefined)
|
|
69
88
|
throw new QaSourcePreviewError("unavailable");
|
|
70
89
|
try {
|
|
71
90
|
const { bytesRead } = await handle.read(buffer, 0, limit, 0);
|
|
72
|
-
const markdown = /\.(?:md|markdown)$/iu.test(canonical);
|
|
91
|
+
const markdown = /\.(?:md|markdown)$/iu.test(file.canonical);
|
|
73
92
|
return {
|
|
74
93
|
path: canonicalPath,
|
|
75
94
|
content: buffer.subarray(0, bytesRead).toString("utf8"),
|
|
76
|
-
size:
|
|
77
|
-
truncated:
|
|
95
|
+
size: file.size,
|
|
96
|
+
truncated: file.size > bytesRead,
|
|
78
97
|
markdown,
|
|
79
|
-
renderableMarkdown: markdown &&
|
|
98
|
+
renderableMarkdown: markdown && file.size <= maxMarkdownRenderBytes,
|
|
80
99
|
};
|
|
81
100
|
}
|
|
82
101
|
finally {
|
|
83
102
|
await handle.close();
|
|
84
103
|
}
|
|
85
104
|
}
|
|
105
|
+
/** Extensions the preview advertises so the panel can pick a renderer. */
|
|
106
|
+
const MIME_BY_EXTENSION = {
|
|
107
|
+
bmp: "image/bmp",
|
|
108
|
+
csv: "text/csv",
|
|
109
|
+
gif: "image/gif",
|
|
110
|
+
html: "text/html",
|
|
111
|
+
jpeg: "image/jpeg",
|
|
112
|
+
jpg: "image/jpeg",
|
|
113
|
+
json: "application/json",
|
|
114
|
+
md: "text/markdown",
|
|
115
|
+
markdown: "text/markdown",
|
|
116
|
+
pdf: "application/pdf",
|
|
117
|
+
docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
118
|
+
png: "image/png",
|
|
119
|
+
svg: "image/svg+xml",
|
|
120
|
+
txt: "text/plain",
|
|
121
|
+
webp: "image/webp",
|
|
122
|
+
xml: "text/xml",
|
|
123
|
+
yaml: "text/yaml",
|
|
124
|
+
yml: "text/yaml",
|
|
125
|
+
};
|
|
126
|
+
/** The advertised type of one file: by extension, else opaque bytes. */
|
|
127
|
+
export function mediaTypeOf(path) {
|
|
128
|
+
const extension = /\.([a-z\d]+)$/iu.exec(path)?.[1]?.toLowerCase();
|
|
129
|
+
return ((extension === undefined ? undefined : MIME_BY_EXTENSION[extension]) ??
|
|
130
|
+
"application/octet-stream");
|
|
131
|
+
}
|
|
132
|
+
/** Whether a byte window decodes as UTF-8 text rather than binary. */
|
|
133
|
+
function decodesAsText(buffer) {
|
|
134
|
+
if (buffer.includes(0))
|
|
135
|
+
return false;
|
|
136
|
+
try {
|
|
137
|
+
new TextDecoder("utf-8", { fatal: true }).decode(buffer);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* List one directory of the chat's own workspace.
|
|
146
|
+
*
|
|
147
|
+
* Browsing is deliberately narrower than previewing: the panel walks the tree
|
|
148
|
+
* the chat works in, never the deployment's shared read-only roots, so the
|
|
149
|
+
* visitor cannot enumerate the deployment from the rail. The request is
|
|
150
|
+
* confined with the same realpath-then-contain check the preview uses, which
|
|
151
|
+
* is what makes `..` and symlinked directories harmless.
|
|
152
|
+
* Symlinked children are omitted rather than followed: a link inside the
|
|
153
|
+
* workspace may point anywhere, and a tree that silently leaves the chat's
|
|
154
|
+
* directory is worse than one that hides a link.
|
|
155
|
+
*/
|
|
156
|
+
export async function listWorkspaceDirectory({ dirPath, cwd, maxEntries, }) {
|
|
157
|
+
const requested = canonicalizeWorkspacePath(dirPath, cwd);
|
|
158
|
+
const chatRoot = await canonicalRoot(cwd);
|
|
159
|
+
if (chatRoot === undefined)
|
|
160
|
+
throw new QaSourcePreviewError("unavailable");
|
|
161
|
+
const candidate = requested === "" || requested === "."
|
|
162
|
+
? chatRoot
|
|
163
|
+
: isAbsolute(requested)
|
|
164
|
+
? requested
|
|
165
|
+
: resolve(chatRoot, requested);
|
|
166
|
+
const canonical = await realpath(candidate).catch(() => undefined);
|
|
167
|
+
if (canonical === undefined)
|
|
168
|
+
throw new QaSourcePreviewError("unavailable");
|
|
169
|
+
if (canonical !== chatRoot && !insideRoot(chatRoot, canonical)) {
|
|
170
|
+
throw new QaSourcePreviewError("outside-roots");
|
|
171
|
+
}
|
|
172
|
+
const info = await stat(canonical).catch(() => undefined);
|
|
173
|
+
if (info === undefined || !info.isDirectory()) {
|
|
174
|
+
throw new QaSourcePreviewError("unavailable");
|
|
175
|
+
}
|
|
176
|
+
const dirents = await readdir(canonical, { withFileTypes: true }).catch(() => undefined);
|
|
177
|
+
if (dirents === undefined)
|
|
178
|
+
throw new QaSourcePreviewError("unavailable");
|
|
179
|
+
const entries = [];
|
|
180
|
+
let truncated = false;
|
|
181
|
+
const sorted = [...dirents].sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0);
|
|
182
|
+
for (const dirent of sorted) {
|
|
183
|
+
if (dirent.isSymbolicLink())
|
|
184
|
+
continue;
|
|
185
|
+
const type = dirent.isDirectory()
|
|
186
|
+
? "directory"
|
|
187
|
+
: dirent.isFile()
|
|
188
|
+
? "file"
|
|
189
|
+
: undefined;
|
|
190
|
+
if (type === undefined)
|
|
191
|
+
continue;
|
|
192
|
+
if (entries.length >= maxEntries) {
|
|
193
|
+
truncated = true;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
const size = type === "file"
|
|
197
|
+
? ((await lstat(resolve(canonical, dirent.name)).catch(() => undefined))
|
|
198
|
+
?.size ?? null)
|
|
199
|
+
: null;
|
|
200
|
+
entries.push({ name: dirent.name, type, size });
|
|
201
|
+
}
|
|
202
|
+
entries.sort((left, right) => {
|
|
203
|
+
if (left.type !== right.type)
|
|
204
|
+
return left.type === "directory" ? -1 : 1;
|
|
205
|
+
return left.name < right.name ? -1 : left.name > right.name ? 1 : 0;
|
|
206
|
+
});
|
|
207
|
+
return { path: requested === "." ? "" : requested, entries, truncated };
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Read one file of the chat's workspace for the panel: text when it decodes as
|
|
211
|
+
* UTF-8, base64 bytes when it does not, so a document the agent produced can be
|
|
212
|
+
* offered for download while a note previews inline.
|
|
213
|
+
*
|
|
214
|
+
* Unlike the source preview this is not bound to recorded evidence — the panel
|
|
215
|
+
* browses what the chat's workspace holds — but it is bound to the same roots
|
|
216
|
+
* the model itself may read.
|
|
217
|
+
*/
|
|
218
|
+
export async function readWorkspaceFile({ filePath, cwd, sharedReadOnlyRoots = [], attachmentRoot, maxBytes, maxMarkdownRenderBytes, }) {
|
|
219
|
+
const file = await resolveAllowedFile({
|
|
220
|
+
filePath,
|
|
221
|
+
cwd,
|
|
222
|
+
sharedReadOnlyRoots,
|
|
223
|
+
...(attachmentRoot === undefined ? {} : { attachmentRoot }),
|
|
224
|
+
});
|
|
225
|
+
const limit = Math.min(maxBytes, file.size);
|
|
226
|
+
const buffer = Buffer.alloc(limit);
|
|
227
|
+
const handle = await open(file.canonical, "r").catch(() => undefined);
|
|
228
|
+
if (handle === undefined)
|
|
229
|
+
throw new QaSourcePreviewError("unavailable");
|
|
230
|
+
let read;
|
|
231
|
+
try {
|
|
232
|
+
read = await handle.read(buffer, 0, limit, 0);
|
|
233
|
+
}
|
|
234
|
+
finally {
|
|
235
|
+
await handle.close();
|
|
236
|
+
}
|
|
237
|
+
const bytesRead = read.bytesRead;
|
|
238
|
+
const window = buffer.subarray(0, bytesRead);
|
|
239
|
+
const markdown = /\.(?:md|markdown)$/iu.test(file.canonical);
|
|
240
|
+
const truncated = file.size > bytesRead;
|
|
241
|
+
const base = {
|
|
242
|
+
path: file.canonicalPath,
|
|
243
|
+
size: file.size,
|
|
244
|
+
truncated,
|
|
245
|
+
markdown,
|
|
246
|
+
renderableMarkdown: markdown && file.size <= maxMarkdownRenderBytes,
|
|
247
|
+
mime: mediaTypeOf(file.canonical),
|
|
248
|
+
};
|
|
249
|
+
// Text and bytes are told apart by the window itself, not by the size: a
|
|
250
|
+
// truncated text file still previews as its head, while a binary file stays
|
|
251
|
+
// bytes whatever the window holds — decoding it as text would hand the panel
|
|
252
|
+
// mojibake it cannot tell from content.
|
|
253
|
+
if (!decodesAsText(window)) {
|
|
254
|
+
return { ...base, base64: window.toString("base64") };
|
|
255
|
+
}
|
|
256
|
+
return { ...base, text: window.toString("utf8") };
|
|
257
|
+
}
|
|
86
258
|
//# sourceMappingURL=file-preview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-preview.js","sourceRoot":"","sources":["../../src/provenance/file-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-preview.js","sourceRoot":"","sources":["../../src/provenance/file-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAO/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAe3D,wEAAwE;AACxE,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACxB,MAAM;IAA3B,YAAqB,MAA6B;QAChD,KAAK,CAAC,gCAAgC,CAAC,CAAC;sBADrB,MAAM;QAEzB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AA+BD,iFAAiF;AACjF,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,CACL,QAAQ,KAAK,EAAE;QACf,QAAQ,KAAK,IAAI;QACjB,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QAChC,CAAC,UAAU,CAAC,QAAQ,CAAC,CACtB,CAAC;AACJ,CAAC;AAoBD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,QAAQ,EACR,GAAG,EACH,mBAAmB,GAAG,EAAE,EACxB,cAAc,GACO;IACrB,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC;QACzC,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAE3E,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,GAAG,mBAAmB,CAAC,CAAC;IACpD,IAAI,cAAc,KAAK,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CACrE,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAC7C,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAC1C,UAAU,EACV,GAAG,EACH,UAAU,EACV,mBAAmB,GAAG,EAAE,EACxB,cAAc,EACd,QAAQ,EACR,sBAAsB,GACK;IAC3B,MAAM,aAAa,GAAG,yBAAyB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACjE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC;QACpC,QAAQ,EAAE,aAAa;QACvB,GAAG;QACH,mBAAmB;QACnB,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;KAC5D,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtE,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACxE,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS;YAChC,QAAQ;YACR,kBAAkB,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,sBAAsB;SACpE,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAWD,0EAA0E;AAC1E,MAAM,iBAAiB,GAAqC;IAC1D,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,kBAAkB;IACxB,EAAE,EAAE,eAAe;IACnB,QAAQ,EAAE,eAAe;IACzB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,yEAAyE;IAC/E,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,WAAW;CACjB,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACnE,OAAO,CACL,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACpE,0BAA0B,CAC3B,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAC3C,OAAO,EACP,GAAG,EACH,UAAU,GACa;IACvB,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC1E,MAAM,SAAS,GACb,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,GAAG;QACnC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;YACrB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC3E,IAAI,SAAS,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CACrE,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACF,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAEzE,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC/C,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,cAAc,EAAE;YAAE,SAAS;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE;YAC/B,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;gBACf,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACjC,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GACR,IAAI,KAAK,MAAM;YACb,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACpE,EAAE,IAAI,IAAI,IAAI,CAAC;YACnB,CAAC,CAAC,IAAI,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC1E,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,QAAQ,EACR,GAAG,EACH,mBAAmB,GAAG,EAAE,EACxB,cAAc,EACd,QAAQ,EACR,sBAAsB,GACC;IACvB,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC;QACpC,QAAQ;QACR,GAAG;QACH,mBAAmB;QACnB,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;KAC5D,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtE,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACxE,IAAI,IAA6C,CAAC;IAClD,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,IAAI,CAAC,aAAa;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS;QACT,QAAQ;QACR,kBAAkB,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,sBAAsB;QACnE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;KAClC,CAAC;IACF,yEAAyE;IACzE,4EAA4E;IAC5E,6EAA6E;IAC7E,wCAAwC;IACxC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AACpD,CAAC"}
|
package/lib/qa-tools/catalog.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { defineTool } from "@deepseek-ai/dsh-tools";
|
|
2
|
+
import { createFileDeleteTool } from "./file-delete.js";
|
|
3
|
+
import { createDocsReadTool, createDocsSearchTool } from "./docs-tools.js";
|
|
2
4
|
/**
|
|
3
5
|
* Deterministic catalog identity. The durable activation marker is derived from
|
|
4
6
|
* the session log rather than stored, so this version is not compared against a
|
|
@@ -7,7 +9,7 @@ import { defineTool } from "@deepseek-ai/dsh-tools";
|
|
|
7
9
|
*
|
|
8
10
|
* Bump it whenever the catalog's tool set or their schemas change.
|
|
9
11
|
*/
|
|
10
|
-
export const QA_TOOL_CATALOG_VERSION = "
|
|
12
|
+
export const QA_TOOL_CATALOG_VERSION = "3";
|
|
11
13
|
function createSelfcheckTool(deps) {
|
|
12
14
|
return defineTool({
|
|
13
15
|
name: "qa_tools_selfcheck",
|
|
@@ -79,6 +81,21 @@ export function createQaToolCatalog(deps) {
|
|
|
79
81
|
group: "diagnostics",
|
|
80
82
|
tags: ["activation", "diagnostics"],
|
|
81
83
|
},
|
|
84
|
+
{
|
|
85
|
+
definition: createDocsSearchTool(),
|
|
86
|
+
group: "documentation",
|
|
87
|
+
tags: ["docs", "search"],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
definition: createDocsReadTool(),
|
|
91
|
+
group: "documentation",
|
|
92
|
+
tags: ["docs", "read"],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
definition: createFileDeleteTool(),
|
|
96
|
+
group: "workspace",
|
|
97
|
+
tags: ["files", "destructive"],
|
|
98
|
+
},
|
|
82
99
|
];
|
|
83
100
|
}
|
|
84
101
|
/** QA tool names, in catalog order; the admission gate treats them as dynamic. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/qa-tools/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/qa-tools/catalog.ts"],"names":[],"mappings":"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"}
|