@zooique/memora 0.1.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/LICENSE +21 -0
- package/README.md +148 -0
- package/dist/agent/agent.d.ts +343 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +893 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/assembler.d.ts +77 -0
- package/dist/agent/assembler.d.ts.map +1 -0
- package/dist/agent/assembler.js +115 -0
- package/dist/agent/assembler.js.map +1 -0
- package/dist/agent/builtinToolHandlers.d.ts +96 -0
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -0
- package/dist/agent/builtinToolHandlers.js +388 -0
- package/dist/agent/builtinToolHandlers.js.map +1 -0
- package/dist/agent/builtinTools.d.ts +35 -0
- package/dist/agent/builtinTools.d.ts.map +1 -0
- package/dist/agent/builtinTools.js +75 -0
- package/dist/agent/builtinTools.js.map +1 -0
- package/dist/agent/constants.d.ts +67 -0
- package/dist/agent/constants.d.ts.map +1 -0
- package/dist/agent/constants.js +67 -0
- package/dist/agent/constants.js.map +1 -0
- package/dist/agent/contextManager.d.ts +130 -0
- package/dist/agent/contextManager.d.ts.map +1 -0
- package/dist/agent/contextManager.js +287 -0
- package/dist/agent/contextManager.js.map +1 -0
- package/dist/agent/loop.d.ts +288 -0
- package/dist/agent/loop.d.ts.map +1 -0
- package/dist/agent/loop.js +756 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/managers/autoConfigRefiner.d.ts +39 -0
- package/dist/agent/managers/autoConfigRefiner.d.ts.map +1 -0
- package/dist/agent/managers/autoConfigRefiner.js +150 -0
- package/dist/agent/managers/autoConfigRefiner.js.map +1 -0
- package/dist/agent/managers/configManager.d.ts +114 -0
- package/dist/agent/managers/configManager.d.ts.map +1 -0
- package/dist/agent/managers/configManager.js +186 -0
- package/dist/agent/managers/configManager.js.map +1 -0
- package/dist/agent/managers/insightExtractor.d.ts +141 -0
- package/dist/agent/managers/insightExtractor.d.ts.map +1 -0
- package/dist/agent/managers/insightExtractor.js +420 -0
- package/dist/agent/managers/insightExtractor.js.map +1 -0
- package/dist/agent/managers/memoryAdvisor.d.ts +96 -0
- package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -0
- package/dist/agent/managers/memoryAdvisor.js +198 -0
- package/dist/agent/managers/memoryAdvisor.js.map +1 -0
- package/dist/agent/managers/memoryInspector.d.ts +231 -0
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -0
- package/dist/agent/managers/memoryInspector.js +327 -0
- package/dist/agent/managers/memoryInspector.js.map +1 -0
- package/dist/agent/managers/sessionManager.d.ts +89 -0
- package/dist/agent/managers/sessionManager.d.ts.map +1 -0
- package/dist/agent/managers/sessionManager.js +178 -0
- package/dist/agent/managers/sessionManager.js.map +1 -0
- package/dist/agent/managers/userFactExtractor.d.ts +25 -0
- package/dist/agent/managers/userFactExtractor.d.ts.map +1 -0
- package/dist/agent/managers/userFactExtractor.js +81 -0
- package/dist/agent/managers/userFactExtractor.js.map +1 -0
- package/dist/agent/managers/workProjection.d.ts +117 -0
- package/dist/agent/managers/workProjection.d.ts.map +1 -0
- package/dist/agent/managers/workProjection.js +290 -0
- package/dist/agent/managers/workProjection.js.map +1 -0
- package/dist/agent/messageHistory.d.ts +157 -0
- package/dist/agent/messageHistory.d.ts.map +1 -0
- package/dist/agent/messageHistory.js +288 -0
- package/dist/agent/messageHistory.js.map +1 -0
- package/dist/agent/toolExecutor.d.ts +137 -0
- package/dist/agent/toolExecutor.d.ts.map +1 -0
- package/dist/agent/toolExecutor.js +209 -0
- package/dist/agent/toolExecutor.js.map +1 -0
- package/dist/agent/tracer.d.ts +122 -0
- package/dist/agent/tracer.d.ts.map +1 -0
- package/dist/agent/tracer.js +64 -0
- package/dist/agent/tracer.js.map +1 -0
- package/dist/agent/types.d.ts +98 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +19 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/config/loader.d.ts +229 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +194 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/eval/evalTypes.d.ts +118 -0
- package/dist/eval/evalTypes.d.ts.map +1 -0
- package/dist/eval/evalTypes.js +102 -0
- package/dist/eval/evalTypes.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/embedding.d.ts +62 -0
- package/dist/llm/embedding.d.ts.map +1 -0
- package/dist/llm/embedding.js +162 -0
- package/dist/llm/embedding.js.map +1 -0
- package/dist/llm/factory.d.ts +39 -0
- package/dist/llm/factory.d.ts.map +1 -0
- package/dist/llm/factory.js +108 -0
- package/dist/llm/factory.js.map +1 -0
- package/dist/llm/openaiCompatible.d.ts +63 -0
- package/dist/llm/openaiCompatible.d.ts.map +1 -0
- package/dist/llm/openaiCompatible.js +340 -0
- package/dist/llm/openaiCompatible.js.map +1 -0
- package/dist/llm/provider.d.ts +91 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +14 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/llm/types.d.ts +25 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +7 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/logging/logger.d.ts +39 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +279 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/logging/loggerInterface.d.ts +33 -0
- package/dist/logging/loggerInterface.d.ts.map +1 -0
- package/dist/logging/loggerInterface.js +2 -0
- package/dist/logging/loggerInterface.js.map +1 -0
- package/dist/memory/inMemoryRelationStore.d.ts +51 -0
- package/dist/memory/inMemoryRelationStore.d.ts.map +1 -0
- package/dist/memory/inMemoryRelationStore.js +65 -0
- package/dist/memory/inMemoryRelationStore.js.map +1 -0
- package/dist/memory/inMemoryStorage.d.ts +97 -0
- package/dist/memory/inMemoryStorage.d.ts.map +1 -0
- package/dist/memory/inMemoryStorage.js +177 -0
- package/dist/memory/inMemoryStorage.js.map +1 -0
- package/dist/memory/loader.d.ts +49 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +93 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/memory/projectManager.d.ts +182 -0
- package/dist/memory/projectManager.d.ts.map +1 -0
- package/dist/memory/projectManager.js +441 -0
- package/dist/memory/projectManager.js.map +1 -0
- package/dist/memory/recall.d.ts +77 -0
- package/dist/memory/recall.d.ts.map +1 -0
- package/dist/memory/recall.js +147 -0
- package/dist/memory/recall.js.map +1 -0
- package/dist/memory/relationStore.d.ts +78 -0
- package/dist/memory/relationStore.d.ts.map +1 -0
- package/dist/memory/relationStore.js +2 -0
- package/dist/memory/relationStore.js.map +1 -0
- package/dist/memory/sessionStore.d.ts +84 -0
- package/dist/memory/sessionStore.d.ts.map +1 -0
- package/dist/memory/sessionStore.js +2 -0
- package/dist/memory/sessionStore.js.map +1 -0
- package/dist/memory/storageInterface.d.ts +107 -0
- package/dist/memory/storageInterface.d.ts.map +1 -0
- package/dist/memory/storageInterface.js +2 -0
- package/dist/memory/storageInterface.js.map +1 -0
- package/dist/memory/store.d.ts +50 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +160 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/types.d.ts +189 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +230 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/userProfile.d.ts +156 -0
- package/dist/memory/userProfile.d.ts.map +1 -0
- package/dist/memory/userProfile.js +315 -0
- package/dist/memory/userProfile.js.map +1 -0
- package/dist/memory/vectorStore.d.ts +75 -0
- package/dist/memory/vectorStore.d.ts.map +1 -0
- package/dist/memory/vectorStore.js +144 -0
- package/dist/memory/vectorStore.js.map +1 -0
- package/dist/persona/personaManager.d.ts +121 -0
- package/dist/persona/personaManager.d.ts.map +1 -0
- package/dist/persona/personaManager.js +349 -0
- package/dist/persona/personaManager.js.map +1 -0
- package/dist/persona/types.d.ts +32 -0
- package/dist/persona/types.d.ts.map +1 -0
- package/dist/persona/types.js +5 -0
- package/dist/persona/types.js.map +1 -0
- package/dist/security/pathGuard.d.ts +121 -0
- package/dist/security/pathGuard.d.ts.map +1 -0
- package/dist/security/pathGuard.js +276 -0
- package/dist/security/pathGuard.js.map +1 -0
- package/dist/skill/skillManager.d.ts +82 -0
- package/dist/skill/skillManager.d.ts.map +1 -0
- package/dist/skill/skillManager.js +198 -0
- package/dist/skill/skillManager.js.map +1 -0
- package/dist/skill/types.d.ts +28 -0
- package/dist/skill/types.d.ts.map +1 -0
- package/dist/skill/types.js +5 -0
- package/dist/skill/types.js.map +1 -0
- package/dist/utils/errors.d.ts +86 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +143 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/eventEmitter.d.ts +87 -0
- package/dist/utils/eventEmitter.d.ts.map +1 -0
- package/dist/utils/eventEmitter.js +79 -0
- package/dist/utils/eventEmitter.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +24 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +44 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/json.d.ts +20 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +65 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/loggerHolder.d.ts +37 -0
- package/dist/utils/loggerHolder.d.ts.map +1 -0
- package/dist/utils/loggerHolder.js +49 -0
- package/dist/utils/loggerHolder.js.map +1 -0
- package/dist/utils/math.d.ts +5 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +19 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/path.d.ts +28 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +33 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/safeTimer.d.ts +26 -0
- package/dist/utils/safeTimer.d.ts.map +1 -0
- package/dist/utils/safeTimer.js +49 -0
- package/dist/utils/safeTimer.js.map +1 -0
- package/dist/utils/scanner.d.ts +54 -0
- package/dist/utils/scanner.d.ts.map +1 -0
- package/dist/utils/scanner.js +115 -0
- package/dist/utils/scanner.js.map +1 -0
- package/dist/utils/segmenter.d.ts +30 -0
- package/dist/utils/segmenter.d.ts.map +1 -0
- package/dist/utils/segmenter.js +80 -0
- package/dist/utils/segmenter.js.map +1 -0
- package/dist/utils/strings.d.ts +18 -0
- package/dist/utils/strings.d.ts.map +1 -0
- package/dist/utils/strings.js +25 -0
- package/dist/utils/strings.js.map +1 -0
- package/dist/utils/time.d.ts +23 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +31 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/toError.d.ts +13 -0
- package/dist/utils/toError.d.ts.map +1 -0
- package/dist/utils/toError.js +22 -0
- package/dist/utils/toError.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 轻量关键词分词(用于关键词匹配场景)
|
|
3
|
+
*
|
|
4
|
+
* 与 segmentText() 的区别:
|
|
5
|
+
* - segmentText:精确分词(Intl.Segmenter ICU 词典切分),用于 LLM 输出切分 + recall 关键词提取
|
|
6
|
+
* - tokenizeKeywords:轻量分词,用于 persona/skill 关键词匹配
|
|
7
|
+
* 提取中文连续段(≥2 字)+ 英文词,不做 ICU 词典切分
|
|
8
|
+
*
|
|
9
|
+
* @param input - 用户输入文本
|
|
10
|
+
* @returns 分词后的 token 列表(去重)
|
|
11
|
+
*/
|
|
12
|
+
export declare function tokenizeKeywords(input: string): string[];
|
|
13
|
+
/**
|
|
14
|
+
* 关键词匹配评分(Persona/Skill 共享逻辑)
|
|
15
|
+
*
|
|
16
|
+
* 匹配策略:先分词,再对每个关键词做子串搜索(tokens + 原文双保险)。
|
|
17
|
+
* 大小写不敏感,中英文混合友好。
|
|
18
|
+
*
|
|
19
|
+
* @param userInput - 用户输入文本
|
|
20
|
+
* @param keywordList - 待匹配的关键词数组
|
|
21
|
+
* @returns 匹配得分 (0~1),0 表示无命中
|
|
22
|
+
*/
|
|
23
|
+
export declare function scoreByKeywords(userInput: string, keywordList: string[]): number;
|
|
24
|
+
/**
|
|
25
|
+
* 单行分词(用于 LLM 输出的精确切分)
|
|
26
|
+
* @param text 原文
|
|
27
|
+
* @returns 分词数组(去标点、去空白、保留中英文 + 数字)
|
|
28
|
+
*/
|
|
29
|
+
export declare function segmentText(text: string): string[];
|
|
30
|
+
//# sourceMappingURL=segmenter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmenter.d.ts","sourceRoot":"","sources":["../../src/utils/segmenter.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CASxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAehF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAclD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 文本分词器
|
|
3
|
+
*
|
|
4
|
+
* 用 Node 内建 Intl.Segmenter(ECMAScript Intl API)实现中英文混合分词:
|
|
5
|
+
* - 英文按空格 + 标点
|
|
6
|
+
* - 中文按 ICU 词典(Node 18+ 内建)
|
|
7
|
+
* - 数字、emoji、英文单词保留为整体
|
|
8
|
+
*
|
|
9
|
+
* 详见 M-202:避免引入 nodejieba(C++ 扩展,Windows + Node 24 prebuilt 不可靠)
|
|
10
|
+
*
|
|
11
|
+
* 性能:~10 万字/秒(Intl.Segmenter 是 ICU C++ 实现,比纯 JS 快 10 倍+)
|
|
12
|
+
*/
|
|
13
|
+
const ZH_SEGMENTER = new Intl.Segmenter('zh-CN', { granularity: 'word' });
|
|
14
|
+
/**
|
|
15
|
+
* 轻量关键词分词(用于关键词匹配场景)
|
|
16
|
+
*
|
|
17
|
+
* 与 segmentText() 的区别:
|
|
18
|
+
* - segmentText:精确分词(Intl.Segmenter ICU 词典切分),用于 LLM 输出切分 + recall 关键词提取
|
|
19
|
+
* - tokenizeKeywords:轻量分词,用于 persona/skill 关键词匹配
|
|
20
|
+
* 提取中文连续段(≥2 字)+ 英文词,不做 ICU 词典切分
|
|
21
|
+
*
|
|
22
|
+
* @param input - 用户输入文本
|
|
23
|
+
* @returns 分词后的 token 列表(去重)
|
|
24
|
+
*/
|
|
25
|
+
export function tokenizeKeywords(input) {
|
|
26
|
+
const tokens = [];
|
|
27
|
+
// 提取中文连续段(2 字以上的中文 token)
|
|
28
|
+
const chineseSegments = input.match(/[\u4e00-\u9fff]{2,}/g) ?? [];
|
|
29
|
+
tokens.push(...chineseSegments);
|
|
30
|
+
// 提取英文词
|
|
31
|
+
const englishSegments = input.match(/[a-zA-Z0-9]+/g) ?? [];
|
|
32
|
+
tokens.push(...englishSegments);
|
|
33
|
+
return tokens;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 关键词匹配评分(Persona/Skill 共享逻辑)
|
|
37
|
+
*
|
|
38
|
+
* 匹配策略:先分词,再对每个关键词做子串搜索(tokens + 原文双保险)。
|
|
39
|
+
* 大小写不敏感,中英文混合友好。
|
|
40
|
+
*
|
|
41
|
+
* @param userInput - 用户输入文本
|
|
42
|
+
* @param keywordList - 待匹配的关键词数组
|
|
43
|
+
* @returns 匹配得分 (0~1),0 表示无命中
|
|
44
|
+
*/
|
|
45
|
+
export function scoreByKeywords(userInput, keywordList) {
|
|
46
|
+
if (keywordList.length === 0)
|
|
47
|
+
return 0;
|
|
48
|
+
const normalizedInput = userInput.toLowerCase();
|
|
49
|
+
const tokens = tokenizeKeywords(normalizedInput);
|
|
50
|
+
let hitCount = 0;
|
|
51
|
+
for (const kw of keywordList) {
|
|
52
|
+
const kwLower = kw.toLowerCase();
|
|
53
|
+
if (tokens.some((t) => t.includes(kwLower)) || normalizedInput.includes(kwLower)) {
|
|
54
|
+
hitCount++;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return hitCount / keywordList.length;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 单行分词(用于 LLM 输出的精确切分)
|
|
61
|
+
* @param text 原文
|
|
62
|
+
* @returns 分词数组(去标点、去空白、保留中英文 + 数字)
|
|
63
|
+
*/
|
|
64
|
+
export function segmentText(text) {
|
|
65
|
+
if (!text)
|
|
66
|
+
return [];
|
|
67
|
+
// 中英混合:先用 zh-CN 切中文词,再过滤标点
|
|
68
|
+
// zh-CN 也支持英文按空格切(不会破坏英文单词)
|
|
69
|
+
const tokens = [];
|
|
70
|
+
for (const segment of ZH_SEGMENTER.segment(text)) {
|
|
71
|
+
if (segment.isWordLike) {
|
|
72
|
+
const word = segment.segment.trim();
|
|
73
|
+
if (word.length > 0) {
|
|
74
|
+
tokens.push(word);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return tokens;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=segmenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmenter.js","sourceRoot":"","sources":["../../src/utils/segmenter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;AAE1E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,0BAA0B;IAC1B,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;IAClE,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;IAChC,QAAQ;IACR,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,WAAqB;IACtE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEvC,MAAM,eAAe,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAEjD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjF,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,2BAA2B;IAC3B,4BAA4B;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 字符串工具函数
|
|
3
|
+
*
|
|
4
|
+
* 从各模块提取的公共字符串处理函数,消除跨模块重复代码。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 将字符串转换为 URL 友好的 slug 格式
|
|
8
|
+
*
|
|
9
|
+
* 规则:
|
|
10
|
+
* - 冒号和空白替换为连字符
|
|
11
|
+
* - 只保留字母、数字、中文、连字符、下划线
|
|
12
|
+
* - 截断到 40 字符
|
|
13
|
+
*
|
|
14
|
+
* @param value 输入字符串
|
|
15
|
+
* @returns slug 格式的字符串
|
|
16
|
+
*/
|
|
17
|
+
export declare function slugify(value: string): string;
|
|
18
|
+
//# sourceMappingURL=strings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO7C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 字符串工具函数
|
|
3
|
+
*
|
|
4
|
+
* 从各模块提取的公共字符串处理函数,消除跨模块重复代码。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 将字符串转换为 URL 友好的 slug 格式
|
|
8
|
+
*
|
|
9
|
+
* 规则:
|
|
10
|
+
* - 冒号和空白替换为连字符
|
|
11
|
+
* - 只保留字母、数字、中文、连字符、下划线
|
|
12
|
+
* - 截断到 40 字符
|
|
13
|
+
*
|
|
14
|
+
* @param value 输入字符串
|
|
15
|
+
* @returns slug 格式的字符串
|
|
16
|
+
*/
|
|
17
|
+
export function slugify(value) {
|
|
18
|
+
return value
|
|
19
|
+
.replace(/[:\s]+/g, '-')
|
|
20
|
+
.replace(/[^a-zA-Z0-9\u4e00-\u9fff\-_]/g, '')
|
|
21
|
+
.replace(/-{2,}/g, '-')
|
|
22
|
+
.replace(/^-|-$/g, '')
|
|
23
|
+
.slice(0, 40);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC;SAC5C,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 时间工具函数
|
|
3
|
+
*
|
|
4
|
+
* 从 messageHistory.ts 提取的公共时间格式化函数,
|
|
5
|
+
* 消除跨模块 `new Date().toISOString()` 内联重复。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 获取当前时间的 ISO 8601 时间戳
|
|
9
|
+
*
|
|
10
|
+
* @returns 如 "2026-06-21T12:34:56.789Z"
|
|
11
|
+
*/
|
|
12
|
+
export declare function nowIso(): string;
|
|
13
|
+
/**
|
|
14
|
+
* 获取当前日期字符串(YYYY-MM-DD,本地时区)
|
|
15
|
+
*
|
|
16
|
+
* 使用本地时区日期,避免 UTC 偏移导致跨天错位
|
|
17
|
+
* (如 Asia/Shanghai 00:00-08:00 期间 UTC 仍是前一天,
|
|
18
|
+
* 会话文件会写入"昨天"导致跨天 reset 与 UI 错乱)
|
|
19
|
+
*
|
|
20
|
+
* @returns 如 "2026-06-21"
|
|
21
|
+
*/
|
|
22
|
+
export declare function todayDate(): string;
|
|
23
|
+
//# sourceMappingURL=time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAMlC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 时间工具函数
|
|
3
|
+
*
|
|
4
|
+
* 从 messageHistory.ts 提取的公共时间格式化函数,
|
|
5
|
+
* 消除跨模块 `new Date().toISOString()` 内联重复。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 获取当前时间的 ISO 8601 时间戳
|
|
9
|
+
*
|
|
10
|
+
* @returns 如 "2026-06-21T12:34:56.789Z"
|
|
11
|
+
*/
|
|
12
|
+
export function nowIso() {
|
|
13
|
+
return new Date().toISOString();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 获取当前日期字符串(YYYY-MM-DD,本地时区)
|
|
17
|
+
*
|
|
18
|
+
* 使用本地时区日期,避免 UTC 偏移导致跨天错位
|
|
19
|
+
* (如 Asia/Shanghai 00:00-08:00 期间 UTC 仍是前一天,
|
|
20
|
+
* 会话文件会写入"昨天"导致跨天 reset 与 UI 错乱)
|
|
21
|
+
*
|
|
22
|
+
* @returns 如 "2026-06-21"
|
|
23
|
+
*/
|
|
24
|
+
export function todayDate() {
|
|
25
|
+
const now = new Date();
|
|
26
|
+
const year = now.getFullYear();
|
|
27
|
+
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
28
|
+
const day = String(now.getDate()).padStart(2, '0');
|
|
29
|
+
return `${year}-${month}-${day}`;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 纯逻辑 toError — 零依赖,浏览器 / Node.js 通用
|
|
3
|
+
*
|
|
4
|
+
* 将 catch 块中的 unknown 值安全转换为 Error 对象。
|
|
5
|
+
* 从 errors.ts 中提取,确保浏览器端可直接 import 而不引入 logging(pino)依赖。
|
|
6
|
+
*
|
|
7
|
+
* 转换规则:
|
|
8
|
+
* - Error 实例:原样返回
|
|
9
|
+
* - 对象且含 message 属性:包装为 Error
|
|
10
|
+
* - 其他:调用 String() 转为 message
|
|
11
|
+
*/
|
|
12
|
+
export declare function toError(err: unknown): Error;
|
|
13
|
+
//# sourceMappingURL=toError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toError.d.ts","sourceRoot":"","sources":["../../src/utils/toError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAU3C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 纯逻辑 toError — 零依赖,浏览器 / Node.js 通用
|
|
3
|
+
*
|
|
4
|
+
* 将 catch 块中的 unknown 值安全转换为 Error 对象。
|
|
5
|
+
* 从 errors.ts 中提取,确保浏览器端可直接 import 而不引入 logging(pino)依赖。
|
|
6
|
+
*
|
|
7
|
+
* 转换规则:
|
|
8
|
+
* - Error 实例:原样返回
|
|
9
|
+
* - 对象且含 message 属性:包装为 Error
|
|
10
|
+
* - 其他:调用 String() 转为 message
|
|
11
|
+
*/
|
|
12
|
+
export function toError(err) {
|
|
13
|
+
if (err instanceof Error)
|
|
14
|
+
return err;
|
|
15
|
+
if (typeof err === 'object' &&
|
|
16
|
+
err !== null &&
|
|
17
|
+
typeof err.message === 'string') {
|
|
18
|
+
return new Error(err.message);
|
|
19
|
+
}
|
|
20
|
+
return new Error(String(err));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=toError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toError.js","sourceRoot":"","sources":["../../src/utils/toError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,GAAY;IAClC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC;IACrC,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,OAAQ,GAA6B,CAAC,OAAO,KAAK,QAAQ,EAC1D,CAAC;QACD,OAAO,IAAI,KAAK,CAAE,GAA2B,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zooique/memora",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "通用 Agent 架构(纯逻辑库)— 本地、私有、领域无关,万物皆记忆",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md",
|
|
10
|
+
"LICENSE"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
|
|
20
|
+
"test": "vitest run",
|
|
21
|
+
"test:watch": "vitest",
|
|
22
|
+
"test:cov": "vitest run --coverage",
|
|
23
|
+
"lint": "eslint . --ext .ts",
|
|
24
|
+
"lint:fix": "eslint . --ext .ts --fix",
|
|
25
|
+
"format": "prettier --write \"**/*.{ts,md,json}\"",
|
|
26
|
+
"format:check": "prettier --check \"**/*.{ts,md,json}\"",
|
|
27
|
+
"typecheck": "tsc --noEmit",
|
|
28
|
+
"prepare": "lefthook install || true",
|
|
29
|
+
"prepublishOnly": "npx rimraf dist && npm run build"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=22.0.0"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"agent",
|
|
36
|
+
"memory",
|
|
37
|
+
"llm",
|
|
38
|
+
"ai",
|
|
39
|
+
"local-first"
|
|
40
|
+
],
|
|
41
|
+
"author": "Memora Contributors",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"zod": "^3.25.76"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"pino": ">=9.0.0"
|
|
48
|
+
},
|
|
49
|
+
"peerDependenciesMeta": {
|
|
50
|
+
"pino": {
|
|
51
|
+
"optional": true
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@commitlint/cli": "^21.0.2",
|
|
57
|
+
"@commitlint/config-conventional": "^21.0.2",
|
|
58
|
+
"@types/node": "^22.7.0",
|
|
59
|
+
"@typescript-eslint/eslint-plugin": "^8.8.0",
|
|
60
|
+
"@typescript-eslint/parser": "^8.8.0",
|
|
61
|
+
"@vitest/coverage-v8": "^4.1.8",
|
|
62
|
+
"eslint": "^9.12.0",
|
|
63
|
+
"lefthook": "^1.7.0",
|
|
64
|
+
"msw": "^2.4.0",
|
|
65
|
+
"pino-pretty": "^11.2.0",
|
|
66
|
+
"prettier": "^3.3.0",
|
|
67
|
+
"rimraf": "^6.1.3",
|
|
68
|
+
"tsc-alias": "^1.8.17",
|
|
69
|
+
"tsx": "^4.19.0",
|
|
70
|
+
"typescript": "^5.6.0",
|
|
71
|
+
"vitest": "^4.1.8"
|
|
72
|
+
}
|
|
73
|
+
}
|