完成运行时与启动链路的全面相对路径整改,统一以仓库根为路径基准并移除 oclaw 双层硬编码。

同时补齐路径回归测试与开源自检文档,确保从非仓库 cwd 启动时 workspace 根、配置和 wiki 路径仍稳定可用。

Made-with: Cursor
This commit is contained in:
oliver 2026-04-26 09:22:42 +08:00
parent dbbe3add6a
commit 9d2900db02
40 changed files with 223 additions and 82 deletions

View file

@ -11,7 +11,7 @@ def _project_root() -> Path:
def _load_config() -> dict[str, Any]:
cfg_path = _project_root() / "oclaw" / "oclaw.json"
cfg_path = _project_root() / "oclaw.json"
if not cfg_path.exists():
return {}
try:
@ -29,7 +29,7 @@ def _resolve_wiki_entry(cfg: dict[str, Any]) -> dict[str, Any]:
def _resolve_runtime(entry: dict[str, Any]) -> tuple[Path, int, int, bool, int, bool]:
root_cfg = str(entry.get("wiki_root") or "oclaw/docs/memory-system/wiki").strip()
root_cfg = str(entry.get("wiki_root") or "docs/memory-system/wiki").strip()
root = Path(root_cfg)
if not root.is_absolute():
root = (_project_root() / root).resolve()

View file

@ -13,7 +13,7 @@ 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``.
relative to ``PROJECT_ROOT``), else ``<PROJECT_ROOT>/oclaw.json``.
"""
raw = str(os.getenv("OCLAW_CONFIG_PATH") or "").strip()
if raw:
@ -21,7 +21,7 @@ def resolve_hooks_config_storage_path() -> Path:
if not p.is_absolute():
p = (Path(PROJECT_ROOT) / p).resolve()
return p
return (Path(PROJECT_ROOT) / "oclaw" / "oclaw.json").resolve()
return (Path(PROJECT_ROOT) / "oclaw.json").resolve()
def load_storage_config_document() -> dict[str, Any]: