Documentation
¶
Overview ¶
Package models defines the core domain types for the mesnada orchestrator.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ACPMCPServer ¶
type ACPMCPServer struct {
Name string `json:"name"`
Command string `json:"command"`
Args []string `json:"args,omitempty"`
Env map[string]string `json:"env,omitempty"`
}
ACPMCPServer represents an MCP server configuration for ACP.
type ACPStatus ¶
type ACPStatus struct {
SessionID string `json:"session_id,omitempty"`
Mode string `json:"mode,omitempty"`
AgentName string `json:"agent_name,omitempty"`
IsConnected bool `json:"is_connected"`
ToolCalls int `json:"tool_calls,omitempty"`
LastActivity string `json:"last_activity,omitempty"`
}
ACPStatus represents the status of an ACP agent.
type Conclusion ¶ added in v0.601.2
type Conclusion struct {
Status string `json:"status"` // success|partial|failed|blocked
Summary string `json:"summary"`
Artifacts []string `json:"artifacts,omitempty"`
MemoryRefs []string `json:"memory_refs,omitempty"`
FollowUp string `json:"follow_up,omitempty"`
Confidence float64 `json:"confidence,omitempty"`
Synthesized bool `json:"synthesized,omitempty"` // true if no block emitted
CapturedAt time.Time `json:"captured_at"`
// Warnings accumulates human-readable soft-validation messages produced
// during parsing (unknown status, out-of-range confidence, missing summary,
// blank entries, malformed body, etc.). The conclusion is never discarded
// due to warnings — data is always preserved.
Warnings []string `json:"warnings,omitempty"`
}
Conclusion is the enriched, durable result of a delegated task. The subagent emits only the model-known fields via a sentinel block; the orchestrator fills in launch metadata it owns. Synthesized is true when no block was emitted and the conclusion was derived from output/error.
type Duration ¶
Duration is a wrapper around time.Duration for JSON marshaling.
func (Duration) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (*Duration) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler.
type Engine ¶
type Engine string
Engine represents the CLI engine to use for spawning agents.
const ( // EngineCopilot uses GitHub Copilot CLI (default). EngineCopilot Engine = "copilot" // EngineClaude uses Anthropic Claude CLI. EngineClaude Engine = "claude" // EngineGemini uses Google Gemini CLI. EngineGemini Engine = "gemini" // EngineOpenCode uses OpenCode.ai CLI. EngineOpenCode Engine = "opencode" // EngineOllamaClaude uses Ollama with Claude integration. EngineOllamaClaude Engine = "ollama-claude" // EngineOllamaOpenCode uses Ollama with OpenCode integration. EngineOllamaOpenCode Engine = "ollama-opencode" // EngineMistral uses Mistral Vibe CLI. EngineMistral Engine = "mistral" // EngineACP uses ACP (Agent Client Protocol) generic agent. EngineACP Engine = "acp" // EngineACPClaudeCode uses Claude Code via ACP. EngineACPClaudeCode Engine = "acp-claude" // EngineACPCodex uses OpenAI Codex via ACP. EngineACPCodex Engine = "acp-codex" // EngineACPCustom uses a custom ACP agent. EngineACPCustom Engine = "acp-custom" // EngineACPServer represents ACP sessions managed by the Pando ACP server. EngineACPServer Engine = "acp-server" // EnginePando uses Pando itself as an ACP subagent (shorthand for engine=acp + acp_agent=pando). EnginePando Engine = "pando" // EngineWarmACP marks a delegated task that ran inside an already-running // ("warm") per-project Pando ACP instance reused by the orchestrator instead // of cold-spawning a CLI subprocess. The conclusion is captured over the ACP // wire rather than scanned from stdout. EngineWarmACP Engine = "warm-acp" )
func DefaultEngine ¶
func DefaultEngine() Engine
DefaultEngine returns the default engine. Pando is the default engine since it is the host application and provides native ACP support without requiring external process configuration.
type ListRequest ¶
type ListRequest struct {
Status []TaskStatus `json:"status,omitempty"`
Tags []string `json:"tags,omitempty"`
Limit int `json:"limit,omitempty"`
Offset int `json:"offset,omitempty"`
}
ListRequest represents a request to list tasks.
type SpawnRequest ¶
type SpawnRequest struct {
Prompt string `json:"prompt"`
WorkDir string `json:"work_dir,omitempty"`
Model string `json:"model,omitempty"`
Engine Engine `json:"engine,omitempty"`
Dependencies []string `json:"dependencies,omitempty"`
Tags []string `json:"tags,omitempty"`
Priority int `json:"priority,omitempty"`
Timeout string `json:"timeout,omitempty"`
MCPConfig string `json:"mcp_config,omitempty"`
ExtraArgs []string `json:"extra_args,omitempty"`
Persona string `json:"persona,omitempty"`
Background bool `json:"background"`
IncludeDependencyLogs bool `json:"include_dependency_logs,omitempty"`
DependencyLogLines int `json:"dependency_log_lines,omitempty"`
LogFile string `json:"log_file,omitempty"`
// ACP-specific fields
ACPMode string `json:"acp_mode,omitempty"`
ACPAgent string `json:"acp_agent,omitempty"`
ACPConfigOptions map[string]interface{} `json:"acp_config_options,omitempty"`
ACPMCPServers []ACPMCPServer `json:"acp_mcp_servers,omitempty"`
// Delegation correlation fields. Flow from the spawn tool into the created
// Task so its origin (parent session/task, project, depth) is persisted.
ParentSessionID string `json:"parent_session_id,omitempty"`
ParentTaskID string `json:"parent_task_id,omitempty"`
CorrelationID string `json:"correlation_id,omitempty"`
ProjectID string `json:"project_id,omitempty"`
ProjectPath string `json:"project_path,omitempty"`
Depth int `json:"depth,omitempty"`
}
SpawnRequest represents a request to spawn a new agent.
type Task ¶
type Task struct {
ID string `json:"id"`
Prompt string `json:"prompt"`
WorkDir string `json:"work_dir"`
Status TaskStatus `json:"status"`
Engine Engine `json:"engine,omitempty"`
PID int `json:"pid,omitempty"`
Output string `json:"output,omitempty"`
OutputTail string `json:"output_tail,omitempty"`
RawError string `json:"raw_error,omitempty"`
Error string `json:"error,omitempty"`
ExitCode *int `json:"exit_code,omitempty"`
Model string `json:"model,omitempty"`
LogFile string `json:"log_file,omitempty"`
Progress *TaskProgress `json:"progress,omitempty"`
CreatedAt time.Time `json:"created_at"`
StartedAt *time.Time `json:"started_at,omitempty"`
CompletedAt *time.Time `json:"completed_at,omitempty"`
Dependencies []string `json:"dependencies,omitempty"`
Tags []string `json:"tags,omitempty"`
Priority int `json:"priority,omitempty"`
Timeout Duration `json:"timeout,omitempty"`
MCPConfig string `json:"mcp_config,omitempty"`
ExtraArgs []string `json:"extra_args,omitempty"`
Persona string `json:"persona,omitempty"`
// ACP-specific fields
ACPSessionID string `json:"acp_session_id,omitempty"`
ACPMode string `json:"acp_mode,omitempty"`
ACPStatus *ACPStatus `json:"acp_status,omitempty"`
CurrentTool string `json:"current_tool,omitempty"`
ToolCalls []*ToolCall `json:"tool_calls,omitempty"`
// Delegation correlation fields. These link a delegated task back to the
// parent agent session/task that spawned it and to the project it ran in.
// They are populated by the spawn tool + orchestrator and are durable so a
// task's origin can always be reconstructed.
ParentSessionID string `json:"parent_session_id,omitempty"` // session that spawned this task
ParentTaskID string `json:"parent_task_id,omitempty"` // for depth/trace
CorrelationID string `json:"correlation_id,omitempty"` // idempotency key
ProjectID string `json:"project_id,omitempty"` // resolved from work_dir
ProjectPath string `json:"project_path,omitempty"` // CanonicalProjectPath
ProjectName string `json:"project_name,omitempty"` // resolved folder/display name
Conclusion *Conclusion `json:"conclusion,omitempty"` // captured task conclusion
Depth int `json:"depth,omitempty"` // anti-fork-bomb cap
}
Task represents a CLI agent task.
func (*Task) GetProgress ¶ added in v0.210.0
GetProgress returns the current progress percentage and description.
func (*Task) IsTerminal ¶
IsTerminal returns true if the task is in a terminal state.
func (*Task) ToSummary ¶
func (t *Task) ToSummary() TaskSummary
ToSummary converts a Task to a TaskSummary.
type TaskProgress ¶
type TaskProgress struct {
Percentage int `json:"percentage"`
Description string `json:"description"`
UpdatedAt time.Time `json:"updated_at"`
}
TaskProgress represents the progress of a task.
type TaskStatus ¶
type TaskStatus string
TaskStatus represents the current state of a task.
const ( TaskStatusPending TaskStatus = "pending" TaskStatusRunning TaskStatus = "running" TaskStatusPaused TaskStatus = "paused" TaskStatusCompleted TaskStatus = "completed" TaskStatusFailed TaskStatus = "failed" TaskStatusCancelled TaskStatus = "cancelled" )
type TaskSummary ¶
type TaskSummary struct {
ID string `json:"id"`
Prompt string `json:"prompt"`
WorkDir string `json:"work_dir"`
Status TaskStatus `json:"status"`
CreatedAt time.Time `json:"created_at"`
CompletedAt *time.Time `json:"completed_at,omitempty"`
Duration string `json:"duration,omitempty"`
}
TaskSummary provides a condensed view of a task for listing.
type ToolCall ¶ added in v0.210.0
type ToolCall struct {
ID string `json:"id"`
Name string `json:"name"`
Title string `json:"title"`
Kind string `json:"kind"`
Arguments map[string]interface{} `json:"arguments,omitempty"`
Result string `json:"result,omitempty"`
Status string `json:"status"`
Locations []string `json:"locations,omitempty"`
Diffs map[string]string `json:"diffs,omitempty"`
StartedAt time.Time `json:"started_at"`
EndedAt *time.Time `json:"ended_at,omitempty"`
}
ToolCall represents a single tool execution within a task.
type WaitMultipleRequest ¶
type WaitMultipleRequest struct {
TaskIDs []string `json:"task_ids"`
WaitAll bool `json:"wait_all"`
Timeout string `json:"timeout,omitempty"`
}
WaitMultipleRequest represents a request to wait for multiple tasks.
type WaitRequest ¶
type WaitRequest struct {
TaskID string `json:"task_id"`
Timeout string `json:"timeout,omitempty"`
}
WaitRequest represents a request to wait for task completion.