MindOS_CLI/mindcli/capability.py
lidf 69dd868e2f init: MindOS CLI 本地执行体(从 mindOSv2/mindos-cli 独立)
- 独立 pyproject.toml(pip install -e .)
- vendor_hermes.sh 已改为显式路径模式(不再依赖相对目录)
- 包含 hermes vendor 快照
2026-04-28 13:12:54 +08:00

80 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Mind CLI — 能力扫描器。
扫描本地可用的内置工具和 MCP Server生成 capability report
供 Tunnel 握手时上报给 Cloud。
"""
import os
import platform
from typing import Any
import mindcli
# ── 内置工具注册表 ────────────────────────────────────
# 只暴露 Cloud 端有意义的本地工具(文件操作、终端、搜索等)
# 浏览器工具、TTS 等纯交互工具不上报
_BUILTIN_TOOLS: list[dict[str, str]] = [
{"name": "terminal", "type": "builtin", "desc": "执行终端命令"},
{"name": "file_read", "type": "builtin", "desc": "读取本地文件"},
{"name": "file_write", "type": "builtin", "desc": "写入本地文件"},
{"name": "file_ops", "type": "builtin", "desc": "文件操作(复制/移动/删除)"},
{"name": "grep", "type": "builtin", "desc": "文本搜索"},
{"name": "code_execution", "type": "builtin", "desc": "执行代码片段"},
]
def scan_capabilities() -> dict[str, Any]:
"""
扫描本地可用工具,返回 capability report。
返回格式:
{
"version": "0.1.0",
"vendor": "16f9d020",
"platform": "Darwin",
"arch": "arm64",
"python": "3.12.11",
"tools": [
{"name": "terminal", "type": "builtin", "desc": "..."},
...
],
"mcp_servers": [] # Phase 2+ 从 config.yaml 读取
}
"""
import sys
return {
"version": mindcli.__version__,
"vendor": _get_vendor_commit(),
"platform": platform.system(),
"arch": platform.machine(),
"python": f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}",
"tools": list(_BUILTIN_TOOLS),
"mcp_servers": _scan_mcp_servers(),
}
def get_tool_names() -> list[str]:
"""返回所有内置工具名称列表。"""
return [t["name"] for t in _BUILTIN_TOOLS]
def _scan_mcp_servers() -> list[dict[str, str]]:
"""
扫描用户配置的第三方 MCP Server。
TODO: 从 ~/.mindcli/config.yaml 的 mcp_servers 段读取。
"""
return []
def _get_vendor_commit() -> str:
commit_file = os.path.join(mindcli._VENDOR_DIR, "HERMES_COMMIT")
try:
with open(commit_file) as f:
return f.read().strip()
except FileNotFoundError:
return "unknown"