Help us shape the future of Go! Take the 2026 Go Developer Survey

loop

package
v0.4.25 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2026 License: MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AgentCommand added in v0.4.9

func AgentCommand(agents []agentkit.Agent, store agentkit.SessionStore, defaultAgent agentkit.AgentID, ws workspace.Service) agentkit.Command

Command exposes the agent catalog and session or global agent switching.

func AgentHelpCommand added in v0.4.9

func AgentHelpCommand(agents []agentkit.Agent) agentkit.Command

HelpCommand exposes the agent catalog help slash command for built agent instances.

func ModelCommand added in v0.4.9

func ModelCommand(agents []agentkit.Agent, store agentkit.SessionStore, defaultAgent agentkit.AgentID, ws workspace.Service, catalog capllm.ModelCatalog) agentkit.Command

ModelCommand shows or sets the session or global LLM model override for coding agents.

The catalog is optional: when nil the command still works, just without the available-model list and unknown-model warnings. Commands for other domains (failover chain, subagent models) are provided by their own plugins.

func New

func New(cfg Config, deps Deps) (agentkit.Loop, error)

New registers loop/default: Route inbound messages to an agent and serialize turns per session.

Types

type Config

type Config struct {
	// DefaultAgent is agent id used when the event names none; defaults to the single configured agent.
	DefaultAgent agentkit.AgentID `json:"defaultAgent"`
	// FollowUpMode is how follow-up messages are drained after a turn ends.
	FollowUpMode agentkit.FollowUpMode `json:"followUpMode"`
}

func (*Config) SetDefaults added in v0.3.48

func (c *Config) SetDefaults()

SetDefaults implements pluginkit.Defaulter.

func (*Config) Validate added in v0.3.48

func (c *Config) Validate() error

Validate implements pluginkit.Validator.

type Control

type Control struct {
	// contains filtered or unexported fields
}

Control holds steer / follow-up queues and step-cancel state for one session. Loop owns one Control per SessionID; Agent reads step-level hooks via ctx.Value(agentkit.KeySessionControl).

All mutable state is owned by a single goroutine; callers synchronize via ch.

func NewControl

func NewControl() *Control

func (*Control) Await

func (*Control) BeginStep

func (c *Control) BeginStep(parent context.Context) (context.Context, func())

func (*Control) Cancel

func (c *Control) Cancel(_ context.Context, reason string) error

func (*Control) ClearTurnCancel

func (c *Control) ClearTurnCancel()

func (*Control) DeliverPermissionReply

func (c *Control) DeliverPermissionReply(_ agentkit.SessionID, reply permission.Reply) bool

func (*Control) DrainFollowUps

func (c *Control) DrainFollowUps(_ context.Context, mode agentkit.FollowUpMode) ([]agentkit.ModelMessage, error)

func (*Control) FollowUp

func (c *Control) FollowUp(_ context.Context, msg agentkit.ModelMessage) error

func (*Control) HasSteering added in v0.1.10

func (c *Control) HasSteering() bool

func (*Control) PermissionAllowAll added in v0.4.23

func (c *Control) PermissionAllowAll() bool

PermissionAllowAll reports whether the user has chosen 全部允许 for this session.

func (*Control) PermissionCapability

func (c *Control) PermissionCapability() permission.Capability

func (*Control) PopCancelReason

func (c *Control) PopCancelReason() string

func (*Control) PopSteering

func (c *Control) PopSteering() []agentkit.ModelMessage

func (*Control) Steer

func (c *Control) Steer(_ context.Context, msg agentkit.ModelMessage) error

func (*Control) Stop added in v0.3.28

func (c *Control) Stop()

Stop retires the owner goroutine. Safe to call once; subsequent sync calls will panic on a closed channel. Loop calls this on shutdown for every session.

func (*Control) SupersedePending

func (c *Control) SupersedePending(_ agentkit.SessionID, reason string) bool

type Default

type Default struct {
	// contains filtered or unexported fields
}

func (*Default) Agents added in v0.1.6

func (l *Default) Agents() []agentkit.Agent

Agents returns configured agent instances in arbitrary order.

func (*Default) Cancel added in v0.2.1

func (l *Default) Cancel(ctx context.Context, reason string) error

func (*Default) CancelAllInFlight added in v0.3.15

func (l *Default) CancelAllInFlight(reason string)

func (*Default) Commands added in v0.1.5

func (l *Default) Commands() []agentkit.Command

Commands implements agentkit.CommandProvider: the loop owns the agent catalog, so it contributes the catalog slash commands (/agent, /model) itself. commands/registry collects them through the generic WireContributions channel; turn dispatch is unaffected when the optional command deps are absent.

func (*Default) DefaultAgentID added in v0.2.1

func (l *Default) DefaultAgentID() agentkit.AgentID

DefaultAgentID returns the loop fallback agent when no session bind is set.

func (*Default) Dispatch

func (l *Default) Dispatch(ctx context.Context, req agentkit.LoopRequest) error

func (*Default) FollowUp

func (l *Default) FollowUp(ctx context.Context, msg agentkit.ModelMessage) error

func (*Default) IsSessionBusy added in v0.1.10

func (l *Default) IsSessionBusy(sessionID agentkit.SessionID) bool

IsSessionBusy reports whether a turn is currently executing for the session.

func (*Default) Steer

func (l *Default) Steer(ctx context.Context, msg agentkit.ModelMessage) error

func (*Default) Stop added in v0.3.28

func (l *Default) Stop(_ context.Context) error

Stop retires every per-session Control owner goroutine. Call after the runner scheduler has drained (sched.wait + sched.stop); no further Dispatch may run after this returns.

func (*Default) SupersedePendingForInbound

func (l *Default) SupersedePendingForInbound(event agentkit.MessageEvent)

func (*Default) TryDeliverPermission

func (l *Default) TryDeliverPermission(event agentkit.MessageEvent) bool

type Deps

type Deps struct {
	Agents    []agentkit.Agent      `json:"agents"`
	Telemetry captelemetry.Exporter `json:"telemetry,omitempty"`
	// SessionStore, Workspace and ModelCatalog are optional and only serve the
	// catalog slash commands (/agent, /model) the loop contributes via
	// agentkit.CommandProvider; turn dispatch never touches them.
	SessionStore agentkit.SessionStore `json:"sessionStore,omitempty"`
	Workspace    workspace.Service     `json:"workspace,omitempty"`
	ModelCatalog capllm.ModelCatalog   `json:"modelCatalog,omitempty"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL