@trinoris / agent-sdk
用于Trinoris多代理协调协议的文件系统锁引擎-用于代理 以及需要进程中协议而不是通过CLI的工具。
import { acquire, inspect, release, breakLock, claim } from '@trinoris/agent-sdk';
const paths = { root: 'coordination' };
const r = acquire(paths, 'engine', { agent_instance: 'a1', agent_class: 'claude' }, 15);
if (!r.ok) { /* held by a peer — do not spin; pick other work or write a handoff */ }
为什么是这些原语,而不是那些显而易见的原语
发动机使用 mkdir 作为唯一的测试和设置,因为它是唯一的原语
经过验证的跨目标文件系统的原子性——包括WSL2到Windows的9p桥接
开车。两种看起来正确的设计在比赛中被证明是错误的:
mv -n不是原子的主张。 它在用户空间中执行stat-then-rename并返回 当它下降时,就会成功,所以两个赛车经纪人都得出结论,他们声称是一样的 切换。测量结果:8名选手中有2名参赛,100名选手中有21名失败。- 通过“删除-然后重新创建”双破锁来打破失效锁 - 25/60失败在8
参赛者,59/60在32 -因为一旦第一个断路器重新创建锁的名字是
再次被占用,后来的断路器驱逐 新 持有人。仅重命名就不能
解决它。因此,断裂被锁在原子后面
<scope>.breaking令牌。
flock 是故意不使用的:建议锁超过9p是不可靠的,和 flock
在进程退出时释放——对于在离散工具调用中工作的代理是错误的。
锁的存在不是所有权。 一个租约到期被驱逐的办事迟缓的代理人发现
目录与它离开时完全一样。只有 holder.json的 agent_instance 是权威,
所以再次确认 isHolder() 紧接在每批写操作之前。
许可证
Apache-2.0 -参见 许可证.