@documonster/mcp 0.8.0-canary.sha.09791dab

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 (127) hide show
  1. package/LICENSE +205 -0
  2. package/README.md +253 -0
  3. package/dist/capabilities.d.ts +29 -0
  4. package/dist/capabilities.d.ts.map +1 -0
  5. package/dist/capabilities.js +188 -0
  6. package/dist/capabilities.js.map +1 -0
  7. package/dist/cli.d.ts +13 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +64 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +65 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +189 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/errors.d.ts +66 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +96 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/index.d.ts +25 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +20 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/sandbox.d.ts +86 -0
  24. package/dist/sandbox.d.ts.map +1 -0
  25. package/dist/sandbox.js +224 -0
  26. package/dist/sandbox.js.map +1 -0
  27. package/dist/server.d.ts +22 -0
  28. package/dist/server.d.ts.map +1 -0
  29. package/dist/server.js +66 -0
  30. package/dist/server.js.map +1 -0
  31. package/dist/tools/archive-read.d.ts +31 -0
  32. package/dist/tools/archive-read.d.ts.map +1 -0
  33. package/dist/tools/archive-read.js +315 -0
  34. package/dist/tools/archive-read.js.map +1 -0
  35. package/dist/tools/archive-write.d.ts +9 -0
  36. package/dist/tools/archive-write.d.ts.map +1 -0
  37. package/dist/tools/archive-write.js +219 -0
  38. package/dist/tools/archive-write.js.map +1 -0
  39. package/dist/tools/chart.d.ts +93 -0
  40. package/dist/tools/chart.d.ts.map +1 -0
  41. package/dist/tools/chart.js +263 -0
  42. package/dist/tools/chart.js.map +1 -0
  43. package/dist/tools/doc-convert.d.ts +13 -0
  44. package/dist/tools/doc-convert.d.ts.map +1 -0
  45. package/dist/tools/doc-convert.js +209 -0
  46. package/dist/tools/doc-convert.js.map +1 -0
  47. package/dist/tools/doc-paginate.d.ts +14 -0
  48. package/dist/tools/doc-paginate.d.ts.map +1 -0
  49. package/dist/tools/doc-paginate.js +153 -0
  50. package/dist/tools/doc-paginate.js.map +1 -0
  51. package/dist/tools/doc-read.d.ts +14 -0
  52. package/dist/tools/doc-read.d.ts.map +1 -0
  53. package/dist/tools/doc-read.js +175 -0
  54. package/dist/tools/doc-read.js.map +1 -0
  55. package/dist/tools/doc-review.d.ts +17 -0
  56. package/dist/tools/doc-review.d.ts.map +1 -0
  57. package/dist/tools/doc-review.js +249 -0
  58. package/dist/tools/doc-review.js.map +1 -0
  59. package/dist/tools/doc-search.d.ts +20 -0
  60. package/dist/tools/doc-search.d.ts.map +1 -0
  61. package/dist/tools/doc-search.js +268 -0
  62. package/dist/tools/doc-search.js.map +1 -0
  63. package/dist/tools/doc-write.d.ts +11 -0
  64. package/dist/tools/doc-write.d.ts.map +1 -0
  65. package/dist/tools/doc-write.js +81 -0
  66. package/dist/tools/doc-write.js.map +1 -0
  67. package/dist/tools/document.d.ts +74 -0
  68. package/dist/tools/document.d.ts.map +1 -0
  69. package/dist/tools/document.js +157 -0
  70. package/dist/tools/document.js.map +1 -0
  71. package/dist/tools/form-fill.d.ts +20 -0
  72. package/dist/tools/form-fill.d.ts.map +1 -0
  73. package/dist/tools/form-fill.js +270 -0
  74. package/dist/tools/form-fill.js.map +1 -0
  75. package/dist/tools/formula-evaluate.d.ts +14 -0
  76. package/dist/tools/formula-evaluate.d.ts.map +1 -0
  77. package/dist/tools/formula-evaluate.js +192 -0
  78. package/dist/tools/formula-evaluate.js.map +1 -0
  79. package/dist/tools/fs-helpers.d.ts +106 -0
  80. package/dist/tools/fs-helpers.d.ts.map +1 -0
  81. package/dist/tools/fs-helpers.js +257 -0
  82. package/dist/tools/fs-helpers.js.map +1 -0
  83. package/dist/tools/help.d.ts +227 -0
  84. package/dist/tools/help.d.ts.map +1 -0
  85. package/dist/tools/help.js +262 -0
  86. package/dist/tools/help.js.map +1 -0
  87. package/dist/tools/index.d.ts +33 -0
  88. package/dist/tools/index.d.ts.map +1 -0
  89. package/dist/tools/index.js +78 -0
  90. package/dist/tools/index.js.map +1 -0
  91. package/dist/tools/inspect.d.ts +14 -0
  92. package/dist/tools/inspect.d.ts.map +1 -0
  93. package/dist/tools/inspect.js +463 -0
  94. package/dist/tools/inspect.js.map +1 -0
  95. package/dist/tools/pdf-edit.d.ts +26 -0
  96. package/dist/tools/pdf-edit.d.ts.map +1 -0
  97. package/dist/tools/pdf-edit.js +390 -0
  98. package/dist/tools/pdf-edit.js.map +1 -0
  99. package/dist/tools/result.d.ts +25 -0
  100. package/dist/tools/result.d.ts.map +1 -0
  101. package/dist/tools/result.js +43 -0
  102. package/dist/tools/result.js.map +1 -0
  103. package/dist/tools/sheet-edit.d.ts +16 -0
  104. package/dist/tools/sheet-edit.d.ts.map +1 -0
  105. package/dist/tools/sheet-edit.js +325 -0
  106. package/dist/tools/sheet-edit.js.map +1 -0
  107. package/dist/tools/sheet-read.d.ts +10 -0
  108. package/dist/tools/sheet-read.d.ts.map +1 -0
  109. package/dist/tools/sheet-read.js +139 -0
  110. package/dist/tools/sheet-read.js.map +1 -0
  111. package/dist/tools/sheet-write.d.ts +15 -0
  112. package/dist/tools/sheet-write.d.ts.map +1 -0
  113. package/dist/tools/sheet-write.js +290 -0
  114. package/dist/tools/sheet-write.js.map +1 -0
  115. package/dist/tools/spreadsheet.d.ts +100 -0
  116. package/dist/tools/spreadsheet.d.ts.map +1 -0
  117. package/dist/tools/spreadsheet.js +210 -0
  118. package/dist/tools/spreadsheet.js.map +1 -0
  119. package/dist/tools/template.d.ts +18 -0
  120. package/dist/tools/template.d.ts.map +1 -0
  121. package/dist/tools/template.js +209 -0
  122. package/dist/tools/template.js.map +1 -0
  123. package/dist/tools/types.d.ts +79 -0
  124. package/dist/tools/types.d.ts.map +1 -0
  125. package/dist/tools/types.js +18 -0
  126. package/dist/tools/types.js.map +1 -0
  127. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-review.js","sourceRoot":"","sources":["../../src/tools/doc-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `doc_search` and `doc_edit` — find and change text in a Word document.
3
+ *
4
+ * `doc_search` covers two questions that look similar and are not:
5
+ *
6
+ * "where does this phrase appear" — text search
7
+ * "which text is red and bold" — format search
8
+ *
9
+ * The second is the interesting one. A model cannot answer it from a Markdown
10
+ * rendering, because colour and highlight do not survive into Markdown at all,
11
+ * and it is a routine document-review request ("find everything marked urgent").
12
+ *
13
+ * `doc_edit` replaces text across run boundaries. Word habitually splits a
14
+ * phrase across several `w:r` elements, so a naive replacement misses matches or
15
+ * destroys formatting; the underlying engine rebuilds the runs and preserves
16
+ * each surviving run's properties.
17
+ */
18
+ export declare const docSearchTool: import("./types.js").AnyToolDefinition;
19
+ export declare const docEditTool: import("./types.js").AnyToolDefinition;
20
+ //# sourceMappingURL=doc-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-search.d.ts","sourceRoot":"","sources":["../../src/tools/doc-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAqCH,eAAO,MAAM,aAAa,wCAwExB,CAAC;AA2EH,eAAO,MAAM,WAAW,wCA6GtB,CAAC"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * `doc_search` and `doc_edit` — find and change text in a Word document.
3
+ *
4
+ * `doc_search` covers two questions that look similar and are not:
5
+ *
6
+ * "where does this phrase appear" — text search
7
+ * "which text is red and bold" — format search
8
+ *
9
+ * The second is the interesting one. A model cannot answer it from a Markdown
10
+ * rendering, because colour and highlight do not survive into Markdown at all,
11
+ * and it is a routine document-review request ("find everything marked urgent").
12
+ *
13
+ * `doc_edit` replaces text across run boundaries. Word habitually splits a
14
+ * phrase across several `w:r` elements, so a naive replacement misses matches or
15
+ * destroys formatting; the underlying engine rebuilds the runs and preserves
16
+ * each surviving run's properties.
17
+ */
18
+ import { Io, Query } from "documonster/word";
19
+ import { z } from "zod";
20
+ import { toolError } from "../errors.js";
21
+ import { assertWritable, resolveEditTarget, resolveInRoot } from "../sandbox.js";
22
+ import { assertReadableSize, assertUnchanged, backupOnce, describeBackup, fingerprint, isSameFile, replaceAtomically, writeWithPolicy } from "./fs-helpers.js";
23
+ import { textResult } from "./result.js";
24
+ import { defineTool } from "./types.js";
25
+ /** Matches reported in one call. */
26
+ const MAX_MATCHES = 100;
27
+ const formatCriteria = {
28
+ bold: z.boolean().optional(),
29
+ italic: z.boolean().optional(),
30
+ underline: z.boolean().optional(),
31
+ strike: z.boolean().optional(),
32
+ font: z.string().optional().describe('Font name, e.g. "Calibri".'),
33
+ color: z
34
+ .string()
35
+ .optional()
36
+ .describe('Text colour as hex RGB without "#", e.g. "C00000" for red.'),
37
+ highlight: z.string().optional().describe('Highlight colour name, e.g. "yellow".'),
38
+ paragraphStyle: z.string().optional().describe('Paragraph style id, e.g. "Heading1" or "Quote".')
39
+ };
40
+ export const docSearchTool = defineTool({
41
+ name: "doc_search",
42
+ group: "word",
43
+ title: "Search a Word document",
44
+ description: "Search a .docx by text or by formatting. Formatting search answers questions that reading the document cannot — 'which text is red', 'what is highlighted', 'everything styled as Heading2' — because colour and highlighting do not survive into text. Give `text` for a phrase search, `format` for an appearance search, or both to narrow.",
45
+ inputSchema: {
46
+ path: z.string().min(1).describe("Document path (.docx), relative to the server root."),
47
+ text: z
48
+ .string()
49
+ .optional()
50
+ .describe("Phrase to find. Combine with `regex` to treat it as a pattern."),
51
+ regex: z
52
+ .boolean()
53
+ .optional()
54
+ .describe("Treat `text` as a JavaScript regular expression. Defaults to false."),
55
+ format: z
56
+ .object(formatCriteria)
57
+ .optional()
58
+ .describe("Appearance to match. Any combination; all given properties must hold."),
59
+ listFormats: z
60
+ .boolean()
61
+ .optional()
62
+ .describe("Instead of searching, list every distinct run format used in the document — useful when you do not yet know what to look for.")
63
+ },
64
+ annotations: { readOnlyHint: true, openWorldHint: false },
65
+ mutates: false,
66
+ handler: async (args, context) => {
67
+ const { config } = context;
68
+ const resolved = await resolveInRoot(config, args.path, { mustExist: true });
69
+ await assertReadableSize(config, resolved, args.path);
70
+ const doc = await readWord(resolved, args.path);
71
+ if (args.listFormats === true) {
72
+ const formats = Query.getUsedFormats(doc);
73
+ if (formats.length === 0) {
74
+ return textResult(config, `# ${args.path}\n\nNo run carries direct formatting — every run inherits from its paragraph style.\n\nSearch by \`format: { paragraphStyle: "…" }\` instead, or read the document with doc_read.`);
75
+ }
76
+ return textResult(config, [
77
+ `# ${args.path} — formats in use`,
78
+ "",
79
+ `${formats.length} distinct run format(s):`,
80
+ "",
81
+ ...formats.map(format => `- \`${JSON.stringify(format)}\``),
82
+ "",
83
+ "Search for one with `format: { … }`."
84
+ ].join("\n"));
85
+ }
86
+ if (args.text === undefined && args.format === undefined) {
87
+ throw toolError.invalidInput("doc_search needs `text`, `format`, or listFormats: true", 'To find a phrase pass text; to find an appearance pass format, e.g. { "color": "C00000" }.');
88
+ }
89
+ // Format search first when given, because it is the narrower axis and can
90
+ // additionally filter on text via textMatch.
91
+ if (args.format !== undefined) {
92
+ return textResult(config, searchByFormat(doc, args));
93
+ }
94
+ return textResult(config, searchByText(doc, args));
95
+ }
96
+ });
97
+ function searchByText(doc, args) {
98
+ const query = buildQuery(args);
99
+ const results = Query.searchText(doc, query);
100
+ if (results.length === 0) {
101
+ return [
102
+ `# ${args.path} — no match`,
103
+ "",
104
+ `Nothing matched ${describeQuery(args)}.`,
105
+ "",
106
+ "The search covers the body, tables, headers, footers and footnotes. If you expected a match, check spelling and case — text search is case-sensitive."
107
+ ].join("\n");
108
+ }
109
+ return [
110
+ `# ${args.path} — ${results.length} match(es) for ${describeQuery(args)}`,
111
+ "",
112
+ "| # | paragraph | offset | match |",
113
+ "| --- | --- | --- | --- |",
114
+ ...results
115
+ .slice(0, MAX_MATCHES)
116
+ .map((result, index) => `| ${index + 1} | ${result.paragraphIndex} | ${result.offset} | ${escapeCell(result.match)} |`),
117
+ ...(results.length > MAX_MATCHES
118
+ ? ["", `[${results.length - MAX_MATCHES} more not listed]`]
119
+ : []),
120
+ "",
121
+ "`paragraph` is a document-wide ordinal in reading order, not an index into the body — use it for ordering, not addressing.",
122
+ "",
123
+ "Replace these with doc_edit."
124
+ ].join("\n");
125
+ }
126
+ function searchByFormat(doc, args) {
127
+ const criteria = {
128
+ ...args.format,
129
+ ...(args.text === undefined ? {} : { textMatch: buildRegex(args) })
130
+ };
131
+ const results = Query.searchByFormat(doc, criteria);
132
+ const described = JSON.stringify(args.format);
133
+ if (results.length === 0) {
134
+ return [
135
+ `# ${args.path} — no match`,
136
+ "",
137
+ `No text matched the formatting ${described}.`,
138
+ "",
139
+ "Call again with `listFormats: true` to see which formats the document actually uses — a colour may differ from the one you assumed, and text styled by a paragraph style carries no direct run formatting."
140
+ ].join("\n");
141
+ }
142
+ return [
143
+ `# ${args.path} — ${results.length} run(s) matching ${described}`,
144
+ "",
145
+ "| # | location | paragraph | style | text |",
146
+ "| --- | --- | --- | --- | --- |",
147
+ ...results
148
+ .slice(0, MAX_MATCHES)
149
+ .map((result, index) => `| ${index + 1} | ${result.location} | ${result.paragraphIndex} | ${result.paragraphStyle ?? "—"} | ${escapeCell(result.text)} |`),
150
+ ...(results.length > MAX_MATCHES
151
+ ? ["", `[${results.length - MAX_MATCHES} more not listed]`]
152
+ : []),
153
+ "",
154
+ "Matches are individual runs, so one visually continuous phrase may appear as several rows."
155
+ ].join("\n");
156
+ }
157
+ export const docEditTool = defineTool({
158
+ name: "doc_edit",
159
+ group: "word",
160
+ title: "Replace text in a Word document",
161
+ description: "Find and replace text throughout a .docx, preserving all formatting. Handles matches that Word has split across several runs, which a naive replacement would miss. Use dryRun first to see how many matches there are. Everything else in the document is untouched.",
162
+ inputSchema: {
163
+ path: z.string().min(1).describe("Document to edit (.docx), relative to the server root."),
164
+ find: z.string().min(1).describe("Text to replace."),
165
+ replace: z
166
+ .string()
167
+ .describe("Replacement text. With regex: true, $1 refers to the first capture group."),
168
+ regex: z
169
+ .boolean()
170
+ .optional()
171
+ .describe("Treat `find` as a JavaScript regular expression, applied globally. Defaults to false."),
172
+ out: z
173
+ .string()
174
+ .optional()
175
+ .describe("Write below @output/. Required for input files unless --allow-in-place is enabled."),
176
+ dryRun: z
177
+ .boolean()
178
+ .optional()
179
+ .describe("Report the match count without writing anything. Do this first on a document the user cares about."),
180
+ backup: z
181
+ .boolean()
182
+ .optional()
183
+ .describe("When editing in place, copy the original to <name>.bak first. Defaults to true."),
184
+ overwrite: z.boolean().optional().describe("Replace an existing `out` file. Defaults to false.")
185
+ },
186
+ annotations: {
187
+ readOnlyHint: false,
188
+ destructiveHint: true,
189
+ idempotentHint: false,
190
+ openWorldHint: false
191
+ },
192
+ mutates: true,
193
+ handler: async (args, context) => {
194
+ const { config } = context;
195
+ assertWritable(config);
196
+ const resolved = await resolveInRoot(config, args.path, { mustExist: true });
197
+ await assertReadableSize(config, resolved, args.path);
198
+ const inputVersion = await fingerprint(resolved);
199
+ const doc = await readWord(resolved, args.path);
200
+ const query = buildQuery(args);
201
+ // Count first, so dryRun and the real run report the same number and a
202
+ // zero-match edit can be reported as a no-op instead of silently rewriting
203
+ // the file.
204
+ const found = Query.searchText(doc, query).length;
205
+ if (found === 0) {
206
+ return textResult(config, [
207
+ `No occurrence of ${describeQuery(args)} in **${args.path}** — nothing was written.`,
208
+ "",
209
+ "Text search is case-sensitive. Use doc_search to confirm what the document actually contains."
210
+ ].join("\n"));
211
+ }
212
+ if (args.dryRun === true) {
213
+ return textResult(config, [
214
+ `**Dry run** — nothing was written.`,
215
+ `- ${found} occurrence(s) of ${describeQuery(args)} in ${args.path}`,
216
+ `- would be replaced with ${JSON.stringify(args.replace)}`,
217
+ "",
218
+ "Re-run without dryRun to apply."
219
+ ].join("\n"));
220
+ }
221
+ const replaced = Query.replaceText(doc, query, args.replace);
222
+ await assertUnchanged(resolved, inputVersion);
223
+ const writeTarget = await resolveEditTarget(config, args.path, args.out);
224
+ const inPlace = isSameFile(writeTarget.path, resolved);
225
+ const backupPath = inPlace && (args.backup ?? true) ? await backupOnce(writeTarget) : undefined;
226
+ if (inPlace) {
227
+ await replaceAtomically(writeTarget.path, temporary => Io.writeFile(doc, temporary));
228
+ }
229
+ else {
230
+ await writeWithPolicy(writeTarget.path, args.overwrite === true, temporary => Io.writeFile(doc, temporary));
231
+ }
232
+ return textResult(config, [
233
+ `Replaced **${replaced}** occurrence(s) of ${describeQuery(args)} with ${JSON.stringify(args.replace)}.`,
234
+ `- written to ${writeTarget.display}${inPlace ? " (in place)" : ""}`,
235
+ ...describeBackup(writeTarget.display, backupPath),
236
+ "- all other formatting preserved",
237
+ "",
238
+ "Read it back with doc_read to verify before reporting success to the user."
239
+ ].join("\n"));
240
+ }
241
+ });
242
+ /** A string query, or a global regex when `regex` is set. */
243
+ function buildQuery(args) {
244
+ const source = args.find ?? args.text ?? "";
245
+ return args.regex === true ? buildRegex({ text: source, regex: true }) : source;
246
+ }
247
+ function buildRegex(args) {
248
+ const source = args.text ?? "";
249
+ try {
250
+ return new RegExp(source, "g");
251
+ }
252
+ catch (cause) {
253
+ throw toolError.invalidInput(`${JSON.stringify(source)} is not a valid regular expression`, "Escape any special characters, or drop regex: true for a literal search.", { cause });
254
+ }
255
+ }
256
+ function describeQuery(args) {
257
+ const source = args.find ?? args.text ?? "";
258
+ return args.regex === true ? `pattern \`/${source}/g\`` : JSON.stringify(source);
259
+ }
260
+ function escapeCell(text) {
261
+ return text.replace(/\|/g, "\\|").replace(/\r?\n/g, " ").slice(0, 200);
262
+ }
263
+ async function readWord(resolved, displayPath) {
264
+ return await Io.readFile(resolved).catch((cause) => {
265
+ throw toolError.unsupported(`could not read ${displayPath} as a Word document`, "Run doc_inspect to check the real file type; a CFB container is either a legacy .doc or an encrypted .docx.", { cause });
266
+ });
267
+ }
268
+ //# sourceMappingURL=doc-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-search.js","sourceRoot":"","sources":["../../src/tools/doc-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `doc_write` — create a Word or PDF document from Markdown.
3
+ *
4
+ * Markdown as the input language is a deliberate choice: a model already writes
5
+ * it fluently and correctly, whereas a JSON description of runs and paragraph
6
+ * properties is something it has to be taught, gets wrong, and which would cost
7
+ * a large schema in every request. Headings, lists, tables, emphasis, code
8
+ * blocks and links all survive the conversion.
9
+ */
10
+ export declare const docWriteTool: import("./types.js").AnyToolDefinition;
11
+ //# sourceMappingURL=doc-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-write.d.ts","sourceRoot":"","sources":["../../src/tools/doc-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,eAAO,MAAM,YAAY,wCAiFvB,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * `doc_write` — create a Word or PDF document from Markdown.
3
+ *
4
+ * Markdown as the input language is a deliberate choice: a model already writes
5
+ * it fluently and correctly, whereas a JSON description of runs and paragraph
6
+ * properties is something it has to be taught, gets wrong, and which would cost
7
+ * a large schema in every request. Headings, lists, tables, emphasis, code
8
+ * blocks and links all survive the conversion.
9
+ */
10
+ import { stat, writeFile } from "node:fs/promises";
11
+ import { Pdf } from "documonster/pdf";
12
+ import { Io } from "documonster/word";
13
+ import { markdownToDocx } from "documonster/word/markdown";
14
+ import { z } from "zod";
15
+ import { toolError } from "../errors.js";
16
+ import { assertWritable, outputDisplay, resolveOutputPath } from "../sandbox.js";
17
+ import { assertNonMacroOutput, requireFormat } from "./document.js";
18
+ import { writeWithPolicy } from "./fs-helpers.js";
19
+ import { formatBytes, textResult } from "./result.js";
20
+ import { defineTool } from "./types.js";
21
+ export const docWriteTool = defineTool({
22
+ name: "doc_write",
23
+ group: "word",
24
+ title: "Write a Word or PDF document",
25
+ description: "Create a .docx or .pdf from Markdown. Headings, lists, tables, bold/italic, code blocks and links are all converted. Write the content as Markdown — that is the input language for this tool.",
26
+ inputSchema: {
27
+ path: z
28
+ .string()
29
+ .min(1)
30
+ .describe("Output path below --output-root. The extension chooses .docx or .pdf; the result is returned as @output/<path>."),
31
+ markdown: z
32
+ .string()
33
+ .min(1)
34
+ .describe("Document content as Markdown. Use # for headings, - for lists, | for tables."),
35
+ overwrite: z
36
+ .boolean()
37
+ .optional()
38
+ .describe("Replace the file if it exists. Defaults to false so existing work is never lost silently.")
39
+ },
40
+ annotations: {
41
+ readOnlyHint: false,
42
+ destructiveHint: false,
43
+ idempotentHint: false,
44
+ openWorldHint: false
45
+ },
46
+ mutates: true,
47
+ handler: async (args, context) => {
48
+ const { config } = context;
49
+ assertWritable(config);
50
+ const format = requireFormat(args.path, "path");
51
+ assertNonMacroOutput(args.path);
52
+ if (format !== "docx" && format !== "pdf") {
53
+ throw toolError.invalidInput(`doc_write cannot produce a ${format} file`, "Use .docx or .pdf. For spreadsheets use sheet_write; to change an existing document's format use doc_convert.");
54
+ }
55
+ const target = await resolveOutputPath(config, args.path);
56
+ // markdownToDocx is async — verified; treating it as synchronous yields an
57
+ // empty object that fails much later inside the packager.
58
+ const doc = await markdownToDocx(args.markdown).catch((cause) => {
59
+ throw toolError.invalidInput(`the Markdown could not be converted: ${cause instanceof Error ? cause.message : String(cause)}`, "Check for an unclosed code fence or a malformed table.", { cause });
60
+ });
61
+ let size;
62
+ if (format === "docx") {
63
+ await writeWithPolicy(target, args.overwrite === true, temporary => Io.writeFile(doc, temporary));
64
+ size = (await stat(target)).size;
65
+ }
66
+ else {
67
+ const bytes = await Pdf.fromDocx(doc);
68
+ await writeWithPolicy(target, args.overwrite === true, temporary => writeFile(temporary, bytes));
69
+ size = bytes.byteLength;
70
+ }
71
+ return textResult(config, [
72
+ `Wrote **${outputDisplay(args.path)}** (${format}, ${formatBytes(size)}).`,
73
+ format === "pdf"
74
+ ? "- rendered through the Word layout engine, so pagination and line breaking are real"
75
+ : "- Markdown structure preserved as Word styles",
76
+ "",
77
+ "Read the returned @output path with doc_read to verify before reporting success."
78
+ ].join("\n"));
79
+ }
80
+ });
81
+ //# sourceMappingURL=doc-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-write.js","sourceRoot":"","sources":["../../src/tools/doc-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Shared document helpers for the Word / PDF tools.
3
+ *
4
+ * Concentrates three things the document tools must not each re-derive: which
5
+ * format a path denotes, the awkward corners of the underlying API that were
6
+ * verified empirically, and paginating long text so a tool result never blows
7
+ * the caller's context.
8
+ */
9
+ /**
10
+ * Document formats the tools can name.
11
+ *
12
+ * Kept separate from `doc_inspect`'s content sniffing: that answers "what is
13
+ * this file really", while this answers "what has the caller asked for", which
14
+ * for a write target is a question about the extension alone.
15
+ */
16
+ export type DocFormat = "docx" | "pdf" | "md" | "html" | "txt" | "xlsx" | "csv" | "odt";
17
+ /**
18
+ * Format implied by a path, or a tool error naming what is supported.
19
+ *
20
+ * Listing the accepted extensions in the error matters: a model that guessed
21
+ * `.doc` can correct itself in one step instead of retrying variations.
22
+ */
23
+ export declare function requireFormat(filePath: string, field: string): DocFormat;
24
+ /**
25
+ * Reject macro-enabled extensions for newly generated output.
26
+ *
27
+ * The writer produces ordinary DOCX/XLSX content. Naming that package `.docm`
28
+ * or `.xlsm` does not make it macro-enabled; worse, rewriting an existing macro
29
+ * file through a path that cannot prove VBA preservation risks silent macro
30
+ * loss. Read operations may still inspect such files.
31
+ */
32
+ export declare function assertNonMacroOutput(filePath: string): void;
33
+ /** A slice of a long text, with enough metadata for the caller to continue. */
34
+ export interface TextWindow {
35
+ readonly text: string;
36
+ readonly startLine: number;
37
+ readonly endLine: number;
38
+ readonly totalLines: number;
39
+ readonly truncated: boolean;
40
+ }
41
+ /**
42
+ * Take a line-bounded window of text.
43
+ *
44
+ * Line-based rather than character-based so the cursor a caller passes back is
45
+ * stable and meaningful: "continue from line 240" survives, whereas a character
46
+ * offset into re-extracted text does not.
47
+ */
48
+ export declare function takeLines(text: string, startLine: number, maxLines: number): TextWindow;
49
+ /**
50
+ * Render the standard "here is what I left out" footer.
51
+ *
52
+ * Always emitted when content was cut, because a model given a silent partial
53
+ * read will reason over it as though it were complete.
54
+ */
55
+ export declare function continuationNote(window: TextWindow, cursorField?: string): string[];
56
+ /**
57
+ * Normalize a page selection into 1-based page numbers.
58
+ *
59
+ * Accepts `[1,2,5]` or `"1-3,7"`, because a model reaches for both.
60
+ */
61
+ export declare function parsePages(pages: readonly number[] | string | undefined): number[] | undefined;
62
+ /**
63
+ * Whether a PDF can receive a genuine incremental update.
64
+ *
65
+ * `PdfEditor.saveIncremental()` silently falls back to a full rebuild for
66
+ * xref-stream files (PDF 1.5+ without a `trailer` keyword). A full rebuild
67
+ * renumbers objects and invalidates any existing signature, so a tool must not
68
+ * claim "signature preserved" without checking — and callers deserve to know
69
+ * when structure may be reorganised.
70
+ */
71
+ export declare function supportsIncrementalUpdate(bytes: Uint8Array): boolean;
72
+ /** Cap on how many pages a selector may name, before it is expanded. */
73
+ export declare const MAX_SELECTABLE_PAGES = 10000;
74
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/tools/document.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAsBxF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CASxE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ3D;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAYvF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,SAAc,GAAG,MAAM,EAAE,CAOxF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAoD9F;AASD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAGpE;AAED,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,QAAS,CAAC"}