sentinel-agentos 0.3.8 → 0.3.10

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.
Files changed (97) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1797 -0
  3. package/dist/adapters/evaluation-bridge.d.ts +78 -0
  4. package/dist/adapters/evaluation-bridge.d.ts.map +1 -0
  5. package/dist/adapters/evaluation-bridge.js +273 -0
  6. package/dist/adapters/evaluation-bridge.js.map +1 -0
  7. package/dist/adapters/memory-bridge.d.ts +110 -0
  8. package/dist/adapters/memory-bridge.d.ts.map +1 -0
  9. package/dist/adapters/memory-bridge.js +316 -0
  10. package/dist/adapters/memory-bridge.js.map +1 -0
  11. package/dist/adapters/migrate.d.ts +2 -0
  12. package/dist/adapters/migrate.d.ts.map +1 -0
  13. package/dist/adapters/migrate.js +63 -0
  14. package/dist/adapters/migrate.js.map +1 -0
  15. package/dist/api.d.ts +151 -0
  16. package/dist/api.d.ts.map +1 -0
  17. package/dist/api.js +179 -0
  18. package/dist/api.js.map +1 -0
  19. package/dist/cli.d.ts +16 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +350 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/core.d.ts +156 -0
  24. package/dist/core.d.ts.map +1 -0
  25. package/dist/core.js +400 -0
  26. package/dist/core.js.map +1 -0
  27. package/dist/evaluator/exec-evaluator.d.ts +102 -0
  28. package/dist/evaluator/exec-evaluator.d.ts.map +1 -0
  29. package/dist/evaluator/exec-evaluator.js +266 -0
  30. package/dist/evaluator/exec-evaluator.js.map +1 -0
  31. package/dist/evaluator/feedback.d.ts +102 -0
  32. package/dist/evaluator/feedback.d.ts.map +1 -0
  33. package/dist/evaluator/feedback.js +478 -0
  34. package/dist/evaluator/feedback.js.map +1 -0
  35. package/dist/evaluator/profiler.d.ts +56 -0
  36. package/dist/evaluator/profiler.d.ts.map +1 -0
  37. package/dist/evaluator/profiler.js +140 -0
  38. package/dist/evaluator/profiler.js.map +1 -0
  39. package/dist/guard/audit-log.d.ts +48 -0
  40. package/dist/guard/audit-log.d.ts.map +1 -0
  41. package/dist/guard/audit-log.js +213 -0
  42. package/dist/guard/audit-log.js.map +1 -0
  43. package/dist/guard/container-sandbox.d.ts +25 -0
  44. package/dist/guard/container-sandbox.d.ts.map +1 -0
  45. package/dist/guard/container-sandbox.js +145 -0
  46. package/dist/guard/container-sandbox.js.map +1 -0
  47. package/dist/guard/risk-gate.d.ts +101 -0
  48. package/dist/guard/risk-gate.d.ts.map +1 -0
  49. package/dist/guard/risk-gate.js +200 -0
  50. package/dist/guard/risk-gate.js.map +1 -0
  51. package/dist/guard/sandbox.d.ts +112 -0
  52. package/dist/guard/sandbox.d.ts.map +1 -0
  53. package/dist/guard/sandbox.js +379 -0
  54. package/dist/guard/sandbox.js.map +1 -0
  55. package/dist/guard/schema-gate.d.ts +90 -0
  56. package/dist/guard/schema-gate.d.ts.map +1 -0
  57. package/dist/guard/schema-gate.js +452 -0
  58. package/dist/guard/schema-gate.js.map +1 -0
  59. package/dist/guard/snapshot-verify.d.ts +111 -0
  60. package/dist/guard/snapshot-verify.d.ts.map +1 -0
  61. package/dist/guard/snapshot-verify.js +571 -0
  62. package/dist/guard/snapshot-verify.js.map +1 -0
  63. package/dist/index.d.ts +28 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +59 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/memory/episodic.d.ts +80 -0
  68. package/dist/memory/episodic.d.ts.map +1 -0
  69. package/dist/memory/episodic.js +305 -0
  70. package/dist/memory/episodic.js.map +1 -0
  71. package/dist/memory/semantic.d.ts +68 -0
  72. package/dist/memory/semantic.d.ts.map +1 -0
  73. package/dist/memory/semantic.js +299 -0
  74. package/dist/memory/semantic.js.map +1 -0
  75. package/dist/memory/working.d.ts +53 -0
  76. package/dist/memory/working.d.ts.map +1 -0
  77. package/dist/memory/working.js +166 -0
  78. package/dist/memory/working.js.map +1 -0
  79. package/dist/middleware/openclaw.d.ts +45 -0
  80. package/dist/middleware/openclaw.d.ts.map +1 -0
  81. package/dist/middleware/openclaw.js +95 -0
  82. package/dist/middleware/openclaw.js.map +1 -0
  83. package/dist/middleware/wrapper.d.ts +54 -0
  84. package/dist/middleware/wrapper.d.ts.map +1 -0
  85. package/dist/middleware/wrapper.js +155 -0
  86. package/dist/middleware/wrapper.js.map +1 -0
  87. package/dist/server.d.ts +45 -0
  88. package/dist/server.d.ts.map +1 -0
  89. package/dist/server.js +256 -0
  90. package/dist/server.js.map +1 -0
  91. package/dist/src/dashboard.html +9 -7
  92. package/dist/types/index.d.ts +228 -0
  93. package/dist/types/index.d.ts.map +1 -0
  94. package/dist/types/index.js +23 -0
  95. package/dist/types/index.js.map +1 -0
  96. package/package.json +1 -1
  97. package/scripts/sentinel-light.js +234 -0
@@ -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,110 @@
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): Record<string, unknown> | undefined;
79
+ /** 获取完整记忆状态快照 */
80
+ getSnapshot(): MemorySnapshot;
81
+ /** 获取 Working Memory 实例(供中间件使用) */
82
+ getWorkingMemory(): WorkingMemory;
83
+ /** 获取 Semantic Memory 实例 */
84
+ getSemanticMemory(): SemanticMemoryStore;
85
+ /** 获取 Episodic Memory 实例 */
86
+ getEpisodicMemory(): EpisodicMemory;
87
+ /** 获取 session 持续时间(ms) */
88
+ getElapsedMs(): number;
89
+ /**
90
+ * 从 Working Memory 自动提取关键事件到 Episodic
91
+ */
92
+ private autoRecordFromWorking;
93
+ /** 刷新所有持久化(确保写入磁盘) */
94
+ flush(): void;
95
+ /** 生成状态报告 */
96
+ statusReport(): string;
97
+ /**
98
+ * 从现有的 MEMORY.md 文件迁移数据到 Semantic Memory
99
+ * 只运行一次,迁移后旧文件可以保留或删除
100
+ */
101
+ migrateFromMemoryMd(memoryPath: string): {
102
+ imported: number;
103
+ skipped: number;
104
+ };
105
+ }
106
+ /** 获取全局 MemoryBridge 实例 */
107
+ export declare function getMemoryBridge(workspaceRoot?: string): MemoryBridge;
108
+ /** 重置全局实例(用于测试) */
109
+ export declare function resetMemoryBridge(): void;
110
+ //# 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"}