@memtensor/memos-local-openclaw-plugin 0.3.20 → 1.0.1
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 +239 -22
- package/dist/capture/index.d.ts +1 -1
- package/dist/capture/index.d.ts.map +1 -1
- package/dist/capture/index.js +33 -8
- package/dist/capture/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ingest/providers/anthropic.d.ts.map +1 -1
- package/dist/ingest/providers/anthropic.js +22 -8
- package/dist/ingest/providers/anthropic.js.map +1 -1
- package/dist/ingest/providers/bedrock.d.ts.map +1 -1
- package/dist/ingest/providers/bedrock.js +22 -8
- package/dist/ingest/providers/bedrock.js.map +1 -1
- package/dist/ingest/providers/gemini.d.ts.map +1 -1
- package/dist/ingest/providers/gemini.js +22 -8
- package/dist/ingest/providers/gemini.js.map +1 -1
- package/dist/ingest/providers/index.d.ts +13 -18
- package/dist/ingest/providers/index.d.ts.map +1 -1
- package/dist/ingest/providers/index.js +213 -139
- package/dist/ingest/providers/index.js.map +1 -1
- package/dist/ingest/providers/openai.d.ts +1 -1
- package/dist/ingest/providers/openai.d.ts.map +1 -1
- package/dist/ingest/providers/openai.js +37 -17
- package/dist/ingest/providers/openai.js.map +1 -1
- package/dist/ingest/task-processor.d.ts +28 -3
- package/dist/ingest/task-processor.d.ts.map +1 -1
- package/dist/ingest/task-processor.js +166 -67
- package/dist/ingest/task-processor.js.map +1 -1
- package/dist/ingest/worker.d.ts.map +1 -1
- package/dist/ingest/worker.js +97 -75
- package/dist/ingest/worker.js.map +1 -1
- package/dist/shared/llm-call.d.ts +26 -0
- package/dist/shared/llm-call.d.ts.map +1 -0
- package/dist/shared/llm-call.js +163 -0
- package/dist/shared/llm-call.js.map +1 -0
- package/dist/skill/evaluator.d.ts +0 -3
- package/dist/skill/evaluator.d.ts.map +1 -1
- package/dist/skill/evaluator.js +34 -59
- package/dist/skill/evaluator.js.map +1 -1
- package/dist/skill/evolver.d.ts +22 -1
- package/dist/skill/evolver.d.ts.map +1 -1
- package/dist/skill/evolver.js +191 -32
- package/dist/skill/evolver.js.map +1 -1
- package/dist/skill/generator.d.ts +0 -3
- package/dist/skill/generator.d.ts.map +1 -1
- package/dist/skill/generator.js +15 -50
- package/dist/skill/generator.js.map +1 -1
- package/dist/skill/upgrader.d.ts +0 -2
- package/dist/skill/upgrader.d.ts.map +1 -1
- package/dist/skill/upgrader.js +4 -39
- package/dist/skill/upgrader.js.map +1 -1
- package/dist/skill/validator.d.ts +0 -2
- package/dist/skill/validator.d.ts.map +1 -1
- package/dist/skill/validator.js +14 -44
- package/dist/skill/validator.js.map +1 -1
- package/dist/storage/sqlite.d.ts +13 -2
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +92 -15
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/tools/memory-get.d.ts.map +1 -1
- package/dist/tools/memory-get.js +5 -1
- package/dist/tools/memory-get.js.map +1 -1
- package/dist/tools/memory-search.d.ts.map +1 -1
- package/dist/tools/memory-search.js +5 -0
- package/dist/tools/memory-search.js.map +1 -1
- package/dist/tools/memory-timeline.d.ts.map +1 -1
- package/dist/tools/memory-timeline.js +11 -2
- package/dist/tools/memory-timeline.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/viewer/html.d.ts +1 -1
- package/dist/viewer/html.d.ts.map +1 -1
- package/dist/viewer/html.js +380 -26
- package/dist/viewer/html.js.map +1 -1
- package/dist/viewer/server.d.ts +9 -0
- package/dist/viewer/server.d.ts.map +1 -1
- package/dist/viewer/server.js +549 -184
- package/dist/viewer/server.js.map +1 -1
- package/index.ts +9 -3
- package/package.json +2 -1
- package/src/capture/index.ts +39 -10
- package/src/index.ts +3 -2
- package/src/ingest/providers/anthropic.ts +22 -8
- package/src/ingest/providers/bedrock.ts +22 -8
- package/src/ingest/providers/gemini.ts +22 -8
- package/src/ingest/providers/index.ts +192 -142
- package/src/ingest/providers/openai.ts +37 -17
- package/src/ingest/task-processor.ts +183 -65
- package/src/ingest/worker.ts +98 -77
- package/src/shared/llm-call.ts +144 -0
- package/src/skill/evaluator.ts +35 -64
- package/src/skill/evolver.ts +201 -33
- package/src/skill/generator.ts +16 -59
- package/src/skill/upgrader.ts +5 -43
- package/src/skill/validator.ts +15 -47
- package/src/storage/sqlite.ts +107 -15
- package/src/tools/memory-get.ts +6 -1
- package/src/tools/memory-search.ts +6 -0
- package/src/tools/memory-timeline.ts +13 -1
- package/src/types.ts +2 -1
- package/src/viewer/html.ts +380 -26
- package/src/viewer/server.ts +535 -197
package/dist/ingest/worker.js
CHANGED
|
@@ -18,7 +18,8 @@ class IngestWorker {
|
|
|
18
18
|
this.store = store;
|
|
19
19
|
this.embedder = embedder;
|
|
20
20
|
this.ctx = ctx;
|
|
21
|
-
|
|
21
|
+
const strongCfg = ctx.config.skillEvolution?.summarizer;
|
|
22
|
+
this.summarizer = new providers_1.Summarizer(ctx.config.summarizer, ctx.log, strongCfg);
|
|
22
23
|
this.taskProcessor = new task_processor_1.TaskProcessor(store, ctx);
|
|
23
24
|
}
|
|
24
25
|
getTaskProcessor() { return this.taskProcessor; }
|
|
@@ -41,73 +42,82 @@ class IngestWorker {
|
|
|
41
42
|
}
|
|
42
43
|
async processQueue() {
|
|
43
44
|
this.processing = true;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
45
|
+
try {
|
|
46
|
+
while (this.queue.length > 0) {
|
|
47
|
+
const t0 = performance.now();
|
|
48
|
+
const batchSize = this.queue.length;
|
|
49
|
+
let lastSessionKey;
|
|
50
|
+
let lastOwner;
|
|
51
|
+
let lastTimestamp = 0;
|
|
52
|
+
let stored = 0;
|
|
53
|
+
let skipped = 0;
|
|
54
|
+
let merged = 0;
|
|
55
|
+
let duplicated = 0;
|
|
56
|
+
let errors = 0;
|
|
57
|
+
const resultLines = [];
|
|
58
|
+
const inputLines = [];
|
|
59
|
+
while (this.queue.length > 0) {
|
|
60
|
+
const msg = this.queue.shift();
|
|
61
|
+
inputLines.push(`[${msg.role}] ${msg.content}`);
|
|
62
|
+
try {
|
|
63
|
+
const result = await this.ingestMessage(msg);
|
|
64
|
+
lastSessionKey = msg.sessionKey;
|
|
65
|
+
lastOwner = msg.owner ?? "agent:main";
|
|
66
|
+
lastTimestamp = Math.max(lastTimestamp, msg.timestamp);
|
|
67
|
+
if (result === "skipped") {
|
|
68
|
+
skipped++;
|
|
69
|
+
resultLines.push(`[${msg.role}] ⏭ exact-dup → ${msg.content}`);
|
|
70
|
+
}
|
|
71
|
+
else if (result.action === "stored") {
|
|
72
|
+
stored++;
|
|
73
|
+
resultLines.push(`[${msg.role}] ✅ stored → ${result.summary ?? msg.content}`);
|
|
74
|
+
}
|
|
75
|
+
else if (result.action === "duplicate") {
|
|
76
|
+
duplicated++;
|
|
77
|
+
resultLines.push(`[${msg.role}] 🔁 dedup(${result.reason ?? "similar"}) → ${msg.content}`);
|
|
78
|
+
}
|
|
79
|
+
else if (result.action === "merged") {
|
|
80
|
+
merged++;
|
|
81
|
+
resultLines.push(`[${msg.role}] 🔀 merged → ${msg.content}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
errors++;
|
|
86
|
+
resultLines.push(`[${msg.role}] ❌ error → ${msg.content}`);
|
|
87
|
+
this.ctx.log.error(`Failed to ingest message turn=${msg.turnId}: ${err}`);
|
|
88
|
+
}
|
|
71
89
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
90
|
+
const dur = performance.now() - t0;
|
|
91
|
+
if (stored + merged > 0 || skipped > 0 || duplicated > 0) {
|
|
92
|
+
this.store.recordToolCall("memory_add", dur, errors === 0);
|
|
93
|
+
try {
|
|
94
|
+
const inputInfo = {
|
|
95
|
+
session: lastSessionKey,
|
|
96
|
+
messages: batchSize,
|
|
97
|
+
details: inputLines,
|
|
98
|
+
};
|
|
99
|
+
const stats = [`stored=${stored}`, skipped > 0 ? `skipped=${skipped}` : null, duplicated > 0 ? `dedup=${duplicated}` : null, merged > 0 ? `merged=${merged}` : null, errors > 0 ? `errors=${errors}` : null].filter(Boolean).join(", ");
|
|
100
|
+
this.store.recordApiLog("memory_add", inputInfo, `${stats}\n${resultLines.join("\n")}`, dur, errors === 0);
|
|
101
|
+
}
|
|
102
|
+
catch (_) { /* best-effort */ }
|
|
75
103
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
104
|
+
if (lastSessionKey) {
|
|
105
|
+
this.ctx.log.debug(`Calling TaskProcessor.onChunksIngested session=${lastSessionKey} ts=${lastTimestamp} owner=${lastOwner}`);
|
|
106
|
+
try {
|
|
107
|
+
await this.taskProcessor.onChunksIngested(lastSessionKey, lastTimestamp, lastOwner);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
this.ctx.log.error(`TaskProcessor post-ingest error: ${err}`);
|
|
111
|
+
}
|
|
79
112
|
}
|
|
80
113
|
}
|
|
81
|
-
catch (err) {
|
|
82
|
-
errors++;
|
|
83
|
-
resultLines.push(`[${msg.role}] ❌ error → ${msg.content}`);
|
|
84
|
-
this.ctx.log.error(`Failed to ingest message turn=${msg.turnId}: ${err}`);
|
|
85
|
-
}
|
|
86
114
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
session: lastSessionKey,
|
|
93
|
-
messages: totalMessages,
|
|
94
|
-
details: inputLines,
|
|
95
|
-
};
|
|
96
|
-
const stats = [`stored=${stored}`, skipped > 0 ? `skipped=${skipped}` : null, duplicated > 0 ? `dedup=${duplicated}` : null, merged > 0 ? `merged=${merged}` : null, errors > 0 ? `errors=${errors}` : null].filter(Boolean).join(", ");
|
|
97
|
-
this.store.recordApiLog("memory_add", inputInfo, `${stats}\n${resultLines.join("\n")}`, dur, errors === 0);
|
|
98
|
-
}
|
|
99
|
-
catch (_) { /* best-effort */ }
|
|
100
|
-
}
|
|
101
|
-
if (lastSessionKey) {
|
|
102
|
-
this.ctx.log.debug(`Calling TaskProcessor.onChunksIngested session=${lastSessionKey} ts=${lastTimestamp} owner=${lastOwner}`);
|
|
103
|
-
this.taskProcessor
|
|
104
|
-
.onChunksIngested(lastSessionKey, lastTimestamp, lastOwner)
|
|
105
|
-
.catch((err) => this.ctx.log.error(`TaskProcessor post-ingest error: ${err}`));
|
|
115
|
+
finally {
|
|
116
|
+
this.processing = false;
|
|
117
|
+
for (const resolve of this.flushResolvers)
|
|
118
|
+
resolve();
|
|
119
|
+
this.flushResolvers = [];
|
|
106
120
|
}
|
|
107
|
-
this.processing = false;
|
|
108
|
-
for (const resolve of this.flushResolvers)
|
|
109
|
-
resolve();
|
|
110
|
-
this.flushResolvers = [];
|
|
111
121
|
}
|
|
112
122
|
async ingestMessage(msg) {
|
|
113
123
|
if (this.store.chunkExistsByContent(msg.sessionKey, msg.role, msg.content)) {
|
|
@@ -119,7 +129,7 @@ class IngestWorker {
|
|
|
119
129
|
}
|
|
120
130
|
async storeChunk(msg, content, kind, seq) {
|
|
121
131
|
const chunkId = (0, uuid_1.v4)();
|
|
122
|
-
|
|
132
|
+
let summary = await this.summarizer.summarize(content);
|
|
123
133
|
let embedding = null;
|
|
124
134
|
try {
|
|
125
135
|
[embedding] = await this.embedder.embed([summary]);
|
|
@@ -130,10 +140,21 @@ class IngestWorker {
|
|
|
130
140
|
let dedupStatus = "active";
|
|
131
141
|
let dedupTarget = null;
|
|
132
142
|
let dedupReason = null;
|
|
143
|
+
let mergedFromOld = null;
|
|
144
|
+
// Fast path: exact content_hash match within same owner (agent dimension)
|
|
145
|
+
const chunkOwner = msg.owner ?? "agent:main";
|
|
146
|
+
const existingByHash = this.store.findActiveChunkByHash(content, chunkOwner);
|
|
147
|
+
if (existingByHash) {
|
|
148
|
+
this.ctx.log.debug(`Exact-dup (owner=${chunkOwner}): hash match → existing=${existingByHash}`);
|
|
149
|
+
this.store.recordMergeHit(existingByHash, "DUPLICATE", "exact content hash match");
|
|
150
|
+
dedupStatus = "duplicate";
|
|
151
|
+
dedupTarget = existingByHash;
|
|
152
|
+
dedupReason = "exact content hash match";
|
|
153
|
+
}
|
|
133
154
|
// Smart dedup: find Top-5 similar chunks, then ask LLM to judge
|
|
134
|
-
if (embedding) {
|
|
135
|
-
const similarThreshold = this.ctx.config.dedup?.similarityThreshold ?? 0.
|
|
136
|
-
const dedupOwnerFilter = msg.owner ? [msg.owner
|
|
155
|
+
if (dedupStatus === "active" && embedding) {
|
|
156
|
+
const similarThreshold = this.ctx.config.dedup?.similarityThreshold ?? 0.60;
|
|
157
|
+
const dedupOwnerFilter = msg.owner ? [msg.owner] : undefined;
|
|
137
158
|
const topSimilar = (0, dedup_1.findTopSimilar)(this.store, embedding, similarThreshold, 5, this.ctx.log, dedupOwnerFilter);
|
|
138
159
|
if (topSimilar.length > 0) {
|
|
139
160
|
const candidates = topSimilar.map((s, i) => {
|
|
@@ -162,19 +183,20 @@ class IngestWorker {
|
|
|
162
183
|
const oldChunk = this.store.getChunk(targetChunkId);
|
|
163
184
|
const oldSummary = oldChunk?.summary ?? "";
|
|
164
185
|
this.store.recordMergeHit(targetChunkId, "UPDATE", dedupResult.reason, oldSummary, dedupResult.mergedSummary);
|
|
165
|
-
|
|
186
|
+
summary = dedupResult.mergedSummary;
|
|
166
187
|
try {
|
|
167
|
-
const [newEmb] = await this.embedder.embed([
|
|
188
|
+
const [newEmb] = await this.embedder.embed([summary]);
|
|
168
189
|
if (newEmb)
|
|
169
|
-
|
|
190
|
+
embedding = newEmb;
|
|
170
191
|
}
|
|
171
192
|
catch (err) {
|
|
172
|
-
this.ctx.log.warn(`Re-embed after
|
|
193
|
+
this.ctx.log.warn(`Re-embed after merge failed: ${err}`);
|
|
173
194
|
}
|
|
174
|
-
|
|
175
|
-
|
|
195
|
+
this.store.markDedupStatus(targetChunkId, "merged", chunkId, dedupResult.reason);
|
|
196
|
+
this.store.deleteEmbedding(targetChunkId);
|
|
197
|
+
mergedFromOld = targetChunkId;
|
|
176
198
|
dedupReason = dedupResult.reason;
|
|
177
|
-
this.ctx.log.debug(`Smart dedup: UPDATE →
|
|
199
|
+
this.ctx.log.debug(`Smart dedup: UPDATE → old chunk=${targetChunkId} retired, new chunk=${chunkId} gets merged summary, reason: ${dedupResult.reason}`);
|
|
178
200
|
}
|
|
179
201
|
}
|
|
180
202
|
if (dedupStatus === "active") {
|
|
@@ -213,8 +235,8 @@ class IngestWorker {
|
|
|
213
235
|
if (dedupStatus === "duplicate") {
|
|
214
236
|
return { action: "duplicate", summary, targetChunkId: dedupTarget ?? undefined, reason: dedupReason ?? undefined };
|
|
215
237
|
}
|
|
216
|
-
if (
|
|
217
|
-
return { action: "merged", summary, targetChunkId:
|
|
238
|
+
if (mergedFromOld) {
|
|
239
|
+
return { action: "merged", chunkId, summary, targetChunkId: mergedFromOld, reason: dedupReason ?? undefined };
|
|
218
240
|
}
|
|
219
241
|
return { action: "stored", chunkId, summary };
|
|
220
242
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/ingest/worker.ts"],"names":[],"mappings":";;;AAAA,+BAAkC;AAKlC,2CAAyC;AACzC,mCAAwD;AACxD,qDAAiD;AAEjD,MAAa,YAAY;IAQb;IACA;IACA;IATF,UAAU,CAAa;IACvB,aAAa,CAAgB;IAC7B,KAAK,GAA0B,EAAE,CAAC;IAClC,UAAU,GAAG,KAAK,CAAC;IACnB,cAAc,GAAsB,EAAE,CAAC;IAE/C,YACU,KAAkB,EAClB,QAAkB,EAClB,GAAkB;QAFlB,UAAK,GAAL,KAAK,CAAa;QAClB,aAAQ,GAAR,QAAQ,CAAU;QAClB,QAAG,GAAH,GAAG,CAAe;QAE1B,IAAI,CAAC,UAAU,GAAG,IAAI,sBAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/ingest/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SummarizerConfig, Logger, PluginContext } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Build a SummarizerConfig from OpenClaw's native model configuration (openclaw.json).
|
|
4
|
+
* Final fallback when both strongCfg and plugin summarizer fail or are absent.
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadOpenClawFallbackConfig(log: Logger): SummarizerConfig | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Build the ordered fallback chain for skill-related LLM calls:
|
|
9
|
+
* skillEvolution.summarizer → plugin summarizer → OpenClaw native model
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildSkillConfigChain(ctx: PluginContext): SummarizerConfig[];
|
|
12
|
+
export interface LLMCallOptions {
|
|
13
|
+
maxTokens?: number;
|
|
14
|
+
temperature?: number;
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Make a single LLM call with the given config. Throws on failure.
|
|
19
|
+
*/
|
|
20
|
+
export declare function callLLMOnce(cfg: SummarizerConfig, prompt: string, opts?: LLMCallOptions): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Call LLM with fallback chain: tries each config in order until one succeeds.
|
|
23
|
+
* Returns the result string, or throws if ALL configs fail.
|
|
24
|
+
*/
|
|
25
|
+
export declare function callLLMWithFallback(chain: SummarizerConfig[], prompt: string, log: Logger, label: string, opts?: LLMCallOptions): Promise<string>;
|
|
26
|
+
//# sourceMappingURL=llm-call.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-call.d.ts","sourceRoot":"","sources":["../../src/shared/llm-call.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExE;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAuCpF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAS5E;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,gBAAgB,EAAE,EACzB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
|
|
@@ -0,0 +1,163 @@
|
|
|
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
|
+
exports.loadOpenClawFallbackConfig = loadOpenClawFallbackConfig;
|
|
37
|
+
exports.buildSkillConfigChain = buildSkillConfigChain;
|
|
38
|
+
exports.callLLMOnce = callLLMOnce;
|
|
39
|
+
exports.callLLMWithFallback = callLLMWithFallback;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
/**
|
|
43
|
+
* Build a SummarizerConfig from OpenClaw's native model configuration (openclaw.json).
|
|
44
|
+
* Final fallback when both strongCfg and plugin summarizer fail or are absent.
|
|
45
|
+
*/
|
|
46
|
+
function loadOpenClawFallbackConfig(log) {
|
|
47
|
+
try {
|
|
48
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
49
|
+
const cfgPath = path.join(home, ".openclaw", "openclaw.json");
|
|
50
|
+
if (!fs.existsSync(cfgPath))
|
|
51
|
+
return undefined;
|
|
52
|
+
const raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8"));
|
|
53
|
+
const agentModel = raw?.agents?.defaults?.model?.primary;
|
|
54
|
+
if (!agentModel)
|
|
55
|
+
return undefined;
|
|
56
|
+
const [providerKey, modelId] = agentModel.includes("/")
|
|
57
|
+
? agentModel.split("/", 2)
|
|
58
|
+
: [undefined, agentModel];
|
|
59
|
+
const providerCfg = providerKey
|
|
60
|
+
? raw?.models?.providers?.[providerKey]
|
|
61
|
+
: Object.values(raw?.models?.providers ?? {})[0];
|
|
62
|
+
if (!providerCfg)
|
|
63
|
+
return undefined;
|
|
64
|
+
const baseUrl = providerCfg.baseUrl;
|
|
65
|
+
const apiKey = providerCfg.apiKey;
|
|
66
|
+
if (!baseUrl || !apiKey)
|
|
67
|
+
return undefined;
|
|
68
|
+
const endpoint = baseUrl.endsWith("/chat/completions")
|
|
69
|
+
? baseUrl
|
|
70
|
+
: baseUrl.replace(/\/+$/, "") + "/chat/completions";
|
|
71
|
+
log.debug(`OpenClaw fallback model: ${modelId} via ${baseUrl}`);
|
|
72
|
+
return {
|
|
73
|
+
provider: "openai_compatible",
|
|
74
|
+
endpoint,
|
|
75
|
+
apiKey,
|
|
76
|
+
model: modelId,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
log.debug(`Failed to load OpenClaw fallback config: ${err}`);
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Build the ordered fallback chain for skill-related LLM calls:
|
|
86
|
+
* skillEvolution.summarizer → plugin summarizer → OpenClaw native model
|
|
87
|
+
*/
|
|
88
|
+
function buildSkillConfigChain(ctx) {
|
|
89
|
+
const chain = [];
|
|
90
|
+
const skillCfg = ctx.config.skillEvolution?.summarizer;
|
|
91
|
+
const pluginCfg = ctx.config.summarizer;
|
|
92
|
+
const fallbackCfg = loadOpenClawFallbackConfig(ctx.log);
|
|
93
|
+
if (skillCfg)
|
|
94
|
+
chain.push(skillCfg);
|
|
95
|
+
if (pluginCfg && pluginCfg !== skillCfg)
|
|
96
|
+
chain.push(pluginCfg);
|
|
97
|
+
if (fallbackCfg)
|
|
98
|
+
chain.push(fallbackCfg);
|
|
99
|
+
return chain;
|
|
100
|
+
}
|
|
101
|
+
function normalizeEndpoint(url) {
|
|
102
|
+
const stripped = url.replace(/\/+$/, "");
|
|
103
|
+
if (stripped.endsWith("/chat/completions"))
|
|
104
|
+
return stripped;
|
|
105
|
+
if (stripped.endsWith("/completions"))
|
|
106
|
+
return stripped;
|
|
107
|
+
return `${stripped}/chat/completions`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Make a single LLM call with the given config. Throws on failure.
|
|
111
|
+
*/
|
|
112
|
+
async function callLLMOnce(cfg, prompt, opts = {}) {
|
|
113
|
+
const endpoint = normalizeEndpoint(cfg.endpoint ?? "https://api.openai.com/v1/chat/completions");
|
|
114
|
+
const model = cfg.model ?? "gpt-4o-mini";
|
|
115
|
+
const headers = {
|
|
116
|
+
"Content-Type": "application/json",
|
|
117
|
+
Authorization: `Bearer ${cfg.apiKey}`,
|
|
118
|
+
...cfg.headers,
|
|
119
|
+
};
|
|
120
|
+
const resp = await fetch(endpoint, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
headers,
|
|
123
|
+
body: JSON.stringify({
|
|
124
|
+
model,
|
|
125
|
+
temperature: opts.temperature ?? 0.1,
|
|
126
|
+
max_tokens: opts.maxTokens ?? 1024,
|
|
127
|
+
messages: [{ role: "user", content: prompt }],
|
|
128
|
+
}),
|
|
129
|
+
signal: AbortSignal.timeout(opts.timeoutMs ?? 30_000),
|
|
130
|
+
});
|
|
131
|
+
if (!resp.ok) {
|
|
132
|
+
const body = await resp.text();
|
|
133
|
+
throw new Error(`LLM call failed (${resp.status}): ${body}`);
|
|
134
|
+
}
|
|
135
|
+
const json = (await resp.json());
|
|
136
|
+
return json.choices[0]?.message?.content?.trim() ?? "";
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Call LLM with fallback chain: tries each config in order until one succeeds.
|
|
140
|
+
* Returns the result string, or throws if ALL configs fail.
|
|
141
|
+
*/
|
|
142
|
+
async function callLLMWithFallback(chain, prompt, log, label, opts = {}) {
|
|
143
|
+
if (chain.length === 0) {
|
|
144
|
+
throw new Error(`${label}: no LLM config available`);
|
|
145
|
+
}
|
|
146
|
+
for (let i = 0; i < chain.length; i++) {
|
|
147
|
+
try {
|
|
148
|
+
return await callLLMOnce(chain[i], prompt, opts);
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
const modelInfo = `${chain[i].provider ?? "?"}/${chain[i].model ?? "?"}`;
|
|
152
|
+
if (i < chain.length - 1) {
|
|
153
|
+
log.warn(`${label} failed (${modelInfo}), trying next fallback: ${err}`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
log.error(`${label} failed (${modelInfo}), no more fallbacks: ${err}`);
|
|
157
|
+
throw err;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
throw new Error(`${label}: all models failed`);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=llm-call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-call.js","sourceRoot":"","sources":["../../src/shared/llm-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,9 +23,6 @@ export declare class SkillEvaluator {
|
|
|
23
23
|
};
|
|
24
24
|
evaluateCreate(task: Task): Promise<CreateEvalResult>;
|
|
25
25
|
evaluateUpgrade(task: Task, skill: Skill, skillContent: string): Promise<UpgradeEvalResult>;
|
|
26
|
-
private getProviderConfig;
|
|
27
|
-
private callLLM;
|
|
28
26
|
private parseJSON;
|
|
29
|
-
private normalizeEndpoint;
|
|
30
27
|
}
|
|
31
28
|
//# sourceMappingURL=evaluator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/skill/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/skill/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIlE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACzC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAuFD,qBAAa,cAAc;IACb,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,aAAa;IAEtC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IA2B9E,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqBrD,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBjG,OAAO,CAAC,SAAS;CASlB"}
|