Warning
此 fork 已不再維護 — 請改用 upstream
本 fork 當初的兩個差異化功能 — CJK 感知的 token 估算和 CJK trigram FTS 搜尋 — 都已被合進 upstream Martian-Engineering/lossless-claw(PR #344、PR #219 均已合併)。自 upstream v0.11.x 起,本 fork 與 upstream 已無功能差距。
本 fork 目前停在 0.5.3,最後一次適配 OpenClaw 為 2026.4.14,已落後 upstream 約 6 個 minor 版本,不會再更新。
- 新用戶:請直接使用
Martian-Engineering/lossless-claw。它能在當前 OpenClaw 上乾淨編譯,且已包含本 fork 首發的所有 CJK 修復。 - OpenClaw 2026.5.x 以上的現有用戶:請切換到 upstream。本 fork 在當前 OpenClaw 上已無法編譯(見 #32)。
OpenClaw 的 DAG 式對話壓縮插件 — 讓 AI 記住一切,不再遺忘。
當對話超過模型的上下文窗口時,傳統做法是截斷舊訊息。lossless-claw 改用 DAG(有向無環圖)式摘要系統:
- 持久化每條訊息 — 寫入 SQLite,按對話分組
- 階層式摘要 — 將舊訊息壓縮成多層摘要,保留關鍵資訊
- 智慧重建上下文 — 每次對話從摘要 DAG 中挑選最相關的節點
- 零遺失 — 原始訊息永遠保留,可隨時展開還原
lossless-claw 支援主模型與摘要模型分離:
| 角色 | 模型範例 | 說明 |
|---|---|---|
| 主模型 | Claude Opus / Sonnet | 處理對話 |
| LCM 摘要 | MiniMax M2.7 HS | 生成摘要,節省成本 |
| LCM 展開 | MiniMax M2.7 HS | 展開摘要細節 |
# 安裝
openclaw plugins install lossless-claw
# 啟用
openclaw plugins enable lossless-claw
# 設為上下文引擎
# 在 openclaw.json 中加入:
# "plugins": { "slots": { "contextEngine": "lossless-claw" } }{
"plugins": {
"slots": {
"contextEngine": "lossless-claw"
},
"entries": {
"lossless-claw": {
"config": {
"summaryModel": "minimax/MiniMax-M2.7-highspeed",
"summaryProvider": "minimax",
"expansionModel": "minimax/MiniMax-M2.7-highspeed",
"expansionProvider": "minimax",
"contextThreshold": 0.75
}
}
}
}
}OpenClaw 2026.5.x 提示: 如果
openclaw.json校验报plugins: Invalid input,说明当前 OpenClaw host 还没有在配置校验阶段接受plugins.entries.lossless-claw.config里的插件自定义字段。此时只在openclaw.json保留plugins.slots.contextEngine = "lossless-claw", 模型覆盖改用环境变量:export LCM_SUMMARY_MODEL=minimax/MiniMax-M2.5 export LCM_EXPANSION_MODEL=minimax/MiniMax-M2.5 export LCM_SUMMARY_PROVIDER=minimax export LCM_EXPANSION_PROVIDER=minimax
分支: fix/getApiKey-provider-config-fallback
問題:LCM 的 getApiKey() 缺少 models.providers.*.apiKey fallback,導致非內建 provider(如 MiniMax)在 launchd 環境下 401。
修復:在 getApiKey() 和 requireApiKey() 中加入第 6 層 fallback,讀取 models.providers.*.apiKey。
⚠️ v0.5.1 已包含此修復(findProviderConfigValue),此分支主要用於舊版本。
分支: fix/summarize-strip-auth-false-positive
問題:壓縮包含 "401"/"authentication_error" 等字眼的對話時,pickAuthInspectionValue() 會將對話內容誤判為真正的 auth error,產生假的 [lcm] compaction failed: provider auth error 日誌。
根因:summarize.ts 第 390 行,當 regex 沒匹配到 auth-related key 時,fallback 回原始 value,導致下游 extractProviderAuthFailure() 從對話內容中誤偵測到 auth 失敗。
修復:改為回傳空物件 {},避免假陽性。
| 機器 | 主模型 | LCM 模型 | Summaries | 漂移 | Errors |
|---|---|---|---|---|---|
| Scott#4 | Claude Opus | M2.7 HS | 200+ | 零 | 零 |
| Scott#2 | Claude Opus | M2.7 HS | 40+ | 零 | 零 |
| 倉庫 | 說明 |
|---|---|
| Martian-Engineering/lossless-claw | 上游原始倉庫 |
| openclaw/openclaw | OpenClaw 主專案 |
| catgodtwno4/openclaw-five-layer-memory-nas | 五層記憶棧 NAS 部署指南 |
| catgodtwno4/openclaw-dashboard | OpenClaw Dashboard |
MIT