sentinel-agentos 0.3.0 → 0.3.2
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 +262 -0
- package/dist/adapters/evaluation-bridge.d.ts +78 -0
- package/dist/adapters/evaluation-bridge.d.ts.map +1 -0
- package/dist/adapters/evaluation-bridge.js +273 -0
- package/dist/adapters/evaluation-bridge.js.map +1 -0
- package/dist/adapters/memory-bridge.d.ts +116 -0
- package/dist/adapters/memory-bridge.d.ts.map +1 -0
- package/dist/adapters/memory-bridge.js +316 -0
- package/dist/adapters/memory-bridge.js.map +1 -0
- package/dist/adapters/migrate.d.ts +2 -0
- package/dist/adapters/migrate.d.ts.map +1 -0
- package/dist/adapters/migrate.js +63 -0
- package/dist/adapters/migrate.js.map +1 -0
- package/dist/cli.js +7 -4
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -604,6 +604,268 @@ print(requests.get(f"{BASE}/pipeline/report", headers=HEADERS).text)
|
|
|
604
604
|
|
|
605
605
|
---
|
|
606
606
|
|
|
607
|
+
---
|
|
608
|
+
|
|
609
|
+
## 🔌 sentinel-guard Skill — OpenClaw 实际对接
|
|
610
|
+
|
|
611
|
+
> 这是 Sentinel AgentOS 接入 OpenClaw Agent 框架的**生产级 skill**。
|
|
612
|
+
> 提供一个统一入口 `sentinel.execute()`,自动走完 Guard → Execute → Verify + Audit + Memory + Evaluator 三层面。
|
|
613
|
+
> 使用前务必阅读 [sentinel-guard SKILL.md](../skills/sentinel-guard/SKILL.md)。
|
|
614
|
+
|
|
615
|
+
### 统一入口 vs 传统两段式
|
|
616
|
+
|
|
617
|
+
**传统方式(preCheck + postCheck 两次调用)**:
|
|
618
|
+
|
|
619
|
+
```javascript
|
|
620
|
+
const guard = require('./sentinel-guard');
|
|
621
|
+
const check = guard.preCheck('exec', { command: '...' }); // 只做拦截
|
|
622
|
+
if (!check.passed) return ...;
|
|
623
|
+
// 执行...
|
|
624
|
+
guard.postCheck('exec', params, result); // 只做审计
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
**统一入口(推荐)**:
|
|
628
|
+
|
|
629
|
+
```javascript
|
|
630
|
+
const sentinel = require('./sentinel-guard');
|
|
631
|
+
const result = await sentinel.execute('exec', { command: 'npm test' }, () => exec('npm test'));
|
|
632
|
+
|
|
633
|
+
// result.allowed — Guard 是否放行
|
|
634
|
+
// result.result — 执行函数的返回值
|
|
635
|
+
// result.auditId — 审计 ID
|
|
636
|
+
// result.verify — Verify Gate 状态 (PASS/WARN/FAIL)
|
|
637
|
+
// result.profile — 当前质量评分 (0-100)
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
### 执行流程详解
|
|
641
|
+
|
|
642
|
+
```
|
|
643
|
+
sentinel.execute(toolName, params, fn)
|
|
644
|
+
│
|
|
645
|
+
├─ 第1层: 确定性命令/文件拦截 (<1μs,零 LLM)
|
|
646
|
+
│ ├─ 危险命令正则匹配 (rm -rf /, mkfs, dd if=, fork bomb...)
|
|
647
|
+
│ ├─ 警告命令正则匹配 (git push --force, npm publish, DROP TABLE...)
|
|
648
|
+
│ ├─ 敏感文件 glob 匹配 (.env, *.key, *.pem, .git/**...)
|
|
649
|
+
│ └─ 保护文件匹配 (package.json, MEMORY.md, AGENTS.md...)
|
|
650
|
+
│
|
|
651
|
+
├─ 第2层: AgentOS Pipeline
|
|
652
|
+
│ ├─ Schema Gate — 参数格式校验 (required/types/pathDeny/maxSize/secrets)
|
|
653
|
+
│ ├─ Risk Gate — 四维公式评分 → auto/notify/confirm/deny
|
|
654
|
+
│ └─ Snapshot Gate — 执行前文件 hash 快照
|
|
655
|
+
│
|
|
656
|
+
├─ 第3层: 实际执行 fn()
|
|
657
|
+
│ └─ 异常捕获,失败也记录审计
|
|
658
|
+
│
|
|
659
|
+
├─ 第4层: Verify + Audit + Evaluator
|
|
660
|
+
│ ├─ Verify Gate — 8 项确定性校验 (文件存在/变更/lint/格式...)
|
|
661
|
+
│ ├─ Audit Log — JSONL 不可篡改审计
|
|
662
|
+
│ ├─ PreExecEvaluator — 参数质量+上下文利用评分
|
|
663
|
+
│ ├─ RuntimeEvaluator — 重试/超时/自纠正评分
|
|
664
|
+
│ ├─ PostExecEvaluator — 验证通过/用户接受/结果利用率评分
|
|
665
|
+
│ └─ AgentProfiler — 综合评分 0-100 + 趋势 + 亮点/警告
|
|
666
|
+
│
|
|
667
|
+
├─ 第5层: Memory 同步
|
|
668
|
+
│ ├─ Working Memory — 消息+工具结果缓存
|
|
669
|
+
│ ├─ Episodic Memory — 事件记录
|
|
670
|
+
│ └─ Semantic Memory — (自动迁移时写入)
|
|
671
|
+
│
|
|
672
|
+
└─ 返回统一结果
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
### execute() 完整返回值
|
|
676
|
+
|
|
677
|
+
| 字段 | 类型 | 说明 |
|
|
678
|
+
|------|------|------|
|
|
679
|
+
| `allowed` | boolean | 是否通过 Guard 层 |
|
|
680
|
+
| `blocked` | boolean | 是否被拦截 |
|
|
681
|
+
| `risk` | `'auto' | 'confirm' | 'deny'` | 风险等级 |
|
|
682
|
+
| `reason` | string? | 拦截/警告原因(blocked=true 时) |
|
|
683
|
+
| `needsConfirmation` | boolean? | 是否需要用户确认 |
|
|
684
|
+
| `result` | any | 执行函数的返回值 |
|
|
685
|
+
| `error` | string? | 执行异常信息 |
|
|
686
|
+
| `auditId` | string | 审计条目 ID(如 `op_5`) |
|
|
687
|
+
| `verify` | `'PASS' | 'WARN' | 'FAIL'` | Verify Gate 状态 |
|
|
688
|
+
| `profile` | number | 当前 Agent 质量评分 (0-100) |
|
|
689
|
+
|
|
690
|
+
**被拦截示例**:
|
|
691
|
+
|
|
692
|
+
```json
|
|
693
|
+
{
|
|
694
|
+
"allowed": false,
|
|
695
|
+
"blocked": true,
|
|
696
|
+
"risk": "DENY",
|
|
697
|
+
"reason": "🚫 危险命令: rm -rf / — 删除整个系统"
|
|
698
|
+
}
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
**正常通过示例**:
|
|
702
|
+
|
|
703
|
+
```json
|
|
704
|
+
{
|
|
705
|
+
"allowed": true,
|
|
706
|
+
"blocked": false,
|
|
707
|
+
"risk": "auto",
|
|
708
|
+
"result": "hello output",
|
|
709
|
+
"auditId": "op_5",
|
|
710
|
+
"verify": "PASS",
|
|
711
|
+
"profile": 85
|
|
712
|
+
}
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
### 自动迁移 MEMORY.md → Semantic Memory
|
|
716
|
+
|
|
717
|
+
首次加载 sentinel-guard 时自动执行,仅一次:
|
|
718
|
+
|
|
719
|
+
1. 解析 `MEMORY.md` 的 Markdown 结构(支持 bullet 列表和表格行)
|
|
720
|
+
2. 提取用户事实 (👤 关于老板 / 🆔 关于我) → `semantic.addFact()`
|
|
721
|
+
3. 提取工作方式规则 (🤖 我的工作方式) → `semantic.learnRule()`
|
|
722
|
+
4. 提取项目上下文 (📦 coderev / agentos) → `semantic.setProjectContext()`
|
|
723
|
+
5. 提取环境记录 (💻 环境记录) → `semantic.addFact()`
|
|
724
|
+
6. 提取关键决策 (💡 关键决策记录) → `episodic.record('decision', ...)`
|
|
725
|
+
7. 生成 `.sentinel-migrated` 标记文件防止重复
|
|
726
|
+
|
|
727
|
+
迁移后原有 MEMORY.md 不受影响(只读不写),两套记忆并行:
|
|
728
|
+
|
|
729
|
+
| 记忆系统 | 用途 | 格式 |
|
|
730
|
+
|---------|------|------|
|
|
731
|
+
| `MEMORY.md` | 人类编辑,session 注入上下文 | Markdown |
|
|
732
|
+
| AgentOS Semantic Memory | 程序读写,自动学习 | 结构化 JSON (`.agentos/`) |
|
|
733
|
+
|
|
734
|
+
### 规则配置 guard-rules.json
|
|
735
|
+
|
|
736
|
+
所有 Guard 黑白名单可通过 `guard-rules.json` 直接编辑,无需改源码:
|
|
737
|
+
|
|
738
|
+
```json
|
|
739
|
+
{
|
|
740
|
+
"dangerous": [
|
|
741
|
+
["rm -rf /", "删除整个系统"],
|
|
742
|
+
["sudo rm", "超级用户删除"],
|
|
743
|
+
["mkfs", "格式化磁盘"]
|
|
744
|
+
],
|
|
745
|
+
"warning": [
|
|
746
|
+
["git push --force", "强制覆盖远程分支"],
|
|
747
|
+
["npm publish\\b", "发布 npm 公共包"],
|
|
748
|
+
["DROP (TABLE|DATABASE)", "删除数据库"]
|
|
749
|
+
],
|
|
750
|
+
"sensitiveFiles": [
|
|
751
|
+
".env", ".env.*", "*.key", "*.pem",
|
|
752
|
+
".git/**", "**/credentials/**"
|
|
753
|
+
],
|
|
754
|
+
"protectedFiles": [
|
|
755
|
+
"package.json", "MEMORY.md", "AGENTS.md", "SOUL.md"
|
|
756
|
+
],
|
|
757
|
+
"schema": [
|
|
758
|
+
{ "tool": "exec", "required": ["command"] },
|
|
759
|
+
{
|
|
760
|
+
"tool": "write",
|
|
761
|
+
"required": ["path", "content"],
|
|
762
|
+
"pathDeny": [".env", "*.key", ".git/**"],
|
|
763
|
+
"maxSize": { "content": 1048576 },
|
|
764
|
+
"secrets": ["content"]
|
|
765
|
+
}
|
|
766
|
+
]
|
|
767
|
+
}
|
|
768
|
+
```
|
|
769
|
+
|
|
770
|
+
| 配置项 | 类型 | 说明 |
|
|
771
|
+
|--------|------|------|
|
|
772
|
+
| `dangerous` | `[regex, desc][]` | 匹配到直接拒绝 |
|
|
773
|
+
| `warning` | `[regex, desc][]` | 匹配到需用户确认 |
|
|
774
|
+
| `sensitiveFiles` | `string[]` | glob 模式,禁止读写 |
|
|
775
|
+
| `protectedFiles` | `string[]` | 精确匹配,禁止删除 |
|
|
776
|
+
| `schema` | `SchemaRule[]` | AgentOS Schema Gate 规则 |
|
|
777
|
+
|
|
778
|
+
### 完整 API 参考
|
|
779
|
+
|
|
780
|
+
```javascript
|
|
781
|
+
const sentinel = require('./sentinel-guard');
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
| 方法 | 类型 | 说明 |
|
|
785
|
+
|------|------|------|
|
|
786
|
+
| `execute(tool, params, fn, opts?)` | async | **统一入口**,走完三层 |
|
|
787
|
+
| `preCheck(tool, params)` | sync | [兼容] 仅确定性拦截 |
|
|
788
|
+
| `postCheck(tool, params, result)` | sync | [兼容] 仅审计记录 |
|
|
789
|
+
| `injectContext()` | sync → string | Session 启动时注入 Memory 上下文 |
|
|
790
|
+
| `endSession()` | sync | Session 结束:追加 daily log → 清空 Working → 同步 Episodic |
|
|
791
|
+
| `status()` | sync → string | AgentOS 状态报告 |
|
|
792
|
+
| `fullStatus()` | sync → object | 完整状态快照 (JSON) |
|
|
793
|
+
| `compactReport()` | sync → string | 精简版评估报告 |
|
|
794
|
+
| `fullReport()` | sync → string | 完整评估报告 |
|
|
795
|
+
| `audit(limit?)` | sync → array | 最近 N 条审计记录 |
|
|
796
|
+
| `feedback(signal)` | sync | 记录用户反馈信号 |
|
|
797
|
+
|
|
798
|
+
### Session 生命周期
|
|
799
|
+
|
|
800
|
+
```
|
|
801
|
+
Session 启动
|
|
802
|
+
├─ require('./sentinel-guard') ← 首次自动迁移 MEMORY.md
|
|
803
|
+
├─ sentinel.injectContext() ← 注入 Semantic+Episodic 上下文
|
|
804
|
+
│
|
|
805
|
+
Session 运行中
|
|
806
|
+
├─ sentinel.execute('exec', ...) ← 每次工具调用
|
|
807
|
+
├─ sentinel.execute('write', ...)
|
|
808
|
+
├─ sentinel.feedback('user_used_result') ← 关键节点记录反馈
|
|
809
|
+
│
|
|
810
|
+
Session 结束
|
|
811
|
+
└─ sentinel.endSession() ← 追加 daily log + 清空 Working
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
### AgentOS 与 sentinel-guard 功能对照
|
|
815
|
+
|
|
816
|
+
| 功能 | AgentOS 源码 | sentinel-guard skill | 覆盖率 |
|
|
817
|
+
|------|------------|---------------------|:------:|
|
|
818
|
+
| Schema Gate (12 项校验) | ✅ `schema-gate.ts` | ✅ `execute()` 内自动 | 100% |
|
|
819
|
+
| Risk Gate (四维公式) | ✅ `risk-gate.ts` | ✅ `execute()` 内自动 | 100% |
|
|
820
|
+
| 确定性命令拦截 | ❌ (依赖 Sandbox) | ✅ 正则匹配 (<1μs) | **额外增强** |
|
|
821
|
+
| Snapshot Gate | ✅ `snapshot-verify.ts` | ✅ `execute()` 内自动 | 100% |
|
|
822
|
+
| Verify Gate (8 项校验) | ✅ `snapshot-verify.ts` | ✅ `execute()` 内自动 | 100% |
|
|
823
|
+
| Audit Log (JSONL) | ✅ `audit-log.ts` | ✅ 双写 (AgentOS + 自身) | 100% |
|
|
824
|
+
| 规则可配置 | ❌ (代码硬编码) | ✅ `guard-rules.json` | **额外增强** |
|
|
825
|
+
| Working Memory | ✅ `working.ts` | ✅ 消息+工具缓存 | 100% |
|
|
826
|
+
| Episodic Memory | ✅ `episodic.ts` | ✅ 事件自动记录 | 100% |
|
|
827
|
+
| Semantic Memory | ✅ `semantic.ts` | ✅ 自动迁移+初始值 | 100% |
|
|
828
|
+
| MEMORY.md 迁移 | ✅ `memory-bridge.ts` | ✅ 首次加载自动跑 | 100% |
|
|
829
|
+
| Session 注入上下文 | ✅ `injectContext()` | ✅ `sentinel.injectContext()` | 100% |
|
|
830
|
+
| Session 清理 | ✅ `endSession()` | ✅ 含 daily log | 100% |
|
|
831
|
+
| PreExecEvaluator | ✅ `exec-evaluator.ts` | ✅ `execute()` 内自动 | 100% |
|
|
832
|
+
| RuntimeEvaluator | ✅ `exec-evaluator.ts` | ✅ `execute()` 内自动 | 100% |
|
|
833
|
+
| PostExecEvaluator | ✅ `exec-evaluator.ts` | ✅ `execute()` 内自动 | 100% |
|
|
834
|
+
| AgentProfiler | ✅ `profiler.ts` | ✅ `execute()` 返回 profile | 100% |
|
|
835
|
+
| ImplicitFeedback | ✅ `feedback.ts` | ✅ `recordFeedback()` | 100% |
|
|
836
|
+
| Daily Log 注入 | ✅ `evaluation-bridge.ts` | ✅ `endSession()` 自动 | 100% |
|
|
837
|
+
| Compact/Full Report | ✅ `evaluation-bridge.ts` | ✅ `compactReport()`/`fullReport()` | 100% |
|
|
838
|
+
| Sandbox 沙箱 | ✅ `sandbox.ts` | ❌ (暂未接入) | 0% |
|
|
839
|
+
| HTTP API | ✅ `server.ts` | ❌ (skill 为进程内调用) | N/A |
|
|
840
|
+
| **按设计范围总计** | **20 项** | **20/20** | **100%** |
|
|
841
|
+
|
|
842
|
+
### 快速入门(5 步接入)
|
|
843
|
+
|
|
844
|
+
```javascript
|
|
845
|
+
// 1. 加载 skill(自动迁移 MEMORY.md)
|
|
846
|
+
const sentinel = require('./sentinel-guard');
|
|
847
|
+
|
|
848
|
+
// 2. Session 启动 — 注入记忆上下文
|
|
849
|
+
const context = sentinel.injectContext();
|
|
850
|
+
|
|
851
|
+
// 3. 工具调用 — 统一入口,三层全走
|
|
852
|
+
const r = await sentinel.execute('write',
|
|
853
|
+
{ path: 'src/main.ts', content: 'console.log("hi")' },
|
|
854
|
+
() => fs.writeFileSync('src/main.ts', 'console.log("hi")')
|
|
855
|
+
);
|
|
856
|
+
if (!r.allowed) return { blocked: true, reason: r.reason };
|
|
857
|
+
|
|
858
|
+
// 4. 记录反馈
|
|
859
|
+
sentinel.feedback('user_used_result');
|
|
860
|
+
|
|
861
|
+
// 5. Session 结束 — 追加 daily log + 清理
|
|
862
|
+
sentinel.endSession();
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
完整示例代码见 `sentinel-guard/SKILL.md`,配置文件见 `sentinel-guard/guard-rules.json`。
|
|
866
|
+
|
|
867
|
+
---
|
|
868
|
+
|
|
607
869
|
### API 层 · SDK API
|
|
608
870
|
|
|
609
871
|
```typescript
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evaluation Bridge — Evaluator 三阶段评估接入 OpenClaw
|
|
3
|
+
*
|
|
4
|
+
* 职责:在每个 tool call 的 preCheck/postCheck 中自动采集指标,
|
|
5
|
+
* 累积到 Profiler,定期生成质量报告注入 daily log。
|
|
6
|
+
*
|
|
7
|
+
* 数据流:
|
|
8
|
+
* Guard preCheck → PreExecEvaluator → 参数质量+上下文利用评分
|
|
9
|
+
* tool 执行 → RuntimeEvaluator → 重试/超时/自纠正评分
|
|
10
|
+
* Guard postCheck → PostExecEvaluator → 验证通过/用户接受评分
|
|
11
|
+
* ↓
|
|
12
|
+
* AgentProfiler → 综合评分(0-100) + 趋势 + 警告/亮点
|
|
13
|
+
* ↓
|
|
14
|
+
* ImplicitFeedback → 从 audit log 推断用户满意度
|
|
15
|
+
*/
|
|
16
|
+
import { WorkingMemory } from '../memory/working';
|
|
17
|
+
import { AgentProfile } from '../evaluator/profiler';
|
|
18
|
+
export declare class EvaluationBridge {
|
|
19
|
+
private schemaGate;
|
|
20
|
+
private riskGate;
|
|
21
|
+
private working;
|
|
22
|
+
private preEvaluator;
|
|
23
|
+
private runtimeEvaluator;
|
|
24
|
+
private postEvaluator;
|
|
25
|
+
private feedback;
|
|
26
|
+
private profiler;
|
|
27
|
+
private sessionId;
|
|
28
|
+
private pending;
|
|
29
|
+
constructor(working: WorkingMemory, sessionId?: string);
|
|
30
|
+
/** tool 执行前:采集 PreExec 指标,返回操作 ID */
|
|
31
|
+
preExec(toolName: string, params: Record<string, unknown>): string;
|
|
32
|
+
/** tool 执行后:采集 Runtime + PostExec 指标,计入 Profiler */
|
|
33
|
+
postExec(opId: string, options?: {
|
|
34
|
+
hadTimeout?: boolean;
|
|
35
|
+
retryCount?: number;
|
|
36
|
+
wasSelfCorrected?: boolean;
|
|
37
|
+
verifyPassed?: boolean;
|
|
38
|
+
verifyChecks?: number;
|
|
39
|
+
verifyFailures?: number;
|
|
40
|
+
result?: unknown;
|
|
41
|
+
}): void;
|
|
42
|
+
/** 记录隐式反馈信号 */
|
|
43
|
+
recordFeedback(signal: string, confidence?: number): void;
|
|
44
|
+
/** 获取综合质量画像 */
|
|
45
|
+
getProfile(): AgentProfile;
|
|
46
|
+
/** 获取满意度分数 */
|
|
47
|
+
getSatisfaction(): number;
|
|
48
|
+
/** 获取反馈统计 */
|
|
49
|
+
getFeedbackStats(): {
|
|
50
|
+
totalSignals: number;
|
|
51
|
+
positiveSignals: number;
|
|
52
|
+
negativeSignals: number;
|
|
53
|
+
averageStrength: number;
|
|
54
|
+
mostCommonSignal: import("..").SignalType | null;
|
|
55
|
+
};
|
|
56
|
+
/** 获取工具准确率 */
|
|
57
|
+
getToolAccuracy(): Record<string, {
|
|
58
|
+
calls: number;
|
|
59
|
+
successRate: number;
|
|
60
|
+
}>;
|
|
61
|
+
/** 获取结果利用率 */
|
|
62
|
+
getUtilizationRate(): number;
|
|
63
|
+
/** 获取本次会话的操作数 */
|
|
64
|
+
getOperationCount(): number;
|
|
65
|
+
/** 生成人类可读的评估报告 */
|
|
66
|
+
generateReport(): string;
|
|
67
|
+
/** 生成精简版报告(注入 daily log) */
|
|
68
|
+
generateCompactReport(): string;
|
|
69
|
+
/** 追加报告到 daily log */
|
|
70
|
+
appendToDailyLog(workspaceRoot: string): void;
|
|
71
|
+
/** 导出可序列化的状态 */
|
|
72
|
+
exportState(): object;
|
|
73
|
+
/** 导入之前的状态(用于恢复) */
|
|
74
|
+
importState(state: any): void;
|
|
75
|
+
}
|
|
76
|
+
export declare function getEvaluationBridge(working?: WorkingMemory, sessionId?: string): EvaluationBridge;
|
|
77
|
+
export declare function resetEvaluationBridge(): void;
|
|
78
|
+
//# sourceMappingURL=evaluation-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-bridge.d.ts","sourceRoot":"","sources":["../../src/adapters/evaluation-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlD,OAAO,EAAiB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKpE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,OAAO,CAAmF;gBAEtF,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM;IActD,qCAAqC;IACrC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAalE,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;QAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;KACb,GAAG,IAAI;IAwCb,eAAe;IACf,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBzD,eAAe;IACf,UAAU,IAAI,YAAY;IAI1B,cAAc;IACd,eAAe,IAAI,MAAM;IAIzB,aAAa;IACb,gBAAgB;;;;;;;IAIhB,cAAc;IACd,eAAe;;;;IAIf,cAAc;IACd,kBAAkB,IAAI,MAAM;IAI5B,iBAAiB;IACjB,iBAAiB,IAAI,MAAM;IAM3B,kBAAkB;IAClB,cAAc,IAAI,MAAM;IA0CxB,4BAA4B;IAC5B,qBAAqB,IAAI,MAAM;IAc/B,sBAAsB;IACtB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAiB7C,gBAAgB;IAChB,WAAW,IAAI,MAAM;IAWrB,oBAAoB;IACpB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;CAI9B;AAKD,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAMjG;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Evaluation Bridge — Evaluator 三阶段评估接入 OpenClaw
|
|
4
|
+
*
|
|
5
|
+
* 职责:在每个 tool call 的 preCheck/postCheck 中自动采集指标,
|
|
6
|
+
* 累积到 Profiler,定期生成质量报告注入 daily log。
|
|
7
|
+
*
|
|
8
|
+
* 数据流:
|
|
9
|
+
* Guard preCheck → PreExecEvaluator → 参数质量+上下文利用评分
|
|
10
|
+
* tool 执行 → RuntimeEvaluator → 重试/超时/自纠正评分
|
|
11
|
+
* Guard postCheck → PostExecEvaluator → 验证通过/用户接受评分
|
|
12
|
+
* ↓
|
|
13
|
+
* AgentProfiler → 综合评分(0-100) + 趋势 + 警告/亮点
|
|
14
|
+
* ↓
|
|
15
|
+
* ImplicitFeedback → 从 audit log 推断用户满意度
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.EvaluationBridge = void 0;
|
|
52
|
+
exports.getEvaluationBridge = getEvaluationBridge;
|
|
53
|
+
exports.resetEvaluationBridge = resetEvaluationBridge;
|
|
54
|
+
const schema_gate_1 = require("../guard/schema-gate");
|
|
55
|
+
const risk_gate_1 = require("../guard/risk-gate");
|
|
56
|
+
const exec_evaluator_1 = require("../evaluator/exec-evaluator");
|
|
57
|
+
const exec_evaluator_2 = require("../evaluator/exec-evaluator");
|
|
58
|
+
const exec_evaluator_3 = require("../evaluator/exec-evaluator");
|
|
59
|
+
const profiler_1 = require("../evaluator/profiler");
|
|
60
|
+
const feedback_1 = require("../evaluator/feedback");
|
|
61
|
+
const fs = __importStar(require("fs"));
|
|
62
|
+
const path = __importStar(require("path"));
|
|
63
|
+
class EvaluationBridge {
|
|
64
|
+
schemaGate;
|
|
65
|
+
riskGate;
|
|
66
|
+
working;
|
|
67
|
+
preEvaluator;
|
|
68
|
+
runtimeEvaluator;
|
|
69
|
+
postEvaluator;
|
|
70
|
+
feedback;
|
|
71
|
+
profiler;
|
|
72
|
+
sessionId;
|
|
73
|
+
// 待完成的评估周期(pre 已记录,等待 post)
|
|
74
|
+
pending = new Map();
|
|
75
|
+
constructor(working, sessionId) {
|
|
76
|
+
this.schemaGate = new schema_gate_1.SchemaGate();
|
|
77
|
+
this.riskGate = new risk_gate_1.RiskGate();
|
|
78
|
+
this.working = working;
|
|
79
|
+
this.preEvaluator = new exec_evaluator_1.PreExecEvaluator(this.schemaGate, this.riskGate, this.working);
|
|
80
|
+
this.runtimeEvaluator = new exec_evaluator_2.RuntimeEvaluator();
|
|
81
|
+
this.postEvaluator = new exec_evaluator_3.PostExecEvaluator();
|
|
82
|
+
this.feedback = new feedback_1.ImplicitFeedbackEngine();
|
|
83
|
+
this.profiler = new profiler_1.AgentProfiler(this.feedback);
|
|
84
|
+
this.sessionId = sessionId || `eval_${Date.now()}`;
|
|
85
|
+
}
|
|
86
|
+
// ============== 生命周期 ==============
|
|
87
|
+
/** tool 执行前:采集 PreExec 指标,返回操作 ID */
|
|
88
|
+
preExec(toolName, params) {
|
|
89
|
+
const opId = `op_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
|
|
90
|
+
const preMetric = this.preEvaluator.evaluate(toolName, params);
|
|
91
|
+
this.pending.set(opId, {
|
|
92
|
+
preMetric,
|
|
93
|
+
startTime: Date.now(),
|
|
94
|
+
toolName,
|
|
95
|
+
});
|
|
96
|
+
return opId;
|
|
97
|
+
}
|
|
98
|
+
/** tool 执行后:采集 Runtime + PostExec 指标,计入 Profiler */
|
|
99
|
+
postExec(opId, options = {}) {
|
|
100
|
+
const entry = this.pending.get(opId);
|
|
101
|
+
if (!entry)
|
|
102
|
+
return;
|
|
103
|
+
const endTime = Date.now();
|
|
104
|
+
const { preMetric, startTime, toolName } = entry;
|
|
105
|
+
this.pending.delete(opId);
|
|
106
|
+
// Runtime 评估
|
|
107
|
+
const runtime = this.runtimeEvaluator.evaluate({
|
|
108
|
+
toolName,
|
|
109
|
+
startTime,
|
|
110
|
+
endTime,
|
|
111
|
+
retryCount: options.retryCount ?? 0,
|
|
112
|
+
wasSelfCorrected: options.wasSelfCorrected ?? false,
|
|
113
|
+
hadTimeout: options.hadTimeout ?? false,
|
|
114
|
+
toolResult: options.result,
|
|
115
|
+
});
|
|
116
|
+
// Post 评估
|
|
117
|
+
const post = this.postEvaluator.evaluate({
|
|
118
|
+
verifyPassed: options.verifyPassed ?? true,
|
|
119
|
+
verifyChecks: options.verifyChecks ?? 1,
|
|
120
|
+
verifyFailures: options.verifyFailures ?? 0,
|
|
121
|
+
userAccepted: true, // 默认 true,feedback 会修正
|
|
122
|
+
userProvidedEdit: false,
|
|
123
|
+
resultWasUsed: false,
|
|
124
|
+
});
|
|
125
|
+
// 追踪结果(后续 detected usage)
|
|
126
|
+
if (options.result !== undefined) {
|
|
127
|
+
this.postEvaluator.trackResult(opId, options.result);
|
|
128
|
+
}
|
|
129
|
+
// 入 Profiler
|
|
130
|
+
this.profiler.recordCycle(this.sessionId, preMetric, runtime, post);
|
|
131
|
+
}
|
|
132
|
+
// ============== Feedback ==============
|
|
133
|
+
/** 记录隐式反馈信号 */
|
|
134
|
+
recordFeedback(signal, confidence) {
|
|
135
|
+
const validSignals = [
|
|
136
|
+
'user_deleted_code', 'user_modified_output', 'user_repeated_instruction',
|
|
137
|
+
'user_immediate_continue', 'user_used_result', 'user_silence_then_praise',
|
|
138
|
+
'user_interrupted', 'agent_self_corrected', 'user_explicit_approval',
|
|
139
|
+
'user_shared_output', 'user_provided_correction', 'user_ignored_result',
|
|
140
|
+
];
|
|
141
|
+
if (!validSignals.includes(signal)) {
|
|
142
|
+
console.warn(`[Evaluator] Unknown signal: ${signal}`);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
this.feedback.record(signal, this.sessionId, undefined, confidence ?? 0.8);
|
|
146
|
+
}
|
|
147
|
+
// ============== 查询 ==============
|
|
148
|
+
/** 获取综合质量画像 */
|
|
149
|
+
getProfile() {
|
|
150
|
+
return this.profiler.getProfile(this.sessionId);
|
|
151
|
+
}
|
|
152
|
+
/** 获取满意度分数 */
|
|
153
|
+
getSatisfaction() {
|
|
154
|
+
return this.feedback.getSatisfactionScore(this.sessionId);
|
|
155
|
+
}
|
|
156
|
+
/** 获取反馈统计 */
|
|
157
|
+
getFeedbackStats() {
|
|
158
|
+
return this.feedback.stats();
|
|
159
|
+
}
|
|
160
|
+
/** 获取工具准确率 */
|
|
161
|
+
getToolAccuracy() {
|
|
162
|
+
return this.runtimeEvaluator.getToolAccuracy();
|
|
163
|
+
}
|
|
164
|
+
/** 获取结果利用率 */
|
|
165
|
+
getUtilizationRate() {
|
|
166
|
+
return this.postEvaluator.getUtilizationRate();
|
|
167
|
+
}
|
|
168
|
+
/** 获取本次会话的操作数 */
|
|
169
|
+
getOperationCount() {
|
|
170
|
+
return this.pending.size + (this.getProfile().totalOps || 0);
|
|
171
|
+
}
|
|
172
|
+
// ============== 报告生成 ==============
|
|
173
|
+
/** 生成人类可读的评估报告 */
|
|
174
|
+
generateReport() {
|
|
175
|
+
const profile = this.getProfile();
|
|
176
|
+
const feedbackStats = this.getFeedbackStats();
|
|
177
|
+
const toolAcc = this.getToolAccuracy();
|
|
178
|
+
const satisfaction = this.getSatisfaction();
|
|
179
|
+
const lines = [
|
|
180
|
+
'═══ 📊 AgentOS Evaluator 报告 ═══',
|
|
181
|
+
'',
|
|
182
|
+
`🎯 综合评分: ${profile.overallScore}/100`,
|
|
183
|
+
'',
|
|
184
|
+
'📈 分项评分:',
|
|
185
|
+
` ├─ 参数质量: ${profile.breakdown.preExec}/100`,
|
|
186
|
+
` ├─ 执行质量: ${profile.breakdown.runtime}/100`,
|
|
187
|
+
` ├─ 结果验证: ${profile.breakdown.postExec}/100`,
|
|
188
|
+
` └─ 用户满意度: ${profile.breakdown.userSatisfaction}/100`,
|
|
189
|
+
'',
|
|
190
|
+
`📊 趋势: ${profile.trends.improving ? '📈 上升' : '📉 下降'} (最近${profile.trends.recentOps}次: ${Math.round(profile.trends.recentScore)}/100)`,
|
|
191
|
+
'',
|
|
192
|
+
];
|
|
193
|
+
if (profile.strengths.length > 0) {
|
|
194
|
+
lines.push('✅ 亮点:');
|
|
195
|
+
for (const s of profile.strengths)
|
|
196
|
+
lines.push(` · ${s}`);
|
|
197
|
+
lines.push('');
|
|
198
|
+
}
|
|
199
|
+
if (profile.warnings.length > 0) {
|
|
200
|
+
lines.push('⚠️ 需改进:');
|
|
201
|
+
for (const w of profile.warnings)
|
|
202
|
+
lines.push(` · ${w}`);
|
|
203
|
+
lines.push('');
|
|
204
|
+
}
|
|
205
|
+
lines.push(`💬 反馈: ${feedbackStats.totalSignals} 信号 (${feedbackStats.positiveSignals}正 / ${feedbackStats.negativeSignals}负)`);
|
|
206
|
+
lines.push(`🛠 工具准确率: ${Object.entries(toolAcc).map(([t, v]) => `${t}:${v.successRate}`).join(', ')}`);
|
|
207
|
+
lines.push(`📐 满意度: ${satisfaction}`);
|
|
208
|
+
lines.push('');
|
|
209
|
+
lines.push('══════════════════════════════');
|
|
210
|
+
return lines.join('\n');
|
|
211
|
+
}
|
|
212
|
+
/** 生成精简版报告(注入 daily log) */
|
|
213
|
+
generateCompactReport() {
|
|
214
|
+
const profile = this.getProfile();
|
|
215
|
+
return [
|
|
216
|
+
`## 📊 AgentOS Evaluator 今日评估`,
|
|
217
|
+
'',
|
|
218
|
+
`**综合评分**: ${profile.overallScore}/100 | Pre:${profile.breakdown.preExec}/100 | Run:${profile.breakdown.runtime}/100 | Post:${profile.breakdown.postExec}/100`,
|
|
219
|
+
`**趋势**: ${profile.trends.improving ? '📈 上升' : '📉 下降'} | **操作数**: ${profile.totalOps}`,
|
|
220
|
+
profile.warnings.length > 0 ? `**⚠️**: ${profile.warnings.join('; ')}` : '',
|
|
221
|
+
profile.strengths.length > 0 ? `**✅**: ${profile.strengths.join('; ')}` : '',
|
|
222
|
+
'',
|
|
223
|
+
].filter(Boolean).join('\n');
|
|
224
|
+
}
|
|
225
|
+
/** 追加报告到 daily log */
|
|
226
|
+
appendToDailyLog(workspaceRoot) {
|
|
227
|
+
const dateKey = new Date().toISOString().split('T')[0];
|
|
228
|
+
const dailyFile = path.join(workspaceRoot, 'memory', `${dateKey}.md`);
|
|
229
|
+
const report = this.generateCompactReport();
|
|
230
|
+
try {
|
|
231
|
+
const existing = fs.existsSync(dailyFile) ? fs.readFileSync(dailyFile, 'utf-8') : '';
|
|
232
|
+
if (!existing.includes('AgentOS Evaluator')) {
|
|
233
|
+
fs.appendFileSync(dailyFile, `\n${report}\n`, 'utf-8');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch (e) {
|
|
237
|
+
console.warn('[Evaluator] Failed to append report:', e);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// ============== 持久化 ==============
|
|
241
|
+
/** 导出可序列化的状态 */
|
|
242
|
+
exportState() {
|
|
243
|
+
return {
|
|
244
|
+
sessionId: this.sessionId,
|
|
245
|
+
profile: this.getProfile(),
|
|
246
|
+
feedback: this.getFeedbackStats(),
|
|
247
|
+
toolAccuracy: this.getToolAccuracy(),
|
|
248
|
+
utilizationRate: this.getUtilizationRate(),
|
|
249
|
+
exportedAt: new Date().toISOString(),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/** 导入之前的状态(用于恢复) */
|
|
253
|
+
importState(state) {
|
|
254
|
+
if (state.sessionId)
|
|
255
|
+
this.sessionId = state.sessionId;
|
|
256
|
+
// Profiler/Feedback 不支持完整恢复,只恢复 sessionId
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
exports.EvaluationBridge = EvaluationBridge;
|
|
260
|
+
// ============== Singleton ==============
|
|
261
|
+
let _evalBridge = null;
|
|
262
|
+
function getEvaluationBridge(working, sessionId) {
|
|
263
|
+
if (!_evalBridge) {
|
|
264
|
+
if (!working)
|
|
265
|
+
throw new Error('First call requires WorkingMemory instance');
|
|
266
|
+
_evalBridge = new EvaluationBridge(working, sessionId);
|
|
267
|
+
}
|
|
268
|
+
return _evalBridge;
|
|
269
|
+
}
|
|
270
|
+
function resetEvaluationBridge() {
|
|
271
|
+
_evalBridge = null;
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=evaluation-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation-bridge.js","sourceRoot":"","sources":["../../src/adapters/evaluation-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Bridge — 将 AgentOS Memory 三层接入 OpenClaw 工作流
|
|
3
|
+
*
|
|
4
|
+
* ┌─────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
5
|
+
* │ MEMORY.md │ → │ Semantic │ ← │ 会话中学习 │
|
|
6
|
+
* │ 旧文件系统 │ │ Memory │ │ 新规则/偏好 │
|
|
7
|
+
* └─────────────┘ └──────┬───────┘ └──────────────┘
|
|
8
|
+
* │
|
|
9
|
+
* ┌──────────────────────┼──────────────────────┐
|
|
10
|
+
* │ │ │
|
|
11
|
+
* ▼ ▼ ▼
|
|
12
|
+
* Session启动 Session运行 Session结束
|
|
13
|
+
* 注入上下文 工具结果缓存 事件→Episodic
|
|
14
|
+
* 消息→Working 偏好→Semantic
|
|
15
|
+
*
|
|
16
|
+
* 用法:
|
|
17
|
+
* 1. Session 启动: MemoryBridge.onSessionStart(workspaceRoot)
|
|
18
|
+
* → 返回要注入的上下文字符串
|
|
19
|
+
* 2. Session 中: MemoryBridge.getWorkingMemory()
|
|
20
|
+
* → 获取 Working Memory 实例
|
|
21
|
+
* 3. Session 结束: MemoryBridge.onSessionEnd()
|
|
22
|
+
* → 清空 Working、同步 Episodic
|
|
23
|
+
*/
|
|
24
|
+
import { WorkingMemory } from '../memory/working';
|
|
25
|
+
import { EpisodicMemory } from '../memory/episodic';
|
|
26
|
+
import { SemanticMemoryStore } from '../memory/semantic';
|
|
27
|
+
import { EventType } from '../types';
|
|
28
|
+
export interface MemorySnapshot {
|
|
29
|
+
semantic: Record<string, unknown>;
|
|
30
|
+
episodic: Record<string, unknown>;
|
|
31
|
+
working: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
export declare class MemoryBridge {
|
|
34
|
+
private working;
|
|
35
|
+
private episodic;
|
|
36
|
+
private semantic;
|
|
37
|
+
private started;
|
|
38
|
+
private startTime;
|
|
39
|
+
constructor(workspaceRoot: string);
|
|
40
|
+
/**
|
|
41
|
+
* Session 启动时调用
|
|
42
|
+
* 返回要注入到系统提示的上下文摘要
|
|
43
|
+
*/
|
|
44
|
+
onSessionStart(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Session 运行中:记录一条消息到 Working Memory
|
|
47
|
+
*/
|
|
48
|
+
recordMessage(role: 'user' | 'agent' | 'tool', content: string): void;
|
|
49
|
+
/**
|
|
50
|
+
* Session 运行中:缓存工具调用结果
|
|
51
|
+
*/
|
|
52
|
+
cacheToolResult(toolName: string, result: unknown): void;
|
|
53
|
+
/**
|
|
54
|
+
* Session 结束:清空 Working + 同步到 Episodic
|
|
55
|
+
*
|
|
56
|
+
* @param autoRecord 是否自动从 Working 提取事件到 Episodic
|
|
57
|
+
*/
|
|
58
|
+
onSessionEnd(autoRecord?: boolean): void;
|
|
59
|
+
/**
|
|
60
|
+
* 记录自定义事件到 Episodic Memory
|
|
61
|
+
*/
|
|
62
|
+
recordEvent(type: EventType, content: string, tags?: string[], relatedEntities?: string[], importanceBoost?: number): void;
|
|
63
|
+
/** 学习新规则 */
|
|
64
|
+
learnRule(rule: string, source: string): void;
|
|
65
|
+
/** 设置用户偏好 */
|
|
66
|
+
setPreference(key: string, value: unknown): void;
|
|
67
|
+
/** 添加用户事实 */
|
|
68
|
+
addFact(fact: string): void;
|
|
69
|
+
/** 更新项目上下文 */
|
|
70
|
+
setProjectContext(name: string, ctx: {
|
|
71
|
+
description?: string;
|
|
72
|
+
techStack?: string[];
|
|
73
|
+
conventions?: string[];
|
|
74
|
+
architecture?: string;
|
|
75
|
+
knownIssues?: string[];
|
|
76
|
+
}): void;
|
|
77
|
+
/** 获取项目上下文 */
|
|
78
|
+
getProjectContext(name: string): {
|
|
79
|
+
description: string;
|
|
80
|
+
techStack: string[];
|
|
81
|
+
conventions: string[];
|
|
82
|
+
architecture: string;
|
|
83
|
+
knownIssues: string[];
|
|
84
|
+
} | undefined;
|
|
85
|
+
/** 获取完整记忆状态快照 */
|
|
86
|
+
getSnapshot(): MemorySnapshot;
|
|
87
|
+
/** 获取 Working Memory 实例(供中间件使用) */
|
|
88
|
+
getWorkingMemory(): WorkingMemory;
|
|
89
|
+
/** 获取 Semantic Memory 实例 */
|
|
90
|
+
getSemanticMemory(): SemanticMemoryStore;
|
|
91
|
+
/** 获取 Episodic Memory 实例 */
|
|
92
|
+
getEpisodicMemory(): EpisodicMemory;
|
|
93
|
+
/** 获取 session 持续时间(ms) */
|
|
94
|
+
getElapsedMs(): number;
|
|
95
|
+
/**
|
|
96
|
+
* 从 Working Memory 自动提取关键事件到 Episodic
|
|
97
|
+
*/
|
|
98
|
+
private autoRecordFromWorking;
|
|
99
|
+
/** 刷新所有持久化(确保写入磁盘) */
|
|
100
|
+
flush(): void;
|
|
101
|
+
/** 生成状态报告 */
|
|
102
|
+
statusReport(): string;
|
|
103
|
+
/**
|
|
104
|
+
* 从现有的 MEMORY.md 文件迁移数据到 Semantic Memory
|
|
105
|
+
* 只运行一次,迁移后旧文件可以保留或删除
|
|
106
|
+
*/
|
|
107
|
+
migrateFromMemoryMd(memoryPath: string): {
|
|
108
|
+
imported: number;
|
|
109
|
+
skipped: number;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** 获取全局 MemoryBridge 实例 */
|
|
113
|
+
export declare function getMemoryBridge(workspaceRoot?: string): MemoryBridge;
|
|
114
|
+
/** 重置全局实例(用于测试) */
|
|
115
|
+
export declare function resetMemoryBridge(): void;
|
|
116
|
+
//# sourceMappingURL=memory-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-bridge.d.ts","sourceRoot":"","sources":["../../src/adapters/memory-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,aAAa,EAAE,MAAM;IAWjC;;;OAGG;IACH,cAAc,IAAI,MAAM;IAqBxB;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrE;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAIxD;;;;OAIG;IACH,YAAY,CAAC,UAAU,UAAO,GAAG,IAAI;IAYrC;;OAEG;IACH,WAAW,CACT,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,eAAe,GAAE,MAAM,EAAO,EAC9B,eAAe,SAAI,GAClB,IAAI;IAMP,YAAY;IACZ,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7C,aAAa;IACb,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIhD,aAAa;IACb,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,cAAc;IACd,iBAAiB,CACf,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,GACA,IAAI;IAIP,cAAc;IACd,iBAAiB,CAAC,IAAI,EAAE,MAAM;;;;;;;IAM9B,iBAAiB;IACjB,WAAW,IAAI,cAAc;IAQ7B,mCAAmC;IACnC,gBAAgB,IAAI,aAAa;IAIjC,4BAA4B;IAC5B,iBAAiB,IAAI,mBAAmB;IAIxC,4BAA4B;IAC5B,iBAAiB,IAAI,cAAc;IAInC,0BAA0B;IAC1B,YAAY,IAAI,MAAM;IAMtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6B7B,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAIb,aAAa;IACb,YAAY,IAAI,MAAM;IAgBtB;;;OAGG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAsF/E;AAKD,2BAA2B;AAC3B,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,YAAY,CAQpE;AAED,mBAAmB;AACnB,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Memory Bridge — 将 AgentOS Memory 三层接入 OpenClaw 工作流
|
|
4
|
+
*
|
|
5
|
+
* ┌─────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
6
|
+
* │ MEMORY.md │ → │ Semantic │ ← │ 会话中学习 │
|
|
7
|
+
* │ 旧文件系统 │ │ Memory │ │ 新规则/偏好 │
|
|
8
|
+
* └─────────────┘ └──────┬───────┘ └──────────────┘
|
|
9
|
+
* │
|
|
10
|
+
* ┌──────────────────────┼──────────────────────┐
|
|
11
|
+
* │ │ │
|
|
12
|
+
* ▼ ▼ ▼
|
|
13
|
+
* Session启动 Session运行 Session结束
|
|
14
|
+
* 注入上下文 工具结果缓存 事件→Episodic
|
|
15
|
+
* 消息→Working 偏好→Semantic
|
|
16
|
+
*
|
|
17
|
+
* 用法:
|
|
18
|
+
* 1. Session 启动: MemoryBridge.onSessionStart(workspaceRoot)
|
|
19
|
+
* → 返回要注入的上下文字符串
|
|
20
|
+
* 2. Session 中: MemoryBridge.getWorkingMemory()
|
|
21
|
+
* → 获取 Working Memory 实例
|
|
22
|
+
* 3. Session 结束: MemoryBridge.onSessionEnd()
|
|
23
|
+
* → 清空 Working、同步 Episodic
|
|
24
|
+
*/
|
|
25
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
28
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
29
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
30
|
+
}
|
|
31
|
+
Object.defineProperty(o, k2, desc);
|
|
32
|
+
}) : (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
o[k2] = m[k];
|
|
35
|
+
}));
|
|
36
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
37
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
38
|
+
}) : function(o, v) {
|
|
39
|
+
o["default"] = v;
|
|
40
|
+
});
|
|
41
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
42
|
+
var ownKeys = function(o) {
|
|
43
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
44
|
+
var ar = [];
|
|
45
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
46
|
+
return ar;
|
|
47
|
+
};
|
|
48
|
+
return ownKeys(o);
|
|
49
|
+
};
|
|
50
|
+
return function (mod) {
|
|
51
|
+
if (mod && mod.__esModule) return mod;
|
|
52
|
+
var result = {};
|
|
53
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
54
|
+
__setModuleDefault(result, mod);
|
|
55
|
+
return result;
|
|
56
|
+
};
|
|
57
|
+
})();
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.MemoryBridge = void 0;
|
|
60
|
+
exports.getMemoryBridge = getMemoryBridge;
|
|
61
|
+
exports.resetMemoryBridge = resetMemoryBridge;
|
|
62
|
+
const working_1 = require("../memory/working");
|
|
63
|
+
const episodic_1 = require("../memory/episodic");
|
|
64
|
+
const semantic_1 = require("../memory/semantic");
|
|
65
|
+
const fs = __importStar(require("fs"));
|
|
66
|
+
class MemoryBridge {
|
|
67
|
+
working;
|
|
68
|
+
episodic;
|
|
69
|
+
semantic;
|
|
70
|
+
started = false;
|
|
71
|
+
startTime;
|
|
72
|
+
constructor(workspaceRoot) {
|
|
73
|
+
this.working = new working_1.WorkingMemory(50000);
|
|
74
|
+
this.episodic = new episodic_1.EpisodicMemory(500);
|
|
75
|
+
this.semantic = new semantic_1.SemanticMemoryStore();
|
|
76
|
+
this.startTime = Date.now();
|
|
77
|
+
// 持久化到 .agentos/ 目录
|
|
78
|
+
this.episodic.enablePersistence(workspaceRoot);
|
|
79
|
+
this.semantic.enablePersistence(workspaceRoot);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Session 启动时调用
|
|
83
|
+
* 返回要注入到系统提示的上下文摘要
|
|
84
|
+
*/
|
|
85
|
+
onSessionStart() {
|
|
86
|
+
this.started = true;
|
|
87
|
+
this.startTime = Date.now();
|
|
88
|
+
const parts = [];
|
|
89
|
+
// 1. Semantic Memory 上下文(替代 MEMORY.md)
|
|
90
|
+
const semanticCtx = this.semantic.generateContextSummary();
|
|
91
|
+
if (semanticCtx) {
|
|
92
|
+
parts.push(semanticCtx);
|
|
93
|
+
}
|
|
94
|
+
// 2. Episodic Memory 上下文(最近7天+高重要性事件)
|
|
95
|
+
const episodicCtx = this.episodic.generateContextSummary();
|
|
96
|
+
if (episodicCtx) {
|
|
97
|
+
parts.push(episodicCtx);
|
|
98
|
+
}
|
|
99
|
+
return parts.join('\n\n---\n\n');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Session 运行中:记录一条消息到 Working Memory
|
|
103
|
+
*/
|
|
104
|
+
recordMessage(role, content) {
|
|
105
|
+
this.working.addMessage(role, content);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Session 运行中:缓存工具调用结果
|
|
109
|
+
*/
|
|
110
|
+
cacheToolResult(toolName, result) {
|
|
111
|
+
this.working.cacheToolResult(toolName, result);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Session 结束:清空 Working + 同步到 Episodic
|
|
115
|
+
*
|
|
116
|
+
* @param autoRecord 是否自动从 Working 提取事件到 Episodic
|
|
117
|
+
*/
|
|
118
|
+
onSessionEnd(autoRecord = true) {
|
|
119
|
+
if (!this.started)
|
|
120
|
+
return;
|
|
121
|
+
if (autoRecord) {
|
|
122
|
+
this.autoRecordFromWorking();
|
|
123
|
+
}
|
|
124
|
+
this.episodic.record('note', `Session ended`, ['session'], [], 0);
|
|
125
|
+
this.working.clear();
|
|
126
|
+
this.started = false;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 记录自定义事件到 Episodic Memory
|
|
130
|
+
*/
|
|
131
|
+
recordEvent(type, content, tags = [], relatedEntities = [], importanceBoost = 0) {
|
|
132
|
+
this.episodic.record(type, content, tags, relatedEntities, importanceBoost);
|
|
133
|
+
}
|
|
134
|
+
// === Semantic Memory 快捷方法 ===
|
|
135
|
+
/** 学习新规则 */
|
|
136
|
+
learnRule(rule, source) {
|
|
137
|
+
this.semantic.learnRule(rule, source);
|
|
138
|
+
}
|
|
139
|
+
/** 设置用户偏好 */
|
|
140
|
+
setPreference(key, value) {
|
|
141
|
+
this.semantic.setPreference(key, value);
|
|
142
|
+
}
|
|
143
|
+
/** 添加用户事实 */
|
|
144
|
+
addFact(fact) {
|
|
145
|
+
this.semantic.addFact(fact);
|
|
146
|
+
}
|
|
147
|
+
/** 更新项目上下文 */
|
|
148
|
+
setProjectContext(name, ctx) {
|
|
149
|
+
this.semantic.setProjectContext(name, ctx);
|
|
150
|
+
}
|
|
151
|
+
/** 获取项目上下文 */
|
|
152
|
+
getProjectContext(name) {
|
|
153
|
+
return this.semantic.getProjectContext(name);
|
|
154
|
+
}
|
|
155
|
+
// === 查询方法 ===
|
|
156
|
+
/** 获取完整记忆状态快照 */
|
|
157
|
+
getSnapshot() {
|
|
158
|
+
return {
|
|
159
|
+
semantic: this.semantic.getMemory(),
|
|
160
|
+
episodic: { events: this.episodic.getAll(), count: this.episodic.count },
|
|
161
|
+
working: this.working.getState(),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/** 获取 Working Memory 实例(供中间件使用) */
|
|
165
|
+
getWorkingMemory() {
|
|
166
|
+
return this.working;
|
|
167
|
+
}
|
|
168
|
+
/** 获取 Semantic Memory 实例 */
|
|
169
|
+
getSemanticMemory() {
|
|
170
|
+
return this.semantic;
|
|
171
|
+
}
|
|
172
|
+
/** 获取 Episodic Memory 实例 */
|
|
173
|
+
getEpisodicMemory() {
|
|
174
|
+
return this.episodic;
|
|
175
|
+
}
|
|
176
|
+
/** 获取 session 持续时间(ms) */
|
|
177
|
+
getElapsedMs() {
|
|
178
|
+
return Date.now() - this.startTime;
|
|
179
|
+
}
|
|
180
|
+
// === 私有方法 ===
|
|
181
|
+
/**
|
|
182
|
+
* 从 Working Memory 自动提取关键事件到 Episodic
|
|
183
|
+
*/
|
|
184
|
+
autoRecordFromWorking() {
|
|
185
|
+
const state = this.working.getState();
|
|
186
|
+
// 记录消息数
|
|
187
|
+
if (state.recentMessages.length > 0) {
|
|
188
|
+
const userMsgs = state.recentMessages.filter((m) => m.role === 'user').length;
|
|
189
|
+
const agentMsgs = state.recentMessages.filter((m) => m.role === 'agent').length;
|
|
190
|
+
this.episodic.record('note', `Session: ${userMsgs} user msgs, ${agentMsgs} agent responses`, ['session', 'messages'], [], 0);
|
|
191
|
+
}
|
|
192
|
+
// 记录工具调用
|
|
193
|
+
if (state.recentToolResults.size > 0) {
|
|
194
|
+
const toolNames = Array.from(state.recentToolResults.keys());
|
|
195
|
+
this.episodic.record('tool_call', `Tools used: ${toolNames.join(', ')}`, ['tools', ...toolNames], [], 0);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/** 刷新所有持久化(确保写入磁盘) */
|
|
199
|
+
flush() {
|
|
200
|
+
this.semantic.flush();
|
|
201
|
+
}
|
|
202
|
+
/** 生成状态报告 */
|
|
203
|
+
statusReport() {
|
|
204
|
+
const snapshot = this.getSnapshot();
|
|
205
|
+
const sessionMinutes = Math.round(this.getElapsedMs() / 60000);
|
|
206
|
+
return [
|
|
207
|
+
'═══ AgentOS Memory Bridge ═══',
|
|
208
|
+
`⏱ Session: ${sessionMinutes} min`,
|
|
209
|
+
`🧠 Working: ${snapshot.working.recentMessages ? snapshot.working.recentMessages?.toString().length : 0} messages`,
|
|
210
|
+
`📖 Episodic: ${this.episodic.count} events`,
|
|
211
|
+
`💎 Semantic: ${Object.keys(this.semantic.getMemory().userPreferences || {}).length} prefs, ${this.semantic.getMemory().userFacts.length} facts`,
|
|
212
|
+
'══════════════════════════════',
|
|
213
|
+
].join('\n');
|
|
214
|
+
}
|
|
215
|
+
// === 迁移 ===
|
|
216
|
+
/**
|
|
217
|
+
* 从现有的 MEMORY.md 文件迁移数据到 Semantic Memory
|
|
218
|
+
* 只运行一次,迁移后旧文件可以保留或删除
|
|
219
|
+
*/
|
|
220
|
+
migrateFromMemoryMd(memoryPath) {
|
|
221
|
+
const result = { imported: 0, skipped: 0 };
|
|
222
|
+
if (!fs.existsSync(memoryPath)) {
|
|
223
|
+
console.warn('MEMORY.md not found at', memoryPath);
|
|
224
|
+
return result;
|
|
225
|
+
}
|
|
226
|
+
// 简单解析 MEMORY.md 的 Markdown 结构
|
|
227
|
+
const content = fs.readFileSync(memoryPath, 'utf-8');
|
|
228
|
+
const lines = content.split('\n');
|
|
229
|
+
let currentSection = '';
|
|
230
|
+
const sections = {};
|
|
231
|
+
for (const line of lines) {
|
|
232
|
+
if (line.startsWith('## ')) {
|
|
233
|
+
currentSection = line.replace('## ', '').trim();
|
|
234
|
+
sections[currentSection] = [];
|
|
235
|
+
}
|
|
236
|
+
else if (currentSection && line.trim().startsWith('- ')) {
|
|
237
|
+
sections[currentSection]?.push(line.trim().replace(/^-\s*/, ''));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// 导入项目上下文
|
|
241
|
+
const coderevSection = sections['📦 核心项目:coderev'] || sections['📦 coderev'] || [];
|
|
242
|
+
if (coderevSection.length > 0) {
|
|
243
|
+
this.semantic.setProjectContext('coderev', {
|
|
244
|
+
description: 'AI 驱动的代码审查 CLI 工具',
|
|
245
|
+
techStack: ['TypeScript', 'Node.js', 'CLI'],
|
|
246
|
+
conventions: coderevSection.slice(0, 5),
|
|
247
|
+
});
|
|
248
|
+
result.imported++;
|
|
249
|
+
}
|
|
250
|
+
const agentosSection = sections['📦 Sentinel AgentOS'] || sections['AgentOS'] || [];
|
|
251
|
+
if (agentosSection.length > 0 || sections['Sentinel AgentOS(项目 #2)']) {
|
|
252
|
+
this.semantic.setProjectContext('agentos', {
|
|
253
|
+
description: 'AI Agent 操作系统 — 确定性 Guard + 分层记忆 + 自动评估',
|
|
254
|
+
techStack: ['TypeScript', 'Node.js', 'Jest'],
|
|
255
|
+
});
|
|
256
|
+
result.imported++;
|
|
257
|
+
}
|
|
258
|
+
// 导入用户事实
|
|
259
|
+
if (sections['👤 关于老板']) {
|
|
260
|
+
for (const fact of sections['👤 关于老板']) {
|
|
261
|
+
this.semantic.addFact(fact);
|
|
262
|
+
result.imported++;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
if (sections['🆔 关于我']) {
|
|
266
|
+
for (const fact of sections['🆔 关于我']) {
|
|
267
|
+
this.semantic.addFact(fact);
|
|
268
|
+
result.imported++;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// 导入工作方式中的规则
|
|
272
|
+
const workwaySection = sections['🤖 我的工作方式'] || [];
|
|
273
|
+
for (const rule of workwaySection) {
|
|
274
|
+
this.semantic.learnRule(rule, 'MEMORY.md migration');
|
|
275
|
+
result.imported++;
|
|
276
|
+
}
|
|
277
|
+
// 导入环境记录
|
|
278
|
+
if (sections['💻 环境记录']) {
|
|
279
|
+
for (const env of sections['💻 环境记录']) {
|
|
280
|
+
this.semantic.addFact(env);
|
|
281
|
+
result.imported++;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// 导入关键决策
|
|
285
|
+
const decisionsSection = sections['💡 关键决策记录'] || [];
|
|
286
|
+
if (decisionsSection.length > 0) {
|
|
287
|
+
for (const decision of decisionsSection) {
|
|
288
|
+
this.episodic.record('decision', decision, ['memigration'], []);
|
|
289
|
+
result.imported++;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
this.semantic.flush();
|
|
293
|
+
return result;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
exports.MemoryBridge = MemoryBridge;
|
|
297
|
+
// ============= Singleton =============
|
|
298
|
+
let _bridge = null;
|
|
299
|
+
/** 获取全局 MemoryBridge 实例 */
|
|
300
|
+
function getMemoryBridge(workspaceRoot) {
|
|
301
|
+
if (!_bridge && workspaceRoot) {
|
|
302
|
+
_bridge = new MemoryBridge(workspaceRoot);
|
|
303
|
+
}
|
|
304
|
+
if (!_bridge) {
|
|
305
|
+
throw new Error('MemoryBridge not initialized. Call getMemoryBridge(workspaceRoot) first.');
|
|
306
|
+
}
|
|
307
|
+
return _bridge;
|
|
308
|
+
}
|
|
309
|
+
/** 重置全局实例(用于测试) */
|
|
310
|
+
function resetMemoryBridge() {
|
|
311
|
+
if (_bridge) {
|
|
312
|
+
_bridge.flush();
|
|
313
|
+
_bridge = null;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=memory-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-bridge.js","sourceRoot":"","sources":["../../src/adapters/memory-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/adapters/migrate.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
/**
|
|
37
|
+
* 迁移脚本:从现有 MEMORY.md → AgentOS Semantic Memory
|
|
38
|
+
*
|
|
39
|
+
* 运行: npx ts-node src/adapters/migrate.ts
|
|
40
|
+
* 迁移后旧 MEMORY.md 不会删除,只是作为额外备份
|
|
41
|
+
*/
|
|
42
|
+
const memory_bridge_1 = require("./memory-bridge");
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const WORKSPACE = path.resolve(__dirname, '..', '..', '..', '..');
|
|
45
|
+
const MEMORY_MD = path.join(WORKSPACE, 'MEMORY.md');
|
|
46
|
+
console.log('═══════════════════════════════');
|
|
47
|
+
console.log('🧠 MEMORY.md → AgentOS 迁移');
|
|
48
|
+
console.log('═══════════════════════════════');
|
|
49
|
+
console.log(`Workspace: ${WORKSPACE}`);
|
|
50
|
+
console.log(`MEMORY.md: ${MEMORY_MD}`);
|
|
51
|
+
console.log('');
|
|
52
|
+
const bridge = new memory_bridge_1.MemoryBridge(WORKSPACE);
|
|
53
|
+
const result = bridge.migrateFromMemoryMd(MEMORY_MD);
|
|
54
|
+
bridge.flush();
|
|
55
|
+
console.log(`✅ 迁移完成!`);
|
|
56
|
+
console.log(` 导入: ${result.imported} 条`);
|
|
57
|
+
console.log(` 跳过: ${result.skipped} 条`);
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log('📊 迁移后状态:');
|
|
60
|
+
console.log(bridge.statusReport());
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log('💡 MEMORY.md 文件未删除,可手动删除或保留作备份。');
|
|
63
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/adapters/migrate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,mDAA+C;AAC/C,2CAA6B;AAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAClE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAEpD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAC/C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AACzC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAC/C,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEhB,MAAM,MAAM,GAAG,IAAI,4BAAY,CAAC,SAAS,CAAC,CAAC;AAE3C,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACrD,MAAM,CAAC,KAAK,EAAE,CAAC;AAEf,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvB,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;AAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -340,8 +340,11 @@ const guard = require('../sentinel-guard');
|
|
|
340
340
|
fatal(`Unknown command: ${cmd}. Run 'sentinel-agentos help' for usage.`);
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
343
|
+
// Only auto-run when invoked directly, not via require/test
|
|
344
|
+
if (require.main === module) {
|
|
345
|
+
main().catch((err) => {
|
|
346
|
+
console.error('❌', err.message);
|
|
347
|
+
process.exit(1);
|
|
348
|
+
});
|
|
349
|
+
}
|
|
347
350
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|