@usejunior/docx-mcp 0.2.0 → 0.3.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 (63) hide show
  1. package/README.md +8 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/commands/compare.d.ts.map +1 -1
  4. package/dist/cli/commands/compare.js +1 -2
  5. package/dist/cli/commands/compare.js.map +1 -1
  6. package/dist/cli/commands/edit.d.ts +24 -0
  7. package/dist/cli/commands/edit.d.ts.map +1 -0
  8. package/dist/cli/commands/edit.js +145 -0
  9. package/dist/cli/commands/edit.js.map +1 -0
  10. package/dist/cli/flag_parser.d.ts +7 -0
  11. package/dist/cli/flag_parser.d.ts.map +1 -0
  12. package/dist/cli/flag_parser.js +235 -0
  13. package/dist/cli/flag_parser.js.map +1 -0
  14. package/dist/cli/help.d.ts +3 -0
  15. package/dist/cli/help.d.ts.map +1 -0
  16. package/dist/cli/help.js +62 -0
  17. package/dist/cli/help.js.map +1 -0
  18. package/dist/cli/index.d.ts +2 -2
  19. package/dist/cli/index.d.ts.map +1 -1
  20. package/dist/cli/index.js +29 -32
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/parse_utils.d.ts +7 -0
  23. package/dist/cli/parse_utils.d.ts.map +1 -0
  24. package/dist/cli/parse_utils.js +18 -0
  25. package/dist/cli/parse_utils.js.map +1 -0
  26. package/dist/cli/tool_runner.d.ts +6 -0
  27. package/dist/cli/tool_runner.d.ts.map +1 -0
  28. package/dist/cli/tool_runner.js +17 -0
  29. package/dist/cli/tool_runner.js.map +1 -0
  30. package/dist/server.d.ts +1 -1
  31. package/dist/session/manager.d.ts +15 -1
  32. package/dist/session/manager.d.ts.map +1 -1
  33. package/dist/session/manager.js +22 -0
  34. package/dist/session/manager.js.map +1 -1
  35. package/dist/tool_catalog.d.ts +4 -5
  36. package/dist/tool_catalog.d.ts.map +1 -1
  37. package/dist/tool_catalog.js +7 -6
  38. package/dist/tool_catalog.js.map +1 -1
  39. package/dist/tools/compare_documents.js +3 -3
  40. package/dist/tools/compare_documents.js.map +1 -1
  41. package/dist/tools/grep.d.ts.map +1 -1
  42. package/dist/tools/grep.js +8 -1
  43. package/dist/tools/grep.js.map +1 -1
  44. package/dist/tools/open_document.d.ts.map +1 -1
  45. package/dist/tools/open_document.js +4 -17
  46. package/dist/tools/open_document.js.map +1 -1
  47. package/dist/tools/pagination.d.ts +9 -0
  48. package/dist/tools/pagination.d.ts.map +1 -0
  49. package/dist/tools/pagination.js +16 -0
  50. package/dist/tools/pagination.js.map +1 -0
  51. package/dist/tools/read_file.d.ts.map +1 -1
  52. package/dist/tools/read_file.js +96 -17
  53. package/dist/tools/read_file.js.map +1 -1
  54. package/dist/tools/replace_text.d.ts +9 -0
  55. package/dist/tools/replace_text.d.ts.map +1 -1
  56. package/dist/tools/replace_text.js +49 -49
  57. package/dist/tools/replace_text.js.map +1 -1
  58. package/dist/tools/save.js +3 -3
  59. package/dist/tools/save.js.map +1 -1
  60. package/dist/tools/session_resolution.d.ts.map +1 -1
  61. package/dist/tools/session_resolution.js +68 -18
  62. package/dist/tools/session_resolution.js.map +1 -1
  63. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/edit.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAmF7D;AAMD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D9F"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Batched edit command. Converts repeatable --replace/--insert-after/--insert-before
3
+ * flags into apply_plan steps, then calls dispatchToolCall.
4
+ */
5
+ import { SessionManager } from '../../session/manager.js';
6
+ import { dispatchToolCall } from '../../server.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Argv parser
9
+ // ---------------------------------------------------------------------------
10
+ export function parseEditArgs(argv) {
11
+ const replaces = [];
12
+ const inserts = [];
13
+ let file_path;
14
+ let instruction;
15
+ let output_path;
16
+ let i = 0;
17
+ while (i < argv.length) {
18
+ const token = argv[i];
19
+ if (!token.startsWith('-') && file_path === undefined) {
20
+ file_path = token;
21
+ i++;
22
+ continue;
23
+ }
24
+ switch (token) {
25
+ case '--replace': {
26
+ const paraId = argv[i + 1];
27
+ const oldStr = argv[i + 2];
28
+ const newStr = argv[i + 3];
29
+ if (!paraId || !oldStr || newStr === undefined) {
30
+ throw new Error('--replace requires 3 arguments: <paragraph_id> <old_string> <new_string>');
31
+ }
32
+ replaces.push({ paragraph_id: paraId, old_string: oldStr, new_string: newStr });
33
+ i += 4;
34
+ break;
35
+ }
36
+ case '--insert-after': {
37
+ const anchorId = argv[i + 1];
38
+ const text = argv[i + 2];
39
+ if (!anchorId || text === undefined) {
40
+ throw new Error('--insert-after requires 2 arguments: <anchor_id> <text>');
41
+ }
42
+ inserts.push({ anchor_id: anchorId, text, position: 'AFTER' });
43
+ i += 3;
44
+ break;
45
+ }
46
+ case '--insert-before': {
47
+ const anchorId = argv[i + 1];
48
+ const text = argv[i + 2];
49
+ if (!anchorId || text === undefined) {
50
+ throw new Error('--insert-before requires 2 arguments: <anchor_id> <text>');
51
+ }
52
+ inserts.push({ anchor_id: anchorId, text, position: 'BEFORE' });
53
+ i += 3;
54
+ break;
55
+ }
56
+ case '--instruction': {
57
+ const val = argv[i + 1];
58
+ if (!val)
59
+ throw new Error('--instruction requires a value');
60
+ instruction = val;
61
+ i += 2;
62
+ break;
63
+ }
64
+ case '-o':
65
+ case '--output': {
66
+ const val = argv[i + 1];
67
+ if (!val)
68
+ throw new Error(`${token} requires a value`);
69
+ output_path = val;
70
+ i += 2;
71
+ break;
72
+ }
73
+ case '--help':
74
+ case '-h':
75
+ // Handled by caller — just skip
76
+ i++;
77
+ break;
78
+ default:
79
+ throw new Error(`Unknown edit flag: ${token}`);
80
+ }
81
+ }
82
+ if (!file_path) {
83
+ throw new Error('edit requires a file path as the first positional argument');
84
+ }
85
+ if (replaces.length === 0 && inserts.length === 0) {
86
+ throw new Error('edit requires at least one --replace, --insert-after, or --insert-before');
87
+ }
88
+ return { file_path, replaces, inserts, instruction, output_path };
89
+ }
90
+ export async function runEditCommand(args, opts) {
91
+ const mgr = new SessionManager();
92
+ const defaultInstruction = args.instruction ?? 'CLI batch edit';
93
+ // Build apply_plan steps
94
+ let stepCounter = 0;
95
+ const steps = [];
96
+ for (const r of args.replaces) {
97
+ stepCounter++;
98
+ steps.push({
99
+ step_id: `cli_replace_${stepCounter}`,
100
+ operation: 'replace_text',
101
+ target_paragraph_id: r.paragraph_id,
102
+ old_string: r.old_string,
103
+ new_string: r.new_string,
104
+ instruction: defaultInstruction,
105
+ });
106
+ }
107
+ for (const ins of args.inserts) {
108
+ stepCounter++;
109
+ steps.push({
110
+ step_id: `cli_insert_${stepCounter}`,
111
+ operation: 'insert_paragraph',
112
+ positional_anchor_node_id: ins.anchor_id,
113
+ new_string: ins.text,
114
+ instruction: defaultInstruction,
115
+ position: ins.position,
116
+ });
117
+ }
118
+ // Apply plan
119
+ const applyResult = await dispatchToolCall(mgr, 'apply_plan', {
120
+ file_path: args.file_path,
121
+ steps,
122
+ });
123
+ const applySuccess = applyResult.success;
124
+ if (applySuccess === false) {
125
+ opts.writeError(JSON.stringify(applyResult, null, 2));
126
+ throw new Error('Edit apply_plan failed');
127
+ }
128
+ // Save if output path specified
129
+ if (args.output_path) {
130
+ const saveResult = await dispatchToolCall(mgr, 'save', {
131
+ file_path: args.file_path,
132
+ save_to_local_path: args.output_path,
133
+ });
134
+ const saveSuccess = saveResult.success;
135
+ if (saveSuccess === false) {
136
+ opts.writeError(JSON.stringify(saveResult, null, 2));
137
+ throw new Error('Edit save failed');
138
+ }
139
+ opts.write(JSON.stringify({ apply: applyResult, save: saveResult }, null, 2));
140
+ }
141
+ else {
142
+ opts.write(JSON.stringify(applyResult, null, 2));
143
+ }
144
+ }
145
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/cli/commands/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type ParsedFlags = {
2
+ args: Record<string, unknown>;
3
+ help: boolean;
4
+ };
5
+ export declare function parseToolFlags(argv: string[], toolName: string): ParsedFlags;
6
+ export declare function generateToolHelp(toolName: string): string;
7
+ //# sourceMappingURL=flag_parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flag_parser.d.ts","sourceRoot":"","sources":["../../src/cli/flag_parser.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AA6EF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAuG5E;AAqBD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuCzD"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Schema-driven flag parser. Converts tool Zod schemas into CLI flag definitions
3
+ * and parses argv into the Record<string, unknown> that dispatchToolCall expects.
4
+ */
5
+ import { z } from 'zod';
6
+ import { SAFE_DOCX_TOOL_CATALOG } from '../tool_catalog.js';
7
+ import { parseBoolean, toKebabCase } from './parse_utils.js';
8
+ // ---------------------------------------------------------------------------
9
+ // Short aliases — keyed by tool name, values map alias → snake_case param
10
+ // ---------------------------------------------------------------------------
11
+ const FLAG_ALIASES = {
12
+ _global: { '--session': 'session_id', '--file': 'file_path' },
13
+ replace_text: { '--para': 'target_paragraph_id', '--old': 'old_string', '--new': 'new_string' },
14
+ save: { '-o': 'save_to_local_path', '--output': 'save_to_local_path' },
15
+ insert_paragraph: { '--anchor': 'positional_anchor_node_id', '--pos': 'position' },
16
+ add_comment: { '--para': 'target_paragraph_id' },
17
+ add_footnote: { '--para': 'target_paragraph_id' },
18
+ };
19
+ // ---------------------------------------------------------------------------
20
+ // Schema introspection
21
+ // ---------------------------------------------------------------------------
22
+ function getToolSchema(toolName) {
23
+ const entry = SAFE_DOCX_TOOL_CATALOG.find((t) => t.name === toolName);
24
+ if (!entry)
25
+ throw new Error(`Unknown tool: ${toolName}`);
26
+ const schema = z.toJSONSchema(entry.input);
27
+ return { schema, catalogEntry: entry };
28
+ }
29
+ function hasFilePathParam(schema) {
30
+ return schema.properties !== undefined && 'file_path' in schema.properties;
31
+ }
32
+ // ---------------------------------------------------------------------------
33
+ // Alias resolution
34
+ // ---------------------------------------------------------------------------
35
+ function resolveAlias(flag, toolName) {
36
+ const toolAliases = FLAG_ALIASES[toolName];
37
+ if (toolAliases?.[flag])
38
+ return toolAliases[flag];
39
+ const globalAliases = FLAG_ALIASES._global;
40
+ if (globalAliases?.[flag])
41
+ return globalAliases[flag];
42
+ return null;
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Type coercion
46
+ // ---------------------------------------------------------------------------
47
+ function coerceValue(raw, propSchema, flagName) {
48
+ const t = propSchema.type;
49
+ if (t === 'string') {
50
+ if (propSchema.enum && !propSchema.enum.includes(raw)) {
51
+ throw new Error(`Invalid value for ${flagName}: "${raw}". Must be one of: ${propSchema.enum.join(', ')}`);
52
+ }
53
+ return raw;
54
+ }
55
+ if (t === 'number') {
56
+ const n = parseFloat(raw);
57
+ if (Number.isNaN(n))
58
+ throw new Error(`Invalid number for ${flagName}: "${raw}"`);
59
+ return n;
60
+ }
61
+ if (t === 'boolean') {
62
+ return parseBoolean(raw, flagName);
63
+ }
64
+ if (t === 'object') {
65
+ try {
66
+ return JSON.parse(raw);
67
+ }
68
+ catch {
69
+ throw new Error(`Invalid JSON for ${flagName}: ${raw}`);
70
+ }
71
+ }
72
+ // Fallback: return as string
73
+ return raw;
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // Main parser
77
+ // ---------------------------------------------------------------------------
78
+ export function parseToolFlags(argv, toolName) {
79
+ const { schema } = getToolSchema(toolName);
80
+ const properties = schema.properties ?? {};
81
+ const required = new Set(schema.required ?? []);
82
+ // Build lookup from kebab-case flag → snake_case property name
83
+ const flagToProperty = new Map();
84
+ for (const propName of Object.keys(properties)) {
85
+ flagToProperty.set(`--${toKebabCase(propName)}`, propName);
86
+ }
87
+ const result = {};
88
+ let help = false;
89
+ let firstPositionalConsumed = false;
90
+ const acceptsFilePath = hasFilePathParam(schema);
91
+ for (let i = 0; i < argv.length; i++) {
92
+ const token = argv[i];
93
+ // Help flag
94
+ if (token === '--help' || token === '-h') {
95
+ help = true;
96
+ continue;
97
+ }
98
+ // Positional arg → file_path (only first positional, only if tool has file_path param)
99
+ if (!token.startsWith('-') && !firstPositionalConsumed && acceptsFilePath) {
100
+ result.file_path = token;
101
+ firstPositionalConsumed = true;
102
+ continue;
103
+ }
104
+ // Must be a flag
105
+ if (!token.startsWith('-')) {
106
+ throw new Error(`Unexpected positional argument: "${token}". Use flags to pass parameters.`);
107
+ }
108
+ // Resolve alias first
109
+ const aliasResolved = resolveAlias(token, toolName);
110
+ let propName;
111
+ if (aliasResolved) {
112
+ propName = aliasResolved;
113
+ }
114
+ else {
115
+ const mapped = flagToProperty.get(token);
116
+ if (!mapped) {
117
+ throw new Error(`Unknown flag: ${token}. Use --help to see available flags for "${toolName}".`);
118
+ }
119
+ propName = mapped;
120
+ }
121
+ const propSchema = properties[propName];
122
+ if (!propSchema) {
123
+ throw new Error(`Unknown parameter: ${propName}`);
124
+ }
125
+ // Array type: collect repeatable flags
126
+ if (propSchema.type === 'array') {
127
+ const next = argv[i + 1];
128
+ if (next === undefined || next.startsWith('-')) {
129
+ throw new Error(`Missing value for ${token}`);
130
+ }
131
+ i += 1;
132
+ const existing = result[propName];
133
+ if (Array.isArray(existing)) {
134
+ existing.push(coerceArrayItem(next, propSchema, token));
135
+ }
136
+ else {
137
+ result[propName] = [coerceArrayItem(next, propSchema, token)];
138
+ }
139
+ continue;
140
+ }
141
+ // Boolean: if next token looks like a boolean value, consume it; otherwise treat as bare flag (true)
142
+ if (propSchema.type === 'boolean') {
143
+ const next = argv[i + 1];
144
+ if (next !== undefined && !next.startsWith('-') && isBooleanLike(next)) {
145
+ result[propName] = parseBoolean(next, token);
146
+ i += 1;
147
+ }
148
+ else {
149
+ result[propName] = true;
150
+ }
151
+ continue;
152
+ }
153
+ // All other types: consume next token as value
154
+ const next = argv[i + 1];
155
+ if (next === undefined || (next.startsWith('-') && propSchema.type !== 'number')) {
156
+ throw new Error(`Missing value for ${token}`);
157
+ }
158
+ i += 1;
159
+ result[propName] = coerceValue(next, propSchema, token);
160
+ }
161
+ // Validate required fields (unless help is requested)
162
+ if (!help) {
163
+ for (const req of required) {
164
+ if (result[req] === undefined) {
165
+ throw new Error(`Missing required parameter: --${toKebabCase(req)}`);
166
+ }
167
+ }
168
+ }
169
+ return { args: result, help };
170
+ }
171
+ function coerceArrayItem(raw, propSchema, flagName) {
172
+ const itemType = propSchema.items?.type;
173
+ if (itemType === 'number') {
174
+ const n = parseFloat(raw);
175
+ if (Number.isNaN(n))
176
+ throw new Error(`Invalid number for ${flagName}: "${raw}"`);
177
+ return n;
178
+ }
179
+ return raw;
180
+ }
181
+ function isBooleanLike(s) {
182
+ const lower = s.toLowerCase();
183
+ return ['true', 'false', 'yes', 'no', 'on', 'off', '1', '0'].includes(lower);
184
+ }
185
+ // ---------------------------------------------------------------------------
186
+ // Help generation
187
+ // ---------------------------------------------------------------------------
188
+ export function generateToolHelp(toolName) {
189
+ const { schema, catalogEntry } = getToolSchema(toolName);
190
+ const properties = schema.properties ?? {};
191
+ const required = new Set(schema.required ?? []);
192
+ const lines = [];
193
+ lines.push(`safe-docx ${toKebabCase(toolName)}`);
194
+ lines.push('');
195
+ lines.push(catalogEntry.description);
196
+ lines.push('');
197
+ if (hasFilePathParam(schema)) {
198
+ lines.push('Usage:');
199
+ lines.push(` safe-docx ${toKebabCase(toolName)} <file> [options]`);
200
+ lines.push('');
201
+ }
202
+ lines.push('Options:');
203
+ for (const [propName, propSchema] of Object.entries(properties)) {
204
+ const flag = `--${toKebabCase(propName)}`;
205
+ const req = required.has(propName) ? ' (required)' : '';
206
+ const typeStr = formatType(propSchema);
207
+ const desc = propSchema.description ?? '';
208
+ lines.push(` ${flag} ${typeStr}${req}`);
209
+ if (desc)
210
+ lines.push(` ${desc}`);
211
+ }
212
+ // Show aliases if any
213
+ const aliases = { ...FLAG_ALIASES._global, ...FLAG_ALIASES[toolName] };
214
+ const aliasEntries = Object.entries(aliases);
215
+ if (aliasEntries.length > 0) {
216
+ lines.push('');
217
+ lines.push('Aliases:');
218
+ for (const [alias, target] of aliasEntries) {
219
+ lines.push(` ${alias} → --${toKebabCase(target)}`);
220
+ }
221
+ }
222
+ return lines.join('\n');
223
+ }
224
+ function formatType(prop) {
225
+ if (prop.enum)
226
+ return `<${prop.enum.join('|')}>`;
227
+ if (prop.type === 'array')
228
+ return `<${prop.items?.type ?? 'string'}> (repeatable)`;
229
+ if (prop.type === 'object')
230
+ return '<json>';
231
+ if (prop.type)
232
+ return `<${prop.type}>`;
233
+ return '<value>';
234
+ }
235
+ //# sourceMappingURL=flag_parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flag_parser.js","sourceRoot":"","sources":["../../src/cli/flag_parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function renderTopLevelHelp(): string;
2
+ export declare function renderToolHelp(toolName: string): string;
3
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAmCA,wBAAgB,kBAAkB,IAAI,MAAM,CAgC3C;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * CLI help rendering — top-level and per-tool.
3
+ */
4
+ import { SAFE_DOCX_TOOL_CATALOG } from '../tool_catalog.js';
5
+ import { generateToolHelp } from './flag_parser.js';
6
+ import { toKebabCase } from './parse_utils.js';
7
+ function groupTools() {
8
+ const readOnly = [];
9
+ const mutating = [];
10
+ for (const tool of SAFE_DOCX_TOOL_CATALOG) {
11
+ if (tool.annotations.readOnlyHint) {
12
+ readOnly.push(tool.name);
13
+ }
14
+ else {
15
+ mutating.push(tool.name);
16
+ }
17
+ }
18
+ return [
19
+ { label: 'Read-only tools', names: readOnly },
20
+ { label: 'Editing tools', names: mutating },
21
+ ];
22
+ }
23
+ // ---------------------------------------------------------------------------
24
+ // Top-level help
25
+ // ---------------------------------------------------------------------------
26
+ export function renderTopLevelHelp() {
27
+ const lines = [];
28
+ lines.push('safe-docx CLI');
29
+ lines.push('');
30
+ lines.push('Usage:');
31
+ lines.push(' safe-docx [command] [options]');
32
+ lines.push(' safedocx [command] [options]');
33
+ lines.push('');
34
+ lines.push('Built-in commands:');
35
+ lines.push(' serve Start the MCP server (default)');
36
+ lines.push(' compare <original> <revised> [output] Compare two DOCX files and write redline output');
37
+ lines.push(' edit <file> [--replace ...] [-o output] Batch edit a DOCX file');
38
+ lines.push('');
39
+ for (const group of groupTools()) {
40
+ lines.push(`${group.label}:`);
41
+ for (const name of group.names) {
42
+ const entry = SAFE_DOCX_TOOL_CATALOG.find((t) => t.name === name);
43
+ const kebab = toKebabCase(name);
44
+ const desc = entry.description.split('.')[0];
45
+ lines.push(` ${kebab.padEnd(42)}${desc}`);
46
+ }
47
+ lines.push('');
48
+ }
49
+ lines.push('Global options:');
50
+ lines.push(' -h, --help Show help');
51
+ lines.push(' -v, --version Show version');
52
+ lines.push('');
53
+ lines.push('Use safe-docx <command> --help for detailed options on any command.');
54
+ return lines.join('\n');
55
+ }
56
+ // ---------------------------------------------------------------------------
57
+ // Per-tool help (delegates to flag_parser)
58
+ // ---------------------------------------------------------------------------
59
+ export function renderToolHelp(toolName) {
60
+ return generateToolHelp(toolName);
61
+ }
62
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import { type CompareCommandArgs, type CompareCommandResult } from './commands/compare.js';
2
- interface CliHandlers {
2
+ export interface CliHandlers {
3
3
  serve: () => Promise<void>;
4
4
  compare: (args: CompareCommandArgs) => Promise<CompareCommandResult>;
5
5
  write: (line: string) => void;
6
+ writeError: (line: string) => void;
6
7
  }
7
8
  export interface CliProgram {
8
9
  parseAsync(argv?: string[]): Promise<void>;
9
10
  }
10
11
  export declare function createProgram(overrides?: Partial<CliHandlers>): CliProgram;
11
12
  export declare function runCli(argv?: string[]): Promise<void>;
12
- export {};
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE9G,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACrE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAoGD,wBAAgB,aAAa,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,UAAU,CAoD9E;AAED,wBAAsB,MAAM,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAQ9G,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACrE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAqED,wBAAgB,aAAa,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,UAAU,CA4E9E;AAED,wBAAsB,MAAM,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D"}
package/dist/cli/index.js CHANGED
@@ -2,6 +2,12 @@ import { readFileSync } from 'node:fs';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  import { runServeCommand } from './commands/serve.js';
4
4
  import { runCompareCommand } from './commands/compare.js';
5
+ import { parseEditArgs, runEditCommand } from './commands/edit.js';
6
+ import { parseBoolean, toSnakeCase } from './parse_utils.js';
7
+ import { parseToolFlags, generateToolHelp } from './flag_parser.js';
8
+ import { renderTopLevelHelp } from './help.js';
9
+ import { runToolCommand } from './tool_runner.js';
10
+ import { SAFE_DOCX_TOOL_CATALOG } from '../tool_catalog.js';
5
11
  function packageVersion() {
6
12
  try {
7
13
  const packageJsonPath = fileURLToPath(new URL('../../package.json', import.meta.url));
@@ -12,37 +18,6 @@ function packageVersion() {
12
18
  return '0.0.0';
13
19
  }
14
20
  }
15
- function renderHelp() {
16
- return [
17
- 'safe-docx CLI',
18
- '',
19
- 'Usage:',
20
- ' safe-docx [command] [options]',
21
- ' safedocx [command] [options]',
22
- '',
23
- 'Commands:',
24
- ' serve Start the MCP server (default)',
25
- ' compare <original> <revised> [output] Compare two DOCX files and write redline output',
26
- '',
27
- 'Compare options:',
28
- ' --engine <auto|atomizer|diffmatch> Comparison engine (default: atomizer)',
29
- ' --mode <inplace|rebuild> Reconstruction mode (default: rebuild)',
30
- ' --author <name> Track-changes author label (default: Comparison)',
31
- ' --premerge-runs <true|false> Enable run premerge optimization',
32
- '',
33
- 'Global options:',
34
- ' -h, --help Show help',
35
- ' -v, --version Show version',
36
- ].join('\n');
37
- }
38
- function parseBoolean(raw, flagName) {
39
- const normalized = raw.trim().toLowerCase();
40
- if (['1', 'true', 'yes', 'on'].includes(normalized))
41
- return true;
42
- if (['0', 'false', 'no', 'off'].includes(normalized))
43
- return false;
44
- throw new Error(`Invalid value for ${flagName}: ${raw}. Use true or false.`);
45
- }
46
21
  function parseCompareArgs(args) {
47
22
  const positional = [];
48
23
  const options = {};
@@ -101,6 +76,10 @@ export function createProgram(overrides = {}) {
101
76
  // eslint-disable-next-line no-console
102
77
  console.log(line);
103
78
  },
79
+ writeError: (line) => {
80
+ // eslint-disable-next-line no-console
81
+ console.error(line);
82
+ },
104
83
  ...overrides,
105
84
  };
106
85
  return {
@@ -117,7 +96,7 @@ export function createProgram(overrides = {}) {
117
96
  }
118
97
  const rest = args.slice(1);
119
98
  if (command === '--help' || command === '-h' || command === 'help') {
120
- handlers.write(renderHelp());
99
+ handlers.write(renderTopLevelHelp());
121
100
  return;
122
101
  }
123
102
  if (command === '--version' || command === '-v') {
@@ -134,6 +113,24 @@ export function createProgram(overrides = {}) {
134
113
  handlers.write(JSON.stringify(result));
135
114
  return;
136
115
  }
116
+ // Edit command — batched apply_plan wrapper
117
+ if (command === 'edit') {
118
+ const editArgs = parseEditArgs(rest);
119
+ await runEditCommand(editArgs, { write: handlers.write, writeError: handlers.writeError });
120
+ return;
121
+ }
122
+ // Generic tool dispatch — kebab-case command → snake_case tool name
123
+ const toolName = toSnakeCase(command);
124
+ const catalogEntry = SAFE_DOCX_TOOL_CATALOG.find((t) => t.name === toolName);
125
+ if (catalogEntry) {
126
+ const { args: toolArgs, help } = parseToolFlags(rest, toolName);
127
+ if (help) {
128
+ handlers.write(generateToolHelp(toolName));
129
+ return;
130
+ }
131
+ await runToolCommand(toolName, toolArgs, { write: handlers.write, writeError: handlers.writeError });
132
+ return;
133
+ }
137
134
  throw new Error(`Unknown command: ${command}. Use --help to see available commands.`);
138
135
  },
139
136
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}