Documentation
¶
Overview ¶
Package engines 定义外部 Agent CLI 引擎的执行边界。
Index ¶
- Constants
- Variables
- func BuildBaseEnv(extraEnv map[string]string) []string
- func BuildRunEnv(baseEnv []string, extraEnv []string, modelEnv map[string]string) []string
- func EnsureExternalSkillLink(skillName string, cliSkillDirs []string) error
- func GetDefaultEngineName(available []CLIToolStatus) string
- func LerosMCPTokenEnvVar() string
- func ReconcileExternalSkillLinks(cliSkillDirs []string) error
- func RemoveExternalSkillLink(skillName string, cliSkillDirs []string) error
- func ResolveRunWorkDir(workDir string) (string, error)
- func RunCLICommand(ctx context.Context, cliPath string, args []string, extraEnv []string) error
- func ScanJSONLines(r io.Reader, visit func(line string) bool)
- func SyncServerSkillsDir(sourceDir string) error
- func SyncToLerosDir(sourceDir string) error
- type ApprovalDecision
- type ApprovalHandler
- type ApprovalRequest
- type ApprovalResponder
- type ApprovalRouter
- func (r *ApprovalRouter) GetResponder(requestID string) ApprovalResponder
- func (r *ApprovalRouter) RequestApproval(ctx context.Context, req *ApprovalRequest) (*ApprovalDecision, error)
- func (r *ApprovalRouter) Resolve(requestID, action, reason string) error
- func (r *ApprovalRouter) SetResponder(requestID string, responder ApprovalResponder)
- type CLIToolSpec
- type CLIToolStatus
- type CmdProcess
- type Engine
- type MCPServerConfig
- type ModelConfig
- type PendingApproval
- type PermissionMode
- type PrepareRequest
- type Process
- type Registry
- type RunHandle
- type RunRequest
Constants ¶
const ( // EngineNative 是内置 Eino 引擎的注册名称。 EngineNative = "leros" // EngineClaude 是 Claude Code 的注册名称。 EngineClaude = "claude" // EngineCodex 是 Codex CLI 的注册名称。 EngineCodex = "codex" )
const ( ApprovalActionApprove = "approve" ApprovalActionDeny = "deny" ApprovalActionAlways = "always" )
统一审批决策值,前端 API 和引擎 Responder 共用。
const ( // EventProviderSessionStarted 表示提供者创建或暴露了一个原生会话 ID。 EventProviderSessionStarted events.EventType = "provider_session.started" )
Variables ¶
var BuiltinCLITools = []CLIToolSpec{ { Name: "claude", DisplayName: "Claude Code", Binary: "claude", InstallCmd: "npm install -g @anthropic-ai/claude-code", DetectCmd: "claude --version", VersionRegex: `Claude CLI[,:]? v?(\d+\.\d+\.\d+)`, Default: true, }, { Name: "codex", DisplayName: "Codex CLI", Binary: "codex", InstallCmd: "npm install -g @openai/codex", DetectCmd: "codex --version", VersionRegex: `(\d+\.\d+\.\d+)`, Default: false, }, }
BuiltinCLITools lists the external AI coding CLIs Leros can detect.
var DefaultApprovalRouter = NewApprovalRouter()
DefaultApprovalRouter 是全局审批路由器实例,供 HTTP handler 和 runtime 共享。
Functions ¶
func BuildBaseEnv ¶
BuildBaseEnv 返回当前环境并附加额外的环境变量。
func BuildRunEnv ¶
BuildRunEnv 为 CLI 进程组装环境变量条目。
func EnsureExternalSkillLink ¶
EnsureExternalSkillLink 为单个 skill 在所有外部 CLI 目录下创建或替换 symlink。 与 ReconcileExternalSkillLinks 不同,本函数只处理一个 skill,用于 create 后增量维护。 限定条件:skillName 不能包含路径分隔符、不能是绝对路径、不能是 ".."。 若 .leros/skills/{skillName} 不存在,返回错误。
func GetDefaultEngineName ¶
func GetDefaultEngineName(available []CLIToolStatus) string
GetDefaultEngineName chooses the preferred installed engine from detected CLI status.
func LerosMCPTokenEnvVar ¶
func LerosMCPTokenEnvVar() string
LerosMCPTokenEnvVar returns the env var name used for CLI MCP bearer token registration.
func ReconcileExternalSkillLinks ¶
ReconcileExternalSkillLinks 全量对齐外部 CLI skill 目录与 .leros/skills。 遍历 .leros/skills 下所有合法 skill 子目录,在每个外部 CLI skill 根目录下创建 {skillName} → .leros/skills/{skillName} 的 symlink。
同名目标处理规则(由 ensureSymlink 实现):
- 不存在:创建 symlink。
- 正确 symlink:跳过(幂等)。
- 错误 symlink:删除并重建。
- 真实目录或文件:删除并替换为 symlink。
安全:删除前使用 Lstat,不跟随 symlink。仅删除 external/{skillName} 子路径, 不删除外部根目录或 .leros/skills 源目录。 适用场景:worker 启动 / bootstrap 时的全量初始化。
func RemoveExternalSkillLink ¶ added in v0.1.1
RemoveExternalSkillLink removes external symlinks for a single skill from all CLI directories. Only symlinks are removed; real directories or files are left untouched. Logs warnings on failures but continues to the next directory (same pattern as EnsureExternalSkillLink). No-op if the symlink does not exist.
func ResolveRunWorkDir ¶
ResolveRunWorkDir returns the configured run workdir or the workspace temp fallback.
func RunCLICommand ¶
RunCLICommand runs a CLI command with a bounded timeout.
func ScanJSONLines ¶
ScanJSONLines 扫描换行符分隔的 JSON 日志,支持更大的 token 缓冲区。
func SyncServerSkillsDir ¶ added in v0.1.1
SyncServerSkillsDir copies server built-in skills to the workspace skills directory ({workspace}/skills).
func SyncToLerosDir ¶
SyncToLerosDir copies worker built-in skills to the Leros workspace skills directory (.leros/skills).
Types ¶
type ApprovalDecision ¶
type ApprovalDecision struct {
RequestID string
Action string // "approve" | "deny" | "always"
Reason string
}
ApprovalDecision 包含用户对审批请求的决策。
type ApprovalHandler ¶
type ApprovalHandler interface {
// RequestApproval 提交审批请求并阻塞直到做出决策。
// 返回决策,如果请求被取消/超时则返回错误。
RequestApproval(ctx context.Context, req *ApprovalRequest) (*ApprovalDecision, error)
}
ApprovalHandler 处理来自引擎的审批请求。 实现必须是线程安全的。
type ApprovalRequest ¶
type ApprovalRequest struct {
RequestID string
ToolCallID string
ToolName string
Arguments map[string]any
Description string
Engine string // "claude" | "codex"
}
ApprovalRequest 描述需要用户审批的工具调用。
type ApprovalResponder ¶
ApprovalResponder 将审批决策写回引擎的标准输入。 每种引擎提供自己的实现,知道如何格式化引擎特定的协议。
type ApprovalRouter ¶
type ApprovalRouter struct {
// contains filtered or unexported fields
}
ApprovalRouter 管理审批请求的异步等待和 HTTP 回传。 替代阻塞式 ApprovalHandler,通过 channel 桥接前端 HTTP 决策和引擎 goroutine。
func (*ApprovalRouter) GetResponder ¶
func (r *ApprovalRouter) GetResponder(requestID string) ApprovalResponder
GetResponder 获取审批请求对应的 Responder。
func (*ApprovalRouter) RequestApproval ¶
func (r *ApprovalRouter) RequestApproval(ctx context.Context, req *ApprovalRequest) (*ApprovalDecision, error)
Wait 注册 pending 并阻塞等待前端 HTTP 回传决策。 实现 ApprovalHandler 接口,供 consumeEvents 调用。
func (*ApprovalRouter) Resolve ¶
func (r *ApprovalRouter) Resolve(requestID, action, reason string) error
Resolve 由 HTTP handler 调用,填入前端决策并唤醒阻塞的 goroutine。
func (*ApprovalRouter) SetResponder ¶
func (r *ApprovalRouter) SetResponder(requestID string, responder ApprovalResponder)
SetResponder 设置审批请求对应的 Responder(由 consumeEvents 在发送审批请求后调用)。
type CLIToolSpec ¶
type CLIToolSpec struct {
Name string
DisplayName string
Binary string
InstallCmd string
DetectCmd string
VersionRegex string
Default bool
}
CLIToolSpec describes a built-in external AI coding CLI.
func GetEngineSpecByName ¶
func GetEngineSpecByName(name string) *CLIToolSpec
GetEngineSpecByName returns the built-in CLI spec with the given engine name.
type CLIToolStatus ¶
type CLIToolStatus struct {
Name string `json:"name"`
DisplayName string `json:"display_name"`
Binary string `json:"binary"`
Installed bool `json:"installed"`
Version string `json:"version,omitempty"`
Path string `json:"path,omitempty"`
InstallCmd string `json:"install_cmd"`
Default bool `json:"is_default"`
}
CLIToolStatus reports whether a built-in CLI is available in the current environment.
func DiscoverAvailableCLI ¶
func DiscoverAvailableCLI() []CLIToolStatus
DiscoverAvailableCLI detects all built-in CLI tools from the current PATH.
func GetCLIStatusSummary ¶
func GetCLIStatusSummary() []CLIToolStatus
GetCLIStatusSummary returns the current detection status for all built-in CLI engines.
type CmdProcess ¶
type CmdProcess struct {
// contains filtered or unexported fields
}
CmdProcess 实现 os/exec.Cmd 的 Process 接口。
type Engine ¶
type Engine interface {
Prepare(ctx context.Context, req PrepareRequest) error
GetSkillDir() string
Run(ctx context.Context, req RunRequest) (*RunHandle, error)
}
Engine 通过外部 AI CLI 执行提示。
type MCPServerConfig ¶
type MCPServerConfig struct {
Name string
URL string // HTTP 传输
BearerToken string // HTTP 传输:bearer token
Command string // Stdio 传输:可执行文件路径
Args []string // Stdio 传输:命令参数
Env map[string]string // Stdio 传输:进程额外环境变量
}
MCPServerConfig describes the Leros MCP endpoint registered with an external CLI client.
func NormalizeMCPServerConfig ¶
func NormalizeMCPServerConfig(cfg MCPServerConfig) MCPServerConfig
NormalizeMCPServerConfig fills defaults for an MCP server registration.
type ModelConfig ¶
ModelConfig 包含注入到 CLI 进程中的模型设置。
type PendingApproval ¶
type PendingApproval struct {
Request *ApprovalRequest
Responder ApprovalResponder
ResultCh chan *ApprovalDecision
CreatedAt time.Time
}
PendingApproval 表示一个等待前端决策的审批请求。
type PermissionMode ¶
type PermissionMode string
PermissionMode 控制引擎是否/如何请求用户审批工具调用。
const ( // PermissionModeBypass 跳过所有审批请求。 PermissionModeBypass PermissionMode = "bypass" // PermissionModeOnRequest 将每个工具调用审批请求转发给用户。 PermissionModeOnRequest PermissionMode = "on-request" // PermissionModeAuto 自动批准安全操作,将有风险的操作转发给用户。 PermissionModeAuto PermissionMode = "auto" )
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry 存储按名称启用的外部 CLI 引擎。
type RunHandle ¶
type RunHandle struct {
Process Process
Events <-chan events.Event
Responder ApprovalResponder // 引擎特定的审批响应写入器
}
RunHandle 在引擎进程启动后返回。
type RunRequest ¶
type RunRequest struct {
ExecutionID string
SessionID string
Resume bool
WorkDir string
TaskDir string // task 目录(跨 turn 持久化),引擎可在此写入配置文件
SystemPrompt string
Prompt string
Model ModelConfig
ExtraEnv []string
PermissionMode PermissionMode // 控制审批行为
ApprovalHandler ApprovalHandler // 可选:由运行时注入,用于 on-request/auto 模式
MCPServers []MCPServerConfig // MCP 服务配置,用于引擎启动时注入
}
RunRequest 包含执行一次外部 CLI 运行所需的所有输入。
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package builtin 提供外部 CLI 引擎的编排服务。
|
Package builtin 提供外部 CLI 引擎的编排服务。 |
|
Package claude 将 Claude Code 适配到 Leros 外部 CLI 引擎接口。
|
Package claude 将 Claude Code 适配到 Leros 外部 CLI 引擎接口。 |
|
Package codex 将 Codex CLI 适配到 Leros 外部 CLI 引擎接口。
|
Package codex 将 Codex CLI 适配到 Leros 外部 CLI 引擎接口。 |
|
Package native implements the built-in Eino-backed Leros engine.
|
Package native implements the built-in Eino-backed Leros engine. |