@yadsh/dsh-qa-surface 0.6.1 → 0.7.1
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 +163 -7
- package/capability-policy.json +1 -1
- package/lib/access/capability-catalog.js +144 -0
- package/lib/access/capability-catalog.js.map +1 -0
- package/lib/access/model.js +379 -0
- package/lib/access/model.js.map +1 -0
- package/lib/access/role-repository.js +195 -0
- package/lib/access/role-repository.js.map +1 -0
- package/lib/access/service.js +380 -0
- package/lib/access/service.js.map +1 -0
- package/lib/access/skill-metadata.js +234 -0
- package/lib/access/skill-metadata.js.map +1 -0
- package/lib/account-remotes.js +20 -10
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/errors.js.map +1 -1
- package/lib/accounts/file.js.map +1 -1
- package/lib/accounts/store.js +202 -3
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/conversation-log.js +256 -0
- package/lib/admin/conversation-log.js.map +1 -0
- package/lib/admin/index.js +17 -0
- package/lib/admin/index.js.map +1 -0
- package/lib/admin/metrics.js +103 -0
- package/lib/admin/metrics.js.map +1 -0
- package/lib/admin/paging.js +23 -0
- package/lib/admin/paging.js.map +1 -0
- package/lib/admin/permissions.js +50 -0
- package/lib/admin/permissions.js.map +1 -0
- package/lib/admin/quality-store.js +485 -0
- package/lib/admin/quality-store.js.map +1 -0
- package/lib/admin/queue.js +107 -0
- package/lib/admin/queue.js.map +1 -0
- package/lib/admin/redaction.js +45 -0
- package/lib/admin/redaction.js.map +1 -0
- package/lib/admin/service.js +897 -0
- package/lib/admin/service.js.map +1 -0
- package/lib/admin/session-log.js +142 -0
- package/lib/admin/session-log.js.map +1 -0
- package/lib/cli.js +9 -6
- package/lib/cli.js.map +1 -1
- package/lib/client/QaSessionController.js +28 -2
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +143 -5
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +1 -0
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/admin/QaAdmin.js +458 -0
- package/lib/client/admin/QaAdmin.js.map +1 -0
- package/lib/client/admin/format.js +177 -0
- package/lib/client/admin/format.js.map +1 -0
- package/lib/client/admin/pages/Conversations.js +114 -0
- package/lib/client/admin/pages/Conversations.js.map +1 -0
- package/lib/client/admin/pages/Overview.js +24 -0
- package/lib/client/admin/pages/Overview.js.map +1 -0
- package/lib/client/admin/pages/Quality.js +71 -0
- package/lib/client/admin/pages/Quality.js.map +1 -0
- package/lib/client/admin/pages/Review.js +93 -0
- package/lib/client/admin/pages/Review.js.map +1 -0
- package/lib/client/admin/pages/Users.js +95 -0
- package/lib/client/admin/pages/Users.js.map +1 -0
- package/lib/client/admin/routes.js +143 -0
- package/lib/client/admin/routes.js.map +1 -0
- package/lib/client/admin/shared.js +91 -0
- package/lib/client/admin/shared.js.map +1 -0
- package/lib/client/admin/styles.js +111 -0
- package/lib/client/admin/styles.js.map +1 -0
- package/lib/client/components/QaChangelog.js +53 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaHeader.js +3 -3
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaMessage.js +61 -2
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/create-session.js +1 -1
- package/lib/client/create-session.js.map +1 -1
- package/lib/client/index.js +48 -1
- package/lib/client/index.js.map +1 -1
- package/lib/client/role/RoleSelector.js +31 -0
- package/lib/client/role/RoleSelector.js.map +1 -0
- package/lib/client/session-sources.js +37 -1
- package/lib/client/session-sources.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.js +0 -1
- package/lib/client/settings/sections.js.map +1 -1
- package/lib/client/settings-extensions/index.js +1 -0
- package/lib/client/settings-extensions/index.js.map +1 -1
- package/lib/client/settings-extensions/user-session.js +62 -0
- package/lib/client/settings-extensions/user-session.js.map +1 -0
- package/lib/client/styles.js +31 -0
- package/lib/client/styles.js.map +1 -1
- package/lib/client/types.js.map +1 -1
- package/lib/client.js +9993 -4848
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/defaults.js +0 -2
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config.js +0 -249
- package/lib/config.js.map +1 -1
- package/lib/enforcement/skill-policy.js +172 -0
- package/lib/enforcement/skill-policy.js.map +1 -0
- package/lib/enforcement/tool-grants.js +151 -0
- package/lib/enforcement/tool-grants.js.map +1 -0
- package/lib/index.js +224 -42
- package/lib/index.js.map +1 -1
- package/lib/personal-skills/service.js +10 -3
- package/lib/personal-skills/service.js.map +1 -1
- package/lib/qa-tools/index.js +4 -0
- package/lib/qa-tools/index.js.map +1 -1
- package/lib/resolve-config.js +0 -2
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +71 -17
- package/lib/secure-session.js.map +1 -1
- package/lib/typert.host.js +2237 -202
- package/lib/typert.remote-client.d.ts +49 -3
- package/lib/typert.remote-client.js +1863 -183
- package/lib/types/access/capability-catalog.d.ts +37 -0
- package/lib/types/access/model.d.ts +60 -0
- package/lib/types/access/role-repository.d.ts +32 -0
- package/lib/types/access/service.d.ts +57 -0
- package/lib/types/access/skill-metadata.d.ts +53 -0
- package/lib/types/account-remotes.d.ts +6 -0
- package/lib/types/accounts/errors.d.ts +1 -1
- package/lib/types/accounts/file.d.ts +16 -5
- package/lib/types/accounts/store.d.ts +83 -3
- package/lib/types/admin/conversation-log.d.ts +39 -0
- package/lib/types/admin/index.d.ts +24 -0
- package/lib/types/admin/metrics.d.ts +29 -0
- package/lib/types/admin/paging.d.ts +33 -0
- package/lib/types/admin/permissions.d.ts +10 -0
- package/lib/types/admin/quality-store.d.ts +82 -0
- package/lib/types/admin/queue.d.ts +21 -0
- package/lib/types/admin/redaction.d.ts +29 -0
- package/lib/types/admin/service.d.ts +105 -0
- package/lib/types/admin/session-log.d.ts +53 -0
- package/lib/types/client/QaSessionController.d.ts +12 -1
- package/lib/types/client/QaSurface.d.ts +7 -1
- package/lib/types/client/admin/QaAdmin.d.ts +17 -0
- package/lib/types/client/admin/format.d.ts +43 -0
- package/lib/types/client/admin/pages/Conversations.d.ts +21 -0
- package/lib/types/client/admin/pages/Overview.d.ts +13 -0
- package/lib/types/client/admin/pages/Quality.d.ts +18 -0
- package/lib/types/client/admin/pages/Review.d.ts +15 -0
- package/lib/types/client/admin/pages/Users.d.ts +22 -0
- package/lib/types/client/admin/routes.d.ts +60 -0
- package/lib/types/client/admin/shared.d.ts +53 -0
- package/lib/types/client/admin/styles.d.ts +11 -0
- package/lib/types/client/components/QaHeader.d.ts +5 -1
- package/lib/types/client/components/QaMessage.d.ts +14 -1
- package/lib/types/client/create-session.d.ts +2 -0
- package/lib/types/client/role/RoleSelector.d.ts +14 -0
- package/lib/types/client/session-sources.d.ts +9 -0
- package/lib/types/client/settings/sections.d.ts +0 -1
- package/lib/types/client/settings-extensions/index.d.ts +2 -0
- package/lib/types/client/settings-extensions/user-session.d.ts +59 -0
- package/lib/types/client/types.d.ts +39 -2
- package/lib/types/enforcement/skill-policy.d.ts +29 -0
- package/lib/types/enforcement/tool-grants.d.ts +84 -0
- package/lib/types/index.d.ts +62 -14
- package/lib/types/qa-tools/index.d.ts +2 -0
- package/lib/types/secure-session.d.ts +10 -1
- package/lib/types/types.d.ts +568 -5
- package/package.json +2 -2
- package/lib/client/settings/sections/documents.js +0 -88
- package/lib/client/settings/sections/documents.js.map +0 -1
- package/lib/documents/artifacts/ids.js +0 -43
- package/lib/documents/artifacts/ids.js.map +0 -1
- package/lib/documents/artifacts/manifest.js +0 -66
- package/lib/documents/artifacts/manifest.js.map +0 -1
- package/lib/documents/artifacts/store.js +0 -169
- package/lib/documents/artifacts/store.js.map +0 -1
- package/lib/documents/capabilities.js +0 -93
- package/lib/documents/capabilities.js.map +0 -1
- package/lib/documents/config.js +0 -302
- package/lib/documents/config.js.map +0 -1
- package/lib/documents/defaults.js +0 -78
- package/lib/documents/defaults.js.map +0 -1
- package/lib/documents/errors.js +0 -101
- package/lib/documents/errors.js.map +0 -1
- package/lib/documents/index.js +0 -80
- package/lib/documents/index.js.map +0 -1
- package/lib/documents/inspect/facts.js +0 -161
- package/lib/documents/inspect/facts.js.map +0 -1
- package/lib/documents/inspect/zip.js +0 -108
- package/lib/documents/inspect/zip.js.map +0 -1
- package/lib/documents/markdown/directives.js +0 -135
- package/lib/documents/markdown/directives.js.map +0 -1
- package/lib/documents/markdown/frontmatter.js +0 -35
- package/lib/documents/markdown/frontmatter.js.map +0 -1
- package/lib/documents/markdown/normalize.js +0 -113
- package/lib/documents/markdown/normalize.js.map +0 -1
- package/lib/documents/orchestrator/assets.js +0 -243
- package/lib/documents/orchestrator/assets.js.map +0 -1
- package/lib/documents/orchestrator/convert-document.js +0 -186
- package/lib/documents/orchestrator/convert-document.js.map +0 -1
- package/lib/documents/orchestrator/create-document.js +0 -292
- package/lib/documents/orchestrator/create-document.js.map +0 -1
- package/lib/documents/orchestrator/extract-document.js +0 -162
- package/lib/documents/orchestrator/extract-document.js.map +0 -1
- package/lib/documents/orchestrator/inspect-document.js +0 -89
- package/lib/documents/orchestrator/inspect-document.js.map +0 -1
- package/lib/documents/orchestrator/runtime-deps.js +0 -59
- package/lib/documents/orchestrator/runtime-deps.js.map +0 -1
- package/lib/documents/orchestrator/scope.js +0 -132
- package/lib/documents/orchestrator/scope.js.map +0 -1
- package/lib/documents/providers/docling.js +0 -247
- package/lib/documents/providers/docling.js.map +0 -1
- package/lib/documents/providers/libreoffice.js +0 -130
- package/lib/documents/providers/libreoffice.js.map +0 -1
- package/lib/documents/providers/markitdown.js +0 -89
- package/lib/documents/providers/markitdown.js.map +0 -1
- package/lib/documents/providers/pandoc.js +0 -161
- package/lib/documents/providers/pandoc.js.map +0 -1
- package/lib/documents/providers/process.js +0 -164
- package/lib/documents/providers/process.js.map +0 -1
- package/lib/documents/providers/registry.js +0 -152
- package/lib/documents/providers/registry.js.map +0 -1
- package/lib/documents/providers/shared.js +0 -75
- package/lib/documents/providers/shared.js.map +0 -1
- package/lib/documents/runtime.js +0 -114
- package/lib/documents/runtime.js.map +0 -1
- package/lib/documents/security/file-types.js +0 -188
- package/lib/documents/security/file-types.js.map +0 -1
- package/lib/documents/security/limits.js +0 -78
- package/lib/documents/security/limits.js.map +0 -1
- package/lib/documents/security/mime.js +0 -43
- package/lib/documents/security/mime.js.map +0 -1
- package/lib/documents/security/paths.js +0 -133
- package/lib/documents/security/paths.js.map +0 -1
- package/lib/documents/templates/registry.js +0 -147
- package/lib/documents/templates/registry.js.map +0 -1
- package/lib/documents/templates/resolver.js +0 -59
- package/lib/documents/templates/resolver.js.map +0 -1
- package/lib/documents/tools/convert.js +0 -125
- package/lib/documents/tools/convert.js.map +0 -1
- package/lib/documents/tools/create.js +0 -187
- package/lib/documents/tools/create.js.map +0 -1
- package/lib/documents/tools/index.js +0 -41
- package/lib/documents/tools/index.js.map +0 -1
- package/lib/documents/tools/inspect.js +0 -135
- package/lib/documents/tools/inspect.js.map +0 -1
- package/lib/documents/tools/shared.js +0 -88
- package/lib/documents/tools/shared.js.map +0 -1
- package/lib/documents/tools/to-markdown.js +0 -125
- package/lib/documents/tools/to-markdown.js.map +0 -1
- package/lib/documents/types.js +0 -12
- package/lib/documents/types.js.map +0 -1
- package/lib/types/client/settings/sections/documents.d.ts +0 -13
- package/lib/types/documents/artifacts/ids.d.ts +0 -14
- package/lib/types/documents/artifacts/manifest.d.ts +0 -32
- package/lib/types/documents/artifacts/store.d.ts +0 -67
- package/lib/types/documents/capabilities.d.ts +0 -32
- package/lib/types/documents/config.d.ts +0 -27
- package/lib/types/documents/defaults.d.ts +0 -161
- package/lib/types/documents/errors.d.ts +0 -42
- package/lib/types/documents/index.d.ts +0 -63
- package/lib/types/documents/inspect/facts.d.ts +0 -43
- package/lib/types/documents/inspect/zip.d.ts +0 -28
- package/lib/types/documents/markdown/directives.d.ts +0 -39
- package/lib/types/documents/markdown/frontmatter.d.ts +0 -15
- package/lib/types/documents/markdown/normalize.d.ts +0 -30
- package/lib/types/documents/orchestrator/assets.d.ts +0 -55
- package/lib/types/documents/orchestrator/convert-document.d.ts +0 -25
- package/lib/types/documents/orchestrator/create-document.d.ts +0 -18
- package/lib/types/documents/orchestrator/extract-document.d.ts +0 -24
- package/lib/types/documents/orchestrator/inspect-document.d.ts +0 -12
- package/lib/types/documents/orchestrator/runtime-deps.d.ts +0 -43
- package/lib/types/documents/orchestrator/scope.d.ts +0 -52
- package/lib/types/documents/providers/docling.d.ts +0 -54
- package/lib/types/documents/providers/libreoffice.d.ts +0 -40
- package/lib/types/documents/providers/markitdown.d.ts +0 -28
- package/lib/types/documents/providers/pandoc.d.ts +0 -42
- package/lib/types/documents/providers/process.d.ts +0 -54
- package/lib/types/documents/providers/registry.d.ts +0 -68
- package/lib/types/documents/providers/shared.d.ts +0 -27
- package/lib/types/documents/runtime.d.ts +0 -59
- package/lib/types/documents/security/file-types.d.ts +0 -39
- package/lib/types/documents/security/limits.d.ts +0 -24
- package/lib/types/documents/security/mime.d.ts +0 -13
- package/lib/types/documents/security/paths.d.ts +0 -38
- package/lib/types/documents/templates/registry.d.ts +0 -50
- package/lib/types/documents/templates/resolver.d.ts +0 -30
- package/lib/types/documents/tools/convert.d.ts +0 -9
- package/lib/types/documents/tools/create.d.ts +0 -14
- package/lib/types/documents/tools/index.d.ts +0 -33
- package/lib/types/documents/tools/inspect.d.ts +0 -9
- package/lib/types/documents/tools/shared.d.ts +0 -77
- package/lib/types/documents/tools/to-markdown.d.ts +0 -12
- package/lib/types/documents/types.d.ts +0 -294
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* Documents: the document pipeline's deployment knobs.
|
|
4
|
-
*
|
|
5
|
-
* Everything here is optional — the defaults are usable as they are — but two
|
|
6
|
-
* of them decide whether the four document tools work at all in a given
|
|
7
|
-
* deployment: the Docling endpoint and the executables the renderer needs.
|
|
8
|
-
* The section therefore shows the effective values the Host resolved, not only
|
|
9
|
-
* what this browser has written.
|
|
10
|
-
*/
|
|
11
|
-
import { Notice, NumberField, Section, SelectField, TextField, Toggle, } from "../fields.js";
|
|
12
|
-
import { overriddenAny, resetAside, } from "./common.js";
|
|
13
|
-
const PDF_MODES = [
|
|
14
|
-
{ value: "auto", label: "Автоматически" },
|
|
15
|
-
{ value: "office", label: "Как в Word (DOCX → PDF)" },
|
|
16
|
-
{ value: "typst", label: "Typst (нужен движок)" },
|
|
17
|
-
];
|
|
18
|
-
const EXTRACTION_MODES = [
|
|
19
|
-
{ value: "accurate", label: "Точный" },
|
|
20
|
-
{ value: "auto", label: "Автоматически" },
|
|
21
|
-
{ value: "fast", label: "Быстрый" },
|
|
22
|
-
];
|
|
23
|
-
const OCR_MODES = [
|
|
24
|
-
{ value: "auto", label: "По страницам" },
|
|
25
|
-
{ value: "off", label: "Никогда" },
|
|
26
|
-
{ value: "force", label: "Всегда" },
|
|
27
|
-
];
|
|
28
|
-
/** Document creation, conversion and extraction. */
|
|
29
|
-
export function DocumentsSection(props) {
|
|
30
|
-
const documents = props.config?.documents;
|
|
31
|
-
const resolved = props.effective?.documents;
|
|
32
|
-
const disabled = !props.writable;
|
|
33
|
-
const paths = [["documents"]];
|
|
34
|
-
const modified = overriddenAny(props, paths);
|
|
35
|
-
const enabled = documents?.enabled ?? resolved?.enabled ?? true;
|
|
36
|
-
const pdfMode = documents?.create?.defaultPdfMode ??
|
|
37
|
-
resolved?.create.defaultPdfMode ??
|
|
38
|
-
"auto";
|
|
39
|
-
const extractionMode = documents?.extraction?.defaultMode ??
|
|
40
|
-
resolved?.extraction.defaultMode ??
|
|
41
|
-
"accurate";
|
|
42
|
-
const ocr = documents?.extraction?.ocr ?? resolved?.extraction.ocr ?? "auto";
|
|
43
|
-
const extractImages = documents?.extraction?.extractImages ??
|
|
44
|
-
resolved?.extraction.extractImages ??
|
|
45
|
-
true;
|
|
46
|
-
const doclingEnabled = documents?.docling?.enabled ?? resolved?.docling.enabled ?? true;
|
|
47
|
-
const doclingUrl = documents?.docling?.baseUrl ?? resolved?.docling.baseUrl ?? "";
|
|
48
|
-
const templatesRoot = documents?.templates?.root ?? "";
|
|
49
|
-
const templatesDefault = documents?.templates?.default ?? resolved?.templates.default ?? "default";
|
|
50
|
-
const storageRoot = documents?.storage?.root ?? "";
|
|
51
|
-
const retainSource = documents?.storage?.retainSource ?? resolved?.storage.retainSource ?? true;
|
|
52
|
-
const retentionEnabled = documents?.retention?.enabled ?? resolved?.retention.enabled ?? true;
|
|
53
|
-
const retentionDays = documents?.retention?.maxAgeDays ?? resolved?.retention.maxAgeDays ?? 30;
|
|
54
|
-
return (_jsxs(Section, { title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B", modified: modified, aside: resetAside(props, paths), children: [_jsx(Toggle, { label: "\u041A\u043E\u043D\u0432\u0435\u0439\u0435\u0440 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432", hint: "\u0427\u0435\u0442\u044B\u0440\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430: \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 DOCX/PDF \u0438\u0437 Markdown, \u0438\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u0435 Markdown, \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044F \u0438 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B. \u041F\u043E\u043A\u0430 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043E, \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u043D\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044E\u0442\u0441\u044F.", checked: enabled, disabled: disabled, onChange: (value) => {
|
|
55
|
-
props.write(["documents", "enabled"], value);
|
|
56
|
-
} }), _jsx(SelectField, { label: "PDF \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E", value: pdfMode, disabled: disabled || !enabled, options: PDF_MODES, hint: "\u00AB\u041A\u0430\u043A \u0432 Word\u00BB \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 DOCX \u0438 \u044D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043E \u0432 PDF \u2014 \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u0435\u0442 \u0441 \u0444\u0430\u0439\u043B\u043E\u043C Word.", onChange: (value) => {
|
|
57
|
-
props.write(["documents", "create", "defaultPdfMode"], value);
|
|
58
|
-
} }), _jsx(SelectField, { label: "\u0418\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u0435 Markdown", value: extractionMode, disabled: disabled || !enabled, options: EXTRACTION_MODES, hint: "\u0422\u043E\u0447\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u043D\u044B\u0439 \u0440\u0430\u0437\u0431\u043E\u0440\u0449\u0438\u043A; \u0431\u044B\u0441\u0442\u0440\u044B\u0439 \u2014 \u043E\u0431\u043B\u0435\u0433\u0447\u0451\u043D\u043D\u044B\u0439, \u0435\u0441\u043B\u0438 \u043E\u043D \u0432\u043A\u043B\u044E\u0447\u0451\u043D \u0432 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u0438.", onChange: (value) => {
|
|
59
|
-
props.write(["documents", "extraction", "defaultMode"], value);
|
|
60
|
-
} }), _jsx(SelectField, { label: "OCR", value: ocr, disabled: disabled || !enabled, options: OCR_MODES, hint: "\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u0432\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0431\u0435\u0437 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E \u0441\u043B\u043E\u044F.", onChange: (value) => {
|
|
61
|
-
props.write(["documents", "extraction", "ocr"], value);
|
|
62
|
-
} }), _jsx(Toggle, { label: "\u0418\u0437\u0432\u043B\u0435\u043A\u0430\u0442\u044C \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F", hint: "\u041D\u0430\u0439\u0434\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u044E\u0442\u0441\u044F \u0432 \u043F\u0430\u043F\u043A\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043A\u0442\u0430, \u0441\u0441\u044B\u043B\u043A\u0438 \u0432 Markdown \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043D\u0430 \u043D\u0438\u0445.", checked: extractImages, disabled: disabled || !enabled, onChange: (value) => {
|
|
63
|
-
props.write(["documents", "extraction", "extractImages"], value);
|
|
64
|
-
} }), _jsx(Toggle, { label: "\u0420\u0430\u0437\u0431\u043E\u0440\u0449\u0438\u043A Docling", hint: "\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0437\u0431\u043E\u0440\u0430 PDF \u0438 DOCX; \u0431\u0435\u0437 \u043D\u0435\u0433\u043E \u043E\u0441\u0442\u0430\u0451\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0437\u0430\u043F\u0430\u0441\u043D\u043E\u0439 \u0431\u044B\u0441\u0442\u0440\u044B\u0439 \u0440\u0430\u0437\u0431\u043E\u0440\u0449\u0438\u043A, \u0435\u0441\u043B\u0438 \u043E\u043D \u0432\u043A\u043B\u044E\u0447\u0451\u043D.", checked: doclingEnabled, disabled: disabled || !enabled, onChange: (value) => {
|
|
65
|
-
props.write(["documents", "docling", "enabled"], value);
|
|
66
|
-
} }), _jsx(TextField, { label: "\u0410\u0434\u0440\u0435\u0441 Docling", value: doclingUrl, disabled: disabled || !enabled || !doclingEnabled, placeholder: "http://docling:5001", hint: "HTTP-\u0441\u0435\u0440\u0432\u0438\u0441 docling-serve. \u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0430\u044F QA_DOCLING_BASE_URL \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u044D\u0442\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435.", onChange: (value) => {
|
|
67
|
-
props.write(["documents", "docling", "baseUrl"], value);
|
|
68
|
-
} }), _jsx(TextField, { label: "\u041A\u0430\u0442\u0430\u043B\u043E\u0433 \u0448\u0430\u0431\u043B\u043E\u043D\u043E\u0432", value: templatesRoot, disabled: disabled || !enabled, placeholder: "\u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C: <\u0441\u0435\u0441\u0441\u0438\u044F>/document-templates", hint: "\u0410\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u044B\u0439 \u043F\u0443\u0442\u044C. \u0412\u043D\u0443\u0442\u0440\u0438 \u0434\u043E\u043B\u0436\u0435\u043D \u043B\u0435\u0436\u0430\u0442\u044C manifest.yml \u0441\u043E \u0441\u043F\u0438\u0441\u043A\u043E\u043C \u0448\u0430\u0431\u043B\u043E\u043D\u043E\u0432.", onChange: (value) => {
|
|
69
|
-
if (value.trim() === "")
|
|
70
|
-
props.unset(["documents", "templates", "root"]);
|
|
71
|
-
else
|
|
72
|
-
props.write(["documents", "templates", "root"], value.trim());
|
|
73
|
-
} }), _jsx(TextField, { label: "\u0428\u0430\u0431\u043B\u043E\u043D \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E", value: templatesDefault, disabled: disabled || !enabled, placeholder: "default", hint: "\u0418\u043C\u044F \u0448\u0430\u0431\u043B\u043E\u043D\u0430, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F, \u043A\u043E\u0433\u0434\u0430 \u0430\u0433\u0435\u043D\u0442 \u043D\u0435 \u043D\u0430\u0437\u0432\u0430\u043B \u0441\u0432\u043E\u0439.", onChange: (value) => {
|
|
74
|
-
props.write(["documents", "templates", "default"], value);
|
|
75
|
-
} }), _jsx(TextField, { label: "\u041A\u0430\u0442\u0430\u043B\u043E\u0433 \u0430\u0440\u0442\u0435\u0444\u0430\u043A\u0442\u043E\u0432", value: storageRoot, disabled: disabled || !enabled, placeholder: "\u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C: <\u0441\u0435\u0441\u0441\u0438\u044F>/.qa/artifacts/documents", hint: "\u0410\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u044B\u0439 \u043F\u0443\u0442\u044C \u0434\u043B\u044F \u043E\u0431\u0449\u0435\u0433\u043E \u0442\u043E\u043C\u0430. \u041F\u0443\u0441\u0442\u043E \u2014 \u043A\u0430\u0436\u0434\u0430\u044F \u0441\u0435\u0441\u0441\u0438\u044F \u0445\u0440\u0430\u043D\u0438\u0442 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B \u0432 \u0441\u0432\u043E\u0435\u0439 \u0440\u0430\u0431\u043E\u0447\u0435\u0439 \u043F\u0430\u043F\u043A\u0435.", onChange: (value) => {
|
|
76
|
-
if (value.trim() === "")
|
|
77
|
-
props.unset(["documents", "storage", "root"]);
|
|
78
|
-
else
|
|
79
|
-
props.write(["documents", "storage", "root"], value.trim());
|
|
80
|
-
} }), _jsx(Toggle, { label: "\u0425\u0440\u0430\u043D\u0438\u0442\u044C \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 Markdown", hint: "\u041A\u043E\u043F\u0438\u044F Markdown \u043E\u0441\u0442\u0430\u0451\u0442\u0441\u044F \u0440\u044F\u0434\u043E\u043C \u0441 \u0433\u043E\u0442\u043E\u0432\u044B\u043C\u0438 \u0444\u0430\u0439\u043B\u0430\u043C\u0438.", checked: retainSource, disabled: disabled || !enabled, onChange: (value) => {
|
|
81
|
-
props.write(["documents", "storage", "retainSource"], value);
|
|
82
|
-
} }), _jsx(Toggle, { label: "\u0423\u0434\u0430\u043B\u044F\u0442\u044C \u0441\u0442\u0430\u0440\u044B\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B", hint: "\u0423\u0431\u043E\u0440\u043A\u0430 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 \u0437\u0430\u0434\u0430\u043D\u043D\u043E\u043C \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043A\u0442\u043E\u0432: \u0432 \u0440\u0430\u0437\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E \u0441\u0435\u0441\u0441\u0438\u044F\u043C \u043F\u043E\u0432\u0435\u0440\u0445\u043D\u043E\u0441\u0442\u044C \u043D\u0435 \u0437\u043D\u0430\u0435\u0442 \u043E \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u043F\u0430\u043F\u043A\u0430\u0445.", checked: retentionEnabled, disabled: disabled || !enabled || storageRoot.trim() === "", onChange: (value) => {
|
|
83
|
-
props.write(["documents", "retention", "enabled"], value);
|
|
84
|
-
} }), _jsx(NumberField, { label: "\u0425\u0440\u0430\u043D\u0438\u0442\u044C, \u0434\u043D\u0435\u0439", value: retentionDays, min: 1, max: 3650, disabled: disabled || !enabled || !retentionEnabled || storageRoot.trim() === "", onChange: (value) => {
|
|
85
|
-
props.write(["documents", "retention", "maxAgeDays"], value);
|
|
86
|
-
} }), _jsx(Notice, { tone: "info", children: "\u0414\u043B\u044F \u043A\u043E\u043D\u0432\u0435\u0439\u0435\u0440\u0430 \u043D\u0443\u0436\u043D\u044B pandoc \u0438 headless LibreOffice \u0432 \u043E\u0431\u0440\u0430\u0437\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044B\u0432\u0430\u043D\u0438\u044F. \u0410\u0433\u0435\u043D\u0442 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C \u0438\u043C \u0441\u0432\u043E\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B: \u043A\u043E\u043C\u0430\u043D\u0434\u043D\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0432\u0435\u0440\u0445\u043D\u043E\u0441\u0442\u044C." })] }));
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=documents.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../../src/client/settings/sections/documents.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ULID generation for artifact ids (§18).
|
|
3
|
-
*
|
|
4
|
-
* `doc_<ULID>` — 48 bits of time followed by 80 bits of randomness, encoded in
|
|
5
|
-
* Crockford base32. The time prefix keeps a directory listing chronological,
|
|
6
|
-
* and the randomness keeps ids unguessable without a UUID dependency.
|
|
7
|
-
*/
|
|
8
|
-
import { randomBytes } from "node:crypto";
|
|
9
|
-
const ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
10
|
-
const TIME_CHARS = 10;
|
|
11
|
-
const RANDOM_CHARS = 16;
|
|
12
|
-
const TIME_MAX = 0xffffffffffff;
|
|
13
|
-
function encodeTime(timestamp) {
|
|
14
|
-
let remaining = Math.max(0, Math.min(TIME_MAX, Math.floor(timestamp)));
|
|
15
|
-
const output = new Array(TIME_CHARS);
|
|
16
|
-
for (let index = TIME_CHARS - 1; index >= 0; index -= 1) {
|
|
17
|
-
output[index] = ENCODING[remaining % 32] ?? "0";
|
|
18
|
-
remaining = Math.floor(remaining / 32);
|
|
19
|
-
}
|
|
20
|
-
return output.join("");
|
|
21
|
-
}
|
|
22
|
-
function encodeRandom() {
|
|
23
|
-
const bytes = randomBytes(RANDOM_CHARS);
|
|
24
|
-
let output = "";
|
|
25
|
-
for (const byte of bytes) {
|
|
26
|
-
output += ENCODING[byte % 32] ?? "0";
|
|
27
|
-
}
|
|
28
|
-
return output;
|
|
29
|
-
}
|
|
30
|
-
/** A fresh ULID for the current millisecond. */
|
|
31
|
-
export function createUlid(now = Date.now()) {
|
|
32
|
-
return `${encodeTime(now)}${encodeRandom()}`;
|
|
33
|
-
}
|
|
34
|
-
/** A fresh artifact id: `doc_<ULID>`. */
|
|
35
|
-
export function createArtifactId(now = Date.now()) {
|
|
36
|
-
return `doc_${createUlid(now)}`;
|
|
37
|
-
}
|
|
38
|
-
const ARTIFACT_ID_PATTERN = /^doc_[0-9A-HJKMNP-TV-Z]{26}$/u;
|
|
39
|
-
/** Whether a string is an artifact id this pipeline could have issued. */
|
|
40
|
-
export function isArtifactId(value) {
|
|
41
|
-
return ARTIFACT_ID_PATTERN.test(value);
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=ids.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../../../src/documents/artifacts/ids.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACpD,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEhC,SAAS,UAAU,CAAC,SAAiB;IACnC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAa,IAAI,KAAK,CAAS,UAAU,CAAC,CAAC;IACvD,KAAK,IAAI,KAAK,GAAG,UAAU,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC;QAChD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,UAAU,CAAC,GAAG,GAAW,IAAI,CAAC,GAAG,EAAE;IACjD,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,gBAAgB,CAAC,GAAG,GAAW,IAAI,CAAC,GAAG,EAAE;IACvD,OAAO,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,mBAAmB,GAAG,+BAA+B,CAAC;AAE5D,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manifest construction and persistence (§19).
|
|
3
|
-
*
|
|
4
|
-
* The manifest is the source of truth about an artifact: which operation,
|
|
5
|
-
* which backends and versions, which template (and its hash), which files came
|
|
6
|
-
* out, which warnings were raised, and which session/workspace the bundle
|
|
7
|
-
* belongs to. Logical reproducibility rests on it, because byte-level
|
|
8
|
-
* reproducibility of DOCX/PDF cannot be promised (§31).
|
|
9
|
-
*/
|
|
10
|
-
import path from "node:path";
|
|
11
|
-
import { DocumentError, asDocumentError } from "../errors.js";
|
|
12
|
-
export const MANIFEST_FILE = "manifest.json";
|
|
13
|
-
export const MANIFEST_SCHEMA_VERSION = 1;
|
|
14
|
-
export function buildManifest(input) {
|
|
15
|
-
return {
|
|
16
|
-
schemaVersion: MANIFEST_SCHEMA_VERSION,
|
|
17
|
-
artifactId: input.artifactId,
|
|
18
|
-
operation: input.operation,
|
|
19
|
-
createdAt: input.createdAt,
|
|
20
|
-
input: input.input,
|
|
21
|
-
outputs: input.outputs,
|
|
22
|
-
...(input.template === undefined ? {} : { template: input.template }),
|
|
23
|
-
...(input.templateSha256 === undefined
|
|
24
|
-
? {}
|
|
25
|
-
: { templateSha256: input.templateSha256 }),
|
|
26
|
-
backends: input.backends,
|
|
27
|
-
warnings: input.warnings,
|
|
28
|
-
scope: input.scope,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export async function writeManifest(store, artifactId, manifest) {
|
|
32
|
-
const written = await store.write(path.join(artifactId, MANIFEST_FILE), `${JSON.stringify(manifest, null, 2)}\n`);
|
|
33
|
-
return written.path;
|
|
34
|
-
}
|
|
35
|
-
export async function readManifest(store, artifactId) {
|
|
36
|
-
const raw = await store
|
|
37
|
-
.read(path.join(artifactId, MANIFEST_FILE))
|
|
38
|
-
.catch((error) => {
|
|
39
|
-
throw asDocumentError(error, "FILE_NOT_FOUND", "artifact store");
|
|
40
|
-
});
|
|
41
|
-
try {
|
|
42
|
-
const parsed = JSON.parse(raw.toString("utf8"));
|
|
43
|
-
if (parsed.schemaVersion !== MANIFEST_SCHEMA_VERSION) {
|
|
44
|
-
throw new Error(`unsupported manifest schema ${String(parsed.schemaVersion)}`);
|
|
45
|
-
}
|
|
46
|
-
return parsed;
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
throw new DocumentError("INVALID_INPUT", `the artifact manifest of ${artifactId} is unreadable`, { cause: error });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
/** Project a tool-level file result onto the manifest's output record. */
|
|
53
|
-
export function outputRecord(file) {
|
|
54
|
-
return {
|
|
55
|
-
format: file.format,
|
|
56
|
-
path: path.basename(file.path),
|
|
57
|
-
sha256: file.sha256,
|
|
58
|
-
size: file.size,
|
|
59
|
-
status: file.status,
|
|
60
|
-
...(file.error === undefined ? {} : { error: file.error }),
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
export function formatOfOperation(operation) {
|
|
64
|
-
return operation === "document_create" ? "md" : "unknown";
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/documents/artifacts/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Artifact bundle storage (§18, §47).
|
|
3
|
-
*
|
|
4
|
-
* One directory per operation:
|
|
5
|
-
*
|
|
6
|
-
* ```text
|
|
7
|
-
* <root>/<artifact-id>/
|
|
8
|
-
* manifest.json
|
|
9
|
-
* source.md
|
|
10
|
-
* input/original.pdf
|
|
11
|
-
* assets/
|
|
12
|
-
* output.docx
|
|
13
|
-
* extracted.md
|
|
14
|
-
* ```
|
|
15
|
-
*
|
|
16
|
-
* Everything the store writes goes through a root-relative path that is
|
|
17
|
-
* validated first, and every file lands atomically (temp file + rename) so a
|
|
18
|
-
* crashed host never leaves a half-written artifact that a later read would
|
|
19
|
-
* trust. Job temp directories live under `<root>/.tmp` and are removed on both
|
|
20
|
-
* success and failure (§47).
|
|
21
|
-
*/
|
|
22
|
-
import { randomBytes } from "node:crypto";
|
|
23
|
-
import { createHash } from "node:crypto";
|
|
24
|
-
import { mkdir, readdir, readFile, rename, rm, stat, writeFile, } from "node:fs/promises";
|
|
25
|
-
import path from "node:path";
|
|
26
|
-
import { DocumentError, asDocumentError } from "../errors.js";
|
|
27
|
-
import { assertInsideRoot } from "../security/paths.js";
|
|
28
|
-
import { createArtifactId, isArtifactId } from "./ids.js";
|
|
29
|
-
export function sha256Hex(data) {
|
|
30
|
-
return createHash("sha256").update(data).digest("hex");
|
|
31
|
-
}
|
|
32
|
-
export async function sha256OfFile(filePath) {
|
|
33
|
-
return sha256Hex(await readFile(filePath));
|
|
34
|
-
}
|
|
35
|
-
export class ArtifactStore {
|
|
36
|
-
root;
|
|
37
|
-
constructor(options) {
|
|
38
|
-
this.root = path.resolve(options.root);
|
|
39
|
-
}
|
|
40
|
-
/** Absolute path of a root-relative artifact member, containment checked. */
|
|
41
|
-
path(relativePath) {
|
|
42
|
-
return assertInsideRoot(this.root, path.resolve(this.root, relativePath), "artifact path");
|
|
43
|
-
}
|
|
44
|
-
artifactDir(artifactId) {
|
|
45
|
-
if (!isArtifactId(artifactId)) {
|
|
46
|
-
throw new DocumentError("INVALID_INPUT", `"${artifactId}" is not an artifact id`);
|
|
47
|
-
}
|
|
48
|
-
return this.path(artifactId);
|
|
49
|
-
}
|
|
50
|
-
/** Prepare a fresh bundle directory and return its id. */
|
|
51
|
-
async create(now = Date.now()) {
|
|
52
|
-
for (let attempt = 0; attempt < 5; attempt += 1) {
|
|
53
|
-
const artifactId = createArtifactId(now);
|
|
54
|
-
const dir = this.artifactDir(artifactId);
|
|
55
|
-
try {
|
|
56
|
-
await mkdir(dir, { recursive: false });
|
|
57
|
-
return { artifactId, dir };
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
if (error.code !== "EEXIST") {
|
|
61
|
-
throw asDocumentError(error, "ARTIFACT_WRITE_FAILED");
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
throw new DocumentError("ARTIFACT_WRITE_FAILED", "unable to allocate an artifact directory");
|
|
66
|
-
}
|
|
67
|
-
async ensureDir(relativePath) {
|
|
68
|
-
const target = this.path(relativePath);
|
|
69
|
-
await mkdir(target, { recursive: true });
|
|
70
|
-
return target;
|
|
71
|
-
}
|
|
72
|
-
/** Atomically write a root-relative member. */
|
|
73
|
-
async write(relativePath, data) {
|
|
74
|
-
const target = this.path(relativePath);
|
|
75
|
-
const payload = typeof data === "string" ? Buffer.from(data, "utf8") : data;
|
|
76
|
-
const temp = `${target}.tmp-${randomBytes(6).toString("hex")}`;
|
|
77
|
-
try {
|
|
78
|
-
await mkdir(path.dirname(target), { recursive: true });
|
|
79
|
-
await writeFile(temp, payload);
|
|
80
|
-
await rename(temp, target);
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
await rm(temp, { force: true }).catch(() => undefined);
|
|
84
|
-
throw asDocumentError(error, "ARTIFACT_WRITE_FAILED");
|
|
85
|
-
}
|
|
86
|
-
return { path: target, size: payload.length, sha256: sha256Hex(payload) };
|
|
87
|
-
}
|
|
88
|
-
async read(relativePath) {
|
|
89
|
-
return readFile(this.path(relativePath));
|
|
90
|
-
}
|
|
91
|
-
async fingerprint(relativePath) {
|
|
92
|
-
const target = this.path(relativePath);
|
|
93
|
-
const details = await stat(target);
|
|
94
|
-
return {
|
|
95
|
-
path: target,
|
|
96
|
-
size: details.size,
|
|
97
|
-
sha256: await sha256OfFile(target),
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
async exists(relativePath) {
|
|
101
|
-
try {
|
|
102
|
-
await stat(this.path(relativePath));
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/** Job-scoped temp directory: never an artifact, always removed (§47). */
|
|
110
|
-
async createWorkDir(jobId) {
|
|
111
|
-
const dir = this.path(path.join(".tmp", jobId));
|
|
112
|
-
await mkdir(dir, { recursive: true });
|
|
113
|
-
return dir;
|
|
114
|
-
}
|
|
115
|
-
async removeWorkDir(dir) {
|
|
116
|
-
if (!path.resolve(dir).startsWith(this.path(".tmp")))
|
|
117
|
-
return;
|
|
118
|
-
await rm(dir, { recursive: true, force: true }).catch(() => undefined);
|
|
119
|
-
}
|
|
120
|
-
/** Bundle directories, newest first, with their modification time. */
|
|
121
|
-
async list() {
|
|
122
|
-
let names;
|
|
123
|
-
try {
|
|
124
|
-
names = await readdir(this.root);
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
return [];
|
|
128
|
-
}
|
|
129
|
-
const artifacts = [];
|
|
130
|
-
for (const name of names) {
|
|
131
|
-
if (!isArtifactId(name))
|
|
132
|
-
continue;
|
|
133
|
-
const dir = this.path(name);
|
|
134
|
-
try {
|
|
135
|
-
const details = await stat(dir);
|
|
136
|
-
if (!details.isDirectory())
|
|
137
|
-
continue;
|
|
138
|
-
artifacts.push({ artifactId: name, dir, modifiedAt: details.mtime });
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return artifacts.sort((left, right) => left.modifiedAt < right.modifiedAt ? 1 : -1);
|
|
145
|
-
}
|
|
146
|
-
/** Retention sweep (§41): drop bundles older than `maxAgeDays`. */
|
|
147
|
-
async cleanup(options) {
|
|
148
|
-
const cutoff = (options.now ?? new Date()).getTime() - options.maxAgeDays * 86_400_000;
|
|
149
|
-
const removed = [];
|
|
150
|
-
for (const artifact of await this.list()) {
|
|
151
|
-
if (artifact.modifiedAt.getTime() >= cutoff)
|
|
152
|
-
continue;
|
|
153
|
-
await rm(artifact.dir, { recursive: true, force: true }).catch(() => undefined);
|
|
154
|
-
removed.push(artifact.artifactId);
|
|
155
|
-
}
|
|
156
|
-
const tempRoot = this.path(".tmp");
|
|
157
|
-
const tempNames = await readdir(tempRoot).catch(() => []);
|
|
158
|
-
for (const name of tempNames) {
|
|
159
|
-
const dir = path.join(tempRoot, name);
|
|
160
|
-
const details = await stat(dir).catch(() => undefined);
|
|
161
|
-
if (details === undefined || details.mtime.getTime() >= cutoff)
|
|
162
|
-
continue;
|
|
163
|
-
await rm(dir, { recursive: true, force: true }).catch(() => undefined);
|
|
164
|
-
}
|
|
165
|
-
await rm(tempRoot, { recursive: true, force: true }).catch(() => undefined);
|
|
166
|
-
return { removed };
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
//# sourceMappingURL=store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/documents/artifacts/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Capability discovery (§43) and backend health (§42).
|
|
3
|
-
*
|
|
4
|
-
* Health separates required from optional backends on purpose: a deployment
|
|
5
|
-
* without Docling cannot extract PDFs, but it still creates documents, so the
|
|
6
|
-
* subsystem reports `degraded` and names what is missing instead of declaring
|
|
7
|
-
* itself down. An optional backend that was never enabled reports `disabled`,
|
|
8
|
-
* which is not a fault.
|
|
9
|
-
*/
|
|
10
|
-
import { createProviders, } from "./providers/registry.js";
|
|
11
|
-
import { runProcess } from "./providers/process.js";
|
|
12
|
-
import { CONVERSION_ROUTES } from "./orchestrator/convert-document.js";
|
|
13
|
-
import { loadTemplateRegistry, templateNames, } from "./templates/registry.js";
|
|
14
|
-
async function probeExecutable(executable, timeoutMs) {
|
|
15
|
-
try {
|
|
16
|
-
const result = await runProcess(executable, ["--version"], {
|
|
17
|
-
timeoutMs: Math.min(timeoutMs, 10_000),
|
|
18
|
-
maxStdoutBytes: 8 * 1024,
|
|
19
|
-
backend: executable,
|
|
20
|
-
context: "probing backend availability",
|
|
21
|
-
});
|
|
22
|
-
return result.exitCode === 0 ? "ok" : "unavailable";
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
return "unavailable";
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export async function documentHealth(options) {
|
|
29
|
-
const { config, providers } = options;
|
|
30
|
-
const required = {};
|
|
31
|
-
const optional = {};
|
|
32
|
-
required["pandoc"] =
|
|
33
|
-
options.probeProcessBackends === false
|
|
34
|
-
? "ok"
|
|
35
|
-
: await probeExecutable(config.pandoc.executable, config.pandoc.timeoutMs);
|
|
36
|
-
required["libreoffice"] =
|
|
37
|
-
options.probeProcessBackends === false
|
|
38
|
-
? "ok"
|
|
39
|
-
: await probeExecutable(config.libreoffice.executable, config.libreoffice.timeoutMs);
|
|
40
|
-
required["docling"] =
|
|
41
|
-
providers.doclingHealth === undefined
|
|
42
|
-
? "disabled"
|
|
43
|
-
: await providers.doclingHealth();
|
|
44
|
-
optional["typst"] = config.typst.enabled ? "ok" : "disabled";
|
|
45
|
-
optional["markitdown"] =
|
|
46
|
-
providers.markitdownHealth === undefined
|
|
47
|
-
? "disabled"
|
|
48
|
-
: await providers.markitdownHealth();
|
|
49
|
-
const requiredValues = Object.values(required);
|
|
50
|
-
const status = requiredValues.every((entry) => entry === "ok")
|
|
51
|
-
? "ok"
|
|
52
|
-
: requiredValues.every((entry) => entry !== "ok")
|
|
53
|
-
? "unavailable"
|
|
54
|
-
: "degraded";
|
|
55
|
-
return { status, required, optional };
|
|
56
|
-
}
|
|
57
|
-
export function documentCapabilities(options) {
|
|
58
|
-
const config = options.config;
|
|
59
|
-
const create = [...config.create.allowFormats];
|
|
60
|
-
const extract = [];
|
|
61
|
-
if (options.providers.docling !== undefined)
|
|
62
|
-
extract.push("docx", "pdf");
|
|
63
|
-
else if (options.providers.markitdown !== undefined)
|
|
64
|
-
extract.push("docx", "pdf");
|
|
65
|
-
const convert = CONVERSION_ROUTES.filter(([from, to]) => {
|
|
66
|
-
if (from === "md")
|
|
67
|
-
return to === "docx" ? create.includes("docx") : create.includes("pdf");
|
|
68
|
-
return extract.includes(from);
|
|
69
|
-
}).map(([from, to]) => [from, to]);
|
|
70
|
-
return {
|
|
71
|
-
enabled: config.enabled,
|
|
72
|
-
create,
|
|
73
|
-
extract,
|
|
74
|
-
convert,
|
|
75
|
-
ocr: config.docling.enabled || options.providers.markitdown !== undefined,
|
|
76
|
-
templates: templateNames(options.templates),
|
|
77
|
-
pdfModes: config.typst.enabled
|
|
78
|
-
? ["auto", "office", "typst"]
|
|
79
|
-
: ["auto", "office"],
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
/** Load the template registry of a workspace for capability reporting. */
|
|
83
|
-
export async function capabilitiesForRoot(options) {
|
|
84
|
-
const templates = options.templateRoot === undefined
|
|
85
|
-
? await loadTemplateRegistry(undefined)
|
|
86
|
-
: await loadTemplateRegistry(options.templateRoot);
|
|
87
|
-
return documentCapabilities({
|
|
88
|
-
config: options.config,
|
|
89
|
-
providers: createProviders(options.config, options.seams ?? {}),
|
|
90
|
-
templates,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=capabilities.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/documents/capabilities.ts"],"names":[],"mappings":"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"}
|