96659759b0
- Agent OS:agents 决策循环、runtime 编排、providers、governance/security/sandbox - app 服务层(认证转发到 server-core)、channels 19 路频道、memory、plugins
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Compile declarative custom loop modes into stop handlers."""
|
|
from __future__ import annotations
|
|
|
|
from ..config.config import CustomLoopModeConfig
|
|
from .catalog import GateCatalog, get_gate_catalog
|
|
from .gates.configured import ConfiguredGate
|
|
from .gates.handler import StopHandler
|
|
|
|
|
|
def compile_loop_mode(
|
|
config: CustomLoopModeConfig,
|
|
catalog: GateCatalog | None = None,
|
|
) -> StopHandler:
|
|
"""Compile one complete mode atomically."""
|
|
gate_catalog = catalog or get_gate_catalog()
|
|
for gate in config.gates:
|
|
gate_catalog.validate_params(gate.type, gate.params)
|
|
|
|
enabled = [gate for gate in config.gates if gate.enabled]
|
|
gate_catalog.validate_exclusive_groups(
|
|
[gate.type for gate in enabled],
|
|
)
|
|
|
|
configured: list[ConfiguredGate] = []
|
|
for index, gate_config in enumerate(enabled):
|
|
gate = gate_catalog.create(
|
|
gate_config.type,
|
|
gate_config.params,
|
|
)
|
|
configured.append(
|
|
ConfiguredGate(
|
|
instance_id=gate_config.id,
|
|
order=index * 10,
|
|
gate=gate,
|
|
),
|
|
)
|
|
|
|
handler = StopHandler()
|
|
handler.replace(configured)
|
|
return handler
|
|
|
|
|
|
__all__ = ["compile_loop_mode"]
|