Documentation
¶
Index ¶
- Variables
- func ForkConversation(ctx context.Context, request *ForkConversationRequest, opt *ConversationOpt) (defs.Conversation, error)
- func LoadDraftSkills(ctx context.Context, settings defs.ExecutorSettings, ...) ([]*skill.Skill, error)
- func NewExecutorWorkspace(ctx context.Context, definition *defs.ExecutorDefinition, rootDirectory string, ...) (workspace.Workspace, error)
- func ResolveWorkspaceDirectory(ctx context.Context, executors []*defs.ExecutorDefinition, ...) (string, error)
- type ClientMCPServer
- type Conversation
- type ConversationDefinitions
- type ConversationEvent
- type ConversationInput
- type ConversationOpt
- type ConversationReconfigured
- type ConversationSessionEvent
- type ConversationSessionStarted
- type ConversationSessionStopped
- type ExecutorDetails
- type ForkConversationRequest
- type MCPServerInfo
- type SendMessageParam
- type SessionDetails
- type SessionHistoryParam
- type SessionInfo
- type SpawnAgentParam
- type WaitAgentParam
- type WorkspaceDirectories
Constants ¶
This section is empty.
Variables ¶
var ( // ErrForkBoundaryConflict 是 BeforeTurnID 和 LastTurnID 同时给了时 ForkConversation 返回的错误。 ErrForkBoundaryConflict = errors.New("fork accepts at most one of before turn and last turn") // ErrForkTurnNotFound 是指定的轮次不在来源根 Session 里时 ForkConversation 返回的错误。 ErrForkTurnNotFound = errors.New("fork turn was not found in the root session") // ErrForkTurnRunning 是 LastTurnID 指向的轮次还没结束时 ForkConversation 返回的错误。 ErrForkTurnRunning = errors.New("fork turn is still running") // ErrNothingToFork 是截取点之前没有可复制的轮次时 ForkConversation 返回的错误。 ErrNothingToFork = errors.New("nothing to fork before the requested turn") )
var ErrInvalidExecutorSettings = errors.New("invalid executor settings")
ErrInvalidExecutorSettings 是 Executor 设置或目录不合法时返回的错误:设置里新加了配置中没有的 Executor、 默认 Executor 不在 executor_ids 里、解析出的目录不存在或不是目录、要给 virtual Executor 换目录。
Functions ¶
func ForkConversation ¶
func ForkConversation(ctx context.Context, request *ForkConversationRequest, opt *ConversationOpt) (defs.Conversation, error)
ForkConversation 复制来源根 Session 选中轮次的历史和 Turn 记录,保存成新的分叉对话,返回新对话记录。
func LoadDraftSkills ¶
func LoadDraftSkills(ctx context.Context, settings defs.ExecutorSettings, definitions *ConversationDefinitions) ([]*skill.Skill, error)
LoadDraftSkills 为还没创建的草稿对话读取可用的 Skill:按设置建临时的默认工作区,读完关闭。
func NewExecutorWorkspace ¶
func NewExecutorWorkspace(ctx context.Context, definition *defs.ExecutorDefinition, rootDirectory string, environment []string) (workspace.Workspace, error)
NewExecutorWorkspace 按 Executor 类型创建工作区;SSH 工作区首次使用时才连接,用完由调用方关闭。
func ResolveWorkspaceDirectory ¶
func ResolveWorkspaceDirectory(ctx context.Context, executors []*defs.ExecutorDefinition, executorID, directory, baseDirectory string) (string, error)
ResolveWorkspaceDirectory 解析 Executor 所在机器上的工作区目录。
Types ¶
type ClientMCPServer ¶
type ClientMCPServer struct {
// ID 是这个 MCP server 的 ID,工具名里也用它。
ID string
// Transport 把请求转发给客户端那边的 MCP server。
Transport mcp.Transport
}
ClientMCPServer 是客户端登记的一个 MCP server;客户端 MCP 一律是弱依赖,超时取 mcpclient 的默认值。
type Conversation ¶
type Conversation interface {
// GetID 返回对话 ID。
GetID() defs.ConversationID
// GetRootSessionID 返回根 Session ID。
GetRootSessionID() defs.SessionID
// GetSkills 返回根 Agent 可用的 Skill 信息。
GetSkills() []skill.SkillInfo
// GetMCPServers 按执行环境顺序返回各 MCP 连接的当前状态,客户端登记的排在最后;还在连接的也直接列出。
GetMCPServers() []MCPServerInfo
// Run 启动执行环境和根 Session,串行处理换配置和客户端 MCP 登记,等 Session、连接和工作区全部停止后关闭 events;只能调用一次。
// events 为 nil 时不发事件,否则调用方要一直读到它关闭;返回根 Session 的错误或停止原因,调用时 ctx 已取消则只做清理并返回 ctx.Err()。
Run(ctx context.Context, events chan<- ConversationEvent) error
// HandleInput 向根 Session 提交输入并返回 ItemID,执行结果看 Turn 结束事件;先等根 Session 首次启动,对话已停止或正在换配置时返回错误。
HandleInput(ctx context.Context, input *ConversationInput) (defs.ItemID, error)
// InterruptTurn 请求取消根 Session 的活动 Turn,返回它的 ID,不等取消完成;先等根 Session 首次启动,根 Session 没在运行或空闲时返回空。
InterruptTurn(ctx context.Context) (defs.TurnID, error)
// SteerInput 将根 Session 的排队用户输入移入指定轮。
SteerInput(ctx context.Context, itemID defs.ItemID, turnID defs.TurnID) error
// InterruptTurnWithInput 将根 Session 的排队用户输入置顶并取消指定轮。
InterruptTurnWithInput(ctx context.Context, turnID defs.TurnID, itemID defs.ItemID) error
// WithdrawInput 取出根 Session 的完整待处理用户输入组。
WithdrawInput(ctx context.Context, itemID defs.ItemID) ([]*defs.Item, error)
// CompactContext 请求根 Session 压缩上下文并返回 TurnID,不等压缩完成;先等根 Session 首次启动,忙时返回 session.ErrSessionBusy,已停止时返回错误。
CompactContext(ctx context.Context) (defs.TurnID, error)
// IsTerminalBusy 运行中的根或子 Session 是否还有未结束的后台命令?
IsTerminalBusy() bool
// ListSessionInfos 按 SessionID 返回全部 Session 的记录、状态、已保存用量和所选模型窗口。
ListSessionInfos(ctx context.Context) ([]SessionInfo, error)
// GetSessionDetails 返回本对话中 Session 的模型、环境、Skill 和工具信息;Session 不属于本对话时返回错误。
GetSessionDetails(ctx context.Context, sessionID defs.SessionID) (SessionDetails, error)
// SetSessionModel 校验并保存模型和推理强度,通知运行中的 Session 从下个 Turn 起使用;已保存但通知失败时仍返回记录和错误。
// 没指定强度时,原强度新模型也支持就保留,否则用新模型的默认强度。
SetSessionModel(ctx context.Context, sessionID defs.SessionID, model defs.ModelSelection) (defs.Session, error)
// GetExecutorSettings 返回当前配置的 Executor 设置,已补上 local 目录。
GetExecutorSettings() defs.ExecutorSettings
// SetExecutorSettings 按新设置装配配置,交给 Run 停掉旧 Session 和执行环境、重启根 Session,返回补上 local 目录的设置;客户端 MCP 登记保留。
// 调用方要先确认没有执行中的 Turn;装配失败时旧配置不变,换上后根 Session 启动失败则停止对话并返回错误。
SetExecutorSettings(ctx context.Context, settings defs.ExecutorSettings) (defs.ExecutorSettings, error)
// SetDefinitions 按新定义和当前设置重新装配并替换配置,校验全部 Session 的 Agent 都在新定义里;临时对话不装配 Executor 和 Skill。
SetDefinitions(ctx context.Context, definitions *ConversationDefinitions) error
// SetClientMCPServers 替换指定客户端登记的全部 MCP server,空列表表示移除;等 Run 换完登记后返回,从下个 Turn 起生效。
// 创建连接失败、对话已停止或调用方取消时返回错误。
SetClientMCPServers(ctx context.Context, clientID string, servers []ClientMCPServer) error
}
Conversation 管理一段对话里的根 Session 和子 Session、子任务结果通知、执行环境、Skill 和客户端登记的 MCP。
func CreateConversation ¶
func CreateConversation(ctx context.Context, rootAgentName string, model defs.ModelSelection, settings, storedSettings defs.ExecutorSettings, opt *ConversationOpt) (Conversation, error)
CreateConversation 装配配置并保存新对话,返回还没启动的对话。
func GetConversation ¶
func GetConversation(ctx context.Context, record defs.Conversation, storedSettings defs.ExecutorSettings, opt *ConversationOpt) (Conversation, error)
GetConversation 按已保存的对话记录读取全部 Session、装配配置,返回还没启动的对话。
type ConversationDefinitions ¶
type ConversationDefinitions struct {
// Agents 是本对话可使用的全部 Agent 定义;每个 Session 按持久化的 AgentName 选择其中一项。
Agents []*agent.AgentDefinition
// Models 是模型目录;各 Agent 的默认模型和摘要模型必须在其中。
Models []*defs.ModelDefinition
// MCPServers 是全部 MCP server 定义;对话只给本对话 Agent 会用到的建连接。
MCPServers []*mcpclient.ServerDefinition
// Hooks 是本对话使用的 hook,nil 表示没有 hook。
Hooks hook.Hooks
// Executors 是全部 Executor 定义,按 local、builtin、配置的顺序;对话按自己的 Executor 设置从中选出可用的建执行环境。
Executors []*defs.ExecutorDefinition
// Skills 是所有对话共用的 skill;和项目目录、主目录里的 skill 同名时,项目目录的优先,其次是这里的,主目录的最后。
Skills []*skill.Skill
}
ConversationDefinitions 保存本对话可用的 Agent、模型、Executor、MCP、hook 和共享 Skill 定义。
type ConversationEvent ¶
type ConversationEvent interface {
// contains filtered or unexported methods
}
ConversationEvent 是 Conversation.Run 发给调用方的事件,覆盖对话内全部 Session。
type ConversationInput ¶
type ConversationInput struct {
// Mode 是提交方式,含义见 session.SessionInputMode。
Mode session.SessionInputMode
// From 是发送方,必须是用户或 Agent。
From *defs.Address
// Content 是消息内容,HandleInput 会复制一份。
Content []*defs.Content
// InputID 可选:根 Session 本次运行期内重复的 InputID 只接收一次。
InputID defs.InputID
}
ConversationInput 是应用交给根 Session 的一次输入。
type ConversationOpt ¶
type ConversationOpt struct {
Query dao.Query
Mutation dao.Mutation
// Definitions 是建对话时的定义;之后由 SetDefinitions 整份替换。
Definitions *ConversationDefinitions
// Environment 是客户端的环境变量(格式同 os.Environ),只给 local 种类的 Executor 执行命令用;
// nil 时继承 serve 进程的环境。它只存在内存里,重新装配时沿用。
Environment []string
// MaxImageBytes 交给每个执行环境的 read_file,必须大于 0。
MaxImageBytes int
// Ephemeral 是否为临时对话?临时对话没有 Executor 和 Skill,换定义时也不装配。
Ephemeral bool
}
ConversationOpt 是对话整个生命周期都不变的依赖,加上建对话时的定义。
type ConversationReconfigured ¶
type ConversationReconfigured struct {
// Models 是新配置的模型目录。
Models map[defs.ModelRef]*defs.ModelDefinition
// AgentDefaultModels 以 Agent 名为键,值是这个 Agent 的默认模型。
AgentDefaultModels map[string]defs.ModelRef
// ExecutorSettings 是新配置的 Executor 设置,已补上 local 目录。
ExecutorSettings defs.ExecutorSettings
}
ConversationReconfigured 由 Conversation 在替换设置或定义、重启根 Session 成功后发出。
type ConversationSessionEvent ¶
type ConversationSessionEvent struct {
SessionID defs.SessionID
Event session.SessionEvent
}
ConversationSessionEvent 由 Conversation 在读取某个 Session 的事件流时逐条转发。
type ConversationSessionStarted ¶
type ConversationSessionStarted struct {
Session defs.Session
// LastSavedOrdinal 是启动前读到的这个 Session 日志的最新序号,之后写入的 Item 都以 SessionItemsSaved 到达。
LastSavedOrdinal storage.Ordinal
}
ConversationSessionStarted 由 Conversation 在启动一个 Session 实例前发出:Run 启动根 Session、换配置后重启根 Session、 spawn_agent 创建子 Session,或向已停止的 Session 投递消息时重启它。同一 Session 的其他事件都在它之后。
type ConversationSessionStopped ¶
type ConversationSessionStopped struct {
SessionID defs.SessionID
// Err 是 Session.Run 的返回值。
Err error
}
ConversationSessionStopped 由 Conversation 在某个 Session.Run 返回、它的事件全部转发之后发出。
type ExecutorDetails ¶
type ExecutorDetails struct {
ID string `json:"id"`
Description string `json:"description,omitempty"`
WorkspaceDirectory string `json:"workspace_directory,omitempty"`
}
ExecutorDetails 是一个 Executor 的展示字段:ID、说明和工作区根目录。
type ForkConversationRequest ¶
type ForkConversationRequest struct {
// Source 是来源对话记录(已保存,可以已归档)。
Source defs.Conversation
// BeforeTurnID 非空时复制到这一轮之前,不含这一轮;回退重来时用。
BeforeTurnID defs.TurnID
// LastTurnID 非空时复制到这一轮,含这一轮。
LastTurnID defs.TurnID
// Model 是新根 Session 的模型;零值时照抄来源根 Session 的模型。
Model defs.ModelSelection
// ExecutorSettings 原样存进新对话。
ExecutorSettings defs.ExecutorSettings
}
ForkConversationRequest 是 ForkConversation 的参数。BeforeTurnID 和 LastTurnID 最多填一个; 都不填时复制第一个还在运行的轮次之前的全部轮次。
type MCPServerInfo ¶
type MCPServerInfo struct {
ExecutorID string `json:"executor_id"`
mcpclient.ConnectionInfo
}
MCPServerInfo 是对话里一个执行环境上的一个 MCP 连接;客户端登记的 ExecutorID 为 defs.ClientExecutorID。
type SendMessageParam ¶
type SendMessageParam struct {
SessionID defs.SessionID `json:"session_id" jsonschema:"description=接收方 SessionID;仅允许自己的后代或直接父方,minLength=1"`
Message string `json:"message" jsonschema:"description=发送给接收方的任务、补充要求或信息,minLength=1"`
Mode session.SessionInputMode `` /* 221-byte string literal not displayed */
// Model 和 ReasoningEffort 只能用于后代;任一非空时先替换接收方的模型选择,再提交输入。
Model string `` /* 202-byte string literal not displayed */
ReasoningEffort string `` /* 194-byte string literal not displayed */
}
SendMessageParam 是 send_message 的模型参数,向后代或直接父方提交一次输入。
type SessionDetails ¶
type SessionDetails struct {
ConversationID defs.ConversationID `json:"conversation_id"`
// Title 由 Runtime 按已保存的对话记录填写,GetSessionDetails 留空。
Title string `json:"title"`
Session defs.Session `json:"session"`
// Model 是 Session 使用的模型定义(不含连接参数);所选模型不在模型目录里时为空。
Model *defs.ModelDefinition `json:"model"`
// CompactModel 是压缩使用的模型,Agent 没有单独配置时与 Model 相同;Model 为空时它也为空。
CompactModel *defs.ModelDefinition `json:"compact_model"`
// Executors 按配置顺序,第一个是默认 Executor。
Executors []ExecutorDetails `json:"executors"`
// Skills 是这个 Agent 可用的 Skill 名。
Skills []string `json:"skills"`
// Tools 是模型可见的工具名,包括协作工具。
Tools []string `json:"tools"`
}
SessionDetails 保存对话里一个 Session 的记录、模型、Executor、Skill 和工具信息。
type SessionHistoryParam ¶
type SessionHistoryParam struct {
SessionID defs.SessionID `json:"session_id" jsonschema:"description=要读取本地执行历史的后代 SessionID,minLength=1"`
Cursor storage.Ordinal `` /* 173-byte string literal not displayed */
Limit int `` /* 143-byte string literal not displayed */
}
SessionHistoryParam 是 read_session_history 的模型参数,从新到旧分页读取后代 fork 之后的历史。
type SessionInfo ¶
type SessionInfo struct {
Session defs.Session `json:"session"`
// Status 是查询时的状态;Session 没在运行时取最近保存的 Turn。
Status session.SessionStatus `json:"status"`
// Usage 是这个 Session 已保存的全部 Turn 的用量之和,不含正在运行的 Turn。
Usage defs.TokenUsage `json:"usage"`
// ContextWindow 是这个 Session 所选模型的上下文窗口,模型不在目录里时为 0。
ContextWindow int `json:"context_window"`
}
SessionInfo 保存一个 Session 的记录、查询时的状态、已保存用量和所选模型窗口。
type SpawnAgentParam ¶
type SpawnAgentParam struct {
TaskName string `json:"task_name" jsonschema:"description=用于识别子任务的简短名称,minLength=1"`
Message string `` /* 166-byte string literal not displayed */
ForkTurns string `` /* 254-byte string literal not displayed */
AgentName string `` /* 146-byte string literal not displayed */
Model string `` /* 219-byte string literal not displayed */
ReasoningEffort string `` /* 161-byte string literal not displayed */
}
SpawnAgentParam 是 spawn_agent 的模型参数,创建一个直接子 Agent 并提交首个任务。
type WaitAgentParam ¶
type WaitAgentParam struct {
TimeoutSeconds int `` /* 281-byte string literal not displayed */
}
WaitAgentParam 是 wait_agent 的模型参数,等待当前 Turn 收到新的补充输入。
type WorkspaceDirectories ¶
type WorkspaceDirectories struct {
Directory string `json:"directory"`
Directories []string `json:"directories"`
}
WorkspaceDirectories 是 Executor 上解析后的目录及其普通直接子目录名称。
func GetWorkspaceDirectories ¶
func GetWorkspaceDirectories(ctx context.Context, executors []*defs.ExecutorDefinition, executorID, directory, baseDirectory string) (directories *WorkspaceDirectories, err error)
GetWorkspaceDirectories 解析并列出 Executor 上一个目录的直接子目录,关闭本次临时工作区。