v1alpha1

package
v0.2.1 Latest Latest
Warning

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

Go to latest
Published: Mar 29, 2026 License: Apache-2.0 Imports: 5 Imported by: 1

Documentation

Overview

Package v1alpha1 contains API Schema definitions for the arkonis v1alpha1 API group. +kubebuilder:object:generate=true +groupName=arkonis.dev

Index

Constants

View Source
const ConditionReady = "Ready"

ConditionReady is the standard condition type used across all Ark resources.

Variables

View Source
var (
	// GroupVersion is group version used to register these objects.
	GroupVersion = schema.GroupVersion{Group: "arkonis.dev", Version: "v1alpha1"}

	// SchemeBuilder is used to add go types to the GroupVersionKind scheme.
	SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}

	// AddToScheme adds the types in this group-version to the given scheme.
	AddToScheme = SchemeBuilder.AddToScheme
)

Functions

This section is empty.

Types

type AgentCapability

type AgentCapability struct {
	// ID uniquely identifies this capability. Used for exact matching.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	ID string `json:"id"`
	// Description explains what the capability does.
	// +optional
	Description string `json:"description,omitempty"`
	// Tags for coarse-grained filtering. A lookup matches agents that declare ALL listed tags.
	// +optional
	Tags []string `json:"tags,omitempty"`
	// InputSchema is a JSON Schema string (documentation only in v1).
	// +optional
	InputSchema string `json:"inputSchema,omitempty"`
	// OutputSchema is a JSON Schema string (documentation only in v1).
	// +optional
	OutputSchema string `json:"outputSchema,omitempty"`
	// ExposeMCP makes this capability callable as an MCP tool via the ark MCP gateway.
	// When true, the operator registers this capability as a named tool at the gateway
	// endpoint for this agent. Requires the MCP gateway to be enabled in the operator.
	// +kubebuilder:default=false
	// +optional
	ExposeMCP bool `json:"exposeMCP,omitempty"`
}

AgentCapability is one advertised capability of an ArkAgent. Agents that declare capabilities become discoverable by ArkRegistry lookups.

func (*AgentCapability) DeepCopy

func (in *AgentCapability) DeepCopy() *AgentCapability

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentCapability.

func (*AgentCapability) DeepCopyInto

func (in *AgentCapability) DeepCopyInto(out *AgentCapability)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AgentFleetEntry added in v0.2.0

type AgentFleetEntry struct {
	// Name is the ArkAgent name.
	Name string `json:"name"`
	// Model is the LLM model this agent is configured to use.
	Model string `json:"model"`
	// ReadyReplicas is the number of agent pods currently ready.
	ReadyReplicas int32 `json:"readyReplicas"`
	// DailyTokens is the rolling 24h token usage copied from ArkAgent.status.
	// +optional
	DailyTokens int64 `json:"dailyTokens,omitempty"`
	// Capabilities lists the capability IDs this agent contributes to the index.
	// +optional
	Capabilities []string `json:"capabilities,omitempty"`
}

AgentFleetEntry is one agent's summary in the registry fleet view.

func (*AgentFleetEntry) DeepCopy added in v0.2.0

func (in *AgentFleetEntry) DeepCopy() *AgentFleetEntry

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentFleetEntry.

func (*AgentFleetEntry) DeepCopyInto added in v0.2.0

func (in *AgentFleetEntry) DeepCopyInto(out *AgentFleetEntry)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkAgent

type ArkAgent struct {
	metav1.TypeMeta `json:",inline"`

	// +optional
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkAgentSpec `json:"spec"`

	// +optional
	Status ArkAgentStatus `json:"status,omitempty"`
}

ArkAgent manages a pool of LLM agent instances.

func (*ArkAgent) DeepCopy

func (in *ArkAgent) DeepCopy() *ArkAgent

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkAgent.

func (*ArkAgent) DeepCopyInto

func (in *ArkAgent) DeepCopyInto(out *ArkAgent)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkAgent) DeepCopyObject

func (in *ArkAgent) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkAgentAutoscaling

type ArkAgentAutoscaling struct {
	// Enabled turns on KEDA-based autoscaling. When true a ScaledObject is
	// created and spec.replicas acts as the minimum replica floor.
	// +optional
	Enabled bool `json:"enabled,omitempty"`

	// MinReplicas is the minimum replica count (idle floor).
	// +kubebuilder:default=1
	// +kubebuilder:validation:Minimum=0
	// +optional
	MinReplicas *int32 `json:"minReplicas,omitempty"`

	// MaxReplicas is the maximum replica count.
	// +kubebuilder:default=10
	// +kubebuilder:validation:Minimum=1
	// +optional
	MaxReplicas *int32 `json:"maxReplicas,omitempty"`

	// TargetPendingTasks is the number of pending queue entries per replica
	// that KEDA uses as the scale trigger. Scale-up fires when pending tasks
	// exceed this threshold.
	// +kubebuilder:default=5
	// +kubebuilder:validation:Minimum=1
	// +optional
	TargetPendingTasks *int32 `json:"targetPendingTasks,omitempty"`
}

ArkAgentAutoscaling configures KEDA-based autoscaling for the agent's deployment. Requires KEDA v2 installed in the cluster. When disabled the operator manages replicas directly via spec.replicas.

func (*ArkAgentAutoscaling) DeepCopy

func (in *ArkAgentAutoscaling) DeepCopy() *ArkAgentAutoscaling

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkAgentAutoscaling.

func (*ArkAgentAutoscaling) DeepCopyInto

func (in *ArkAgentAutoscaling) DeepCopyInto(out *ArkAgentAutoscaling)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkAgentList

type ArkAgentList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkAgent `json:"items"`
}

ArkAgentList contains a list of ArkAgent.

func (*ArkAgentList) DeepCopy

func (in *ArkAgentList) DeepCopy() *ArkAgentList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkAgentList.

func (*ArkAgentList) DeepCopyInto

func (in *ArkAgentList) DeepCopyInto(out *ArkAgentList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkAgentList) DeepCopyObject

func (in *ArkAgentList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkAgentMCPStatus

type ArkAgentMCPStatus struct {
	// Name matches MCPServerSpec.name.
	Name string `json:"name"`
	// URL is the MCP server endpoint that was probed.
	URL string `json:"url"`
	// Healthy is true when the last probe received a non-5xx HTTP response.
	Healthy bool `json:"healthy"`
	// Message holds the error detail when Healthy is false.
	// +optional
	Message string `json:"message,omitempty"`
	// LastCheck is when the probe was last run.
	// +optional
	LastCheck *metav1.Time `json:"lastCheck,omitempty"`
}

ArkAgentMCPStatus reports the last observed health of one MCP server.

func (*ArkAgentMCPStatus) DeepCopy

func (in *ArkAgentMCPStatus) DeepCopy() *ArkAgentMCPStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkAgentMCPStatus.

func (*ArkAgentMCPStatus) DeepCopyInto

func (in *ArkAgentMCPStatus) DeepCopyInto(out *ArkAgentMCPStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkAgentNetworkPolicy

type ArkAgentNetworkPolicy struct {
	// Mode controls how the NetworkPolicy is generated.
	// +kubebuilder:default=default
	// +kubebuilder:validation:Enum=default;strict;disabled
	Mode NetworkPolicyMode `json:"mode"`
}

ArkAgentNetworkPolicy configures the NetworkPolicy generated for agent pods (RFC-0016).

func (*ArkAgentNetworkPolicy) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkAgentNetworkPolicy.

func (*ArkAgentNetworkPolicy) DeepCopyInto

func (in *ArkAgentNetworkPolicy) DeepCopyInto(out *ArkAgentNetworkPolicy)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkAgentSpec

type ArkAgentSpec struct {
	// Replicas is the number of agent instances to run.
	// +kubebuilder:default=1
	// +kubebuilder:validation:Minimum=0
	// +kubebuilder:validation:Maximum=50
	Replicas *int32 `json:"replicas,omitempty"`

	// Model is the LLM model ID (e.g. "claude-sonnet-4-20250514").
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Model string `json:"model"`

	// SystemPrompt is the inline system message injected into every agent call.
	// For long or frequently-iterated prompts, prefer systemPromptRef instead.
	// +optional
	SystemPrompt string `json:"systemPrompt,omitempty"`

	// SystemPromptRef references a ConfigMap or Secret key whose content is used
	// as the system prompt. Takes precedence over systemPrompt when both are set.
	// Updating the referenced ConfigMap or Secret triggers an automatic rolling
	// restart of agent pods.
	// +optional
	SystemPromptRef *SystemPromptSource `json:"systemPromptRef,omitempty"`

	// MCPServers lists the MCP tool servers available to this agent.
	MCPServers []MCPServerSpec `json:"mcpServers,omitempty"`

	// Limits constrains agent resource usage.
	Limits *ArkonisLimits `json:"limits,omitempty"`

	// LivenessProbe defines how agent health is evaluated.
	LivenessProbe *ArkonisProbe `json:"livenessProbe,omitempty"`

	// SettingsRefs references one or more ArkSettings objects whose fragments are composed
	// into this agent's system prompt, in list order. When the same fragment name appears in
	// multiple settings, the last occurrence wins. Temperature, outputFormat, and memoryBackend
	// are also merged with last-wins semantics.
	// Takes precedence over the deprecated ConfigRef when both are set.
	// +optional
	SettingsRefs []LocalObjectReference `json:"settingsRefs,omitempty"`

	// ConfigRef is deprecated. Use SettingsRefs instead.
	// +optional
	ConfigRef *LocalObjectReference `json:"configRef,omitempty"`

	// MemoryRef optionally references an ArkMemory that defines the persistent
	// memory backend for agent instances. When set, the operator injects memory
	// connection details as environment variables into agent pods.
	MemoryRef *LocalObjectReference `json:"memoryRef,omitempty"`

	// Tools lists inline HTTP webhook tools available to agent pods without an external MCP server.
	// The operator serialises these as JSON into the AGENT_WEBHOOK_TOOLS environment variable.
	Tools []WebhookToolSpec `json:"tools,omitempty"`

	// NotifyRef references an ArkNotify policy in the same namespace.
	// Used only for AgentDegraded events.
	// +optional
	NotifyRef *LocalObjectReference `json:"notifyRef,omitempty"`

	// BudgetRef references an ArkBudget in the same namespace that governs token
	// spend for this agent. When the budget is exhausted, new tasks are rejected.
	// +optional
	BudgetRef *LocalObjectReference `json:"budgetRef,omitempty"`

	// RegistryRef names the ArkRegistry in the same namespace that this agent
	// registers into. Defaults to "default". Set to "" (explicit empty string) to
	// opt out of all registry indexing.
	// +kubebuilder:default=default
	// +optional
	RegistryRef string `json:"registryRef,omitempty"`

	// Autoscaling configures KEDA-based autoscaling for this agent's deployment.
	// When enabled, a KEDA ScaledObject is created that scales replicas based on
	// Redis task queue depth. Requires KEDA v2 installed in the cluster.
	// +optional
	Autoscaling *ArkAgentAutoscaling `json:"autoscaling,omitempty"`

	// APIKeyRef references an ArkSecret in the same namespace that provides the LLM
	// provider API key for this agent. When set, the operator injects the key as an
	// explicit environment variable, overriding the arkonis-api-keys Secret fallback.
	// Updating the ArkSecret (or its referenced k8s Secret) triggers a rolling restart.
	// +optional
	APIKeyRef *LocalObjectReference `json:"apiKeyRef,omitempty"`

	// Capabilities advertises what this agent can do to ArkRegistry.
	// Agents without capabilities are invisible to registry lookups.
	// +optional
	Capabilities []AgentCapability `json:"capabilities,omitempty"`

	// NetworkPolicy configures the NetworkPolicy generated for agent pods (RFC-0016).
	// When not set the operator uses "default" mode: DNS + Redis + open HTTPS egress.
	// +optional
	NetworkPolicy *ArkAgentNetworkPolicy `json:"networkPolicy,omitempty"`

	// EnvFrom injects environment variables from Secrets or ConfigMaps into agent pods.
	// Use this to supply API keys (ANTHROPIC_API_KEY, OPENAI_API_KEY, OPENAI_BASE_URL,
	// etc.) on a per-agent basis. Entries listed here take precedence over the
	// global arkonis-api-keys Secret set via the Helm chart.
	// +optional
	EnvFrom []corev1.EnvFromSource `json:"envFrom,omitempty"`

	// Resources sets CPU and memory requests/limits for agent pods.
	// When not set the operator injects safe defaults:
	//   requests: cpu=100m, memory=128Mi
	//   limits:   cpu=500m, memory=512Mi, ephemeral-storage=256Mi
	// Set this field explicitly to override the defaults.
	// +optional
	Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
}

ArkAgentSpec defines the desired state of ArkAgent. +kubebuilder:validation:XValidation:rule="has(self.systemPrompt) || has(self.systemPromptRef)",message="at least one of systemPrompt or systemPromptRef must be set"

func (*ArkAgentSpec) DeepCopy

func (in *ArkAgentSpec) DeepCopy() *ArkAgentSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkAgentSpec.

func (*ArkAgentSpec) DeepCopyInto

func (in *ArkAgentSpec) DeepCopyInto(out *ArkAgentSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkAgentStatus

type ArkAgentStatus struct {
	// ReadyReplicas is the number of agent pods ready to accept tasks.
	ReadyReplicas int32 `json:"readyReplicas,omitempty"`
	// Replicas is the total number of agent pods (ready or not).
	Replicas int32 `json:"replicas,omitempty"`
	// DesiredReplicas is the autoscaling-computed target replica count set by the owning
	// ArkTeam controller. Nil for standalone agents not managed by a team autoscaler.
	// Use this column to see what the autoscaler wants vs what spec.replicas declares.
	// +optional
	DesiredReplicas *int32 `json:"desiredReplicas,omitempty"`
	// ObservedGeneration is the .metadata.generation this status reflects.
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`
	// DailyTokenUsage is the sum of tokens consumed by this deployment in the rolling 24-hour
	// window. Populated only when spec.limits.maxDailyTokens is set.
	DailyTokenUsage *TokenUsage `json:"dailyTokenUsage,omitempty"`
	// MCPServers reports the last observed connectivity state of each configured
	// MCP server. Updated on every reconcile; stale when no MCP servers are configured.
	// +optional
	MCPServers []ArkAgentMCPStatus `json:"mcpServers,omitempty"`

	// SystemPromptHash is the SHA-256 hex digest of the resolved system prompt last
	// applied by the operator. The admission webhook uses this to detect unauthorised
	// prompt changes — updates that alter spec.systemPrompt are rejected unless the
	// caller holds the ark-prompt-admin ClusterRole (RFC-0016 Phase 4).
	// +optional
	SystemPromptHash string `json:"systemPromptHash,omitempty"`

	// ExposedMCPCapabilities lists the capability IDs currently advertised at the
	// MCP gateway for this agent. Empty when no capabilities have exposeMCP: true
	// or when the MCP gateway is not enabled.
	// +optional
	ExposedMCPCapabilities []string `json:"exposedMCPCapabilities,omitempty"`

	// Conditions reflect the current state of the ArkAgent.
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkAgentStatus defines the observed state of ArkAgent.

func (*ArkAgentStatus) DeepCopy

func (in *ArkAgentStatus) DeepCopy() *ArkAgentStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkAgentStatus.

func (*ArkAgentStatus) DeepCopyInto

func (in *ArkAgentStatus) DeepCopyInto(out *ArkAgentStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkBudget

type ArkBudget struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkBudgetSpec `json:"spec"`

	// +optional
	Status ArkBudgetStatus `json:"status,omitempty"`
}

ArkBudget defines a spend limit for one or more ArkTeams. The ArkBudgetController recalculates status every 5 minutes by querying the configured SpendStore. When hardStop is true, the ArkRunReconciler blocks new runs that would violate the budget.

func (*ArkBudget) DeepCopy

func (in *ArkBudget) DeepCopy() *ArkBudget

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkBudget.

func (*ArkBudget) DeepCopyInto

func (in *ArkBudget) DeepCopyInto(out *ArkBudget)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkBudget) DeepCopyObject

func (in *ArkBudget) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkBudgetList

type ArkBudgetList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkBudget `json:"items"`
}

ArkBudgetList contains a list of ArkBudget.

func (*ArkBudgetList) DeepCopy

func (in *ArkBudgetList) DeepCopy() *ArkBudgetList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkBudgetList.

func (*ArkBudgetList) DeepCopyInto

func (in *ArkBudgetList) DeepCopyInto(out *ArkBudgetList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkBudgetList) DeepCopyObject

func (in *ArkBudgetList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkBudgetSelector

type ArkBudgetSelector struct {
	// Namespace scopes this budget to a single namespace.
	// Empty means all namespaces in the cluster.
	// +optional
	Namespace string `json:"namespace,omitempty"`

	// Team scopes this budget to a single ArkTeam by name.
	// Empty means all teams in the selected namespace(s).
	// +optional
	Team string `json:"team,omitempty"`

	// MatchLabels selects ArkTeams by label. Applied in addition to Namespace/Team.
	// +optional
	MatchLabels map[string]string `json:"matchLabels,omitempty"`
}

ArkBudgetSelector scopes a budget to a subset of resources.

func (*ArkBudgetSelector) DeepCopy

func (in *ArkBudgetSelector) DeepCopy() *ArkBudgetSelector

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkBudgetSelector.

func (*ArkBudgetSelector) DeepCopyInto

func (in *ArkBudgetSelector) DeepCopyInto(out *ArkBudgetSelector)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkBudgetSpec

type ArkBudgetSpec struct {
	// Selector scopes this budget to matching resources.
	// +kubebuilder:validation:Required
	Selector ArkBudgetSelector `json:"selector"`

	// Period is the rolling window for spend accumulation.
	// +kubebuilder:validation:Enum=daily;weekly;monthly
	// +kubebuilder:default=monthly
	// +optional
	Period string `json:"period,omitempty"`

	// Limit is the maximum spend in the configured currency for one period.
	// +kubebuilder:validation:Minimum=0
	// +kubebuilder:validation:XValidation:rule="self >= 0",message="limit must be non-negative"
	Limit float64 `json:"limit"`

	// Currency is the ISO 4217 currency code. Must match the operator's CostProvider.
	// +kubebuilder:default=USD
	// +optional
	Currency string `json:"currency,omitempty"`

	// WarnAt is the percentage of the limit at which a BudgetWarning notification fires (0–100).
	// Zero disables warnings. Default: 80.
	// +kubebuilder:default=80
	// +kubebuilder:validation:Minimum=0
	// +kubebuilder:validation:Maximum=100
	// +optional
	WarnAt int `json:"warnAt,omitempty"`

	// HardStop blocks new ArkRuns when the limit is exceeded.
	// When false (default), runs continue but a BudgetExceeded notification fires.
	// When true, new ArkRuns fail immediately with BudgetExceeded before any tokens are spent.
	// +kubebuilder:default=false
	// +optional
	HardStop bool `json:"hardStop,omitempty"`

	// NotifyRef references an ArkNotify policy for budget alerts.
	// Fires BudgetWarning (at warnAt%) and BudgetExceeded (at 100%).
	// +optional
	NotifyRef *LocalObjectReference `json:"notifyRef,omitempty"`
}

ArkBudgetSpec defines the desired state of an ArkBudget.

func (*ArkBudgetSpec) DeepCopy

func (in *ArkBudgetSpec) DeepCopy() *ArkBudgetSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkBudgetSpec.

func (*ArkBudgetSpec) DeepCopyInto

func (in *ArkBudgetSpec) DeepCopyInto(out *ArkBudgetSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkBudgetStatus

type ArkBudgetStatus struct {
	// Phase summarises the current budget state.
	// +kubebuilder:validation:Enum=OK;Warning;Exceeded
	Phase BudgetStatus `json:"phase,omitempty"`

	// SpentUSD is the total spend in the current period window.
	// +kubebuilder:validation:XIntOrString
	SpentUSD float64 `json:"spentUSD,omitempty"`

	// PctUsed is SpentUSD / Limit as a percentage (0–100).
	PctUsed float64 `json:"pctUsed,omitempty"`

	// PeriodStart is the start of the current budget window.
	// +optional
	PeriodStart *metav1.Time `json:"periodStart,omitempty"`

	// LastUpdated is when the status was last recalculated.
	// +optional
	LastUpdated *metav1.Time `json:"lastUpdated,omitempty"`

	// ObservedGeneration is the .metadata.generation this status reflects.
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// Conditions reflect the current state of the budget.
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkBudgetStatus defines the observed state of an ArkBudget.

func (*ArkBudgetStatus) DeepCopy

func (in *ArkBudgetStatus) DeepCopy() *ArkBudgetStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkBudgetStatus.

func (*ArkBudgetStatus) DeepCopyInto

func (in *ArkBudgetStatus) DeepCopyInto(out *ArkBudgetStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkEvent

type ArkEvent struct {
	metav1.TypeMeta `json:",inline"`

	// +optional
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkEventSpec `json:"spec"`

	// +optional
	Status ArkEventStatus `json:"status,omitempty"`
}

ArkEvent fires ArkTeam pipeline runs in response to external events: a cron schedule, an inbound HTTP webhook, or another team pipeline completing.

func (*ArkEvent) DeepCopy

func (in *ArkEvent) DeepCopy() *ArkEvent

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkEvent.

func (*ArkEvent) DeepCopyInto

func (in *ArkEvent) DeepCopyInto(out *ArkEvent)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkEvent) DeepCopyObject

func (in *ArkEvent) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkEventList

type ArkEventList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkEvent `json:"items"`
}

ArkEventList contains a list of ArkEvent.

func (*ArkEventList) DeepCopy

func (in *ArkEventList) DeepCopy() *ArkEventList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkEventList.

func (*ArkEventList) DeepCopyInto

func (in *ArkEventList) DeepCopyInto(out *ArkEventList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkEventList) DeepCopyObject

func (in *ArkEventList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkEventSource

type ArkEventSource struct {
	// Type is the source type: cron | webhook | team-output.
	// +kubebuilder:validation:Required
	Type TriggerSourceType `json:"type"`

	// Cron is a standard 5-field cron expression (minute hour dom month dow).
	// Only used when type=cron.
	// Example: "0 9 * * 1-5" (9am on weekdays)
	Cron string `json:"cron,omitempty"`

	// TeamOutput triggers when the named ArkTeam pipeline reaches a phase.
	// Only used when type=team-output.
	TeamOutput *TeamOutputSource `json:"teamOutput,omitempty"`
}

ArkEventSource defines what fires the trigger.

func (*ArkEventSource) DeepCopy

func (in *ArkEventSource) DeepCopy() *ArkEventSource

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkEventSource.

func (*ArkEventSource) DeepCopyInto

func (in *ArkEventSource) DeepCopyInto(out *ArkEventSource)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkEventSpec

type ArkEventSpec struct {
	// Source defines what fires this trigger.
	// +kubebuilder:validation:Required
	Source ArkEventSource `json:"source"`

	// Targets is the list of team pipelines to dispatch when the trigger fires.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinItems=1
	Targets []ArkEventTarget `json:"targets"`

	// ConcurrencyPolicy controls what happens when the trigger fires while a previous
	// run is still in progress. Defaults to Allow.
	// +kubebuilder:default=Allow
	ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty"`

	// Suspended pauses the trigger without deleting it.
	// +kubebuilder:default=false
	Suspended bool `json:"suspended,omitempty"`
}

ArkEventSpec defines the desired state of ArkEvent.

func (*ArkEventSpec) DeepCopy

func (in *ArkEventSpec) DeepCopy() *ArkEventSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkEventSpec.

func (*ArkEventSpec) DeepCopyInto

func (in *ArkEventSpec) DeepCopyInto(out *ArkEventSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkEventStatus

type ArkEventStatus struct {
	// LastFiredAt is when the trigger last dispatched team runs.
	LastFiredAt *metav1.Time `json:"lastFiredAt,omitempty"`
	// NextFireAt is the next scheduled fire time (cron type only).
	NextFireAt *metav1.Time `json:"nextFireAt,omitempty"`
	// FiredCount is the total number of times this trigger has fired.
	FiredCount int64 `json:"firedCount,omitempty"`
	// WebhookURL is the URL to POST to in order to fire this trigger (webhook type only).
	// Requires --trigger-webhook-url to be configured on the operator.
	WebhookURL string `json:"webhookURL,omitempty"`
	// ObservedGeneration is the .metadata.generation this status reflects.
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`
	// Conditions reflect the current state of the trigger.
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkEventStatus defines the observed state of ArkEvent.

func (*ArkEventStatus) DeepCopy

func (in *ArkEventStatus) DeepCopy() *ArkEventStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkEventStatus.

func (*ArkEventStatus) DeepCopyInto

func (in *ArkEventStatus) DeepCopyInto(out *ArkEventStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkEventTarget

type ArkEventTarget struct {
	// Team is the name of the ArkTeam to dispatch a pipeline run for.
	// Exactly one of Team or Agent must be set.
	// +optional
	Team string `json:"team,omitempty"`

	// Agent is the name of the ArkAgent to invoke directly.
	// When set, the event creates an ArkRun with spec.agent and spec.prompt.
	// Exactly one of Team or Agent must be set.
	// +optional
	Agent string `json:"agent,omitempty"`

	// Prompt is the task text submitted to the agent when Agent is set.
	// Supports Go template syntax evaluated with the trigger fire context:
	//   {{ .trigger.name }}    — trigger name
	//   {{ .trigger.firedAt }} — RFC3339 fire timestamp
	//   {{ .trigger.body.* }} — JSON fields from the webhook request body (webhook type only)
	//   {{ .trigger.output }} — upstream team output (team-output type only)
	// +optional
	Prompt string `json:"prompt,omitempty"`

	// Input values to set on the dispatched team pipeline, overriding the template team's inputs.
	// Values are Go template strings evaluated with the trigger fire context (same as Prompt).
	// Only used when Team is set.
	// +optional
	Input map[string]string `json:"input,omitempty"`
}

ArkEventTarget describes what to dispatch when the trigger fires. Exactly one of Team or Agent must be set.

+kubebuilder:validation:XValidation:rule="has(self.team) != has(self.agent)",message="exactly one of team or agent must be set"

func (*ArkEventTarget) DeepCopy

func (in *ArkEventTarget) DeepCopy() *ArkEventTarget

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkEventTarget.

func (*ArkEventTarget) DeepCopyInto

func (in *ArkEventTarget) DeepCopyInto(out *ArkEventTarget)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkFlowStepPhase

type ArkFlowStepPhase string

ArkFlowStepPhase describes the execution state of a single pipeline step. +kubebuilder:validation:Enum=Pending;WarmingUp;Running;Validating;Succeeded;Failed;Skipped

const (
	ArkFlowStepPhasePending ArkFlowStepPhase = "Pending"
	// ArkFlowStepPhaseWarmingUp means the step is waiting for its assigned agent's pods to
	// become ready after a scale-from-zero event. Transitions to Running once ready.
	ArkFlowStepPhaseWarmingUp ArkFlowStepPhase = "WarmingUp"
	ArkFlowStepPhaseRunning   ArkFlowStepPhase = "Running"
	// ArkFlowStepPhaseValidating means the step completed and is awaiting output validation.
	ArkFlowStepPhaseValidating ArkFlowStepPhase = "Validating"
	ArkFlowStepPhaseSucceeded  ArkFlowStepPhase = "Succeeded"
	ArkFlowStepPhaseFailed     ArkFlowStepPhase = "Failed"
	// ArkFlowStepPhaseSkipped means the step was bypassed because its If condition evaluated to false.
	ArkFlowStepPhaseSkipped ArkFlowStepPhase = "Skipped"
)

type ArkFlowStepStatus

type ArkFlowStepStatus struct {
	// Name matches the step name in spec.
	Name string `json:"name"`
	// Phase is the current execution phase.
	Phase ArkFlowStepPhase `json:"phase"`
	// TaskID is the Redis stream message ID of the submitted task, used to
	// correlate results from the agent-tasks-results stream.
	TaskID string `json:"taskID,omitempty"`
	// Output is the agent's raw text response once the step has succeeded.
	Output string `json:"output,omitempty"`

	// OutputJSON is the agent's response as a JSON string, populated when the step
	// has an OutputSchema and the response is valid JSON. Downstream steps can
	// reference fields via "{{ .steps.<name>.data.<field> }}".
	OutputJSON string `json:"outputJSON,omitempty"`
	// StartTime is when the step started executing.
	StartTime *metav1.Time `json:"startTime,omitempty"`
	// CompletionTime is when the step finished (success or failure).
	CompletionTime *metav1.Time `json:"completionTime,omitempty"`
	// Message holds a human-readable status detail.
	Message string `json:"message,omitempty"`
	// Iterations is the number of times this step has been executed (for loop steps).
	Iterations int `json:"iterations,omitempty"`
	// TokenUsage reports the tokens consumed by this step's LLM calls.
	TokenUsage *TokenUsage `json:"tokenUsage,omitempty"`
	// CostUSD is the estimated dollar cost of this step's LLM calls, calculated
	// using the operator's configured CostProvider. Zero for unknown/local models.
	CostUSD float64 `json:"costUSD,omitempty"`
	// ValidationAttempts counts how many times output validation has been run on this step.
	// Incremented on each validation attempt; reset when the step is retried from Pending.
	ValidationAttempts int `json:"validationAttempts,omitempty"`
	// ValidationMessage holds the most recent validation failure reason.
	// Cleared when validation passes.
	ValidationMessage string `json:"validationMessage,omitempty"`
	// Artifacts maps artifact names to their storage URLs or local paths.
	// Populated after the step completes when spec.artifactStore is configured.
	// Downstream steps reference artifacts via "{{ .steps.<name>.artifacts.<key> }}".
	Artifacts map[string]string `json:"artifacts,omitempty"`

	// ResolvedAgent is the ArkAgent name selected by a registry lookup for this step.
	// Empty when the step uses a static role reference.
	// +optional
	ResolvedAgent string `json:"resolvedAgent,omitempty"`

	// SelectedCapability is the capability ID chosen by the router LLM.
	// Only set for the synthetic "route" step in routed-mode runs.
	// +optional
	SelectedCapability string `json:"selectedCapability,omitempty"`

	// RoutingReason is the router LLM's one-sentence explanation for its choice.
	// Only set for the synthetic "route" step in routed-mode runs.
	// +optional
	RoutingReason string `json:"routingReason,omitempty"`
}

ArkFlowStepStatus captures the observed state of a single step.

func (*ArkFlowStepStatus) DeepCopy

func (in *ArkFlowStepStatus) DeepCopy() *ArkFlowStepStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkFlowStepStatus.

func (*ArkFlowStepStatus) DeepCopyInto

func (in *ArkFlowStepStatus) DeepCopyInto(out *ArkFlowStepStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkMemory

type ArkMemory struct {
	metav1.TypeMeta `json:",inline"`

	// +optional
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkMemorySpec `json:"spec"`

	// +optional
	Status ArkMemoryStatus `json:"status,omitempty"`
}

ArkMemory defines the persistent memory backend for agent instances. Reference it from an ArkAgent via spec.memoryRef to give agents durable memory across tasks.

func (*ArkMemory) DeepCopy

func (in *ArkMemory) DeepCopy() *ArkMemory

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkMemory.

func (*ArkMemory) DeepCopyInto

func (in *ArkMemory) DeepCopyInto(out *ArkMemory)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkMemory) DeepCopyObject

func (in *ArkMemory) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkMemoryList

type ArkMemoryList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkMemory `json:"items"`
}

ArkMemoryList contains a list of ArkMemory.

func (*ArkMemoryList) DeepCopy

func (in *ArkMemoryList) DeepCopy() *ArkMemoryList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkMemoryList.

func (*ArkMemoryList) DeepCopyInto

func (in *ArkMemoryList) DeepCopyInto(out *ArkMemoryList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkMemoryList) DeepCopyObject

func (in *ArkMemoryList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkMemorySpec

type ArkMemorySpec struct {
	// Backend selects the memory storage strategy.
	// +kubebuilder:validation:Required
	Backend MemoryBackend `json:"backend"`

	// Redis configures the Redis backend. Required when backend is "redis".
	Redis *RedisMemoryConfig `json:"redis,omitempty"`

	// VectorStore configures the vector-store backend. Required when backend is "vector-store".
	VectorStore *VectorStoreMemoryConfig `json:"vectorStore,omitempty"`
}

ArkMemorySpec defines the desired memory configuration.

func (*ArkMemorySpec) DeepCopy

func (in *ArkMemorySpec) DeepCopy() *ArkMemorySpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkMemorySpec.

func (*ArkMemorySpec) DeepCopyInto

func (in *ArkMemorySpec) DeepCopyInto(out *ArkMemorySpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkMemoryStatus

type ArkMemoryStatus struct {
	// ObservedGeneration is the .metadata.generation this status reflects.
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// Conditions reflect the current state of the ArkMemory.
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkMemoryStatus defines the observed state of ArkMemory.

func (*ArkMemoryStatus) DeepCopy

func (in *ArkMemoryStatus) DeepCopy() *ArkMemoryStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkMemoryStatus.

func (*ArkMemoryStatus) DeepCopyInto

func (in *ArkMemoryStatus) DeepCopyInto(out *ArkMemoryStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkNotify

type ArkNotify struct {
	metav1.TypeMeta `json:",inline"`

	// +optional
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkNotifySpec `json:"spec"`

	// +optional
	Status ArkNotifyStatus `json:"status,omitempty"`
}

ArkNotify defines a reusable notification policy that routes run events to one or more channels (Slack, generic webhook, etc.).

func (*ArkNotify) DeepCopy

func (in *ArkNotify) DeepCopy() *ArkNotify

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkNotify.

func (*ArkNotify) DeepCopyInto

func (in *ArkNotify) DeepCopyInto(out *ArkNotify)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkNotify) DeepCopyObject

func (in *ArkNotify) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkNotifyList

type ArkNotifyList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkNotify `json:"items"`
}

ArkNotifyList contains a list of ArkNotify.

func (*ArkNotifyList) DeepCopy

func (in *ArkNotifyList) DeepCopy() *ArkNotifyList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkNotifyList.

func (*ArkNotifyList) DeepCopyInto

func (in *ArkNotifyList) DeepCopyInto(out *ArkNotifyList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkNotifyList) DeepCopyObject

func (in *ArkNotifyList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkNotifySpec

type ArkNotifySpec struct {
	// On lists the events that trigger notifications.
	// If empty, all events fire.
	// +optional
	On []NotifyEvent `json:"on,omitempty"`

	// Channels lists the notification targets.
	// +kubebuilder:validation:MinItems=1
	Channels []NotifyChannelSpec `json:"channels"`

	// RateLimitSeconds is the minimum interval between notifications for the
	// same (team, event) pair. Default: 300. Set to 0 to disable rate limiting.
	// +kubebuilder:default=300
	// +kubebuilder:validation:Minimum=0
	// +optional
	RateLimitSeconds int `json:"rateLimitSeconds,omitempty"`
}

ArkNotifySpec defines the desired state of ArkNotify.

func (*ArkNotifySpec) DeepCopy

func (in *ArkNotifySpec) DeepCopy() *ArkNotifySpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkNotifySpec.

func (*ArkNotifySpec) DeepCopyInto

func (in *ArkNotifySpec) DeepCopyInto(out *ArkNotifySpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkNotifyStatus

type ArkNotifyStatus struct {
	// LastDispatches records the most recent dispatch result per channel index.
	// +optional
	LastDispatches []NotifyDispatchResult `json:"lastDispatches,omitempty"`
	// Conditions reflect the current state of the ArkNotify.
	// +listType=map
	// +listMapKey=type
	// +optional
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkNotifyStatus defines the observed state of ArkNotify.

func (*ArkNotifyStatus) DeepCopy

func (in *ArkNotifyStatus) DeepCopy() *ArkNotifyStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkNotifyStatus.

func (*ArkNotifyStatus) DeepCopyInto

func (in *ArkNotifyStatus) DeepCopyInto(out *ArkNotifyStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkRegistry

type ArkRegistry struct {
	metav1.TypeMeta `json:",inline"`

	// +optional
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +optional
	Spec ArkRegistrySpec `json:"spec,omitempty"`

	// +optional
	Status ArkRegistryStatus `json:"status,omitempty"`
}

ArkRegistry is a Kubernetes-native capability index that lets pipeline steps resolve an agent at runtime by what it can do rather than by a hardcoded name. Agents advertise capabilities via spec.capabilities on ArkAgentSpec.

func (*ArkRegistry) DeepCopy

func (in *ArkRegistry) DeepCopy() *ArkRegistry

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRegistry.

func (*ArkRegistry) DeepCopyInto

func (in *ArkRegistry) DeepCopyInto(out *ArkRegistry)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkRegistry) DeepCopyObject

func (in *ArkRegistry) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkRegistryList

type ArkRegistryList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkRegistry `json:"items"`
}

ArkRegistryList contains a list of ArkRegistry.

func (*ArkRegistryList) DeepCopy

func (in *ArkRegistryList) DeepCopy() *ArkRegistryList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRegistryList.

func (*ArkRegistryList) DeepCopyInto

func (in *ArkRegistryList) DeepCopyInto(out *ArkRegistryList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkRegistryList) DeepCopyObject

func (in *ArkRegistryList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkRegistryPolicy

type ArkRegistryPolicy struct {
	// MaxDepth is the maximum agent-to-agent delegation depth.
	// Prevents runaway recursion.
	// +kubebuilder:default=3
	// +kubebuilder:validation:Minimum=1
	// +kubebuilder:validation:Maximum=20
	MaxDepth int `json:"maxDepth,omitempty"`

	// AllowCrossTeam permits resolution of agents managed by other ArkTeams.
	// Default false — only agents not owned by another team's inline roles.
	// +kubebuilder:default=false
	AllowCrossTeam bool `json:"allowCrossTeam,omitempty"`
}

ArkRegistryPolicy controls delegation safety for registry-resolved steps.

func (*ArkRegistryPolicy) DeepCopy

func (in *ArkRegistryPolicy) DeepCopy() *ArkRegistryPolicy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRegistryPolicy.

func (*ArkRegistryPolicy) DeepCopyInto

func (in *ArkRegistryPolicy) DeepCopyInto(out *ArkRegistryPolicy)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkRegistrySpec

type ArkRegistrySpec struct {
	// Scope controls which ArkAgents are indexed.
	// namespace-scoped: only ArkAgents in the same namespace (default).
	// cluster-wide: all ArkAgents cluster-wide (requires ClusterRole).
	// +kubebuilder:default=namespace-scoped
	// +kubebuilder:validation:Enum=namespace-scoped;cluster-wide
	Scope RegistryScope `json:"scope,omitempty"`

	// Policy controls delegation safety.
	// +optional
	Policy *ArkRegistryPolicy `json:"policy,omitempty"`

	// MCPBindings maps capability IDs to MCP server URLs for this deployment.
	// Agents that declare mcpServers with capabilityRef have their URLs resolved
	// from this list at reconcile time. This allows cookbook-style agent definitions
	// to remain URL-free; operators supply the bindings per namespace.
	// +optional
	MCPBindings []MCPBinding `json:"mcpBindings,omitempty"`
}

ArkRegistrySpec defines the desired state of ArkRegistry.

func (*ArkRegistrySpec) DeepCopy

func (in *ArkRegistrySpec) DeepCopy() *ArkRegistrySpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRegistrySpec.

func (*ArkRegistrySpec) DeepCopyInto

func (in *ArkRegistrySpec) DeepCopyInto(out *ArkRegistrySpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkRegistryStatus

type ArkRegistryStatus struct {
	// IndexedAgents is the total number of ArkAgents indexed by this registry.
	IndexedAgents int `json:"indexedAgents,omitempty"`

	// Fleet is the list of ArkAgents currently registered with this registry,
	// with per-agent readiness and token usage. Replaces the implicit
	// "all agents in namespace" model with an explicit opt-in list.
	// +optional
	Fleet []AgentFleetEntry `json:"fleet,omitempty"`

	// LastRebuild is the time the index was last rebuilt.
	// +optional
	LastRebuild *metav1.Time `json:"lastRebuild,omitempty"`

	// Capabilities lists all capabilities indexed, with their associated agents and tags.
	// +optional
	Capabilities []IndexedCapability `json:"capabilities,omitempty"`

	// ObservedGeneration is the .metadata.generation this status reflects.
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// Conditions reflect the current state of the ArkRegistry.
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkRegistryStatus defines the observed state of ArkRegistry.

func (*ArkRegistryStatus) DeepCopy

func (in *ArkRegistryStatus) DeepCopy() *ArkRegistryStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRegistryStatus.

func (*ArkRegistryStatus) DeepCopyInto

func (in *ArkRegistryStatus) DeepCopyInto(out *ArkRegistryStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkRun

type ArkRun struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkRunSpec `json:"spec"`

	// +optional
	Status ArkRunStatus `json:"status,omitempty"`
}

ArkRun is an immutable execution record. It covers both standalone agent invocations (spec.agent + spec.prompt) and team pipeline runs (spec.teamRef). Created automatically by ArkEvent or directly via kubectl apply.

func (*ArkRun) DeepCopy

func (in *ArkRun) DeepCopy() *ArkRun

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRun.

func (*ArkRun) DeepCopyInto

func (in *ArkRun) DeepCopyInto(out *ArkRun)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkRun) DeepCopyObject

func (in *ArkRun) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkRunList

type ArkRunList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkRun `json:"items"`
}

ArkRunList contains a list of ArkRun.

func (*ArkRunList) DeepCopy

func (in *ArkRunList) DeepCopy() *ArkRunList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRunList.

func (*ArkRunList) DeepCopyInto

func (in *ArkRunList) DeepCopyInto(out *ArkRunList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkRunList) DeepCopyObject

func (in *ArkRunList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkRunPhase

type ArkRunPhase string

ArkRunPhase describes the overall execution state of an ArkRun. +kubebuilder:validation:Enum=Pending;Running;Succeeded;Failed

const (
	ArkRunPhasePending   ArkRunPhase = "Pending"
	ArkRunPhaseRunning   ArkRunPhase = "Running"
	ArkRunPhaseSucceeded ArkRunPhase = "Succeeded"
	ArkRunPhaseFailed    ArkRunPhase = "Failed"
)

type ArkRunSpec

type ArkRunSpec struct {
	// TeamRef is the name of the ArkTeam that owns this run.
	// Exactly one of TeamRef or Agent must be set.
	// +optional
	TeamRef string `json:"teamRef,omitempty"`

	// Agent is the name of the ArkAgent to invoke for a standalone run.
	// Exactly one of TeamRef or Agent must be set.
	// +optional
	Agent string `json:"agent,omitempty"`

	// Prompt is the task text submitted to the agent for a standalone run.
	// Required when Agent is set.
	// +optional
	Prompt string `json:"prompt,omitempty"`

	// TeamGeneration is the ArkTeam spec.generation at the time this run was
	// created. Allows correlating a run with the exact team spec that was in effect.
	// Only set for team runs.
	// +optional
	TeamGeneration int64 `json:"teamGeneration,omitempty"`

	// Input is the resolved input map for this run: team default inputs merged with
	// any per-trigger overrides supplied via ark trigger --input or ArkEvent.
	// Step inputs reference these values via "{{ .input.<key> }}".
	// +optional
	Input map[string]string `json:"input,omitempty"`

	// Pipeline is a snapshot of the ArkTeam pipeline DAG at trigger time.
	// Empty for routed-mode runs.
	// +optional
	Pipeline []ArkTeamPipelineStep `json:"pipeline,omitempty"`

	// Roles is a snapshot of the ArkTeam role definitions at trigger time.
	// Empty for routed-mode runs.
	// +optional
	Roles []ArkTeamRole `json:"roles,omitempty"`

	// Output is a Go template expression that selects the final run result.
	// Example: "{{ .steps.summarize.output }}"
	// For routed-mode runs this defaults to "{{ .steps.route.output }}" at trigger time.
	// +optional
	Output string `json:"output,omitempty"`

	// Routing is a snapshot of the ArkTeam routing config at trigger time.
	// Set when the team operates in routed mode. Mutually exclusive with Pipeline.
	// +optional
	Routing *ArkTeamRoutingSpec `json:"routing,omitempty"`

	// TimeoutSeconds is the maximum wall-clock seconds this run may take.
	// Zero means no timeout.
	// +kubebuilder:validation:Minimum=1
	// +optional
	TimeoutSeconds int `json:"timeoutSeconds,omitempty"`

	// MaxTokens is the total token budget for this run across all steps.
	// Zero means no limit.
	// +kubebuilder:validation:Minimum=1
	// +optional
	MaxTokens int64 `json:"maxTokens,omitempty"`
}

ArkRunSpec is an immutable snapshot of everything needed to execute one run. Exactly one of TeamRef or Agent must be set. For team runs it is populated at trigger time from the parent ArkTeam spec. For standalone agent runs only Agent and Prompt are required.

+kubebuilder:validation:XValidation:rule="has(self.teamRef) != has(self.agent)",message="exactly one of teamRef or agent must be set"

func (*ArkRunSpec) DeepCopy

func (in *ArkRunSpec) DeepCopy() *ArkRunSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRunSpec.

func (*ArkRunSpec) DeepCopyInto

func (in *ArkRunSpec) DeepCopyInto(out *ArkRunSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkRunStatus

type ArkRunStatus struct {
	// Phase is the overall execution state.
	Phase ArkRunPhase `json:"phase,omitempty"`

	// Steps holds the per-step execution state for this run, including full
	// step outputs. Unlike ArkTeam.Status, this is never reset — it is the
	// permanent record of what happened during this run.
	Steps []ArkFlowStepStatus `json:"steps,omitempty"`

	// Output is the resolved final pipeline output once phase is Succeeded.
	Output string `json:"output,omitempty"`

	// StartTime is when this run began executing.
	StartTime *metav1.Time `json:"startTime,omitempty"`

	// CompletionTime is when this run reached a terminal phase (Succeeded or Failed).
	CompletionTime *metav1.Time `json:"completionTime,omitempty"`

	// TotalTokenUsage is the sum of token usage across all steps in this run.
	TotalTokenUsage *TokenUsage `json:"totalTokenUsage,omitempty"`

	// TotalCostUSD is the estimated total dollar cost of this run, summed across
	// all steps using the operator's configured CostProvider.
	TotalCostUSD float64 `json:"totalCostUSD,omitempty"`

	// ObservedGeneration is the .metadata.generation this status reflects.
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// Conditions reflect the current state of the ArkRun.
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkRunStatus defines the observed execution state of an ArkRun.

func (*ArkRunStatus) DeepCopy

func (in *ArkRunStatus) DeepCopy() *ArkRunStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkRunStatus.

func (*ArkRunStatus) DeepCopyInto

func (in *ArkRunStatus) DeepCopyInto(out *ArkRunStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkSecret

type ArkSecret struct {
	metav1.TypeMeta `json:",inline"`

	// +optional
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkSecretSpec `json:"spec"`

	// +optional
	Status ArkSecretStatus `json:"status,omitempty"`
}

ArkSecret provides centralized, rotatable API key management for ArkAgent instances. Instead of requiring an arkonis-api-keys Secret in every namespace, teams define one ArkSecret per provider and reference it from ArkAgent specs via spec.apiKeyRef. Updating the referenced Kubernetes Secret triggers an automatic rolling restart of all ArkAgent deployments that reference this ArkSecret.

func (*ArkSecret) DeepCopy

func (in *ArkSecret) DeepCopy() *ArkSecret

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSecret.

func (*ArkSecret) DeepCopyInto

func (in *ArkSecret) DeepCopyInto(out *ArkSecret)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkSecret) DeepCopyObject

func (in *ArkSecret) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkSecretList

type ArkSecretList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkSecret `json:"items"`
}

ArkSecretList contains a list of ArkSecret.

func (*ArkSecretList) DeepCopy

func (in *ArkSecretList) DeepCopy() *ArkSecretList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSecretList.

func (*ArkSecretList) DeepCopyInto

func (in *ArkSecretList) DeepCopyInto(out *ArkSecretList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkSecretList) DeepCopyObject

func (in *ArkSecretList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkSecretPhase

type ArkSecretPhase string

ArkSecretPhase represents the observed validity of an ArkSecret. +kubebuilder:validation:Enum=Active;Invalid

const (
	ArkSecretPhaseActive  ArkSecretPhase = "Active"
	ArkSecretPhaseInvalid ArkSecretPhase = "Invalid"
)

type ArkSecretProvider

type ArkSecretProvider string

ArkSecretProvider identifies which LLM provider the secret is for. Determines which environment variable name is injected into agent pods. +kubebuilder:validation:Enum=anthropic;openai;generic

const (
	// ArkSecretProviderAnthropic injects the key as ANTHROPIC_API_KEY.
	ArkSecretProviderAnthropic ArkSecretProvider = "anthropic"
	// ArkSecretProviderOpenAI injects the key as OPENAI_API_KEY.
	ArkSecretProviderOpenAI ArkSecretProvider = "openai"
	// ArkSecretProviderGeneric injects the key under the name given by spec.envVar.
	ArkSecretProviderGeneric ArkSecretProvider = "generic"
)

type ArkSecretSpec

type ArkSecretSpec struct {
	// Provider identifies the LLM provider this key is for.
	// Determines which environment variable is injected into agent pods:
	//   anthropic → ANTHROPIC_API_KEY
	//   openai    → OPENAI_API_KEY
	//   generic   → value of spec.envVar
	// +kubebuilder:validation:Required
	Provider ArkSecretProvider `json:"provider"`

	// SecretKeyRef references the Kubernetes Secret key that holds the API key value.
	// The referenced Secret must exist in the same namespace as the ArkSecret.
	// +kubebuilder:validation:Required
	SecretKeyRef corev1.SecretKeySelector `json:"secretKeyRef"`

	// EnvVar is the environment variable name to inject when provider is "generic".
	// Ignored for anthropic and openai providers.
	// +optional
	EnvVar string `json:"envVar,omitempty"`
}

ArkSecretSpec defines the desired state of ArkSecret.

func (*ArkSecretSpec) DeepCopy

func (in *ArkSecretSpec) DeepCopy() *ArkSecretSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSecretSpec.

func (*ArkSecretSpec) DeepCopyInto

func (in *ArkSecretSpec) DeepCopyInto(out *ArkSecretSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkSecretStatus

type ArkSecretStatus struct {
	// Phase is Active when the referenced Secret key exists and is non-empty, Invalid otherwise.
	// +optional
	Phase ArkSecretPhase `json:"phase,omitempty"`

	// ObservedGeneration is the .metadata.generation this status reflects.
	// +optional
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// Conditions reflect the current state of the ArkSecret.
	// +listType=map
	// +listMapKey=type
	// +optional
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkSecretStatus defines the observed state of ArkSecret.

func (*ArkSecretStatus) DeepCopy

func (in *ArkSecretStatus) DeepCopy() *ArkSecretStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSecretStatus.

func (*ArkSecretStatus) DeepCopyInto

func (in *ArkSecretStatus) DeepCopyInto(out *ArkSecretStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkSettings

type ArkSettings struct {
	metav1.TypeMeta `json:",inline"`

	// +optional
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkSettingsSpec `json:"spec"`

	// +optional
	Status ArkSettingsStatus `json:"status,omitempty"`
}

ArkSettings holds shared configuration consumed by ArkAgents.

func (*ArkSettings) DeepCopy

func (in *ArkSettings) DeepCopy() *ArkSettings

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSettings.

func (*ArkSettings) DeepCopyInto

func (in *ArkSettings) DeepCopyInto(out *ArkSettings)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkSettings) DeepCopyObject

func (in *ArkSettings) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkSettingsList

type ArkSettingsList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkSettings `json:"items"`
}

ArkSettingsList contains a list of ArkSettings.

func (*ArkSettingsList) DeepCopy

func (in *ArkSettingsList) DeepCopy() *ArkSettingsList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSettingsList.

func (*ArkSettingsList) DeepCopyInto

func (in *ArkSettingsList) DeepCopyInto(out *ArkSettingsList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkSettingsList) DeepCopyObject

func (in *ArkSettingsList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkSettingsSecurity

type ArkSettingsSecurity struct {
	// MCPAllowlist is a list of URL prefixes. When set, the admission webhook rejects
	// ArkAgent specs that reference MCP server URLs not matching any listed prefix.
	// Use this to prevent agents from calling arbitrary external MCP endpoints (T9).
	// Example: ["https://search.mcp.example.com/", "https://browser.mcp.example.com/"]
	// +optional
	MCPAllowlist []string `json:"mcpAllowlist,omitempty"`

	// RequireMCPAuth: when true, the webhook rejects ArkAgent specs that declare MCP
	// servers without an auth configuration (spec.mcpServers[*].auth.type must not be "none").
	// Ensures no agent can call an MCP server without verified credentials.
	// +optional
	RequireMCPAuth bool `json:"requireMCPAuth,omitempty"`
}

ArkSettingsSecurity defines operator-level MCP security policy enforced at admission time. The admission webhook loads all ArkSettings in a namespace and applies the strictest policy found — a single settings object with requireMCPAuth: true enforces it on all agents.

func (*ArkSettingsSecurity) DeepCopy

func (in *ArkSettingsSecurity) DeepCopy() *ArkSettingsSecurity

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSettingsSecurity.

func (*ArkSettingsSecurity) DeepCopyInto

func (in *ArkSettingsSecurity) DeepCopyInto(out *ArkSettingsSecurity)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkSettingsSpec

type ArkSettingsSpec struct {
	// Temperature controls response randomness (0.0–1.0).
	// +kubebuilder:validation:Pattern=`^(0(\.[0-9]+)?|1(\.0+)?)$`
	Temperature string `json:"temperature,omitempty"`

	// OutputFormat specifies the expected output format (e.g. "structured-json").
	OutputFormat string `json:"outputFormat,omitempty"`

	// MemoryBackend defines where agent memory is stored.
	// +kubebuilder:default=in-context
	MemoryBackend MemoryBackend `json:"memoryBackend,omitempty"`

	// Fragments is an ordered list of named prompt fragments composed into the agent system prompt.
	// Fragments from all referenced ArkSettings are applied in settingsRefs list order.
	// When the same fragment name appears in multiple settings, the last occurrence wins.
	// +optional
	Fragments []PromptFragment `json:"fragments,omitempty"`

	// PromptFragments is deprecated. Use Fragments instead.
	// When both are set, Fragments takes precedence and PromptFragments is ignored.
	// Retained for backward compatibility; will be removed in v1beta1.
	// +optional
	PromptFragments *PromptFragments `json:"promptFragments,omitempty"`

	// Security configures MCP server access policy enforced by the admission webhook.
	// The strictest policy across all referenced ArkSettings wins.
	// +optional
	Security *ArkSettingsSecurity `json:"security,omitempty"`
}

ArkSettingsSpec defines the shared configuration values.

func (*ArkSettingsSpec) DeepCopy

func (in *ArkSettingsSpec) DeepCopy() *ArkSettingsSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSettingsSpec.

func (*ArkSettingsSpec) DeepCopyInto

func (in *ArkSettingsSpec) DeepCopyInto(out *ArkSettingsSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkSettingsStatus

type ArkSettingsStatus struct {
	// ObservedGeneration is the .metadata.generation this status reflects.
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`
	// Conditions reflect the current state of the ArkSettings.
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkSettingsStatus defines the observed state of ArkSettings.

func (*ArkSettingsStatus) DeepCopy

func (in *ArkSettingsStatus) DeepCopy() *ArkSettingsStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkSettingsStatus.

func (*ArkSettingsStatus) DeepCopyInto

func (in *ArkSettingsStatus) DeepCopyInto(out *ArkSettingsStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeam

type ArkTeam struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	// +required
	Spec ArkTeamSpec `json:"spec"`

	// +optional
	Status ArkTeamStatus `json:"status,omitempty"`
}

ArkTeam is the unified resource for agent teams. It supports three execution modes: dynamic mode (no spec.pipeline — service semantics, roles use delegate() for routing), pipeline mode (spec.pipeline set — job semantics, DAG execution like ArkFlow), and routed mode (spec.routing set — LLM-driven capability dispatch via ArkRegistry, RFC-0019).

func (*ArkTeam) DeepCopy

func (in *ArkTeam) DeepCopy() *ArkTeam

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeam.

func (*ArkTeam) DeepCopyInto

func (in *ArkTeam) DeepCopyInto(out *ArkTeam)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkTeam) DeepCopyObject

func (in *ArkTeam) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkTeamAutoscaling

type ArkTeamAutoscaling struct {
	// Enabled turns on team-owned autoscaling. When false the operator does not touch replicas.
	// +optional
	Enabled bool `json:"enabled,omitempty"`

	// ScaleToZero configures idle scale-to-zero.
	// When unset, roles are always kept at their configured replica count.
	// +optional
	ScaleToZero *ArkTeamScaleToZero `json:"scaleToZero,omitempty"`
}

ArkTeamAutoscaling configures demand-driven replica scaling for a team's inline agents. The operator adjusts replicas between 0 and spec.roles[].replicas based on active pipeline steps. This is distinct from KEDA-based autoscaling on individual ArkAgents.

func (*ArkTeamAutoscaling) DeepCopy

func (in *ArkTeamAutoscaling) DeepCopy() *ArkTeamAutoscaling

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamAutoscaling.

func (*ArkTeamAutoscaling) DeepCopyInto

func (in *ArkTeamAutoscaling) DeepCopyInto(out *ArkTeamAutoscaling)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamInputSpec

type ArkTeamInputSpec struct {
	// Name is the parameter key, referenced in step prompts via "{{ .input.<name> }}".
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// Type is the expected type of the value, used for documentation and tooling.
	// The operator enforces presence/default but does not coerce string values.
	// +kubebuilder:validation:Enum=string;number;boolean;object;array
	// +kubebuilder:default=string
	// +optional
	Type string `json:"type,omitempty"`

	// Description documents the parameter for operators and tooling.
	// +optional
	Description string `json:"description,omitempty"`

	// Required marks this parameter as mandatory. When true and the parameter is
	// absent from spec.input at run creation, the ArkRun is immediately failed.
	// +optional
	Required bool `json:"required,omitempty"`

	// Default is the value applied when Required is false and the parameter
	// is not provided in spec.input.
	// +optional
	Default string `json:"default,omitempty"`
}

ArkTeamInputSpec defines one formal input parameter for a pipeline. Parameters declared here are validated and defaulted when an ArkRun is created.

func (*ArkTeamInputSpec) DeepCopy

func (in *ArkTeamInputSpec) DeepCopy() *ArkTeamInputSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamInputSpec.

func (*ArkTeamInputSpec) DeepCopyInto

func (in *ArkTeamInputSpec) DeepCopyInto(out *ArkTeamInputSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamLimits

type ArkTeamLimits struct {
	// MaxDailyTokens is the rolling 24-hour token budget across the whole team pipeline.
	// Zero means no daily limit.
	// +kubebuilder:validation:Minimum=1
	MaxDailyTokens int64 `json:"maxDailyTokens,omitempty"`
}

ArkTeamLimits constrains team-level resource usage.

func (*ArkTeamLimits) DeepCopy

func (in *ArkTeamLimits) DeepCopy() *ArkTeamLimits

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamLimits.

func (*ArkTeamLimits) DeepCopyInto

func (in *ArkTeamLimits) DeepCopyInto(out *ArkTeamLimits)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamList

type ArkTeamList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ArkTeam `json:"items"`
}

ArkTeamList contains a list of ArkTeam.

func (*ArkTeamList) DeepCopy

func (in *ArkTeamList) DeepCopy() *ArkTeamList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamList.

func (*ArkTeamList) DeepCopyInto

func (in *ArkTeamList) DeepCopyInto(out *ArkTeamList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ArkTeamList) DeepCopyObject

func (in *ArkTeamList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ArkTeamPhase

type ArkTeamPhase string

ArkTeamPhase describes the overall state of an ArkTeam. +kubebuilder:validation:Enum=Pending;Ready;Running;Succeeded;Failed

const (
	ArkTeamPhasePending   ArkTeamPhase = "Pending"
	ArkTeamPhaseReady     ArkTeamPhase = "Ready"     // infra up, dynamic mode idle
	ArkTeamPhaseRunning   ArkTeamPhase = "Running"   // pipeline executing
	ArkTeamPhaseSucceeded ArkTeamPhase = "Succeeded" // pipeline completed
	ArkTeamPhaseFailed    ArkTeamPhase = "Failed"
)

type ArkTeamPipelineStep

type ArkTeamPipelineStep struct {
	// Role references a role name in spec.roles. The step name equals the role name.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Role string `json:"role"`

	// Inputs is a map of input key → Go template expression referencing pipeline
	// inputs or earlier step outputs. Example: "{{ .steps.research.output }}"
	Inputs map[string]string `json:"inputs,omitempty"`

	// DependsOn lists role names (step names) that must complete before this step runs.
	DependsOn []string `json:"dependsOn,omitempty"`

	// If is an optional Go template expression. When set, the step only executes if the
	// expression evaluates to a truthy value. A falsy result marks the step Skipped.
	If string `json:"if,omitempty"`

	// Loop makes this step repeat until Condition evaluates to false or MaxIterations is reached.
	Loop *LoopSpec `json:"loop,omitempty"`

	// OutputSchema is an optional JSON Schema string that constrains this step's output.
	OutputSchema string `json:"outputSchema,omitempty"`

	// Validate configures optional output validation for this step.
	// When set, the step enters Validating phase after the agent completes and only
	// transitions to Succeeded once all configured checks pass.
	// +optional
	Validate *StepValidation `json:"validate,omitempty"`

	// OutputArtifacts declares file artifacts this step produces.
	// The agent writes each artifact to $AGENT_ARTIFACT_DIR/<name> after its task.
	// Artifact URLs are stored in ArkFlowStepStatus.Artifacts and available to
	// downstream steps via "{{ .steps.<stepName>.artifacts.<name> }}".
	// +optional
	OutputArtifacts []ArtifactSpec `json:"outputArtifacts,omitempty"`

	// InputArtifacts maps a local artifact name to an upstream step's artifact.
	// The value format is "<stepName>.<artifactName>".
	// The resolved URL is injected via AGENT_INPUT_ARTIFACTS env var as a JSON map.
	// +optional
	InputArtifacts map[string]string `json:"inputArtifacts,omitempty"`

	// RegistryLookup resolves the executing agent by capability at runtime.
	// The ArkRun controller resolves this before the step starts and records
	// the resolved agent in status.resolvedAgent.
	// +optional
	RegistryLookup *RegistryLookupSpec `json:"registryLookup,omitempty"`
}

ArkTeamPipelineStep is one node in the ArkTeam DAG pipeline.

func (*ArkTeamPipelineStep) DeepCopy

func (in *ArkTeamPipelineStep) DeepCopy() *ArkTeamPipelineStep

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamPipelineStep.

func (*ArkTeamPipelineStep) DeepCopyInto

func (in *ArkTeamPipelineStep) DeepCopyInto(out *ArkTeamPipelineStep)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamRole

type ArkTeamRole struct {
	// Name is the unique role identifier (e.g. "researcher", "coordinator").
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// ArkAgent is the name of an existing ArkAgent in the same namespace.
	// Mutually exclusive with Model+SystemPrompt (inline definition).
	// +optional
	ArkAgent string `json:"arkAgent,omitempty"`

	// ArkTeam is the name of another ArkTeam in the same namespace whose entry role
	// fulfils this role. Only valid in pipeline mode (spec.pipeline must be set).
	// +optional
	ArkTeam string `json:"arkTeam,omitempty"`

	// Model is the LLM model ID for an inline role definition.
	// If set, the operator auto-creates an ArkAgent named {team}-{role}.
	// +optional
	Model string `json:"model,omitempty"`

	// SystemPrompt is the inline system prompt for an auto-created ArkAgent.
	//
	// Deprecated for production use: inline prompts are stored directly in etcd
	// and can exceed the 1.5 MB per-object limit when prompts are large or when
	// many roles are defined in one ArkTeam. Use SystemPromptRef instead for any
	// prompt larger than ~50 KB or for any production workload.
	//
	// Inline prompts remain fully supported for local development, quickstart
	// examples, and prompts under 50 KB.
	// +optional
	SystemPrompt string `json:"systemPrompt,omitempty"`

	// SystemPromptRef references a ConfigMap or Secret key whose content is used
	// as the system prompt for this role's auto-created ArkAgent. Takes precedence
	// over SystemPrompt when both are set. Preferred for production workloads —
	// prompt text is stored in a ConfigMap/Secret rather than in etcd as part of
	// the ArkTeam object, avoiding etcd size limits.
	// +optional
	SystemPromptRef *SystemPromptSource `json:"systemPromptRef,omitempty"`

	// MCPServers lists MCP tool servers for an inline role definition.
	// +optional
	MCPServers []MCPServerSpec `json:"mcpServers,omitempty"`

	// Tools lists inline HTTP webhook tools for an inline role definition.
	// +optional
	Tools []WebhookToolSpec `json:"tools,omitempty"`

	// Replicas is the number of agent pods for an inline role definition.
	// +kubebuilder:default=1
	// +optional
	Replicas *int32 `json:"replicas,omitempty"`

	// Limits constrains per-agent resource usage for an inline role definition.
	// +optional
	Limits *ArkonisLimits `json:"limits,omitempty"`

	// Resources sets CPU and memory requests/limits for the agent pods of an inline role
	// definition. When not set the operator injects safe defaults (requests: cpu=100m
	// mem=128Mi; limits: cpu=500m mem=512Mi ephemeral-storage=256Mi). Set this field
	// explicitly to tune for your workload's actual footprint.
	// +optional
	Resources *corev1.ResourceRequirements `json:"resources,omitempty"`

	// Autoscaling configures KEDA-based autoscaling for an inline role's managed ArkAgent.
	// +optional
	Autoscaling *ArkAgentAutoscaling `json:"autoscaling,omitempty"`

	// CanDelegate lists role names this role is permitted to call via delegate().
	// Empty means this is a leaf role — it cannot delegate further.
	// +optional
	CanDelegate []string `json:"canDelegate,omitempty"`

	// SettingsRefs references one or more ArkSettings whose fragments are composed into this
	// role's system prompt, in list order. Only applies to inline roles (those with model +
	// systemPrompt/systemPromptRef). For roles referencing an external ArkAgent (arkAgent: <name>),
	// set settingsRefs on the ArkAgent CR directly.
	// +optional
	SettingsRefs []LocalObjectReference `json:"settingsRefs,omitempty"`

	// EnvFrom injects environment variables from Secrets or ConfigMaps into the agent pods
	// created for this role. Use this to supply API keys (ANTHROPIC_API_KEY, OPENAI_API_KEY,
	// OPENAI_BASE_URL, etc.) on a per-role basis. Entries listed here take precedence over
	// the global arkonis-api-keys Secret set via the Helm chart.
	// Only applies to inline roles (those with model + systemPrompt/systemPromptRef).
	// +optional
	EnvFrom []corev1.EnvFromSource `json:"envFrom,omitempty"`
}

ArkTeamRole defines one role in the team.

func (*ArkTeamRole) DeepCopy

func (in *ArkTeamRole) DeepCopy() *ArkTeamRole

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamRole.

func (*ArkTeamRole) DeepCopyInto

func (in *ArkTeamRole) DeepCopyInto(out *ArkTeamRole)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamRoleStatus

type ArkTeamRoleStatus struct {
	// Name matches ArkTeamRole.Name.
	Name string `json:"name"`
	// ReadyReplicas is the number of agent pods ready to accept tasks.
	ReadyReplicas int32 `json:"readyReplicas,omitempty"`
	// DesiredReplicas is the configured replica count for this role.
	DesiredReplicas int32 `json:"desiredReplicas,omitempty"`
	// ManagedArkAgent is the name of the auto-created ArkAgent for inline roles.
	ManagedArkAgent string `json:"managedArkAgent,omitempty"`
}

ArkTeamRoleStatus captures the observed state of one team role.

func (*ArkTeamRoleStatus) DeepCopy

func (in *ArkTeamRoleStatus) DeepCopy() *ArkTeamRoleStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamRoleStatus.

func (*ArkTeamRoleStatus) DeepCopyInto

func (in *ArkTeamRoleStatus) DeepCopyInto(out *ArkTeamRoleStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamRoutingSpec added in v0.2.0

type ArkTeamRoutingSpec struct {
	// RegistryRef names the ArkRegistry to query for capability resolution.
	// Defaults to the first ArkRegistry found in the namespace when omitted.
	// +optional
	RegistryRef *LocalObjectReference `json:"registryRef,omitempty"`

	// Model is the LLM model used for the router call.
	// A lightweight model (e.g. haiku) is sufficient and recommended.
	// Defaults to the operator-wide default model when omitted.
	// +kubebuilder:validation:MinLength=1
	// +optional
	Model string `json:"model,omitempty"`

	// SystemPrompt overrides the default router system prompt.
	// Use {{ .Capabilities }} to embed the capability list and
	// {{ .Input }} to embed the task input in a custom prompt.
	// +optional
	SystemPrompt string `json:"systemPrompt,omitempty"`

	// Fallback is the name of a standalone ArkAgent to use when no capability
	// matches or the router LLM fails to select one.
	// When absent and no match is found, the run fails with RoutingFailed.
	// +optional
	Fallback string `json:"fallback,omitempty"`

	// MaxHops is the maximum number of sequential routing decisions per run.
	// Reserved for future multi-hop support. Must be 1 in this version.
	// +kubebuilder:default=1
	// +kubebuilder:validation:Minimum=1
	// +kubebuilder:validation:Maximum=1
	// +optional
	MaxHops int `json:"maxHops,omitempty"`
}

ArkTeamRoutingSpec configures routed mode execution for an ArkTeam. When set on an ArkTeam, incoming tasks are dispatched automatically to the best-matching agent by an LLM router call against ArkRegistry — no pipeline DAG or hardcoded roles required.

func (*ArkTeamRoutingSpec) DeepCopy added in v0.2.0

func (in *ArkTeamRoutingSpec) DeepCopy() *ArkTeamRoutingSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamRoutingSpec.

func (*ArkTeamRoutingSpec) DeepCopyInto added in v0.2.0

func (in *ArkTeamRoutingSpec) DeepCopyInto(out *ArkTeamRoutingSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamScaleToZero

type ArkTeamScaleToZero struct {
	// Enabled activates scale-to-zero. When true, idle roles are scaled to 0 replicas after
	// AfterSeconds of inactivity and are warmed back up automatically when a new run triggers.
	// +optional
	Enabled bool `json:"enabled,omitempty"`

	// AfterSeconds is how long a role must be idle (no active steps) before it is scaled to zero.
	// Minimum 30. Defaults to 300 (5 minutes).
	// +kubebuilder:default=300
	// +kubebuilder:validation:Minimum=30
	// +optional
	AfterSeconds *int32 `json:"afterSeconds,omitempty"`
}

ArkTeamScaleToZero configures scale-to-zero behaviour for a team's inline agents.

func (*ArkTeamScaleToZero) DeepCopy

func (in *ArkTeamScaleToZero) DeepCopy() *ArkTeamScaleToZero

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamScaleToZero.

func (*ArkTeamScaleToZero) DeepCopyInto

func (in *ArkTeamScaleToZero) DeepCopyInto(out *ArkTeamScaleToZero)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamSpec

type ArkTeamSpec struct {
	// Entry is the role name that receives external tasks in dynamic mode.
	// Exactly one role should be the entry point for dynamic teams.
	// In pipeline mode (spec.pipeline set), entry is optional.
	// +optional
	Entry string `json:"entry,omitempty"`

	// Output is a Go template expression that selects the final pipeline result.
	// Example: "{{ .steps.summarize.output }}"
	// Only used in pipeline mode.
	// +optional
	Output string `json:"output,omitempty"`

	// Inputs defines the formal schema for pipeline input parameters.
	// When set, required parameters are enforced and defaults are applied before
	// an ArkRun starts executing. Steps reference these values via "{{ .input.<name> }}".
	// +optional
	Inputs []ArkTeamInputSpec `json:"inputs,omitempty"`

	// Input is the initial data passed into the pipeline.
	// Step inputs can reference these values via "{{ .input.<key> }}".
	// Only used in pipeline mode.
	// +optional
	Input map[string]string `json:"input,omitempty"`

	// TimeoutSeconds is the maximum wall-clock seconds the pipeline may run.
	// Zero means no timeout. Only used in pipeline mode.
	// +kubebuilder:validation:Minimum=1
	// +optional
	TimeoutSeconds int `json:"timeoutSeconds,omitempty"`

	// MaxTokens is the total token budget for the entire pipeline run.
	// Zero means no limit. Only used in pipeline mode.
	// +kubebuilder:validation:Minimum=1
	// +optional
	MaxTokens int64 `json:"maxTokens,omitempty"`

	// Limits constrains team-level resource usage.
	// +optional
	Limits *ArkTeamLimits `json:"limits,omitempty"`

	// Roles defines the roles that make up this team.
	// At least one role is required unless spec.routing is set (routed mode).
	// +optional
	Roles []ArkTeamRole `json:"roles,omitempty"`

	// Pipeline defines an optional DAG of steps that drive ordered execution.
	// When set, the team operates in pipeline mode (job semantics).
	// When unset, the team operates in dynamic mode (service semantics).
	// +optional
	Pipeline []ArkTeamPipelineStep `json:"pipeline,omitempty"`

	// SuccessfulRunsHistoryLimit is the number of successful ArkRun objects to
	// retain for this team. Oldest runs beyond this limit are deleted automatically.
	// Set to 0 to delete successful runs immediately after completion.
	// +kubebuilder:default=10
	// +kubebuilder:validation:Minimum=0
	// +optional
	SuccessfulRunsHistoryLimit *int32 `json:"successfulRunsHistoryLimit,omitempty"`

	// FailedRunsHistoryLimit is the number of failed ArkRun objects to retain.
	// +kubebuilder:default=3
	// +kubebuilder:validation:Minimum=0
	// +optional
	FailedRunsHistoryLimit *int32 `json:"failedRunsHistoryLimit,omitempty"`

	// RunRetainFor is the maximum age of completed ArkRun objects for this team.
	// Runs older than this duration are deleted regardless of the history limits.
	// Zero means no age-based cleanup (only count-based limits apply).
	// Example: "168h" (7 days), "720h" (30 days).
	// +optional
	RunRetainFor *metav1.Duration `json:"runRetainFor,omitempty"`

	// NotifyRef references an ArkNotify policy in the same namespace.
	// When set, the operator dispatches notifications after terminal phase transitions.
	// +optional
	NotifyRef *LocalObjectReference `json:"notifyRef,omitempty"`

	// BudgetRef references an ArkBudget in the same namespace that governs token
	// spend for this team. When the budget is exhausted, new runs are blocked.
	// +optional
	BudgetRef *LocalObjectReference `json:"budgetRef,omitempty"`

	// RegistryRef names the ArkRegistry used for registryLookup steps and routed
	// mode agent resolution. Defaults to "default".
	// +kubebuilder:default=default
	// +optional
	RegistryRef string `json:"registryRef,omitempty"`

	// ArtifactStore configures where pipeline file artifacts are stored.
	// When unset, file artifact support is disabled and any OutputArtifacts
	// declarations on pipeline steps are ignored.
	// +optional
	ArtifactStore *ArtifactStoreSpec `json:"artifactStore,omitempty"`

	// Autoscaling configures demand-driven replica scaling for this team's inline agents.
	// When enabled, the operator scales each role's managed ArkAgent between 0 and its
	// configured replica count based on the number of active pipeline steps for that role.
	// Only applies to inline roles (those with model+systemPrompt); external ArkAgent references
	// are not scaled by the team controller.
	// +optional
	Autoscaling *ArkTeamAutoscaling `json:"autoscaling,omitempty"`

	// Routing configures routed mode. When set, the team operates in routed mode:
	// tasks are dispatched automatically via an LLM router call against ArkRegistry.
	// Mutually exclusive with spec.pipeline and spec.roles.
	// +optional
	Routing *ArkTeamRoutingSpec `json:"routing,omitempty"`
}

ArkTeamSpec defines the desired state of ArkTeam. +kubebuilder:validation:XValidation:rule="has(self.routing) ? (!has(self.roles) || self.roles.size() == 0) : (has(self.roles) && self.roles.size() > 0)",message="spec.routing is mutually exclusive with spec.roles; in routed mode omit spec.roles, in pipeline/dynamic mode spec.roles must have at least one role" +kubebuilder:validation:XValidation:rule="!(has(self.routing) && has(self.pipeline) && self.pipeline.size() > 0)",message="spec.routing is mutually exclusive with spec.pipeline"

func (*ArkTeamSpec) DeepCopy

func (in *ArkTeamSpec) DeepCopy() *ArkTeamSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamSpec.

func (*ArkTeamSpec) DeepCopyInto

func (in *ArkTeamSpec) DeepCopyInto(out *ArkTeamSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkTeamStatus

type ArkTeamStatus struct {
	// Phase is the overall team state.
	// For pipeline teams this mirrors the most recent ArkRun phase.
	// For dynamic teams this reflects infrastructure readiness.
	Phase ArkTeamPhase `json:"phase,omitempty"`

	// Roles lists the observed state of each role.
	Roles []ArkTeamRoleStatus `json:"roles,omitempty"`

	// EntryRole is the role name that is the external submission point.
	EntryRole string `json:"entryRole,omitempty"`

	// LastRunName is the name of the most recently created ArkRun for this team.
	// Empty when no run has been triggered yet.
	LastRunName string `json:"lastRunName,omitempty"`

	// LastRunPhase is the phase of the most recently created ArkRun.
	// Mirrors ArkRun.Status.Phase for quick visibility in kubectl get arkteam.
	LastRunPhase ArkRunPhase `json:"lastRunPhase,omitempty"`

	// ScaledToZero is true when all inline-role agents have been scaled to 0 replicas
	// due to team autoscaling idle timeout. The team warms up automatically when triggered.
	// +optional
	ScaledToZero bool `json:"scaledToZero,omitempty"`

	// LastActiveTime is when the team last had an active (running) pipeline step.
	// Used by the autoscaler to decide when to scale idle roles to zero.
	// +optional
	LastActiveTime *metav1.Time `json:"lastActiveTime,omitempty"`

	// ObservedGeneration is the .metadata.generation this status reflects.
	ObservedGeneration int64 `json:"observedGeneration,omitempty"`

	// Conditions reflect the current state of the ArkTeam.
	// +listType=map
	// +listMapKey=type
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}

ArkTeamStatus defines the observed state of ArkTeam.

func (*ArkTeamStatus) DeepCopy

func (in *ArkTeamStatus) DeepCopy() *ArkTeamStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkTeamStatus.

func (*ArkTeamStatus) DeepCopyInto

func (in *ArkTeamStatus) DeepCopyInto(out *ArkTeamStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkonisLimits

type ArkonisLimits struct {
	// MaxTokensPerCall is the maximum number of tokens per Anthropic API call.
	// +kubebuilder:default=8000
	MaxTokensPerCall int `json:"maxTokensPerCall,omitempty"`
	// MaxConcurrentTasks is the maximum number of tasks processed in parallel per replica.
	// +kubebuilder:default=5
	MaxConcurrentTasks int `json:"maxConcurrentTasks,omitempty"`
	// TimeoutSeconds is the per-task deadline.
	// +kubebuilder:default=120
	TimeoutSeconds int `json:"timeoutSeconds,omitempty"`
	// MaxDailyTokens is the rolling 24-hour token budget (input + output combined) for this
	// deployment. When the budget is reached, the operator scales replicas to 0 and sets a
	// BudgetExceeded condition. The deployment resumes automatically once the 24-hour window
	// rotates and usage drops below the limit. Zero means no daily limit.
	// +kubebuilder:validation:Minimum=1
	MaxDailyTokens int64 `json:"maxDailyTokens,omitempty"`
}

ArkonisLimits constrains per-agent resource usage.

func (*ArkonisLimits) DeepCopy

func (in *ArkonisLimits) DeepCopy() *ArkonisLimits

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkonisLimits.

func (*ArkonisLimits) DeepCopyInto

func (in *ArkonisLimits) DeepCopyInto(out *ArkonisLimits)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArkonisProbe

type ArkonisProbe struct {
	// Type is the probe strategy: "semantic" (LLM-based) or "ping" (HTTP).
	Type ProbeType `json:"type"`
	// IntervalSeconds is how often the probe runs.
	// +kubebuilder:default=30
	IntervalSeconds int `json:"intervalSeconds,omitempty"`
	// ValidatorPrompt is the prompt sent when Type is "semantic".
	ValidatorPrompt string `json:"validatorPrompt,omitempty"`
}

ArkonisProbe defines how to evaluate agent health.

func (*ArkonisProbe) DeepCopy

func (in *ArkonisProbe) DeepCopy() *ArkonisProbe

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArkonisProbe.

func (*ArkonisProbe) DeepCopyInto

func (in *ArkonisProbe) DeepCopyInto(out *ArkonisProbe)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArtifactSpec

type ArtifactSpec struct {
	// Name is the artifact identifier, used in template references:
	// {{ .steps.<stepName>.artifacts.<name> }}
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`
	// Description documents the artifact for operators and tooling.
	// +optional
	Description string `json:"description,omitempty"`
	// ContentType is the MIME type hint for the artifact (e.g. application/pdf).
	// +optional
	ContentType string `json:"contentType,omitempty"`
}

ArtifactSpec declares a named file artifact produced by a pipeline step. The agent is expected to write the artifact file under $AGENT_ARTIFACT_DIR/<name>.

func (*ArtifactSpec) DeepCopy

func (in *ArtifactSpec) DeepCopy() *ArtifactSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArtifactSpec.

func (*ArtifactSpec) DeepCopyInto

func (in *ArtifactSpec) DeepCopyInto(out *ArtifactSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArtifactStoreGCSSpec

type ArtifactStoreGCSSpec struct {
	// Bucket is the GCS bucket name.
	// +kubebuilder:validation:Required
	Bucket string `json:"bucket"`
	// Prefix is an optional object prefix applied to all stored artifacts.
	// +optional
	Prefix string `json:"prefix,omitempty"`
	// CredentialsSecret references a k8s Secret with a service account JSON key
	// under the "credentials.json" key.
	// +optional
	CredentialsSecret *LocalObjectReference `json:"credentialsSecret,omitempty"`
}

ArtifactStoreGCS configures Google Cloud Storage artifact storage.

func (*ArtifactStoreGCSSpec) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArtifactStoreGCSSpec.

func (*ArtifactStoreGCSSpec) DeepCopyInto

func (in *ArtifactStoreGCSSpec) DeepCopyInto(out *ArtifactStoreGCSSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArtifactStoreLocalSpec

type ArtifactStoreLocalSpec struct {
	// Path is the base directory where artifacts are stored.
	// Defaults to /tmp/ark-artifacts when empty.
	// +optional
	Path string `json:"path,omitempty"`
}

ArtifactStoreLocal configures local-disk artifact storage (for ark run / testing).

func (*ArtifactStoreLocalSpec) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArtifactStoreLocalSpec.

func (*ArtifactStoreLocalSpec) DeepCopyInto

func (in *ArtifactStoreLocalSpec) DeepCopyInto(out *ArtifactStoreLocalSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArtifactStoreS3Spec

type ArtifactStoreS3Spec struct {
	// Bucket is the S3 bucket name.
	// +kubebuilder:validation:Required
	Bucket string `json:"bucket"`
	// Region is the AWS region (e.g. us-east-1).
	// +optional
	Region string `json:"region,omitempty"`
	// Prefix is an optional key prefix applied to all stored artifacts.
	// +optional
	Prefix string `json:"prefix,omitempty"`
	// CredentialsSecret references a k8s Secret containing AWS_ACCESS_KEY_ID
	// and AWS_SECRET_ACCESS_KEY keys. When empty, the default credential chain is used.
	// +optional
	CredentialsSecret *LocalObjectReference `json:"credentialsSecret,omitempty"`
}

ArtifactStoreS3 configures Amazon S3 artifact storage.

func (*ArtifactStoreS3Spec) DeepCopy

func (in *ArtifactStoreS3Spec) DeepCopy() *ArtifactStoreS3Spec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArtifactStoreS3Spec.

func (*ArtifactStoreS3Spec) DeepCopyInto

func (in *ArtifactStoreS3Spec) DeepCopyInto(out *ArtifactStoreS3Spec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArtifactStoreSpec

type ArtifactStoreSpec struct {
	// Type selects the storage backend.
	// +kubebuilder:validation:Required
	Type ArtifactStoreType `json:"type"`
	// Local configures local-disk storage. Only used when type=local.
	// +optional
	Local *ArtifactStoreLocalSpec `json:"local,omitempty"`
	// S3 configures Amazon S3 storage. Only used when type=s3.
	// +optional
	S3 *ArtifactStoreS3Spec `json:"s3,omitempty"`
	// GCS configures Google Cloud Storage. Only used when type=gcs.
	// +optional
	GCS *ArtifactStoreGCSSpec `json:"gcs,omitempty"`
}

ArtifactStoreSpec configures where pipeline file artifacts are stored.

func (*ArtifactStoreSpec) DeepCopy

func (in *ArtifactStoreSpec) DeepCopy() *ArtifactStoreSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArtifactStoreSpec.

func (*ArtifactStoreSpec) DeepCopyInto

func (in *ArtifactStoreSpec) DeepCopyInto(out *ArtifactStoreSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ArtifactStoreType

type ArtifactStoreType string

ArtifactStoreType identifies the storage backend for file artifacts. +kubebuilder:validation:Enum=local;s3;gcs

const (
	// ArtifactStoreLocal stores artifacts on the local filesystem (ark run only).
	ArtifactStoreLocal ArtifactStoreType = "local"
	// ArtifactStoreS3 stores artifacts in an Amazon S3 bucket.
	ArtifactStoreS3 ArtifactStoreType = "s3"
	// ArtifactStoreGCS stores artifacts in a Google Cloud Storage bucket.
	ArtifactStoreGCS ArtifactStoreType = "gcs"
)

type BudgetStatus

type BudgetStatus string

BudgetStatus is the phase summary for an ArkBudget. +kubebuilder:validation:Enum=OK;Warning;Exceeded

const (
	BudgetStatusOK       BudgetStatus = "OK"
	BudgetStatusWarning  BudgetStatus = "Warning"
	BudgetStatusExceeded BudgetStatus = "Exceeded"
)

type ConcurrencyPolicy

type ConcurrencyPolicy string

ConcurrencyPolicy controls what happens when a trigger fires while a previously dispatched pipeline is still running. +kubebuilder:validation:Enum=Allow;Forbid

const (
	// ConcurrencyAllow always dispatches a new pipeline run, even if a previous one is still running.
	ConcurrencyAllow ConcurrencyPolicy = "Allow"
	// ConcurrencyForbid skips the fire if any pipeline owned by this trigger is still Running.
	ConcurrencyForbid ConcurrencyPolicy = "Forbid"
)

type IndexedCapability

type IndexedCapability struct {
	// ID is the capability identifier.
	ID string `json:"id"`
	// Description is the human-readable description of the capability, taken from the
	// first agent that declares it. Used by the router LLM to select the right agent.
	Description string `json:"description,omitempty"`
	// Agents is the list of ArkAgent names that advertise this capability.
	Agents []string `json:"agents,omitempty"`
	// Tags is the union of all tags declared for this capability across all agents.
	Tags []string `json:"tags,omitempty"`
}

IndexedCapability is one capability entry in the ArkRegistry status index.

func (*IndexedCapability) DeepCopy

func (in *IndexedCapability) DeepCopy() *IndexedCapability

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IndexedCapability.

func (*IndexedCapability) DeepCopyInto

func (in *IndexedCapability) DeepCopyInto(out *IndexedCapability)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LocalObjectReference

type LocalObjectReference struct {
	// Name of the referenced object.
	Name string `json:"name"`
}

LocalObjectReference identifies an object in the same namespace.

func (*LocalObjectReference) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalObjectReference.

func (*LocalObjectReference) DeepCopyInto

func (in *LocalObjectReference) DeepCopyInto(out *LocalObjectReference)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type LoopSpec

type LoopSpec struct {
	// Condition is a Go template expression evaluated after each iteration.
	// The step repeats while this evaluates to a truthy value ("true", non-empty, non-"false", non-"0").
	// Example: "{{ gt (len .steps.collect.output) 0 }}"
	// +kubebuilder:validation:Required
	Condition string `json:"condition"`

	// MaxIterations caps the number of loop repetitions to prevent infinite loops.
	// +kubebuilder:default=10
	// +kubebuilder:validation:Minimum=1
	// +kubebuilder:validation:Maximum=100
	MaxIterations int `json:"maxIterations,omitempty"`
}

LoopSpec defines loop behaviour for a pipeline step.

func (*LoopSpec) DeepCopy

func (in *LoopSpec) DeepCopy() *LoopSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoopSpec.

func (*LoopSpec) DeepCopyInto

func (in *LoopSpec) DeepCopyInto(out *LoopSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MCPBinding

type MCPBinding struct {
	// CapabilityID is the capability identifier to resolve.
	// Must match MCPServerSpec.capabilityRef on the referencing agent.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	CapabilityID string `json:"capabilityId"`
	// URL is the SSE endpoint of the MCP server that provides this capability.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	URL string `json:"url"`
}

MCPBinding maps a capability ID to the MCP server URL that provides it in this deployment. Used to resolve MCPServerSpec.capabilityRef at reconcile time so that shared agent definitions (e.g. from ark-cookbook) remain URL-free.

func (*MCPBinding) DeepCopy

func (in *MCPBinding) DeepCopy() *MCPBinding

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPBinding.

func (*MCPBinding) DeepCopyInto

func (in *MCPBinding) DeepCopyInto(out *MCPBinding)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MCPHeaderValue

type MCPHeaderValue struct {
	// Value is the literal header value. Use this for non-sensitive headers.
	// +optional
	Value string `json:"value,omitempty"`
	// SecretKeyRef selects a key of a Secret in the same namespace.
	// Use this when the header value contains credentials.
	// +optional
	SecretKeyRef *corev1.SecretKeySelector `json:"secretKeyRef,omitempty"`
}

MCPHeaderValue is either a literal string or a Kubernetes Secret reference. Exactly one of Value or SecretKeyRef must be set.

func (*MCPHeaderValue) DeepCopy

func (in *MCPHeaderValue) DeepCopy() *MCPHeaderValue

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPHeaderValue.

func (*MCPHeaderValue) DeepCopyInto

func (in *MCPHeaderValue) DeepCopyInto(out *MCPHeaderValue)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MCPServerAuth

type MCPServerAuth struct {
	// Type selects the authentication mechanism.
	// +kubebuilder:default=none
	// +kubebuilder:validation:Enum=none;bearer;mtls
	Type string `json:"type"`

	// TokenSecretRef references a k8s Secret containing the bearer token.
	// Required when type=bearer. The Secret key value is injected as an env var;
	// it is never inlined into the pod spec.
	// +optional
	TokenSecretRef *corev1.SecretKeySelector `json:"tokenSecretRef,omitempty"`

	// MTLSSecretRef references a k8s Secret containing tls.crt and tls.key.
	// Required when type=mtls. The Secret is mounted as a read-only volume inside
	// the agent pod; the cert paths are injected via AGENT_MCP_SERVERS JSON.
	// +optional
	MTLSSecretRef *LocalObjectReference `json:"mtlsSecretRef,omitempty"`
}

MCPServerAuth configures authentication for a single MCP server connection. The operator resolves Secret references at pod creation time and injects them without ever writing the secret value into the pod spec or operator logs.

func (*MCPServerAuth) DeepCopy

func (in *MCPServerAuth) DeepCopy() *MCPServerAuth

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPServerAuth.

func (*MCPServerAuth) DeepCopyInto

func (in *MCPServerAuth) DeepCopyInto(out *MCPServerAuth)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MCPServerSpec

type MCPServerSpec struct {
	// Name is a human-readable identifier for this MCP server.
	Name string `json:"name"`
	// URL is the direct SSE endpoint of the MCP server.
	// Mutually exclusive with capabilityRef and arkAgentRef.
	// +optional
	URL string `json:"url,omitempty"`
	// CapabilityRef names a capability ID defined in the namespace's ArkRegistry.
	// The operator resolves the actual MCP server URL from the registry's mcpBindings
	// at reconcile time. Use this in shareable agent definitions (e.g. ark-cookbook)
	// so that the URL is supplied per-deployment rather than hardcoded.
	// Mutually exclusive with url and arkAgentRef.
	// +optional
	CapabilityRef string `json:"capabilityRef,omitempty"`
	// ArkAgentRef names an ArkAgent in the same namespace whose MCP-exposed capabilities
	// should be made available as tools to this agent. The operator resolves this to the
	// MCP gateway URL for the target agent at reconcile time. The target agent must have
	// at least one capability with exposeMCP: true.
	// Mutually exclusive with url and capabilityRef.
	// +optional
	ArkAgentRef string `json:"arkAgentRef,omitempty"`
	// Headers is an optional map of HTTP headers to send with every request to this MCP server.
	// Values can be literal strings or references to Kubernetes Secret keys.
	// +optional
	Headers map[string]MCPHeaderValue `json:"headers,omitempty"`
	// Guidance is optional deployment-specific instructions for using this MCP server.
	// When set, the operator appends a structured section to the agent's composed system prompt.
	// Use this for operational context that varies per deployment — branch policies, project keys,
	// environment-specific constraints. General tool documentation belongs in the MCP tool's own
	// description field, which the agent runtime already surfaces to the LLM via list_tools.
	// +optional
	Guidance string `json:"guidance,omitempty"`

	// Auth configures authentication for this MCP server connection.
	// Supports bearer token (Authorization: Bearer) and mTLS client certificates.
	// When not set the connection is unauthenticated (type: none).
	// +optional
	Auth *MCPServerAuth `json:"auth,omitempty"`
}

MCPServerSpec defines one MCP tool server. Exactly one of url, capabilityRef, or arkAgentRef must be set. +kubebuilder:validation:XValidation:rule="(has(self.url) && size(self.url) > 0) || (has(self.capabilityRef) && size(self.capabilityRef) > 0) || (has(self.arkAgentRef) && size(self.arkAgentRef) > 0)",message="exactly one of url/capabilityRef/arkAgentRef must be set" +kubebuilder:validation:XValidation:rule="!(has(self.url) && size(self.url) > 0 && has(self.capabilityRef) && size(self.capabilityRef) > 0) && !(has(self.url) && size(self.url) > 0 && has(self.arkAgentRef) && size(self.arkAgentRef) > 0) && !(has(self.capabilityRef) && size(self.capabilityRef) > 0 && has(self.arkAgentRef) && size(self.arkAgentRef) > 0)",message="at most one of url/capabilityRef/arkAgentRef may be set"

func (*MCPServerSpec) DeepCopy

func (in *MCPServerSpec) DeepCopy() *MCPServerSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPServerSpec.

func (*MCPServerSpec) DeepCopyInto

func (in *MCPServerSpec) DeepCopyInto(out *MCPServerSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type MemoryBackend

type MemoryBackend string

MemoryBackend defines the memory storage strategy for an agent. +kubebuilder:validation:Enum=in-context;vector-store;redis

const (
	MemoryBackendInContext   MemoryBackend = "in-context"
	MemoryBackendVectorStore MemoryBackend = "vector-store"
	MemoryBackendRedis       MemoryBackend = "redis"
)

type NetworkPolicyMode

type NetworkPolicyMode string

NetworkPolicyMode controls how the operator generates a NetworkPolicy for agent pods. +kubebuilder:validation:Enum=default;strict;disabled

const (
	// NetworkPolicyModeDefault allows DNS, Redis, and open HTTPS egress.
	NetworkPolicyModeDefault NetworkPolicyMode = "default"
	// NetworkPolicyModeStrict allows DNS and Redis egress; HTTPS egress is restricted
	// to the resolved IPs of declared MCP servers only.
	NetworkPolicyModeStrict NetworkPolicyMode = "strict"
	// NetworkPolicyModeDisabled skips NetworkPolicy generation entirely.
	// Use when the cluster CNI (Cilium, Calico) manages network policy externally.
	NetworkPolicyModeDisabled NetworkPolicyMode = "disabled"
)

type NotifyChannelSpec

type NotifyChannelSpec struct {
	// Type determines the channel implementation.
	// +kubebuilder:validation:Enum=webhook;slack
	Type NotifyChannelType `json:"type"`
	// Webhook configures a generic HTTP POST channel. Required when type is "webhook".
	// +optional
	Webhook *WebhookChannelSpec `json:"webhook,omitempty"`
	// Slack configures a Slack incoming webhook channel. Required when type is "slack".
	// +optional
	Slack *SlackChannelSpec `json:"slack,omitempty"`
	// Template is an optional Go template for the message body.
	// Context is NotifyPayload. Overrides the channel's default format.
	// For "webhook": template output is the raw POST body.
	// For "slack": template output replaces the default Block Kit message text.
	// +optional
	Template string `json:"template,omitempty"`
}

NotifyChannelSpec defines a single notification channel.

func (*NotifyChannelSpec) DeepCopy

func (in *NotifyChannelSpec) DeepCopy() *NotifyChannelSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotifyChannelSpec.

func (*NotifyChannelSpec) DeepCopyInto

func (in *NotifyChannelSpec) DeepCopyInto(out *NotifyChannelSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type NotifyChannelType

type NotifyChannelType string

NotifyChannelType determines which channel implementation to use. +kubebuilder:validation:Enum=webhook;slack

const (
	NotifyChannelWebhook NotifyChannelType = "webhook"
	NotifyChannelSlack   NotifyChannelType = "slack"
)

type NotifyDispatchResult

type NotifyDispatchResult struct {
	// ChannelIndex is the zero-based index of the channel in spec.channels.
	ChannelIndex int `json:"channelIndex"`
	// LastFiredAt is when the most recent dispatch attempt was made.
	// +optional
	LastFiredAt *metav1.Time `json:"lastFiredAt,omitempty"`
	// LastEvent is the event type that triggered the most recent dispatch.
	// +optional
	LastEvent NotifyEvent `json:"lastEvent,omitempty"`
	// Succeeded is false when all retry attempts failed.
	Succeeded bool `json:"succeeded"`
	// Error is the last error message when Succeeded is false.
	// +optional
	Error string `json:"error,omitempty"`
}

NotifyDispatchResult records the most recent dispatch attempt for one channel.

func (*NotifyDispatchResult) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotifyDispatchResult.

func (*NotifyDispatchResult) DeepCopyInto

func (in *NotifyDispatchResult) DeepCopyInto(out *NotifyDispatchResult)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type NotifyEvent

type NotifyEvent string

NotifyEvent is the type of event that triggers a notification. +kubebuilder:validation:Enum=TeamSucceeded;TeamFailed;TeamTimedOut;BudgetWarning;BudgetExceeded;DailyLimitReached;AgentDegraded

const (
	NotifyOnTeamSucceeded     NotifyEvent = "TeamSucceeded"
	NotifyOnTeamFailed        NotifyEvent = "TeamFailed"
	NotifyOnTeamTimedOut      NotifyEvent = "TeamTimedOut"
	NotifyOnBudgetWarning     NotifyEvent = "BudgetWarning"
	NotifyOnBudgetExceeded    NotifyEvent = "BudgetExceeded"
	NotifyOnDailyLimitReached NotifyEvent = "DailyLimitReached"
	NotifyOnAgentDegraded     NotifyEvent = "AgentDegraded"
)

type ProbeType

type ProbeType string

ProbeType defines the kind of liveness check. +kubebuilder:validation:Enum=semantic;ping

const (
	ProbeTypeSemantic ProbeType = "semantic"
	ProbeTypePing     ProbeType = "ping"
)

type PromptFragment

type PromptFragment struct {
	// Name identifies this fragment. Must be unique within the ArkSettings object.
	// Used for override resolution when the same name appears in multiple settings.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`

	// Text is the fragment content. May be multi-line.
	// +kubebuilder:validation:Required
	Text string `json:"text"`

	// Position controls where this fragment is injected relative to the agent's systemPrompt.
	//   prepend — inserted before systemPrompt (persona, context, constraints)
	//   append  — inserted after systemPrompt (output rules, closing instructions)
	// +kubebuilder:validation:Enum=prepend;append
	// +kubebuilder:default=append
	Position string `json:"position,omitempty"`
}

PromptFragment is one composable piece of text injected into the agent system prompt. Fragments from multiple ArkSettings objects are composed using the settingsRefs list on ArkAgent or ArkTeamRole. Within a single ArkSettings, fragments are applied in list order. When the same fragment name appears in multiple referenced settings, the last occurrence wins.

func (*PromptFragment) DeepCopy

func (in *PromptFragment) DeepCopy() *PromptFragment

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptFragment.

func (*PromptFragment) DeepCopyInto

func (in *PromptFragment) DeepCopyInto(out *PromptFragment)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type PromptFragments

type PromptFragments struct {
	// Persona is a persona/role description prepended to the system prompt.
	// Deprecated: define a PromptFragment with position=prepend instead.
	Persona string `json:"persona,omitempty"`
	// OutputRules defines output format constraints appended to the system prompt.
	// Deprecated: define a PromptFragment with position=append instead.
	OutputRules string `json:"outputRules,omitempty"`
}

PromptFragments holds reusable prompt components. Deprecated: use Fragments instead. Retained for backward compatibility.

func (*PromptFragments) DeepCopy

func (in *PromptFragments) DeepCopy() *PromptFragments

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptFragments.

func (*PromptFragments) DeepCopyInto

func (in *PromptFragments) DeepCopyInto(out *PromptFragments)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type RedisMemoryConfig

type RedisMemoryConfig struct {
	// SecretRef names a Secret whose REDIS_URL key is injected into agent pods.
	SecretRef LocalObjectReference `json:"secretRef"`

	// TTLSeconds is how long memory entries are retained. 0 means no expiry.
	// +kubebuilder:default=3600
	TTLSeconds int `json:"ttlSeconds,omitempty"`

	// MaxEntries caps the number of stored entries per agent instance. 0 means unlimited.
	MaxEntries int `json:"maxEntries,omitempty"`
}

RedisMemoryConfig configures the Redis memory backend.

func (*RedisMemoryConfig) DeepCopy

func (in *RedisMemoryConfig) DeepCopy() *RedisMemoryConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisMemoryConfig.

func (*RedisMemoryConfig) DeepCopyInto

func (in *RedisMemoryConfig) DeepCopyInto(out *RedisMemoryConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type RegistryLookupSpec

type RegistryLookupSpec struct {
	// Capability is the exact capability ID to match.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Capability string `json:"capability"`
	// Tags narrows candidates to agents that declare ALL listed tags.
	// +optional
	Tags []string `json:"tags,omitempty"`
	// Strategy controls which agent is selected when multiple match.
	// +kubebuilder:default=least-busy
	Strategy RegistryLookupStrategy `json:"strategy,omitempty"`
	// RegistryRef names the ArkRegistry to query. Defaults to first registry in namespace.
	// +optional
	RegistryRef *LocalObjectReference `json:"registryRef,omitempty"`
	// Fallback is the role/agent name to use when no agent matches.
	// If unset and no match, the step fails with RegistryLookupFailed.
	// +optional
	Fallback string `json:"fallback,omitempty"`
}

RegistryLookupSpec configures runtime agent resolution via ArkRegistry.

func (*RegistryLookupSpec) DeepCopy

func (in *RegistryLookupSpec) DeepCopy() *RegistryLookupSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RegistryLookupSpec.

func (*RegistryLookupSpec) DeepCopyInto

func (in *RegistryLookupSpec) DeepCopyInto(out *RegistryLookupSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type RegistryLookupStrategy

type RegistryLookupStrategy string

RegistryLookupStrategy controls which agent wins when multiple match. +kubebuilder:validation:Enum=least-busy;round-robin;random

const (
	RegistryLookupStrategyLeastBusy  RegistryLookupStrategy = "least-busy"
	RegistryLookupStrategyRoundRobin RegistryLookupStrategy = "round-robin"
	RegistryLookupStrategyRandom     RegistryLookupStrategy = "random"
)

type RegistryScope

type RegistryScope string

RegistryScope controls which ArkAgents are indexed by an ArkRegistry. +kubebuilder:validation:Enum=namespace-scoped;cluster-wide

const (
	// RegistryScopeNamespace indexes only ArkAgents in the same namespace (default).
	RegistryScopeNamespace RegistryScope = "namespace-scoped"
	// RegistryScopeCluster indexes all ArkAgents cluster-wide. Requires a ClusterRole
	// that grants cross-namespace ArkAgent reads.
	RegistryScopeCluster RegistryScope = "cluster-wide"
)

type SlackChannelSpec

type SlackChannelSpec struct {
	// WebhookURLFrom reads the Slack incoming webhook URL from a Secret key.
	WebhookURLFrom corev1.SecretKeySelector `json:"webhookURLFrom"`
}

SlackChannelSpec configures a Slack incoming webhook notification channel.

func (*SlackChannelSpec) DeepCopy

func (in *SlackChannelSpec) DeepCopy() *SlackChannelSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SlackChannelSpec.

func (*SlackChannelSpec) DeepCopyInto

func (in *SlackChannelSpec) DeepCopyInto(out *SlackChannelSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type StepValidation

type StepValidation struct {
	// Contains is a RE2 regular expression that must match somewhere in the step output.
	// Avoid anchoring on multi-byte characters (e.g. emoji) — use substring match instead.
	// +optional
	Contains string `json:"contains,omitempty"`

	// Schema is a JSON Schema string. The step output must be valid JSON that satisfies
	// the schema's required fields and top-level property type constraints.
	// +optional
	Schema string `json:"schema,omitempty"`

	// Semantic is a natural-language validator prompt sent to an LLM.
	// The LLM must respond with "PASS" (case-insensitive) for validation to pass.
	// Use {{ .output }} in the prompt to embed the step output.
	// +optional
	Semantic string `json:"semantic,omitempty"`

	// SemanticModel overrides the LLM model used for semantic validation.
	// Defaults to the step's ArkAgent model when empty.
	// Recommended: use a stronger model than the step agent to avoid grading its own output.
	// +optional
	SemanticModel string `json:"semanticModel,omitempty"`

	// OnFailure controls what happens when validation fails.
	// "fail" (default) marks the step Failed immediately.
	// "retry" resets the step to Pending for re-execution.
	// +kubebuilder:default=fail
	// +kubebuilder:validation:Enum=fail;retry
	// +optional
	OnFailure string `json:"onFailure,omitempty"`

	// MaxRetries caps validation-level retries when OnFailure is "retry".
	// Independent of queue-level task retries.
	// +kubebuilder:default=2
	// +kubebuilder:validation:Minimum=0
	// +kubebuilder:validation:Maximum=10
	// +optional
	MaxRetries int `json:"maxRetries,omitempty"`

	// RejectPatterns is a list of RE2 regular expressions that act as a security gate
	// against prompt injection. A match against any pattern causes the step to fail
	// immediately with reason OutputRejected, regardless of other validation settings.
	// Evaluated before Contains, Schema, and Semantic checks.
	// Example: ["(?i)ignore.*previous.*instructions", "(?i)act as"]
	// +optional
	RejectPatterns []string `json:"rejectPatterns,omitempty"`
}

StepValidation configures output validation for a pipeline step. At least one of Contains, Schema, or Semantic must be set. When multiple modes are configured all must pass; evaluation order is Contains → Schema → Semantic (cheapest first).

func (*StepValidation) DeepCopy

func (in *StepValidation) DeepCopy() *StepValidation

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StepValidation.

func (*StepValidation) DeepCopyInto

func (in *StepValidation) DeepCopyInto(out *StepValidation)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type SystemPromptSource

type SystemPromptSource struct {
	// ConfigMapKeyRef selects a key of a ConfigMap in the same namespace.
	// +optional
	ConfigMapKeyRef *corev1.ConfigMapKeySelector `json:"configMapKeyRef,omitempty"`
	// SecretKeyRef selects a key of a Secret in the same namespace.
	// Use this when the prompt contains sensitive instructions.
	// +optional
	SecretKeyRef *corev1.SecretKeySelector `json:"secretKeyRef,omitempty"`
}

SystemPromptSource selects a system prompt from a ConfigMap or Secret key. Exactly one of ConfigMapKeyRef and SecretKeyRef must be non-nil.

func (*SystemPromptSource) DeepCopy

func (in *SystemPromptSource) DeepCopy() *SystemPromptSource

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SystemPromptSource.

func (*SystemPromptSource) DeepCopyInto

func (in *SystemPromptSource) DeepCopyInto(out *SystemPromptSource)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type TeamOutputSource

type TeamOutputSource struct {
	// Name is the ArkTeam to watch.
	// +kubebuilder:validation:Required
	Name string `json:"name"`

	// OnPhase is the team phase that fires the trigger. Defaults to Succeeded.
	// +kubebuilder:default=Succeeded
	OnPhase ArkTeamPhase `json:"onPhase,omitempty"`
}

TeamOutputSource references an ArkTeam whose pipeline completion fires the trigger.

func (*TeamOutputSource) DeepCopy

func (in *TeamOutputSource) DeepCopy() *TeamOutputSource

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamOutputSource.

func (*TeamOutputSource) DeepCopyInto

func (in *TeamOutputSource) DeepCopyInto(out *TeamOutputSource)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type TokenUsage

type TokenUsage struct {
	// InputTokens is the total number of prompt/input tokens sent to the LLM.
	InputTokens int64 `json:"inputTokens"`
	// OutputTokens is the total number of completion/output tokens generated by the LLM.
	OutputTokens int64 `json:"outputTokens"`
	// TotalTokens is InputTokens + OutputTokens, provided for convenient display.
	TotalTokens int64 `json:"totalTokens"`
}

TokenUsage records the number of tokens consumed by a single step or the whole pipeline.

func (*TokenUsage) DeepCopy

func (in *TokenUsage) DeepCopy() *TokenUsage

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TokenUsage.

func (*TokenUsage) DeepCopyInto

func (in *TokenUsage) DeepCopyInto(out *TokenUsage)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type TriggerSourceType

type TriggerSourceType string

TriggerSourceType identifies what fires the trigger. +kubebuilder:validation:Enum=cron;webhook;team-output

const (
	// TriggerSourceCron fires on a cron schedule.
	TriggerSourceCron TriggerSourceType = "cron"
	// TriggerSourceWebhook fires when an HTTP POST is received at the trigger's webhook URL.
	TriggerSourceWebhook TriggerSourceType = "webhook"
	// TriggerSourceTeamOutput fires when a named ArkTeam pipeline reaches a given phase.
	TriggerSourceTeamOutput TriggerSourceType = "team-output"
)

type VectorStoreMemoryConfig

type VectorStoreMemoryConfig struct {
	// Provider is the vector database to use.
	Provider VectorStoreProvider `json:"provider"`

	// Endpoint is the base URL of the vector database (e.g. "http://qdrant:6333").
	// +kubebuilder:validation:Required
	Endpoint string `json:"endpoint"`

	// Collection is the collection/index name to store memories in.
	// +kubebuilder:default=agent-memories
	Collection string `json:"collection,omitempty"`

	// SecretRef optionally names a Secret whose VECTOR_STORE_API_KEY is injected into agent pods.
	SecretRef *LocalObjectReference `json:"secretRef,omitempty"`

	// TTLSeconds is how long memory entries are retained. 0 means no expiry.
	TTLSeconds int `json:"ttlSeconds,omitempty"`
}

VectorStoreMemoryConfig configures the vector-store memory backend.

func (*VectorStoreMemoryConfig) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VectorStoreMemoryConfig.

func (*VectorStoreMemoryConfig) DeepCopyInto

func (in *VectorStoreMemoryConfig) DeepCopyInto(out *VectorStoreMemoryConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type VectorStoreProvider

type VectorStoreProvider string

VectorStoreProvider names a supported vector database. +kubebuilder:validation:Enum=qdrant;pinecone;weaviate

const (
	VectorStoreProviderQdrant   VectorStoreProvider = "qdrant"
	VectorStoreProviderPinecone VectorStoreProvider = "pinecone"
	VectorStoreProviderWeaviate VectorStoreProvider = "weaviate"
)

type WebhookChannelSpec

type WebhookChannelSpec struct {
	// URL is the webhook endpoint as a literal string.
	// +optional
	URL string `json:"url,omitempty"`
	// URLFrom reads the URL from a Secret key. Takes precedence over URL.
	// +optional
	URLFrom *corev1.SecretKeySelector `json:"urlFrom,omitempty"`
	// Method is the HTTP method. Defaults to POST.
	// +kubebuilder:default=POST
	// +kubebuilder:validation:Enum=GET;POST;PUT;PATCH
	Method string `json:"method,omitempty"`
	// Headers are additional HTTP headers included in every request.
	// +optional
	Headers []WebhookHeader `json:"headers,omitempty"`
}

WebhookChannelSpec configures a generic HTTP POST notification channel.

func (*WebhookChannelSpec) DeepCopy

func (in *WebhookChannelSpec) DeepCopy() *WebhookChannelSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookChannelSpec.

func (*WebhookChannelSpec) DeepCopyInto

func (in *WebhookChannelSpec) DeepCopyInto(out *WebhookChannelSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type WebhookHeader

type WebhookHeader struct {
	// Name is the HTTP header name.
	Name string `json:"name"`
	// Value is the literal header value.
	// +optional
	Value string `json:"value,omitempty"`
	// ValueFrom reads the header value from a Secret key.
	// +optional
	ValueFrom *corev1.SecretKeySelector `json:"valueFrom,omitempty"`
}

WebhookHeader defines a single HTTP header added to outbound webhook requests.

func (*WebhookHeader) DeepCopy

func (in *WebhookHeader) DeepCopy() *WebhookHeader

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookHeader.

func (*WebhookHeader) DeepCopyInto

func (in *WebhookHeader) DeepCopyInto(out *WebhookHeader)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type WebhookToolSpec

type WebhookToolSpec struct {
	// Name is the tool identifier exposed to the LLM. Must be unique within the deployment.
	// +kubebuilder:validation:Required
	// +kubebuilder:validation:MinLength=1
	Name string `json:"name"`
	// Description explains the tool's purpose to the LLM.
	Description string `json:"description,omitempty"`
	// URL is the HTTP endpoint the agent calls when the LLM invokes this tool.
	// +kubebuilder:validation:Required
	URL string `json:"url"`
	// Method is the HTTP method used when calling the endpoint.
	// +kubebuilder:default=POST
	// +kubebuilder:validation:Enum=GET;POST;PUT;PATCH
	Method string `json:"method,omitempty"`
	// InputSchema is a JSON Schema object (as a raw JSON string) describing the tool's
	// input parameters. The LLM uses this to construct valid inputs.
	InputSchema string `json:"inputSchema,omitempty"`
}

WebhookToolSpec defines an inline HTTP tool available to agent pods without a full MCP server. The agent runtime calls the URL directly when the LLM invokes the tool.

func (*WebhookToolSpec) DeepCopy

func (in *WebhookToolSpec) DeepCopy() *WebhookToolSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookToolSpec.

func (*WebhookToolSpec) DeepCopyInto

func (in *WebhookToolSpec) DeepCopyInto(out *WebhookToolSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

Jump to

Keyboard shortcuts

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