@bevel-software/platform-core-backend 0.11.2 → 0.12.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 (141) hide show
  1. package/THIRD-PARTY-NOTICES.md +1163 -425
  2. package/dist/core/create-core-server.js +1 -1
  3. package/dist/core/create-core-server.js.map +1 -1
  4. package/dist/core/create-core-services.d.ts +2 -0
  5. package/dist/core/create-core-services.d.ts.map +1 -1
  6. package/dist/core/create-core-services.js +5 -0
  7. package/dist/core/create-core-services.js.map +1 -1
  8. package/dist/core-config.d.ts +7 -0
  9. package/dist/core-config.d.ts.map +1 -1
  10. package/dist/core-config.js +9 -0
  11. package/dist/core-config.js.map +1 -1
  12. package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
  13. package/dist/modules/code-mode/code-mode.tool.js +7 -1
  14. package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
  15. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +71 -0
  16. package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -0
  17. package/dist/modules/workspace/file-readers/doc-extract.service.js +90 -0
  18. package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -0
  19. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +55 -0
  20. package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -0
  21. package/dist/modules/workspace/file-readers/doc-extract.types.js +34 -0
  22. package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -0
  23. package/dist/modules/workspace/file-readers/document-reader.d.ts +32 -0
  24. package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -0
  25. package/dist/modules/workspace/file-readers/document-reader.js +59 -0
  26. package/dist/modules/workspace/file-readers/document-reader.js.map +1 -0
  27. package/dist/modules/workspace/file-readers/email-reader.d.ts +15 -0
  28. package/dist/modules/workspace/file-readers/email-reader.d.ts.map +1 -0
  29. package/dist/modules/workspace/file-readers/email-reader.js +19 -0
  30. package/dist/modules/workspace/file-readers/email-reader.js.map +1 -0
  31. package/dist/modules/workspace/file-readers/email-text.d.ts +51 -0
  32. package/dist/modules/workspace/file-readers/email-text.d.ts.map +1 -0
  33. package/dist/modules/workspace/file-readers/email-text.js +151 -0
  34. package/dist/modules/workspace/file-readers/email-text.js.map +1 -0
  35. package/dist/modules/workspace/file-readers/extract-docx.d.ts +13 -0
  36. package/dist/modules/workspace/file-readers/extract-docx.d.ts.map +1 -0
  37. package/dist/modules/workspace/file-readers/extract-docx.js +67 -0
  38. package/dist/modules/workspace/file-readers/extract-docx.js.map +1 -0
  39. package/dist/modules/workspace/file-readers/extract-eml.d.ts +18 -0
  40. package/dist/modules/workspace/file-readers/extract-eml.d.ts.map +1 -0
  41. package/dist/modules/workspace/file-readers/extract-eml.js +87 -0
  42. package/dist/modules/workspace/file-readers/extract-eml.js.map +1 -0
  43. package/dist/modules/workspace/file-readers/extract-msg.d.ts +17 -0
  44. package/dist/modules/workspace/file-readers/extract-msg.d.ts.map +1 -0
  45. package/dist/modules/workspace/file-readers/extract-msg.js +121 -0
  46. package/dist/modules/workspace/file-readers/extract-msg.js.map +1 -0
  47. package/dist/modules/workspace/file-readers/extract-odp.d.ts +13 -0
  48. package/dist/modules/workspace/file-readers/extract-odp.d.ts.map +1 -0
  49. package/dist/modules/workspace/file-readers/extract-odp.js +60 -0
  50. package/dist/modules/workspace/file-readers/extract-odp.js.map +1 -0
  51. package/dist/modules/workspace/file-readers/extract-ods.d.ts +10 -0
  52. package/dist/modules/workspace/file-readers/extract-ods.d.ts.map +1 -0
  53. package/dist/modules/workspace/file-readers/extract-ods.js +173 -0
  54. package/dist/modules/workspace/file-readers/extract-ods.js.map +1 -0
  55. package/dist/modules/workspace/file-readers/extract-odt.d.ts +17 -0
  56. package/dist/modules/workspace/file-readers/extract-odt.d.ts.map +1 -0
  57. package/dist/modules/workspace/file-readers/extract-odt.js +45 -0
  58. package/dist/modules/workspace/file-readers/extract-odt.js.map +1 -0
  59. package/dist/modules/workspace/file-readers/extract-pdf.d.ts +3 -0
  60. package/dist/modules/workspace/file-readers/extract-pdf.d.ts.map +1 -0
  61. package/dist/modules/workspace/file-readers/extract-pdf.js +176 -0
  62. package/dist/modules/workspace/file-readers/extract-pdf.js.map +1 -0
  63. package/dist/modules/workspace/file-readers/extract-pptx.d.ts +37 -0
  64. package/dist/modules/workspace/file-readers/extract-pptx.d.ts.map +1 -0
  65. package/dist/modules/workspace/file-readers/extract-pptx.js +288 -0
  66. package/dist/modules/workspace/file-readers/extract-pptx.js.map +1 -0
  67. package/dist/modules/workspace/file-readers/extract-xlsx.d.ts +10 -0
  68. package/dist/modules/workspace/file-readers/extract-xlsx.d.ts.map +1 -0
  69. package/dist/modules/workspace/file-readers/extract-xlsx.js +98 -0
  70. package/dist/modules/workspace/file-readers/extract-xlsx.js.map +1 -0
  71. package/dist/modules/workspace/file-readers/extraction-cache.d.ts +61 -0
  72. package/dist/modules/workspace/file-readers/extraction-cache.d.ts.map +1 -0
  73. package/dist/modules/workspace/file-readers/extraction-cache.js +135 -0
  74. package/dist/modules/workspace/file-readers/extraction-cache.js.map +1 -0
  75. package/dist/modules/workspace/file-readers/file-reader.d.ts +76 -0
  76. package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -0
  77. package/dist/modules/workspace/file-readers/file-reader.js +55 -0
  78. package/dist/modules/workspace/file-readers/file-reader.js.map +1 -0
  79. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts +13 -0
  80. package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -0
  81. package/dist/modules/workspace/file-readers/file-reader.registry.js +41 -0
  82. package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -0
  83. package/dist/modules/workspace/file-readers/image-read.d.ts +35 -0
  84. package/dist/modules/workspace/file-readers/image-read.d.ts.map +1 -0
  85. package/dist/modules/workspace/file-readers/image-read.js +108 -0
  86. package/dist/modules/workspace/file-readers/image-read.js.map +1 -0
  87. package/dist/modules/workspace/file-readers/image-reader.d.ts +19 -0
  88. package/dist/modules/workspace/file-readers/image-reader.d.ts.map +1 -0
  89. package/dist/modules/workspace/file-readers/image-reader.js +30 -0
  90. package/dist/modules/workspace/file-readers/image-reader.js.map +1 -0
  91. package/dist/modules/workspace/file-readers/odf-text.d.ts +26 -0
  92. package/dist/modules/workspace/file-readers/odf-text.d.ts.map +1 -0
  93. package/dist/modules/workspace/file-readers/odf-text.js +116 -0
  94. package/dist/modules/workspace/file-readers/odf-text.js.map +1 -0
  95. package/dist/modules/workspace/file-readers/ooxml-text.d.ts +172 -0
  96. package/dist/modules/workspace/file-readers/ooxml-text.d.ts.map +1 -0
  97. package/dist/modules/workspace/file-readers/ooxml-text.js +439 -0
  98. package/dist/modules/workspace/file-readers/ooxml-text.js.map +1 -0
  99. package/dist/modules/workspace/file-readers/text-reader.d.ts +47 -0
  100. package/dist/modules/workspace/file-readers/text-reader.d.ts.map +1 -0
  101. package/dist/modules/workspace/file-readers/text-reader.js +117 -0
  102. package/dist/modules/workspace/file-readers/text-reader.js.map +1 -0
  103. package/dist/modules/workspace/workspace.tools.d.ts +2 -1
  104. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  105. package/dist/modules/workspace/workspace.tools.js +158 -15
  106. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  107. package/package.json +9 -4
  108. package/src/core/create-core-server.ts +1 -1
  109. package/src/core/create-core-services.ts +6 -0
  110. package/src/core-config.ts +9 -0
  111. package/src/modules/code-mode/__tests__/code-mode.tool.test.ts +30 -0
  112. package/src/modules/code-mode/code-mode.tool.ts +7 -1
  113. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +2 -1
  114. package/src/modules/workspace/__tests__/workspace.tools.test.ts +500 -2
  115. package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +1658 -0
  116. package/src/modules/workspace/file-readers/__tests__/email-extract.test.ts +485 -0
  117. package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +97 -0
  118. package/src/modules/workspace/file-readers/__tests__/image-read.test.ts +100 -0
  119. package/src/modules/workspace/file-readers/doc-extract.service.ts +104 -0
  120. package/src/modules/workspace/file-readers/doc-extract.types.ts +63 -0
  121. package/src/modules/workspace/file-readers/document-reader.ts +64 -0
  122. package/src/modules/workspace/file-readers/email-reader.ts +21 -0
  123. package/src/modules/workspace/file-readers/email-text.ts +193 -0
  124. package/src/modules/workspace/file-readers/extract-docx.ts +67 -0
  125. package/src/modules/workspace/file-readers/extract-eml.ts +92 -0
  126. package/src/modules/workspace/file-readers/extract-msg.ts +134 -0
  127. package/src/modules/workspace/file-readers/extract-odp.ts +63 -0
  128. package/src/modules/workspace/file-readers/extract-ods.ts +182 -0
  129. package/src/modules/workspace/file-readers/extract-odt.ts +48 -0
  130. package/src/modules/workspace/file-readers/extract-pdf.ts +178 -0
  131. package/src/modules/workspace/file-readers/extract-pptx.ts +302 -0
  132. package/src/modules/workspace/file-readers/extract-xlsx.ts +96 -0
  133. package/src/modules/workspace/file-readers/extraction-cache.ts +142 -0
  134. package/src/modules/workspace/file-readers/file-reader.registry.ts +45 -0
  135. package/src/modules/workspace/file-readers/file-reader.ts +104 -0
  136. package/src/modules/workspace/file-readers/image-read.ts +122 -0
  137. package/src/modules/workspace/file-readers/image-reader.ts +39 -0
  138. package/src/modules/workspace/file-readers/odf-text.ts +123 -0
  139. package/src/modules/workspace/file-readers/ooxml-text.ts +477 -0
  140. package/src/modules/workspace/file-readers/text-reader.ts +131 -0
  141. package/src/modules/workspace/workspace.tools.ts +174 -12
@@ -9,6 +9,9 @@ import { workspaceIdForBranch } from '../../shared/workspace-id.js';
9
9
  // relies on) — not a workflow service, so this stays inside the module boundary.
10
10
  import { assertValidBranchName } from '../kb-fs/branch-name.js';
11
11
  import { toKbRelative, resolveReadableMap } from '../access-model/kb-read-filter.js';
12
+ import { createFileReaderRegistry } from './file-readers/file-reader.registry.js';
13
+ import { DocumentReader } from './file-readers/document-reader.js';
14
+ import { mcpImageResult } from '@bevel-software/platform-mcp-core';
12
15
  /** Throw a 403 ToolError if the gate denies reading `wsPath` (a KB node). */
13
16
  async function assertCanRead(gate, wsPath) {
14
17
  const rel = toKbRelative(wsPath, gate.kbDirName);
@@ -62,8 +65,74 @@ const str = (description) => ({ type: 'string', description });
62
65
  function asText(content) {
63
66
  return typeof content === 'string' ? content : content.toString('utf8');
64
67
  }
68
+ function asBytes(content) {
69
+ return Buffer.isBuffer(content) ? content : Buffer.from(content, 'utf8');
70
+ }
71
+ /**
72
+ * How many NOT-yet-cached documents one `grep` call will extract. Extraction
73
+ * is the expensive step (unzip + parse; pdf.js for PDFs) and a cold grep over
74
+ * a document-heavy KB would otherwise extract the whole tree inside a single
75
+ * walk. Cached extractions are always searched (a cache hit costs one small
76
+ * JSON read); beyond the budget the walk skips the document and the result
77
+ * carries a note with the count, so the caller knows a re-run (or a
78
+ * `read_file`, which extracts unbudgeted) will cover the rest.
79
+ */
80
+ const UNCACHED_DOCS_PER_GREP = 20;
81
+ /**
82
+ * The write-refusal for office documents/PDFs on the agent TEXT-editing tools
83
+ * (write_file / write_files / edit_file). `read_file` returns an EXTRACTION
84
+ * for these types — their reader declares `textEditable: false` — so an agent
85
+ * that "read" one and writes text back would
86
+ * silently destroy the real document. Uploads and the plain HTTP write routes
87
+ * are untouched — humans replacing a document is exactly the right move — and
88
+ * `unzip` stays the raw-access escape hatch.
89
+ */
90
+ function assertNotDocumentEdit(readers, path) {
91
+ const reader = readers.readerFor(path);
92
+ if (reader.textEditable)
93
+ return;
94
+ throw new ToolError(reader.editRefusal?.(path) ??
95
+ `"${path}" is an office document/PDF. read_file returns EXTRACTED text for it — not the file's real ` +
96
+ 'content — so text written back cannot round-trip and would corrupt the document. To change it, ' +
97
+ 'replace the document by uploading a new version.', 400);
98
+ }
99
+ /**
100
+ * The write-refusal for what a path ALREADY holds, as opposed to what its
101
+ * extension means (see `assertNotDocumentEdit` for that half). Only the
102
+ * fallback reader answers here today: an extensionless file may hold anything,
103
+ * and `read_file` refuses binary content — so a write gate that never asked
104
+ * would let an agent overwrite bytes it was not allowed to read.
105
+ *
106
+ * Costs one read of the existing file, and only for readers that ask the
107
+ * question. A path with nothing at it is a CREATE: there is nothing to destroy.
108
+ * Returns the bytes it read (so a caller that needs the content next —
109
+ * `edit_file` — does not read the file a second time), or undefined when it
110
+ * had no reason to read or nothing existed.
111
+ */
112
+ async function assertNotBinaryOverwrite(readers, path, fs) {
113
+ const reader = readers.readerFor(path);
114
+ if (reader.editRefusalForExisting === undefined)
115
+ return undefined;
116
+ let existing;
117
+ try {
118
+ existing = asBytes(await fs.readFile(path));
119
+ }
120
+ catch (err) {
121
+ // Only a MISSING file is a create (both raw Node errors and Mastra's
122
+ // FileNotFoundError carry code 'ENOENT'). Any other failure — permissions,
123
+ // I/O — means the existing content could not be inspected: propagate it
124
+ // rather than let the write destroy bytes the gate never saw.
125
+ if (err?.code === 'ENOENT')
126
+ return undefined; // nothing there yet
127
+ throw err;
128
+ }
129
+ const refusal = reader.editRefusalForExisting(existing, path);
130
+ if (refusal !== null)
131
+ throw new ToolError(refusal, 400);
132
+ return existing;
133
+ }
65
134
  /** JS grep over the workspace tree (read methods only) — bounded by match + depth caps. */
66
- async function grepWalk(fs, dir, re, out, max, depth, gate, recordOntologyRead) {
135
+ async function grepWalk(fs, dir, re, out, max, depth, gate, recordOntologyRead, docs) {
67
136
  if (out.length >= max || depth > 12)
68
137
  return;
69
138
  let entries;
@@ -83,22 +152,42 @@ async function grepWalk(fs, dir, re, out, max, depth, gate, recordOntologyRead)
83
152
  continue;
84
153
  const p = dir ? `${dir}/${e.name}` : e.name;
85
154
  if (e.type === 'directory') {
86
- await grepWalk(fs, p, re, out, max, depth + 1, gate, recordOntologyRead);
155
+ await grepWalk(fs, p, re, out, max, depth + 1, gate, recordOntologyRead, docs);
87
156
  }
88
157
  else {
89
158
  // Opening a file under a named ontology is a read of that ontology — even
90
159
  // for a root-level grep that resolves to a neutral root. Record it so a
91
160
  // cross-ontology grep poisons later writes (closes the read-leak).
92
161
  await recordOntologyRead(p);
162
+ // What grep searches is the file's reader's business: text content for
163
+ // the text reader (null on NUL bytes — binary is not searchable), the
164
+ // EXTRACTION for a document reader (marker line included, so the
165
+ // [slide N]/[sheet: …]/[page N] lines are themselves searchable and
166
+ // line numbers match what read_file returns), nothing for images.
167
+ const reader = docs.readers.readerFor(p);
93
168
  let content;
94
169
  try {
95
- content = asText(await fs.readFile(p));
170
+ const bytes = asBytes(await fs.readFile(p));
171
+ content = reader.greppableText ? await reader.greppableText(bytes, p) : null;
172
+ if (content === null && reader instanceof DocumentReader) {
173
+ // Cold document (extraction not yet cached): cached ones above are
174
+ // free, extracting draws on the per-walk budget (see
175
+ // UNCACHED_DOCS_PER_GREP) — beyond it the walk skips and counts.
176
+ if (docs.uncachedBudget <= 0) {
177
+ docs.skippedUncached++;
178
+ continue;
179
+ }
180
+ docs.uncachedBudget--;
181
+ const res = await reader.read(bytes, p);
182
+ // A non-text outcome is a corrupt document — nothing searchable.
183
+ content = res.kind === 'text' ? res.text : null;
184
+ }
96
185
  }
97
186
  catch {
98
187
  continue;
99
188
  }
100
- if (content.includes(String.fromCharCode(0)))
101
- continue; // skip binary (NUL)
189
+ if (content === null)
190
+ continue;
102
191
  const lines = content.split('\n');
103
192
  for (let i = 0; i < lines.length && out.length < max; i++) {
104
193
  re.lastIndex = 0;
@@ -117,7 +206,14 @@ async function grepWalk(fs, dir, re, out, max, depth, gate, recordOntologyRead)
117
206
  * method), so they're implemented here. File ops are `both`; `execute_command`
118
207
  * is INTERNAL-only (arbitrary shell as the caller is too dangerous to expose).
119
208
  */
120
- export function registerWorkspaceTools(registry, router, toolAuth, toolHandler, spillStore, accessControl, kbDirName, sessionOntologyGate, writePolicy, sessionSink) {
209
+ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler, spillStore, docExtract, accessControl, kbDirName, sessionOntologyGate, writePolicy, sessionSink) {
210
+ /**
211
+ * The one extension→reader registry every read-shaped decision routes
212
+ * through: read_file dispatches on it, grep asks it for searchable text,
213
+ * and the write-refusal consults its `textEditable`. Built once per mount
214
+ * around the shared extraction cache.
215
+ */
216
+ const readers = createFileReaderRegistry(docExtract);
121
217
  /** Build the per-call read gate from the tool's branch input + caller identity. */
122
218
  const readGateFor = (branch, ctx) => ({
123
219
  accessControl,
@@ -192,7 +288,7 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
192
288
  // ── reads ──────────────────────────────────────────────────────────────
193
289
  mount({
194
290
  name: 'read_file',
195
- description: 'Read a workspace file as text. Returns `{ path, content }`. Optional `offset`/`limit` slice the content (characters for a file, bytes for a `__tool_chain_spill__/…` ref) — use them to page through large files or a `call_tool_chain` spill rather than reading multi-MB in full. A spill ref is workspace-independent: `branch` is ignored for it.' +
291
+ description: 'Read a workspace file as text. Returns `{ path, content }`. Images (.png/.jpg/.jpeg/.gif/.webp) return the IMAGE ITSELF as native MCP image content (plus a one-line text note naming the file), so you can look at the picture — up to 3.5 MB of raw image data; a larger image gets an honest refusal asking for a locally downscaled copy or a smaller export (`.svg` is text and reads as text). Images come back only on a DIRECT call: inside `call_tool_chain` an image read yields an `{ image_omitted, note }` stub instead. Office and OpenDocument files (.docx/.pptx/.xlsx, .odt/.odp/.ods) and PDFs return their EXTRACTED text under an honest `[extracted text of …]` header, with `[slide N]`/`[sheet: Name]`/`[page N]` markers — the extraction is READ-ONLY (layout/images omitted; such files cannot be edited as text, only replaced by uploading a new version). Email files (.eml/.msg) return their EXTRACTED text the same way: a `[from]`/`[to]`/`[subject]`/`[date]` header block, the body (plain-text part preferred; an HTML-only body is stripped to text), and an `[attachments]` name list — attachments are listed, never extracted. Other binary files return a one-line description instead of raw bytes. Optional `offset`/`limit` slice the content (characters for a file, bytes for a `__tool_chain_spill__/…` ref; ignored for an image) — use them to page through large files or a `call_tool_chain` spill rather than reading multi-MB in full. A spill ref is workspace-independent: `branch` is ignored for it.' +
196
292
  ONTOLOGY_BOUNDARY_NOTE,
197
293
  inputs: {
198
294
  type: 'object',
@@ -222,7 +318,30 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
222
318
  await recordOntologyRead(sessionOntologyGate, ctx, p);
223
319
  await assertCanRead(readGateFor(a.branch, ctx), p);
224
320
  const fs = await ctx.getFilesystem(a.branch);
225
- const content = asText(await fs.readFile(p));
321
+ // Reading (extraction, image and binary handling included) happens AFTER
322
+ // the access gate and the ontology-read recording above — a document
323
+ // read is still a KB read. ONE registry dispatch picks the reader by
324
+ // extension; everything below just maps its ReadResult onto the tool's
325
+ // result shape.
326
+ const result = await readers.readerFor(p).read(asBytes(await fs.readFile(p)), p);
327
+ // Images return the picture itself as an MCP image content block, so a
328
+ // multimodal model SEES it. The handler returns the `McpImageResult`
329
+ // sentinel; the MCP result shaping (`toCallToolResult` in
330
+ // platform-mcp-core) turns it into `content: [image, text-note]`. The
331
+ // declared `outputs` schema (`{ path, content }`) intentionally does NOT
332
+ // cover this shape: `outputs` is advisory documentation — never enforced
333
+ // at the route, and not advertised over MCP (`toListedTool` exposes
334
+ // `inputSchema` only) — and the image result is replaced wholesale by
335
+ // content blocks before any client could try to validate it, so the
336
+ // schema keeps describing the text path it has always described.
337
+ // `offset`/`limit` are meaningless on a picture and are ignored.
338
+ if (result.kind === 'image') {
339
+ return mcpImageResult(result.data, result.mimeType, result.note);
340
+ }
341
+ // Text and refusals alike land in `content` — a refusal (corrupt
342
+ // document, unreadable binary, oversized image) IS the file's honest
343
+ // textual answer, sliced like any other content.
344
+ const content = result.kind === 'text' ? result.text : result.message;
226
345
  const start = offset && offset > 0 ? offset : 0;
227
346
  const sliced = offset !== undefined || limit !== undefined
228
347
  ? content.slice(start, limit !== undefined ? start + limit : undefined)
@@ -300,7 +419,7 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
300
419
  });
301
420
  mount({
302
421
  name: 'grep',
303
- description: 'Regex content search across the workspace. Returns `{ matches: [{ path, line, text }] }` (capped). Use to find where something is defined/referenced.' +
422
+ description: 'Regex content search across the workspace. Returns `{ matches: [{ path, line, text }] }` (capped). Use to find where something is defined/referenced. Searches INSIDE Office and OpenDocument files (.docx/.pptx/.xlsx, .odt/.odp/.ods), PDFs and email files (.eml/.msg) via their extracted text — matches there carry the extraction\'s line numbers, and the `[slide N]`/`[sheet: Name]`/`[page N]`/`[from]`/`[subject]` marker lines locate them; a bounded number of not-yet-extracted documents is extracted per call, and the result notes how many were skipped (re-run to cover them).' +
304
423
  ONTOLOGY_BOUNDARY_NOTE,
305
424
  inputs: {
306
425
  type: 'object',
@@ -328,6 +447,7 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
328
447
  },
329
448
  },
330
449
  truncated: { type: 'boolean', description: 'True if the match cap was hit and results may be incomplete.' },
450
+ note: str('Present when some documents (office/PDF/email files) were not searched because their text was not yet extracted and the per-call extraction budget ran out — re-run grep to cover them.'),
331
451
  },
332
452
  required: ['matches', 'truncated'],
333
453
  },
@@ -348,14 +468,25 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
348
468
  await recordOntologyRead(sessionOntologyGate, ctx, searchRoot);
349
469
  const out = [];
350
470
  const max = typeof a.max_results === 'number' ? Math.min(a.max_results, 1000) : 200;
351
- await grepWalk(await ctx.getFilesystem(a.branch), searchRoot, re, out, max, 0, readGateFor(a.branch, ctx), (p) => recordOntologyRead(sessionOntologyGate, ctx, p));
352
- return { matches: out, truncated: out.length >= max };
471
+ const docs = { readers, uncachedBudget: UNCACHED_DOCS_PER_GREP, skippedUncached: 0 };
472
+ await grepWalk(await ctx.getFilesystem(a.branch), searchRoot, re, out, max, 0, readGateFor(a.branch, ctx), (p) => recordOntologyRead(sessionOntologyGate, ctx, p), docs);
473
+ return {
474
+ matches: out,
475
+ truncated: out.length >= max,
476
+ ...(docs.skippedUncached > 0
477
+ ? {
478
+ note: `${docs.skippedUncached} document(s) (office/PDF/email files) were not searched: their text was not yet ` +
479
+ `extracted and this call's extraction budget (${UNCACHED_DOCS_PER_GREP}) ran out. Re-run the ` +
480
+ 'same grep to extract and search the next batch.',
481
+ }
482
+ : {}),
483
+ };
353
484
  },
354
485
  });
355
486
  // ── writes (through the lock/commit pipeline) ───────────────────────────
356
487
  mount({
357
488
  name: 'write_file',
358
- description: 'Write (create or overwrite) a workspace file. The change is committed + pushed as you. Returns `{ path, bytes }`.' +
489
+ description: 'Write (create or overwrite) a workspace file. The change is committed + pushed as you. Returns `{ path, bytes }`. Refuses document formats: Office/OpenDocument files and PDFs (.docx/.pptx/.xlsx/.odt/.odp/.ods/.pdf) and email files (.eml/.msg), whose reads are text EXTRACTIONS that cannot round-trip, and legacy binary Office files (.doc/.ppt/.xls), which cannot be extracted at all; replace such a file by uploading a new version instead.' +
359
490
  ONTOLOGY_BOUNDARY_NOTE,
360
491
  inputs: {
361
492
  type: 'object',
@@ -375,6 +506,7 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
375
506
  },
376
507
  write: true,
377
508
  handler: async (a, ctx) => {
509
+ assertNotDocumentEdit(readers, a.path);
378
510
  // NB: this is a no-op for chat + `ontology_ingest` — it only bites when a
379
511
  // routine executor has explicitly restricted THIS session's `ctx.sessionId`
380
512
  // (today only `watchlist_check`, to `.html`). Unrestricted sessions pass straight
@@ -382,6 +514,7 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
382
514
  writePolicy.assertPathWritable(ctx.sessionId, a.path);
383
515
  await assertOntologyWriteAllowed(sessionOntologyGate, ctx, a.path);
384
516
  const fs = await ctx.getFilesystem(a.branch);
517
+ await assertNotBinaryOverwrite(readers, a.path, fs);
385
518
  await fs.writeFile(a.path, a.content);
386
519
  return { path: a.path, bytes: Buffer.byteLength(a.content, 'utf8') };
387
520
  },
@@ -391,7 +524,9 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
391
524
  description: 'Batch-write many files in ONE commit — far faster than calling write_file once per file when ' +
392
525
  'creating many files at once (e.g. seeding a knowledge base). Each entry is `{ path, content }`; all ' +
393
526
  'are created/overwritten and committed + pushed together as you. Prefer this over many write_file ' +
394
- 'calls. All files must be in the SAME ontology (the boundary below applies to the batch). Returns `{ count }`.' +
527
+ 'calls. All files must be in the SAME ontology (the boundary below applies to the batch). Refuses document formats: ' +
528
+ 'Office/OpenDocument files and PDFs (.docx/.pptx/.xlsx/.odt/.odp/.ods/.pdf) and email files (.eml/.msg), whose reads are text EXTRACTIONS that cannot ' +
529
+ 'round-trip, and legacy binary Office files (.doc/.ppt/.xls); replace such a file by uploading a new version instead. Returns `{ count }`.' +
395
530
  ONTOLOGY_BOUNDARY_NOTE,
396
531
  inputs: {
397
532
  type: 'object',
@@ -424,6 +559,8 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
424
559
  return { count: 0 };
425
560
  // Gate every path first (records ontology touches; a cross-ontology batch
426
561
  // is blocked exactly like the per-file write tools).
562
+ for (const f of files)
563
+ assertNotDocumentEdit(readers, f.path);
427
564
  for (const f of files)
428
565
  writePolicy.assertPathWritable(ctx.sessionId, f.path);
429
566
  for (const f of files)
@@ -431,13 +568,15 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
431
568
  // `write: true` guarantees a LockingFilesystem here; `writeFiles` lands the
432
569
  // whole batch as one commit. Structural cast avoids a workflow-internal import.
433
570
  const fs = (await ctx.getFilesystem(a.branch));
571
+ for (const f of files)
572
+ await assertNotBinaryOverwrite(readers, f.path, fs);
434
573
  await fs.writeFiles(files.map((f) => ({ path: f.path, content: f.content })), `Write ${files.length} file(s)`);
435
574
  return { count: files.length };
436
575
  },
437
576
  });
438
577
  mount({
439
578
  name: 'edit_file',
440
- description: 'Replace an exact string in a workspace file. `old_string` must appear exactly once unless `replace_all`. Committed + pushed as you.' +
579
+ description: 'Replace an exact string in a workspace file. `old_string` must appear exactly once unless `replace_all`. Committed + pushed as you. Refuses document formats: Office/OpenDocument files and PDFs (.docx/.pptx/.xlsx/.odt/.odp/.ods/.pdf) and email files (.eml/.msg), whose reads are text EXTRACTIONS that cannot round-trip, and legacy binary Office files (.doc/.ppt/.xls), which cannot be extracted at all; replace such a file by uploading a new version instead.' +
441
580
  ONTOLOGY_BOUNDARY_NOTE,
442
581
  inputs: {
443
582
  type: 'object',
@@ -459,13 +598,17 @@ export function registerWorkspaceTools(registry, router, toolAuth, toolHandler,
459
598
  },
460
599
  write: true,
461
600
  handler: async (a, ctx) => {
601
+ assertNotDocumentEdit(readers, a.path);
462
602
  writePolicy.assertPathWritable(ctx.sessionId, a.path);
463
603
  await assertOntologyWriteAllowed(sessionOntologyGate, ctx, a.path);
464
604
  const fs = await ctx.getFilesystem(a.branch);
465
605
  const path = a.path;
466
606
  const oldStr = a.old_string;
467
607
  const newStr = a.new_string;
468
- const content = asText(await fs.readFile(path));
608
+ // The overwrite gate already read the file when its reader asked the
609
+ // binary question — reuse those bytes instead of reading twice.
610
+ const existing = await assertNotBinaryOverwrite(readers, path, fs);
611
+ const content = asText(existing ?? (await fs.readFile(path)));
469
612
  const count = oldStr ? content.split(oldStr).length - 1 : 0;
470
613
  if (count === 0)
471
614
  throw new ToolError('old_string not found in the file.', 400);
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.tools.js","sourceRoot":"","sources":["../../../src/modules/workspace/workspace.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.tools.js","sourceRoot":"","sources":["../../../src/modules/workspace/workspace.tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bevel-software/platform-core-backend",
3
- "version": "0.11.2",
3
+ "version": "0.12.0",
4
4
  "description": "Open-source core backend of the Bevel platform: git-backed knowledge workspace, workflow (branches/change requests/locks/SSE), skills, tools, secrets vault, access control and the remote MCP surface.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -26,9 +26,10 @@
26
26
  "THIRD-PARTY-NOTICES.md"
27
27
  ],
28
28
  "engines": {
29
- "node": ">=22 <23"
29
+ "node": ">=22.13 <23"
30
30
  },
31
31
  "dependencies": {
32
+ "@kenjiuno/msgreader": "^1.28.0",
32
33
  "@mastra/core": "1.35.0",
33
34
  "@modelcontextprotocol/sdk": "^1.29.0",
34
35
  "@utcp/code-mode": "^1.2.12",
@@ -41,13 +42,17 @@
41
42
  "dotenv": "^16.4.0",
42
43
  "drizzle-orm": "^0.45.2",
43
44
  "express": "^5.1.0",
45
+ "htmlparser2": "^12.0.0",
44
46
  "ignore": "^7.0.5",
45
47
  "jsonwebtoken": "^9.0.3",
48
+ "pdfjs-dist": "^5.4.624",
46
49
  "pg": "^8.20.0",
50
+ "postal-mime": "^3.0.0",
51
+ "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
47
52
  "yaml": "^2.9.0",
48
53
  "zod": "^3.24.0",
49
- "@bevel-software/platform-mcp-core": "0.11.2",
50
- "@bevel-software/platform-shared": "0.11.2"
54
+ "@bevel-software/platform-mcp-core": "0.12.0",
55
+ "@bevel-software/platform-shared": "0.12.0"
51
56
  },
52
57
  "devDependencies": {
53
58
  "@types/adm-zip": "^0.5.8",
@@ -330,7 +330,7 @@ export async function createCoreServer(
330
330
  hooks: core.workflowService.hooks,
331
331
  };
332
332
  registerWorkflowTools(core.toolRegistry, toolsRouter, ta, th);
333
- registerWorkspaceTools(core.toolRegistry, toolsRouter, ta, th, core.spillStore, core.accessControl, core.kbDirName, sessionOntologyGate, core.routineWritePolicy, core.sessionSink);
333
+ registerWorkspaceTools(core.toolRegistry, toolsRouter, ta, th, core.spillStore, core.docExtractService, core.accessControl, core.kbDirName, sessionOntologyGate, core.routineWritePolicy, core.sessionSink);
334
334
  registerSkillsTools(core.toolRegistry, toolsRouter, ta, th, core.skillService);
335
335
  registerToolManualsTools(core.toolRegistry, toolsRouter, ta, th, core.toolManualService, {
336
336
  accessControl: core.accessControl,
@@ -28,6 +28,7 @@ function parseDomainList(raw: string): string[] {
28
28
  .filter((d) => d.length > 0);
29
29
  }
30
30
  import { SpillStore } from '../modules/workspace/spill-store.js';
31
+ import { DocExtractService } from '../modules/workspace/file-readers/doc-extract.service.js';
31
32
  import { UuidSessionSink, type ISessionSink } from '../modules/workspace/session-sink.js';
32
33
  import { AuthService } from '../modules/auth/auth.service.js';
33
34
  import { AccountErasureService } from '../modules/auth/account-erasure.service.js';
@@ -114,6 +115,7 @@ export interface CoreServices {
114
115
  */
115
116
  kbStartupRunner: KbStartupRunner;
116
117
  spillStore: SpillStore;
118
+ docExtractService: DocExtractService;
117
119
  accessControl: AccessControlService;
118
120
  creatorAccess: CreatorAccessService;
119
121
  sessionOntologyService: SessionOntologyService;
@@ -289,6 +291,9 @@ export async function createCoreServices(
289
291
  // Shared, workspace-independent store for oversized `call_tool_chain` results,
290
292
  // read back via `read_file`. Sibling of `workspacesRoot`, never committed.
291
293
  const spillStore = new SpillStore(config.spillRoot);
294
+ // Office-document/PDF text extraction for `read_file`/`grep`, cached by
295
+ // content hash beside the workspaces root (see `DocExtractionCache`).
296
+ const docExtractService = new DocExtractService(config.docExtractCacheRoot);
292
297
  // The deployment owner counts as Admin for the two hardcoded `write`
293
298
  // rescues (`roles.yaml` and any `access.md`) — the SAME list
294
299
  // `AdminAccessService` below is given, so the admin surfaces and the write
@@ -799,6 +804,7 @@ export async function createCoreServices(
799
804
  settings,
800
805
  kbDirName,
801
806
  spillStore,
807
+ docExtractService,
802
808
  accessControl,
803
809
  creatorAccess,
804
810
  sessionOntologyService,
@@ -71,6 +71,13 @@ export class CoreConfig {
71
71
  * never committed, best-effort GC'd on write.
72
72
  */
73
73
  readonly spillRoot: string;
74
+ /**
75
+ * Sibling-to-`workspacesRoot` location for the document-extraction cache —
76
+ * text extracted from office documents/PDFs (`read_file`/`grep`), keyed by
77
+ * git blob sha. Derived data only: safe to delete at any time, never
78
+ * committed, size-bounded by the cache itself.
79
+ */
80
+ readonly docExtractCacheRoot: string;
74
81
  readonly jwtSecret: string;
75
82
  /**
76
83
  * The deployment's owner. REQUIRED — three separate jobs rest on it, and a
@@ -244,6 +251,8 @@ export class CoreConfig {
244
251
  this.workspacesRoot = process.env.WORKSPACES_ROOT || path.resolve(process.cwd(), 'workspaces');
245
252
  this.backupsRoot = process.env.BACKUPS_ROOT || path.resolve(this.workspacesRoot, '..', 'backups');
246
253
  this.spillRoot = process.env.SPILL_ROOT || path.resolve(this.workspacesRoot, '..', 'tool-chain-spills');
254
+ this.docExtractCacheRoot =
255
+ process.env.DOC_EXTRACT_CACHE_ROOT || path.resolve(this.workspacesRoot, '..', 'doc-extract-cache');
247
256
  // Required, and checked BEFORE the auth routes it signs for are ever
248
257
  // mounted. Empty, the first login attempt fails deep inside the JWT library
249
258
  // with a message about a missing key — a boot error naming the variable is
@@ -65,3 +65,33 @@ describe('tools_info', () => {
65
65
  await expect(run(['solo.run', 'down.run'])).rejects.toThrow(/repository unavailable/);
66
66
  });
67
67
  });
68
+
69
+ /**
70
+ * The in-process agent's `call_tool_chain` shares the MCP surfaces' image
71
+ * policy: a chain result is stringified into the transcript, so an image read
72
+ * inside it must come back as an omitted-image note — never inline base64.
73
+ */
74
+ describe('call_tool_chain image scrub', () => {
75
+ it('replaces a chained image sentinel with a note before serialization', async () => {
76
+ const { createCallToolChainTool } = await import('../code-mode.tool.js');
77
+ const sentinel = {
78
+ kind: 'bevel/mcp-image@v1',
79
+ data: 'QUJDREVG',
80
+ mimeType: 'image/png',
81
+ note: '[image: Files/logo.png — image/png, 6 bytes]',
82
+ };
83
+ const chainClient = {
84
+ callToolChain: vi.fn(async () => ({ result: { pic: sentinel, ok: true }, logs: [] as string[] })),
85
+ } as unknown as CodeModeUtcpClient;
86
+ const spill = { write: vi.fn(async () => ({ ref: '__tool_chain_spill__/x.json', bytes: 1 })) };
87
+ const tool = createCallToolChainTool(chainClient, spill as never) as unknown as {
88
+ execute: (input: { code: string }) => Promise<unknown>;
89
+ };
90
+ const out = JSON.stringify(await tool.execute({ code: 'return 1' }));
91
+ expect(out).not.toContain('QUJDREVG');
92
+ expect(out).toContain('image_omitted');
93
+ expect(out).toContain('Files/logo.png');
94
+ expect(out).toContain('"ok":true');
95
+ expect(spill.write).not.toHaveBeenCalled();
96
+ });
97
+ });
@@ -2,6 +2,7 @@ import '@utcp/direct-call';
2
2
  import { createTool } from '@mastra/core/tools';
3
3
  import { z } from 'zod';
4
4
  import { CodeModeUtcpClient } from '@utcp/code-mode';
5
+ import { omitImagePayloads } from '@bevel-software/platform-mcp-core';
5
6
  import type { SpillStore } from '../workspace/spill-store.js';
6
7
  import { utcpNameToTsInterfaceName, findToolByName, AmbiguousToolNameError } from './code-mode-names.js';
7
8
 
@@ -43,7 +44,12 @@ export function createCallToolChainTool(
43
44
  const timeout = input.timeout ?? 30_000;
44
45
  const maxOutputSize = input.max_output_size ?? 200_000;
45
46
  try {
46
- const { result, logs } = await client.callToolChain(input.code, timeout);
47
+ const { result: rawResult, logs } = await client.callToolChain(input.code, timeout);
48
+ // Same policy as the MCP surfaces' `call_tool_chain` (see
49
+ // `omitImagePayloads`): a chain result is stringified JSON, so an image
50
+ // read inside it comes back as an omitted-image note instead of a
51
+ // base64 flood — images are only delivered on a direct `read_file`.
52
+ const result = omitImagePayloads(rawResult, 'result');
47
53
  const json = JSON.stringify({ success: true, result, logs });
48
54
  if (json.length <= maxOutputSize) {
49
55
  return { success: true, result, logs };
@@ -11,6 +11,7 @@ import { registerWorkspaceTools } from '../../workspace/workspace.tools.js';
11
11
  import { RoutineWritePolicyService } from '../../workspace/routine-write-policy.js';
12
12
  import { WorkflowHooks } from '../../workflow/workflow-hooks.js';
13
13
  import { SpillStore } from '../../workspace/spill-store.js';
14
+ import { DocExtractService } from '../../workspace/file-readers/doc-extract.service.js';
14
15
 
15
16
  const WS = 'target-company-state';
16
17
  let recorded: unknown[][] = [];
@@ -48,7 +49,7 @@ async function start(): Promise<string> {
48
49
  // kb (citation) tools alongside the workspace tools. Those registrations —
49
50
  // and their web_search / submit_feedback / cite_kb_node cases — moved to
50
51
  // the enterprise repo with their modules; core registers only core tools.
51
- registerWorkspaceTools(registry, router, toolAuth, th, new SpillStore('/tmp/bevel-test-spills'), accessControl, 'knowledge-base', {
52
+ registerWorkspaceTools(registry, router, toolAuth, th, new SpillStore('/tmp/bevel-test-spills'), new DocExtractService('/tmp/bevel-test-doc-extract'), accessControl, 'knowledge-base', {
52
53
  service: {} as never,
53
54
  enabled: false, // ontology boundary not under test here
54
55
  kbDirName: 'knowledge-base',