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#

Scheduler

候选排序和并发控制。

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 -- 智能体配置

返回:

可分派的问题列表(已排序,数量不超过可用槽位)