mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 07:20:44 +08:00
本次迁移将网关/通道/工具/技能/脚本与协议资源集中到新结构,统一路径常量与脚本转发机制,减少顶层噪音并保证运行与测试行为一致。 Made-with: Cursor
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import difflib
|
|
from typing import Any
|
|
|
|
from oclaw.runtime.tools.base import ToolSpec
|
|
|
|
|
|
def config_diff_tool() -> ToolSpec:
|
|
def handler(args: dict[str, Any]) -> dict[str, Any]:
|
|
left_name = str(args.get("left_name") or "left")
|
|
right_name = str(args.get("right_name") or "right")
|
|
left = str(args.get("left") or "")
|
|
right = str(args.get("right") or "")
|
|
left_lines = left.splitlines(keepends=False)
|
|
right_lines = right.splitlines(keepends=False)
|
|
diff_lines = list(
|
|
difflib.unified_diff(left_lines, right_lines, fromfile=left_name, tofile=right_name, lineterm="")
|
|
)
|
|
return {"ok": True, "diff": "\n".join(diff_lines), "changed": left_lines != right_lines}
|
|
|
|
return ToolSpec(
|
|
name="config_diff",
|
|
description="Compare two configuration texts and return a unified diff.",
|
|
parameters={
|
|
"type": "object",
|
|
"properties": {
|
|
"left_name": {"type": "string", "description": "Optional label for the left side."},
|
|
"right_name": {"type": "string", "description": "Optional label for the right side."},
|
|
"left": {"type": "string", "description": "Left configuration text."},
|
|
"right": {"type": "string", "description": "Right configuration text."},
|
|
},
|
|
"required": ["left", "right"],
|
|
"additionalProperties": False,
|
|
},
|
|
handler=handler,
|
|
)
|
|
|
|
|
|
__all__ = ["config_diff_tool"]
|