@cicctencent/agent-server 0.2.40 → 0.2.42

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 (112) hide show
  1. package/README.md +17 -1
  2. package/dist/cjs/agent/agent-server.d.ts.map +1 -1
  3. package/dist/cjs/agent/agent-server.js +11 -86
  4. package/dist/cjs/agent/agent-server.js.map +1 -1
  5. package/dist/cjs/doc-generator/config-loader.d.ts +27 -0
  6. package/dist/cjs/doc-generator/config-loader.d.ts.map +1 -0
  7. package/dist/cjs/doc-generator/config-loader.js +200 -0
  8. package/dist/cjs/doc-generator/config-loader.js.map +1 -0
  9. package/dist/cjs/doc-generator/docx-renderer.d.ts +14 -0
  10. package/dist/cjs/doc-generator/docx-renderer.d.ts.map +1 -0
  11. package/dist/cjs/doc-generator/docx-renderer.js +354 -0
  12. package/dist/cjs/doc-generator/docx-renderer.js.map +1 -0
  13. package/dist/cjs/doc-generator/index.d.ts +23 -0
  14. package/dist/cjs/doc-generator/index.d.ts.map +1 -0
  15. package/dist/cjs/doc-generator/index.js +251 -0
  16. package/dist/cjs/doc-generator/index.js.map +1 -0
  17. package/dist/cjs/doc-generator/pdf-renderer.d.ts +14 -0
  18. package/dist/cjs/doc-generator/pdf-renderer.d.ts.map +1 -0
  19. package/dist/cjs/doc-generator/pdf-renderer.js +378 -0
  20. package/dist/cjs/doc-generator/pdf-renderer.js.map +1 -0
  21. package/dist/cjs/doc-generator/pptx-renderer.d.ts +14 -0
  22. package/dist/cjs/doc-generator/pptx-renderer.d.ts.map +1 -0
  23. package/dist/cjs/doc-generator/pptx-renderer.js +649 -0
  24. package/dist/cjs/doc-generator/pptx-renderer.js.map +1 -0
  25. package/dist/cjs/doc-generator/report-renderer.d.ts +88 -0
  26. package/dist/cjs/doc-generator/report-renderer.d.ts.map +1 -0
  27. package/dist/cjs/doc-generator/report-renderer.js +699 -0
  28. package/dist/cjs/doc-generator/report-renderer.js.map +1 -0
  29. package/dist/cjs/doc-generator/types.d.ts +193 -0
  30. package/dist/cjs/doc-generator/types.d.ts.map +1 -0
  31. package/dist/cjs/doc-generator/types.js +7 -0
  32. package/dist/cjs/doc-generator/types.js.map +1 -0
  33. package/dist/cjs/index.d.ts +4 -0
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +45 -36
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/cjs/prompt/prompt-builder.d.ts +1 -1
  38. package/dist/cjs/prompt/prompt-builder.d.ts.map +1 -1
  39. package/dist/cjs/prompt/prompt-builder.js +14 -1
  40. package/dist/cjs/prompt/prompt-builder.js.map +1 -1
  41. package/dist/cjs/prompt/shared-fragments.d.ts +3 -3
  42. package/dist/cjs/prompt/shared-fragments.d.ts.map +1 -1
  43. package/dist/cjs/prompt/shared-fragments.js +5 -3
  44. package/dist/cjs/prompt/shared-fragments.js.map +1 -1
  45. package/dist/cjs/tool/builtin.d.ts +10 -3
  46. package/dist/cjs/tool/builtin.d.ts.map +1 -1
  47. package/dist/cjs/tool/builtin.js +10 -3
  48. package/dist/cjs/tool/builtin.js.map +1 -1
  49. package/dist/cjs/tool/tools/docgen.d.ts +5 -0
  50. package/dist/cjs/tool/tools/docgen.d.ts.map +1 -0
  51. package/dist/cjs/tool/tools/docgen.js +388 -0
  52. package/dist/cjs/tool/tools/docgen.js.map +1 -0
  53. package/dist/cjs/tool/tools/sandbox.js +2 -2
  54. package/dist/cjs/tool/tools/sandbox.js.map +1 -1
  55. package/dist/cjs/tool/tools/web.js +2 -2
  56. package/dist/cjs/tool/tools/web.js.map +1 -1
  57. package/dist/esm/agent/agent-server.d.ts.map +1 -1
  58. package/dist/esm/agent/agent-server.js +11 -86
  59. package/dist/esm/agent/agent-server.js.map +1 -1
  60. package/dist/esm/doc-generator/config-loader.d.ts +27 -0
  61. package/dist/esm/doc-generator/config-loader.d.ts.map +1 -0
  62. package/dist/esm/doc-generator/config-loader.js +160 -0
  63. package/dist/esm/doc-generator/config-loader.js.map +1 -0
  64. package/dist/esm/doc-generator/docx-renderer.d.ts +14 -0
  65. package/dist/esm/doc-generator/docx-renderer.d.ts.map +1 -0
  66. package/dist/esm/doc-generator/docx-renderer.js +318 -0
  67. package/dist/esm/doc-generator/docx-renderer.js.map +1 -0
  68. package/dist/esm/doc-generator/index.d.ts +23 -0
  69. package/dist/esm/doc-generator/index.d.ts.map +1 -0
  70. package/dist/esm/doc-generator/index.js +212 -0
  71. package/dist/esm/doc-generator/index.js.map +1 -0
  72. package/dist/esm/doc-generator/pdf-renderer.d.ts +14 -0
  73. package/dist/esm/doc-generator/pdf-renderer.d.ts.map +1 -0
  74. package/dist/esm/doc-generator/pdf-renderer.js +339 -0
  75. package/dist/esm/doc-generator/pdf-renderer.js.map +1 -0
  76. package/dist/esm/doc-generator/pptx-renderer.d.ts +14 -0
  77. package/dist/esm/doc-generator/pptx-renderer.d.ts.map +1 -0
  78. package/dist/esm/doc-generator/pptx-renderer.js +643 -0
  79. package/dist/esm/doc-generator/pptx-renderer.js.map +1 -0
  80. package/dist/esm/doc-generator/report-renderer.d.ts +88 -0
  81. package/dist/esm/doc-generator/report-renderer.d.ts.map +1 -0
  82. package/dist/esm/doc-generator/report-renderer.js +663 -0
  83. package/dist/esm/doc-generator/report-renderer.js.map +1 -0
  84. package/dist/esm/doc-generator/types.d.ts +193 -0
  85. package/dist/esm/doc-generator/types.d.ts.map +1 -0
  86. package/dist/esm/doc-generator/types.js +6 -0
  87. package/dist/esm/doc-generator/types.js.map +1 -0
  88. package/dist/esm/index.d.ts +4 -0
  89. package/dist/esm/index.d.ts.map +1 -1
  90. package/dist/esm/index.js +3 -0
  91. package/dist/esm/index.js.map +1 -1
  92. package/dist/esm/prompt/prompt-builder.d.ts +1 -1
  93. package/dist/esm/prompt/prompt-builder.d.ts.map +1 -1
  94. package/dist/esm/prompt/prompt-builder.js +14 -1
  95. package/dist/esm/prompt/prompt-builder.js.map +1 -1
  96. package/dist/esm/prompt/shared-fragments.d.ts +3 -3
  97. package/dist/esm/prompt/shared-fragments.d.ts.map +1 -1
  98. package/dist/esm/prompt/shared-fragments.js +5 -3
  99. package/dist/esm/prompt/shared-fragments.js.map +1 -1
  100. package/dist/esm/tool/builtin.d.ts +10 -3
  101. package/dist/esm/tool/builtin.d.ts.map +1 -1
  102. package/dist/esm/tool/builtin.js +10 -3
  103. package/dist/esm/tool/builtin.js.map +1 -1
  104. package/dist/esm/tool/tools/docgen.d.ts +5 -0
  105. package/dist/esm/tool/tools/docgen.d.ts.map +1 -0
  106. package/dist/esm/tool/tools/docgen.js +352 -0
  107. package/dist/esm/tool/tools/docgen.js.map +1 -0
  108. package/dist/esm/tool/tools/sandbox.js +2 -2
  109. package/dist/esm/tool/tools/sandbox.js.map +1 -1
  110. package/dist/esm/tool/tools/web.js +2 -2
  111. package/dist/esm/tool/tools/web.js.map +1 -1
  112. package/package.json +7 -2
@@ -0,0 +1,318 @@
1
+ /**
2
+ * @file DOCX 渲染器
3
+ * @description 使用 docx 库将结构化文档数据渲染为 .docx 文件
4
+ */
5
+ import { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell, HeadingLevel, BorderStyle, WidthType, ShadingType, AlignmentType, PageBreak, Header, Footer, PageNumber, LevelFormat, TableOfContents, ImageRun, } from 'docx';
6
+ import * as fs from 'fs';
7
+ import { loadTheme } from "./config-loader.js";
8
+ /** 将 hex 颜色转 DOCX 格式(去掉 #) */
9
+ function hex(color) {
10
+ if (!color)
11
+ return '000000';
12
+ return color.replace('#', '');
13
+ }
14
+ /** 页面尺寸映射 (DXA units, 1440 DXA = 1 inch) */
15
+ const PAGE_SIZES = {
16
+ A4: { width: 11906, height: 16838 },
17
+ letter: { width: 12240, height: 15840 },
18
+ legal: { width: 12240, height: 20160 },
19
+ };
20
+ /** 渲染 DOCX */
21
+ export async function renderDocx(data, templatesDir) {
22
+ const theme = loadTheme('docx', data.theme, templatesDir);
23
+ const opts = data.options || {};
24
+ // 页面配置
25
+ const pageSizeKey = opts.pageSize || theme.page?.size || 'A4';
26
+ const pageSize = PAGE_SIZES[pageSizeKey] || PAGE_SIZES.A4;
27
+ const margins = opts.margins || theme.page?.margin || { top: 1440, right: 1440, bottom: 1440, left: 1440 };
28
+ // 内容宽度 (DXA)
29
+ const contentWidth = pageSize.width - margins.left - margins.right;
30
+ // 构建文档 children
31
+ const children = [];
32
+ // 可选目录
33
+ if (opts.includeToc) {
34
+ children.push(new TableOfContents('Table of Contents', {
35
+ hyperlink: true,
36
+ headingStyleRange: '1-3',
37
+ }));
38
+ children.push(new Paragraph({ children: [new PageBreak()] }));
39
+ }
40
+ // 渲染每个区块
41
+ for (const block of data.blocks) {
42
+ const rendered = renderBlock(block, theme, contentWidth);
43
+ children.push(...rendered);
44
+ }
45
+ // 构建文档
46
+ const doc = new Document({
47
+ styles: {
48
+ default: {
49
+ document: {
50
+ run: { font: theme.fonts.body, size: (theme.sizes.body || 12) * 2 },
51
+ },
52
+ },
53
+ paragraphStyles: buildParagraphStyles(theme),
54
+ },
55
+ numbering: {
56
+ config: [
57
+ {
58
+ reference: 'bullets',
59
+ levels: [{
60
+ level: 0,
61
+ format: LevelFormat.BULLET,
62
+ text: '\u2022',
63
+ alignment: AlignmentType.LEFT,
64
+ style: { paragraph: { indent: { left: 720, hanging: 360 } } },
65
+ }],
66
+ },
67
+ {
68
+ reference: 'numbers',
69
+ levels: [{
70
+ level: 0,
71
+ format: LevelFormat.DECIMAL,
72
+ text: '%1.',
73
+ alignment: AlignmentType.LEFT,
74
+ style: { paragraph: { indent: { left: 720, hanging: 360 } } },
75
+ }],
76
+ },
77
+ ],
78
+ },
79
+ sections: [{
80
+ properties: {
81
+ page: {
82
+ size: { width: pageSize.width, height: pageSize.height },
83
+ margin: margins,
84
+ },
85
+ },
86
+ headers: opts.headerText ? {
87
+ default: new Header({
88
+ children: [new Paragraph({
89
+ border: { bottom: { style: BorderStyle.SINGLE, size: 6, color: hex(theme.colors.primary), space: 1 } },
90
+ children: [new TextRun({ text: opts.headerText, font: theme.fonts.caption, size: (theme.sizes.caption || 10) * 2, color: hex(theme.colors.caption) })],
91
+ })],
92
+ }),
93
+ } : undefined,
94
+ footers: (opts.showPageNumbers !== false || opts.footerText) ? {
95
+ default: new Footer({
96
+ children: [new Paragraph({
97
+ alignment: AlignmentType.CENTER,
98
+ children: [
99
+ ...(opts.footerText ? [new TextRun({ text: opts.footerText + ' | ', font: theme.fonts.caption, size: (theme.sizes.caption || 10) * 2, color: hex(theme.colors.caption) })] : []),
100
+ new TextRun({ text: 'Page ', font: theme.fonts.caption, size: (theme.sizes.caption || 10) * 2, color: hex(theme.colors.caption) }),
101
+ new TextRun({ children: [PageNumber.CURRENT], font: theme.fonts.caption, size: (theme.sizes.caption || 10) * 2, color: hex(theme.colors.caption) }),
102
+ ],
103
+ })],
104
+ }),
105
+ } : undefined,
106
+ children,
107
+ }],
108
+ });
109
+ const buffer = await Packer.toBuffer(doc);
110
+ const filename = data.filename || `${sanitizeFilename(data.title)}.docx`;
111
+ return {
112
+ buffer,
113
+ filename,
114
+ mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
115
+ size: buffer.length,
116
+ };
117
+ }
118
+ function buildParagraphStyles(theme) {
119
+ const sizes = theme.sizes;
120
+ return [
121
+ {
122
+ id: 'Heading1', name: 'Heading 1', basedOn: 'Normal', next: 'Normal', quickFormat: true,
123
+ run: { size: (sizes.h1 || 24) * 2, bold: true, font: theme.fonts.heading, color: hex(theme.colors.heading || theme.colors.primary) },
124
+ paragraph: { spacing: { before: theme.spacing.headingBefore || 240, after: theme.spacing.headingAfter || 120 }, outlineLevel: 0 },
125
+ },
126
+ {
127
+ id: 'Heading2', name: 'Heading 2', basedOn: 'Normal', next: 'Normal', quickFormat: true,
128
+ run: { size: (sizes.h2 || 20) * 2, bold: true, font: theme.fonts.heading, color: hex(theme.colors.heading || theme.colors.primary) },
129
+ paragraph: { spacing: { before: theme.spacing.headingBefore || 240, after: theme.spacing.headingAfter || 120 }, outlineLevel: 1 },
130
+ },
131
+ {
132
+ id: 'Heading3', name: 'Heading 3', basedOn: 'Normal', next: 'Normal', quickFormat: true,
133
+ run: { size: (sizes.h3 || 16) * 2, bold: true, font: theme.fonts.heading, color: hex(theme.colors.heading || theme.colors.primary) },
134
+ paragraph: { spacing: { before: 180, after: 120 }, outlineLevel: 2 },
135
+ },
136
+ {
137
+ id: 'Heading4', name: 'Heading 4', basedOn: 'Normal', next: 'Normal', quickFormat: true,
138
+ run: { size: (sizes.h4 || 14) * 2, bold: true, font: theme.fonts.heading, color: hex(theme.colors.heading || theme.colors.primary) },
139
+ paragraph: { spacing: { before: 120, after: 80 }, outlineLevel: 3 },
140
+ },
141
+ ];
142
+ }
143
+ function renderBlock(block, theme, contentWidth) {
144
+ const result = [];
145
+ const c = theme.colors;
146
+ const f = theme.fonts;
147
+ const s = theme.sizes;
148
+ const sp = theme.spacing;
149
+ switch (block.type) {
150
+ case 'heading': {
151
+ const levelMap = {
152
+ 1: HeadingLevel.HEADING_1,
153
+ 2: HeadingLevel.HEADING_2,
154
+ 3: HeadingLevel.HEADING_3,
155
+ 4: HeadingLevel.HEADING_4,
156
+ };
157
+ result.push(new Paragraph({
158
+ heading: levelMap[block.level || 1] || HeadingLevel.HEADING_1,
159
+ children: [new TextRun({ text: block.text || '' })],
160
+ }));
161
+ break;
162
+ }
163
+ case 'paragraph': {
164
+ if (block.runs?.length) {
165
+ result.push(new Paragraph({
166
+ spacing: { after: sp.paragraphAfter || 120, line: sp.lineSpacing || 276 },
167
+ children: block.runs.map(run => new TextRun({
168
+ text: run.text,
169
+ bold: run.bold,
170
+ italics: run.italic,
171
+ underline: run.underline ? {} : undefined,
172
+ color: run.color ? hex(run.color) : undefined,
173
+ size: run.fontSize ? run.fontSize * 2 : undefined,
174
+ font: f.body,
175
+ })),
176
+ }));
177
+ }
178
+ else {
179
+ result.push(new Paragraph({
180
+ spacing: { after: sp.paragraphAfter || 120, line: sp.lineSpacing || 276 },
181
+ children: [new TextRun({ text: block.text || '', font: f.body, size: (s.body || 12) * 2, color: hex(c.body || c.textPrimary) })],
182
+ }));
183
+ }
184
+ break;
185
+ }
186
+ case 'bullets': {
187
+ if (block.items?.length) {
188
+ for (const item of block.items) {
189
+ result.push(new Paragraph({
190
+ numbering: { reference: 'bullets', level: 0 },
191
+ spacing: { after: 60 },
192
+ children: [new TextRun({ text: item, font: f.body, size: (s.body || 12) * 2, color: hex(c.body || c.textPrimary) })],
193
+ }));
194
+ }
195
+ }
196
+ break;
197
+ }
198
+ case 'numbers': {
199
+ if (block.items?.length) {
200
+ for (const item of block.items) {
201
+ result.push(new Paragraph({
202
+ numbering: { reference: 'numbers', level: 0 },
203
+ spacing: { after: 60 },
204
+ children: [new TextRun({ text: item, font: f.body, size: (s.body || 12) * 2, color: hex(c.body || c.textPrimary) })],
205
+ }));
206
+ }
207
+ }
208
+ break;
209
+ }
210
+ case 'table': {
211
+ if (block.table) {
212
+ result.push(renderDocxTable(block.table, theme, contentWidth));
213
+ }
214
+ break;
215
+ }
216
+ case 'image': {
217
+ if (block.image_url) {
218
+ try {
219
+ const imgData = fs.existsSync(block.image_url)
220
+ ? fs.readFileSync(block.image_url)
221
+ : Buffer.alloc(0);
222
+ if (imgData.length > 0) {
223
+ const ext = block.image_url.split('.').pop()?.toLowerCase() || 'png';
224
+ result.push(new Paragraph({
225
+ children: [new ImageRun({
226
+ type: ext,
227
+ data: imgData,
228
+ transformation: {
229
+ width: block.image_width || 400,
230
+ height: block.image_height || 300,
231
+ },
232
+ altText: {
233
+ title: block.image_alt || 'Image',
234
+ description: block.image_alt || 'Image',
235
+ name: block.image_alt || 'image',
236
+ },
237
+ })],
238
+ }));
239
+ }
240
+ }
241
+ catch {
242
+ result.push(new Paragraph({
243
+ children: [new TextRun({ text: `[Image: ${block.image_url}]`, italics: true, color: hex(c.caption) })],
244
+ }));
245
+ }
246
+ }
247
+ break;
248
+ }
249
+ case 'page_break': {
250
+ result.push(new Paragraph({ children: [new PageBreak()] }));
251
+ break;
252
+ }
253
+ case 'toc': {
254
+ result.push(new TableOfContents('Table of Contents', {
255
+ hyperlink: true,
256
+ headingStyleRange: '1-3',
257
+ }));
258
+ break;
259
+ }
260
+ case 'spacer': {
261
+ result.push(new Paragraph({ spacing: { after: block.height || 200 }, children: [] }));
262
+ break;
263
+ }
264
+ }
265
+ return result;
266
+ }
267
+ function renderDocxTable(table, theme, contentWidth) {
268
+ const c = theme.colors;
269
+ const f = theme.fonts;
270
+ const s = theme.sizes;
271
+ const border = { style: BorderStyle.SINGLE, size: 1, color: hex(c.tableBorder || 'CCCCCC') };
272
+ const borders = { top: border, bottom: border, left: border, right: border };
273
+ const colCount = table.headers.length;
274
+ const colWidth = Math.floor(contentWidth / colCount);
275
+ const headerRow = new TableRow({
276
+ children: table.headers.map(h => new TableCell({
277
+ borders,
278
+ width: { size: colWidth, type: WidthType.DXA },
279
+ shading: { fill: hex(c.tableHeader || 'D5E8F0'), type: ShadingType.CLEAR },
280
+ margins: { top: 80, bottom: 80, left: 120, right: 120 },
281
+ children: [new Paragraph({
282
+ alignment: AlignmentType.CENTER,
283
+ children: [new TextRun({
284
+ text: h,
285
+ bold: true,
286
+ font: f.body,
287
+ size: (s.body || 12) * 2,
288
+ color: hex(c.tableHeaderText || c.textPrimary),
289
+ })],
290
+ })],
291
+ })),
292
+ });
293
+ const dataRows = table.rows.map((row, rowIdx) => new TableRow({
294
+ children: row.map(cell => new TableCell({
295
+ borders,
296
+ width: { size: colWidth, type: WidthType.DXA },
297
+ shading: rowIdx % 2 === 1 ? { fill: hex(c.tableAltRow || 'F5F9FC'), type: ShadingType.CLEAR } : undefined,
298
+ margins: { top: 80, bottom: 80, left: 120, right: 120 },
299
+ children: [new Paragraph({
300
+ children: [new TextRun({
301
+ text: String(cell),
302
+ font: f.body,
303
+ size: (s.body || 12) * 2,
304
+ color: hex(c.body || c.textPrimary),
305
+ })],
306
+ })],
307
+ })),
308
+ }));
309
+ return new Table({
310
+ width: { size: contentWidth, type: WidthType.DXA },
311
+ columnWidths: Array(colCount).fill(colWidth),
312
+ rows: [headerRow, ...dataRows],
313
+ });
314
+ }
315
+ function sanitizeFilename(name) {
316
+ return name.replace(/[^a-zA-Z0-9\u4e00-\u9fff_-]/g, '_').slice(0, 50);
317
+ }
318
+ //# sourceMappingURL=docx-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx-renderer.js","sourceRoot":"","sources":["../../../src/doc-generator/docx-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @file 文档生成模块 - 统一入口
3
+ * @description 为 Agent 工具提供结构化文档生成能力(PPTX / DOCX / PDF / HTML Report)
4
+ */
5
+ import type { ToolContext } from '@cicctencent/agent-core';
6
+ import { renderReport } from './report-renderer.js';
7
+ import { listThemes } from './config-loader.js';
8
+ import type { PresentationData, DocumentData, RenderResult } from './types.js';
9
+ import type { ReportData } from './report-renderer.js';
10
+ export type { PresentationData, DocumentData, RenderResult, ReportData };
11
+ export { listThemes, renderReport };
12
+ /**
13
+ * 生成文档并保存为 Artifact
14
+ * @param jsonFilePath 可选:沙箱内的 JSON 数据文件路径(用于大型文档,LLM 先 write_file 再调用)
15
+ * @returns Artifact 保存结果描述字符串
16
+ */
17
+ export declare function generateAndSave(type: 'pptx' | 'docx' | 'pdf', data: PresentationData | DocumentData, ctx: ToolContext, jsonFilePath?: string, templatesDir?: string): Promise<string>;
18
+ /**
19
+ * 生成 HTML Report 并保存为 Artifact + 推送 Widget 事件
20
+ * 专为 create_report 工具设计:一步完成渲染、保存、内联展示
21
+ */
22
+ export declare function generateReportAndDisplay(data: ReportData, ctx: ToolContext, jsonFilePath?: string): Promise<string>;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doc-generator/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAW,WAAW,EAAgB,MAAM,yBAAyB,CAAC;AAKlF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAiBpC;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,EAC7B,IAAI,EAAE,gBAAgB,GAAG,YAAY,EACrC,GAAG,EAAE,WAAW,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAgHjB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,WAAW,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAgEjB"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * @file 文档生成模块 - 统一入口
3
+ * @description 为 Agent 工具提供结构化文档生成能力(PPTX / DOCX / PDF / HTML Report)
4
+ */
5
+ import * as path from 'path';
6
+ import * as fs from 'fs';
7
+ import { saveArtifact } from "../service/artifact.service.js";
8
+ import { renderPptx } from "./pptx-renderer.js";
9
+ import { renderDocx } from "./docx-renderer.js";
10
+ import { renderPdf } from "./pdf-renderer.js";
11
+ import { renderReport } from "./report-renderer.js";
12
+ import { listThemes } from "./config-loader.js";
13
+ export { listThemes, renderReport };
14
+ /** 各类型对应的文件扩展名 */
15
+ const EXT_MAP = { pptx: '.pptx', docx: '.docx', pdf: '.pdf', html: '.html' };
16
+ /** 确保文件名带有正确的扩展名 */
17
+ function ensureExtension(filename, type) {
18
+ const ext = EXT_MAP[type];
19
+ if (!ext)
20
+ return filename;
21
+ // 如果没有扩展名,补上
22
+ if (!filename.includes('.'))
23
+ return filename + ext;
24
+ // 如果扩展名不对(比如 LLM 传了 .ppt 而不是 .pptx),替换
25
+ const currentExt = path.extname(filename).toLowerCase();
26
+ if (currentExt !== ext)
27
+ return filename.replace(new RegExp(`\\${currentExt}$`, 'i'), ext);
28
+ return filename;
29
+ }
30
+ /**
31
+ * 生成文档并保存为 Artifact
32
+ * @param jsonFilePath 可选:沙箱内的 JSON 数据文件路径(用于大型文档,LLM 先 write_file 再调用)
33
+ * @returns Artifact 保存结果描述字符串
34
+ */
35
+ export async function generateAndSave(type, data, ctx, jsonFilePath, templatesDir) {
36
+ // 如果提供了 json_file,从沙箱读取 JSON 并合并到 data
37
+ if (jsonFilePath) {
38
+ const sandbox = ctx.custom?.sandbox;
39
+ if (!sandbox)
40
+ return 'Error: Sandbox not available. Cannot read json_file.';
41
+ const resolvedPath = path.isAbsolute(jsonFilePath)
42
+ ? jsonFilePath
43
+ : path.join(sandbox.rootDir, jsonFilePath);
44
+ // 安全检查:确保路径在沙箱内
45
+ if (!resolvedPath.startsWith(sandbox.rootDir)) {
46
+ return `Error: json_file path must be within sandbox directory.`;
47
+ }
48
+ try {
49
+ const raw = fs.readFileSync(resolvedPath, 'utf-8');
50
+ const jsonData = JSON.parse(raw);
51
+ // 合并:JSON 文件中的字段优先(slides/blocks 等大字段),内联参数作为 fallback
52
+ if (type === 'pptx') {
53
+ const d = data;
54
+ data = {
55
+ ...jsonData,
56
+ title: d.title || jsonData.title,
57
+ theme: d.theme || jsonData.theme,
58
+ filename: d.filename || jsonData.filename,
59
+ };
60
+ }
61
+ else {
62
+ const d = data;
63
+ data = {
64
+ ...jsonData,
65
+ title: d.title || jsonData.title,
66
+ theme: d.theme || jsonData.theme,
67
+ options: d.options || jsonData.options,
68
+ filename: d.filename || jsonData.filename,
69
+ };
70
+ }
71
+ }
72
+ catch (err) {
73
+ return `Error: Failed to read or parse json_file "${jsonFilePath}": ${err?.message || err}`;
74
+ }
75
+ }
76
+ // 1. 渲染文档
77
+ let result;
78
+ switch (type) {
79
+ case 'pptx':
80
+ result = await renderPptx(data, templatesDir);
81
+ break;
82
+ case 'docx':
83
+ result = await renderDocx(data, templatesDir);
84
+ break;
85
+ case 'pdf':
86
+ result = await renderPdf(data, templatesDir);
87
+ break;
88
+ default:
89
+ return `Error: Unsupported document type: ${type}`;
90
+ }
91
+ // 确保文件名带正确扩展名(LLM 可能传入无后缀的文件名)
92
+ result.filename = ensureExtension(result.filename, type);
93
+ // 2. 保存到沙箱
94
+ const sandbox = ctx.custom?.sandbox;
95
+ if (!sandbox) {
96
+ return 'Error: Sandbox not available. Cannot save document artifact.';
97
+ }
98
+ const fsExec = sandbox.getFileSystemExecutor();
99
+ if (!fsExec) {
100
+ return 'Error: FileSystem executor not available in sandbox.';
101
+ }
102
+ // 写入临时文件到 Artifact 临时目录,避免污染沙箱根目录
103
+ const tempDir = '_artifacts/.tmp';
104
+ const tempPath = `${tempDir}/${result.filename}`;
105
+ try {
106
+ if (fsExec.writeFile) {
107
+ // 对于二进制文件,需要通过 shell 写入
108
+ const shell = sandbox.getShellExecutor();
109
+ const base64 = result.buffer.toString('base64');
110
+ // 分段写入 base64 以避免命令过长
111
+ const chunkSize = 50000;
112
+ await shell.exec(`mkdir -p "${tempDir}" && echo -n "" > "${tempPath}.b64"`, 5000);
113
+ for (let i = 0; i < base64.length; i += chunkSize) {
114
+ const chunk = base64.slice(i, i + chunkSize);
115
+ await shell.exec(`echo -n "${chunk}" >> "${tempPath}.b64"`, 5000);
116
+ }
117
+ await shell.exec(`base64 -d "${tempPath}.b64" > "${tempPath}" && rm "${tempPath}.b64"`, 10000);
118
+ }
119
+ }
120
+ catch (err) {
121
+ return `Error: Failed to write document file to sandbox: ${err?.message || err}`;
122
+ }
123
+ // 3. 保存为 Artifact
124
+ try {
125
+ const sessionId = ctx.sessionId || 'default';
126
+ const artifactResult = saveArtifact(sandbox.rootDir, sessionId, result.filename, result.buffer);
127
+ // 通过 SSE 推送到前端(去重命中时跳过)
128
+ const emitArtifact = ctx.emitArtifact;
129
+ if (emitArtifact && !artifactResult.dedup) {
130
+ emitArtifact({
131
+ artifactId: artifactResult.artifactId,
132
+ filename: artifactResult.filename,
133
+ mimeType: artifactResult.mimeType,
134
+ size: artifactResult.size,
135
+ url: artifactResult.url,
136
+ description: `${type.toUpperCase()} document: ${data.title}`,
137
+ });
138
+ }
139
+ return `Document created: ${artifactResult.filename} (${artifactResult.size} bytes). It has been added to the artifact panel for preview and download.`;
140
+ }
141
+ catch (err) {
142
+ return `Error: Failed to save artifact: ${err?.message || err}`;
143
+ }
144
+ }
145
+ /**
146
+ * 生成 HTML Report 并保存为 Artifact + 推送 Widget 事件
147
+ * 专为 create_report 工具设计:一步完成渲染、保存、内联展示
148
+ */
149
+ export async function generateReportAndDisplay(data, ctx, jsonFilePath) {
150
+ // 如果提供了 json_file,从沙箱读取 JSON 并合并
151
+ if (jsonFilePath) {
152
+ const sandbox = ctx.custom?.sandbox;
153
+ if (!sandbox)
154
+ return 'Error: Sandbox not available. Cannot read json_file.';
155
+ const resolvedPath = path.isAbsolute(jsonFilePath)
156
+ ? jsonFilePath
157
+ : path.join(sandbox.rootDir, jsonFilePath);
158
+ if (!resolvedPath.startsWith(sandbox.rootDir)) {
159
+ return `Error: json_file path must be within sandbox directory.`;
160
+ }
161
+ try {
162
+ const raw = fs.readFileSync(resolvedPath, 'utf-8');
163
+ const jsonData = JSON.parse(raw);
164
+ data = {
165
+ ...jsonData,
166
+ title: data.title || jsonData.title,
167
+ theme: data.theme || jsonData.theme,
168
+ subtitle: data.subtitle || jsonData.subtitle,
169
+ date: data.date || jsonData.date,
170
+ };
171
+ }
172
+ catch (err) {
173
+ return `Error: Failed to read or parse json_file "${jsonFilePath}": ${err?.message || err}`;
174
+ }
175
+ }
176
+ if (!data.title)
177
+ return 'Error: title is required for report generation.';
178
+ // 1. 渲染 HTML
179
+ const html = renderReport(data);
180
+ const buffer = Buffer.from(html, 'utf-8');
181
+ const filename = data.filename
182
+ ? ensureExtension(data.filename, 'html')
183
+ : `${data.title.replace(/[^\w\u4e00-\u9fff]+/g, '_').slice(0, 50)}.html`;
184
+ // 2. 保存到沙箱 + Artifact
185
+ const sandbox = ctx.custom?.sandbox;
186
+ if (!sandbox)
187
+ return 'Error: Sandbox not available.';
188
+ let artifactSize = buffer.length;
189
+ try {
190
+ const sessionId = ctx.sessionId || 'default';
191
+ const artifactResult = saveArtifact(sandbox.rootDir, sessionId, filename, buffer);
192
+ artifactSize = artifactResult.size;
193
+ // 推送 artifact 事件
194
+ const emitArtifact = ctx.emitArtifact;
195
+ if (emitArtifact && !artifactResult.dedup) {
196
+ emitArtifact({
197
+ artifactId: artifactResult.artifactId,
198
+ filename: artifactResult.filename,
199
+ mimeType: 'text/html',
200
+ size: artifactResult.size,
201
+ url: artifactResult.url,
202
+ description: `HTML Report: ${data.title}`,
203
+ });
204
+ }
205
+ }
206
+ catch (err) {
207
+ return `Error: Failed to save report artifact: ${err?.message || err}`;
208
+ }
209
+ // 3. 不再推送 Widget 事件 — artifact 卡片自带预览入口,避免与 ArtifactCard 重复展示相同内容
210
+ return `Report created: ${filename} (${artifactSize} bytes). It has been added to the artifact panel for preview and download.`;
211
+ }
212
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doc-generator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @file PDF 渲染器
3
+ * @description 使用 PDFKit 将结构化文档数据渲染为 .pdf 文件
4
+ */
5
+ import type { BlockDefinition, DocumentOptions, RenderResult } from './types.js';
6
+ /** 渲染 PDF */
7
+ export declare function renderPdf(data: {
8
+ title: string;
9
+ theme?: string;
10
+ blocks: BlockDefinition[];
11
+ options?: DocumentOptions;
12
+ filename?: string;
13
+ }, templatesDir?: string): Promise<RenderResult>;
14
+ //# sourceMappingURL=pdf-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-renderer.d.ts","sourceRoot":"","sources":["../../../src/doc-generator/pdf-renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAe,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAmI9F,aAAa;AACb,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA0F/C"}