job

package
v0.0.0-...-38ea638 Latest Latest
Warning

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

Go to latest
Published: Aug 23, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Overview

Package job Agent 队列:Job = 调度单元;执行台账见 ningharness/task。

Index

Constants

View Source
const DefaultGoalMaxRounds = 100

DefaultGoalMaxRounds Goal 外环默认硬上限。

View Source
const DefaultMaxParallel = 2

DefaultMaxParallel 默认并发度(可 SetMaxParallel)。

View Source
const DefaultPathPrompt = `请按任务说明处理本节。完成后聊天只回路径与短确认,不要贴全文。`

DefaultPathPrompt MCP/空模板时的兜底。

View Source
const JobTypeAgentTurn = "agent-turn"

JobTypeAgentTurn 一条 prompt → 一轮或多轮串行 agentkit.Run。

View Source
const JobTypeGoal = "goal"

JobTypeGoal 外环:反复跑 Executor,直到 GOAL.yaml status 终态或超轮。

Variables

This section is empty.

Functions

func BuildStepPrompt

func BuildStepPrompt(job Job, stepIdx int) string

BuildStepPrompt 兼容旧名。

func BuildStepUserPrompt

func BuildStepUserPrompt(job Job, stepIdx int) string

BuildStepUserPrompt 批内当前节进会话气泡 / Agent 主任务:仅用户模板(可选显式 {path} 占位)。 树勾选路径在 queue.json steps 里,不拼进 Prompt;Agent 用 list_queue + batch-write Skill 读取。

func BuildStepWirePrompt

func BuildStepWirePrompt(job Job, stepIdx int) string

BuildStepWirePrompt 等同用户主任务。

func FormatEnqueueOK

func FormatEnqueueOK(job Job) string

FormatEnqueueOK 入队成功回执:明确「入队 ≠ 落盘」。

func FormatSidebarEnqueue

func FormatSidebarEnqueue(job Job) string

FormatSidebarEnqueue 隐藏队列入队时侧栏短话术(assistant)。

func FormatSidebarProgress

func FormatSidebarProgress(job Job, kind ProgressKind) string

FormatSidebarProgress 隐藏队列执行进度/终态侧栏短话术。

func FormatSteerBlock

func FormatSteerBlock(text string) string

func FormatSteerForSession

func FormatSteerForSession(text string) string

func GoalControlPath

func GoalControlPath(root, jobID string) string

GoalControlPath 项目根下 GOAL.yaml 绝对路径。

func InjectWriteTarget

func InjectWriteTarget(feed, targetRel string) string

InjectWriteTarget 以 targetRel 为权威落点:去掉旧「本轮只写」单行/多行块后置顶注入。 FeedExtra 与 TargetRel 并存时,执行节以 TargetRel 为准,避免写路径解析读到第一条旧路径。

func NormRel

func NormRel(rel string) string

NormRel 队列路径归一(与入队一致)。

func QueueSessionKey

func QueueSessionKey(jobID string) string

QueueSessionKey 批/写手编排键。

func WrapRetryPrompt

func WrapRetryPrompt(t Job) string

WrapRetryPrompt 失败重启信封:保留原任务意图,明确告知这是重试,先查磁盘进度再续写。

func WriteTargetLine

func WriteTargetLine(rel string) string

WriteTargetLine 前馈单行「本轮只写」(告知写哪;验收只汇总实际写盘路径,不强制再轮)。

Types

type AgentJobBrief

type AgentJobBrief struct {
	ID            string           `json:"id"`
	Type          string           `json:"type,omitempty"`
	Title         string           `json:"title,omitempty"`
	Status        string           `json:"status"`
	TargetRel     string           `json:"targetRel,omitempty"`
	ProgressHint  string           `json:"progressHint,omitempty"`
	StepDone      int              `json:"stepDone,omitempty"`
	StepTotal     int              `json:"stepTotal,omitempty"`
	GoalRound     int              `json:"goalRound,omitempty"`
	GoalMaxRounds int              `json:"goalMaxRounds,omitempty"`
	Steps         []AgentStepBrief `json:"steps,omitempty"`
	Error         string           `json:"error,omitempty"`
	PromptBrief   string           `json:"promptBrief,omitempty"`
}

AgentJobBrief Skill/MCP 可读任务摘要。

type AgentSnapshot

type AgentSnapshot struct {
	Note         string          `json:"note"`
	Paused       bool            `json:"paused"`
	PauseOnError bool            `json:"pauseOnError"`
	PauseReason  string          `json:"pauseReason,omitempty"`
	MaxParallel  int             `json:"maxParallel"`
	Stats        Stats           `json:"stats"`
	Jobs         []AgentJobBrief `json:"jobs"`
}

AgentSnapshot list_queue 给 Agent 的结构化快照(无 prompt/FeedExtra 全文)。

func FormatAgentSnapshot

func FormatAgentSnapshot(snap Snapshot) AgentSnapshot

FormatAgentSnapshot 压缩 Snapshot,供 list_queue。

type AgentStepBrief

type AgentStepBrief struct {
	Rel    string `json:"rel"`
	Title  string `json:"title,omitempty"`
	Status string `json:"status"`
	Error  string `json:"error,omitempty"`
}

AgentStepBrief Skill/MCP 可读节(不含 prompt 全文)。

type Executor

type Executor func(ctx context.Context, job Job) (runID string, err error)

Executor 执行单条 agent-turn(同步;取消靠 ctx)。

type File

type File struct {
	Version      int    `json:"version"`
	Paused       bool   `json:"paused"`
	PauseOnError bool   `json:"pauseOnError"`
	PauseReason  string `json:"pauseReason,omitempty"`
	MaxParallel  int    `json:"maxParallel,omitempty"`
	Jobs         []Job  `json:"jobs"`
	// LegacyTasks 仅迁移读旧 queue.json 的 tasks 字段。
	LegacyTasks []Job `json:"tasks,omitempty"`
	History     []Job `json:"history,omitempty"`
}

File 落盘格式。

type GoalEnqueue

type GoalEnqueue struct {
	Objective  string
	Driver     string
	Title      string
	SessionKey string // 空则 once:queue:{id}
	Purpose    string
	Model      string
	MaxRounds  int // <1 → DefaultGoalMaxRounds
	FeedExtra  string
}

GoalEnqueue EnqueueGoal 入参(避免一长串位置参数)。

type Job

type Job struct {
	ID         string `json:"id"`
	Type       string `json:"type"`
	Title      string `json:"title"`
	Prompt     string `json:"prompt"`
	WirePrompt string `json:"-"`
	Driver     string `json:"driver,omitempty"`
	Model      string `json:"model,omitempty"`
	TargetRel  string `json:"targetRel,omitempty"`
	Status     Status `json:"status"`
	TaskID     string `json:"taskId,omitempty"` // 最近一次执行台账
	Error      string `json:"error,omitempty"`
	LastError  string `json:"lastError,omitempty"`
	RetryCount int    `json:"retryCount,omitempty"`
	BatchID    string `json:"batchId,omitempty"`
	CreatedAt  int64  `json:"createdAt"`
	StartedAt  int64  `json:"startedAt,omitempty"`
	FinishedAt int64  `json:"finishedAt,omitempty"`

	SessionKey string `json:"sessionKey,omitempty"`
	Purpose    string `json:"purpose,omitempty"`
	// FeedExtra 入队时固化的前馈块(如练笔评分/路径);执行时并入 history_message.feedforward。
	FeedExtra    string `json:"feedExtra,omitempty"`
	Steps        []Step `json:"steps,omitempty"`
	StepDone     int    `json:"stepDone,omitempty"`
	StepTotal    int    `json:"stepTotal,omitempty"`
	ProgressHint string `json:"progressHint,omitempty"`

	GoalMaxRounds int `json:"goalMaxRounds,omitempty"`
	GoalRound     int `json:"goalRound,omitempty"`
	// GoalNext 遗留列(旧队列库可能仍有);不再写入或消费。
	GoalNext string `json:"goalNext,omitempty"`
	// SteerPending 运行中插话(人引导);下一工具结果或下一 Goal 轮注入后清空。
	SteerPending string `json:"steerPending,omitempty"`
}

Job 队列调度单元(可含多 step)。

type Manager

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

Manager 每项目一份队列;最多 MaxParallel 路并发执行 Executor。

func New

func New(exec Executor, onChange func(Snapshot)) *Manager

New 创建管理器;exec 不可空。

func (*Manager) Bind

func (m *Manager) Bind(root string)

Bind 切换项目根并加载队列;空 root 清空内存态。

func (*Manager) Brief

func (m *Manager) Brief() string

Brief Turn Transport 一行摘要。

func (*Manager) Cancel

func (m *Manager) Cancel(taskID string) error

Cancel 取消排队或打断执行中。

func (*Manager) CancelRunning

func (m *Manager) CancelRunning()

CancelRunning 取消全部执行中任务。

func (*Manager) Delete

func (m *Manager) Delete(taskID string) error

Delete 删除任务:若执行中先取消,再从队列移除。

func (*Manager) Enqueue

func (m *Manager) Enqueue(prompt, driver, title, targetRel string) (Job, error)

Enqueue 入队一条 agent-turn(sessionKey 空则执行时用侧栏 active)。 侧栏发送请用 App.QueueEnqueue / EnqueueSession 钉住 active。 MCP enqueue_agent_turn 默认 EnqueueSession(active);仅 session=isolated 时用 EnqueueIsolated。

func (*Manager) EnqueueGoal

func (m *Manager) EnqueueGoal(in GoalEnqueue) (Job, error)

EnqueueGoal 入队 Goal 外环:Prompt=objective;反复 Executor 直到 GOAL.yaml 终态或超轮。

func (*Manager) EnqueueIsolated

func (m *Manager) EnqueueIsolated(prompt, driver, title, targetRel string) (Job, error)

EnqueueIsolated 隐藏会话 once:queue:{id}:与侧栏 main 及并行任务隔离(MCP session=isolated / EnqueuePaths 空 session)。

func (*Manager) EnqueuePaths

func (m *Manager) EnqueuePaths(paths []string, promptTpl, driver, sessionKey, model string) ([]Job, error)

EnqueuePaths 按路径批量入队:一条任务内串行多节。 sessionKey 空则 once:queue:{id}(批处理隔离;对话入队请用 EnqueueSession/active)。 侧栏勾选入队应传入 activeSessionId 以续接对话记忆。

func (*Manager) EnqueueSession

func (m *Manager) EnqueueSession(prompt, driver, title, targetRel, sessionKey, purpose, model string) (Job, error)

EnqueueSession 入队并指定编排会话与 Purpose(ask=只读;空=Agent)。model 入队时钉死。 sessionKey 空:执行时回落侧栏 active(仅兼容旧调用;新 UI 应入队时钉死)。

func (*Manager) EnqueueSteps

func (m *Manager) EnqueueSteps(title, driver, sessionKey, purpose string, steps []Step, feedExtra string) (Job, error)

EnqueueSteps 入队一条多节任务;每节可自带 Prompt(覆盖 Job.Prompt)。 feedExtra 固化本轮评分/路径等前馈块(执行时并入 feedforward)。

func (*Manager) HasRunning

func (m *Manager) HasRunning() bool

HasRunning 是否有执行中任务。

func (*Manager) MaxParallel

func (m *Manager) MaxParallel() int

MaxParallel 当前并发上限。

func (*Manager) MoveBefore

func (m *Manager) MoveBefore(taskID, beforeID string) error

MoveBefore 将排队中任务移到 beforeID 之前(beforeID 空=排到 queued 队尾)。 仅 StatusQueued 可调序;running/终态不动。

func (*Manager) MoveByDir

func (m *Manager) MoveByDir(taskID, dir string) error

MoveByDir 将排队任务上移/下移一格(dir=up|down)。

func (*Manager) ResumeGoal

func (m *Manager) ResumeGoal(jobID string) (Job, error)

ResumeGoal 将 blocked Goal 控制面改回 active,并把已结束的 Goal Job 重新入队续跑。

func (*Manager) Retry

func (m *Manager) Retry(taskID string) (Job, error)

Retry 将失败/已取消任务就地改回排队(保留同一 task id / prompt / 目标),并标记失败重启。

func (*Manager) RetryFailed

func (m *Manager) RetryFailed() (int, error)

RetryFailed 将全部失败任务就地改回排队(失败重启);返回重启条数。

func (*Manager) Run

func (m *Manager) Run() (requeued int, err error)

Run 唯一「运行」:失败/已取消重回排队,开闸并调度。已有排队项时即使无失败也可点。

func (*Manager) RunningIDs

func (m *Manager) RunningIDs() []string

RunningIDs 当前内存中执行中的 task id(取消前快照用)。

func (*Manager) SetExecutor

func (m *Manager) SetExecutor(exec Executor)

SetExecutor 绑定执行器(Open 后由宿主注入)。

func (*Manager) SetMaxParallel

func (m *Manager) SetMaxParallel(n int)

SetMaxParallel 设置并发上限;<1 则回落为 1;落盘到 queue.json。

func (*Manager) SetOnChange

func (m *Manager) SetOnChange(fn func(Snapshot))

SetOnChange 绑定队列快照变更回调。

func (*Manager) SetPauseOnError

func (m *Manager) SetPauseOnError(v bool) error

SetPauseOnError 失败后是否自动暂停。

func (*Manager) SetPaused

func (m *Manager) SetPaused(paused bool) error

SetPaused 暂停/继续调度。

func (*Manager) SetProgressHook

func (m *Manager) SetProgressHook(h ProgressHook)

SetProgressHook 设置进度回调(节完成 / 终态)。

func (*Manager) Shutdown

func (m *Manager) Shutdown()

Shutdown 停止 worker(App 退出)。

func (*Manager) Snapshot

func (m *Manager) Snapshot() Snapshot

Snapshot 当前快照。

func (*Manager) Start

func (m *Manager) Start(taskID string) error

Start 单任务运行:失败/已取消重排队;已在排队则开闸调度。对齐稿舍「启动」。

func (*Manager) Steer

func (m *Manager) Steer(jobID, text string) (Job, error)

func (*Manager) Stop

func (m *Manager) Stop() error

Stop 唯一「停止」:关闸并取消执行中任务。

func (*Manager) TakeSteerPending

func (m *Manager) TakeSteerPending(jobID string) string

type ProgressHook

type ProgressHook func(job Job, kind ProgressKind)

ProgressHook 任务进度(节完成/终态);在锁外调用,供侧栏话术等。

type ProgressKind

type ProgressKind string

ProgressKind 隐藏会话任务写回侧栏的进度阶段。

const (
	ProgressStep      ProgressKind = "step"
	ProgressDone      ProgressKind = "done"
	ProgressError     ProgressKind = "error"
	ProgressCancelled ProgressKind = "cancelled"
)

type Snapshot

type Snapshot struct {
	Paused       bool   `json:"paused"`
	PauseOnError bool   `json:"pauseOnError"`
	PauseReason  string `json:"pauseReason,omitempty"`
	MaxParallel  int    `json:"maxParallel"`
	Jobs         []Job  `json:"jobs"`
	Stats        Stats  `json:"stats"`
}

Snapshot UI / MCP 可见快照。

type Stats

type Stats struct {
	Queued    int `json:"queued"`
	Running   int `json:"running"`
	Done      int `json:"done"`
	Error     int `json:"error"`
	Cancelled int `json:"cancelled"`
}

Stats 聚合。

type Status

type Status string

Status 队列 Job 可见状态。

const (
	StatusQueued    Status = "queued"
	StatusRunning   Status = "running"
	StatusDone      Status = "done"
	StatusError     Status = "error"
	StatusCancelled Status = "cancelled"
)

type Step

type Step struct {
	Rel    string     `json:"rel"`
	Title  string     `json:"title,omitempty"`
	Prompt string     `json:"prompt,omitempty"` // 非空则覆盖 Job.Prompt(风格训练等)
	Status StepStatus `json:"status"`
	TaskID string     `json:"taskId,omitempty"` // 执行台账 id(agenttask)
	Error  string     `json:"error,omitempty"`
}

Step 批 Job 内的一节;串行执行、共用 SessionKey。

type StepStatus

type StepStatus string

StepStatus 批内节状态。

const (
	StepPending StepStatus = "pending"
	StepRunning StepStatus = "running"
	StepDone    StepStatus = "done"
	StepError   StepStatus = "error"
)

Jump to

Keyboard shortcuts

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