@usejunior/docx-mcp 0.9.1 → 0.11.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 (160) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +2 -0
  3. package/README.md +47 -2
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/cli/commands/edit.d.ts.map +1 -1
  6. package/dist/cli/commands/edit.js +2 -1
  7. package/dist/cli/commands/edit.js.map +1 -1
  8. package/dist/cli/commands/grep.d.ts.map +1 -1
  9. package/dist/cli/commands/grep.js +2 -1
  10. package/dist/cli/commands/grep.js.map +1 -1
  11. package/dist/cli/help.d.ts.map +1 -1
  12. package/dist/cli/help.js +1 -0
  13. package/dist/cli/help.js.map +1 -1
  14. package/dist/cli/tool_runner.d.ts +6 -0
  15. package/dist/cli/tool_runner.d.ts.map +1 -1
  16. package/dist/cli/tool_runner.js +10 -1
  17. package/dist/cli/tool_runner.js.map +1 -1
  18. package/dist/odf_loader.d.ts +2 -0
  19. package/dist/odf_loader.d.ts.map +1 -0
  20. package/dist/odf_loader.js +20 -0
  21. package/dist/odf_loader.js.map +1 -0
  22. package/dist/server.d.ts +8 -2
  23. package/dist/server.d.ts.map +1 -1
  24. package/dist/server.js +113 -4
  25. package/dist/server.js.map +1 -1
  26. package/dist/session/manager.d.ts +48 -2
  27. package/dist/session/manager.d.ts.map +1 -1
  28. package/dist/session/manager.js +175 -7
  29. package/dist/session/manager.js.map +1 -1
  30. package/dist/tool_catalog.d.ts +56 -12
  31. package/dist/tool_catalog.d.ts.map +1 -1
  32. package/dist/tool_catalog.js +69 -17
  33. package/dist/tool_catalog.js.map +1 -1
  34. package/dist/tools/accept_changes.js +1 -1
  35. package/dist/tools/accept_changes.js.map +1 -1
  36. package/dist/tools/add_comment.d.ts.map +1 -1
  37. package/dist/tools/add_comment.js +21 -5
  38. package/dist/tools/add_comment.js.map +1 -1
  39. package/dist/tools/add_footnote.d.ts.map +1 -1
  40. package/dist/tools/add_footnote.js +15 -3
  41. package/dist/tools/add_footnote.js.map +1 -1
  42. package/dist/tools/ai_revision_guard.d.ts +38 -0
  43. package/dist/tools/ai_revision_guard.d.ts.map +1 -0
  44. package/dist/tools/ai_revision_guard.js +115 -0
  45. package/dist/tools/ai_revision_guard.js.map +1 -0
  46. package/dist/tools/apply_plan.d.ts.map +1 -1
  47. package/dist/tools/apply_plan.js +55 -5
  48. package/dist/tools/apply_plan.js.map +1 -1
  49. package/dist/tools/clear_formatting.d.ts +2 -1
  50. package/dist/tools/clear_formatting.d.ts.map +1 -1
  51. package/dist/tools/clear_formatting.js +84 -61
  52. package/dist/tools/clear_formatting.js.map +1 -1
  53. package/dist/tools/compare_documents.d.ts.map +1 -1
  54. package/dist/tools/compare_documents.js +11 -2
  55. package/dist/tools/compare_documents.js.map +1 -1
  56. package/dist/tools/convert_to_odt.d.ts +20 -0
  57. package/dist/tools/convert_to_odt.d.ts.map +1 -0
  58. package/dist/tools/convert_to_odt.js +74 -0
  59. package/dist/tools/convert_to_odt.js.map +1 -0
  60. package/dist/tools/delete_comment.d.ts.map +1 -1
  61. package/dist/tools/delete_comment.js +12 -1
  62. package/dist/tools/delete_comment.js.map +1 -1
  63. package/dist/tools/delete_footnote.d.ts.map +1 -1
  64. package/dist/tools/delete_footnote.js +12 -1
  65. package/dist/tools/delete_footnote.js.map +1 -1
  66. package/dist/tools/export.d.ts +20 -0
  67. package/dist/tools/export.d.ts.map +1 -0
  68. package/dist/tools/export.js +96 -0
  69. package/dist/tools/export.js.map +1 -0
  70. package/dist/tools/format_layout.d.ts.map +1 -1
  71. package/dist/tools/format_layout.js +21 -3
  72. package/dist/tools/format_layout.js.map +1 -1
  73. package/dist/tools/get_comments.d.ts.map +1 -1
  74. package/dist/tools/get_comments.js +9 -0
  75. package/dist/tools/get_comments.js.map +1 -1
  76. package/dist/tools/grep.d.ts.map +1 -1
  77. package/dist/tools/grep.js +4 -115
  78. package/dist/tools/grep.js.map +1 -1
  79. package/dist/tools/grep_core.d.ts +49 -0
  80. package/dist/tools/grep_core.d.ts.map +1 -0
  81. package/dist/tools/grep_core.js +126 -0
  82. package/dist/tools/grep_core.js.map +1 -0
  83. package/dist/tools/insert_paragraph.d.ts +7 -1
  84. package/dist/tools/insert_paragraph.d.ts.map +1 -1
  85. package/dist/tools/insert_paragraph.js +39 -27
  86. package/dist/tools/insert_paragraph.js.map +1 -1
  87. package/dist/tools/odf/add_comment.d.ts +21 -0
  88. package/dist/tools/odf/add_comment.d.ts.map +1 -0
  89. package/dist/tools/odf/add_comment.js +64 -0
  90. package/dist/tools/odf/add_comment.js.map +1 -0
  91. package/dist/tools/odf/close_file.d.ts +4 -0
  92. package/dist/tools/odf/close_file.d.ts.map +1 -0
  93. package/dist/tools/odf/close_file.js +16 -0
  94. package/dist/tools/odf/close_file.js.map +1 -0
  95. package/dist/tools/odf/compare_documents.d.ts +39 -0
  96. package/dist/tools/odf/compare_documents.d.ts.map +1 -0
  97. package/dist/tools/odf/compare_documents.js +156 -0
  98. package/dist/tools/odf/compare_documents.js.map +1 -0
  99. package/dist/tools/odf/get_comments.d.ts +11 -0
  100. package/dist/tools/odf/get_comments.d.ts.map +1 -0
  101. package/dist/tools/odf/get_comments.js +32 -0
  102. package/dist/tools/odf/get_comments.js.map +1 -0
  103. package/dist/tools/odf/get_file_status.d.ts +4 -0
  104. package/dist/tools/odf/get_file_status.d.ts.map +1 -0
  105. package/dist/tools/odf/get_file_status.js +28 -0
  106. package/dist/tools/odf/get_file_status.js.map +1 -0
  107. package/dist/tools/odf/grep.d.ts +19 -0
  108. package/dist/tools/odf/grep.d.ts.map +1 -0
  109. package/dist/tools/odf/grep.js +81 -0
  110. package/dist/tools/odf/grep.js.map +1 -0
  111. package/dist/tools/odf/insert_paragraph.d.ts +19 -0
  112. package/dist/tools/odf/insert_paragraph.d.ts.map +1 -0
  113. package/dist/tools/odf/insert_paragraph.js +50 -0
  114. package/dist/tools/odf/insert_paragraph.js.map +1 -0
  115. package/dist/tools/odf/read_file.d.ts +9 -0
  116. package/dist/tools/odf/read_file.d.ts.map +1 -0
  117. package/dist/tools/odf/read_file.js +124 -0
  118. package/dist/tools/odf/read_file.js.map +1 -0
  119. package/dist/tools/odf/replace_text.d.ts +9 -0
  120. package/dist/tools/odf/replace_text.d.ts.map +1 -0
  121. package/dist/tools/odf/replace_text.js +41 -0
  122. package/dist/tools/odf/replace_text.js.map +1 -0
  123. package/dist/tools/odf/save.d.ts +7 -0
  124. package/dist/tools/odf/save.d.ts.map +1 -0
  125. package/dist/tools/odf/save.js +48 -0
  126. package/dist/tools/odf/save.js.map +1 -0
  127. package/dist/tools/open_document.d.ts.map +1 -1
  128. package/dist/tools/open_document.js +36 -4
  129. package/dist/tools/open_document.js.map +1 -1
  130. package/dist/tools/path_policy.d.ts +9 -0
  131. package/dist/tools/path_policy.d.ts.map +1 -1
  132. package/dist/tools/path_policy.js +66 -5
  133. package/dist/tools/path_policy.js.map +1 -1
  134. package/dist/tools/provider_guard.d.ts +1 -0
  135. package/dist/tools/provider_guard.d.ts.map +1 -1
  136. package/dist/tools/provider_guard.js +10 -0
  137. package/dist/tools/provider_guard.js.map +1 -1
  138. package/dist/tools/read_file.d.ts +3 -0
  139. package/dist/tools/read_file.d.ts.map +1 -1
  140. package/dist/tools/read_file.js +384 -52
  141. package/dist/tools/read_file.js.map +1 -1
  142. package/dist/tools/replace_text.d.ts +7 -1
  143. package/dist/tools/replace_text.d.ts.map +1 -1
  144. package/dist/tools/replace_text.js +74 -48
  145. package/dist/tools/replace_text.js.map +1 -1
  146. package/dist/tools/save.d.ts +19 -0
  147. package/dist/tools/save.d.ts.map +1 -1
  148. package/dist/tools/save.js +161 -13
  149. package/dist/tools/save.js.map +1 -1
  150. package/dist/tools/session_resolution.d.ts +25 -1
  151. package/dist/tools/session_resolution.d.ts.map +1 -1
  152. package/dist/tools/session_resolution.js +179 -2
  153. package/dist/tools/session_resolution.js.map +1 -1
  154. package/dist/tools/tag_parser.d.ts.map +1 -1
  155. package/dist/tools/tag_parser.js +69 -14
  156. package/dist/tools/tag_parser.js.map +1 -1
  157. package/dist/tools/update_footnote.d.ts.map +1 -1
  158. package/dist/tools/update_footnote.js +20 -7
  159. package/dist/tools/update_footnote.js.map +1 -1
  160. package/package.json +21 -16
@@ -1,5 +1,6 @@
1
1
  import { SessionManager } from '../session/manager.js';
2
2
  import { type ToolResponse } from './types.js';
3
+ import { type RevisionContext } from '@usejunior/docx-core';
3
4
  export declare function stripSearchTags(text: string): string;
4
5
  /**
5
6
  * Count shared leading characters between two strings.
@@ -26,5 +27,10 @@ export declare function replaceText(manager: SessionManager, params: {
26
27
  font_size?: number;
27
28
  font_name?: string;
28
29
  color?: string;
29
- }): Promise<ToolResponse>;
30
+ /**
31
+ * Internal (not exposed in the MCP tool schema): set by apply_plan, which
32
+ * preflights the whole step sequence once instead of per step.
33
+ */
34
+ skip_ai_revision_preflight?: boolean;
35
+ }, ctx?: RevisionContext): Promise<ToolResponse>;
30
36
  //# sourceMappingURL=replace_text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"replace_text.d.ts","sourceRoot":"","sources":["../../src/tools/replace_text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAoB,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAsExD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AA2CD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKlF;AAOD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,YAAY,CAAC,CA0HvB"}
1
+ {"version":3,"file":"replace_text.d.ts","sourceRoot":"","sources":["../../src/tools/replace_text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgC,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAIxD,OAAO,EAaL,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAwD9B,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AA2CD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKlF;AAaD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,EACD,GAAG,CAAC,EAAE,eAAe,GACpB,OAAO,CAAC,YAAY,CAAC,CA6IvB"}
@@ -1,8 +1,10 @@
1
+ import { getRevisionContextForSession } from '../session/manager.js';
1
2
  import { errorMessage } from "../error_utils.js";
2
3
  import { err, ok } from './types.js';
3
4
  import { ERROR_PREVIEW_CHARS, RESULT_PREVIEW_CHARS, previewText } from './preview.js';
4
5
  import { mergeSessionResolutionMetadata, resolveSessionForTool } from './session_resolution.js';
5
- import { OOXML, W, findUniqueSubstringMatch, applyDocumentQuoteStyle, getParagraphRuns, hasHighlightTags, hasHyperlinkTags, stripHyperlinkTags, stripAllInlineTags, } from '@usejunior/docx-core';
6
+ import { preflightAiRevisionMutation } from './ai_revision_guard.js';
7
+ import { OOXML, W, findUniqueSubstringMatch, applyDocumentQuoteStyle, getParagraphRuns, hasHighlightTags, hasHyperlinkTags, replaceParagraphTextRange, stripHyperlinkTags, stripAllInlineTags, } from '@usejunior/docx-core';
6
8
  import { splitTaggedText, segmentAddRunProps, hasAnyMarkupTags, } from './tag_parser.js';
7
9
  function mergeAddRunProps(a, b) {
8
10
  const out = { ...a };
@@ -37,8 +39,8 @@ function headerFormattingToAddRunProps(formatting) {
37
39
  add.underline = true;
38
40
  return Object.keys(add).length > 0 ? add : null;
39
41
  }
40
- function findHeaderRoleModelAddRunProps(session, anchorParagraphId) {
41
- const { nodes } = session.doc.buildDocumentView({ includeSemanticTags: false });
42
+ function findHeaderRoleModelAddRunProps(doc, anchorParagraphId) {
43
+ const { nodes } = doc.buildDocumentView({ includeSemanticTags: false });
42
44
  const anchorIdx = nodes.findIndex((n) => n.id === anchorParagraphId);
43
45
  if (anchorIdx < 0)
44
46
  return null;
@@ -116,15 +118,18 @@ function isLikelyFieldPlaceholder(text) {
116
118
  const t = text.trim();
117
119
  return (t.startsWith('[') && t.endsWith(']')) || (t.startsWith('«') && t.endsWith('»'));
118
120
  }
119
- export async function replaceText(manager, params) {
121
+ function invalidateDocumentCaches(doc) {
122
+ const mutableDoc = doc;
123
+ mutableDoc.dirty = true;
124
+ mutableDoc.documentViewCache = null;
125
+ }
126
+ export async function replaceText(manager, params, ctx) {
120
127
  try {
121
128
  const resolved = await resolveSessionForTool(manager, params, { toolName: 'replace_text' });
122
129
  if (!resolved.ok)
123
130
  return resolved.response;
124
131
  const { session, metadata } = resolved;
125
- if (params.normalize_first) {
126
- session.doc.mergeRunsOnly();
127
- }
132
+ const revisionCtx = ctx ?? await getRevisionContextForSession(session);
128
133
  const { target_paragraph_id: pid } = params;
129
134
  const oldStr = stripSearchTags(params.old_string);
130
135
  let newStr = params.new_string;
@@ -143,15 +148,9 @@ export async function replaceText(manager, params) {
143
148
  if (textMatch.status === 'multiple') {
144
149
  return err('MULTIPLE_MATCHES', `Found ${textMatch.matchCount} matches for '${previewText(oldStr, ERROR_PREVIEW_CHARS)}' in paragraph. Need unique match.`);
145
150
  }
146
- const pEl = session.doc.getParagraphElementById(pid);
147
- if (!pEl) {
148
- return err('ANCHOR_NOT_FOUND', `Paragraph ID ${pid} not found in document`);
149
- }
150
151
  const matchedOldStr = textMatch.matchedText;
151
152
  const matchStart = textMatch.start;
152
153
  const matchEnd = textMatch.end;
153
- const paraRuns = getParagraphRuns(pEl);
154
- const { templateRun: contextTemplateRun, allOverlappedRunsHighlighted } = chooseContextTemplateRun(paraRuns, matchStart, matchEnd);
155
154
  const explicitAddProps = {};
156
155
  if (params.bold !== undefined)
157
156
  explicitAddProps.bold = params.bold;
@@ -167,60 +166,87 @@ export async function replaceText(manager, params) {
167
166
  explicitAddProps.fontName = params.font_name;
168
167
  if (params.color !== undefined)
169
168
  explicitAddProps.color = params.color;
170
- const shouldClearHighlight = params.clear_highlight || (allOverlappedRunsHighlighted && !hasHighlightTags(newStr) && isLikelyFieldPlaceholder(oldStr));
171
- let replaceText = newStr;
172
169
  const hasMarkup = hasAnyMarkupTags(newStr);
173
170
  if (hasMarkup) {
174
- let segs;
175
171
  try {
176
- segs = splitTaggedText(newStr);
172
+ splitTaggedText(newStr);
177
173
  }
178
174
  catch (e) {
179
175
  return err(errorMessage(e), `Tag parse error in new_string: ${errorMessage(e)}`);
180
176
  }
181
- const headerAddProps = segs.some((s) => s.header) ? findHeaderRoleModelAddRunProps(session, pid) : null;
182
- const parts = [];
183
- for (const s of segs) {
184
- if (!s.text)
185
- continue;
186
- const segAddProps = mergeAddRunProps(mergeAddRunProps(segmentAddRunProps(s), explicitAddProps), s.header ? headerAddProps : null);
187
- const clearHighlight = shouldClearHighlight && !s.highlighting;
188
- parts.push({ text: s.text, templateRun: contextTemplateRun ?? undefined, addRunProps: segAddProps, clearHighlight });
189
- }
190
- replaceText = parts;
191
- session.doc.replaceText({ targetParagraphId: pid, findText: matchedOldStr, replaceText });
192
177
  }
193
178
  else {
194
179
  // Fix 2: Transfer document quote style to new_string for non-exact matches.
195
180
  if (textMatch.mode !== 'exact' && textMatch.mode !== 'clean') {
196
181
  newStr = applyDocumentQuoteStyle(matchedOldStr, newStr);
197
182
  }
198
- // Fix 1: Range trimming — compute common prefix/suffix between matched old text
199
- // and new text, then only replace the changed middle. This preserves formatting
200
- // on unchanged prefix/suffix characters and naturally avoids field intersections.
183
+ }
184
+ const mutate = (doc, activeCtx) => {
185
+ if (params.normalize_first) {
186
+ doc.mergeRunsOnly();
187
+ }
188
+ const pEl = doc.getParagraphElementById(pid);
189
+ if (!pEl) {
190
+ throw new Error(`Paragraph ID ${pid} not found in document`);
191
+ }
192
+ const paraRuns = getParagraphRuns(pEl);
193
+ const { templateRun: contextTemplateRun, allOverlappedRunsHighlighted } = chooseContextTemplateRun(paraRuns, matchStart, matchEnd);
194
+ const localShouldClearHighlight = params.clear_highlight || (allOverlappedRunsHighlighted && !hasHighlightTags(newStr) && isLikelyFieldPlaceholder(oldStr));
195
+ if (hasMarkup) {
196
+ const segs = splitTaggedText(newStr);
197
+ const headerAddProps = segs.some((s) => s.header) ? findHeaderRoleModelAddRunProps(doc, pid) : null;
198
+ const parts = [];
199
+ for (const s of segs) {
200
+ if (!s.text)
201
+ continue;
202
+ const segAddProps = mergeAddRunProps(mergeAddRunProps(segmentAddRunProps(s), explicitAddProps), s.header ? headerAddProps : null);
203
+ const clearHighlight = localShouldClearHighlight && !s.highlighting;
204
+ parts.push({ text: s.text, templateRun: contextTemplateRun ?? undefined, addRunProps: segAddProps, clearHighlight });
205
+ }
206
+ if (activeCtx) {
207
+ replaceParagraphTextRange(pEl, matchStart, matchEnd, parts, activeCtx);
208
+ invalidateDocumentCaches(doc);
209
+ }
210
+ else {
211
+ doc.replaceText({ targetParagraphId: pid, findText: matchedOldStr, replaceText: parts });
212
+ }
213
+ return;
214
+ }
201
215
  const prefixLen = commonPrefixLength(matchedOldStr, newStr);
202
216
  const suffixLen = commonSuffixLength(matchedOldStr, newStr, prefixLen);
203
217
  const trimmedNewStr = newStr.slice(prefixLen, newStr.length - suffixLen);
204
218
  const trimmedStart = matchStart + prefixLen;
205
219
  const trimmedEnd = matchEnd - suffixLen;
206
- if (trimmedStart < trimmedEnd || trimmedNewStr.length > 0) {
207
- // There IS a changed middle — trim and replace.
208
- let trimmedReplace;
209
- if (shouldClearHighlight || Object.keys(explicitAddProps).length > 0) {
210
- const { templateRun } = chooseContextTemplateRun(paraRuns, trimmedStart, trimmedEnd);
211
- trimmedReplace = [{ text: trimmedNewStr, templateRun: templateRun ?? undefined,
212
- addRunProps: explicitAddProps, clearHighlight: shouldClearHighlight }];
213
- }
214
- else {
215
- trimmedReplace = trimmedNewStr;
216
- }
217
- session.doc.replaceTextAtRange({ targetParagraphId: pid, start: trimmedStart, end: trimmedEnd, replaceText: trimmedReplace });
218
- // Range trimming splits the original run at prefix/suffix boundaries, producing
219
- // adjacent runs with identical formatting. Merge them back to keep output clean.
220
- session.doc.mergeRunsOnly();
220
+ if (trimmedStart >= trimmedEnd && trimmedNewStr.length === 0)
221
+ return;
222
+ let trimmedReplace;
223
+ if (localShouldClearHighlight || Object.keys(explicitAddProps).length > 0) {
224
+ const { templateRun } = chooseContextTemplateRun(paraRuns, trimmedStart, trimmedEnd);
225
+ trimmedReplace = [{
226
+ text: trimmedNewStr,
227
+ templateRun: templateRun ?? undefined,
228
+ addRunProps: explicitAddProps,
229
+ clearHighlight: localShouldClearHighlight,
230
+ }];
221
231
  }
222
- // else: text is identical after normalization — no-op
223
- }
232
+ else {
233
+ trimmedReplace = trimmedNewStr;
234
+ }
235
+ if (activeCtx) {
236
+ replaceParagraphTextRange(pEl, trimmedStart, trimmedEnd, trimmedReplace, activeCtx);
237
+ invalidateDocumentCaches(doc);
238
+ }
239
+ else {
240
+ doc.replaceTextAtRange({ targetParagraphId: pid, start: trimmedStart, end: trimmedEnd, replaceText: trimmedReplace });
241
+ }
242
+ doc.mergeRunsOnly({ preserveRsidIdentity: true });
243
+ };
244
+ const revisionPreflight = params.skip_ai_revision_preflight
245
+ ? null
246
+ : await preflightAiRevisionMutation(session, revisionCtx, mutate);
247
+ if (revisionPreflight)
248
+ return revisionPreflight;
249
+ mutate(session.doc, revisionCtx);
224
250
  manager.markEdited(session);
225
251
  return ok(mergeSessionResolutionMetadata({
226
252
  success: true,
@@ -1 +1 @@
1
- {"version":3,"file":"replace_text.js","sourceRoot":"","sources":["../../src/tools/replace_text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replace_text.js","sourceRoot":"","sources":["../../src/tools/replace_text.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,25 @@ import { SessionManager } from '../session/manager.js';
2
2
  import { type ToolResponse } from './types.js';
3
3
  import { type CompareOptions } from '@usejunior/docx-core';
4
4
  type SaveFormat = 'clean' | 'tracked' | 'both';
5
+ /**
6
+ * Restoration is best-effort: on any failure the tracked artifact degrades to
7
+ * the unrestored comparison output (the pre-restore behavior), which is valid
8
+ * — just fully re-serialized. The error is returned rather than thrown so the
9
+ * save still succeeds, but callers must surface it: a swallowed error is
10
+ * indistinguishable from "document fully edited, nothing to restore"
11
+ * (`blocksRestored: 0` reads as benign), so a restore-path regression would
12
+ * otherwise go dark.
13
+ *
14
+ * Exported for direct testing of the failure path; production callers go
15
+ * through `save`.
16
+ *
17
+ * @see https://github.com/UseJunior/safe-docx/issues/436
18
+ */
19
+ export declare function restoreTrackedUntouchedBlocks(trackedBuffer: Buffer, originalBuffer: Buffer): Promise<{
20
+ buffer: Buffer;
21
+ blocksRestored: number;
22
+ restoreError?: string;
23
+ }>;
5
24
  export declare function save(manager: SessionManager, params: {
6
25
  file_path?: string;
7
26
  save_to_local_path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/tools/save.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAoB,KAAK,cAAc,EAAsB,MAAM,sBAAsB,CAAC;AAKjG,KAAK,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAsC/C,wBAAsB,IAAI,CACxB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,CAAC;IAEzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClD,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GACA,OAAO,CAAC,YAAY,CAAC,CAyOvB"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/tools/save.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAOL,KAAK,cAAc,EAEpB,MAAM,sBAAsB,CAAC;AAM9B,KAAK,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AA2F/C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,6BAA6B,CACjD,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB5E;AAED,wBAAsB,IAAI,CACxB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,CAAC;IAEzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClD,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GACA,OAAO,CAAC,YAAY,CAAC,CAkTvB"}
@@ -2,10 +2,12 @@ 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 { compareDocuments } from '@usejunior/docx-core';
5
+ import { DocxZip, TRACKED_CHANGE_ELEMENT_NAME_SET, compareDocuments, parseXml, restoreUntouchedBlocks, serializeXml, } from '@usejunior/docx-core';
6
6
  import { mergeSessionResolutionMetadata, resolveSessionForTool } from './session_resolution.js';
7
- import { enforceWritePathPolicy } from './path_policy.js';
7
+ import { getAiRevisionBaseline, splitIntroducedDiagnostics } from './ai_revision_guard.js';
8
+ import { enforceWritePathPolicy, resolvesToSamePath } from './path_policy.js';
8
9
  import { DEFAULT_RECONSTRUCTION_MODE } from './comparison_defaults.js';
10
+ const WORDPROCESSING_ML_NS = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';
9
11
  function expandPath(inputPath) {
10
12
  return inputPath.startsWith('~') ? path.join(process.env.HOME || '', inputPath.slice(1)) : inputPath;
11
13
  }
@@ -39,6 +41,84 @@ async function runWithoutConsoleLog(fn) {
39
41
  console.log = originalLog;
40
42
  }
41
43
  }
44
+ function getWordAttr(element, localName) {
45
+ return (element.getAttributeNS(WORDPROCESSING_ML_NS, localName)
46
+ ?? element.getAttribute(`w:${localName}`)
47
+ ?? element.getAttribute(localName));
48
+ }
49
+ async function collectAiRevisionSummary(buffer, author) {
50
+ if (!author)
51
+ return undefined;
52
+ const zip = await DocxZip.load(buffer);
53
+ const revisionIds = new Set();
54
+ let count = 0;
55
+ for (const fileName of zip.listFiles()) {
56
+ if (!fileName.startsWith('word/') || !fileName.endsWith('.xml'))
57
+ continue;
58
+ const xml = await zip.readTextOrNull(fileName);
59
+ if (!xml)
60
+ continue;
61
+ const doc = parseXml(xml);
62
+ for (const node of Array.from(doc.getElementsByTagName('*'))) {
63
+ if (node.namespaceURI !== WORDPROCESSING_ML_NS || !TRACKED_CHANGE_ELEMENT_NAME_SET.has(node.localName)) {
64
+ continue;
65
+ }
66
+ if (getWordAttr(node, 'author') !== author)
67
+ continue;
68
+ count += 1;
69
+ const id = getWordAttr(node, 'id');
70
+ if (!id)
71
+ continue;
72
+ const parsed = Number.parseInt(id, 10);
73
+ if (Number.isFinite(parsed)) {
74
+ revisionIds.add(parsed);
75
+ }
76
+ }
77
+ }
78
+ if (count === 0)
79
+ return undefined;
80
+ return {
81
+ count,
82
+ author,
83
+ ...(revisionIds.size > 0 ? { ids: [...revisionIds].sort((a, b) => a - b) } : {}),
84
+ };
85
+ }
86
+ /**
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
99
+ */
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 };
114
+ }
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
+ }
121
+ }
42
122
  export async function save(manager, params) {
43
123
  try {
44
124
  const resolved = await resolveSessionForTool(manager, params, { toolName: 'save' });
@@ -87,7 +167,7 @@ export async function save(manager, params) {
87
167
  }
88
168
  const trackedEngine = engine;
89
169
  const clean = params.clean_bookmarks ?? true;
90
- const author = params.tracked_changes_author ?? params.author ?? 'Safe-Docx';
170
+ const author = params.tracked_changes_author ?? params.author ?? 'SafeDocX';
91
171
  const allowOverwrite = params.allow_overwrite ?? false;
92
172
  const cacheKey = JSON.stringify({
93
173
  revision: session.editRevision,
@@ -105,9 +185,44 @@ export async function save(manager, params) {
105
185
  let trackedFallbackReason;
106
186
  let trackedFallbackDiagnostics;
107
187
  let bookmarksRemoved;
188
+ let blocksRestored;
189
+ let trackedBlocksRestored;
190
+ let trackedRestoreError;
108
191
  let exportTimestamp;
109
192
  // Run implicit validation before producing save artifacts.
110
193
  const validation = session.doc.validate();
194
+ let aiRevisionValidation = session.aiAuthor
195
+ ? await session.doc.validateAiRevisions(session.aiAuthor)
196
+ : undefined;
197
+ if (aiRevisionValidation && aiRevisionValidation.errors.length > 0) {
198
+ // AI-attributed errors always fail the save. Unattributable errors
199
+ // (field structure, package invariants — no w:author) fail only when
200
+ // they were not already present in the originally-loaded file; the
201
+ // session's AI edits did not introduce those.
202
+ const attributed = aiRevisionValidation.errors.filter((e) => e.author === session.aiAuthor);
203
+ const unattributed = aiRevisionValidation.errors.filter((e) => e.author !== session.aiAuthor);
204
+ let introduced = unattributed;
205
+ let demoted = [];
206
+ if (unattributed.length > 0) {
207
+ const baseline = await getAiRevisionBaseline(session);
208
+ ({ introduced, demoted } = splitIntroducedDiagnostics(unattributed, baseline));
209
+ }
210
+ const failing = [...attributed, ...introduced];
211
+ aiRevisionValidation = {
212
+ valid: failing.length === 0,
213
+ errors: failing,
214
+ warnings: [...aiRevisionValidation.warnings, ...demoted],
215
+ };
216
+ if (failing.length > 0) {
217
+ return {
218
+ ...err('INVALID_AI_REVISIONS', 'Session contains invalid AI-authored tracked-change markup.', 'Repair the AI-authored revisions before saving a redline artifact.'),
219
+ diagnostics: {
220
+ errors: failing,
221
+ warnings: aiRevisionValidation.warnings,
222
+ },
223
+ };
224
+ }
225
+ }
111
226
  if (cached) {
112
227
  revisedBuffer = cached.revisedBuffer;
113
228
  trackedBuffer = cached.trackedBuffer;
@@ -116,28 +231,47 @@ export async function save(manager, params) {
116
231
  trackedFallbackReason = cached.trackedFallbackReason;
117
232
  trackedFallbackDiagnostics = cached.trackedFallbackDiagnostics;
118
233
  bookmarksRemoved = cached.bookmarksRemoved;
234
+ blocksRestored = cached.blocksRestored;
235
+ trackedBlocksRestored = cached.trackedBlocksRestored;
236
+ trackedRestoreError = cached.trackedRestoreError;
119
237
  exportTimestamp = cached.exportedAtUtc;
120
238
  }
121
239
  else {
122
- const revised = await session.doc.toBuffer({ cleanBookmarks: clean });
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 });
123
244
  revisedBuffer = revised.buffer;
124
245
  bookmarksRemoved = revised.bookmarksRemoved;
246
+ blocksRestored = revised.blocksRestored;
125
247
  trackedBuffer = null;
126
248
  trackedStats = null;
127
249
  trackedReconstructionMode = undefined;
128
250
  trackedFallbackReason = undefined;
129
251
  trackedFallbackDiagnostics = undefined;
130
252
  exportTimestamp = formatUtcTimestamp(new Date());
253
+ trackedBlocksRestored = 0;
254
+ trackedRestoreError = undefined;
131
255
  if (format === 'tracked' || format === 'both') {
132
256
  // Lazily generate comparison baselines if not yet available.
133
257
  await manager.ensureBaselines(session);
134
258
  const baselineBuffer = session.comparisonBaseline ?? session.originalBuffer;
135
- const trackedRes = await runWithoutConsoleLog(() => compareDocuments(baselineBuffer, revisedBuffer, {
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, {
136
267
  author,
137
268
  engine: trackedEngine,
138
269
  reconstructionMode: DEFAULT_RECONSTRUCTION_MODE,
139
270
  }));
140
- trackedBuffer = trackedRes.document;
271
+ const restoredTracked = await restoreTrackedUntouchedBlocks(trackedRes.document, session.originalBuffer);
272
+ trackedBuffer = restoredTracked.buffer;
273
+ trackedBlocksRestored = restoredTracked.blocksRestored;
274
+ trackedRestoreError = restoredTracked.restoreError;
141
275
  trackedStats = trackedRes.stats;
142
276
  trackedReconstructionMode = trackedRes.reconstructionModeUsed;
143
277
  trackedFallbackReason = trackedRes.fallbackReason;
@@ -161,6 +295,9 @@ export async function save(manager, params) {
161
295
  trackedFallbackReason,
162
296
  trackedFallbackDiagnostics,
163
297
  bookmarksRemoved: clean ? bookmarksRemoved : 0,
298
+ blocksRestored,
299
+ trackedBlocksRestored,
300
+ trackedRestoreError,
164
301
  exportedAtUtc: exportTimestamp,
165
302
  cachedAtIso: new Date().toISOString(),
166
303
  });
@@ -173,14 +310,13 @@ export async function save(manager, params) {
173
310
  ? expandPath(params.tracked_save_to_local_path)
174
311
  : defaultTrackedPath(savePath, exportTimestamp);
175
312
  }
176
- const originalPathResolved = path.resolve(session.originalPath);
177
- const cleanPathResolved = path.resolve(savePath);
178
- const trackedPathResolved = trackedPath ? path.resolve(trackedPath) : null;
313
+ // Compare against the original via realpath (issue #313) so a symlinked save_to_local_path pointing
314
+ // back at the source can't slip past a purely lexical check and overwrite the original through the link.
179
315
  if (!allowOverwrite) {
180
- if ((format === 'clean' || format === 'both') && cleanPathResolved === originalPathResolved) {
316
+ if ((format === 'clean' || format === 'both') && await resolvesToSamePath(savePath, session.originalPath)) {
181
317
  return err('OVERWRITE_BLOCKED', `Refusing to overwrite original file: ${savePath}`, "Save to a different path, or set allow_overwrite=true if you explicitly want in-place overwrite.");
182
318
  }
183
- if ((format === 'tracked' || format === 'both') && trackedPathResolved === originalPathResolved) {
319
+ if ((format === 'tracked' || format === 'both') && trackedPath && await resolvesToSamePath(trackedPath, session.originalPath)) {
184
320
  return err('OVERWRITE_BLOCKED', `Refusing to overwrite original file with tracked output: ${trackedPath}`, "Use tracked_save_to_local_path to write redline elsewhere, or set allow_overwrite=true to force overwrite.");
185
321
  }
186
322
  }
@@ -198,6 +334,9 @@ export async function save(manager, params) {
198
334
  await fs.mkdir(path.dirname(trackedPath), { recursive: true });
199
335
  await fs.writeFile(trackedPath, new Uint8Array(trackedBuffer));
200
336
  }
337
+ const revisions = format === 'tracked'
338
+ ? undefined
339
+ : await collectAiRevisionSummary(revisedBuffer, session.aiAuthor);
201
340
  const returnedVariants = format === 'clean'
202
341
  ? ['clean']
203
342
  : format === 'tracked'
@@ -223,15 +362,24 @@ export async function save(manager, params) {
223
362
  tracked_rebuild_warning: trackedReconstructionMode === 'rebuild'
224
363
  ? 'Rebuild mode was used which may alter document structure (tables, fonts, etc.)'
225
364
  : undefined,
365
+ revisions,
226
366
  exported_at_utc: exportTimestamp,
227
367
  bookmarks_removed: clean ? bookmarksRemoved : 0,
368
+ blocks_restored: blocksRestored,
369
+ tracked_blocks_restored: trackedBlocksRestored,
370
+ tracked_restore_error: trackedRestoreError,
228
371
  returned_variants: returnedVariants,
229
372
  available_variants: ['clean', 'redline'],
230
373
  cache_hit: cacheHit,
231
374
  format_source: formatSource,
232
375
  parameter_warning: parameterWarning,
233
- validation: validation.warnings.length > 0
234
- ? { warnings: validation.warnings.map(w => ({ code: w.code, message: w.message })) }
376
+ validation: validation.warnings.length > 0 || (aiRevisionValidation?.warnings.length ?? 0) > 0
377
+ ? {
378
+ warnings: [
379
+ ...validation.warnings.map(w => ({ code: w.code, message: w.message })),
380
+ ...(aiRevisionValidation?.warnings ?? []),
381
+ ],
382
+ }
235
383
  : { valid: true },
236
384
  message: (trackedReconstructionMode === 'rebuild' ? 'WARNING: Tracked output used REBUILD mode which may alter table structure and fonts. Verify tables in Word. ' : '') +
237
385
  (format === 'clean'
@@ -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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"}