zengen 0.1.36 → 0.2.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 (150) hide show
  1. package/.github/workflows/pages.yml +1 -1
  2. package/.zen/meta.json +112 -32
  3. package/.zen/src/en-US/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +120 -0
  4. package/.zen/src/en-US/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +75 -0
  5. package/.zen/src/en-US/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +189 -0
  6. package/.zen/src/en-US/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +53 -0
  7. package/.zen/src/en-US/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +11 -0
  8. package/.zen/src/en-US/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +61 -0
  9. package/.zen/src/en-US/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +40 -0
  10. package/.zen/src/en-US/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +65 -0
  11. package/.zen/src/zh-Hans/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +120 -0
  12. package/.zen/src/zh-Hans/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +77 -0
  13. package/.zen/src/zh-Hans/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +189 -0
  14. package/.zen/src/zh-Hans/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +55 -0
  15. package/.zen/src/zh-Hans/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +11 -0
  16. package/.zen/src/zh-Hans/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +63 -0
  17. package/.zen/src/zh-Hans/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +40 -0
  18. package/.zen/src/zh-Hans/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +65 -0
  19. package/assets/templates/default/layout.html +274 -0
  20. package/dist/ai/extractMetadataFromMarkdown.d.ts +8 -0
  21. package/dist/ai/extractMetadataFromMarkdown.d.ts.map +1 -0
  22. package/dist/ai/extractMetadataFromMarkdown.js +88 -0
  23. package/dist/ai/extractMetadataFromMarkdown.js.map +1 -0
  24. package/dist/ai/translateMarkdown.d.ts +8 -0
  25. package/dist/ai/translateMarkdown.d.ts.map +1 -0
  26. package/dist/ai/translateMarkdown.js +29 -0
  27. package/dist/ai/translateMarkdown.js.map +1 -0
  28. package/dist/build/pipeline.d.ts +6 -0
  29. package/dist/build/pipeline.d.ts.map +1 -0
  30. package/dist/build/pipeline.js +219 -0
  31. package/dist/build/pipeline.js.map +1 -0
  32. package/dist/cli.js +10 -118
  33. package/dist/cli.js.map +1 -1
  34. package/dist/findEntries.d.ts +10 -0
  35. package/dist/findEntries.d.ts.map +1 -0
  36. package/dist/findEntries.js +38 -0
  37. package/dist/findEntries.js.map +1 -0
  38. package/dist/index.d.ts +1 -32
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +1 -35
  41. package/dist/index.js.map +1 -1
  42. package/dist/metadata.d.ts +14 -0
  43. package/dist/metadata.d.ts.map +1 -0
  44. package/dist/metadata.js +78 -0
  45. package/dist/metadata.js.map +1 -0
  46. package/dist/paths.d.ts +6 -0
  47. package/dist/paths.d.ts.map +1 -0
  48. package/dist/paths.js +10 -0
  49. package/dist/paths.js.map +1 -0
  50. package/dist/process/extractMetadataByAI.d.ts +5 -0
  51. package/dist/process/extractMetadataByAI.d.ts.map +1 -0
  52. package/dist/process/extractMetadataByAI.js +31 -0
  53. package/dist/process/extractMetadataByAI.js.map +1 -0
  54. package/dist/process/template.d.ts +5 -0
  55. package/dist/process/template.d.ts.map +1 -0
  56. package/dist/process/template.js +188 -0
  57. package/dist/process/template.js.map +1 -0
  58. package/dist/scan/files.d.ts +7 -0
  59. package/dist/scan/files.d.ts.map +1 -0
  60. package/dist/scan/files.js +54 -0
  61. package/dist/scan/files.js.map +1 -0
  62. package/dist/services/openai.d.ts +41 -0
  63. package/dist/services/openai.d.ts.map +1 -0
  64. package/dist/services/openai.js +54 -0
  65. package/dist/services/openai.js.map +1 -0
  66. package/dist/types.d.ts +16 -67
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/utils/convertMarkdownToHtml.d.ts +7 -0
  69. package/dist/utils/convertMarkdownToHtml.d.ts.map +1 -0
  70. package/dist/utils/convertMarkdownToHtml.js +39 -0
  71. package/dist/utils/convertMarkdownToHtml.js.map +1 -0
  72. package/dist/utils/frontmatter.d.ts +6 -0
  73. package/dist/utils/frontmatter.d.ts.map +1 -0
  74. package/dist/utils/frontmatter.js +22 -0
  75. package/dist/utils/frontmatter.js.map +1 -0
  76. package/docs/deployment/github-pages.md +1 -2
  77. package/docs/guides/best-practices.md +4 -4
  78. package/docs/guides/config.md +0 -5
  79. package/package.json +4 -2
  80. package/src/ai/extractMetadataFromMarkdown.ts +95 -0
  81. package/src/ai/translateMarkdown.ts +29 -0
  82. package/src/build/pipeline.ts +217 -0
  83. package/src/cli.ts +10 -132
  84. package/src/findEntries.ts +37 -0
  85. package/src/index.ts +1 -40
  86. package/src/metadata.ts +44 -0
  87. package/src/paths.ts +7 -0
  88. package/src/process/extractMetadataByAI.ts +31 -0
  89. package/src/process/template.ts +201 -0
  90. package/src/scan/files.ts +17 -0
  91. package/src/services/openai.ts +92 -0
  92. package/src/types.ts +18 -72
  93. package/src/utils/convertMarkdownToHtml.ts +32 -0
  94. package/src/utils/frontmatter.ts +18 -0
  95. package/.zen/translations.json +0 -51
  96. package/dist/ai-client.d.ts +0 -34
  97. package/dist/ai-client.d.ts.map +0 -1
  98. package/dist/ai-client.js +0 -180
  99. package/dist/ai-client.js.map +0 -1
  100. package/dist/ai-processor.d.ts +0 -51
  101. package/dist/ai-processor.d.ts.map +0 -1
  102. package/dist/ai-processor.js +0 -215
  103. package/dist/ai-processor.js.map +0 -1
  104. package/dist/ai-service.d.ts +0 -79
  105. package/dist/ai-service.d.ts.map +0 -1
  106. package/dist/ai-service.js +0 -257
  107. package/dist/ai-service.js.map +0 -1
  108. package/dist/builder.d.ts +0 -70
  109. package/dist/builder.d.ts.map +0 -1
  110. package/dist/builder.js +0 -854
  111. package/dist/builder.js.map +0 -1
  112. package/dist/gitignore.d.ts +0 -41
  113. package/dist/gitignore.d.ts.map +0 -1
  114. package/dist/gitignore.js +0 -202
  115. package/dist/gitignore.js.map +0 -1
  116. package/dist/gitignore.test.d.ts +0 -2
  117. package/dist/gitignore.test.d.ts.map +0 -1
  118. package/dist/gitignore.test.js +0 -309
  119. package/dist/gitignore.test.js.map +0 -1
  120. package/dist/markdown.d.ts +0 -35
  121. package/dist/markdown.d.ts.map +0 -1
  122. package/dist/markdown.js +0 -221
  123. package/dist/markdown.js.map +0 -1
  124. package/dist/navigation.d.ts +0 -46
  125. package/dist/navigation.d.ts.map +0 -1
  126. package/dist/navigation.js +0 -196
  127. package/dist/navigation.js.map +0 -1
  128. package/dist/scanner.d.ts +0 -26
  129. package/dist/scanner.d.ts.map +0 -1
  130. package/dist/scanner.js +0 -190
  131. package/dist/scanner.js.map +0 -1
  132. package/dist/template.d.ts +0 -33
  133. package/dist/template.d.ts.map +0 -1
  134. package/dist/template.js +0 -434
  135. package/dist/template.js.map +0 -1
  136. package/dist/translation-service.d.ts +0 -72
  137. package/dist/translation-service.d.ts.map +0 -1
  138. package/dist/translation-service.js +0 -291
  139. package/dist/translation-service.js.map +0 -1
  140. package/src/ai-client.ts +0 -227
  141. package/src/ai-processor.ts +0 -243
  142. package/src/ai-service.ts +0 -281
  143. package/src/builder.ts +0 -991
  144. package/src/gitignore.test.ts +0 -318
  145. package/src/gitignore.ts +0 -193
  146. package/src/markdown.ts +0 -212
  147. package/src/navigation.ts +0 -237
  148. package/src/scanner.ts +0 -180
  149. package/src/template.ts +0 -425
  150. package/src/translation-service.ts +0 -350
@@ -1,34 +0,0 @@
1
- import { AIMetadata } from './types';
2
- import { AIService } from './ai-service';
3
- /**
4
- * AI 客户端类 - 使用 fetch 调用 OpenAI 兼容 API
5
- */
6
- export declare class AIClient {
7
- private aiService;
8
- constructor(aiService: AIService);
9
- /**
10
- * 调用 AI 模型提取文档 metadata
11
- */
12
- extractMetadata(content: string, filePath: string): Promise<AIMetadata | null>;
13
- /**
14
- * 构建提取 metadata 的 prompt
15
- */
16
- private buildMetadataPrompt;
17
- /**
18
- * 调用 OpenAI 兼容 API
19
- */
20
- private callOpenAIAPI;
21
- /**
22
- * 解析 AI 返回的 metadata
23
- */
24
- private parseMetadataResponse;
25
- /**
26
- * 批量处理文件
27
- */
28
- processFiles(files: Array<{
29
- content: string;
30
- path: string;
31
- hash: string;
32
- }>): Promise<Map<string, AIMetadata>>;
33
- }
34
- //# sourceMappingURL=ai-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../src/ai-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAY,MAAM,cAAc,CAAC;AAyBnD;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS;IAIhC;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAsCpF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgC3B;;OAEG;YACW,aAAa;IAyC3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAmCpC"}
package/dist/ai-client.js DELETED
@@ -1,180 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AIClient = void 0;
4
- /**
5
- * AI 客户端类 - 使用 fetch 调用 OpenAI 兼容 API
6
- */
7
- class AIClient {
8
- constructor(aiService) {
9
- this.aiService = aiService;
10
- }
11
- /**
12
- * 调用 AI 模型提取文档 metadata
13
- */
14
- async extractMetadata(content, filePath) {
15
- const config = this.aiService.getConfig();
16
- if (!config.enabled || !config.apiKey) {
17
- console.log(`⚠️ AI feature is disabled or API key not configured for: ${filePath}`);
18
- return null;
19
- }
20
- try {
21
- console.log(`🤖 Extracting AI metadata for: ${filePath}`);
22
- const prompt = this.buildMetadataPrompt(content);
23
- const response = await this.callOpenAIAPI(prompt, config);
24
- if (!response) {
25
- console.warn(`⚠️ Failed to extract metadata for: ${filePath}`);
26
- return null;
27
- }
28
- const metadata = this.parseMetadataResponse(response.choices[0].message.content);
29
- // 添加 tokens 使用情况
30
- metadata.tokens_used = {
31
- prompt: response.usage.prompt_tokens,
32
- completion: response.usage.completion_tokens,
33
- total: response.usage.total_tokens,
34
- };
35
- // 打印 tokens 使用情况
36
- this.aiService.logTokenUsage(filePath, metadata.tokens_used);
37
- return metadata;
38
- }
39
- catch (error) {
40
- console.error(`❌ Failed to extract AI metadata for ${filePath}:`, error);
41
- return null;
42
- }
43
- }
44
- /**
45
- * 构建提取 metadata 的 prompt
46
- */
47
- buildMetadataPrompt(content) {
48
- // 限制内容长度以避免 token 超限
49
- const maxContentLength = 8000;
50
- const truncatedContent = content.length > maxContentLength
51
- ? content.substring(0, maxContentLength) + '... [内容已截断]'
52
- : content;
53
- return `请分析以下文档内容,提取以下信息并返回 JSON 格式:
54
-
55
- 文档内容:
56
- """
57
- ${truncatedContent}
58
- """
59
-
60
- 请提取:
61
- 1. title: 文档的标题(简洁明了,不超过 20 个字)
62
- 2. summary: 文档摘要(控制在 100 字以内,概括主要内容)
63
- 3. tags: 关键词列表(3-8 个关键词,使用中文或英文)
64
- 4. inferred_date: 文档中隐含的创建日期(如果有的话,格式:YYYY-MM-DD,没有就留空字符串)
65
- 5. inferred_lang: 文档使用的语言代码(例如:zh-Hans 表示简体中文,en-US 表示美式英语)
66
-
67
- 请严格按照以下 JSON 格式返回,不要包含任何其他文本:
68
- {
69
- "title": "文档标题",
70
- "summary": "文档摘要...",
71
- "tags": ["关键词1", "关键词2", "关键词3"],
72
- "inferred_date": "2023-01-01",
73
- "inferred_lang": "zh-Hans"
74
- }`;
75
- }
76
- /**
77
- * 调用 OpenAI 兼容 API
78
- */
79
- async callOpenAIAPI(prompt, config) {
80
- try {
81
- const response = await fetch(`${config.baseUrl}/chat/completions`, {
82
- method: 'POST',
83
- headers: {
84
- 'Content-Type': 'application/json',
85
- Authorization: `Bearer ${config.apiKey}`,
86
- },
87
- body: JSON.stringify({
88
- model: config.model,
89
- messages: [
90
- {
91
- role: 'system',
92
- content: '你是一个专业的文档分析助手,擅长从文档中提取结构化信息。请严格按照要求的 JSON 格式返回结果。',
93
- },
94
- {
95
- role: 'user',
96
- content: prompt,
97
- },
98
- ],
99
- temperature: config.temperature,
100
- max_tokens: config.maxTokens,
101
- response_format: { type: 'json_object' },
102
- }),
103
- });
104
- if (!response.ok) {
105
- const errorText = await response.text();
106
- console.error(`❌ OpenAI API error (${response.status}):`, errorText);
107
- return null;
108
- }
109
- const data = await response.json();
110
- return data;
111
- }
112
- catch (error) {
113
- console.error('❌ Failed to call OpenAI API:', error);
114
- return null;
115
- }
116
- }
117
- /**
118
- * 解析 AI 返回的 metadata
119
- */
120
- parseMetadataResponse(responseContent) {
121
- try {
122
- const metadata = JSON.parse(responseContent);
123
- // 验证和清理数据
124
- return {
125
- title: metadata.title?.trim() || '未命名文档',
126
- summary: metadata.summary?.trim() || '',
127
- tags: Array.isArray(metadata.tags)
128
- ? metadata.tags.map((tag) => tag.trim()).filter(Boolean)
129
- : [],
130
- inferred_date: metadata.inferred_date?.trim() || undefined,
131
- inferred_lang: metadata.inferred_lang?.trim() || 'zh-Hans',
132
- };
133
- }
134
- catch (error) {
135
- console.error('❌ Failed to parse AI response:', error, 'Response:', responseContent);
136
- // 返回默认值
137
- return {
138
- title: '解析失败',
139
- summary: 'AI 响应解析失败',
140
- tags: ['error'],
141
- inferred_lang: 'zh-Hans',
142
- };
143
- }
144
- }
145
- /**
146
- * 批量处理文件
147
- */
148
- async processFiles(files) {
149
- const results = new Map();
150
- const config = this.aiService.getConfig();
151
- if (!config.enabled || !config.apiKey) {
152
- console.log('⚠️ AI feature is disabled or API key not configured');
153
- return results;
154
- }
155
- console.log(`🤖 Processing ${files.length} files with AI...`);
156
- for (const file of files) {
157
- try {
158
- // 检查缓存
159
- const cachedMetadata = await this.aiService.getCachedMetadata(file.hash, file.path);
160
- if (cachedMetadata) {
161
- results.set(file.path, cachedMetadata);
162
- continue;
163
- }
164
- // 调用 AI 提取 metadata
165
- const metadata = await this.extractMetadata(file.content, file.path);
166
- if (metadata) {
167
- results.set(file.path, metadata);
168
- // 缓存结果
169
- await this.aiService.cacheMetadata(file.hash, file.path, metadata);
170
- }
171
- }
172
- catch (error) {
173
- console.error(`❌ Failed to process file ${file.path}:`, error);
174
- }
175
- }
176
- return results;
177
- }
178
- }
179
- exports.AIClient = AIClient;
180
- //# sourceMappingURL=ai-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-client.js","sourceRoot":"","sources":["../src/ai-client.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- import { MarkdownProcessor, FileInfo, ZenConfig } from './types';
2
- /**
3
- * AI 处理器 - 集成到 Markdown 处理流程中
4
- */
5
- export declare class AIProcessor implements MarkdownProcessor {
6
- private aiService;
7
- private aiClient;
8
- private enabled;
9
- constructor(config?: ZenConfig);
10
- /**
11
- * 在解析前处理 - 这里我们提取 AI metadata
12
- */
13
- beforeParse(content: string, fileInfo: FileInfo): Promise<string>;
14
- /**
15
- * 在解析后处理 - 这里可以添加 AI 增强的 HTML 内容
16
- */
17
- afterParse(html: string, fileInfo: FileInfo): Promise<string>;
18
- /**
19
- * 将 AI metadata 添加到 HTML 中
20
- */
21
- private enhanceHtmlWithMetadata;
22
- /**
23
- * 转义 HTML 特殊字符
24
- */
25
- private escapeHtml;
26
- /**
27
- * 转义 JSON 字符串
28
- */
29
- private escapeJson;
30
- /**
31
- * 记录 metadata 信息
32
- */
33
- private logMetadata;
34
- /**
35
- * 批量处理文件
36
- */
37
- processBatch(files: FileInfo[]): Promise<void>;
38
- /**
39
- * 清理缓存
40
- */
41
- cleanupCache(maxAgeDays?: number): Promise<void>;
42
- /**
43
- * 检查是否启用
44
- */
45
- isEnabled(): boolean;
46
- /**
47
- * 获取配置信息
48
- */
49
- getConfigInfo(): string;
50
- }
51
- //# sourceMappingURL=ai-processor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-processor.d.ts","sourceRoot":"","sources":["../src/ai-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIjE;;GAEG;AACH,qBAAa,WAAY,YAAW,iBAAiB;IACnD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAU;gBAEb,MAAM,GAAE,SAAc;IAsBlC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAoCvE;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAenE;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA+C/B;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCpD;;OAEG;IACG,YAAY,CAAC,UAAU,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,aAAa,IAAI,MAAM;CASxB"}
@@ -1,215 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AIProcessor = void 0;
4
- const ai_service_1 = require("./ai-service");
5
- const ai_client_1 = require("./ai-client");
6
- /**
7
- * AI 处理器 - 集成到 Markdown 处理流程中
8
- */
9
- class AIProcessor {
10
- constructor(config = {}) {
11
- // 从配置和环境变量初始化 AI 服务
12
- const aiConfig = {
13
- enabled: config.ai?.enabled ?? true,
14
- model: config.ai?.model,
15
- temperature: config.ai?.temperature,
16
- maxTokens: config.ai?.maxTokens,
17
- };
18
- this.aiService = new ai_service_1.AIService(aiConfig);
19
- this.aiClient = new ai_client_1.AIClient(this.aiService);
20
- this.enabled = this.aiService.isEnabled();
21
- if (this.enabled) {
22
- console.log('🤖 AI processor initialized and enabled');
23
- console.log(` Model: ${this.aiService.getConfig().model}`);
24
- console.log(` Base URL: ${this.aiService.getConfig().baseUrl}`);
25
- }
26
- else {
27
- console.log('⚠️ AI processor initialized but disabled (no API key or explicitly disabled)');
28
- }
29
- }
30
- /**
31
- * 在解析前处理 - 这里我们提取 AI metadata
32
- */
33
- async beforeParse(content, fileInfo) {
34
- if (!this.enabled) {
35
- return content;
36
- }
37
- if (!fileInfo.hash) {
38
- console.warn(`⚠️ Skipping AI processing for ${fileInfo.path}: file hash is missing`);
39
- return content;
40
- }
41
- try {
42
- // 检查缓存
43
- const cachedMetadata = await this.aiService.getCachedMetadata(fileInfo.hash, fileInfo.path);
44
- if (cachedMetadata) {
45
- fileInfo.aiMetadata = cachedMetadata;
46
- this.logMetadata(fileInfo.path, cachedMetadata);
47
- return content;
48
- }
49
- // 调用 AI 提取 metadata
50
- const metadata = await this.aiClient.extractMetadata(content, fileInfo.path);
51
- if (metadata) {
52
- fileInfo.aiMetadata = metadata;
53
- // 缓存结果
54
- await this.aiService.cacheMetadata(fileInfo.hash, fileInfo.path, metadata);
55
- this.logMetadata(fileInfo.path, metadata);
56
- }
57
- }
58
- catch (error) {
59
- console.error(`❌ AI processor failed for ${fileInfo.path}:`, error);
60
- }
61
- return content;
62
- }
63
- /**
64
- * 在解析后处理 - 这里可以添加 AI 增强的 HTML 内容
65
- */
66
- async afterParse(html, fileInfo) {
67
- if (!this.enabled || !fileInfo.aiMetadata) {
68
- return html;
69
- }
70
- try {
71
- // 可以在这里添加 AI metadata 到 HTML 中
72
- // 例如:添加 meta 标签或结构化数据
73
- return this.enhanceHtmlWithMetadata(html, fileInfo);
74
- }
75
- catch (error) {
76
- console.error(`❌ Failed to enhance HTML with AI metadata for ${fileInfo.path}:`, error);
77
- return html;
78
- }
79
- }
80
- /**
81
- * 将 AI metadata 添加到 HTML 中
82
- */
83
- enhanceHtmlWithMetadata(html, fileInfo) {
84
- const metadata = fileInfo.aiMetadata;
85
- if (!metadata) {
86
- return html;
87
- }
88
- // 在 head 部分添加 meta 标签
89
- const metaTags = `
90
- <!-- AI Generated Metadata -->
91
- <meta name="ai-title" content="${this.escapeHtml(metadata.title)}">
92
- <meta name="ai-summary" content="${this.escapeHtml(metadata.summary)}">
93
- <meta name="ai-tags" content="${this.escapeHtml(metadata.tags.join(', '))}">
94
- ${metadata.inferred_date ? `<meta name="ai-inferred-date" content="${metadata.inferred_date}">` : ''}
95
- <meta name="ai-language" content="${metadata.inferred_lang}">
96
- `;
97
- // 在 body 开始处添加结构化数据
98
- const structuredData = `
99
- <!-- AI Structured Data -->
100
- <script type="application/ld+json">
101
- {
102
- "@context": "https://schema.org",
103
- "@type": "Article",
104
- "headline": "${this.escapeJson(metadata.title)}",
105
- "description": "${this.escapeJson(metadata.summary)}",
106
- "keywords": "${this.escapeJson(metadata.tags.join(', '))}",
107
- "inLanguage": "${metadata.inferred_lang}"
108
- }
109
- </script>
110
- `;
111
- // 插入 meta 标签到 head
112
- const headEndIndex = html.indexOf('</head>');
113
- if (headEndIndex !== -1) {
114
- html = html.slice(0, headEndIndex) + metaTags + html.slice(headEndIndex);
115
- }
116
- // 插入结构化数据到 body 开始处
117
- const bodyStartIndex = html.indexOf('<body');
118
- if (bodyStartIndex !== -1) {
119
- const bodyTagEndIndex = html.indexOf('>', bodyStartIndex) + 1;
120
- html = html.slice(0, bodyTagEndIndex) + structuredData + html.slice(bodyTagEndIndex);
121
- }
122
- return html;
123
- }
124
- /**
125
- * 转义 HTML 特殊字符
126
- */
127
- escapeHtml(text) {
128
- return text
129
- .replace(/&/g, '&amp;')
130
- .replace(/</g, '&lt;')
131
- .replace(/>/g, '&gt;')
132
- .replace(/"/g, '&quot;')
133
- .replace(/'/g, '&#039;');
134
- }
135
- /**
136
- * 转义 JSON 字符串
137
- */
138
- escapeJson(text) {
139
- return text
140
- .replace(/\\/g, '\\\\')
141
- .replace(/"/g, '\\"')
142
- .replace(/\n/g, '\\n')
143
- .replace(/\r/g, '\\r')
144
- .replace(/\t/g, '\\t');
145
- }
146
- /**
147
- * 记录 metadata 信息
148
- */
149
- logMetadata(filePath, metadata) {
150
- console.log(`📊 AI metadata for ${filePath}:`);
151
- console.log(` Title: ${metadata.title}`);
152
- console.log(` Summary: ${metadata.summary.substring(0, 50)}...`);
153
- console.log(` Tags: ${metadata.tags.join(', ')}`);
154
- if (metadata.inferred_date) {
155
- console.log(` Inferred Date: ${metadata.inferred_date}`);
156
- }
157
- console.log(` Language: ${metadata.inferred_lang}`);
158
- }
159
- /**
160
- * 批量处理文件
161
- */
162
- async processBatch(files) {
163
- if (!this.enabled) {
164
- return;
165
- }
166
- console.log(`🤖 Processing ${files.length} files with AI...`);
167
- const filesToProcess = files.filter(file => file.hash && !file.aiMetadata);
168
- if (filesToProcess.length === 0) {
169
- console.log('📚 All files already have AI metadata or no files to process');
170
- return;
171
- }
172
- // 准备数据
173
- const fileData = filesToProcess.map(file => ({
174
- content: file.content,
175
- path: file.path,
176
- hash: file.hash,
177
- }));
178
- // 批量处理
179
- const results = await this.aiClient.processFiles(fileData);
180
- // 更新文件信息
181
- for (const file of filesToProcess) {
182
- const metadata = results.get(file.path);
183
- if (metadata) {
184
- file.aiMetadata = metadata;
185
- }
186
- }
187
- console.log(`✅ AI processing completed for ${results.size} files`);
188
- }
189
- /**
190
- * 清理缓存
191
- */
192
- async cleanupCache(maxAgeDays = 30) {
193
- await this.aiService.cleanupCache(maxAgeDays);
194
- }
195
- /**
196
- * 检查是否启用
197
- */
198
- isEnabled() {
199
- return this.enabled;
200
- }
201
- /**
202
- * 获取配置信息
203
- */
204
- getConfigInfo() {
205
- const config = this.aiService.getConfig();
206
- return `AI Processor Status: ${this.enabled ? 'Enabled' : 'Disabled'}
207
- API Key: ${config.apiKey ? 'Set' : 'Not set'}
208
- Base URL: ${config.baseUrl}
209
- Model: ${config.model}
210
- Temperature: ${config.temperature}
211
- Max Tokens: ${config.maxTokens}`;
212
- }
213
- }
214
- exports.AIProcessor = AIProcessor;
215
- //# sourceMappingURL=ai-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-processor.js","sourceRoot":"","sources":["../src/ai-processor.ts"],"names":[],"mappings":"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"}
@@ -1,79 +0,0 @@
1
- import { AIMetadata } from './types';
2
- /**
3
- * AI 服务配置
4
- */
5
- export interface AIConfig {
6
- enabled: boolean;
7
- apiKey: string;
8
- baseUrl: string;
9
- model: string;
10
- temperature: number;
11
- maxTokens: number;
12
- }
13
- /**
14
- * 单个文件的元数据缓存项
15
- */
16
- export interface FileMetaData {
17
- hash: string;
18
- path: string;
19
- metadata: AIMetadata;
20
- lastUpdated: string;
21
- }
22
- /**
23
- * .zen/meta.json 文件结构
24
- */
25
- export interface MetaDataStore {
26
- version: string;
27
- timestamp: string;
28
- files: FileMetaData[];
29
- }
30
- /**
31
- * AI 服务类
32
- */
33
- export declare class AIService {
34
- private config;
35
- private metaDataPath;
36
- constructor(config?: Partial<AIConfig>);
37
- /**
38
- * 获取配置
39
- */
40
- getConfig(): AIConfig;
41
- /**
42
- * 检查是否启用 AI 功能
43
- */
44
- isEnabled(): boolean;
45
- /**
46
- * 加载 .zen/meta.json 文件
47
- */
48
- loadMetaData(): Promise<MetaDataStore>;
49
- /**
50
- * 保存 .zen/meta.json 文件
51
- */
52
- saveMetaData(metaData: MetaDataStore): Promise<void>;
53
- /**
54
- * 根据文件 hash 获取缓存的 metadata
55
- */
56
- getCachedMetadata(fileHash: string, filePath: string): Promise<AIMetadata | null>;
57
- /**
58
- * 缓存 metadata 到 .zen/meta.json
59
- */
60
- cacheMetadata(fileHash: string, filePath: string, metadata: AIMetadata): Promise<void>;
61
- /**
62
- * 清理过期的缓存
63
- */
64
- cleanupCache(maxAgeDays?: number): Promise<void>;
65
- /**
66
- * 移除孤儿条目(文件已删除但缓存仍存在)
67
- * @param existingFilePaths 当前存在的文件路径列表
68
- */
69
- removeOrphanEntries(existingFilePaths: string[]): Promise<void>;
70
- /**
71
- * 计算文件内容的 hash
72
- */
73
- calculateFileHash(content: string): string;
74
- /**
75
- * 打印 tokens 使用情况
76
- */
77
- logTokenUsage(filePath: string, tokensUsed: AIMetadata['tokens_used']): void;
78
- }
79
- //# sourceMappingURL=ai-service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-service.d.ts","sourceRoot":"","sources":["../src/ai-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAKrC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,GAAE,OAAO,CAAC,QAAQ,CAAM;IAoB1C;;OAEG;IACH,SAAS,IAAI,QAAQ;IAIrB;;OAEG;IACH,SAAS,IAAI,OAAO;IAUpB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;IAe5C;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA6BvF;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyD5F;;OAEG;IACG,YAAY,CAAC,UAAU,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB1D;;;OAGG;IACG,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrE;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI1C;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI;CAU7E"}