refactor: root-package imports (svc/runtime/interfaces) and fix PYTHONPATH

- Rename platform/ to svc/ to avoid shadowing stdlib platform.
- Replace from oclaw.* with from svc/runtime/interfaces; update -m CLI paths.
- tests/conftest: prepend repo root to sys.path (no parent-folder package name).
- CI: paths and offline_eval script under repo root.
- Ops scripts: PYTHONPATH must be repo root for python -m runtime.* (fixes gateway/WhatsApp sidecar startup).
- Fix default oclaw.json path in tabular/file attachment limits; stabilize attachment test config.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-05-13 14:51:17 +08:00
parent 7941b27f58
commit 420abac9f1
405 changed files with 1316 additions and 1345 deletions

View file

@ -1,6 +1,6 @@
"""通识专家工具清单。"""
from oclaw.runtime.tools.base import ToolSpec
from runtime.tools.base import ToolSpec
def system_info_tool() -> ToolSpec:

View file

@ -4,7 +4,7 @@ import datetime
import time
from typing import Any
from oclaw.runtime.tools.base import ToolSpec
from runtime.tools.base import ToolSpec
def system_info_tool() -> ToolSpec:

View file

@ -14,7 +14,7 @@ from typing import Any
import httpx
from oclaw.runtime.tools.base import ToolSpec
from runtime.tools.base import ToolSpec
_UME_RAW_GROUP_FIELDS = [
"alarm_alarm_key",

View file

@ -3,10 +3,10 @@ from __future__ import annotations
import hashlib
from typing import Any
from oclaw.platform.config.paths import db_path
from oclaw.platform.embeddings.embedding_client import build_default_embedding_client
from oclaw.platform.persistence.sqlite_store import SqliteStore
from oclaw.runtime.tools.base import ToolSpec
from svc.config.paths import db_path
from svc.embeddings.embedding_client import build_default_embedding_client
from svc.persistence.sqlite_store import SqliteStore
from runtime.tools.base import ToolSpec
def _chunk_id(source: str, text: str) -> str:
@ -64,7 +64,7 @@ def kb_search_tool() -> ToolSpec:
if not tenant_id or not query:
return {"ok": False, "error": "tenant_id and query are required"}
store = SqliteStore(db_path())
from oclaw.runtime.orchestration.memory import retrieve_context
from runtime.orchestration.memory import retrieve_context
rows = retrieve_context(store, query, limit=max(1, min(limit, 6)))
filtered = [r for r in rows if str(r.get("source") or "").startswith(f"builtin:tenant:{tenant_id}:")]

View file

@ -2,9 +2,9 @@ from __future__ import annotations
from typing import Any
from oclaw.platform.config.paths import db_path
from oclaw.platform.persistence.sqlite_store import SqliteStore
from oclaw.runtime.tools.base import ToolSpec
from svc.config.paths import db_path
from svc.persistence.sqlite_store import SqliteStore
from runtime.tools.base import ToolSpec
def _require(s: str, name: str) -> str: