baa-conductor

git clone 

baa-conductor / packages / auth / src
im_wower  ·  2026-03-21

actions.ts

  1export type AuthResourceBinding = "none" | "controller" | "worker";
  2
  3export const AUTH_ACTIONS = [
  4  "controllers.heartbeat",
  5  "leader.acquire",
  6  "tasks.create",
  7  "tasks.plan",
  8  "tasks.claim",
  9  "steps.heartbeat",
 10  "steps.checkpoint",
 11  "steps.complete",
 12  "steps.fail",
 13  "system.pause",
 14  "system.resume",
 15  "system.drain",
 16  "system.state.read",
 17  "tasks.read",
 18  "tasks.logs.read",
 19  "runs.read",
 20  "maintenance.promote",
 21  "maintenance.demote"
 22] as const;
 23
 24export type AuthAction = (typeof AUTH_ACTIONS)[number];
 25
 26export interface AuthActionDescriptor {
 27  summary: string;
 28  mutatesState: boolean;
 29  resourceBinding: AuthResourceBinding;
 30}
 31
 32export const AUTH_ACTION_DESCRIPTORS = {
 33  "controllers.heartbeat": {
 34    summary: "controller 上报心跳并刷新自身活跃状态",
 35    mutatesState: true,
 36    resourceBinding: "controller"
 37  },
 38  "leader.acquire": {
 39    summary: "controller 获取或续租 leader lease",
 40    mutatesState: true,
 41    resourceBinding: "controller"
 42  },
 43  "tasks.create": {
 44    summary: "通过可见 control 会话创建新 task",
 45    mutatesState: true,
 46    resourceBinding: "none"
 47  },
 48  "tasks.plan": {
 49    summary: "leader conductor 持久化已验收的 plan",
 50    mutatesState: true,
 51    resourceBinding: "controller"
 52  },
 53  "tasks.claim": {
 54    summary: "controller 领取待规划 task 或下一个 runnable step",
 55    mutatesState: true,
 56    resourceBinding: "controller"
 57  },
 58  "steps.heartbeat": {
 59    summary: "worker 为已分配 step 持续续心跳",
 60    mutatesState: true,
 61    resourceBinding: "worker"
 62  },
 63  "steps.checkpoint": {
 64    summary: "worker 为已分配 step 写 checkpoint",
 65    mutatesState: true,
 66    resourceBinding: "worker"
 67  },
 68  "steps.complete": {
 69    summary: "worker 标记已分配 step 完成",
 70    mutatesState: true,
 71    resourceBinding: "worker"
 72  },
 73  "steps.fail": {
 74    summary: "worker 标记已分配 step 失败",
 75    mutatesState: true,
 76    resourceBinding: "worker"
 77  },
 78  "system.pause": {
 79    summary: "暂停系统调度",
 80    mutatesState: true,
 81    resourceBinding: "none"
 82  },
 83  "system.resume": {
 84    summary: "恢复系统调度",
 85    mutatesState: true,
 86    resourceBinding: "none"
 87  },
 88  "system.drain": {
 89    summary: "进入 drain 模式,停止新分配",
 90    mutatesState: true,
 91    resourceBinding: "none"
 92  },
 93  "system.state.read": {
 94    summary: "读取当前系统状态、队列和运行态汇总",
 95    mutatesState: false,
 96    resourceBinding: "none"
 97  },
 98  "tasks.read": {
 99    summary: "读取 task 详情",
100    mutatesState: false,
101    resourceBinding: "none"
102  },
103  "tasks.logs.read": {
104    summary: "读取 task 或 run 关联日志",
105    mutatesState: false,
106    resourceBinding: "none"
107  },
108  "runs.read": {
109    summary: "读取 run 详情",
110    mutatesState: false,
111    resourceBinding: "none"
112  },
113  "maintenance.promote": {
114    summary: "执行主备切换或 promote 类维护操作",
115    mutatesState: true,
116    resourceBinding: "none"
117  },
118  "maintenance.demote": {
119    summary: "执行 demote 或维护降级操作",
120    mutatesState: true,
121    resourceBinding: "none"
122  }
123} satisfies Record<AuthAction, AuthActionDescriptor>;
124
125export function isReadAction(action: AuthAction): boolean {
126  return !AUTH_ACTION_DESCRIPTORS[action].mutatesState;
127}