Skip to content

About

NotmyFault 可能是世界上最难用的自动化工具..........

Resources

Stars

5 stars

Watchers

1 watching

Forks

Repository files navigation

NotmyFault

闲着没事儿写的自动化工具......

NotmyFault 顾名思义是一个自动化(废话),由各种条件出发,以各种方式执行。 当前版本 alpha-0.15.0。项目站点:https://www.marshmallowmc.cn/

亮点

自动化软件,能干的事还是有些少的,并且很零碎......为了解决这个问题,NotmyFault最大的亮点就是可扩展性! 只要会Python,你随时可以编写一个属于自己的插件,让NotmyFault帮你办成任何事! 通过插件,NotmyFault可以拓展出强大的能力,接入任何服务/接口/设备,构建一个更通用的自动化。

平台支持

平台 状态 说明
Windows 主要开发平台 引擎、Dashboard 和大多数内置插件可用
Linux 实验性(糟糕)支持 桌面环境差异较大;Wayland 下全局热键和窗口标题检测不可用
macOS 暂不,也可能是永不支持 插件协议预留了平台字段,尚未适配

快速开始

Windows x64 预览安装包不需要本机 Python 或 Node.js。从源码运行需要:

  • Python 3.11+
  • Node.js 18+
  • Windows 10/11,或较新的 Linux 桌面环境(实验性)

Windows

Windows x64 可以安装预览包。下载见项目站点。安装后从开始菜单打开 NotmyFault。

从源码运行:

git clone https://github.com/cuteaplane/notmyfault.git
cd notmyfault

python -m venv .venv
.\.venv\Scripts\python -m pip install -r requirements-dev.txt

cd dashboard
npm install
npm run build
cd ..
python build.py
.\.venv\Scripts\python dashboard.pyw

dashboard.pyw 会拉起引擎进程 NOTMYFAULT.pyw,用来日常管理规则和安装插件。 首次运行源码前需要执行构建。缺少 build.json 或其签名时,引擎会拒绝启动;严格模式还会检查内置插件是否缺少签名。安装文件异常时,设置里的安全页会引导重新安装 NotmyFault。

Linux

Linux 支持仍处于极其糟糕的实验阶段。以 Ubuntu 系桌面为例:

git clone https://github.com/cuteaplane/notmyfault.git
cd notmyfault

python3 -m venv .venv
./.venv/bin/python -m pip install -r requirements-dev.txt

cd dashboard
npm install
npm run build
cd ..
./.venv/bin/python build.py
./.venv/bin/python dashboard.pyw

根据桌面环境,剪贴板、截图、空闲检测、亮度、按键和窗口功能还可能需要:

sudo apt install wl-clipboard xclip xdotool ydotool wmctrl xprop gnome-screenshot brightnessctl xprintidle

Wayland 默认禁止普通应用监听全局按键或枚举其他应用的窗口标题。NotmyFault 会跳过明确不兼容的平台插件,但仍然会受到环境的限制。

构建

构建入口是 build.py,负责管理安全模式。

命令 作用
python build.py build strict 构建:生成密码加密的私钥,签名全部插件和 build.json。不带子命令时默认执行它
python build.py build --security-mode=permissive 本地开发构建:使用不加密私钥,全程免密码
python build.py verify 校验所有插件签名,有缺失或无效时以非零退出码结束
python build.py init-keys 生成 Ed25519 密钥对;--encrypt 加密私钥,--force 覆盖已有密钥
python build.py version 查看密钥状态、公钥指纹和插件签名数量
  • 修改内置插件或核心源码后需要重新 build,否则旧签名失效。
  • 安全模式有 strict / normal / permissive 三档,以通过签名验证的 build.json 为准,缺少有效构建信息时默认 strict。环境变量 NOTMYFAULT_MODE 只能提高安全等级,不能降低。
  • normal 和 permissive 都使用不加密私钥,适合本地开发和测试。
  • normal 和 permissive 允许加载签名缺失或无效的插件;配置与规则的签名验证、插件结构检查和管理员执行确认仍然生效。

Windows 安装包由 installer/windows/build.ps1 构建。

规则模型

一条规则由三部分组成:

触发条件(AND / OR / NOT)→ 动作按顺序执行(支持 IF / ELSE)

触发条件统一使用 condition:单个触发器直接作为叶子,多个触发器用条件组组合。 旧规则的 event/trigger 在读取或导入时转换,保存后使用 condition。 触发器和动作带稳定的 binding_id,保存时会补齐;后续动作用 $ref 引用这些节点的输出:

{
  "name": "晚间亮度",
  "condition": {
    "op": "all",
    "children": [
      {
        "binding_id": "t_time01",
        "type": "time_schedule",
        "params": {"time": "20:00"}
      },
      {
        "binding_id": "t_power01",
        "type": "power_state",
        "params": {"state": "ac"}
      }
    ]
  },
  "actions": [
    {
      "binding_id": "a_bright01",
      "type": "display_control",
      "params": {
        "action": "set_brightness",
        "brightness": 70
      }
    },
    {
      "binding_id": "a_notify01",
      "type": "notify",
      "params": {
        "title": "NotmyFault",
        "message": "晚间亮度已调整"
      }
    }
  ]
}

NOT 用于等待指定事件未发生,必须设置等待时长;收到匹配事件后重新计时, 超时触发一次,直到再次收到事件后重新开始。它判断事件是否发生,不查询当前系统状态。 IF 根据本次触发数据或前序动作结果选择 THEN / ELSE 分支,执行完分支后继续后续动作。 运行前检查已移除,含非空 preconditions 的旧规则需要在编辑器中移除旧检查并重新配置。

Dashboard 侧栏是首页、自动化、插件和设置。运行记录在自动化里,安全在设置里。 规则在自动化页编辑和校验,也可以选用 AI 服务起草草稿。 规则支持只读常量和单次运行内的变量,参数可传递路径、时间、精确数字、结构化数据 及插件声明的共享类型。格式与类型协议见 docs/data-types.md。

条件树节点和数据引用格式见 docs/rule-schema-v2.md。

数据位置

平台 目录
Windows %APPDATA%\NotmyFault\
Linux $XDG_CONFIG_HOME/notmyfault/,未设置时为 ~/.config/notmyfault/

该目录下:

  • config.json:引擎配置。
  • rules.json:规则。
  • run-events.jsonl:运行记录。
  • plugin_manifest.json:已安装用户插件清单。
  • logs/:执行日志。
  • plugins/:用户安装的插件。
  • .api_token:Dashboard 与本地 API 之间共享的认证令牌。

本地 API 监听 127.0.0.1:19198。除 OPTIONS 外,/api/ 请求需要发送 Authorization: Bearer <token>;令牌保存在配置目录的 .api_token 中。 令牌缺失或不匹配时返回 403。 Dashboard 是 pywebview 桌面客户端,只能在本机使用。

开发与验证

后端测试:

python -m pytest -q

测试目录为 notmyfault/tests/(pytest.ini 的 testpaths)。默认不跑 system_native 和 linux_smoke。

Dashboard 构建与挂载测试:

cd dashboard
npm test

等于 vite build && node tests/mount.mjs && node tests/macro-page.mjs。

验证插件签名:

python build.py verify

检查、测试和打包用户插件:

python nmf.py plugin check path/to/plugin
python nmf.py plugin test path/to/plugin -q
python nmf.py plugin pack path/to/plugin --output-dir dist

notmyfault/simulator/ 提供模拟环境,可以在不接触真实系统的情况下跑规则。

开发文档:

已知限制

  • 这是 Alpha;我可能哪天不高兴就把配置格式改了
  • Linux 基本上就是个可用,当然可以自己写插件。
  • 部分插件名称和参数仍然偏开发,比如你看到的这一堆文档。
  • 显示器亮度、蓝牙、睡眠等系统功能会受到驱动、权限和硬件能力限制,当然你真的可以自己写插件来绕过。
  • 目前没有稳定版。Windows x64 有预览安装包;从源码运行仍需要 Python 和 Node.js

遇到问题时,请附上操作系统、复现步骤以及 logs/ 里最新的日志文件?真的会有人来提Issue吗...

License

GNU General Public License v3.0

About

NotmyFault 可能是世界上最难用的自动化工具..........

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages