71 lines
2.6 KiB
Go
71 lines
2.6 KiB
Go
package orchestration
|
|
|
|
import (
|
|
"log/slog"
|
|
"time"
|
|
|
|
"git.yeij.top/AskaEth/Cyrene_v2/internal/bus"
|
|
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/loop"
|
|
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/memory"
|
|
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/orchestration/audit"
|
|
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/orchestration/comm"
|
|
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/trace"
|
|
)
|
|
|
|
// Defaults for the orchestration layer.
|
|
const (
|
|
// DefaultMaxParallel is the maximum number of sub-agents that run at once
|
|
// when Options.MaxParallel is non-positive.
|
|
DefaultMaxParallel = 4
|
|
|
|
// defaultAgentID is the comm probe identity used when Options.AgentID is
|
|
// blank and a probe must be built from Bus.
|
|
defaultAgentID = "orchestrator"
|
|
)
|
|
|
|
// Options configures a Scheduler built by New. All fields are optional; each nil
|
|
// dependency degrades gracefully (a missing Loop makes sub-agents fail fast, a
|
|
// missing Comm skips progress events, a missing Approver makes Approve error,
|
|
// and so on).
|
|
type Options struct {
|
|
// MaxParallel caps how many sub-agents execute concurrently. Excess sub-agents
|
|
// queue until a slot frees. Non-positive selects DefaultMaxParallel (4).
|
|
MaxParallel int
|
|
|
|
// PerAgentTimeout bounds every sub-agent's run. When it elapses the sub-agent
|
|
// is aborted (status aborted). Non-positive means no timeout.
|
|
PerAgentTimeout time.Duration
|
|
|
|
// Loop is the execution template: a *loop.Loop used to run every sub-agent.
|
|
// It must be safe for concurrent Run calls (as loop.Loop documents); the
|
|
// template's agent/tools/guardrails/persona apply to every sub-agent. When
|
|
// nil, sub-agents fail fast with ErrNoRunner.
|
|
Loop *loop.Loop
|
|
|
|
// Bus is the in-process event bus used for progress events and, when Comm is
|
|
// nil, to build a default comm probe. When nil no events are published.
|
|
Bus bus.Bus
|
|
|
|
// Comm is the comm probe used to publish progress events. When nil, a probe
|
|
// bound to AgentID is built from Bus (when Bus is non-nil).
|
|
Comm *comm.Probe
|
|
|
|
// Memory is the long-term memory store used by SinkMemory. Optional.
|
|
Memory *memory.Store
|
|
|
|
// Tracer emits a per-sub-agent span (kind subagent) around each run. Optional.
|
|
Tracer *trace.Tracer
|
|
|
|
// Approver records sensitive-operation review-and-approve (代审) triggered by
|
|
// Approve. Policy judgement belongs to the upper layer. Optional.
|
|
Approver *audit.Approver
|
|
|
|
// Logger is the base logger. Nil is replaced with a discard logger tagged with
|
|
// source "orchestration".
|
|
Logger *slog.Logger
|
|
|
|
// AgentID is the comm probe identity. When blank and a probe must be built
|
|
// from Bus, "orchestrator" is used.
|
|
AgentID string
|
|
}
|