Help us shape the future of Go! Take the 2026 Go Developer Survey

taskverification

package
v0.4.4 Latest Latest
Warning

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

Go to latest
Published: Jun 7, 2026 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultCommandTimeout = 30 * time.Second

DefaultCommandTimeout is the per-command timeout applied to template-defined shell commands.

Variables

This section is empty.

Functions

func ConditionTechnicalDescription added in v0.2.3

func ConditionTechnicalDescription(condition Condition) string

ConditionTechnicalDescription explains the built-in meaning of a condition in concise prose.

func InvariantTechnicalDescription added in v0.2.3

func InvariantTechnicalDescription(_ Invariant) string

InvariantTechnicalDescription explains how Centian enforces an invariant.

Types

type ActionEventTaskContext

type ActionEventTaskContext struct {
	// RequestID is the proxied action-event request identifier.
	RequestID string `json:"requestId"`
	// TaskRunID identifies the active task run associated with the action event.
	TaskRunID string `json:"taskRunId"`
	// InvocationPhasePath is the workflow path active when the action event was invoked.
	InvocationPhasePath TaskPhase `json:"invocationPhasePath"`
	// InvocationNodeKind is the semantic workflow node kind active when the action event was invoked.
	InvocationNodeKind WorkflowNodeKind `json:"invocationNodeKind,omitempty"`
	// CreatedAtUnixMilli is the timestamp in Unix milliseconds when the task context snapshot was recorded.
	CreatedAtUnixMilli int64 `json:"createdAtUnixMilli"`
}

ActionEventTaskContext associates an action event with the active task snapshot.

type Check

type Check struct {
	// ID is the author-defined identifier for this check.
	ID string `yaml:"id" json:"id"`
	// Description is the optional human-facing explanation of what this check enforces.
	Description string `yaml:"description,omitempty" json:"description,omitempty"`
	// Command is the shell command Centian executes when evaluating the check.
	Command string `yaml:"command" json:"command"`
	// PreConditions are assertions that must pass before the step action is accepted.
	PreConditions []Condition `yaml:"pre_conditions,omitempty" json:"pre_conditions,omitempty"`
	// PostConditions are assertions that must pass after the step action completes.
	PostConditions []Condition `yaml:"post_conditions,omitempty" json:"post_conditions,omitempty"`
}

Check defines one command plus its pre/post conditions.

type CheckpointHint

type CheckpointHint struct {
	// Enabled indicates whether this node should advertise checkpoint capability to clients.
	Enabled bool `yaml:"enabled,omitempty" json:"enabled,omitempty"`
}

CheckpointHint stores declarative checkpoint metadata for later runtime use.

type CompiledWorkflow

type CompiledWorkflow struct {
	// Nodes maps every compiled workflow path to its normalized node definition and is not serialized.
	Nodes map[TaskPhase]WorkflowNode `json:"-"`
	// OnboardingPath is the canonical workflow path for the onboarding node and is not serialized.
	OnboardingPath TaskPhase `json:"-"`
	// PlanningPath is the canonical workflow path for the planning node and is not serialized.
	PlanningPath TaskPhase `json:"-"`
	// FirstExecutablePath is the first compiled executable workflow path and is not serialized.
	FirstExecutablePath TaskPhase `json:"-"`
	// WorkflowSteps is the ordered list of compiled executable steps and is not serialized.
	WorkflowSteps []Step `json:"-"`
}

CompiledWorkflow stores normalized workflow nodes derived from the template schema.

type Condition

type Condition struct {
	// Type selects the concrete condition evaluator such as exit code, file existence, or substring matching.
	Type string `yaml:"type" json:"type"`
	// Value is the primary operand for single-value conditions such as exit_code or file_contains.
	Value any `yaml:"value,omitempty" json:"value,omitempty"`
	// Values stores multi-value operands for condition types that compare against several values.
	Values []any `yaml:"values,omitempty" json:"values,omitempty"`
	// Path is the project-relative file path targeted by file-based conditions.
	Path string `yaml:"path,omitempty" json:"path,omitempty"`
}

Condition defines one assertion evaluated against a command result or file.

type EventStore

type EventStore interface {
	AppendTaskEvent(*TaskEvent) error
	AppendActionEventTaskContext(ActionEventTaskContext) error
	TaskEvents() ([]TaskEvent, error)
	ActionEventTaskContexts() ([]ActionEventTaskContext, error)
}

EventStore records task lifecycle events and action-to-task links.

type ExecutionNodeSpec

type ExecutionNodeSpec struct {
	// ID is the template-authored node identifier used to build the workflow path.
	ID string `yaml:"id" json:"id"`
	// Kind optionally overrides whether this node is executable or a waiting-for-approval node.
	Kind WorkflowNodeKind `yaml:"kind,omitempty" json:"kind,omitempty"`
	// Name is the display label shown for this node in task summaries and UIs.
	Name string `yaml:"name,omitempty" json:"name,omitempty"`
	// Description is a short human-facing summary of the node's purpose.
	Description string `yaml:"description,omitempty" json:"description,omitempty"`
	// Instructions tells the agent what this node expects before it can be completed.
	Instructions string `yaml:"instructions,omitempty" json:"instructions,omitempty"`
	// AllowedTools is the tool allowlist pattern set active while this node is current.
	AllowedTools []string `yaml:"tools_allowed,omitempty" json:"toolsAllowed,omitempty"`
	// Checkpoint holds optional metadata about whether this node should surface a checkpoint hint.
	Checkpoint *CheckpointHint `yaml:"checkpoint,omitempty" json:"checkpoint,omitempty"`
	// Checks defines the command-driven assertions Centian will evaluate for this node.
	Checks []Check `yaml:"checks,omitempty" json:"checks,omitempty"`
	// Invariants defines command outputs that must remain stable across the node's lifetime.
	Invariants []Invariant `yaml:"invariants,omitempty" json:"invariants,omitempty"`
	// Next optionally overrides the default next workflow path after this node passes.
	Next string `yaml:"next,omitempty" json:"next,omitempty"`
	// SubSteps nests additional execution nodes beneath this logical node in author-facing YAML.
	SubSteps []ExecutionNodeSpec `yaml:"sub_steps,omitempty" json:"subSteps,omitempty"`
}

ExecutionNodeSpec describes one author-facing execution or approval node.

type InMemoryEventStore

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

InMemoryEventStore stores task events in memory for the current process.

func NewInMemoryEventStore

func NewInMemoryEventStore() *InMemoryEventStore

NewInMemoryEventStore creates an empty in-memory task event store.

func (*InMemoryEventStore) ActionEventTaskContexts

func (s *InMemoryEventStore) ActionEventTaskContexts() ([]ActionEventTaskContext, error)

ActionEventTaskContexts returns a copy of all stored action-to-task links.

func (*InMemoryEventStore) AppendActionEventTaskContext

func (s *InMemoryEventStore) AppendActionEventTaskContext(ctx ActionEventTaskContext) error

AppendActionEventTaskContext stores one action-to-task link in memory.

func (*InMemoryEventStore) AppendTaskEvent

func (s *InMemoryEventStore) AppendTaskEvent(event *TaskEvent) error

AppendTaskEvent stores one task lifecycle event in memory.

func (*InMemoryEventStore) TaskEvents

func (s *InMemoryEventStore) TaskEvents() ([]TaskEvent, error)

TaskEvents returns a copy of all stored lifecycle events.

type Invariant

type Invariant struct {
	// ID is the author-defined identifier for this invariant.
	ID string `yaml:"id" json:"id"`
	// Description is the optional human-facing explanation of what this invariant protects.
	Description string `yaml:"description,omitempty" json:"description,omitempty"`
	// Command is the shell command whose output Centian snapshots and compares for drift.
	Command string `yaml:"command" json:"command"`
}

Invariant defines one command whose stdout must remain stable across a step.

type LifecycleNodeSpec

type LifecycleNodeSpec struct {
	// Instructions tells the agent what to accomplish during this lifecycle phase.
	Instructions string `yaml:"instructions,omitempty" json:"instructions,omitempty"`
	// AllowedTools is the tool allowlist pattern set active while this node is current.
	AllowedTools []string `yaml:"tools_allowed,omitempty" json:"toolsAllowed,omitempty"`
	// Checkpoint holds optional metadata about whether this node should be checkpointed later.
	Checkpoint *CheckpointHint `yaml:"checkpoint,omitempty" json:"checkpoint,omitempty"`
}

LifecycleNodeSpec describes a non-execution workflow node.

type OnboardingArtifact

type OnboardingArtifact struct {
	// TaskSummary is the agent's concise description of the project and task context discovered during onboarding.
	TaskSummary string `json:"taskSummary"`
	// ArtifactMap records important project artifacts the agent identified during onboarding.
	ArtifactMap []OnboardingArtifactRef `json:"artifactMap,omitempty"`
	// CommonCommands records useful project commands the agent discovered during onboarding.
	CommonCommands []OnboardingCommand `json:"commonCommands,omitempty"`
	// Constraints captures project or workflow constraints the agent believes it must respect.
	Constraints []string `json:"constraints,omitempty"`
	// OpenQuestions captures unresolved uncertainties the agent wants to preserve before planning.
	OpenQuestions []string `json:"openQuestions,omitempty"`
}

OnboardingArtifact stores reusable task/environment discovery context.

type OnboardingArtifactRef

type OnboardingArtifactRef struct {
	// Path is the project-relative path to the discovered artifact.
	Path string `json:"path"`
	// Kind classifies the artifact, for example source, test, config, or docs.
	Kind string `json:"kind"`
	// Notes stores optional agent commentary about why the artifact matters.
	Notes string `json:"notes,omitempty"`
}

OnboardingArtifactRef describes a project artifact discovered during onboarding.

type OnboardingCommand

type OnboardingCommand struct {
	// Command is the concrete shell command the agent discovered.
	Command string `json:"command"`
	// Purpose explains why the command is useful in this project context.
	Purpose string `json:"purpose"`
}

OnboardingCommand describes a useful project command discovered during onboarding.

type PlanningArtifact

type PlanningArtifact struct {
	// PlanSummary captures the execution-defining planning summary that is frozen at planning completion.
	PlanSummary string `json:"planSummary,omitempty"`
	// SelectedFiles lists the project-relative files the agent expects to inspect or edit during execution.
	SelectedFiles []string `json:"selectedFiles,omitempty"`
	// Parameters stores the template placeholder values the agent freezes at planning completion.
	Parameters map[string]string `json:"parameters,omitempty"`
	// Invariants lists additional invariants the agent wants frozen as part of the planning contract.
	Invariants []string `json:"invariants,omitempty"`
}

PlanningArtifact stores the frozen execution inputs produced during planning.

type PlanningNodeSpec

type PlanningNodeSpec struct {
	// Instructions tells the agent what planning contract it must produce before execution begins.
	Instructions string `yaml:"instructions,omitempty" json:"instructions,omitempty"`
	// AllowedTools is the tool allowlist pattern set active during planning.
	AllowedTools []string `yaml:"tools_allowed,omitempty" json:"toolsAllowed,omitempty"`
	// Checkpoint holds optional metadata about whether planning should emit a checkpoint hint.
	Checkpoint *CheckpointHint `yaml:"checkpoint,omitempty" json:"checkpoint,omitempty"`
	// EditableFields lists which planning.parameters entries the planning step may revise.
	EditableFields []string `yaml:"editable_fields,omitempty" json:"editableFields,omitempty"`
	// RequiredInputs lists the planning inputs that must be present before execution can start.
	RequiredInputs []string `yaml:"required_inputs,omitempty" json:"requiredInputs,omitempty"`
	// Next optionally overrides the default next workflow path after planning completes.
	Next string `yaml:"next,omitempty" json:"next,omitempty"`
}

PlanningNodeSpec describes the planning workflow node.

type PlanningValidationError added in v0.2.3

type PlanningValidationError struct {
	RequiredParameterNames []string
	ProvidedParameterNames []string
	MissingParameters      []string
	UnknownParameters      []string
}

PlanningValidationError captures machine-readable planning contract failures.

func (*PlanningValidationError) Error added in v0.2.3

func (e *PlanningValidationError) Error() string

Error returns a concise human-facing validation message.

type RecoveryAction added in v0.4.0

type RecoveryAction struct {
	// Kind classifies the recovery option so agents can route it consistently.
	Kind string `json:"kind"`
	// Summary is the human-facing recovery instruction.
	Summary string `json:"summary"`
	// Tool identifies the suggested tool to call when the recovery is tool-driven.
	Tool string `json:"tool,omitempty"`
	// Arguments contains suggested tool arguments for the recovery action.
	Arguments map[string]any `json:"arguments,omitempty"`
}

RecoveryAction describes one agent-facing recovery option for a failed step action.

type RunState

type RunState struct {
	// RunID is the stable identifier for this registered task run.
	RunID string `json:"taskRunId"`
	// TemplateID is the identifier of the template this run was registered from.
	TemplateID string `json:"templateId"`
	// TaskDescription is the user/agent supplied description of this specific task run.
	TaskDescription string `json:"taskDescription,omitempty"`
	// SelectedTemplate is the original unresolved template chosen at registration time and is not serialized.
	SelectedTemplate Template `json:"-"`
	// Status is the overall lifecycle status of the task run.
	Status TaskStatus `json:"status"`
	// Phase is the current workflow path the run is positioned in.
	Phase TaskPhase `json:"phase"`
	// Onboarding stores the persisted onboarding artifact once onboarding completes.
	Onboarding *OnboardingArtifact `json:"onboarding,omitempty"`
	// Planning stores the frozen planning artifact once planning completes.
	Planning *PlanningArtifact `json:"planning,omitempty"`
	// WorkflowReady reports whether planning has completed and execution can proceed.
	WorkflowReady bool `json:"executionReady"`
	// RunnableTemplate holds the resolved execution-ready template for this run and is not serialized.
	RunnableTemplate *Template `json:"-"`
	// Steps stores the mutable per-step runtime state for the compiled workflow.
	Steps []StepState `json:"steps,omitempty"`
	// LastFailureMessage stores the most recent human-facing failure explanation for the run.
	LastFailureMessage string `json:"lastFailureMessage,omitempty"`
	// ExplicitFailReason stores the direct reason supplied when the task was explicitly failed.
	ExplicitFailReason string `json:"explicitFailReason,omitempty"`
	// LastActivityAt records the last observed task activity time in Unix milliseconds.
	LastActivityAt int64 `json:"lastActivityAtUnixMilli,omitempty"`
	// ExpiresAt records the inactivity timeout deadline in Unix milliseconds when applicable.
	ExpiresAt int64 `json:"expiresAtUnixMilli,omitempty"`
}

RunState stores the mutable session-scoped state of one registered task.

func (*RunState) CurrentNode

func (r *RunState) CurrentNode() (WorkflowNode, bool)

CurrentNode returns the active compiled workflow node for the run.

func (*RunState) NextNodePath

func (r *RunState) NextNodePath() TaskPhase

NextNodePath returns the deterministic next workflow node when known.

type RunStore added in v0.4.0

type RunStore interface {
	UpsertTaskRunSnapshot(context.Context, *taskruns.PersistedRunSnapshot) error
}

RunStore persists the latest snapshot for one task run.

type Service

type Service struct {
	TemplateDir    string
	WorkingDir     string
	EventStore     EventStore
	RunStore       RunStore
	CommandTimeout time.Duration
	// contains filtered or unexported fields
}

Service loads templates and manages the task verification runtime.

func NewService

func NewService(templateDir, workingDir string) *Service

NewService creates a task verification service rooted at the given directories.

func NewServiceWithOptions added in v0.2.5

func NewServiceWithOptions(templateDir, workingDir string, options ServiceOptions) *Service

NewServiceWithOptions creates a task verification service with explicit loader configuration.

func (*Service) ActionEventTaskContexts

func (s *Service) ActionEventTaskContexts() ([]ActionEventTaskContext, error)

ActionEventTaskContexts returns the currently recorded action-to-task links.

func (*Service) CompleteOnboarding

func (s *Service) CompleteOnboarding(ctx context.Context, run *RunState, artifact *OnboardingArtifact) error

CompleteOnboarding validates and persists onboarding context, then advances to planning.

func (*Service) CompletePlanning

func (s *Service) CompletePlanning(ctx context.Context, run *RunState, artifact *PlanningArtifact) error

CompletePlanning validates and freezes planning context, then enters execution.

func (*Service) CompleteStep

func (s *Service) CompleteStep(ctx context.Context, run *RunState, stepNumber int) (*StepResult, error)

CompleteStep runs postconditions and invariant verification for an active step.

func (*Service) FailTask

func (s *Service) FailTask(ctx context.Context, run *RunState, reason string) error

FailTask marks a task run as failed without running additional checks.

func (*Service) ListTemplates

func (s *Service) ListTemplates() ([]TemplateSummary, error)

ListTemplates returns the task templates currently available on disk.

func (*Service) RecordActionEventTaskContext

func (s *Service) RecordActionEventTaskContext(run *RunState, requestID string, invocationPhase TaskPhase, invocationNodeKind WorkflowNodeKind) error

RecordActionEventTaskContext appends one task snapshot for an action event.

func (*Service) RecordActionEventTaskContextForRunID

func (s *Service) RecordActionEventTaskContextForRunID(runID, requestID string, invocationPhase TaskPhase, invocationNodeKind WorkflowNodeKind) error

RecordActionEventTaskContextForRunID appends one task snapshot for an action event using an immutable run identifier.

func (*Service) RecordTaskEvent

func (s *Service) RecordTaskEvent(
	run *RunState,
	sessionID,
	principalID,
	clientName,
	clientVersion string,
	sourcePhase TaskPhase,
	sourceNodeKind WorkflowNodeKind,
	resultingPhase TaskPhase,
	resultingNodeKind WorkflowNodeKind,
	eventType TaskEventType,
	outcome TaskEventOutcome,
	relatedActionRequestID string,
	payload map[string]any,
) error

RecordTaskEvent appends one lifecycle event to the configured store.

func (*Service) RegisterTask

func (s *Service) RegisterTask(ctx context.Context, templateID string) (*RunState, error)

RegisterTask creates a shell task run from the selected template.

func (*Service) RegisterTaskWithDescription added in v0.4.3

func (s *Service) RegisterTaskWithDescription(ctx context.Context, templateID, taskDescription string) (*RunState, error)

RegisterTaskWithDescription creates a task run with an optional human-facing task description.

func (*Service) RestartTask

func (s *Service) RestartTask(ctx context.Context, run *RunState) error

RestartTask resets an existing task run back to its onboarding shell state.

func (*Service) ResumeTask added in v0.2.2

func (s *Service) ResumeTask(ctx context.Context, run *RunState) error

ResumeTask reactivates a timed-out task run without resetting its workflow progress.

func (*Service) StartStep

func (s *Service) StartStep(ctx context.Context, run *RunState, stepNumber int) (*StepResult, error)

StartStep validates the next step, runs its preconditions, and captures invariant baselines.

func (*Service) TaskEvents

func (s *Service) TaskEvents() ([]TaskEvent, error)

TaskEvents returns the currently recorded task lifecycle events.

func (*Service) TimeoutTask added in v0.2.2

func (s *Service) TimeoutTask(ctx context.Context, run *RunState) error

TimeoutTask marks an active task run as timed out without changing its phase or steps.

type ServiceOptions added in v0.2.5

type ServiceOptions struct {
	BuiltinTemplates fs.FS
}

ServiceOptions configures non-runtime dependencies for the task verification service.

type Step

type Step struct {
	// ID is the author-defined identifier for this compiled executable node.
	ID string `json:"id"`
	// Path is the fully qualified workflow path for this step.
	Path TaskPhase `json:"path"`
	// ParentPath is the logical parent workflow path that contains this step.
	ParentPath TaskPhase `json:"parentPath,omitempty"`
	// NextPath is the workflow path Centian should enter after this step passes.
	NextPath TaskPhase `json:"nextPath,omitempty"`
	// Name is the display label exposed to agents and UIs for this step.
	Name string `json:"name,omitempty"`
	// Description is the short human-facing summary of this step.
	Description string `json:"description,omitempty"`
	// Instructions tells the agent what this step expects before completion.
	Instructions string `json:"instructions,omitempty"`
	// AllowedTools is the tool allowlist pattern set active while this step is current.
	AllowedTools []string `json:"allowedTools,omitempty"`
	// Checkpoint holds optional metadata about whether this step should surface a checkpoint hint.
	Checkpoint *CheckpointHint `json:"checkpoint,omitempty"`
	// Checks contains the command-driven assertions Centian evaluates for the step.
	Checks []Check `json:"checks"`
	// Invariants contains the command outputs that must remain stable while the step is active.
	Invariants []Invariant `json:"invariants,omitempty"`
}

Step defines one compiled executable workflow node.

type StepFailureKind

type StepFailureKind string

StepFailureKind classifies the high-level reason a step failed.

const (
	// StepFailureKindCheck indicates a failed check or condition.
	StepFailureKindCheck StepFailureKind = "check"
	// StepFailureKindInvariant indicates invariant capture or verification failed.
	StepFailureKindInvariant StepFailureKind = "invariant"
	// StepFailureKindCommandExecution indicates the command itself failed to execute as expected.
	StepFailureKindCommandExecution StepFailureKind = "command_execution"
)

type StepFailurePhase

type StepFailurePhase string

StepFailurePhase identifies which verification stage produced the failure.

const (
	// StepFailurePhasePrecondition marks a precondition failure.
	StepFailurePhasePrecondition StepFailurePhase = "precondition"
	// StepFailurePhasePostcondition marks a postcondition failure.
	StepFailurePhasePostcondition StepFailurePhase = "postcondition"
	// StepFailurePhaseInvariantCapture marks invariant baseline capture failure.
	StepFailurePhaseInvariantCapture StepFailurePhase = "invariant_capture"
	// StepFailurePhaseInvariantVerify marks invariant drift detection failure.
	StepFailurePhaseInvariantVerify StepFailurePhase = "invariant_verify"
	// StepFailurePhaseCommandExecution marks an underlying command execution error.
	StepFailurePhaseCommandExecution StepFailurePhase = "command_execution"
)

type StepResult

type StepResult struct {
	// Passed indicates whether the requested step action succeeded.
	Passed bool `json:"passed"`
	// Message is the primary human-facing explanation for the step outcome.
	Message string `json:"message"`
	// Step is the 1-based execution step number the result refers to.
	Step int `json:"step"`
	// StepID is the author-defined identifier for the step the result refers to.
	StepID string `json:"stepId"`
	// Status is the overall task run status after the step action completed.
	Status TaskStatus `json:"status"`
	// Phase is the current workflow path after the step action completed.
	Phase TaskPhase `json:"phase"`
	// StepStatus is the updated lifecycle status for the referenced step.
	StepStatus StepStatus `json:"stepStatus"`
	// FailureKind classifies the high-level reason the step action failed.
	FailureKind StepFailureKind `json:"failureKind,omitempty"`
	// FailurePhase identifies which verification stage produced the failure.
	FailurePhase StepFailurePhase `json:"failurePhase,omitempty"`
	// FailedCheckID identifies the failing check when a check caused the step to fail.
	FailedCheckID string `json:"failedCheckId,omitempty"`
	// FailedCheckDescription is the template-authored description for the failing check, when available.
	FailedCheckDescription string `json:"failedCheckDescription,omitempty"`
	// FailedInvariantID identifies the failing invariant when invariant capture or verification failed.
	FailedInvariantID string `json:"failedInvariantId,omitempty"`
	// Summary is an optional concise summary of the step outcome suitable for UIs.
	Summary string `json:"summary,omitempty"`
	// Retryable indicates whether the agent can recover and retry without restarting the task.
	Retryable bool `json:"retryable,omitempty"`
	// RestartRequired indicates whether the agent must restart the task to continue.
	RestartRequired bool `json:"restartRequired,omitempty"`
	// RecoveryActions enumerates structured recovery options for failed step actions.
	RecoveryActions []RecoveryAction `json:"recoveryActions,omitempty"`
	// ExitCode is the command exit code when command execution produced one.
	ExitCode *int `json:"exitCode,omitempty"`
	// StdoutSnippet is the truncated stdout excerpt relevant to the step outcome.
	StdoutSnippet string `json:"stdoutSnippet,omitempty"`
	// StderrSnippet is the truncated stderr excerpt relevant to the step outcome.
	StderrSnippet string `json:"stderrSnippet,omitempty"`
}

StepResult is the MCP-facing outcome of starting or completing a step.

type StepState

type StepState struct {
	// ID is the author-defined identifier for the compiled step this state belongs to.
	ID string `json:"id"`
	// Path is the fully qualified workflow path for the compiled step this state belongs to.
	Path TaskPhase `json:"path"`
	// Status is the mutable lifecycle status for this step within the current run.
	Status StepStatus `json:"status"`
	// InvariantBaselines stores captured invariant outputs for comparison and is intentionally not serialized.
	InvariantBaselines map[string]string `json:"-"`
}

StepState stores mutable runtime state for a single step.

type StepStatus

type StepStatus string

StepStatus enumerates the per-step lifecycle states.

const (
	// StepStatusPending indicates the step has not started.
	StepStatusPending StepStatus = "pending"
	// StepStatusActive indicates the step is currently in progress.
	StepStatusActive StepStatus = "active"
	// StepStatusPassed indicates the step completed successfully.
	StepStatusPassed StepStatus = "passed"
	// StepStatusFailed indicates the step failed verification.
	StepStatusFailed StepStatus = "failed"
)

type StepSummary

type StepSummary struct {
	// Step is the 1-based execution step number shown to the agent.
	Step int `json:"step"`
	// ID is the author-defined identifier for this compiled execution step.
	ID string `json:"id"`
	// Path is the fully qualified workflow path for the step.
	Path TaskPhase `json:"path"`
	// Name is the display label shown for the step in listings.
	Name string `json:"name,omitempty"`
	// Description is the short human-facing summary shown for the step.
	Description string `json:"description,omitempty"`
	// Instructions is the step guidance exposed in lightweight MCP summaries.
	Instructions string `json:"instructions,omitempty"`
}

StepSummary is the lightweight view of one compiled execution step returned to MCP clients.

type Task

type Task struct {
	// ID is the stable template identifier used when registering a task.
	ID string `yaml:"id" json:"id"`
	// Name is the display name shown to agents and UIs.
	Name string `yaml:"name" json:"name"`
	// Description is the short summary of what the template is meant to accomplish.
	Description string `yaml:"description" json:"description"`
	// Instructions provides template-level guidance that agents should treat as the workflow source of truth.
	Instructions string `yaml:"instructions,omitempty" json:"instructions,omitempty"`
}

Task describes the human-facing identity of a template.

type TaskEvent

type TaskEvent struct {
	// ID is the stable identifier for this persisted task lifecycle event.
	ID string `json:"id"`
	// SchemaVersion is the event schema version used when the event was written.
	SchemaVersion int `json:"schemaVersion"`
	// CreatedAtUnixMilli is the event creation time in Unix milliseconds.
	CreatedAtUnixMilli int64 `json:"createdAtUnixMilli"`
	// TaskRunID identifies which task run this lifecycle event belongs to.
	TaskRunID string `json:"taskRunId"`
	// SessionID records the upstream MCP session associated with the event when available.
	SessionID string `json:"sessionId,omitempty"`
	// TemplateID identifies the template backing the task run that emitted this event.
	TemplateID string `json:"templateId"`
	// PrincipalID records the authenticated principal associated with the event when available.
	PrincipalID string `json:"principalId,omitempty"`
	// ClientName is the MCP client name reported during session initialization.
	ClientName string `json:"clientName,omitempty"`
	// ClientVersion is the MCP client version reported during session initialization.
	ClientVersion string `json:"clientVersion,omitempty"`
	// PhasePath is the workflow path active when the lifecycle event was recorded.
	PhasePath TaskPhase `json:"phasePath"`
	// NodeKind is the semantic workflow node kind active when the event was recorded.
	NodeKind WorkflowNodeKind `json:"nodeKind,omitempty"`
	// ResultingPhasePath is the workflow path after the lifecycle action completed.
	ResultingPhasePath TaskPhase `json:"resultingPhasePath"`
	// ResultingNodeKind is the semantic workflow node kind after the lifecycle action completed.
	ResultingNodeKind WorkflowNodeKind `json:"resultingNodeKind,omitempty"`
	// EventType identifies which lifecycle operation produced this append-only record.
	EventType TaskEventType `json:"eventType"`
	// Outcome records whether the lifecycle operation succeeded or failed.
	Outcome TaskEventOutcome `json:"outcome"`
	// RelatedActionRequestID links this lifecycle event to a proxied action-event request when available.
	RelatedActionRequestID string `json:"relatedActionRequestId,omitempty"`
	// Payload stores event-specific opaque JSON data such as step failure details or submitted artifacts.
	Payload json.RawMessage `json:"payload,omitempty"`
}

TaskEvent is the append-only lifecycle record for one task run.

type TaskEventOutcome

type TaskEventOutcome string

TaskEventOutcome captures whether a lifecycle operation succeeded.

const (
	// TaskEventOutcomeSucceeded indicates the lifecycle event succeeded.
	TaskEventOutcomeSucceeded TaskEventOutcome = "succeeded"
	// TaskEventOutcomeFailed indicates the lifecycle event failed.
	TaskEventOutcomeFailed TaskEventOutcome = "failed"
)

type TaskEventType

type TaskEventType string

TaskEventType identifies one task lifecycle event.

const (
	// TaskEventTypeRegistered records task registration.
	TaskEventTypeRegistered TaskEventType = "task_registered"
	// TaskEventTypeOnboardingCompleted records onboarding completion.
	TaskEventTypeOnboardingCompleted TaskEventType = "onboarding_completed"
	// TaskEventTypePlanningCompleted records planning completion.
	TaskEventTypePlanningCompleted TaskEventType = "planning_completed"
	// TaskEventTypeStepStarted records step start.
	TaskEventTypeStepStarted TaskEventType = "step_started"
	// TaskEventTypeStepCompleted records step completion.
	TaskEventTypeStepCompleted TaskEventType = "step_completed"
	// TaskEventTypeRestarted records task restart.
	TaskEventTypeRestarted TaskEventType = "task_restarted"
	// TaskEventTypeFailed records explicit task failure.
	TaskEventTypeFailed TaskEventType = "task_failed"
	// TaskEventTypeTimedOut records automatic inactivity timeout.
	TaskEventTypeTimedOut TaskEventType = "task_timed_out"
	// TaskEventTypeResumed records resuming a timed-out run in place.
	TaskEventTypeResumed TaskEventType = "task_resumed"
	// TaskEventTypeApprovalWaitEntered records entry into an approval wait node.
	TaskEventTypeApprovalWaitEntered TaskEventType = "approval_wait_entered"
)

type TaskPhase

type TaskPhase string

TaskPhase enumerates the workflow position of a task run.

const (
	// TaskPhaseInitialization is the workflow path before registering a task.
	TaskPhaseInitialization TaskPhase = "initialization"
	// TaskPhaseOnboarding is the onboarding workflow path.
	TaskPhaseOnboarding TaskPhase = "onboarding"
	// TaskPhasePlanning is the planning workflow path.
	TaskPhasePlanning TaskPhase = "planning"
	// TaskPhaseScaffolding is the reserved scaffolding root path.
	TaskPhaseScaffolding TaskPhase = "scaffolding"
	// TaskPhaseExecution is the reserved execution root path.
	TaskPhaseExecution TaskPhase = "execution"
	// TaskPhaseWaitingForApproval is the reserved approval root path.
	TaskPhaseWaitingForApproval TaskPhase = "waiting_for_approval"
)

type TaskStatus

type TaskStatus string

TaskStatus enumerates the overall condition of a task run.

const (
	// TaskStatusActive indicates a task run can continue executing.
	TaskStatusActive TaskStatus = "active"
	// TaskStatusCompleted indicates a task run finished successfully.
	TaskStatusCompleted TaskStatus = "completed"
	// TaskStatusFailed indicates a task run ended in failure.
	TaskStatusFailed TaskStatus = "failed"
	// TaskStatusTimedOut indicates a task run was paused due to inactivity.
	TaskStatusTimedOut TaskStatus = "timed_out"
)

type Template

type Template struct {
	// Version is the template schema version declared in the YAML document.
	Version string `yaml:"version" json:"version"`
	// Task is the human-facing identity and description block for the template.
	Task Task `yaml:"task" json:"task"`
	// Parameters lists the agent-supplied placeholder values the template expects before planning can complete.
	Parameters []TemplateParameter `yaml:"parameters,omitempty" json:"parameters,omitempty"`
	// Workflow is the declarative lifecycle definition authored in the template YAML.
	Workflow *Workflow `yaml:"workflow" json:"workflow"`
	// CompiledWorkflow is the normalized internal workflow graph derived from the authored template and is not serialized.
	CompiledWorkflow *CompiledWorkflow `yaml:"-" json:"-"`
}

Template defines one task verification template loaded from YAML.

func (*Template) ParameterDefinitions

func (t *Template) ParameterDefinitions() []TemplateParameter

ParameterDefinitions returns placeholder metadata in stable name order.

func (*Template) RequiredParameterNames

func (t *Template) RequiredParameterNames() []string

RequiredParameterNames returns the placeholder names referenced by the template.

func (*Template) Resolve

func (t *Template) Resolve(parameters map[string]string) (Template, error)

Resolve substitutes the provided parameter values into the template.

func (*Template) StepSummaries

func (t *Template) StepSummaries() []StepSummary

StepSummaries returns step metadata in template order.

func (*Template) Validate

func (t *Template) Validate() error

Validate checks whether the template is structurally valid before registration.

func (*Template) WorkflowNode

func (t *Template) WorkflowNode(path TaskPhase) (WorkflowNode, bool)

WorkflowNode returns one compiled workflow node by path.

type TemplateParameter

type TemplateParameter struct {
	// Name is the placeholder identifier agents must fill in planning.parameters before planning completes.
	Name string `yaml:"name" json:"name"`
	// Description explains what value the agent should determine during onboarding and planning for this parameter.
	Description string `yaml:"description,omitempty" json:"description,omitempty"`
}

TemplateParameter describes one agent-provided parameter expected by a template.

type TemplateSummary

type TemplateSummary struct {
	// ID is the stable template identifier exposed to MCP clients.
	ID string `json:"id"`
	// Name is the display name shown in task template listings.
	Name string `json:"name"`
	// Description is the short summary shown in task template listings.
	Description string `json:"description"`
	// Instructions is the template-level guidance agents can inspect before registration.
	Instructions string `json:"instructions,omitempty"`
	// Parameters lists the planning-time parameter contract for this template.
	Parameters []TemplateParameter `json:"parameters"`
	// StepCount is the number of compiled executable steps in the template.
	StepCount int `json:"stepCount"`
	// Steps is the lightweight execution-step summary exposed to MCP clients.
	Steps []StepSummary `json:"steps"`
}

TemplateSummary is the lightweight view returned to MCP clients.

type Workflow

type Workflow struct {
	// Onboarding configures the discovery phase that runs before planning.
	Onboarding *LifecycleNodeSpec `yaml:"onboarding" json:"onboarding"`
	// Planning configures the phase that freezes execution inputs before steps begin.
	Planning *PlanningNodeSpec `yaml:"planning" json:"planning"`
	// Scaffolding defines additive setup nodes that run before the main execution steps.
	Scaffolding []ExecutionNodeSpec `yaml:"scaffolding,omitempty" json:"scaffolding,omitempty"`
	// Execution defines the main executable workflow nodes that drive task completion.
	Execution []ExecutionNodeSpec `yaml:"execution" json:"execution"`
}

Workflow describes the declarative task lifecycle.

type WorkflowNode

type WorkflowNode struct {
	// Path is the fully qualified workflow path for this normalized node.
	Path TaskPhase `json:"path"`
	// Kind identifies whether the node is onboarding, planning, executable, or waiting for approval.
	Kind WorkflowNodeKind `json:"kind"`
	// ParentPath is the containing workflow path for nested nodes.
	ParentPath TaskPhase `json:"parentPath,omitempty"`
	// NextPath is the workflow path Centian should enter after this node succeeds.
	NextPath TaskPhase `json:"nextPath,omitempty"`
	// StepNumber is the 1-based execution step number when this node is executable.
	StepNumber int `json:"stepNumber,omitempty"`
	// StepID is the author-defined identifier for the executable node backing this workflow node.
	StepID string `json:"stepId,omitempty"`
	// Name is the display label exposed to agents and UIs for this node.
	Name string `json:"name,omitempty"`
	// Description is the short human-facing summary of this workflow node.
	Description string `json:"description,omitempty"`
	// Instructions tells the agent what this normalized node expects before completion.
	Instructions string `json:"instructions,omitempty"`
	// AllowedTools is the tool allowlist pattern set active while this node is current.
	AllowedTools []string `json:"allowedTools,omitempty"`
	// Checkpoint holds optional metadata about whether this node should advertise checkpoint capability.
	Checkpoint *CheckpointHint `json:"checkpoint,omitempty"`
	// EditableFields lists the planning.parameters fields planning may revise while this node is current.
	EditableFields []string `json:"editableFields,omitempty"`
	// RequiredPlanningInputs lists the planning inputs that must be present before leaving planning.
	RequiredPlanningInputs []string `json:"requiredPlanningInputs,omitempty"`
}

WorkflowNode is the normalized runtime representation of one workflow node.

type WorkflowNodeKind

type WorkflowNodeKind string

WorkflowNodeKind identifies the semantic meaning of one compiled workflow node.

const (
	// WorkflowNodeKindOnboarding marks the onboarding workflow node.
	WorkflowNodeKindOnboarding WorkflowNodeKind = "onboarding"
	// WorkflowNodeKindPlanning marks the planning workflow node.
	WorkflowNodeKindPlanning WorkflowNodeKind = "planning"
	// WorkflowNodeKindScaffolding marks an additive setup workflow node.
	WorkflowNodeKindScaffolding WorkflowNodeKind = "scaffolding"
	// WorkflowNodeKindExecution marks an executable workflow node.
	WorkflowNodeKindExecution WorkflowNodeKind = "execution"
	// WorkflowNodeKindWaitingForApproval marks a pause/approval workflow node.
	WorkflowNodeKindWaitingForApproval WorkflowNodeKind = "waiting_for_approval"
)

Jump to

Keyboard shortcuts

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