Documentation
¶
Overview ¶
Package agent — runtime-слой агента: цикл LLM+tools, сессии, хуки.
Роль в монорепо: `github.com/stelmakhdigital/stell-agent` стоит между `github.com/stelmakhdigital/stell-ai` и `github.com/stelmakhdigital/stell-coding`. Продуктовая оркестрация (Service, extensions, discovery) живёт в coding-agent; этот пакет даёт Loop / Agent, хранилище сессий и встроенные инструменты.
Основные импорты:
- github.com/stelmakhdigital/stell-agent — Loop, Agent, события, ConvertToLlm
- github.com/stelmakhdigital/stell-agent/session — JSONL-сессии и дерево веток
- github.com/stelmakhdigital/stell-agent/tools — runtime встроенных инструментов
- github.com/stelmakhdigital/stell-agent/hooks — in-process шина хуков
- github.com/stelmakhdigital/stell-agent/harness — компактирование / helpers system prompt
- github.com/stelmakhdigital/stell-agent/proxy — StreamFn через HTTP SSE
Index ¶
- func ConvertMessagesDefault(msgs []ai.Message) []ai.Message
- func ConvertToLlm(messages []ai.Message) []ai.Message
- func PrepareMessages(messages []ai.Message, transform TransformContext) []ai.Message
- func ShouldTerminateToolBatch(outcomes []ToolCallOutcome) bool
- type AfterAssistantTurn
- type AfterTools
- type Agent
- type AssistantTurn
- type AutoRetryInfo
- type Event
- type EventType
- type FollowUpMessage
- type Loop
- type MessageUpdate
- type PrepareNextTurn
- type ProcessStreamFn
- type QueueMode
- type ShouldStopAfterTurn
- type SteerMessage
- type StreamFn
- type ToolCallOutcome
- type ToolExecutionMode
- type ToolResult
- type TransformContext
- type TurnDecision
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ConvertMessagesDefault ¶
func ConvertMessagesDefault(msgs []ai.Message) []ai.Message
ConvertToLlm доступен для embedders.
func ConvertToLlm ¶
func ConvertToLlm(messages []ai.Message) []ai.Message
ConvertToLlm фильтрует сообщения сессии до ролей, понятных LLM, перед вызовом провайдера.
func PrepareMessages ¶
func PrepareMessages(messages []ai.Message, transform TransformContext) []ai.Message
PrepareMessages выполняет transform (если задан), затем ConvertToLlm.
func ShouldTerminateToolBatch ¶
func ShouldTerminateToolBatch(outcomes []ToolCallOutcome) bool
ShouldTerminateToolBatch возвращает true, если batch не пуст и у всех outcome установлен Terminate.
Types ¶
type AfterAssistantTurn ¶
type AfterAssistantTurn func(ctx context.Context, iter int, turn AssistantTurn) (action TurnDecision, doneStopReason string, skipDoneEmit bool, err error)
AfterAssistantTurn определяет поведение после записи assistant-сообщения. Если nil, Loop останавливается без tool calls, иначе выполняет их. skipDoneEmit: при Action TurnDone Loop не отправляет EventDone (вызывающий уже отправил).
type AfterTools ¶
type AfterTools func(ctx context.Context, iter int, outcomes []ToolCallOutcome) (continueLoop bool, err error)
AfterTools выполняется после batch инструментов (saveSession, tool-error steer). continueLoop=false завершает цикл без max_iterations (вызывающий отправил done).
type Agent ¶
type Agent struct {
Loop Loop
SteeringMode QueueMode
FollowUpMode QueueMode
// contains filtered or unexported fields
}
Agent — публичный API: очереди + subscribe + Loop.
func NewAgent ¶
func NewAgent(reg *provider.Registry, rt *tools.Runtime, sess *session.Manager, modelName, modelID string) *Agent
NewAgent создаёт Agent, привязанный к registry, tools и session.
func (*Agent) Prompt ¶
Prompt запускает цикл агента для сообщения пользователя и рассылает события подписчикам и в опциональный канал events (не закрывается, если nil).
type AssistantTurn ¶
type AssistantTurn struct {
Message ai.Message
ToolCalls []ai.ToolCall
StopReason string
Usage *ai.Usage
// SkipAppend — ProcessStream уже сохранил assistant-сообщение.
SkipAppend bool
}
AssistantTurn — результат прокачки одного потока модели в сессию и события.
type AutoRetryInfo ¶
type AutoRetryInfo struct {
Attempt int
MaxAttempts int
DelayMs int
ErrorMessage string
WillRetry bool
Success bool
FinalError string
}
AutoRetryInfo описывает автоматический цикл повтора провайдера.
type Event ¶
type Event struct {
Type EventType
Token string
Thinking string
Message ai.Message
MessageUpdate *MessageUpdate
AutoRetry *AutoRetryInfo
ToolCall *ai.ToolCall
ToolCallDelta string
ToolCallIndex int
ToolCallID string
ToolCallName string
ToolResult *ToolResult
Usage *ai.Usage
StopReason string
WillRetry bool
Notice string
Err error
}
Event генерируется циклом агента для подписчиков UI, RPC и SDK.
type EventType ¶
type EventType string
EventType — события цикла агента.
const ( EventToken EventType = "token" EventThinkingToken EventType = "thinking" EventMessageStart EventType = "messageStart" EventMessage EventType = "message" EventMessageUpdate EventType = "messageUpdate" EventToolCall EventType = "toolCall" EventToolCallDelta EventType = "toolCallDelta" EventToolProgress EventType = "toolProgress" EventToolResult EventType = "toolResult" EventDone EventType = "done" EventError EventType = "error" EventAutoRetryStart EventType = "autoRetryStart" EventAutoRetryEnd EventType = "autoRetryEnd" EventNotice EventType = "notice" EventLabel EventType = "label" )
type FollowUpMessage ¶
type FollowUpMessage func() (msg ai.Message, ok bool)
FollowUpMessage извлекает in-loop follow-up из очереди.
type Loop ¶
type Loop struct {
Registry *provider.Registry
Tools *tools.Runtime
Sessions *session.Manager
ModelName string
ModelID string
BuildSystem func(ctx context.Context) string
ConvertMessages func(messages []ai.Message) []ai.Message
TransformContext func(ctx context.Context, messages []ai.Message) []ai.Message
MaxIterations int
SteerFn func() (message string, ok bool)
SteerMessage SteerMessage
ToolExecution ToolExecutionMode
BeforeToolCall func(ctx context.Context, call ai.ToolCall) (block bool, args map[string]any)
AfterToolCall func(ctx context.Context, call ai.ToolCall, outcome ToolCallOutcome) ToolCallOutcome
PrepareChat func(ctx context.Context, iter int, base ai.ChatRequest) ai.ChatRequest
OnToolProgress func(call ai.ToolCall, partial string)
StreamFn StreamFn
ProcessStream ProcessStreamFn
PrepareNextTurn PrepareNextTurn
AfterAssistantTurn AfterAssistantTurn
ShouldStopAfterTurn ShouldStopAfterTurn
FollowUpMessage FollowUpMessage
AfterTools AfterTools
AfterChatError func(ctx context.Context, err error) (retry bool, notice string)
// SkipUserAppend — вызывающий уже добавил user-сообщение.
SkipUserAppend bool
// SuppressMaxIterationsDone подавляет EventDone при достижении лимита итераций,
// чтобы вызывающий мог выполнить финальный ход (продуктовый путь).
SuppressMaxIterationsDone bool
// LastStopReason устанавливается при выходе из цикла (для продуктового postamble).
LastStopReason string
// contains filtered or unexported fields
}
Loop — низкоуровневый исполнитель хода агента. Оркестрация продукта (расширения, discovery, сохранение настроек) остаётся в coding-agent и заполняет эти поля перед вызовом Run.
func (*Loop) ContinuePrepared ¶
ContinuePrepared — как RunContinue, но не закрывает ch.
func (*Loop) Run ¶
Run выполняет один user-prompt через LLM и инструменты, пока модель не перестанет вызывать инструменты или не будет достигнут MaxIterations. События отправляются в ch; ch закрывается при возврате Run.
func (*Loop) RunContinue ¶
RunContinue продолжает цикл без нового user-сообщения. Последнее сообщение сессии не должно быть assistant, ожидающим инструменты — обычно это tool result.
type MessageUpdate ¶
type MessageUpdate struct {
EventType string
ContentIndex int
Delta string
Partial ai.Message
ToolCall *ai.ToolCall
}
MessageUpdate — патч streaming assistant-сообщения.
type PrepareNextTurn ¶
PrepareNextTurn выполняется в начале каждой итерации (wrap-up steers, notices).
type ProcessStreamFn ¶
type ProcessStreamFn func(ctx context.Context, stream <-chan ai.ChatEvent, ch chan<- Event) (AssistantTurn, error)
ProcessStreamFn потребляет поток провайдера и генерирует продуктовые события. Если nil, Loop использует стандартный pump token/toolCall и AppendMessage.
type ShouldStopAfterTurn ¶
type ShouldStopAfterTurn func(ctx context.Context, iter int, turn AssistantTurn, outcomes []ToolCallOutcome) (stop bool, err error)
ShouldStopAfterTurn вызывается после инструментов (+ попытка steer): при stop=true цикл завершается без обработки follow-up и без следующего вызова LLM.
type SteerMessage ¶
type SteerMessage func() (msg ai.Message, ok bool)
SteerMessage вставляет user-сообщение после инструментов (поддерживает изображения). Перекрывает SteerFn, если задан.
type StreamFn ¶
StreamFn подменяет вызов Registry.Chat (например HTTP-прокси). Если nil, Loop использует Registry.Get().Chat.
type ToolCallOutcome ¶
type ToolCallOutcome struct {
Call ai.ToolCall
Result tools.Result
Err error
Terminate bool // terminate — batch останавливается, когда все true
}
ToolCallOutcome — один результат выполненного инструмента в порядке вызовов assistant.
func ExecuteToolCalls ¶
func ExecuteToolCalls( ctx context.Context, rt *tools.Runtime, calls []ai.ToolCall, mode ToolExecutionMode, onProgress func(call ai.ToolCall, partial string), ) []ToolCallOutcome
ExecuteToolCalls выполняет tool calls по порядку (sequential) или параллельно. Результаты всегда возвращаются в том же порядке, что и вызовы. onProgress может быть nil; при parallel progress best-effort для каждого вызова.
type ToolExecutionMode ¶
type ToolExecutionMode string
ToolExecutionMode — последовательное или параллельное выполнение tool calls в одном ходе assistant.
const ( ToolExecutionSequential ToolExecutionMode = "sequential" ToolExecutionParallel ToolExecutionMode = "parallel" )
type ToolResult ¶
type ToolResult struct {
CallID string
Name string
Content string
Error string
FullOutputPath string
Truncated bool
}
ToolResult — наблюдение за завершённым вызовом инструмента.
type TransformContext ¶
type TransformContext func(messages []ai.Message) []ai.Message
TransformContext — опциональный хук перед ConvertToLlm.
type TurnDecision ¶
type TurnDecision int
TurnDecision управляет потоком цикла после финализации хода assistant.
const ( // TurnExecuteTools выполняет вызовы инструментов (по умолчанию, если они есть). TurnExecuteTools TurnDecision = iota // TurnDone останавливает цикл (отправляет done с StopReason, если ещё не отправлен). TurnDone // TurnContinue пропускает инструменты и начинает следующую итерацию (например, пустой toolUse). TurnContinue // TurnRejectTools записывает результаты инструментов с ошибкой и продолжает (усечение по length). TurnRejectTools // TurnAbort останавливается после пути ошибки (ProcessStream/хуки уже отправили события). TurnAbort )
Directories
¶
| Path | Synopsis |
|---|---|
|
Package harness — helpers компактирования и system prompt для агентов.
|
Package harness — helpers компактирования и system prompt для агентов. |
|
Package hooks — in-process шина хуков агента (имена событий и Bus).
|
Package hooks — in-process шина хуков агента (имена событий и Bus). |
|
Package proxy маршрутизирует вызовы LLM через HTTP SSE.
|
Package proxy маршрутизирует вызовы LLM через HTTP SSE. |
|
Package session — JSONL-хранилище сессий, дерево веток и компактирование.
|
Package session — JSONL-хранилище сессий, дерево веток и компактирование. |
|
Package tools — runtime встроенных инструментов агента и выбор активного набора.
|
Package tools — runtime встроенных инструментов агента и выбор активного набора. |