Spaces:
Running
Running
Z User commited on
Commit ·
3b40213
1
Parent(s): 744b9eb
feat: enable Holographic memory + MemPalace MCP
Browse filesA) Memory: holographic provider (local SQLite, FTS5, trust scoring)
- auto_extract: true (auto-extract facts at session end)
- Zero dependencies, zero API keys, fully local
B) MCP: MemPalace via stdio (29 tools for palace ops)
- Removed no_mcp: true
- Added mcp_servers.mempalace (python -m mempalace.mcp_server)
- Palace path: /data/hermes/palace (persistent)
Dashboard: show memory provider name + MCP server list
- config.yaml +12 -2
- dashboard.html +6 -1
- entry.py +1 -1
config.yaml
CHANGED
|
@@ -11,13 +11,23 @@ platforms:
|
|
| 11 |
domain: feishu
|
| 12 |
connection_mode: websocket
|
| 13 |
memory:
|
| 14 |
-
provider:
|
|
|
|
|
|
|
| 15 |
compress:
|
| 16 |
enabled: true
|
| 17 |
threshold: 50
|
| 18 |
target_ratio: 20
|
| 19 |
protect_last: 20
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
terminal:
|
| 22 |
backend: cloud
|
| 23 |
timeout: 180
|
|
|
|
| 11 |
domain: feishu
|
| 12 |
connection_mode: websocket
|
| 13 |
memory:
|
| 14 |
+
provider: holographic
|
| 15 |
+
auto_extract: true
|
| 16 |
+
default_trust: 0.5
|
| 17 |
compress:
|
| 18 |
enabled: true
|
| 19 |
threshold: 50
|
| 20 |
target_ratio: 20
|
| 21 |
protect_last: 20
|
| 22 |
+
mcp_servers:
|
| 23 |
+
mempalace:
|
| 24 |
+
type: stdio
|
| 25 |
+
command: python3
|
| 26 |
+
args:
|
| 27 |
+
- "-m"
|
| 28 |
+
- mempalace.mcp_server
|
| 29 |
+
env:
|
| 30 |
+
MEMPALACE_PALACE_PATH: /data/hermes/palace
|
| 31 |
terminal:
|
| 32 |
backend: cloud
|
| 33 |
timeout: 180
|
dashboard.html
CHANGED
|
@@ -217,6 +217,7 @@ body{font-family:-apple-system,"SF Pro Display","Noto Sans SC","PingFang SC","He
|
|
| 217 |
<div class="cfg-row"><span class="cfg-k">最大轮数</span><span class="cfg-v" id="x-turns">90</span></div>
|
| 218 |
<div class="cfg-row"><span class="cfg-k">上下文压缩</span><span class="cfg-v" id="x-comp">--</span></div>
|
| 219 |
<div class="cfg-row"><span class="cfg-k">记忆系统</span><span class="cfg-v" id="x-mem">--</span></div>
|
|
|
|
| 220 |
<div class="cfg-row"><span class="cfg-k">终端类型</span><span class="cfg-v" id="x-term">--</span></div>
|
| 221 |
<div class="cfg-row"><span class="cfg-k">时区</span><span class="cfg-v" id="x-tz">北京时间 (UTC+8)</span></div>
|
| 222 |
</div>
|
|
@@ -391,8 +392,12 @@ async function poll(){
|
|
| 391 |
document.getElementById('x-turns').textContent=d.config.max_turns||'90';
|
| 392 |
document.getElementById('x-comp').textContent=d.config.compress?'已开启':'已关闭';
|
| 393 |
document.getElementById('x-comp').style.color=d.config.compress?'var(--accent)':'var(--tx3)';
|
| 394 |
-
|
|
|
|
| 395 |
document.getElementById('x-mem').style.color=d.config.memory!=='none'?'var(--accent)':'var(--tx3)';
|
|
|
|
|
|
|
|
|
|
| 396 |
document.getElementById('x-term').textContent=d.config.terminal==='local'?'本地':'云端';
|
| 397 |
document.getElementById('x-tz').textContent='北京时间 (UTC+8)';
|
| 398 |
// Sync model selector
|
|
|
|
| 217 |
<div class="cfg-row"><span class="cfg-k">最大轮数</span><span class="cfg-v" id="x-turns">90</span></div>
|
| 218 |
<div class="cfg-row"><span class="cfg-k">上下文压缩</span><span class="cfg-v" id="x-comp">--</span></div>
|
| 219 |
<div class="cfg-row"><span class="cfg-k">记忆系统</span><span class="cfg-v" id="x-mem">--</span></div>
|
| 220 |
+
<div class="cfg-row"><span class="cfg-k">MCP 服务</span><span class="cfg-v" id="x-mcp">--</span></div>
|
| 221 |
<div class="cfg-row"><span class="cfg-k">终端类型</span><span class="cfg-v" id="x-term">--</span></div>
|
| 222 |
<div class="cfg-row"><span class="cfg-k">时区</span><span class="cfg-v" id="x-tz">北京时间 (UTC+8)</span></div>
|
| 223 |
</div>
|
|
|
|
| 392 |
document.getElementById('x-turns').textContent=d.config.max_turns||'90';
|
| 393 |
document.getElementById('x-comp').textContent=d.config.compress?'已开启':'已关闭';
|
| 394 |
document.getElementById('x-comp').style.color=d.config.compress?'var(--accent)':'var(--tx3)';
|
| 395 |
+
var memNames={holographic:'Holographic',honcho:'Honcho',mem0:'Mem0',hindsight:'Hindsight',openviking:'OpenViking'};
|
| 396 |
+
document.getElementById('x-mem').textContent=memNames[d.config.memory]||(d.config.memory==='none'?'未配置':d.config.memory);
|
| 397 |
document.getElementById('x-mem').style.color=d.config.memory!=='none'?'var(--accent)':'var(--tx3)';
|
| 398 |
+
var mcpList=d.config.mcp_servers||[];
|
| 399 |
+
document.getElementById('x-mcp').textContent=mcpList.length>0?mcpList.join(', '):'未启用';
|
| 400 |
+
document.getElementById('x-mcp').style.color=mcpList.length>0?'var(--accent)':'var(--tx3)';
|
| 401 |
document.getElementById('x-term').textContent=d.config.terminal==='local'?'本地':'云端';
|
| 402 |
document.getElementById('x-tz').textContent='北京时间 (UTC+8)';
|
| 403 |
// Sync model selector
|
entry.py
CHANGED
|
@@ -355,7 +355,7 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
| 355 |
"timezone": cfg.get("timezone", "北京时间 (UTC+8)"),
|
| 356 |
"max_turns": cfg.get("max_turns", "90"),
|
| 357 |
"memory": cfg.get("memory", {}).get("provider", "none") if isinstance(cfg.get("memory"), dict) else "none",
|
| 358 |
-
"
|
| 359 |
"compress": cfg.get("compress", {}).get("enabled", False) if isinstance(cfg.get("compress"), dict) else False,
|
| 360 |
},
|
| 361 |
}
|
|
|
|
| 355 |
"timezone": cfg.get("timezone", "北京时间 (UTC+8)"),
|
| 356 |
"max_turns": cfg.get("max_turns", "90"),
|
| 357 |
"memory": cfg.get("memory", {}).get("provider", "none") if isinstance(cfg.get("memory"), dict) else "none",
|
| 358 |
+
"mcp_servers": list(cfg.get("mcp_servers", {}).keys()) if isinstance(cfg.get("mcp_servers"), dict) else [],
|
| 359 |
"compress": cfg.get("compress", {}).get("enabled", False) if isinstance(cfg.get("compress"), dict) else False,
|
| 360 |
},
|
| 361 |
}
|