Documentation
¶
Overview ¶
Package runtime 提供一个进程内 OpenVaala 的公开根入口:按 ConversationID 路由多个对话并订阅其事件。
Index ¶
- Variables
- type AgentInfo
- type CompactContextRequest
- type ContextUsage
- type ContextUsageSource
- type ConversationEvent
- type ConversationSubscription
- type ConversationTitleChanged
- type CreateConversationRequest
- type Definitions
- type DeleteConversationRequest
- type ForkConversationRequest
- type GetConversationRequest
- type GetSessionByIDRequest
- type GetSessionContextUsageRequest
- type GetSessionDetailsRequest
- type GetSkillsRequest
- type GetTurnsRequest
- type GetWorkspaceDirectoriesRequest
- type InterruptTurnRequest
- type InterruptTurnWithInputRequest
- type LastRequestUsage
- type ListItemsRequest
- type ListModelsRequest
- type ListTurnsRequest
- type ModelList
- type OpenConversationRequest
- type OpenTerminalWorkspaceRequest
- type ResolveWorkspaceDirectoryRequest
- type RunningConversations
- type RunningConversationsSubscription
- type Runtime
- type RuntimeOpt
- type SessionContextUsage
- type SessionRuntimeInfo
- type SessionSubscription
- type SetClientMCPServersRequest
- type SetConversationArchivedRequest
- type SetConversationExecutorSettingsRequest
- type SetConversationTitleRequest
- type SetDefinitionsResult
- type SetSessionModelRequest
- type SteerInputRequest
- type StreamingItem
- type SubmitInputRequest
- type SubscribeConversationRequest
- type SubscribeSessionRequest
- type TerminalWorkspace
- type WithdrawInputRequest
Constants ¶
This section is empty.
Variables ¶
var ErrConversationNotFound = errors.New("conversation not found")
ErrConversationNotFound 是找不到对话记录时返回的错误。
var ErrConversationNotOpen = errors.New("conversation is not open")
ErrConversationNotOpen 是对话没有运行实例时,需要已打开对话的方法返回的错误;调用方先 OpenConversation。
var ErrConversationReconfigured = errors.New("conversation reconfigured")
ErrConversationReconfigured 是对话原地换上新配置(改 Executor 设置或 reload)后,关闭它全部订阅时的原因; 客户端收到后重新订阅、增量同步。
var ErrNoModelConfigured = errors.New("no model is configured; run openvaala to set up a model provider")
ErrNoModelConfigured 是没有任何模型时新建对话返回的错误。
var ErrRuntimeStopped = errors.New("runtime has stopped")
ErrRuntimeStopped 是 Runtime.Run 返回后,需要经事件循环处理的调用返回的错误。
var ErrSessionNotFound = errors.New("session not found")
ErrSessionNotFound 是按 SessionID 找不到 Session 时返回的错误。
var ErrSubscriberTooSlow = errors.New("subscriber is too slow")
ErrSubscriberTooSlow 表示订阅者的缓冲已满,订阅被关闭;调用方用最后看到的位置重新订阅。
Functions ¶
This section is empty.
Types ¶
type AgentInfo ¶
type AgentInfo struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`
// DefaultModel 是 Agent 的默认模型;Agent 没有指定默认模型时为零值。
DefaultModel defs.ModelRef `json:"default_model,omitzero"`
}
AgentInfo 是 ListAgents 返回的一个 Agent 的公开说明,不含系统指令。
type CompactContextRequest ¶
type CompactContextRequest struct {
ConversationID defs.ConversationID
}
CompactContextRequest 选择要手动压缩根 Session 上下文的对话。
type ContextUsage ¶
type ContextUsage struct {
// Window 是模型上下文窗口;0 表示窗口未知。
Window int `json:"window"`
// Tokens 是预计的输入 token 数。
Tokens int `json:"tokens"`
// Source 是 Tokens 的来源:实际基准加估算、整份估算,或还没有测量。
Source ContextUsageSource `json:"source"`
}
ContextUsage 是下一次请求的预计占用。
type ContextUsageSource ¶
type ContextUsageSource string
ContextUsageSource 是预计占用的来源。
const ( // ContextUsageSourceActual 是基于上次实际用量、结合内容变化估算的统一测量。 ContextUsageSourceActual ContextUsageSource = "actual" // ContextUsageSourceEstimated 整份都是估算:还没有实际基准,或基准已作废。 ContextUsageSourceEstimated ContextUsageSource = "estimated" // ContextUsageSourceUnknown 还没有测量。 ContextUsageSourceUnknown ContextUsageSource = "unknown" )
type ConversationEvent ¶
type ConversationEvent interface {
// contains filtered or unexported methods
}
ConversationEvent 是对话订阅推送的事件:ConversationTitleChanged 或 SessionRuntimeInfo。
type ConversationSubscription ¶
type ConversationSubscription struct {
// Title 是订阅时已保存的标题。
Title string
// Sessions 是订阅时全部 Session 的运行信息,按 SessionID 排序。
Sessions []SessionRuntimeInfo
// Events 按顺序推送之后的运行信息变化和已保存标题的变化。
Events <-chan ConversationEvent
// contains filtered or unexported fields
}
ConversationSubscription 是对话标题与运行信息订阅。
func (*ConversationSubscription) GetCloseReason ¶
func (s *ConversationSubscription) GetCloseReason() error
GetCloseReason 返回 Events 关闭的原因,和 SessionSubscription.GetCloseReason 相同。
type ConversationTitleChanged ¶
type ConversationTitleChanged struct{ Title string }
ConversationTitleChanged 由对话事件循环在新标题保存成功后发给对话订阅者;显式改名和首条用户输入自动命名都会发,标题没变时不发。
type CreateConversationRequest ¶
type CreateConversationRequest struct {
// AgentName 是根 Session 使用的 Agent 名。
AgentName string
// Model 是根 Session 的模型选择;零值时使用根 Agent 的默认模型。
Model defs.ModelSelection
// ExecutorSettings 补上缺的 local 目录后存进记录;新加入的未知 Executor 返回 conversation.ErrInvalidExecutorSettings。
ExecutorSettings defs.ExecutorSettings
// Environment 是客户端的环境变量(格式同 os.Environ),只给 local 种类的 Executor 执行命令用;nil 时继承 serve 进程的环境。
Environment []string
// Ephemeral 为 true 时建临时对话:存储在一个只属于它的 sqlite 内存库里,永远不进对话列表;
// 没有订阅者、也没有 Session 在跑,满 UnsavedConversationIdleTimeout 后结束并丢弃,之后按 ID 读回「对话不存在」。
// 临时对话没有 Executor 和 Skill,ExecutorSettings 原样存进记录。
Ephemeral bool
}
CreateConversationRequest 是新建对话的参数:用哪个 Agent、什么模型、哪些 Executor 和环境变量;对话建好后立即启动。
type Definitions ¶
type Definitions struct {
Agents []*agent.AgentDefinition
Models []*defs.ModelDefinition
// MCPServers 是全部 MCP server 定义,含插件带来的。
MCPServers []*mcpclient.ServerDefinition
// Hooks 是全部 hook 定义(含插件带来的),已按配置顺序排列;为空时对话也有一个不含任何 hook 的 hook.Hooks。
Hooks []*hook.HookDefinition
// Executors 是全部 Executor:local、builtin,再加 executors/ 里配置的,按这个顺序。
Executors []*defs.ExecutorDefinition
// Skills 是所有对话共用的 skill:skills.directory、builtin、各插件,按这个顺序去重。
Skills []*skill.Skill
}
Definitions 是从配置加载出的整份定义,reload 时整份换掉;构造后只读。
type DeleteConversationRequest ¶
type DeleteConversationRequest struct {
ConversationID defs.ConversationID
}
DeleteConversationRequest 删除一个已保存的对话、它的全部 Session 和历史。
type ForkConversationRequest ¶
type ForkConversationRequest struct {
ConversationID defs.ConversationID
// BeforeTurnID 复制到这一轮之前(不含),回退重来用;LastTurnID 复制到这一轮(含)。
// 两个最多填一个;都不填时复制所有已结束的轮次。
BeforeTurnID defs.TurnID
LastTurnID defs.TurnID
// Model 是新根 Session 的模型;零值时照抄来源根 Session 的模型。
Model defs.ModelSelection
// ExecutorSettings、Environment 和 CreateConversationRequest 一样;调用方一般传来源对话的设置。来源记录里就有、
// 配置中已不存在的 Executor 只记 Warn。
ExecutorSettings defs.ExecutorSettings
Environment []string
}
ForkConversationRequest 把已保存的对话根 Session 复制到某一轮为止,成为一个新对话并打开。
type GetConversationRequest ¶
type GetConversationRequest struct {
ConversationID defs.ConversationID
}
GetConversationRequest 指定一个对话:读对话记录、查对话是否打开、查 MCP 连接都用它。
type GetSessionByIDRequest ¶
GetSessionByIDRequest 是只凭 SessionID 读 Session 记录的请求。
type GetSessionContextUsageRequest ¶
type GetSessionContextUsageRequest struct {
ConversationID defs.ConversationID
SessionID defs.SessionID
}
GetSessionContextUsageRequest 读取对话内一个 Session 的上下文占用详情。
type GetSessionDetailsRequest ¶
type GetSessionDetailsRequest struct {
ConversationID defs.ConversationID
SessionID defs.SessionID
}
GetSessionDetailsRequest 读取对话内一个 Session 的静态配置。
type GetSkillsRequest ¶
type GetSkillsRequest struct {
ConversationID defs.ConversationID
AgentName string
// ExecutorSettings 只在没有 ConversationID 时用:草稿对话按它找默认 Executor 扫项目目录和主目录。
ExecutorSettings defs.ExecutorSettings
}
GetSkillsRequest 指定查哪里的 Skill:有 ConversationID 时查这个已打开对话;还没有对话时按 AgentName 和 ExecutorSettings 查草稿。
type GetTurnsRequest ¶
type GetTurnsRequest struct {
ConversationID defs.ConversationID
SessionID defs.SessionID
TurnIDs []defs.TurnID
}
GetTurnsRequest 按 ID 取一个 Session 的多条 Turn 记录;ConversationID 用来选这个对话的存储。
type GetWorkspaceDirectoriesRequest ¶
type GetWorkspaceDirectoriesRequest struct {
ExecutorID string
Directory string
BaseDirectory string
}
GetWorkspaceDirectoriesRequest 指定 Executor、待列出的目录和相对路径基准。
type InterruptTurnRequest ¶
type InterruptTurnRequest struct {
ConversationID defs.ConversationID
}
InterruptTurnRequest 请求取消对话根 Session 的活动 Turn。
type InterruptTurnWithInputRequest ¶
type InterruptTurnWithInputRequest struct {
ConversationID defs.ConversationID
ItemID defs.ItemID
TurnID defs.TurnID
}
InterruptTurnWithInputRequest 指定优先用户输入和要取消的根 Session 轮。
type LastRequestUsage ¶
type LastRequestUsage struct {
ModelCallID defs.ModelCallID `json:"model_call_id"`
// Model 是这次普通调用使用的模型。
Model defs.ModelRef `json:"model"`
// Usage 是服务商上报的用量。
Usage defs.TokenUsage `json:"usage"`
// EstimatedTokens 是调用前未经实际用量校正的本地估算。
EstimatedTokens int `json:"estimated_tokens"`
}
LastRequestUsage 是最近一次上报了用量的普通模型调用。
type ListItemsRequest ¶
type ListItemsRequest struct {
ConversationID defs.ConversationID
SessionID defs.SessionID
Order storage.Direction
Cursor storage.Ordinal
Limit int
}
ListItemsRequest 分页读取对话内一个 Session 的日志;分页字段与 dao.ListItemsRequest 相同。
type ListModelsRequest ¶
type ListModelsRequest struct {
AgentName string
}
ListModelsRequest 查询模型目录;AgentName 为空时不返回 Agent 默认模型。
type ListTurnsRequest ¶
type ListTurnsRequest struct {
ConversationID defs.ConversationID
SessionID defs.SessionID
Order storage.Order
Cursor dao.RecordCursor[defs.TurnID]
Limit int
}
ListTurnsRequest 分页读取一个 Session 的 Turn 记录;ConversationID 用来选这个对话的存储,分页字段与 dao.ListTurnsRequest 相同。
type ModelList ¶
type ModelList struct {
Models []*defs.ModelDefinition `json:"models"`
// AgentDefaultModel 是请求中 Agent 的默认模型;没有指定 Agent 时为零值。
AgentDefaultModel defs.ModelRef `json:"agent_default_model,omitzero"`
}
ModelList 是 ListModels 返回的模型目录;每一项只含公开字段,不含连接参数和凭证。
type OpenConversationRequest ¶
type OpenConversationRequest struct {
ConversationID defs.ConversationID
// Environment 和 CreateConversationRequest.Environment 相同。
Environment []string
}
OpenConversationRequest 是打开已保存对话的参数:对话没在运行时按记录里的 Executor 设置和 Environment 装配;已打开时忽略 Environment。
type OpenTerminalWorkspaceRequest ¶
type OpenTerminalWorkspaceRequest struct {
// ExecutorID 为空时用 local Executor。
ExecutorID string
// Directory 为空时用该 Executor 的默认工作目录;否则按 ResolveWorkspaceDirectory 的规则解析并检查它是目录。
Directory string
// Environment 的含义同 CreateConversationRequest;只给 local 种类的 Executor 用。
Environment []string
}
OpenTerminalWorkspaceRequest 指定终端要用哪个 Executor、起始目录和客户端环境变量。
type ResolveWorkspaceDirectoryRequest ¶
type ResolveWorkspaceDirectoryRequest struct {
// ExecutorID 是要在哪个 Executor 上解析目录。
ExecutorID string
// Directory 是用户写的目录。
Directory string
// BaseDirectory 是当前目录;为空时用这个 Executor 的默认根目录。
BaseDirectory string
}
ResolveWorkspaceDirectoryRequest 是 /cd 的输入。
type RunningConversations ¶
type RunningConversations struct {
ConversationIDs []defs.ConversationID `json:"conversation_ids"`
}
RunningConversations 列出至少有一个 Session 正在执行 Turn 的对话。
type RunningConversationsSubscription ¶
type RunningConversationsSubscription struct {
Initial RunningConversations
Events <-chan RunningConversations
// contains filtered or unexported fields
}
RunningConversationsSubscription 返回登记时的运行集合及之后的完整集合更新。
func (*RunningConversationsSubscription) GetCloseReason ¶
func (s *RunningConversationsSubscription) GetCloseReason() error
GetCloseReason 返回全局运行订阅关闭的原因。
type Runtime ¶
type Runtime interface {
// Run 运行到上下文结束,停止并等待全部对话后返回;只能调用一次。需要运行实例的方法在 Run 启动前等待,Run 返回后返回 ErrRuntimeStopped。
Run(ctx context.Context) error
// IsIdle 全部已打开对话是否都没有运行中的 Turn 或后台命令?包括子 Agent;Runtime 已停止时返回 ErrRuntimeStopped。
IsIdle(ctx context.Context) (bool, error)
// CreateConversation 按 Agent、模型、Executor 设置和环境创建并启动对话;模型目录为空返回 ErrNoModelConfigured,设置无效返回 conversation.ErrInvalidExecutorSettings。
CreateConversation(ctx context.Context, request *CreateConversationRequest) (defs.Conversation, error)
// OpenConversation 对话已打开时返回最新记录,否则按记录里的设置装配并启动;同一对话同时打开只装配一次,记录不存在返回 ErrConversationNotFound。
OpenConversation(ctx context.Context, request *OpenConversationRequest) (defs.Conversation, error)
// IsConversationOpen 对话是否有尚未退出的运行实例?
IsConversationOpen(ctx context.Context, request *GetConversationRequest) (bool, error)
// SetConversationExecutorSettings 更新完整 Executor 设置并返回记录;有 Session 在执行 Turn 时返回 session.ErrSessionBusy,新增未知 Executor 返回 conversation.ErrInvalidExecutorSettings。
SetConversationExecutorSettings(ctx context.Context, request *SetConversationExecutorSettingsRequest) (defs.Conversation, error)
// GetConversation 读取对话记录,对话没打开也能读;找不到时返回 ErrConversationNotFound。
GetConversation(ctx context.Context, request *GetConversationRequest) (defs.Conversation, error)
// ListConversations 分页读取匹配的对话及根 Session;Archived 为 true 只查已归档,否则只查未归档。
ListConversations(ctx context.Context, request *dao.ListConversationsRequest) (storage.Page[dao.ConversationListEntry, dao.RecordCursor[defs.ConversationID]], error)
// SetConversationTitle 保存标题的前 256 个字符,已打开对话的订阅者会收到标题变化。
SetConversationTitle(ctx context.Context, request *SetConversationTitleRequest) error
// ForkConversation 复制已保存对话到指定轮次并打开分叉;没有可复制轮次时新建未保存对话,临时和未保存来源返回 ErrConversationNotFound。
ForkConversation(ctx context.Context, request *ForkConversationRequest) (defs.Conversation, error)
// SetConversationArchived 更新归档时间并返回记录,状态相同时不写入;临时和未保存对话返回 ErrConversationNotFound。
SetConversationArchived(ctx context.Context, request *SetConversationArchivedRequest) (defs.Conversation, error)
// DeleteConversation 停止对话并删除全部记录和历史;有 Session 在执行 Turn 时返回 session.ErrSessionBusy,临时和未保存对话返回 ErrConversationNotFound。
DeleteConversation(ctx context.Context, request *DeleteConversationRequest) error
// SubmitInput 将输入交给已打开对话的根 Session,返回 ItemID;普通新对话先保存,用户输入接收后用正文给空标题命名。
SubmitInput(ctx context.Context, request *SubmitInputRequest) (defs.ItemID, error)
// InterruptTurn 请求取消根 Session 的活动 Turn,不等待结束;没有活动 Turn 时返回空 TurnID。
InterruptTurn(ctx context.Context, request *InterruptTurnRequest) (defs.TurnID, error)
// SteerInput 将根 Session 的排队用户输入移入指定轮。
SteerInput(ctx context.Context, request *SteerInputRequest) error
// InterruptTurnWithInput 将排队用户输入置顶并取消指定轮。
InterruptTurnWithInput(ctx context.Context, request *InterruptTurnWithInputRequest) error
// WithdrawInput 原子取走根 Session 的完整待处理用户输入组。
WithdrawInput(ctx context.Context, request *WithdrawInputRequest) ([]*defs.Item, error)
// CompactContext 请求根 Session 启动压缩 Turn 并返回 TurnID;有活动 Turn 或排队输入时返回 session.ErrSessionBusy,普通新对话先保存。
CompactContext(ctx context.Context, request *CompactContextRequest) (defs.TurnID, error)
// SubscribeConversation 订阅已打开对话的标题与全部 Session 运行信息,先返回初始信息再有序推送变化,订阅上下文结束后退订。
SubscribeConversation(ctx context.Context, request *SubscribeConversationRequest) (*ConversationSubscription, error)
// SubscribeSession 订阅已打开对话中一个 Session 的内容,订阅上下文结束后退订。
SubscribeSession(ctx context.Context, request *SubscribeSessionRequest) (*SessionSubscription, error)
// SubscribeRunningConversations 返回当前运行集合并订阅变化,ctx 结束后退订。
SubscribeRunningConversations(ctx context.Context) (subscription *RunningConversationsSubscription, err error)
// GetSessionContextUsage 读取已打开对话中一个 Session 的上下文占用详情,取自最近的测量和模型调用记录。
GetSessionContextUsage(ctx context.Context, request *GetSessionContextUsageRequest) (SessionContextUsage, error)
// GetSessionDetails 读取已打开对话中的 Session 配置和最新标题。
GetSessionDetails(ctx context.Context, request *GetSessionDetailsRequest) (conversation.SessionDetails, error)
// GetMCPServers 返回已打开对话的执行环境及客户端 MCP 连接情况,不等待连接;未打开时返回 ErrConversationNotOpen。
GetMCPServers(ctx context.Context, request *GetConversationRequest) ([]conversation.MCPServerInfo, error)
// SetClientMCPServers 替换客户端为已打开对话登记的全部 MCP server,下个 Turn 起生效;空列表移除全部,无效登记返回错误且保留原登记。
SetClientMCPServers(ctx context.Context, request *SetClientMCPServersRequest) error
// ListModels 返回公开模型目录和指定 Agent 的默认模型,不含连接信息与凭证。
ListModels(ctx context.Context, request *ListModelsRequest) (ModelList, error)
// GetHooks 按配置顺序返回 Hook 信息,未配置时返回空切片。
GetHooks(ctx context.Context) ([]*hook.HookInfo, error)
// ListAgents 按配置顺序返回当前定义中的 Agent 名、说明和默认模型,不含系统指令。
ListAgents(ctx context.Context) ([]AgentInfo, error)
// ListExecutors 按 local、builtin、配置顺序返回 Executor 说明和默认目录。
ListExecutors(ctx context.Context) ([]conversation.ExecutorDetails, error)
// ResolveWorkspaceDirectory 按当前 Executor 定义解析工作目录;SSH Executor 每次调用建立连接,结束后断开。
ResolveWorkspaceDirectory(ctx context.Context, request *ResolveWorkspaceDirectoryRequest) (string, error)
// OpenTerminalWorkspace 按当前 Executor 定义为一个终端新建独立工作区,不借用任何对话的工作区;virtual Executor 返回 workspace.ErrTTYUnsupported。
OpenTerminalWorkspace(ctx context.Context, request *OpenTerminalWorkspaceRequest) (*TerminalWorkspace, error)
// GetWorkspaceDirectories 列出指定 Executor 上一个目录的普通直接子目录,请求结束后关闭临时工作区。
GetWorkspaceDirectories(ctx context.Context, request *GetWorkspaceDirectoriesRequest) (directories *conversation.WorkspaceDirectories, err error)
// SetDefinitions 替换整份定义,并行更新空闲对话;等待全部更新结束,结果列出未更新的忙碌对话,单个更新失败只记日志并保留原配置。
SetDefinitions(ctx context.Context, request *Definitions) (SetDefinitionsResult, error)
// GetSkills 返回对话根 Agent 或草稿 Agent 的可用 Skill 目录;草稿按 Executor 设置扫描项目目录和主目录。
GetSkills(ctx context.Context, request *GetSkillsRequest) ([]skill.SkillInfo, error)
// SetSessionModel 保存已打开对话中 Session 的模型和推理强度,下个 Turn 起生效,返回记录并推送运行信息;已保存但通知 Session 失败时,仍推送运行信息并返回记录和错误。
SetSessionModel(ctx context.Context, request *SetSessionModelRequest) (defs.Session, error)
// ListSessions 分页读取对话内的 Session 记录。
ListSessions(ctx context.Context, request *dao.ListSessionsRequest) (storage.Page[defs.Session, dao.RecordCursor[defs.SessionID]], error)
// GetSessionByID 从共享库按 SessionID 读取记录(含所属 ConversationID);未找到时返回 ErrSessionNotFound。
GetSessionByID(ctx context.Context, request *GetSessionByIDRequest) (defs.Session, error)
// ListTurns 按请求排序分页读取 Session 的 Turn,默认按 TurnID,也支持 UpdatedAt;不要求对话已打开。
ListTurns(ctx context.Context, request *ListTurnsRequest) (storage.Page[defs.Turn, dao.RecordCursor[defs.TurnID]], error)
// GetTurns 按请求顺序返回找到的 Turn,跳过不存在的记录,不要求对话已打开。
GetTurns(ctx context.Context, request *GetTurnsRequest) ([]defs.Turn, error)
// ListItems 分页读取对话内一个 Session 的日志。
ListItems(ctx context.Context, request *ListItemsRequest) (storage.Page[dao.LoggedItem, storage.Ordinal], error)
}
Runtime 保存共享定义和运行中的对话,按 ConversationID 处理对话操作与订阅。 对话的装配、设置更新和客户端 MCP 登记在调用方 goroutine 里执行,运行表与定义只由 Runtime 事件循环修改。
func NewRuntime ¶
func NewRuntime(opt *RuntimeOpt) (Runtime, error)
NewRuntime 校验依赖,创建共享 DAO 并保存初始定义。
type RuntimeOpt ¶
type RuntimeOpt struct {
// Records、Logs 是共用库的记录和日志存储;Runtime 用它们建共用的 DAO,也用作新对话暂存记录的目标。
Records storage.RecordStorage
Logs storage.LogStorage
// Definitions 是初始的整份定义:Agent 至少一个,每个 Session 按持久化的 AgentName 选择;各 Agent 的默认模型和摘要模型
// 引用模型目录里的项,模型目录为空时不能新建对话,等 SetDefinitions 加上模型;MCP server 只给至少一个 Agent 会用到的建连接。
Definitions *Definitions
// Telemetry 是遥测管道,由 Run 挂到 ctx 供全部对话使用;nil 时使用全局兜底。
Telemetry *telemetry.Telemetry
// UnsavedConversationIdleTimeout 是没保存的对话(临时对话、还没收到第一条输入的新对话)没有订阅者、也没有 Session 在跑后,
// 等多久结束并丢弃;NewRuntimeOpt 默认 60 秒。
UnsavedConversationIdleTimeout time.Duration
// MaxImageBytes 是 read_file 交给模型的单张图片上限,来自 tools.max_image_kb;serve 启动时定,reload 不变。
// NewRuntimeOpt 默认 500 KiB。
MaxImageBytes int
}
RuntimeOpt 保存全部对话共享的依赖,构造后只读。
func NewRuntimeOpt ¶
func NewRuntimeOpt(records storage.RecordStorage, logs storage.LogStorage, definitions *Definitions) *RuntimeOpt
NewRuntimeOpt 设置共享存储、初始定义和默认运行配置。
func (*RuntimeOpt) WithUnsavedConversationIdleTimeout ¶
func (opt *RuntimeOpt) WithUnsavedConversationIdleTimeout(timeout time.Duration) *RuntimeOpt
WithUnsavedConversationIdleTimeout 修改未保存对话的空闲丢弃时长。
type SessionContextUsage ¶
type SessionContextUsage struct {
// Window 是下一次请求所用模型的上下文窗口;0 表示窗口未知。
Window int `json:"window"`
// ThresholdTokens 是自动压缩阈值,按下一模型的窗口和最大输出计算;还没有测量时为 0。
ThresholdTokens int `json:"threshold_tokens"`
// NextRequest 与同一时刻的 SessionRuntimeInfo.Context 相同。
NextRequest ContextUsage `json:"next_request"`
// LastRequest 在还没有上报过用量的普通调用时为 nil。
LastRequest *LastRequestUsage `json:"last_request,omitempty"`
// SystemTokens、ToolTokens 是最近一次测量中系统提示词和工具定义的占用;还没有测量时为 0。
SystemTokens int `json:"system_tokens"`
ToolTokens int `json:"tool_tokens"`
// Items 是本轮最近一次统一测量的 Item 分类估算;还没有测量时为空。
Items []agent_context.ItemTokens `json:"items"`
}
SessionContextUsage 是一个 Session 的上下文占用详情,由已打开对话的 Session 记录、测量和模型调用信息整理。
type SessionRuntimeInfo ¶
type SessionRuntimeInfo struct {
Session defs.Session `json:"session"`
State session.SessionState `json:"state"`
ActiveTurnID defs.TurnID `json:"active_turn_id,omitempty"`
LastTurnID defs.TurnID `json:"last_turn_id,omitempty"`
LastTurnStatus defs.TurnStatus `json:"last_turn_status,omitempty"`
// ActiveTurnModel 是活动 Turn 使用的模型和推理强度;没有活动 Turn 时为零值。所选模型见 Session.Model。
ActiveTurnModel defs.ModelSelection `json:"active_turn_model,omitzero"`
// Context 是下一次请求的预计占用。
Context ContextUsage `json:"context"`
// Usage 是累计用量:对话加载时已保存 Turn 的用量之和,加上之后各次模型调用上报的用量。
Usage defs.TokenUsage `json:"usage"`
}
SessionRuntimeInfo 是一个 Session 的运行信息,可直接用 == 比较;runtimeConversation 在它有变化时发给对话订阅者, 例如 Session 启停、Turn 开始或结束、用量和上下文占用变化、换模型。
type SessionSubscription ¶
type SessionSubscription struct {
// LastSavedOrdinal 是订阅时已转发的最后一条已保存日志的流水号;它及之前的日志用 ListItems 补齐。
LastSavedOrdinal storage.Ordinal
// StreamingItems 是订阅时该 Session 活动 Turn 中已开始、尚未保存的 Item,按首次出现顺序,带 ItemIndex:
// 活动 Turn 中可能同时有多个 Item 在生成(例如推理与消息),后续增量事件只用 ItemIndex 定位所属 Item。
StreamingItems []StreamingItem
// PendingInputs 是订阅时待处理用户输入及可接收补充的轮。
PendingInputs session.SessionPendingInputs
// Events 紧接着订阅时的初始信息开始推送;事件对象由全部订阅者共享,只读。
Events <-chan conversation.ConversationEvent
// contains filtered or unexported fields
}
SessionSubscription 是一个 Session 的内容订阅。
func (*SessionSubscription) GetCloseReason ¶
func (s *SessionSubscription) GetCloseReason() error
GetCloseReason 返回 Events 关闭的原因:订阅方 ctx 结束、ErrSubscriberTooSlow、ErrConversationReconfigured,或对话退出(含 Runtime 停止)。
type SetClientMCPServersRequest ¶
type SetClientMCPServersRequest struct {
ConversationID defs.ConversationID
// ClientID 是 serve 上这条客户端连接的 ID。
ClientID string
Servers []conversation.ClientMCPServer
}
SetClientMCPServersRequest 是一条客户端连接为一个对话登记的全部 MCP server,换掉它之前为这个对话登记的;Servers 为空表示全部移除。
type SetConversationArchivedRequest ¶
type SetConversationArchivedRequest struct {
ConversationID defs.ConversationID
Archived bool
}
SetConversationArchivedRequest 归档(Archived 为 true)或取消归档一个已保存的对话。
type SetConversationExecutorSettingsRequest ¶
type SetConversationExecutorSettingsRequest struct {
ConversationID defs.ConversationID
ExecutorSettings defs.ExecutorSettings
}
SetConversationExecutorSettingsRequest 是对话新的完整 Executor 设置。
type SetConversationTitleRequest ¶
type SetConversationTitleRequest struct {
ConversationID defs.ConversationID
Title string
}
SetConversationTitleRequest 是新的对话标题;只保存前 256 个 Unicode 字符,对话没打开时直接写库。
type SetDefinitionsResult ¶
type SetDefinitionsResult struct {
// BusyConversationIDs 是正在执行 Turn 或有后台命令没结束、这次没有换上新定义的对话;它们空闲后再 reload 才用上新定义。
BusyConversationIDs []defs.ConversationID `json:"busy_conversation_ids"`
}
SetDefinitionsResult 是 SetDefinitions 返回的结果,列出这次没换上新定义的对话。
type SetSessionModelRequest ¶
type SetSessionModelRequest struct {
ConversationID defs.ConversationID
SessionID defs.SessionID
Model defs.ModelSelection
}
SetSessionModelRequest 是给一个 Session 换模型的参数;推理强度为空时沿用原来的强度(新模型不支持就用模型默认值)。
type SteerInputRequest ¶
type SteerInputRequest struct {
ConversationID defs.ConversationID
ItemID defs.ItemID
TurnID defs.TurnID
}
SteerInputRequest 指定要移入根 Session 当前轮的排队用户输入。
type StreamingItem ¶
StreamingItem 是一个生成中的 Item 及它在本轮 Agent 输出中的位置,与 AgentEvent.ItemIndex 对应。
type SubmitInputRequest ¶
type SubmitInputRequest struct {
ConversationID defs.ConversationID
// InputID 可选:根 Session 本次运行期内重复的 InputID 只接收一次,返回首次的 ItemID。
InputID defs.InputID
Mode session.SessionInputMode
// From 必须是用户或 Agent 身份。
From *defs.Address
Content []*defs.Content
}
SubmitInputRequest 是交给对话根 Session 的一次输入。
type SubscribeConversationRequest ¶
type SubscribeConversationRequest struct {
ConversationID defs.ConversationID
}
SubscribeConversationRequest 订阅对话标题和全部 Session 的运行信息。
type SubscribeSessionRequest ¶
type SubscribeSessionRequest struct {
ConversationID defs.ConversationID
SessionID defs.SessionID
}
SubscribeSessionRequest 订阅对话内一个 Session 的内容。
type TerminalWorkspace ¶
type TerminalWorkspace struct {
Workspace workspace.Workspace
// ExecutorID 是实际使用的 Executor。
ExecutorID string
// Directory 是解析后的绝对起始目录。
Directory string
}
TerminalWorkspace 是为一个终端新建的独立工作区,由调用方持有:用完后,SSH 工作区(workspace.SSHWorkspace)须由调用方关闭。
type WithdrawInputRequest ¶
type WithdrawInputRequest struct {
ConversationID defs.ConversationID
ItemID defs.ItemID
}
WithdrawInputRequest 指定要原子取走的根 Session 用户输入。