This repository has been archived on 2026-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
ollie-core/agent/state.go

51 lines
1.7 KiB
Go

package agent
import (
"context"
"ollie/backend"
)
// ResultTier classifies how long a tool result stays in the hot message list.
type ResultTier int
const (
TierHot ResultTier = iota // stays verbatim in messages (default)
TierWarm // summarized on next compaction pass
TierCold // immediately summarized at update time
)
// toolResult holds the output of a single tool call.
type toolResult struct {
ToolCallID string // may be empty (Ollama does not always set this)
Name string
Content string
ContentBlocks []backend.ContentBlock // image blocks extracted from tool output
IsError bool
Tier ResultTier // default TierHot; tools may self-classify
}
// state is the interface both ephemeral and bead-backed state must satisfy.
// The loop reads from it on Observe, writes to it on Update.
type state interface {
// History returns the full conversation history for the current session.
// The first entry is always the initial user message containing the goal.
history() []backend.Message
// taskState returns the current structured task state, or nil if not set.
taskState() *TaskState
// updateTaskState replaces the current task state.
updateTaskState(ts TaskState)
// Update appends the assistant's reply and any tool results to the history.
// Called once per loop iteration after Act completes.
update(assistant backend.Message, results []toolResult)
// estimateTokens returns a rough token count of the current history.
estimateTokens() int
// stripCold summarizes large tool-result messages outside the hot tail to reduce context size.
stripCold(ctx context.Context, b backend.Backend)
}