子专栏:从 issue 到交付

沿着一次 agent 任务的旅程,读调度、执行、上下文与界面背后的源码。

归属:Multica 源码解剖

  • 把 agent 当同事:Multica 的架构全貌

    一个 issue 被分配给 agent 之后,究竟发生了什么?沿着这条路径,先看清 Multica 的组件边界和它做的三个取舍。

  • 632 个迁移:数据模型如何长大

    从 13 张表的初始 schema 到 150 张表、632 个迁移,Multica 的数据库演进里有三条硬规则:外键退场、索引并发建、状态先分类再扩展。

  • 抢任务:调度器如何避免丢、重、空转

    一个 agent 任务从入队到开跑,要穿过 Redis 缓存、PostgreSQL 行锁和一条可能断开的 WebSocket。调度器真正难的,是三种失败:丢任务、双领、空转。

  • Daemon:把二十多种 agent CLI 变成同一支队伍

    Multica 不实现 agent,它驱动你机器上已有的 CLI。真正难的是:路径会漂移、目录会撞车、进程会失联,而每一种 CLI 的脾气都不一样。

  • Prompt 不是模板:上下文如何按层组装

    把 issue、评论、仓库、技能全塞进 prompt,是最直觉也最昂贵的做法。Multica 反过来做:prompt 只给入口和规矩,剩下的让 agent 自己用 CLI 去读。

  • 事件到达之前:WebSocket 与多副本广播

    一个 agent 正在跑,界面要实时显示它的每一步。难点不在推送,而在只推给该看的人、多副本不重复、断线后还能接上。

  • 一套业务逻辑,三端运行

    Web、桌面、手机共用一套业务逻辑,不是把组件复制三份,而是把"平台能力"抽成接口,把"服务端状态"关进 Query 缓存。

  • 53% 的代码是测试:这个仓库的工程纪律

    66 万行 Go、56 万行 TypeScript、632 个迁移,靠什么不塌?答案不在某个框架,而在几条被写进仓库、能被 CI 执行的规矩。