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.
- package/.github/workflows/pages.yml +1 -1
- package/.zen/meta.json +112 -32
- package/.zen/src/en-US/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +120 -0
- package/.zen/src/en-US/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +75 -0
- package/.zen/src/en-US/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +189 -0
- package/.zen/src/en-US/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +53 -0
- package/.zen/src/en-US/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +11 -0
- package/.zen/src/en-US/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +61 -0
- package/.zen/src/en-US/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +40 -0
- package/.zen/src/en-US/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +65 -0
- package/.zen/src/zh-Hans/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +120 -0
- package/.zen/src/zh-Hans/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +77 -0
- package/.zen/src/zh-Hans/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +189 -0
- package/.zen/src/zh-Hans/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +55 -0
- package/.zen/src/zh-Hans/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +11 -0
- package/.zen/src/zh-Hans/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +63 -0
- package/.zen/src/zh-Hans/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +40 -0
- package/.zen/src/zh-Hans/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +65 -0
- package/assets/templates/default/layout.html +274 -0
- package/dist/ai/extractMetadataFromMarkdown.d.ts +8 -0
- package/dist/ai/extractMetadataFromMarkdown.d.ts.map +1 -0
- package/dist/ai/extractMetadataFromMarkdown.js +88 -0
- package/dist/ai/extractMetadataFromMarkdown.js.map +1 -0
- package/dist/ai/translateMarkdown.d.ts +8 -0
- package/dist/ai/translateMarkdown.d.ts.map +1 -0
- package/dist/ai/translateMarkdown.js +29 -0
- package/dist/ai/translateMarkdown.js.map +1 -0
- package/dist/build/pipeline.d.ts +6 -0
- package/dist/build/pipeline.d.ts.map +1 -0
- package/dist/build/pipeline.js +219 -0
- package/dist/build/pipeline.js.map +1 -0
- package/dist/cli.js +10 -118
- package/dist/cli.js.map +1 -1
- package/dist/findEntries.d.ts +10 -0
- package/dist/findEntries.d.ts.map +1 -0
- package/dist/findEntries.js +38 -0
- package/dist/findEntries.js.map +1 -0
- package/dist/index.d.ts +1 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -35
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +14 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +78 -0
- package/dist/metadata.js.map +1 -0
- package/dist/paths.d.ts +6 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +10 -0
- package/dist/paths.js.map +1 -0
- package/dist/process/extractMetadataByAI.d.ts +5 -0
- package/dist/process/extractMetadataByAI.d.ts.map +1 -0
- package/dist/process/extractMetadataByAI.js +31 -0
- package/dist/process/extractMetadataByAI.js.map +1 -0
- package/dist/process/template.d.ts +5 -0
- package/dist/process/template.d.ts.map +1 -0
- package/dist/process/template.js +188 -0
- package/dist/process/template.js.map +1 -0
- package/dist/scan/files.d.ts +7 -0
- package/dist/scan/files.d.ts.map +1 -0
- package/dist/scan/files.js +54 -0
- package/dist/scan/files.js.map +1 -0
- package/dist/services/openai.d.ts +41 -0
- package/dist/services/openai.d.ts.map +1 -0
- package/dist/services/openai.js +54 -0
- package/dist/services/openai.js.map +1 -0
- package/dist/types.d.ts +16 -67
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/convertMarkdownToHtml.d.ts +7 -0
- package/dist/utils/convertMarkdownToHtml.d.ts.map +1 -0
- package/dist/utils/convertMarkdownToHtml.js +39 -0
- package/dist/utils/convertMarkdownToHtml.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +6 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +22 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/docs/deployment/github-pages.md +1 -2
- package/docs/guides/best-practices.md +4 -4
- package/docs/guides/config.md +0 -5
- package/package.json +4 -2
- package/src/ai/extractMetadataFromMarkdown.ts +95 -0
- package/src/ai/translateMarkdown.ts +29 -0
- package/src/build/pipeline.ts +217 -0
- package/src/cli.ts +10 -132
- package/src/findEntries.ts +37 -0
- package/src/index.ts +1 -40
- package/src/metadata.ts +44 -0
- package/src/paths.ts +7 -0
- package/src/process/extractMetadataByAI.ts +31 -0
- package/src/process/template.ts +201 -0
- package/src/scan/files.ts +17 -0
- package/src/services/openai.ts +92 -0
- package/src/types.ts +18 -72
- package/src/utils/convertMarkdownToHtml.ts +32 -0
- package/src/utils/frontmatter.ts +18 -0
- package/.zen/translations.json +0 -51
- package/dist/ai-client.d.ts +0 -34
- package/dist/ai-client.d.ts.map +0 -1
- package/dist/ai-client.js +0 -180
- package/dist/ai-client.js.map +0 -1
- package/dist/ai-processor.d.ts +0 -51
- package/dist/ai-processor.d.ts.map +0 -1
- package/dist/ai-processor.js +0 -215
- package/dist/ai-processor.js.map +0 -1
- package/dist/ai-service.d.ts +0 -79
- package/dist/ai-service.d.ts.map +0 -1
- package/dist/ai-service.js +0 -257
- package/dist/ai-service.js.map +0 -1
- package/dist/builder.d.ts +0 -70
- package/dist/builder.d.ts.map +0 -1
- package/dist/builder.js +0 -854
- package/dist/builder.js.map +0 -1
- package/dist/gitignore.d.ts +0 -41
- package/dist/gitignore.d.ts.map +0 -1
- package/dist/gitignore.js +0 -202
- package/dist/gitignore.js.map +0 -1
- package/dist/gitignore.test.d.ts +0 -2
- package/dist/gitignore.test.d.ts.map +0 -1
- package/dist/gitignore.test.js +0 -309
- package/dist/gitignore.test.js.map +0 -1
- package/dist/markdown.d.ts +0 -35
- package/dist/markdown.d.ts.map +0 -1
- package/dist/markdown.js +0 -221
- package/dist/markdown.js.map +0 -1
- package/dist/navigation.d.ts +0 -46
- package/dist/navigation.d.ts.map +0 -1
- package/dist/navigation.js +0 -196
- package/dist/navigation.js.map +0 -1
- package/dist/scanner.d.ts +0 -26
- package/dist/scanner.d.ts.map +0 -1
- package/dist/scanner.js +0 -190
- package/dist/scanner.js.map +0 -1
- package/dist/template.d.ts +0 -33
- package/dist/template.d.ts.map +0 -1
- package/dist/template.js +0 -434
- package/dist/template.js.map +0 -1
- package/dist/translation-service.d.ts +0 -72
- package/dist/translation-service.d.ts.map +0 -1
- package/dist/translation-service.js +0 -291
- package/dist/translation-service.js.map +0 -1
- package/src/ai-client.ts +0 -227
- package/src/ai-processor.ts +0 -243
- package/src/ai-service.ts +0 -281
- package/src/builder.ts +0 -991
- package/src/gitignore.test.ts +0 -318
- package/src/gitignore.ts +0 -193
- package/src/markdown.ts +0 -212
- package/src/navigation.ts +0 -237
- package/src/scanner.ts +0 -180
- package/src/template.ts +0 -425
- package/src/translation-service.ts +0 -350
package/dist/ai-client.d.ts
DELETED
|
@@ -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
|
package/dist/ai-client.d.ts.map
DELETED
|
@@ -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
|
package/dist/ai-client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-client.js","sourceRoot":"","sources":["../src/ai-client.ts"],"names":[],"mappings":"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"}
|
package/dist/ai-processor.d.ts
DELETED
|
@@ -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"}
|
package/dist/ai-processor.js
DELETED
|
@@ -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, '&')
|
|
130
|
-
.replace(/</g, '<')
|
|
131
|
-
.replace(/>/g, '>')
|
|
132
|
-
.replace(/"/g, '"')
|
|
133
|
-
.replace(/'/g, ''');
|
|
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
|
package/dist/ai-processor.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-processor.js","sourceRoot":"","sources":["../src/ai-processor.ts"],"names":[],"mappings":"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"}
|
package/dist/ai-service.d.ts
DELETED
|
@@ -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
|
package/dist/ai-service.d.ts.map
DELETED
|
@@ -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"}
|