agent

package
v1.10.0 Latest Latest
Warning

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

Go to latest
Published: Aug 30, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultMaxConcurrentSpawns spawn 并发 semaphore 默认上限(对齐 codex)。
	DefaultMaxConcurrentSpawns = 4
	// DefaultSpawnTimeout spawn watchdog 默认超时。
	DefaultSpawnTimeout = 3 * time.Minute
)

spawn 默认值常量(S3,subagent-s3s4 §3.2)。

View Source
const (
	// DelegateReturnModeEnvelope 返回 *DelegateResult 信封(S1 起的默认行为)。
	DelegateReturnModeEnvelope = "envelope"
	// DelegateReturnModeString 返回裸字符串 result.Output(S1 之前的兼容行为)。
	DelegateReturnModeString = "string"
)

DelegateReturnMode 合法值(设计 §14 遗留点 1,P2.2)。

View Source
const (
	DelegateStatusCompleted = "completed"
	DelegateStatusError     = "error"
	DelegateStatusTimeout   = "timeout"
	DelegateStatusCancelled = "cancelled"
)

信封状态常量。

View Source
const DefaultDelegateTruncatedRunes = 2000

信封截断上限默认值(≈1000 tokens,对齐 codex COMPLETION_MESSAGE_MAX_TOKENS=1000)。

View Source
const DefaultMailboxCap = 64

DefaultMailboxCap mailbox 容量默认值(对齐 codex 会话线程上限量级)。

View Source
const DefaultWaitAgentTimeout = 30 * time.Second

DefaultWaitAgentTimeout wait_agent 默认阻塞等待上限。 评审 BLOCKER-3:默认 engine ToolExecutionTimeout=60s。wait 内部有效上限必须 < engine 工具超时,否则 engine 的 ctx 先 cancel,父代理拿到 tool error 而非 {timed_out:true}。 这里默认 30s < 60s;factory 注册时另配 ToolTimeouts["wait_agent"] 抬高 engine 外壳 (见 subagent-s3s4 评审 §3 BLOCKER-3 修法)。

View Source
const SubagentSystemGuidelines = `` /* 576-byte string literal not displayed */
View Source
const WaitAgentToolShellTimeout = 200 * time.Second

WaitAgentToolShellTimeout factory 为 wait_agent 配的 engine 工具外壳超时。 必须 > DefaultWaitAgentTimeout(30s),保证 wait 内部先超时返回 {timed_out:true} 信封,engine 的 select 收到 result 通道而非 EC_TOOL_EXECUTION_TIMEOUT。

Variables

This section is empty.

Functions

func DefaultAgents

func DefaultAgents() map[string]*Info

func DelegateReturnModeOrDefault added in v1.10.0

func DelegateReturnModeOrDefault(mode string) string

DelegateReturnModeOrDefault 解析 DelegateReturnMode 配置,空串/非法值回退 envelope (防御:旧配置没有该字段,或手写 YAML 拼错时保持 S1 行为不炸)。

func IsMailboxFullError added in v1.10.0

func IsMailboxFullError(err error) bool

IsMailboxFullError 供 notifier 判断降级路径。

func WithParentMemory added in v1.8.11

func WithParentMemory(ctx context.Context, p *ParentMemoryContext) context.Context

Types

type AgentConfig

type AgentConfig struct {
	Name        string                 `json:"name,omitempty"`
	Description string                 `json:"description,omitempty"`
	Mode        Mode                   `json:"mode,omitempty"`
	Native      bool                   `json:"native,omitempty"`
	Hidden      bool                   `json:"hidden,omitempty"`
	TopP        *float64               `json:"top_p,omitempty"`
	Temperature *float64               `json:"temperature,omitempty"`
	Color       string                 `json:"color,omitempty"`
	Model       string                 `json:"model,omitempty"`
	Variant     string                 `json:"variant,omitempty"`
	Prompt      string                 `json:"prompt,omitempty"`
	Options     map[string]interface{} `json:"options,omitempty"`
	Steps       *int                   `json:"steps,omitempty"`
	Permission  map[string]interface{} `json:"permission,omitempty"`
	Disable     bool                   `json:"disable,omitempty"`
}

type AgentPath added in v1.10.0

type AgentPath string

AgentPath 子代理在委派树中的路径(docs/design/subagent.md §3.3 铺路)。 本轮只做一层:"/root"(根)| "/root/<agent>"(子代理)。多级路径留给 roadmap list_agents / depth limit。

func RootAgentPath added in v1.10.0

func RootAgentPath() AgentPath

RootAgentPath 返回根代理路径。

func (AgentPath) Join added in v1.10.0

func (p AgentPath) Join(child string) AgentPath

Join 追加一个子代理名形成子路径("/root" + "general" -> "/root/general")。

func (AgentPath) Parent added in v1.10.0

func (p AgentPath) Parent() (AgentPath, bool)

Parent 返回父路径。根路径无父,返回 ok=false。

func (AgentPath) String added in v1.10.0

func (p AgentPath) String() string

String 返回路径字符串。

type CompletionNotifier added in v1.10.0

type CompletionNotifier struct {
	// contains filtered or unexported fields
}

CompletionNotifier 子代理完成 → 回发父代理(S3,subagent-s3s4 §6)。

评审 BLOCKER-1 修正:`dino/agent` **不 import 根 `dino` 包**(根包 import 本包), 因此不持 `*dino.Bus`。改为:

  • getMailbox:按父 session 取 mailbox(mailbox.Put = 模型可见投递);
  • publish:factory 注入的 `func(eventType, sessionID string, data interface{})` 回调(signature 与 `dino.Bus.Publish` 完全一致,factory 用闭包接上即可)。

职责:Spawn 后台 goroutine 完成后调用 Notify,干两件事(均不得阻塞):

  1. mailbox.Put(wait_agent / S4 唤醒消费);cap 满降级为只发事件(§12 风险 3)。
  2. 旁路事件 "subagent.completed"(UI/审计;publish 为 nil 或 NotifyCompletion=false 跳过)。

func NewCompletionNotifier added in v1.10.0

func NewCompletionNotifier(getMailbox func(string) *Mailbox, publish func(eventType string, sessionID string, data interface{}), enabled bool) *CompletionNotifier

NewCompletionNotifier 构造 notifier。publish 为 nil 或 !enabled 时不发事件 (OPTIONAL-1:NotifyCompletion=false → notifier 直接跳过,不 Put 不发事件)。

func (*CompletionNotifier) Notify added in v1.10.0

func (n *CompletionNotifier) Notify(parentSessionID, taskID string, env *DelegateResult)

Notify 在子代理 goroutine 内调用(不得阻塞)。 mailbox.Put 失败仅降级为事件 + 日志;事件载荷是完整 *DelegateResult(不进 LLM 上下文)。

type Config

type Config struct {
	Agents map[string]*AgentConfig `json:"agents,omitempty"`
}

type DelegateResult added in v1.10.0

type DelegateResult struct {
	// Agent 子代理名(如 "general")。
	Agent string `json:"agent"`
	// TaskID 每次委派生成的 run id(uuid)。B 阶段可复用 task_id 挂接既有 run。
	TaskID string `json:"task_id"`
	// Status 终态:"completed" | "error" | "timeout" | "cancelled"。
	Status string `json:"status"`
	// Output 子代理最终文本输出(裸字符串语义保留,向后兼容)。
	Output string `json:"output,omitempty"`
	// FilesChanged 子代理报告改动/涉猎的文件路径(程序化 tool_event 采集 + prompt 引导)。
	FilesChanged []string `json:"files_changed,omitempty"`
	// Error 失败时的错误摘要(截断)。
	Error string `json:"error,omitempty"`
	// DurationMS 墙钟耗时 ms(含队列等待)。
	DurationMS int64 `json:"duration_ms"`
	// Iterations 实际迭代数。
	Iterations int `json:"iterations"`
	// Usage 子代理本次 token 用量。
	Usage types.Usage `json:"usage"`
	// TimestampMS 完成时刻 unix 毫秒。
	TimestampMS int64 `json:"timestamp_ms"`
	// AgentPath 子代理在委派树中的路径(/root/<agent>,S3 铺路,subagent-s3s4 §9)。
	AgentPath string `json:"agent_path,omitempty"`
	// ParentPath 父代理路径(委派发起方,S3 铺路)。
	ParentPath string `json:"parent_path,omitempty"`
}

子代理结构化结果信封(设计 docs/design/subagent.md §3.1,方案 A)。

DelegateResult 是 delegate_to_agent 的返回信封,同时是完成通知推送给父代理的载荷。 兼容策略:Output 保留子代理最终文本输出(即旧 Result.Output 语义),父代理现有消费方 不破坏;工具返回值经 FormatToolResult 自动 JSON 序列化注入观察。

字段类型统一(评审 R2):时间一律 unix 毫秒 int64,避免 time.Time 与 int64 混排 增加模型解析负担;可选字段用 omitempty,零值不出现在 JSON 里。

func DelegateResultFromResult added in v1.10.0

func DelegateResultFromResult(agentName string, result *Result, err error) *DelegateResult

DelegateResultFromResult 把子代理执行结果折叠进信封(成功路径)。err 非 nil 时返回 Status=="error" 的错误态信封(评审 R1:错误路径折叠,让错误态在 A 阶段对模型可见)。

func NewErrorDelegateResult added in v1.10.0

func NewErrorDelegateResult(agentName string, err error) *DelegateResult

NewErrorDelegateResult 构造纯错误态信封(无 Result,如 manager 取子代理失败)。

func (*DelegateResult) Truncated added in v1.10.0

func (r *DelegateResult) Truncated(maxRunes int) string

Truncated 返回给父代理 LLM 的紧凑文本视图(对齐 codex session_prefix.rs 完成消息格式)。 maxRunes<=0 时用 DefaultDelegateTruncatedRunes(2000 runes ≈ 1000 tokens)。 错误态附回退文案(复用 codex 原文,符合其回退意图)。

type Factory

type Factory interface {
	GetAgent(name string) (*Info, bool)
	GetLLMProvider() types.LLMProvider
	GetTools() []types.Tool
}

type FileAttachment

type FileAttachment struct {
	Path    string
	Name    string
	Content []byte
}

type Info

type Info struct {
	Name        string                 `json:"name"`
	Description string                 `json:"description,omitempty"`
	Mode        Mode                   `json:"mode"`
	Native      bool                   `json:"native,omitempty"`
	Hidden      bool                   `json:"hidden,omitempty"`
	TopP        *float64               `json:"top_p,omitempty"`
	Temperature *float64               `json:"temperature,omitempty"`
	Color       string                 `json:"color,omitempty"`
	Permission  permission.Ruleset     `json:"permission"`
	Model       *ModelInfo             `json:"model,omitempty"`
	Variant     string                 `json:"variant,omitempty"`
	Prompt      string                 `json:"prompt,omitempty"`
	Options     map[string]interface{} `json:"options,omitempty"`
	Steps       *int                   `json:"steps,omitempty"`
}

type Mailbox added in v1.10.0

type Mailbox struct {
	// contains filtered or unexported fields
}

Mailbox 承载"子代理 → 父代理"的完成通知(模型可见投递,非 eventbus 旁路)。 设计 docs/design/subagent-s3s4.md §4。评审修正:

  • 独立可注入组件,每 session 一个实例,不挂 SubagentManager(评审 R5)。
  • 键 = task_id,wait_agent 用 task_id 精确取回;session 隔离靠实例隔离 + Drop 兜底。
  • 一把锁串起 Put/Peek/Drain/SubscribeOnce,杜绝 "Put 与订阅" 竞态窗口(评审 §5.3)。

消费仲裁(评审 BLOCKER 2):wait_agent 是 Drain(taskID) 的**唯一**消费者(turn 内阻塞 订阅);SubscribeAll(B2 唤醒适配器)只做"有消息"通知、不取走消息,由 session 端在 onSubagentCompletion 里 DrainAll。这样两个消费方永不竞争同一条目。

func NewMailbox added in v1.10.0

func NewMailbox(cap int, ttl time.Duration) *Mailbox

NewMailbox 构造 mailbox。cap<=0 用 DefaultMailboxCap;ttl<=0 表示不启用过期。

func (*Mailbox) Drain added in v1.10.0

func (mb *Mailbox) Drain(taskID string) *DelegateResult

Drain 读取并删除(wait_agent 唯一消费入口)。

func (*Mailbox) DrainAll added in v1.10.0

func (mb *Mailbox) DrainAll() []*DelegateResult

DrainAll 取走全部未读(B2 session 端在 onSubagentCompletion 用)。 返回按到达序(seq 序)排序的结果。不触发订阅者(消费方已在通知回调外)。

func (*Mailbox) Drop added in v1.10.0

func (mb *Mailbox) Drop()

Drop session 关闭回收:清空消息与订阅,幂等。

func (*Mailbox) Len added in v1.10.0

func (mb *Mailbox) Len() int

Len 未读条目数(含过期清理)。

func (*Mailbox) Peek added in v1.10.0

func (mb *Mailbox) Peek(taskID string) *DelegateResult

Peek 只读,不删除。wait_agent 首次快速检查用。

func (*Mailbox) Put added in v1.10.0

func (mb *Mailbox) Put(taskID string, r *DelegateResult) error

Put 存入一条完成记录。cap 满时返回 error(notifier 降级为只发事件)。 同一 taskID 重复 Put 视为更新(覆盖旧记录),不触发 cap 增长。 触发该 taskID 的 wait_agent 订阅者与全局订阅者;所有回调在锁内同步触发, 回调实现必须非阻塞(select+drop 或只做信号),否则会阻塞 Put 调用方。

func (*Mailbox) SubscribeAll added in v1.10.0

func (mb *Mailbox) SubscribeAll(done func()) string

SubscribeAll 注册全局订阅(B2 唤醒适配器用):任意 Put 都触发。 回调只做"有消息"通知(如 select+default 往 channel 写),不取走消息。 返回订阅 id(供 UnsubscribeAll)。

func (*Mailbox) SubscribeOnce added in v1.10.0

func (mb *Mailbox) SubscribeOnce(taskID string, done func()) string

SubscribeOnce 注册一次性的 per-task 订阅(wait_agent 阻塞用)。 若消息已存在则立即触发 done 并不注册(消除 "Drain 与订阅之间 Put 到达" 竞态)。 返回订阅 id(供 Unsubscribe);消息已存在时返回 ""。 done 回调在 Put 锁内同步触发,必须非阻塞。

func (*Mailbox) Unsubscribe added in v1.10.0

func (mb *Mailbox) Unsubscribe(taskID, id string)

Unsubscribe 反注册 per-task 订阅(wait_agent 结束/超时时清理)。

func (*Mailbox) UnsubscribeAll added in v1.10.0

func (mb *Mailbox) UnsubscribeAll(id string)

UnsubscribeAll 反注册全局订阅。

type MailboxEntry added in v1.10.0

type MailboxEntry struct {
	Result      *DelegateResult
	CreatedAtMS int64
	ExpireAtMS  int64 // 0 = 不失效
	// contains filtered or unexported fields
}

MailboxEntry 单条完成记录(含元数据,供 Drop/TTL 诊断)。

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

func NewManager

func NewManager(factory Factory, maxHistoryMessages int) *Manager

func (*Manager) Close

func (m *Manager) Close()

func (*Manager) CloseAgent

func (m *Manager) CloseAgent(name string)

func (*Manager) Execute

func (m *Manager) Execute(ctx context.Context, req *Request) (*Result, error)

func (*Manager) GetSubagent

func (m *Manager) GetSubagent(name string) (Subagent, error)

func (*Manager) SetParentRuleset added in v1.10.0

func (m *Manager) SetParentRuleset(rs permission.Ruleset)

SetParentRuleset 注入父代理权限约束(restrict-only,P2.4)。 之后 GetSubagent 构造的子代理工具按「子权限 ∩ 父权限」过滤。

type Mode

type Mode string
const (
	ModeSubagent Mode = "subagent"
	ModePrimary  Mode = "primary"
	ModeAll      Mode = "all"
)

type ModelInfo

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

type ParentMemoryContext added in v1.8.11

type ParentMemoryContext struct {
	SessionID string
	Memory    types.MemoryProvider
}

func ParentMemoryFromContext added in v1.8.11

func ParentMemoryFromContext(ctx context.Context) *ParentMemoryContext

type Request

type Request struct {
	AgentName string
	Prompt    string
	Input     string
	Files     []FileAttachment
}

type Result

type Result struct {
	Output string
	Error  error
	Usage  types.Usage

	// —— 结构化字段(设计 docs/design/subagent.md §6.1,方案 A)——
	// Status 终态:"completed" | "error" | "timeout" | "cancelled"。
	Status string
	// Duration 墙钟耗时(含队列等待)。
	Duration time.Duration
	// Iterations 实际迭代数。
	Iterations int
	// FilesChanged 子代理涉猎/改动的文件路径(tool_event 采集 + prompt 引导)。
	FilesChanged []string
}

type SpawnAgentTool added in v1.10.0

type SpawnAgentTool struct {
	// contains filtered or unexported fields
}

SpawnAgentTool fire-and-forget 派生子代理(subagent-s3s4 §3.2)。

func NewSpawnAgentTool added in v1.10.0

func NewSpawnAgentTool(manager *SubagentManager, mailbox func() *Mailbox, path func() AgentPath, sessionID func() string) *SpawnAgentTool

NewSpawnAgentTool 构造 spawn 工具。mailbox 当前 session 的 mailbox(可为 nil,纯 S3 惰性模式)。

func (*SpawnAgentTool) Description added in v1.10.0

func (t *SpawnAgentTool) Description() string

func (*SpawnAgentTool) Execute added in v1.10.0

func (t *SpawnAgentTool) Execute(ctx context.Context, input map[string]interface{}) (interface{}, error)

Execute 派生并立即返回 {task_id}。max_concurrent_spawns 反映 semaphore 容量。

func (*SpawnAgentTool) Metadata added in v1.10.0

func (t *SpawnAgentTool) Metadata() types.ToolMetadata

func (*SpawnAgentTool) Name added in v1.10.0

func (t *SpawnAgentTool) Name() string

func (*SpawnAgentTool) Schema added in v1.10.0

func (t *SpawnAgentTool) Schema() map[string]interface{}

type SpawnHandle added in v1.10.0

type SpawnHandle struct {
	TaskID    string
	AgentPath AgentPath
	Done      <-chan struct{}
}

SpawnHandle 由 Spawn 立刻返回,后台 goroutine 异步执行。 Done 在完成且已回发(notifier.Notify 返回)后关闭。

type SpawnOptions added in v1.10.0

type SpawnOptions struct {
	TimeoutMS int64  // 覆盖 watchdog(默认 SpawnTimeout / 3min)
	Model     string // 模型覆盖,"" = 继承(S3 仅支持继承,非空时 Spawn 拒绝)
	TaskName  string // 可选 run 名(roadmap list_agents 用)
}

SpawnOptions 覆盖 spawn 默认参数(subagent-s3s4 §5.1)。

type Subagent

type Subagent interface {
	Execute(ctx context.Context, req *Request) (*Result, error)
	Close()
}

func NewSubagent

func NewSubagent(info *Info, llmProvider types.LLMProvider, tools []types.Tool, maxHistoryMessages int) (Subagent, error)

type SubagentConfig

type SubagentConfig struct {
	Enabled              bool `yaml:"enabled"`
	ReplayToParentMemory bool `yaml:"replay_to_parent_memory"`
	MaxHistoryMessages   int  `yaml:"max_history_messages"`

	// —— 结果结构化/完成通知(设计 §5.4,S1 引入;B 阶段字段见 S3)——
	// NotifyCompletion B 阶段:完成是否写 mailbox + 发事件,默认 true。
	NotifyCompletion bool `yaml:"notify_completion"`
	// CompletionMaxRunes 信封截断上限,默认 2000(≈1000 tokens)。
	CompletionMaxRunes int `yaml:"completion_max_runes"`
	// DelegateReturnMode delegate_to_agent 返回形态(设计 §14 遗留点 1,P2.2):
	// "envelope"(默认)返回 *DelegateResult 信封;"string" 返回裸字符串
	// (result.Output,S1 之前的兼容形态)。string 模式下 FilesChanged/Status/Usage
	// 等信息不进工具返回值,是纯兼容开关。非法值/空串回退 envelope。
	DelegateReturnMode string `yaml:"delegate_return_mode"`

	// —— spawn_agent(S3,subagent-s3s4 §3.2/§9)——
	// MaxConcurrentSpawns spawn 并发上限(channel semaphore,默认 4,对齐 codex)。
	MaxConcurrentSpawns int `yaml:"max_concurrent_spawns"`
	// SpawnTimeout spawn watchdog 默认超时(默认 3min)。
	SpawnTimeout time.Duration `yaml:"spawn_timeout"`
	// WakeOnCompletion S4 灰度开关:true 时 mailbox 到达 → 父代理自动开新 turn
	// 消费(B2 唤醒)。默认 false(评审 RECOMMENDED-1:唯一动调度的功能默认关)。
	WakeOnCompletion bool `yaml:"wake_on_completion"`
}

type SubagentManager

type SubagentManager struct {
	// contains filtered or unexported fields
}

func NewSubagentManager

func NewSubagentManager(config *SubagentConfig, factory SubagentManagerFactory) *SubagentManager

func (*SubagentManager) Close

func (sm *SubagentManager) Close()

func (*SubagentManager) CloseSession added in v1.10.0

func (sm *SubagentManager) CloseSession(sessionID string)

CloseSession 释放指定 session 派生的所有子代理 cancel(评审 B2 BLOCKER)。 dino factory 的 CloseSession 必须调用它(见 dino/factory.go 接线),否则 spawn 的子代理 goroutine 会脱离父 session 生命周期、只能靠 watchdog 收尸。 S1 阶段无 spawn(delegate 仍同步执行),此处只有分桶/释放接口,S3 落地填充。

func (*SubagentManager) Execute

func (sm *SubagentManager) Execute(ctx context.Context, agentName, input string) (*Result, error)

func (*SubagentManager) ExecuteWithSession added in v1.10.0

func (sm *SubagentManager) ExecuteWithSession(ctx context.Context, sessionID, agentName, input string) (*Result, error)

ExecuteWithSession 在 Execute 基础上带 sessionID(context-trace,评审 B3): 给子代理注入该 session 的 tracer,使子代理事件落父 session 的 trace。

func (*SubagentManager) SetMaxConcurrentSpawns added in v1.10.0

func (sm *SubagentManager) SetMaxConcurrentSpawns(n int)

SetMaxConcurrentSpawns 配置 spawn 并发上限(factory 接线用)。

func (*SubagentManager) SetNotifier added in v1.10.0

func (sm *SubagentManager) SetNotifier(n *CompletionNotifier)

SetNotifier 注入完成通知器(factory 接线用)。

func (*SubagentManager) SetSessionTracer added in v1.10.0

func (sm *SubagentManager) SetSessionTracer(sessionID string, t hooks.Tracer)

SetSessionTracer 记录某 session 的 trace 句柄(context-trace,评审 B3)。 Execute/Spawn 时给子代理注入 tracer,使子代理事件落父 session 的 trace。

func (*SubagentManager) Spawn added in v1.10.0

func (sm *SubagentManager) Spawn(
	ctx context.Context,
	parentSessionID string,
	req *Request,
	parent AgentPath,
	mailbox *Mailbox,
	opts SpawnOptions,
) (*SpawnHandle, error)

Spawn 发起 fire-and-forget 子代理(subagent-s3s4 §5.1)。 ctx 为父 turn ctx(取消传播):父 ctx cancel → 子代理 ctx 取消。 后台 goroutine 执行 subagent.Execute,完成后经 notifier 回发 mailbox + 事件, 再 close(Done)(保证 Done 语义 = "已完成且已回发")。

type SubagentManagerFactory

type SubagentManagerFactory interface {
	GetLLMProvider() types.LLMProvider
	GetTools() []types.Tool
	GetAgent(name string) (*Info, bool)
	// GetParentRuleset 返回父代理权限约束(restrict-only,P2.4)。
	// 子代理工具按「子权限 ∩ 父权限」过滤,子代理永不比父代理更特权。
	GetParentRuleset() permission.Ruleset
}

type SubagentTool

type SubagentTool struct {
	// contains filtered or unexported fields
}

func NewSubagentTool

func NewSubagentTool(manager *SubagentManager) *SubagentTool

func (*SubagentTool) Description

func (t *SubagentTool) Description() string

func (*SubagentTool) Execute

func (t *SubagentTool) Execute(ctx context.Context, input map[string]interface{}) (interface{}, error)

Execute 按 DelegateReturnMode 分支返回形态(设计 §14 遗留点 1,P2.2):

  • envelope(默认):返回 *DelegateResult 信封(S1 方案 A)。错误路径折叠进信封 (评审 R1):manager.Execute 出错时返回 Status=="error" 的信封 + nil error, 让错误态在 A 阶段对模型可见,而非走 toolObservationError 字符串分支。
  • string:返回裸字符串 result.Output(S1 之前的兼容形态),错误直接透传,不做信封 折叠。FilesChanged/Status/Usage 等信息在该模式下不进工具返回值——纯兼容开关。

func (*SubagentTool) Metadata

func (t *SubagentTool) Metadata() types.ToolMetadata

func (*SubagentTool) Name

func (t *SubagentTool) Name() string

func (*SubagentTool) Schema

func (t *SubagentTool) Schema() map[string]interface{}

func (*SubagentTool) WithSessionID added in v1.10.0

func (t *SubagentTool) WithSessionID(sessionID string) *SubagentTool

WithSessionID 注入父 session ID(context-trace,评审 B3)。

type WaitAgentTool added in v1.10.0

type WaitAgentTool struct {
	// contains filtered or unexported fields
}

WaitAgentTool 阻塞订阅 mailbox 取回 spawn 结果(subagent-s3s4 §3.3/§5.2)。

func NewWaitAgentTool added in v1.10.0

func NewWaitAgentTool(manager *SubagentManager, mailbox func() *Mailbox, defaultTimeout time.Duration) *WaitAgentTool

NewWaitAgentTool 构造 wait 工具。defaultTimeout 工具内部等待上限; 注意:必须 < engine 对该工具的 ToolTimeouts 值(评审 BLOCKER-3),factory 注册时配。

func (*WaitAgentTool) Description added in v1.10.0

func (t *WaitAgentTool) Description() string

func (*WaitAgentTool) Execute added in v1.10.0

func (t *WaitAgentTool) Execute(ctx context.Context, input map[string]interface{}) (interface{}, error)

Execute 阻塞订阅 mailbox,返回 {task_id, completed, timed_out, message}。 message 直接是 DelegateResult.Truncated() 截断文本(父代理即可消费)。

评审 BLOCKER-3 交互:defaultTimeout(默认 30s)< engine ToolTimeouts["wait_agent"] (factory 配 200s)< engine ToolExecutionTimeout(60s 兜底)。wait 内部先超时返回 {timed_out:true} 信封(nil error),engine 的 select 先收到 result 通道 → 不触发 EC_TOOL_EXECUTION_TIMEOUT。ctx.Done 分支兜底 engine 外壳若被配得更短。

func (*WaitAgentTool) Metadata added in v1.10.0

func (t *WaitAgentTool) Metadata() types.ToolMetadata

func (*WaitAgentTool) Name added in v1.10.0

func (t *WaitAgentTool) Name() string

func (*WaitAgentTool) Schema added in v1.10.0

func (t *WaitAgentTool) Schema() map[string]interface{}

Jump to

Keyboard shortcuts

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