oclaw/interfaces/gateway/server_methods/doctor.py
oliver 4a23b715a2 重构仓库目录为统一的 runtime 分层并清理历史 openclaw 残留。
本次迁移将网关/通道/工具/技能/脚本与协议资源集中到新结构,统一路径常量与脚本转发机制,减少顶层噪音并保证运行与测试行为一致。

Made-with: Cursor
2026-04-25 01:24:23 +08:00

86 lines
2.7 KiB
Python

from __future__ import annotations
from typing import Any
from .shared_types import GatewayRequestHandlers
from .validation import error_shape
def _ok(respond, payload: Any) -> None:
if callable(respond):
respond(True, payload, None, None)
def _unavailable(respond, message: str) -> None:
if callable(respond):
respond(False, None, error_shape("UNAVAILABLE", message), None)
def _doctor_memory_status_handler(opts: dict[str, Any]) -> None:
respond = opts.get("respond")
context = opts.get("context")
hook = context.get("doctor_memory_status") if isinstance(context, dict) else None
if callable(hook):
try:
payload = hook()
_ok(respond, payload if isinstance(payload, dict) else {})
return
except Exception as exc:
_unavailable(respond, str(exc))
return
# Staging fallback shape (compatible with dashboard expectations).
_ok(
respond,
{
"agentId": "main",
"provider": None,
"embedding": {"ok": True},
"dreaming": {
"enabled": False,
"verboseLogging": False,
"storageMode": "inline",
"separateReports": False,
"shortTermCount": 0,
"recallSignalCount": 0,
"dailySignalCount": 0,
"groundedSignalCount": 0,
"totalSignalCount": 0,
"phaseSignalCount": 0,
"lightPhaseHitCount": 0,
"remPhaseHitCount": 0,
"promotedTotal": 0,
"promotedToday": 0,
"shortTermEntries": [],
"signalEntries": [],
"promotedEntries": [],
"phases": {
"light": {"enabled": False, "cron": "", "managedCronPresent": False, "lookbackDays": 0, "limit": 0},
"deep": {
"enabled": False,
"cron": "",
"managedCronPresent": False,
"minScore": 0,
"minRecallCount": 0,
"minUniqueQueries": 0,
"recencyHalfLifeDays": 0,
"limit": 0,
},
"rem": {
"enabled": False,
"cron": "",
"managedCronPresent": False,
"lookbackDays": 0,
"limit": 0,
"minPatternStrength": 0,
},
},
},
},
)
doctor_handlers: GatewayRequestHandlers = {
"doctor.memory.status": _doctor_memory_status_handler,
}