teamshare-bridge 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -137,11 +137,12 @@ function docPrompt(agentName, docName, docText, target, context, maxChars, proje
137
137
  '- add_comment: reply in other threads. search/list tools: check what exists BEFORE creating (no duplicates).',
138
138
  '',
139
139
  '== DOCUMENT CREATION TOOLS (create rich files for the user) ==',
140
- '- docx-report: styled Word docs with headings, tables, TOC, images. Params: title, markdown, includeToc, accentColor.',
140
+ '- docx-report: professional Word docs with cover page, TOC, callout boxes, images from URLs, styled headings. Params: title, markdown, includeToc, accentColor, subtitle, author.',
141
141
  '- chart-builder: chart PNGs from CSV (bar/line/pie/scatter). Params: dataCsv, chartTypes, xKey, yKey.',
142
142
  '- xlsx-workbook: Excel spreadsheets. Params: sheets (JSON array with name, headers, rows).',
143
- '- pdf-exporter: PDF from markdown. Params: markdown, pageSize, orientation.',
143
+ '- pdf-exporter: professional PDF with cover page, TOC outline, callouts, images, headers/footers. Params: markdown, pageSize, orientation.',
144
144
  '- pptx-deck: PowerPoint from outline (H1=title, H2=slide, H3=bullets). Params: outlineMd, theme.',
145
+ '- docx-to-pdf: convert any .docx to pixel-perfect PDF via LibreOffice. Params: docxBase64 (base64 of the .docx file).',
145
146
  'If the comment asks you to DO something (create a task, write a document, note an issue, look something up), use the appropriate tool and report the concrete result (e.g. the task key or document link). Only claim success if a tool returned it.',
146
147
  ]
147
148
  : []),
@@ -1 +1 @@
1
- {"version":3,"file":"doc-reply.js","sourceRoot":"","sources":["../../src/lib/doc-reply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc-reply.js","sourceRoot":"","sources":["../../src/lib/doc-reply.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DocxReportTool = void 0;
4
4
  /**
5
5
  * DOCX Report Generator tool.
6
- * Creates Word documents from markdown with advanced formatting:
7
- * custom heading colors, TOC, embedded images, page breaks, headers/footers.
6
+ * Creates publication-quality Word documents from markdown with:
7
+ * - Branded cover page (title, subtitle, date, accent line)
8
+ * - Auto-updating Table of Contents
9
+ * - Styled headings with accent color
10
+ * - Headers/footers with page numbers
11
+ * - GitHub-style callout boxes (NOTE, WARNING, TIP, IMPORTANT, CAUTION)
12
+ * - Embedded images from URLs and chart buffers
13
+ * - Page breaks, code blocks, tables, lists, blockquotes
8
14
  */
9
15
  const docx_1 = require("docx");
10
16
  const BODY_FONT = 'Calibri';
11
17
  const CODE_FONT = 'Consolas';
12
18
  const MAX_TABLE_COLS = 12;
19
+ const IMAGE_MAX_WIDTH = 500;
20
+ const DEFAULT_ACCENT = '16a34a';
21
+ const CALLOUT_MAP = {
22
+ NOTE: { label: 'Note', borderColor: '3b82f6', bgColor: 'eff6ff' },
23
+ WARNING: { label: 'Warning', borderColor: 'f59e0b', bgColor: 'fffbeb' },
24
+ TIP: { label: 'Tip', borderColor: '16a34a', bgColor: 'f0fdf4' },
25
+ IMPORTANT: { label: 'Important', borderColor: 'dc2626', bgColor: 'fef2f2' },
26
+ CAUTION: { label: 'Caution', borderColor: '6b7280', bgColor: 'f9fafb' },
27
+ };
13
28
  function inlineSegments(raw) {
14
29
  const segments = [];
15
30
  const regex = /(\*\*[^*]+\*\*|\*[^*\n]+\*|`[^`\n]+`|\[[^\]\n]+\]\((?:https?:\/\/[^)\s]+)\))/g;
@@ -19,23 +34,18 @@ function inlineSegments(raw) {
19
34
  if (index > last)
20
35
  segments.push({ text: raw.slice(last, index) });
21
36
  const token = match[0];
22
- if (token.startsWith('**') && token.endsWith('**')) {
37
+ if (token.startsWith('**') && token.endsWith('**'))
23
38
  segments.push({ text: token.slice(2, -2), bold: true });
24
- }
25
- else if (token.startsWith('*') && token.endsWith('*')) {
39
+ else if (token.startsWith('*') && token.endsWith('*'))
26
40
  segments.push({ text: token.slice(1, -1), italics: true });
27
- }
28
- else if (token.startsWith('`') && token.endsWith('`')) {
41
+ else if (token.startsWith('`') && token.endsWith('`'))
29
42
  segments.push({ text: token.slice(1, -1), code: true });
30
- }
31
43
  else {
32
- const urlMatch = token.match(/^\[([^\]]+)\]\((https?:\/\/[^)\s]+)\)$/);
33
- if (urlMatch) {
34
- segments.push({ text: urlMatch[1], link: urlMatch[2] });
35
- }
36
- else {
44
+ const m = token.match(/^\[([^\]]+)\]\((https?:\/\/[^)\s]+)\)$/);
45
+ if (m)
46
+ segments.push({ text: m[1], link: m[2] });
47
+ else
37
48
  segments.push({ text: token });
38
- }
39
49
  }
40
50
  last = index + token.length;
41
51
  }
@@ -45,72 +55,50 @@ function inlineSegments(raw) {
45
55
  }
46
56
  function inlineRuns(segments, accentColor) {
47
57
  return segments.map((seg) => {
48
- if (seg.code) {
49
- return new docx_1.TextRun({
50
- text: seg.text,
51
- font: CODE_FONT,
52
- size: 20,
53
- shading: { type: docx_1.ShadingType.CLEAR, fill: 'F2F2F2' },
54
- });
55
- }
56
- return new docx_1.TextRun({
57
- text: seg.text,
58
- font: BODY_FONT,
59
- bold: seg.bold,
60
- italics: seg.italics,
61
- color: accentColor,
62
- });
58
+ if (seg.code)
59
+ return new docx_1.TextRun({ text: seg.text, font: CODE_FONT, size: 20, shading: { type: docx_1.ShadingType.CLEAR, fill: 'F2F2F2' } });
60
+ return new docx_1.TextRun({ text: seg.text, font: BODY_FONT, bold: seg.bold, italics: seg.italics, color: accentColor });
63
61
  });
64
62
  }
65
- function makeParagraph(line, accentColor) {
66
- if (!line.trim())
63
+ async function fetchImageBuffer(url) {
64
+ try {
65
+ const res = await fetch(url, { signal: AbortSignal.timeout(10_000) });
66
+ if (!res.ok)
67
+ return null;
68
+ return Buffer.from(await res.arrayBuffer());
69
+ }
70
+ catch {
67
71
  return null;
68
- const segments = inlineSegments(line);
69
- const hasLink = segments.some((s) => s.link);
70
- if (hasLink) {
71
- const children = segments.map((seg) => seg.link
72
- ? new docx_1.ExternalHyperlink({
73
- children: [new docx_1.TextRun({ text: seg.text, style: 'Hyperlink' })],
74
- link: seg.link,
75
- })
76
- : new docx_1.TextRun({
77
- text: seg.text,
78
- font: BODY_FONT,
79
- bold: seg.bold,
80
- italics: seg.italics,
81
- }));
82
- return new docx_1.Paragraph({ children, spacing: { after: 120 } });
83
72
  }
84
- return new docx_1.Paragraph({
85
- children: inlineRuns(segments, accentColor),
86
- spacing: { after: 120 },
87
- alignment: docx_1.AlignmentType.JUSTIFIED,
88
- });
89
73
  }
90
- function tableFromRows(rows) {
91
- const columnCount = Math.min(Math.max(...rows.map((r) => r.length), 1), MAX_TABLE_COLS);
92
- const makeCell = (text, header) => new docx_1.TableCell({
93
- children: [new docx_1.Paragraph({ children: inlineRuns(inlineSegments(text)) })],
94
- shading: header ? { type: docx_1.ShadingType.CLEAR, fill: 'E8E8E8' } : undefined,
95
- });
96
- const tableRows = rows.map((cells, index) => new docx_1.TableRow({
97
- tableHeader: index === 0,
98
- children: Array.from({ length: columnCount }, (_, c) => makeCell(cells[c]?.trim() ?? '', index === 0)),
99
- }));
100
- return new docx_1.Table({
101
- width: { size: 100, type: docx_1.WidthType.PERCENTAGE },
102
- rows: tableRows,
103
- borders: {
104
- top: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
105
- bottom: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
106
- left: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
107
- right: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
108
- insideHorizontal: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
109
- insideVertical: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
110
- },
111
- });
74
+ function imageTypeFromUrl(url) {
75
+ const l = url.toLowerCase();
76
+ if (l.endsWith('.png'))
77
+ return 'png';
78
+ if (l.endsWith('.gif'))
79
+ return 'gif';
80
+ if (l.endsWith('.bmp'))
81
+ return 'bmp';
82
+ return 'jpg';
83
+ }
84
+ function tableFromRows(rows, accentColor) {
85
+ const cc = Math.min(Math.max(...rows.map((r) => r.length), 1), MAX_TABLE_COLS);
86
+ const makeCell = (text, header) => new docx_1.TableCell({ children: [new docx_1.Paragraph({ children: inlineRuns(inlineSegments(text), accentColor) })], shading: header ? { type: docx_1.ShadingType.CLEAR, fill: accentColor ?? DEFAULT_ACCENT } : undefined });
87
+ const trs = rows.map((cells, idx) => new docx_1.TableRow({ tableHeader: idx === 0, children: Array.from({ length: cc }, (_, c) => makeCell(cells[c]?.trim() ?? '', idx === 0)) }));
88
+ return new docx_1.Table({ width: { size: 100, type: docx_1.WidthType.PERCENTAGE }, rows: trs, borders: {
89
+ top: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' }, bottom: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
90
+ left: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' }, right: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
91
+ insideHorizontal: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' }, insideVertical: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
92
+ } });
93
+ }
94
+ function calloutParagraphs(def, text, accentColor) {
95
+ const children = inlineRuns(inlineSegments(text), accentColor);
96
+ return [
97
+ new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: def.label, font: BODY_FONT, bold: true, size: 20, color: def.borderColor })], border: { left: { style: docx_1.BorderStyle.SINGLE, size: 18, color: def.borderColor, space: 4 } }, shading: { type: docx_1.ShadingType.CLEAR, fill: def.bgColor }, spacing: { before: 120, after: 0 }, indent: { left: 120 } }),
98
+ new docx_1.Paragraph({ children, border: { left: { style: docx_1.BorderStyle.SINGLE, size: 18, color: def.borderColor, space: 4 } }, shading: { type: docx_1.ShadingType.CLEAR, fill: def.bgColor }, spacing: { after: 120 }, indent: { left: 120 } }),
99
+ ];
112
100
  }
113
- function headingLevelFromDepth(depth) {
101
+ function headingLevel(depth) {
114
102
  switch (depth) {
115
103
  case 1: return docx_1.HeadingLevel.HEADING_1;
116
104
  case 2: return docx_1.HeadingLevel.HEADING_2;
@@ -126,33 +114,11 @@ class DocxReportTool {
126
114
  const title = String(params.title ?? 'Untitled');
127
115
  const markdown = String(params.markdown ?? '');
128
116
  const includeToc = params.includeToc === true;
129
- const accentColor = params.accentColor ? String(params.accentColor).replace('#', '') : undefined;
130
- const chartBuffers = Array.isArray(params.charts)
131
- ? params.charts
132
- : [];
133
- const children = [];
134
- // Title
135
- children.push(new docx_1.Paragraph({
136
- children: [
137
- new docx_1.TextRun({
138
- text: title,
139
- font: BODY_FONT,
140
- bold: true,
141
- size: 32,
142
- color: accentColor ?? '1a56db',
143
- }),
144
- ],
145
- heading: docx_1.HeadingLevel.TITLE,
146
- spacing: { after: 240 },
147
- }));
148
- // TOC
149
- if (includeToc) {
150
- children.push(new docx_1.TableOfContents('Table of Contents', {
151
- hyperlink: true,
152
- headingStyleRange: '1-3',
153
- }), new docx_1.Paragraph({ children: [new docx_1.PageBreak()] }));
154
- }
155
- // Parse markdown
117
+ const accentColor = params.accentColor ? String(params.accentColor).replace('#', '') : DEFAULT_ACCENT;
118
+ const chartBuffers = Array.isArray(params.charts) ? params.charts : [];
119
+ const subtitle = params.subtitle ? String(params.subtitle) : undefined;
120
+ const author = params.author ? String(params.author) : undefined;
121
+ const bodyChildren = [];
156
122
  const lines = markdown.split(/\r?\n/);
157
123
  let i = 0;
158
124
  let inCodeBlock = false;
@@ -160,13 +126,7 @@ class DocxReportTool {
160
126
  const flushCodeBlock = () => {
161
127
  if (!codeLines.length)
162
128
  return;
163
- children.push(...codeLines.map((line) => new docx_1.Paragraph({
164
- children: [
165
- new docx_1.TextRun({ text: line || ' ', font: CODE_FONT, size: 18 }),
166
- ],
167
- shading: { type: docx_1.ShadingType.CLEAR, fill: 'F5F5F5' },
168
- spacing: { after: 0 },
169
- })), new docx_1.Paragraph({ children: [], spacing: { after: 120 } }));
129
+ bodyChildren.push(...codeLines.map((line) => new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: line || ' ', font: CODE_FONT, size: 18 })], shading: { type: docx_1.ShadingType.CLEAR, fill: 'F5F5F5' }, spacing: { after: 0 } })), new docx_1.Paragraph({ children: [], spacing: { after: 120 } }));
170
130
  codeLines.length = 0;
171
131
  };
172
132
  for (; i < lines.length; i += 1) {
@@ -187,204 +147,135 @@ class DocxReportTool {
187
147
  codeLines.push(line);
188
148
  continue;
189
149
  }
190
- // Heading
150
+ const calloutMatch = trimmed.match(/^>\s*\[!(NOTE|WARNING|TIP|IMPORTANT|CAUTION)\]\s*(.*)$/i);
151
+ if (calloutMatch) {
152
+ flushCodeBlock();
153
+ const def = CALLOUT_MAP[calloutMatch[1].toUpperCase()];
154
+ if (def) {
155
+ const contentLines = [calloutMatch[2]];
156
+ while (i + 1 < lines.length) {
157
+ const next = lines[i + 1].trim();
158
+ if (next.startsWith('> ') || next === '>') {
159
+ contentLines.push(next.replace(/^>\s?/, ''));
160
+ i += 1;
161
+ }
162
+ else
163
+ break;
164
+ }
165
+ bodyChildren.push(...calloutParagraphs(def, contentLines.join(' ').trim(), accentColor));
166
+ }
167
+ continue;
168
+ }
191
169
  const headingMatch = trimmed.match(/^(#{1,6})\s+(.*)$/);
192
170
  if (headingMatch) {
193
171
  flushCodeBlock();
194
- const depth = headingMatch[1].length;
195
- const text = headingMatch[2].replace(/\*\*/g, '');
196
- children.push(new docx_1.Paragraph({
197
- children: [
198
- new docx_1.TextRun({
199
- text,
200
- font: BODY_FONT,
201
- bold: true,
202
- color: accentColor,
203
- }),
204
- ],
205
- heading: headingLevelFromDepth(depth),
206
- spacing: { before: 240, after: 120 },
207
- }));
172
+ bodyChildren.push(new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: headingMatch[2].replace(/\*\*/g, ''), font: BODY_FONT, bold: true, color: accentColor })], heading: headingLevel(headingMatch[1].length), spacing: { before: 240, after: 120 } }));
208
173
  continue;
209
174
  }
210
- // Page break
211
- if (/^---+$/.test(trimmed) || /^\*\*\*+$/.test(trimmed)) {
175
+ if (/^---+$/.test(trimmed) || /^\*\*\*+$/.test(trimmed) || /^___+$/.test(trimmed)) {
212
176
  flushCodeBlock();
213
- if (trimmed.length > 3) {
214
- children.push(new docx_1.Paragraph({
215
- children: [],
216
- border: {
217
- bottom: { style: docx_1.BorderStyle.SINGLE, size: 6, color: 'BBBBBB' },
218
- },
219
- spacing: { after: 120 },
220
- }));
177
+ if (trimmed.length > 3)
178
+ bodyChildren.push(new docx_1.Paragraph({ children: [new docx_1.PageBreak()] }));
179
+ else
180
+ bodyChildren.push(new docx_1.Paragraph({ children: [], border: { bottom: { style: docx_1.BorderStyle.SINGLE, size: 6, color: 'BBBBBB' } }, spacing: { after: 120 } }));
181
+ continue;
182
+ }
183
+ const imageMatch = trimmed.match(/^!\[([^\]]*)\]\((https?:\/\/[^)\s]+)\)$/);
184
+ if (imageMatch) {
185
+ flushCodeBlock();
186
+ const chartRef = trimmed.match(/^!\[chart:(\d+)\]$/);
187
+ if (chartRef && chartBuffers[parseInt(chartRef[1], 10)]) {
188
+ bodyChildren.push(new docx_1.Paragraph({ children: [new docx_1.ImageRun({ data: chartBuffers[parseInt(chartRef[1], 10)], transformation: { width: IMAGE_MAX_WIDTH, height: Math.round(IMAGE_MAX_WIDTH * 0.6) }, type: 'png' })], spacing: { before: 120, after: 120 }, alignment: docx_1.AlignmentType.CENTER }));
221
189
  }
222
190
  else {
223
- children.push(new docx_1.Paragraph({ children: [new docx_1.PageBreak()] }));
191
+ const buf = await fetchImageBuffer(imageMatch[2]);
192
+ if (buf)
193
+ bodyChildren.push(new docx_1.Paragraph({ children: [new docx_1.ImageRun({ data: buf, transformation: { width: IMAGE_MAX_WIDTH, height: Math.round(IMAGE_MAX_WIDTH * 0.6) }, type: imageTypeFromUrl(imageMatch[2]) })], spacing: { before: 120, after: 120 }, alignment: docx_1.AlignmentType.CENTER }));
224
194
  }
225
195
  continue;
226
196
  }
227
- // Pipe table
228
197
  if (trimmed.startsWith('|') && trimmed.endsWith('|')) {
229
198
  flushCodeBlock();
230
- const tableLines = [line];
199
+ const tl = [line];
231
200
  while (i + 1 < lines.length) {
232
201
  const next = lines[i + 1].trim();
233
202
  if (next.startsWith('|') && next.endsWith('|')) {
234
- tableLines.push(lines[i + 1]);
203
+ tl.push(lines[i + 1]);
235
204
  i += 1;
236
205
  }
237
- else {
206
+ else
238
207
  break;
239
- }
240
- }
241
- const rows = tableLines
242
- .map((l) => l
243
- .trim()
244
- .replace(/^\||\|$/g, '')
245
- .split('|')
246
- .map((c) => c.trim()))
247
- .filter((cells) => !cells.every((c) => /^:?-+:?$/.test(c)));
248
- if (rows.length > 0) {
249
- children.push(tableFromRows(rows), new docx_1.Paragraph({ children: [] }));
250
208
  }
209
+ const rows = tl.map((l) => l.trim().replace(/^\||\|$/g, '').split('|').map((c) => c.trim())).filter((cells) => !cells.every((c) => /^:?-+:?$/.test(c)));
210
+ if (rows.length > 0)
211
+ bodyChildren.push(tableFromRows(rows, accentColor), new docx_1.Paragraph({ children: [] }));
251
212
  continue;
252
213
  }
253
- // Bullet list
254
214
  const bulletMatch = trimmed.match(/^[-*+]\s+(.*)$/);
255
215
  if (bulletMatch) {
256
216
  flushCodeBlock();
257
- children.push(new docx_1.Paragraph({
258
- children: inlineRuns(inlineSegments(bulletMatch[1]), accentColor),
259
- bullet: { level: 0 },
260
- spacing: { after: 60 },
261
- }));
217
+ bodyChildren.push(new docx_1.Paragraph({ children: inlineRuns(inlineSegments(bulletMatch[1]), accentColor), bullet: { level: 0 }, spacing: { after: 60 } }));
262
218
  continue;
263
219
  }
264
- // Numbered list
265
220
  const orderedMatch = trimmed.match(/^\d+[.)]\s+(.*)$/);
266
221
  if (orderedMatch) {
267
222
  flushCodeBlock();
268
- children.push(new docx_1.Paragraph({
269
- children: inlineRuns(inlineSegments(orderedMatch[1]), accentColor),
270
- numbering: { reference: 'ordered-list', level: 0 },
271
- spacing: { after: 60 },
272
- }));
273
- continue;
274
- }
275
- // Blockquote
276
- if (trimmed.startsWith('> ')) {
277
- flushCodeBlock();
278
- children.push(new docx_1.Paragraph({
279
- children: inlineRuns(inlineSegments(trimmed.slice(2)), accentColor),
280
- indent: { left: 480 },
281
- shading: { type: docx_1.ShadingType.CLEAR, fill: 'F7F7F7' },
282
- spacing: { after: 120 },
283
- }));
223
+ bodyChildren.push(new docx_1.Paragraph({ children: inlineRuns(inlineSegments(orderedMatch[1]), accentColor), numbering: { reference: 'ordered-list', level: 0 }, spacing: { after: 60 } }));
284
224
  continue;
285
225
  }
286
- // Embedded chart image
287
- if (trimmed.startsWith('![chart:') && trimmed.endsWith(']')) {
226
+ if (trimmed.startsWith('> ') && !trimmed.match(/^>\s*\[!/)) {
288
227
  flushCodeBlock();
289
- const chartIndex = parseInt(trimmed.slice(8, -1), 10);
290
- if (chartBuffers[chartIndex]) {
291
- children.push(new docx_1.Paragraph({
292
- children: [
293
- new docx_1.ImageRun({
294
- data: chartBuffers[chartIndex],
295
- transformation: { width: 500, height: 300 },
296
- type: 'png',
297
- }),
298
- ],
299
- spacing: { after: 120 },
300
- }));
301
- }
228
+ bodyChildren.push(new docx_1.Paragraph({ children: inlineRuns(inlineSegments(trimmed.slice(2)), accentColor), indent: { left: 480 }, shading: { type: docx_1.ShadingType.CLEAR, fill: 'F7F7F7' }, spacing: { after: 120 } }));
302
229
  continue;
303
230
  }
304
- // Plain paragraph
305
231
  flushCodeBlock();
306
232
  if (!trimmed) {
307
- children.push(new docx_1.Paragraph({ children: [] }));
233
+ bodyChildren.push(new docx_1.Paragraph({ children: [] }));
308
234
  continue;
309
235
  }
310
- const p = makeParagraph(trimmed, accentColor);
311
- if (p)
312
- children.push(p);
236
+ const hasLink = /\[[^\]]+\]\(https?:\/\/[^)\s]+\)/.test(trimmed);
237
+ if (hasLink) {
238
+ const segments = inlineSegments(trimmed);
239
+ bodyChildren.push(new docx_1.Paragraph({ children: segments.map((seg) => seg.link ? new docx_1.ExternalHyperlink({ children: [new docx_1.TextRun({ text: seg.text, style: 'Hyperlink' })], link: seg.link }) : new docx_1.TextRun({ text: seg.text, font: BODY_FONT, bold: seg.bold, italics: seg.italics, color: accentColor })), spacing: { after: 120 } }));
240
+ }
241
+ else {
242
+ bodyChildren.push(new docx_1.Paragraph({ children: inlineRuns(inlineSegments(trimmed), accentColor), spacing: { after: 120 }, alignment: docx_1.AlignmentType.JUSTIFIED }));
243
+ }
313
244
  }
314
245
  flushCodeBlock();
246
+ const today = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });
315
247
  const doc = new docx_1.Document({
316
- numbering: {
317
- config: [
318
- {
319
- reference: 'ordered-list',
320
- levels: [
321
- {
322
- level: 0,
323
- format: docx_1.LevelFormat.DECIMAL,
324
- text: '%1.',
325
- alignment: docx_1.AlignmentType.START,
326
- style: { paragraph: { indent: { left: 720, hanging: 260 } } },
327
- },
328
- ],
329
- },
330
- ],
331
- },
332
- features: {
333
- updateFields: includeToc,
334
- },
248
+ styles: { default: {
249
+ heading1: { run: { font: BODY_FONT, size: 28, bold: true, color: accentColor }, paragraph: { spacing: { before: 360, after: 200 } } },
250
+ heading2: { run: { font: BODY_FONT, size: 24, bold: true, color: accentColor }, paragraph: { spacing: { before: 280, after: 160 } } },
251
+ heading3: { run: { font: BODY_FONT, size: 20, bold: true, color: accentColor }, paragraph: { spacing: { before: 240, after: 120 } } },
252
+ heading4: { run: { font: BODY_FONT, size: 18, bold: true, color: accentColor }, paragraph: { spacing: { before: 200, after: 100 } } },
253
+ heading5: { run: { font: BODY_FONT, size: 16, bold: true, color: accentColor }, paragraph: { spacing: { before: 160, after: 80 } } },
254
+ heading6: { run: { font: BODY_FONT, size: 14, bold: true, color: accentColor }, paragraph: { spacing: { before: 120, after: 60 } } },
255
+ } },
256
+ numbering: { config: [{ reference: 'ordered-list', levels: [{ level: 0, format: docx_1.LevelFormat.DECIMAL, text: '%1.', alignment: docx_1.AlignmentType.START, style: { paragraph: { indent: { left: 720, hanging: 260 } } } }] }] },
257
+ features: { updateFields: includeToc },
335
258
  sections: [
336
- {
337
- headers: {
338
- default: new docx_1.Header({
339
- children: [
340
- new docx_1.Paragraph({
341
- children: [
342
- new docx_1.TextRun({ text: title, font: BODY_FONT, size: 18, color: '999999' }),
343
- ],
344
- alignment: docx_1.AlignmentType.RIGHT,
345
- }),
346
- ],
347
- }),
348
- },
349
- footers: {
350
- default: new docx_1.Footer({
351
- children: [
352
- new docx_1.Paragraph({
353
- children: [
354
- new docx_1.TextRun({ text: 'Page ', font: BODY_FONT, size: 18 }),
355
- new docx_1.TextRun({
356
- children: [docx_1.PageNumber.CURRENT],
357
- font: BODY_FONT,
358
- size: 18,
359
- }),
360
- new docx_1.TextRun({ text: ' of ', font: BODY_FONT, size: 18 }),
361
- new docx_1.TextRun({
362
- children: [docx_1.PageNumber.TOTAL_PAGES],
363
- font: BODY_FONT,
364
- size: 18,
365
- }),
366
- ],
367
- alignment: docx_1.AlignmentType.CENTER,
368
- }),
369
- ],
370
- }),
371
- },
372
- children,
259
+ { properties: { page: { margin: { top: (0, docx_1.convertInchesToTwip)(1.5), bottom: (0, docx_1.convertInchesToTwip)(1), left: (0, docx_1.convertInchesToTwip)(1.2), right: (0, docx_1.convertInchesToTwip)(1.2) } }, titlePage: true }, headers: { first: new docx_1.Header({ children: [] }) }, footers: { first: new docx_1.Footer({ children: [] }) }, children: [
260
+ ...Array.from({ length: 6 }, () => new docx_1.Paragraph({ children: [], spacing: { after: 200 } })),
261
+ new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: title, font: BODY_FONT, bold: true, size: 56, color: accentColor })], alignment: docx_1.AlignmentType.CENTER, spacing: { after: 200 } }),
262
+ ...(subtitle ? [new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: subtitle, font: BODY_FONT, size: 28, color: '666666' })], alignment: docx_1.AlignmentType.CENTER, spacing: { after: 160 } })] : []),
263
+ new docx_1.Paragraph({ children: [], border: { bottom: { style: docx_1.BorderStyle.SINGLE, size: 6, color: accentColor, space: 1 } }, spacing: { after: 200 }, indent: { left: (0, docx_1.convertInchesToTwip)(2), right: (0, docx_1.convertInchesToTwip)(2) } }),
264
+ new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: today, font: BODY_FONT, size: 22, color: '999999' })], alignment: docx_1.AlignmentType.CENTER, spacing: { after: 80 } }),
265
+ ...(author ? [new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: author, font: BODY_FONT, size: 22, color: '999999' })], alignment: docx_1.AlignmentType.CENTER, spacing: { after: 80 } })] : []),
266
+ new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: 'TeamShare Document', font: BODY_FONT, size: 18, color: 'BBBBBB', italics: true })], alignment: docx_1.AlignmentType.CENTER }),
267
+ new docx_1.Paragraph({ children: [new docx_1.PageBreak()] }),
268
+ ] },
269
+ { properties: { page: { margin: { top: (0, docx_1.convertInchesToTwip)(1), bottom: (0, docx_1.convertInchesToTwip)(1), left: (0, docx_1.convertInchesToTwip)(1.2), right: (0, docx_1.convertInchesToTwip)(1.2) } } },
270
+ headers: { default: new docx_1.Header({ children: [new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: title, font: BODY_FONT, size: 18, color: '999999' })], alignment: docx_1.AlignmentType.RIGHT })] }) },
271
+ footers: { default: new docx_1.Footer({ children: [new docx_1.Paragraph({ children: [new docx_1.TextRun({ text: 'Page ', font: BODY_FONT, size: 18 }), new docx_1.TextRun({ children: [docx_1.PageNumber.CURRENT], font: BODY_FONT, size: 18 }), new docx_1.TextRun({ text: ' of ', font: BODY_FONT, size: 18 }), new docx_1.TextRun({ children: [docx_1.PageNumber.TOTAL_PAGES], font: BODY_FONT, size: 18 })], alignment: docx_1.AlignmentType.CENTER })] }) },
272
+ children: [...(includeToc ? [new docx_1.TableOfContents('Table of Contents', { hyperlink: true, headingStyleRange: '1-3' }), new docx_1.Paragraph({ children: [new docx_1.PageBreak()] })] : []), ...bodyChildren],
373
273
  },
374
274
  ],
375
275
  });
376
276
  const buffer = await docx_1.Packer.toBuffer(doc);
377
277
  const safeName = title.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 64);
378
- return {
379
- outputs: [
380
- {
381
- buffer,
382
- fileName: `${safeName}.docx`,
383
- mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
384
- },
385
- ],
386
- log: [`Generated DOCX: ${safeName}.docx (${buffer.length} bytes)`],
387
- };
278
+ return { outputs: [{ buffer, fileName: `${safeName}.docx`, mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }], log: [`Generated DOCX: ${safeName}.docx (${buffer.length} bytes)`] };
388
279
  }
389
280
  }
390
281
  exports.DocxReportTool = DocxReportTool;