mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 05:50:44 +08:00
- 在 oclaw/ 下重新初始化 Git 仓库 - 补齐子仓库 .gitignore,避免提交本地运行态数据(_local、node_modules、logs 等) - 提交当前工程代码与配置 Made-with: Cursor
63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from .shared_types import GatewayRequestHandlers
|
|
from .validation import error_shape
|
|
|
|
|
|
def _read_configured_log_tail(*, cursor: int | None, limit: int | None, max_bytes: int | None) -> dict[str, Any]:
|
|
# Placeholder runtime adapter for Python rewrite stage.
|
|
return {
|
|
"cursor": cursor or 0,
|
|
"lines": [],
|
|
"nextCursor": cursor or 0,
|
|
"limit": limit or 0,
|
|
"maxBytes": max_bytes or 0,
|
|
}
|
|
|
|
|
|
def _validate_logs_tail_params(params: Any) -> bool:
|
|
if not isinstance(params, dict):
|
|
return False
|
|
for key in ("cursor", "limit", "maxBytes"):
|
|
if key in params and not isinstance(params[key], int):
|
|
return False
|
|
return True
|
|
|
|
|
|
def _logs_tail_handler(opts: dict[str, Any]) -> Any:
|
|
respond = opts.get("respond")
|
|
params = opts.get("params")
|
|
if not callable(respond):
|
|
return None
|
|
if not _validate_logs_tail_params(params):
|
|
respond(
|
|
False,
|
|
None,
|
|
error_shape("INVALID_REQUEST", "invalid logs.tail params"),
|
|
None,
|
|
)
|
|
return None
|
|
p = params if isinstance(params, dict) else {}
|
|
try:
|
|
result = _read_configured_log_tail(
|
|
cursor=p.get("cursor"),
|
|
limit=p.get("limit"),
|
|
max_bytes=p.get("maxBytes"),
|
|
)
|
|
respond(True, result, None, None)
|
|
except Exception as exc:
|
|
respond(
|
|
False,
|
|
None,
|
|
error_shape("UNAVAILABLE", f"log read failed: {exc}"),
|
|
None,
|
|
)
|
|
return None
|
|
|
|
|
|
logs_handlers: GatewayRequestHandlers = {
|
|
"logs.tail": _logs_tail_handler,
|
|
}
|
|
|