Documentation
¶
Index ¶
- func GetExecutionOutputText(content json.RawMessage) string
- func GetToolResultText(content json.RawMessage) string
- func GetTurnExecutors(environments []ExecutionEnvironment) []defs.TurnExecutor
- type BaseTool
- type BaseToolOpt
- type ClientMCPServers
- type ExecutionEnvironment
- type ExecutionEnvironmentOpt
- type ExecutionFinishedEvent
- type ExecutionHookRunEvent
- type ExecutionProgressEvent
- type ExecutionStreamType
- type ExecutorEvent
- type Tool
- type ToolExecutionResult
- type ToolExecutor
- type ToolExecutorOpt
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetExecutionOutputText ¶
func GetExecutionOutputText(content json.RawMessage) string
GetExecutionOutputText 提取执行进度的文本。
func GetToolResultText ¶
func GetToolResultText(content json.RawMessage) string
GetToolResultText 提取工具结果的文本。
func GetTurnExecutors ¶
func GetTurnExecutors(environments []ExecutionEnvironment) []defs.TurnExecutor
GetTurnExecutors 按环境顺序返回 Turn 记录所需的 ID 和根目录。
Types ¶
type BaseTool ¶
type BaseTool[T any] struct { // contains filtered or unexported fields }
BaseTool 保存参数结构体 T 生成的工具定义和校验规则。 T 必须是结构体;没有 omitempty 的字段必填,default 只补缺失字段,未声明的顶层参数会被忽略。 多次调用可共享工具定义,每次解析返回独立参数。
func NewBaseTool ¶
func NewBaseTool[T any](opt *BaseToolOpt) (*BaseTool[T], error)
NewBaseTool 根据参数结构体生成工具定义并编译参数校验规则。
func (*BaseTool[T]) GetDefinition ¶
func (t *BaseTool[T]) GetDefinition() *defs.ToolDefinition
GetDefinition 返回工具定义的副本。
func (*BaseTool[T]) ParseArguments ¶
ParseArguments 解析并校验工具参数,返回独立的参数结构体。
type BaseToolOpt ¶
BaseToolOpt 保存工具名称和说明。
type ClientMCPServers ¶
type ClientMCPServers interface {
// SetMCPServers 换掉一条客户端连接登记的 MCP 连接;传空表示移除。只由 Conversation 的 Run 调用,与读取可以并发。
// 两条客户端连接登记同一个 server id 时,先登记的生效;换掉自己的登记不改变它的先后。
SetMCPServers(clientID string, connections []mcpclient.Connection)
// GetMCPTools 返回生效的客户端 MCP 工具,每个绑定自己的连接:没连上的等,最多等各自的启动超时,连不上的跳过并记 Warn。
// 同 id 的 server 被先登记的挡掉时,每次读取记一条 Warn client mcp server skipped。
GetMCPTools(ctx context.Context) ([]Tool, error)
// GetMCPServers 返回生效的客户端 MCP 连接此刻的情况,还没连上的也立刻返回;重复 id 里被跳过的不在其中。
GetMCPServers() []mcpclient.ConnectionInfo
}
ClientMCPServers 是各客户端连接为本对话登记的全部 MCP server:按登记先后选出生效的连接,交出它们的工具; 登记随客户端连接增减,从下一轮起生效。
func NewClientMCPServers ¶
func NewClientMCPServers() ClientMCPServers
NewClientMCPServers 创建空的客户端 MCP 登记列表。
type ExecutionEnvironment ¶
type ExecutionEnvironment interface {
// GetID 返回模型选择执行环境时使用的 ID。
GetID() string
// GetDescription 返回执行环境说明。
GetDescription() string
// GetWorkspace 返回环境的工作区;测试里没有文件系统的环境返回 nil。
GetWorkspace() workspace.Workspace
// GetTools 返回环境共享的内置工具,这些工具不带 Session 状态。
GetTools() []Tool
// GetMCPTools 返回 serverIDs 选中的 MCP 工具,每个绑定自己的连接:没连上的等,最多等启动超时;
// 弱依赖连不上跳过并记 Warn,强依赖连不上返回错误。nil 表示全部,[] 表示不用。
GetMCPTools(ctx context.Context, serverIDs defs.OptionalStringList) ([]Tool, error)
// GetMCPServers 返回各 MCP 连接此刻的情况;还没连上的连接也立刻返回。
GetMCPServers() []mcpclient.ConnectionInfo
// Run 运行各 MCP 连接直到 ctx 结束,全部断开后返回 ctx.Err();某个连接运行出错时返回它的错误,没有 MCP 连接时直接返回 nil。只能调用一次。
Run(ctx context.Context) error
}
ExecutionEnvironment 是对话里供模型选择的一个执行环境,包含工作区、各 Session 共用的无状态工具和它自己的 MCP 连接; 由 Conversation 创建、运行和停止,Session 只借用。系统提示里列出它的 ID 和说明。
func NewExecutionEnvironment ¶
func NewExecutionEnvironment(opt *ExecutionEnvironmentOpt) (ExecutionEnvironment, error)
NewExecutionEnvironment 校验环境配置,并为分给本环境的 MCP server 创建连接。
type ExecutionEnvironmentOpt ¶
type ExecutionEnvironmentOpt struct {
ID string
Description string
Workspace workspace.Workspace
Tools []Tool
// MCPServers 由 Conversation 填入本对话 Agent 会用到的 server;只取 ExecutorIDs 里含本环境 ID 的,
// NewExecutionEnvironment 按本环境的工作区为它们创建连接,Run 之后才开始连。
MCPServers []*mcpclient.ServerDefinition
}
ExecutionEnvironmentOpt 保存环境标识、工作区、内置工具和 MCP server 配置,构造后只读。
func NewExecutionEnvironmentOpt ¶
func NewExecutionEnvironmentOpt(id, description string, environmentWorkspace workspace.Workspace, tools ...Tool) *ExecutionEnvironmentOpt
NewExecutionEnvironmentOpt 保存执行环境标识、说明、工作区和工具。
func (*ExecutionEnvironmentOpt) WithMCPServers ¶
func (o *ExecutionEnvironmentOpt) WithMCPServers(servers []*mcpclient.ServerDefinition) *ExecutionEnvironmentOpt
WithMCPServers 设置 MCP server 列表并返回本配置。
type ExecutionFinishedEvent ¶
type ExecutionFinishedEvent struct {
// Result 是这次调用的最终结果;工具不存在、参数错误、执行失败和取消都写在 Result.Error 里。
// Result.Executor 由 ToolExecutor 填入实际执行环境的 ID;协作工具和客户端 MCP 工具为空。
Result *defs.ToolResult
// AgentsInstructions 是工具这次调用读到的目录规则,每条的 Executor 字段已填为实际执行环境的 ID。
AgentsInstructions []*defs.AgentsInstruction
// HookRuns 是 ToolExecutor 为这次调用触发的 PreToolUse、PostToolUse 要保存的运行记录,Pre 在前、Post 在后;
// 没有触发 hook 或没有命中时为空。
HookRuns []*defs.HookRun
}
ExecutionFinishedEvent 由 ToolExecutor 在一次调用结束、进度转发完毕后发送;每个调用发送一次,被取消也会发送。
type ExecutionHookRunEvent ¶
ExecutionHookRunEvent 由 ToolExecutor 在 PreToolUse、PostToolUse hook 开始和结束时发送,同一个 hook 的运行记录 ID 不变; 总是先于对应调用的 ExecutionFinishedEvent。
type ExecutionProgressEvent ¶
type ExecutionProgressEvent struct {
CallID string `json:"call_id"`
Stream ExecutionStreamType `json:"stream"`
// Content 是合法 JSON;terminal 是 JSON 字符串。
Content json.RawMessage `json:"content"`
}
ExecutionProgressEvent 由工具在 Execute 产生进度或输出时发送;ToolExecutor 转发完这次调用的全部进度后,才发送它的结果。
type ExecutionStreamType ¶
type ExecutionStreamType string
ExecutionStreamType 是一段执行进度的来源。
const ExecutionStreamTypeTerminal ExecutionStreamType = "terminal"
ExecutionStreamTypeTerminal 是命令的输出,stdout、stderr 合在一起,按到达顺序排列。
type ExecutorEvent ¶
type ExecutorEvent interface {
// contains filtered or unexported methods
}
ExecutorEvent 是 ToolExecutor.Run 发给调用方的事件:工具执行进度、hook 运行记录和调用结果;发出后归调用方所有。
type Tool ¶
type Tool interface {
// GetDefinition 返回工具定义的副本。
GetDefinition() *defs.ToolDefinition
// Execute 执行一次调用并返回结果;参数错误、执行失败和取消都写入 ToolResult.Error,返回值非 nil 且 CallID 与调用一致。
// progress 由 ToolExecutor 持有并在 Execute 返回后关闭;工具只发送,不需要进度的工具忽略它。
Execute(ctx context.Context, call *defs.Item, progress chan<- *ExecutionProgressEvent) *ToolExecutionResult
}
Tool 提供工具定义并执行单次调用。
type ToolExecutionResult ¶
type ToolExecutionResult struct {
// Result 是交给模型的工具结果。
Result *defs.ToolResult
// AgentsInstructions 是这次调用读到的目录 AGENTS.md,例如 read_file 读到的文件所在目录的规则。
AgentsInstructions []*defs.AgentsInstruction
}
ToolExecutionResult 是工具一次调用的返回:工具结果和这次调用顺带读到的目录规则。
type ToolExecutor ¶
type ToolExecutor interface {
// GetTools 建出本轮工具表并存下,返回交给模型的工具定义;多个环境提供的工具带 executor 参数。返回内容由调用方持有。
GetTools(ctx context.Context) ([]*defs.ToolDefinition, error)
// Run 并发执行本批调用,按完成顺序发送 *ExecutionProgressEvent、*ExecutionHookRunEvent 与每个调用一次 *ExecutionFinishedEvent,
// 全部结束后关闭 events。调用方读取 events 到关闭;调用 Item 克隆后才交给工具。
Run(ctx context.Context, calls []*defs.Item, events chan<- ExecutorEvent)
}
ToolExecutor 是一个 Session 的工具表:列出本轮工具,按工具名和 executor 参数找到工具对象,跑完 hook 后执行。
func NewToolExecutor ¶
func NewToolExecutor(opt *ToolExecutorOpt) (ToolExecutor, error)
NewToolExecutor 校验配置并创建 Session 的工具执行器。
type ToolExecutorOpt ¶
type ToolExecutorOpt struct {
// Environments 是能用的执行环境,第一个是默认环境;由 Conversation 持有,ToolExecutor 只借用。
Environments []ExecutionEnvironment
// SessionTools 是本 Session 为各环境构造的工具,键是环境 ID;和环境自带的工具一样参与 ToolNames 过滤、executor 参数和 hook。
SessionTools map[string][]Tool
// AgentTools 是协作工具,不带 executor 参数,不受 ToolNames 过滤。
AgentTools []Tool
// ClientMCPServers 提供客户端登记的 MCP 工具;nil 表示没有。只在 MCPServerIDs 为 nil 时使用,与其他工具重名时让位。
ClientMCPServers ClientMCPServers
// ToolNames 是内置工具和 Session 工具的可用名单;为空时全部可用。MCP 工具不受它过滤。
ToolNames []string
// MCPServerIDs 是可用的 MCP server;nil 表示全部,[] 表示不用。
MCPServerIDs defs.OptionalStringList
// Hooks 触发 PreToolUse、PostToolUse;nil 表示没有。没有环境时不触发。
Hooks hook.Hooks
// Session 是调用所在的 Session,随 hook 事件交给脚本。
Session defs.Session
}
ToolExecutorOpt 保存环境、工具筛选条件、客户端 MCP 和 hook 配置,构造后只读。
func NewToolExecutorOpt ¶
func NewToolExecutorOpt(environments []ExecutionEnvironment, agentTools ...Tool) *ToolExecutorOpt
NewToolExecutorOpt 保存可用环境和协作工具。