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

executor

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: 21 Imported by: 0

Documentation

Index

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

func (t *BaseTool[T]) ParseArguments(input string) (*T, error)

ParseArguments 解析并校验工具参数,返回独立的参数结构体。

type BaseToolOpt

type BaseToolOpt struct {
	Name        string
	Description string
}

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

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

type ExecutionHookRunEvent struct {
	Run *defs.HookRun
}

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 保存可用环境和协作工具。

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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