czon 0.1.8 → 0.2.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.
package/README.md CHANGED
@@ -20,6 +20,7 @@ AI 时代下,作为网站内容创作者,我们可以有更智能的内容
20
20
 
21
21
  1. 🌍 **自动多语言翻译**:使用 AI 进行增量翻译,让用户使用母语编写 Markdown,但是用户可以是多语言的。
22
22
  1. 💭 **自动摘要提取**:使用 AI 对原始文本进行内容分析和提取。
23
+ 1. 🏷️ **自动标签分类**:使用 AI 对内容进行标签和分类的提取和管理。
23
24
  1. 🧭 **智能分类导航**:使用 AI 生成站点地图和导航,源文件的位置不敏感。
24
25
 
25
26
  ## 静态站点生成 (SSG)
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/build/pipeline.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAiDxC;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBpE"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/build/pipeline.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAqDxC;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBpE"}
@@ -44,6 +44,7 @@ const processTranslations_1 = require("../process/processTranslations");
44
44
  const scanSourceFiles_1 = require("../process/scanSourceFiles");
45
45
  const template_1 = require("../process/template");
46
46
  const writeFile_1 = require("../utils/writeFile");
47
+ const category_1 = require("../process/category");
47
48
  /**
48
49
  * 验证构建配置
49
50
  */
@@ -72,6 +73,8 @@ async function buildPipeline(options) {
72
73
  await (0, scanSourceFiles_1.scanSourceFiles)();
73
74
  // 运行 AI 元数据提取
74
75
  await (0, extractMetadataByAI_1.extractMetadataByAI)();
76
+ // 提取分类信息
77
+ await (0, category_1.processExtractCategory)();
75
78
  // 存储母语文件,并进行内容增强预处理
76
79
  await (0, enhanceMarkdownSource_1.storeNativeFiles)();
77
80
  // 处理翻译
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/build/pipeline.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,8BAgBC;AA7ED,gDAAkC;AAClC,2CAA6B;AAC7B,0CAAmE;AACnE,oCAAmD;AACnD,4EAAoE;AACpE,wEAAqE;AACrE,wEAAqE;AACrE,gEAA6D;AAC7D,kDAAgE;AAEhE,kDAA+C;AAE/C;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAqB;IACjD,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,mBAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,OAAqB;IAChD,OAAO;IACP,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAE9B,SAAS;IACT,MAAM,EAAE,CAAC,EAAE,CAAC,qBAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,yBAAyB;IACzB,MAAM,IAAA,qBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,gBAAQ,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE7D,QAAQ;IACR,MAAM,IAAA,iCAAe,GAAE,CAAC;IAExB,cAAc;IACd,MAAM,IAAA,yCAAmB,GAAE,CAAC;IAE5B,oBAAoB;IACpB,MAAM,IAAA,wCAAgB,GAAE,CAAC;IAEzB,OAAO;IACP,MAAM,IAAA,yCAAmB,GAAE,CAAC;IAE5B,OAAO;IACP,MAAM,IAAA,oCAAyB,GAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAAC,OAAqB;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,IAAA,uBAAY,GAAE,CAAC;QACrB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,GAAG,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,IAAA,uBAAY,GAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/build/pipeline.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,8BAgBC;AAjFD,gDAAkC;AAClC,2CAA6B;AAC7B,0CAAmE;AACnE,oCAAmD;AACnD,4EAAoE;AACpE,wEAAqE;AACrE,wEAAqE;AACrE,gEAA6D;AAC7D,kDAAgE;AAEhE,kDAA+C;AAC/C,kDAA6D;AAE7D;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAqB;IACjD,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,mBAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,OAAqB;IAChD,OAAO;IACP,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAE9B,SAAS;IACT,MAAM,EAAE,CAAC,EAAE,CAAC,qBAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,yBAAyB;IACzB,MAAM,IAAA,qBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,gBAAQ,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE7D,QAAQ;IACR,MAAM,IAAA,iCAAe,GAAE,CAAC;IAExB,cAAc;IACd,MAAM,IAAA,yCAAmB,GAAE,CAAC;IAE5B,SAAS;IACT,MAAM,IAAA,iCAAsB,GAAE,CAAC;IAE/B,oBAAoB;IACpB,MAAM,IAAA,wCAAgB,GAAE,CAAC;IAEzB,OAAO;IACP,MAAM,IAAA,yCAAmB,GAAE,CAAC;IAE5B,OAAO;IACP,MAAM,IAAA,oCAAyB,GAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAAC,OAAqB;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,IAAA,uBAAY,GAAE,CAAC;QACrB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,GAAG,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,IAAA,uBAAY,GAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const processExtractCategory: () => Promise<void>;
2
+ //# sourceMappingURL=category.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category.d.ts","sourceRoot":"","sources":["../../src/process/category.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,QAAa,OAAO,CAAC,IAAI,CAoD3D,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processExtractCategory = void 0;
4
+ const metadata_1 = require("../metadata");
5
+ const openai_1 = require("../services/openai");
6
+ const processExtractCategory = async () => {
7
+ // 如果所有文件都已经有 category,则跳过本阶段
8
+ const allHaveCategory = metadata_1.MetaData.files.every(file => file.category);
9
+ if (allHaveCategory) {
10
+ console.info('ℹ️ All files already have categories, skipping category extraction.');
11
+ return;
12
+ }
13
+ // 这意味着,只要有一个新文件,就需要重新生成所有类别标签
14
+ // 这倒也合理,因为类别标签是整体相关的
15
+ // 如果是内容改动导致的呢?
16
+ // 提取类别标签列表
17
+ const categories = await (0, openai_1.completeMessages)([
18
+ {
19
+ role: 'system',
20
+ content: [
21
+ '你是一个专业的文档分类助手,擅长根据文档内容和关键词为文档分配合适的类别标签。',
22
+ '你需要阅读所有的文档内容和关键词,然后生成一个类别标签列表。',
23
+ '类别标签应简洁明了,一般有一个单词或者短语组成,使用英文。',
24
+ '每个文档只能有一个类别标签。',
25
+ '请确保类别标签之间没有重复,并且涵盖所有文档的主题。',
26
+ '然后,为每个文档生成一个映射,指明该文档对应的类别标签。',
27
+ '请检查每个分类中的文档数量不能过少(例如少于 2 个),如果有,请考虑合并到其他相关类别中。',
28
+ '请以 JSON 格式返回类别标签列表。',
29
+ '示例输出格式:',
30
+ '{ "categories": ["tag1", "tag2", "tag3"], "mappings": { "hash1": "tag1", "hash2": "tag2" } }',
31
+ ].join('\n'),
32
+ },
33
+ {
34
+ role: 'user',
35
+ content: JSON.stringify(metadata_1.MetaData.files),
36
+ },
37
+ ], { response_format: { type: 'json_object' } });
38
+ const json = categories.choices[0].message.content;
39
+ const parsed = JSON.parse(json);
40
+ for (const file of metadata_1.MetaData.files) {
41
+ const hash = file.hash;
42
+ if (parsed.mappings[hash]) {
43
+ file.category = parsed.mappings[hash];
44
+ }
45
+ }
46
+ console.info('✅ Extracted categories:', categories.choices[0].message.content);
47
+ };
48
+ exports.processExtractCategory = processExtractCategory;
49
+ //# sourceMappingURL=category.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category.js","sourceRoot":"","sources":["../../src/process/category.ts"],"names":[],"mappings":";;;AAAA,0CAAuC;AACvC,+CAAsD;AAE/C,MAAM,sBAAsB,GAAG,KAAK,IAAmB,EAAE;IAC9D,6BAA6B;IAC7B,MAAM,eAAe,GAAG,mBAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACpF,OAAO;IACT,CAAC;IACD,8BAA8B;IAC9B,qBAAqB;IAErB,eAAe;IAEf,WAAW;IACX,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAgB,EACvC;QACE;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,yCAAyC;gBACzC,gCAAgC;gBAChC,+BAA+B;gBAC/B,gBAAgB;gBAChB,4BAA4B;gBAC5B,8BAA8B;gBAC9B,gDAAgD;gBAChD,qBAAqB;gBACrB,SAAS;gBACT,8FAA8F;aAC/F,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAQ,CAAC,KAAK,CAAC;SACxC;KACF,EACD,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAC7C,CAAC;IAEF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACnD,MAAM,MAAM,GAGR,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,mBAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjF,CAAC,CAAC;AApDW,QAAA,sBAAsB,0BAoDjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/services/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,aAAa,EAAE,EACzB,UAAU;IACR,eAAe,CAAC,EAAE;QAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD,KACA,OAAO,CAAC,cAAc,CAiDxB,CAAC"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/services/openai.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,aAAa,EAAE,EACzB,UAAU;IACR,eAAe,CAAC,EAAE;QAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD,KACA,OAAO,CAAC,cAAc,CAqDxB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.completeMessages = void 0;
4
+ const metadata_1 = require("../metadata");
4
5
  /**
5
6
  * 使用 OpenAI API 补全消息
6
7
  * @param messages 消息数组
@@ -39,6 +40,9 @@ const completeMessages = async (messages, options) => {
39
40
  throw new Error(`OpenAI API error (${response.status}): ${errorText}`);
40
41
  }
41
42
  const data = await response.json();
43
+ if (metadata_1.MetaData.options.verbose) {
44
+ console.info('🤖 AI Token Usages', data.usage);
45
+ }
42
46
  // 验证响应
43
47
  if (!data.choices?.[0]?.message?.content?.trim()) {
44
48
  throw new Error('Empty response from OpenAI API');
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/services/openai.ts"],"names":[],"mappings":";;;AA+BA;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,KAAK,EACnC,QAAyB,EACzB,OAEC,EACwB,EAAE;IAC3B,YAAY;IACZ,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,2BAA2B,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC;IAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAQ;YACvB,KAAK;YACL,QAAQ;YACR,WAAW,EAAE,CAAC,EAAE,qBAAqB;YACrC,0BAA0B;SAC3B,CAAC;QAEF,uBAAuB;QACvB,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;YAC7B,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,mBAAmB,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,IAAI,GAAmB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnD,OAAO;QACP,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAtDW,QAAA,gBAAgB,oBAsD3B"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/services/openai.ts"],"names":[],"mappings":";;;AAAA,0CAAuC;AAiCvC;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,KAAK,EACnC,QAAyB,EACzB,OAEC,EACwB,EAAE;IAC3B,YAAY;IACZ,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,2BAA2B,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC;IAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAQ;YACvB,KAAK;YACL,QAAQ;YACR,WAAW,EAAE,CAAC,EAAE,qBAAqB;YACrC,0BAA0B;SAC3B,CAAC;QAEF,uBAAuB;QACvB,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;YAC7B,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,mBAAmB,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,IAAI,GAAmB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnD,IAAI,mBAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,OAAO;QACP,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AA1DW,QAAA,gBAAgB,oBA0D3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ContentPage.d.ts","sourceRoot":"","sources":["../../src/ssg/ContentPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CACxC,CAkcA,CAAC"}
1
+ {"version":3,"file":"ContentPage.d.ts","sourceRoot":"","sources":["../../src/ssg/ContentPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CACxC,CAkdA,CAAC"}
@@ -14,11 +14,13 @@ const ContentPage = props => {
14
14
  const summary = frontmatter.summary;
15
15
  const date = frontmatter.date || '--';
16
16
  const tags = frontmatter.tags || [];
17
+ const category = props.file.category;
17
18
  return (react_1.default.createElement("html", { lang: props.lang },
18
19
  react_1.default.createElement("head", null,
19
20
  react_1.default.createElement("meta", { charSet: "UTF-8" }),
20
21
  react_1.default.createElement("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }),
21
22
  react_1.default.createElement("title", null, title),
23
+ react_1.default.createElement("script", { src: "https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4" }),
22
24
  react_1.default.createElement("style", { dangerouslySetInnerHTML: {
23
25
  __html: `
24
26
  * {
@@ -226,7 +228,7 @@ const ContentPage = props => {
226
228
  margin: 1rem 0;
227
229
  }
228
230
 
229
- .content-body a {
231
+ a {
230
232
  color: #007bff;
231
233
  text-decoration: none;
232
234
  }
@@ -370,15 +372,24 @@ const ContentPage = props => {
370
372
  react_1.default.createElement(LanguageSwitcher_1.LanguageSwitcher, { ctx: props.ctx, lang: props.lang, file: props.file }))),
371
373
  react_1.default.createElement("main", { className: "content" },
372
374
  react_1.default.createElement("header", { className: "content-header" },
373
- react_1.default.createElement("h2", null, title),
375
+ react_1.default.createElement("h2", { className: "text-2xl font-bold mb-2" }, title),
376
+ react_1.default.createElement("p", { className: "font-semibold" }, props.file.category),
374
377
  react_1.default.createElement("blockquote", null, summary),
375
378
  react_1.default.createElement("div", null,
376
379
  "\uD83D\uDCC5 ",
377
380
  date),
378
381
  react_1.default.createElement("div", { className: "tags" },
379
382
  react_1.default.createElement(TagList_1.TagList, { tags: tags }))),
380
- react_1.default.createElement("hr", null),
381
- react_1.default.createElement("article", { className: "content-body", dangerouslySetInnerHTML: { __html: props.content.body } }),
383
+ react_1.default.createElement("div", { className: "content-body" },
384
+ react_1.default.createElement("article", { dangerouslySetInnerHTML: { __html: props.content.body } }),
385
+ react_1.default.createElement("h2", null, "See Also"),
386
+ react_1.default.createElement("ul", null, props.ctx.site.files
387
+ .filter(f => f.category === category && f.hash !== props.file.hash)
388
+ .map(f => {
389
+ const theContent = props.ctx.contents.find(c => c.lang === props.lang && c.hash === f.hash);
390
+ return (react_1.default.createElement("li", { key: f.hash },
391
+ react_1.default.createElement("a", { href: `${f.metadata?.slug}.html` }, theContent?.frontmatter.title)));
392
+ }))),
382
393
  react_1.default.createElement("footer", { className: "footer" },
383
394
  react_1.default.createElement("p", null,
384
395
  "Generated by ",
@@ -1 +1 @@
1
- {"version":3,"file":"ContentPage.js","sourceRoot":"","sources":["../../src/ssg/ContentPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContentPage.js","sourceRoot":"","sources":["../../src/ssg/ContentPage.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Navigator.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/Navigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/B,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd,CAqBA,CAAC"}
1
+ {"version":3,"file":"Navigator.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/Navigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/B,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd,CAiCA,CAAC"}
@@ -6,13 +6,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Navigator = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const Navigator = props => {
9
- return (react_1.default.createElement("ul", { className: "nav-list" }, props.ctx.site.files.map(file => {
10
- const link = file.metadata.slug + '.html';
11
- const isActive = props.file.hash === file.hash;
12
- const theContent = props.ctx.contents.find(c => c.lang === props.lang && c.hash === file.hash);
13
- const theTitle = theContent?.frontmatter?.title || file.metadata.title || '(no title)';
14
- return (react_1.default.createElement("li", { className: "nav-item", key: file.hash },
15
- react_1.default.createElement("a", { href: link, className: `nav-link ${isActive ? 'active' : ''}` }, theTitle)));
9
+ const categories = [...new Set(props.ctx.site.files.map(f => f.category))];
10
+ return (react_1.default.createElement("ul", { className: "nav-list" }, categories.map(category => {
11
+ const filesInCategory = props.ctx.site.files.filter(f => f.category === category);
12
+ return (react_1.default.createElement(react_1.default.Fragment, null,
13
+ react_1.default.createElement("li", { className: "nav-item font-bold", key: category }, category || '未分类'),
14
+ filesInCategory.map(file => {
15
+ const link = file.metadata.slug + '.html';
16
+ const isActive = props.file.hash === file.hash;
17
+ const theContent = props.ctx.contents.find(c => c.lang === props.lang && c.hash === file.hash);
18
+ const theTitle = theContent?.frontmatter?.title || file.metadata.title || '(no title)';
19
+ return (react_1.default.createElement("li", { className: "nav-item", key: file.hash },
20
+ react_1.default.createElement("a", { href: link, className: `nav-link ${isActive ? 'active' : ''}` }, theTitle)));
21
+ })));
16
22
  })));
17
23
  };
18
24
  exports.Navigator = Navigator;
@@ -1 +1 @@
1
- {"version":3,"file":"Navigator.js","sourceRoot":"","sources":["../../../src/ssg/components/Navigator.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAGnB,MAAM,SAAS,GAIjB,KAAK,CAAC,EAAE;IACX,OAAO,CACL,sCAAI,SAAS,EAAC,UAAU,IACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,IAAI,GAAG,OAAO,CAAC;QAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;QAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CACnD,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,QAAS,CAAC,KAAK,IAAI,YAAY,CAAC;QAExF,OAAO,CACL,sCAAI,SAAS,EAAC,UAAU,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI;YACrC,qCAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,IAC7D,QAAQ,CACP,CACD,CACN,CAAC;IACJ,CAAC,CAAC,CACC,CACN,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,SAAS,aAyBpB"}
1
+ {"version":3,"file":"Navigator.js","sourceRoot":"","sources":["../../../src/ssg/components/Navigator.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAGnB,MAAM,SAAS,GAIjB,KAAK,CAAC,EAAE;IACX,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,CACL,sCAAI,SAAS,EAAC,UAAU,IACrB,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QACzB,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAClF,OAAO,CACL;YACE,sCAAI,SAAS,EAAC,oBAAoB,EAAC,GAAG,EAAE,QAAQ,IAC7C,QAAQ,IAAI,KAAK,CACf;YACJ,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CACnD,CAAC;gBACF,MAAM,QAAQ,GACZ,UAAU,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,QAAS,CAAC,KAAK,IAAI,YAAY,CAAC;gBAEzE,OAAO,CACL,sCAAI,SAAS,EAAC,UAAU,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI;oBACrC,qCAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,IAC7D,QAAQ,CACP,CACD,CACN,CAAC;YACJ,CAAC,CAAC,CACD,CACJ,CAAC;IACJ,CAAC,CAAC,CACC,CACN,CAAC;AACJ,CAAC,CAAC;AArCW,QAAA,SAAS,aAqCpB"}
package/dist/types.d.ts CHANGED
@@ -6,6 +6,10 @@ export interface FileMetaData {
6
6
  path: string;
7
7
  links: string[];
8
8
  metadata?: AIMetadata;
9
+ /**
10
+ * AI 提取的类别标签
11
+ */
12
+ category?: string;
9
13
  /**
10
14
  * 记录翻译所用的(增强后)母语文件的哈希值
11
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,aAAa,CAAC;IACpB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QACb;;WAEG;QACH,WAAW,EAAE,GAAG,CAAC;KAClB,CAAC,CAAC;CACJ"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,aAAa,CAAC;IACpB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QACb;;WAEG;QACH,WAAW,EAAE,GAAG,CAAC;KAClB,CAAC,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "czon",
3
- "version": "0.1.8",
3
+ "version": "0.2.0",
4
4
  "description": "CZone - AI enhanced Markdown content engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",