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

defs

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Nov 1, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const ClientExecutorID = "client"

ClientExecutorID 是对话里客户端登记的 MCP server 所属的虚拟 Executor 的 ID;配置文件里不能用这个 ID。

View Source
const LocalExecutorID = "local"

LocalExecutorID 是 OpenVaala 自带的本机 Executor 的 ID;配置文件里不能用这个 ID。

Variables

This section is empty.

Functions

func GetProviderModelKey

func GetProviderModelKey(id string) string

GetProviderModelKey 将上游模型 ID 转成配置文件可用的 Key。

func GetProviderModelKeys

func GetProviderModelKeys(ids []string) map[string]string

GetProviderModelKeys 为一组上游模型 ID 分配不重名的配置 Key。

func IsConversationMessage

func IsConversationMessage(item *Item) bool

IsConversationMessage 根 Session 的这条 Item 计入对话消息数吗?

func TruncateConversationTitle

func TruncateConversationTitle(title string) string

TruncateConversationTitle 截取对话标题,最多保留 256 个 Unicode 字符。

Types

type Address

type Address struct {
	Kind IdentityKind `json:"kind"`
	// ID 在 Agent 地址里是 Session ID。
	ID string `json:"id"`
}

Address 是消息的发送方或接收方。

func (*Address) Clone

func (address *Address) Clone() *Address

Clone 复制消息地址。

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 消息发送方的任务名,以及它和接收方的关系。

func (*AgentSender) Clone

func (sender *AgentSender) Clone() *AgentSender

Clone 复制 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) Clone

func (content *Content) Clone() *Content

Clone 复制消息内容。

func (*Content) FromLLMKit

func (content *Content) FromLLMKit(block *llmkit.ContentBlock) error

FromLLMKit 将模型的文本或图片内容块转换为 Content。

func (*Content) ToLLMKit

func (content *Content) ToLLMKit() (*llmkit.ContentBlock, error)

ToLLMKit 将文本或图片转换为模型内容块。

func (*Content) Validate

func (content *Content) Validate() error

Validate 检查内容类型及对应的文本或图片载荷。

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 ConversationID

type ConversationID string

ConversationID 唯一标识一个对话,并按创建时间排序。

func NewConversationID

func NewConversationID() ConversationID

NewConversationID 创建按时间排序的对话 ID。

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

type ExecutorDirectoryChange struct {
	ID                string
	PreviousDirectory string
	Directory         string
}

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 保存。

func (*HookRun) Clone

func (run *HookRun) Clone() *HookRun

Clone 复制 hook 运行记录。

type HookRunID

type HookRunID string

HookRunID 唯一标识一次 hook 运行,并按创建时间排序。

func NewHookRunID

func NewHookRunID() HookRunID

NewHookRunID 创建按时间排序的 hook 运行 ID。

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

type ImageContent struct {
	DataURL string `json:"data_url"`
	Alt     string `json:"alt,omitempty"`
}

ImageContent 是一张图片:来源和说明。

func (*ImageContent) Clone

func (content *ImageContent) Clone() *ImageContent

Clone 复制图片内容。

func (*ImageContent) GetDataURLParts

func (image *ImageContent) GetDataURLParts() (mimeType, data string, isDataURL bool)

GetDataURLParts 拆分 base64 data URL,返回 MIME 类型、数据和是否匹配。

type InputID

type InputID string

InputID 是调用方给一次输入提交起的去重标识,由调用方生成,与 Item 身份无关。

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

func SelectContextHistoryItems(items []*Item) ([]*Item, error)

SelectContextHistoryItems 从正序历史里选出发给模型的上下文:最新摘要和它没覆盖的 Item。

func (*Item) Clone

func (item *Item) Clone() *Item

Clone 复制 Item 及全部载荷。

func (*Item) FromLLMKit

func (item *Item) FromLLMKit(modelMessage *llmkit.Message, from, to *Address) error

FromLLMKit 将单条模型消息转换为 Item。

func (*Item) ToLLMKit

func (item *Item) ToLLMKit(role llmkit.Role) (*llmkit.Message, error)

ToLLMKit 按指定角色将 Item 转换为单条模型消息。

func (*Item) ValidateContextSummary

func (item *Item) ValidateContextSummary() error

ValidateContextSummary 检查摘要 Item 的类型、ID 和载荷。

func (*Item) ValidateExecutorsChange

func (item *Item) ValidateExecutorsChange() error

ValidateExecutorsChange 检查 Executor 切换 Item 的 ID 和前后列表。

func (*Item) ValidateInputMessage

func (item *Item) ValidateInputMessage() error

ValidateInputMessage 检查提交给 Session 的输入消息。

func (*Item) ValidateModelChange

func (item *Item) ValidateModelChange() error

ValidateModelChange 检查模型切换 Item 的 ID 和前后模型。

func (*Item) ValidateSessionFork

func (item *Item) ValidateSessionFork() error

ValidateSessionFork 检查分叉标记的 ID 和载荷。

type ItemID

type ItemID string

ItemID 唯一标识一条由 OpenVaala 创建的 Item,并按创建时间排序。

func NewItemID

func NewItemID() ItemID

NewItemID 创建按时间排序的 Item 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) Clone

func (message *Message) Clone() *Message

Clone 复制消息及其内容。

func (*Message) FromLLMKit

func (message *Message) FromLLMKit(modelMessage *llmkit.Message, from, to *Address) error

FromLLMKit 把只含文本和图片的模型消息转换为 Message,地址用调用方传入的 from、to。

func (*Message) ToLLMKit

func (message *Message) ToLLMKit(role llmkit.Role) (*llmkit.Message, error)

ToLLMKit 按调用方指定的模型角色转换消息。

type ModelCallID

type ModelCallID string

ModelCallID 唯一标识一次模型调用,并按创建时间排序。

func NewModelCallID

func NewModelCallID() ModelCallID

NewModelCallID 创建按时间排序的模型调用 ID。

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 在本轮模型和上一轮不同时写在本轮输入之前:作为提示发给模型,它之前的推理不再发送。

func (*ModelChange) Clone

func (change *ModelChange) Clone() *ModelChange

Clone 复制模型切换记录。

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

type ModelError struct {
	Code    string `json:"code,omitempty"`
	Message string `json:"message"`
}

ModelError 保存模型返回的错误码和消息。

func (*ModelError) Clone

func (modelError *ModelError) Clone() *ModelError

Clone 复制模型错误。

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"
)

func (ModelInput) IsKnown

func (input ModelInput) IsKnown() bool

IsKnown 这是 OpenVaala 认识的输入种类吗?

type ModelRef

type ModelRef struct {
	ProviderID string `json:"provider_id"`
	ModelID    string `json:"model_id"`
}

ModelRef 是模型目录中一个模型的标识:Provider 文件的 id 加这个文件里的模型 id。

func ParseModelRef

func ParseModelRef(text string) (ModelRef, error)

ParseModelRef 将 provider_id/model_id 解析为模型标识。

func (ModelRef) String

func (ref ModelRef) String() string

String 返回 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) Clone

func (reasoning *Reasoning) Clone() *Reasoning

Clone 复制模型推理。

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 的内容。

func (*SessionFork) Clone

func (fork *SessionFork) Clone() *SessionFork

Clone 复制分叉标记。

type SessionID

type SessionID string

SessionID 唯一标识一个 Session,也就是一个 Agent 在对话里的一段上下文,并按创建时间排序。

func NewSessionID

func NewSessionID() SessionID

NewSessionID 创建按时间排序的 Session ID。

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 是一段文字。

func (*TextContent) Clone

func (content *TextContent) Clone() *TextContent

Clone 复制文本内容。

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) Clone

func (call *ToolCall) Clone() *ToolCall

Clone 复制工具调用。

func (*ToolCall) FromLLMKit

func (call *ToolCall) FromLLMKit(modelCall *llmkit.ToolCall)

FromLLMKit 读取模型发出的完整工具调用。

func (*ToolCall) ToLLMKit

func (call *ToolCall) ToLLMKit() *llmkit.ToolCall

ToLLMKit 将工具调用转换为 llmkit 的工具调用。

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 ToolError

type ToolError struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

ToolError 是工具执行失败时的错误码和消息。

func (*ToolError) Clone

func (toolError *ToolError) Clone() *ToolError

Clone 复制工具错误。

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) Clone

func (result *ToolResult) Clone() *ToolResult

Clone 复制工具结果。

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 正文。

func (*ToolResult) ToLLMKit

func (result *ToolResult) ToLLMKit() (*llmkit.Message, error)

ToLLMKit 把工具结果转换为发给模型的 tool 消息。

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 TurnID

type TurnID string

TurnID 唯一标识一轮 Agent 执行,并按创建时间排序。

func NewTurnID

func NewTurnID() TurnID

NewTurnID 创建按时间排序的 Turn ID。

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"
)

Jump to

Keyboard shortcuts

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