@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Memora Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Memora
|
|
2
|
+
|
|
3
|
+
> 通用 Agent 内核 — 本地、私有、领域无关,万物皆记忆
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/memora)
|
|
6
|
+
[](https://nodejs.org)
|
|
7
|
+
[](https://www.typescriptlang.org)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
## 设计哲学
|
|
11
|
+
|
|
12
|
+
> **万物皆是记忆。**
|
|
13
|
+
>
|
|
14
|
+
> 除了用户当前直接输入的提示词内容,Agent 的一切都是记忆——人格是"我记得我是谁",规则是"我记得该怎么做事",技能是"我记得怎么做某类事",对话历史是"我记得之前聊过什么"。
|
|
15
|
+
|
|
16
|
+
Memora 是一个**无法独立运行**的智能大脑内核——它只有接口,没有"形态"。CLI、WebUI、桌面精灵、小说生成器都是它的"宿主",宿主负责给它身体(UI)、血管(Provider)、神经网络(事件回路)。
|
|
17
|
+
|
|
18
|
+
## 核心能力
|
|
19
|
+
|
|
20
|
+
- **长期记忆沉淀**——跨会话、跨话题的记忆持久化与智能召回
|
|
21
|
+
- **Agent 与角色分离**——Agent 是纯记忆引擎,角色是人格载体。换角色不丢记忆
|
|
22
|
+
- **记忆统一模型**——角色、规则、技能、对话历史全部统一为「记忆」,通过 `source` 开放字符串区分
|
|
23
|
+
- **领域可插拔**——同一套架构,加载不同记忆配置即可适配不同领域
|
|
24
|
+
- **零依赖内核**——核心层仅依赖 `zod`,持久化由宿主通过接口注入
|
|
25
|
+
|
|
26
|
+
## 快速开始
|
|
27
|
+
|
|
28
|
+
### 安装
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install memora
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 创建 Agent
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { Agent, createLlmProvider } from 'memora';
|
|
38
|
+
|
|
39
|
+
// 宿主职责:创建 LLM Provider
|
|
40
|
+
const provider = createLlmProvider({
|
|
41
|
+
provider: 'openaiCompatible',
|
|
42
|
+
apiKey: process.env.LLM_API_KEY!,
|
|
43
|
+
baseUrl: 'https://api.deepseek.com/v1',
|
|
44
|
+
model: 'deepseek-chat',
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// 创建 Agent
|
|
48
|
+
const agent = new Agent({
|
|
49
|
+
projectPath: '/path/to/project',
|
|
50
|
+
provider,
|
|
51
|
+
configDir: '/path/to/agent-config', // personas / rules / skills
|
|
52
|
+
// dataDir 默认为 '~/.memora',此处显式指定项目级目录
|
|
53
|
+
dataDir: '.memora',
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
await agent.init();
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 对话
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// 流式对话
|
|
63
|
+
for await (const chunk of agent.chat('你好')) {
|
|
64
|
+
if (chunk.type === 'text') {
|
|
65
|
+
process.stdout.write(chunk.content);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// 同步对话(测试用)
|
|
70
|
+
const reply = await agent.chatSync('你好');
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 关闭
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
await agent.close();
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 架构
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
┌────────────────────────────────────────────────────────────┐
|
|
83
|
+
│ 宿主程序(CLI / 桌面精灵 / 小说生成器 / WebUI) │
|
|
84
|
+
│ ┌─────────────────┐ ┌──────────────────┐ │
|
|
85
|
+
│ │ LLM Provider 实例 │◄───│ API Key / baseUrl │ ← 宿主职责 │
|
|
86
|
+
│ └────────┬────────┘ └──────────────────┘ │
|
|
87
|
+
│ │ 注入 │
|
|
88
|
+
│ ▼ │
|
|
89
|
+
│ ┌──────────────────────────────────────────┐ │
|
|
90
|
+
│ │ Memora 内核(Agent) │ │
|
|
91
|
+
│ │ - chat(input) → 流式响应 │ │
|
|
92
|
+
│ │ - 记忆搜索 / 归档 / 挂载 │ │
|
|
93
|
+
│ │ - 角色匹配 / 技能匹配 │ │
|
|
94
|
+
│ │ - 工具注册 / 工具执行 │ │
|
|
95
|
+
│ └──────────────────────────────────────────┘ │
|
|
96
|
+
└────────────────────────────────────────────────────────────┘
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 项目结构
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
src/
|
|
103
|
+
├── index.ts # 库导出入口(纯类型 + 接口导出,无 CLI)
|
|
104
|
+
├── agent/ # Agent Loop + 工具执行 + 对话快照
|
|
105
|
+
├── memory/ # 记忆引擎(IMemoryStorage 接口 + 召回)
|
|
106
|
+
├── persona/ # 角色管理
|
|
107
|
+
├── skill/ # 技能管理
|
|
108
|
+
├── llm/ # LLM 适配层
|
|
109
|
+
├── security/ # 安全策略
|
|
110
|
+
├── config/ # 配置加载
|
|
111
|
+
├── logging/ # 日志
|
|
112
|
+
├── eval/ # 评估框架(Mock Eval / Agent 行为回归测试)
|
|
113
|
+
└── utils/ # 工具函数
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 技术栈
|
|
117
|
+
|
|
118
|
+
| 类别 | 选型 | 决策 |
|
|
119
|
+
|------|------|------|
|
|
120
|
+
| 运行时 | Node.js ≥ 22 LTS + TypeScript 5 strict + ESM | ADR-001 |
|
|
121
|
+
| 数据层 | IMemoryStorage 接口(宿主注入持久化实现) | ADR-002 |
|
|
122
|
+
| LLM | OpenAI Chat Completions 兼容协议 | ADR-003 |
|
|
123
|
+
| 形态 | 纯逻辑库(CLI 由宿主提供) | ADR-002 |
|
|
124
|
+
| 安全 | 两级权限 + 路径白名单 | ADR-006 |
|
|
125
|
+
| 测试 | Vitest + MSW Mock LLM + InMemoryStorage | ADR-007 |
|
|
126
|
+
|
|
127
|
+
## 开发命令
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npm test # 运行测试
|
|
131
|
+
npm run test:cov # 运行测试 + 覆盖率
|
|
132
|
+
npm run typecheck # TypeScript 类型检查
|
|
133
|
+
npm run lint # ESLint 检查
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## 文档
|
|
137
|
+
|
|
138
|
+
详细接入指南与 API 参考文档随源码提供。本包核心使用方式见上文「快速开始」。
|
|
139
|
+
|
|
140
|
+
技术决策记录(ADR)目前为内部文档,不随 npm 包分发。
|
|
141
|
+
|
|
142
|
+
## 贡献
|
|
143
|
+
|
|
144
|
+
本项目遵循"大树模型"工程哲学。
|
|
145
|
+
|
|
146
|
+
## 许可证
|
|
147
|
+
|
|
148
|
+
MIT
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import type { AgentLoop } from '../agent/loop.js';
|
|
2
|
+
import type { AgentChunk, UIMessages } from '../agent/types.js';
|
|
3
|
+
import type { ToolExecutor } from '../agent/toolExecutor.js';
|
|
4
|
+
import type { MessageHistory } from '../agent/messageHistory.js';
|
|
5
|
+
import { ProjectManager, type ProjectContext } from '../memory/projectManager.js';
|
|
6
|
+
import { SecurityGuard } from '../security/pathGuard.js';
|
|
7
|
+
import type { PersonaManager } from '../persona/personaManager.js';
|
|
8
|
+
import type { UserProfile } from '../memory/userProfile.js';
|
|
9
|
+
import type { SkillManager } from '../skill/skillManager.js';
|
|
10
|
+
import type { InsightExtractor } from '../agent/managers/insightExtractor.js';
|
|
11
|
+
import type { ConfigManager } from '../agent/managers/configManager.js';
|
|
12
|
+
import type { WorkProjectionManager } from '../agent/managers/workProjection.js';
|
|
13
|
+
import type { MemoryInspector } from '../agent/managers/memoryInspector.js';
|
|
14
|
+
import { SessionManager, type AgentForkResult } from '../agent/managers/sessionManager.js';
|
|
15
|
+
import { TypedEventEmitter, type AgentEventMap } from '../utils/eventEmitter.js';
|
|
16
|
+
import type { LlmProvider } from '../llm/provider.js';
|
|
17
|
+
import type { IMemoryStorage } from '../memory/storageInterface.js';
|
|
18
|
+
import type { IMemoryRelationStore } from '../memory/relationStore.js';
|
|
19
|
+
import type { ISessionStore } from '../memory/sessionStore.js';
|
|
20
|
+
import type { VectorStore } from '../memory/vectorStore.js';
|
|
21
|
+
import type { ITracer, AgentMetrics } from '../agent/tracer.js';
|
|
22
|
+
/** Agent 构造选项 */
|
|
23
|
+
export interface AgentOptions {
|
|
24
|
+
/** 项目路径(必须) */
|
|
25
|
+
projectPath: string;
|
|
26
|
+
/** 前台 LLM Provider(必须,宿主负责创建) */
|
|
27
|
+
provider: LlmProvider;
|
|
28
|
+
/** 后台 LLM Provider(可选,用于投影等后台操作,不配时复用前台) */
|
|
29
|
+
backgroundProvider?: LlmProvider;
|
|
30
|
+
/** 配置目录(personas/rules/skills) */
|
|
31
|
+
configDir?: string;
|
|
32
|
+
/** 记忆数据目录(默认 ~/.memora) */
|
|
33
|
+
dataDir?: string;
|
|
34
|
+
/** 项目注册表目录(默认与 dataDir 相同)。设为用户级路径可避免每项目重复存储 */
|
|
35
|
+
registryDir?: string;
|
|
36
|
+
/** 最大上下文 token 数(默认 120000) */
|
|
37
|
+
maxContextTokens?: number;
|
|
38
|
+
/** 默认角色名 */
|
|
39
|
+
persona?: string;
|
|
40
|
+
/** 安全权限 */
|
|
41
|
+
permission?: 'owner' | 'guest';
|
|
42
|
+
/** 允许的路径白名单 */
|
|
43
|
+
allowedPaths?: string[];
|
|
44
|
+
/** 写入确认 */
|
|
45
|
+
confirmWrites?: boolean;
|
|
46
|
+
/** 向量存储(可选,提供时启用语义搜索召回) */
|
|
47
|
+
vectorStore?: VectorStore;
|
|
48
|
+
/** 召回时排除的 source 标签(默认 ['persona', 'rule', 'skill'],这些已由 bootstrap 注入) */
|
|
49
|
+
recallExcludeSources?: string[];
|
|
50
|
+
/** 外部注入的存储实例(可选,不传则内部创建 InMemoryStorage) */
|
|
51
|
+
storage?: IMemoryStorage;
|
|
52
|
+
/** 外部注入的记忆关系存储(可选,ADR-014 侧车模型,不传则跳过关系构建) */
|
|
53
|
+
relationStore?: IMemoryRelationStore;
|
|
54
|
+
/** 外部注入的会话存储(可选,不传则仅在内存中保存) */
|
|
55
|
+
sessionStore?: ISessionStore;
|
|
56
|
+
/** 可观测性 Tracer(可选,不传则使用 NoopTracer 静默丢弃所有 span) */
|
|
57
|
+
tracer?: ITracer;
|
|
58
|
+
/** 宿主可覆盖的 UI 消息文本(默认英文,宿主覆盖为中文等) */
|
|
59
|
+
messages?: UIMessages;
|
|
60
|
+
/** 上下文超限时是否自动生成摘要(默认 true,开启后首次截断时增加 ~1-2s 延迟) */
|
|
61
|
+
enableContextSummary?: boolean;
|
|
62
|
+
}
|
|
63
|
+
/** Agent 初始化后暴露的运行时上下文 */
|
|
64
|
+
export type AgentContext = ProjectContext;
|
|
65
|
+
/** Agent 项目条目(来自 ProjectManager 注册表) */
|
|
66
|
+
export interface AgentProjectEntry {
|
|
67
|
+
name: string;
|
|
68
|
+
path: string;
|
|
69
|
+
lastOpened: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Memora Agent 门面类
|
|
73
|
+
*
|
|
74
|
+
* **设计哲学**:单 Agent,单配置,单记忆。每个 Agent 实例拥有独立的
|
|
75
|
+
* 对话管线(AgentLoop)、独立的消息历史(MessageHistory)和独立的
|
|
76
|
+
* 运行时状态(activeSkill、chatBusy)。
|
|
77
|
+
*
|
|
78
|
+
* **多实例**:宿主可通过 new Agent({ dataDir: './agent2' }) 创建
|
|
79
|
+
* 独立实例。只要 dataDir 不同,它们拥有完全隔离的记忆库和会话。
|
|
80
|
+
* 内核不负责多 Agent 编排——那是宿主层的职责。
|
|
81
|
+
*
|
|
82
|
+
* **fork vs 多实例**:
|
|
83
|
+
* - forkSession() 分叉对话历史,但记忆索引全局共享
|
|
84
|
+
* - new Agent() + 独立 dataDir 实现完全隔离的记忆空间
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* const agent = new Agent({
|
|
89
|
+
* projectPath: '/path/to/project',
|
|
90
|
+
* provider: new OpenAIProvider({ apiKey: '...' }),
|
|
91
|
+
* configDir: '/path/to/config',
|
|
92
|
+
* dataDir: '/path/to/data',
|
|
93
|
+
* permission: 'owner',
|
|
94
|
+
* allowedPaths: ['/path/to/project'],
|
|
95
|
+
* });
|
|
96
|
+
* await agent.init();
|
|
97
|
+
* const iter = agent.chat('你好');
|
|
98
|
+
* for await (const chunk of iter) { ... }
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare class Agent extends TypedEventEmitter<AgentEventMap> {
|
|
102
|
+
#private;
|
|
103
|
+
private projectManager;
|
|
104
|
+
private history;
|
|
105
|
+
private loop;
|
|
106
|
+
private toolExec;
|
|
107
|
+
private personaManager;
|
|
108
|
+
private skillManager;
|
|
109
|
+
private insightExtractor;
|
|
110
|
+
private configManager;
|
|
111
|
+
private memoryInspector;
|
|
112
|
+
private workProjection;
|
|
113
|
+
/** V-201: AutoConfigRefiner(模式 3:Agent 智能总结) */
|
|
114
|
+
private autoConfigRefiner;
|
|
115
|
+
/** 会话管理器(从 Agent 拆分出的会话管理职责) */
|
|
116
|
+
private _sessionManager;
|
|
117
|
+
/** 当前激活的技能名(上一轮匹配,本轮注入) */
|
|
118
|
+
private activeSkill;
|
|
119
|
+
private _initialized;
|
|
120
|
+
private pctx;
|
|
121
|
+
/** chat() 并发锁 */
|
|
122
|
+
private _chatBusy;
|
|
123
|
+
/** 聊天锁超时计时器(防止 LLM 卡死时锁永久持有) */
|
|
124
|
+
private chatLockTimer;
|
|
125
|
+
/** chat() 内部 AbortController(超时时中断 generator,防止并发) */
|
|
126
|
+
private chatAbortController;
|
|
127
|
+
/** 记忆衰减定时器 */
|
|
128
|
+
private decayTimer;
|
|
129
|
+
/** 最近一次 chat() 调用的时间戳 */
|
|
130
|
+
private _lastInteractionAt;
|
|
131
|
+
/** 衰减执行次数(每次 runMemoryDecay 实际执行 +1) */
|
|
132
|
+
private metricDecayRunCount;
|
|
133
|
+
/** 累计衰减记忆数(score 被调低的记忆条数总和) */
|
|
134
|
+
private metricTotalDecayedCount;
|
|
135
|
+
/** 上次衰减时间(ISO 8601,null 表示从未执行过) */
|
|
136
|
+
private metricLastDecayAt;
|
|
137
|
+
constructor(opts: AgentOptions);
|
|
138
|
+
/**
|
|
139
|
+
* 初始化 Agent:加载索引、组装内部组件
|
|
140
|
+
*/
|
|
141
|
+
init(projectPathOverride?: string): Promise<ProjectContext>;
|
|
142
|
+
/**
|
|
143
|
+
* 流式对话(核心 API)
|
|
144
|
+
*/
|
|
145
|
+
chat(input: string, signal?: AbortSignal): AsyncGenerator<AgentChunk, void, unknown>;
|
|
146
|
+
/**
|
|
147
|
+
* 召回记忆 + 注入最近对话上下文
|
|
148
|
+
*
|
|
149
|
+
* 从 chat() 中提取,职责:
|
|
150
|
+
* 1. 双通道召回(语义 + 关键词)
|
|
151
|
+
* 2. Layer 5: 最近对话注入
|
|
152
|
+
*
|
|
153
|
+
* @param input 用户输入
|
|
154
|
+
* @returns 召回的记忆列表
|
|
155
|
+
*/
|
|
156
|
+
private recallAndInject;
|
|
157
|
+
/**
|
|
158
|
+
* 注入上一轮匹配的技能 prompt
|
|
159
|
+
*/
|
|
160
|
+
private injectActiveSkill;
|
|
161
|
+
/**
|
|
162
|
+
* 对话后处理:用户画像归档、角色匹配、技能匹配、Insight 提取
|
|
163
|
+
*
|
|
164
|
+
* 所有归档/匹配操作均为 best-effort:任何子步骤失败不应影响用户已收到的回答,
|
|
165
|
+
* 失败仅记录日志,不向上抛出异常。
|
|
166
|
+
*/
|
|
167
|
+
private postProcess;
|
|
168
|
+
/**
|
|
169
|
+
* 发送用户消息,非流式返回完整回复
|
|
170
|
+
*/
|
|
171
|
+
chatSync(input: string, signal?: AbortSignal): Promise<string>;
|
|
172
|
+
/**
|
|
173
|
+
* 分叉当前会话(委托至 SessionManager)
|
|
174
|
+
*
|
|
175
|
+
* 分叉后原会话完整保留,新分支拥有独立消息历史。
|
|
176
|
+
* 记忆索引(IMemoryStorage)全局共享,不受分叉影响。
|
|
177
|
+
*/
|
|
178
|
+
forkSession(targetSession?: string): AgentForkResult;
|
|
179
|
+
/**
|
|
180
|
+
* 切换到指定项目
|
|
181
|
+
*
|
|
182
|
+
* 切换后自动 rebuildComponents(),无需手动调用。
|
|
183
|
+
* Agent 级记忆(memora.db)保留,项目级配置(.memora/)重新加载。
|
|
184
|
+
*/
|
|
185
|
+
switchProject(nameOrPath: string): Promise<AgentContext>;
|
|
186
|
+
/**
|
|
187
|
+
* 组装所有运行时组件(委托给 assembler 工厂)
|
|
188
|
+
*/
|
|
189
|
+
private assembleComponents;
|
|
190
|
+
/**
|
|
191
|
+
* 用当前 pctx 重建 history / loop
|
|
192
|
+
*/
|
|
193
|
+
private rebuildComponentsWithCurrentCtx;
|
|
194
|
+
setProvider(provider: LlmProvider): void;
|
|
195
|
+
setBackgroundProvider(provider: LlmProvider | null): void;
|
|
196
|
+
/**
|
|
197
|
+
* 重建内部组件(history / loop / managers)
|
|
198
|
+
*
|
|
199
|
+
* 通常不需要手动调用——switchProject() 已自动执行 rebuild。
|
|
200
|
+
* 仅在宿主项目需要强制刷新组件时使用(如热更新配置后)。
|
|
201
|
+
*/
|
|
202
|
+
rebuildComponents(): Promise<void>;
|
|
203
|
+
/**
|
|
204
|
+
* 检查 Agent 是否已初始化
|
|
205
|
+
*
|
|
206
|
+
* @param methodName 调用方法名(用于错误消息)
|
|
207
|
+
* @param requires 需要检查的组件列表
|
|
208
|
+
*/
|
|
209
|
+
private assertInitialized;
|
|
210
|
+
/**
|
|
211
|
+
* 非空断言守卫——对 null/undefined 值抛出清晰错误的运行时检查
|
|
212
|
+
*
|
|
213
|
+
* @param value 可能为 null/undefined 的值
|
|
214
|
+
* @param name 组件名称(用于错误消息)
|
|
215
|
+
* @throws MemoraError 如果 value 为 null/undefined
|
|
216
|
+
*/
|
|
217
|
+
private requireNonNull;
|
|
218
|
+
/**
|
|
219
|
+
* 对 insight/profile/work-projection 记忆执行 score 衰减
|
|
220
|
+
*
|
|
221
|
+
* 长期未访问的记忆 score 逐渐降低,体现"自然遗忘"
|
|
222
|
+
* 不影响 persona/rule/skill(这些是配置型记忆,不应衰减)
|
|
223
|
+
*
|
|
224
|
+
* 衰减逻辑委派给 IMemoryStorage.decayScores(),
|
|
225
|
+
* 宿主(SqliteStorage)可用一条 SQL UPDATE 批量完成,避免 O(n) 全量加载。
|
|
226
|
+
*/
|
|
227
|
+
private runMemoryDecay;
|
|
228
|
+
/**
|
|
229
|
+
* 关闭 Agent,释放 SQLite 连接等资源
|
|
230
|
+
*/
|
|
231
|
+
close(): Promise<void>;
|
|
232
|
+
get initialized(): boolean;
|
|
233
|
+
get context(): AgentContext | null;
|
|
234
|
+
get agentLoop(): AgentLoop | null;
|
|
235
|
+
/**
|
|
236
|
+
* 注入情感基调到 system prompt(Phase 2.1:AffectController)
|
|
237
|
+
*
|
|
238
|
+
* 委托至 AgentLoop.injectAffect(),在角色前缀和 bootstrap 记忆之间插入情感描述。
|
|
239
|
+
* 与角色切换独立——切换角色不会清除情感注入。
|
|
240
|
+
*
|
|
241
|
+
* @param affectString 情感描述文本,传空字符串清除注入
|
|
242
|
+
*/
|
|
243
|
+
injectAffect(affectString: string): void;
|
|
244
|
+
get agentHistory(): MessageHistory | null;
|
|
245
|
+
get provider(): LlmProvider;
|
|
246
|
+
get isBusy(): boolean;
|
|
247
|
+
get lastInteractionAt(): Date | null;
|
|
248
|
+
/**
|
|
249
|
+
* 获取 Agent 运行时指标快照(R-103 可观测性增强)
|
|
250
|
+
*
|
|
251
|
+
* 聚合 AgentLoop 指标(LLM 调用、记忆召回、工具调用、上下文管理)
|
|
252
|
+
* 与 Agent 层指标(记忆衰减),返回完整的 AgentMetrics 快照。
|
|
253
|
+
*
|
|
254
|
+
* 未初始化时返回全零指标(合理的默认值,不抛异常)。
|
|
255
|
+
* 纯只读、同步、零副作用——适合宿主项目定期轮询构建监控面板。
|
|
256
|
+
*
|
|
257
|
+
* 使用方式:
|
|
258
|
+
* const metrics = agent.getMetrics();
|
|
259
|
+
* console.log(`LLM 调用 ${metrics.llm.callCount} 次,命中率 ${metrics.recall.hitRate}`);
|
|
260
|
+
*
|
|
261
|
+
* @returns AgentMetrics 完整快照(含衰减指标)
|
|
262
|
+
*/
|
|
263
|
+
getMetrics(): AgentMetrics;
|
|
264
|
+
/**
|
|
265
|
+
* 角色管理器(可能为 null)
|
|
266
|
+
*
|
|
267
|
+
* 返回 null 时表示 Agent 未初始化或角色系统未加载。
|
|
268
|
+
* 链式调用建议使用可选链:`agent.persona?.activeName`
|
|
269
|
+
*/
|
|
270
|
+
get persona(): PersonaManager | null;
|
|
271
|
+
/**
|
|
272
|
+
* 工具执行器(可能为 null)
|
|
273
|
+
*
|
|
274
|
+
* 返回 null 时表示 Agent 未初始化。
|
|
275
|
+
*/
|
|
276
|
+
get tools(): ToolExecutor | null;
|
|
277
|
+
/**
|
|
278
|
+
* 技能管理器(可能为 null)
|
|
279
|
+
*
|
|
280
|
+
* 返回 null 时表示 Agent 未初始化或技能系统未加载。
|
|
281
|
+
*/
|
|
282
|
+
get skills(): SkillManager | null;
|
|
283
|
+
/**
|
|
284
|
+
* 配置管理器(可能为 null)—— 规则/技能注入 + 配置建议
|
|
285
|
+
*
|
|
286
|
+
* 返回 null 时表示 Agent 未初始化。
|
|
287
|
+
*/
|
|
288
|
+
get config(): ConfigManager | null;
|
|
289
|
+
/**
|
|
290
|
+
* Insight 提取器(可能为 null)—— 输入分类 + 记忆提取
|
|
291
|
+
*
|
|
292
|
+
* 返回 null 时表示 Agent 未初始化或 LLM Provider 未配置。
|
|
293
|
+
*/
|
|
294
|
+
get insight(): InsightExtractor | null;
|
|
295
|
+
/**
|
|
296
|
+
* 记忆查看器(可能为 null)—— 快照 + 搜索 + 统计
|
|
297
|
+
*
|
|
298
|
+
* 返回 null 时表示 Agent 未初始化或存储层未就绪。
|
|
299
|
+
* 宿主项目常用模式:`const mem = agent.memory; if (!mem) return [];`
|
|
300
|
+
*/
|
|
301
|
+
get memory(): MemoryInspector | null;
|
|
302
|
+
/**
|
|
303
|
+
* 项目管理器(可能为 null)
|
|
304
|
+
*
|
|
305
|
+
* 返回 null 时表示 Agent 未初始化。
|
|
306
|
+
*/
|
|
307
|
+
get projects(): ProjectManager | null;
|
|
308
|
+
/**
|
|
309
|
+
* 用户画像管理器(可能为 null)—— 实时归档 + 确认/拒绝
|
|
310
|
+
*
|
|
311
|
+
* 返回 null 时表示 Agent 未初始化。
|
|
312
|
+
* 宿主常用模式:
|
|
313
|
+
* - `agent.userProfile?.getPending()` 查询待确认条目
|
|
314
|
+
* - `await agent.userProfile?.confirm(id)` 确认条目
|
|
315
|
+
* - `await agent.userProfile?.reject(id)` 拒绝条目
|
|
316
|
+
*/
|
|
317
|
+
get userProfile(): UserProfile | null;
|
|
318
|
+
/**
|
|
319
|
+
* 安全守卫(可能为 null)—— 写入确认回调注册
|
|
320
|
+
*
|
|
321
|
+
* 返回 null 时表示 Agent 未初始化或 projectPath 未设置。
|
|
322
|
+
* 宿主常用模式:
|
|
323
|
+
* - `agent.security?.onWriteConfirmation(callback)` 注册写入确认回调
|
|
324
|
+
* - 回调返回 true 允许写入,返回 false 拒绝写入
|
|
325
|
+
*
|
|
326
|
+
* 详见 M1 写入确认 UI 闭环
|
|
327
|
+
*/
|
|
328
|
+
get security(): SecurityGuard | null;
|
|
329
|
+
/**
|
|
330
|
+
* 作品投影管理器(可能为 null)—— 文件内容 → 概要+结构+决策
|
|
331
|
+
*
|
|
332
|
+
* 返回 null 时表示 Agent 未初始化。
|
|
333
|
+
* 宿主常用模式:
|
|
334
|
+
* - `agent.works?.ensureProjection(filePath, content)` 读取文件后触发生成
|
|
335
|
+
* - `agent.works?.loadAll()` 获取所有投影
|
|
336
|
+
*/
|
|
337
|
+
get works(): WorkProjectionManager | null;
|
|
338
|
+
/** 会话管理器(宿主可通过此 getter 访问会话恢复/切换/分叉功能) */
|
|
339
|
+
get sessionManager(): SessionManager | null;
|
|
340
|
+
/** 记忆存储(宿主可直接调用 CRUD,如 delete/upsert) */
|
|
341
|
+
get storage(): IMemoryStorage | null;
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
|