cli

package
v1.7.0 Latest Latest
Warning

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

Go to latest
Published: Feb 2, 2026 License: MIT Imports: 123 Imported by: 0

Documentation

Overview

Package cli provides command-line interface commands for ntm. activity.go implements the `ntm activity` command for displaying agent activity states.

Package cli provides command-line interface commands for ntm. work.go implements the `ntm work` command for intelligent work distribution.

Index

Constants

View Source
const CompleteIdleThreshold = 5 * time.Second

CompleteIdleThreshold is the time without activity to consider "complete".

View Source
const DefaultWaitPoll = 2 * time.Second

DefaultWaitPoll is the default polling interval.

View Source
const DefaultWaitTimeout = 5 * time.Minute

DefaultWaitTimeout is the default maximum wait time.

Variables

View Source
var (

	// Build information - set by goreleaser via ldflags
	Version = "dev"
	Commit  = "none"
	Date    = "unknown"
	BuiltBy = "unknown"
)

Functions

func AccentText

func AccentText(text string) string

AccentText renders accented/highlighted text

func Badge

func Badge(text string, color lipgloss.Color) string

Badge renders a small colored badge

func BoldText

func BoldText(text string) string

BoldText renders bold text

func CheckCycles

func CheckCycles(verbose bool) ([][]string, error)

CheckCycles returns any dependency cycles detected in the current project. Beads in cycles should be excluded from automatic assignment. Enhanced with retry logic and comprehensive error handling.

func ClearSpawnState

func ClearSpawnState(projectDir string) error

ClearSpawnState removes the spawn state file.

func EnableProfilingIfRequested

func EnableProfilingIfRequested()

EnableProfilingIfRequested enables profiling if --profile-startup was set. Call this at the start of command execution.

func ErrorMessage

func ErrorMessage(msg string) string

ErrorMessage renders an error message with icon

func Execute

func Execute() error

func FilterCyclicBeads

func FilterCyclicBeads(beads []bv.BeadPreview, verbose bool) ([]bv.BeadPreview, int)

FilterCyclicBeads removes beads that are part of dependency cycles from the list.

func FormatRecoveryPrompt

func FormatRecoveryPrompt(rc *RecoveryContext, agentType AgentType) string

FormatRecoveryPrompt formats the full recovery context as a prompt injection. This combines beads, Agent Mail messages, file reservations, and CM memories into a single markdown section for agent injection. The agentType parameter controls formatting: Codex agents need brackets escaped because zsh interprets [] as glob patterns.

func FormatTimestamp added in v1.7.0

func FormatTimestamp(t time.Time) string

FormatTimestamp formats a time for robot output.

func GetFormatter

func GetFormatter() *output.Formatter

GetFormatter returns a formatter configured for the current output mode

func GetOutputFormat

func GetOutputFormat() output.Format

GetOutputFormat returns the current output format

func GetProjectRoot

func GetProjectRoot() string

GetProjectRoot returns the git root of the current working directory, or the cwd itself if no git root is found or on error.

func HasAnyTag

func HasAnyTag(paneTags, filterTags []string) bool

HasAnyTag checks if any of the pane's tags match any of the filter tags. Comparison is case-insensitive.

func InfoMessage

func InfoMessage(msg string) string

InfoMessage renders an info message with icon

func IsBeadInCycle

func IsBeadInCycle(beadID string, cycles [][]string) bool

IsBeadInCycle checks if a bead ID is part of any detected dependency cycle.

func IsInteractive

func IsInteractive(w io.Writer) bool

IsInteractive returns true when the writer is a terminal. The pane/session selectors rely on user input; in tests or piped execution they should not run.

func IsJSONOutput

func IsJSONOutput() bool

IsJSONOutput returns true if JSON output is enabled

func KeyValue

func KeyValue(key, value string, keyWidth int) string

KeyValue renders a key-value pair with consistent styling

func MaybeRunStartupCleanup

func MaybeRunStartupCleanup(enabled bool, maxAgeHours int, verbose bool)

MaybeRunStartupCleanup runs cleanup if auto cleanup is enabled and enough time has passed since the last cleanup. This prevents cleanup from running on every NTM command invocation.

func NewAgentSpecsValue

func NewAgentSpecsValue(agentType AgentType, specs *AgentSpecs) *agentSpecsValue

AgentSpecsValue creates a flag value that accumulates into the given slice with the specified agent type

func OnBeadCompletion

func OnBeadCompletion(session string, completedBeadID string, verbose bool) ([]bv.BeadPreview, error)

OnBeadCompletion is called when an assigned bead is marked as completed. It performs the unblock check and returns beads ready for assignment. This is designed to be called from: - Assignment store status update (when bead marked completed) - Watch mode polling - Manual completion notification

func PrintCompactHelp

func PrintCompactHelp(w io.Writer)

PrintCompactHelp prints a more compact version for --help flag

func PrintMinimalHelp

func PrintMinimalHelp(w io.Writer)

PrintMinimalHelp prints a minimal help showing only essential commands

func PrintProfilingIfEnabled

func PrintProfilingIfEnabled()

PrintProfilingIfEnabled prints profiling output if enabled. Call this at the end of command execution.

func PrintStunningHelp

func PrintStunningHelp(w io.Writer)

PrintStunningHelp prints a beautifully styled help output

func ProfileConfigLoad

func ProfileConfigLoad() func()

ProfileConfigLoad profiles config loading if profiling is enabled. Returns a function to call when loading is complete.

func ResolveCassContext

func ResolveCassContext(query, dir string) (string, error)

ResolveCassContext queries CASS for relevant past sessions based on a query string and returns a formatted markdown summary.

func ResolveModel

func ResolveModel(agentType AgentType, modelSpec string) string

ResolveModel resolves a model alias to its full name using config Returns the default model if alias is empty

func RunPreflightCheck added in v1.7.0

func RunPreflightCheck(prompt string, strict bool) (bool, []string, error)

RunPreflightCheck is a helper for use by other commands (like send). Returns (blocked, warnings, error).

func SanitizeFilename

func SanitizeFilename(name string) string

SanitizeFilename removes/replaces characters that are invalid in filenames. It ensures the filename is safe for the filesystem and truncated correctly.

func SectionDivider

func SectionDivider(width int) string

SectionDivider renders a subtle divider line

func SectionHeader

func SectionHeader(title string) string

SectionHeader renders a styled section header

func SpawnStateExists

func SpawnStateExists(projectDir string) bool

SpawnStateExists returns whether a spawn state file exists.

func SubtleText

func SubtleText(text string) string

SubtleText renders subtle/muted text

func SuccessMessage

func SuccessMessage(msg string) string

SuccessMessage renders a success message with icon

func ValidateModelAlias

func ValidateModelAlias(agentType AgentType, alias string) error

ValidateModelAlias checks if a model alias exists in config

func WarningMessage

func WarningMessage(msg string) string

WarningMessage renders a warning message with icon

func WatchForCompletions

func WatchForCompletions(opts *AutoReassignOptions) error

WatchForCompletions starts a background watcher that monitors for bead completions and triggers auto-reassignment. This implements the active monitoring component.

Types

type AddOptions

type AddOptions struct {
	Session          string
	Agents           AgentSpecs
	PluginMap        map[string]plugins.AgentPlugin
	PersonaMap       map[string]*persona.Persona
	CassContextQuery string
	NoCassContext    bool
	Prompt           string
}

AddOptions configures agent addition

type AdoptOptions

type AdoptOptions struct {
	Session   string
	AutoName  bool
	DryRun    bool
	CCPanes   []int
	CodPanes  []int
	GmiPanes  []int
	UserPanes []int
}

AdoptOptions configures session adoption

type AdoptResult

type AdoptResult struct {
	Success      bool               `json:"success"`
	Session      string             `json:"session"`
	AdoptedPanes []AdoptedPaneInfo  `json:"adopted_panes"`
	TotalPanes   int                `json:"total_panes"`
	Agents       AdoptedAgentCounts `json:"agents"`
	DryRun       bool               `json:"dry_run"`
	Error        string             `json:"error,omitempty"`
}

AdoptResult represents the result of an adopt operation

func (*AdoptResult) JSON

func (r *AdoptResult) JSON() interface{}

func (*AdoptResult) Text

func (r *AdoptResult) Text(w io.Writer) error

type AdoptedAgentCounts

type AdoptedAgentCounts struct {
	Claude int `json:"cc"`
	Codex  int `json:"cod"`
	Gemini int `json:"gmi"`
	User   int `json:"user"`
}

AdoptedAgentCounts tracks agent counts by type

func (AdoptedAgentCounts) Total

func (a AdoptedAgentCounts) Total() int

type AdoptedPaneInfo

type AdoptedPaneInfo struct {
	PaneID    string `json:"pane_id"`
	PaneIndex int    `json:"pane_index"`
	AgentType string `json:"agent_type"`
	OldTitle  string `json:"old_title,omitempty"`
	NewTitle  string `json:"new_title"`
	NTMIndex  int    `json:"ntm_index"`
}

AdoptedPaneInfo describes a pane that was adopted

type AgentFilter

type AgentFilter struct {
	All    bool
	Claude bool
	Codex  bool
	Gemini bool
}

AgentFilter specifies which agent types to target

func (AgentFilter) IsEmpty

func (f AgentFilter) IsEmpty() bool

func (AgentFilter) Matches

func (f AgentFilter) Matches(agentType tmux.AgentType) bool

type AgentMailStatus

type AgentMailStatus struct {
	Available       bool   `json:"available"`
	RegisteredAgent string `json:"registered_agent,omitempty"`
	LockCount       int    `json:"lock_count"`
	ConflictCount   int    `json:"conflict_count"`
}

AgentMailStatus contains Agent Mail coordination info.

type AgentSpawnContext

type AgentSpawnContext struct {
	SpawnContext
	Order        int           // 1-based position in spawn order (1, 2, 3...)
	StaggerDelay time.Duration // Delay before this agent receives its prompt
}

AgentSpawnContext holds spawn context for a specific agent.

func (*AgentSpawnContext) AnnotatePrompt

func (asc *AgentSpawnContext) AnnotatePrompt(prompt string, includeAnnotation bool) string

AnnotatePrompt prepends the spawn context annotation to the prompt. Returns the original prompt unchanged if annotation is empty.

func (*AgentSpawnContext) EnvVarPrefix

func (asc *AgentSpawnContext) EnvVarPrefix() string

EnvVarPrefix returns a shell command prefix that sets the spawn context for the following command (VAR=... form).

We intentionally avoid `export ...;` here because callers often wrap the command as `cd <dir> && <command>`, and a `;` would break the conditional chain.

Example: "NTM_SPAWN_ORDER=2 NTM_SPAWN_TOTAL=4 NTM_SPAWN_BATCH_ID='spawn-abc123' "

func (*AgentSpawnContext) EnvVars

func (asc *AgentSpawnContext) EnvVars() map[string]string

EnvVars returns environment variables to set for this agent. These variables allow agents to programmatically access their spawn context.

func (*AgentSpawnContext) PromptAnnotation

func (asc *AgentSpawnContext) PromptAnnotation() string

PromptAnnotation returns a minimal context annotation for the prompt. Only used when stagger is enabled to help agents understand their position. Format: "[Spawn context: Agent 2/4, batch spawn-abc123]"

type AgentSpec

type AgentSpec struct {
	Type  AgentType
	Count int
	Model string // Optional, empty = use default model
}

AgentSpec represents a parsed agent specification with optional model

func ParseAgentSpec

func ParseAgentSpec(value string) (AgentSpec, error)

ParseAgentSpec parses a single agent specification string Format: "N" or "N:model" where N is count, model is optional alias

type AgentSpecs

type AgentSpecs []AgentSpec

AgentSpecs is a slice of AgentSpec that implements the flag.Value interface for accumulating multiple agent specifications

func ToAgentSpecs

func ToAgentSpecs(resolved []ResolvedPersonaAgent) (AgentSpecs, map[int]string)

ToAgentSpecs converts resolved persona agents to AgentSpecs for spawning Returns the agent specs and a map from agent index to persona name for pane naming

func (AgentSpecs) ByType

func (s AgentSpecs) ByType(t AgentType) AgentSpecs

ByType returns specs filtered by agent type

func (AgentSpecs) Flatten

func (s AgentSpecs) Flatten() []FlatAgent

Flatten expands all specs into individual agent entries

func (*AgentSpecs) Set

func (s *AgentSpecs) Set(value string) error

Set implements flag.Value for parsing and accumulating specs

func (*AgentSpecs) String

func (s *AgentSpecs) String() string

String implements flag.Value

func (AgentSpecs) TotalCount

func (s AgentSpecs) TotalCount() int

TotalCount returns the sum of all agent counts

func (*AgentSpecs) Type

func (s *AgentSpecs) Type() string

Type returns the type name for pflag

type AgentStats

type AgentStats struct {
	Count     int `json:"count"`
	Prompts   int `json:"prompts"`
	CharsSent int `json:"chars_sent"`
	TokensEst int `json:"tokens_estimated"`
}

AgentStats holds per-agent-type statistics.

type AgentType

type AgentType string

AgentType represents the type of AI agent

const (
	AgentTypeClaude   AgentType = "cc"
	AgentTypeCodex    AgentType = "cod"
	AgentTypeGemini   AgentType = "gmi"
	AgentTypeOllama   AgentType = "ollama"
	AgentTypeCursor   AgentType = "cursor"
	AgentTypeWindsurf AgentType = "windsurf"
	AgentTypeAider    AgentType = "aider"
)

type Alert

type Alert struct {
	Type     string   `json:"type"`
	Severity string   `json:"severity"`
	Message  string   `json:"message"`
	IssueID  string   `json:"issue_id,omitempty"`
	Labels   []string `json:"labels,omitempty"`
}

Alert represents a bv alert

type AlertsResponse

type AlertsResponse struct {
	Alerts []Alert `json:"alerts"`
}

AlertsResponse contains bv alerts

type AllocationOutput

type AllocationOutput struct {
	Project     string `json:"project"`
	Path        string `json:"path"`
	OpenBeads   int    `json:"open_beads"`
	Tier        int    `json:"tier"`
	CCAgents    int    `json:"cc_agents"`
	CodAgents   int    `json:"cod_agents"`
	GmiAgents   int    `json:"gmi_agents"`
	TotalAgents int    `json:"total_agents"`
}

type AnalyticsStats

type AnalyticsStats struct {
	Period         string                `json:"period"`
	TotalSessions  int                   `json:"total_sessions"`
	TotalAgents    int                   `json:"total_agents"`
	TotalPrompts   int                   `json:"total_prompts"`
	TotalCharsSent int                   `json:"total_chars_sent"`
	TotalTokensEst int                   `json:"total_tokens_estimated"`
	AgentBreakdown map[string]AgentStats `json:"agent_breakdown"`
	SessionDetails []SessionSummary      `json:"sessions,omitempty"`
	ErrorCount     int                   `json:"error_count"`
	ErrorTypes     map[string]int        `json:"error_types,omitempty"`
}

AnalyticsStats holds aggregated analytics data.

type ApprovalResult

type ApprovalResult struct {
	Success  bool   `json:"success"`
	ID       string `json:"id"`
	Action   string `json:"action"`
	Resource string `json:"resource"`
	Status   string `json:"status"`
	Error    string `json:"error,omitempty"`
}

ApprovalResult represents the result of an approval operation.

type AssignCommandOptions

type AssignCommandOptions struct {
	Session         string
	BeadIDs         []string
	Strategy        string
	Limit           int
	AgentTypeFilter string
	Template        string
	TemplateFile    string
	Verbose         bool
	Quiet           bool
	Timeout         time.Duration
	ReserveFiles    bool // Reserve file paths via Agent Mail before assignment

	// Direct pane assignment options
	Pane       int    // Direct pane assignment (-1 = disabled)
	Force      bool   // Force assignment even if pane busy
	IgnoreDeps bool   // Ignore dependency checks
	Prompt     string // Custom prompt for direct assignment

	// Clear assignment options
	Clear     string // Clear specific bead assignments (comma-separated)
	ClearPane int    // Clear all assignments for a pane (-1 = disabled)
}

AssignCommandOptions holds all options for the assign command

type AssignEnvelope

type AssignEnvelope[T any] struct {
	Command    string       `json:"command"`
	Subcommand string       `json:"subcommand,omitempty"`
	Session    string       `json:"session"`
	Timestamp  string       `json:"timestamp"`
	Success    bool         `json:"success"`
	Data       *T           `json:"data,omitempty"`
	Warnings   []string     `json:"warnings"`
	Error      *AssignError `json:"error,omitempty"`
}

AssignEnvelope is the standard JSON envelope for assign operations.

type AssignError

type AssignError struct {
	Code    string                 `json:"code"`
	Message string                 `json:"message"`
	Details map[string]interface{} `json:"details,omitempty"`
}

AssignError represents an error in assign JSON output.

type AssignOutputEnhanced

type AssignOutputEnhanced struct {
	Strategy    string                `json:"strategy"`
	Assignments []AssignmentItem      `json:"assignments"`
	Skipped     []SkippedItem         `json:"skipped"`
	Summary     AssignSummaryEnhanced `json:"summary"`
	Errors      []string              `json:"-"`
}

AssignOutputEnhanced is the enhanced output structure matching the spec.

type AssignSummaryEnhanced

type AssignSummaryEnhanced struct {
	TotalBeadCount    int `json:"total_bead_count"`
	ActionableCount   int `json:"actionable_count"` // Beads with no blockers
	BlockedCount      int `json:"blocked_count"`    // Beads blocked by dependencies
	AssignedCount     int `json:"assigned_count"`
	SkippedCount      int `json:"skipped_count"`
	IdleAgents        int `json:"idle_agent_count"`
	CycleWarningCount int `json:"cycle_warning_count,omitempty"` // Beads in dependency cycles
}

AssignSummaryEnhanced contains summary statistics

type AssignmentItem

type AssignmentItem struct {
	BeadID     string  `json:"bead_id"`
	BeadTitle  string  `json:"bead_title"`
	Pane       int     `json:"pane"`
	AgentType  string  `json:"agent_type"`
	AgentName  string  `json:"agent_name"`
	Status     string  `json:"status"`      // assigned|working|completed|failed
	PromptSent bool    `json:"prompt_sent"` // Whether prompt was sent
	AssignedAt string  `json:"assigned_at"` // ISO8601 timestamp
	Score      float64 `json:"score,omitempty"`
	Reasoning  string  `json:"-"`
}

AssignmentItem represents a single assignment in JSON output.

type AtRiskItem

type AtRiskItem struct {
	ID      string   `json:"id"`
	Title   string   `json:"title"`
	Risk    string   `json:"risk"` // behind_schedule, blocked, scope_creep
	Reasons []string `json:"reasons"`
}

AtRiskItem represents an at-risk sprint item

type AutoReassignOptions

type AutoReassignOptions struct {
	Session         string
	Strategy        string
	Template        string
	TemplateFile    string
	ReserveFiles    bool
	Verbose         bool
	Quiet           bool
	Timeout         time.Duration
	AgentTypeFilter string
}

AutoReassignOptions contains options for auto-reassignment

type AutoReassignResult

type AutoReassignResult struct {
	TriggerBeadID  string           `json:"trigger_bead_id"`
	NewlyUnblocked []UnblockedBead  `json:"newly_unblocked"`
	Assignments    []AssignmentItem `json:"assignments"`
	Skipped        []SkippedItem    `json:"skipped"`
	IdleAgents     int              `json:"idle_agents"`
	Errors         []string         `json:"errors,omitempty"`
	CyclesDetected [][]string       `json:"cycles_detected,omitempty"`
	CompletionTime time.Time        `json:"completion_time"`
}

AutoReassignResult contains the result of an auto-reassignment operation

func PerformAutoReassignment

func PerformAutoReassignment(completedBeadID string, opts *AutoReassignOptions) (*AutoReassignResult, error)

PerformAutoReassignment handles automatic reassignment when a bead completes. This is the main entry point for dependency-aware auto-reassignment. It: 1. Detects newly unblocked beads after the completion 2. Finds idle agents that can take new work 3. Assigns unblocked beads to idle agents using the specified strategy 4. Handles file reservations and prompt generation

func TriggerCompletionCheck

func TriggerCompletionCheck(session, completedBeadID string, opts *AutoReassignOptions) (*AutoReassignResult, error)

TriggerCompletionCheck manually triggers a completion check and auto-reassignment. This can be called from external completion notifications or manual triggers.

type AutomationResponse

type AutomationResponse struct {
	output.TimestampedResponse
	AutoCommit   bool   `json:"auto_commit"`
	AutoPush     bool   `json:"auto_push"`
	ForceRelease string `json:"force_release"`
	Modified     bool   `json:"modified,omitempty"`
}

AutomationResponse is the JSON output for automation settings.

type BatchPrompt added in v1.7.0

type BatchPrompt struct {
	Text   string
	Source string
}

type BatchPromptResult

type BatchPromptResult struct {
	Index         int    `json:"index"`
	PromptPreview string `json:"prompt_preview"`
	Success       bool   `json:"success"`
	Targets       []int  `json:"targets,omitempty"`
	Delivered     int    `json:"delivered"`
	Error         string `json:"error,omitempty"`
	Skipped       bool   `json:"skipped,omitempty"`
}

BatchPromptResult represents the result of sending a single prompt in a batch

type BatchResult

type BatchResult struct {
	Success   bool                `json:"success"`
	Session   string              `json:"session"`
	Total     int                 `json:"batch_total"`
	Delivered int                 `json:"batch_delivered"`
	Failed    int                 `json:"batch_failed"`
	Skipped   int                 `json:"batch_skipped"`
	Results   []BatchPromptResult `json:"results"`
	Error     string              `json:"error,omitempty"`
}

BatchResult represents the JSON output for batch send operations

type BeadEvent

type BeadEvent struct {
	Timestamp time.Time `json:"timestamp"`
	Event     string    `json:"event"`
	Status    string    `json:"status,omitempty"`
}

BeadEvent represents a bead state change

type BeadHistory

type BeadHistory struct {
	ID         string      `json:"id"`
	Title      string      `json:"title"`
	Events     []BeadEvent `json:"events"`
	Commits    []string    `json:"commits"`
	Milestones []string    `json:"milestones"`
}

BeadHistory contains history for a single bead

type BlockedResponse

type BlockedResponse struct {
	output.TimestampedResponse
	Entries []policy.BlockedEntry `json:"entries"`
	Count   int                   `json:"count"`
}

BlockedResponse is the JSON output for blocked commands.

type BurndownProgress

type BurndownProgress struct {
	TotalPoints     int     `json:"total_points"`
	CompletedPoints int     `json:"completed_points"`
	PercentComplete float64 `json:"percent_complete"`
	DaysRemaining   int     `json:"days_remaining"`
}

BurndownProgress contains progress metrics

type BurndownResponse

type BurndownResponse struct {
	Sprint       string           `json:"sprint"`
	Progress     BurndownProgress `json:"progress"`
	ScopeChanges []ScopeChange    `json:"scope_changes,omitempty"`
	AtRisk       []AtRiskItem     `json:"at_risk,omitempty"`
}

BurndownResponse contains sprint burndown data

type CheckDCGVerdict added in v1.7.0

type CheckDCGVerdict struct {
	Available bool   `json:"available"`
	Checked   bool   `json:"checked"`
	Blocked   bool   `json:"blocked"`
	Reason    string `json:"reason,omitempty"`
	Error     string `json:"error,omitempty"`
}

type CheckPolicyVerdict added in v1.7.0

type CheckPolicyVerdict struct {
	Action  string `json:"action"` // allow, block, approve
	Pattern string `json:"pattern,omitempty"`
	Reason  string `json:"reason,omitempty"`
	SLB     bool   `json:"slb,omitempty"` // Requires SLB two-person approval
}

type CheckResponse

type CheckResponse struct {
	output.TimestampedResponse
	Command string `json:"command"`
	Action  string `json:"action"` // allow, block, approve
	Pattern string `json:"pattern,omitempty"`
	Reason  string `json:"reason,omitempty"`

	Policy *CheckPolicyVerdict `json:"policy,omitempty"`
	DCG    *CheckDCGVerdict    `json:"dcg,omitempty"`
}

CheckResponse is the JSON output for safety check.

type CleanupStats

type CleanupStats struct {
	TotalFiles   int
	TotalSize    int64
	DeletedFiles int
	DeletedSize  int64
	Errors       int
}

CleanupStats holds statistics from a cleanup operation

func RunStartupCleanup

func RunStartupCleanup(maxAgeHours int, verbose bool) (CleanupStats, error)

RunStartupCleanup performs a silent cleanup of stale NTM temp files. This is called during startup if auto cleanup is enabled in config. It returns the cleanup stats and any error encountered.

type ClearAllResult

type ClearAllResult struct {
	Pane         int                     `json:"pane"`
	AgentType    string                  `json:"agent_type"`
	Success      bool                    `json:"success"`
	Error        string                  `json:"error,omitempty"`
	ClearedBeads []ClearAssignmentResult `json:"cleared_beads"`
}

ClearAllResult represents result of clearing all assignments for a pane.

type ClearAssignmentResult

type ClearAssignmentResult struct {
	BeadID                   string   `json:"bead_id"`
	BeadTitle                string   `json:"bead_title,omitempty"`
	PreviousPane             int      `json:"previous_pane,omitempty"`
	PreviousAgent            string   `json:"previous_agent,omitempty"`
	PreviousAgentType        string   `json:"previous_agent_type,omitempty"`
	PreviousStatus           string   `json:"previous_status,omitempty"`
	AssignmentFound          bool     `json:"assignment_found"`
	FileReservationsReleased bool     `json:"file_reservations_released"`
	FilesReleased            []string `json:"files_released,omitempty"`
	Success                  bool     `json:"success"`
	Error                    string   `json:"error,omitempty"`
	ErrorCode                string   `json:"error_code,omitempty"`
}

ClearAssignmentResult represents the result of clearing a single assignment.

type ClearAssignmentsData

type ClearAssignmentsData struct {
	Cleared   []ClearAssignmentResult `json:"cleared"`
	Summary   ClearAssignmentsSummary `json:"summary"`
	Pane      *int                    `json:"pane,omitempty"`
	AgentType string                  `json:"agent_type,omitempty"`
}

ClearAssignmentsData is the data payload for clear operations.

type ClearAssignmentsEnvelope

type ClearAssignmentsEnvelope struct {
	Command    string                 `json:"command"`
	Subcommand string                 `json:"subcommand"`
	Session    string                 `json:"session"`
	Timestamp  string                 `json:"timestamp"`
	Success    bool                   `json:"success"`
	Data       *ClearAssignmentsData  `json:"data,omitempty"`
	Warnings   []string               `json:"warnings"`
	Error      *ClearAssignmentsError `json:"error,omitempty"`
}

ClearAssignmentsEnvelope is the standard JSON envelope for clear operations.

type ClearAssignmentsError

type ClearAssignmentsError struct {
	Code    string                 `json:"code"`
	Message string                 `json:"message"`
	Details map[string]interface{} `json:"details,omitempty"`
}

ClearAssignmentsError represents an error in the clear envelope.

type ClearAssignmentsSummary

type ClearAssignmentsSummary struct {
	ClearedCount         int `json:"cleared_count"`
	ReservationsReleased int `json:"reservations_released"`
	FailedCount          int `json:"failed_count,omitempty"`
}

ClearAssignmentsSummary provides a summary of a clear operation.

type CommitInfo

type CommitInfo struct {
	Hash      string    `json:"hash"`
	Timestamp time.Time `json:"timestamp"`
	Message   string    `json:"message"`
	Beads     []string  `json:"beads,omitempty"`
}

CommitInfo contains commit details

type ConfigCheck

type ConfigCheck struct {
	Name    string `json:"name"`
	Valid   bool   `json:"valid"`
	Status  string `json:"status"`
	Message string `json:"message,omitempty"`
}

ConfigCheck represents a configuration check result

type ConfigLocation

type ConfigLocation struct {
	Path   string
	Type   string
	Exists bool
}

ConfigLocation represents a discovered config file.

type ConfirmRotationResult

type ConfirmRotationResult struct {
	AgentID string `json:"agent_id"`
	Action  string `json:"action"`
	Success bool   `json:"success"`
	Message string `json:"message"`
}

ConfirmRotationResult contains the confirmation result

func (*ConfirmRotationResult) JSON

func (r *ConfirmRotationResult) JSON() interface{}

func (*ConfirmRotationResult) Text

func (r *ConfirmRotationResult) Text(w io.Writer) error

type ControllerInput

type ControllerInput struct {
	Session    string `json:"session"`
	AgentType  string `json:"agent_type,omitempty"`
	PromptFile string `json:"prompt_file,omitempty"`
	NoPrompt   bool   `json:"no_prompt,omitempty"`
}

ControllerInput is the kernel input for sessions.controller.

type ControllerResponse

type ControllerResponse struct {
	output.TimestampedResponse
	Session    string `json:"session"`
	PaneID     string `json:"pane_id"`
	PaneIndex  int    `json:"pane_index"`
	AgentType  string `json:"agent_type"`
	PromptUsed string `json:"prompt_used,omitempty"`
	AgentCount int    `json:"agent_count"`
	AgentList  string `json:"agent_list,omitempty"`
}

ControllerResponse is the JSON output for the controller command.

type CopyOptions

type CopyOptions struct {
	Last     int
	Pattern  string
	Code     bool
	Headers  bool
	Output   string
	Quiet    bool
	PaneSpec string
}

CopyOptions defines options for the copy command

type DaemonCheck

type DaemonCheck struct {
	Name    string `json:"name"`
	Running bool   `json:"running"`
	Port    int    `json:"port,omitempty"`
	PID     int    `json:"pid,omitempty"`
	Status  string `json:"status"`
	Message string `json:"message,omitempty"`
}

DaemonCheck represents a daemon health check result

type DepCheck

type DepCheck struct {
	Name       string `json:"name"`
	Installed  bool   `json:"installed"`
	Version    string `json:"version,omitempty"`
	MinVersion string `json:"min_version,omitempty"`
	Status     string `json:"status"`
	Message    string `json:"message,omitempty"`
}

DepCheck represents a dependency check result

type DependencyAwareResult

type DependencyAwareResult struct {
	CompletedBeadID string          `json:"completed_bead_id"`
	NewlyUnblocked  []UnblockedBead `json:"newly_unblocked"`
	CyclesDetected  [][]string      `json:"cycles_detected,omitempty"`
	Errors          []string        `json:"errors,omitempty"`
}

DependencyAwareResult contains the result of an unblock check

func GetNewlyUnblockedBeads

func GetNewlyUnblockedBeads(completedBeadID string, verbose bool) (*DependencyAwareResult, error)

GetNewlyUnblockedBeads checks what beads are now unblocked after a bead completion. This is the core function for dependency-aware reassignment. It refreshes the dependency graph from bv and identifies beads that: 1. Were previously blocked by the completed bead 2. Have no remaining blockers (all their dependencies are now completed)

type DepsInput

type DepsInput struct {
	Verbose bool `json:"verbose,omitempty"`
}

DepsInput is the kernel input for core.deps.

type DirectAssignData

type DirectAssignData struct {
	Assignment       *DirectAssignItem             `json:"assignment"`
	FileReservations *DirectAssignFileReservations `json:"file_reservations,omitempty"`
}

DirectAssignData holds the data for a direct pane assignment.

type DirectAssignFileReservations

type DirectAssignFileReservations struct {
	Requested []string `json:"requested"`
	Granted   []string `json:"granted"`
	Denied    []string `json:"denied"`
}

DirectAssignFileReservations holds file reservation details for direct assignment.

type DirectAssignItem

type DirectAssignItem struct {
	BeadID       string   `json:"bead_id"`
	BeadTitle    string   `json:"bead_title"`
	Pane         int      `json:"pane"`
	AgentType    string   `json:"agent_type"`
	Status       string   `json:"status"`
	Prompt       string   `json:"prompt"`
	PromptSent   bool     `json:"prompt_sent"`
	AssignedAt   string   `json:"assigned_at"`
	PaneWasBusy  bool     `json:"pane_was_busy,omitempty"`
	DepsIgnored  bool     `json:"deps_ignored,omitempty"`
	BlockedByIDs []string `json:"blocked_by_ids,omitempty"`
}

DirectAssignItem represents a single direct assignment in JSON output.

type DirectAssignResult

type DirectAssignResult struct {
	BeadID         string                        `json:"bead_id"`
	BeadTitle      string                        `json:"bead_title,omitempty"`
	Pane           int                           `json:"pane"`
	AgentType      string                        `json:"agent_type"`
	AgentName      string                        `json:"agent_name,omitempty"`
	PromptSent     string                        `json:"prompt_sent"`
	Success        bool                          `json:"success"`
	Error          string                        `json:"error,omitempty"`
	Reservations   *assign.FileReservationResult `json:"reservations,omitempty"`
	PaneWasBusy    bool                          `json:"pane_was_busy,omitempty"`
	DepsIgnored    bool                          `json:"deps_ignored,omitempty"`
	BlockedByBeads []string                      `json:"blocked_by_beads,omitempty"`
}

DirectAssignResult is the result of a direct pane assignment

type DoctorReport

type DoctorReport struct {
	Timestamp     time.Time        `json:"timestamp"`
	Overall       string           `json:"overall"` // "healthy", "warning", "unhealthy"
	Tools         []ToolCheck      `json:"tools"`
	Dependencies  []DepCheck       `json:"dependencies"`
	Daemons       []DaemonCheck    `json:"daemons"`
	Configuration []ConfigCheck    `json:"configuration"`
	Invariants    []InvariantCheck `json:"invariants"`
	Warnings      int              `json:"warnings"`
	Errors        int              `json:"errors"`
}

DoctorReport contains the full health check report

type ErrorEntry

type ErrorEntry struct {
	Timestamp time.Time `json:"timestamp"`
	Session   string    `json:"session"`
	Pane      string    `json:"pane"`
	PaneIndex int       `json:"pane_index"`
	Line      int       `json:"line"`
	Content   string    `json:"content"`
	MatchType string    `json:"match_type"`
	Context   []string  `json:"context,omitempty"`
	AgentType string    `json:"agent_type,omitempty"`
}

ErrorEntry represents a single error detected in pane output

type ErrorsOptions

type ErrorsOptions struct {
	Since        time.Duration
	Panes        []int
	ContextLines int
	MaxLines     int
	Follow       bool
	Filter       AgentFilter
}

ErrorsOptions contains options for the errors operation

type ErrorsResult

type ErrorsResult struct {
	Session     string       `json:"session"`
	Errors      []ErrorEntry `json:"errors"`
	TotalErrors int          `json:"total_errors"`
	TotalLines  int          `json:"total_lines_searched"`
	PaneCount   int          `json:"panes_searched"`
	Timestamp   time.Time    `json:"timestamp"`
}

ErrorsResult contains all errors found in a session

func (*ErrorsResult) JSON

func (r *ErrorsResult) JSON() interface{}

JSON returns the JSON-serializable data

func (*ErrorsResult) Text

func (r *ErrorsResult) Text(w io.Writer) error

Text outputs the errors result as human-readable text

type ExtractResponse

type ExtractResponse struct {
	output.TimestampedResponse
	Session    string                `json:"session"`
	Source     string                `json:"source"` // Session or session:pane
	Blocks     []codeblock.CodeBlock `json:"blocks"`
	TotalFound int                   `json:"total_found"`
}

ExtractResponse is the JSON output format for extract command.

type FlatAgent

type FlatAgent struct {
	Type  AgentType
	Index int    // 1-based index within type
	Model string // Resolved model (may be empty for default)
}

Flatten expands specs into individual agents with their models

type ForceReleaseResult

type ForceReleaseResult struct {
	Success        bool       `json:"success"`
	Session        string     `json:"session"`
	Agent          string     `json:"agent"`
	ReservationID  int        `json:"reservation_id"`
	PreviousHolder string     `json:"previous_holder,omitempty"`
	PathPattern    string     `json:"path_pattern,omitempty"`
	ReleasedAt     *time.Time `json:"released_at,omitempty"`
	Notified       bool       `json:"notified,omitempty"`
	Error          string     `json:"error,omitempty"`
}

ForceReleaseResult is the JSON output for force-release.

type ForecastItem

type ForecastItem struct {
	ID              string    `json:"id"`
	Title           string    `json:"title"`
	EstimatedETA    time.Time `json:"estimated_eta"`
	ConfidenceLevel float64   `json:"confidence_level"`
	DependencyCount int       `json:"dependency_count"`
	CriticalPath    bool      `json:"critical_path"`
	BlockingFactors []string  `json:"blocking_factors,omitempty"`
}

ForecastItem represents a forecast for a single issue

type ForecastResponse

type ForecastResponse struct {
	Forecasts []ForecastItem `json:"forecasts"`
}

ForecastResponse contains ETA predictions

type GitHubAsset

type GitHubAsset struct {
	Name               string `json:"name"`
	Size               int64  `json:"size"`
	BrowserDownloadURL string `json:"browser_download_url"`
	ContentType        string `json:"content_type"`
}

GitHubAsset represents a release asset

type GitHubRelease

type GitHubRelease struct {
	TagName     string        `json:"tag_name"`
	Name        string        `json:"name"`
	Draft       bool          `json:"draft"`
	Prerelease  bool          `json:"prerelease"`
	PublishedAt time.Time     `json:"published_at"`
	Body        string        `json:"body"`
	Assets      []GitHubAsset `json:"assets"`
	HTMLURL     string        `json:"html_url"`
}

GitHubRelease represents a GitHub release

type GitInfo

type GitInfo struct {
	Branch          string   `json:"branch"`
	Commit          string   `json:"commit"`
	CommitShort     string   `json:"commit_short"`
	Dirty           bool     `json:"dirty"`
	Ahead           int      `json:"ahead"`
	Behind          int      `json:"behind"`
	StagedFiles     []string `json:"staged_files,omitempty"`
	ModifiedFiles   []string `json:"modified_files,omitempty"`
	UntrackedFiles  []string `json:"untracked_files,omitempty"`
	ConflictedFiles []string `json:"conflicted_files,omitempty"`
}

GitInfo contains git repository information.

type GitStatusResult

type GitStatusResult struct {
	Success      bool                        `json:"success"`
	Session      string                      `json:"session,omitempty"`
	WorkingDir   string                      `json:"working_dir"`
	Git          *GitInfo                    `json:"git,omitempty"`
	Reservations []agentmail.InboxMessage    `json:"reservations,omitempty"`
	Locks        []agentmail.FileReservation `json:"locks,omitempty"`
	AgentMail    *AgentMailStatus            `json:"agent_mail,omitempty"`
	Error        string                      `json:"error,omitempty"`
}

GitStatusResult represents the combined git and Agent Mail status.

type GitSyncResult

type GitSyncResult struct {
	Success     bool        `json:"success"`
	Session     string      `json:"session,omitempty"`
	WorkingDir  string      `json:"working_dir"`
	PullResult  *PullResult `json:"pull_result,omitempty"`
	PushResult  *PushResult `json:"push_result,omitempty"`
	HasConflict bool        `json:"has_conflict"`
	Error       string      `json:"error,omitempty"`
}

GitSyncResult represents the result of a git sync operation.

type GraphResponse

type GraphResponse struct {
	Format string      `json:"format"`
	Data   interface{} `json:"data"`
}

GraphResponse contains dependency graph data

type GrepMatch

type GrepMatch struct {
	Session string   `json:"session"`
	Pane    string   `json:"pane"`
	PaneID  string   `json:"pane_id"`
	Line    int      `json:"line"`
	Content string   `json:"content"`
	Context []string `json:"context,omitempty"`
	// ContextBefore/After track how many lines in Context are before/after the match.
	// This avoids assuming a symmetric split when only -A or -B is provided.
	ContextBefore int `json:"context_before,omitempty"`
	ContextAfter  int `json:"context_after,omitempty"`
}

GrepMatch represents a single search match in pane output

type GrepOptions

type GrepOptions struct {
	AllSessions     bool
	CaseInsensitive bool
	InvertMatch     bool
	ContextLines    int
	AfterLines      int
	BeforeLines     int
	MaxLines        int
	ListOnly        bool
	Filter          AgentFilter
}

GrepOptions contains options for the grep operation

type GrepResult

type GrepResult struct {
	Pattern         string      `json:"pattern"`
	Session         string      `json:"session"`
	Matches         []GrepMatch `json:"matches"`
	TotalLines      int         `json:"total_lines_searched"`
	MatchCount      int         `json:"match_count"`
	PaneCount       int         `json:"panes_searched"`
	CaseInsensitive bool        `json:"case_insensitive,omitempty"`
}

GrepResult contains all matches from a grep operation

func (*GrepResult) JSON

func (r *GrepResult) JSON() interface{}

JSON returns the JSON-serializable data

func (*GrepResult) Text

func (r *GrepResult) Text(w io.Writer) error

Text outputs the grep result as human-readable text

type GuardsInstallResponse

type GuardsInstallResponse struct {
	output.TimestampedResponse
	Success    bool   `json:"success"`
	RepoPath   string `json:"repo_path"`
	ProjectKey string `json:"project_key"`
	HookPath   string `json:"hook_path"`
	Message    string `json:"message,omitempty"`
}

GuardsInstallResponse is the JSON output for guards install.

type GuardsStatusResponse

type GuardsStatusResponse struct {
	output.TimestampedResponse
	Installed    bool   `json:"installed"`
	RepoPath     string `json:"repo_path"`
	HookPath     string `json:"hook_path"`
	ProjectKey   string `json:"project_key,omitempty"`
	IsNTMGuard   bool   `json:"is_ntm_guard"`
	OtherHook    bool   `json:"other_hook"`
	MCPAvailable bool   `json:"mcp_available"`
}

GuardsStatusResponse is the JSON output for guards status.

type GuardsUninstallResponse

type GuardsUninstallResponse struct {
	output.TimestampedResponse
	Success  bool   `json:"success"`
	RepoPath string `json:"repo_path"`
	HookPath string `json:"hook_path"`
	Message  string `json:"message,omitempty"`
}

GuardsUninstallResponse is the JSON output for guards uninstall.

type HealthOutput

type HealthOutput struct {
	*health.SessionHealth
	Error string `json:"error,omitempty"`
}

HealthOutput mirrors the JSON output for the health command.

type HistoryListEntry

type HistoryListEntry struct {
	ID         string    `json:"id"`
	Timestamp  time.Time `json:"ts"`
	Session    string    `json:"session"`
	Targets    []string  `json:"targets"`
	Prompt     string    `json:"prompt"`
	Source     string    `json:"source"`
	Template   string    `json:"template,omitempty"`
	Success    bool      `json:"success"`
	Error      string    `json:"error,omitempty"`
	DurationMs int       `json:"duration_ms,omitempty"`
}

HistoryListEntry is a pared-down view for JSON output to keep field names stable.

type HistoryListResult

type HistoryListResult struct {
	Entries    []history.HistoryEntry `json:"entries"`
	TotalCount int                    `json:"total_count"`
	Showing    int                    `json:"showing"`
}

HistoryListResult contains the history list output

func (*HistoryListResult) JSON

func (r *HistoryListResult) JSON() interface{}

func (*HistoryListResult) MarshalJSON

func (r *HistoryListResult) MarshalJSON() ([]byte, error)

MarshalJSON ensures new fields remain stable for JSON consumers.

func (*HistoryListResult) Text

func (r *HistoryListResult) Text(w io.Writer) error

type HistoryResponse

type HistoryResponse struct {
	Stats       HistoryStats          `json:"stats"`
	Histories   []BeadHistory         `json:"histories"`
	CommitIndex map[string]CommitInfo `json:"commit_index"`
}

HistoryResponse contains bead-to-commit correlation data

type HistoryShowResult

type HistoryShowResult struct {
	Entry *history.HistoryEntry `json:"entry"`
}

HistoryShowResult contains a single entry's details

func (*HistoryShowResult) JSON

func (r *HistoryShowResult) JSON() interface{}

func (*HistoryShowResult) Text

func (r *HistoryShowResult) Text(w io.Writer) error

type HistoryStats

type HistoryStats struct {
	TotalBeads      int `json:"total_beads"`
	TotalCommits    int `json:"total_commits"`
	CorrelatedCount int `json:"correlated_count"`
}

HistoryStats contains overall history statistics

type ImpactResponse

type ImpactResponse struct {
	Files       []ImpactResult `json:"files"`
	TotalBeads  int            `json:"total_beads"`
	UniqueBeads int            `json:"unique_beads"`
}

ImpactResponse contains bv impact analysis

type ImpactResult

type ImpactResult struct {
	File         string   `json:"file"`
	ImpactedIDs  []string `json:"impacted_ids"`
	TotalImpact  int      `json:"total_impact"`
	DirectImpact int      `json:"direct_impact"`
}

ImpactResult represents an impact analysis result

type InitWizardModel

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

InitWizardModel is the Bubble Tea model for the init wizard

func NewInitWizard

func NewInitWizard() InitWizardModel

NewInitWizard creates a new init wizard model

func (InitWizardModel) Init

func (m InitWizardModel) Init() tea.Cmd

Init initializes the wizard model

func (InitWizardModel) Result

func (m InitWizardModel) Result() WizardResult

Result returns the wizard result

func (InitWizardModel) Update

func (m InitWizardModel) Update(msg tea.Msg) (tea.Model, tea.Cmd)

Update handles messages for the wizard

func (InitWizardModel) View

func (m InitWizardModel) View() string

View renders the wizard

type InvariantCheck

type InvariantCheck struct {
	ID      string   `json:"id"`
	Name    string   `json:"name"`
	Status  string   `json:"status"` // "ok", "warning", "error"
	Message string   `json:"message,omitempty"`
	Details []string `json:"details,omitempty"`
}

InvariantCheck represents a design invariant check result

type LabelDependency

type LabelDependency struct {
	From   string  `json:"from"`
	To     string  `json:"to"`
	Count  int     `json:"count"`
	Weight float64 `json:"weight"`
}

LabelDependency represents a dependency between labels

type LabelFlowResponse

type LabelFlowResponse struct {
	FlowMatrix       map[string]map[string]int `json:"flow_matrix"`
	Dependencies     []LabelDependency         `json:"dependencies"`
	BottleneckLabels []string                  `json:"bottleneck_labels"`
}

LabelFlowResponse contains cross-label dependency analysis

type LabelHealth

type LabelHealth struct {
	Label         string  `json:"label"`
	HealthLevel   string  `json:"health_level"` // healthy, warning, critical
	VelocityScore float64 `json:"velocity_score"`
	Staleness     float64 `json:"staleness"`
	BlockedCount  int     `json:"blocked_count"`
}

LabelHealth contains health metrics for a single label

type LabelHealthResponse

type LabelHealthResponse struct {
	Results LabelHealthResults `json:"results"`
}

LabelHealthResponse contains health metrics per label

type LabelHealthResults

type LabelHealthResults struct {
	Labels []LabelHealth `json:"labels"`
}

LabelHealthResults contains the actual health data

type LockResult

type LockResult struct {
	Success   bool                            `json:"success"`
	Session   string                          `json:"session"`
	Agent     string                          `json:"agent"`
	Granted   []agentmail.FileReservation     `json:"granted,omitempty"`
	Conflicts []agentmail.ReservationConflict `json:"conflicts,omitempty"`
	TTL       string                          `json:"ttl"`
	ExpiresAt *time.Time                      `json:"expires_at,omitempty"`
	Error     string                          `json:"error,omitempty"`
}

LockResult represents the result of a lock operation.

type LocksResult

type LocksResult struct {
	Success      bool                        `json:"success"`
	Session      string                      `json:"session"`
	Agent        string                      `json:"agent,omitempty"`
	ProjectKey   string                      `json:"project_key"`
	Reservations []agentmail.FileReservation `json:"reservations"`
	Count        int                         `json:"count"`
	Error        string                      `json:"error,omitempty"`
}

LocksResult contains the list of active file reservations.

type OpenAPIGenerateInput

type OpenAPIGenerateInput struct {
	Output    string `json:"output"`
	Version   string `json:"version"`
	ServerURL string `json:"server_url"`
	Stdout    bool   `json:"stdout"`
}

OpenAPIGenerateInput holds input parameters for OpenAPI generation.

type OpenAPIGenerateResponse

type OpenAPIGenerateResponse struct {
	Success    bool   `json:"success"`
	OutputPath string `json:"output_path,omitempty"`
	Message    string `json:"message,omitempty"`
}

OpenAPIGenerateResponse holds the result of OpenAPI generation.

type PaneOutput

type PaneOutput struct {
	Index     int    `json:"index"`
	Project   string `json:"project"`
	AgentType string `json:"agent_type"`
}

type PendingRotationInfo

type PendingRotationInfo struct {
	AgentID        string  `json:"agent_id"`
	SessionName    string  `json:"session_name"`
	ContextPercent float64 `json:"context_percent"`
	TimeoutSeconds int     `json:"timeout_seconds"`
	DefaultAction  string  `json:"default_action"`
	CreatedAt      string  `json:"created_at"`
}

PendingRotationInfo contains info about a pending rotation for display

type PendingRotationsResult

type PendingRotationsResult struct {
	Pending []PendingRotationInfo `json:"pending"`
	Count   int                   `json:"count"`
}

PendingRotationsResult contains the pending rotations output

func (*PendingRotationsResult) JSON

func (r *PendingRotationsResult) JSON() interface{}

func (*PendingRotationsResult) Text

type PersonaAgentInfo

type PersonaAgentInfo struct {
	PersonaName string
	AgentType   AgentType
	Model       string
	Index       int
}

PersonaAgentInfo holds information about an agent spawned from a persona

func FlattenPersonas

func FlattenPersonas(resolved []ResolvedPersonaAgent) []PersonaAgentInfo

FlattenPersonas expands resolved personas into individual agent entries

type PersonaSpec

type PersonaSpec struct {
	Name  string
	Count int // Default 1
}

PersonaSpec represents a parsed persona specification with optional count

func ParsePersonaSpec

func ParsePersonaSpec(value string) (PersonaSpec, error)

ParsePersonaSpec parses a single persona specification string Format: "name" or "name:count" where count defaults to 1

type PersonaSpecs

type PersonaSpecs []PersonaSpec

PersonaSpecs is a slice of PersonaSpec that implements the flag.Value interface

func (*PersonaSpecs) Set

func (s *PersonaSpecs) Set(value string) error

Set implements flag.Value for parsing and accumulating persona specs

func (*PersonaSpecs) String

func (s *PersonaSpecs) String() string

String implements flag.Value

func (PersonaSpecs) TotalCount

func (s PersonaSpecs) TotalCount() int

TotalCount returns the sum of all persona counts

func (*PersonaSpecs) Type

func (s *PersonaSpecs) Type() string

Type returns the type name for pflag

type PolicyRulesDetail

type PolicyRulesDetail struct {
	Blocked          []RuleSummary `json:"blocked,omitempty"`
	ApprovalRequired []RuleSummary `json:"approval_required,omitempty"`
	Allowed          []RuleSummary `json:"allowed,omitempty"`
}

PolicyRulesDetail contains detailed rule information.

type PolicyShowResponse

type PolicyShowResponse struct {
	output.TimestampedResponse
	Version    int                     `json:"version"`
	PolicyPath string                  `json:"policy_path,omitempty"`
	IsDefault  bool                    `json:"is_default"`
	Stats      PolicyStats             `json:"stats"`
	Automation policy.AutomationConfig `json:"automation"`
	Rules      *PolicyRulesDetail      `json:"rules,omitempty"`
}

PolicyShowResponse is the JSON output for policy show.

type PolicyStats

type PolicyStats struct {
	Blocked  int `json:"blocked"`
	Approval int `json:"approval"`
	Allowed  int `json:"allowed"`
	SLBRules int `json:"slb_rules"`
}

PolicyStats contains rule counts.

type PolicyValidateResponse

type PolicyValidateResponse struct {
	output.TimestampedResponse
	Valid      bool     `json:"valid"`
	PolicyPath string   `json:"policy_path"`
	Errors     []string `json:"errors,omitempty"`
	Warnings   []string `json:"warnings,omitempty"`
}

PolicyValidateResponse is the JSON output for policy validate.

type PreflightFinding added in v1.7.0

type PreflightFinding struct {
	ID       string         `json:"id"`
	Severity string         `json:"severity"`
	Message  string         `json:"message"`
	Help     string         `json:"help"`
	Metadata map[string]any `json:"metadata,omitempty"`
	Start    int            `json:"start,omitempty"`
	End      int            `json:"end,omitempty"`
	Line     int            `json:"line,omitempty"`
}

PreflightFinding represents a single lint finding in preflight output.

type PreflightInput added in v1.7.0

type PreflightInput struct {
	Prompt string `json:"prompt"`
	Strict bool   `json:"strict,omitempty"`
}

PreflightInput is the input for the kernel command.

type PreflightResult added in v1.7.0

type PreflightResult struct {
	robot.RobotResponse

	// Core results
	PreviewHash     string             `json:"preview_hash"`
	PreviewLen      int                `json:"preview_len"`
	EstimatedTokens int                `json:"estimated_tokens"`
	Findings        []PreflightFinding `json:"findings"`

	// Summary counts
	ErrorCount   int `json:"error_count"`
	WarningCount int `json:"warning_count"`
	InfoCount    int `json:"info_count"`

	// Prompt preview (truncated if long)
	Preview string `json:"preview,omitempty"`

	// DCG integration status
	DCGAvailable bool `json:"dcg_available"`
}

PreflightResult is the JSON output for the preflight command.

type ProfileSwitchResult

type ProfileSwitchResult struct {
	Success    bool   `json:"success"`
	AgentID    string `json:"agent_id"`
	PaneID     string `json:"pane_id"`
	OldProfile string `json:"old_profile,omitempty"`
	NewProfile string `json:"new_profile"`
	Message    string `json:"message,omitempty"`
	Error      string `json:"error,omitempty"`
}

ProfileSwitchResult contains the result of a profile switch operation

type ProjectType

type ProjectType int

ProjectType represents the type of project being initialized

const (
	ProjectGo ProjectType = iota
	ProjectPython
	ProjectNode
	ProjectRust
	ProjectOther
)

func (ProjectType) String

func (p ProjectType) String() string

type PromptStatus

type PromptStatus struct {
	// Pane is the pane title (e.g., "proj__cc_1")
	Pane string `json:"pane"`

	// PaneID is the tmux pane ID for reliable lookup
	PaneID string `json:"pane_id"`

	// Order is the 1-based spawn order
	Order int `json:"order"`

	// ScheduledAt is when the prompt is scheduled to be sent
	ScheduledAt time.Time `json:"scheduled"`

	// Sent indicates whether the prompt has been delivered
	Sent bool `json:"sent"`

	// SentAt is when the prompt was actually sent (zero if not sent)
	SentAt time.Time `json:"sent_at,omitempty"`
}

PromptStatus tracks the delivery status of a single agent's prompt.

type PullResult

type PullResult struct {
	Success         bool     `json:"success"`
	FastForward     bool     `json:"fast_forward"`
	Behind          int      `json:"behind"`
	Merged          int      `json:"merged"`
	Files           []string `json:"files,omitempty"`
	Conflicts       []string `json:"conflicts,omitempty"`
	Error           string   `json:"error,omitempty"`
	AlreadyUpToDate bool     `json:"already_up_to_date"`
}

PullResult contains the result of a git pull operation.

type PushResult

type PushResult struct {
	Success       bool   `json:"success"`
	Ahead         int    `json:"ahead"`
	Pushed        int    `json:"pushed"`
	Remote        string `json:"remote"`
	Branch        string `json:"branch"`
	Error         string `json:"error,omitempty"`
	NothingToPush bool   `json:"nothing_to_push"`
}

PushResult contains the result of a git push operation.

type ReassignData

type ReassignData struct {
	BeadID                       string `json:"bead_id"`
	BeadTitle                    string `json:"bead_title"`
	Pane                         int    `json:"pane"`
	AgentType                    string `json:"agent_type"`
	AgentName                    string `json:"agent_name,omitempty"`
	Status                       string `json:"status"`
	PromptSent                   bool   `json:"prompt_sent"`
	AssignedAt                   string `json:"assigned_at"`
	PreviousPane                 int    `json:"previous_pane"`
	PreviousAgent                string `json:"previous_agent,omitempty"`
	PreviousAgentType            string `json:"previous_agent_type"`
	PreviousStatus               string `json:"previous_status"`
	FileReservationsTransferred  bool   `json:"file_reservations_transferred"`
	FileReservationsReleasedFrom int    `json:"file_reservations_released_from,omitempty"`
	FileReservationsCreatedFor   int    `json:"file_reservations_created_for,omitempty"`
}

ReassignData holds the successful reassignment data.

type ReassignEnvelope

type ReassignEnvelope struct {
	Command    string         `json:"command"`
	Subcommand string         `json:"subcommand"`
	Session    string         `json:"session"`
	Timestamp  string         `json:"timestamp"`
	Success    bool           `json:"success"`
	Data       *ReassignData  `json:"data,omitempty"`
	Warnings   []string       `json:"warnings"`
	Error      *ReassignError `json:"error,omitempty"`
}

ReassignEnvelope is the standard JSON envelope for reassignment operations.

type ReassignError

type ReassignError struct {
	Code    string                 `json:"code"`
	Message string                 `json:"message"`
	Details map[string]interface{} `json:"details,omitempty"`
}

ReassignError represents an error in the reassignment envelope.

type RecipeInfo

type RecipeInfo struct {
	Name        string `json:"name"`
	Description string `json:"description"`
	Source      string `json:"source"`
	TotalAgents int    `json:"total_agents"`
}

RecipeInfo is a recipe summary for JSON output.

type RecipeShowResult

type RecipeShowResult struct {
	Name        string             `json:"name"`
	Description string             `json:"description"`
	Source      string             `json:"source"`
	TotalAgents int                `json:"total_agents"`
	Agents      []recipe.AgentSpec `json:"agents"`
}

RecipeShowResult is the JSON output for recipes show command.

type RecipesListResult

type RecipesListResult struct {
	Recipes []RecipeInfo `json:"recipes"`
	Total   int          `json:"total"`
}

RecipesListResult is the JSON output for recipes list command.

type RecoveryAssignmentSummary

type RecoveryAssignmentSummary struct {
	Total      int `json:"total"`
	Assigned   int `json:"assigned,omitempty"`
	Working    int `json:"working,omitempty"`
	Completed  int `json:"completed,omitempty"`
	Failed     int `json:"failed,omitempty"`
	Reassigned int `json:"reassigned,omitempty"`
}

RecoveryAssignmentSummary captures assignment status counts from a checkpoint.

type RecoveryBVSummary

type RecoveryBVSummary struct {
	OpenCount       int       `json:"open_count"`
	ActionableCount int       `json:"actionable_count"`
	BlockedCount    int       `json:"blocked_count"`
	InProgressCount int       `json:"in_progress_count"`
	TopPicks        []string  `json:"top_picks,omitempty"`
	CapturedAt      time.Time `json:"captured_at"`
}

RecoveryBVSummary captures BV snapshot counts from a checkpoint.

type RecoveryBead

type RecoveryBead struct {
	ID       string `json:"id"`
	Title    string `json:"title"`
	Assignee string `json:"assignee,omitempty"`
}

RecoveryBead represents a bead in recovery context

type RecoveryCMMemories

type RecoveryCMMemories struct {
	Rules        []RecoveryCMRule `json:"rules,omitempty"`
	AntiPatterns []RecoveryCMRule `json:"anti_patterns,omitempty"`
}

RecoveryCMMemories contains procedural memories from CASS Memory (CM)

type RecoveryCMRule

type RecoveryCMRule struct {
	ID       string `json:"id"`
	Content  string `json:"content"`
	Category string `json:"category,omitempty"`
}

RecoveryCMRule represents a rule from CM playbook

type RecoveryCheckpoint

type RecoveryCheckpoint struct {
	ID          string                     `json:"id"`
	Name        string                     `json:"name"`
	Description string                     `json:"description"`
	CreatedAt   time.Time                  `json:"created_at"`
	PaneCount   int                        `json:"pane_count"`
	HasGitPatch bool                       `json:"has_git_patch"`
	Assignments *RecoveryAssignmentSummary `json:"assignments_summary,omitempty"`
	BVSummary   *RecoveryBVSummary         `json:"bv_summary,omitempty"`
}

RecoveryCheckpoint represents checkpoint info for recovery.

type RecoveryContext

type RecoveryContext struct {
	// Checkpoint contains checkpoint info for recovery
	Checkpoint *RecoveryCheckpoint `json:"checkpoint,omitempty"`
	// Beads contains in-progress beads from BV
	Beads []RecoveryBead `json:"beads,omitempty"`
	// CompletedBeads contains recently completed beads for context
	CompletedBeads []RecoveryBead `json:"completed_beads,omitempty"`
	// BlockedBeads contains blocked beads for awareness
	BlockedBeads []RecoveryBead `json:"blocked_beads,omitempty"`
	// Messages contains recent Agent Mail messages
	Messages []RecoveryMessage `json:"messages,omitempty"`
	// CMMemories contains procedural memories from CM
	CMMemories *RecoveryCMMemories `json:"cm_memories,omitempty"`
	// FileReservations contains files currently reserved by this session
	FileReservations []string `json:"file_reservations,omitempty"`
	// ReservationTransfer contains results from attempting to transfer reservations
	ReservationTransfer *handoff.ReservationTransferResult `json:"reservation_transfer,omitempty"`
	// Sessions contains past sessions for recovery context
	Sessions []RecoverySession `json:"sessions,omitempty"`
	// Summary is a human-readable summary of the recovery context
	Summary string `json:"summary,omitempty"`
	// TokenCount is an estimate of the total token count
	TokenCount int `json:"token_count,omitempty"`
	// Error contains error info if recovery was partial
	Error *RecoveryError `json:"error,omitempty"`
}

RecoveryContext holds all the information needed to help an agent recover from a previous session, including beads, messages, and procedural memories.

type RecoveryError

type RecoveryError struct {
	Code        string   `json:"code"`
	Message     string   `json:"message"`
	Component   string   `json:"component"` // Which component failed
	Recoverable bool     `json:"recoverable"`
	Details     []string `json:"details,omitempty"`
}

RecoveryError represents an error during recovery context building.

type RecoveryMessage

type RecoveryMessage struct {
	ID         int       `json:"id"`
	From       string    `json:"from"`
	Subject    string    `json:"subject"`
	Body       string    `json:"body,omitempty"`
	Importance string    `json:"importance,omitempty"`
	CreatedAt  time.Time `json:"created_at"`
}

RecoveryMessage represents an Agent Mail message in recovery context

type RecoverySession

type RecoverySession struct {
	Name      string    `json:"name"`
	CreatedAt time.Time `json:"created_at"`
	AgentType string    `json:"agent_type"`
}

RecoverySession represents a previous session for recovery.

type RedactionSummary added in v1.7.0

type RedactionSummary struct {
	Mode       string         `json:"mode"`
	Findings   int            `json:"findings"`
	Categories map[string]int `json:"categories,omitempty"`
	Action     string         `json:"action,omitempty"` // warn|redact|block
}

RedactionSummary is a safe-to-print summary of redaction findings. It intentionally does NOT include the matched secret values.

type RenewResult

type RenewResult struct {
	Success       bool   `json:"success"`
	Session       string `json:"session"`
	Agent         string `json:"agent"`
	ExtendMinutes int    `json:"extend_minutes"`
	Error         string `json:"error,omitempty"`
}

RenewResult is the JSON output for renew.

type ResolvedPersonaAgent

type ResolvedPersonaAgent struct {
	Persona *persona.Persona
	Type    AgentType
	Model   string
	Index   int // 1-based index within this persona
}

ResolvedPersonaAgent represents a resolved persona ready to spawn

func ResolvePersonas

func ResolvePersonas(specs PersonaSpecs, projectDir string) ([]ResolvedPersonaAgent, error)

ResolvePersonas converts persona specs into resolved agents using the registry Returns the resolved agents and any validation errors

type ResumeHandoffInfo

type ResumeHandoffInfo struct {
	Path       string            `json:"path"`
	Session    string            `json:"session"`
	Goal       string            `json:"goal"`
	Now        string            `json:"now"`
	Status     string            `json:"status"`
	Outcome    string            `json:"outcome,omitempty"`
	Decisions  map[string]string `json:"decisions,omitempty"`
	Next       []string          `json:"next,omitempty"`
	Blockers   []string          `json:"blockers,omitempty"`
	AgeSeconds int64             `json:"age_seconds"`
	FileCount  int               `json:"file_count"`
}

ResumeHandoffInfo contains handoff details for JSON output.

type ResumeInjectInfo

type ResumeInjectInfo struct {
	Session     string `json:"session"`
	PanesSent   int    `json:"panes_sent"`
	PanesFailed int    `json:"panes_failed"`
}

ResumeInjectInfo contains inject operation details.

type ResumeResult

type ResumeResult struct {
	Success    bool               `json:"success"`
	Action     string             `json:"action"` // display, spawn, inject
	Handoff    *ResumeHandoffInfo `json:"handoff,omitempty"`
	SpawnInfo  *ResumeSpawnInfo   `json:"spawn_info,omitempty"`
	InjectInfo *ResumeInjectInfo  `json:"inject_info,omitempty"`
	Error      string             `json:"error,omitempty"`
}

ResumeResult is the JSON output for the resume command.

type ResumeSpawnInfo

type ResumeSpawnInfo struct {
	Session   string   `json:"session"`
	PaneCount int      `json:"pane_count"`
	PaneIDs   []string `json:"pane_ids,omitempty"`
}

ResumeSpawnInfo contains spawn operation details.

type RetryData

type RetryData struct {
	Retried []RetryItem        `json:"retried"`
	Skipped []RetrySkippedItem `json:"skipped"`
	Summary RetrySummary       `json:"summary"`
}

RetryData holds the data payload for retry operations.

type RetryItem

type RetryItem struct {
	BeadID             string `json:"bead_id"`
	BeadTitle          string `json:"bead_title"`
	Pane               int    `json:"pane"`
	AgentType          string `json:"agent_type"`
	AgentName          string `json:"agent_name,omitempty"`
	Status             string `json:"status"`
	PromptSent         bool   `json:"prompt_sent"`
	AssignedAt         string `json:"assigned_at"`
	PreviousPane       int    `json:"previous_pane"`
	PreviousAgent      string `json:"previous_agent,omitempty"`
	PreviousFailReason string `json:"previous_fail_reason,omitempty"`
	RetryCount         int    `json:"retry_count"`
}

RetryItem holds data for a single retried assignment.

type RetrySkippedItem

type RetrySkippedItem struct {
	BeadID string `json:"bead_id"`
	Reason string `json:"reason"`
}

RetrySkippedItem holds data for a skipped retry.

type RetrySummary

type RetrySummary struct {
	TotalFailed  int `json:"total_failed"`
	RetriedCount int `json:"retried_count"`
	SkippedCount int `json:"skipped_count"`
}

RetrySummary provides summary statistics for retry operations.

type RotationHistoryResult

type RotationHistoryResult struct {
	Records    []ctxmon.RotationRecord `json:"records"`
	TotalCount int                     `json:"total_count"`
	Showing    int                     `json:"showing"`
}

RotationHistoryResult contains the rotation history output

func (*RotationHistoryResult) JSON

func (r *RotationHistoryResult) JSON() interface{}

func (*RotationHistoryResult) Text

func (r *RotationHistoryResult) Text(w io.Writer) error

type RotationStatsResult

type RotationStatsResult struct {
	*ctxmon.RotationStats
}

RotationStatsResult contains the rotation statistics output

func (*RotationStatsResult) JSON

func (r *RotationStatsResult) JSON() interface{}

func (*RotationStatsResult) Text

func (r *RotationStatsResult) Text(w io.Writer) error

type RuleSummary

type RuleSummary struct {
	Pattern string `json:"pattern"`
	Reason  string `json:"reason,omitempty"`
	SLB     bool   `json:"slb,omitempty"`
}

RuleSummary is a simplified rule representation.

type SafetyStatusResponse

type SafetyStatusResponse struct {
	output.TimestampedResponse
	Installed     bool   `json:"installed"`
	PolicyPath    string `json:"policy_path,omitempty"`
	BlockedCount  int    `json:"blocked_rules"`
	ApprovalCount int    `json:"approval_rules"`
	AllowedCount  int    `json:"allowed_rules"`
	WrapperPath   string `json:"wrapper_path,omitempty"`
	HookInstalled bool   `json:"hook_installed"`
}

SafetyStatusResponse is the JSON output for safety status.

type ScopeChange

type ScopeChange struct {
	Timestamp time.Time `json:"timestamp"`
	Action    string    `json:"action"` // added, removed, modified
	IssueID   string    `json:"issue_id"`
	Points    int       `json:"points"`
}

ScopeChange represents a change in sprint scope

type SearchResponse

type SearchResponse struct {
	Query   string         `json:"query"`
	Results []SearchResult `json:"results"`
}

SearchResponse contains bv search results

type SearchResult

type SearchResult struct {
	ID       string  `json:"id"`
	Title    string  `json:"title"`
	Score    float64 `json:"score"`
	Status   string  `json:"status"`
	Priority int     `json:"priority"`
	Snippet  string  `json:"snippet,omitempty"`
}

SearchResult represents a search result from bv

type SendDryRunEntry added in v1.7.0

type SendDryRunEntry struct {
	Pane          int    `json:"pane"`
	Agent         string `json:"agent,omitempty"`
	Prompt        string `json:"prompt"`
	PromptPreview string `json:"prompt_preview,omitempty"`
	Source        string `json:"source,omitempty"`
}

type SendDryRunResult added in v1.7.0

type SendDryRunResult struct {
	Success   bool               `json:"success"`
	DryRun    bool               `json:"dry_run"`
	Session   string             `json:"session"`
	Redaction *RedactionSummary  `json:"redaction,omitempty"`
	Warnings  []string           `json:"warnings,omitempty"`
	Blocked   bool               `json:"blocked,omitempty"`
	ErrorCode string             `json:"error_code,omitempty"`
	Total     int                `json:"total"`
	WouldSend []SendDryRunEntry  `json:"would_send"`
	RoutedTo  *SendRoutingResult `json:"routed_to,omitempty"`
	Message   string             `json:"message,omitempty"`
	Error     string             `json:"error,omitempty"`
}

type SendOptions

type SendOptions struct {
	Session        string
	Prompt         string
	PromptSource   string
	Targets        SendTargets
	TargetAll      bool
	SkipFirst      bool
	PaneIndex      int
	Panes          []int // Specific pane indices to target
	PanesSpecified bool  // True if --panes was explicitly set
	TemplateName   string
	Tags           []string
	DryRun         bool

	// Smart routing options
	SmartRoute    bool   // Use smart routing to select best agent
	RouteStrategy string // Routing strategy (least-loaded, round-robin, etc.)

	// CASS check options
	CassCheck      bool
	CassSimilarity float64
	CassCheckDays  int

	// Hooks
	NoHooks bool

	// Batch processing options
	BatchFile       string        // Path to batch file
	BatchDelay      time.Duration // Delay between prompts
	BatchConfirm    bool          // Confirm each prompt before sending
	BatchStopOnErr  bool          // Stop on first error
	BatchBroadcast  bool          // Send same prompt to all agents simultaneously
	BatchAgentIndex int           // Send to specific agent index (-1 = round-robin)
	// contains filtered or unexported fields
}

SendOptions configures the send operation

type SendResult

type SendResult struct {
	Success       bool               `json:"success"`
	Session       string             `json:"session"`
	PromptPreview string             `json:"prompt_preview,omitempty"`
	Redaction     *RedactionSummary  `json:"redaction,omitempty"`
	Warnings      []string           `json:"warnings,omitempty"`
	Blocked       bool               `json:"blocked,omitempty"`
	ErrorCode     string             `json:"error_code,omitempty"`
	Targets       []int              `json:"targets"`
	Delivered     int                `json:"delivered"`
	Failed        int                `json:"failed"`
	RoutedTo      *SendRoutingResult `json:"routed_to,omitempty"`
	Error         string             `json:"error,omitempty"`
}

SendResult is the JSON output for the send command.

type SendRoutingResult

type SendRoutingResult struct {
	PaneIndex int     `json:"pane_index"`
	AgentType string  `json:"agent_type"`
	Strategy  string  `json:"strategy"`
	Reason    string  `json:"reason"`
	Score     float64 `json:"score"`
}

SendRoutingResult contains routing decision info for smart routing.

type SendTarget

type SendTarget struct {
	Type    AgentType
	Variant string // Empty = all agents of type; non-empty = filter by variant
}

SendTarget represents a send target with optional variant filter. Used for --cc:opus style flags where variant filters to specific model/persona.

type SendTargets

type SendTargets []SendTarget

SendTargets is a slice of SendTarget that implements pflag.Value for accumulating

func (SendTargets) HasTargetsForType

func (s SendTargets) HasTargetsForType(t AgentType) bool

HasTargetsForType checks if any targets match the given agent type

func (SendTargets) MatchesPane

func (s SendTargets) MatchesPane(pane tmux.Pane) bool

MatchesPane checks if any target matches the given pane

func (*SendTargets) Set

func (s *SendTargets) Set(value string) error

func (*SendTargets) String

func (s *SendTargets) String() string

func (*SendTargets) Type

func (s *SendTargets) Type() string

type SessionAttachInput

type SessionAttachInput struct {
	Session string `json:"session"`
}

SessionAttachInput is the kernel input for sessions.attach.

type SessionCreateInput

type SessionCreateInput struct {
	Session string `json:"session"`
	Panes   int    `json:"panes,omitempty"`
}

SessionCreateInput is the kernel input for sessions.create.

type SessionHealthInput

type SessionHealthInput struct {
	Session string `json:"session"`
	Pane    *int   `json:"pane,omitempty"`
	Status  string `json:"status,omitempty"`
	Verbose bool   `json:"verbose,omitempty"`
}

SessionHealthInput is the kernel input for sessions.health.

type SessionInterruptInput

type SessionInterruptInput struct {
	Session string   `json:"session"`
	Tags    []string `json:"tags,omitempty"`
}

SessionInterruptInput is the kernel input for sessions.interrupt.

type SessionKillInput

type SessionKillInput struct {
	Session   string   `json:"session"`
	Force     bool     `json:"force,omitempty"`
	Tags      []string `json:"tags,omitempty"`
	NoHooks   bool     `json:"no_hooks,omitempty"`
	Summarize bool     `json:"summarize,omitempty"` // Generate summary before killing
}

SessionKillInput is the kernel input for sessions.kill.

type SessionListInput

type SessionListInput struct {
	Tags []string `json:"tags,omitempty"`
}

SessionListInput is the kernel input for sessions.list.

type SessionOutput

type SessionOutput struct {
	Name      string       `json:"name"`
	AgentType string       `json:"agent_type"`
	PaneCount int          `json:"pane_count"`
	Panes     []PaneOutput `json:"panes"`
}

type SessionResolution

type SessionResolution struct {
	Session  string
	Reason   string
	Inferred bool // Session arg was omitted and we resolved automatically/with chooser.
	Prompted bool // User picked from a selector (may be canceled).
}

func ResolveSession

func ResolveSession(session string, w io.Writer) (SessionResolution, error)

ResolveSession resolves an optional session argument using a shared algorithm: 1) Current tmux session (if inside tmux) 2) Best-effort inference from cwd/project 3) Single running session auto-pick 4) Interactive chooser (when allowed)

If the user cancels the chooser, SessionResolution.Session is empty and error is nil.

func ResolveSessionWithOptions

func ResolveSessionWithOptions(session string, w io.Writer, opts SessionResolveOptions) (SessionResolution, error)

func (SessionResolution) ExplainIfInferred

func (r SessionResolution) ExplainIfInferred(w io.Writer)

type SessionResolveOptions

type SessionResolveOptions struct {
	// TreatAsJSON disables prompting for local-json subcommands that don't use the global flag.
	TreatAsJSON bool
}

type SessionStatusInput

type SessionStatusInput struct {
	Session         string   `json:"session"`
	Tags            []string `json:"tags,omitempty"`
	ShowAssignments bool     `json:"show_assignments,omitempty"`
	FilterStatus    string   `json:"status,omitempty"`
	FilterAgent     string   `json:"agent,omitempty"`
	FilterPane      *int     `json:"pane,omitempty"`
	ShowSummary     bool     `json:"summary,omitempty"`
}

SessionStatusInput is the kernel input for sessions.status.

type SessionSummary

type SessionSummary struct {
	Name        string    `json:"name"`
	CreatedAt   time.Time `json:"created_at"`
	AgentCount  int       `json:"agent_count"`
	PromptCount int       `json:"prompt_count"`
}

SessionSummary provides details about a single session.

type SessionTemplateInfo

type SessionTemplateInfo struct {
	Name        string   `json:"name"`
	Description string   `json:"description"`
	Source      string   `json:"source"`
	Tags        []string `json:"tags,omitempty"`
	AgentCount  int      `json:"agent_count"`
}

SessionTemplateInfo is a session template summary for JSON output.

type SessionTemplateShowResult

type SessionTemplateShowResult struct {
	Name        string                        `json:"name"`
	Description string                        `json:"description"`
	Source      string                        `json:"source"`
	Tags        []string                      `json:"tags,omitempty"`
	Agents      *templates.AgentsSpec         `json:"agents"`
	Prompts     *templates.PromptsSpec        `json:"prompts,omitempty"`
	CASS        *templates.CASSSpec           `json:"cass,omitempty"`
	Beads       *templates.BeadsSpec          `json:"beads,omitempty"`
	Options     *templates.SessionOptionsSpec `json:"options,omitempty"`
}

SessionTemplateShowResult is the JSON output for session-templates show command.

type SessionTemplatesListResult

type SessionTemplatesListResult struct {
	Templates []SessionTemplateInfo `json:"templates"`
	Total     int                   `json:"total"`
}

SessionTemplatesListResult is the JSON output for session-templates list command.

type SessionViewInput

type SessionViewInput struct {
	Session string `json:"session"`
}

SessionViewInput is the kernel input for sessions.view.

type SessionZoomInput

type SessionZoomInput struct {
	Session string `json:"session"`
	Pane    *int   `json:"pane,omitempty"`
}

SessionZoomInput is the kernel input for sessions.zoom.

type SessionsListResult

type SessionsListResult struct {
	Sessions []session.SavedSession `json:"sessions"`
	Count    int                    `json:"count"`
}

SessionsListResult contains the list of saved sessions.

func (*SessionsListResult) JSON

func (r *SessionsListResult) JSON() interface{}

func (*SessionsListResult) Text

func (r *SessionsListResult) Text(w io.Writer) error

type SessionsRestoreResult

type SessionsRestoreResult struct {
	Success    bool                  `json:"success"`
	SavedName  string                `json:"saved_name"`
	RestoredAs string                `json:"restored_as"`
	State      *session.SessionState `json:"state,omitempty"`
	AgentCount int                   `json:"agent_count"`
	Error      string                `json:"error,omitempty"`
	GitWarning string                `json:"git_warning,omitempty"`
}

SessionsRestoreResult represents the result of a restore operation.

func (*SessionsRestoreResult) JSON

func (r *SessionsRestoreResult) JSON() interface{}

func (*SessionsRestoreResult) Text

func (r *SessionsRestoreResult) Text(w io.Writer) error

type SessionsSaveResult

type SessionsSaveResult struct {
	Success  bool                  `json:"success"`
	Session  string                `json:"session"`
	SavedAs  string                `json:"saved_as"`
	FilePath string                `json:"file_path"`
	State    *session.SessionState `json:"state,omitempty"`
	Error    string                `json:"error,omitempty"`
}

SessionsSaveResult represents the result of a save operation.

func (*SessionsSaveResult) JSON

func (r *SessionsSaveResult) JSON() interface{}

func (*SessionsSaveResult) Text

func (r *SessionsSaveResult) Text(w io.Writer) error

type SessionsShowResult

type SessionsShowResult struct {
	State *session.SessionState `json:"state"`
}

SessionsShowResult contains a saved session's full state.

func (*SessionsShowResult) JSON

func (r *SessionsShowResult) JSON() interface{}

func (*SessionsShowResult) Text

func (r *SessionsShowResult) Text(w io.Writer) error

type SetupResponse

type SetupResponse struct {
	output.TimestampedResponse
	Success           bool     `json:"success"`
	ProjectPath       string   `json:"project_path"`
	NTMDir            string   `json:"ntm_dir"`
	CreatedDirs       []string `json:"created_dirs"`
	CreatedFiles      []string `json:"created_files"`
	WrappersInstalled bool     `json:"wrappers_installed,omitempty"`
	HooksInstalled    bool     `json:"hooks_installed,omitempty"`
	BeadsInitialized  bool     `json:"beads_initialized,omitempty"`
	BeadsWarning      string   `json:"beads_warning,omitempty"`
}

SetupResponse is the JSON output for setup command.

type SkippedItem

type SkippedItem struct {
	BeadID       string   `json:"bead_id"`
	BeadTitle    string   `json:"bead_title"`
	Reason       string   `json:"reason"`
	BlockedByIDs []string `json:"blocked_by_ids,omitempty"` // Only set when reason is "blocked"
}

SkippedItem represents a skipped bead

type SpawnAssignResult

type SpawnAssignResult struct {
	Spawn  *output.SpawnResponse `json:"spawn"`
	Init   *SpawnInitResult      `json:"init,omitempty"`
	Assign *AssignOutputEnhanced `json:"assign,omitempty"`
}

SpawnAssignResult holds the combined result of spawn+assign workflow.

type SpawnContext

type SpawnContext struct {
	BatchID     string    // Unique identifier for this spawn batch
	TotalAgents int       // Total number of agents in this spawn
	CreatedAt   time.Time // When the spawn batch was initiated
}

SpawnContext holds information about the spawn batch for agent coordination. This context enables agents to self-coordinate based on their position in the spawn order.

func NewSpawnContext

func NewSpawnContext(totalAgents int) *SpawnContext

NewSpawnContext creates a new spawn context with a unique batch ID.

func (*SpawnContext) ForAgent

func (sc *SpawnContext) ForAgent(order int, staggerDelay time.Duration) *AgentSpawnContext

ForAgent creates an agent-specific context for the given agent position.

type SpawnInitResult

type SpawnInitResult struct {
	PromptSent    bool `json:"prompt_sent"`
	AgentsReached int  `json:"agents_reached"`
}

SpawnInitResult describes the init phase result.

type SpawnOptions

type SpawnOptions struct {
	Session       string
	Agents        []FlatAgent
	CCCount       int
	CodCount      int
	GmiCount      int
	CursorCount   int
	WindsurfCount int
	AiderCount    int
	UserPane      bool
	AutoRestart   bool
	RecipeName    string
	PersonaMap    map[string]*persona.Persona
	PluginMap     map[string]plugins.AgentPlugin

	// Profile mapping: list of persona names to map to agents in order
	ProfileList []*persona.Persona

	// CASS Context
	CassContextQuery string
	NoCassContext    bool
	Prompt           string
	InitPrompt       string
	LocalModel       string
	LocalHost        string

	// Hooks
	NoHooks bool

	// Safety mode: fail if session already exists
	Safety bool

	// Stagger configuration for thundering herd prevention
	// StaggerMode: "smart", "fixed", or "none" (default)
	// - smart: Use learned optimal delays from RateLimitTracker
	// - fixed: Use fixed delay (StaggerDelay)
	// - none: No staggering (backward compatible default)
	StaggerMode  string        // "smart", "fixed", or "none"
	StaggerDelay time.Duration // Delay for fixed mode (default 30s)

	// Legacy stagger fields (deprecated, kept for backward compatibility)
	Stagger        time.Duration // Delay between agent prompt delivery
	StaggerEnabled bool          // True if --stagger flag was provided

	// Assignment configuration for spawn+assign workflow
	Assign             bool          // Enable auto-assignment after spawn
	AssignStrategy     string        // Assignment strategy: balanced, speed, quality, dependency, round-robin
	AssignLimit        int           // Maximum assignments (0 = unlimited)
	AssignReadyTimeout time.Duration // Timeout waiting for agents to become ready
	AssignVerbose      bool          // Show detailed scoring/decision logs during assignment
	AssignQuiet        bool          // Suppress non-essential assignment output
	AssignTimeout      time.Duration // Timeout for external calls during assignment (bv, br, Agent Mail)
	AssignAgentType    string        // Filter assignment to specific agent type (claude, codex, gemini)

	// Git worktree isolation configuration
	UseWorktrees bool // Enable git worktree isolation for agents

	// Privacy mode configuration (bd-2u3tv)
	PrivacyMode  bool // Enable privacy mode (no persistence)
	AllowPersist bool // Allow persistence even in privacy mode
}

SpawnOptions configures session creation and agent spawning

type SpawnState

type SpawnState struct {

	// BatchID is the unique identifier for this spawn batch
	BatchID string `json:"batch_id"`

	// StartedAt is when the spawn began
	StartedAt time.Time `json:"started_at"`

	// StaggerSeconds is the interval between agent prompts
	StaggerSeconds int `json:"stagger_seconds"`

	// TotalAgents is the total number of agents spawned
	TotalAgents int `json:"total_agents"`

	// Prompts tracks the status of each agent's prompt delivery
	Prompts []PromptStatus `json:"prompts"`

	// CompletedAt is when all prompts were delivered (zero if still in progress)
	CompletedAt time.Time `json:"completed_at,omitempty"`
	// contains filtered or unexported fields
}

SpawnState tracks the stagger schedule for dashboard display. Written by spawn command, read by dashboard for countdown display.

func LoadSpawnState

func LoadSpawnState(projectDir string) (*SpawnState, error)

LoadSpawnState loads spawn state from disk.

func NewSpawnState

func NewSpawnState(batchID string, staggerSeconds int, totalAgents int) *SpawnState

NewSpawnState creates a new spawn state for tracking staggered prompts.

func (*SpawnState) AddPrompt

func (s *SpawnState) AddPrompt(pane, paneID string, order int, scheduledAt time.Time)

AddPrompt adds a prompt to the schedule.

func (*SpawnState) GetPromptStatuses

func (s *SpawnState) GetPromptStatuses() []PromptStatus

GetPromptStatuses returns a copy of all prompt statuses.

func (*SpawnState) IsComplete

func (s *SpawnState) IsComplete() bool

IsComplete returns whether all prompts have been delivered.

func (*SpawnState) MarkComplete

func (s *SpawnState) MarkComplete()

MarkComplete marks the spawn as complete.

func (*SpawnState) MarkSent

func (s *SpawnState) MarkSent(paneID string)

MarkSent marks a prompt as sent.

func (*SpawnState) PendingCount

func (s *SpawnState) PendingCount() int

PendingCount returns the number of prompts not yet sent.

func (*SpawnState) Save

func (s *SpawnState) Save(projectDir string) error

Save writes the spawn state to disk.

func (*SpawnState) TimeUntilNextPrompt

func (s *SpawnState) TimeUntilNextPrompt() time.Duration

TimeUntilNextPrompt returns the duration until the next pending prompt. Returns zero if all prompts are sent or if there's no pending prompt.

type StyledTable

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

StyledTable renders beautiful terminal tables with box-drawing

func NewStyledTable

func NewStyledTable(headers ...string) *StyledTable

NewStyledTable creates a new styled table with headers

func (*StyledTable) AddRow

func (t *StyledTable) AddRow(cols ...string)

AddRow adds a row to the table

func (*StyledTable) Render

func (t *StyledTable) Render() string

Render returns the table as a styled string

func (*StyledTable) RowCount

func (t *StyledTable) RowCount() int

RowCount returns the number of rows

func (*StyledTable) String

func (t *StyledTable) String() string

String implements fmt.Stringer

func (*StyledTable) WithFooter

func (t *StyledTable) WithFooter(footer string) *StyledTable

WithFooter adds a footer to the table

func (*StyledTable) WithStyle

func (t *StyledTable) WithStyle(style TableStyle) *StyledTable

WithStyle sets the table style

func (*StyledTable) WithTitle

func (t *StyledTable) WithTitle(title string) *StyledTable

WithTitle adds a title to the table

type SwarmPlanOutput

type SwarmPlanOutput struct {
	ScanDir         string             `json:"scan_dir"`
	TotalCC         int                `json:"total_cc"`
	TotalCod        int                `json:"total_cod"`
	TotalGmi        int                `json:"total_gmi"`
	TotalAgents     int                `json:"total_agents"`
	SessionsPerType int                `json:"sessions_per_type"`
	PanesPerSession int                `json:"panes_per_session"`
	Allocations     []AllocationOutput `json:"allocations"`
	Sessions        []SessionOutput    `json:"sessions"`
	DryRun          bool               `json:"dry_run"`
	Error           string             `json:"error,omitempty"`
}

SwarmPlanOutput is the JSON output format for swarm plan

type TableStyle

type TableStyle int

TableStyle defines the visual style of a table

const (
	// TableStyleRounded uses rounded box-drawing corners
	TableStyleRounded TableStyle = iota
	// TableStyleSimple uses simple line separators
	TableStyleSimple
	// TableStyleMinimal uses dots and subtle lines
	TableStyleMinimal
)

type TemplateListItem

type TemplateListItem struct {
	Name        string   `json:"name"`
	Description string   `json:"description"`
	Source      string   `json:"source"`
	SourcePath  string   `json:"source_path,omitempty"`
	Tags        []string `json:"tags,omitempty"`
	Variables   []string `json:"variables,omitempty"`
}

TemplateListItem is the JSON output for a single template.

type TemplateShowOutput

type TemplateShowOutput struct {
	Name        string                   `json:"name"`
	Description string                   `json:"description"`
	Source      string                   `json:"source"`
	SourcePath  string                   `json:"source_path,omitempty"`
	Tags        []string                 `json:"tags,omitempty"`
	Variables   []TemplateVariableOutput `json:"variables,omitempty"`
	Body        string                   `json:"body,omitempty"`
}

TemplateShowOutput is the JSON output for template show.

type TemplateVariableOutput

type TemplateVariableOutput struct {
	Name        string `json:"name"`
	Description string `json:"description,omitempty"`
	Required    bool   `json:"required"`
	Default     string `json:"default,omitempty"`
}

TemplateVariableOutput is the JSON output for a template variable.

type TimelineCleanupResult

type TimelineCleanupResult struct {
	Deleted    int `json:"deleted"`
	Remaining  int `json:"remaining"`
	Compressed int `json:"compressed"`
}

TimelineCleanupResult contains cleanup results

func (*TimelineCleanupResult) JSON

func (r *TimelineCleanupResult) JSON() interface{}

func (*TimelineCleanupResult) Text

func (r *TimelineCleanupResult) Text(w io.Writer) error

type TimelineEventStats

type TimelineEventStats struct {
	TotalEvents    int                         `json:"total_events"`
	UniqueAgents   int                         `json:"unique_agents"`
	AgentBreakdown map[string]int              `json:"agent_breakdown"`
	StateBreakdown map[state.TimelineState]int `json:"state_breakdown"`
	Duration       time.Duration               `json:"duration"`
	FirstEvent     time.Time                   `json:"first_event"`
	LastEvent      time.Time                   `json:"last_event"`
}

TimelineEventStats contains aggregated statistics

type TimelineListResult

type TimelineListResult struct {
	Timelines  []state.TimelineInfo `json:"timelines"`
	TotalCount int                  `json:"total_count"`
	Showing    int                  `json:"showing"`
}

TimelineListResult contains the list output

func (*TimelineListResult) JSON

func (r *TimelineListResult) JSON() interface{}

func (*TimelineListResult) Text

func (r *TimelineListResult) Text(w io.Writer) error

type TimelineShowResult

type TimelineShowResult struct {
	Info   *state.TimelineInfo `json:"info"`
	Events []state.AgentEvent  `json:"events,omitempty"`
	Stats  *TimelineEventStats `json:"stats"`
}

TimelineShowResult contains timeline details

func (*TimelineShowResult) JSON

func (r *TimelineShowResult) JSON() interface{}

func (*TimelineShowResult) Text

func (r *TimelineShowResult) Text(w io.Writer) error

type TimelineStatsResult

type TimelineStatsResult struct {
	TotalTimelines  int    `json:"total_timelines"`
	TotalEvents     int    `json:"total_events"`
	TotalAgents     int    `json:"total_agents"`
	TotalSize       int64  `json:"total_size_bytes"`
	CompressedCount int    `json:"compressed_count"`
	OldestTimeline  string `json:"oldest_timeline,omitempty"`
	NewestTimeline  string `json:"newest_timeline,omitempty"`
}

TimelineStatsResult contains overall statistics

func (*TimelineStatsResult) JSON

func (r *TimelineStatsResult) JSON() interface{}

func (*TimelineStatsResult) Text

func (r *TimelineStatsResult) Text(w io.Writer) error

type ToolCheck

type ToolCheck struct {
	Name         string   `json:"name"`
	Installed    bool     `json:"installed"`
	Version      string   `json:"version,omitempty"`
	Path         string   `json:"path,omitempty"`
	Capabilities []string `json:"capabilities,omitempty"`
	Required     bool     `json:"required"`
	Status       string   `json:"status"` // "ok", "warning", "error"
	Message      string   `json:"message,omitempty"`
}

ToolCheck represents a tool health check result

type UnblockedBead

type UnblockedBead struct {
	ID            string   `json:"id"`
	Title         string   `json:"title"`
	Priority      int      `json:"priority"`
	PrevBlockers  []string `json:"previous_blockers"`
	UnblockedByID string   `json:"unblocked_by_id"` // The blocker that was completed
}

UnblockedBead represents a bead that was previously blocked but is now actionable

type UnlockResult

type UnlockResult struct {
	Success    bool       `json:"success"`
	Session    string     `json:"session"`
	Agent      string     `json:"agent"`
	Released   int        `json:"released"`
	ReleasedAt *time.Time `json:"released_at,omitempty"`
	Error      string     `json:"error,omitempty"`
}

UnlockResult represents the result of an unlock operation.

type ValidationIssue

type ValidationIssue struct {
	Field   string `json:"field,omitempty"`
	Message string `json:"message"`
	Fixable bool   `json:"fixable,omitempty"`
}

ValidationIssue represents a single validation error or warning.

type ValidationReport

type ValidationReport struct {
	Valid   bool               `json:"valid"`
	Results []ValidationResult `json:"results"`
	Summary ValidationSummary  `json:"summary"`
}

ValidationReport is the complete validation output.

type ValidationResult

type ValidationResult struct {
	Path     string            `json:"path"`
	Type     string            `json:"type"` // "main", "project", "recipes", "personas", "policy"
	Valid    bool              `json:"valid"`
	Errors   []ValidationIssue `json:"errors,omitempty"`
	Warnings []ValidationIssue `json:"warnings,omitempty"`
	Info     []string          `json:"info,omitempty"`
}

ValidationResult represents the outcome of validating a config file or section.

type ValidationSummary

type ValidationSummary struct {
	FilesChecked int `json:"files_checked"`
	ErrorCount   int `json:"error_count"`
	WarningCount int `json:"warning_count"`
	FixableCount int `json:"fixable_count"`
}

ValidationSummary provides counts of issues found.

type VersionInput

type VersionInput struct {
	Short bool `json:"short,omitempty"`
}

VersionInput is the kernel input for core.version.

type WaitAgentInfo

type WaitAgentInfo struct {
	Pane      string    `json:"pane"`
	State     string    `json:"state"`
	MetAt     time.Time `json:"met_at"`
	AgentType string    `json:"agent_type,omitempty"`
}

WaitAgentInfo describes an agent's state when the wait completed.

type WaitCondition

type WaitCondition string

WaitCondition represents a condition to wait for.

const (
	// ConditionIdle waits for agent(s) in WAITING state.
	ConditionIdle WaitCondition = "idle"

	// ConditionComplete waits for all agents idle AND no recent activity.
	ConditionComplete WaitCondition = "complete"

	// ConditionGenerating waits for at least one agent actively generating.
	ConditionGenerating WaitCondition = "generating"

	// ConditionHealthy waits for all agents in healthy state (not ERROR/STALLED).
	ConditionHealthy WaitCondition = "healthy"
)

type WaitErrorStateError

type WaitErrorStateError struct {
	Pane string
}

WaitErrorStateError indicates an agent entered error state.

func (*WaitErrorStateError) Error

func (e *WaitErrorStateError) Error() string

func (*WaitErrorStateError) ExitCode

func (e *WaitErrorStateError) ExitCode() int

ExitCode returns the exit code for this error (3 for error state).

type WaitOptions

type WaitOptions struct {
	Session      string
	Condition    WaitCondition
	Timeout      time.Duration
	PollInterval time.Duration
	PaneIndex    int // -1 means all panes
	AgentType    string
	WaitForAny   bool // If true, wait for ANY agent; otherwise wait for ALL
	ExitOnError  bool // If true, exit immediately on ERROR state
	CountN       int  // With --any, wait for at least N agents (default 1)
}

WaitOptions configures the wait operation.

type WaitResult

type WaitResult struct {
	Success       bool            `json:"success"`
	Timestamp     string          `json:"timestamp"`
	Session       string          `json:"session"`
	Condition     string          `json:"condition"`
	WaitedSeconds float64         `json:"waited_seconds"`
	Agents        []WaitAgentInfo `json:"agents,omitempty"`
	AgentsPending []string        `json:"agents_pending,omitempty"`
	Error         string          `json:"error,omitempty"`
	ErrorCode     string          `json:"error_code,omitempty"`
	Hint          string          `json:"hint,omitempty"`
}

WaitResult is the JSON output for robot mode.

type WaitTimeoutError

type WaitTimeoutError struct {
	Duration time.Duration
}

WaitTimeoutError indicates the wait timed out.

func (*WaitTimeoutError) Error

func (e *WaitTimeoutError) Error() string

func (*WaitTimeoutError) ExitCode

func (e *WaitTimeoutError) ExitCode() int

ExitCode returns the exit code for this error (1 for timeout).

type WatchLoop

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

WatchLoop manages the continuous auto-assignment watch mode

func NewWatchLoop

func NewWatchLoop(session string, store *assignment.AssignmentStore, opts *AutoReassignOptions) *WatchLoop

NewWatchLoop creates a new watch loop for a session

func (*WatchLoop) Run

func (w *WatchLoop) Run(ctx context.Context) error

Run starts the watch loop and blocks until stopped

func (*WatchLoop) Stop

func (w *WatchLoop) Stop()

Stop signals the watch loop to stop

func (*WatchLoop) Summary

func (w *WatchLoop) Summary() string

Summary returns statistics about the watch session

type WizardResult

type WizardResult struct {
	ProjectType     ProjectType
	AgentCount      int
	EnableAgentMail bool
	EnableCASS      bool
	EnableCM        bool
	AutoFileReserve bool
	Cancelled       bool
}

WizardResult contains the wizard configuration choices

func RunInitWizard

func RunInitWizard() (WizardResult, error)

RunInitWizard runs the init wizard and returns the result

type WizardStep

type WizardStep int

WizardStep represents the current step in the init wizard

const (
	StepProjectType WizardStep = iota
	StepAgentCount
	StepIntegrations
	StepConfirm
	StepDone
)

type WorkflowInfo

type WorkflowInfo struct {
	Name         string `json:"name"`
	Description  string `json:"description"`
	Source       string `json:"source"`
	Coordination string `json:"coordination"`
	AgentCount   int    `json:"agent_count"`
}

WorkflowInfo is a workflow summary for JSON output.

type WorkflowShowResult

type WorkflowShowResult struct {
	Name          string                   `json:"name"`
	Description   string                   `json:"description"`
	Source        string                   `json:"source"`
	Coordination  string                   `json:"coordination"`
	AgentCount    int                      `json:"agent_count"`
	Agents        []workflow.WorkflowAgent `json:"agents"`
	Flow          *workflow.FlowConfig     `json:"flow,omitempty"`
	Prompts       []workflow.SetupPrompt   `json:"prompts,omitempty"`
	ErrorHandling *workflow.ErrorConfig    `json:"error_handling,omitempty"`
}

WorkflowShowResult is the JSON output for workflows show command.

type WorkflowsListResult

type WorkflowsListResult struct {
	Workflows []WorkflowInfo `json:"workflows"`
	Total     int            `json:"total"`
}

WorkflowsListResult is the JSON output for workflows list command.

Directories

Path Synopsis
Package tiers provides command tier taxonomy for progressive CLI discovery.
Package tiers provides command tier taxonomy for progressive CLI discovery.

Jump to

Keyboard shortcuts

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