@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
@@ -5,6 +5,7 @@ import { err, ok } from './types.js';
5
5
  import { enforceReadPathPolicy } from './path_policy.js';
6
6
  import { validateDocxArchiveSafety } from './docx_archive_guard.js';
7
7
  import { SAFE_DOCX_MCP_TOOLS } from '../tool_catalog.js';
8
+ import { loadOdfCore } from '../odf_loader.js';
8
9
  function getAvailableToolsSchema() {
9
10
  const toolDefaultsByName = {
10
11
  grep: { dedupe_by_paragraph: true },
@@ -38,10 +39,10 @@ export async function openDocument(manager, params) {
38
39
  return err('FILE_NOT_FOUND', `File not found: ${filePath}`, 'Copy the file to ~/Downloads/ or ~/Documents/ first, then pass that path.');
39
40
  }
40
41
  const extension = path.extname(expanded).toLowerCase();
41
- if (extension !== '.docx') {
42
+ if (extension !== '.docx' && extension !== '.odt') {
42
43
  const hint = extension === '.dotx'
43
- ? 'Only .docx files are supported in the local runtime. Convert the .dotx template to .docx before opening it.'
44
- : 'Only .docx files are supported.';
44
+ ? 'Only .docx and .odt files are supported in the local runtime. Convert the .dotx template to .docx before opening it.'
45
+ : 'Only .docx and .odt files are supported.';
45
46
  return err('INVALID_FILE_TYPE', `Invalid file type: ${extension}`, hint);
46
47
  }
47
48
  const policy = await enforceReadPathPolicy(filePath);
@@ -50,7 +51,38 @@ export async function openDocument(manager, params) {
50
51
  const safePath = policy.normalizedPath;
51
52
  const content = await fs.readFile(safePath);
52
53
  if (content.length > 50 * 1024 * 1024) {
53
- return err('VALIDATION_ERROR', 'File too large', 'Check file type (.docx only) and size (max 50MB).');
54
+ return err('VALIDATION_ERROR', 'File too large', 'Check file type (.docx or .odt only) and size (max 50MB).');
55
+ }
56
+ if (extension === '.odt') {
57
+ const odf = await loadOdfCore();
58
+ if (!odf) {
59
+ return err('MISSING_DEPENDENCY', 'ODF (.odt) support requires @usejunior/odf-core.', 'Install @usejunior/odf-core to enable ODF editing.');
60
+ }
61
+ const archiveGuard = await odf.validateOdfArchiveSafety(content);
62
+ if (!archiveGuard.ok)
63
+ return err(archiveGuard.code, archiveGuard.message, archiveGuard.hint);
64
+ const filename = path.basename(safePath);
65
+ const archive = await odf.OdfArchive.load(content);
66
+ const doc = odf.OdfDocument.fromContentXml(await archive.getContentXml());
67
+ const session = await manager.createOdfSession(content, filename, safePath, archive, doc);
68
+ const paragraphCount = session.doc.getParagraphs().length;
69
+ return ok({
70
+ file_path: manager.normalizePath(session.originalPath),
71
+ provider: 'odf',
72
+ expires_at: session.expiresAt.toISOString(),
73
+ document: {
74
+ filename,
75
+ paragraphs: paragraphCount,
76
+ size_bytes: content.length,
77
+ },
78
+ normalization: { runs_merged: 0, redlines_simplified: 0, double_elevations_fixed: 0, normalization_skipped: true },
79
+ save_defaults: {
80
+ default_variants: ['odt'],
81
+ default_save_format: 'odt',
82
+ supports_variant_override: false,
83
+ },
84
+ tools: getAvailableToolsSchema(),
85
+ });
54
86
  }
55
87
  const archiveGuard = await validateDocxArchiveSafety(content);
56
88
  if (!archiveGuard.ok)
@@ -1 +1 @@
1
- {"version":3,"file":"open_document.js","sourceRoot":"","sources":["../../src/tools/open_document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,GAAG,EAAE,EAAE,EAAqB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,SAAS,uBAAuB;IAM9B,MAAM,kBAAkB,GAA4C;QAClE,IAAI,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE;QACnC,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM;YACnB,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;SACxC;KACF,CAAC;IAEF,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,QAAQ;YACb,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE;YAC1E,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,WAAoC;IACpE,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACxF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuB,EACvB,MAA2D;IAE3D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5B,OAAO,GAAG,CACR,gBAAgB,EAChB,mBAAmB,QAAQ,EAAE,EAC7B,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,SAAS,KAAK,OAAO;gBAChC,CAAC,CAAC,6GAA6G;gBAC/G,CAAC,CAAC,iCAAiC,CAAC;YACtC,OAAO,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;QAEvC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,mDAAmD,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC,OAAiB,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,CAAC,EAAE;YAAE,OAAO,YAAY,CAAC,QAAQ,CAAC;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEnF,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACnE,iBAAiB,EAAE,MAAM,CAAC,kBAAkB;SAC7C,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;YACR,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC;YACtD,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC3C,QAAQ,EAAE;gBACR,QAAQ;gBACR,UAAU,EAAE,cAAc;gBAC1B,UAAU,EAAE,OAAO,CAAC,MAAM;aAC3B;YACD,aAAa,EAAE,OAAO,CAAC,kBAAkB;gBACvC,CAAC,CAAC;oBACE,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC,UAAU;oBAClD,oBAAoB,EAAE,OAAO,CAAC,kBAAkB,CAAC,eAAe;oBAChE,mBAAmB,EAAE,OAAO,CAAC,kBAAkB,CAAC,oBAAoB;oBACpE,uBAAuB,EAAE,OAAO,CAAC,kBAAkB,CAAC,qBAAqB;oBACzE,qBAAqB,EAAE,KAAK;iBAC7B;gBACH,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE;YACvG,aAAa,EAAE;gBACb,gBAAgB,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;gBACtC,mBAAmB,EAAE,MAAM;gBAC3B,yBAAyB,EAAE,IAAI;aAChC;YACD,KAAK,EAAE,uBAAuB,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,iBAAiB,EAAE,wBAAwB,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,yCAAyC,CAAC,CAAC;IACtH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"open_document.js","sourceRoot":"","sources":["../../src/tools/open_document.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,15 @@ export type PathPolicyOutcome = {
8
8
  ok: false;
9
9
  response: ToolResponse;
10
10
  };
11
+ export declare function canonicalizePath(inputPath: string): Promise<string>;
12
+ /**
13
+ * True when two paths resolve to the same filesystem location. Canonicalizes both via realpath (with a
14
+ * lexical fallback for paths that do not exist yet) so a symlink can't disguise a clobber of an input
15
+ * document behind a different-looking output path. Shared source-clobber guard for the write tools
16
+ * (issue #313); folded out of the export-local guard so all write tools enforce it identically.
17
+ */
18
+ export declare function resolvesToSamePath(a: string, b: string): Promise<boolean>;
19
+ export declare function getPlatformTempDefaults(platform?: NodeJS.Platform): string[];
11
20
  export declare function enforceReadPathPolicy(inputPath: string): Promise<PathPolicyOutcome>;
12
21
  export declare function enforceWritePathPolicy(inputPath: string): Promise<PathPolicyOutcome>;
13
22
  //# sourceMappingURL=path_policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path_policy.d.ts","sourceRoot":"","sources":["../../src/tools/path_policy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GACzB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AA8EN,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoBzF;AAED,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoB1F"}
1
+ {"version":3,"file":"path_policy.d.ts","sourceRoot":"","sources":["../../src/tools/path_policy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GACzB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAUN,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOzE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/E;AAQD,wBAAgB,uBAAuB,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,EAAE,CAI9F;AAoGD,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoBzF;AAED,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoB1F"}
@@ -9,7 +9,7 @@ function expandPath(inputPath) {
9
9
  function normalizePath(inputPath) {
10
10
  return path.resolve(expandPath(inputPath));
11
11
  }
12
- async function canonicalizePath(inputPath) {
12
+ export async function canonicalizePath(inputPath) {
13
13
  const normalized = normalizePath(inputPath);
14
14
  try {
15
15
  return await fs.realpath(normalized);
@@ -18,6 +18,28 @@ async function canonicalizePath(inputPath) {
18
18
  return normalized;
19
19
  }
20
20
  }
21
+ /**
22
+ * True when two paths resolve to the same filesystem location. Canonicalizes both via realpath (with a
23
+ * lexical fallback for paths that do not exist yet) so a symlink can't disguise a clobber of an input
24
+ * document behind a different-looking output path. Shared source-clobber guard for the write tools
25
+ * (issue #313); folded out of the export-local guard so all write tools enforce it identically.
26
+ */
27
+ export async function resolvesToSamePath(a, b) {
28
+ return (await canonicalizePath(a)) === (await canonicalizePath(b));
29
+ }
30
+ // On Linux `/private/tmp` does not exist by default. If we listed it as a root,
31
+ // `canonicalizePath`'s realpath-fallback would leave it as a ghost entry whose
32
+ // subpaths `resolveWritePathWithExistingAncestor` would still match (walking up
33
+ // to `/` as the existing ancestor), silently allowing writes the user never
34
+ // opted into. Restrict `/private/tmp` to darwin where it is the canonical form
35
+ // of `/tmp`. Windows already covers `%TEMP%/%TMP%` via `os.tmpdir()`.
36
+ export function getPlatformTempDefaults(platform = process.platform) {
37
+ if (platform === 'darwin')
38
+ return ['/tmp', '/private/tmp'];
39
+ if (platform === 'win32')
40
+ return [];
41
+ return ['/tmp'];
42
+ }
21
43
  async function resolveAllowedRoots() {
22
44
  const configured = process.env.SAFE_DOCX_ALLOWED_ROOTS;
23
45
  const fromEnv = configured
@@ -28,7 +50,7 @@ async function resolveAllowedRoots() {
28
50
  : [];
29
51
  const defaults = fromEnv.length > 0
30
52
  ? fromEnv
31
- : [process.env.HOME ?? '', os.tmpdir()].filter((entry) => entry.length > 0);
53
+ : [process.env.HOME ?? '', os.tmpdir(), ...getPlatformTempDefaults()].filter((entry) => entry.length > 0);
32
54
  const out = [];
33
55
  const seen = new Set();
34
56
  for (const rawRoot of defaults) {
@@ -45,9 +67,48 @@ function isWithinRoot(targetPath, rootPath) {
45
67
  return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
46
68
  }
47
69
  function policyError(type, inputPath, resolvedPath, allowedRoots) {
48
- return err('PATH_NOT_ALLOWED', `Refusing to ${type} path outside allowed roots: ${inputPath} -> ${resolvedPath}`, `Allowed roots: ${allowedRoots.join(', ')}. Configure SAFE_DOCX_ALLOWED_ROOTS if needed.`);
70
+ const suggestedRoot = path.dirname(resolvedPath);
71
+ const exampleEnv = process.env.SAFE_DOCX_ALLOWED_ROOTS
72
+ ? `SAFE_DOCX_ALLOWED_ROOTS="$SAFE_DOCX_ALLOWED_ROOTS${path.delimiter}${suggestedRoot}"`
73
+ : `SAFE_DOCX_ALLOWED_ROOTS="${suggestedRoot}"`;
74
+ return err('PATH_NOT_ALLOWED', `Refusing to ${type} path outside allowed roots: ${inputPath} -> ${resolvedPath}`, [
75
+ `Allowed roots: ${allowedRoots.join(', ')}.`,
76
+ `To allow this path, restart the MCP server with ${exampleEnv}.`,
77
+ ].join(' '));
49
78
  }
50
- async function resolveWritePathWithExistingAncestor(normalizedPath) {
79
+ // Canonicalize a *write* target. Unlike a read, the final component may not exist yet, so we cannot
80
+ // simply `realpath` the whole path. The crux of the symlink-escape fix (issue #313) is that we must
81
+ // still resolve the final component when it *does* exist — including a dangling symlink — so the policy
82
+ // check judges where `fs.writeFile` will actually write, not where the link happens to live.
83
+ async function resolveWritePathCanonical(normalizedPath, seen = new Set()) {
84
+ // 1. Final component exists (regular file, directory, or symlink to an existing target): realpath
85
+ // resolves it fully — symmetric with enforceReadPathPolicy.
86
+ try {
87
+ return await fs.realpath(normalizedPath);
88
+ }
89
+ catch {
90
+ // Fall through: the final component does not currently resolve.
91
+ }
92
+ // 2. Dangling final component that is itself a symlink. `realpath` throws here, but `fs.writeFile`
93
+ // would happily follow the broken link and create its target. Follow it ourselves so the policy
94
+ // check lands on the real write destination rather than the link's (in-root) location.
95
+ let linkStat = null;
96
+ try {
97
+ linkStat = await fs.lstat(normalizedPath);
98
+ }
99
+ catch {
100
+ // Genuinely missing (not even a link): fall through to ancestor resolution.
101
+ }
102
+ if (linkStat?.isSymbolicLink()) {
103
+ if (seen.has(normalizedPath)) {
104
+ throw new Error(`Symlink cycle detected resolving: ${normalizedPath}`);
105
+ }
106
+ seen.add(normalizedPath);
107
+ const target = path.resolve(path.dirname(normalizedPath), await fs.readlink(normalizedPath));
108
+ return resolveWritePathCanonical(target, seen);
109
+ }
110
+ // 3. Genuinely-missing new file: resolve against the first existing ancestor (this also follows a
111
+ // symlinked parent directory via `realpath`). Preserves writing new files into existing dirs.
51
112
  let probe = path.dirname(normalizedPath);
52
113
  while (true) {
53
114
  try {
@@ -89,7 +150,7 @@ export async function enforceWritePathPolicy(inputPath) {
89
150
  const normalizedPath = normalizePath(inputPath);
90
151
  let resolvedPath;
91
152
  try {
92
- resolvedPath = await resolveWritePathWithExistingAncestor(normalizedPath);
153
+ resolvedPath = await resolveWritePathCanonical(normalizedPath);
93
154
  }
94
155
  catch (e) {
95
156
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"path_policy.js","sourceRoot":"","sources":["../../src/tools/path_policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path_policy.js","sourceRoot":"","sources":["../../src/tools/path_policy.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import { type ToolResponse } from './types.js';
2
2
  export declare function checkGDocsSupport(toolName: string): ToolResponse | null;
3
+ export declare function checkOdfSupport(toolName: string): ToolResponse | null;
3
4
  //# sourceMappingURL=provider_guard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider_guard.d.ts","sourceRoot":"","sources":["../../src/tools/provider_guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAOpD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CASvE"}
1
+ {"version":3,"file":"provider_guard.d.ts","sourceRoot":"","sources":["../../src/tools/provider_guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAYpD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CASvE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CASrE"}
@@ -3,10 +3,20 @@ const GDOCS_SUPPORTED_TOOLS = new Set([
3
3
  'read_file', 'replace_text', 'insert_paragraph', 'grep', 'save',
4
4
  'format_layout', 'get_file_status', 'close_file',
5
5
  ]);
6
+ const ODF_SUPPORTED_TOOLS = new Set([
7
+ 'read_file', 'replace_text', 'grep', 'insert_paragraph', 'add_comment', 'get_comments',
8
+ 'compare_documents', 'save', 'get_file_status', 'close_file',
9
+ ]);
6
10
  export function checkGDocsSupport(toolName) {
7
11
  if (!GDOCS_SUPPORTED_TOOLS.has(toolName)) {
8
12
  return err('UNSUPPORTED_FOR_PROVIDER', `'${toolName}' is not supported for Google Docs.`, 'This tool is only available for DOCX files.');
9
13
  }
10
14
  return null;
11
15
  }
16
+ export function checkOdfSupport(toolName) {
17
+ if (!ODF_SUPPORTED_TOOLS.has(toolName)) {
18
+ return err('UNSUPPORTED_FOR_ODF', `'${toolName}' is not supported for ODF (.odt) files.`, 'Use read_file, replace_text, grep, insert_paragraph, add_comment, get_comments, compare_documents, save, get_file_status, or close_file for .odt files.');
19
+ }
20
+ return null;
21
+ }
12
22
  //# sourceMappingURL=provider_guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider_guard.js","sourceRoot":"","sources":["../../src/tools/provider_guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAqB,MAAM,YAAY,CAAC;AAEpD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM;IAC/D,eAAe,EAAE,iBAAiB,EAAE,YAAY;CACjD,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,OAAO,GAAG,CACR,0BAA0B,EAC1B,IAAI,QAAQ,qCAAqC,EACjD,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"provider_guard.js","sourceRoot":"","sources":["../../src/tools/provider_guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAqB,MAAM,YAAY,CAAC;AAEpD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM;IAC/D,eAAe,EAAE,iBAAiB,EAAE,YAAY;CACjD,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc;IACtF,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY;CAC7D,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,OAAO,GAAG,CACR,0BAA0B,EAC1B,IAAI,QAAQ,qCAAqC,EACjD,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,GAAG,CACR,qBAAqB,EACrB,IAAI,QAAQ,0CAA0C,EACtD,yJAAyJ,CAC1J,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -7,5 +7,8 @@ export declare function readFile(manager: SessionManager, params: {
7
7
  node_ids?: string[];
8
8
  format?: string;
9
9
  show_formatting?: boolean;
10
+ comment_rendering?: string;
11
+ include_fingerprint?: boolean;
12
+ include_footnotes?: boolean;
10
13
  }): Promise<ToolResponse>;
11
14
  //# sourceMappingURL=read_file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read_file.d.ts","sourceRoot":"","sources":["../../src/tools/read_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AA4BxD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/H,OAAO,CAAC,YAAY,CAAC,CAiGvB"}
1
+ {"version":3,"file":"read_file.d.ts","sourceRoot":"","sources":["../../src/tools/read_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AA6RxD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GACA,OAAO,CAAC,YAAY,CAAC,CAkMvB"}