taolib.symphony.orchestrator.scheduler#
Symphony 调度器 — 候选排序与并发控制。
负责候选问题的优先级排序、全局和每状态的槽位计算、 以及分派资格判断。所有方法均为纯函数,不持有可变状态。
排序规则(规范 §8.2): 1. priority 升序(1..4 优先;null/未知排最后) 2. created_at 最旧优先 3. identifier 字典序决胜
并发控制(规范 §8.3): - 全局限制:available_slots = max(max_concurrent_agents - running_count, 0) - 每状态限制:max_concurrent_agents_by_state[state],状态键小写规范化 - 无每状态配置时回退到全局限制
Classes#
候选排序和并发控制。 |
Module Contents#
- class taolib.symphony.orchestrator.scheduler.Scheduler#
候选排序和并发控制。
无状态的工具类,所有方法接受 state 参数进行判断。 对齐规范 §8.2(候选选择规则)和 §8.3(并发控制)。
- sort_for_dispatch(issues: list[taolib.symphony.tracker.models.Issue]) list[taolib.symphony.tracker.models.Issue]#
按分派优先级排序候选问题列表。
排序键(稳定排序意图): 1. priority 升序(1..4 优先;null/未知排最后,映射为 999) 2. created_at 最旧优先(null 映射为 datetime.max) 3. identifier 字典序决胜
- 参数:
issues -- 候选问题列表
- 返回:
排序后的新列表(不修改原列表)
- available_slots(state: taolib.symphony.orchestrator.state.OrchestratorState) int#
计算全局可用槽位。
- 参数:
state -- 编排器当前状态
- 返回:
可用槽位数(>= 0)
- available_slots_for_state(issue_state: str, state: taolib.symphony.orchestrator.state.OrchestratorState, config: taolib.symphony.config.schema.AgentConfig) int#
计算指定状态的可用槽位。
当 max_concurrent_agents_by_state 中存在该状态的配置时, 使用该配置的上限;否则回退到全局限制。
状态键按小写规范化后查找(规范 §5.3.5)。
- 参数:
issue_state -- 问题跟踪器状态名称
state -- 编排器当前状态
config -- 智能体配置
- 返回:
该状态下的可用槽位数(>= 0)
- should_dispatch(issue: taolib.symphony.tracker.models.Issue, state: taolib.symphony.orchestrator.state.OrchestratorState) bool#
判断是否应分派该 issue。
检查规则(规范 §8.2 候选选择规则): 1. issue 具有 id、identifier、title 和 state 2. 不已在 running 中 3. 不已在 claimed 中 4. 不已在 retry_attempts 中
注意:Todo 状态的阻塞规则检查需要额外的阻塞项状态信息, 此处基于 Issue.blocked_by(阻塞方 ID 列表)做保守判断—— 当 blocked_by 非空时,由编排器在分派前通过对账确认阻塞项状态。 全局和每状态槽位检查由调用方在循环中执行。
- 参数:
issue -- 待判断的候选问题
state -- 编排器当前状态
- 返回:
True 表示应分派
- filter_dispatchable(issues: list[taolib.symphony.tracker.models.Issue], state: taolib.symphony.orchestrator.state.OrchestratorState, config: taolib.symphony.config.schema.AgentConfig) list[taolib.symphony.tracker.models.Issue]#
从候选列表中筛选可分派的问题,按优先级排序。
依次检查全局槽位、每状态槽位和分派资格, 返回在当前槽位限制下可分派的问题子列表。
- 参数:
issues -- 候选问题列表
state -- 编排器当前状态
config -- 智能体配置
- 返回:
可分派的问题列表(已排序,数量不超过可用槽位)