Documentation
¶
Index ¶
- Constants
- func GetProviderModelKey(id string) string
- func GetProviderModelKeys(ids []string) map[string]string
- func IsConversationMessage(item *Item) bool
- func TruncateConversationTitle(title string) string
- type Address
- type AgentRelation
- type AgentSender
- type AgentsInstruction
- type CatalogProvider
- type Content
- type ContentKind
- type ContextSummary
- type Conversation
- type ConversationID
- type ExecutorDefinition
- type ExecutorDirectoryChange
- type ExecutorKind
- type ExecutorSettings
- type ExecutorsChange
- type ExecutorsChangeDetails
- type HookEventName
- type HookRun
- type HookRunID
- type HookRunStatus
- type IdentityKind
- type ImageContent
- type InputID
- type Item
- func (item *Item) Clone() *Item
- func (item *Item) FromLLMKit(modelMessage *llmkit.Message, from, to *Address) error
- func (item *Item) ToLLMKit(role llmkit.Role) (*llmkit.Message, error)
- func (item *Item) ValidateContextSummary() error
- func (item *Item) ValidateExecutorsChange() error
- func (item *Item) ValidateInputMessage() error
- func (item *Item) ValidateModelChange() error
- func (item *Item) ValidateSessionFork() error
- type ItemID
- type ItemKind
- type Message
- type ModelCallID
- type ModelCapabilities
- type ModelChange
- type ModelDefaults
- type ModelDefinition
- func (model *ModelDefinition) Clone() *ModelDefinition
- func (model *ModelDefinition) ClonePublic() *ModelDefinition
- func (model *ModelDefinition) GetReasoningEffort(requested string) string
- func (model *ModelDefinition) IsImageInputSupported() bool
- func (model *ModelDefinition) IsReasoningEffortSupported(effort string) bool
- type ModelError
- type ModelInput
- type ModelRef
- type ModelSelection
- type OptionalStringList
- type Plugin
- type ProviderConfig
- type ProviderModelCapabilities
- type ProviderModelConfig
- type Reasoning
- type ReasoningStatus
- type SSHExecutorDefinition
- type Session
- type SessionFork
- type SessionID
- type SkillInstruction
- type SubagentNotification
- type TextContent
- type TokenUsage
- type ToolCall
- type ToolCallStatus
- type ToolDefinition
- type ToolError
- type ToolResult
- type Turn
- type TurnContextUsage
- type TurnExecutor
- type TurnID
- type TurnItemRange
- type TurnStatus
Constants ¶
const ClientExecutorID = "client"
ClientExecutorID 是对话里客户端登记的 MCP server 所属的虚拟 Executor 的 ID;配置文件里不能用这个 ID。
const LocalExecutorID = "local"
LocalExecutorID 是 OpenVaala 自带的本机 Executor 的 ID;配置文件里不能用这个 ID。
Variables ¶
This section is empty.
Functions ¶
func GetProviderModelKey ¶
GetProviderModelKey 将上游模型 ID 转成配置文件可用的 Key。
func GetProviderModelKeys ¶
GetProviderModelKeys 为一组上游模型 ID 分配不重名的配置 Key。
func IsConversationMessage ¶
IsConversationMessage 根 Session 的这条 Item 计入对话消息数吗?
func TruncateConversationTitle ¶
TruncateConversationTitle 截取对话标题,最多保留 256 个 Unicode 字符。
Types ¶
type Address ¶
type Address struct {
Kind IdentityKind `json:"kind"`
// ID 在 Agent 地址里是 Session ID。
ID string `json:"id"`
}
Address 是消息的发送方或接收方。
type AgentRelation ¶
type AgentRelation string
AgentRelation 是 Agent 消息发送方相对接收方的位置。
const ( // AgentRelationChild 发送方是接收方的直接子 Agent,例如子任务向父 Agent 汇报或提问。 AgentRelationChild AgentRelation = "child" // AgentRelationAncestor 发送方是接收方的父 Agent 或更上层的 Agent,例如 spawn_agent 交下的任务。 AgentRelationAncestor AgentRelation = "ancestor" )
type AgentSender ¶
type AgentSender struct {
// TaskName 是发送方 Session 的任务名;主 Agent 没有任务名,为空。
TaskName string `json:"task_name,omitempty"`
Relation AgentRelation `json:"relation"`
}
AgentSender 是 Agent 消息发送方的任务名,以及它和接收方的关系。
type AgentsInstruction ¶
type AgentsInstruction struct {
Executor string `json:"executor"`
Path string `json:"path"`
Text string `json:"text"`
}
AgentsInstruction 是某个 Executor 上一份 AGENTS.md 的路径和正文。
func (*AgentsInstruction) Clone ¶
func (instruction *AgentsInstruction) Clone() *AgentsInstruction
Clone 复制 AGENTS.md 指令。
type CatalogProvider ¶
type CatalogProvider struct {
ID string `json:"id"`
Name string `json:"name"`
Protocol string `json:"protocol"`
BaseURL string `json:"base_url"`
ModelCount int `json:"model_count"`
}
CatalogProvider 是模型目录里的一个服务,供引导第 1 步选择;选中后预先填好 ID、协议和 base_url。
type Content ¶
type Content struct {
Kind ContentKind `json:"kind"`
Text *TextContent `json:"text,omitempty"`
Image *ImageContent `json:"image,omitempty"`
}
Content 是消息里的一项文本或图片,Kind 决定哪个字段有值。
func (*Content) FromLLMKit ¶
func (content *Content) FromLLMKit(block *llmkit.ContentBlock) error
FromLLMKit 将模型的文本或图片内容块转换为 Content。
type ContentKind ¶
type ContentKind string
ContentKind 区分文本和图片内容。
const ( ContentText ContentKind = "text" ContentImage ContentKind = "image" )
type ContextSummary ¶
type ContextSummary struct {
Text string `json:"text"`
// CoveredThroughItemID 是摘要覆盖到的最后一条原始 Item,包含它本身。
CoveredThroughItemID ItemID `json:"covered_through_item_id"`
}
ContextSummary 是压缩上下文时生成的累积历史摘要。
func (*ContextSummary) Clone ¶
func (summary *ContextSummary) Clone() *ContextSummary
Clone 复制上下文摘要。
type Conversation ¶
type Conversation struct {
ID ConversationID `json:"id"`
// ExecutorSettings 是对话的 Executor 设置:新建时补上缺的 local 目录后保存,之后只由改设置修改;打开对话不写它。
ExecutorSettings ExecutorSettings `json:"executor_settings"`
// UpdatedAt 是最后一次写入的 Unix 毫秒,由存储在写入时分配;写入时设置的值不会被保存。
// 创建、分叉、改标题、改 Executor 设置、归档或取消归档、更新消息数都会刷新这个时间。
UpdatedAt int64 `json:"updated_at,omitempty"`
Title string `json:"title,omitempty"`
RootSessionID SessionID `json:"root_session_id"`
// MessageCount 是根 Session 中用户消息与主 Agent 回复的条数,每轮结束时累加。
MessageCount int `json:"message_count,omitempty"`
// ForkedFromID 是分叉来源的对话;不是分叉出来的为空。
ForkedFromID ConversationID `json:"forked_from_id,omitempty"`
// ArchivedAt 是归档时间(Unix 毫秒),0 表示没归档。
ArchivedAt int64 `json:"archived_at,omitempty"`
}
Conversation 是一个对话的记录;每个对话有唯一的根 Session。
type ExecutorDefinition ¶
type ExecutorDefinition struct {
ID string
Kind ExecutorKind
Description string
// WorkspaceDirectory 是对话设置里没给目录时用的根目录:local 是 server.workspace_directory,
// 没配时是 serve 的启动目录;virtual 没配时是 /workspace。
WorkspaceDirectory string
// SSH 是 ssh 的连接参数,其他种类为 nil。
SSH *SSHExecutorDefinition
// Files 是 virtual 工作区建好时预先放进去的文件,键为绝对路径;builtin 用它放内置 skill。
// 每个对话各拷一份,对话之间互不可见。
Files map[string][]byte
}
ExecutorDefinition 是一个 Executor 的定义:local 和 builtin 由加载配置时补上,其余来自 executors/。
type ExecutorDirectoryChange ¶
ExecutorDirectoryChange 是一个仍然可用的 Executor 在对话里的根目录变化。
type ExecutorKind ¶
type ExecutorKind string
ExecutorKind 是 Executor 的种类。
const ( ExecutorKindLocal ExecutorKind = "local" ExecutorKindSSH ExecutorKind = "ssh" ExecutorKindVirtual ExecutorKind = "virtual" )
type ExecutorSettings ¶
type ExecutorSettings struct {
// DefaultExecutorID 是默认 Executor:模型省略 executor 参数时用它,项目 Skills、用户主目录 Skills 和 AGENTS.md 从它读;
// 为空时是筛选后列表的第一个。
DefaultExecutorID string `json:"default_executor_id,omitempty"`
// ExecutorIDs 是对话可用的 Executor,只决定能不能用,不决定顺序;为空时全部可用,包括以后新加的。
ExecutorIDs []string `json:"executor_ids,omitempty"`
// WorkspaceDirectories 是各 Executor 在这个对话里的根目录,键为 Executor ID。local 总有一项;
// 其他 Executor 只记 /cd 改过的,没有的用默认根目录(配置里的 workspace_directory)。
WorkspaceDirectories map[string]string `json:"workspace_directories,omitempty"`
}
ExecutorSettings 是对话的 Executor 设置:默认用哪个、能用哪些、各自在哪个目录。
func (ExecutorSettings) GetConversationDirectory ¶
func (s ExecutorSettings) GetConversationDirectory() string
GetConversationDirectory 返回 serve 本机的对话目录。
func (ExecutorSettings) IsExecutorAvailable ¶
func (s ExecutorSettings) IsExecutorAvailable(id string) bool
IsExecutorAvailable 对话能用这个 Executor 吗?
type ExecutorsChange ¶
type ExecutorsChange struct {
PreviousExecutors []TurnExecutor `json:"previous_executors"`
Executors []TurnExecutor `json:"executors"`
}
ExecutorsChange 由 Turn 在本轮 Executor 列表和上一轮不同时写在本轮输入之前:默认换了、目录换了、增加或减少都在这一条里, 作为提示发给模型。
func (*ExecutorsChange) Clone ¶
func (change *ExecutorsChange) Clone() *ExecutorsChange
Clone 复制 Executor 切换记录。
func (*ExecutorsChange) GetDetails ¶
func (change *ExecutorsChange) GetDetails() ExecutorsChangeDetails
GetDetails 按种类列出 Executor 列表的变化。
type ExecutorsChangeDetails ¶
type ExecutorsChangeDetails struct {
// NewDefault 是换上的默认 Executor;默认没换或新列表为空时为 nil。
NewDefault *TurnExecutor
// PreviousDefaultID 是原来的默认 Executor ID;NewDefault 为 nil 时为空。
PreviousDefaultID string
// Removed 是不再可用的 Executor,目录取自上一轮。
Removed []TurnExecutor
// Added 是新增可用的 Executor;已经作为新默认写入 NewDefault 的不再重复列出。
Added []TurnExecutor
// DirectoryChanges 是仍然可用但根目录换了的 Executor;新默认的目录已写在 NewDefault 里,不再列出。
DirectoryChanges []ExecutorDirectoryChange
}
ExecutorsChangeDetails 按变化种类拆开一条 ExecutorsChange,发给模型的文字和 TUI 显示共用。
type HookEventName ¶
type HookEventName string
HookEventName 是触发 hook 的时刻。
const ( HookEventSessionStart HookEventName = "SessionStart" HookEventUserPromptSubmit HookEventName = "UserPromptSubmit" HookEventPreToolUse HookEventName = "PreToolUse" HookEventPostToolUse HookEventName = "PostToolUse" HookEventStop HookEventName = "Stop" HookEventSubagentStart HookEventName = "SubagentStart" HookEventSubagentStop HookEventName = "SubagentStop" )
type HookRun ¶
type HookRun struct {
ID HookRunID `json:"id"`
Event HookEventName `json:"event"`
// CallID 是工具事件对应的调用。
CallID string `json:"call_id,omitempty"`
// ExecutorID 是运行这个 hook 的 Executor。
ExecutorID string `json:"executor_id"`
// SourcePath 是定义这个 hook 的配置文件。
SourcePath string `json:"source_path"`
// Handler 是显示用的命令:command 原文,或 script 路径加 args。
Handler string `json:"handler"`
DisplayOrder int `json:"display_order"`
Status HookRunStatus `json:"status"`
// StartedAt 和 CompletedAt 是 Unix 毫秒;运行中时 CompletedAt 为 0。
StartedAt int64 `json:"started_at"`
CompletedAt int64 `json:"completed_at,omitempty"`
BlockReason string `json:"block_reason,omitempty"`
UpdatedToolArguments string `json:"updated_tool_arguments,omitempty"`
AdditionalContext string `json:"additional_context,omitempty"`
StopReason string `json:"stop_reason,omitempty"`
SystemMessage string `json:"system_message,omitempty"`
// ErrorMessage 在 failed 时说明原因,例如超时、脚本不存在。
ErrorMessage string `json:"error_message,omitempty"`
}
HookRun 是一个 hook 的一次运行:开始时为 running,结束后更新为最终状态和输出;有效果的运行作为 hook_run Item 保存。
type HookRunStatus ¶
type HookRunStatus string
HookRunStatus 是一次 hook 运行所处的阶段或结局。
const ( HookRunRunning HookRunStatus = "running" HookRunCompleted HookRunStatus = "completed" HookRunBlocked HookRunStatus = "blocked" HookRunFailed HookRunStatus = "failed" // HookRunStopped 表示 hook 回了 continue: false。 HookRunStopped HookRunStatus = "stopped" )
type IdentityKind ¶
type IdentityKind string
IdentityKind 区分用户和 Agent 地址。
const ( IdentityUser IdentityKind = "user" IdentityAgent IdentityKind = "agent" )
type ImageContent ¶
ImageContent 是一张图片:来源和说明。
func (*ImageContent) GetDataURLParts ¶
func (image *ImageContent) GetDataURLParts() (mimeType, data string, isDataURL bool)
GetDataURLParts 拆分 base64 data URL,返回 MIME 类型、数据和是否匹配。
type Item ¶
type Item struct {
ID ItemID `json:"id"`
// UpdatedAt 是保存时的 Unix 毫秒,由存储分配;Item 保存后不再修改。
UpdatedAt int64 `json:"updated_at,omitempty"`
TurnID TurnID `json:"turn_id"`
ModelCallID ModelCallID `json:"model_call_id,omitempty"`
Kind ItemKind `json:"kind"`
Message *Message `json:"message,omitempty"`
Reasoning *Reasoning `json:"reasoning,omitempty"`
ToolCall *ToolCall `json:"tool_call,omitempty"`
ToolResult *ToolResult `json:"tool_result,omitempty"`
ModelError *ModelError `json:"model_error,omitempty"`
ContextSummary *ContextSummary `json:"context_summary,omitempty"`
SessionFork *SessionFork `json:"session_fork,omitempty"`
ModelChange *ModelChange `json:"model_change,omitempty"`
ExecutorsChange *ExecutorsChange `json:"executors_change,omitempty"`
SkillInstruction *SkillInstruction `json:"skill_instruction,omitempty"`
AgentsInstruction *AgentsInstruction `json:"agents_instruction,omitempty"`
HookRun *HookRun `json:"hook_run,omitempty"`
}
Item 保存一条消息、模型输出或历史记录,Kind 指定使用的载荷。
func SelectContextHistoryItems ¶
SelectContextHistoryItems 从正序历史里选出发给模型的上下文:最新摘要和它没覆盖的 Item。
func (*Item) FromLLMKit ¶
FromLLMKit 将单条模型消息转换为 Item。
func (*Item) ValidateContextSummary ¶
ValidateContextSummary 检查摘要 Item 的类型、ID 和载荷。
func (*Item) ValidateExecutorsChange ¶
ValidateExecutorsChange 检查 Executor 切换 Item 的 ID 和前后列表。
func (*Item) ValidateInputMessage ¶
ValidateInputMessage 检查提交给 Session 的输入消息。
func (*Item) ValidateModelChange ¶
ValidateModelChange 检查模型切换 Item 的 ID 和前后模型。
func (*Item) ValidateSessionFork ¶
ValidateSessionFork 检查分叉标记的 ID 和载荷。
type ItemKind ¶
type ItemKind string
ItemKind 区分消息、模型输出和历史记录的种类。
const ( ItemMessage ItemKind = "message" ItemReasoning ItemKind = "reasoning" ItemToolCall ItemKind = "tool_call" ItemToolResult ItemKind = "tool_result" ItemModelError ItemKind = "model_error" ItemContextSummary ItemKind = "context_summary" ItemSessionFork ItemKind = "session_fork" ItemModelChange ItemKind = "model_change" ItemExecutorsChange ItemKind = "executors_change" ItemSkillInstruction ItemKind = "skill_instruction" ItemAgentsInstruction ItemKind = "agents_instruction" ItemHookRun ItemKind = "hook_run" // ItemTurnInterrupted 由 Turn 在以 interrupted 结束时写在本轮最后;没有载荷,TurnID 说明是哪一轮。 ItemTurnInterrupted ItemKind = "turn_interrupted" )
type Message ¶
type Message struct {
From *Address `json:"from"`
To *Address `json:"to"`
Content []*Content `json:"content"`
// AgentSender 由 Conversation 在 Agent 之间转交消息时写入,模型请求据此标明消息来自哪个 Agent;用户消息为 nil。
AgentSender *AgentSender `json:"agent_sender,omitempty"`
// SubagentNotification 由 Conversation 在子 Agent 的 Turn 结束、通知父 Agent 时写入;其他消息为 nil。
SubagentNotification *SubagentNotification `json:"subagent_notification,omitempty"`
}
Message 是一条消息:发送方、接收方地址和内容。
func (*Message) FromLLMKit ¶
FromLLMKit 把只含文本和图片的模型消息转换为 Message,地址用调用方传入的 from、to。
type ModelCapabilities ¶
type ModelCapabilities struct {
// Input 是模型能接收的输入,例如 [text, image]。
Input []ModelInput `json:"input"`
}
ModelCapabilities 是模型的能力;目前只有 Input 有代码在读。
type ModelChange ¶
type ModelChange struct {
PreviousModel ModelRef `json:"previous_model"`
Model ModelRef `json:"model"`
}
ModelChange 由 Turn 在本轮模型和上一轮不同时写在本轮输入之前:作为提示发给模型,它之前的推理不再发送。
type ModelDefaults ¶
type ModelDefaults struct {
ContextWindow int `mapstructure:"context_window" yaml:"context_window" default:"256000" json:"context_window"`
MaxOutputTokens int `mapstructure:"max_output_tokens" yaml:"max_output_tokens" default:"32000" json:"max_output_tokens"`
Thinking bool `mapstructure:"thinking" yaml:"thinking" default:"true" json:"thinking"`
ReasoningEfforts []string `mapstructure:"reasoning_efforts" yaml:"reasoning_efforts" json:"reasoning_efforts"`
DefaultReasoningEffort string `mapstructure:"default_reasoning_effort" yaml:"default_reasoning_effort" json:"default_reasoning_effort"`
MergeMessageRoles []string `mapstructure:"merge_message_roles" yaml:"merge_message_roles" json:"merge_message_roles"`
// Capabilities 是模型配置省略 capabilities 时使用的能力;Input 为空时按 [text]。
Capabilities ProviderModelCapabilities `mapstructure:"capabilities" yaml:"capabilities" json:"capabilities"`
}
ModelDefaults 是模型配置省略字段时使用的值,default 标签给出系统内置默认值。
type ModelDefinition ¶
type ModelDefinition struct {
Ref ModelRef `json:"ref"`
DisplayName string `json:"display_name"`
// Target 是连接参数,含凭证,不序列化。
Target *llmkit.Target `json:"-"`
ContextWindow int `json:"context_window"`
MaxOutputTokens int `json:"max_output_tokens"`
ThinkingEnabled bool `json:"thinking_enabled"`
// ReasoningEfforts 是可选的推理强度;为空表示不支持选择,请求不带强度。
ReasoningEfforts []string `json:"reasoning_efforts"`
DefaultReasoningEffort string `json:"default_reasoning_effort,omitempty"`
// MergeMessageRoles 是发送前需要合并相邻同角色消息的角色;为空表示不合并。
MergeMessageRoles []llmkit.Role `json:"merge_message_roles,omitempty"`
// ReasoningContext 是请求要求保留的思考上下文;为空表示请求不发送,服务端按默认处理,只用于 openai-responses 协议。
ReasoningContext llmkit.ReasoningContext `json:"reasoning_context,omitempty"`
Capabilities ModelCapabilities `json:"capabilities"`
}
ModelDefinition 是模型目录中的一项:连接参数与请求参数,默认值已解析,构造后只读。
func GetCompactModel ¶
func GetCompactModel(models map[ModelRef]*ModelDefinition, compactModel ModelRef, turnModel *ModelDefinition) *ModelDefinition
GetCompactModel 返回本轮压缩使用的模型。
func GetSelectedModel ¶
func GetSelectedModel(models map[ModelRef]*ModelDefinition, selection ModelSelection, defaultModel ModelRef) ( model *ModelDefinition, reasoningEffort string, found bool)
GetSelectedModel 从模型目录找出选中的模型和实际推理强度;没选模型时用 defaultModel。
func (*ModelDefinition) Clone ¶
func (model *ModelDefinition) Clone() *ModelDefinition
Clone 深拷贝模型定义。
func (*ModelDefinition) ClonePublic ¶
func (model *ModelDefinition) ClonePublic() *ModelDefinition
ClonePublic 返回不含连接参数和凭证的模型副本。
func (*ModelDefinition) GetReasoningEffort ¶
func (model *ModelDefinition) GetReasoningEffort(requested string) string
GetReasoningEffort 返回本次请求实际用的推理强度。
func (*ModelDefinition) IsImageInputSupported ¶
func (model *ModelDefinition) IsImageInputSupported() bool
IsImageInputSupported 这个模型能接收图片吗?
func (*ModelDefinition) IsReasoningEffortSupported ¶
func (model *ModelDefinition) IsReasoningEffortSupported(effort string) bool
IsReasoningEffortSupported 这个模型支持指定推理强度吗?
type ModelError ¶
ModelError 保存模型返回的错误码和消息。
func (*ModelError) FromLLMKit ¶
func (modelError *ModelError) FromLLMKit(payload *llmkit.ErrorPayload)
FromLLMKit 使用模型流的错误替换错误记录。
func (*ModelError) ToLLMKit ¶
func (modelError *ModelError) ToLLMKit() *llmkit.ErrorPayload
ToLLMKit 把模型错误转换为 llmkit 的错误载荷。
type ModelInput ¶
type ModelInput string
ModelInput 是模型能接收的一种输入。
const ( ModelInputText ModelInput = "text" ModelInputImage ModelInput = "image" ModelInputAudio ModelInput = "audio" ModelInputVideo ModelInput = "video" ModelInputPDF ModelInput = "pdf" )
type ModelRef ¶
ModelRef 是模型目录中一个模型的标识:Provider 文件的 id 加这个文件里的模型 id。
func ParseModelRef ¶
ParseModelRef 将 provider_id/model_id 解析为模型标识。
type ModelSelection ¶
type ModelSelection struct {
Ref ModelRef `json:"ref"`
// ReasoningEffort 是选的推理强度;为空时用模型的默认强度。
ReasoningEffort string `json:"reasoning_effort,omitempty"`
}
ModelSelection 是一次模型选择:用哪个模型、用多大的推理强度。
type OptionalStringList ¶
type OptionalStringList []string
OptionalStringList 是可以不写的字符串列表:nil 表示没写、沿用默认,[] 表示明确为空。 重新序列化成 YAML 或 JSON 时,nil 不写出这个字段,[] 写出空列表。
func (OptionalStringList) IsZero ¶
func (list OptionalStringList) IsZero() bool
IsZero 列表是不是没填?YAML omitempty 和 JSON omitzero 按它省略字段。
type Plugin ¶
type Plugin struct {
Name string
Version string
Directory string // serve 本机的插件根目录,绝对路径
// SkillDirectories 是按扫描顺序排列的技能目录绝对路径;没有 skill 时为空。
SkillDirectories []string
// InstalledAt 是安装记录里的 installed_at,每次 plugin update 都会变;手动放入的插件为零值。
InstalledAt time.Time
}
Plugin 是一个启用的插件,加载配置时生成,之后只读。
type ProviderConfig ¶
type ProviderConfig struct {
ID string `yaml:"id" json:"id"`
// Protocol 是模型没写 protocol 时用的协议:openai_chat、openai_responses 或 claude;省略为 openai_responses。
Protocol string `yaml:"protocol,omitempty" json:"protocol,omitempty"`
// BaseURL 带版本前缀,例如 https://api.openai.com/v1;各协议默认在后面拼 /chat/completions、/responses、/messages。
BaseURL string `yaml:"base_url" json:"base_url"`
// Endpoints 按协议写完整请求地址,写了的协议不再用 BaseURL 拼,可以是别的 host。
Endpoints map[string]string `yaml:"endpoints,omitempty" json:"endpoints,omitempty"`
APIKey string `yaml:"api_key" json:"api_key"`
// Models 是模型 id 到模型配置的映射;值为 nil 时全部用默认。
Models map[string]*ProviderModelConfig `yaml:"models" json:"models"`
}
ProviderConfig 是一个模型服务(models/<id>.yaml):地址、凭证、默认协议和模型。
type ProviderModelCapabilities ¶
type ProviderModelCapabilities struct {
// Input 为 nil 时取 config.yaml 的 models.defaults.capabilities.input。
Input OptionalStringList `mapstructure:"input" yaml:"input,omitempty" json:"input,omitzero"`
}
ProviderModelCapabilities 是模型配置里的 capabilities 段。
type ProviderModelConfig ¶
type ProviderModelConfig struct {
// Protocol 省略时用 Provider 的 protocol。
Protocol string `yaml:"protocol,omitempty" json:"protocol,omitempty"`
UpstreamModel string `yaml:"upstream_model,omitempty" json:"upstream_model,omitempty"`
// DisplayName 省略时用模型 id。
DisplayName string `yaml:"display_name,omitempty" json:"display_name,omitempty"`
ContextWindow int `yaml:"context_window,omitempty" json:"context_window,omitempty"`
MaxOutputTokens int `yaml:"max_output_tokens,omitempty" json:"max_output_tokens,omitempty"`
Thinking *bool `yaml:"thinking,omitempty" json:"thinking,omitempty"`
// ReasoningEfforts 为 nil 时继承全局默认,[] 表示明确不支持选择。
ReasoningEfforts OptionalStringList `yaml:"reasoning_efforts,omitempty" json:"reasoning_efforts,omitzero"`
DefaultReasoningEffort string `yaml:"default_reasoning_effort,omitempty" json:"default_reasoning_effort,omitempty"`
// MergeMessageRoles 为 nil 时继承全局默认,[] 表示明确不合并。
MergeMessageRoles OptionalStringList `yaml:"merge_message_roles,omitempty" json:"merge_message_roles,omitzero"`
// ReasoningContext 是请求要求保留的思考上下文,可写 all_turns 或 current_turn;省略时请求不发送、
// 服务端按默认处理,不从 models.defaults 继承,只用于 openai-responses 协议。
ReasoningContext string `yaml:"reasoning_context,omitempty" json:"reasoning_context,omitempty"`
Capabilities ProviderModelCapabilities `yaml:"capabilities,omitempty" json:"capabilities,omitzero"`
}
ProviderModelConfig 将本地模型别名映射为上游模型名,并给出请求参数;省略的字段取 config.yaml 的 models.defaults。
type Reasoning ¶
type Reasoning struct {
Status ReasoningStatus `json:"status"`
Summary []string `json:"summary,omitempty"`
Content []string `json:"content,omitempty"`
Encrypted string `json:"encrypted,omitempty"`
RawJSON json.RawMessage `json:"raw_json,omitempty"`
}
Reasoning 是一段模型推理:正文、摘要、加密内容和完成状态。
func (*Reasoning) FromLLMKit ¶
func (reasoning *Reasoning) FromLLMKit(content *llmkit.ReasoningContent, status llmkit.ReasoningStatus)
FromLLMKit 用一段完整的 llmkit 推理内容和给定状态替换推理记录。
func (*Reasoning) ToLLMKit ¶
func (reasoning *Reasoning) ToLLMKit() *llmkit.ReasoningContent
ToLLMKit 把推理内容转换为 llmkit 的推理内容。
type ReasoningStatus ¶
type ReasoningStatus string
ReasoningStatus 是推理内容已经完成还是被中断。
const ( ReasoningCompleted ReasoningStatus = "completed" ReasoningInterrupted ReasoningStatus = "interrupted" )
type SSHExecutorDefinition ¶
type SSHExecutorDefinition struct {
// Address 是 [user@]host[:port]。
Address string
// IdentityFile 是本机私钥路径,已展开 ~;为空时依次使用 ssh-agent 与默认私钥。
IdentityFile string
}
SSHExecutorDefinition 是 SSH Executor 的连接参数。
type Session ¶
type Session struct {
ID SessionID `json:"id"`
// UpdatedAt 是最后一次写入的 Unix 毫秒,由存储在写入时分配;写入时设置的值不会被保存。
UpdatedAt int64 `json:"updated_at,omitempty"`
ConversationID ConversationID `json:"conversation_id"`
AgentName string `json:"agent_name"`
// TaskName 是 spawn_agent 给子 Agent 起的任务名;根 Session 为空。
TaskName string `json:"task_name,omitempty"`
// ParentSessionID、ParentTurnID、ParentCallID 是创建这个子 Agent 的父 Session、Turn 和 spawn_agent 调用;根 Session 为空。
ParentSessionID SessionID `json:"parent_session_id,omitempty"`
ParentTurnID TurnID `json:"parent_turn_id,omitempty"`
ParentCallID string `json:"parent_call_id,omitempty"`
// Model 是解析后的模型和推理强度,新建或切换模型时写入;零值按 Agent 默认模型处理。
Model ModelSelection `json:"model,omitzero"`
}
Session 是一个 Agent 在对话里的一段上下文:所属对话、用哪个 Agent 和模型;子 Agent 还记着是谁创建的。
type SessionFork ¶
type SessionFork struct {
// SourceSessionID 是历史来源的 Session。
SourceSessionID SessionID `json:"source_session_id"`
// SourceConversationID 是用户分叉的来源对话;spawn_agent 写的分界为空。
SourceConversationID ConversationID `json:"source_conversation_id,omitempty"`
// SourceEndOrdinal 是来源日志里第一条复制过来的 Item 的序号(来源对外的序号);接上的部分是 [1, SourceEndOrdinal)。
SourceEndOrdinal int64 `json:"source_end_ordinal,omitempty"`
}
SessionFork 是日志里的一条历史分界,按 SourceConversationID 分两种: 为空时是 spawn_agent 写在复制来的历史末尾的分界,后面的 Item 是子 Agent 自己的; 不为空时是用户分叉写在新根 Session 日志第 1 行的接续标记,读历史时前面接上来源对话根 Session 的内容。
type SkillInstruction ¶
type SkillInstruction struct {
// InputItemID 是点名这个 Skill 的用户输入 Item。
InputItemID ItemID `json:"input_item_id"`
Name string `json:"name"`
Path string `json:"path"`
Executor string `json:"executor"`
Text string `json:"text"`
}
SkillInstruction 是用户在一条输入里点名的一个 Skill:名字、所在 Executor、文件路径和正文。
func (*SkillInstruction) Clone ¶
func (instruction *SkillInstruction) Clone() *SkillInstruction
Clone 复制 Skill 指令。
type SubagentNotification ¶
type SubagentNotification struct {
// SourceTurnID 是子 Agent 结束的那个 Turn。
SourceTurnID TurnID `json:"source_turn_id"`
// Status 是那个 Turn 保存的终态。
Status TurnStatus `json:"status"`
}
SubagentNotification 是子 Agent 的 Turn 结束并保存终态后发给父 Agent 的通知。
func (*SubagentNotification) Clone ¶
func (notification *SubagentNotification) Clone() *SubagentNotification
Clone 复制子 Agent 通知。
type TextContent ¶
type TextContent struct {
Text string `json:"text"`
// IsContext 是不是附带材料?附带材料不参与用户命令解析。
IsContext bool `json:"is_context,omitempty"`
}
TextContent 是一段文字。
type TokenUsage ¶
type TokenUsage struct {
Input int `json:"input"`
Output int `json:"output"`
CacheRead int `json:"cache_read"`
CacheWrite int `json:"cache_write"`
Reasoning int `json:"reasoning"`
}
TokenUsage 是一次或多次模型调用的 token 数,各家的统计方式已经统一:Input 包含缓存命中和缓存写入, CacheRead 和 CacheWrite 是 Input 的一部分,Reasoning 是 Output 的一部分。
func (TokenUsage) Add ¶
func (u TokenUsage) Add(other TokenUsage) TokenUsage
Add 返回两份 token 用量相加的结果。
type ToolCall ¶
type ToolCall struct {
CallID string `json:"call_id"`
Name string `json:"name"`
Arguments string `json:"arguments"`
// Status 为空时参数还在生成。
Status ToolCallStatus `json:"status,omitempty"`
}
ToolCall 是模型发出的一次工具调用及参数。
func (*ToolCall) FromLLMKit ¶
FromLLMKit 读取模型发出的完整工具调用。
type ToolCallStatus ¶
type ToolCallStatus string
ToolCallStatus 是工具调用参数已经完整还是被中断。
const ( ToolCallReady ToolCallStatus = "ready" ToolCallInterrupted ToolCallStatus = "interrupted" )
type ToolDefinition ¶
type ToolDefinition struct {
Name string `json:"name"`
Description string `json:"description"`
InputSchema json.RawMessage `json:"input_schema"`
// MCPServerID 是提供这个工具的 MCP server;内置工具和协作工具为空。不发给模型。
MCPServerID string `json:"mcp_server_id,omitempty"`
}
ToolDefinition 是一个工具的名称、描述和参数 schema。
func (*ToolDefinition) Clone ¶
func (definition *ToolDefinition) Clone() *ToolDefinition
Clone 复制工具定义。
func (*ToolDefinition) ToLLMKit ¶
func (tool *ToolDefinition) ToLLMKit() *llmkit.Tool
ToLLMKit 把工具定义转换为发给模型的 llmkit 工具。
type ToolResult ¶
type ToolResult struct {
CallID string `json:"call_id,omitempty"`
// Executor 是实际执行这次调用的 Executor;Agent 侧工具(spawn_agent 等)和没能分派的调用为空。
Executor string `json:"executor,omitempty"`
Content json.RawMessage `json:"content,omitempty"`
// Images 是工具读到、要给模型看的图片;Alt 写模型传入的路径。发给模型时放进这串工具结果之后的一条用户消息。
Images []*ImageContent `json:"images,omitempty"`
Error *ToolError `json:"error,omitempty"`
// Truncated 工具输出是否超长被截断了?
Truncated bool `json:"truncated,omitempty"`
}
ToolResult 是一次工具调用的结果,用 CallID 对应模型发出的那次调用。
func (*ToolResult) FromLLMKit ¶
func (result *ToolResult) FromLLMKit(message *llmkit.Message) error
FromLLMKit 从 tool 消息解码 OpenVaala 自己编码的工具结果 JSON。
func (*ToolResult) GetModelContent ¶
func (result *ToolResult) GetModelContent() ([]byte, error)
GetModelContent 将工具结果编码为模型可见的 JSON 正文。
type Turn ¶
type Turn struct {
ID TurnID `json:"id"`
// UpdatedAt 是最后一次写入的 Unix 毫秒,由存储在写入时分配;写入时设置的值不会被保存。
UpdatedAt int64 `json:"updated_at,omitempty"`
// ConversationID 是所属对话;DAO 据此找到对话目录里的 metadata.jsonl。
ConversationID ConversationID `json:"conversation_id"`
SessionID SessionID `json:"session_id"`
Status TurnStatus `json:"status"`
// FinalModelCallID 是本轮最后一次成功的普通模型调用;只在 completed 时填写。
FinalModelCallID ModelCallID `json:"final_model_call_id,omitempty"`
// Error 是 Turn 失败或被中断时的错误说明。
Error string `json:"error,omitempty"`
ItemsRange TurnItemRange `json:"items_range,omitzero"`
// Usage 是本 Turn 全部模型调用(包括压缩)的用量合计,写入终态时填写;running 时为零。
Usage TokenUsage `json:"usage,omitzero"`
// ContextUsage 是最近一次完整普通调用的报告;本轮没有完整普通调用时沿用上一轮的报告,模型切换后为空。
ContextUsage *TurnContextUsage `json:"context_usage,omitempty"`
// Model 是本 Turn 实际使用的模型和推理强度,创建 running 记录时写入。
Model ModelSelection `json:"model,omitzero"`
// Executors 是本 Turn 开始时对话可用的 Executor,按顺序,第一个是默认;创建 running 记录时写入。
Executors []TurnExecutor `json:"executors,omitempty"`
}
Turn 是一轮 Agent 执行的记录:状态、错误、Item 范围、用量,以及用到的模型和 Executor。
type TurnContextUsage ¶
type TurnContextUsage struct {
ModelCallID ModelCallID `json:"model_call_id"`
// InputThroughItemID 是请求发出前上下文最后一条 Item,不含该次生成输出。
InputThroughItemID ItemID `json:"input_through_item_id"`
// Usage 是服务端上报并已归一化的用量;没有上报时为零值。
Usage TokenUsage `json:"usage,omitzero"`
ReasoningContext llmkit.ReasoningContext `json:"reasoning_context,omitempty"`
}
TurnContextUsage 保存最近一次完整普通调用的用量和原输入位置;本轮没有完整普通调用时沿用上一轮的报告。
type TurnExecutor ¶
type TurnExecutor struct {
ID string `json:"id"`
WorkspaceDirectory string `json:"workspace_directory"`
}
TurnExecutor 是一个 Executor 和它在对话里的根目录。
type TurnItemRange ¶
type TurnItemRange struct {
FirstOrdinal uint64 `json:"first_ordinal"`
LastOrdinal uint64 `json:"last_ordinal"`
}
TurnItemRange 是一轮已保存 Item 的对外序号范围,两端都包含;起点为零表示还没有 Item,运行中终点为零。
type TurnStatus ¶
type TurnStatus string
TurnStatus 是一轮执行正在运行还是以什么方式结束。
const ( TurnStatusRunning TurnStatus = "running" TurnStatusCompleted TurnStatus = "completed" TurnStatusFailed TurnStatus = "failed" TurnStatusInterrupted TurnStatus = "interrupted" )