核心能力
1. Process Sandbox
每个外部工具运行在独立进程沙箱中,具备资源限制(CPU 核心数、内存上限、磁盘 IO 配额、运行时间上限)。沙箱间完全隔离,一个工具的崩溃不影响其他工具或 iEDA 主进程。支持容器化(Docker/Podman)和原生 cgroups 两种模式。
2. Protocol Adapter
标准化不同外部工具的输入/输出格式。每个 adapter 定义 input_schema(工具接受的参数与文件格式)和 output_schema(工具输出的结构化表示)。Adapter 负责将 iEDA 内部数据(iDB)转换为外部工具所需格式,以及将外部工具输出解析回 iEDA 内部表示。
3. Version Detection
自动探测外部工具版本与 capability。启动时查询工具的 --version 输出并解析为结构化版本号。维护 capability registry:某个功能在哪个版本引入、哪些参数在哪个版本废弃。Agent 调用前自动检查版本兼容性。
4. License Management
商业工具的 license 池化、租约与抢占。Agent 调用商业工具前需获取 license lease(带超时的租约)。支持优先级队列:高优先级任务可抢占低优先级 lease(需安全退出)。License 使用情况持续监控并记录审计日志。
5. Result Parsing
结构化解析外部工具的报告和日志。将工具原始输出(text/log/XML/JSON)解析为统一的ToolResult 对象,包含:status(success/warning/error)、violations(结构化违规列表)、metrics(数值化的度量指标)、raw_log(原始日志备份)。
Agent 调用方式
from ieda.agent import ExternalToolBridge, SandboxConfig
bridge = ExternalToolBridge()
# 注册外部工具 adapter
bridge.register(
name="magic",
binary="/usr/local/bin/magic",
adapter="magic_adapter_v2",
sandbox=SandboxConfig(
cpu_cores=4, memory_gb=8, timeout_sec=3600,
isolation="docker"
)
)
# 版本探测
version = bridge.detect_version("magic")
# version: {major: 8, minor: 3, patch: 463, capabilities: [...]}
# License 获取(商业工具)
lease = bridge.acquire_license(
tool="genus", feature="Innovus_Impl_System", timeout_sec=7200
)
# lease: {id: "lease-42", expires: "2025-07-30T14:00:00", priority: "normal"}
# 安全调用外部工具
result = bridge.call(
tool="magic",
args=["drc", "check", "-design", "top"],
input_files={"/in/top.def": def_bytes},
sandbox=SandboxConfig(memory_gb=4)
)
# result: ToolResult {
# status: "success",
# violations: [{type: "min_width", layer: "m2", location: ...}],
# metrics: {total_drc: 12, elapsed_sec: 45.3}
# }
# 释放 license
bridge.release_license(lease.id)
// MCP 协议:Agent 通过 Bridge 调用外部工具
{
"method": "tools/call",
"params": {
"name": "bridge.execute",
"arguments": {
"tool": "magic",
"command": ["drc", "check", "-design", "top"],
"sandbox": {
"memory_gb": 8,
"cpu_cores": 4,
"timeout_sec": 3600
},
"license": {
"feature": "DRC_Engine",
"priority": "normal",
"timeout_sec": 7200
},
"callback": "agent.on_tool_complete"
}
}
}
# Tcl 接口:外部工具桥接
ieda::bridge register -name magic -bin /usr/local/bin/magic
ieda::bridge version magic
# magic 8.3.463 (capabilities: drc extract lvs)
ieda::bridge call magic -args {drc check -design top} -mem 8G -timeout 3600
# result: success, 12 DRC violations, 45.3s
ieda::bridge license acquire -tool genus -feature Innovus_Impl_System
# lease-42 acquired, expires 2025-07-30T14:00:00
输入/输出契约
| 方向 | 字段 | 类型 | 说明 |
|---|---|---|---|
| 输入 | tool | str | 已注册的外部工具名称 |
| 输入 | args | list[str] | 工具命令行参数 |
| 输入 | sandbox | SandboxConfig | 资源限制与隔离配置 |
| 输入 | input_files | dict[str, bytes] | 传递给工具的输入文件映射 |
| 输入 | license_feature | str | 需要的 license feature 名称 |
| 输出 | result | ToolResult | 结构化工具执行结果 |
| 输出 | output_files | dict[str, bytes] | 工具产生的输出文件 |
| 输出 | sandbox_stats | dict | 沙箱资源使用统计 |