@usejunior/docx-mcp 0.0.1 → 0.1.2

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 (164) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +208 -28
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/cli/commands/compare.d.ts +20 -0
  5. package/dist/cli/commands/compare.d.ts.map +1 -0
  6. package/dist/cli/commands/compare.js +54 -0
  7. package/dist/cli/commands/compare.js.map +1 -0
  8. package/dist/cli/commands/serve.d.ts +2 -0
  9. package/dist/cli/commands/serve.d.ts.map +1 -0
  10. package/dist/cli/commands/serve.js +5 -0
  11. package/dist/cli/commands/serve.js.map +1 -0
  12. package/dist/cli/index.d.ts +13 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +145 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/cli.d.ts +3 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +8 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/conformance/harness.d.ts +73 -0
  21. package/dist/conformance/harness.d.ts.map +1 -0
  22. package/dist/conformance/harness.js +609 -0
  23. package/dist/conformance/harness.js.map +1 -0
  24. package/dist/error_utils.d.ts +3 -0
  25. package/dist/error_utils.d.ts.map +1 -0
  26. package/dist/error_utils.js +19 -0
  27. package/dist/error_utils.js.map +1 -0
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +3 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/server.d.ts +80 -0
  33. package/dist/server.d.ts.map +1 -0
  34. package/dist/server.js +112 -0
  35. package/dist/server.js.map +1 -0
  36. package/dist/session/manager.d.ts +84 -0
  37. package/dist/session/manager.d.ts.map +1 -0
  38. package/dist/session/manager.js +155 -0
  39. package/dist/session/manager.js.map +1 -0
  40. package/dist/tool_catalog.d.ts +439 -0
  41. package/dist/tool_catalog.d.ts.map +1 -0
  42. package/dist/tool_catalog.js +314 -0
  43. package/dist/tool_catalog.js.map +1 -0
  44. package/dist/tools/accept_changes.d.ts +7 -0
  45. package/dist/tools/accept_changes.d.ts.map +1 -0
  46. package/dist/tools/accept_changes.js +21 -0
  47. package/dist/tools/accept_changes.js.map +1 -0
  48. package/dist/tools/add_comment.d.ts +13 -0
  49. package/dist/tools/add_comment.d.ts.map +1 -0
  50. package/dist/tools/add_comment.js +77 -0
  51. package/dist/tools/add_comment.js.map +1 -0
  52. package/dist/tools/add_footnote.d.ts +10 -0
  53. package/dist/tools/add_footnote.d.ts.map +1 -0
  54. package/dist/tools/add_footnote.js +45 -0
  55. package/dist/tools/add_footnote.js.map +1 -0
  56. package/dist/tools/apply_plan.d.ts +9 -0
  57. package/dist/tools/apply_plan.d.ts.map +1 -0
  58. package/dist/tools/apply_plan.js +346 -0
  59. package/dist/tools/apply_plan.js.map +1 -0
  60. package/dist/tools/clear_session.d.ts +9 -0
  61. package/dist/tools/clear_session.d.ts.map +1 -0
  62. package/dist/tools/clear_session.js +66 -0
  63. package/dist/tools/clear_session.js.map +1 -0
  64. package/dist/tools/compare_documents.d.ts +12 -0
  65. package/dist/tools/compare_documents.d.ts.map +1 -0
  66. package/dist/tools/compare_documents.js +121 -0
  67. package/dist/tools/compare_documents.js.map +1 -0
  68. package/dist/tools/comparison_defaults.d.ts +9 -0
  69. package/dist/tools/comparison_defaults.d.ts.map +1 -0
  70. package/dist/tools/comparison_defaults.js +8 -0
  71. package/dist/tools/comparison_defaults.js.map +1 -0
  72. package/dist/tools/delete_comment.d.ts +8 -0
  73. package/dist/tools/delete_comment.d.ts.map +1 -0
  74. package/dist/tools/delete_comment.js +28 -0
  75. package/dist/tools/delete_comment.js.map +1 -0
  76. package/dist/tools/delete_footnote.d.ts +8 -0
  77. package/dist/tools/delete_footnote.d.ts.map +1 -0
  78. package/dist/tools/delete_footnote.js +34 -0
  79. package/dist/tools/delete_footnote.js.map +1 -0
  80. package/dist/tools/docx_archive_guard.d.ts +9 -0
  81. package/dist/tools/docx_archive_guard.d.ts.map +1 -0
  82. package/dist/tools/docx_archive_guard.js +64 -0
  83. package/dist/tools/docx_archive_guard.js.map +1 -0
  84. package/dist/tools/download.d.ts +20 -0
  85. package/dist/tools/download.d.ts.map +1 -0
  86. package/dist/tools/download.js +252 -0
  87. package/dist/tools/download.js.map +1 -0
  88. package/dist/tools/duplicate_document.d.ts +8 -0
  89. package/dist/tools/duplicate_document.d.ts.map +1 -0
  90. package/dist/tools/duplicate_document.js +90 -0
  91. package/dist/tools/duplicate_document.js.map +1 -0
  92. package/dist/tools/extract_revisions.d.ts +9 -0
  93. package/dist/tools/extract_revisions.d.ts.map +1 -0
  94. package/dist/tools/extract_revisions.js +52 -0
  95. package/dist/tools/extract_revisions.js.map +1 -0
  96. package/dist/tools/format_layout.d.ts +35 -0
  97. package/dist/tools/format_layout.d.ts.map +1 -0
  98. package/dist/tools/format_layout.js +332 -0
  99. package/dist/tools/format_layout.js.map +1 -0
  100. package/dist/tools/get_comments.d.ts +7 -0
  101. package/dist/tools/get_comments.d.ts.map +1 -0
  102. package/dist/tools/get_comments.js +32 -0
  103. package/dist/tools/get_comments.js.map +1 -0
  104. package/dist/tools/get_footnotes.d.ts +7 -0
  105. package/dist/tools/get_footnotes.d.ts.map +1 -0
  106. package/dist/tools/get_footnotes.js +25 -0
  107. package/dist/tools/get_footnotes.js.map +1 -0
  108. package/dist/tools/get_session_status.d.ts +7 -0
  109. package/dist/tools/get_session_status.d.ts.map +1 -0
  110. package/dist/tools/get_session_status.js +41 -0
  111. package/dist/tools/get_session_status.js.map +1 -0
  112. package/dist/tools/grep.d.ts +13 -0
  113. package/dist/tools/grep.d.ts.map +1 -0
  114. package/dist/tools/grep.js +129 -0
  115. package/dist/tools/grep.js.map +1 -0
  116. package/dist/tools/has_tracked_changes.d.ts +7 -0
  117. package/dist/tools/has_tracked_changes.d.ts.map +1 -0
  118. package/dist/tools/has_tracked_changes.js +74 -0
  119. package/dist/tools/has_tracked_changes.js.map +1 -0
  120. package/dist/tools/init_plan.d.ts +9 -0
  121. package/dist/tools/init_plan.d.ts.map +1 -0
  122. package/dist/tools/init_plan.js +44 -0
  123. package/dist/tools/init_plan.js.map +1 -0
  124. package/dist/tools/insert_paragraph.d.ts +12 -0
  125. package/dist/tools/insert_paragraph.d.ts.map +1 -0
  126. package/dist/tools/insert_paragraph.js +514 -0
  127. package/dist/tools/insert_paragraph.js.map +1 -0
  128. package/dist/tools/merge_plans.d.ts +7 -0
  129. package/dist/tools/merge_plans.d.ts.map +1 -0
  130. package/dist/tools/merge_plans.js +408 -0
  131. package/dist/tools/merge_plans.js.map +1 -0
  132. package/dist/tools/open_document.d.ts +7 -0
  133. package/dist/tools/open_document.d.ts.map +1 -0
  134. package/dist/tools/open_document.js +102 -0
  135. package/dist/tools/open_document.js.map +1 -0
  136. package/dist/tools/path_policy.d.ts +13 -0
  137. package/dist/tools/path_policy.d.ts.map +1 -0
  138. package/dist/tools/path_policy.js +109 -0
  139. package/dist/tools/path_policy.js.map +1 -0
  140. package/dist/tools/preview.d.ts +5 -0
  141. package/dist/tools/preview.d.ts.map +1 -0
  142. package/dist/tools/preview.js +11 -0
  143. package/dist/tools/preview.js.map +1 -0
  144. package/dist/tools/read_file.d.ts +12 -0
  145. package/dist/tools/read_file.d.ts.map +1 -0
  146. package/dist/tools/read_file.js +113 -0
  147. package/dist/tools/read_file.js.map +1 -0
  148. package/dist/tools/replace_text.d.ts +13 -0
  149. package/dist/tools/replace_text.d.ts.map +1 -0
  150. package/dist/tools/replace_text.js +628 -0
  151. package/dist/tools/replace_text.js.map +1 -0
  152. package/dist/tools/session_resolution.d.ts +29 -0
  153. package/dist/tools/session_resolution.d.ts.map +1 -0
  154. package/dist/tools/session_resolution.js +158 -0
  155. package/dist/tools/session_resolution.js.map +1 -0
  156. package/dist/tools/types.d.ts +15 -0
  157. package/dist/tools/types.d.ts.map +1 -0
  158. package/dist/tools/types.js +7 -0
  159. package/dist/tools/types.js.map +1 -0
  160. package/dist/tools/update_footnote.d.ts +9 -0
  161. package/dist/tools/update_footnote.d.ts.map +1 -0
  162. package/dist/tools/update_footnote.js +39 -0
  163. package/dist/tools/update_footnote.js.map +1 -0
  164. package/package.json +74 -6
@@ -0,0 +1,129 @@
1
+ import { errorMessage } from "../error_utils.js";
2
+ import { err, ok } from './types.js';
3
+ import { mergeSessionResolutionMetadata, resolveSessionForTool } from './session_resolution.js';
4
+ export async function grep(manager, params) {
5
+ try {
6
+ const resolved = await resolveSessionForTool(manager, params, { toolName: 'grep' });
7
+ if (!resolved.ok)
8
+ return resolved.response;
9
+ const { session, metadata } = resolved;
10
+ const patterns = params.patterns ?? [];
11
+ const caseSensitive = params.case_sensitive ?? false;
12
+ const wholeWord = params.whole_word ?? false;
13
+ const maxResults = params.max_results ?? 100;
14
+ const contextChars = params.context_chars ?? 50;
15
+ const dedupeByParagraph = params.dedupe_by_paragraph ?? true;
16
+ const patternStr = wholeWord ? `\\b(${patterns.join('|')})\\b` : `(${patterns.join('|')})`;
17
+ let re;
18
+ try {
19
+ re = new RegExp(patternStr, caseSensitive ? 'g' : 'gi');
20
+ }
21
+ catch (e) {
22
+ // Mirror Python behavior: return success but include an error in payload.
23
+ return ok(mergeSessionResolutionMetadata({
24
+ session_id: session.sessionId,
25
+ patterns,
26
+ dedupe_by_paragraph: dedupeByParagraph,
27
+ total_matches: 0,
28
+ paragraphs_with_matches: 0,
29
+ matches: [],
30
+ error: `Invalid regex pattern: ${errorMessage(e)}`,
31
+ }, metadata));
32
+ }
33
+ const { paragraphs } = session.doc.readParagraphs();
34
+ const typed = paragraphs;
35
+ const { nodes } = session.doc.buildDocumentView({ includeSemanticTags: true });
36
+ const locatorById = new Map(nodes.map((n) => [n.id, { list_label: n.list_label ?? '', header: n.header ?? '' }]));
37
+ const matches = [];
38
+ const paragraphsWithMatches = new Set();
39
+ let totalMatches = 0;
40
+ let matchesTruncated = false;
41
+ for (let paraIndex = 0; paraIndex < typed.length; paraIndex += 1) {
42
+ const p = typed[paraIndex];
43
+ re.lastIndex = 0;
44
+ const text = p.text;
45
+ let m;
46
+ let paragraphMatchCount = 0;
47
+ let firstMatchText = '';
48
+ let firstMatchIndex = -1;
49
+ // eslint-disable-next-line no-cond-assign
50
+ while ((m = re.exec(text)) !== null) {
51
+ totalMatches += 1;
52
+ paragraphMatchCount += 1;
53
+ if (firstMatchIndex === -1) {
54
+ firstMatchText = m[0];
55
+ firstMatchIndex = m.index;
56
+ }
57
+ if (!dedupeByParagraph) {
58
+ if (matches.length < maxResults) {
59
+ const start = Math.max(0, m.index - contextChars);
60
+ const end = Math.min(text.length, m.index + m[0].length + contextChars);
61
+ const before = text.slice(start, m.index);
62
+ const after = text.slice(m.index + m[0].length, end);
63
+ const locator = locatorById.get(p.id) ?? { list_label: '', header: '' };
64
+ matches.push({
65
+ para_id: p.id,
66
+ para_index_1based: paraIndex + 1,
67
+ list_label: locator.list_label,
68
+ header: locator.header,
69
+ match_count_in_paragraph: 1,
70
+ match_text: m[0],
71
+ context: `...${before}>>>${m[0]}<<<${after}...`,
72
+ });
73
+ }
74
+ else {
75
+ matchesTruncated = true;
76
+ }
77
+ }
78
+ if (m[0].length === 0)
79
+ break; // safety for zero-length regex
80
+ }
81
+ if (paragraphMatchCount > 0) {
82
+ paragraphsWithMatches.add(p.id);
83
+ if (dedupeByParagraph) {
84
+ if (matches.length < maxResults) {
85
+ const start = Math.max(0, firstMatchIndex - contextChars);
86
+ const end = Math.min(text.length, firstMatchIndex + firstMatchText.length + contextChars);
87
+ const before = text.slice(start, firstMatchIndex);
88
+ const after = text.slice(firstMatchIndex + firstMatchText.length, end);
89
+ const locator = locatorById.get(p.id) ?? { list_label: '', header: '' };
90
+ matches.push({
91
+ para_id: p.id,
92
+ para_index_1based: paraIndex + 1,
93
+ list_label: locator.list_label,
94
+ header: locator.header,
95
+ match_count_in_paragraph: paragraphMatchCount,
96
+ match_text: firstMatchText,
97
+ context: `...${before}>>>${firstMatchText}<<<${after}...`,
98
+ });
99
+ }
100
+ else {
101
+ matchesTruncated = true;
102
+ }
103
+ }
104
+ }
105
+ }
106
+ const response = mergeSessionResolutionMetadata({
107
+ session_id: session.sessionId,
108
+ patterns,
109
+ dedupe_by_paragraph: dedupeByParagraph,
110
+ total_matches: totalMatches,
111
+ paragraphs_with_matches: paragraphsWithMatches.size,
112
+ matches,
113
+ matches_returned: matches.length,
114
+ max_results_applied: maxResults,
115
+ matches_truncated: matchesTruncated,
116
+ }, metadata);
117
+ if (matchesTruncated) {
118
+ response.truncation_note = dedupeByParagraph
119
+ ? 'max_results limits returned rows to matching paragraphs while total_matches counts all regex hits. Increase max_results or set dedupe_by_paragraph=false for per-match rows.'
120
+ : 'max_results limits returned rows to individual matches while total_matches counts all regex hits. Increase max_results to see more matches.';
121
+ }
122
+ return ok(response);
123
+ }
124
+ catch (e) {
125
+ const msg = errorMessage(e);
126
+ return err('SEARCH_ERROR', `Failed to search document: ${msg}`, 'Check patterns are valid regex and try again.');
127
+ }
128
+ }
129
+ //# sourceMappingURL=grep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAqB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhG,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,OAAuB,EACvB,MASC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAC3C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC;QAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;QAChD,MAAM,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAE7D,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC3F,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,EAAE,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,0EAA0E;YAC1E,OAAO,EAAE,CAAC,8BAA8B,CAAC;gBACvC,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,QAAQ;gBACR,mBAAmB,EAAE,iBAAiB;gBACtC,aAAa,EAAE,CAAC;gBAChB,uBAAuB,EAAE,CAAC;gBAC1B,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,0BAA0B,YAAY,CAAC,CAAC,CAAC,EAAE;aACnD,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,UAAiD,CAAC;QAChE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CACrF,CAAC;QAEF,MAAM,OAAO,GAQR,EAAE,CAAC;QACR,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;QAChD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YACpB,IAAI,CAAyB,CAAC;YAC9B,IAAI,mBAAmB,GAAG,CAAC,CAAC;YAC5B,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;YACzB,0CAA0C;YAC1C,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpC,YAAY,IAAI,CAAC,CAAC;gBAClB,mBAAmB,IAAI,CAAC,CAAC;gBACzB,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC3B,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtB,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC5B,CAAC;gBACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACvB,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;wBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC;wBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;wBACxE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;wBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;wBACrD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;wBACxE,OAAO,CAAC,IAAI,CAAC;4BACX,OAAO,EAAE,CAAC,CAAC,EAAE;4BACb,iBAAiB,EAAE,SAAS,GAAG,CAAC;4BAChC,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;4BACtB,wBAAwB,EAAE,CAAC;4BAC3B,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;4BAChB,OAAO,EAAE,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK;yBAChD,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,gBAAgB,GAAG,IAAI,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM,CAAC,+BAA+B;YAC/D,CAAC;YACD,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;gBAC5B,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChC,IAAI,iBAAiB,EAAE,CAAC;oBACtB,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;wBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,YAAY,CAAC,CAAC;wBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;wBAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;wBAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;wBACvE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;wBACxE,OAAO,CAAC,IAAI,CAAC;4BACX,OAAO,EAAE,CAAC,CAAC,EAAE;4BACb,iBAAiB,EAAE,SAAS,GAAG,CAAC;4BAChC,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;4BACtB,wBAAwB,EAAE,mBAAmB;4BAC7C,UAAU,EAAE,cAAc;4BAC1B,OAAO,EAAE,MAAM,MAAM,MAAM,cAAc,MAAM,KAAK,KAAK;yBAC1D,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,gBAAgB,GAAG,IAAI,CAAC;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,8BAA8B,CAAC;YAC9C,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,QAAQ;YACR,mBAAmB,EAAE,iBAAiB;YACtC,aAAa,EAAE,YAAY;YAC3B,uBAAuB,EAAE,qBAAqB,CAAC,IAAI;YACnD,OAAO;YACP,gBAAgB,EAAE,OAAO,CAAC,MAAM;YAChC,mBAAmB,EAAE,UAAU;YAC/B,iBAAiB,EAAE,gBAAgB;SACpC,EAAE,QAAQ,CAA4B,CAAC;QACxC,IAAI,gBAAgB,EAAE,CAAC;YACrB,QAAQ,CAAC,eAAe,GAAG,iBAAiB;gBAC1C,CAAC,CAAC,8KAA8K;gBAChL,CAAC,CAAC,6IAA6I,CAAC;QACpJ,CAAC;QACD,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC,cAAc,EAAE,8BAA8B,GAAG,EAAE,EAAE,+CAA+C,CAAC,CAAC;IACnH,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { SessionManager } from '../session/manager.js';
2
+ import { type ToolResponse } from './types.js';
3
+ export declare function hasTrackedChanges_tool(manager: SessionManager, params: {
4
+ session_id?: string;
5
+ file_path?: string;
6
+ }): Promise<ToolResponse>;
7
+ //# sourceMappingURL=has_tracked_changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has_tracked_changes.d.ts","sourceRoot":"","sources":["../../src/tools/has_tracked_changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AA4ExD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC,YAAY,CAAC,CAmBvB"}
@@ -0,0 +1,74 @@
1
+ import { errorMessage } from "../error_utils.js";
2
+ import { mergeSessionResolutionMetadata, resolveSessionForTool } from './session_resolution.js';
3
+ import { err, ok } from './types.js';
4
+ const W_NS = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';
5
+ const TRACKED_CHANGE_LOCALS = ['ins', 'del', 'moveFrom', 'moveTo'];
6
+ const PROPERTY_CHANGE_LOCALS = [
7
+ 'rPrChange', 'pPrChange', 'sectPrChange',
8
+ 'tblPrChange', 'trPrChange', 'tcPrChange',
9
+ ];
10
+ function countMarkers(doc) {
11
+ const body = doc.getElementsByTagNameNS(W_NS, 'body').item(0);
12
+ if (!body) {
13
+ return {
14
+ total_markers: 0,
15
+ content_markers: 0,
16
+ property_markers: 0,
17
+ insertions: 0,
18
+ deletions: 0,
19
+ move_from: 0,
20
+ move_to: 0,
21
+ rpr_changes: 0,
22
+ ppr_changes: 0,
23
+ sectpr_changes: 0,
24
+ tblpr_changes: 0,
25
+ trpr_changes: 0,
26
+ tcpr_changes: 0,
27
+ };
28
+ }
29
+ const countByLocal = (localName) => body.getElementsByTagNameNS(W_NS, localName).length;
30
+ const contentCounts = {
31
+ insertions: countByLocal(TRACKED_CHANGE_LOCALS[0]),
32
+ deletions: countByLocal(TRACKED_CHANGE_LOCALS[1]),
33
+ move_from: countByLocal(TRACKED_CHANGE_LOCALS[2]),
34
+ move_to: countByLocal(TRACKED_CHANGE_LOCALS[3]),
35
+ };
36
+ const propertyCounts = {
37
+ rpr_changes: countByLocal(PROPERTY_CHANGE_LOCALS[0]),
38
+ ppr_changes: countByLocal(PROPERTY_CHANGE_LOCALS[1]),
39
+ sectpr_changes: countByLocal(PROPERTY_CHANGE_LOCALS[2]),
40
+ tblpr_changes: countByLocal(PROPERTY_CHANGE_LOCALS[3]),
41
+ trpr_changes: countByLocal(PROPERTY_CHANGE_LOCALS[4]),
42
+ tcpr_changes: countByLocal(PROPERTY_CHANGE_LOCALS[5]),
43
+ };
44
+ const content_markers = Object.values(contentCounts).reduce((sum, value) => sum + value, 0);
45
+ const property_markers = Object.values(propertyCounts).reduce((sum, value) => sum + value, 0);
46
+ return {
47
+ total_markers: content_markers + property_markers,
48
+ content_markers,
49
+ property_markers,
50
+ ...contentCounts,
51
+ ...propertyCounts,
52
+ };
53
+ }
54
+ export async function hasTrackedChanges_tool(manager, params) {
55
+ try {
56
+ const resolved = await resolveSessionForTool(manager, params, { toolName: 'has_tracked_changes' });
57
+ if (!resolved.ok)
58
+ return resolved.response;
59
+ const { session, metadata } = resolved;
60
+ const docClone = session.doc.getDocumentXmlClone();
61
+ const marker_stats = countMarkers(docClone);
62
+ return ok(mergeSessionResolutionMetadata({
63
+ session_id: session.sessionId,
64
+ edit_revision: session.editRevision,
65
+ has_tracked_changes: marker_stats.total_markers > 0,
66
+ scope: 'document_body',
67
+ marker_stats,
68
+ }, metadata));
69
+ }
70
+ catch (e) {
71
+ return err('TRACKED_CHANGES_CHECK_ERROR', errorMessage(e));
72
+ }
73
+ }
74
+ //# sourceMappingURL=has_tracked_changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has_tracked_changes.js","sourceRoot":"","sources":["../../src/tools/has_tracked_changes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SessionManager } from '../session/manager.js';
2
+ import { type ToolResponse } from './types.js';
3
+ export declare function initPlan(manager: SessionManager, params: {
4
+ session_id?: string;
5
+ file_path?: string;
6
+ plan_name?: string;
7
+ orchestrator_id?: string;
8
+ }): Promise<ToolResponse>;
9
+ //# sourceMappingURL=init_plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init_plan.d.ts","sourceRoot":"","sources":["../../src/tools/init_plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAmBxD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,YAAY,CAAC,CAsBvB"}
@@ -0,0 +1,44 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { errorMessage } from "../error_utils.js";
3
+ import { err, ok } from './types.js';
4
+ import { mergeSessionResolutionMetadata, resolveSessionForTool } from './session_resolution.js';
5
+ function createPlanContextId() {
6
+ const alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
7
+ const bytes = randomBytes(12);
8
+ let suffix = '';
9
+ for (let i = 0; i < 12; i += 1) {
10
+ suffix += alphabet[bytes[i] % alphabet.length];
11
+ }
12
+ return `plctx_${suffix}`;
13
+ }
14
+ function optionalString(value) {
15
+ if (typeof value !== 'string')
16
+ return undefined;
17
+ const trimmed = value.trim();
18
+ return trimmed.length > 0 ? trimmed : undefined;
19
+ }
20
+ export async function initPlan(manager, params) {
21
+ try {
22
+ const resolved = await resolveSessionForTool(manager, params, { toolName: 'init_plan' });
23
+ if (!resolved.ok)
24
+ return resolved.response;
25
+ const { session, metadata } = resolved;
26
+ return ok(mergeSessionResolutionMetadata({
27
+ plan_context_id: createPlanContextId(),
28
+ session_id: session.sessionId,
29
+ base_revision: session.editRevision,
30
+ edit_count: session.editCount,
31
+ created_at: new Date().toISOString(),
32
+ plan_context: {
33
+ plan_name: optionalString(params.plan_name) ?? null,
34
+ orchestrator_id: optionalString(params.orchestrator_id) ?? null,
35
+ document_filename: session.filename,
36
+ },
37
+ }, metadata));
38
+ }
39
+ catch (e) {
40
+ const msg = errorMessage(e);
41
+ return err('PLAN_INIT_ERROR', `Failed to initialize plan context: ${msg}`);
42
+ }
43
+ }
44
+ //# sourceMappingURL=init_plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init_plan.js","sourceRoot":"","sources":["../../src/tools/init_plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAqB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhG,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAAG,gEAAgE,CAAC;IAClF,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,SAAS,MAAM,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAuB,EACvB,MAKC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAC3C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAEvC,OAAO,EAAE,CAAC,8BAA8B,CAAC;YACvC,eAAe,EAAE,mBAAmB,EAAE;YACtC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,YAAY,EAAE;gBACZ,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI;gBACnD,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,IAAI;gBAC/D,iBAAiB,EAAE,OAAO,CAAC,QAAQ;aACpC;SACF,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC,iBAAiB,EAAE,sCAAsC,GAAG,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { SessionManager } from '../session/manager.js';
2
+ import { type ToolResponse } from './types.js';
3
+ export declare function insertParagraph(manager: SessionManager, params: {
4
+ session_id?: string;
5
+ file_path?: string;
6
+ positional_anchor_node_id: string;
7
+ new_string: string;
8
+ instruction: string;
9
+ position?: string;
10
+ style_source_id?: string;
11
+ }): Promise<ToolResponse>;
12
+ //# sourceMappingURL=insert_paragraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert_paragraph.d.ts","sourceRoot":"","sources":["../../src/tools/insert_paragraph.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAidxD,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE;IACN,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB,EAAE,MAAM,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,YAAY,CAAC,CAoGvB"}