Skip to content

About

Daedalus 内置插件 monorepo(6 插件各独立 go.mod)

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

daedalus-plugins — 6 个 Go 能力插件 monorepo

四层结构中的插件层:官方 Go 能力插件(capability, runtime=native)的 monorepo,独立仓根。copilot 插件(Deno)留主仓 daedalus-core/plugin/copilot/,不在此仓。

每个插件一个子目录,内含 daedalus.plugin.json(manifest)+ cmd/(Go 源码)+ bin/(构建产物,just plugin-pack 拷入,不入库)。各插件独立 go.mod (module github.com/Daedalusys/daedalus-plugins/<cap>),经 replace github.com/Daedalusys/daedalus-sdk => ../daedalus-sdk 引用 SDK(该路径为 插件仓 CI 形状;本地三仓平级布局由主仓 daedalus-core/go.work 的 replace 覆盖)。 仓根 go.work 聚合各插件模块。

插件索引

插件 id MCP 工具 依赖 SDK 包 说明
fs/ daedalus.fs read_file / write_file / list_dir / move_file pathguard 路径作用域文件读写;ALLOWED_DIRS 前缀边界 + realpath 防逃逸
shell/ daedalus.shell shell_exec shellpolicy 15 命令白名单 / 4 bin 目录 / 路径规则;CLEAN_ENV、30s、rc 126/124;零 /bin/sh 包装
pkg/ daedalus.pkg dnf_query / dnf_list_installed pkgquery dnf/rpm 只读查询(rpm 优先、dnf repoquery 兜底);声明 resources(kind: package)
sysinfo/ daedalus.sysinfo os_release / hardware_info / network_status sysinfo os-release / cpuinfo / meminfo / 网络只读探测
service/ daedalus.service service.query / service.list objectmodel、state、dirs systemd 单元只读观测;唯一声明 resources(kind: service)的官方插件;状态变更一律走 daedalus-tx
blueprint/ daedalus.blueprint blueprint_list / blueprint_inspect / blueprint_render / blueprint_apply / blueprint_status / blueprint_remove blueprint、shellpolicy(post_check 钩子) 6 个参数化配置蓝图(nginx/postgres/redis/haproxy);数据经 //go:embed 编入二进制,源码侧 blueprints/ 是唯一事实源

命名语义(目录名 ≠ 系统组件,是"能力提供者")

用户反馈"命名容易让人摸不着头脑"——shell/ 不是 shell 本身,service/ 不是 systemd 服务。本节澄清两个标识符的分工。

每个插件有两个名字,职责不同、互不替代:

标识符 例子 性质 用途
目录名 / id(技术标识符) shell/、daedalus.shell 稳定、机器可解析 systemd 单元名、CI、import 路径、copilot 硬编码引用、daedalus-host 发现/校验——改动即破坏全链路
name 字段(显示名) Daedalus Command Execution 人类可读、可自由演进 daedalus-host list / inspect 展示、UI 呈现——只影响展示,不影响任何机器行为

目录名是技术标识符,name 是显示名,两者分离的原因:技术标识符一旦发布就被 systemd 单元、CI、import 路径、copilot 硬编码引用锁定,改名成本极高且无功能收益; 显示名则随时可以按"能力语义"调整,让人类一眼看懂这个插件提供什么能力。

6 个插件目录名 → 实际能力对照(目录名 ≠ 系统组件):

目录名 / id 显示名(name) 实际能力(不是……)
fs/ (daedalus.fs) Daedalus Filesystem Access 路径作用域文件读写能力——不是文件系统本身
shell/ (daedalus.shell) Daedalus Command Execution 受控命令执行能力(15 命令白名单沙箱)——不是 shell 解释器
pkg/ (daedalus.pkg) Daedalus Package Query dnf/rpm 只读包查询能力——不是包管理器
sysinfo/ (daedalus.sysinfo) Daedalus System Information 只读系统信息探测能力
service/ (daedalus.service) Daedalus Service Query 只读服务状态查询能力——不是 systemd 服务,也不改服务状态(状态变更走 daedalus-tx)
blueprint/ (daedalus.blueprint) Daedalus Blueprint 参数化配置蓝图渲染/应用能力

约定:目录名与 id 永不改;显示名 name 按"XX 能力"语义命名,改动只影响展示层。

目录布局(以 fs/ 为例)

fs/
├── daedalus.plugin.json      # manifest(id/type/runtime/executable/tools/resources/permissions)
├── cmd/daedalus-fs/          # Go 源码(go-sdk stdio MCP 服务器)
├── bin/daedalus-fs           # 构建产物(just plugin-pack 拷入;不入库)
├── go.mod / go.sum           # module github.com/Daedalusys/daedalus-plugins/fs
└── i18n/                     # locale 文件(如有)

blueprint/ 另有 blueprints/ 数据目录(6 蓝图 × 5 文件,源码侧唯一事实源; 构建期经 just blueprint-embed rsync 到 cmd/daedalus-blueprint/blueprints/ 供 //go:embed,复制产物不入库)。

跨仓 release 流程

插件仓不独立发布——发布以主仓镜像构建为出口,插件仓只演进源码:

  1. 改插件源码(本仓 <cap>/cmd/ 或 manifest)→ 逐 cap 独立模块 cd <cap> && go build ./... && go test ./... 自检(仓根无 go.mod;依赖 SDK 经 replace 指向平级 daedalus-sdk/,3 仓须平级 clone);
  2. SDK 变更联动:插件依赖的 SDK 包改动在 daedalus-sdk/ 仓独立演进, 插件仓经 replace 自动跟随本地 checkout;跨仓契约由 tests/deno/shellpolicy_contract.test.ts(Go↔Deno)与各仓漂移测试钉住;
  3. 打包:主仓 just plugin-pack —— 构建全部 Go 二进制 → 同步到 daedalus-plugins/<cap>/bin/ → daedalus-plugin-pack 打 zip(注入逐条目 sha256 checksums + manifest 规范化自摘要)→ -verify --keep 解压到镜像树 安装态 daedalus-core/files/system/opt/daedalus/plugins/daedalus.<cap>/;
  4. 构建期自校验:76-daedalus-plugin-gen.sh 从 manifest + policy.toml 渲染 systemd ExecStart,交叉核对 tools 与二进制 stdio tools/list、resources[].kind ⊆ [objectmodel].enabled_kinds,漂移即拒构建;
  5. 镜像出口:主仓 just build(sync + podman build)→ 镜像内 7 插件 (copilot + 6 能力)全 ok 断言在 v3 构建机补跑。

版本策略:插件 manifest version 与 SDK 包版本各自演进;插件仓不产 独立 release artifact,镜像即发布物。

开发与测试

for cap in fs shell pkg sysinfo service blueprint dupe trace proc; do   # 9 模块全量
    (cd "$cap" && go build ./... && go test ./...)
done
  • 包内注释一律中文(仓库根 CONVENTIONS)。
  • 本仓不产镜像产物;安装态由主仓 just plugin-pack 生成,勿手改 daedalus-core/files/system/opt/daedalus/plugins/。
  • 新增插件 = 本仓加新目录(manifest + cmd/ + bin/)→ 主仓 just plugin-pack 循环纳入 → 76-daedalus-plugin-gen.sh 渲染 systemd 单元。

Where to file issues

请在新仓开 issue。本 issue tracker 仅服务本仓代码:

  • 跨仓问题(如同时影响 SDK 与 plugins)请先开在本仓,影响面大者会在评论里 cross-link 到其他仓。
  • 老仓 Daedalusys/Daedalusys 已于 2026-09-21 archived,历史 issue 保留可读;新 issue 一律开在本仓。

About

Daedalus 内置插件 monorepo(6 插件各独立 go.mod)

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages