@yadsh/dsh-qa-surface 0.6.0 → 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 (292) hide show
  1. package/README.md +148 -9
  2. package/capability-policy.json +1 -1
  3. package/cordis.patch.yml +2 -1
  4. package/lib/access/capability-catalog.js +144 -0
  5. package/lib/access/capability-catalog.js.map +1 -0
  6. package/lib/access/model.js +379 -0
  7. package/lib/access/model.js.map +1 -0
  8. package/lib/access/role-repository.js +195 -0
  9. package/lib/access/role-repository.js.map +1 -0
  10. package/lib/access/service.js +380 -0
  11. package/lib/access/service.js.map +1 -0
  12. package/lib/access/skill-metadata.js +234 -0
  13. package/lib/access/skill-metadata.js.map +1 -0
  14. package/lib/account-remotes.js +20 -10
  15. package/lib/account-remotes.js.map +1 -1
  16. package/lib/accounts/errors.js.map +1 -1
  17. package/lib/accounts/file.js.map +1 -1
  18. package/lib/accounts/store.js +202 -3
  19. package/lib/accounts/store.js.map +1 -1
  20. package/lib/admin/conversation-log.js +256 -0
  21. package/lib/admin/conversation-log.js.map +1 -0
  22. package/lib/admin/index.js +17 -0
  23. package/lib/admin/index.js.map +1 -0
  24. package/lib/admin/metrics.js +103 -0
  25. package/lib/admin/metrics.js.map +1 -0
  26. package/lib/admin/paging.js +23 -0
  27. package/lib/admin/paging.js.map +1 -0
  28. package/lib/admin/permissions.js +50 -0
  29. package/lib/admin/permissions.js.map +1 -0
  30. package/lib/admin/quality-store.js +485 -0
  31. package/lib/admin/quality-store.js.map +1 -0
  32. package/lib/admin/queue.js +107 -0
  33. package/lib/admin/queue.js.map +1 -0
  34. package/lib/admin/redaction.js +45 -0
  35. package/lib/admin/redaction.js.map +1 -0
  36. package/lib/admin/service.js +897 -0
  37. package/lib/admin/service.js.map +1 -0
  38. package/lib/admin/session-log.js +142 -0
  39. package/lib/admin/session-log.js.map +1 -0
  40. package/lib/attestation.js +6 -0
  41. package/lib/attestation.js.map +1 -1
  42. package/lib/cli.js +9 -6
  43. package/lib/cli.js.map +1 -1
  44. package/lib/client/QaSessionController.js +65 -15
  45. package/lib/client/QaSessionController.js.map +1 -1
  46. package/lib/client/QaSurface.js +144 -6
  47. package/lib/client/QaSurface.js.map +1 -1
  48. package/lib/client/QaTranscriptAdapter.js +1 -0
  49. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  50. package/lib/client/admin/QaAdmin.js +458 -0
  51. package/lib/client/admin/QaAdmin.js.map +1 -0
  52. package/lib/client/admin/format.js +177 -0
  53. package/lib/client/admin/format.js.map +1 -0
  54. package/lib/client/admin/pages/Conversations.js +114 -0
  55. package/lib/client/admin/pages/Conversations.js.map +1 -0
  56. package/lib/client/admin/pages/Overview.js +24 -0
  57. package/lib/client/admin/pages/Overview.js.map +1 -0
  58. package/lib/client/admin/pages/Quality.js +71 -0
  59. package/lib/client/admin/pages/Quality.js.map +1 -0
  60. package/lib/client/admin/pages/Review.js +93 -0
  61. package/lib/client/admin/pages/Review.js.map +1 -0
  62. package/lib/client/admin/pages/Users.js +95 -0
  63. package/lib/client/admin/pages/Users.js.map +1 -0
  64. package/lib/client/admin/routes.js +127 -0
  65. package/lib/client/admin/routes.js.map +1 -0
  66. package/lib/client/admin/shared.js +91 -0
  67. package/lib/client/admin/shared.js.map +1 -0
  68. package/lib/client/admin/styles.js +111 -0
  69. package/lib/client/admin/styles.js.map +1 -0
  70. package/lib/client/attestation.js +14 -2
  71. package/lib/client/attestation.js.map +1 -1
  72. package/lib/client/components/QaChangelog.js +48 -0
  73. package/lib/client/components/QaChangelog.js.map +1 -1
  74. package/lib/client/components/QaHeader.js +3 -3
  75. package/lib/client/components/QaHeader.js.map +1 -1
  76. package/lib/client/components/QaMessage.js +61 -2
  77. package/lib/client/components/QaMessage.js.map +1 -1
  78. package/lib/client/create-session.js +1 -1
  79. package/lib/client/create-session.js.map +1 -1
  80. package/lib/client/index.js +33 -1
  81. package/lib/client/index.js.map +1 -1
  82. package/lib/client/project-session-state.js +10 -5
  83. package/lib/client/project-session-state.js.map +1 -1
  84. package/lib/client/role/RoleSelector.js +31 -0
  85. package/lib/client/role/RoleSelector.js.map +1 -0
  86. package/lib/client/session-sources.js +37 -1
  87. package/lib/client/session-sources.js.map +1 -1
  88. package/lib/client/settings/card.js +2 -2
  89. package/lib/client/settings/card.js.map +1 -1
  90. package/lib/client/settings/sections.js +0 -1
  91. package/lib/client/settings/sections.js.map +1 -1
  92. package/lib/client/styles.js +32 -0
  93. package/lib/client/styles.js.map +1 -1
  94. package/lib/client/types.js +1 -0
  95. package/lib/client/types.js.map +1 -1
  96. package/lib/client.js +10786 -5684
  97. package/lib/client.js.map +1 -1
  98. package/lib/config-resolvers/defaults.js +0 -2
  99. package/lib/config-resolvers/defaults.js.map +1 -1
  100. package/lib/config.js +0 -249
  101. package/lib/config.js.map +1 -1
  102. package/lib/enforcement/skill-policy.js +172 -0
  103. package/lib/enforcement/skill-policy.js.map +1 -0
  104. package/lib/enforcement/tool-grants.js +151 -0
  105. package/lib/enforcement/tool-grants.js.map +1 -0
  106. package/lib/index.js +230 -44
  107. package/lib/index.js.map +1 -1
  108. package/lib/personal-skills/service.js +10 -3
  109. package/lib/personal-skills/service.js.map +1 -1
  110. package/lib/qa-tools/index.js +4 -0
  111. package/lib/qa-tools/index.js.map +1 -1
  112. package/lib/resolve-config.js +0 -2
  113. package/lib/resolve-config.js.map +1 -1
  114. package/lib/secure-session.js +111 -32
  115. package/lib/secure-session.js.map +1 -1
  116. package/lib/typert.host.js +2237 -202
  117. package/lib/typert.remote-client.d.ts +49 -3
  118. package/lib/typert.remote-client.js +1863 -183
  119. package/lib/types/access/capability-catalog.d.ts +37 -0
  120. package/lib/types/access/model.d.ts +60 -0
  121. package/lib/types/access/role-repository.d.ts +32 -0
  122. package/lib/types/access/service.d.ts +57 -0
  123. package/lib/types/access/skill-metadata.d.ts +53 -0
  124. package/lib/types/account-remotes.d.ts +6 -0
  125. package/lib/types/accounts/errors.d.ts +1 -1
  126. package/lib/types/accounts/file.d.ts +16 -5
  127. package/lib/types/accounts/store.d.ts +83 -3
  128. package/lib/types/admin/conversation-log.d.ts +39 -0
  129. package/lib/types/admin/index.d.ts +24 -0
  130. package/lib/types/admin/metrics.d.ts +29 -0
  131. package/lib/types/admin/paging.d.ts +33 -0
  132. package/lib/types/admin/permissions.d.ts +10 -0
  133. package/lib/types/admin/quality-store.d.ts +82 -0
  134. package/lib/types/admin/queue.d.ts +21 -0
  135. package/lib/types/admin/redaction.d.ts +29 -0
  136. package/lib/types/admin/service.d.ts +105 -0
  137. package/lib/types/admin/session-log.d.ts +53 -0
  138. package/lib/types/attestation.d.ts +2 -0
  139. package/lib/types/client/QaSessionController.d.ts +14 -1
  140. package/lib/types/client/QaSurface.d.ts +7 -1
  141. package/lib/types/client/admin/QaAdmin.d.ts +17 -0
  142. package/lib/types/client/admin/format.d.ts +43 -0
  143. package/lib/types/client/admin/pages/Conversations.d.ts +21 -0
  144. package/lib/types/client/admin/pages/Overview.d.ts +13 -0
  145. package/lib/types/client/admin/pages/Quality.d.ts +18 -0
  146. package/lib/types/client/admin/pages/Review.d.ts +15 -0
  147. package/lib/types/client/admin/pages/Users.d.ts +22 -0
  148. package/lib/types/client/admin/routes.d.ts +50 -0
  149. package/lib/types/client/admin/shared.d.ts +53 -0
  150. package/lib/types/client/admin/styles.d.ts +11 -0
  151. package/lib/types/client/attestation.d.ts +8 -1
  152. package/lib/types/client/components/QaHeader.d.ts +5 -1
  153. package/lib/types/client/components/QaMessage.d.ts +14 -1
  154. package/lib/types/client/create-session.d.ts +2 -0
  155. package/lib/types/client/project-session-state.d.ts +2 -0
  156. package/lib/types/client/role/RoleSelector.d.ts +14 -0
  157. package/lib/types/client/session-sources.d.ts +9 -0
  158. package/lib/types/client/settings/sections.d.ts +0 -1
  159. package/lib/types/client/types.d.ts +39 -2
  160. package/lib/types/enforcement/skill-policy.d.ts +29 -0
  161. package/lib/types/enforcement/tool-grants.d.ts +84 -0
  162. package/lib/types/index.d.ts +62 -14
  163. package/lib/types/qa-tools/index.d.ts +2 -0
  164. package/lib/types/secure-session.d.ts +19 -1
  165. package/lib/types/types.d.ts +574 -5
  166. package/package.json +3 -3
  167. package/lib/client/settings/sections/documents.js +0 -88
  168. package/lib/client/settings/sections/documents.js.map +0 -1
  169. package/lib/documents/artifacts/ids.js +0 -43
  170. package/lib/documents/artifacts/ids.js.map +0 -1
  171. package/lib/documents/artifacts/manifest.js +0 -66
  172. package/lib/documents/artifacts/manifest.js.map +0 -1
  173. package/lib/documents/artifacts/store.js +0 -169
  174. package/lib/documents/artifacts/store.js.map +0 -1
  175. package/lib/documents/capabilities.js +0 -93
  176. package/lib/documents/capabilities.js.map +0 -1
  177. package/lib/documents/config.js +0 -302
  178. package/lib/documents/config.js.map +0 -1
  179. package/lib/documents/defaults.js +0 -78
  180. package/lib/documents/defaults.js.map +0 -1
  181. package/lib/documents/errors.js +0 -101
  182. package/lib/documents/errors.js.map +0 -1
  183. package/lib/documents/index.js +0 -80
  184. package/lib/documents/index.js.map +0 -1
  185. package/lib/documents/inspect/facts.js +0 -161
  186. package/lib/documents/inspect/facts.js.map +0 -1
  187. package/lib/documents/inspect/zip.js +0 -108
  188. package/lib/documents/inspect/zip.js.map +0 -1
  189. package/lib/documents/markdown/directives.js +0 -135
  190. package/lib/documents/markdown/directives.js.map +0 -1
  191. package/lib/documents/markdown/frontmatter.js +0 -35
  192. package/lib/documents/markdown/frontmatter.js.map +0 -1
  193. package/lib/documents/markdown/normalize.js +0 -113
  194. package/lib/documents/markdown/normalize.js.map +0 -1
  195. package/lib/documents/orchestrator/assets.js +0 -243
  196. package/lib/documents/orchestrator/assets.js.map +0 -1
  197. package/lib/documents/orchestrator/convert-document.js +0 -186
  198. package/lib/documents/orchestrator/convert-document.js.map +0 -1
  199. package/lib/documents/orchestrator/create-document.js +0 -292
  200. package/lib/documents/orchestrator/create-document.js.map +0 -1
  201. package/lib/documents/orchestrator/extract-document.js +0 -162
  202. package/lib/documents/orchestrator/extract-document.js.map +0 -1
  203. package/lib/documents/orchestrator/inspect-document.js +0 -89
  204. package/lib/documents/orchestrator/inspect-document.js.map +0 -1
  205. package/lib/documents/orchestrator/runtime-deps.js +0 -59
  206. package/lib/documents/orchestrator/runtime-deps.js.map +0 -1
  207. package/lib/documents/orchestrator/scope.js +0 -132
  208. package/lib/documents/orchestrator/scope.js.map +0 -1
  209. package/lib/documents/providers/docling.js +0 -247
  210. package/lib/documents/providers/docling.js.map +0 -1
  211. package/lib/documents/providers/libreoffice.js +0 -130
  212. package/lib/documents/providers/libreoffice.js.map +0 -1
  213. package/lib/documents/providers/markitdown.js +0 -89
  214. package/lib/documents/providers/markitdown.js.map +0 -1
  215. package/lib/documents/providers/pandoc.js +0 -161
  216. package/lib/documents/providers/pandoc.js.map +0 -1
  217. package/lib/documents/providers/process.js +0 -164
  218. package/lib/documents/providers/process.js.map +0 -1
  219. package/lib/documents/providers/registry.js +0 -152
  220. package/lib/documents/providers/registry.js.map +0 -1
  221. package/lib/documents/providers/shared.js +0 -75
  222. package/lib/documents/providers/shared.js.map +0 -1
  223. package/lib/documents/runtime.js +0 -114
  224. package/lib/documents/runtime.js.map +0 -1
  225. package/lib/documents/security/file-types.js +0 -188
  226. package/lib/documents/security/file-types.js.map +0 -1
  227. package/lib/documents/security/limits.js +0 -78
  228. package/lib/documents/security/limits.js.map +0 -1
  229. package/lib/documents/security/mime.js +0 -43
  230. package/lib/documents/security/mime.js.map +0 -1
  231. package/lib/documents/security/paths.js +0 -133
  232. package/lib/documents/security/paths.js.map +0 -1
  233. package/lib/documents/templates/registry.js +0 -147
  234. package/lib/documents/templates/registry.js.map +0 -1
  235. package/lib/documents/templates/resolver.js +0 -59
  236. package/lib/documents/templates/resolver.js.map +0 -1
  237. package/lib/documents/tools/convert.js +0 -125
  238. package/lib/documents/tools/convert.js.map +0 -1
  239. package/lib/documents/tools/create.js +0 -187
  240. package/lib/documents/tools/create.js.map +0 -1
  241. package/lib/documents/tools/index.js +0 -41
  242. package/lib/documents/tools/index.js.map +0 -1
  243. package/lib/documents/tools/inspect.js +0 -135
  244. package/lib/documents/tools/inspect.js.map +0 -1
  245. package/lib/documents/tools/shared.js +0 -88
  246. package/lib/documents/tools/shared.js.map +0 -1
  247. package/lib/documents/tools/to-markdown.js +0 -125
  248. package/lib/documents/tools/to-markdown.js.map +0 -1
  249. package/lib/documents/types.js +0 -12
  250. package/lib/documents/types.js.map +0 -1
  251. package/lib/types/client/settings/sections/documents.d.ts +0 -13
  252. package/lib/types/documents/artifacts/ids.d.ts +0 -14
  253. package/lib/types/documents/artifacts/manifest.d.ts +0 -32
  254. package/lib/types/documents/artifacts/store.d.ts +0 -67
  255. package/lib/types/documents/capabilities.d.ts +0 -32
  256. package/lib/types/documents/config.d.ts +0 -27
  257. package/lib/types/documents/defaults.d.ts +0 -161
  258. package/lib/types/documents/errors.d.ts +0 -42
  259. package/lib/types/documents/index.d.ts +0 -63
  260. package/lib/types/documents/inspect/facts.d.ts +0 -43
  261. package/lib/types/documents/inspect/zip.d.ts +0 -28
  262. package/lib/types/documents/markdown/directives.d.ts +0 -39
  263. package/lib/types/documents/markdown/frontmatter.d.ts +0 -15
  264. package/lib/types/documents/markdown/normalize.d.ts +0 -30
  265. package/lib/types/documents/orchestrator/assets.d.ts +0 -55
  266. package/lib/types/documents/orchestrator/convert-document.d.ts +0 -25
  267. package/lib/types/documents/orchestrator/create-document.d.ts +0 -18
  268. package/lib/types/documents/orchestrator/extract-document.d.ts +0 -24
  269. package/lib/types/documents/orchestrator/inspect-document.d.ts +0 -12
  270. package/lib/types/documents/orchestrator/runtime-deps.d.ts +0 -43
  271. package/lib/types/documents/orchestrator/scope.d.ts +0 -52
  272. package/lib/types/documents/providers/docling.d.ts +0 -54
  273. package/lib/types/documents/providers/libreoffice.d.ts +0 -40
  274. package/lib/types/documents/providers/markitdown.d.ts +0 -28
  275. package/lib/types/documents/providers/pandoc.d.ts +0 -42
  276. package/lib/types/documents/providers/process.d.ts +0 -54
  277. package/lib/types/documents/providers/registry.d.ts +0 -68
  278. package/lib/types/documents/providers/shared.d.ts +0 -27
  279. package/lib/types/documents/runtime.d.ts +0 -59
  280. package/lib/types/documents/security/file-types.d.ts +0 -39
  281. package/lib/types/documents/security/limits.d.ts +0 -24
  282. package/lib/types/documents/security/mime.d.ts +0 -13
  283. package/lib/types/documents/security/paths.d.ts +0 -38
  284. package/lib/types/documents/templates/registry.d.ts +0 -50
  285. package/lib/types/documents/templates/resolver.d.ts +0 -30
  286. package/lib/types/documents/tools/convert.d.ts +0 -9
  287. package/lib/types/documents/tools/create.d.ts +0 -14
  288. package/lib/types/documents/tools/index.d.ts +0 -33
  289. package/lib/types/documents/tools/inspect.d.ts +0 -9
  290. package/lib/types/documents/tools/shared.d.ts +0 -77
  291. package/lib/types/documents/tools/to-markdown.d.ts +0 -12
  292. package/lib/types/documents/types.d.ts +0 -294
@@ -1,161 +0,0 @@
1
- /**
2
- * Pandoc provider (§6.1, §13, §14.2).
3
- *
4
- * The command line is assembled here and nowhere else: the agent supplies
5
- * content, a template *name* and a handful of enumerated options, and this
6
- * module turns them into argv. There is no path through the pipeline by which
7
- * a caller can add `--lua-filter`, an arbitrary `--resource-path`, or a
8
- * `--pdf-engine-opt` (§26.1).
9
- */
10
- import path from "node:path";
11
- import { sha256OfFile } from "../artifacts/store.js";
12
- import { DocumentError } from "../errors.js";
13
- import { expectProcessOk, runProcess } from "./process.js";
14
- import { backendInfo, metadataArguments, parseVersionOutput, verifyOutput, } from "./shared.js";
15
- const VERSION_TIMEOUT_MS = 10_000;
16
- const MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
17
- function spawnPandoc(options, argv, context) {
18
- return runProcess(options.executable, argv, {
19
- cwd: context.cwd,
20
- timeoutMs: options.timeoutMs,
21
- maxStdoutBytes: MAX_OUTPUT_BYTES,
22
- backend: context.backend,
23
- context: context.action,
24
- ...(context.signal === undefined ? {} : { signal: context.signal }),
25
- ...(options.programPrefixArgs === undefined
26
- ? {}
27
- : { programPrefixArgs: options.programPrefixArgs }),
28
- });
29
- }
30
- async function probeVersion(options, backend) {
31
- if (options.versionProbe !== undefined)
32
- return await options.versionProbe();
33
- try {
34
- const result = await runProcess(options.executable, ["--version"], {
35
- timeoutMs: VERSION_TIMEOUT_MS,
36
- maxStdoutBytes: 8 * 1024,
37
- backend,
38
- context: "reporting its version",
39
- ...(options.programPrefixArgs === undefined
40
- ? {}
41
- : { programPrefixArgs: options.programPrefixArgs }),
42
- });
43
- if (result.exitCode !== 0)
44
- return undefined;
45
- return parseVersionOutput(result.stdout, backend);
46
- }
47
- catch {
48
- return undefined;
49
- }
50
- }
51
- /** Pandoc renders Markdown into DOCX, optionally through a reference document. */
52
- export class PandocDocxRenderer {
53
- options;
54
- name = "pandoc";
55
- cachedVersion;
56
- constructor(options) {
57
- this.options = options;
58
- }
59
- async version() {
60
- this.cachedVersion ??= probeVersion(this.options, this.name);
61
- return await this.cachedVersion;
62
- }
63
- async render(input) {
64
- const argv = [
65
- input.sourcePath,
66
- "--from=gfm",
67
- "--to=docx",
68
- `--output=${input.outputPath}`,
69
- ...(input.referenceDocPath === undefined
70
- ? []
71
- : [`--reference-doc=${input.referenceDocPath}`]),
72
- ...(input.assetsDir === undefined
73
- ? []
74
- : [`--resource-path=${input.assetsDir}`]),
75
- ...(input.toc === true ? ["--toc", "--toc-depth=3"] : []),
76
- ...(input.title === undefined ? [] : [`--metadata=title=${input.title}`]),
77
- ...metadataArguments(input.metadata),
78
- ];
79
- const result = await spawnPandoc(this.options, argv, {
80
- cwd: input.workDir,
81
- backend: this.name,
82
- action: "rendering DOCX",
83
- ...(input.signal === undefined ? {} : { signal: input.signal }),
84
- });
85
- if (result.truncated) {
86
- throw new DocumentError("RENDER_FAILED", "the DOCX renderer produced more output than the pipeline accepts", { backend: this.name });
87
- }
88
- expectProcessOk(result, {
89
- backend: this.name,
90
- context: "rendering DOCX",
91
- fallbackCode: "RENDER_FAILED",
92
- });
93
- const verified = await verifyOutput(input.outputPath, this.name, "RENDER_FAILED");
94
- return {
95
- path: verified.path,
96
- size: verified.size,
97
- sha256: await sha256OfFile(verified.path),
98
- backend: backendInfo(this.name, await this.version()),
99
- warnings: [],
100
- };
101
- }
102
- }
103
- /**
104
- * Pandoc-driven PDF renderer. The only engine this pipeline enables is Typst,
105
- * so the provider exists for `pdfMode: "typst"` alone (§14.2); the office route
106
- * renders DOCX first and converts it with LibreOffice.
107
- */
108
- export class PandocTypstPdfRenderer {
109
- options;
110
- name = "typst";
111
- cachedVersion;
112
- constructor(options) {
113
- this.options = options;
114
- }
115
- async version() {
116
- this.cachedVersion ??= probeVersion(this.options, this.name);
117
- return await this.cachedVersion;
118
- }
119
- async render(input) {
120
- const argv = [
121
- input.sourcePath,
122
- "--from=gfm",
123
- "--to=pdf",
124
- "--standalone",
125
- "--pdf-engine=typst",
126
- `--output=${input.outputPath}`,
127
- ...(input.typstTemplateDir === undefined
128
- ? []
129
- : [`--template=${path.join(input.typstTemplateDir, "main.typ")}`]),
130
- ...(input.assetsDir === undefined
131
- ? []
132
- : [`--resource-path=${input.assetsDir}`]),
133
- ...(input.pageSize === undefined
134
- ? []
135
- : [`-V=papersize=${input.pageSize}`]),
136
- ...(input.toc === true ? ["--toc", "--toc-depth=3"] : []),
137
- ...(input.title === undefined ? [] : [`--metadata=title=${input.title}`]),
138
- ...metadataArguments(input.metadata),
139
- ];
140
- const result = await spawnPandoc(this.options, argv, {
141
- cwd: input.workDir,
142
- backend: this.name,
143
- action: "rendering PDF with Typst",
144
- ...(input.signal === undefined ? {} : { signal: input.signal }),
145
- });
146
- expectProcessOk(result, {
147
- backend: this.name,
148
- context: "rendering PDF with Typst",
149
- fallbackCode: "RENDER_FAILED",
150
- });
151
- const verified = await verifyOutput(input.outputPath, this.name, "RENDER_FAILED");
152
- return {
153
- path: verified.path,
154
- size: verified.size,
155
- sha256: await sha256OfFile(verified.path),
156
- backend: backendInfo(this.name, await this.version()),
157
- warnings: [],
158
- };
159
- }
160
- }
161
- //# sourceMappingURL=pandoc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pandoc.js","sourceRoot":"","sources":["../../../src/documents/providers/pandoc.ts"],"names":[],"mappings":"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"}
@@ -1,164 +0,0 @@
1
- /**
2
- * Hardened child-process runner for document backends (§26.1, §28, §47).
3
- *
4
- * Every backend invocation goes through here. The contract mirrors the one the
5
- * git tools use, because the threat is the same shape — a document is
6
- * untrusted input and the backend is a powerful external program:
7
- *
8
- * - argv array only, built by the provider, never by the model, no shell;
9
- * - an explicit environment allow-list, so ambient secrets and proxies do not
10
- * reach the backend;
11
- * - output is byte-capped and the process is killed when the cap or the
12
- * timeout hits; a killed run is reported as `timedOut`/`truncated` rather
13
- * than being confused with a backend that failed on its own;
14
- * - the caller's abort signal terminates the child and its descendants.
15
- */
16
- import { spawn } from "node:child_process";
17
- import { DocumentError, sanitizeBackendOutput } from "../errors.js";
18
- const DEFAULT_STDERR_MAX_BYTES = 16 * 1024;
19
- const KILL_ESCALATION_MS = 500;
20
- /**
21
- * Ambient variables a document backend legitimately needs. Everything else —
22
- * API keys, proxy settings, cloud credentials — is withheld: a converter
23
- * parsing a hostile document should not be able to read the deployment's
24
- * secrets out of its own environment (§26.5).
25
- */
26
- export function buildProcessEnv(extra, source = process.env) {
27
- const allowed = {};
28
- for (const key of [
29
- "PATH",
30
- "HOME",
31
- "USERPROFILE",
32
- "LANG",
33
- "LC_ALL",
34
- "TMPDIR",
35
- "TEMP",
36
- "TMP",
37
- "SystemRoot",
38
- "windir",
39
- "PATHEXT",
40
- "COMSPEC",
41
- "PROGRAMFILES",
42
- "PROGRAMFILES(X86)",
43
- "PROGRAMDATA",
44
- "LOCALAPPDATA",
45
- "APPDATA",
46
- ]) {
47
- const value = source[key];
48
- if (value !== undefined)
49
- allowed[key] = value;
50
- }
51
- return { ...allowed, ...(extra ?? {}) };
52
- }
53
- export async function runProcess(program, argv, options) {
54
- const args = [...(options.programPrefixArgs ?? []), ...argv];
55
- return await new Promise((resolve, reject) => {
56
- let child;
57
- try {
58
- child = spawn(program, [...args], {
59
- ...(options.cwd === undefined ? {} : { cwd: options.cwd }),
60
- env: buildProcessEnv(options.env),
61
- stdio: ["ignore", "pipe", "pipe"],
62
- windowsHide: true,
63
- });
64
- }
65
- catch (error) {
66
- reject(new DocumentError("BACKEND_UNAVAILABLE", `${options.backend} could not be started: ${sanitizeBackendOutput(error.message)}`, { backend: options.backend }));
67
- return;
68
- }
69
- let settled = false;
70
- let stdoutBytes = 0;
71
- let stderrBytes = 0;
72
- let truncated = false;
73
- let timedOut = false;
74
- const stdoutChunks = [];
75
- const stderrChunks = [];
76
- const stdoutCap = Math.max(1, Math.floor(options.maxStdoutBytes));
77
- const stderrCap = Math.max(1, Math.floor(options.maxStderrBytes ?? DEFAULT_STDERR_MAX_BYTES));
78
- const kill = () => {
79
- if (child.exitCode !== null || child.signalCode !== null)
80
- return;
81
- child.kill();
82
- const escalation = setTimeout(() => {
83
- if (child.exitCode === null && child.signalCode === null)
84
- child.kill("SIGKILL");
85
- }, KILL_ESCALATION_MS);
86
- escalation.unref?.();
87
- };
88
- const timer = setTimeout(() => {
89
- timedOut = true;
90
- kill();
91
- }, Math.max(1, Math.floor(options.timeoutMs)));
92
- timer.unref?.();
93
- const onAbort = () => kill();
94
- options.signal?.addEventListener("abort", onAbort, { once: true });
95
- const detach = () => {
96
- clearTimeout(timer);
97
- options.signal?.removeEventListener("abort", onAbort);
98
- };
99
- child.stdout?.on("data", (chunk) => {
100
- if (stdoutBytes >= stdoutCap) {
101
- truncated = true;
102
- kill();
103
- return;
104
- }
105
- const remaining = stdoutCap - stdoutBytes;
106
- if (chunk.length > remaining) {
107
- stdoutChunks.push(chunk.subarray(0, remaining));
108
- stdoutBytes = stdoutCap;
109
- truncated = true;
110
- kill();
111
- return;
112
- }
113
- stdoutChunks.push(chunk);
114
- stdoutBytes += chunk.length;
115
- });
116
- child.stderr?.on("data", (chunk) => {
117
- if (stderrBytes >= stderrCap)
118
- return;
119
- const remaining = stderrCap - stderrBytes;
120
- if (chunk.length > remaining) {
121
- stderrChunks.push(chunk.subarray(0, remaining));
122
- stderrBytes = stderrCap;
123
- return;
124
- }
125
- stderrChunks.push(chunk);
126
- stderrBytes += chunk.length;
127
- });
128
- child.on("error", (error) => {
129
- if (settled)
130
- return;
131
- settled = true;
132
- detach();
133
- reject(new DocumentError("BACKEND_UNAVAILABLE", `${options.backend} could not be started: ${sanitizeBackendOutput(error.message)}`, { backend: options.backend }));
134
- });
135
- child.on("close", (code) => {
136
- if (settled)
137
- return;
138
- settled = true;
139
- detach();
140
- resolve({
141
- stdout: Buffer.concat(stdoutChunks).toString("utf8"),
142
- stderr: Buffer.concat(stderrChunks).toString("utf8"),
143
- exitCode: code,
144
- truncated,
145
- timedOut,
146
- });
147
- });
148
- });
149
- }
150
- /** Map a finished run that the provider expected to succeed onto an error. */
151
- export function expectProcessOk(result, options) {
152
- if (result.timedOut) {
153
- throw new DocumentError("BACKEND_TIMEOUT", `${options.backend} exceeded its time budget while ${options.context}`, { backend: options.backend, details: { timeoutMs: true } });
154
- }
155
- if (result.exitCode === 0)
156
- return;
157
- const detail = sanitizeBackendOutput(result.stderr) ||
158
- sanitizeBackendOutput(result.stdout);
159
- throw new DocumentError(options.fallbackCode, `${options.backend} failed while ${options.context}${detail === "" ? "" : `: ${detail}`}`, {
160
- backend: options.backend,
161
- details: { exitCode: result.exitCode },
162
- });
163
- }
164
- //# sourceMappingURL=process.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/documents/providers/process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AA4BpE,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAwC,EACxC,MAAM,GAAsB,OAAO,CAAC,GAAG;IAEvC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI;QAChB,MAAM;QACN,MAAM;QACN,aAAa;QACb,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,KAAK;QACL,YAAY;QACZ,QAAQ;QACR,SAAS;QACT,SAAS;QACT,cAAc;QACd,mBAAmB;QACnB,aAAa;QACb,cAAc;QACd,SAAS;KACV,EAAE,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,IAAuB,EACvB,OAAuB;IAEvB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7D,OAAO,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1D,IAAI,KAA+B,CAAC;QACpC,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;gBAChC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC1D,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC;gBACjC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CACJ,IAAI,aAAa,CACf,qBAAqB,EACrB,GAAG,OAAO,CAAC,OAAO,0BAA0B,qBAAqB,CAAE,KAAe,CAAC,OAAO,CAAC,EAAE,EAC7F,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC7B,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC,CAC/D,CAAC;QAEF,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO;YACjE,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;oBACtD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACvB,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE;YACH,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,EAAE,CAAC;QACT,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAC3C,CAAC;QACF,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAEhB,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC,CAAC;QAEF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;gBAC7B,SAAS,GAAG,IAAI,CAAC;gBACjB,IAAI,EAAE,CAAC;gBACP,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;YAC1C,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBAChD,WAAW,GAAG,SAAS,CAAC;gBACxB,SAAS,GAAG,IAAI,CAAC;gBACjB,IAAI,EAAE,CAAC;gBACP,OAAO;YACT,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,IAAI,WAAW,IAAI,SAAS;gBAAE,OAAO;YACrC,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;YAC1C,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBAChD,WAAW,GAAG,SAAS,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,EAAE,CAAC;YACT,MAAM,CACJ,IAAI,aAAa,CACf,qBAAqB,EACrB,GAAG,OAAO,CAAC,OAAO,0BAA0B,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAClF,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC7B,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,EAAE,CAAC;YACT,OAAO,CAAC;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpD,QAAQ,EAAE,IAAI;gBACd,SAAS;gBACT,QAAQ;aACT,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAC7B,MAAqB,EACrB,OAQC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,GAAG,OAAO,CAAC,OAAO,mCAAmC,OAAO,CAAC,OAAO,EAAE,EACtE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAC3D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,MAAM,GACV,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,aAAa,CACrB,OAAO,CAAC,YAAY,EACpB,GAAG,OAAO,CAAC,OAAO,iBAAiB,OAAO,CAAC,OAAO,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,EAAE,EACzF;QACE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;KACvC,CACF,CAAC;AACJ,CAAC"}
@@ -1,152 +0,0 @@
1
- /**
2
- * Backend registry and selection (§22, §23, §14.3, §45).
3
- *
4
- * Tools never import a concrete provider: they ask the registry for the
5
- * renderer, extractor or converter that fits the request, and the registry
6
- * decides — from configuration and from what is actually available — which
7
- * implementation that is. Swapping Docling for another extractor, or Typst for
8
- * another PDF engine, is a change here and nowhere else.
9
- */
10
- import { DocumentError } from "../errors.js";
11
- import { DoclingExtractor } from "./docling.js";
12
- import { LibreOfficePdfConverter } from "./libreoffice.js";
13
- import { MarkItDownExtractor } from "./markitdown.js";
14
- import { PandocDocxRenderer, PandocTypstPdfRenderer } from "./pandoc.js";
15
- export function createProviders(config, seams = {}) {
16
- const pandocOptions = {
17
- executable: config.pandoc.executable,
18
- timeoutMs: config.pandoc.timeoutMs,
19
- ...(seams.pandoc?.programPrefixArgs === undefined
20
- ? {}
21
- : { programPrefixArgs: seams.pandoc.programPrefixArgs }),
22
- ...(seams.pandoc?.versionProbe === undefined
23
- ? {}
24
- : { versionProbe: seams.pandoc.versionProbe }),
25
- };
26
- const pandoc = new PandocDocxRenderer(pandocOptions);
27
- const docling = config.docling.enabled
28
- ? new DoclingExtractor({
29
- baseUrl: config.docling.baseUrl,
30
- timeoutMs: config.docling.timeoutMs,
31
- maxResponseBytes: config.limits.maxResponseBytes,
32
- maxImages: config.limits.maxExtractedImages,
33
- ...(seams.fetchImpl === undefined
34
- ? {}
35
- : { fetchImpl: seams.fetchImpl }),
36
- })
37
- : undefined;
38
- const markitdown = config.markitdown.enabled
39
- ? new MarkItDownExtractor({
40
- executable: config.markitdown.executable,
41
- timeoutMs: config.markitdown.timeoutMs,
42
- maxStdoutBytes: config.limits.maxExtractedMarkdownBytes,
43
- ...(seams.markitdown?.programPrefixArgs === undefined
44
- ? {}
45
- : { programPrefixArgs: seams.markitdown.programPrefixArgs }),
46
- ...(seams.markitdown?.versionProbe === undefined
47
- ? {}
48
- : { versionProbe: seams.markitdown.versionProbe }),
49
- })
50
- : undefined;
51
- return {
52
- docx: pandoc,
53
- typstPdf: config.typst.enabled
54
- ? new PandocTypstPdfRenderer(pandocOptions)
55
- : undefined,
56
- converter: new LibreOfficePdfConverter({
57
- executable: config.libreoffice.executable,
58
- timeoutMs: config.libreoffice.timeoutMs,
59
- ...(seams.libreoffice?.programPrefixArgs === undefined
60
- ? {}
61
- : { programPrefixArgs: seams.libreoffice.programPrefixArgs }),
62
- ...(seams.libreoffice?.versionProbe === undefined
63
- ? {}
64
- : { versionProbe: seams.libreoffice.versionProbe }),
65
- }),
66
- docling,
67
- doclingHealth: docling === undefined
68
- ? undefined
69
- : async () => await docling.health(),
70
- markitdown,
71
- markitdownHealth: markitdown === undefined
72
- ? undefined
73
- : async () => await markitdown.health(),
74
- };
75
- }
76
- /**
77
- * The PDF route (§14.3):
78
- *
79
- * ```text
80
- * DOCX + PDF requested → office
81
- * PDF only, template has Typst → typst
82
- * otherwise → office
83
- * ```
84
- *
85
- * A deployment that asked for `typst` without enabling the engine is answered
86
- * with `BACKEND_UNAVAILABLE` instead of silently rendering an office PDF in
87
- * the wrong layout.
88
- */
89
- export function selectPdfMode(options) {
90
- const wantsDocx = options.formats.includes("docx");
91
- const resolve = () => {
92
- if (options.requested === "office")
93
- return "office";
94
- if (options.requested === "typst")
95
- return "typst";
96
- if (wantsDocx)
97
- return "office";
98
- return options.templateHasTypst ? "typst" : "office";
99
- };
100
- const mode = resolve();
101
- if (mode === "typst" && !options.typstEnabled) {
102
- throw new DocumentError("BACKEND_UNAVAILABLE", options.requested === "typst"
103
- ? "the Typst PDF route is not enabled in this deployment"
104
- : "this template only provides a Typst layout, but the Typst PDF route is not enabled", { backend: "typst" });
105
- }
106
- return mode;
107
- }
108
- export function selectExtractor(providers, config, mode, format) {
109
- const docling = providers.docling;
110
- const markitdown = providers.markitdown;
111
- if (mode === "fast") {
112
- if (markitdown !== undefined && markitdown.supports(format)) {
113
- return {
114
- extractor: markitdown,
115
- fallbacks: docling === undefined ? [] : [docling],
116
- };
117
- }
118
- if (docling === undefined) {
119
- throw new DocumentError("BACKEND_UNAVAILABLE", "no document extractor is enabled in this deployment", { backend: "docling" });
120
- }
121
- return { extractor: docling, fallbacks: [] };
122
- }
123
- if (docling !== undefined && docling.supports(format)) {
124
- const fallbacks = config.extraction.allowFallback &&
125
- markitdown !== undefined &&
126
- markitdown.supports(format)
127
- ? [markitdown]
128
- : [];
129
- return { extractor: docling, fallbacks };
130
- }
131
- if (markitdown !== undefined && markitdown.supports(format)) {
132
- return { extractor: markitdown, fallbacks: [] };
133
- }
134
- throw new DocumentError("BACKEND_UNAVAILABLE", `no enabled extractor supports ${format.toUpperCase()} documents`, { backend: "docling" });
135
- }
136
- /** Run the selected extractor, falling back only when it is unreachable. */
137
- export async function extractWithFallback(selection, input) {
138
- try {
139
- return { document: await selection.extractor.extract(input) };
140
- }
141
- catch (error) {
142
- const unreachable = error instanceof DocumentError &&
143
- (error.code === "BACKEND_UNAVAILABLE" ||
144
- error.code === "BACKEND_TIMEOUT");
145
- const next = selection.fallbacks[0];
146
- if (!unreachable || next === undefined)
147
- throw error;
148
- const document = await next.extract(input);
149
- return { document, fellBackFrom: selection.extractor.name };
150
- }
151
- }
152
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/documents/providers/registry.ts"],"names":[],"mappings":"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"}
@@ -1,75 +0,0 @@
1
- /**
2
- * Shared plumbing of the document providers.
3
- *
4
- * Providers report what they wrote through {@link verifyOutput}: a backend
5
- * that exits 0 but leaves no file behind is a failure, and one that leaves an
6
- * empty file is a failure too — the caller must never be handed a path that
7
- * looks like an artifact and is not.
8
- */
9
- import { readFile, stat } from "node:fs/promises";
10
- import { DocumentError, sanitizeBackendOutput } from "../errors.js";
11
- export async function verifyOutput(outputPath, backend, code) {
12
- const details = await stat(outputPath).catch(() => undefined);
13
- if (details === undefined || !details.isFile()) {
14
- throw new DocumentError(code, `${backend} reported success but produced no output`, { backend });
15
- }
16
- if (details.size === 0) {
17
- throw new DocumentError(code, `${backend} produced an empty file`, {
18
- backend,
19
- });
20
- }
21
- return { path: outputPath, size: details.size };
22
- }
23
- /** `--metadata=key=value` pairs, sanitized of control characters. */
24
- export function metadataArguments(metadata) {
25
- if (metadata === undefined)
26
- return [];
27
- const args = [];
28
- for (const [key, value] of Object.entries(metadata)) {
29
- const cleanKey = key.replace(/[^A-Za-z0-9_-]+/gu, "-").slice(0, 40);
30
- if (cleanKey === "")
31
- continue;
32
- // Newlines would let a value impersonate the next CLI argument in a log;
33
- // argv itself is already structured, so collapsing is enough.
34
- /* eslint-disable-next-line no-control-regex -- newlines and NULs must not survive into a log */
35
- const cleanValue = value.replace(/[\r\n\u0000]+/gu, " ").slice(0, 4_000);
36
- args.push(`--metadata=${cleanKey}=${cleanValue}`);
37
- }
38
- return args;
39
- }
40
- /** First line of a `--version` run, reduced to the version token. */
41
- export function parseVersionOutput(stdout, program) {
42
- const firstLine = sanitizeBackendOutput(stdout.split(/\r?\n/u)[0] ?? "", 200);
43
- const match = /(\d+\.\d+(?:\.\d+)?)/u.exec(firstLine);
44
- if (match !== null)
45
- return match[1];
46
- return firstLine === "" || firstLine === program ? undefined : firstLine;
47
- }
48
- export function backendInfo(provider, version) {
49
- return version === undefined ? { provider } : { provider, version };
50
- }
51
- /** Read a text output produced by a backend, with a bounded size. */
52
- export async function readTextOutput(filePath, backend, maxBytes) {
53
- const details = await stat(filePath).catch(() => undefined);
54
- if (details === undefined) {
55
- throw new DocumentError("EXTRACTION_FAILED", `${backend} produced no output`, {
56
- backend,
57
- });
58
- }
59
- if (details.size > maxBytes) {
60
- const raw = await readFile(filePath);
61
- return {
62
- text: raw.subarray(0, maxBytes).toString("utf8"),
63
- truncated: true,
64
- };
65
- }
66
- return { text: await readFile(filePath, "utf8"), truncated: false };
67
- }
68
- export function truncationWarning(backend, contentType) {
69
- return {
70
- code: "MARKDOWN_TRUNCATED",
71
- message: `the extracted ${contentType} exceeded the configured inline budget and was truncated`,
72
- backend,
73
- };
74
- }
75
- //# sourceMappingURL=shared.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/documents/providers/shared.ts"],"names":[],"mappings":"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"}