@usejunior/docx-mcp 0.15.0 → 0.16.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 (50) hide show
  1. package/README.md +1 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/commands/compare.js +1 -1
  4. package/dist/cli/commands/compare.js.map +1 -1
  5. package/dist/server.d.ts +6 -70
  6. package/dist/server.d.ts.map +1 -1
  7. package/dist/server.js +9 -0
  8. package/dist/server.js.map +1 -1
  9. package/dist/session/manager.d.ts +37 -7
  10. package/dist/session/manager.d.ts.map +1 -1
  11. package/dist/session/manager.js +10 -0
  12. package/dist/session/manager.js.map +1 -1
  13. package/dist/tool_catalog.d.ts +125 -85
  14. package/dist/tool_catalog.d.ts.map +1 -1
  15. package/dist/tool_catalog.js +125 -13
  16. package/dist/tool_catalog.js.map +1 -1
  17. package/dist/tools/accept_ai_edits.d.ts +13 -0
  18. package/dist/tools/accept_ai_edits.d.ts.map +1 -0
  19. package/dist/tools/accept_ai_edits.js +41 -0
  20. package/dist/tools/accept_ai_edits.js.map +1 -0
  21. package/dist/tools/add_comment.d.ts.map +1 -1
  22. package/dist/tools/add_comment.js +40 -0
  23. package/dist/tools/add_comment.js.map +1 -1
  24. package/dist/tools/add_footnote.d.ts.map +1 -1
  25. package/dist/tools/add_footnote.js +21 -0
  26. package/dist/tools/add_footnote.js.map +1 -1
  27. package/dist/tools/compare_documents.js +1 -1
  28. package/dist/tools/compare_documents.js.map +1 -1
  29. package/dist/tools/comparison_defaults.d.ts +1 -1
  30. package/dist/tools/comparison_defaults.d.ts.map +1 -1
  31. package/dist/tools/delete_comment.d.ts.map +1 -1
  32. package/dist/tools/delete_comment.js +34 -0
  33. package/dist/tools/delete_comment.js.map +1 -1
  34. package/dist/tools/get_document_outline.d.ts +29 -0
  35. package/dist/tools/get_document_outline.d.ts.map +1 -0
  36. package/dist/tools/get_document_outline.js +67 -0
  37. package/dist/tools/get_document_outline.js.map +1 -0
  38. package/dist/tools/read_file.d.ts +1 -0
  39. package/dist/tools/read_file.d.ts.map +1 -1
  40. package/dist/tools/read_file.js +46 -2
  41. package/dist/tools/read_file.js.map +1 -1
  42. package/dist/tools/reject_ai_edits.d.ts +14 -0
  43. package/dist/tools/reject_ai_edits.d.ts.map +1 -0
  44. package/dist/tools/reject_ai_edits.js +42 -0
  45. package/dist/tools/reject_ai_edits.js.map +1 -0
  46. package/dist/tools/save.d.ts +1 -21
  47. package/dist/tools/save.d.ts.map +1 -1
  48. package/dist/tools/save.js +84 -129
  49. package/dist/tools/save.js.map +1 -1
  50. package/package.json +10 -9
@@ -2,11 +2,10 @@ import path from 'node:path';
2
2
  import { errorCode, errorMessage } from "../error_utils.js";
3
3
  import fs from 'node:fs/promises';
4
4
  import { err, ok } from './types.js';
5
- import { DocxZip, TRACKED_CHANGE_ELEMENT_NAME_SET, compareDocuments, parseXml, restoreUntouchedBlocks, serializeXml, } from '@usejunior/docx-core';
5
+ import { DocxZip, TRACKED_CHANGE_ELEMENT_NAME_SET, parseXml, } from '@usejunior/docx-core';
6
6
  import { mergeSessionResolutionMetadata, resolveSessionForTool } from './session_resolution.js';
7
7
  import { getAiRevisionBaseline, splitIntroducedDiagnostics } from './ai_revision_guard.js';
8
8
  import { enforceWritePathPolicy, resolvesToSamePath } from './path_policy.js';
9
- import { DEFAULT_RECONSTRUCTION_MODE } from './comparison_defaults.js';
10
9
  const WORDPROCESSING_ML_NS = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';
11
10
  function expandPath(inputPath) {
12
11
  return inputPath.startsWith('~') ? path.join(process.env.HOME || '', inputPath.slice(1)) : inputPath;
@@ -29,18 +28,6 @@ function defaultTrackedPath(cleanPath, timestamp) {
29
28
  const ext = parsed.ext || '.docx';
30
29
  return path.join(parsed.dir, `${parsed.name}.redline.${timestamp}${ext}`);
31
30
  }
32
- async function runWithoutConsoleLog(fn) {
33
- if (process.env.SAFE_DOCX_ALLOW_COMPARISON_STDOUT === '1')
34
- return fn();
35
- const originalLog = console.log;
36
- console.log = () => { };
37
- try {
38
- return await fn();
39
- }
40
- finally {
41
- console.log = originalLog;
42
- }
43
- }
44
31
  function getWordAttr(element, localName) {
45
32
  return (element.getAttributeNS(WORDPROCESSING_ML_NS, localName)
46
33
  ?? element.getAttribute(`w:${localName}`)
@@ -84,40 +71,35 @@ async function collectAiRevisionSummary(buffer, author) {
84
71
  };
85
72
  }
86
73
  /**
87
- * Restoration is best-effort: on any failure the tracked artifact degrades to
88
- * the unrestored comparison output (the pre-restore behavior), which is valid
89
- * — just fully re-serialized. The error is returned rather than thrown so the
90
- * save still succeeds, but callers must surface it: a swallowed error is
91
- * indistinguishable from "document fully edited, nothing to restore"
92
- * (`blocksRestored: 0` reads as benign), so a restore-path regression would
93
- * otherwise go dark.
94
- *
95
- * Exported for direct testing of the failure path; production callers go
96
- * through `save`.
97
- *
98
- * @see https://github.com/UseJunior/safe-docx/issues/436
74
+ * Count tracked-change stats directly from the write-time markup carried by the
75
+ * session document (#126) — no comparison. Insertions/deletions are w:ins/w:del;
76
+ * modifications are the property-change records (w:rPrChange/pPrChange/…).
99
77
  */
100
- export async function restoreTrackedUntouchedBlocks(trackedBuffer, originalBuffer) {
101
- try {
102
- const [trackedZip, originalZip] = await Promise.all([
103
- DocxZip.load(trackedBuffer),
104
- DocxZip.load(originalBuffer),
105
- ]);
106
- const [trackedXml, originalXml] = await Promise.all([
107
- trackedZip.readText('word/document.xml'),
108
- originalZip.readText('word/document.xml'),
109
- ]);
110
- const trackedDoc = parseXml(trackedXml);
111
- const blocksRestored = restoreUntouchedBlocks(trackedDoc, originalXml);
112
- if (blocksRestored === 0) {
113
- return { buffer: trackedBuffer, blocksRestored };
78
+ async function collectTrackedStats(buffer, author) {
79
+ const zip = await DocxZip.load(buffer);
80
+ const stats = { insertions: 0, deletions: 0, modifications: 0 };
81
+ for (const fileName of zip.listFiles()) {
82
+ if (!fileName.startsWith('word/') || !fileName.endsWith('.xml'))
83
+ continue;
84
+ const xml = await zip.readTextOrNull(fileName);
85
+ if (!xml)
86
+ continue;
87
+ const doc = parseXml(xml);
88
+ for (const node of Array.from(doc.getElementsByTagName('*'))) {
89
+ if (node.namespaceURI !== WORDPROCESSING_ML_NS || !TRACKED_CHANGE_ELEMENT_NAME_SET.has(node.localName))
90
+ continue;
91
+ // When an author is set, count only that actor's write-time revisions.
92
+ if (author && getWordAttr(node, 'author') !== author)
93
+ continue;
94
+ if (node.localName === 'ins')
95
+ stats.insertions += 1;
96
+ else if (node.localName === 'del')
97
+ stats.deletions += 1;
98
+ else if (node.localName.endsWith('Change'))
99
+ stats.modifications += 1;
114
100
  }
115
- trackedZip.writeText('word/document.xml', serializeXml(trackedDoc));
116
- return { buffer: await trackedZip.toBuffer(), blocksRestored };
117
- }
118
- catch (e) {
119
- return { buffer: trackedBuffer, blocksRestored: 0, restoreError: errorMessage(e) };
120
101
  }
102
+ return stats;
121
103
  }
122
104
  export async function save(manager, params) {
123
105
  try {
@@ -158,22 +140,16 @@ export async function save(manager, params) {
158
140
  return err('INVALID_SAVE_FORMAT', `Invalid save_format: ${String(formatRaw)}`, "Use one of: 'clean', 'tracked', or 'both'.");
159
141
  }
160
142
  const format = formatRaw;
161
- const engine = params.tracked_changes_engine ?? 'atomizer';
162
- if (engine !== 'auto' && engine !== 'atomizer' && engine !== 'wmlcomparer') {
163
- return err('INVALID_TRACKED_ENGINE', `Invalid tracked_changes_engine: ${String(engine)}`, "Use one of: 'auto' or 'atomizer'.");
164
- }
165
- if (engine === 'wmlcomparer') {
166
- return err('INVALID_TRACKED_ENGINE', "tracked_changes_engine 'wmlcomparer' is not supported here", "Use 'auto' or 'atomizer'.");
167
- }
168
- const trackedEngine = engine;
169
143
  const clean = params.clean_bookmarks ?? true;
170
- const author = params.tracked_changes_author ?? params.author ?? 'SafeDocX';
144
+ // Display author for the tracked-changes report. The actual markup author is
145
+ // whatever the write-time emitter recorded on session.doc (#120/#126); no
146
+ // comparison re-authoring happens here.
147
+ const author = params.tracked_changes_author ?? params.author ?? session.aiAuthor ?? 'SafeDocX';
171
148
  const allowOverwrite = params.allow_overwrite ?? false;
172
149
  const cacheKey = JSON.stringify({
173
150
  revision: session.editRevision,
174
151
  format,
175
152
  clean_bookmarks: clean,
176
- tracked_engine: trackedEngine,
177
153
  tracked_author: author,
178
154
  });
179
155
  const cached = manager.getSaveCache(session, cacheKey);
@@ -181,13 +157,8 @@ export async function save(manager, params) {
181
157
  let revisedBuffer;
182
158
  let trackedBuffer;
183
159
  let trackedStats;
184
- let trackedReconstructionMode;
185
- let trackedFallbackReason;
186
- let trackedFallbackDiagnostics;
187
160
  let bookmarksRemoved;
188
161
  let blocksRestored;
189
- let trackedBlocksRestored;
190
- let trackedRestoreError;
191
162
  let exportTimestamp;
192
163
  // Run implicit validation before producing save artifacts.
193
164
  const validation = session.doc.validate();
@@ -227,77 +198,58 @@ export async function save(manager, params) {
227
198
  revisedBuffer = cached.revisedBuffer;
228
199
  trackedBuffer = cached.trackedBuffer;
229
200
  trackedStats = cached.trackedStats;
230
- trackedReconstructionMode = cached.trackedReconstructionMode;
231
- trackedFallbackReason = cached.trackedFallbackReason;
232
- trackedFallbackDiagnostics = cached.trackedFallbackDiagnostics;
233
201
  bookmarksRemoved = cached.bookmarksRemoved;
234
202
  blocksRestored = cached.blocksRestored;
235
- trackedBlocksRestored = cached.trackedBlocksRestored;
236
- trackedRestoreError = cached.trackedRestoreError;
237
203
  exportTimestamp = cached.exportedAtUtc;
238
204
  }
239
205
  else {
240
- // The clean artifact is the minimal one: untouched body blocks are
241
- // restored element-for-element from the original document.xml so the
242
- // on-disk diff matches the edit's actual blast radius.
243
- const revised = await session.doc.toBuffer({ cleanBookmarks: clean, minimalReserialization: clean });
244
- revisedBuffer = revised.buffer;
245
- bookmarksRemoved = revised.bookmarksRemoved;
246
- blocksRestored = revised.blocksRestored;
206
+ exportTimestamp = formatUtcTimestamp(new Date());
247
207
  trackedBuffer = null;
248
208
  trackedStats = null;
249
- trackedReconstructionMode = undefined;
250
- trackedFallbackReason = undefined;
251
- trackedFallbackDiagnostics = undefined;
252
- exportTimestamp = formatUtcTimestamp(new Date());
253
- trackedBlocksRestored = 0;
254
- trackedRestoreError = undefined;
255
- if (format === 'tracked' || format === 'both') {
256
- // Lazily generate comparison baselines if not yet available.
257
- await manager.ensureBaselines(session);
258
- const baselineBuffer = session.comparisonBaseline ?? session.originalBuffer;
259
- // The comparison input must stay fully normalized: the baseline is
260
- // normalized, and the atomizer compares normalized-vs-normalized.
261
- // Generated sequentially — toBuffer() swaps shared zip state, so
262
- // concurrent calls on one document are unsafe.
263
- const comparisonRevisedBuffer = clean
264
- ? (await session.doc.toBuffer({ cleanBookmarks: clean })).buffer
265
- : revisedBuffer;
266
- const trackedRes = await runWithoutConsoleLog(() => compareDocuments(baselineBuffer, comparisonRevisedBuffer, {
267
- author,
268
- engine: trackedEngine,
269
- reconstructionMode: DEFAULT_RECONSTRUCTION_MODE,
270
- }));
271
- const restoredTracked = await restoreTrackedUntouchedBlocks(trackedRes.document, session.originalBuffer);
272
- trackedBuffer = restoredTracked.buffer;
273
- trackedBlocksRestored = restoredTracked.blocksRestored;
274
- trackedRestoreError = restoredTracked.restoreError;
275
- trackedStats = trackedRes.stats;
276
- trackedReconstructionMode = trackedRes.reconstructionModeUsed;
277
- trackedFallbackReason = trackedRes.fallbackReason;
278
- trackedFallbackDiagnostics = trackedRes.fallbackDiagnostics;
209
+ // CLEAN artifact (#126): accept the AI actor's write-time edits so the
210
+ // artifact is a genuinely clean document. Pre-existing third-party tracked
211
+ // changes are preserved — SafeDocX never silently accepts another
212
+ // reviewer's revisions (normalizeFirst keeps the accept best-effort and
213
+ // never hard-errors on an unusual overlap during finalization). With no AI
214
+ // author there is no write-time AI markup, so the document serializes as-is
215
+ // with a minimal, blast-radius-matching diff.
216
+ if (session.aiAuthor) {
217
+ // Accept the AI actor's write-time edits on an isolated copy so the
218
+ // session (and its tracked artifact) keep the markup, while untouched
219
+ // body blocks stay byte-identical to the source via minimal
220
+ // reserialization against the true original document.xml (#408).
221
+ const cleaned = await session.doc.toAcceptedBuffer({ author: session.aiAuthor, normalizeFirst: true }, { cleanBookmarks: clean });
222
+ revisedBuffer = cleaned.buffer;
223
+ bookmarksRemoved = cleaned.bookmarksRemoved;
224
+ blocksRestored = cleaned.blocksRestored;
225
+ }
226
+ else {
227
+ const revised = await session.doc.toBuffer({ cleanBookmarks: clean, minimalReserialization: clean });
228
+ revisedBuffer = revised.buffer;
229
+ bookmarksRemoved = revised.bookmarksRemoved;
230
+ blocksRestored = revised.blocksRestored;
279
231
  }
280
- if (params.fail_on_rebuild_fallback && trackedReconstructionMode === 'rebuild') {
281
- return err('REBUILD_FALLBACK', 'Tracked output would use rebuild mode which destroys table structure. ' +
282
- (trackedFallbackReason ? `Reason: ${trackedFallbackReason}.` : ''), "Use save_format: 'clean' or fix the document to pass inplace safety checks.");
232
+ // TRACKED artifact (#126): the session's write-time tracked markup,
233
+ // serialized directly. No comparison, no reconstruction — the redline is
234
+ // exactly what the write-time emitter authored (author, stable ids, and any
235
+ // pre-existing reviewer revisions preserved). Comparison-based redlining is
236
+ // available only via the compare_documents tool.
237
+ if (format === 'tracked' || format === 'both') {
238
+ const tracked = await session.doc.toBuffer({ cleanBookmarks: clean });
239
+ trackedBuffer = tracked.buffer;
240
+ trackedStats = await collectTrackedStats(trackedBuffer, session.aiAuthor);
283
241
  }
284
242
  manager.setSaveCache(session, {
285
243
  cacheKey,
286
244
  revision: session.editRevision,
287
245
  format,
288
246
  cleanBookmarks: clean,
289
- trackedEngine,
290
247
  trackedAuthor: author,
291
248
  revisedBuffer,
292
249
  trackedBuffer,
293
250
  trackedStats,
294
- trackedReconstructionMode,
295
- trackedFallbackReason,
296
- trackedFallbackDiagnostics,
297
251
  bookmarksRemoved: clean ? bookmarksRemoved : 0,
298
252
  blocksRestored,
299
- trackedBlocksRestored,
300
- trackedRestoreError,
301
253
  exportedAtUtc: exportTimestamp,
302
254
  cachedAtIso: new Date().toISOString(),
303
255
  });
@@ -334,9 +286,12 @@ export async function save(manager, params) {
334
286
  await fs.mkdir(path.dirname(trackedPath), { recursive: true });
335
287
  await fs.writeFile(trackedPath, new Uint8Array(trackedBuffer));
336
288
  }
337
- const revisions = format === 'tracked'
338
- ? undefined
339
- : await collectAiRevisionSummary(revisedBuffer, session.aiAuthor);
289
+ // Summarize the AI's revisions from the session's write-time markup (#126).
290
+ // The clean artifact has accepted them away, so summarize the tracked
291
+ // artifact when present, else the session document directly.
292
+ const revisionSummarySource = trackedBuffer
293
+ ?? (await session.doc.toBuffer({ cleanBookmarks: false })).buffer;
294
+ const revisions = await collectAiRevisionSummary(revisionSummarySource, session.aiAuthor);
340
295
  const returnedVariants = format === 'clean'
341
296
  ? ['clean']
342
297
  : format === 'tracked'
@@ -353,21 +308,22 @@ export async function save(manager, params) {
353
308
  tracked_saved_to: trackedPath,
354
309
  size_bytes: format === 'tracked' ? trackedBuffer?.length : revisedBuffer.length,
355
310
  tracked_size_bytes: trackedBuffer?.length,
356
- tracked_changes_engine: format === 'tracked' || format === 'both' ? trackedEngine : undefined,
311
+ // The redline is the write-time markup as authored — no comparison engine
312
+ // or reconstruction is involved (#126).
313
+ tracked_changes_source: format === 'tracked' || format === 'both' ? 'write-time' : undefined,
357
314
  tracked_changes_author: format === 'tracked' || format === 'both' ? author : undefined,
358
315
  tracked_changes_stats: trackedStats ?? undefined,
359
- tracked_reconstruction_mode: trackedReconstructionMode,
360
- tracked_fallback_reason: trackedFallbackReason,
361
- tracked_fallback_diagnostics: trackedFallbackDiagnostics,
362
- tracked_rebuild_warning: trackedReconstructionMode === 'rebuild'
363
- ? 'Rebuild mode was used which may alter document structure (tables, fonts, etc.)'
364
- : undefined,
365
316
  revisions,
317
+ // #122: package-level mutations with no native OOXML revision wrapper
318
+ // (comment/footnote side parts, relationships, content types) are not
319
+ // tracked changes, so surface them explicitly alongside the revisions
320
+ // list rather than letting them land silently.
321
+ non_revision_changes: session.nonRevisionManifest.length > 0
322
+ ? session.nonRevisionManifest
323
+ : undefined,
366
324
  exported_at_utc: exportTimestamp,
367
325
  bookmarks_removed: clean ? bookmarksRemoved : 0,
368
326
  blocks_restored: blocksRestored,
369
- tracked_blocks_restored: trackedBlocksRestored,
370
- tracked_restore_error: trackedRestoreError,
371
327
  returned_variants: returnedVariants,
372
328
  available_variants: ['clean', 'redline'],
373
329
  cache_hit: cacheHit,
@@ -381,12 +337,11 @@ export async function save(manager, params) {
381
337
  ],
382
338
  }
383
339
  : { valid: true },
384
- message: (trackedReconstructionMode === 'rebuild' ? 'WARNING: Tracked output used REBUILD mode which may alter table structure and fonts. Verify tables in Word. ' : '') +
385
- (format === 'clean'
386
- ? `${cacheHit ? 'Cached ' : ''}document saved to ${savePath}`
387
- : format === 'tracked'
388
- ? `${cacheHit ? 'Cached ' : ''}tracked changes document saved to ${trackedPath}`
389
- : `${cacheHit ? 'Cached ' : ''}clean document saved to ${savePath} and tracked changes document saved to ${trackedPath}`),
340
+ message: (format === 'clean'
341
+ ? `${cacheHit ? 'Cached ' : ''}document saved to ${savePath}`
342
+ : format === 'tracked'
343
+ ? `${cacheHit ? 'Cached ' : ''}tracked changes document saved to ${trackedPath}`
344
+ : `${cacheHit ? 'Cached ' : ''}clean document saved to ${savePath} and tracked changes document saved to ${trackedPath}`),
390
345
  }, metadata));
391
346
  }
392
347
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/tools/save.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/tools/save.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usejunior/docx-mcp",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "MCP server for reading, editing, and comparing Word (.docx) and OpenDocument (.odt) files with tracked changes. For Claude, Gemini CLI, Cursor, and any MCP client. Apache-2.0 licensed.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "scripts": {
13
13
  "clean:dist": "node -e \"const { rmSync } = require('node:fs'); rmSync('dist', { recursive: true, force: true });\"",
14
- "build": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/odf-core --if-present && npm run build -w @usejunior/google-docs-core --if-present && npm run clean:dist && tsc -p tsconfig.build.json",
14
+ "build": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/docx-compare && npm run build -w @usejunior/odf-core --if-present && npm run build -w @usejunior/google-docs-core --if-present && npm run clean:dist && tsc -p tsconfig.build.json",
15
15
  "dev": "tsx watch src/cli.ts",
16
16
  "check:spec-coverage": "node scripts/validate_openspec_coverage.mjs",
17
17
  "conformance:discover": "tsx scripts/discover_docx_fixtures.ts --out conformance/discovery.report.json",
@@ -19,16 +19,17 @@
19
19
  "conformance:smoke": "tsx scripts/run_conformance_harness.ts --manifest conformance/fixtures.manifest.json --mode smoke --report conformance/smoke-report.json",
20
20
  "docs:generate:tools": "node --import tsx scripts/generate_tool_reference.ts",
21
21
  "test:conformance": "vitest run src/conformance/harness.test.ts",
22
- "test": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/odf-core --if-present && npm run check:spec-coverage && node ../../node_modules/vitest/vitest.mjs",
23
- "test:run": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/odf-core --if-present && npm run check:spec-coverage && node ../../node_modules/vitest/vitest.mjs run",
24
- "test:coverage": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/odf-core --if-present && npm run check:spec-coverage && node ../../node_modules/vitest/vitest.mjs run --coverage --coverage.reporter=text-summary --coverage.reporter=json-summary --coverage.reporter=lcov",
22
+ "test": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/docx-compare && npm run build -w @usejunior/odf-core --if-present && npm run check:spec-coverage && node ../../node_modules/vitest/vitest.mjs",
23
+ "test:run": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/docx-compare && npm run build -w @usejunior/odf-core --if-present && npm run check:spec-coverage && node ../../node_modules/vitest/vitest.mjs run",
24
+ "test:coverage": "npm run build -w @usejunior/docx-core && npm run build -w @usejunior/docx-compare && npm run build -w @usejunior/odf-core --if-present && npm run check:spec-coverage && node ../../node_modules/vitest/vitest.mjs run --coverage --coverage.reporter=text-summary --coverage.reporter=json-summary --coverage.reporter=lcov",
25
25
  "prepack": "npm run build",
26
- "lint": "tsc -b --pretty false"
26
+ "lint": "tsc --noEmit --pretty false"
27
27
  },
28
28
  "dependencies": {
29
29
  "@modelcontextprotocol/sdk": "^1.0.0",
30
- "@usejunior/docx-core": "^0.15.0",
31
- "@usejunior/odf-core": "^0.15.0",
30
+ "@usejunior/docx-compare": "^0.16.0",
31
+ "@usejunior/docx-core": "^0.16.0",
32
+ "@usejunior/odf-core": "^0.16.0",
32
33
  "@xmldom/xmldom": "^0.9.10",
33
34
  "zod": "^4.3.6"
34
35
  },
@@ -56,7 +57,7 @@
56
57
  "NOTICE"
57
58
  ],
58
59
  "peerDependencies": {
59
- "@usejunior/google-docs-core": "^0.15.0"
60
+ "@usejunior/google-docs-core": "^0.16.0"
60
61
  },
61
62
  "peerDependenciesMeta": {
62
63
  "@usejunior/google-docs-core": {