Documentation
¶
Index ¶
- func SkillRestorer(skills agentdomain.SkillsService) func(summarized []sdk.Message) []sdk.Message
- type Agent
- func (s *Agent) BuildSystemPrompt() string
- func (s *Agent) CancelRequest(requestID string) error
- func (s *Agent) GetMetrics(requestID string) *agentdomain.ChatMetrics
- func (s *Agent) GetReasoningEffort() string
- func (s *Agent) RunWithStream(ctx context.Context, req *agentdomain.AgentRequest) (<-chan agentdomain.ChatEvent, error)
- func (s *Agent) SetCurrentModelFn(fn func() string)
- func (s *Agent) SetMemoryBackend(backend memory.MemoryBackend)
- func (s *Agent) SetReasoningEffort(effort string) error
- func (s *Agent) SetTelemetryRecorder(rec *telemetry.Recorder)
- func (s *Agent) SystemPromptSections() []PromptSection
- func (s *Agent) VolatileTailText() (string, bool)
- type ApprovalTools
- type LLMJudge
- type PromptSection
- type StandardApprovalPolicy
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func SkillRestorer ¶ added in v0.232.0
func SkillRestorer(skills agentdomain.SkillsService) func(summarized []sdk.Message) []sdk.Message
SkillRestorer returns the compaction restore hook: for every skill loaded in the summarized range it re-emits a Skill tool call and its result so the skill's instructions survive the summary, newest first under a total budget.
Types ¶
type Agent ¶
type Agent struct {
// contains filtered or unexported fields
}
Agent implements the AgentService interface with direct chat functionality
func NewAgent ¶
func NewAgent( client sdk.Client, toolService agentdomain.ToolService, approvalPolicy agentdomain.ApprovalPolicy, cfg *config.Config, conversationRepo convdomain.ConversationRepository, a2aAgents func() string, skillsService agentdomain.SkillsService, messageQueue convdomain.MessageQueue, stateManager stateStore, optimizer convdomain.ConversationOptimizer, bgRegistry scheddomain.BackgroundTaskRegistry, rolloverManager convdomain.SessionRollover, tokenizer usageEstimator, hookProvider agentdomain.HookCommandProvider, pluginInstructions func() string, ) *Agent
func (*Agent) BuildSystemPrompt ¶
BuildSystemPrompt assembles the static system prompt sent as message[0] (base prompt + custom instructions + AGENTS.md + plugins + static context). It is deliberately byte-identical across turns and agent-mode switches so LLM servers get KV-cache prefix hits; volatile context rides in volatileTailMessage and per-mode behaviour in the mode-change reminder. Returns "" when unset.
func (*Agent) CancelRequest ¶
CancelRequest cancels an active request. Safe to call repeatedly - no-ops via sync.Once on the underlying sessionCancel - and returns nil even for an unknown requestID, so the UI can fire it on every Esc press without spurious errors after teardown. The agent loop publishes ChatCompleteEvent{Cancelled:true} as the single cancel-completion signal.
func (*Agent) GetMetrics ¶
func (s *Agent) GetMetrics(requestID string) *agentdomain.ChatMetrics
GetMetrics returns metrics for a completed request
func (*Agent) GetReasoningEffort ¶
GetReasoningEffort returns the effort level currently applied to requests ("" = provider default).
func (*Agent) RunWithStream ¶
func (s *Agent) RunWithStream(ctx context.Context, req *agentdomain.AgentRequest) (<-chan agentdomain.ChatEvent, error)
RunWithStream executes an agent task with streaming (for interactive chat)
func (*Agent) SetCurrentModelFn ¶
SetCurrentModelFn wires the session's current-model accessor so the judge follows a model picked at runtime, not only the configured agent.model.
func (*Agent) SetMemoryBackend ¶
func (s *Agent) SetMemoryBackend(backend memory.MemoryBackend)
SetMemoryBackend wires the memory sync backend so the chat agent pulls memory once at session start (SyncIn on HookPreSession). SyncOut is driven by the Memory tool on write/delete, not here - chat fires HookPostSession after every message, so pushing there would commit-storm. A nil backend disables sync.
func (*Agent) SetReasoningEffort ¶
SetReasoningEffort updates the reasoning effort applied to subsequent requests. An empty string resets to the provider default.
func (*Agent) SetTelemetryRecorder ¶
SetTelemetryRecorder wires the telemetry recorder so per-request token usage is tapped in storeIterationMetrics. A nil recorder disables recording.
func (*Agent) SystemPromptSections ¶
func (s *Agent) SystemPromptSections() []PromptSection
SystemPromptSections returns the labeled parts of the prompt context a fresh session (turn 0) would send — the static system prompt sections followed by the Volatile-marked tail sections — with empty parts omitted. Exposed for the `infer debug agent system_prompt --tokens` breakdown.
func (*Agent) VolatileTailText ¶
VolatileTailText renders the volatile-context tail a fresh session (turn 0) would send as a hidden per-request <system-reminder> user message; ok=false means no tail is sent. Exposed for the `infer debug agent system_prompt` command, alongside SystemPromptSections.
type ApprovalTools ¶
type ApprovalTools interface {
agentdomain.ToolManifestLookup
GetTool(name string) (agentdomain.Tool, error)
}
ApprovalTools is what the approval policy needs to know about the tools: a tool's manifest, and the tool itself when it approves per call. The registry and the tool service both satisfy it.
type LLMJudge ¶
type LLMJudge struct {
// contains filtered or unexported fields
}
LLMJudge implements agentdomain.JudgeApprover with one no-tools GenerateContent call per batch (same shape as GenerateLLMSummary: direct client call, SkipMCP, its own timeout, bounded max_tokens). The judge.yaml on_error policy decides what a failed call means: deny (default) fails closed with a distinguishable reason - the same default as the no-approver block path - allow approves.
func NewLLMJudge ¶
NewLLMJudge creates the judge approver. Config validation fails fast at startup when no model is resolvable, so an empty model here is a hard error. judge.gateway_url gives the judge its own client (same API key and timeout as the agent's) so it can answer from a different gateway than the driver.
func (*LLMJudge) Judge ¶
func (j *LLMJudge) Judge(ctx context.Context, in agentdomain.JudgeInput) (agentdomain.JudgeVerdicts, error)
Judge decides the pending tool calls: does each serve the user's intent and is it safe to run? Calls are judged in batches of maxJudgeBatchSize, one request each, and the verdicts come back in input order. The verdict contract is enforced by agentdomain.ParseJudgeVerdicts.
type PromptSection ¶
PromptSection is one labeled part of the assembled prompt context, exposed for diagnostics (e.g. per-section token estimates in `infer debug`). Text is the raw part as it appears in the prompt, including any separator prefix. Volatile marks sections delivered via the per-request tail message rather than the static system prompt.
type StandardApprovalPolicy ¶
type StandardApprovalPolicy struct {
// contains filtered or unexported fields
}
StandardApprovalPolicy implements the default approval policy with the following rules:
- A tool that approves per call (agentdomain.CallApprover) decides for itself, ahead of the agent mode
- Auto-accept mode bypasses all approval 2.5. ReadOnly mode (Explore-like subagent) bypasses approval; its toolset is read-only by construction so nothing it can call mutates. Neither needs a call the mode does not make available: execution rejects it
- The decision is the same in chat and headless. Where nobody can approve (headless with no broker) a gated call is blocked, see BlockingToolsState
- Bash commands are governed by the per-mode allow-list (sandbox.IsBashCommandAllowed): allowed commands bypass approval and anything off-list needs it
- Other tools follow their own require_approval setting, then their manifest's default, then the global require_approval setting
func NewStandardApprovalPolicy ¶
func NewStandardApprovalPolicy(cfg *config.Config, stateManager agentdomain.AgentModeState, tools ApprovalTools) *StandardApprovalPolicy
NewStandardApprovalPolicy creates a new standard approval policy. tools resolves each tool's manifest for its plan-mode and approval defaults; with nil every tool gets the default policy.
func (*StandardApprovalPolicy) ShouldRequireApproval ¶
func (p *StandardApprovalPolicy) ShouldRequireApproval( ctx context.Context, toolCall *sdk.ChatCompletionMessageToolCall, isChatMode bool, ) bool
ShouldRequireApproval implements the approval decision logic