config

package
v0.0.0-...-1c978d5 Latest Latest
Warning

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

Go to latest
Published: Jul 17, 2026 License: Apache-2.0 Imports: 37 Imported by: 0

Documentation

Overview

agent.go:AgentConfig → agent.Agent 的装配(单文件 Build 与多文件 BuildApp 共用),含模型/存储/召回的解析辅助。

app.go 实现配置的多文件形态:按所有权切分为三层文件——

app.yaml               应用级(部署拥有):进程级资源 + 接线板,业务含量为零
agents/<name>.yaml     agent 维度(产品面拥有):模型/记忆/预算/审批 + namespace 关联
namespaces/<name>.yaml namespace 维度(域团队拥有):tools/components/skills

约定:文件名即名字(显式 name 必须一致);相对路径相对引用它的文件 解析;agent 关联 namespace 即自动挂载其全部导出 skill。

装配语义:namespace 是库,agent 挂载时按解析出的执行画像实例化一份 (源连接按 namespace 文件缓存共享,components/skills 装配按 agent 实例化);跨 namespace 的 cap://skill 引用在同一 agent 挂载的集合内 按关联顺序解析。

执行画像 A 类(model/loop/reliability/digest/step_defaults)五级就近降级 (高→低,见 profile.go):

agent给该ns指定(per-mount) → component → namespace → agent自己 → app

model 特例:能力不可自指,ns/component 不参与,链退化为 per-mount → agent自己 → app。会话状态(session/memory/todo)与治理边界(approval/ budget/structured_output)是 B/C 类:app→agent 整块降级,不下沉 component ——那是 agent/部署持有的安全边界,库不能给自己放权。

Package config 提供整个应用的声明式定义与总装:凭证、提示词源、能力源、 skill、agent、serving、IM 通道,一份 YAML 全部描述,Build 组装为可运行 的 App。代码组织:schema.go 收口配置模型;config.go 单文件 Load/Build; agent.go agent 装配;app.go 多文件 LoadApp/BuildApp;namespace.go ns 装配。

exec.go:app 级脚本执行沙箱策略。default_sandbox 让所有 exec 能力 (exectool 声明的、skillpack 自动生成的)不显式配就走同一沙箱; require_sandbox 禁止回落到宿主直跑。默认经装配层解析后注入进各 exec source 的 conf(不是 exec 包全局单例,守 DI 原则)。

hubs.go:技能装配的按名解析环境(eino AgentHub/ModelHub 的本地等价物)。 skillpack frontmatter 的 `agent:`/`model:` 字段据此解析:agent 注册表在 全部 agent 装配完成后回填(技能装配早于 agent,查找延迟到调用期,名字 合法性用"已声明 agent 名"在装配期校验);具名模型懒构建 + 缓存,Ring 0 包装与其他专属模型同源。

namespace.go 实现命名空间(能力清单文件)的装配:

namespace
├── sources      工具供给源(mcp/http/...),ns 内共享,对外不可见
├── skills       过程卡(内联 prompt+params)或外部 SKILL.md 包,进目录
└── subagents    声明式 sub-agent(同构隔离子循环),进目录

边界规则在装配期落实:工具引用不出命名空间(内联卡的直挂是唯一 显式豁免——主循环亲自执行是该形态的定义);skills/subagents 挂载 即对 agent 可见,跨文件同名在目录冲突检测处报错。

observe.go:可观测性装配。eino 全局回调是进程级切面,"本进程装过什么" 的账本由装配层(本文件)持有——observe 包只出纯构造,不持有状态。 幂等键取配置值本身(logger 身份 / 轨迹 path):同一配置重复装配(多次 Build、副本重启测试)只装一份;不同配置各装一份、各收全量事件(全局 切面的语义即如此,按 app 过滤要走 eino per-invocation callback,另议)。

profile.go 定义统一执行画像(execution profile)与其分层降级合并。

一套 schema、四层可声明:任何执行单元(主 loop 或 component)共用同一组 执行参数(model/loop/reliability/digest/steps),声明在哪层就在哪层生效, 缺失则沿 app → agent → namespace → component 逐级向上降级(就近者胜), 外加 agent 给某 namespace 的 per-mount 指定(最高优)。字段全部可判空 (指针/空串):nil=继承、非 nil=本层生效——才能区分"没配"与"配成零值"。

model 是特例:能力(namespace/component)不能自己指定 model(部署/成本 决策由集成方定),故 namespace/component 的 Profile.Model 必须为 nil, 由 validateNoModel 在装配期强制;可声明 model 的只有 app / agent自己 / per-mount。因 ns/component 贡献 nil,通用 merge 天然得到 model 的三级链。

schema.go 收口全部配置模型定义(YAML 结构):app / agent / namespace / subagent 的声明式 schema 都在这里;各层的“组装”逻辑分见 config.go(单 文件)、app.go(多文件)、agent.go(agent 装配)、namespace.go(ns 装配)。

执行画像(model/loop/reliability/digest)是各层共用的一套 Profile (见 profile.go),各层内嵌;治理边界(approval/budget/structured_output) 与会话状态(session/memory/todo)是 agent 专属、可由 app 设默认。

skillpack.go:外部 skillpack(use: 链接)的装配接线。启动期下载安装 (v1 主路径,见 docs/skillpack-design.md):EnsurePack 物化到 .skills + skills.lock 校验 → LoadManifest → skill.BuildPack → 进目录。 打包期 CLI(sync/verify)延后,核心逻辑已收口在 skill 包与本文件, 届时只需薄壳。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AgentConfig

type AgentConfig struct {
	Name        string `yaml:"name"`
	Description string `yaml:"description"`

	// 执行画像 A 类(model/loop/reliability/digest/steps),agent 自己这一层:
	// 既配主循环,也作为其 component 的降级源。
	Profile `yaml:",inline"`

	Prompt       PromptConfig       `yaml:"prompt"`       // 提示词分层(L1 loop / L2 system)
	Capabilities CapabilitiesConfig `yaml:"capabilities"` // 能力选品 + 内置开关

	// Stores/Retrievers 是具名实例声明(仅定义);模块块的 store/retriever
	// 槽用 cap://store/... · cap://retriever/... 引用它们(见 StoreInstance)。
	Stores     []StoreInstance     `yaml:"stores"`
	Retrievers []RetrieverInstance `yaml:"retrievers"`

	// 会话状态(主循环专属,component 无状态调用没有):
	Session SessionConfig `yaml:"session"`
	Memory  MemoryConfig  `yaml:"memory"`
	Todo    TodoConfig    `yaml:"todo"`

	// 治理边界(Ring 0,agent 独占、不被 namespace 覆盖):审批 + 预算 +
	// 结构化输出,三块各自顶层。
	Approval ApprovalConfig `yaml:"approval"`
	// Delegate 启用动态委派(builtin delegate 工具):模型运行期把子任务
	// 委派给隔离子循环,治理面见 skill.DelegateConfig。缺省关。
	Delegate         skill.DelegateConfig  `yaml:"delegate"`
	Budget           BudgetConfig          `yaml:"budget"`
	StructuredOutput loop.StructuredConfig `yaml:"structured_output"`
}

AgentConfig 声明一个 agent(唯一主循环是 ReAct)。执行画像(model/loop/ reliability/digest/steps)内嵌自 Profile,是主循环设置、兼作其 component 的 通用默认;会话状态(session/memory/todo)是主循环专属;治理边界(approval/ budget/structured_output)是 agent 独占的 Ring 0 安全边界。

type AgentFile

type AgentFile struct {
	AgentConfig `yaml:",inline"`
	// Namespaces 是关联的 namespace 挂载(相对本文件),自动挂载其全部
	// 导出 skill;capabilities.exclude 可屏蔽个别。每个挂载可携带 per-mount
	// 覆盖画像(最高优),兼容裸字符串写法(仅路径),见 NamespaceMount。
	Namespaces []NamespaceMount `yaml:"namespaces"`
}

AgentFile 是 agent 维度的配置文件(agents/<name>.yaml)。

type AgentSpec

type AgentSpec struct {
	AgentFile
	Path   string
	Mounts []Mount
}

AgentSpec 是解析后的 agent 文件及其关联的 namespace 挂载(保序)。

type App

type App struct {
	Agents  map[string]*agent.Agent
	Catalog *source.Catalog
	Prompts *prompt.Resolver
	Server  *serving.Server // serving 未配置时为 nil
	// AgentMounts 是多文件路径下各 agent 的挂载目录(关联 namespaces
	// 导出的 skills),供巡检与调试;单文件路径为 nil。
	AgentMounts map[string]*source.Catalog
}

App 是总装产物。

func Build

func Build(ctx context.Context, cfg *Config, opts BuildOptions) (*App, error)

Build 把声明组装为可运行的 App。装配顺序:观测 → 提示词 → 目录 (sources → skills)→ agents → gateway/channels。

func BuildApp

func BuildApp(ctx context.Context, spec *AppSpec, opts BuildOptions) (*App, error)

BuildApp 把多文件声明组装为可运行的 App。与单文件 Build 的关键差异: namespace 按 agent 实例化(执行参数 override 链得以生效),源连接按 namespace 文件缓存共享,agent 工具面 = 关联 namespace 的全部导出 skill + 全局兼容源的 include 选品。

type AppConfig

type AppConfig struct {
	Secrets SecretsConfig `yaml:"secrets"`

	Prompts PromptsConfig `yaml:"prompts"`

	// Sources 是全局兼容源(直挂 agent 工具面的通用工具,如 fs)。
	Sources []SourceConfig `yaml:"sources"`
	Catalog CatalogConfig  `yaml:"catalog"`

	// 执行画像基线(app 层)。model 取代原 default_model。
	Profile `yaml:",inline"`

	// Stores 是 app 层具名存储实例(全局共享后端,如所有 agent 共用一个
	// redis session 实例);agent 层可再声明私有实例。
	Stores     []StoreInstance     `yaml:"stores"`
	Retrievers []RetrieverInstance `yaml:"retrievers"`

	// DefaultModelLegacy:default_model 已改名 model(执行画像内嵌),
	// 旧键装配期报错指路。
	DefaultModelLegacy *ModelConfig `yaml:"default_model"`

	// 会话状态 / 治理边界的 app 层默认(可选,agent 未声明整块时回落至此)。
	Session          SessionConfig         `yaml:"session"`
	Memory           MemoryConfig          `yaml:"memory"`
	Todo             TodoConfig            `yaml:"todo"`
	Approval         ApprovalConfig        `yaml:"approval"`
	Budget           BudgetConfig          `yaml:"budget"`
	StructuredOutput loop.StructuredConfig `yaml:"structured_output"`

	// Agents 是 agent 文件路径列表,相对 app.yaml 所在目录。
	Agents []string `yaml:"agents"`

	Serving  ServingConfig   `yaml:"serving"`
	Channels []ChannelConfig `yaml:"channels"`
	Suspend  SuspendConfig   `yaml:"suspend"`

	// Skillpacks 是外部技能包策略(全 app 一份,namespace 里的 use: 链接同样生效)。
	Skillpacks SkillpacksConfig `yaml:"skillpacks"`
	// Models 是具名模型(skillpack frontmatter `model:` 按名引用)。
	Models []NamedModelConfig `yaml:"models"`
	Exec   ExecConfig         `yaml:"exec"`

	Observability ObservabilityConfig `yaml:"observability"`

	// StateDir 同单文件 Config.StateDir:可写运行状态目录。
	StateDir string `yaml:"state_dir"`
	// WorkDirLegacy:旧键 work_dir 装配期报错指路 state_dir。
	WorkDirLegacy *string `yaml:"work_dir"`
}

AppConfig 是应用级入口(app.yaml):进程级资源与接线板 + 全局默认。 执行画像(Profile)是所有 agent/component 的基线;会话状态与治理边界的 app 层块为可选默认(agent 未声明整块时回落至此)。

type AppSpec

type AppSpec struct {
	App    AppConfig
	Agents []*AgentSpec
	Root   fs.FS
}

AppSpec 是 LoadApp 的产物:全部文件解析完毕、名字与路径校验通过。 Root 是加载它的只读资源 FS(prompt/skill 等只读子资源从此解析,与配置 同源;见 docs/resource-loading-design.md)。

func LoadApp

func LoadApp(ref string) (*AppSpec, error)

LoadApp 读取多文件形态的应用声明。secrets provider 由 app.yaml 声明, 对全部文件的 ${ENV}/${secret:NAME} 占位符统一生效。

func LoadAppFS

func LoadAppFS(root fs.FS, entry string) (*AppSpec, error)

LoadAppFS 从只读资源 FS 加载多文件声明。entry 是 FS 内的入口路径 (fs.FS 语义:'/' 分隔、无 '..' 逃逸);agent/namespace 的相对引用一律 在这个 FS 内解析,唯一锚点是 FS 根,不依赖进程 CWD。本地盘走 LoadApp(path);内嵌走 LoadAppFS(embed.FS, "config/app.yaml")。

type ApprovalConfig

type ApprovalConfig struct {
	Mode                string           `yaml:"mode"` // interactive(默认) | auto | deny
	loop.ApprovalPolicy `yaml:",inline"` // remember, rules
	Store               string           `yaml:"store"`
	StoreConfig         map[string]any   `yaml:"store_config"`
}

ApprovalConfig 是审批治理模块:模式 + 参数级策略(规则 + 决策记忆); mode 之外的 remember/rules 内联自 loop.ApprovalPolicy。store 槽指定 决策记忆后端(cap://store/approval/<name> 或裸 type):不配留进程内, 配 redis 则"总是允许/拒绝"跨副本生效。

type BudgetConfig

type BudgetConfig struct {
	loop.BudgetConfig `yaml:",inline"` // max_model_calls, max_tokens
	Store             string           `yaml:"store"`
	StoreConfig       map[string]any   `yaml:"store_config"`
}

BudgetConfig 是预算治理模块:上限(内联自 loop.BudgetConfig)+ 账目 后端。store 槽(cap://store/budget/<name> 或裸 type)不配时账目留在 进程内(单副本);配 redis 则同一会话跨副本共用一份账目,预算是真正 的分布式硬上限。

type BuildOptions

type BuildOptions struct {
	// Interactor 是 agent 的默认交互通道(CLI 场景传 interact.NewCLI());
	// IM 通道会在各自会话里覆盖它。
	Interactor runctx.Interactor
	// ExtraCapabilities 是代码侧构造的能力(local.Func、rpctool、子 agent),
	// 以 "local" source 入目录。
	ExtraCapabilities []capability.Capability
	Logger            *slog.Logger
}

BuildOptions 是代码侧的注入点。

type CapabilitiesConfig

type CapabilitiesConfig struct {
	Include []string `yaml:"include"`
	Exclude []string `yaml:"exclude"`
	AskUser *bool    `yaml:"ask_user"` // 内置交互能力(默认开,显式 false 关闭)
	// GoalCheck 开启目标达成核对(U4.1):多步任务收尾前强制一次"对照原始
	// 目标逐条自查"的重生成。**默认关**——真机 A/B 显示强模型 + 中等难度
	// 任务上,强制重生成可能丢内容、净负;价值在弱模型/更难/高风险任务上,
	// 待 eval 定位后再考虑放开默认。显式 true 开启。
	GoalCheck *bool `yaml:"goal_check"`
}

CapabilitiesConfig 是能力选品 + 内置交互能力开关。

type CatalogConfig

type CatalogConfig struct {
	MaxRisk string `yaml:"max_risk"` // 准入上限,默认 mutating(dangerous 不入目录)
}

CatalogConfig 是目录准入配置。

type ChannelConfig

type ChannelConfig struct {
	Name           string `yaml:"name"`
	Type           string `yaml:"type"`
	Agent          string `yaml:"agent"`
	SessionMapping string `yaml:"session_mapping"` // chat | chat_user
	ReplyMode      string `yaml:"reply_mode"`      // text | card | stream(无装饰器时的默认策略)
	// Placeholder 是 processing 占位文案(空 = 内置英文默认「⏳ Working…」)。
	Placeholder string `yaml:"placeholder"`
	// Texts 覆盖面向用户的文案(键 = serving.Texts 字段的 snake_case,如
	// placeholder/stopped/approval;空字段回落英文默认)。IM 部署在此配
	// 本地化文案。
	Texts map[string]string `yaml:"texts"`
	// Decorator/OnProgress 按名引用代码注册的扩展(serving.RegisterDecorator /
	// RegisterProgressHandler),装配期查名 fail fast。
	Decorator  string         `yaml:"decorator"`
	OnProgress string         `yaml:"on_progress"`
	Config     map[string]any `yaml:"config"`
}

ChannelConfig 声明一个 IM 通道绑定。

type Config

type Config struct {
	Secrets SecretsConfig `yaml:"secrets"`

	Prompts PromptsConfig `yaml:"prompts"`

	Sources []SourceConfig `yaml:"sources"`
	Catalog CatalogConfig  `yaml:"catalog"`

	// 执行画像基线(app 层):model 取代原 default_model,reliability/loop/
	// digest/steps 为全体执行单元的降级源。
	Profile `yaml:",inline"`

	// Namespaces 是三层结构的主路径:tools(ns 内共享)→ components
	// (执行单元声明)→ skills(对外产品,唯一进目录的编排单元)。
	Namespaces []NamespaceConfig `yaml:"namespaces"`

	// Skills 是平铺声明的兼容路径,新配置建议用 namespaces。条目二选一:
	// 内部声明(prompt/engine/...)或外部引用(use: 链接,见 SkillEntry)。
	Skills []*SkillEntry `yaml:"skills"`
	Agents []AgentConfig `yaml:"agents"`

	// Skillpacks 是外部技能包策略(物化目录/获取策略/pin 政策)。
	Skillpacks SkillpacksConfig `yaml:"skillpacks"`
	// Models 是具名模型(skillpack frontmatter `model:` 按名引用)。
	Models []NamedModelConfig `yaml:"models"`
	Exec   ExecConfig         `yaml:"exec"`

	Serving  ServingConfig   `yaml:"serving"`
	Channels []ChannelConfig `yaml:"channels"`

	Suspend SuspendConfig `yaml:"suspend"`

	Observability ObservabilityConfig `yaml:"observability"`

	// StateDir 是可写运行状态目录,当前消费方是 skill 安装(skillpacks
	// 物化到 <state_dir>/agent-kit/.skills);file 后端与轨迹路径仍各自
	// 显式配置,尚未收口到这里。只读资源(配置/提示词/skill 包)不走
	// 这里——它们由资源 FS 承载(见 docs/resource-loading-design.md)。
	// 默认链:state_dir → 环境 AGENTKIT_STATE_DIR → $XDG_STATE_HOME/agentkit。
	StateDir string `yaml:"state_dir"`
	// WorkDirLegacy:work_dir 已拆义为只读根(资源 FS)+ 可写状态(state_dir),
	// 旧键装配期报错指路。
	WorkDirLegacy *string `yaml:"work_dir"`
	// DefaultModelLegacy:default_model 已改名 model(执行画像内嵌),
	// 旧键装配期报错指路。
	DefaultModelLegacy *ModelConfig `yaml:"default_model"`
	// contains filtered or unexported fields
}

Config 是应用的完整声明(单文件形态,兼容路径;多文件形态见 LoadApp: app.yaml + 每 agent/namespace 一个文件)。顶层执行画像(model/loop/ reliability/digest/steps)内嵌自 Profile,是所有 agent/component 的基线。

func Load

func Load(ref string) (*Config, error)

Load 读取单文件配置。与 LoadApp 同源经 resource 解析(file/embed/...): os 只出现在 file scheme 解析器与可写状态(state_dir)里,配置读取一律 走资源 FS。先解析 secrets 段构建凭证 provider(该段本身不得含占位符), 再展开 ${ENV} 与 ${secret:NAME},最后解析全文。

type DigestProfile

type DigestProfile struct {
	Over     *int `yaml:"over"`
	Truncate *int `yaml:"truncate"`
	// DegradeKeep 是暂存后端不可用时的应急保留量(rune,缺省 24000):
	// 指针发不出去还只留 truncate 的量 = 不必要的数据损失;完全不截又会
	// 炸上下文窗(生产实测单结果 10 万字符)。中小结果在降级态零损失,
	// 极端长文仍有物理护栏。
	DegradeKeep *int           `yaml:"degrade_keep"`
	Store       string         `yaml:"store"`
	StoreConfig map[string]any `yaml:"store_config"`
}

DigestProfile 是"大工具结果进上下文前的处理":over 触发消化、truncate 硬 截断兜底、store 暂存后端(供 read_result 取回)。

type ExecConfig

type ExecConfig struct {
	// DefaultSandbox 是未显式配 sandbox/command 的 exec 工具的回落沙箱名
	// (需 impl/exec/* 空导入注册,如 docker)。
	DefaultSandbox string `yaml:"default_sandbox"`
	// SandboxConfig 是默认沙箱的构造配置(如 docker 的 image/network/memory)。
	SandboxConfig map[string]any `yaml:"sandbox_config"`
	// RequireSandbox 开启后禁止宿主直跑:无沙箱可用的 exec 工具装配即 fail fast。
	RequireSandbox bool `yaml:"require_sandbox"`
}

ExecConfig 是 app 级脚本执行策略。

type LoopProfile

type LoopProfile struct {
	// MaxSteps 是工具调用的轮数上限(一轮 = 一次模型决策 + 一批工具执行;
	// react 装配时换算为 eino 的节点步数 2N+1,额外的 1 是收尾作答)。
	// 默认 12 轮。yaml 键 max_rounds——名实对齐(内部字段名沿用)。
	MaxSteps *int `yaml:"max_rounds"`
	// MaxStepsLegacy 已废弃:max_steps 语义即轮数,改名 max_rounds(报错指路)。
	MaxStepsLegacy *int                   `yaml:"max_steps"`
	Compaction     *loop.CompactionConfig `yaml:"compaction"`
}

LoopProfile 是执行单元的循环控制:迭代上限 + 上下文压缩。compaction 归 loop(而非 session)——它压缩的是"执行单元循环的工作上下文",主 loop 与 component 都有,只有主 loop 额外有 session;归 loop 才能全链降级到 component。

type MemoryConfig

type MemoryConfig struct {
	Store       string         `yaml:"store"`        // cap://store/memory/<name> 或裸 type
	StoreConfig map[string]any `yaml:"store_config"` // 裸 type 时的就地配置
	// ExposeTools 挂载 memory_save/search 工具(长期记忆的读写入口)。
	// 原名 tools 与"工具列表"惯用词冲突,已改名(旧键装配期报错)。
	ExposeTools bool  `yaml:"expose_tools"`
	ToolsLegacy *bool `yaml:"tools"` // 已废弃:改 expose_tools(报错指路)
	// Scope 是多用户隔离的作用域策略:write 对话写入落点(user 默认 |
	// shared | session),read 召回覆盖(缺省 [user, shared])。
	Scope MemoryScope `yaml:"scope"`
	// Recall 是长期记忆的自动召回(L4):top_k>0 启用,检索策略由后端决定。
	Recall struct {
		TopK int `yaml:"top_k"`
	} `yaml:"recall"`
	// Seed 装配期灌入共享池的知识条目(域共享知识的运维写入口)。
	Seed []MemorySeed `yaml:"seed"`
}

MemoryConfig 是长期记忆模块:后端、工具挂载、作用域隔离、召回、seed。

type MemoryScope

type MemoryScope struct {
	Write string   `yaml:"write"`
	Read  []string `yaml:"read"`
}

MemoryScope 是长期记忆作用域。

type MemorySeed

type MemorySeed struct {
	Key   string `yaml:"key"`
	Value string `yaml:"value"`
}

MemorySeed 是共享池 seed 条目。

type ModelConfig

type ModelConfig struct {
	Provider string         `yaml:"provider"`
	Config   map[string]any `yaml:"config"`
}

ModelConfig 声明一个模型。

type Mount

type Mount struct {
	*NamespaceSpec
	Override Profile
}

Mount 是 agent 对一个 namespace 的解析后挂载:namespace 文件 + per-mount 覆盖画像(五级链的最高优)。嵌入 *NamespaceSpec,故 .Name/.Path/ .NamespaceConfig 直接可用。

type NamedModelConfig

type NamedModelConfig struct {
	Name     string         `yaml:"name"`
	Provider string         `yaml:"provider"`
	Config   map[string]any `yaml:"config"`
}

NamedModelConfig 声明一个具名模型(顶层 models: 块),供 skillpack frontmatter `model:` 按名引用。

type NamespaceConfig

type NamespaceConfig struct {
	Name    string `yaml:"name"`
	Profile `yaml:",inline"`
	// Sources 声明能力供给源(与顶层 sources: 同构);"声明源用 sources、
	// 引用工具面用 tools"全库一致。
	Sources []SourceConfig `yaml:"sources"`
	// Tools 已废弃:源声明改用 sources(装配期报错指路)。
	ToolsLegacy []SourceConfig   `yaml:"tools"`
	Skills      []NamespaceSkill `yaml:"skills"`
	// Subagents 是本 namespace 声明的 sub-agent(挂载即对 agent 可见,
	// 与 skills 同一可见性规则)。
	Subagents []SubagentConfig `yaml:"subagents"`

	// ——已随概念收敛移除,误写装配期报错指路——
	ImportsLegacy    []string         `yaml:"imports"`
	ComponentsLegacy []map[string]any `yaml:"components"`
}

NamespaceConfig 是一个配置命名空间的完整声明。执行画像(loop/reliability/ digest/steps;不含 model)内嵌自 Profile——该 ns 下 component 的画像默认, 覆盖 agent、被 component 覆盖。

type NamespaceFile

type NamespaceFile struct {
	NamespaceConfig `yaml:",inline"`
}

NamespaceFile 是 namespace 维度的配置文件(namespaces/<name>.yaml)。 namespace 层可声明执行画像(内嵌自 NamespaceConfig 的 Profile,但不含 model——能力不可自指模型)。

type NamespaceMount

type NamespaceMount struct {
	Path    string `yaml:"path"`
	Profile `yaml:",inline"`
}

NamespaceMount 是 agent 对一个 namespace 的挂载:路径 + per-mount 覆盖画像。 覆盖画像是五级链里的最高优,且只装执行画像 A 类(component 实际拥有的 配置);model 可在此指定(集成方给该 mount 显式选模型)。

YAML 兼容两种写法:裸字符串(仅路径,无覆盖)或映射(path + 覆盖字段):

namespaces:
  - ../namespaces/catalog.yaml                     # 仅路径
  - path: ../namespaces/research.yaml              # 路径 + 覆盖
    model: {provider: openai, config: {...}}
    loop:  {max_rounds: 5}

func (*NamespaceMount) UnmarshalYAML

func (m *NamespaceMount) UnmarshalYAML(node *yaml.Node) error

UnmarshalYAML 接受裸字符串(路径)或映射(路径 + 覆盖画像)。

type NamespaceSkill

type NamespaceSkill struct {
	Name        string                          `yaml:"name"`
	Version     string                          `yaml:"version"`
	Description string                          `yaml:"description"`
	Params      map[string]capability.ParamDecl `yaml:"params"`
	// Prompt 是内联卡的任务书正文(与 from 互斥)。
	Prompt prompt.Value `yaml:"prompt"`
	// Tools:内联卡 = 直挂宿主的工具引用(tools/<source>/<name|*>);
	// from 包 = 在包的 allowed-tools 之上再收紧(交集)。
	Tools []string `yaml:"tools"`
	// From 集成一个外部 SKILL.md 技能包;须显式 name(命名归属团队)。
	From      string `yaml:"from"`
	Integrity string `yaml:"integrity"`
	// Context 是 from 包内部循环的起始上下文(fresh 缺省 | fork)。
	Context string `yaml:"context"`
	// MaxRounds 是 from 技能包内部循环的轮数覆盖(与平铺 SkillEntry 的
	// max_rounds 同义;两条 skillpack 装配路径同一配置面)。
	MaxRounds int `yaml:"max_rounds"`

	// ——已随编排族移除,误写装配期报错指路——
	StepsLegacy        []map[string]any `yaml:"steps"`
	UseLegacy          *string          `yaml:"use"`
	EngineLegacy       *string          `yaml:"engine"`
	OutputLegacy       *string          `yaml:"output"`
	DeliverLegacy      *string          `yaml:"deliver"`
	StepDefaultsLegacy map[string]any   `yaml:"step_defaults"`
}

NamespaceSkill 声明一个 skill(Agent Skills 标准语义),两种形态:

内联卡:name + description + params + prompt——SKILL.md 的配置层
  等价物,主循环照指引亲自执行,tools 直挂宿主工具面;
外部包:from 集成一个 SKILL.md 技能包(github.com/...@ver |
  https://...zip | file:...),隔离子循环执行。

type NamespaceSpec

type NamespaceSpec struct {
	NamespaceFile
	Path string // 资源 FS 内路径('/' 分隔),亦作源连接缓存键
}

NamespaceSpec 是解析后的 namespace 文件。

type ObservabilityConfig

type ObservabilityConfig struct {
	Log            bool   `yaml:"log"`
	TrajectoryPath string `yaml:"trajectory_path"`
}

ObservabilityConfig 是观测配置。

type Profile

type Profile struct {
	Model       *ModelConfig       `yaml:"model"`
	Loop        LoopProfile        `yaml:"loop"`
	Reliability ReliabilityProfile `yaml:"reliability"`
	Digest      DigestProfile      `yaml:"digest"`
	// StepDefaultsLegacy 已随编排族移除(固定流程下沉宿主 eino compose),
	// 误写装配期报错指路。
	StepDefaultsLegacy map[string]any `yaml:"step_defaults"`
}

Profile 是执行画像:app/agent/namespace/component 各内嵌一份(YAML inline), per-mount 覆盖亦是同形 Profile,五级就近合并得 component 生效值。

type PromptConfig

type PromptConfig struct {
	System prompt.Value `yaml:"system"` // L2 业务 persona
	Loop   prompt.Value `yaml:"loop"`   // L1 框架规约覆盖(默认内置)
}

PromptConfig 是提示词分层模块:L1 框架规约 + L2 业务 persona,均支持 标量:字面量或 cap://prompt/ 前缀引用。

type PromptSourceConfig

type PromptSourceConfig struct {
	Name   string         `yaml:"name"`
	Type   string         `yaml:"type"`
	Config map[string]any `yaml:"config"`
}

PromptSourceConfig 声明一个提示词供给源。

type PromptsConfig

type PromptsConfig struct {
	Sources      []PromptSourceConfig `yaml:"sources"`
	DefaultLabel string               `yaml:"default_label"`
}

PromptsConfig 是 app 级提示词供给模块:供给源 + 默认版本标签。

type ReliabilityProfile

type ReliabilityProfile struct {
	ToolTimeout *loop.Duration    `yaml:"tool_timeout"`
	Retry       *loop.RetryConfig `yaml:"retry"`
}

ReliabilityProfile 是执行单元的可靠性:工具单次调用超时 + 模型瞬时错误重试。

type RetrieverInstance

type RetrieverInstance struct {
	Name   string         `yaml:"name"`
	Kind   string         `yaml:"kind"` // session
	Type   string         `yaml:"type"` // bigram | vector | ...
	Config map[string]any `yaml:"config"`
}

RetrieverInstance 是一个具名召回器实例声明;session.recall 用 cap://retriever/<kind>/<name> 引用它。

type SecretsConfig

type SecretsConfig struct {
	Provider string         `yaml:"provider"` // env(默认)| file
	Config   map[string]any `yaml:"config"`
}

SecretsConfig 声明凭证 provider。

type ServingConfig

type ServingConfig struct {
	Addr string `yaml:"addr"`
}

ServingConfig 是 Gateway 配置。

type SessionConfig

type SessionConfig struct {
	Window      int            `yaml:"window"`       // 0 = 不启用会话记忆
	Store       string         `yaml:"store"`        // cap://store/session/<name> 或裸 type(inmemory/file/...)
	StoreConfig map[string]any `yaml:"store_config"` // 裸 type 时的就地配置
	// RecordTools 控制本轮工具轨迹随会话持久化的详略:
	// summary(默认)| full | off。off 退回只存问答(任务连续性受限)。
	RecordTools string `yaml:"record_tools"`
	// Recall 是窗口外会话历史的自动召回(L4):top_k>0 启用,retriever 指定
	// 检索策略(cap://retriever/session/<name> 或裸 type,缺省 bigram 词法)。
	Recall SessionRecall `yaml:"recall"`
}

SessionConfig 是会话短期记忆模块:窗口、后端、轨迹详略、窗外召回。 (上下文压缩 compaction 归执行画像 loop.compaction,主 loop 与 component 共用同一机制,见 LoopProfile。)

type SessionRecall

type SessionRecall struct {
	TopK            int            `yaml:"top_k"`
	Retriever       string         `yaml:"retriever"`
	RetrieverConfig map[string]any `yaml:"retriever_config"`
}

SessionRecall 是窗外会话召回配置。

type SkillEntry

type SkillEntry struct {
	skill.Declaration `yaml:",inline"`
	From              string   `yaml:"from"`      // 外部获取来源:github.com/...@ver | https://...zip | file:...
	Use               string   `yaml:"use"`       // 已废弃:外链改用 from(装配期报错指路)
	Integrity         string   `yaml:"integrity"` // sha256:<hex>,可选强校验
	Tools             []string `yaml:"tools"`     // 白名单收紧(∩ allowed-tools)
	Context           string   `yaml:"context"`   // from 包内部循环:fresh(默认)| fork
	// Model/MaxRounds 是 from 技能包的本地覆盖(内联卡没有内部循环,
	// 声明它们装配期报错)。
	Model     *skill.ModelDecl `yaml:"model"`
	MaxRounds int              `yaml:"max_rounds"`
}

SkillEntry 是 skills: 列表的一个条目:内部声明(内嵌 skill.Declaration) 或外部引用(use: 链接)二选一。外部形态把市面 SKILL.md 技能包一行集成 进来(装配期物化到 .skills,见 skillpack.go),其余字段作本地覆盖: name 覆盖 ns/名字,model/max_steps 沿用内嵌声明的同名字段,tools 在 包的 allowed-tools 之上再收紧(交集),context: fork 以调用方对话快照 起步(与编排步骤同义)。

type SkillpacksConfig

type SkillpacksConfig struct {
	// Dir 覆盖安装目录(相对值以 state_dir 为基准)。默认固定约定:
	// <state_dir>/agent-kit/.skills——agent-kit 是 SDK,落盘产物收口在
	// 宿主项目的 agent-kit/ 命名空间下(对齐 node_modules/.terraform 心智)。
	Dir string `yaml:"dir"`
	// Sync:auto(默认,缺失即下载)| require-local(缺失 fail fast,
	// 为打包期物化预留的收紧档)。
	Sync string `yaml:"sync"`
	// AllowUnpinned 放行未锁定版本的 ref(lock 仍会锁死首次解析结果)。
	AllowUnpinned bool `yaml:"allow_unpinned"`
}

SkillpacksConfig 是 app 级外部技能包策略。

type SourceConfig

type SourceConfig struct {
	Name     string         `yaml:"name"`
	Type     string         `yaml:"type"`
	Required bool           `yaml:"required"`
	Priority int            `yaml:"priority"`
	Config   map[string]any `yaml:"config"`
}

SourceConfig 声明一个能力供给源。

type StoreInstance

type StoreInstance struct {
	Name   string         `yaml:"name"`
	Kind   string         `yaml:"kind"` // session | memory | todo | result | suspend | budget | approval
	Type   string         `yaml:"type"` // inmemory | file | redis | ...(各自后端注册表)
	Config map[string]any `yaml:"config"`
	TTL    loop.Duration  `yaml:"ttl"` // 保留时长(todo/result/approval/budget),0=不过期
}

StoreInstance 是一个具名存储实例声明(app 或 agent 层)。模块块的 store 槽用 cap://store/<kind>/<name> 引用它;换后端=改 type、或声明另一实例把 store 指过去;跨 agent 共享=在 app 层声明一次,各 agent 引用同名实例。

type SubagentConfig

type SubagentConfig struct {
	Name        string                          `yaml:"name"`
	Version     string                          `yaml:"version"`
	Description string                          `yaml:"description"`
	Params      map[string]capability.ParamDecl `yaml:"params"`
	// Prompt 是 persona + 任务书模板,params 以 {name} 占位渲染。
	Prompt prompt.Value `yaml:"prompt"`
	// Tools 是工具面引用:tools/<source>/<name|*>(本 ns 工具)。
	Tools []string `yaml:"tools"`
	// Context 是起始上下文:fresh(缺省)| fork(调用方对话快照起步)。
	// 心法:先把事实显式写进输入,写不进或写不全才 fork。
	Context string `yaml:"context"`
	// Deliver 是产出的交付语义(attach|always|direct,缺省=证据)。
	Deliver string `yaml:"deliver"`
	// Todo 给内部循环挂调用级临时清单(调用结束即弃)。默认关——
	// sub-agent 长到需要计划通常是"该拆成结构"的信号。
	Todo bool `yaml:"todo"`

	// 执行画像 A 类(loop/reliability/digest;不含 model)——sub-agent
	// 自己这一层,最近,压过 namespace/agent/app。
	Profile `yaml:",inline"`

	// ——已移除键,误写装配期报错指路——
	EngineLegacy       *string          `yaml:"engine"`
	EngineConfigLegacy map[string]any   `yaml:"engine_config"`
	ModeLegacy         *string          `yaml:"mode"`
	StepsLegacy        []map[string]any `yaml:"steps"`
	OutputLegacy       *string          `yaml:"output"`
	ExportLegacy       *bool            `yaml:"export"`
}

SubagentConfig 声明一个 sub-agent:与主循环同构的隔离子循环 (persona/工具面/画像不同,harness 同一套)。对应 Claude Code 的 .claude/agents/*.md。执行画像(loop/reliability/digest)内嵌自 Profile(不含 model——能力不可自指模型,model 走画像链)。 没有 engine 键:sub-agent 永远运行标准循环(同构)。

type SuspendConfig

type SuspendConfig struct {
	Dir         string         `yaml:"dir"`
	Store       string         `yaml:"store"`
	StoreConfig map[string]any `yaml:"store_config"`
	// TTL 是挂起记录(轮次/交互/效果日志)的过期时长,缺省 168h(7 天):
	// 无人应答的挂起不该在后端永久堆积。具名 store 实例自带的 ttl 优先。
	TTL loop.Duration `yaml:"ttl"`
}

SuspendConfig 启用持久化挂起(IM 通道与 HTTP /messages 共用同一 后端):ask_user/审批等待持久化,跨小时/跨天/跨进程重启均可恢复; 未配置时 IM 为进程内阻塞等待,HTTP 用装配时注入的 Interactor。 后端收敛到 store.KV:store 写裸 type(file/redis/...)或 cap://store/suspend/<name> 引用具名实例(多文件 app 层); dir 是 file 后端的简写(等价 store: file + store_config: {dir: ...})。

type TodoConfig

type TodoConfig struct {
	Enabled     *bool          `yaml:"enabled"` // 默认 true,显式 false 关闭
	Store       string         `yaml:"store"`   // cap://store/todo/<name> 或裸 type
	StoreConfig map[string]any `yaml:"store_config"`
}

TodoConfig 是计划清单模块:开关 + 后端。

Jump to

Keyboard shortcuts

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