@zooique/memora 2.0.0 → 2.0.3
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.en.md +272 -0
- package/README.md +150 -38
- package/dist/agent/agent.d.ts +233 -58
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +651 -359
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +29 -13
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +79 -44
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/builtinToolHandlers.d.ts +26 -1
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +73 -1
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/constants.d.ts +4 -0
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +4 -0
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +8 -0
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +7 -2
- package/dist/agent/contextManager.js.map +1 -1
- package/dist/agent/guardrail.d.ts +4 -2
- package/dist/agent/guardrail.d.ts.map +1 -1
- package/dist/agent/guardrail.js +13 -5
- package/dist/agent/guardrail.js.map +1 -1
- package/dist/agent/loop.d.ts +58 -14
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +184 -131
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +126 -22
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +239 -44
- package/dist/agent/managers/archiveCoordinator.js.map +1 -1
- package/dist/agent/managers/autoConfigRefiner.d.ts.map +1 -1
- package/dist/agent/managers/autoConfigRefiner.js +4 -8
- package/dist/agent/managers/autoConfigRefiner.js.map +1 -1
- package/dist/agent/managers/configManager.d.ts +87 -3
- package/dist/agent/managers/configManager.d.ts.map +1 -1
- package/dist/agent/managers/configManager.js +139 -2
- package/dist/agent/managers/configManager.js.map +1 -1
- package/dist/agent/managers/dedupManager.d.ts +169 -0
- package/dist/agent/managers/dedupManager.d.ts.map +1 -0
- package/dist/agent/managers/dedupManager.js +336 -0
- package/dist/agent/managers/dedupManager.js.map +1 -0
- package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
- package/dist/agent/managers/insightExtractor.js +11 -11
- package/dist/agent/managers/insightExtractor.js.map +1 -1
- package/dist/agent/managers/llmJudgeHelper.d.ts +38 -0
- package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -0
- package/dist/agent/managers/llmJudgeHelper.js +49 -0
- package/dist/agent/managers/llmJudgeHelper.js.map +1 -0
- package/dist/agent/managers/memoryAdvisor.d.ts +3 -3
- package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
- package/dist/agent/managers/memoryAdvisor.js +53 -67
- package/dist/agent/managers/memoryAdvisor.js.map +1 -1
- package/dist/agent/managers/memoryDecayScheduler.d.ts +46 -5
- package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -1
- package/dist/agent/managers/memoryDecayScheduler.js +127 -63
- package/dist/agent/managers/memoryDecayScheduler.js.map +1 -1
- package/dist/agent/managers/memoryGovernance.d.ts +56 -0
- package/dist/agent/managers/memoryGovernance.d.ts.map +1 -0
- package/dist/agent/managers/memoryGovernance.js +63 -0
- package/dist/agent/managers/memoryGovernance.js.map +1 -0
- package/dist/agent/managers/memoryInspector.d.ts +32 -157
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +70 -363
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/relationBuilder.js +2 -2
- package/dist/agent/managers/relationBuilder.js.map +1 -1
- package/dist/agent/managers/sessionArchiver.d.ts +6 -1
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +19 -22
- package/dist/agent/managers/sessionArchiver.js.map +1 -1
- package/dist/agent/managers/streamAccumulator.d.ts +45 -0
- package/dist/agent/managers/streamAccumulator.d.ts.map +1 -0
- package/dist/agent/managers/streamAccumulator.js +40 -0
- package/dist/agent/managers/streamAccumulator.js.map +1 -0
- package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
- package/dist/agent/managers/textPolishManager.js +4 -7
- package/dist/agent/managers/textPolishManager.js.map +1 -1
- package/dist/agent/managers/workProjection.d.ts +16 -1
- package/dist/agent/managers/workProjection.d.ts.map +1 -1
- package/dist/agent/managers/workProjection.js +48 -24
- package/dist/agent/managers/workProjection.js.map +1 -1
- package/dist/agent/toolExecutor.d.ts +22 -2
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +28 -3
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/types.d.ts +10 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/userFactExtractor.d.ts.map +1 -1
- package/dist/agent/userFactExtractor.js +7 -0
- package/dist/agent/userFactExtractor.js.map +1 -1
- package/dist/config/loader.d.ts +124 -236
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +273 -117
- package/dist/config/loader.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/embedding.d.ts +13 -1
- package/dist/llm/embedding.d.ts.map +1 -1
- package/dist/llm/embedding.js.map +1 -1
- package/dist/llm/factory.d.ts +19 -5
- package/dist/llm/factory.d.ts.map +1 -1
- package/dist/llm/factory.js +19 -37
- package/dist/llm/factory.js.map +1 -1
- package/dist/llm/openaiCompatible.d.ts.map +1 -1
- package/dist/llm/openaiCompatible.js +2 -9
- package/dist/llm/openaiCompatible.js.map +1 -1
- package/dist/logging/logger.d.ts +3 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +47 -50
- package/dist/logging/logger.js.map +1 -1
- package/dist/memory/governance.d.ts +50 -0
- package/dist/memory/governance.d.ts.map +1 -0
- package/dist/memory/governance.js +70 -0
- package/dist/memory/governance.js.map +1 -0
- package/dist/memory/hybridMerge.d.ts +0 -4
- package/dist/memory/hybridMerge.d.ts.map +1 -1
- package/dist/memory/hybridMerge.js +19 -4
- package/dist/memory/hybridMerge.js.map +1 -1
- package/dist/memory/inMemoryRelationStore.d.ts +7 -0
- package/dist/memory/inMemoryRelationStore.d.ts.map +1 -1
- package/dist/memory/inMemoryRelationStore.js +15 -0
- package/dist/memory/inMemoryRelationStore.js.map +1 -1
- package/dist/memory/inMemoryStorage.d.ts +36 -1
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +66 -16
- package/dist/memory/inMemoryStorage.js.map +1 -1
- package/dist/memory/loader.d.ts +2 -0
- package/dist/memory/loader.d.ts.map +1 -1
- package/dist/memory/loader.js +8 -1
- package/dist/memory/loader.js.map +1 -1
- package/dist/memory/lockManager.d.ts +7 -2
- package/dist/memory/lockManager.d.ts.map +1 -1
- package/dist/memory/lockManager.js +31 -5
- package/dist/memory/lockManager.js.map +1 -1
- package/dist/memory/projectManager.d.ts +2 -1
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +21 -3
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/projectRegistry.d.ts +34 -1
- package/dist/memory/projectRegistry.d.ts.map +1 -1
- package/dist/memory/projectRegistry.js +99 -22
- package/dist/memory/projectRegistry.js.map +1 -1
- package/dist/memory/recall.d.ts +16 -0
- package/dist/memory/recall.d.ts.map +1 -1
- package/dist/memory/recall.js +33 -18
- package/dist/memory/recall.js.map +1 -1
- package/dist/memory/relationStore.d.ts +20 -3
- package/dist/memory/relationStore.d.ts.map +1 -1
- package/dist/memory/sourceValidation.d.ts +11 -0
- package/dist/memory/sourceValidation.d.ts.map +1 -1
- package/dist/memory/sourceValidation.js +24 -2
- package/dist/memory/sourceValidation.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +26 -1
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/store.d.ts +22 -1
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +58 -20
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/types.d.ts +44 -31
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +63 -24
- package/dist/memory/types.js.map +1 -1
- package/dist/memory/userProfile.d.ts +32 -8
- package/dist/memory/userProfile.d.ts.map +1 -1
- package/dist/memory/userProfile.js +105 -44
- package/dist/memory/userProfile.js.map +1 -1
- package/dist/memory/vectorStore.d.ts +16 -22
- package/dist/memory/vectorStore.d.ts.map +1 -1
- package/dist/memory/vectorStore.js +49 -22
- package/dist/memory/vectorStore.js.map +1 -1
- package/dist/persona/personaManager.d.ts +36 -87
- package/dist/persona/personaManager.d.ts.map +1 -1
- package/dist/persona/personaManager.js +131 -230
- package/dist/persona/personaManager.js.map +1 -1
- package/dist/skill/skillManager.d.ts +11 -57
- package/dist/skill/skillManager.d.ts.map +1 -1
- package/dist/skill/skillManager.js +46 -142
- package/dist/skill/skillManager.js.map +1 -1
- package/dist/skill/types.d.ts +2 -3
- package/dist/skill/types.d.ts.map +1 -1
- package/dist/utils/configResourceManager.d.ts +111 -0
- package/dist/utils/configResourceManager.d.ts.map +1 -0
- package/dist/utils/configResourceManager.js +148 -0
- package/dist/utils/configResourceManager.js.map +1 -0
- package/dist/utils/errors.d.ts +17 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +19 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +83 -6
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +23 -0
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +4 -2
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/math.d.ts +11 -0
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +17 -0
- package/dist/utils/math.js.map +1 -1
- package/dist/utils/segmenter.d.ts +0 -10
- package/dist/utils/segmenter.d.ts.map +1 -1
- package/dist/utils/segmenter.js +10 -1
- package/dist/utils/segmenter.js.map +1 -1
- package/docs/memora-api-reference.md +1235 -0
- package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +808 -0
- package/package.json +39 -22
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ConfigResourceManager } from '../utils/configResourceManager.js';
|
|
2
2
|
import type { SkillEntry, SkillMatch } from '../skill/types.js';
|
|
3
|
+
import type { ScannedMarkdownEntry } from '../utils/scanner.js';
|
|
3
4
|
/**
|
|
4
5
|
* 技能管理器
|
|
5
6
|
*/
|
|
6
|
-
export declare class SkillManager {
|
|
7
|
-
private readonly configDir?;
|
|
8
|
-
private readonly index?;
|
|
9
|
-
/** 技能列表缓存(启动时扫描一次) */
|
|
10
|
-
private skills;
|
|
7
|
+
export declare class SkillManager extends ConfigResourceManager<SkillEntry> {
|
|
11
8
|
/**
|
|
12
9
|
* @param configDir 配置目录(技能文件在 <configDir>/skills/ 下)
|
|
13
|
-
* @param index SQLite 索引(用于写入 skill 记忆)
|
|
14
10
|
*/
|
|
15
|
-
constructor(configDir?: string
|
|
11
|
+
constructor(configDir?: string);
|
|
16
12
|
/**
|
|
17
13
|
* 启动时加载:扫描技能目录
|
|
18
14
|
*
|
|
@@ -23,10 +19,9 @@ export declare class SkillManager {
|
|
|
23
19
|
* 根据用户输入匹配最合适的技能
|
|
24
20
|
*
|
|
25
21
|
* 匹配流程:
|
|
26
|
-
* 1. 先检查所有 trigger
|
|
27
|
-
* 2.
|
|
28
|
-
* 3.
|
|
29
|
-
* 4. 无任何匹配 → 返回 null
|
|
22
|
+
* 1. 先检查所有 trigger 正则,命中直接返回(最高优先级,score=1.0)
|
|
23
|
+
* 2. 再检查关键词匹配(复用基类 findBestKeywordMatch)
|
|
24
|
+
* 3. 关键词得分 < SKILL_MATCH_MIN_SCORE 的匹配不激活
|
|
30
25
|
*
|
|
31
26
|
* @param userInput 用户输入文本
|
|
32
27
|
* @returns 匹配结果,无匹配返回 null
|
|
@@ -34,64 +29,23 @@ export declare class SkillManager {
|
|
|
34
29
|
match(userInput: string): SkillMatch | null;
|
|
35
30
|
/**
|
|
36
31
|
* 根据技能名获取技能
|
|
37
|
-
*
|
|
38
|
-
* @param name 技能名
|
|
39
|
-
* @returns 技能条目,不存在返回 null
|
|
40
32
|
*/
|
|
41
33
|
get(name: string): SkillEntry | null;
|
|
42
34
|
/**
|
|
43
|
-
*
|
|
35
|
+
* 删除技能(向后兼容别名,委托基类 deleteItem)
|
|
44
36
|
*/
|
|
45
|
-
|
|
37
|
+
deleteSkill(name: string): boolean;
|
|
46
38
|
/**
|
|
47
39
|
* 注册运行时注入的技能
|
|
48
40
|
*
|
|
49
41
|
* 供 Agent.addSkill() 调用:宿主程序可在 init() 之后动态注入技能。
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* @param skill 技能条目
|
|
53
|
-
* @throws 技能名已存在时抛错
|
|
42
|
+
* 重复注册同名技能会被拒绝。
|
|
54
43
|
*/
|
|
55
44
|
register(skill: SkillEntry): void;
|
|
56
|
-
/**
|
|
57
|
-
* 重载技能:清空内存缓存 + 重新扫描目录 + 同步 SQLite 索引
|
|
58
|
-
*
|
|
59
|
-
* 事件驱动重载:installSkill 写入文件后或用户手动编辑 skills/ 目录后,
|
|
60
|
-
* 调用此方法使当前会话立即生效,无需重启 Agent。
|
|
61
|
-
*
|
|
62
|
-
* 与 load() 的区别:
|
|
63
|
-
* - load() → 启动时首次加载(冷启动)
|
|
64
|
-
* - reload() → 运行时增量重载(热更新),保留运行时 register() 注入的技能会被覆盖
|
|
65
|
-
*
|
|
66
|
-
* @returns 重载后的技能数量
|
|
67
|
-
*/
|
|
68
|
-
reload(): Promise<number>;
|
|
69
45
|
/**
|
|
70
46
|
* 构建 system prompt 中的技能段
|
|
71
|
-
*
|
|
72
|
-
* 格式:
|
|
73
|
-
* 【当前技能】技能名
|
|
74
|
-
* 技能 prompt 正文...
|
|
75
|
-
*
|
|
76
|
-
* @param name 技能名(可选,不传返回空)
|
|
77
47
|
*/
|
|
78
48
|
buildSystemPrompt(name?: string): string;
|
|
79
|
-
|
|
80
|
-
* 将所有技能写入 SQLite 索引
|
|
81
|
-
*
|
|
82
|
-
* 本函数循环体内无 await,作为同步函数实现(与 personaManager.writeAllToIndex 同模式)。
|
|
83
|
-
*/
|
|
84
|
-
private writeAllToIndex;
|
|
85
|
-
/**
|
|
86
|
-
* 将单个技能写入 SQLite 索引
|
|
87
|
-
*/
|
|
88
|
-
private writeSkillToIndex;
|
|
89
|
-
/**
|
|
90
|
-
* 扫描 configDir/skills/ 目录
|
|
91
|
-
*
|
|
92
|
-
* 宿主负责将全局+项目级技能汇总到 configDir,
|
|
93
|
-
* 内核只扫描一个目录,不做路径假设。
|
|
94
|
-
*/
|
|
95
|
-
private scanSkills;
|
|
49
|
+
protected createEntry(entry: ScannedMarkdownEntry): SkillEntry;
|
|
96
50
|
}
|
|
97
51
|
//# sourceMappingURL=skillManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/skill/skillManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/skill/skillManager.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAU/D;;GAEG;AACH,qBAAa,YAAa,SAAQ,qBAAqB,CAAC,UAAU,CAAC;IACjE;;OAEG;gBACS,SAAS,CAAC,EAAE,MAAM;IAM9B;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B;;;;;;;;;;OAUG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAoB3C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIpC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAYjC;;OAEG;IACH,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IASxC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,UAAU;CAW/D"}
|
|
@@ -1,155 +1,105 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 技能管理器 —
|
|
2
|
+
* 技能管理器 — 继承 ConfigResourceManager,扩展 trigger 正则匹配 + 运行时注册
|
|
3
3
|
*
|
|
4
4
|
* 职责:
|
|
5
5
|
* - 启动时扫描 configDir/skills/ 目录
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
8
|
-
* - 后期触发条件(≥15个技能 / 关键词命中率 <80%)→ 切换为 LLM 自主选择
|
|
6
|
+
* - 通过关键词匹配 + trigger 正则选择技能
|
|
7
|
+
* - 支持运行时 register() 注入技能
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
* - 技能遵循"万物皆记忆"——存入 SQLite 作为 skill 来源记忆
|
|
9
|
+
* 设计原则:
|
|
12
10
|
* - 单层目录:<configDir>/skills/(宿主负责汇总全局+项目级技能到 configDir)
|
|
13
|
-
* - 与 PersonaManager
|
|
11
|
+
* - 与 PersonaManager 共享 ConfigResourceManager 基类(消除重复扫描/匹配/生命周期)
|
|
14
12
|
*
|
|
15
13
|
* 触发词说明:
|
|
16
14
|
* 每个 skill 文件的 frontmatter 声明 keywords(逗号分隔)和 trigger(触发正则,可选)。
|
|
17
15
|
* skill 文件命名规范:`<技能名>.md`(如"去AI味.md""审视角.md""写代码.md")。
|
|
18
16
|
*/
|
|
19
|
-
import { scoreByKeywords } from '../utils/segmenter.js';
|
|
20
|
-
import { SOURCE_LABELS } from '../memory/types.js';
|
|
21
17
|
import { logger } from '../logging/logger.js';
|
|
22
|
-
import { byScoreDesc } from '../utils/array.js';
|
|
23
18
|
import { configError } from '../utils/errors.js';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
19
|
+
import { ConfigResourceManager } from '../utils/configResourceManager.js';
|
|
20
|
+
import { parseTrigger, parseKeywords } from '../utils/scanner.js';
|
|
21
|
+
/**
|
|
22
|
+
* 技能匹配最低激活阈值
|
|
23
|
+
*
|
|
24
|
+
* score < 此阈值的匹配不激活技能(避免低匹配度噪音)。
|
|
25
|
+
* 与 PersonaManager 的 KEYWORD_HIGH_CONFIDENCE_THRESHOLD (0.3) 一致。
|
|
26
|
+
*/
|
|
27
|
+
const SKILL_MATCH_MIN_SCORE = 0.3;
|
|
26
28
|
/**
|
|
27
29
|
* 技能管理器
|
|
28
30
|
*/
|
|
29
|
-
export class SkillManager {
|
|
30
|
-
configDir;
|
|
31
|
-
index;
|
|
32
|
-
/** 技能列表缓存(启动时扫描一次) */
|
|
33
|
-
skills = [];
|
|
31
|
+
export class SkillManager extends ConfigResourceManager {
|
|
34
32
|
/**
|
|
35
33
|
* @param configDir 配置目录(技能文件在 <configDir>/skills/ 下)
|
|
36
|
-
* @param index SQLite 索引(用于写入 skill 记忆)
|
|
37
34
|
*/
|
|
38
|
-
constructor(configDir
|
|
39
|
-
|
|
40
|
-
this.index = index;
|
|
35
|
+
constructor(configDir) {
|
|
36
|
+
super(configDir, 'skills');
|
|
41
37
|
}
|
|
38
|
+
// ── 生命周期 ──────────────────────────────────────
|
|
42
39
|
/**
|
|
43
40
|
* 启动时加载:扫描技能目录
|
|
44
41
|
*
|
|
45
42
|
* @returns 加载的技能数量
|
|
46
43
|
*/
|
|
47
44
|
async load() {
|
|
48
|
-
|
|
49
|
-
logger.info({ count: this.skills.length, names: this.skills.map((s) => s.name) }, '技能加载完成');
|
|
50
|
-
// 写入 SQLite 索引(遵循"万物皆记忆"——与 PersonaManager 一致)
|
|
51
|
-
this.writeAllToIndex();
|
|
52
|
-
return this.skills.length;
|
|
45
|
+
return this.loadItems();
|
|
53
46
|
}
|
|
54
47
|
/**
|
|
55
48
|
* 根据用户输入匹配最合适的技能
|
|
56
49
|
*
|
|
57
50
|
* 匹配流程:
|
|
58
|
-
* 1. 先检查所有 trigger
|
|
59
|
-
* 2.
|
|
60
|
-
* 3.
|
|
61
|
-
* 4. 无任何匹配 → 返回 null
|
|
51
|
+
* 1. 先检查所有 trigger 正则,命中直接返回(最高优先级,score=1.0)
|
|
52
|
+
* 2. 再检查关键词匹配(复用基类 findBestKeywordMatch)
|
|
53
|
+
* 3. 关键词得分 < SKILL_MATCH_MIN_SCORE 的匹配不激活
|
|
62
54
|
*
|
|
63
55
|
* @param userInput 用户输入文本
|
|
64
56
|
* @returns 匹配结果,无匹配返回 null
|
|
65
57
|
*/
|
|
66
58
|
match(userInput) {
|
|
67
|
-
if (this.
|
|
59
|
+
if (this.items.length === 0)
|
|
68
60
|
return null;
|
|
69
61
|
// 1. trigger 正则匹配(最高优先级)
|
|
70
|
-
for (const skill of this.
|
|
62
|
+
for (const skill of this.items) {
|
|
71
63
|
if (skill.trigger?.test(userInput)) {
|
|
72
64
|
logger.debug({ skill: skill.name, trigger: skill.trigger.source }, '技能触发器匹配');
|
|
73
65
|
return { skill, score: 1.0 };
|
|
74
66
|
}
|
|
75
67
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (skill.keywords.length === 0)
|
|
79
|
-
continue;
|
|
80
|
-
const score = scoreByKeywords(userInput, skill.keywords);
|
|
81
|
-
if (score > 0) {
|
|
82
|
-
matches.push({ skill, score });
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (matches.length === 0)
|
|
86
|
-
return null;
|
|
87
|
-
// 得分从高到低排序,取第一个
|
|
88
|
-
matches.sort(byScoreDesc);
|
|
89
|
-
const best = matches[0];
|
|
68
|
+
// 2. 关键词匹配(委托基类)
|
|
69
|
+
const best = this.findBestKeywordMatch(userInput, SKILL_MATCH_MIN_SCORE);
|
|
90
70
|
if (!best)
|
|
91
71
|
return null;
|
|
92
|
-
logger.debug({ matched: best.
|
|
93
|
-
return best;
|
|
72
|
+
logger.debug({ matched: best.item.name, score: best.score }, '技能关键词匹配');
|
|
73
|
+
return { skill: best.item, score: best.score };
|
|
94
74
|
}
|
|
75
|
+
// ── 公共方法 ──────────────────────────────────────
|
|
95
76
|
/**
|
|
96
77
|
* 根据技能名获取技能
|
|
97
|
-
*
|
|
98
|
-
* @param name 技能名
|
|
99
|
-
* @returns 技能条目,不存在返回 null
|
|
100
78
|
*/
|
|
101
79
|
get(name) {
|
|
102
|
-
return this.
|
|
80
|
+
return this.items.find((s) => s.name === name) ?? null;
|
|
103
81
|
}
|
|
104
82
|
/**
|
|
105
|
-
*
|
|
83
|
+
* 删除技能(向后兼容别名,委托基类 deleteItem)
|
|
106
84
|
*/
|
|
107
|
-
|
|
108
|
-
return this.
|
|
85
|
+
deleteSkill(name) {
|
|
86
|
+
return this.deleteItem(name);
|
|
109
87
|
}
|
|
110
88
|
/**
|
|
111
89
|
* 注册运行时注入的技能
|
|
112
90
|
*
|
|
113
91
|
* 供 Agent.addSkill() 调用:宿主程序可在 init() 之后动态注入技能。
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* @param skill 技能条目
|
|
117
|
-
* @throws 技能名已存在时抛错
|
|
92
|
+
* 重复注册同名技能会被拒绝。
|
|
118
93
|
*/
|
|
119
94
|
register(skill) {
|
|
120
|
-
if (this.
|
|
95
|
+
if (this.items.some((s) => s.name === skill.name)) {
|
|
121
96
|
throw configError(`技能 "${skill.name}" 已存在,不能重复注册`, undefined, ['请使用不同的技能名称']);
|
|
122
97
|
}
|
|
123
|
-
this.
|
|
98
|
+
this.items.push(skill);
|
|
124
99
|
logger.info({ name: skill.name, keywords: skill.keywords.length }, '技能已注册(运行时注入)');
|
|
125
100
|
}
|
|
126
|
-
/**
|
|
127
|
-
* 重载技能:清空内存缓存 + 重新扫描目录 + 同步 SQLite 索引
|
|
128
|
-
*
|
|
129
|
-
* 事件驱动重载:installSkill 写入文件后或用户手动编辑 skills/ 目录后,
|
|
130
|
-
* 调用此方法使当前会话立即生效,无需重启 Agent。
|
|
131
|
-
*
|
|
132
|
-
* 与 load() 的区别:
|
|
133
|
-
* - load() → 启动时首次加载(冷启动)
|
|
134
|
-
* - reload() → 运行时增量重载(热更新),保留运行时 register() 注入的技能会被覆盖
|
|
135
|
-
*
|
|
136
|
-
* @returns 重载后的技能数量
|
|
137
|
-
*/
|
|
138
|
-
async reload() {
|
|
139
|
-
const oldCount = this.skills.length;
|
|
140
|
-
this.skills = await this.scanSkills();
|
|
141
|
-
this.writeAllToIndex();
|
|
142
|
-
logger.info({ oldCount, newCount: this.skills.length, names: this.skills.map((s) => s.name) }, '技能已重载');
|
|
143
|
-
return this.skills.length;
|
|
144
|
-
}
|
|
145
101
|
/**
|
|
146
102
|
* 构建 system prompt 中的技能段
|
|
147
|
-
*
|
|
148
|
-
* 格式:
|
|
149
|
-
* 【当前技能】技能名
|
|
150
|
-
* 技能 prompt 正文...
|
|
151
|
-
*
|
|
152
|
-
* @param name 技能名(可选,不传返回空)
|
|
153
103
|
*/
|
|
154
104
|
buildSystemPrompt(name) {
|
|
155
105
|
if (!name)
|
|
@@ -159,63 +109,17 @@ export class SkillManager {
|
|
|
159
109
|
return '';
|
|
160
110
|
return `【当前技能】${skill.name}\n${skill.content}`;
|
|
161
111
|
}
|
|
162
|
-
// ──
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
this.writeSkillToIndex(skill);
|
|
173
|
-
}
|
|
174
|
-
logger.info({ count: this.skills.length }, '技能记忆已写入 SQLite');
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* 将单个技能写入 SQLite 索引
|
|
178
|
-
*/
|
|
179
|
-
writeSkillToIndex(skill) {
|
|
180
|
-
if (!this.index)
|
|
181
|
-
return;
|
|
182
|
-
const now = nowIso();
|
|
183
|
-
const memory = {
|
|
184
|
-
id: `skill:${skill.name}`,
|
|
185
|
-
content: skill.content,
|
|
186
|
-
source: SOURCE_LABELS.SKILL,
|
|
187
|
-
name: skill.name,
|
|
188
|
-
createdAt: now,
|
|
189
|
-
accessedAt: now,
|
|
190
|
-
score: 0.7,
|
|
112
|
+
// ── 基类抽象方法实现 ──────────────────────────────
|
|
113
|
+
createEntry(entry) {
|
|
114
|
+
return {
|
|
115
|
+
name: entry.name,
|
|
116
|
+
keywords: parseKeywords(entry.frontmatter),
|
|
117
|
+
trigger: parseTrigger(entry.frontmatter),
|
|
118
|
+
description: entry.frontmatter['description'],
|
|
119
|
+
content: entry.body.trim(),
|
|
120
|
+
filePath: entry.filePath,
|
|
121
|
+
layer: 'project',
|
|
191
122
|
};
|
|
192
|
-
this.index.upsert(memory);
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* 扫描 configDir/skills/ 目录
|
|
196
|
-
*
|
|
197
|
-
* 宿主负责将全局+项目级技能汇总到 configDir,
|
|
198
|
-
* 内核只扫描一个目录,不做路径假设。
|
|
199
|
-
*/
|
|
200
|
-
async scanSkills() {
|
|
201
|
-
const map = new Map();
|
|
202
|
-
const skillsDir = resolveSubdir(this.configDir, 'skills');
|
|
203
|
-
if (skillsDir) {
|
|
204
|
-
const entries = await scanMarkdownDir(skillsDir);
|
|
205
|
-
for (const entry of entries) {
|
|
206
|
-
const skill = {
|
|
207
|
-
name: entry.name,
|
|
208
|
-
keywords: parseKeywords(entry.frontmatter),
|
|
209
|
-
trigger: parseTrigger(entry.frontmatter),
|
|
210
|
-
description: entry.frontmatter['description'],
|
|
211
|
-
content: entry.body.trim(),
|
|
212
|
-
filePath: entry.filePath,
|
|
213
|
-
layer: 'project',
|
|
214
|
-
};
|
|
215
|
-
map.set(entry.name, skill);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return Array.from(map.values());
|
|
219
123
|
}
|
|
220
124
|
}
|
|
221
125
|
//# sourceMappingURL=skillManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillManager.js","sourceRoot":"","sources":["../../src/skill/skillManager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skillManager.js","sourceRoot":"","sources":["../../src/skill/skillManager.ts"],"names":[],"mappings":"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"}
|
package/dist/skill/types.d.ts
CHANGED
|
@@ -18,9 +18,8 @@ export interface SkillEntry {
|
|
|
18
18
|
/**
|
|
19
19
|
* 来源层(agent / project)
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* 保留在 SkillEntry 契约中以维持类型稳定。
|
|
21
|
+
* skillManager 写入(project 层扫描),精灵宿主通过 systemHandlers 读取
|
|
22
|
+
* 并在 settingsPanelManager 中渲染"全局/项目"标签。
|
|
24
23
|
*/
|
|
25
24
|
layer: 'agent' | 'project';
|
|
26
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skill/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5B;AAED,aAAa;AACb,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置资源管理器抽象基类 — 消除 SkillManager 与 PersonaManager 的重复结构
|
|
3
|
+
*
|
|
4
|
+
* 共同模式(DRY):
|
|
5
|
+
* - 扫描 configDir/<subdir>/ 中的 .md 文件
|
|
6
|
+
* - 解析 frontmatter keywords
|
|
7
|
+
* - scoreByKeywords 关键词匹配
|
|
8
|
+
* - load → reload → deleteItem 生命周期
|
|
9
|
+
*
|
|
10
|
+
* 分叉点(子类差异化):
|
|
11
|
+
* - createEntry() → 条目构造(Persona 需要 traits 解析,Skill 需要 layer/trigger)
|
|
12
|
+
* - buildSystemPrompt() → 系统提示格式
|
|
13
|
+
* - PersonaManager 额外状态:activePersona / mode / 切换缓冲 → 保留在子类
|
|
14
|
+
* - SkillManager 额外能力:trigger 正则匹配 / register() → 保留在子类
|
|
15
|
+
*
|
|
16
|
+
* 抽象收益验证(§2.2 技术债务的阈值判断):
|
|
17
|
+
* - 2 个使用场景,领域规则大概率会变 → 抽象收益 > 复制成本
|
|
18
|
+
* - 扫描 + 匹配 + 生命周期共 ~60 行重复 → 消除后的维护成本显著降低
|
|
19
|
+
*
|
|
20
|
+
* 复杂度控制(§1.3):
|
|
21
|
+
* - 泛型参数 T 由子类具体化,基类不假设 T 的具体形状
|
|
22
|
+
* - 基类只提供公共基础设施,不引入新概念
|
|
23
|
+
*/
|
|
24
|
+
import type { ScannedMarkdownEntry } from '../utils/scanner.js';
|
|
25
|
+
/**
|
|
26
|
+
* 配置资源的最小约束:必须有 name、keywords、content、filePath
|
|
27
|
+
*/
|
|
28
|
+
export interface ConfigResource {
|
|
29
|
+
name: string;
|
|
30
|
+
keywords: string[];
|
|
31
|
+
content: string;
|
|
32
|
+
filePath: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 配置资源管理器 — 抽象基类
|
|
36
|
+
*
|
|
37
|
+
* @typeParam T 子类资源类型(如 Persona / SkillEntry)
|
|
38
|
+
* @typeParam TOptions load() 的可选参数类型
|
|
39
|
+
*/
|
|
40
|
+
export declare abstract class ConfigResourceManager<T extends ConfigResource, TOptions = undefined> {
|
|
41
|
+
protected readonly configDir: string | undefined;
|
|
42
|
+
protected readonly subdir: string;
|
|
43
|
+
/** 资源列表缓存 */
|
|
44
|
+
protected items: T[];
|
|
45
|
+
/**
|
|
46
|
+
* @param configDir 配置目录(资源文件在 <configDir>/<subdir>/ 下)
|
|
47
|
+
* @param subdir 资源子目录名(如 'skills'、'personas')
|
|
48
|
+
*/
|
|
49
|
+
constructor(configDir: string | undefined, subdir: string);
|
|
50
|
+
/** 获取资源列表 */
|
|
51
|
+
get list(): T[];
|
|
52
|
+
/**
|
|
53
|
+
* 加载资源到缓存(子类在各自的 load() 中调用)
|
|
54
|
+
*
|
|
55
|
+
* @param options 子类透传参数
|
|
56
|
+
* @returns 加载的资源数量
|
|
57
|
+
*/
|
|
58
|
+
protected loadItems(options?: TOptions): Promise<number>;
|
|
59
|
+
/**
|
|
60
|
+
* 重载资源:重新扫描目录 → 更新缓存
|
|
61
|
+
*
|
|
62
|
+
* @returns 重载后的资源数量
|
|
63
|
+
*/
|
|
64
|
+
reload(): Promise<number>;
|
|
65
|
+
/**
|
|
66
|
+
* 删除资源(从内存缓存中移除)
|
|
67
|
+
*
|
|
68
|
+
* @param name 资源名
|
|
69
|
+
* @returns true 删除成功;false 资源不存在
|
|
70
|
+
*/
|
|
71
|
+
deleteItem(name: string): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* 关键词匹配:遍历资源列表,返回得分最高的资源
|
|
74
|
+
*
|
|
75
|
+
* 子类可覆写此方法以添加额外匹配逻辑(如 trigger 正则匹配)。
|
|
76
|
+
*
|
|
77
|
+
* @param userInput 用户输入文本
|
|
78
|
+
* @param threshold 最低激活阈值(低于此值的匹配忽略)
|
|
79
|
+
* @returns 匹配结果(资源 + 得分),无匹配返回 null
|
|
80
|
+
*/
|
|
81
|
+
protected findBestKeywordMatch(userInput: string, threshold: number): {
|
|
82
|
+
item: T;
|
|
83
|
+
score: number;
|
|
84
|
+
} | null;
|
|
85
|
+
/**
|
|
86
|
+
* 构建 system prompt 片段
|
|
87
|
+
*
|
|
88
|
+
* @param name 资源名(可选,不传使用当前激活资源)
|
|
89
|
+
*/
|
|
90
|
+
abstract buildSystemPrompt(name?: string): string;
|
|
91
|
+
/**
|
|
92
|
+
* 从扫描条目构建资源对象(子类实现差异化字段解析)
|
|
93
|
+
*
|
|
94
|
+
* @param entry 扫描器返回的原始条目
|
|
95
|
+
* @returns 子类资源类型
|
|
96
|
+
*/
|
|
97
|
+
protected abstract createEntry(entry: ScannedMarkdownEntry): T;
|
|
98
|
+
/**
|
|
99
|
+
* load() 完成后的回调 — 子类可在此做激活选择等逻辑
|
|
100
|
+
*/
|
|
101
|
+
protected onAfterLoad(_items: T[], _options?: TOptions): void;
|
|
102
|
+
/**
|
|
103
|
+
* reload() 完成后的回调 — 子类可在此保持当前激活状态
|
|
104
|
+
*/
|
|
105
|
+
protected onAfterReload(_items: T[]): void;
|
|
106
|
+
/**
|
|
107
|
+
* 扫描目录 + 构建条目列表
|
|
108
|
+
*/
|
|
109
|
+
private scanAndBuild;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=configResourceManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configResourceManager.d.ts","sourceRoot":"","sources":["../../src/utils/configResourceManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,8BAAsB,qBAAqB,CACzC,CAAC,SAAS,cAAc,EACxB,QAAQ,GAAG,SAAS;IAUlB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IAChD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;IATnC,aAAa;IACb,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAM;IAE1B;;;OAGG;gBAEkB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM;IAKnC,aAAa;IACb,IAAI,IAAI,IAAI,CAAC,EAAE,CAEd;IAID;;;;;OAKG;cACa,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAU9D;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAW/B;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAajC;;;;;;;;OAQG;IACH,SAAS,CAAC,oBAAoB,CAC5B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAoBpC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAEjD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,CAAC;IAI9D;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;IAI7D;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI;IAM1C;;OAEG;YACW,YAAY;CAY3B"}
|