fist-mbt

    FIST commander task orchestration rewritten in pure MoonBit, exposed as an MCP server.

    MCP
    task-orchestration
    multi-agent
    FIST
    Download zip
    Author
    Version
    0.3.10
    License
    Apache-2.0
    Last updated
    6 days ago
    Downloads
    119

    #vicTop-cw/fist-mbt

    FIST 指挥官任务分配体系——纯 MoonBit 实现,同时作为 MCP Server 暴露给 AI 客户端。

    #特性

    • 140+ MCP 工具(+3 resources +2 prompts):任务生命周期(publish/plan/claim/execute/submit/verify/reject/retry 等)、DAG 依赖图与排程家族(dag_slack/dag_mc/dag_cost_route)、自我记忆与自进化(memory_* / evolve_*)、Omega 强验证、多租户命名空间、定时看门狗、审计与权限、可靠性机制(saga 补偿 / plan_revise / goal_drift_check / health_check / circuit_breaker / tx_contract 迁移契约 / eval_feedback 反馈收敛)、调用日志 call_log 与 bug 上报修复闭环。
    • AI 自驱式编程闭环:审视 → 拆解 → 发布 自收敛,selfdrive_* 系列工具 + watchdog_tick 无人值守。
    • 双后端:JS(默认,MCP server)与 Native(SQLite)均可运行,测试全绿(JS 端 1964/1964,含 quickcheck 属性测试;Native 端本轮未复跑)。
    • 自进化:memory_consolidate / evolve_distill 把验收通过的任务蒸馏为原则,失败回流为 lesson。

    #依赖

    • mizchi/sqlite@0.3.1(native 后端)
    • colmugx/mcp@0.17.4
    • moonbitlang/async@0.22.3
    • moonbitlang/x@0.5.5

    #使用

    以 MCP Server 方式由 AI 客户端或 CLI 驱动,详见仓库 README.md / README_EN.md 与 docs/。

    #许可

    Apache-2.0

    FistEngine

    核心引擎:持有 store,暴露指挥-执行-验收完整闭环。 store 为后端路由(内存 / SQLite),业务逻辑不感知具体实现。

    SqliteStore

    SQLite 后端:持有打开的 Database(Option 以承载 open 失败场景)。

    字段为什么是 mut(BUG-463):close() 必须把 Some(db) 归零成 None, 否则「已关闭」这件事在类型里无处可存 —— 既做不出幂等(二次 close 会对着已释放的 底层句柄再 close 一次),也做不出「关闭后既有操作返回 Err 而非 panic」。 归零后全文件 60 处 match self.db 的 None 分支自动接手:返回 Err("sqlite store 未打开") / 空集合 / false(见各函数),全文件零 abort。

    closed 与 db = None 不是同一件事(BUG-463 回归面):db == None 只说明 「当前没有可用句柄」,而底层句柄可能已被外部先关掉(白盒测试直接 match s.db { Some(db) => db.close() } 是合法写法,store 无从得知)。那种情况下 db 仍是 Some(已关闭句柄),再 close 一次会让 node:sqlite 抛 database is not open ⇒ 进程级未捕获异常。closed + 容错关闭一起保证对外语义: close() 恒成功、可重复调用,两种幂等面(自己关过 / 别人先关过)都覆盖。

    Task

    FIST-Mbt 对外门面:向包使用者导出主要公共类型与 server 入口。 实现源码分类位于 src/ 下各子包。

    TaskStatus

    任务七态状态机

    run_server

    async fn run_server() -> Unit

    Source Files