dsh-plugin-easyeda-agent
嘉立创 EDA 专业版(EasyEDA Pro)自动化插件:给 DeepSeek Harness 的 Agent 装上「画板的手 + 工艺/绘制规则的脑」。
参考 easyeda-agent 的架构,但实现为一个 DSH 原生 Host 插件(直接注册工具与技能,无需 MCP 中转),并新增一等公民的知识层(工艺参数/绘制原则)。
架构(自下而上分层)
skill/SKILL.md 教 agent 全流程怎么走(需求→建库→原理图→布局→布线→检查)
lib/tools.js 工具层:easyeda_health/knowledge/apply/gate/actions/call/blocks/project_transfer/docs(workflow 已弃用)
lib/knowledge.js 知识层:读 knowledge/*.md + 实时拉官方文档
lib/actions.js 动作层:类型化动作目录 + 路由守卫 + 参数组装
lib/transport.js 传输层:复用 `easyeda` CLI(Go daemon + EDA Agent Connector)
knowledge/*.md 工艺参数(PROCESS) / 绘制原则(DRAWING_PRINCIPLES) / 官方文档索引(OFFICIAL_DOCS)
- transport.js 是唯一与 EasyEDA 后端打交道的地方,换后端只改这一层。
- actions.js 把「动作目录 + 写前守卫」收敛到一起,保证写操作必须显式绑定 project/doc。
- knowledge/ 是相对参考实现的增量:agent 绘制过程中随时查工艺参数与绘制原则,并可用
easyeda_docs 拉官方文档核对。
前置依赖
本插件复用 easyeda CLI 作为后端(即参考项目的 Go CLI/daemon + EDA Agent Connector):
- 安装
easyeda CLI 并 easyeda daemon start;
- 在 EasyEDA Pro 安装 EDA Agent Connector 扩展并开启「设置 → 允许外部交互」;
easyeda health 能列出已连窗口即就绪。
若你的 CLI 不在 PATH,配置里指定 easyedaBin 或用环境变量 EASYEDA_BIN。
安装
方式一:clone 后按目录安装(推荐,最稳)
git clone https://github.com/new-233/easyeda-agent.git
然后在 DSH 里:
plugin_manager install_bundle target=<克隆出来的 easyeda-agent 目录绝对路径>
方式二:直接按 GitHub 包安装
plugin_manager install_bundle target=github:new-233/easyeda-agent#main
⚠️ 本插件把 @deepseek-ai/schemastery vendor 在 node_modules/ 里(schemastery 并不在
DSH profile 中,所以它必须随包提供)。若你的安装器按 npm 打包语义丢掉了 node_modules,
插件会降级运行:Config 不再生效(easyedaBin/timeoutMs 用默认值,EASYEDA_BIN
环境变量仍有效),工具与知识层照常工作。要保留可配置性,请用方式一。
组合包补丁(cordis.patch.yml)用相对路径 ./lib/main.js(Loader 会把它锚定在 patch
文件所在目录),因此仓库放在哪里都能加载,不绑死本机绝对路径。
改代码后:递增 lib/main.js 的 VERSION,重新 install_bundle,然后重启 DSH
(替换已安装的包需要重启才能加载新的模块代)。
配置
- id: easyeda-agent
config:
enabled: true
easyedaBin: '' # 留空 = 环境变量 EASYEDA_BIN 或 PATH 上的 easyeda
timeoutMs: 300000 # CLI 单次调用超时
迭代路线图(逐步完善,直至全流程自动化)
如何迭代(改哪里、要不要重启)
| 你想改的东西 | 改哪个文件 | 生效方式 |
|---|
| 你自己的项目规则(线宽/封装/禁止项/验收标准) | knowledge/rules.md | 改完立即生效 |
| 工艺参数基线 | knowledge/process.md | 改完立即生效 |
| 绘制原则 | knowledge/drawing.md | 改完立即生效 |
| 新增一类知识(如"本项目的叠层规范") | 往 knowledge/ 丢一个 .md | 改完立即生效(目录自动扫描,主题 id = 文件名小写) |
| Agent 工作流 / 提示词 / 护栏 | skill/SKILL.md | 需重启 DSH |
| 新增/修改工具、动作路由、换后端 | lib/*.js | 需重启 DSH |
| CLI 路径 / 超时 | profile 的 cordis.patch.yml 中 easyeda-agent 的 config | 保存即热重载 |
两种迭代方式:
- 你自己改:改
knowledge/*.md 最省事——纯 Markdown、改完立即生效,Agent 下次绘制就会读到;想加一类新规则,直接往 knowledge/ 丢一个新 .md 即可(目录自动扫描,无需改代码)。
- 交给 Agent:直接说需求或规则,由 Agent 改代码 / 知识文件;涉及
lib/ 或 skill/ 时,Agent 会递增 VERSION 并重装,然后告知是否需要重启 DSH。
⚠️ 只有 knowledge/*.md 是真正"免重启热更新"的。lib/ 与 skill/ 的改动需要重启 DSH——
这是 DSH 的机制(官方文档:replacing an installed package requires restart to load a fresh JavaScript module generation)。
目录速查
| 文件 | 作用 |
|---|
lib/main.js | 插件入口(Config / apply / 注册工具与技能) |
lib/tools.js | 工具定义(改工具面在这) |
lib/actions.js | 类型化动作与参数组装(改动作路由在这) |
lib/transport.js | easyeda CLI 传输(换后端在这) |
lib/knowledge.js | 知识读取与文档拉取 |
knowledge/*.md | 工艺参数 / 绘制原则 / 官方文档索引(改规则在这) |
skill/SKILL.md | agent 全流程工作流(改流程在这) |
自检(改完代码先跑这个)
$env:EASYEDA_DIR='<本插件目录>'
$env:EASYEDA_PLAYBOOK='<任意 playbook.json,可选>'
node scripts/selfcheck.mjs
| 步骤 | 验什么 |
|---|
verify.mjs | 入口/配置/知识主题/工具面能否构建 |
runtime-check.mjs | 每个工具在后端缺失时仍返回无损 JSON(DSH 硬要求:不能出现 undefined) |
flow-selftest.mjs | easyeda_apply / easyeda_gate 的 argv 逐字断言 + 全部守卫必然报错 |
gate-flag-audit.mjs | 白名单里的旗标确实被真实 CLI 支持(抓「发明旗标」,单测抓不到) |
flow-integration.mjs | 构造器产出的 argv 真的交给 easyeda CLI 跑一遍(需 EASYEDA_PLAYBOOK) |
全部通过时打印 SELFCHECK_OK。这些步骤不读写任何 EDA 工程。
维护注意(两个容易踩的坑)
easyeda skill sync 不管 ~/.dsh/skills/。 它只认 claude / codex / agents 三个客户端目录
(easyeda skill --help 可核对)。而 DSH 实际加载的是 ~/.dsh/skills/easyeda-agent。
→ 升级 CLI 时这一份必须手工同步,否则代理读到的流程指引会和 CLI 版本脱节。
- 本机
github.com 不可达(api.github.com / objects.githubusercontent.com 可达)。
easyeda update 直接走 github.com/.../releases/download/...,因此必然超时
(且它是先下二进制再取 checksums,失败时不会破坏已安装的二进制)。
绕法:走 api.github.com/repos/<owner>/<repo>/releases/assets/<id>
(带 Accept: application/octet-stream,会 302 到可达的 objects 主机),
下完必须用 checksums.txt 校验 SHA256 再安装。