@usejunior/docx-mcp 0.10.0 → 0.11.1

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 (91) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +2 -0
  3. package/README.md +3 -3
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/cli/commands/edit.js +5 -5
  6. package/dist/cli/commands/edit.js.map +1 -1
  7. package/dist/cli/help.d.ts.map +1 -1
  8. package/dist/cli/help.js +1 -0
  9. package/dist/cli/help.js.map +1 -1
  10. package/dist/cli/index.js +1 -1
  11. package/dist/odf_loader.d.ts.map +1 -1
  12. package/dist/odf_loader.js +6 -5
  13. package/dist/odf_loader.js.map +1 -1
  14. package/dist/server.d.ts +5 -8
  15. package/dist/server.d.ts.map +1 -1
  16. package/dist/server.js +6 -9
  17. package/dist/server.js.map +1 -1
  18. package/dist/session/manager.d.ts +4 -0
  19. package/dist/session/manager.d.ts.map +1 -1
  20. package/dist/session/manager.js +16 -57
  21. package/dist/session/manager.js.map +1 -1
  22. package/dist/tool_catalog.d.ts +22 -36
  23. package/dist/tool_catalog.d.ts.map +1 -1
  24. package/dist/tool_catalog.js +24 -25
  25. package/dist/tool_catalog.js.map +1 -1
  26. package/dist/tools/add_comment.d.ts.map +1 -1
  27. package/dist/tools/add_comment.js +19 -5
  28. package/dist/tools/add_comment.js.map +1 -1
  29. package/dist/tools/add_footnote.d.ts.map +1 -1
  30. package/dist/tools/add_footnote.js +13 -3
  31. package/dist/tools/add_footnote.js.map +1 -1
  32. package/dist/tools/ai_revision_guard.d.ts +38 -0
  33. package/dist/tools/ai_revision_guard.d.ts.map +1 -0
  34. package/dist/tools/ai_revision_guard.js +115 -0
  35. package/dist/tools/ai_revision_guard.js.map +1 -0
  36. package/dist/tools/{apply_plan.d.ts → batch_edit.d.ts} +2 -2
  37. package/dist/tools/batch_edit.d.ts.map +1 -0
  38. package/dist/tools/{apply_plan.js → batch_edit.js} +216 -72
  39. package/dist/tools/batch_edit.js.map +1 -0
  40. package/dist/tools/clear_formatting.d.ts.map +1 -1
  41. package/dist/tools/clear_formatting.js +52 -42
  42. package/dist/tools/clear_formatting.js.map +1 -1
  43. package/dist/tools/convert_to_odt.d.ts +20 -0
  44. package/dist/tools/convert_to_odt.d.ts.map +1 -0
  45. package/dist/tools/convert_to_odt.js +74 -0
  46. package/dist/tools/convert_to_odt.js.map +1 -0
  47. package/dist/tools/delete_comment.d.ts.map +1 -1
  48. package/dist/tools/delete_comment.js +10 -1
  49. package/dist/tools/delete_comment.js.map +1 -1
  50. package/dist/tools/delete_footnote.d.ts.map +1 -1
  51. package/dist/tools/delete_footnote.js +10 -1
  52. package/dist/tools/delete_footnote.js.map +1 -1
  53. package/dist/tools/format_layout.d.ts.map +1 -1
  54. package/dist/tools/format_layout.js +16 -0
  55. package/dist/tools/format_layout.js.map +1 -1
  56. package/dist/tools/get_comments.d.ts.map +1 -1
  57. package/dist/tools/get_comments.js +9 -0
  58. package/dist/tools/get_comments.js.map +1 -1
  59. package/dist/tools/grep.d.ts.map +1 -1
  60. package/dist/tools/grep.js +13 -0
  61. package/dist/tools/grep.js.map +1 -1
  62. package/dist/tools/insert_paragraph.d.ts +5 -0
  63. package/dist/tools/insert_paragraph.d.ts.map +1 -1
  64. package/dist/tools/insert_paragraph.js +36 -26
  65. package/dist/tools/insert_paragraph.js.map +1 -1
  66. package/dist/tools/read_file.d.ts +1 -0
  67. package/dist/tools/read_file.d.ts.map +1 -1
  68. package/dist/tools/read_file.js +65 -72
  69. package/dist/tools/read_file.js.map +1 -1
  70. package/dist/tools/replace_text.d.ts +5 -0
  71. package/dist/tools/replace_text.d.ts.map +1 -1
  72. package/dist/tools/replace_text.js +65 -60
  73. package/dist/tools/replace_text.js.map +1 -1
  74. package/dist/tools/save.d.ts +19 -0
  75. package/dist/tools/save.d.ts.map +1 -1
  76. package/dist/tools/save.js +109 -8
  77. package/dist/tools/save.js.map +1 -1
  78. package/dist/tools/update_footnote.d.ts.map +1 -1
  79. package/dist/tools/update_footnote.js +18 -7
  80. package/dist/tools/update_footnote.js.map +1 -1
  81. package/package.json +8 -7
  82. package/dist/tools/apply_plan.d.ts.map +0 -1
  83. package/dist/tools/apply_plan.js.map +0 -1
  84. package/dist/tools/init_plan.d.ts +0 -8
  85. package/dist/tools/init_plan.d.ts.map +0 -1
  86. package/dist/tools/init_plan.js +0 -45
  87. package/dist/tools/init_plan.js.map +0 -1
  88. package/dist/tools/merge_plans.d.ts +0 -7
  89. package/dist/tools/merge_plans.d.ts.map +0 -1
  90. package/dist/tools/merge_plans.js +0 -408
  91. package/dist/tools/merge_plans.js.map +0 -1
@@ -1,408 +0,0 @@
1
- import { err, ok } from './types.js';
2
- import { errorMessage } from "../error_utils.js";
3
- function asRecord(value) {
4
- if (!value || typeof value !== 'object' || Array.isArray(value))
5
- return null;
6
- return value;
7
- }
8
- function asTrimmedString(value) {
9
- if (typeof value !== 'string')
10
- return undefined;
11
- const trimmed = value.trim();
12
- return trimmed.length > 0 ? trimmed : undefined;
13
- }
14
- function asInteger(value) {
15
- if (typeof value !== 'number' || !Number.isFinite(value))
16
- return null;
17
- if (!Number.isInteger(value) || value < 0)
18
- return null;
19
- return value;
20
- }
21
- function asBoolean(value, fallback) {
22
- return typeof value === 'boolean' ? value : fallback;
23
- }
24
- function normalizeOperation(value) {
25
- const raw = asTrimmedString(value)?.toLowerCase();
26
- if (!raw)
27
- return null;
28
- if (raw === 'replace_text')
29
- return 'replace_text';
30
- if (raw === 'insert_paragraph')
31
- return 'insert_paragraph';
32
- return null;
33
- }
34
- function extractRange(step) {
35
- const rangeRaw = step.range ?? step.span ?? step.match_range;
36
- if (rangeRaw == null)
37
- return null;
38
- const rangeObj = asRecord(rangeRaw);
39
- if (!rangeObj)
40
- return 'invalid';
41
- const start = asInteger(rangeObj.start);
42
- const end = asInteger(rangeObj.end);
43
- if (start == null || end == null)
44
- return 'invalid';
45
- if (end <= start)
46
- return 'invalid';
47
- return { start, end };
48
- }
49
- function stepRef(step) {
50
- return {
51
- plan_id: step.source_plan_id,
52
- plan_index: step.source_plan_index,
53
- step_index: step.source_step_index,
54
- step_id: step.step_id,
55
- };
56
- }
57
- function buildAutoStepId(planIndex, stepIndex) {
58
- return `auto_${planIndex + 1}_${stepIndex + 1}`;
59
- }
60
- function cloneArguments(step) {
61
- const out = {};
62
- for (const [key, value] of Object.entries(step)) {
63
- if (key === 'operation' || key === 'op' || key === 'step_id' || key === 'note' || key === 'range' || key === 'span' || key === 'match_range') {
64
- continue;
65
- }
66
- out[key] = value;
67
- }
68
- return out;
69
- }
70
- function normalizePlans(plansRaw) {
71
- if (!Array.isArray(plansRaw)) {
72
- return {
73
- plans: [],
74
- plan_count: 0,
75
- conflicts: [
76
- {
77
- code: 'INVALID_INPUT',
78
- severity: 'hard',
79
- message: "'plans' must be an array.",
80
- step_refs: [],
81
- },
82
- ],
83
- };
84
- }
85
- const plans = [];
86
- const conflicts = [];
87
- for (let pIdx = 0; pIdx < plansRaw.length; pIdx += 1) {
88
- const planObj = asRecord(plansRaw[pIdx]);
89
- const planId = asTrimmedString(planObj?.plan_id) ?? `plan_${pIdx + 1}`;
90
- if (!planObj) {
91
- conflicts.push({
92
- code: 'INVALID_PLAN',
93
- severity: 'hard',
94
- message: `Plan at index ${pIdx} is not an object.`,
95
- step_refs: [],
96
- });
97
- continue;
98
- }
99
- const baseRevisionRaw = planObj.base_revision;
100
- const baseRevision = baseRevisionRaw == null ? null : asInteger(baseRevisionRaw);
101
- if (baseRevisionRaw != null && baseRevision == null) {
102
- conflicts.push({
103
- code: 'INVALID_BASE_REVISION',
104
- severity: 'hard',
105
- message: `Plan '${planId}' has invalid base_revision. Expected a non-negative integer.`,
106
- step_refs: [],
107
- });
108
- }
109
- const stepsRaw = planObj.steps;
110
- if (!Array.isArray(stepsRaw)) {
111
- conflicts.push({
112
- code: 'INVALID_PLAN_STEPS',
113
- severity: 'hard',
114
- message: `Plan '${planId}' must include a 'steps' array.`,
115
- step_refs: [],
116
- });
117
- continue;
118
- }
119
- const normalizedSteps = [];
120
- for (let sIdx = 0; sIdx < stepsRaw.length; sIdx += 1) {
121
- const stepObj = asRecord(stepsRaw[sIdx]);
122
- const generatedStepId = buildAutoStepId(pIdx, sIdx);
123
- const providedStepId = asTrimmedString(stepObj?.step_id);
124
- const finalStepId = providedStepId ?? generatedStepId;
125
- if (!stepObj) {
126
- conflicts.push({
127
- code: 'INVALID_STEP',
128
- severity: 'hard',
129
- message: `Step ${sIdx} in plan '${planId}' is not an object.`,
130
- step_refs: [{ plan_id: planId, plan_index: pIdx, step_index: sIdx, step_id: finalStepId }],
131
- });
132
- continue;
133
- }
134
- const operation = normalizeOperation(stepObj.operation ?? stepObj.op);
135
- if (!operation) {
136
- conflicts.push({
137
- code: 'INVALID_STEP_OPERATION',
138
- severity: 'hard',
139
- message: `Step '${finalStepId}' in plan '${planId}' has unsupported operation.`,
140
- step_refs: [{ plan_id: planId, plan_index: pIdx, step_index: sIdx, step_id: finalStepId }],
141
- });
142
- continue;
143
- }
144
- const baseStep = {
145
- step_id: finalStepId,
146
- source_plan_id: planId,
147
- source_plan_index: pIdx,
148
- source_step_index: sIdx,
149
- note: asTrimmedString(stepObj.note),
150
- arguments: cloneArguments(stepObj),
151
- };
152
- if (operation === 'replace_text') {
153
- const targetParagraphId = asTrimmedString(stepObj.target_paragraph_id);
154
- if (!targetParagraphId) {
155
- conflicts.push({
156
- code: 'INVALID_STEP_TARGET',
157
- severity: 'hard',
158
- message: `replace_text step '${finalStepId}' in plan '${planId}' requires target_paragraph_id.`,
159
- step_refs: [{ plan_id: planId, plan_index: pIdx, step_index: sIdx, step_id: finalStepId }],
160
- });
161
- continue;
162
- }
163
- const range = extractRange(stepObj);
164
- if (range === 'invalid') {
165
- conflicts.push({
166
- code: 'INVALID_STEP_RANGE',
167
- severity: 'hard',
168
- message: `replace_text step '${finalStepId}' in plan '${planId}' has invalid range/span metadata.`,
169
- paragraph_id: targetParagraphId,
170
- step_refs: [{ plan_id: planId, plan_index: pIdx, step_index: sIdx, step_id: finalStepId }],
171
- });
172
- continue;
173
- }
174
- normalizedSteps.push({
175
- ...baseStep,
176
- operation,
177
- target_paragraph_id: targetParagraphId,
178
- range: range ?? undefined,
179
- });
180
- continue;
181
- }
182
- const anchorParagraphId = asTrimmedString(stepObj.positional_anchor_node_id)
183
- ?? asTrimmedString(stepObj.anchor_paragraph_id);
184
- if (!anchorParagraphId) {
185
- conflicts.push({
186
- code: 'INVALID_STEP_TARGET',
187
- severity: 'hard',
188
- message: `insert_paragraph step '${finalStepId}' in plan '${planId}' requires positional_anchor_node_id.`,
189
- step_refs: [{ plan_id: planId, plan_index: pIdx, step_index: sIdx, step_id: finalStepId }],
190
- });
191
- continue;
192
- }
193
- const position = (asTrimmedString(stepObj.position) ?? 'AFTER').toUpperCase();
194
- if (position !== 'BEFORE' && position !== 'AFTER') {
195
- conflicts.push({
196
- code: 'INVALID_STEP_POSITION',
197
- severity: 'hard',
198
- message: `insert_paragraph step '${finalStepId}' in plan '${planId}' has invalid position '${String(stepObj.position)}'.`,
199
- paragraph_id: anchorParagraphId,
200
- step_refs: [{ plan_id: planId, plan_index: pIdx, step_index: sIdx, step_id: finalStepId }],
201
- });
202
- continue;
203
- }
204
- normalizedSteps.push({
205
- ...baseStep,
206
- operation,
207
- positional_anchor_node_id: anchorParagraphId,
208
- position: position,
209
- });
210
- }
211
- plans.push({
212
- plan_id: planId,
213
- base_revision: baseRevision,
214
- source_plan_index: pIdx,
215
- steps: normalizedSteps,
216
- });
217
- }
218
- return {
219
- plans,
220
- conflicts,
221
- plan_count: plansRaw.length,
222
- };
223
- }
224
- function detectDuplicateStepIdConflicts(steps) {
225
- const byStepId = new Map();
226
- for (const step of steps) {
227
- const arr = byStepId.get(step.step_id) ?? [];
228
- arr.push(step);
229
- byStepId.set(step.step_id, arr);
230
- }
231
- const conflicts = [];
232
- for (const [stepId, dupeSteps] of byStepId.entries()) {
233
- if (dupeSteps.length < 2)
234
- continue;
235
- conflicts.push({
236
- code: 'DUPLICATE_STEP_ID',
237
- severity: 'hard',
238
- message: `Duplicate step_id '${stepId}' detected across submitted plans.`,
239
- step_refs: dupeSteps.map((s) => stepRef(s)),
240
- details: { duplicate_step_id: stepId },
241
- });
242
- }
243
- return conflicts;
244
- }
245
- function rangesOverlap(a, b) {
246
- return a.start < b.end && b.start < a.end;
247
- }
248
- function detectReplaceConflicts(steps) {
249
- const replaceSteps = steps.filter((s) => s.operation === 'replace_text' && !!s.target_paragraph_id);
250
- const byParagraph = new Map();
251
- for (const step of replaceSteps) {
252
- const paragraphId = step.target_paragraph_id;
253
- const arr = byParagraph.get(paragraphId) ?? [];
254
- arr.push(step);
255
- byParagraph.set(paragraphId, arr);
256
- }
257
- const conflicts = [];
258
- for (const [paragraphId, paragraphSteps] of byParagraph.entries()) {
259
- if (paragraphSteps.length < 2)
260
- continue;
261
- const unknownRangeSteps = paragraphSteps.filter((s) => !s.range);
262
- if (unknownRangeSteps.length > 0) {
263
- conflicts.push({
264
- code: 'UNKNOWN_REPLACE_RANGE',
265
- severity: 'hard',
266
- message: `replace_text steps targeting paragraph '${paragraphId}' require explicit non-overlapping ranges for deterministic merge.`,
267
- paragraph_id: paragraphId,
268
- step_refs: paragraphSteps.map((s) => stepRef(s)),
269
- });
270
- continue;
271
- }
272
- for (let i = 0; i < paragraphSteps.length; i += 1) {
273
- for (let j = i + 1; j < paragraphSteps.length; j += 1) {
274
- const a = paragraphSteps[i];
275
- const b = paragraphSteps[j];
276
- if (!a.range || !b.range)
277
- continue;
278
- if (!rangesOverlap(a.range, b.range))
279
- continue;
280
- conflicts.push({
281
- code: 'OVERLAPPING_REPLACE_RANGE',
282
- severity: 'hard',
283
- message: `replace_text spans overlap in paragraph '${paragraphId}'.`,
284
- paragraph_id: paragraphId,
285
- step_refs: [stepRef(a), stepRef(b)],
286
- details: {
287
- first_range: a.range,
288
- second_range: b.range,
289
- },
290
- });
291
- }
292
- }
293
- }
294
- return conflicts;
295
- }
296
- function detectInsertSlotCollisions(steps) {
297
- const insertSteps = steps.filter((s) => s.operation === 'insert_paragraph' && !!s.positional_anchor_node_id && !!s.position);
298
- const bySlot = new Map();
299
- for (const step of insertSteps) {
300
- const slotKey = `${step.positional_anchor_node_id}::${step.position}`;
301
- const arr = bySlot.get(slotKey) ?? [];
302
- arr.push(step);
303
- bySlot.set(slotKey, arr);
304
- }
305
- const conflicts = [];
306
- for (const [slotKey, slotSteps] of bySlot.entries()) {
307
- if (slotSteps.length < 2)
308
- continue;
309
- const anchorId = slotSteps[0].positional_anchor_node_id;
310
- const position = slotSteps[0].position;
311
- conflicts.push({
312
- code: 'INSERT_SLOT_COLLISION',
313
- severity: 'hard',
314
- message: `Multiple insert_paragraph steps target the same slot '${slotKey}'.`,
315
- paragraph_id: anchorId,
316
- step_refs: slotSteps.map((s) => stepRef(s)),
317
- details: {
318
- anchor_paragraph_id: anchorId,
319
- position,
320
- },
321
- });
322
- }
323
- return conflicts;
324
- }
325
- function detectBaseRevisionConflicts(plans, requireSharedBaseRevision) {
326
- const revisions = new Set();
327
- for (const plan of plans) {
328
- if (plan.base_revision == null)
329
- continue;
330
- revisions.add(plan.base_revision);
331
- }
332
- if (revisions.size === 0) {
333
- return { conflicts: [], mergedBaseRevision: null };
334
- }
335
- const mergedBaseRevision = revisions.size === 1 ? [...revisions][0] : null;
336
- if (!requireSharedBaseRevision || revisions.size <= 1) {
337
- return { conflicts: [], mergedBaseRevision };
338
- }
339
- return {
340
- mergedBaseRevision,
341
- conflicts: [
342
- {
343
- code: 'BASE_REVISION_CONFLICT',
344
- severity: 'hard',
345
- message: `Submitted plans have mismatched base_revision values: ${[...revisions].sort((a, b) => a - b).join(', ')}.`,
346
- step_refs: [],
347
- details: {
348
- base_revisions: [...revisions].sort((a, b) => a - b),
349
- },
350
- },
351
- ],
352
- };
353
- }
354
- export async function mergePlans(params) {
355
- try {
356
- const failOnConflict = asBoolean(params.fail_on_conflict, true);
357
- const requireSharedBaseRevision = asBoolean(params.require_shared_base_revision, true);
358
- const normalized = normalizePlans(params.plans);
359
- const normalizedPlans = normalized.plans;
360
- const flattenedSteps = normalizedPlans.flatMap((plan) => plan.steps);
361
- const revisionCheck = detectBaseRevisionConflicts(normalizedPlans, requireSharedBaseRevision);
362
- const conflicts = [
363
- ...normalized.conflicts,
364
- ...revisionCheck.conflicts,
365
- ...detectDuplicateStepIdConflicts(flattenedSteps),
366
- ...detectReplaceConflicts(flattenedSteps),
367
- ...detectInsertSlotCollisions(flattenedSteps),
368
- ];
369
- const hasConflicts = conflicts.length > 0;
370
- const mergedPlan = {
371
- format: 'safe_docx_merged_plan_v1',
372
- generated_at: new Date().toISOString(),
373
- base_revision: revisionCheck.mergedBaseRevision,
374
- plan_count: normalized.plan_count,
375
- step_count: flattenedSteps.length,
376
- steps: flattenedSteps,
377
- };
378
- if (hasConflicts && failOnConflict) {
379
- return {
380
- success: false,
381
- error: {
382
- code: 'PLAN_CONFLICT',
383
- message: `Detected ${conflicts.length} hard conflict(s) while merging plans.`,
384
- hint: 'Resolve reported conflicts, or set fail_on_conflict=false to inspect diagnostics without hard failure.',
385
- },
386
- has_conflicts: true,
387
- conflict_count: conflicts.length,
388
- conflicts,
389
- merged_plan: mergedPlan,
390
- };
391
- }
392
- return ok({
393
- has_conflicts: hasConflicts,
394
- conflict_count: conflicts.length,
395
- conflicts,
396
- merged_plan: mergedPlan,
397
- conflict_policy: {
398
- fail_on_conflict: failOnConflict,
399
- require_shared_base_revision: requireSharedBaseRevision,
400
- },
401
- });
402
- }
403
- catch (e) {
404
- const msg = errorMessage(e);
405
- return err('MERGE_PLAN_ERROR', `Failed to merge plans: ${msg}`);
406
- }
407
- }
408
- //# sourceMappingURL=merge_plans.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge_plans.js","sourceRoot":"","sources":["../../src/tools/merge_plans.ts"],"names":[],"mappings":"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"}