@memtensor/memos-local-openclaw-plugin 0.3.20 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +232 -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 +72 -6
- 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 +233 -9
- package/dist/viewer/html.js.map +1 -1
- package/dist/viewer/server.d.ts +5 -0
- package/dist/viewer/server.d.ts.map +1 -1
- package/dist/viewer/server.js +383 -177
- 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 +88 -6
- 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 +233 -9
- package/src/viewer/server.ts +368 -187
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/bedrock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAyC5D,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA+BjB;
|
|
1
|
+
{"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/bedrock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAyC5D,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA+BjB;AA6BD,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,CAmClB;AAwBD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACnE,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,YAAY,CAAC,CAoCvB;AAmBD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAoCjB;AAKD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACtE,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,WAAW,CAAC,CA4BtB"}
|
|
@@ -70,16 +70,30 @@ async function summarizeTaskBedrock(text, cfg, log) {
|
|
|
70
70
|
const json = (await resp.json());
|
|
71
71
|
return json.output?.message?.content?.[0]?.text?.trim() ?? "";
|
|
72
72
|
}
|
|
73
|
-
const TOPIC_JUDGE_PROMPT = `You are a conversation topic boundary detector. Given
|
|
73
|
+
const TOPIC_JUDGE_PROMPT = `You are a conversation topic boundary detector. Given the CURRENT task context (may include opening topic + recent exchanges) and a single NEW user message, decide if the new message belongs to the SAME task or starts a NEW one.
|
|
74
74
|
|
|
75
75
|
Answer ONLY "NEW" or "SAME".
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
77
|
+
SAME — the new message:
|
|
78
|
+
- Continues, follows up on, refines, or corrects the same subject/project/task
|
|
79
|
+
- Asks a clarification or next-step question about what was just discussed
|
|
80
|
+
- Reports a result, error, or feedback about the current task
|
|
81
|
+
- Discusses different tools, methods, or approaches for the SAME goal (e.g., learning English via BBC → via ChatGPT → via AI tools = all SAME "learning English" task)
|
|
82
|
+
- Mentions a related technology or platform in the context of the current goal
|
|
83
|
+
- Is a short acknowledgment (ok, thanks, 好的, 嗯) in direct response to the current flow
|
|
84
|
+
|
|
85
|
+
NEW — the new message:
|
|
86
|
+
- Introduces a clearly UNRELATED subject with NO logical connection to the current task
|
|
87
|
+
- The topic has ZERO overlap with any aspect of the current conversation (e.g., from "learning English" to "what's the weather tomorrow")
|
|
88
|
+
- Starts a request about a completely different domain or life area
|
|
89
|
+
- Begins with a new greeting/reset followed by a different topic
|
|
90
|
+
|
|
91
|
+
Key principles:
|
|
92
|
+
- STRONGLY lean toward SAME — only mark NEW for obvious, unambiguous topic shifts
|
|
93
|
+
- Different aspects, tools, or methods related to the same overall goal are SAME
|
|
94
|
+
- If the new message could reasonably be interpreted as part of the ongoing discussion, choose SAME
|
|
95
|
+
- Only choose NEW when there is absolutely no thematic connection to the current task
|
|
96
|
+
- Examples: "学英语" → "用AI工具学英语" = SAME; "学英语" → "明天天气" = NEW
|
|
83
97
|
|
|
84
98
|
Output exactly one word: NEW or SAME`;
|
|
85
99
|
async function judgeNewTopicBedrock(currentContext, newMessage, cfg, log) {
|
|
@@ -93,7 +107,7 @@ async function judgeNewTopicBedrock(currentContext, newMessage, cfg, log) {
|
|
|
93
107
|
"Content-Type": "application/json",
|
|
94
108
|
...cfg.headers,
|
|
95
109
|
};
|
|
96
|
-
const userContent = `CURRENT
|
|
110
|
+
const userContent = `CURRENT TASK CONTEXT:\n${currentContext}\n\n---\n\nNEW USER MESSAGE:\n${newMessage}`;
|
|
97
111
|
const resp = await fetch(url, {
|
|
98
112
|
method: "POST",
|
|
99
113
|
headers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bedrock.js","sourceRoot":"","sources":["../../../src/ingest/providers/bedrock.ts"],"names":[],"mappings":";;AAyCA,oDAmCC;
|
|
1
|
+
{"version":3,"file":"bedrock.js","sourceRoot":"","sources":["../../../src/ingest/providers/bedrock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAyC5D,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA8BjB;
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAyC5D,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA8BjB;AA6BD,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,CAkClB;AAwBD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACnE,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,YAAY,CAAC,CAmCvB;AAmBD,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAKD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACtE,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,WAAW,CAAC,CA2BtB"}
|
|
@@ -68,16 +68,30 @@ async function summarizeTaskGemini(text, cfg, log) {
|
|
|
68
68
|
const json = (await resp.json());
|
|
69
69
|
return json.candidates?.[0]?.content?.parts?.[0]?.text?.trim() ?? "";
|
|
70
70
|
}
|
|
71
|
-
const TOPIC_JUDGE_PROMPT = `You are a conversation topic boundary detector. Given
|
|
71
|
+
const TOPIC_JUDGE_PROMPT = `You are a conversation topic boundary detector. Given the CURRENT task context (may include opening topic + recent exchanges) and a single NEW user message, decide if the new message belongs to the SAME task or starts a NEW one.
|
|
72
72
|
|
|
73
73
|
Answer ONLY "NEW" or "SAME".
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
75
|
+
SAME — the new message:
|
|
76
|
+
- Continues, follows up on, refines, or corrects the same subject/project/task
|
|
77
|
+
- Asks a clarification or next-step question about what was just discussed
|
|
78
|
+
- Reports a result, error, or feedback about the current task
|
|
79
|
+
- Discusses different tools, methods, or approaches for the SAME goal (e.g., learning English via BBC → via ChatGPT → via AI tools = all SAME "learning English" task)
|
|
80
|
+
- Mentions a related technology or platform in the context of the current goal
|
|
81
|
+
- Is a short acknowledgment (ok, thanks, 好的, 嗯) in direct response to the current flow
|
|
82
|
+
|
|
83
|
+
NEW — the new message:
|
|
84
|
+
- Introduces a clearly UNRELATED subject with NO logical connection to the current task
|
|
85
|
+
- The topic has ZERO overlap with any aspect of the current conversation (e.g., from "learning English" to "what's the weather tomorrow")
|
|
86
|
+
- Starts a request about a completely different domain or life area
|
|
87
|
+
- Begins with a new greeting/reset followed by a different topic
|
|
88
|
+
|
|
89
|
+
Key principles:
|
|
90
|
+
- STRONGLY lean toward SAME — only mark NEW for obvious, unambiguous topic shifts
|
|
91
|
+
- Different aspects, tools, or methods related to the same overall goal are SAME
|
|
92
|
+
- If the new message could reasonably be interpreted as part of the ongoing discussion, choose SAME
|
|
93
|
+
- Only choose NEW when there is absolutely no thematic connection to the current task
|
|
94
|
+
- Examples: "学英语" → "用AI工具学英语" = SAME; "学英语" → "明天天气" = NEW
|
|
81
95
|
|
|
82
96
|
Output exactly one word: NEW or SAME`;
|
|
83
97
|
async function judgeNewTopicGemini(currentContext, newMessage, cfg, log) {
|
|
@@ -89,7 +103,7 @@ async function judgeNewTopicGemini(currentContext, newMessage, cfg, log) {
|
|
|
89
103
|
"Content-Type": "application/json",
|
|
90
104
|
...cfg.headers,
|
|
91
105
|
};
|
|
92
|
-
const userContent = `CURRENT
|
|
106
|
+
const userContent = `CURRENT TASK CONTEXT:\n${currentContext}\n\n---\n\nNEW USER MESSAGE:\n${newMessage}`;
|
|
93
107
|
const resp = await fetch(url, {
|
|
94
108
|
method: "POST",
|
|
95
109
|
headers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/ingest/providers/gemini.ts"],"names":[],"mappings":";;AAyCA,kDAkCC;
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/ingest/providers/gemini.ts"],"names":[],"mappings":";;AAyCA,kDAkCC;AA6BD,kDAuCC;AA2BD,oDAwCC;AAmBD,0CAoCC;AAQD,4CAgCC;AA/SD,MAAM,aAAa,GAAG,iSAAiS,CAAC;AAExT,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAmCQ,CAAC;AAE9B,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,GAAqB,EACrB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC9C,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ;QACZ,2DAA2D,KAAK,kBAAkB,CAAC;IAErF,MAAM,GAAG,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE;YAC7D,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjC,gBAAgB,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE;SACjF,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA2E,CAAC;IAC3G,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;qCAyBU,CAAC;AAE/B,KAAK,UAAU,mBAAmB,CACvC,cAAsB,EACtB,UAAkB,EAClB,GAAqB,EACrB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC9C,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ;QACZ,2DAA2D,KAAK,kBAAkB,CAAC;IAErF,MAAM,GAAG,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,WAAW,GAAG,0BAA0B,cAAc,iCAAiC,UAAU,EAAE,CAAC;IAE1G,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE;YAC5D,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YAC9C,gBAAgB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE;SAC1D,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA2E,CAAC;IAC3G,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC3F,GAAG,CAAC,KAAK,CAAC,wBAAwB,MAAM,GAAG,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;2CAoBY,CAAC;AAKrC,KAAK,UAAU,oBAAoB,CACxC,KAAa,EACb,UAAmE,EACnE,GAAqB,EACrB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC9C,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ;QACZ,2DAA2D,KAAK,kBAAkB,CAAC;IAErF,MAAM,GAAG,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,aAAa,GAAG,UAAU;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SAClD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,EAAE;YAChE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,KAAK,oBAAoB,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC;YACrF,gBAAgB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE;SAC3D,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA2E,CAAC;IAC3G,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAC5E,OAAO,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,GAAW;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,OAAO;oBACL,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;oBAChE,UAAU,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI;iBACpC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,GAAG,CAAC,IAAI,CAAC,gDAAgD,GAAG,iCAAiC,CAAC,CAAC;IAC/F,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,GAAqB,EACrB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC9C,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ;QACZ,2DAA2D,KAAK,kBAAkB,CAAC;IAErF,MAAM,GAAG,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE;YACvD,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjC,gBAAgB,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE;SAC9E,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,sBAAsB;AAEtB,qCAAgE;AAIzD,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,UAAsE,EACtE,GAAqB,EACrB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,2DAA2D,KAAK,kBAAkB,CAAC;IACpH,MAAM,GAAG,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAE/F,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,2BAAkB,EAAE,CAAC,EAAE;YAC5D,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,UAAU,2BAA2B,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC;YACvG,gBAAgB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE;SAC3D,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA2E,CAAC;IAC3G,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAC5E,OAAO,IAAA,yBAAgB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -4,37 +4,32 @@ export type { FilterResult, DedupResult } from "./openai";
|
|
|
4
4
|
export declare class Summarizer {
|
|
5
5
|
private cfg;
|
|
6
6
|
private log;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
private callProvider;
|
|
7
|
+
private strongCfg;
|
|
8
|
+
private fallbackCfg;
|
|
9
|
+
constructor(cfg: SummarizerConfig | undefined, log: Logger, strongCfg?: SummarizerConfig);
|
|
11
10
|
/**
|
|
12
|
-
*
|
|
13
|
-
* Returns
|
|
14
|
-
* Returns null if no summarizer is configured (caller should fall back to heuristic).
|
|
11
|
+
* Ordered config chain: strongCfg → cfg → fallbackCfg (OpenClaw native model).
|
|
12
|
+
* Returns configs that are defined, in priority order.
|
|
15
13
|
*/
|
|
16
|
-
|
|
17
|
-
private callTopicJudge;
|
|
14
|
+
private getConfigChain;
|
|
18
15
|
/**
|
|
19
|
-
*
|
|
20
|
-
* Returns
|
|
16
|
+
* Try calling fn with each config in the chain until one succeeds.
|
|
17
|
+
* Returns undefined if all fail.
|
|
21
18
|
*/
|
|
19
|
+
private tryChain;
|
|
20
|
+
summarize(text: string): Promise<string>;
|
|
21
|
+
summarizeTask(text: string): Promise<string>;
|
|
22
|
+
judgeNewTopic(currentContext: string, newMessage: string): Promise<boolean | null>;
|
|
22
23
|
filterRelevant(query: string, candidates: Array<{
|
|
23
24
|
index: number;
|
|
24
25
|
summary: string;
|
|
25
26
|
role: string;
|
|
26
27
|
}>): Promise<FilterResult | null>;
|
|
27
|
-
private callFilterRelevant;
|
|
28
|
-
/**
|
|
29
|
-
* Judge whether a new memory is DUPLICATE / UPDATE / NEW relative to similar existing memories.
|
|
30
|
-
* Returns null if no summarizer configured (caller should treat as NEW).
|
|
31
|
-
*/
|
|
32
28
|
judgeDedup(newSummary: string, candidates: Array<{
|
|
33
29
|
index: number;
|
|
34
30
|
summary: string;
|
|
35
31
|
chunkId: string;
|
|
36
32
|
}>): Promise<DedupResult | null>;
|
|
37
|
-
|
|
38
|
-
private callTaskProvider;
|
|
33
|
+
getStrongConfig(): SummarizerConfig | undefined;
|
|
39
34
|
}
|
|
40
35
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAkD1D,qBAAa,UAAU;IAKnB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,GAAG;IALb,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,WAAW,CAA+B;gBAGxC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,GAAG,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,gBAAgB;IAM9B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAQtB;;;OAGG;YACW,QAAQ;IAiBhB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASxC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5C,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOlF,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAClE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQzB,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GACrE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQ9B,eAAe,IAAI,gBAAgB,GAAG,SAAS;CAGhD"}
|
|
@@ -1,179 +1,253 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.Summarizer = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
4
39
|
const openai_1 = require("./openai");
|
|
5
40
|
const anthropic_1 = require("./anthropic");
|
|
6
41
|
const gemini_1 = require("./gemini");
|
|
7
42
|
const bedrock_1 = require("./bedrock");
|
|
43
|
+
/**
|
|
44
|
+
* Build a SummarizerConfig from OpenClaw's native model configuration (openclaw.json).
|
|
45
|
+
* This serves as the final fallback when both strongCfg and plugin summarizer fail or are absent.
|
|
46
|
+
*/
|
|
47
|
+
function loadOpenClawFallbackConfig(log) {
|
|
48
|
+
try {
|
|
49
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
50
|
+
const cfgPath = path.join(home, ".openclaw", "openclaw.json");
|
|
51
|
+
if (!fs.existsSync(cfgPath))
|
|
52
|
+
return undefined;
|
|
53
|
+
const raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8"));
|
|
54
|
+
const agentModel = raw?.agents?.defaults?.model?.primary;
|
|
55
|
+
if (!agentModel)
|
|
56
|
+
return undefined;
|
|
57
|
+
const [providerKey, modelId] = agentModel.includes("/")
|
|
58
|
+
? agentModel.split("/", 2)
|
|
59
|
+
: [undefined, agentModel];
|
|
60
|
+
const providerCfg = providerKey
|
|
61
|
+
? raw?.models?.providers?.[providerKey]
|
|
62
|
+
: Object.values(raw?.models?.providers ?? {})[0];
|
|
63
|
+
if (!providerCfg)
|
|
64
|
+
return undefined;
|
|
65
|
+
const baseUrl = providerCfg.baseUrl;
|
|
66
|
+
const apiKey = providerCfg.apiKey;
|
|
67
|
+
if (!baseUrl || !apiKey)
|
|
68
|
+
return undefined;
|
|
69
|
+
const endpoint = baseUrl.endsWith("/chat/completions")
|
|
70
|
+
? baseUrl
|
|
71
|
+
: baseUrl.replace(/\/+$/, "") + "/chat/completions";
|
|
72
|
+
log.debug(`OpenClaw fallback model: ${modelId} via ${baseUrl}`);
|
|
73
|
+
return {
|
|
74
|
+
provider: "openai_compatible",
|
|
75
|
+
endpoint,
|
|
76
|
+
apiKey,
|
|
77
|
+
model: modelId,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
log.debug(`Failed to load OpenClaw fallback config: ${err}`);
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
8
85
|
class Summarizer {
|
|
9
86
|
cfg;
|
|
10
87
|
log;
|
|
11
|
-
|
|
88
|
+
strongCfg;
|
|
89
|
+
fallbackCfg;
|
|
90
|
+
constructor(cfg, log, strongCfg) {
|
|
12
91
|
this.cfg = cfg;
|
|
13
92
|
this.log = log;
|
|
93
|
+
this.strongCfg = strongCfg;
|
|
94
|
+
this.fallbackCfg = loadOpenClawFallbackConfig(log);
|
|
14
95
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Ordered config chain: strongCfg → cfg → fallbackCfg (OpenClaw native model).
|
|
98
|
+
* Returns configs that are defined, in priority order.
|
|
99
|
+
*/
|
|
100
|
+
getConfigChain() {
|
|
101
|
+
const chain = [];
|
|
102
|
+
if (this.strongCfg)
|
|
103
|
+
chain.push(this.strongCfg);
|
|
104
|
+
if (this.cfg)
|
|
105
|
+
chain.push(this.cfg);
|
|
106
|
+
if (this.fallbackCfg)
|
|
107
|
+
chain.push(this.fallbackCfg);
|
|
108
|
+
return chain;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Try calling fn with each config in the chain until one succeeds.
|
|
112
|
+
* Returns undefined if all fail.
|
|
113
|
+
*/
|
|
114
|
+
async tryChain(label, fn) {
|
|
115
|
+
const chain = this.getConfigChain();
|
|
116
|
+
for (let i = 0; i < chain.length; i++) {
|
|
117
|
+
try {
|
|
118
|
+
return await fn(chain[i]);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
const level = i < chain.length - 1 ? "warn" : "error";
|
|
122
|
+
const modelInfo = `${chain[i].provider}/${chain[i].model ?? "?"}`;
|
|
123
|
+
this.log[level](`${label} failed (${modelInfo}), ${i < chain.length - 1 ? "trying next" : "no more fallbacks"}: ${err}`);
|
|
124
|
+
}
|
|
21
125
|
}
|
|
22
|
-
|
|
23
|
-
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
async summarize(text) {
|
|
129
|
+
if (!this.cfg && !this.fallbackCfg) {
|
|
24
130
|
return ruleFallback(text);
|
|
25
131
|
}
|
|
132
|
+
const result = await this.tryChain("summarize", (cfg) => callSummarize(cfg, text, this.log));
|
|
133
|
+
return result ?? ruleFallback(text);
|
|
26
134
|
}
|
|
27
135
|
async summarizeTask(text) {
|
|
28
|
-
if (!this.cfg) {
|
|
29
|
-
return taskFallback(text);
|
|
30
|
-
}
|
|
31
|
-
try {
|
|
32
|
-
return await this.callTaskProvider(text);
|
|
33
|
-
}
|
|
34
|
-
catch (err) {
|
|
35
|
-
this.log.warn(`Task summarizer failed, using fallback: ${err}`);
|
|
136
|
+
if (!this.cfg && !this.fallbackCfg) {
|
|
36
137
|
return taskFallback(text);
|
|
37
138
|
}
|
|
139
|
+
const result = await this.tryChain("summarizeTask", (cfg) => callSummarizeTask(cfg, text, this.log));
|
|
140
|
+
return result ?? taskFallback(text);
|
|
38
141
|
}
|
|
39
|
-
async callProvider(text) {
|
|
40
|
-
const cfg = this.cfg;
|
|
41
|
-
switch (cfg.provider) {
|
|
42
|
-
case "openai":
|
|
43
|
-
case "openai_compatible":
|
|
44
|
-
return (0, openai_1.summarizeOpenAI)(text, cfg, this.log);
|
|
45
|
-
case "anthropic":
|
|
46
|
-
return (0, anthropic_1.summarizeAnthropic)(text, cfg, this.log);
|
|
47
|
-
case "gemini":
|
|
48
|
-
return (0, gemini_1.summarizeGemini)(text, cfg, this.log);
|
|
49
|
-
case "azure_openai":
|
|
50
|
-
return (0, openai_1.summarizeOpenAI)(text, cfg, this.log);
|
|
51
|
-
case "bedrock":
|
|
52
|
-
return (0, bedrock_1.summarizeBedrock)(text, cfg, this.log);
|
|
53
|
-
default:
|
|
54
|
-
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Ask the LLM whether the new message starts a different topic from the current conversation.
|
|
59
|
-
* Returns true if it's a new topic, false if it continues the current one.
|
|
60
|
-
* Returns null if no summarizer is configured (caller should fall back to heuristic).
|
|
61
|
-
*/
|
|
62
142
|
async judgeNewTopic(currentContext, newMessage) {
|
|
63
|
-
if (!this.cfg)
|
|
64
|
-
return null;
|
|
65
|
-
try {
|
|
66
|
-
return await this.callTopicJudge(currentContext, newMessage);
|
|
67
|
-
}
|
|
68
|
-
catch (err) {
|
|
69
|
-
this.log.warn(`Topic judge failed: ${err}`);
|
|
143
|
+
if (!this.cfg && !this.fallbackCfg)
|
|
70
144
|
return null;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
async callTopicJudge(currentContext, newMessage) {
|
|
74
|
-
const cfg = this.cfg;
|
|
75
|
-
switch (cfg.provider) {
|
|
76
|
-
case "openai":
|
|
77
|
-
case "openai_compatible":
|
|
78
|
-
case "azure_openai":
|
|
79
|
-
return (0, openai_1.judgeNewTopicOpenAI)(currentContext, newMessage, cfg, this.log);
|
|
80
|
-
case "anthropic":
|
|
81
|
-
return (0, anthropic_1.judgeNewTopicAnthropic)(currentContext, newMessage, cfg, this.log);
|
|
82
|
-
case "gemini":
|
|
83
|
-
return (0, gemini_1.judgeNewTopicGemini)(currentContext, newMessage, cfg, this.log);
|
|
84
|
-
case "bedrock":
|
|
85
|
-
return (0, bedrock_1.judgeNewTopicBedrock)(currentContext, newMessage, cfg, this.log);
|
|
86
|
-
default:
|
|
87
|
-
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
88
|
-
}
|
|
145
|
+
const result = await this.tryChain("judgeNewTopic", (cfg) => callTopicJudge(cfg, currentContext, newMessage, this.log));
|
|
146
|
+
return result ?? null;
|
|
89
147
|
}
|
|
90
|
-
/**
|
|
91
|
-
* Filter search results by LLM relevance judgment.
|
|
92
|
-
* Returns { relevant: number[], sufficient: boolean } or null if no summarizer configured.
|
|
93
|
-
*/
|
|
94
148
|
async filterRelevant(query, candidates) {
|
|
95
|
-
if (!this.cfg)
|
|
149
|
+
if (!this.cfg && !this.fallbackCfg)
|
|
96
150
|
return null;
|
|
97
151
|
if (candidates.length === 0)
|
|
98
152
|
return { relevant: [], sufficient: true };
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
catch (err) {
|
|
103
|
-
this.log.warn(`filterRelevant failed, returning all candidates: ${err}`);
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
153
|
+
const result = await this.tryChain("filterRelevant", (cfg) => callFilterRelevant(cfg, query, candidates, this.log));
|
|
154
|
+
return result ?? null;
|
|
106
155
|
}
|
|
107
|
-
async callFilterRelevant(query, candidates) {
|
|
108
|
-
const cfg = this.cfg;
|
|
109
|
-
switch (cfg.provider) {
|
|
110
|
-
case "openai":
|
|
111
|
-
case "openai_compatible":
|
|
112
|
-
case "azure_openai":
|
|
113
|
-
return (0, openai_1.filterRelevantOpenAI)(query, candidates, cfg, this.log);
|
|
114
|
-
case "anthropic":
|
|
115
|
-
return (0, anthropic_1.filterRelevantAnthropic)(query, candidates, cfg, this.log);
|
|
116
|
-
case "gemini":
|
|
117
|
-
return (0, gemini_1.filterRelevantGemini)(query, candidates, cfg, this.log);
|
|
118
|
-
case "bedrock":
|
|
119
|
-
return (0, bedrock_1.filterRelevantBedrock)(query, candidates, cfg, this.log);
|
|
120
|
-
default:
|
|
121
|
-
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Judge whether a new memory is DUPLICATE / UPDATE / NEW relative to similar existing memories.
|
|
126
|
-
* Returns null if no summarizer configured (caller should treat as NEW).
|
|
127
|
-
*/
|
|
128
156
|
async judgeDedup(newSummary, candidates) {
|
|
129
|
-
if (!this.cfg)
|
|
157
|
+
if (!this.cfg && !this.fallbackCfg)
|
|
130
158
|
return null;
|
|
131
159
|
if (candidates.length === 0)
|
|
132
160
|
return null;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
catch (err) {
|
|
137
|
-
this.log.warn(`judgeDedup failed, treating as NEW: ${err}`);
|
|
138
|
-
return { action: "NEW", reason: "llm_error" };
|
|
139
|
-
}
|
|
161
|
+
const result = await this.tryChain("judgeDedup", (cfg) => callJudgeDedup(cfg, newSummary, candidates, this.log));
|
|
162
|
+
return result ?? { action: "NEW", reason: "all_models_failed" };
|
|
140
163
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
switch (cfg.provider) {
|
|
144
|
-
case "openai":
|
|
145
|
-
case "openai_compatible":
|
|
146
|
-
case "azure_openai":
|
|
147
|
-
return (0, openai_1.judgeDedupOpenAI)(newSummary, candidates, cfg, this.log);
|
|
148
|
-
case "anthropic":
|
|
149
|
-
return (0, anthropic_1.judgeDedupAnthropic)(newSummary, candidates, cfg, this.log);
|
|
150
|
-
case "gemini":
|
|
151
|
-
return (0, gemini_1.judgeDedupGemini)(newSummary, candidates, cfg, this.log);
|
|
152
|
-
case "bedrock":
|
|
153
|
-
return (0, bedrock_1.judgeDedupBedrock)(newSummary, candidates, cfg, this.log);
|
|
154
|
-
default:
|
|
155
|
-
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
async callTaskProvider(text) {
|
|
159
|
-
const cfg = this.cfg;
|
|
160
|
-
switch (cfg.provider) {
|
|
161
|
-
case "openai":
|
|
162
|
-
case "openai_compatible":
|
|
163
|
-
case "azure_openai":
|
|
164
|
-
return (0, openai_1.summarizeTaskOpenAI)(text, cfg, this.log);
|
|
165
|
-
case "anthropic":
|
|
166
|
-
return (0, anthropic_1.summarizeTaskAnthropic)(text, cfg, this.log);
|
|
167
|
-
case "gemini":
|
|
168
|
-
return (0, gemini_1.summarizeTaskGemini)(text, cfg, this.log);
|
|
169
|
-
case "bedrock":
|
|
170
|
-
return (0, bedrock_1.summarizeTaskBedrock)(text, cfg, this.log);
|
|
171
|
-
default:
|
|
172
|
-
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
173
|
-
}
|
|
164
|
+
getStrongConfig() {
|
|
165
|
+
return this.strongCfg;
|
|
174
166
|
}
|
|
175
167
|
}
|
|
176
168
|
exports.Summarizer = Summarizer;
|
|
169
|
+
// ─── Dispatch helpers ───
|
|
170
|
+
function callSummarize(cfg, text, log) {
|
|
171
|
+
switch (cfg.provider) {
|
|
172
|
+
case "openai":
|
|
173
|
+
case "openai_compatible":
|
|
174
|
+
case "azure_openai":
|
|
175
|
+
return (0, openai_1.summarizeOpenAI)(text, cfg, log);
|
|
176
|
+
case "anthropic":
|
|
177
|
+
return (0, anthropic_1.summarizeAnthropic)(text, cfg, log);
|
|
178
|
+
case "gemini":
|
|
179
|
+
return (0, gemini_1.summarizeGemini)(text, cfg, log);
|
|
180
|
+
case "bedrock":
|
|
181
|
+
return (0, bedrock_1.summarizeBedrock)(text, cfg, log);
|
|
182
|
+
default:
|
|
183
|
+
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function callSummarizeTask(cfg, text, log) {
|
|
187
|
+
switch (cfg.provider) {
|
|
188
|
+
case "openai":
|
|
189
|
+
case "openai_compatible":
|
|
190
|
+
case "azure_openai":
|
|
191
|
+
return (0, openai_1.summarizeTaskOpenAI)(text, cfg, log);
|
|
192
|
+
case "anthropic":
|
|
193
|
+
return (0, anthropic_1.summarizeTaskAnthropic)(text, cfg, log);
|
|
194
|
+
case "gemini":
|
|
195
|
+
return (0, gemini_1.summarizeTaskGemini)(text, cfg, log);
|
|
196
|
+
case "bedrock":
|
|
197
|
+
return (0, bedrock_1.summarizeTaskBedrock)(text, cfg, log);
|
|
198
|
+
default:
|
|
199
|
+
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function callTopicJudge(cfg, currentContext, newMessage, log) {
|
|
203
|
+
switch (cfg.provider) {
|
|
204
|
+
case "openai":
|
|
205
|
+
case "openai_compatible":
|
|
206
|
+
case "azure_openai":
|
|
207
|
+
return (0, openai_1.judgeNewTopicOpenAI)(currentContext, newMessage, cfg, log);
|
|
208
|
+
case "anthropic":
|
|
209
|
+
return (0, anthropic_1.judgeNewTopicAnthropic)(currentContext, newMessage, cfg, log);
|
|
210
|
+
case "gemini":
|
|
211
|
+
return (0, gemini_1.judgeNewTopicGemini)(currentContext, newMessage, cfg, log);
|
|
212
|
+
case "bedrock":
|
|
213
|
+
return (0, bedrock_1.judgeNewTopicBedrock)(currentContext, newMessage, cfg, log);
|
|
214
|
+
default:
|
|
215
|
+
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function callFilterRelevant(cfg, query, candidates, log) {
|
|
219
|
+
switch (cfg.provider) {
|
|
220
|
+
case "openai":
|
|
221
|
+
case "openai_compatible":
|
|
222
|
+
case "azure_openai":
|
|
223
|
+
return (0, openai_1.filterRelevantOpenAI)(query, candidates, cfg, log);
|
|
224
|
+
case "anthropic":
|
|
225
|
+
return (0, anthropic_1.filterRelevantAnthropic)(query, candidates, cfg, log);
|
|
226
|
+
case "gemini":
|
|
227
|
+
return (0, gemini_1.filterRelevantGemini)(query, candidates, cfg, log);
|
|
228
|
+
case "bedrock":
|
|
229
|
+
return (0, bedrock_1.filterRelevantBedrock)(query, candidates, cfg, log);
|
|
230
|
+
default:
|
|
231
|
+
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function callJudgeDedup(cfg, newSummary, candidates, log) {
|
|
235
|
+
switch (cfg.provider) {
|
|
236
|
+
case "openai":
|
|
237
|
+
case "openai_compatible":
|
|
238
|
+
case "azure_openai":
|
|
239
|
+
return (0, openai_1.judgeDedupOpenAI)(newSummary, candidates, cfg, log);
|
|
240
|
+
case "anthropic":
|
|
241
|
+
return (0, anthropic_1.judgeDedupAnthropic)(newSummary, candidates, cfg, log);
|
|
242
|
+
case "gemini":
|
|
243
|
+
return (0, gemini_1.judgeDedupGemini)(newSummary, candidates, cfg, log);
|
|
244
|
+
case "bedrock":
|
|
245
|
+
return (0, bedrock_1.judgeDedupBedrock)(newSummary, candidates, cfg, log);
|
|
246
|
+
default:
|
|
247
|
+
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// ─── Fallbacks ───
|
|
177
251
|
function taskFallback(text) {
|
|
178
252
|
const lines = text.split("\n").filter((l) => l.trim().length > 10);
|
|
179
253
|
return lines.slice(0, 30).join("\n").slice(0, 2000);
|