@yadsh/dsh-qa-surface 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/README.md +136 -7
  2. package/capability-policy.json +1 -1
  3. package/lib/access/capability-catalog.js +144 -0
  4. package/lib/access/capability-catalog.js.map +1 -0
  5. package/lib/access/model.js +379 -0
  6. package/lib/access/model.js.map +1 -0
  7. package/lib/access/role-repository.js +195 -0
  8. package/lib/access/role-repository.js.map +1 -0
  9. package/lib/access/service.js +380 -0
  10. package/lib/access/service.js.map +1 -0
  11. package/lib/access/skill-metadata.js +234 -0
  12. package/lib/access/skill-metadata.js.map +1 -0
  13. package/lib/account-remotes.js +20 -10
  14. package/lib/account-remotes.js.map +1 -1
  15. package/lib/accounts/errors.js.map +1 -1
  16. package/lib/accounts/file.js.map +1 -1
  17. package/lib/accounts/store.js +202 -3
  18. package/lib/accounts/store.js.map +1 -1
  19. package/lib/admin/conversation-log.js +256 -0
  20. package/lib/admin/conversation-log.js.map +1 -0
  21. package/lib/admin/index.js +17 -0
  22. package/lib/admin/index.js.map +1 -0
  23. package/lib/admin/metrics.js +103 -0
  24. package/lib/admin/metrics.js.map +1 -0
  25. package/lib/admin/paging.js +23 -0
  26. package/lib/admin/paging.js.map +1 -0
  27. package/lib/admin/permissions.js +50 -0
  28. package/lib/admin/permissions.js.map +1 -0
  29. package/lib/admin/quality-store.js +485 -0
  30. package/lib/admin/quality-store.js.map +1 -0
  31. package/lib/admin/queue.js +107 -0
  32. package/lib/admin/queue.js.map +1 -0
  33. package/lib/admin/redaction.js +45 -0
  34. package/lib/admin/redaction.js.map +1 -0
  35. package/lib/admin/service.js +897 -0
  36. package/lib/admin/service.js.map +1 -0
  37. package/lib/admin/session-log.js +142 -0
  38. package/lib/admin/session-log.js.map +1 -0
  39. package/lib/cli.js +9 -6
  40. package/lib/cli.js.map +1 -1
  41. package/lib/client/QaSessionController.js +28 -2
  42. package/lib/client/QaSessionController.js.map +1 -1
  43. package/lib/client/QaSurface.js +143 -5
  44. package/lib/client/QaSurface.js.map +1 -1
  45. package/lib/client/QaTranscriptAdapter.js +1 -0
  46. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  47. package/lib/client/admin/QaAdmin.js +458 -0
  48. package/lib/client/admin/QaAdmin.js.map +1 -0
  49. package/lib/client/admin/format.js +177 -0
  50. package/lib/client/admin/format.js.map +1 -0
  51. package/lib/client/admin/pages/Conversations.js +114 -0
  52. package/lib/client/admin/pages/Conversations.js.map +1 -0
  53. package/lib/client/admin/pages/Overview.js +24 -0
  54. package/lib/client/admin/pages/Overview.js.map +1 -0
  55. package/lib/client/admin/pages/Quality.js +71 -0
  56. package/lib/client/admin/pages/Quality.js.map +1 -0
  57. package/lib/client/admin/pages/Review.js +93 -0
  58. package/lib/client/admin/pages/Review.js.map +1 -0
  59. package/lib/client/admin/pages/Users.js +95 -0
  60. package/lib/client/admin/pages/Users.js.map +1 -0
  61. package/lib/client/admin/routes.js +127 -0
  62. package/lib/client/admin/routes.js.map +1 -0
  63. package/lib/client/admin/shared.js +91 -0
  64. package/lib/client/admin/shared.js.map +1 -0
  65. package/lib/client/admin/styles.js +111 -0
  66. package/lib/client/admin/styles.js.map +1 -0
  67. package/lib/client/components/QaChangelog.js +35 -0
  68. package/lib/client/components/QaChangelog.js.map +1 -1
  69. package/lib/client/components/QaHeader.js +3 -3
  70. package/lib/client/components/QaHeader.js.map +1 -1
  71. package/lib/client/components/QaMessage.js +61 -2
  72. package/lib/client/components/QaMessage.js.map +1 -1
  73. package/lib/client/create-session.js +1 -1
  74. package/lib/client/create-session.js.map +1 -1
  75. package/lib/client/index.js +33 -1
  76. package/lib/client/index.js.map +1 -1
  77. package/lib/client/role/RoleSelector.js +31 -0
  78. package/lib/client/role/RoleSelector.js.map +1 -0
  79. package/lib/client/session-sources.js +37 -1
  80. package/lib/client/session-sources.js.map +1 -1
  81. package/lib/client/settings/card.js +2 -2
  82. package/lib/client/settings/card.js.map +1 -1
  83. package/lib/client/settings/sections.js +0 -1
  84. package/lib/client/settings/sections.js.map +1 -1
  85. package/lib/client/styles.js +31 -0
  86. package/lib/client/styles.js.map +1 -1
  87. package/lib/client/types.js.map +1 -1
  88. package/lib/client.js +9908 -4857
  89. package/lib/client.js.map +1 -1
  90. package/lib/config-resolvers/defaults.js +0 -2
  91. package/lib/config-resolvers/defaults.js.map +1 -1
  92. package/lib/config.js +0 -249
  93. package/lib/config.js.map +1 -1
  94. package/lib/enforcement/skill-policy.js +172 -0
  95. package/lib/enforcement/skill-policy.js.map +1 -0
  96. package/lib/enforcement/tool-grants.js +151 -0
  97. package/lib/enforcement/tool-grants.js.map +1 -0
  98. package/lib/index.js +224 -42
  99. package/lib/index.js.map +1 -1
  100. package/lib/personal-skills/service.js +10 -3
  101. package/lib/personal-skills/service.js.map +1 -1
  102. package/lib/qa-tools/index.js +4 -0
  103. package/lib/qa-tools/index.js.map +1 -1
  104. package/lib/resolve-config.js +0 -2
  105. package/lib/resolve-config.js.map +1 -1
  106. package/lib/secure-session.js +71 -17
  107. package/lib/secure-session.js.map +1 -1
  108. package/lib/typert.host.js +2237 -202
  109. package/lib/typert.remote-client.d.ts +49 -3
  110. package/lib/typert.remote-client.js +1863 -183
  111. package/lib/types/access/capability-catalog.d.ts +37 -0
  112. package/lib/types/access/model.d.ts +60 -0
  113. package/lib/types/access/role-repository.d.ts +32 -0
  114. package/lib/types/access/service.d.ts +57 -0
  115. package/lib/types/access/skill-metadata.d.ts +53 -0
  116. package/lib/types/account-remotes.d.ts +6 -0
  117. package/lib/types/accounts/errors.d.ts +1 -1
  118. package/lib/types/accounts/file.d.ts +16 -5
  119. package/lib/types/accounts/store.d.ts +83 -3
  120. package/lib/types/admin/conversation-log.d.ts +39 -0
  121. package/lib/types/admin/index.d.ts +24 -0
  122. package/lib/types/admin/metrics.d.ts +29 -0
  123. package/lib/types/admin/paging.d.ts +33 -0
  124. package/lib/types/admin/permissions.d.ts +10 -0
  125. package/lib/types/admin/quality-store.d.ts +82 -0
  126. package/lib/types/admin/queue.d.ts +21 -0
  127. package/lib/types/admin/redaction.d.ts +29 -0
  128. package/lib/types/admin/service.d.ts +105 -0
  129. package/lib/types/admin/session-log.d.ts +53 -0
  130. package/lib/types/client/QaSessionController.d.ts +12 -1
  131. package/lib/types/client/QaSurface.d.ts +7 -1
  132. package/lib/types/client/admin/QaAdmin.d.ts +17 -0
  133. package/lib/types/client/admin/format.d.ts +43 -0
  134. package/lib/types/client/admin/pages/Conversations.d.ts +21 -0
  135. package/lib/types/client/admin/pages/Overview.d.ts +13 -0
  136. package/lib/types/client/admin/pages/Quality.d.ts +18 -0
  137. package/lib/types/client/admin/pages/Review.d.ts +15 -0
  138. package/lib/types/client/admin/pages/Users.d.ts +22 -0
  139. package/lib/types/client/admin/routes.d.ts +50 -0
  140. package/lib/types/client/admin/shared.d.ts +53 -0
  141. package/lib/types/client/admin/styles.d.ts +11 -0
  142. package/lib/types/client/components/QaHeader.d.ts +5 -1
  143. package/lib/types/client/components/QaMessage.d.ts +14 -1
  144. package/lib/types/client/create-session.d.ts +2 -0
  145. package/lib/types/client/role/RoleSelector.d.ts +14 -0
  146. package/lib/types/client/session-sources.d.ts +9 -0
  147. package/lib/types/client/settings/sections.d.ts +0 -1
  148. package/lib/types/client/types.d.ts +39 -2
  149. package/lib/types/enforcement/skill-policy.d.ts +29 -0
  150. package/lib/types/enforcement/tool-grants.d.ts +84 -0
  151. package/lib/types/index.d.ts +62 -14
  152. package/lib/types/qa-tools/index.d.ts +2 -0
  153. package/lib/types/secure-session.d.ts +10 -1
  154. package/lib/types/types.d.ts +568 -5
  155. package/package.json +1 -1
  156. package/lib/client/settings/sections/documents.js +0 -88
  157. package/lib/client/settings/sections/documents.js.map +0 -1
  158. package/lib/documents/artifacts/ids.js +0 -43
  159. package/lib/documents/artifacts/ids.js.map +0 -1
  160. package/lib/documents/artifacts/manifest.js +0 -66
  161. package/lib/documents/artifacts/manifest.js.map +0 -1
  162. package/lib/documents/artifacts/store.js +0 -169
  163. package/lib/documents/artifacts/store.js.map +0 -1
  164. package/lib/documents/capabilities.js +0 -93
  165. package/lib/documents/capabilities.js.map +0 -1
  166. package/lib/documents/config.js +0 -302
  167. package/lib/documents/config.js.map +0 -1
  168. package/lib/documents/defaults.js +0 -78
  169. package/lib/documents/defaults.js.map +0 -1
  170. package/lib/documents/errors.js +0 -101
  171. package/lib/documents/errors.js.map +0 -1
  172. package/lib/documents/index.js +0 -80
  173. package/lib/documents/index.js.map +0 -1
  174. package/lib/documents/inspect/facts.js +0 -161
  175. package/lib/documents/inspect/facts.js.map +0 -1
  176. package/lib/documents/inspect/zip.js +0 -108
  177. package/lib/documents/inspect/zip.js.map +0 -1
  178. package/lib/documents/markdown/directives.js +0 -135
  179. package/lib/documents/markdown/directives.js.map +0 -1
  180. package/lib/documents/markdown/frontmatter.js +0 -35
  181. package/lib/documents/markdown/frontmatter.js.map +0 -1
  182. package/lib/documents/markdown/normalize.js +0 -113
  183. package/lib/documents/markdown/normalize.js.map +0 -1
  184. package/lib/documents/orchestrator/assets.js +0 -243
  185. package/lib/documents/orchestrator/assets.js.map +0 -1
  186. package/lib/documents/orchestrator/convert-document.js +0 -186
  187. package/lib/documents/orchestrator/convert-document.js.map +0 -1
  188. package/lib/documents/orchestrator/create-document.js +0 -292
  189. package/lib/documents/orchestrator/create-document.js.map +0 -1
  190. package/lib/documents/orchestrator/extract-document.js +0 -162
  191. package/lib/documents/orchestrator/extract-document.js.map +0 -1
  192. package/lib/documents/orchestrator/inspect-document.js +0 -89
  193. package/lib/documents/orchestrator/inspect-document.js.map +0 -1
  194. package/lib/documents/orchestrator/runtime-deps.js +0 -59
  195. package/lib/documents/orchestrator/runtime-deps.js.map +0 -1
  196. package/lib/documents/orchestrator/scope.js +0 -132
  197. package/lib/documents/orchestrator/scope.js.map +0 -1
  198. package/lib/documents/providers/docling.js +0 -247
  199. package/lib/documents/providers/docling.js.map +0 -1
  200. package/lib/documents/providers/libreoffice.js +0 -130
  201. package/lib/documents/providers/libreoffice.js.map +0 -1
  202. package/lib/documents/providers/markitdown.js +0 -89
  203. package/lib/documents/providers/markitdown.js.map +0 -1
  204. package/lib/documents/providers/pandoc.js +0 -161
  205. package/lib/documents/providers/pandoc.js.map +0 -1
  206. package/lib/documents/providers/process.js +0 -164
  207. package/lib/documents/providers/process.js.map +0 -1
  208. package/lib/documents/providers/registry.js +0 -152
  209. package/lib/documents/providers/registry.js.map +0 -1
  210. package/lib/documents/providers/shared.js +0 -75
  211. package/lib/documents/providers/shared.js.map +0 -1
  212. package/lib/documents/runtime.js +0 -114
  213. package/lib/documents/runtime.js.map +0 -1
  214. package/lib/documents/security/file-types.js +0 -188
  215. package/lib/documents/security/file-types.js.map +0 -1
  216. package/lib/documents/security/limits.js +0 -78
  217. package/lib/documents/security/limits.js.map +0 -1
  218. package/lib/documents/security/mime.js +0 -43
  219. package/lib/documents/security/mime.js.map +0 -1
  220. package/lib/documents/security/paths.js +0 -133
  221. package/lib/documents/security/paths.js.map +0 -1
  222. package/lib/documents/templates/registry.js +0 -147
  223. package/lib/documents/templates/registry.js.map +0 -1
  224. package/lib/documents/templates/resolver.js +0 -59
  225. package/lib/documents/templates/resolver.js.map +0 -1
  226. package/lib/documents/tools/convert.js +0 -125
  227. package/lib/documents/tools/convert.js.map +0 -1
  228. package/lib/documents/tools/create.js +0 -187
  229. package/lib/documents/tools/create.js.map +0 -1
  230. package/lib/documents/tools/index.js +0 -41
  231. package/lib/documents/tools/index.js.map +0 -1
  232. package/lib/documents/tools/inspect.js +0 -135
  233. package/lib/documents/tools/inspect.js.map +0 -1
  234. package/lib/documents/tools/shared.js +0 -88
  235. package/lib/documents/tools/shared.js.map +0 -1
  236. package/lib/documents/tools/to-markdown.js +0 -125
  237. package/lib/documents/tools/to-markdown.js.map +0 -1
  238. package/lib/documents/types.js +0 -12
  239. package/lib/documents/types.js.map +0 -1
  240. package/lib/types/client/settings/sections/documents.d.ts +0 -13
  241. package/lib/types/documents/artifacts/ids.d.ts +0 -14
  242. package/lib/types/documents/artifacts/manifest.d.ts +0 -32
  243. package/lib/types/documents/artifacts/store.d.ts +0 -67
  244. package/lib/types/documents/capabilities.d.ts +0 -32
  245. package/lib/types/documents/config.d.ts +0 -27
  246. package/lib/types/documents/defaults.d.ts +0 -161
  247. package/lib/types/documents/errors.d.ts +0 -42
  248. package/lib/types/documents/index.d.ts +0 -63
  249. package/lib/types/documents/inspect/facts.d.ts +0 -43
  250. package/lib/types/documents/inspect/zip.d.ts +0 -28
  251. package/lib/types/documents/markdown/directives.d.ts +0 -39
  252. package/lib/types/documents/markdown/frontmatter.d.ts +0 -15
  253. package/lib/types/documents/markdown/normalize.d.ts +0 -30
  254. package/lib/types/documents/orchestrator/assets.d.ts +0 -55
  255. package/lib/types/documents/orchestrator/convert-document.d.ts +0 -25
  256. package/lib/types/documents/orchestrator/create-document.d.ts +0 -18
  257. package/lib/types/documents/orchestrator/extract-document.d.ts +0 -24
  258. package/lib/types/documents/orchestrator/inspect-document.d.ts +0 -12
  259. package/lib/types/documents/orchestrator/runtime-deps.d.ts +0 -43
  260. package/lib/types/documents/orchestrator/scope.d.ts +0 -52
  261. package/lib/types/documents/providers/docling.d.ts +0 -54
  262. package/lib/types/documents/providers/libreoffice.d.ts +0 -40
  263. package/lib/types/documents/providers/markitdown.d.ts +0 -28
  264. package/lib/types/documents/providers/pandoc.d.ts +0 -42
  265. package/lib/types/documents/providers/process.d.ts +0 -54
  266. package/lib/types/documents/providers/registry.d.ts +0 -68
  267. package/lib/types/documents/providers/shared.d.ts +0 -27
  268. package/lib/types/documents/runtime.d.ts +0 -59
  269. package/lib/types/documents/security/file-types.d.ts +0 -39
  270. package/lib/types/documents/security/limits.d.ts +0 -24
  271. package/lib/types/documents/security/mime.d.ts +0 -13
  272. package/lib/types/documents/security/paths.d.ts +0 -38
  273. package/lib/types/documents/templates/registry.d.ts +0 -50
  274. package/lib/types/documents/templates/resolver.d.ts +0 -30
  275. package/lib/types/documents/tools/convert.d.ts +0 -9
  276. package/lib/types/documents/tools/create.d.ts +0 -14
  277. package/lib/types/documents/tools/index.d.ts +0 -33
  278. package/lib/types/documents/tools/inspect.d.ts +0 -9
  279. package/lib/types/documents/tools/shared.d.ts +0 -77
  280. package/lib/types/documents/tools/to-markdown.d.ts +0 -12
  281. 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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"}