runtimecontext

package
v0.2.4 Latest Latest
Warning

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

Go to latest
Published: Nov 12, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SystemPromptVar

func SystemPromptVar(ctx context.Context, key string) string

SystemPromptVar 从注入的 RuntimeContext 的业务变量中取一个字符串值。

返回值会做 TrimSpace;上下文未注入 / 键不存在 / 值为空时返回空字符串。

func WithRuntimeContext

func WithRuntimeContext(ctx context.Context, rc *RuntimeContext) context.Context

WithRuntimeContext 把运行时上下文注入 context,供 builtin 工具在执行期读取。

传入 nil 时返回原 context(不注入)。

Types

type AgentAnalysisInput

type AgentAnalysisInput struct {
	// ProjectID 取自 RuntimeContext.ProjectID(当前用户激活项目)。
	ProjectID int64
	// Name 是任务名称(同时用作节点名称与容器资源名)。
	Name string
	// ContainerTemplateID 是模型选择的容器模板;<=0 表示未指定,由实现回退到系统默认模板。
	ContainerTemplateID int64
	// Command 是要执行的 shell 命令,由实现写入节点工作目录的 run.sh。
	Command string
	// Run 控制创建后是否立即运行:nil / true 表示运行(默认),false 表示只创建节点。
	Run *bool
	// TimeoutSeconds <= 0 时使用实现默认超时。
	TimeoutSeconds int
}

AgentAnalysisInput 是一次 AgentAnalysis 工具调用的入参。

type AgentAnalysisResult

type AgentAnalysisResult struct {
	AgentAnalysisID     int64  `json:"agent_analysis_id"`
	ContainerInstanceID int64  `json:"container_instance_id,omitempty"`
	Status              string `json:"status"`
	// Ran 表示是否实际提交了运行(Run=false 时为 false)。
	Ran          bool   `json:"ran"`
	Success      bool   `json:"success"`
	ExitCode     int    `json:"exit_code"`
	Log          string `json:"log,omitempty"`
	LogPath      string `json:"log_path,omitempty"`
	WorkspaceDir string `json:"workspace_dir,omitempty"`
	CommandPath  string `json:"command_path,omitempty"`
}

AgentAnalysisResult 是一次 AgentAnalysis 的执行结果。

AgentAnalysisID 是命令型 AnalysisNode 的主键(历史字段名保持不变,便于工具输出兼容)。

type AgentAnalysisRunner

type AgentAnalysisRunner interface {
	// CreateAgentAnalysis 创建一条命令型 AnalysisNode(工作目录、run.sh、容器模板);
	// Run 为 nil / true 时复用通用节点链路运行到终态并返回状态、退出码与命令日志,
	// Run 为 false 时只创建节点。超时 / 取消时返回错误。
	CreateAgentAnalysis(ctx context.Context, in AgentAnalysisInput) (AgentAnalysisResult, error)
}

AgentAnalysisRunner 抽象「创建命令型分析节点(可选运行)并等待其结束」的业务能力。

与 AnalysisNodeRunner 一样,它是进程级静态依赖,由 builtin.Deps 在构造工具时注入。

type AgentAnalysisUpdateInput

type AgentAnalysisUpdateInput struct {
	// ProjectID 是节点所属项目(取自 RuntimeContext.ProjectID)。
	ProjectID int64 `json:"project_id,string"`
	// AnalysisNodeID 是分析节点主键,必须为正数。
	AnalysisNodeID int64 `json:"analysis_node_id,string"`
	// NodeName 为 nil 表示不修改;非 nil 时覆盖节点名称(不能为空)。
	NodeName *string `json:"node_name,omitempty"`
	// Command 为 nil 表示不修改;非 nil 时覆盖 run.sh 正文(不能为空)。
	Command *string `json:"command,omitempty"`
	// ContainerTemplateID 为 nil 表示不修改;非 nil 时覆盖节点容器模板(必须为正数)。
	ContainerTemplateID *int64 `json:"container_template_id,omitempty,string"`
}

AgentAnalysisUpdateInput 是「更新 agent 节点」的入参。

所有可选字段用指针表示:nil 表示不修改,非 nil 时按值覆盖。

type AgentAnalysisUpdateResult

type AgentAnalysisUpdateResult struct {
	AnalysisNodeID      int64  `json:"analysis_node_id,string"`
	NodeName            string `json:"node_name"`
	Command             string `json:"command,omitempty"`
	ContainerTemplateID int64  `json:"container_template_id,string,omitempty"`
	WorkspaceDir        string `json:"workspace_dir,omitempty"`
	CommandPath         string `json:"command_path,omitempty"`
	ParamsPath          string `json:"params_path,omitempty"`
	// Changed 列出本次实际被修改的字段(node_name / command / container_template_id)。
	Changed []string `json:"changed,omitempty"`
}

AgentAnalysisUpdateResult 是「更新 agent 节点」的结果(回传给模型)。

type AnalysisNodeBrief

type AnalysisNodeBrief struct {
	AnalysisNodeID int64  `json:"analysis_node_id"`
	NodeName       string `json:"node_name"`
	// CreationSource 是落库的 creation_source 原值(agent / script / scheduler)。
	CreationSource string `json:"creation_source,omitempty"`
	// NodeType 是归一化后的节点类型(agent / script / scheduler)。
	NodeType string `json:"node_type,omitempty"`
	// NodeTypeDescription 是节点类型的中文说明(含可用的更新 / 运行工具指引)。
	NodeTypeDescription string         `json:"node_type_description,omitempty"`
	ScriptID            int64          `json:"script_id,omitempty"`
	WorkspaceDir        string         `json:"workspace_dir"`
	CommandPath         string         `json:"command_path,omitempty"`
	ParamsPath          string         `json:"params_path"`
	RequestParam        map[string]any `json:"request_param,omitempty"`
}

AnalysisNodeBrief 是分析节点的只读摘要(工具回传给模型的最小字段集)。

type AnalysisNodeBrowser

type AnalysisNodeBrowser interface {
	// GetAnalysisNodeByID 按主键读取分析节点(必须属于当前激活项目,否则返回错误)。
	//
	// 返回的 WorkspaceDir 是绝对路径,ParamsPath 由 WorkspaceDir 派生。
	GetAnalysisNodeByID(ctx context.Context, projectID int64, nodeID int64) (AnalysisNodeBrief, error)
}

AnalysisNodeBrowser 抽象「按 ID 查看分析节点」的只读能力(get_analysis_node 与更新类工具的预览)。

type AnalysisNodeCreateInput

type AnalysisNodeCreateInput struct {
	// ProjectID 是脚本所属项目(取自 RuntimeContext.ProjectID),用于校验脚本归属。
	ProjectID int64 `json:"project_id,string"`
	// ScriptID 是 Script 主键(pipeline_components.id)。
	ScriptID int64 `json:"script_id,string"`
	// NodeName 为节点名称,为空时回落脚本名称。
	NodeName string `json:"node_name,omitempty"`
	// RequestParam 是初始请求参数(键为 io_schema inputs 的 name);为空时节点只带 patterns。
	RequestParam map[string]any `json:"request_param,omitempty"`
}

AnalysisNodeCreateInput 是「为已有脚本创建分析节点」的入参。

type AnalysisNodeCreateResult

type AnalysisNodeCreateResult struct {
	AnalysisNodeID int64  `json:"analysis_node_id,string"`
	NodeName       string `json:"node_name"`
	ScriptID       int64  `json:"script_id,string"`
	// ScriptName / ScriptType 是脚本的基本信息(便于模型确认节点绑定哪个脚本)。
	ScriptName string `json:"script_name,omitempty"`
	ScriptType string `json:"script_type,omitempty"`
	// ScriptFilePath 是脚本主文件(如 main.R)的绝对路径,由 utils.GetScriptFile 推导。
	ScriptFilePath string `json:"script_file_path,omitempty"`
	// IOSchemaPath 是脚本目录下 io_schema.json 的绝对路径(节点 patterns 的来源)。
	IOSchemaPath string         `json:"io_schema_path,omitempty"`
	WorkspaceDir string         `json:"workspace_dir"`
	ParamsPath   string         `json:"params_path"`
	RequestParam map[string]any `json:"request_param,omitempty"`
}

AnalysisNodeCreateResult 是「为已有脚本创建分析节点」的结果(回传给模型)。

除节点自身的路径之外,把脚本在磁盘上的关键路径(ScriptFilePath / IOSchemaPath) 一并回传:节点建成后通常需要紧接着改脚本内容或补参数契约,模型无需再调 get_script / read_file 定位这些文件。

type AnalysisNodeCreator

type AnalysisNodeCreator interface {
	// CreateAnalysisNode 为已有脚本创建一个独立分析节点。
	//
	// 脚本必须属于 input.ProjectID;request_param 非空时按脚本 io_schema 解析出
	// resolved_inputs 并写出 params.json,为空时节点只按 io_schema 初始化 patterns。
	//
	// 节点在创建时必然要落地 inputs_patterns / output_patterns,因此 io_schema.json
	// 必须已经写好(先 CreateScript,或至少已写入一份契约);缺失时返回错误。
	CreateAnalysisNode(ctx context.Context, input AnalysisNodeCreateInput) (AnalysisNodeCreateResult, error)
}

AnalysisNodeCreator 抽象「为已有脚本创建独立分析节点」的业务能力 (create_script_analysis)。

它属于分析节点域(而非脚本域):脚本必须已存在且 io_schema.json 已写好, 创建时落地节点的 inputs_patterns / output_patterns 并准备好工作目录。

与 ScriptCreator 一样,它是进程级静态依赖,由 builtin.Deps 在构造工具时注入。

type AnalysisNodeParamsBuilder

type AnalysisNodeParamsBuilder interface {
	// BuildAnalysisNodeParams 为指定分析节点生成运行期参数文件并落库。
	//
	// analysisNodeID <= 0 或 requestParam 为空时返回错误;projectID > 0 时用于校验节点归属,
	// 避免模型把参数写到别的项目的节点上。
	BuildAnalysisNodeParams(ctx context.Context, input AnalysisNodeParamsInput) (AnalysisNodeParamsResult, error)
}

AnalysisNodeParamsBuilder 抽象「按脚本 io_schema 解析请求参数 → 落库并生成 params.json」 的业务能力。

模型依据 io_schema.json 拼出 request_param 后调用该能力:上层按脚本表单 (analysisform.BuildParseAnalysisResult)把 request_param 解析成结构化配方, 用它刷新分析节点的 inputs_patterns / output_patterns / resolved_inputs / request_param,再通过 NodeRuntimePreparer.Prepare 把配方写成节点 params.json / run.sh / env.sh,使 run_analysis_node 能直接以这份参数运行脚本。

与 AnalysisNodeRunner / ScriptCreator 一样,它是进程级静态依赖,由 builtin.Deps 在构造工具时注入。

type AnalysisNodeParamsInput

type AnalysisNodeParamsInput struct {
	// AnalysisNodeID 是目标分析节点主键。
	AnalysisNodeID int64 `json:"analysis_node_id,string"`
	// ProjectID 是当前激活项目 ID(>0 时校验节点归属)。
	ProjectID int64 `json:"project_id,string"`
	// RequestParam 是模型依据 io_schema.json 生成的请求参数,键为 io_schema 中的 name。
	RequestParam map[string]any `json:"request_param"`
}

AnalysisNodeParamsInput 是「生成分析节点参数」的入参。

type AnalysisNodeParamsResult

type AnalysisNodeParamsResult struct {
	AnalysisNodeID int64 `json:"analysis_node_id,string"`
	ScriptID       int64 `json:"script_id,string"`

	WorkspaceDir string `json:"workspace_dir"`
	ParamsPath   string `json:"params_path"`
	CommandPath  string `json:"command_path,omitempty"`
	// ParamsJSON 是写入 params.json 的实际内容(缩进后的 JSON 文本)。
	ParamsJSON string `json:"params_json"`
	// ResolvedInputs 是按脚本表单解析后的结构化输入(即写入 params.json 的主体)。
	ResolvedInputs map[string]any `json:"resolved_inputs,omitempty"`
	// Warnings 是解析过程中发现的非致命问题(如 io_schema 参数未被提供)。
	Warnings []string `json:"warnings,omitempty"`
}

AnalysisNodeParamsResult 是「生成分析节点参数」的结果(回传给模型)。

ParamsPath 与 ParamsJSON 是核心产物:ParamsJSON 是写入文件的 params.json 正文, 模型据此确认「io_schema 参数确实被正确映射」,无需再读盘。

type AnalysisNodeRunResult

type AnalysisNodeRunResult struct {
	NodeID int64 `json:"analysis_node_id"`
	// ScriptID 是该节点绑定的脚本 ID:运行后用它配合 get_script / 脚本路径定位
	// 本次实际执行的脚本,无需再额外查节点。
	ScriptID int64  `json:"script_id,omitempty"`
	Status   string `json:"status"`  // 节点终态(如 success / failed / timeout)
	Log      string `json:"log"`     // 节点 command.log 的内容
	Success  bool   `json:"success"` // 是否为成功终态

	// WorkspaceDir 是节点根目录(绝对路径),节点的 params.json / run.sh / output /
	// command.log 全部由它派生,方便模型在该目录下定位产物。
	WorkspaceDir string `json:"workspace_dir,omitempty"`
	// CommandPath 是本次运行实际执行的 run.sh 绝对路径,便于模型读脚本复核参数。
	CommandPath string `json:"command_path,omitempty"`
	// ParamsPath 是节点 params.json 的绝对路径(本次运行的输入参数)。
	ParamsPath string `json:"params_path,omitempty"`
	// LogPath 是节点命令日志 command.log 的绝对路径。Log 会按 maxLogBytes 截断,
	// 模型可在需要完整日志时用 read_file 类工具按该路径读取。
	LogPath string `json:"log_path,omitempty"`
	// ParamsJSON 是本次运行实际使用的 params.json 正文(运行前由 runner 重新生成),
	// 便于模型确认脚本实际拿到的参数,无需再读盘。
	ParamsJSON string `json:"params_json,omitempty"`
	// RequestParam 是本次运行使用的请求参数(键为 io_schema inputs 的 name)。
	// 传入 request_param 时为本次入参,未传时从节点记录的 request_param 反解而来。
	RequestParam map[string]any `json:"request_param,omitempty"`
	// ResolvedInputs 是按脚本 io_schema 解析 request_param 后的结构化输入。
	ResolvedInputs map[string]any `json:"resolved_inputs,omitempty"`
	// InputValidationErrors / OutputValidationErrors 是本次运行前写回节点的校验错误
	// 快照(运行前会被清空,由编排器在运行期重新填充)。
	InputValidationErrors  []any `json:"input_validation_errors,omitempty"`
	OutputValidationErrors []any `json:"output_validation_errors,omitempty"`
	// ParamsWarnings 是参数解析阶段发现的非致命问题(如缺少必填输入、
	// 存在 io_schema 未声明的键)。
	ParamsWarnings []string `json:"params_warnings,omitempty"`
}

AnalysisNodeRunResult 是一次分析节点执行的结果。

type AnalysisNodeRunner

type AnalysisNodeRunner interface {
	// RunAnalysisNode 触发分析节点执行并阻塞等待其进入终态,返回执行日志内容。
	//
	// requestParam 是本次运行的请求参数(键为脚本 io_schema inputs 的 name),可选:
	// 非空时以它为准(并回写节点记录),为空时回退到 AnalysisNode 记录上已保存的
	// request_param。
	//
	// 实现必须在每次运行前按 analysisform.BuildParseAnalysisResult 解析 request_param:
	// 先把解析结果(request_param / resolved_inputs / inputs_patterns / output_patterns)
	// 回写到 AnalysisNode,清空上一轮 input_validation_errors / output_validation_errors,
	// 再重新生成 params.json,最后提交运行。
	//
	// timeoutSeconds <= 0 时由实现选取默认超时。节点运行失败(非成功终态 /
	// 超时)时返回错误,同时返回已读取到的日志片段(可能为空)。
	RunAnalysisNode(ctx context.Context, nodeID int64, requestParam map[string]any, timeoutSeconds int) (AnalysisNodeRunResult, error)
}

AnalysisNodeRunner 抽象「运行分析节点并等待完成」的业务能力。

由上层(container / handler)实现,经 builtin.Deps 在构造工具时注入;tool 包只负责 把它暴露给模型。

type AnalysisNodeUpdater

type AnalysisNodeUpdater interface {
	// UpdateAgentAnalysis 更新 agent 节点(命令节点,无脚本)。
	//
	// 可更新 node_name / command / container_template_id;未给出的字段保持原值。
	// command 变更后会重新生成 run.sh。节点必须属于 projectID,且节点类型必须为 agent。
	UpdateAgentAnalysis(ctx context.Context, input AgentAnalysisUpdateInput) (AgentAnalysisUpdateResult, error)

	// UpdateScriptAnalysis 更新 script / scheduler 节点(绑定脚本)。
	//
	// 可更新 node_name / request_param;request_param 非 nil 时按脚本最新 io_schema 重新解析
	// resolved_inputs 并重新生成 params.json(空对象表示清空参数)。
	// 节点必须属于 projectID,且节点必须绑定脚本(类型为 script 或 scheduler)。
	UpdateScriptAnalysis(ctx context.Context, input ScriptAnalysisUpdateInput) (ScriptAnalysisUpdateResult, error)
}

AnalysisNodeUpdater 抽象「更新已有分析节点」的业务能力。

按节点类型拆成两个入口(节点类型取自 analysis_nodes.creation_source,只有三种):

  • UpdateAgentAnalysis:更新 agent 节点(命令节点,无脚本),可改 node_name / command / container_template_id;
  • UpdateScriptAnalysis:更新 script / scheduler 节点(绑定脚本),可改 node_name / request_param。

实现是「读改写」:先按 analysis_node_id 读出节点,只覆盖请求中给出的字段再回写; 命令 / 参数的变更还会重新生成 run.sh / params.json 等运行期文件。

与 ScriptUpdater 一样,它是进程级静态依赖,由 builtin.Deps 在构造工具时注入。

type ContainerTemplateBrief

type ContainerTemplateBrief struct {
	DefinitionID int64  `json:"definition_id"`
	SpecID       int64  `json:"spec_id"`
	Name         string `json:"name"`
	Description  string `json:"description,omitempty"`
}

ContainerTemplateBrief 是容器模板的只读摘要(工具回传给模型的最小字段集)。

DefinitionID 是 go_container_template_definition 主键(即对外 ContainerTemplate.ID, 也是 script.container_template_id / app_session.container_template_id 引用的值); SpecID 是它关联的 go_container_template_spec 主键;Name / Description 取自该共享配置。

type ContainerTemplateBrowser

type ContainerTemplateBrowser interface {
	// ListContainerTemplates 返回全部可运行容器模板。
	//
	// 每一项对应一行 go_container_template_definition(ID 即对外的容器模板 ID),
	// Name / Description 取自该绑定行关联的 go_container_template_spec。
	ListContainerTemplates(ctx context.Context) ([]ContainerTemplateBrief, error)

	// GetContainerTemplateByID 按主键读取一个可运行容器模板(绑定行 + 绑定的共享运行配置)。
	GetContainerTemplateByID(ctx context.Context, containerTemplateID int64) (ContainerTemplateDetail, error)
}

ContainerTemplateBrowser 抽象「浏览容器模板」的只读能力(list_container_templates / get_container_template)。

容器模板是全局资产(不属于某个项目),因此 ListContainerTemplates 不需要 projectID。

type ContainerTemplateDetail

type ContainerTemplateDetail struct {
	DefinitionID int64  `json:"definition_id"`
	SpecID       int64  `json:"spec_id"`
	DisplayName  string `json:"display_name"`
	Description  string `json:"description"`
	ImageName    string `json:"image_name,omitempty"`
	PullPolicy   string `json:"pull_policy,omitempty"`
	IsDefault    bool   `json:"is_default"`
	SpecName     string `json:"spec_name,omitempty"`
}

ContainerTemplateDetail 是单个容器模板的只读详情(供 get_container_template 回传)。

DisplayName / Description 原样取自绑定行 go_container_template_definition 自身 (Description 为 longtext);SpecName 取自关联的共享运行配置,便于模型区分 「模板展示名」与「运行配置名」。

type ContainerTerminalExecInput

type ContainerTerminalExecInput struct {
	// UserID 取自执行事实(tool.UserIDFrom)。
	UserID int64
	// ProjectID 取自执行事实(tool.ProjectIDFrom,当前用户激活项目)。
	ProjectID int64
	// AgentSessionID 是发起本次调用的 Agent 会话 ID(tool.SessionIDFrom)。
	//
	// 终端会话按 (ContainerTemplateID, AgentSessionID) 唯一:同一 Agent 会话在同一个模板上
	// 多次执行命令会复用同一个终端会话(同一容器与 PTY)。必须 > 0。
	AgentSessionID int64
	// ContainerTemplateID 是必填的容器模板 ID。
	ContainerTemplateID int64
	// Command 是要在终端里执行的 shell 命令。
	Command string
	// TimeoutSeconds <= 0 时使用实现默认超时。
	TimeoutSeconds int
	// Wait 为 true 时等待命令结束。
	Wait bool
	// CreateIfMissing 为 true 时允许自动创建终端会话(容器)。
	CreateIfMissing bool
	// Persistent 为 true 时把会话标记为持久:命令结束后不回收容器,
	// 直到空闲 TTL 到期或用户显式关闭。false(默认)= 一次性会话,
	// 命令结束后若没有前端终端连接则立即删除会话与容器。
	Persistent bool
}

ContainerTerminalExecInput 是一次 terminal_exec 调用的入参。

type ContainerTerminalExecResult

type ContainerTerminalExecResult struct {
	SessionID       string  `json:"session_id,omitempty"`
	Accepted        bool    `json:"accepted"`
	Running         bool    `json:"running,omitempty"`
	ExitCode        int     `json:"exit_code"`
	TimedOut        bool    `json:"timed_out,omitempty"`
	DurationSeconds float64 `json:"duration_seconds,omitempty"`
	Output          string  `json:"output,omitempty"`
	OutputTruncated bool    `json:"output_truncated,omitempty"`
}

ContainerTerminalExecResult 是一次 terminal_exec 调用的执行结果。

type ContainerTerminalRunner

type ContainerTerminalRunner interface {
	// RunInTerminal 把 command 写入会话的串行队列。
	//
	// Wait=true 时等待命令结束并返回退出码与输出尾部;Wait=false 时只投递并立即返回
	// (Accepted=true,Running=true)。
	//
	// 命令结束(含超时 / 失败)后实现方必须「解绑」本次调用:
	// 一次性会话(Persistent=false)若已无前端终端连接会被立即回收,
	// 持久会话(Persistent=true)则保留,直到空闲 TTL 或显式关闭。
	RunInTerminal(ctx context.Context, in ContainerTerminalExecInput) (ContainerTerminalExecResult, error)
}

ContainerTerminalRunner 抽象「向当前用户激活项目下的容器模板临时终端写入命令」 的业务能力(terminal_exec)。

终端会话复用同一个持久 PTY,命令输出会实时出现在前端 xterm 中,用户也能看到 Agent 执行了什么。

type DatasetBrief

type DatasetBrief struct {
	DatasetID   int64  `json:"dataset_id"`
	DatasetName string `json:"dataset_name"`
	Description string `json:"description,omitempty"`
	Path        string `json:"path"`
}

DatasetBrief 是数据集的只读摘要(供 get_dataset 回传)。

Path 是数据集工作目录的绝对路径(utils.GetDatasetDir),模型可直接在该目录下 读取 / 写入文件。

type DatasetBrowser

type DatasetBrowser interface {
	// GetDatasetByID 按主键读取数据集(必须属于当前激活项目,否则返回错误)。
	//
	// 用于解析用户输入里的 @dataset:<id> 引用:返回数据集名称 / 描述与其工作目录的
	// 绝对路径(utils.GetDatasetDir),模型可直接按该路径读取 / 写入数据集文件。
	GetDatasetByID(ctx context.Context, projectID int64, datasetID int64) (DatasetBrief, error)
}

DatasetBrowser 抽象「按 ID 查看数据集」的只读能力(get_dataset)。

type DatasetFileAddInput

type DatasetFileAddInput struct {
	// ProjectID 取自执行事实(tool.ProjectIDFrom,当前用户激活项目)。
	ProjectID int64
	// DatasetID 是目标数据集主键(go_dataset)。
	DatasetID int64
	// Path 是要登记的文件路径:绝对路径或相对数据集工作目录的路径。
	Path string
	// Role 是文件角色(go_file.role),空时由实现回退到 DEFAULT。
	Role string
	// FileName 是展示文件名,空时由实现取 Path 的 basename。
	FileName string
	// IsPrefix 为 true 时把 Path 当作前缀(不校验文件是否存在)。
	IsPrefix bool
	// IsCopy 为 true 时把文件复制到数据集目录后再登记。
	IsCopy bool
}

DatasetFileAddInput 是一次 add_file_to_dataset 调用的入参。

type DatasetFileAddResult

type DatasetFileAddResult struct {
	DatasetID int64  `json:"dataset_id"`
	FileID    int64  `json:"file_id"`
	FilePath  string `json:"file_path"`
	FileName  string `json:"file_name"`
	Role      string `json:"role,omitempty"`
	Format    string `json:"format,omitempty"`
	Size      int64  `json:"size,omitempty"`
}

DatasetFileAddResult 是一次 add_file_to_dataset 调用的结果。

type DatasetWriter

type DatasetWriter interface {
	// EnsureDatasetByKey 返回当前激活项目下 dataset_key 匹配的数据集;不存在时按
	// key 作为名称创建并绑定到项目。第二个返回值表示本次是否新建。
	EnsureDatasetByKey(ctx context.Context, projectID int64, datasetKey string) (DatasetBrief, bool, error)

	// AddFileToDataset 把 Path 指向的文件登记为 DatasetID 的数据集文件。
	//
	// 绝对路径必须在存储根目录(storage.base_dir)内;相对路径相对数据集工作目录
	// (utils.GetDatasetDir)解析。IsPrefix / IsCopy 语义与
	// types.AddFileToDatasetRequest 一致。
	AddFileToDataset(ctx context.Context, in DatasetFileAddInput) (DatasetFileAddResult, error)
}

DatasetWriter 抽象「按 key 准备数据集 / 向数据集添加文件」的写能力 (get_project_database_path / add_file_to_dataset)。

与 DatasetBrowser 分开:写操作需要创建数据集、登记文件,属于会改库 / 改盘的能力。

type FileReadResult

type FileReadResult struct {
	FileID   int64          `json:"file_id"`
	FileName string         `json:"file_name,omitempty"`
	FilePath string         `json:"file_path"`
	Format   string         `json:"format,omitempty"`
	Sheets   []FileSheetTab `json:"sheets,omitempty"`
	Message  string         `json:"message,omitempty"`
}

FileReadResult 是一次「按 ID 读取文件」的结果。

对 tsv / csv / xlsx:Sheets 承载每个 sheet 的列名与预览行;对其它格式: Sheets 为空,仅 FilePath 有效。

type FileReader

type FileReader interface {
	// ReadFileByID 按 go_file 主键 ID 读取文件,返回文件元信息与内容预览。
	//
	// fileID 非法(<=0)或文件不存在时返回错误。
	ReadFileByID(ctx context.Context, fileID int64) (FileReadResult, error)
}

FileReader 抽象「按 go_file 主键 ID 读取文件」的业务能力。

它把「file_id → 文件元信息(含 path)+ 内容预览」的业务细节收敛在上层实现 (见 container),tool 包只负责把它暴露给模型。对 tsv / csv / xlsx(全部 sheet) 会解析出列信息与前若干行数据;其它格式只返回文件路径。

与 AnalysisNodeRunner 一样,它是进程级静态依赖,由 builtin.Deps 在构造工具时注入。

type FileSheetTab

type FileSheetTab struct {
	Name    string           `json:"name"`
	Columns []string         `json:"columns,omitempty"`
	Rows    []map[string]any `json:"rows,omitempty"`
}

FileSheetTab 是单个 sheet / 数据表的内容预览。

type MemorySaveInput

type MemorySaveInput struct {
	UserID int64 `json:"user_id,string"`
	// ID 为 0 表示新建(主键由 Memory.BeforeCreate 分配);> 0 表示更新既有记忆。
	ID int64 `json:"id,omitempty,string"`
	// SessionID 可选:把记忆与某个具体会话关联(会话主键,0 表示不关联)。
	SessionID int64 `json:"session_id,omitempty,string"`
	// ProjectID 可选:记忆所属项目(写入 Metadata["project_id"]),用于上下文优先检索。
	ProjectID int64 `json:"project_id,omitempty,string"`
	// Kind 是记忆类别(fact / summary / note / event),非法值由实现兜底为 note。
	Kind string `json:"kind,omitempty"`
	// Content 是记忆正文(注意事项 / 事实 / 摘要)。
	Content string `json:"content"`
	// Importance 是重要度(0-10),用于检索排序。
	Importance int `json:"importance,omitempty"`
	// Metadata 是扩展信息(来源、标签等)。
	Metadata map[string]any `json:"metadata,omitempty"`
}

MemorySaveInput 是「保存一条记忆」的入参。

UserID 是记忆归属用户(长期记忆按用户隔离),由调用方从 RuntimeContext / context 取得, 不由模型填写,避免模型把记忆写到别的用户名下。

type MemorySaveResult

type MemorySaveResult struct {
	ID         int64  `json:"id,string"`
	Kind       string `json:"kind"`
	Importance int    `json:"importance"`
	// Created 标识本次是新建(true)还是更新既有记忆(false)。
	Created bool `json:"created"`
}

MemorySaveResult 是「保存一条记忆」的结果(回传给模型)。

type MemorySaver

type MemorySaver interface {
	// SaveMemory 创建或更新一条记忆。
	//
	// input.ID > 0 表示更新该条记忆(不存在时返回错误),为 0 表示新建;新建时主键由
	// 持久化层的 agent.Memory.BeforeCreate 统一分配(雪花 ID)。
	SaveMemory(ctx context.Context, input MemorySaveInput) (MemorySaveResult, error)
}

MemorySaver 抽象「创建 / 更新一条用户长期记忆」的业务能力。

它把记忆域(agent.Memory / MemoryManager)的持久化细节收敛在上层实现(见 container), tool 包只负责把能力暴露给模型:模型在遭遇可复现的错误后,把「下次如何绕开」的注意事项 写入记忆,后续调用会随背景注入出现在系统提示词里。

与 AnalysisNodeRunner / ScriptCreator 一样,它是进程级静态依赖,由 builtin.Deps 在构造工具时注入。

type ProjectReportContext

type ProjectReportContext struct {
	ReportID  int64 `json:"report_id"`
	ProjectID int64 `json:"project_id"`
	// ReportTitle 是报告标题。
	ReportTitle string `json:"report_title"`
	// WorkingDir 是报告工作目录(<baseDir>/data/<projectId>/report/<reportId>)。
	WorkingDir string `json:"workspace_directory"`
	// OutputFile 是报告输出文件(工作目录下的 output.md,见 types.DefaultProjectReportFilename)。
	OutputFile string `json:"output_file"`
	// Items 是报告条目(按树的前序遍历,与前端 tree 顺序一致)。
	Items []ProjectReportItemBrief `json:"project_report_items"`
}

ProjectReportContext 是项目报告的只读上下文(供 get_report_context 渲染模板)。

type ProjectReportContextResolver

type ProjectReportContextResolver interface {
	// GetReportContext 返回报告标题、工作目录、输出文件与已解析的条目列表。
	//
	// reportID 必须属于当前激活项目(projectID),否则返回错误;userID 用于校验报告
	// 条目列表的访问权限。
	GetReportContext(ctx context.Context, userID int64, projectID int64, reportID int64) (ProjectReportContext, error)
}

ProjectReportContextResolver 抽象「按报告 ID 解析报告撰写上下文」的能力 (get_report_context)。

type ProjectReportItemBrief

type ProjectReportItemBrief struct {
	Name      string `json:"name"`
	Content   string `json:"content"`
	OwnerType string `json:"owner_type"`
}

ProjectReportItemBrief 是报告条目的只读摘要(供报告撰写模板遍历)。

OwnerType 刻意声明为 string,而不是 types.ProjectReportItemOwnerType:pongo2 的 `==` 最终走 Go 的接口相等比较,具名字符串类型永远不等于字符串字面量,会让 {% if item.OwnerType == "custom" %} 恒为假、循环体整段不输出。

type RuntimeContext

type RuntimeContext struct {
	// Type 是归一化后的业务类型(script / analysis / analysisNode / projectReport,
	// 为空表示默认工作区)。
	Type string `json:"type,omitempty"`
	// Label 是人类可读的上下文名称(如节点名 / 报告标题),用于前端展示。
	Label string `json:"label,omitempty"`
	// SystemPromptVars 是渲染 Profile 系统提示词模板(pongo2)所需的变量
	// (如 analysis_node_id / workspace_directory / script_file_path 等)。
	SystemPromptVars map[string]any `json:"system_prompt_vars,omitempty"`
}

RuntimeContext 是一次 Agent 调用的运行时上下文(业务变量)。

它是「业务 env(type,id) → 系统提示词模板变量」的载体:由 handler 的 RuntimeContextResolver 解析产出,随 agent.Request 传递到工具执行期,并随 Request 一起被 JSON 序列化进 agent_tasks.request 持久化(gorm serializer:json)。 工作目录属于执行事实,不在这里:由 Resolver 单独返回并落到 Task.WorkingDir。

注意:本结构是纯可序列化的业务事实,会随 Request 一起被 JSON 序列化进 agent_tasks 落库(Task.Request,gorm serializer:json),因此这里绝不能放服务对象——服务能力 是进程级静态依赖,改由 builtin.Deps / coder.Deps 在构造工具时注入。

func RuntimeContextFrom

func RuntimeContextFrom(ctx context.Context) *RuntimeContext

RuntimeContextFrom 取出注入的运行时上下文;未注入时返回 nil。

func (*RuntimeContext) SystemPromptVar

func (rc *RuntimeContext) SystemPromptVar(key string) string

SystemPromptVar 从 RuntimeContext.SystemPromptVars 中取一个字符串值。

返回值会做 TrimSpace;上下文为 nil / 键不存在 / 值为空时返回空字符串。

func (*RuntimeContext) Vars

func (rc *RuntimeContext) Vars() map[string]any

Vars 返回渲染系统提示词模板所用的变量;上下文为 nil 时返回 nil。

供调用方(如 AgentService)nil-safe 地读取 SystemPromptVars,避免直接字段访问 panic。

type ScriptAnalysisUpdateInput

type ScriptAnalysisUpdateInput struct {
	// ProjectID 是节点所属项目(取自 RuntimeContext.ProjectID)。
	ProjectID int64 `json:"project_id,string"`
	// AnalysisNodeID 是分析节点主键,必须为正数。
	AnalysisNodeID int64 `json:"analysis_node_id,string"`
	// NodeName 为 nil 表示不修改;非 nil 时覆盖节点名称(不能为空)。
	NodeName *string `json:"node_name,omitempty"`
	// RequestParam 为 nil 表示不修改;非 nil 时按脚本 io_schema 重新解析并覆盖节点参数。
	RequestParam map[string]any `json:"request_param,omitempty"`
}

ScriptAnalysisUpdateInput 是「更新 script / scheduler 节点」的入参。

所有可选字段用指针 / nil map 表示:nil 表示不修改,非 nil 时按值覆盖。 RequestParam 为「已提供但为空对象」时表示清空节点参数。

type ScriptAnalysisUpdateResult

type ScriptAnalysisUpdateResult struct {
	AnalysisNodeID int64          `json:"analysis_node_id,string"`
	NodeName       string         `json:"node_name"`
	ScriptID       int64          `json:"script_id,string,omitempty"`
	WorkspaceDir   string         `json:"workspace_dir,omitempty"`
	ParamsPath     string         `json:"params_path,omitempty"`
	CommandPath    string         `json:"command_path,omitempty"`
	RequestParam   map[string]any `json:"request_param,omitempty"`
	// Warnings 是参数解析阶段的非致命提示(缺少必填输入 / 存在 io_schema 未声明的键)。
	Warnings []string `json:"warnings,omitempty"`
	// Changed 列出本次实际被修改的字段(node_name / request_param)。
	Changed []string `json:"changed,omitempty"`
}

ScriptAnalysisUpdateResult 是「更新 script / scheduler 节点」的结果(回传给模型)。

type ScriptBrief

type ScriptBrief struct {
	ScriptID int64 `json:"script_id"`
	// ContainerTemplateID 是脚本绑定的容器模板 ID(go_container_template_definition 主键,
	// 即对外 ContainerTemplate.ID),可直接用于 list_container_templates 的查询结果对账 /
	// 运行配置核对;0 表示脚本尚未绑定容器模板。
	ContainerTemplateID int64  `json:"container_template_id,omitempty"`
	ScriptName          string `json:"script_name"`
	Description         string `json:"description,omitempty"`
	ScriptType          string `json:"script_type,omitempty"`
	ScriptFilePath      string `json:"script_file_path"`
	IOSchemaPath        string `json:"io_schema_path"`
}

ScriptBrief 是脚本的只读摘要(工具回传给模型的最小字段集)。

ScriptFilePath / IOSchemaPath 由 utils.GetScriptFile / utils.WorkflowIOSchemaPath 推导, 模型可直接按这两个路径读写脚本主文件与 io_schema.json。

type ScriptBrowser

type ScriptBrowser interface {
	// ListScriptsByProject 返回指定项目下的全部脚本(item_type/pipeline 中 component_type=script)。
	//
	// 结果按 id 倒序,不分页(项目内脚本数量有限);projectID 必须为正数。
	ListScriptsByProject(ctx context.Context, projectID int64) ([]ScriptBrief, error)

	// GetScriptByID 按主键读取脚本(必须属于当前激活项目,否则返回错误)。
	//
	// projectID 取自执行事实,scriptID 是 pipeline_components 主键。
	GetScriptByID(ctx context.Context, projectID int64, scriptID int64) (ScriptBrief, error)
}

ScriptBrowser 抽象「浏览项目脚本」的只读能力(list_project_scripts / get_script)。

脚本按当前激活项目隔离,projectID 由调用方从执行事实(TaskFacts)取得。

type ScriptCreateInput

type ScriptCreateInput struct {
	// ProjectID 是脚本所属项目(取自 RuntimeContext.ProjectID)。
	ProjectID int64 `json:"project_id,string"`
	// 以下为 Script 字段。
	Name        string `json:"name"`
	Description string `json:"description,omitempty"`
	// ContainerTemplateID 为 0 时表示未指定,由实现解析系统默认容器模板。
	ContainerTemplateID int64  `json:"container_template_id,string"`
	ScriptType          string `json:"script_type"`
	// Inputs / Outputs 是脚本的输入输出契约(io_schema.json 的 inputs / outputs)。
	// 非空时由实现写入脚本目录的 io_schema.json;为空时实现回落默认 schema。
	// 每一项至少应包含 name / type,可选 label / required / description 等字段。
	Inputs  []map[string]any `json:"inputs,omitempty"`
	Outputs []map[string]any `json:"outputs,omitempty"`
}

ScriptCreateInput 是「创建脚本」的入参(不创建分析节点)。

type ScriptCreateResult

type ScriptCreateResult struct {
	ScriptID int64 `json:"script_id,string"`
	// ScriptKey 是 Script.ScriptID(组件业务 ID,脚本目录名)。
	ScriptKey      string `json:"script_key"`
	ScriptName     string `json:"script_name"`
	ScriptFilePath string `json:"script_file_path"`
	IOSchemaPath   string `json:"io_schema_path"`
	// ScriptType 是实际生效的脚本类型(未传时为默认类型)。
	ScriptType string `json:"script_type,omitempty"`

	// ContainerTemplateID 是脚本最终使用的容器模板 ID(未显式指定时为解析出的默认模板)。
	ContainerTemplateID   int64  `json:"container_template_id,string"`
	ContainerTemplateName string `json:"container_template_name,omitempty"`
}

ScriptCreateResult 是「创建脚本」的结果(回传给模型)。

只包含脚本自身的产物路径:模型据此直接编辑脚本主文件与 io_schema.json, 之后再按需调用 create_script_analysis 创建节点。

type ScriptCreator

type ScriptCreator interface {
	// CreateScript 创建脚本并初始化脚本目录,返回脚本 ID 与主文件 / io_schema.json 路径。
	//
	// projectID 取自 RuntimeContext.ProjectID(当前用户激活项目),必须为正数。
	// input.ContainerTemplateID 为空(0)时由实现解析系统默认容器模板;
	// 没有配置默认模板时返回错误,提示用户先到容器模板页设置默认模板。
	CreateScript(ctx context.Context, input ScriptCreateInput) (ScriptCreateResult, error)
}

ScriptCreator 抽象「创建脚本」的业务能力(create_script)。

职责刻意与节点创建拆开(脚本与节点是两个独立资源):

  • CreateScript 只落库 Script(pipeline_components)并初始化脚本目录 (主文件 / io_schema.json),不创建任何分析节点;
  • 为脚本创建节点由 AnalysisNodeCreator 负责(见 create_script_analysis)。

这样模型可以先把脚本与 io_schema.json 写好,再决定要建几个节点;不需要节点的 场景(只写脚本)也不必凭空造一个节点。这些细节收敛在上层实现(见 container), tool 包只负责把能力暴露给模型。

与 AnalysisNodeRunner / FileReader 一样,它是进程级静态依赖,由 builtin.Deps 在构造工具时注入。

type ScriptUpdateInput

type ScriptUpdateInput struct {
	// ProjectID 是脚本所属项目(取自 RuntimeContext.ProjectID)。
	ProjectID int64 `json:"project_id,string"`
	// ScriptID 是 Script 主键(pipeline_components.id),必须为正数。
	ScriptID int64 `json:"script_id,string"`
	// Name / Description 为 nil 表示不修改;非 nil 时覆盖对应字段。
	Name        *string `json:"name,omitempty"`
	Description *string `json:"description,omitempty"`
}

ScriptUpdateInput 是「更新脚本基本信息」的入参。

type ScriptUpdateResult

type ScriptUpdateResult struct {
	ScriptID       int64  `json:"script_id,string"`
	ScriptName     string `json:"script_name"`
	Description    string `json:"description,omitempty"`
	ScriptType     string `json:"script_type,omitempty"`
	ScriptFilePath string `json:"script_file_path,omitempty"`
	IOSchemaPath   string `json:"io_schema_path,omitempty"`
	// Changed 列出本次实际被修改的字段名(name / description),便于模型确认。
	Changed []string `json:"changed,omitempty"`
}

ScriptUpdateResult 是「更新脚本基本信息」的结果(回传给模型)。

type ScriptUpdater

type ScriptUpdater interface {
	// UpdateScriptInfo 更新脚本的 name / description,返回更新后的关键信息。
	//
	// projectID 取自 RuntimeContext.ProjectID(当前用户激活项目):脚本必须属于该项目,
	// 否则返回错误(避免模型改到别的项目的脚本)。
	// scriptID 是 Script 主键(int64),必须为正数。
	// name / description 为指针:nil 表示「不修改该字段」,非 nil 时按值覆盖
	// (description 允许被显式置为空字符串以清空描述)。
	UpdateScriptInfo(ctx context.Context, input ScriptUpdateInput) (ScriptUpdateResult, error)
}

ScriptUpdater 抽象「更新已有脚本基本信息(name / description)」的业务能力。

它只覆盖脚本名称与描述这两个元数据字段,不触碰脚本内容(脚本主文件由模型直接读写)、 io_schema 与容器模板,因此实现必须是「读改写」:先按 script_id 读出完整 Script 记录, 只覆盖请求中给出的字段,再整体回写,避免把未提交的字段写成零值 (workflowRepository.UpdateScript 是整体替换语义)。

与 ScriptCreator 一样,它是进程级静态依赖,由 builtin.Deps 在构造工具时注入。

type SkillInfo

type SkillInfo struct {
	Name         string
	Description  string
	SkillPath    string
	SkillFile    string
	Instructions string
	// DisableRender 为 true 时,技能文本(指令正文 / 附属资源)按原文返回,
	// 不做 pongo2 模板渲染(见 skill.Skill.DisableRender)。
	DisableRender bool
}

SkillInfo 是技能的最小元信息 + 指令正文。

type SkillResolver

type SkillResolver interface {
	// Get 按名称解析技能;不存在时 ok 为 false。
	Get(name string) (SkillResource, bool)
	// Names 返回全部可用技能名(用于错误提示)。
	Names() []string
}

SkillResolver 抽象「按名称解析技能」的能力,供技能工具(get_skill / load_skill_resource)在执行期读取技能指令与附属资源。

声明为接口而不是直接依赖 skill 包,是为了避免 tool ← skill 的循环引用: skill 包用它自己的 *Registry 实现本接口,并由 container 在构造 builtin.Deps 时注入。

type SkillResource

type SkillResource interface {
	// SkillInfo 返回技能的元信息与指令正文(SKILL.md 内容)。
	SkillInfo() SkillInfo
	// SkillVersion 返回技能版本(manifest.json 优先,回退 frontmatter version)。
	SkillVersion() string
	// SkillResources 返回技能目录下的附属资源相对路径(已排序)。
	SkillResources() []string
	// ReadSkillResource 读取技能目录内的附属资源(相对路径),返回内容与绝对路径。
	ReadSkillResource(path string) (content string, absPath string, err error)
}

SkillResource 是技能工具执行期需要的最小技能视图。

Jump to

Keyboard shortcuts

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