mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-10 18:35:48 +08:00
重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
This commit is contained in:
parent
4a23b715a2
commit
dbbe3add6a
14438 changed files with 2693620 additions and 2546 deletions
81
runtime/hooks/user_config_hooks.py
Normal file
81
runtime/hooks/user_config_hooks.py
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from oclaw.platform.config.paths import PROJECT_ROOT
|
||||
|
||||
|
||||
def resolve_hooks_config_storage_path() -> Path:
|
||||
"""
|
||||
Path used for persistent ``hooks.internal.entries`` edits.
|
||||
|
||||
Matches ``resolve_runtime_config`` file resolution: ``OCLAW_CONFIG_PATH`` (optional
|
||||
relative to ``PROJECT_ROOT``), else ``<PROJECT_ROOT>/oclaw/oclaw.json``.
|
||||
"""
|
||||
raw = str(os.getenv("OCLAW_CONFIG_PATH") or "").strip()
|
||||
if raw:
|
||||
p = Path(raw).expanduser()
|
||||
if not p.is_absolute():
|
||||
p = (Path(PROJECT_ROOT) / p).resolve()
|
||||
return p
|
||||
return (Path(PROJECT_ROOT) / "oclaw" / "oclaw.json").resolve()
|
||||
|
||||
|
||||
def load_storage_config_document() -> dict[str, Any]:
|
||||
p = resolve_hooks_config_storage_path()
|
||||
if not p.is_file():
|
||||
return {}
|
||||
try:
|
||||
raw = p.read_text(encoding="utf-8")
|
||||
obj = json.loads(raw)
|
||||
return dict(obj) if isinstance(obj, dict) else {}
|
||||
except Exception:
|
||||
return {}
|
||||
|
||||
|
||||
def save_storage_config_document(doc: dict[str, Any]) -> None:
|
||||
p = resolve_hooks_config_storage_path()
|
||||
p.parent.mkdir(parents=True, exist_ok=True)
|
||||
tmp = p.with_suffix(p.suffix + ".tmp")
|
||||
tmp.write_text(json.dumps(doc, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
|
||||
tmp.replace(p)
|
||||
|
||||
|
||||
def apply_hook_entry_enabled(
|
||||
doc: dict[str, Any],
|
||||
hook_key: str,
|
||||
enabled: bool,
|
||||
*,
|
||||
ensure_internal_hooks_enabled: bool = False,
|
||||
) -> None:
|
||||
"""Mutate *doc* in place (shallow structure for ``hooks.internal`` only)."""
|
||||
key = str(hook_key or "").strip()
|
||||
if not key:
|
||||
raise ValueError("hook_key is empty")
|
||||
|
||||
hooks = doc.setdefault("hooks", {})
|
||||
if not isinstance(hooks, dict):
|
||||
doc["hooks"] = {}
|
||||
hooks = doc["hooks"]
|
||||
|
||||
internal = hooks.setdefault("internal", {})
|
||||
if not isinstance(internal, dict):
|
||||
hooks["internal"] = {}
|
||||
internal = hooks["internal"]
|
||||
|
||||
if ensure_internal_hooks_enabled and enabled:
|
||||
internal["enabled"] = True
|
||||
|
||||
entries = internal.setdefault("entries", {})
|
||||
if not isinstance(entries, dict):
|
||||
internal["entries"] = {}
|
||||
entries = internal["entries"]
|
||||
|
||||
row = entries.get(key)
|
||||
if not isinstance(row, dict):
|
||||
entries[key] = {}
|
||||
row = entries[key]
|
||||
row["enabled"] = bool(enabled)
|
||||
Loading…
Add table
Add a link
Reference in a new issue