Documentation
¶
Overview ¶
Package v1alpha1 contains API Schema definitions for the agentorca v1alpha1 API group. +kubebuilder:object:generate=true +groupName=agentorca.agentorca.io
Index ¶
- Constants
- Variables
- func LoopBody(steps []WorkflowStep, gate *WorkflowStep) map[string]bool
- type APIKeyAuth
- type AWSAuthSpec
- type AdaptivePolicy
- type Agent
- type AgentDeployment
- type AgentDeploymentList
- type AgentDeploymentPhase
- type AgentDeploymentSpec
- type AgentDeploymentStatus
- type AgentList
- type AgentMemoryConfig
- type AgentRun
- type AgentRunList
- type AgentRunPhase
- type AgentRunRestartPolicy
- type AgentRunSafeguards
- type AgentRunSpec
- type AgentRunStatus
- type AgentRuntime
- type AgentSpec
- type AgentStatus
- type AgentWorkflow
- type AgentWorkflowList
- type AgentWorkflowPhase
- type AgentWorkflowSpec
- type AgentWorkflowStatus
- type ApprovalStep
- type AuthHeader
- type AzureAuthSpec
- type BudgetCap
- type CallbackConfig
- type Checkpoint
- type CheckpointMetadata
- type CloudAuthSpec
- type ContainerStep
- type ConversationMessage
- type DeploymentRestartPolicy
- type EgressConfig
- type EgressResult
- type EgressRule
- type EgressSinkType
- type EmbeddingConfig
- type EnvVar
- type EnvVarSource
- type FederatedAuthConfig
- type FederatedClaimMappings
- type FilesystemAccessMode
- type FilesystemAccessSpec
- type FormatValidation
- type GCPAuthSpec
- type GuardrailFilter
- type GuardrailPolicy
- type GuardrailPolicyList
- type GuardrailPolicySpec
- type GuardrailPolicyStatus
- type HindsightMemoryConfig
- type IngestionBreakerState
- type IngestionConfig
- type InputSourceConfig
- type InputSourceType
- type IssuedAuthConfig
- type ItemFilterConfig
- type KeywordConfig
- type KnowledgeBase
- type KnowledgeBaseList
- type KnowledgeBaseRef
- type KnowledgeBaseSpec
- type KnowledgeBaseStatus
- type LocalObjectRef
- type LoopDetectedInfo
- type MCPAuthConfig
- type MCPConfig
- type MCPIngestionSource
- type MCPOAuthConfig
- type MCPServer
- type MCPServerList
- type MCPServerSpec
- type MCPServerStatus
- type MCPServerTool
- type MCPToolCall
- type MetaRouterConfig
- type ModelConstraints
- type ModelProvider
- type ModelProviderList
- type ModelProviderSpec
- type ModelProviderStatus
- type ModelSelector
- type ModelSelectorList
- type ModelSelectorSpec
- type ModelSelectorStatus
- type NetworkIsolationSpec
- type PodSecurityOverride
- type ProviderWeight
- type RegexPattern
- type ResourceRequirements
- type RoutingDecision
- type RunBudget
- type RunBudgetAction
- type RunBudgetState
- type RunBudgetStatus
- type S3IngestionSource
- type SandboxAccess
- type SandboxApproval
- type SandboxAutoApproveRule
- type SandboxClass
- type SandboxClassList
- type SandboxClassSpec
- type SandboxEgressPreset
- type SandboxEgressRule
- type SandboxEnforcement
- type SandboxFilesystem
- type SandboxGitHub
- type SandboxProvider
- type SandboxSpec
- type SandboxTools
- type SecretKeyRef
- type SecretMount
- type StepEnvVar
- type StepProposal
- type TenantConfig
- type TenantConfigList
- type TenantConfigSpec
- type TenantConfigStatus
- type TenantRateLimit
- type Tool
- type ToolApprovalPolicy
- type ToolApprovalRequirement
- type ToolExecutionMode
- type ToolList
- type ToolSchema
- type ToolSideEffect
- type ToolSpec
- type ToolStatus
- type ToolType
- type VectorStoreConfig
- type WebhookNotifyConfig
- type WorkflowBudgetCap
- type WorkflowFromTemplate
- type WorkflowLoop
- type WorkflowMode
- type WorkflowParameter
- type WorkflowSandboxPhase
- type WorkflowSandboxRef
- type WorkflowSandboxSpec
- type WorkflowSandboxStatus
- type WorkflowStep
- type WorkflowStepPhase
- type WorkflowStepSandbox
- type WorkflowStepStatus
- type WorkflowStepType
- type WorkflowTemplateRevision
Constants ¶
const ( DefaultLoopIterations = 3 MaxLoopIterations = 10 )
Loop pass limits.
const ( // MCPServerDiscoverabilityEnabled auto-discovers all tools at runtime via // tools/list (the default). spec.tools is optional. MCPServerDiscoverabilityEnabled = "enabled" // MCPServerDiscoverabilityDisabled requires tools to be explicitly declared // in spec.tools. MCPServerDiscoverabilityDisabled = "disabled" )
Discoverability modes for an MCPServer's tools.
const ConditionToolApprovalPending = "ToolApprovalPending"
ConditionToolApprovalPending is True on an AgentRun while a tool call waits for an approver (Tool.spec.sideEffect with GuardrailPolicy.spec.toolApproval).
const RetryStepAnnotation = "agentorca.io/retry-step"
RetryStepAnnotation asks the operator to run failed steps of a workflow again: a comma separated list of step names. The operator removes it once it has acted.
Variables ¶
var ( // GroupVersion is group version used to register these objects. GroupVersion = schema.GroupVersion{Group: "agentorca.agentorca.io", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme. SchemeBuilder = &schemeBuilder{} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
Functions ¶
func LoopBody ¶ added in v0.9.0
func LoopBody(steps []WorkflowStep, gate *WorkflowStep) map[string]bool
LoopBody returns the names of the steps a loop on gate re-runs: From, the gate and every step that is both downstream of From and upstream of the gate. It is nil when the step has no loop or From is not the gate or one of its ancestors.
Types ¶
type APIKeyAuth ¶
type APIKeyAuth struct {
// SecretKeyRef references the Secret containing the API key.
SecretKeyRef SecretKeyRef `json:"secretKeyRef"`
// HeaderName is the HTTP header name. Defaults to "X-API-Key".
// +kubebuilder:default="X-API-Key"
// +optional
HeaderName string `json:"headerName,omitempty"`
}
APIKeyAuth configures API key authentication via a custom header.
func (*APIKeyAuth) DeepCopy ¶
func (in *APIKeyAuth) DeepCopy() *APIKeyAuth
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIKeyAuth.
func (*APIKeyAuth) DeepCopyInto ¶
func (in *APIKeyAuth) DeepCopyInto(out *APIKeyAuth)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AWSAuthSpec ¶
type AWSAuthSpec struct {
// RoleARN is the AWS IAM Role ARN to assume.
// Example: "arn:aws:iam::123456789012:role/my-agent-role"
RoleARN string `json:"roleArn"`
}
AWSAuthSpec configures EKS IRSA.
func (*AWSAuthSpec) DeepCopy ¶
func (in *AWSAuthSpec) DeepCopy() *AWSAuthSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSAuthSpec.
func (*AWSAuthSpec) DeepCopyInto ¶
func (in *AWSAuthSpec) DeepCopyInto(out *AWSAuthSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AdaptivePolicy ¶
type AdaptivePolicy struct {
// MaxDynamicSteps caps the total number of dynamically-added steps.
// +kubebuilder:validation:Minimum=1
MaxDynamicSteps int `json:"maxDynamicSteps"`
// AllowedAgentRefs restricts which Agent CRDs can be proposed.
// If empty, any agent in the namespace may be proposed.
// +optional
AllowedAgentRefs []string `json:"allowedAgentRefs,omitempty"`
// AllowLoops permits re-running a step with refined input.
// +optional
AllowLoops bool `json:"allowLoops,omitempty"`
// MaxLoopIterations caps loop retries per step. Defaults to 3.
// +kubebuilder:default=3
// +optional
MaxLoopIterations int `json:"maxLoopIterations,omitempty"`
// RequireApprovalForUnlisted pauses the workflow and requests human approval
// when an agent proposes a step using an agent not in AllowedAgentRefs.
// If false, such proposals are auto-rejected.
// +optional
RequireApprovalForUnlisted bool `json:"requireApprovalForUnlisted,omitempty"`
}
AdaptivePolicy controls dynamic step proposals from agents within the workflow.
func (*AdaptivePolicy) DeepCopy ¶
func (in *AdaptivePolicy) DeepCopy() *AdaptivePolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdaptivePolicy.
func (*AdaptivePolicy) DeepCopyInto ¶
func (in *AdaptivePolicy) DeepCopyInto(out *AdaptivePolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Agent ¶
type Agent struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec AgentSpec `json:"spec,omitempty"`
Status AgentStatus `json:"status,omitempty"`
}
Agent defines a reusable agent configuration that can be instantiated as AgentRuns.
func (*Agent) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Agent.
func (*Agent) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*Agent) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AgentDeployment ¶
type AgentDeployment struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec AgentDeploymentSpec `json:"spec,omitempty"`
Status AgentDeploymentStatus `json:"status,omitempty"`
}
AgentDeployment manages a long-running agent that processes input continuously. Unlike AgentRun (one-time execution), AgentDeployment restarts pods on failure and supports multiple input sources (chat API, queues, pubsub, self-managed loops).
func (*AgentDeployment) DeepCopy ¶
func (in *AgentDeployment) DeepCopy() *AgentDeployment
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentDeployment.
func (*AgentDeployment) DeepCopyInto ¶
func (in *AgentDeployment) DeepCopyInto(out *AgentDeployment)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AgentDeployment) DeepCopyObject ¶
func (in *AgentDeployment) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AgentDeploymentList ¶
type AgentDeploymentList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []AgentDeployment `json:"items"`
}
AgentDeploymentList contains a list of AgentDeployment.
func (*AgentDeploymentList) DeepCopy ¶
func (in *AgentDeploymentList) DeepCopy() *AgentDeploymentList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentDeploymentList.
func (*AgentDeploymentList) DeepCopyInto ¶
func (in *AgentDeploymentList) DeepCopyInto(out *AgentDeploymentList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AgentDeploymentList) DeepCopyObject ¶
func (in *AgentDeploymentList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AgentDeploymentPhase ¶
type AgentDeploymentPhase string
AgentDeploymentPhase describes the lifecycle phase of an AgentDeployment. +kubebuilder:validation:Enum=Creating;Running;Failed;Paused
const ( AgentDeploymentPhaseCreating AgentDeploymentPhase = "Creating" AgentDeploymentPhaseRunning AgentDeploymentPhase = "Running" AgentDeploymentPhaseFailed AgentDeploymentPhase = "Failed" AgentDeploymentPhasePaused AgentDeploymentPhase = "Paused" )
type AgentDeploymentSpec ¶
type AgentDeploymentSpec struct {
// AgentRef names the Agent template to run continuously.
// +kubebuilder:validation:MinLength=1
AgentRef string `json:"agentRef"`
// InputSource configures where this deployment receives input from.
// +optional
InputSource *InputSourceConfig `json:"inputSource,omitempty"`
// RestartPolicy controls failure recovery and backoff behavior.
// +optional
RestartPolicy *DeploymentRestartPolicy `json:"restartPolicy,omitempty"`
// ToolExecutionTimeoutSec is the per-tool-call ceiling (seconds) applied to every
// AgentRun spawned from this deployment and to warm pods claimed by it. It feeds
// RouterSafeguards.ToolExecutionTimeoutSec. Defaults to the model-router's 60s when
// 0. Set high for long-holding tooling that exceeds the default (e.g. Sliver
// interactive sessions, shells, pivot relays): 1800–3600. A 0 value preserves
// today's 60s behaviour.
// +kubebuilder:default=0
// +optional
ToolExecutionTimeoutSec int `json:"toolExecutionTimeoutSec,omitempty"`
// MaxToolResultTokens overrides the per-tool-result token cap for this deployment.
// 0 (default) = the operator computes a context-window-aware cap (~10% of the
// model's ContextWindow, floored at 8000 and capped at 64000 tokens, and never more
// than half of MaxRequestTokens so a single result can't by itself blow the
// request budget) so large MCP/file/commit-patch results are not silently
// truncated. Eyeballed against the loudest offender: router.go is ~153K chars
// (~38k tokens) on the 1M-context poolside model — the default 64k cap reads it
// in full. Raise further for agents that routinely read very large files, or lower
// for spend-thrifty agents.
// +optional
MaxToolResultTokens int `json:"maxToolResultTokens,omitempty"`
// Safeguards configures behavioral loop guards (MaxRepeatedToolCalls,
// MaxConsecutiveNoopTurns, ToolFrequencyCap, etc.) for runs spawned from this
// deployment. Omit to use the operator's conservative defaults; set any field to 0
// to keep the default for that field. Fields that are left zero (defaulted) only
// trip on genuine stuck loops and do NOT block legitimate repeated tool use
// (MaxRepeatedToolCalls keys on identical tool+args, so reading many distinct
// files — e.g. a PR review — never trips it). Reuses the AgentRunSafeguards shape.
// +optional
Safeguards *AgentRunSafeguards `json:"safeguards,omitempty"`
// Replicas is the desired number of agent pod replicas. Defaults to 1.
// +kubebuilder:default=1
// +optional
Replicas *int32 `json:"replicas,omitempty"`
// CheckpointTTL is the duration to retain conversation checkpoints after completion.
// Defaults to 2592000 (30 days).
// +kubebuilder:default=2592000
// +optional
CheckpointTTL int `json:"checkpointTTL,omitempty"`
// WarmPoolSize is the number of pre-warmed pods to maintain for fast run dispatch.
// Warm pods have the agent and model-router already initialized, eliminating cold-start
// latency (~15s) for chat runs. Set to 0 to disable (use classic per-run pods).
// +kubebuilder:default=1
// +optional
WarmPoolSize int `json:"warmPoolSize,omitempty"`
// MaxRequestsPerPod caps how many requests a warm pod will serve before it is
// recycled (deleted and replaced). 0 (default) means warm pods are REUSED across
// requests — after a run completes the pod is returned to the idle pool instead of
// being killed, and is re-claimed for the next chat run. Age-based recycling is
// disabled by default (see WarmPodMaxAge), so reuse is the normal path.
//
// Set >0 (e.g. 50) to rotate pods after that many served requests, which can be
// useful to shed per-request state or refresh long-running connections.
// +kubebuilder:default=0
// +optional
MaxRequestsPerPod int `json:"maxRequestsPerPod,omitempty"`
// WarmPodMaxAge is the maximum age of a warm pod before it is recycled
// (deleted and replaced). It defaults to 0 (indefinite) when unset: warm pods
// then persist until manually deleted, the agent process exits, config-drift
// recycle fires (see RecycleOnConfigDrift), or the MaxRequestsPerPod cap is hit.
// This is the desired default for chat and long-trajectory workloads, where
// pods must stay alive across runs so an in-progress session is never torn down
// mid-task. When age recycling is disabled a long-lived SA token (the cluster
// maximum) is minted for each pod so it can keep authenticating claim-run
// POSTs for its entire life.
//
// Set this to a positive duration explicitly to OPT IN to age-based recycling,
// e.g. 50m to recycle pods roughly once per LLM token budget window. (controller-gen
// cannot express a duration default here, so 0 is applied in code.)
// +optional
WarmPodMaxAge *metav1.Duration `json:"warmPodMaxAge,omitempty"`
// RecycleOnConfigDrift controls whether warm pods are recycled when the
// router config changes (agent spec, providers/weights, tools, KBs,
// guardrails). Defaults to true: a config change rolls the warm pool so
// pods pick up the new config immediately.
//
// Set to false to keep warm pods alive across config changes. Pods continue
// serving from the router-config snapshot they were created with and only
// refresh on their next natural recycle (age cap or process exit). Combining
// "WarmPodMaxAge: 0" with "RecycleOnConfigDrift: false" keeps warm pods
// until they are manually deleted (or the agent process exits).
// +kubebuilder:default=true
// +optional
RecycleOnConfigDrift *bool `json:"recycleOnConfigDrift,omitempty"`
// WarmLocalCache controls the per-warm-pod local disk cache (an emptyDir) that
// supplements the shared Redis state store. The model-router write-throughs each
// checkpoint to the local disk AND to Redis, then reads from the local disk first
// (falling back to Redis on a local miss). Because warm pods are reused across
// chat runs (the same Pod survives multiple claims until recycled), the local
// cache accelerates warm-pod resume (no Redis round-trip to hydrate the prior
// conversation) and lets a warm pod keep serving if Redis is transiently
// unavailable. The local cache is per-Pod only — it is wiped when the warm pod is
// recycled/deleted; Redis remains the durable, cross-pod source of truth.
//
// Note: this is unrelated to the read-only-rootFilesystem emptyDir at /tmp
// (which is scratch space for the restricted pod-security profile); this is a
// separate disk-backed volume used to mirror checkpoints.
//
// Defaults to true when WarmPoolSize > 0 (a warm pool), false otherwise.
// +optional
WarmLocalCache *bool `json:"warmLocalCache,omitempty"`
// WarmLocalCacheSizeMi is the SizeLimit (in Mi) for each warm pod's local cache
// emptyDir. 0 means unlimited (bounded only by node ephemeral storage).
// Defaults to 256.
// +kubebuilder:default=256
// +optional
WarmLocalCacheSizeMi int `json:"warmLocalCacheSizeMi,omitempty"`
// WebhookNotify configures the optional Slack incoming-webhook integration. When set,
// warm pods mount the referenced Secret's webhook URL as WEBHOOK_URL into the
// model-router sidecar, which exposes the _webhook_notify builtin tool. The webhook
// URL is the credential (no per-user OAuth); it posts to the configured channel.
// +optional
WebhookNotify *WebhookNotifyConfig `json:"webhookNotify,omitempty"`
}
AgentDeploymentSpec defines the desired state of an AgentDeployment.
func (*AgentDeploymentSpec) DeepCopy ¶
func (in *AgentDeploymentSpec) DeepCopy() *AgentDeploymentSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentDeploymentSpec.
func (*AgentDeploymentSpec) DeepCopyInto ¶
func (in *AgentDeploymentSpec) DeepCopyInto(out *AgentDeploymentSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentDeploymentStatus ¶
type AgentDeploymentStatus struct {
// Phase is the current lifecycle phase of the deployment.
// +optional
Phase AgentDeploymentPhase `json:"phase,omitempty"`
// ReadyReplicas is the number of ready agent pods.
// +optional
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
// AvailableReplicas is the number of available agent pods.
// +optional
AvailableReplicas int32 `json:"availableReplicas,omitempty"`
// LastUpdateTime is when the deployment was last reconciled.
// +optional
LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"`
// LastFailureTime is when the last pod failure occurred.
// +optional
LastFailureTime *metav1.Time `json:"lastFailureTime,omitempty"`
// ConsecutiveFailures is the count of consecutive pod failures.
// Resets to 0 when a pod succeeds.
// +optional
ConsecutiveFailures int `json:"consecutiveFailures,omitempty"`
// PodNames lists the names of managed agent pods.
// +optional
PodNames []string `json:"podNames,omitempty"`
// WarmPoolReady is the number of idle warm pods ready to accept runs.
// +optional
WarmPoolReady int `json:"warmPoolReady,omitempty"`
// WarmPoolLastRecycleReason is the reason the most recent warm pod was
// recycled (token-age-expired, stale-config, terminal-phase,
// request-cap-<N>), or empty if no warm pod has been recycled yet. Emitted
// as a WarmPodRecycled Kubernetes Event on the deployment as well.
// +optional
WarmPoolLastRecycleReason string `json:"warmPoolLastRecycleReason,omitempty"`
// WarmPoolLastRecycleAt is when the most recent warm pod was recycled.
// +optional
WarmPoolLastRecycleAt *metav1.Time `json:"warmPoolLastRecycleAt,omitempty"`
// Message contains a human-readable status message.
// +optional
Message string `json:"message,omitempty"`
// ContextUsedTokens is the estimated token count of the current conversation context.
// Only populated when running in chat mode.
// +optional
ContextUsedTokens int `json:"contextUsedTokens,omitempty"`
// MaxContextTokens is the maximum context window size for the selected model.
// +optional
MaxContextTokens int `json:"maxContextTokens,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
AgentDeploymentStatus defines the observed state of an AgentDeployment.
func (*AgentDeploymentStatus) DeepCopy ¶
func (in *AgentDeploymentStatus) DeepCopy() *AgentDeploymentStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentDeploymentStatus.
func (*AgentDeploymentStatus) DeepCopyInto ¶
func (in *AgentDeploymentStatus) DeepCopyInto(out *AgentDeploymentStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentList ¶
type AgentList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Agent `json:"items"`
}
AgentList contains a list of Agent.
func (*AgentList) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentList.
func (*AgentList) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AgentList) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AgentMemoryConfig ¶
type AgentMemoryConfig struct {
// CheckpointEvery controls how often (in LLM turns) the model-router writes a checkpoint.
// 1 means every turn. Higher values reduce storage writes but increase recovery loss window.
// +kubebuilder:default=1
// +optional
CheckpointEvery int `json:"checkpointEvery,omitempty"`
// ResumeWindowSeconds is how long to retain state after a failure for pod restart/resume.
// Defaults to 3600 (1 hour).
// +kubebuilder:default=3600
// +optional
ResumeWindowSeconds int `json:"resumeWindowSeconds,omitempty"`
// ArchiveOnCompletion, when true, promotes state to object storage when the run succeeds.
// +kubebuilder:default=false
// +optional
ArchiveOnCompletion bool `json:"archiveOnCompletion,omitempty"`
// EpisodicSummaryEvery used to summarize the conversation every N LLM turns.
//
// Deprecated: ignored. The model-router now summarizes the conversation when
// it reaches the compaction threshold (80% of the window by default).
// +optional
EpisodicSummaryEvery int `json:"episodicSummaryEvery,omitempty"`
// SummaryModelSelectorRef names the ModelSelector whose first provider writes
// the conversation summaries made at the compaction threshold. It is used only
// when that provider is also one of the agent's providers (its ModelSelector
// or fallback chain); otherwise, and when unset, the provider serving the
// request writes the summary.
// +optional
SummaryModelSelectorRef string `json:"summaryModelSelectorRef,omitempty"`
// LongTermMemoryRef names a KnowledgeBase (same namespace) used as persistent
// long-term memory. The model-router automatically retrieves semantically relevant
// memories before each turn and exposes a _memory_store tool so the agent can
// explicitly persist facts across sessions.
// If the KnowledgeBase is not Ready, the run proceeds without long-term memory
// and a MemoryUnavailable event is emitted.
// +optional
LongTermMemoryRef string `json:"longTermMemoryRef,omitempty"`
// Hindsight configures the hindsight memory system integration. It is
// opt-in: without this block the agent has no hindsight memory. When
// enabled, the model-router recalls relevant memories before each LLM call
// and retains the conversation after each turn, in one bank per Agent by
// default, shared by its runs and deployments.
// +optional
Hindsight *HindsightMemoryConfig `json:"hindsight,omitempty"`
}
AgentMemoryConfig controls conversation state persistence.
func (*AgentMemoryConfig) DeepCopy ¶
func (in *AgentMemoryConfig) DeepCopy() *AgentMemoryConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentMemoryConfig.
func (*AgentMemoryConfig) DeepCopyInto ¶
func (in *AgentMemoryConfig) DeepCopyInto(out *AgentMemoryConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentRun ¶
type AgentRun struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec AgentRunSpec `json:"spec,omitempty"`
Status AgentRunStatus `json:"status,omitempty"`
}
AgentRun is an instantiation of an Agent executing a specific task.
func (*AgentRun) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentRun.
func (*AgentRun) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AgentRun) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AgentRunList ¶
type AgentRunList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []AgentRun `json:"items"`
}
AgentRunList contains a list of AgentRun.
func (*AgentRunList) DeepCopy ¶
func (in *AgentRunList) DeepCopy() *AgentRunList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentRunList.
func (*AgentRunList) DeepCopyInto ¶
func (in *AgentRunList) DeepCopyInto(out *AgentRunList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AgentRunList) DeepCopyObject ¶
func (in *AgentRunList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AgentRunPhase ¶
type AgentRunPhase string
AgentRunPhase describes the lifecycle phase of an AgentRun. +kubebuilder:validation:Enum=Pending;Running;Succeeded;Failed;HandedOff;WaitingForInput
const ( AgentRunPhasePending AgentRunPhase = "Pending" AgentRunPhaseRunning AgentRunPhase = "Running" AgentRunPhaseSucceeded AgentRunPhase = "Succeeded" AgentRunPhaseFailed AgentRunPhase = "Failed" AgentRunPhaseHandedOff AgentRunPhase = "HandedOff" AgentRunPhaseWaitingForInput AgentRunPhase = "WaitingForInput" )
type AgentRunRestartPolicy ¶
type AgentRunRestartPolicy struct {
// MaxRetries is the number of times to restart a failed pod before marking the run Failed.
// +kubebuilder:default=3
// +optional
MaxRetries int `json:"maxRetries,omitempty"`
}
AgentRunRestartPolicy controls how failures are handled.
func (*AgentRunRestartPolicy) DeepCopy ¶
func (in *AgentRunRestartPolicy) DeepCopy() *AgentRunRestartPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentRunRestartPolicy.
func (*AgentRunRestartPolicy) DeepCopyInto ¶
func (in *AgentRunRestartPolicy) DeepCopyInto(out *AgentRunRestartPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentRunSafeguards ¶
type AgentRunSafeguards struct {
// MaxConsecutiveNoopTurns halts the run if the LLM produces this many consecutive
// turns with no tool calls and fewer than MinSubstantiveTokens output tokens.
// Not applied to chat (http input) runs. Unset uses the default of 15; a
// negative value disables the check.
// +optional
MaxConsecutiveNoopTurns int `json:"maxConsecutiveNoopTurns,omitempty"`
// MinSubstantiveTokens is the minimum number of output tokens required for a turn
// to count as substantive. Only evaluated when MaxConsecutiveNoopTurns > 0.
// +kubebuilder:default=20
// +optional
MinSubstantiveTokens int `json:"minSubstantiveTokens,omitempty"`
// MaxRepeatedToolCalls halts the run if the same tool is called with identical
// arguments this many times within the run. Unset uses the default of 50; a
// negative value disables the check.
// +optional
MaxRepeatedToolCalls int `json:"maxRepeatedToolCalls,omitempty"`
// ToolFrequencyCap halts the run if any single tool is called more than this many
// times in total across the run. Unset (the default) or a negative value
// disables the check.
// +optional
ToolFrequencyCap int `json:"toolFrequencyCap,omitempty"`
// ToolExecutionTimeoutSec is the maximum number of seconds a single tool call may
// take before it is cancelled and a structured error is returned to the LLM.
// This prevents a hanging tool (e.g. blocking I/O, deadlock) from stalling the
// entire run. Defaults to 60. 0 means use the default.
// +kubebuilder:default=60
// +optional
ToolExecutionTimeoutSec int `json:"toolExecutionTimeoutSec,omitempty"`
}
AgentRunSafeguards configures behavioral guardrails that halt a run when the agent appears stuck in a loop or is making no meaningful progress.
func (*AgentRunSafeguards) DeepCopy ¶
func (in *AgentRunSafeguards) DeepCopy() *AgentRunSafeguards
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentRunSafeguards.
func (*AgentRunSafeguards) DeepCopyInto ¶
func (in *AgentRunSafeguards) DeepCopyInto(out *AgentRunSafeguards)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentRunSpec ¶
type AgentRunSpec struct {
// AgentRef names the Agent to run.
// +kubebuilder:validation:MinLength=1
AgentRef string `json:"agentRef"`
// Input is the user task passed to the agent process via the AGENTORC_INPUT env var.
// +kubebuilder:validation:MinLength=1
Input string `json:"input"`
// Timeout is the maximum duration for this run. Defaults to 5 minutes.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Callbacks configures webhooks invoked on run completion.
// +optional
Callbacks *CallbackConfig `json:"callbacks,omitempty"`
// RestartPolicy controls failure recovery behaviour.
// +optional
RestartPolicy *AgentRunRestartPolicy `json:"restartPolicy,omitempty"`
// ParentRunRef is the name of the parent AgentRun when this run was spawned
// by an orchestrator agent via the agent-as-tool pattern.
// Set automatically by the tool executor; do not set manually.
// +optional
ParentRunRef string `json:"parentRunRef,omitempty"`
// PriorRunRef is the name of the previous AgentRun in this chat session.
// When set, the model-router loads that run's accumulated message checkpoint as
// the initial conversation history, enabling multi-turn context across runs.
// Set automatically by the deployment chat API; do not set manually.
// +optional
PriorRunRef string `json:"priorRunRef,omitempty"`
// Safeguards configures behavioral guardrails that halt the run when the agent
// appears stuck in a loop or making no progress.
// +optional
Safeguards *AgentRunSafeguards `json:"safeguards,omitempty"`
// Egress configures durable result delivery to an external message bus
// (Kafka, Pub/Sub, or Redis stream) on terminal phase. When set, the
// controller publishes the final TaskResponse to the configured sink.
// Independent of webhook callbacks — both can be configured simultaneously.
// +optional
Egress *EgressConfig `json:"egress,omitempty"`
// Budget caps the run's model spend. When the cap is reached the run fails or
// pauses for approval, per budget.onExceeded. Without it the run is not capped
// (the ModelSelector's budgetCap only steers routing).
// +optional
Budget *RunBudget `json:"budget,omitempty"`
// WorkflowSandbox runs the agent in an existing workflow sandbox instead of
// creating a sandbox whose main process is the agent. Set only by the
// AgentWorkflow controller and inherited by clarification continuations.
// +optional
WorkflowSandbox *WorkflowSandboxRef `json:"workflowSandbox,omitempty"`
}
AgentRunSpec defines the desired state of an AgentRun.
func (*AgentRunSpec) DeepCopy ¶
func (in *AgentRunSpec) DeepCopy() *AgentRunSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentRunSpec.
func (*AgentRunSpec) DeepCopyInto ¶
func (in *AgentRunSpec) DeepCopyInto(out *AgentRunSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentRunStatus ¶
type AgentRunStatus struct {
// Phase is the current lifecycle phase of this run.
// +optional
Phase AgentRunPhase `json:"phase,omitempty"`
// PodName is the name of the agent pod for this run.
// +optional
PodName string `json:"podName,omitempty"`
// RouterPodName is the name of the model-router pod when split-pod topology is active.
// Empty when using the default combined-pod (sidecar) topology.
// +optional
RouterPodName string `json:"routerPodName,omitempty"`
// SandboxName is the sandbox runtime's name for this run's sandbox when
// spec.runtime.sandbox is set on the Agent. Empty otherwise.
// +optional
SandboxName string `json:"sandboxName,omitempty"`
// SandboxGitTokenExpiry is when the run's current GitHub installation token
// expires (spec.runtime.sandbox.github). The operator mints a new one before
// then.
// +optional
SandboxGitTokenExpiry *metav1.Time `json:"sandboxGitTokenExpiry,omitempty"`
// SandboxDecisionsSeen is the time of the last sandbox network decision
// copied into the run's trace; the next read continues after it.
// +optional
SandboxDecisionsSeen *metav1.MicroTime `json:"sandboxDecisionsSeen,omitempty"`
// StartTime is when the agent pod started.
// +optional
StartTime *metav1.Time `json:"startTime,omitempty"`
// CompletionTime is when the run reached a terminal phase.
// +optional
CompletionTime *metav1.Time `json:"completionTime,omitempty"`
// SpendUSD is the total USD spend for this run so far, updated periodically.
// +optional
SpendUSD string `json:"spendUSD,omitempty"`
// Output is the agent's final output captured from pod stdout.
// Truncated to 10KB; full output is in the checkpoint store.
// +optional
Output string `json:"output,omitempty"`
// RawOutput is the raw pod stdout, useful for debugging.
// Truncated to 4KB.
// +optional
RawOutput string `json:"rawOutput,omitempty"`
// CheckpointRef is the storage key of the latest conversation checkpoint.
// Used by the controller to resume a failed run.
// +optional
CheckpointRef string `json:"checkpointRef,omitempty"`
// RestartCount is the number of times this run's pod has been restarted.
// +optional
RestartCount int `json:"restartCount,omitempty"`
// LastRestartReason describes why the pod was last restarted.
// +optional
LastRestartReason string `json:"lastRestartReason,omitempty"`
// ChildRunRefs lists the names of child AgentRuns spawned by this run.
// +optional
ChildRunRefs []string `json:"childRunRefs,omitempty"`
// HandoffTarget is the Agent name this run handed off to, if Phase is HandedOff.
// +optional
HandoffTarget string `json:"handoffTarget,omitempty"`
// ClarifyQuestion is the question posed to the human when Phase is WaitingForInput.
// +optional
ClarifyQuestion string `json:"clarifyQuestion,omitempty"`
// ClarifyAnswer is the human's response, set via the UI API.
// +optional
ClarifyAnswer string `json:"clarifyAnswer,omitempty"`
// WaitingSince records when the run entered WaitingForInput.
// Used to enforce a waiting timeout separate from the run timeout.
// +optional
WaitingSince *metav1.Time `json:"waitingSince,omitempty"`
// ContinuationRunRef is the name of the follow-up AgentRun created when
// the human answers a clarifying question. The original run stays in
// WaitingForInput (for audit) and the continuation carries the work forward.
// +optional
ContinuationRunRef string `json:"continuationRunRef,omitempty"`
// Budget is the run's standing against spec.budget.
// +optional
Budget *RunBudgetStatus `json:"budget,omitempty"`
// LoopDetected is set when the run was halted by a safeguard trip.
// The run phase will be Failed when this is set.
// +optional
LoopDetected *LoopDetectedInfo `json:"loopDetected,omitempty"`
// FailureReason is a human-readable explanation of why the run failed,
// set by the agent via the _fail built-in tool.
// +optional
FailureReason string `json:"failureReason,omitempty"`
// InputMode mirrors Agent.spec.runtime.inputMode, cached here so the controller
// does not need to re-fetch the Agent in handlePodSuccess.
// +optional
InputMode string `json:"inputMode,omitempty"`
// EpisodicChunks is the number of episodic memory summaries generated during this run.
// +optional
EpisodicChunks int `json:"episodicChunks,omitempty"`
// RoutingDecisions records the model routing decisions made during this run.
// Populated by the controller from the resolved ModelSelector configuration
// and updated by the model-router sidecar at runtime.
// +optional
RoutingDecisions []RoutingDecision `json:"routingDecisions,omitempty"`
// ContextUsedTokens is the estimated token count of the conversation context.
// Updated by the model-router at runtime and reflects the current size of the
// accumulated message history.
// +optional
ContextUsedTokens int `json:"contextUsedTokens,omitempty"`
// MaxContextTokens is the maximum context window size for the selected model.
// Used to calculate how much context is available for the conversation.
// +optional
MaxContextTokens int `json:"maxContextTokens,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
AgentRunStatus defines the observed state of an AgentRun.
func (*AgentRunStatus) DeepCopy ¶
func (in *AgentRunStatus) DeepCopy() *AgentRunStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentRunStatus.
func (*AgentRunStatus) DeepCopyInto ¶
func (in *AgentRunStatus) DeepCopyInto(out *AgentRunStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentRuntime ¶
type AgentRuntime struct {
// OCIRef is the OCI image reference for the agent process.
// Must be signed with Cosign unless imageVerification.skip is set.
// +kubebuilder:validation:MinLength=1
OCIRef string `json:"ociRef"`
// Framework hints to the operator which env var injection tier to use.
// Supported values:
// openai-compatible - inject OPENAI_BASE_URL + OPENAI_API_KEY (default)
// autogen - inject OAI_CONFIG_LIST via init container
// semantic-kernel - inject appsettings via init container
// langgraph - openai-compatible + inject LANGGRAPH_CHECKPOINT_URL
// shim - hosts-file shim for frameworks that hardcode their endpoint
// +kubebuilder:validation:Enum=openai-compatible;autogen;semantic-kernel;langgraph;shim
// +kubebuilder:default=openai-compatible
// +optional
Framework string `json:"framework,omitempty"`
// ShimTarget is the hostname to intercept when Framework is "shim".
// Example: "api.openai.com", "generativelanguage.googleapis.com"
// +optional
ShimTarget string `json:"shimTarget,omitempty"`
// Command overrides the container entrypoint.
// +optional
Command []string `json:"command,omitempty"`
// Args overrides the container command arguments.
// +optional
Args []string `json:"args,omitempty"`
// InputMode controls how the operator delivers the run input to the agent.
// env - inject AGENTORC_INPUT env var (default)
// http - POST the input as JSON to the agent's HTTP endpoint
// +kubebuilder:validation:Enum=env;http
// +optional
InputMode string `json:"inputMode,omitempty"`
// InputPort is the TCP port the agent's HTTP server listens on (http mode only).
// Defaults to 8000.
// +optional
InputPort int `json:"inputPort,omitempty"`
// InputPath is the HTTP path to POST the run input to (http mode only).
// Defaults to /invoke.
// +optional
InputPath string `json:"inputPath,omitempty"`
// SecurityContextOverride opts the agent container (only the "agent" container,
// never the model-router sidecar) out of the default restricted PodSecurityStandard.
//
// Intended ONLY for purpose-built agents that require elevated privileges the
// restricted baseline forbids — e.g. a red-team pwnbox that must bring up a VPN
// tun device (requires NET_ADMIN + /dev/net/tun). When set, the operator mounts
// /dev/net/tun into the agent container and applies the requested posture.
//
// Admission is gated by a validating webhook: the agent's namespace must carry the
// label `agentorca.io/enable-privileged-pods: "true"` AND the Agent must reference a
// GuardrailPolicyRef. These checks fail‑closed.
// +optional
SecurityContextOverride *PodSecurityOverride `json:"securityContextOverride,omitempty"`
// SecretRefs lists Kubernetes Secrets to mount into the agent container as volumes
// (or, if MountPath is empty, inject as env vars). Unlike Tool.spec.secretRefs —
// which target the model-router sidecar / tool pods — these mount directly into the
// agent container. Useful for agent containers that need an on-disk credential the
// agent code reads directly, e.g. an HTB OpenVPN “.ovpn“ config mounted at
// “/etc/htb“. Mounted read-only.
// +optional
SecretRefs []SecretMount `json:"secretRefs,omitempty"`
// Sandbox runs the agent process inside an isolated sandbox runtime instead of
// a plain agent pod. The agent gets a real shell and may exec subprocesses and
// install tools, while the sandbox confines its filesystem (Landlock), syscalls
// (seccomp) and network egress (per-host L7 policy enforced by a supervisor).
//
// Requires spec.networkIsolation.splitPod=true: the model-router keeps running in
// its own pod and stays the only LLM egress path. Admission is gated by the
// namespace label `agentorca.io/enable-sandboxes: "true"` and a GuardrailPolicyRef.
// Nil (the default) keeps today's pod topology unchanged.
// +optional
Sandbox *SandboxSpec `json:"sandbox,omitempty"`
// LocalTools lets the agent process run tools itself. A function tool the
// agent declares in its chat request that the model-router does not provide
// (e.g. a shell inside the sandbox) is returned to the agent with
// finish_reason "tool_calls"; the agent runs it and sends the result as a
// "tool" message on its next request. The router still runs its own tools,
// and applies safeguards, guardrails and tracing to both kinds. Agent tools
// may not reuse a router tool or built-in name.
// +optional
LocalTools bool `json:"localTools,omitempty"`
}
AgentRuntime describes the agent process container image and framework.
func (*AgentRuntime) DeepCopy ¶
func (in *AgentRuntime) DeepCopy() *AgentRuntime
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentRuntime.
func (*AgentRuntime) DeepCopyInto ¶
func (in *AgentRuntime) DeepCopyInto(out *AgentRuntime)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentSpec ¶
type AgentSpec struct {
// ModelSelectorRef names the ModelSelector that routes LLM calls for this agent.
// +kubebuilder:validation:MinLength=1
ModelSelectorRef string `json:"modelSelectorRef"`
// Tools is the list of Tool names (in the same namespace) available to this agent.
// The model-router injects these as OpenAI function definitions for every run.
// +optional
Tools []string `json:"tools,omitempty"`
// SystemPrompt is the system-level instruction prepended to every conversation.
// Leave empty to use the agent's own system prompt.
// +optional
SystemPrompt string `json:"systemPrompt,omitempty"`
// Runtime defines the OCI image used to run the agent process.
// +kubebuilder:validation:Required
Runtime AgentRuntime `json:"runtime"`
// Memory configures conversation state persistence and failure recovery.
// +optional
Memory *AgentMemoryConfig `json:"memory,omitempty"`
// Resources sets default CPU/memory limits for AgentRun pods.
// +optional
Resources *ResourceRequirements `json:"resources,omitempty"`
// ServiceAccountRef references a pre-existing ServiceAccount to use for agent pods.
// If unset, the operator creates and manages "agentorca-agent-<name>".
// Use this when the SA already has cloud provider annotations (IRSA, Workload Identity).
// +optional
ServiceAccountRef *LocalObjectRef `json:"serviceAccountRef,omitempty"`
// CloudAuth declares cloud-provider identity bindings.
// The operator applies the appropriate SA annotations automatically.
// +optional
CloudAuth *CloudAuthSpec `json:"cloudAuth,omitempty"`
// KnowledgeBases lists KnowledgeBase names (same namespace) available to this agent.
// When non-empty, the model-router injects _rag_search and _rag_ingest as built-in tools.
// For finer control (e.g. confirmRequired), use KnowledgeBaseRefs instead.
// +optional
KnowledgeBases []string `json:"knowledgeBases,omitempty"`
// KnowledgeBaseRefs is the structured alternative to KnowledgeBases.
// When set, KnowledgeBases is ignored. Each ref supports per-KB options
// such as requiring user confirmation before ingesting fixes.
// +optional
KnowledgeBaseRefs []KnowledgeBaseRef `json:"knowledgeBaseRefs,omitempty"`
// GuardrailPolicyRef names the GuardrailPolicy (same namespace) applied to this agent's
// inputs and outputs. The model-router enforces the policy's filters on every LLM call.
// +optional
GuardrailPolicyRef string `json:"guardrailPolicyRef,omitempty"`
// NetworkIsolation configures network-level isolation between the agent and model-router.
// When SplitPod is enabled, the agent and model-router run in separate Kubernetes Pods
// with distinct NetworkPolicies, providing network-level egress isolation that the
// default single-pod sidecar topology cannot enforce (containers in a Pod share a
// network namespace, so NetworkPolicy cannot differentiate them).
// +optional
NetworkIsolation *NetworkIsolationSpec `json:"networkIsolation,omitempty"`
// DisableClarify prevents the auto-trigger clarify safety net from activating.
// Use this for autonomous agents that should not block waiting for human input.
// When true, the _clarify tool is still available but auto-detection is disabled.
// +kubebuilder:default=false
// +optional
DisableClarify bool `json:"disableClarify,omitempty"`
// Filesystem configures access to the user's local workspace via the ACP
// bridge's fs/* relay (issue #34): when set, the agent gets built-in tools
// fs_read_text_file / fs_write_text_file whose calls are forwarded through
// the `aoctl acp serve` bridge to the ACP client (e.g. Zed), which reads
// and edits the user's real files. The bridge is the enforcement point for
// workspace-root confinement and (optionally) write approval; this field
// only decides whether and in which mode the tools exist. Nil disables
// filesystem access entirely.
// +optional
Filesystem *FilesystemAccessSpec `json:"filesystem,omitempty"`
}
AgentSpec defines the desired state of an Agent.
func (*AgentSpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentSpec.
func (*AgentSpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentStatus ¶
type AgentStatus struct {
// ServiceAccountName is the name of the stable SA managed by the operator.
// +optional
ServiceAccountName string `json:"serviceAccountName,omitempty"`
// CloudProviderDetected is the cloud provider the operator detected at startup.
// +optional
CloudProviderDetected string `json:"cloudProviderDetected,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
AgentStatus defines the observed state of an Agent. Context tracking is handled at the AgentDeployment or AgentRun level, not on the template Agent resource itself.
func (*AgentStatus) DeepCopy ¶
func (in *AgentStatus) DeepCopy() *AgentStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentStatus.
func (*AgentStatus) DeepCopyInto ¶
func (in *AgentStatus) DeepCopyInto(out *AgentStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentWorkflow ¶
type AgentWorkflow struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec AgentWorkflowSpec `json:"spec,omitempty"`
Status AgentWorkflowStatus `json:"status,omitempty"`
}
AgentWorkflow is a declarative DAG of agent steps. The operator controller sequences steps, threads outputs between them, and enforces budget caps — without requiring the LLM to coordinate execution.
func (*AgentWorkflow) DeepCopy ¶
func (in *AgentWorkflow) DeepCopy() *AgentWorkflow
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentWorkflow.
func (*AgentWorkflow) DeepCopyInto ¶
func (in *AgentWorkflow) DeepCopyInto(out *AgentWorkflow)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AgentWorkflow) DeepCopyObject ¶
func (in *AgentWorkflow) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AgentWorkflowList ¶
type AgentWorkflowList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []AgentWorkflow `json:"items"`
}
AgentWorkflowList contains a list of AgentWorkflow.
func (*AgentWorkflowList) DeepCopy ¶
func (in *AgentWorkflowList) DeepCopy() *AgentWorkflowList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentWorkflowList.
func (*AgentWorkflowList) DeepCopyInto ¶
func (in *AgentWorkflowList) DeepCopyInto(out *AgentWorkflowList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AgentWorkflowList) DeepCopyObject ¶
func (in *AgentWorkflowList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AgentWorkflowPhase ¶
type AgentWorkflowPhase string
AgentWorkflowPhase describes the lifecycle phase of an AgentWorkflow. +kubebuilder:validation:Enum=Pending;Running;Succeeded;Failed;Cancelled;Template
const ( // AgentWorkflowPhaseTemplate is the phase of a template (mode: template): a // definition that is validated but never run. AgentWorkflowPhaseTemplate AgentWorkflowPhase = "Template" AgentWorkflowPhasePending AgentWorkflowPhase = "Pending" AgentWorkflowPhaseRunning AgentWorkflowPhase = "Running" AgentWorkflowPhaseSucceeded AgentWorkflowPhase = "Succeeded" AgentWorkflowPhaseFailed AgentWorkflowPhase = "Failed" AgentWorkflowPhaseCancelled AgentWorkflowPhase = "Cancelled" )
type AgentWorkflowSpec ¶
type AgentWorkflowSpec struct {
// Description is an optional human-readable summary of the workflow's purpose.
// +optional
Description string `json:"description,omitempty"`
// Mode is "workflow" (default): the workflow runs. In "template" mode the
// workflow is a definition that is validated but never run; workflows are
// created from it with spec.fromTemplate.
// +kubebuilder:default=workflow
// +optional
Mode WorkflowMode `json:"mode,omitempty"`
// Parameters declares the typed inputs of a template. Steps refer to them as
// {{params.<name>}} in their input. Only for mode: template.
// +listType=map
// +listMapKey=name
// +kubebuilder:validation:MaxItems=50
// +optional
Parameters []WorkflowParameter `json:"parameters,omitempty"`
// FromTemplate creates this workflow from a template in the same namespace:
// on its first reconcile the controller fills in the steps (and any of
// description, sandbox, timeout, budgetCap, onStepFailure and adaptivePolicy not set here)
// from the template, with the parameters substituted into the step inputs.
// +optional
FromTemplate *WorkflowFromTemplate `json:"fromTemplate,omitempty"`
// Sandbox runs the workflow's agent and container steps in one governed
// OpenShell sandbox, with the repository checked out before any step starts.
// Steps with sandbox: fresh get a separate sandbox built from the same commit.
// +optional
Sandbox *WorkflowSandboxSpec `json:"sandbox,omitempty"`
// Steps defines the DAG of agent executions. Each step names its dependencies via
// DependsOn; steps with no dependencies run immediately when the workflow starts.
// Required unless fromTemplate is set.
// +optional
Steps []WorkflowStep `json:"steps,omitempty"`
// BudgetCap limits total USD spend across all steps combined.
// +optional
BudgetCap *WorkflowBudgetCap `json:"budgetCap,omitempty"`
// Timeout is the wall-clock limit for the entire workflow.
// Steps still running when this expires are failed.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// OnStepFailure controls what happens when a step fails.
// "stop" (default): mark the workflow Failed and do not start new steps.
// "continue": mark the failed step Skipped and continue with dependents.
// +kubebuilder:validation:Enum=stop;continue
// +optional
OnStepFailure string `json:"onStepFailure,omitempty"`
// AdaptivePolicy enables agents to propose new steps at runtime.
// If nil, all _propose_step calls are rejected.
// +optional
AdaptivePolicy *AdaptivePolicy `json:"adaptivePolicy,omitempty"`
}
AgentWorkflowSpec defines a declarative DAG of agent steps. The controller — not the LLM — determines step ordering, threads outputs between steps, and enforces workflow-level budget caps. This is the deterministic complement to the dynamic agent-as-tool pattern. +kubebuilder:validation:XValidation:rule="has(self.fromTemplate) || (has(self.steps) && size(self.steps) > 0)",message="spec.steps is required unless spec.fromTemplate is set" +kubebuilder:validation:XValidation:rule="!has(self.fromTemplate) || !has(self.mode) || self.mode != 'template'",message="a template cannot be created from another template" +kubebuilder:validation:XValidation:rule="!has(self.parameters) || (has(self.mode) && self.mode == 'template')",message="spec.parameters is only for mode: template"
func (*AgentWorkflowSpec) DeepCopy ¶
func (in *AgentWorkflowSpec) DeepCopy() *AgentWorkflowSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentWorkflowSpec.
func (*AgentWorkflowSpec) DeepCopyInto ¶
func (in *AgentWorkflowSpec) DeepCopyInto(out *AgentWorkflowSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AgentWorkflowStatus ¶
type AgentWorkflowStatus struct {
// Phase is the overall workflow lifecycle state.
// +optional
Phase AgentWorkflowPhase `json:"phase,omitempty"`
// Sandbox is the workflow-owned repository sandbox.
// +optional
Sandbox *WorkflowSandboxStatus `json:"sandbox,omitempty"`
// Steps holds per-step execution state, one entry per spec.steps entry.
// +optional
Steps []WorkflowStepStatus `json:"steps,omitempty"`
// DynamicSteps holds steps added at runtime by agent proposals.
// These are reconciled by the controller using the same scheduling logic as spec.steps.
// +optional
DynamicSteps []WorkflowStep `json:"dynamicSteps,omitempty"`
// DynamicStepStatuses holds execution state for dynamic steps.
// +optional
DynamicStepStatuses []WorkflowStepStatus `json:"dynamicStepStatuses,omitempty"`
// ProposalLog records all proposals (approved and rejected) for auditability.
// +optional
ProposalLog []StepProposal `json:"proposalLog,omitempty"`
// Template records the template this workflow was built from (fromTemplate).
// +optional
Template *WorkflowTemplateRevision `json:"template,omitempty"`
// TotalSpendUSD is the sum of SpendUSD across all step AgentRuns.
// +optional
TotalSpendUSD string `json:"totalSpendUSD,omitempty"`
// StartTime is when the first step was launched.
// +optional
StartTime *metav1.Time `json:"startTime,omitempty"`
// CompletionTime is when the workflow reached a terminal phase.
// +optional
CompletionTime *metav1.Time `json:"completionTime,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
AgentWorkflowStatus holds observed state for an AgentWorkflow.
func (*AgentWorkflowStatus) DeepCopy ¶
func (in *AgentWorkflowStatus) DeepCopy() *AgentWorkflowStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AgentWorkflowStatus.
func (*AgentWorkflowStatus) DeepCopyInto ¶
func (in *AgentWorkflowStatus) DeepCopyInto(out *AgentWorkflowStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ApprovalStep ¶ added in v0.9.0
type ApprovalStep struct {
// Message is what the approver is asked, shown in the Approvals inbox. It can use
// {{steps.<name>.output}} to show earlier results (a diff, a test report).
// +kubebuilder:validation:MinLength=1
Message string `json:"message"`
// ApproverGroups are the identity-provider groups whose members may decide.
// Empty lets any user with access to the workflow's namespace decide.
// +optional
ApproverGroups []string `json:"approverGroups,omitempty"`
// Timeout is how long to wait before the step fails as undecided. Defaults to 24h.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
}
ApprovalStep is a human gate: the workflow waits here for a decision.
func (*ApprovalStep) DeepCopy ¶ added in v0.9.0
func (in *ApprovalStep) DeepCopy() *ApprovalStep
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApprovalStep.
func (*ApprovalStep) DeepCopyInto ¶ added in v0.9.0
func (in *ApprovalStep) DeepCopyInto(out *ApprovalStep)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AuthHeader ¶
type AuthHeader struct {
// Name is the HTTP header name (e.g., "Authorization", "X-Custom-Token").
Name string `json:"name"`
// SecretKeyRef references the Secret containing the header value.
SecretKeyRef SecretKeyRef `json:"secretKeyRef"`
}
AuthHeader maps an HTTP header name to a Secret key reference.
func (*AuthHeader) DeepCopy ¶
func (in *AuthHeader) DeepCopy() *AuthHeader
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthHeader.
func (*AuthHeader) DeepCopyInto ¶
func (in *AuthHeader) DeepCopyInto(out *AuthHeader)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AzureAuthSpec ¶
type AzureAuthSpec struct {
// ClientID is the Azure Managed Identity client ID.
ClientID string `json:"clientId"`
}
AzureAuthSpec configures Azure Workload Identity.
func (*AzureAuthSpec) DeepCopy ¶
func (in *AzureAuthSpec) DeepCopy() *AzureAuthSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureAuthSpec.
func (*AzureAuthSpec) DeepCopyInto ¶
func (in *AzureAuthSpec) DeepCopyInto(out *AzureAuthSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type BudgetCap ¶
type BudgetCap struct {
// PerRun is the maximum USD spend allowed for a single AgentRun.
// When reached the router switches to the cheapest available model,
// then returns an error if spending still exceeds the cap.
// Example: "0.50"
// +optional
PerRun string `json:"perRun,omitempty"`
// PerDay is the maximum USD spend across all runs per calendar day.
// Example: "50.00"
// +optional
PerDay string `json:"perDay,omitempty"`
}
BudgetCap enforces USD spending limits.
func (*BudgetCap) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BudgetCap.
func (*BudgetCap) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CallbackConfig ¶
type CallbackConfig struct {
// OnComplete is a URL that receives a POST when the run succeeds.
// +optional
OnComplete string `json:"onComplete,omitempty"`
// OnFailed is a URL that receives a POST when the run fails.
// +optional
OnFailed string `json:"onFailed,omitempty"`
}
CallbackConfig defines webhooks triggered on AgentRun completion.
func (*CallbackConfig) DeepCopy ¶
func (in *CallbackConfig) DeepCopy() *CallbackConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CallbackConfig.
func (*CallbackConfig) DeepCopyInto ¶
func (in *CallbackConfig) DeepCopyInto(out *CallbackConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Checkpoint ¶
type Checkpoint struct {
// SessionID is the unique session identifier (e.g., "user-42").
SessionID string `json:"sessionId"`
// Version is incremented with each message exchange.
Version int `json:"version"`
// ConversationHistory holds the full message transcript.
ConversationHistory []ConversationMessage `json:"conversationHistory,omitempty"`
// Metadata tracks stats about the conversation.
Metadata CheckpointMetadata `json:"metadata,omitempty"`
// LastRunRef is the name of the most recently created AgentRun in this session.
// Used to chain conversation context across turns in an AgentDeployment chat session.
// +optional
LastRunRef string `json:"lastRunRef,omitempty"`
}
Checkpoint represents a compressed conversation state for a session. Stored in the checkpoint store (S3, GCS, etc) and referenced by CheckpointRef.
func (*Checkpoint) DeepCopy ¶
func (in *Checkpoint) DeepCopy() *Checkpoint
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Checkpoint.
func (*Checkpoint) DeepCopyInto ¶
func (in *Checkpoint) DeepCopyInto(out *Checkpoint)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CheckpointMetadata ¶
type CheckpointMetadata struct {
// TotalMessages is the count of messages in the conversation.
TotalMessages int `json:"totalMessages,omitempty"`
// TotalTokens is the cumulative token usage across all messages.
TotalTokens int `json:"totalTokens,omitempty"`
// TotalCostUSD is the cumulative cost in USD.
TotalCostUSD string `json:"totalCostUSD,omitempty"`
// StartTime is when the session began.
// +optional
StartTime *metav1.Time `json:"startTime,omitempty"`
// LastMessageTime is when the last message was added.
// +optional
LastMessageTime *metav1.Time `json:"lastMessageTime,omitempty"`
}
CheckpointMetadata tracks statistics about a conversation checkpoint.
func (*CheckpointMetadata) DeepCopy ¶
func (in *CheckpointMetadata) DeepCopy() *CheckpointMetadata
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheckpointMetadata.
func (*CheckpointMetadata) DeepCopyInto ¶
func (in *CheckpointMetadata) DeepCopyInto(out *CheckpointMetadata)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CloudAuthSpec ¶
type CloudAuthSpec struct {
// GCP configures GKE Workload Identity.
// +optional
GCP *GCPAuthSpec `json:"gcp,omitempty"`
// AWS configures EKS IRSA (IAM Roles for Service Accounts).
// +optional
AWS *AWSAuthSpec `json:"aws,omitempty"`
// Azure configures AKS Azure Workload Identity.
// +optional
Azure *AzureAuthSpec `json:"azure,omitempty"`
}
CloudAuthSpec declares cloud-provider identity bindings for an Agent's ServiceAccount. The operator translates this to the appropriate provider-specific SA annotations. Only one provider block should be set at a time.
func (*CloudAuthSpec) DeepCopy ¶
func (in *CloudAuthSpec) DeepCopy() *CloudAuthSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudAuthSpec.
func (*CloudAuthSpec) DeepCopyInto ¶
func (in *CloudAuthSpec) DeepCopyInto(out *CloudAuthSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ContainerStep ¶ added in v0.9.0
type ContainerStep struct {
// Image is the container image to run. It must be allowed by the operator's
// ALLOWED_REGISTRIES, if set.
// +kubebuilder:validation:MinLength=1
Image string `json:"image"`
// Command overrides the image's entrypoint.
// +optional
Command []string `json:"command,omitempty"`
// Args overrides the image's arguments.
// +optional
Args []string `json:"args,omitempty"`
// Env sets environment variables. Values can use {{steps.<name>.output}}; pass
// data to the job here rather than splicing it into Command or Args.
// +optional
Env []StepEnvVar `json:"env,omitempty"`
// Resources sets CPU and memory. Defaults to a small request and a 1 CPU / 512Mi limit.
// +optional
Resources *ResourceRequirements `json:"resources,omitempty"`
// RunAsUser is the numeric user the container runs as. Defaults to 65532. Root (0) is not allowed.
// +kubebuilder:validation:Minimum=1
// +optional
RunAsUser *int64 `json:"runAsUser,omitempty"`
}
ContainerStep is a deterministic job run to completion in its own pod or in a workflow-owned sandbox. Exit code 0 is success and the tail of its output becomes the step's output. A pod has no service account token, a read-only root filesystem, runs as a non-root user and is denied all network traffic once the cluster's NetworkPolicy controller has programmed the rules (a second or two after the pod starts); /tmp and /work are writable scratch.
func (*ContainerStep) DeepCopy ¶ added in v0.9.0
func (in *ContainerStep) DeepCopy() *ContainerStep
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStep.
func (*ContainerStep) DeepCopyInto ¶ added in v0.9.0
func (in *ContainerStep) DeepCopyInto(out *ContainerStep)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ConversationMessage ¶
type ConversationMessage struct {
// Role is "user" or "assistant".
Role string `json:"role"`
// Content is the message text.
Content string `json:"content"`
// TraceEntries is a JSON-encoded array of trace entries (tool calls, tool results, etc.)
// captured during this assistant turn. Stored as a string to avoid deep-copy complexity.
// +optional
TraceEntries string `json:"traceEntries,omitempty"`
}
ConversationMessage represents a single message in a conversation history.
func (*ConversationMessage) DeepCopy ¶
func (in *ConversationMessage) DeepCopy() *ConversationMessage
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConversationMessage.
func (*ConversationMessage) DeepCopyInto ¶
func (in *ConversationMessage) DeepCopyInto(out *ConversationMessage)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeploymentRestartPolicy ¶
type DeploymentRestartPolicy struct {
// MinBackoffSeconds is the minimum backoff duration after a failure. Defaults to 5.
// +kubebuilder:default=5
// +optional
MinBackoffSeconds int `json:"minBackoffSeconds,omitempty"`
// MaxBackoffSeconds is the maximum backoff duration after a failure. Defaults to 300.
// +kubebuilder:default=300
// +optional
MaxBackoffSeconds int `json:"maxBackoffSeconds,omitempty"`
// MaxConsecutiveFailures is the number of consecutive failures before pausing the deployment.
// 0 means unlimited (always restart). Defaults to 10.
// +kubebuilder:default=10
// +optional
MaxConsecutiveFailures int `json:"maxConsecutiveFailures,omitempty"`
}
DeploymentRestartPolicy controls pod restart behavior for long-running agents.
func (*DeploymentRestartPolicy) DeepCopy ¶
func (in *DeploymentRestartPolicy) DeepCopy() *DeploymentRestartPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentRestartPolicy.
func (*DeploymentRestartPolicy) DeepCopyInto ¶
func (in *DeploymentRestartPolicy) DeepCopyInto(out *DeploymentRestartPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EgressConfig ¶
type EgressConfig struct {
// Type is the sink type: kafka, pubsub, or redis.
// +kubebuilder:validation:Enum=kafka;pubsub;redis
Type EgressSinkType `json:"type"`
// Topic is the destination topic/queue/stream name.
// For Kafka: the topic name. For Pub/Sub: the topic name. For Redis: the stream name.
// +kubebuilder:validation:MinLength=1
Topic string `json:"topic"`
// Brokers is the list of broker addresses (kafka only).
// Example: ["kafka:9092"]
// +optional
Brokers []string `json:"brokers,omitempty"`
// ProjectID is the GCP project ID (pubsub only).
// +optional
ProjectID string `json:"projectID,omitempty"`
// Address is the Redis connection address (redis only).
// Example: "redis-master:6379"
// +optional
Address string `json:"address,omitempty"`
// SecretRef references a Secret containing connection credentials.
// The Secret must be in the same namespace as the AgentRun.
// For Kafka: key "sasl-username" and "sasl-password" (or "tls-cert"/"tls-key").
// For Pub/Sub: key "credentials" containing a service-account JSON blob.
// For Redis: key "password".
// +optional
SecretRef *SecretKeyRef `json:"secretRef,omitempty"`
// Key is the partition key for the published message (kafka only).
// If empty, the run ID is used as the key.
// +optional
Key string `json:"key,omitempty"`
}
EgressConfig configures durable result delivery to an external message bus. When set on an AgentRun, the controller publishes the final TaskResponse to the configured sink upon reaching a terminal phase (Succeeded or Failed). This is independent of webhook callbacks — both can be configured simultaneously.
func (*EgressConfig) DeepCopy ¶
func (in *EgressConfig) DeepCopy() *EgressConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EgressConfig.
func (*EgressConfig) DeepCopyInto ¶
func (in *EgressConfig) DeepCopyInto(out *EgressConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EgressResult ¶
type EgressResult struct {
// RunID is the AgentRun name.
RunID string `json:"runId"`
// Agent is the agent name that was invoked.
Agent string `json:"agent"`
// Phase is the terminal phase: "Succeeded" or "Failed".
Phase string `json:"phase"`
// Output is the agent's final output (truncated to 10KB).
Output string `json:"output,omitempty"`
// SpendUSD is the total cost for this run.
SpendUSD string `json:"spendUSD,omitempty"`
// FailureReason is set when the run failed.
FailureReason string `json:"failureReason,omitempty"`
// CompletedAt is the RFC3339 timestamp of terminal phase.
CompletedAt string `json:"completedAt,omitempty"`
// Metadata is the original task submission metadata.
Metadata map[string]string `json:"metadata,omitempty"`
// Tenant is the tenant name (for multi-tenant deployments).
Tenant string `json:"tenant,omitempty"`
}
EgressResult is the payload published to the egress sink on terminal phase. It mirrors TaskResponse but is self-contained (no HATEOAS links).
func (*EgressResult) DeepCopy ¶
func (in *EgressResult) DeepCopy() *EgressResult
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EgressResult.
func (*EgressResult) DeepCopyInto ¶
func (in *EgressResult) DeepCopyInto(out *EgressResult)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EgressRule ¶
type EgressRule struct {
// Host is the target hostname. Wildcards like "*.example.com" are supported.
Host string `json:"host"`
// Port is the target port.
Port int32 `json:"port"`
// Protocol defaults to TCP.
// +optional
// +kubebuilder:default=TCP
Protocol string `json:"protocol,omitempty"`
}
EgressRule defines an allowed outbound network target for a tool or agent pod.
func (*EgressRule) DeepCopy ¶
func (in *EgressRule) DeepCopy() *EgressRule
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EgressRule.
func (*EgressRule) DeepCopyInto ¶
func (in *EgressRule) DeepCopyInto(out *EgressRule)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EgressSinkType ¶
type EgressSinkType string
EgressSinkType is the kind of external message broker to deliver results to. +kubebuilder:validation:Enum=kafka;pubsub;redis
const ( EgressSinkKafka EgressSinkType = "kafka" EgressSinkPubSub EgressSinkType = "pubsub" EgressSinkRedis EgressSinkType = "redis" )
type EmbeddingConfig ¶
type EmbeddingConfig struct {
// ModelSelectorRef names the ModelSelector used for embedding calls.
// The selected model must support the /v1/embeddings endpoint.
// +kubebuilder:validation:MinLength=1
ModelSelectorRef string `json:"modelSelectorRef"`
// ChunkSize is the maximum token count per document chunk.
// +kubebuilder:default=512
// +optional
ChunkSize int `json:"chunkSize,omitempty"`
// ChunkOverlap is the token overlap between adjacent chunks.
// +kubebuilder:default=64
// +optional
ChunkOverlap int `json:"chunkOverlap,omitempty"`
}
EmbeddingConfig controls document chunking and embedding.
func (*EmbeddingConfig) DeepCopy ¶
func (in *EmbeddingConfig) DeepCopy() *EmbeddingConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EmbeddingConfig.
func (*EmbeddingConfig) DeepCopyInto ¶
func (in *EmbeddingConfig) DeepCopyInto(out *EmbeddingConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EnvVar ¶
type EnvVar struct {
// Name of the environment variable.
Name string `json:"name"`
// Value is a literal value. Ignored if ValueFrom is set.
// +optional
Value string `json:"value,omitempty"`
// ValueFrom references an indirect source for the value.
// +optional
ValueFrom *EnvVarSource `json:"valueFrom,omitempty"`
}
EnvVar represents an environment variable with either a literal value or an indirect reference to a Kubernetes Secret key. If ValueFrom is set, Value is ignored.
func (*EnvVar) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvVar.
func (*EnvVar) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EnvVarSource ¶
type EnvVarSource struct {
// SecretKeyRef selects a key from a Kubernetes Secret.
// +optional
SecretKeyRef *SecretKeyRef `json:"secretKeyRef,omitempty"`
}
EnvVarSource selects the value of an environment variable from an indirect source.
func (*EnvVarSource) DeepCopy ¶
func (in *EnvVarSource) DeepCopy() *EnvVarSource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvVarSource.
func (*EnvVarSource) DeepCopyInto ¶
func (in *EnvVarSource) DeepCopyInto(out *EnvVarSource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type FederatedAuthConfig ¶
type FederatedAuthConfig struct {
// IssuerURL is the OIDC issuer URL (e.g. "https://acme.okta.com/oauth2/default").
// agent-orca fetches the JWKS from this issuer to verify token signatures.
// +kubebuilder:validation:MinLength=1
IssuerURL string `json:"issuerURL"`
// ClientID is the expected "aud" (audience) claim in the JWT for bearer tokens,
// and the OAuth2 client ID used for the interactive login flow.
// +kubebuilder:validation:MinLength=1
ClientID string `json:"clientID"`
// MatchClaim is the JWT claim used to identify this tenant (e.g. "org_id",
// "tenant", or a GitHub-style "repository_owner"). When both MatchClaim and
// MatchValue are omitted the tenant trusts *any* token validly signed by
// IssuerURL with the expected ClientID audience (issuer-only / default-allow).
// +optional
// +kubebuilder:validation:MinLength=1
MatchClaim string `json:"matchClaim,omitempty"`
// MatchValue is the expected value of MatchClaim that maps to this tenant.
// Required when MatchClaim is set; omit both for issuer-only trust.
// +optional
// +kubebuilder:validation:MinLength=1
MatchValue string `json:"matchValue,omitempty"`
// ClientSecretRef references the OAuth2 client_secret used for the interactive
// login (authorization-code) flow. When the ref omits a namespace, the
// operator looks it up in the tenant's first allowed namespace
// (spec.allowedNamespaces[0]). Omit for bearer-only federation (no secret is
// needed — verification uses the IdP's public JWKS).
// +optional
ClientSecretRef SecretKeyRef `json:"clientSecretRef,omitempty"`
// RedirectURI is the callback URL registered with the IdP for the interactive
// login flow. Omit for bearer-only federation.
// +optional
RedirectURI string `json:"redirectURI,omitempty"`
// ClaimMappings selects which IdP claims map onto the resolved principal/identity.
// All fields default to the standard OIDC claim when empty (userid=sub,
// groups=groups, email=email). Set userid=email for Google social login.
// +optional
ClaimMappings FederatedClaimMappings `json:"claimMappings,omitempty"`
// Scopes configures the OAuth2 scopes requested during the interactive
// (authorization-code) login flow. When omitted, defaults to
// ["openid","email","profile"]. Some IdPs require additional scopes — notably
// "offline_access" to receive a refresh token (so the session can be renewed
// without re-prompting for credentials). Has no effect on bearer-only
// federation: agent-orca verifies caller-presented JWTs against the IdP's
// JWKS regardless of scopes.
// +optional
Scopes []string `json:"scopes,omitempty"`
}
FederatedAuthConfig configures trust for an external OIDC identity provider. agent-orca validates JWTs issued by the tenant's IdP and maps claims to tenant identity.
Bearer/federated trust (no browser login) needs only IssuerURL + ClientID (+ optional matchClaim/matchValue); agent-orca verifies caller-presented JWTs against the IdP's public JWKS. The interactive (authorization-code) browser-login flow additionally needs ClientSecretRef + RedirectURI + ClaimMappings, all of which may be omitted on a bearer-only tenant.
func (*FederatedAuthConfig) DeepCopy ¶
func (in *FederatedAuthConfig) DeepCopy() *FederatedAuthConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FederatedAuthConfig.
func (*FederatedAuthConfig) DeepCopyInto ¶
func (in *FederatedAuthConfig) DeepCopyInto(out *FederatedAuthConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type FederatedClaimMappings ¶
type FederatedClaimMappings struct {
// UserID maps to TenantIdentity.UserID (default "sub").
// +optional
UserID string `json:"userid,omitempty"`
// Groups maps to TenantIdentity.Groups (default "groups").
// +optional
Groups string `json:"groups,omitempty"`
// Email maps to TenantIdentity.Email (default "email").
// +optional
Email string `json:"email,omitempty"`
}
FederatedClaimMappings maps IdP claims onto TenantIdentity fields. Zero values mean "use the standard default" (resolved by the OIDC provider config).
func (*FederatedClaimMappings) DeepCopy ¶
func (in *FederatedClaimMappings) DeepCopy() *FederatedClaimMappings
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FederatedClaimMappings.
func (*FederatedClaimMappings) DeepCopyInto ¶
func (in *FederatedClaimMappings) DeepCopyInto(out *FederatedClaimMappings)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type FilesystemAccessMode ¶ added in v0.7.0
type FilesystemAccessMode string
FilesystemAccessMode selects how the agent may touch the user's workspace through the ACP bridge relay.
const ( // FilesystemReadOnly exposes only fs_read_text_file. FilesystemReadOnly FilesystemAccessMode = "readOnly" // FilesystemReadWrite exposes fs_read_text_file and fs_write_text_file. FilesystemReadWrite FilesystemAccessMode = "readWrite" )
type FilesystemAccessSpec ¶ added in v0.7.0
type FilesystemAccessSpec struct {
// Mode grants read-only or read-write access to the workspace. In readOnly
// mode only fs_read_text_file is exposed; fs_write_text_file is refused by
// the model-router (defense in depth) and rejected by the bridge.
// +kubebuilder:validation:Enum=readOnly;readWrite
// +kubebuilder:default=readOnly
Mode FilesystemAccessMode `json:"mode"`
// WriteApproval asks the bridge to request explicit user approval (via the
// ACP elicitation flow) before applying every fs_write_text_file. Only
// meaningful with mode readWrite. Default: true — the conservative default
// given writes land in the user's checked-out workspace.
// +kubebuilder:default=true
// +optional
WriteApproval bool `json:"writeApproval"`
// RememberApproval lets the bridge stop re-prompting for the rest of an
// ACP session once the user approves one write ("approve once"). Set false
// to require approval for every write. Only meaningful with writeApproval
// true. Agent policy and the workstation's --fs-remember-approval flag can
// only narrow each other: approvals are remembered only when both allow
// it (issue #41). Default: true.
// +kubebuilder:default=true
// +optional
RememberApproval *bool `json:"rememberApproval,omitempty"`
}
FilesystemAccessSpec configures the ACP bridge fs/* relay for an agent.
func (*FilesystemAccessSpec) DeepCopy ¶ added in v0.7.0
func (in *FilesystemAccessSpec) DeepCopy() *FilesystemAccessSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FilesystemAccessSpec.
func (*FilesystemAccessSpec) DeepCopyInto ¶ added in v0.7.0
func (in *FilesystemAccessSpec) DeepCopyInto(out *FilesystemAccessSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type FormatValidation ¶
type FormatValidation struct {
// JSONSchema is a JSON Schema document that the agent's final output must conform to.
// +optional
JSONSchema string `json:"jsonSchema,omitempty"`
// MaxTokens limits the maximum output token count.
// +optional
MaxTokens int `json:"maxTokens,omitempty"`
}
FormatValidation enforces structural constraints on agent output.
func (*FormatValidation) DeepCopy ¶
func (in *FormatValidation) DeepCopy() *FormatValidation
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FormatValidation.
func (*FormatValidation) DeepCopyInto ¶
func (in *FormatValidation) DeepCopyInto(out *FormatValidation)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GCPAuthSpec ¶
type GCPAuthSpec struct {
// ServiceAccount is the GCP Service Account email to impersonate.
// Example: "my-agent@myproject.iam.gserviceaccount.com"
ServiceAccount string `json:"serviceAccount"`
}
GCPAuthSpec configures GKE Workload Identity.
func (*GCPAuthSpec) DeepCopy ¶
func (in *GCPAuthSpec) DeepCopy() *GCPAuthSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GCPAuthSpec.
func (*GCPAuthSpec) DeepCopyInto ¶
func (in *GCPAuthSpec) DeepCopyInto(out *GCPAuthSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GuardrailFilter ¶
type GuardrailFilter struct {
// Name is a human-readable identifier for this filter (used in logs and events).
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// Type selects the filter implementation.
// +kubebuilder:validation:Enum=regex;keyword-blocklist;topic-validation
Type string `json:"type"`
// Action determines what happens when the filter matches.
// "redact" replaces matched content with the replacement string.
// "block" rejects the entire message and returns blockMessage to the caller.
// "warn" logs a warning event but allows the message through.
// +kubebuilder:validation:Enum=redact;block;warn
Action string `json:"action"`
// Patterns are regex-based match rules. Used when Type is "regex".
// +optional
Patterns []RegexPattern `json:"patterns,omitempty"`
// Keywords configures keyword blocklist matching. Used when Type is "keyword-blocklist".
// +optional
Keywords *KeywordConfig `json:"keywords,omitempty"`
// AllowedTopics restricts responses to these topics. Used when Type is "topic-validation".
// +optional
AllowedTopics []string `json:"allowedTopics,omitempty"`
// BlockMessage is the message returned to the caller when Action is "block".
// +optional
BlockMessage string `json:"blockMessage,omitempty"`
}
GuardrailFilter is a single content filter rule.
func (*GuardrailFilter) DeepCopy ¶
func (in *GuardrailFilter) DeepCopy() *GuardrailFilter
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GuardrailFilter.
func (*GuardrailFilter) DeepCopyInto ¶
func (in *GuardrailFilter) DeepCopyInto(out *GuardrailFilter)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GuardrailPolicy ¶
type GuardrailPolicy struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec GuardrailPolicySpec `json:"spec,omitempty"`
Status GuardrailPolicyStatus `json:"status,omitempty"`
}
GuardrailPolicy defines content filtering and validation rules for agent inputs and outputs. Referenced by Agents via spec.guardrailPolicyRef, or by TenantConfig as a namespace default.
func (*GuardrailPolicy) DeepCopy ¶
func (in *GuardrailPolicy) DeepCopy() *GuardrailPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GuardrailPolicy.
func (*GuardrailPolicy) DeepCopyInto ¶
func (in *GuardrailPolicy) DeepCopyInto(out *GuardrailPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*GuardrailPolicy) DeepCopyObject ¶
func (in *GuardrailPolicy) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type GuardrailPolicyList ¶
type GuardrailPolicyList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []GuardrailPolicy `json:"items"`
}
GuardrailPolicyList contains a list of GuardrailPolicy.
func (*GuardrailPolicyList) DeepCopy ¶
func (in *GuardrailPolicyList) DeepCopy() *GuardrailPolicyList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GuardrailPolicyList.
func (*GuardrailPolicyList) DeepCopyInto ¶
func (in *GuardrailPolicyList) DeepCopyInto(out *GuardrailPolicyList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*GuardrailPolicyList) DeepCopyObject ¶
func (in *GuardrailPolicyList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type GuardrailPolicySpec ¶
type GuardrailPolicySpec struct {
// OutputFilters are applied to LLM responses before they reach the agent/caller.
// Filters are evaluated in order; the first "block" action stops processing.
// +optional
OutputFilters []GuardrailFilter `json:"outputFilters,omitempty"`
// InputFilters are applied to user messages before they reach the LLM.
// +optional
InputFilters []GuardrailFilter `json:"inputFilters,omitempty"`
// FormatValidation enforces structural constraints on the final agent output.
// +optional
FormatValidation *FormatValidation `json:"formatValidation,omitempty"`
// ToolApproval sets what each tool side-effect class needs before a call runs
// (see Tool.spec.sideEffect). Without it, calls to read, write and
// unclassified tools run freely and actuate calls need an approval.
// +optional
ToolApproval *ToolApprovalPolicy `json:"toolApproval,omitempty"`
}
GuardrailPolicySpec defines content filtering and validation rules applied to agent inputs and outputs by the model-router sidecar.
func (*GuardrailPolicySpec) DeepCopy ¶
func (in *GuardrailPolicySpec) DeepCopy() *GuardrailPolicySpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GuardrailPolicySpec.
func (*GuardrailPolicySpec) DeepCopyInto ¶
func (in *GuardrailPolicySpec) DeepCopyInto(out *GuardrailPolicySpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GuardrailPolicyStatus ¶
type GuardrailPolicyStatus struct {
// Ready indicates the policy has been validated and can be enforced.
// +optional
Ready bool `json:"ready,omitempty"`
// Message contains a human-readable status message.
// +optional
Message string `json:"message,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
GuardrailPolicyStatus holds the observed state of a GuardrailPolicy.
func (*GuardrailPolicyStatus) DeepCopy ¶
func (in *GuardrailPolicyStatus) DeepCopy() *GuardrailPolicyStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GuardrailPolicyStatus.
func (*GuardrailPolicyStatus) DeepCopyInto ¶
func (in *GuardrailPolicyStatus) DeepCopyInto(out *GuardrailPolicyStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HindsightMemoryConfig ¶
type HindsightMemoryConfig struct {
// Enabled turns hindsight on. It defaults to true once the hindsight block
// is set.
// +kubebuilder:default=true
// +optional
Enabled bool `json:"enabled,omitempty"`
// URL is the hindsight API endpoint (e.g. http://hindsight.hindsight.svc.cluster.local:8888).
// +optional
URL string `json:"url,omitempty"`
// BankIDTemplate is the template for the hindsight bank ID. Placeholders:
// {namespace}, {agent-name}, {run-name} and {deployment}. Default
// "{namespace}--{agent-name}". A per-run bank is never read again.
// +optional
BankIDTemplate string `json:"bankIdTemplate,omitempty"`
// RecallBudget is the maximum number of memories recalled per turn.
// +kubebuilder:default=5
// +optional
RecallBudget int `json:"recallBudget,omitempty"`
// RecallMaxTokens caps the size of the recalled memories, in tokens
// (hindsight's max_tokens). Default 1024.
// +kubebuilder:validation:Minimum=64
// +optional
RecallMaxTokens int `json:"recallMaxTokens,omitempty"`
// RetainOnEveryTurn is true to retain conversation after every LLM turn.
// +kubebuilder:default=true
// +optional
RetainOnEveryTurn bool `json:"retainOnEveryTurn,omitempty"`
}
HindsightMemoryConfig configures the hindsight memory system integration.
func (*HindsightMemoryConfig) DeepCopy ¶
func (in *HindsightMemoryConfig) DeepCopy() *HindsightMemoryConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HindsightMemoryConfig.
func (*HindsightMemoryConfig) DeepCopyInto ¶
func (in *HindsightMemoryConfig) DeepCopyInto(out *HindsightMemoryConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IngestionBreakerState ¶ added in v0.6.3
type IngestionBreakerState struct {
// Failures counts consecutive failed runs of this source's ingestion Job.
// Reset to zero when that Job succeeds. Drives the exponential
// re-ingestion backoff so a persistently failing source cannot restart
// Jobs in a tight loop and burn through API budgets.
// +optional
Failures int `json:"failures,omitempty"`
// NextAttempt is the earliest time the controller will launch a new
// ingestion Job for this source after a failure. After provider
// daily-quota exhaustion this is set to the provider's quota reset time
// rather than a short backoff.
// +optional
NextAttempt *metav1.Time `json:"nextAttempt,omitempty"`
// Reason explains why this source's ingestion is paused (e.g.
// "embedding provider daily quota exhausted; waiting for quota reset").
// Empty when the source's ingestion is healthy.
// +optional
Reason string `json:"reason,omitempty"`
}
IngestionBreakerState is the per-source ingestion circuit breaker state.
func (*IngestionBreakerState) DeepCopy ¶ added in v0.6.3
func (in *IngestionBreakerState) DeepCopy() *IngestionBreakerState
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngestionBreakerState.
func (*IngestionBreakerState) DeepCopyInto ¶ added in v0.6.3
func (in *IngestionBreakerState) DeepCopyInto(out *IngestionBreakerState)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IngestionConfig ¶
type IngestionConfig struct {
// ConfigMapRefs lists ConfigMaps whose data keys are treated as documents.
// +optional
ConfigMapRefs []LocalObjectRef `json:"configMapRefs,omitempty"`
// URLs lists HTTP(S) endpoints to fetch and ingest as documents.
// +optional
URLs []string `json:"urls,omitempty"`
// S3 configures S3-compatible object storage as a document source.
// +optional
S3 *S3IngestionSource `json:"s3,omitempty"`
// MCP lists MCP servers to fetch documents from via Kubernetes Jobs.
// Each entry launches a Job that connects to the referenced MCPServer,
// runs an optional discover step to enumerate items, then fetches each
// item. Results are written to a ConfigMap and ingested by the controller.
// +optional
MCP []MCPIngestionSource `json:"mcp,omitempty"`
// SyncIntervalSeconds re-ingests sources on a schedule. 0 means one-shot.
// +kubebuilder:default=0
// +optional
SyncIntervalSeconds int `json:"syncIntervalSeconds,omitempty"`
// NetworkEgress defines additional outbound network rules for ingestion
// Job pods. The operator always creates a NetworkPolicy for ingestion Jobs
// allowing DNS, the Kubernetes API, same-namespace services (Qdrant, MCP
// servers, in-cluster embedding providers), and HTTP/HTTPS egress; these
// rules are added to that allowlist (e.g. S3 on a custom port).
// +optional
NetworkEgress []EgressRule `json:"networkEgress,omitempty"`
}
IngestionConfig defines where documents come from.
func (*IngestionConfig) DeepCopy ¶
func (in *IngestionConfig) DeepCopy() *IngestionConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngestionConfig.
func (*IngestionConfig) DeepCopyInto ¶
func (in *IngestionConfig) DeepCopyInto(out *IngestionConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type InputSourceConfig ¶
type InputSourceConfig struct {
// Type specifies the input source: chat (API-driven), queue (Redis, etc), pubsub (Kafka, etc), or loop (self-managed).
// +kubebuilder:default=chat
// +optional
Type InputSourceType `json:"type,omitempty"`
// Config holds provider-specific settings.
// Examples:
// queue: {provider: "redis", url: "redis://redis:6379", queue: "tasks"}
// pubsub: {provider: "kafka", brokers: "kafka:9092", topic: "agent-input"}
// loop: {initialPrompt: "Run continuously, answering questions..."}
// +optional
Config map[string]string `json:"config,omitempty"`
}
InputSourceConfig defines where a deployment receives input from.
func (*InputSourceConfig) DeepCopy ¶
func (in *InputSourceConfig) DeepCopy() *InputSourceConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InputSourceConfig.
func (*InputSourceConfig) DeepCopyInto ¶
func (in *InputSourceConfig) DeepCopyInto(out *InputSourceConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type InputSourceType ¶
type InputSourceType string
InputSourceType describes where the deployment gets input from. +kubebuilder:validation:Enum=chat;queue;pubsub;loop
const ( InputSourceChat InputSourceType = "chat" InputSourceQueue InputSourceType = "queue" InputSourcePubSub InputSourceType = "pubsub" InputSourceLoop InputSourceType = "loop" )
type IssuedAuthConfig ¶
type IssuedAuthConfig struct {
// ClientID is the OAuth2 client identifier for this tenant.
// +kubebuilder:validation:MinLength=1
ClientID string `json:"clientID"`
// ClientSecretRef references the Kubernetes Secret containing the client secret.
// The operator reads this to validate client_credentials requests.
ClientSecretRef SecretKeyRef `json:"clientSecretRef"`
}
IssuedAuthConfig configures agent-orca as the OAuth2 token issuer. Enterprise customers use the client_credentials grant to obtain short-lived JWTs.
func (*IssuedAuthConfig) DeepCopy ¶
func (in *IssuedAuthConfig) DeepCopy() *IssuedAuthConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IssuedAuthConfig.
func (*IssuedAuthConfig) DeepCopyInto ¶
func (in *IssuedAuthConfig) DeepCopyInto(out *IssuedAuthConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ItemFilterConfig ¶
type ItemFilterConfig struct {
// Key is the JSON field name to check (e.g. "type").
// +kubebuilder:validation:MinLength=1
Key string `json:"key"`
// Value is the required value for the field (e.g. "file").
// Objects where the field does not equal this value are excluded.
// +kubebuilder:validation:MinLength=1
Value string `json:"value"`
}
ItemFilterConfig filters JSON objects during extraction.
func (*ItemFilterConfig) DeepCopy ¶
func (in *ItemFilterConfig) DeepCopy() *ItemFilterConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ItemFilterConfig.
func (*ItemFilterConfig) DeepCopyInto ¶
func (in *ItemFilterConfig) DeepCopyInto(out *ItemFilterConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type KeywordConfig ¶
type KeywordConfig struct {
// Inline is a list of keywords to block.
// +optional
Inline []string `json:"inline,omitempty"`
// SecretRef references a Secret containing a newline-delimited keyword list.
// +optional
SecretRef *SecretKeyRef `json:"secretRef,omitempty"`
}
KeywordConfig defines keyword blocklist sources.
func (*KeywordConfig) DeepCopy ¶
func (in *KeywordConfig) DeepCopy() *KeywordConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KeywordConfig.
func (*KeywordConfig) DeepCopyInto ¶
func (in *KeywordConfig) DeepCopyInto(out *KeywordConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type KnowledgeBase ¶
type KnowledgeBase struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec KnowledgeBaseSpec `json:"spec,omitempty"`
Status KnowledgeBaseStatus `json:"status,omitempty"`
}
KnowledgeBase defines a vector store–backed knowledge base for RAG. Agents reference KnowledgeBases by name and gain access to _rag_search and _rag_ingest built-in tools. The operator auto-deploys a namespace-shared Qdrant instance and manages document ingestion, chunking, and embedding.
func (*KnowledgeBase) DeepCopy ¶
func (in *KnowledgeBase) DeepCopy() *KnowledgeBase
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBase.
func (*KnowledgeBase) DeepCopyInto ¶
func (in *KnowledgeBase) DeepCopyInto(out *KnowledgeBase)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*KnowledgeBase) DeepCopyObject ¶
func (in *KnowledgeBase) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type KnowledgeBaseList ¶
type KnowledgeBaseList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []KnowledgeBase `json:"items"`
}
KnowledgeBaseList contains a list of KnowledgeBase.
func (*KnowledgeBaseList) DeepCopy ¶
func (in *KnowledgeBaseList) DeepCopy() *KnowledgeBaseList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseList.
func (*KnowledgeBaseList) DeepCopyInto ¶
func (in *KnowledgeBaseList) DeepCopyInto(out *KnowledgeBaseList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*KnowledgeBaseList) DeepCopyObject ¶
func (in *KnowledgeBaseList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type KnowledgeBaseRef ¶
type KnowledgeBaseRef struct {
// Name is the KnowledgeBase CR name (same namespace).
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// ConfirmRequired when true replaces the _rag_ingest tool with _propose_fix and
// _confirm_fix for this knowledge base. Fixes are staged in Redis and only promoted
// to the KnowledgeBase when the user explicitly confirms they worked.
// +optional
ConfirmRequired bool `json:"confirmRequired,omitempty"`
}
KnowledgeBaseRef references a KnowledgeBase with per-KB options.
func (*KnowledgeBaseRef) DeepCopy ¶
func (in *KnowledgeBaseRef) DeepCopy() *KnowledgeBaseRef
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseRef.
func (*KnowledgeBaseRef) DeepCopyInto ¶
func (in *KnowledgeBaseRef) DeepCopyInto(out *KnowledgeBaseRef)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type KnowledgeBaseSpec ¶
type KnowledgeBaseSpec struct {
// Description is a human-readable summary of this knowledge base.
// +optional
Description string `json:"description,omitempty"`
// AllowedAgents is the explicit list of Agent names (in the same namespace) that are
// permitted to use this KnowledgeBase. When set to a non-nil list, only the named
// agents may access this KnowledgeBase. When omitted (nil), access is unrestricted
// (backward-compatible default for existing KnowledgeBases).
//
// To explicitly deny all agents, set this to an empty list: allowedAgents: [].
//
// The operator enforces this at AgentRun/AgentDeployment creation time.
// At runtime, the operator API verifies the calling agent's identity via
// TokenReview and rejects requests from agents not in this list.
// +optional
AllowedAgents []string `json:"allowedAgents,omitempty"`
// VectorStore configures the backing vector database.
// +optional
VectorStore VectorStoreConfig `json:"vectorStore,omitempty"`
// Embedding configures how documents are chunked and embedded.
Embedding EmbeddingConfig `json:"embedding"`
// Ingestion defines document sources. If nil, documents are only added
// at runtime via the _rag_ingest tool.
// +optional
Ingestion *IngestionConfig `json:"ingestion,omitempty"`
}
KnowledgeBaseSpec defines a vector store–backed knowledge base for RAG. The operator auto-deploys a dedicated Qdrant instance per KnowledgeBase and manages document ingestion, chunking, and embedding.
func (*KnowledgeBaseSpec) DeepCopy ¶
func (in *KnowledgeBaseSpec) DeepCopy() *KnowledgeBaseSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseSpec.
func (*KnowledgeBaseSpec) DeepCopyInto ¶
func (in *KnowledgeBaseSpec) DeepCopyInto(out *KnowledgeBaseSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type KnowledgeBaseStatus ¶
type KnowledgeBaseStatus struct {
// Ready indicates the vector store is accessible and has been seeded.
// +optional
Ready bool `json:"ready,omitempty"`
// Message contains a human-readable status message. Populated on failure
// (e.g. "Qdrant pod failed to start: CrashLoopBackOff") or when waiting
// (e.g. "Qdrant pod not ready yet"). Empty once the KnowledgeBase is ready.
// +optional
Message string `json:"message,omitempty"`
// DocumentCount is the number of source documents ingested.
// +optional
DocumentCount int `json:"documentCount,omitempty"`
// ChunkCount is the number of vector chunks stored.
// +optional
ChunkCount int `json:"chunkCount,omitempty"`
// VectorStoreURL is the resolved Qdrant endpoint.
// +optional
VectorStoreURL string `json:"vectorStoreURL,omitempty"`
// CollectionName is the resolved Qdrant collection name.
// +optional
CollectionName string `json:"collectionName,omitempty"`
// EmbeddingModelProvider is the name of the ModelProvider CR used when the
// Qdrant collection was first created. Once set, all subsequent embedding
// calls use this provider directly to prevent dimension mismatches caused
// by a ModelSelector routing to a different model between calls.
// +optional
EmbeddingModelProvider string `json:"embeddingModelProvider,omitempty"`
// EmbeddingModel is the LiteLLM model string (e.g. "openai/text-embedding-3-large")
// from the pinned ModelProvider.
// +optional
EmbeddingModel string `json:"embeddingModel,omitempty"`
// EmbeddingDimensions is the vector size discovered from the embedding model on first use.
// The controller probes the embedding API with a test string and records the actual output
// dimension here. This prevents the user from having to specify dimensions manually and
// eliminates Qdrant dimension-mismatch errors caused by mismatched configuration.
// +optional
EmbeddingDimensions int `json:"embeddingDimensions,omitempty"`
// StorageUsedPercent is the percentage of PVC storage consumed by Qdrant (0–100).
// +optional
StorageUsedPercent int `json:"storageUsedPercent,omitempty"`
// LastSyncTime is when documents were last ingested.
// +optional
LastSyncTime *metav1.Time `json:"lastSyncTime,omitempty"`
// IngestionBreakers tracks the ingestion circuit breaker per source,
// keyed by that source's ingestion Job name ("kb-src-<kb>" for static
// sources, "kb-mcp-<kb>-<idx>" for MCP sources). Keying per source is
// load-bearing: a sibling source's success must not cancel a failed
// source's backoff pause (which recreated the runaway Job loop), and
// concurrent source failures must not amplify each other's counters.
// +optional
IngestionBreakers map[string]IngestionBreakerState `json:"ingestionBreakers,omitempty"`
// IngestionSyncTimes records the last successful sync per source, keyed
// by that source's ingestion Job name. The sync-interval gate reads
// these instead of the single KB-level LastSyncTime so a persistently
// failing sibling source cannot starve a healthy source's configured
// sync cadence (LastSyncTime only advances when nothing is running and
// no source errored).
// +optional
IngestionSyncTimes map[string]metav1.Time `json:"ingestionSyncTimes,omitempty"`
// QdrantVersion is the currently running Qdrant version as reported by
// the instance's HTTP API (e.g. "1.17.1"). Empty until the first probe.
// +optional
QdrantVersion string `json:"qdrantVersion,omitempty"`
// QdrantTargetVersion is the operator's desired Qdrant version for this
// KnowledgeBase. Derived from the operator build or Helm override.
// +optional
QdrantTargetVersion string `json:"qdrantTargetVersion,omitempty"`
// QdrantUpgradeState tracks in-progress sequential upgrades.
// Empty when no upgrade is in progress.
// +kubebuilder:validation:Enum="";Snapshot;WaitingForReady;Failed
// +optional
QdrantUpgradeState string `json:"qdrantUpgradeState,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
KnowledgeBaseStatus holds observed state for a KnowledgeBase.
func (*KnowledgeBaseStatus) DeepCopy ¶
func (in *KnowledgeBaseStatus) DeepCopy() *KnowledgeBaseStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseStatus.
func (*KnowledgeBaseStatus) DeepCopyInto ¶
func (in *KnowledgeBaseStatus) DeepCopyInto(out *KnowledgeBaseStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LocalObjectRef ¶
type LocalObjectRef struct {
// Name of the resource.
Name string `json:"name"`
}
LocalObjectRef references a resource in the same namespace.
func (*LocalObjectRef) DeepCopy ¶
func (in *LocalObjectRef) DeepCopy() *LocalObjectRef
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalObjectRef.
func (*LocalObjectRef) DeepCopyInto ¶
func (in *LocalObjectRef) DeepCopyInto(out *LocalObjectRef)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LoopDetectedInfo ¶
type LoopDetectedInfo struct {
// Reason is a human-readable description of which safeguard was tripped.
Reason string `json:"reason"`
// TripCount is the counter value that exceeded the configured limit.
TripCount int `json:"tripCount"`
// ToolName is the name of the tool involved, for tool-based trips.
// +optional
ToolName string `json:"toolName,omitempty"`
}
LoopDetectedInfo describes a safeguard trip that caused a run to fail.
func (*LoopDetectedInfo) DeepCopy ¶
func (in *LoopDetectedInfo) DeepCopy() *LoopDetectedInfo
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoopDetectedInfo.
func (*LoopDetectedInfo) DeepCopyInto ¶
func (in *LoopDetectedInfo) DeepCopyInto(out *LoopDetectedInfo)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MCPAuthConfig ¶
type MCPAuthConfig struct {
// BearerToken sets the Authorization header to "Bearer <token>".
// The token value is read from a Kubernetes Secret.
// +optional
BearerToken *SecretKeyRef `json:"bearerToken,omitempty"`
// APIKey sets a custom header with a key read from a Secret.
// +optional
APIKey *APIKeyAuth `json:"apiKey,omitempty"`
// Headers sets custom HTTP headers from Secrets.
// Use this for non-standard auth schemes.
// +optional
Headers []AuthHeader `json:"headers,omitempty"`
// OAuth drives OAuth 2.0 token management for the remote MCP server (HTTP/SSE).
// When set, the MCPServer controller discovers the server's OAuth config from its
// RFC 8414 metadata, exchanges a refresh token (or a one-time authorization code
// via PKCE) for an access token, writes it to accessTokenSecretRef, and wires
// auth.bearerToken to that Secret so the model-router sends it as a bearer. This is
// what makes OAuth-only MCP servers usable (e.g. Slack, which rejects static tokens
// with -32001 invalid_token). Mutually exclusive with bearerToken/apiKey/headers.
// +optional
OAuth *MCPOAuthConfig `json:"oauth,omitempty"`
}
MCPAuthConfig configures authentication for remote MCP servers. Exactly one of BearerToken, APIKey, or Headers should be set.
func (*MCPAuthConfig) DeepCopy ¶
func (in *MCPAuthConfig) DeepCopy() *MCPAuthConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPAuthConfig.
func (*MCPAuthConfig) DeepCopyInto ¶
func (in *MCPAuthConfig) DeepCopyInto(out *MCPAuthConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MCPConfig ¶
type MCPConfig struct {
// Transport is the MCP transport protocol.
// +kubebuilder:validation:Enum=stdio;http;sse
// +kubebuilder:default=stdio
// +optional
Transport string `json:"transport,omitempty"`
// URL is the MCP server URL for http and sse transports.
// If set, the server runs externally and no sidecar is injected.
// +optional
URL string `json:"url,omitempty"`
// Args are the command-line arguments passed to the MCP server process.
// Only used for stdio transport.
// +optional
Args []string `json:"args,omitempty"`
// Env sets environment variables for the MCP server process.
// +optional
Env map[string]string `json:"env,omitempty"`
// EnvFrom sets environment variables sourced from Kubernetes Secrets.
// These are merged with (and override) Env entries of the same name.
// +optional
EnvFrom []EnvVar `json:"envFrom,omitempty"`
// Auth configures authentication for HTTP/SSE transports.
// Not supported for stdio transport (use EnvFrom instead).
// +optional
Auth *MCPAuthConfig `json:"auth,omitempty"`
}
MCPConfig configures an MCP (Model Context Protocol) server.
func (*MCPConfig) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPConfig.
func (*MCPConfig) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MCPIngestionSource ¶
type MCPIngestionSource struct {
// MCPServerRef names the MCPServer CR (same namespace) to use.
// The MCPServer must include "_controller" in its allowedAgents list.
// +kubebuilder:validation:MinLength=1
MCPServerRef string `json:"mcpServerRef"`
// Discover is an optional tool call that returns a list of items to iterate.
// If omitted, Fetch runs once with its static arguments.
// +optional
Discover *MCPToolCall `json:"discover,omitempty"`
// ItemExtractor configures how to extract individual items from the
// discover result:
// - "lines": split by newline, skip empty lines (default).
// - "jsonArray": parse as a JSON array of strings.
// - "jsonObjects": parse as a JSON array of objects; requires ItemField.
// +kubebuilder:validation:Enum=lines;jsonArray;jsonObjects
// +kubebuilder:default=lines
// +optional
ItemExtractor string `json:"itemExtractor,omitempty"`
// ItemField selects which field to extract from each JSON object when
// ItemExtractor is "jsonObjects". For example, "path" extracts the
// "path" key from each object. Required when ItemExtractor is "jsonObjects".
// +optional
ItemField string `json:"itemField,omitempty"`
// ItemFilter optionally filters JSON objects before extraction (only
// applies to "jsonObjects"). Objects are included only when the named
// field equals the specified value. For example, setting key="type" and
// value="file" keeps only objects where type is "file".
// +optional
ItemFilter *ItemFilterConfig `json:"itemFilter,omitempty"`
// DiscoverRecursive enables recursive directory traversal. When true,
// items matching DirectoryFilter are re-discovered by calling the
// Discover tool with "{{item}}" in its arguments replaced by the
// directory path. Requires Discover.Arguments to contain "{{item}}".
// +optional
DiscoverRecursive bool `json:"discoverRecursive,omitempty"`
// DirectoryFilter identifies directory entries in discover results.
// Required when DiscoverRecursive is true. Objects matching this
// filter are queued for recursive discovery rather than fetched.
// +optional
DirectoryFilter *ItemFilterConfig `json:"directoryFilter,omitempty"`
// IncludePatterns is a list of glob patterns. If non-empty, only
// items matching at least one pattern are kept. Supports "**" for
// recursive matching (e.g. "**/*.go", "docs/**").
// +optional
IncludePatterns []string `json:"includePatterns,omitempty"`
// ExcludePatterns is a list of glob patterns. Items matching any
// pattern are dropped (applied after IncludePatterns).
// Supports "**" for recursive matching (e.g. "vendor/**").
// +optional
ExcludePatterns []string `json:"excludePatterns,omitempty"`
// Fetch is the tool call to execute for each discovered item (or once
// if no Discover step). String values in Arguments may contain
// "{{item}}" which is replaced with each discovered item.
Fetch MCPToolCall `json:"fetch"`
// MaxItems caps the number of items processed from the discover step.
// Prevents runaway ingestion. 0 means unlimited.
// +kubebuilder:default=500
// +optional
MaxItems int `json:"maxItems,omitempty"`
// DocumentIDTemplate is a Go template for generating document IDs.
// Available variables: {{.Item}}, {{.MCPServer}}, {{.Tool}}.
// Defaults to "mcp/{{.MCPServer}}/{{.Item}}".
// +optional
DocumentIDTemplate string `json:"documentIDTemplate,omitempty"`
// Resources sets CPU/memory for the ingestion Job pod.
// +optional
Resources *ResourceRequirements `json:"resources,omitempty"`
}
MCPIngestionSource configures document ingestion from an MCP server. The controller launches a Kubernetes Job that connects to the referenced MCPServer, runs an optional discover tool call to enumerate items, then calls the fetch tool for each item. Documents are returned via a ConfigMap and ingested through the standard chunking/embedding pipeline.
func (*MCPIngestionSource) DeepCopy ¶
func (in *MCPIngestionSource) DeepCopy() *MCPIngestionSource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPIngestionSource.
func (*MCPIngestionSource) DeepCopyInto ¶
func (in *MCPIngestionSource) DeepCopyInto(out *MCPIngestionSource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MCPOAuthConfig ¶
type MCPOAuthConfig struct {
// Credentials is a Secret (in the MCPServer's namespace) holding the OAuth client
// id/secret (keys: client_id, client_secret), an optional registered redirect_uri
// (key: redirect_uri), and an optional pre-provisioned refresh_token (key:
// refresh_token). Supplying a refresh_token skips the one-time authorization-code
// seed; otherwise the controller reports "seeding required" and the operator runs
// `oauth-proxy seed` once.
// +required
Credentials LocalObjectRef `json:"credentials"`
// Scopes overrides the server's scopes_supported; if empty, discovery scopes win.
// +optional
Scopes []string `json:"scopes,omitempty"`
// RefreshTokenSecretRef optionally points to a Secret/key holding just the refresh
// token (instead of inside Credentials). When set, this takes precedence.
// +optional
RefreshTokenSecretRef *SecretKeyRef `json:"refreshTokenSecretRef,omitempty"`
// AccessTokenSecretRef is the Secret (key "token") the access token is written to
// and that auth.bearerToken references. If omitted, the controller names it
// "<mcpserver>-mcp-token" (key "token").
// +optional
AccessTokenSecretRef *SecretKeyRef `json:"accessTokenSecretRef,omitempty"`
}
MCPOAuthConfig configures OAuth 2.0 token acquisition and rotation for an MCP server. The credentials live in a user-managed Secret; the operator exchanges them for a (rotating) access token and writes it to accessTokenSecretRef, whose value the model-router sends as the bearer. This lets any OAuth-only MCP be declared declaratively in the MCPServer CR.
func (*MCPOAuthConfig) DeepCopy ¶
func (in *MCPOAuthConfig) DeepCopy() *MCPOAuthConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPOAuthConfig.
func (*MCPOAuthConfig) DeepCopyInto ¶
func (in *MCPOAuthConfig) DeepCopyInto(out *MCPOAuthConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MCPServer ¶
type MCPServer struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec MCPServerSpec `json:"spec,omitempty"`
Status MCPServerStatus `json:"status,omitempty"`
}
MCPServer declares an MCP server and the tools it provides. The controller generates one child Tool CR per declared tool.
func (*MCPServer) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPServer.
func (*MCPServer) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*MCPServer) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type MCPServerList ¶
type MCPServerList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []MCPServer `json:"items"`
}
MCPServerList contains a list of MCPServer.
func (*MCPServerList) DeepCopy ¶
func (in *MCPServerList) DeepCopy() *MCPServerList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPServerList.
func (*MCPServerList) DeepCopyInto ¶
func (in *MCPServerList) DeepCopyInto(out *MCPServerList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*MCPServerList) DeepCopyObject ¶
func (in *MCPServerList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type MCPServerSpec ¶
type MCPServerSpec struct {
// Transport is the MCP transport protocol.
// +kubebuilder:validation:Enum=stdio;http;sse
// +kubebuilder:default=stdio
// +optional
Transport string `json:"transport,omitempty"`
// URL is the MCP server URL for http and sse transports.
// If set, the server runs externally and no sidecar is injected.
// +optional
URL string `json:"url,omitempty"`
// OCIRef is the OCI image reference for stdio transport servers
// that run as a sidecar. Must be signed with Cosign unless
// imageVerification.skip is true.
// +optional
OCIRef string `json:"ociRef,omitempty"`
// Args are the command-line arguments passed to the MCP server process.
// Only used for stdio transport.
// +optional
Args []string `json:"args,omitempty"`
// Env sets environment variables for the MCP server process.
// +optional
Env map[string]string `json:"env,omitempty"`
// EnvFrom sets environment variables sourced from Kubernetes Secrets.
// These are merged with (and override) Env entries of the same name.
// Only used for stdio transport.
// +optional
EnvFrom []EnvVar `json:"envFrom,omitempty"`
// Auth configures authentication for HTTP/SSE transports.
// The model-router reads each referenced Secret (mounted as a file into the
// sidecar) and injects it as an HTTP header on every request to the remote
// MCP server. Not supported for stdio transport (use EnvFrom instead — the
// agentorca admission webhook rejects auth on stdio).
// +optional
Auth *MCPAuthConfig `json:"auth,omitempty"`
// Tools declares the tools this MCP server provides.
// Each entry becomes a child Tool CR managed by the MCPServer controller.
//
// Optional when spec.discoverability is "enabled" (the default): if Tools is
// empty the controller creates a single connector Tool CR (named after the
// MCPServer) and the model-router discovers every tool at runtime via tools/list.
// When spec.discoverability is "disabled", Tools is required.
// +optional
Tools []MCPServerTool `json:"tools,omitempty"`
// Discoverability controls how MCP tools are surfaced to agents.
//
// "enabled" (default): the model-router auto-discovers all tools at runtime via
// tools/list and exposes them to the LLM. spec.tools is optional — when omitted,
// the controller creates one connector Tool CR (named after the MCPServer) and the
// agent references the server by that name. Any tools declared in spec.tools are
// still created as child Tool CRs (useful for access-control cataloguing).
//
// "disabled": spec.tools is required and the agent must reference each declared
// Tool CR explicitly.
// +kubebuilder:validation:Enum=enabled;disabled
// +kubebuilder:default=enabled
// +optional
Discoverability string `json:"discoverability,omitempty"`
// IncludePatterns is a list of glob patterns used to filter the tools the
// model-router discovers at runtime. When non-empty, only tools whose name matches
// at least one pattern are exposed to agents. Supports "*", "?", and "**" for
// recursive multi-segment matching (e.g. "search/**"). Mirrors the
// includePatterns convention used by KnowledgeBase ingestion.
// +optional
IncludePatterns []string `json:"includePatterns,omitempty"`
// ExcludePatterns is a list of glob patterns to hide discovered tools. A tool
// matching any pattern is dropped before it reaches the LLM, even if it matched
// an IncludePatterns entry (exclude always wins). Applied after IncludePatterns.
// +optional
ExcludePatterns []string `json:"excludePatterns,omitempty"`
// AllowedAgents is the explicit list of Agent names (in the same namespace) that are
// permitted to use this MCP server. Access is denied by default — if this list is
// empty, no agent may access the server regardless of what tools it declares.
//
// The agent-orca operator enforces this at AgentRun creation time: if the agent
// running the run is not listed here, the run is failed before the pod is scheduled.
// At runtime, the model-router sidecar sends a short-lived Kubernetes ServiceAccount
// JWT (audience "agentorca/mcp") with every HTTP/SSE request to the MCP server so the
// server can independently verify the caller's identity via the TokenReview API.
//
// Example — grant access to two agents:
// allowedAgents:
// - analyst
// - report-builder
// +optional
AllowedAgents []string `json:"allowedAgents,omitempty"`
// NetworkEgress defines additional outbound network rules for agent pods
// using tools from this MCP server.
// +optional
NetworkEgress []EgressRule `json:"networkEgress,omitempty"`
// Resources sets CPU/memory limits for the MCP server sidecar.
// +optional
Resources *ResourceRequirements `json:"resources,omitempty"`
// AllowApps enables MCP App rendering for this server. When false (default),
// _meta.ui.resourceUri is ignored and no sandboxed iframe is rendered in the UI.
// Set to true only for MCP servers whose HTML output you explicitly trust.
// +optional
AllowApps bool `json:"allowApps,omitempty"`
}
MCPServerSpec defines the desired state of an MCPServer.
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 MCPServerStatus ¶
type MCPServerStatus struct {
// Ready indicates all child Tools were created successfully.
// +optional
Ready bool `json:"ready,omitempty"`
// Discovering is true when spec.discoverability is "enabled" and spec.tools is
// empty, meaning the controller created a connector Tool CR and the model-router
// will discover all tools at runtime via tools/list.
// +optional
Discovering bool `json:"discovering,omitempty"`
// Message contains a human-readable status message.
// +optional
Message string `json:"message,omitempty"`
// ToolCount is the number of child Tool CRs managed by this MCPServer.
// +optional
ToolCount int `json:"toolCount,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
MCPServerStatus defines the observed state of an MCPServer.
func (*MCPServerStatus) DeepCopy ¶
func (in *MCPServerStatus) DeepCopy() *MCPServerStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPServerStatus.
func (*MCPServerStatus) DeepCopyInto ¶
func (in *MCPServerStatus) DeepCopyInto(out *MCPServerStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MCPServerTool ¶
type MCPServerTool struct {
// Name is the tool name. Combined with the MCPServer name to form the
// child Tool CR name: <mcpserver>-<name>.
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:Pattern=`^[a-z0-9]([a-z0-9-]*[a-z0-9])?$`
Name string `json:"name"`
// Description is a human-readable description shown to the LLM.
// +optional
Description string `json:"description,omitempty"`
// InputSchema is a JSON Schema object for the tool's input parameters.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
InputSchema *runtime.RawExtension `json:"inputSchema,omitempty"`
}
MCPServerTool declares a single tool provided by an MCP server.
func (*MCPServerTool) DeepCopy ¶
func (in *MCPServerTool) DeepCopy() *MCPServerTool
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPServerTool.
func (*MCPServerTool) DeepCopyInto ¶
func (in *MCPServerTool) DeepCopyInto(out *MCPServerTool)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MCPToolCall ¶
type MCPToolCall struct {
// Tool is the MCP tool name to call (e.g. "get_file_contents").
// +kubebuilder:validation:MinLength=1
Tool string `json:"tool"`
// Arguments is a JSON object of tool arguments.
// String values may contain "{{item}}" placeholders when used in
// the Fetch step of an MCPIngestionSource.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Arguments *runtime.RawExtension `json:"arguments,omitempty"`
}
MCPToolCall specifies a single MCP tool invocation.
func (*MCPToolCall) DeepCopy ¶
func (in *MCPToolCall) DeepCopy() *MCPToolCall
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCPToolCall.
func (*MCPToolCall) DeepCopyInto ¶
func (in *MCPToolCall) DeepCopyInto(out *MCPToolCall)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MetaRouterConfig ¶
type MetaRouterConfig struct {
// ProviderRef is the name of a ModelProvider to use for routing decisions.
// Should be a cheap, fast model (e.g., a small local model or a flash variant).
ProviderRef string `json:"providerRef"`
// Threshold is the minimum rule-router confidence score below which the
// meta-router is invoked. Range 0.0–1.0. Defaults to 0.6.
// +kubebuilder:validation:Pattern=`^(0(\.\d+)?|1(\.0+)?)$`
// +kubebuilder:default="0.6"
// +optional
Threshold string `json:"threshold,omitempty"`
}
MetaRouterConfig configures the LLM-based meta-router.
func (*MetaRouterConfig) DeepCopy ¶
func (in *MetaRouterConfig) DeepCopy() *MetaRouterConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetaRouterConfig.
func (*MetaRouterConfig) DeepCopyInto ¶
func (in *MetaRouterConfig) DeepCopyInto(out *MetaRouterConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ModelConstraints ¶
type ModelConstraints struct {
// ContextWindow is the maximum number of tokens the model accepts.
// +optional
ContextWindow int `json:"contextWindow,omitempty"`
// MaxOutputTokens is the maximum number of tokens the model can generate.
// +optional
MaxOutputTokens int `json:"maxOutputTokens,omitempty"`
// MaxRequestTokens is the effective per-request token limit for this provider.
// When set, the router will not route requests whose estimated token count
// exceeds this value to this provider. Use this when the provider's account-level
// rate limit (e.g. TPM) is lower than the model's ContextWindow.
// 0 means no per-request limit (ContextWindow is used for sizing decisions).
// +optional
MaxRequestTokens int `json:"maxRequestTokens,omitempty"`
// CostPerMillionInputTokens is the USD cost per million input tokens as a decimal string.
// Example: "3.00" (i.e. $3 per million input tokens)
// +optional
CostPerMillionInputTokens string `json:"costPerMillionInputTokens,omitempty"`
// CostPerMillionOutputTokens is the USD cost per million output tokens as a decimal string.
// Example: "15.00" (i.e. $15 per million output tokens)
// +optional
CostPerMillionOutputTokens string `json:"costPerMillionOutputTokens,omitempty"`
// RPM is the account-level requests-per-minute budget for this provider's
// API key. Embedding calls are paced to stay under it. When unset, the
// operator applies built-in conservative presets keyed by the provider
// endpoint (e.g. Google AI Studio free tier, OpenAI tier 1).
// +optional
RPM int `json:"rpm,omitempty"`
// TPM is the account-level tokens-per-minute budget for this provider's
// API key. Embedding batches are sized and paced to stay under it. When
// unset, the operator applies built-in conservative presets keyed by the
// provider endpoint.
// +optional
TPM int `json:"tpm,omitempty"`
}
ModelConstraints describes a model's capacity limits and pricing.
func (*ModelConstraints) DeepCopy ¶
func (in *ModelConstraints) DeepCopy() *ModelConstraints
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelConstraints.
func (*ModelConstraints) DeepCopyInto ¶
func (in *ModelConstraints) DeepCopyInto(out *ModelConstraints)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ModelProvider ¶
type ModelProvider struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ModelProviderSpec `json:"spec,omitempty"`
Status ModelProviderStatus `json:"status,omitempty"`
}
ModelProvider registers an LLM endpoint for use by agents.
func (*ModelProvider) DeepCopy ¶
func (in *ModelProvider) DeepCopy() *ModelProvider
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelProvider.
func (*ModelProvider) DeepCopyInto ¶
func (in *ModelProvider) DeepCopyInto(out *ModelProvider)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ModelProvider) DeepCopyObject ¶
func (in *ModelProvider) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ModelProviderList ¶
type ModelProviderList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ModelProvider `json:"items"`
}
ModelProviderList contains a list of ModelProvider.
func (*ModelProviderList) DeepCopy ¶
func (in *ModelProviderList) DeepCopy() *ModelProviderList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelProviderList.
func (*ModelProviderList) DeepCopyInto ¶
func (in *ModelProviderList) DeepCopyInto(out *ModelProviderList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ModelProviderList) DeepCopyObject ¶
func (in *ModelProviderList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ModelProviderSpec ¶
type ModelProviderSpec struct {
// LiteLLMModel is the LiteLLM model identifier used to dispatch requests.
// Examples:
// "anthropic/claude-sonnet-4-6"
// "gemini/gemini-2.0-flash"
// "ollama/llama3.2"
// "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0"
// "openai/gpt-4o"
// +kubebuilder:validation:MinLength=1
LiteLLMModel string `json:"litellmModel"`
// BaseURL overrides the default API endpoint derived from the LiteLLM model prefix.
// Use this for self-hosted models (e.g. "http://ollama.default.svc:11434")
// or when the provider endpoint differs from the default.
// +optional
BaseURL string `json:"baseURL,omitempty"`
// WorkspaceID is the Anthropic workspace the request is billed to. When set,
// the model-router sends it as the "anthropic-workspace-id" header on every
// Messages API call. Anthropic rejects requests (HTTP 400) from API keys that
// are not scoped to a single workspace unless this header is present.
// Only used for "anthropic/" models without a baseURL override.
// +optional
WorkspaceID string `json:"workspaceID,omitempty"`
// CredentialsRef points to the Secret containing the provider API key.
// The model-router sidecar mounts this secret directly; the operator never reads it.
CredentialsRef SecretKeyRef `json:"credentialsRef"`
// Capabilities tags this model's strengths, used by the rule-based router.
// Known values: reasoning, code, vision, fast, long-context, cheap
// +optional
Capabilities []string `json:"capabilities,omitempty"`
// Constraints describes the model's resource limits and pricing.
// +optional
Constraints ModelConstraints `json:"constraints,omitempty"`
// LatencyProfile is a coarse latency classification used by the router.
// +kubebuilder:validation:Enum=fast;medium;slow
// +kubebuilder:default=medium
// +optional
LatencyProfile string `json:"latencyProfile,omitempty"`
// QueryPrompt is an optional prefix prepended to query text before embedding.
// Required by some open-source embedding models (e.g. nomic-embed-text via
// Ollama) that need task-specific instructions to produce retrieval-quality
// vectors. When set, this prefix is applied to _rag_search query embeddings.
// Example: "search_query: "
// +optional
QueryPrompt string `json:"queryPrompt,omitempty"`
// DocPrompt is an optional prefix prepended to document chunks before embedding.
// Required by some open-source embedding models (e.g. nomic-embed-text via
// Ollama) that need task-specific instructions to produce retrieval-quality
// vectors. When set, this prefix is applied to _rag_ingest document embeddings.
// Example: "search_document: "
// +optional
DocPrompt string `json:"docPrompt,omitempty"`
}
ModelProviderSpec defines a connection to an LLM endpoint via a LiteLLM model string.
func (*ModelProviderSpec) DeepCopy ¶
func (in *ModelProviderSpec) DeepCopy() *ModelProviderSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelProviderSpec.
func (*ModelProviderSpec) DeepCopyInto ¶
func (in *ModelProviderSpec) DeepCopyInto(out *ModelProviderSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ModelProviderStatus ¶
type ModelProviderStatus struct {
// Ready indicates the provider endpoint is reachable and credentials are valid.
// +optional
Ready bool `json:"ready,omitempty"`
// Message contains a human-readable status message.
// +optional
Message string `json:"message,omitempty"`
// LastChecked is the last time the provider was health-checked.
// +optional
LastChecked *metav1.Time `json:"lastChecked,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
ModelProviderStatus defines the observed state of a ModelProvider.
func (*ModelProviderStatus) DeepCopy ¶
func (in *ModelProviderStatus) DeepCopy() *ModelProviderStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelProviderStatus.
func (*ModelProviderStatus) DeepCopyInto ¶
func (in *ModelProviderStatus) DeepCopyInto(out *ModelProviderStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ModelSelector ¶
type ModelSelector struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ModelSelectorSpec `json:"spec,omitempty"`
Status ModelSelectorStatus `json:"status,omitempty"`
}
ModelSelector defines a routing policy across multiple ModelProviders.
func (*ModelSelector) DeepCopy ¶
func (in *ModelSelector) DeepCopy() *ModelSelector
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelSelector.
func (*ModelSelector) DeepCopyInto ¶
func (in *ModelSelector) DeepCopyInto(out *ModelSelector)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ModelSelector) DeepCopyObject ¶
func (in *ModelSelector) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ModelSelectorList ¶
type ModelSelectorList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ModelSelector `json:"items"`
}
ModelSelectorList contains a list of ModelSelector.
func (*ModelSelectorList) DeepCopy ¶
func (in *ModelSelectorList) DeepCopy() *ModelSelectorList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelSelectorList.
func (*ModelSelectorList) DeepCopyInto ¶
func (in *ModelSelectorList) DeepCopyInto(out *ModelSelectorList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ModelSelectorList) DeepCopyObject ¶
func (in *ModelSelectorList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ModelSelectorSpec ¶
type ModelSelectorSpec struct {
// Strategy determines how the model-router selects a provider for each request.
// - rule-based: deterministic routing via capability tags, cost, and latency SLOs
// - llm-meta: a cheap LLM decides which model to use for each request
// - hybrid: rule-based fast path with LLM meta-router for low-confidence cases
// +kubebuilder:validation:Enum=rule-based;llm-meta;hybrid
// +kubebuilder:default=rule-based
// +optional
Strategy string `json:"strategy,omitempty"`
// Providers lists the ModelProviders available to this selector and their weights.
// Weights are used for weighted random selection when no other routing rule applies.
// +kubebuilder:validation:MinItems=1
Providers []ProviderWeight `json:"providers"`
// FallbackChain is an ordered list of ModelProvider names used when a provider
// returns a 429 or 5xx. The router tries each in order.
// +optional
FallbackChain []string `json:"fallbackChain,omitempty"`
// BudgetCap enforces spending limits per run and per day.
// +optional
BudgetCap *BudgetCap `json:"budgetCap,omitempty"`
// CapabilityRouting maps capability tags to preferred provider names.
// Example: {"code": "gpt-4o", "reasoning": "claude-sonnet", "fast": "llama3-local"}
// +optional
CapabilityRouting map[string]string `json:"capabilityRouting,omitempty"`
// MetaRouter configures the LLM meta-router used in "llm-meta" and "hybrid" strategies.
// +optional
MetaRouter *MetaRouterConfig `json:"metaRouter,omitempty"`
}
ModelSelectorSpec defines a routing policy across one or more ModelProviders.
func (*ModelSelectorSpec) DeepCopy ¶
func (in *ModelSelectorSpec) DeepCopy() *ModelSelectorSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelSelectorSpec.
func (*ModelSelectorSpec) DeepCopyInto ¶
func (in *ModelSelectorSpec) DeepCopyInto(out *ModelSelectorSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ModelSelectorStatus ¶
type ModelSelectorStatus struct {
// ActiveProviders lists ModelProvider names that are currently healthy.
// +optional
ActiveProviders []string `json:"activeProviders,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
ModelSelectorStatus defines the observed state of a ModelSelector.
func (*ModelSelectorStatus) DeepCopy ¶
func (in *ModelSelectorStatus) DeepCopy() *ModelSelectorStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModelSelectorStatus.
func (*ModelSelectorStatus) DeepCopyInto ¶
func (in *ModelSelectorStatus) DeepCopyInto(out *ModelSelectorStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NetworkIsolationSpec ¶
type NetworkIsolationSpec struct {
// SplitPod runs the agent and model-router in separate Pods with distinct NetworkPolicies.
// The agent pod's egress is restricted to the router Service (ports 8080/8082) and DNS.
// The router pod retains all required egress (provider HTTPS, Kubernetes API, Redis, tools).
// This provides a Kubernetes-level network guarantee that agent code cannot open arbitrary
// outbound connections when platform policy requires all LLM traffic to go via model-router.
// +kubebuilder:default=false
// +optional
SplitPod bool `json:"splitPod,omitempty"`
}
NetworkIsolationSpec configures split-pod topology for agent/router network separation.
func (*NetworkIsolationSpec) DeepCopy ¶
func (in *NetworkIsolationSpec) DeepCopy() *NetworkIsolationSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkIsolationSpec.
func (*NetworkIsolationSpec) DeepCopyInto ¶
func (in *NetworkIsolationSpec) DeepCopyInto(out *NetworkIsolationSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PodSecurityOverride ¶
type PodSecurityOverride struct {
// Privileged grants the agent container full privileges (CAP_NET_ADMIN,
// /dev/net/tun device access, seccomp/capability enforcement disabled). Use this
// for tun-device VPNs. Mutually exclusive with AddCapabilities.
// +optional
Privileged bool `json:"privileged,omitempty"`
// AddCapabilities adds specific capabilities to the agent container while keeping
// the restricted profile otherwise (e.g. ["NET_ADMIN"] + a /dev/net/tun hostPath
// mount). Mutually exclusive with Privileged.
// +optional
AddCapabilities []string `json:"addCapabilities,omitempty"`
// RunAsUser overrides the default non-root UID (65532). 0 (root) is permitted only
// when Privileged is true or a capability that requires root (e.g. NET_ADMIN to
// create network interfaces) is added; the webhook enforces this.
// +optional
RunAsUser *int64 `json:"runAsUser,omitempty"`
// ReadOnlyRootFilesystem overrides the default read-only root filesystem of the
// agent container. When omitted and Privileged is true, defaults to writable
// (false) since some security tooling writes helpers/logs to the root FS; when
// omitted and non-privileged, retains the restricted default (true).
// +optional
ReadOnlyRootFilesystem *bool `json:"readOnlyRootFilesystem,omitempty"`
}
PodSecurityOverride describes a scoped relaxation of the restricted pod-security baseline for the agent container of an Agent. See AgentRuntime.
func (*PodSecurityOverride) DeepCopy ¶
func (in *PodSecurityOverride) DeepCopy() *PodSecurityOverride
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityOverride.
func (*PodSecurityOverride) DeepCopyInto ¶
func (in *PodSecurityOverride) DeepCopyInto(out *PodSecurityOverride)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderWeight ¶
type ProviderWeight struct {
// Name is the name of a ModelProvider in the same namespace.
Name string `json:"name"`
// Weight controls the probability of selecting this provider when using weighted
// random selection. Higher values mean more traffic. Defaults to 100.
// Set to 0 to exclude from random selection (meta-router and error fallback only).
// +kubebuilder:default=100
// +optional
Weight int `json:"weight,omitempty"`
// RoutingHint is a short description passed to the LLM meta-router to help it
// decide when to select this provider. Example:
// "Use for complex, security-sensitive changes: auth, crypto, architecture."
// +optional
RoutingHint string `json:"routingHint,omitempty"`
}
ProviderWeight pairs a ModelProvider name with a routing weight.
func (*ProviderWeight) DeepCopy ¶
func (in *ProviderWeight) DeepCopy() *ProviderWeight
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderWeight.
func (*ProviderWeight) DeepCopyInto ¶
func (in *ProviderWeight) DeepCopyInto(out *ProviderWeight)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RegexPattern ¶
type RegexPattern struct {
// Name identifies this pattern (e.g. "ssn", "email", "credit-card").
Name string `json:"name"`
// Pattern is a Go-compatible regular expression.
// +kubebuilder:validation:MinLength=1
Pattern string `json:"pattern"`
// Replacement is the string that replaces matched content when action is "redact".
// +optional
Replacement string `json:"replacement,omitempty"`
}
RegexPattern defines a named regex match/replace rule.
func (*RegexPattern) DeepCopy ¶
func (in *RegexPattern) DeepCopy() *RegexPattern
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RegexPattern.
func (*RegexPattern) DeepCopyInto ¶
func (in *RegexPattern) DeepCopyInto(out *RegexPattern)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceRequirements ¶
type ResourceRequirements = corev1.ResourceRequirements
ResourceRequirements mirrors corev1.ResourceRequirements.
type RoutingDecision ¶
type RoutingDecision struct {
// Model is the selected model identifier (e.g. "anthropic/claude-sonnet-4-6").
Model string `json:"model"`
// Provider is the ModelProvider CRD name that was selected.
Provider string `json:"provider"`
// Strategy is the routing strategy used (e.g. "rule-based", "llm-meta", "hybrid").
Strategy string `json:"strategy,omitempty"`
// Reason is a human-readable explanation of why this provider was chosen.
Reason string `json:"reason,omitempty"`
// Confidence is a 0.0–1.0 score indicating routing confidence.
// +optional
Confidence string `json:"confidence,omitempty"`
// Timestamp is when the routing decision was made.
// +optional
Timestamp *metav1.Time `json:"timestamp,omitempty"`
}
RoutingDecision records a single model routing decision made during an AgentRun.
func (*RoutingDecision) DeepCopy ¶
func (in *RoutingDecision) DeepCopy() *RoutingDecision
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoutingDecision.
func (*RoutingDecision) DeepCopyInto ¶
func (in *RoutingDecision) DeepCopyInto(out *RoutingDecision)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RunBudget ¶ added in v0.9.0
type RunBudget struct {
// MaxUSD is the spend, in USD, at which the run fails or pauses. Example: "2.50".
// +kubebuilder:validation:Pattern=`^[0-9]+(\.[0-9]+)?$`
MaxUSD string `json:"maxUSD"`
// WarnAtPercent is the share of the cap at which a warning is emitted (a
// trace event and a Kubernetes event). Default 80.
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=99
// +kubebuilder:default=80
// +optional
WarnAtPercent int `json:"warnAtPercent,omitempty"`
// OnExceeded is what happens at the cap: "fail" (default) halts the run;
// "pause" holds it until an approver raises the cap or the pause times out.
// Pausing needs PostgreSQL (approvals are stored there); without it a run that
// reaches its cap fails.
// +kubebuilder:default=fail
// +optional
OnExceeded RunBudgetAction `json:"onExceeded,omitempty"`
// RaiseByUSD is how much one approval adds to the cap. Defaults to MaxUSD.
// +kubebuilder:validation:Pattern=`^[0-9]+(\.[0-9]+)?$`
// +optional
RaiseByUSD string `json:"raiseByUSD,omitempty"`
// PauseTimeout is how long a paused run waits for a decision before it fails.
// Default 24h.
// +optional
PauseTimeout *metav1.Duration `json:"pauseTimeout,omitempty"`
// ApproverGroups are the identity-provider groups whose members may decide a
// raise. Empty lets any user with access to the run's namespace decide.
// +optional
ApproverGroups []string `json:"approverGroups,omitempty"`
}
RunBudget caps an AgentRun's model spend.
func (*RunBudget) DeepCopy ¶ added in v0.9.0
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunBudget.
func (*RunBudget) DeepCopyInto ¶ added in v0.9.0
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RunBudgetAction ¶ added in v0.9.0
type RunBudgetAction string
RunBudgetAction is what happens when a run reaches its budget. +kubebuilder:validation:Enum=fail;pause
const ( // RunBudgetFail halts the run, like a safeguard trip. RunBudgetFail RunBudgetAction = "fail" // RunBudgetPause holds the run (its agent keeps waiting, with sandbox and // workspace intact) and asks approvers to raise the cap or close it. RunBudgetPause RunBudgetAction = "pause" )
type RunBudgetState ¶ added in v0.9.0
type RunBudgetState string
RunBudgetState is where a run stands against its budget. +kubebuilder:validation:Enum=ok;warning;exceeded
const ( RunBudgetOK RunBudgetState = "ok" RunBudgetWarning RunBudgetState = "warning" RunBudgetExceeded RunBudgetState = "exceeded" )
Run budget states.
type RunBudgetStatus ¶ added in v0.9.0
type RunBudgetStatus struct {
// State is ok, warning (past warnAtPercent) or exceeded (paused or failing).
State RunBudgetState `json:"state"`
// CapUSD is the current cap: spec.budget.maxUSD plus the approved raises. Only
// the operator sets it, never the model-router.
CapUSD string `json:"capUSD"`
// SpentUSD is the spend the model-router last reported.
// +optional
SpentUSD string `json:"spentUSD,omitempty"`
// Raises counts the approved raises.
// +optional
Raises int `json:"raises,omitempty"`
// UpdatedAt is when the router last reported.
// +optional
UpdatedAt *metav1.Time `json:"updatedAt,omitempty"`
}
RunBudgetStatus is the observed state of a run's budget.
func (*RunBudgetStatus) DeepCopy ¶ added in v0.9.0
func (in *RunBudgetStatus) DeepCopy() *RunBudgetStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunBudgetStatus.
func (*RunBudgetStatus) DeepCopyInto ¶ added in v0.9.0
func (in *RunBudgetStatus) DeepCopyInto(out *RunBudgetStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type S3IngestionSource ¶
type S3IngestionSource struct {
// Bucket is the S3 bucket name.
Bucket string `json:"bucket"`
// Prefix filters objects by key prefix.
// +optional
Prefix string `json:"prefix,omitempty"`
// Region is the AWS region (or S3-compatible endpoint region).
// +optional
Region string `json:"region,omitempty"`
// Endpoint is the S3-compatible API endpoint (e.g. "http://minio.default.svc:9000"
// for MinIO). Empty means AWS S3.
// +optional
Endpoint string `json:"endpoint,omitempty"`
// SecretRef references a Secret containing AWS credentials.
// Expected keys: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY.
// +optional
SecretRef *SecretKeyRef `json:"secretRef,omitempty"`
}
S3IngestionSource configures document ingestion from S3-compatible storage.
func (*S3IngestionSource) DeepCopy ¶
func (in *S3IngestionSource) DeepCopy() *S3IngestionSource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3IngestionSource.
func (*S3IngestionSource) DeepCopyInto ¶
func (in *S3IngestionSource) DeepCopyInto(out *S3IngestionSource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxAccess ¶ added in v0.8.0
type SandboxAccess string
SandboxAccess selects the set of protocol operations an egress endpoint permits. +kubebuilder:validation:Enum=read-only;read-write;full
const ( // SandboxAccessReadOnly permits read operations (e.g. HTTP GET/HEAD). SandboxAccessReadOnly SandboxAccess = "read-only" // SandboxAccessReadWrite permits read and write operations. SandboxAccessReadWrite SandboxAccess = "read-write" // SandboxAccessFull permits every operation the protocol supports. SandboxAccessFull SandboxAccess = "full" )
type SandboxApproval ¶ added in v0.9.0
type SandboxApproval struct {
// ApproverGroups are the identity-provider groups whose members may decide.
// Empty lets any user with access to the run's namespace decide.
// +optional
ApproverGroups []string `json:"approverGroups,omitempty"`
// Timeout is how long a request waits for a decision before it is rejected.
// Default 30m.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// AutoApprove allows matching requests without a person. A request the
// sandbox's policy prover flags with security notes is never auto-approved.
// +optional
AutoApprove []SandboxAutoApproveRule `json:"autoApprove,omitempty"`
}
SandboxApproval configures egress approvals for a SandboxClass.
func (*SandboxApproval) DeepCopy ¶ added in v0.9.0
func (in *SandboxApproval) DeepCopy() *SandboxApproval
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxApproval.
func (*SandboxApproval) DeepCopyInto ¶ added in v0.9.0
func (in *SandboxApproval) DeepCopyInto(out *SandboxApproval)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxAutoApproveRule ¶ added in v0.9.0
type SandboxAutoApproveRule struct {
// Host is the destination host, or a wildcard such as *.example.com.
// +kubebuilder:validation:MinLength=1
Host string `json:"host"`
// Ports the request may name. Default [443].
// +optional
Ports []int32 `json:"ports,omitempty"`
// Binaries the requesting process may be (absolute paths). Empty matches any.
// +optional
Binaries []string `json:"binaries,omitempty"`
}
SandboxAutoApproveRule matches egress requests to approve automatically.
func (*SandboxAutoApproveRule) DeepCopy ¶ added in v0.9.0
func (in *SandboxAutoApproveRule) DeepCopy() *SandboxAutoApproveRule
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxAutoApproveRule.
func (*SandboxAutoApproveRule) DeepCopyInto ¶ added in v0.9.0
func (in *SandboxAutoApproveRule) DeepCopyInto(out *SandboxAutoApproveRule)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxClass ¶ added in v0.9.0
type SandboxClass struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec SandboxClassSpec `json:"spec,omitempty"`
}
SandboxClass is a cluster-wide sandbox profile: egress, filesystem, resource defaults, placement and minimum enforcement. Agents use one with spec.runtime.sandbox.classRef and may add to it, but not weaken it.
func (*SandboxClass) DeepCopy ¶ added in v0.9.0
func (in *SandboxClass) DeepCopy() *SandboxClass
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxClass.
func (*SandboxClass) DeepCopyInto ¶ added in v0.9.0
func (in *SandboxClass) DeepCopyInto(out *SandboxClass)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*SandboxClass) DeepCopyObject ¶ added in v0.9.0
func (in *SandboxClass) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type SandboxClassList ¶ added in v0.9.0
type SandboxClassList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []SandboxClass `json:"items"`
}
SandboxClassList contains a list of SandboxClass.
func (*SandboxClassList) DeepCopy ¶ added in v0.9.0
func (in *SandboxClassList) DeepCopy() *SandboxClassList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxClassList.
func (*SandboxClassList) DeepCopyInto ¶ added in v0.9.0
func (in *SandboxClassList) DeepCopyInto(out *SandboxClassList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*SandboxClassList) DeepCopyObject ¶ added in v0.9.0
func (in *SandboxClassList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type SandboxClassSpec ¶ added in v0.9.0
type SandboxClassSpec struct {
// NamespaceSelector limits which namespaces' Agents may use the class. Empty
// allows every namespace that has opted in to sandboxes.
// +optional
NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty"`
// Enforcement is the minimum network enforcement for Agents of this class:
// with enforce, an Agent cannot weaken it to audit.
// +optional
Enforcement SandboxEnforcement `json:"enforcement,omitempty"`
// EgressPresets add vetted read-only host lists, e.g. go or npm.
// +optional
EgressPresets []SandboxEgressPreset `json:"egressPresets,omitempty"`
// Egress adds endpoints every Agent of the class may reach, on top of the
// Agent's own.
// +optional
Egress []SandboxEgressRule `json:"egress,omitempty"`
// Filesystem adds paths every Agent of the class gets.
// +optional
Filesystem *SandboxFilesystem `json:"filesystem,omitempty"`
// Resources are the defaults for Agents that set no spec.resources.
// +optional
Resources *ResourceRequirements `json:"resources,omitempty"`
// NodeSelector, Tolerations, RuntimeClassName and PriorityClassName place the
// class's sandbox pods, replacing the operator-wide openshell.placement. They
// live here, not on the Agent, because a toleration can admit a pod to any
// tainted node; the class is cluster-scoped, so only cluster admins set them.
// They need the gateway's drivers.kubernetes.allowDriverConfig.
// +optional
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
// +optional
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
// +optional
RuntimeClassName string `json:"runtimeClassName,omitempty"`
// +optional
PriorityClassName string `json:"priorityClassName,omitempty"`
// Approval governs requests for egress the policy does not allow: a
// sandbox that tries to reach an unlisted host gets a proposed rule, which
// an auto-approve rule or an approver may allow while the run continues.
// Without it such requests stay denied.
// +optional
Approval *SandboxApproval `json:"approval,omitempty"`
}
SandboxClassSpec is a reusable sandbox profile set by cluster admins.
func (*SandboxClassSpec) DeepCopy ¶ added in v0.9.0
func (in *SandboxClassSpec) DeepCopy() *SandboxClassSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxClassSpec.
func (*SandboxClassSpec) DeepCopyInto ¶ added in v0.9.0
func (in *SandboxClassSpec) DeepCopyInto(out *SandboxClassSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxEgressPreset ¶ added in v0.9.0
type SandboxEgressPreset string
SandboxEgressPreset names a vetted set of package-registry and source hosts. +kubebuilder:validation:Enum=go;npm;pypi;crates;maven;github-read;mise
const ( SandboxEgressPresetGo SandboxEgressPreset = "go" SandboxEgressPresetNPM SandboxEgressPreset = "npm" SandboxEgressPresetPyPI SandboxEgressPreset = "pypi" SandboxEgressPresetCrates SandboxEgressPreset = "crates" SandboxEgressPresetMaven SandboxEgressPreset = "maven" SandboxEgressPresetGitHubRead SandboxEgressPreset = "github-read" SandboxEgressPresetMise SandboxEgressPreset = "mise" )
Egress presets. Each expands to read-only rules for the ecosystem's hosts (see internal/openshell/presets.go).
type SandboxEgressRule ¶ added in v0.8.0
type SandboxEgressRule struct {
// Host is the destination hostname. Wildcards like "*.pythonhosted.org" are supported.
// +kubebuilder:validation:MinLength=1
Host string `json:"host"`
// Ports lists the destination ports. Defaults to [443].
// +kubebuilder:validation:items:Minimum=1
// +kubebuilder:validation:items:Maximum=65535
// +optional
Ports []int32 `json:"ports,omitempty"`
// Access selects the permitted HTTP operations. read-only (the default) allows
// GET/HEAD/OPTIONS, enough for package downloads; git clone over HTTPS POSTs,
// so it needs read-write.
// +kubebuilder:default=read-only
// +optional
Access SandboxAccess `json:"access,omitempty"`
// Binaries restricts the rule to these executables (absolute paths, e.g.
// /usr/bin/git). Empty means any binary in the sandbox.
// +optional
Binaries []string `json:"binaries,omitempty"`
}
SandboxEgressRule allows the agent to reach one host.
func (*SandboxEgressRule) DeepCopy ¶ added in v0.8.0
func (in *SandboxEgressRule) DeepCopy() *SandboxEgressRule
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxEgressRule.
func (*SandboxEgressRule) DeepCopyInto ¶ added in v0.8.0
func (in *SandboxEgressRule) DeepCopyInto(out *SandboxEgressRule)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxEnforcement ¶ added in v0.8.0
type SandboxEnforcement string
SandboxEnforcement controls whether the sandbox's network policy blocks violations or only records them. +kubebuilder:validation:Enum=audit;enforce
const ( // SandboxEnforcementAudit logs L7 policy violations without blocking them. SandboxEnforcementAudit SandboxEnforcement = "audit" // SandboxEnforcementEnforce blocks L7 policy violations. SandboxEnforcementEnforce SandboxEnforcement = "enforce" )
type SandboxFilesystem ¶ added in v0.8.0
type SandboxFilesystem struct {
// ReadOnly lists extra directories the agent may read.
// +optional
ReadOnly []string `json:"readOnly,omitempty"`
// ReadWrite lists extra directories the agent may read and write.
// +optional
ReadWrite []string `json:"readWrite,omitempty"`
}
SandboxFilesystem adds paths to the sandbox filesystem policy.
func (*SandboxFilesystem) DeepCopy ¶ added in v0.8.0
func (in *SandboxFilesystem) DeepCopy() *SandboxFilesystem
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxFilesystem.
func (*SandboxFilesystem) DeepCopyInto ¶ added in v0.8.0
func (in *SandboxFilesystem) DeepCopyInto(out *SandboxFilesystem)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxGitHub ¶ added in v0.9.0
type SandboxGitHub struct {
// Repositories are the "owner/name" repositories the token is scoped to.
// They must belong to the account the operator's GitHub App is installed on.
// +kubebuilder:validation:MinItems=1
// +kubebuilder:validation:MaxItems=50
Repositories []string `json:"repositories"`
// Push allows git push (contents: write). Without it the token can only
// clone and fetch.
// +optional
Push bool `json:"push,omitempty"`
}
SandboxGitHub configures git access to GitHub from a sandbox.
func (*SandboxGitHub) DeepCopy ¶ added in v0.9.0
func (in *SandboxGitHub) DeepCopy() *SandboxGitHub
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxGitHub.
func (*SandboxGitHub) DeepCopyInto ¶ added in v0.9.0
func (in *SandboxGitHub) DeepCopyInto(out *SandboxGitHub)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SandboxProvider ¶ added in v0.8.0
type SandboxProvider string
SandboxProvider names a sandbox runtime implementation. +kubebuilder:validation:Enum=openshell
const ( // SandboxProviderOpenShell runs the agent in an NVIDIA OpenShell sandbox. SandboxProviderOpenShell SandboxProvider = "openshell" )
type SandboxSpec ¶ added in v0.8.0
type SandboxSpec struct {
// ClassRef names a cluster-scoped SandboxClass whose egress, filesystem,
// resource defaults, placement and minimum enforcement apply to this Agent.
// The Agent's own settings add to the class but cannot weaken it.
// +optional
ClassRef string `json:"classRef,omitempty"`
// Provider selects the sandbox runtime.
// +kubebuilder:default=openshell
Provider SandboxProvider `json:"provider"`
// Enforcement is the network policy mode. Start with audit, then promote to
// enforce once the run's egress has been observed.
// +kubebuilder:default=audit
// +optional
Enforcement SandboxEnforcement `json:"enforcement,omitempty"`
// Egress lists extra endpoints the agent process may reach directly, such as
// package registries for installing tools. The model-router is always
// reachable, and the Agent's tools are added per spec.runtime.sandbox.tools;
// everything else is denied.
// +optional
Egress []SandboxEgressRule `json:"egress,omitempty"`
// EgressPresets add vetted read-only host lists for package registries and
// sources, e.g. go (module proxy and checksum database) or npm.
// +optional
EgressPresets []SandboxEgressPreset `json:"egressPresets,omitempty"`
// Tools controls whether the agent process may reach its tools' endpoints
// directly from the sandbox. By default it can: each Tool's networkEgress
// hosts and the URL of each remote (http/sse) MCP tool are added to the
// sandbox egress. Tool calls made through the model-router are unaffected.
// +optional
Tools *SandboxTools `json:"tools,omitempty"`
// Filesystem adds paths to the sandbox's default filesystem policy
// (read-write: /sandbox, /tmp; read-only: system paths).
// +optional
Filesystem *SandboxFilesystem `json:"filesystem,omitempty"`
// GitHub gives the agent git access (clone, fetch and optionally push) to
// GitHub repositories over HTTPS, using an installation token of the
// operator's GitHub App. The token is minted per run, narrowed to these
// repositories, refreshed before it expires, and never visible to the
// agent: the workload holds a placeholder that the sandbox supervisor
// replaces on requests from git to github.com only. Which branches a push
// may update is governed by the repositories' rulesets on GitHub.
// +optional
GitHub *SandboxGitHub `json:"github,omitempty"`
}
SandboxSpec configures the sandbox runtime for an Agent.
func (*SandboxSpec) DeepCopy ¶ added in v0.8.0
func (in *SandboxSpec) DeepCopy() *SandboxSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxSpec.
func (*SandboxSpec) DeepCopyInto ¶ added in v0.8.0
func (in *SandboxSpec) DeepCopyInto(out *SandboxSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*SandboxSpec) InheritsToolEgress ¶ added in v0.8.0
func (s *SandboxSpec) InheritsToolEgress() bool
InheritsToolEgress reports whether the sandbox gets the Agent's tool endpoints. It defaults to true, including when Tools is unset.
type SandboxTools ¶ added in v0.8.0
type SandboxTools struct {
// Inherit adds the Agent's tool endpoints to the sandbox egress. Set it to
// false to keep tools reachable only through the model-router.
// +kubebuilder:default=true
// +optional
Inherit *bool `json:"inherit,omitempty"`
// ExcludeTools lists Tool names (from spec.tools) whose endpoints are not added.
// +optional
ExcludeTools []string `json:"excludeTools,omitempty"`
// ExcludeHosts lists hosts that are not added even when a tool declares them.
// Matched exactly against the tool's host. It does not filter spec.runtime.sandbox.egress.
// +optional
ExcludeHosts []string `json:"excludeHosts,omitempty"`
}
SandboxTools selects which of the Agent's tool endpoints the sandbox may reach.
func (*SandboxTools) DeepCopy ¶ added in v0.8.0
func (in *SandboxTools) DeepCopy() *SandboxTools
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SandboxTools.
func (*SandboxTools) DeepCopyInto ¶ added in v0.8.0
func (in *SandboxTools) DeepCopyInto(out *SandboxTools)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SecretKeyRef ¶
type SecretKeyRef struct {
// Name of the Secret.
Name string `json:"name"`
// Key within the Secret.
Key string `json:"key"`
// Namespace of the Secret. Defaults to the same namespace as the referencing resource.
// +optional
Namespace string `json:"namespace,omitempty"`
}
SecretKeyRef references a key in a Kubernetes Secret.
func (*SecretKeyRef) DeepCopy ¶
func (in *SecretKeyRef) DeepCopy() *SecretKeyRef
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretKeyRef.
func (*SecretKeyRef) DeepCopyInto ¶
func (in *SecretKeyRef) DeepCopyInto(out *SecretKeyRef)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SecretMount ¶
type SecretMount struct {
// Name of the Secret in the same namespace.
Name string `json:"name"`
// MountPath is the filesystem path where the Secret should be mounted.
// If empty, the Secret's keys are injected as environment variables instead.
// +optional
MountPath string `json:"mountPath,omitempty"`
}
SecretMount references a Kubernetes Secret to mount into a tool pod or sidecar.
func (*SecretMount) DeepCopy ¶
func (in *SecretMount) DeepCopy() *SecretMount
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretMount.
func (*SecretMount) DeepCopyInto ¶
func (in *SecretMount) DeepCopyInto(out *SecretMount)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StepEnvVar ¶ added in v0.9.0
type StepEnvVar struct {
// Name of the variable.
// +kubebuilder:validation:Pattern=`^[A-Za-z_][A-Za-z0-9_]*$`
Name string `json:"name"`
// Value of the variable; may use {{steps.<name>.output}}.
Value string `json:"value"`
}
StepEnvVar is one environment variable of a container step.
func (*StepEnvVar) DeepCopy ¶ added in v0.9.0
func (in *StepEnvVar) DeepCopy() *StepEnvVar
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StepEnvVar.
func (*StepEnvVar) DeepCopyInto ¶ added in v0.9.0
func (in *StepEnvVar) DeepCopyInto(out *StepEnvVar)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StepProposal ¶
type StepProposal struct {
// ProposingStep is the name of the workflow step whose agent made the proposal.
ProposingStep string `json:"proposingStep"`
// ProposedStep is the step definition that was proposed.
ProposedStep WorkflowStep `json:"proposedStep"`
// Approved indicates whether the proposal was accepted.
Approved bool `json:"approved"`
// Reason explains why the proposal was approved or rejected.
// +optional
Reason string `json:"reason,omitempty"`
// Timestamp is when the proposal was evaluated.
Timestamp metav1.Time `json:"timestamp"`
// PendingHumanApproval is true when the proposal requires human review.
// The proposing step is paused (WaitingForInput) until a human responds.
// +optional
PendingHumanApproval bool `json:"pendingHumanApproval,omitempty"`
}
StepProposal records a dynamic step proposal from an agent, for auditability.
func (*StepProposal) DeepCopy ¶
func (in *StepProposal) DeepCopy() *StepProposal
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StepProposal.
func (*StepProposal) DeepCopyInto ¶
func (in *StepProposal) DeepCopyInto(out *StepProposal)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantConfig ¶
type TenantConfig struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec TenantConfigSpec `json:"spec,omitempty"`
Status TenantConfigStatus `json:"status,omitempty"`
}
TenantConfig defines authentication and authorization for an enterprise tenant accessing agent-orca's external API.
func (*TenantConfig) DeepCopy ¶
func (in *TenantConfig) DeepCopy() *TenantConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantConfig.
func (*TenantConfig) DeepCopyInto ¶
func (in *TenantConfig) DeepCopyInto(out *TenantConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*TenantConfig) DeepCopyObject ¶
func (in *TenantConfig) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type TenantConfigList ¶
type TenantConfigList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []TenantConfig `json:"items"`
}
TenantConfigList contains a list of TenantConfig.
func (*TenantConfigList) DeepCopy ¶
func (in *TenantConfigList) DeepCopy() *TenantConfigList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantConfigList.
func (*TenantConfigList) DeepCopyInto ¶
func (in *TenantConfigList) DeepCopyInto(out *TenantConfigList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*TenantConfigList) DeepCopyObject ¶
func (in *TenantConfigList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type TenantConfigSpec ¶
type TenantConfigSpec struct {
// AuthMode selects the authentication strategy for this tenant.
// "issued" — agent-orca issues OAuth2 tokens via client_credentials grant.
// "federated" — agent-orca trusts JWTs from the tenant's external IdP.
// +kubebuilder:validation:Enum=issued;federated
AuthMode string `json:"authMode"`
// Issued configures agent-orca-issued OAuth2 client credentials.
// Required when AuthMode is "issued".
// +optional
Issued *IssuedAuthConfig `json:"issued,omitempty"`
// Federated configures trust for an external OIDC identity provider.
// Required when AuthMode is "federated".
// +optional
Federated *FederatedAuthConfig `json:"federated,omitempty"`
// AllowedNamespaces is the set of Kubernetes namespaces whose agents and
// resources this tenant is authorized to access. The operator resolves each
// agent to the namespace it actually lives in — which must be one of these —
// when a task is submitted or an ACP run is created, so a single tenant can
// span multiple namespaces. List operations (agents, runs) span the whole set;
// per-request writes are directed to the agent's namespace.
// +kubebuilder:validation:MinItems=1
AllowedNamespaces []string `json:"allowedNamespaces"`
// AllowedAgents restricts which agents this tenant may invoke.
// An empty list means no agents are allowed; omitting the field allows all agents
// in the allowed namespaces.
// +optional
AllowedAgents []string `json:"allowedAgents,omitempty"`
// RateLimit configures request rate limiting for this tenant.
// +optional
RateLimit *TenantRateLimit `json:"rateLimit,omitempty"`
// BudgetPerDayUSD is the maximum daily spend in USD for this tenant.
// Enforced across all runs in the allowed namespaces attributed to this tenant.
// +optional
BudgetPerDayUSD string `json:"budgetPerDayUSD,omitempty"`
}
TenantConfigSpec defines authentication and authorization for an enterprise tenant.
func (*TenantConfigSpec) DeepCopy ¶
func (in *TenantConfigSpec) DeepCopy() *TenantConfigSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantConfigSpec.
func (*TenantConfigSpec) DeepCopyInto ¶
func (in *TenantConfigSpec) DeepCopyInto(out *TenantConfigSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantConfigStatus ¶
type TenantConfigStatus struct {
// Ready indicates the tenant configuration has been validated and is active.
// +optional
Ready bool `json:"ready,omitempty"`
// Message contains a human-readable status message.
// +optional
Message string `json:"message,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
TenantConfigStatus holds the observed state of a TenantConfig.
func (*TenantConfigStatus) DeepCopy ¶
func (in *TenantConfigStatus) DeepCopy() *TenantConfigStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantConfigStatus.
func (*TenantConfigStatus) DeepCopyInto ¶
func (in *TenantConfigStatus) DeepCopyInto(out *TenantConfigStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantRateLimit ¶
type TenantRateLimit struct {
// RequestsPerMinute is the maximum number of task submissions per minute.
// +optional
RequestsPerMinute int `json:"requestsPerMinute,omitempty"`
// ConcurrentRuns is the maximum number of simultaneously running AgentRuns.
// +optional
ConcurrentRuns int `json:"concurrentRuns,omitempty"`
}
TenantRateLimit configures request rate limiting.
func (*TenantRateLimit) DeepCopy ¶
func (in *TenantRateLimit) DeepCopy() *TenantRateLimit
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantRateLimit.
func (*TenantRateLimit) DeepCopyInto ¶
func (in *TenantRateLimit) DeepCopyInto(out *TenantRateLimit)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Tool ¶
type Tool struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ToolSpec `json:"spec,omitempty"`
Status ToolStatus `json:"status,omitempty"`
}
Tool defines a capability available to agents.
func (*Tool) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Tool.
func (*Tool) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*Tool) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ToolApprovalPolicy ¶ added in v0.9.0
type ToolApprovalPolicy struct {
// Read applies to tools with sideEffect read. Default none.
// +optional
Read ToolApprovalRequirement `json:"read,omitempty"`
// Write applies to tools with sideEffect write. Default none.
// +optional
Write ToolApprovalRequirement `json:"write,omitempty"`
// Actuate applies to tools with sideEffect actuate. Default approve.
// +optional
Actuate ToolApprovalRequirement `json:"actuate,omitempty"`
// Unclassified applies to tools without a sideEffect. Default none.
// +optional
Unclassified ToolApprovalRequirement `json:"unclassified,omitempty"`
// Timeout is how long a call waits for a decision before it is refused.
// Default 30m.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// ApproverGroups are the identity-provider groups whose members may decide.
// Empty lets any user with access to the run's namespace decide.
// +optional
ApproverGroups []string `json:"approverGroups,omitempty"`
}
ToolApprovalPolicy maps tool side-effect classes to approval requirements.
func (*ToolApprovalPolicy) DeepCopy ¶ added in v0.9.0
func (in *ToolApprovalPolicy) DeepCopy() *ToolApprovalPolicy
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ToolApprovalPolicy.
func (*ToolApprovalPolicy) DeepCopyInto ¶ added in v0.9.0
func (in *ToolApprovalPolicy) DeepCopyInto(out *ToolApprovalPolicy)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ToolApprovalRequirement ¶ added in v0.9.0
type ToolApprovalRequirement string
ToolApprovalRequirement is what a tool call needs before it runs. +kubebuilder:validation:Enum=none;approve;deny
const ( // ToolApprovalNone lets the call run. ToolApprovalNone ToolApprovalRequirement = "none" // ToolApprovalApprove holds the call until an approver allows it. A rejection // or a timeout returns an error to the model; the run goes on. ToolApprovalApprove ToolApprovalRequirement = "approve" // ToolApprovalDeny refuses the call outright. ToolApprovalDeny ToolApprovalRequirement = "deny" )
Tool approval requirements.
type ToolExecutionMode ¶
type ToolExecutionMode string
ToolExecutionMode defines how a tool pod or process is launched. +kubebuilder:validation:Enum=pod;sidecar;wasm
const ( // ToolExecPod spawns a fresh pod per tool invocation (maximum isolation). ToolExecPod ToolExecutionMode = "pod" // ToolExecSidecar runs the tool as a sidecar in the agent pod (stateful, low-latency). ToolExecSidecar ToolExecutionMode = "sidecar" // ToolExecWasm runs the tool as a WASM module inside the model-router. ToolExecWasm ToolExecutionMode = "wasm" )
type ToolList ¶
type ToolList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Tool `json:"items"`
}
ToolList contains a list of Tool.
func (*ToolList) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ToolList.
func (*ToolList) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ToolList) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ToolSchema ¶
type ToolSchema struct {
// Description is a human-readable description shown to the LLM.
// +optional
Description string `json:"description,omitempty"`
// Input is a JSON Schema object for the tool's input parameters.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Input *runtime.RawExtension `json:"input,omitempty"`
// Output is a JSON Schema object for the tool's output.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Output *runtime.RawExtension `json:"output,omitempty"`
}
ToolSchema describes the JSON Schema for tool input and output.
func (*ToolSchema) DeepCopy ¶
func (in *ToolSchema) DeepCopy() *ToolSchema
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ToolSchema.
func (*ToolSchema) DeepCopyInto ¶
func (in *ToolSchema) DeepCopyInto(out *ToolSchema)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ToolSideEffect ¶ added in v0.9.0
type ToolSideEffect string
ToolSideEffect classifies a tool by what its calls change.
const ( ToolSideEffectRead ToolSideEffect = "read" ToolSideEffectWrite ToolSideEffect = "write" ToolSideEffectActuate ToolSideEffect = "actuate" )
Tool side-effect classes.
type ToolSpec ¶
type ToolSpec struct {
// Type declares the tool implementation kind.
// +kubebuilder:default=regular
// +optional
Type ToolType `json:"type,omitempty"`
// OCIRef is the OCI image reference for regular, agent-type (ignored), and wasm tools.
// Must be signed with Cosign unless imageVerification.skip is true.
// Not required for mcp tools that use a static URL.
// +optional
OCIRef string `json:"ociRef,omitempty"`
// AgentRef names the Agent CRD to expose as a tool.
// Only used when Type is "agent".
// +optional
AgentRef string `json:"agentRef,omitempty"`
// ExecutionMode controls how the tool runs.
// Defaults to "pod" for regular tools, "sidecar" for mcp tools, "wasm" for wasm tools.
// +optional
ExecutionMode ToolExecutionMode `json:"executionMode,omitempty"`
// Schema is the JSON Schema for the tool's input and output.
// Exposed to agents as an OpenAI function definition.
// +optional
Schema *ToolSchema `json:"schema,omitempty"`
// MCPConfig configures an MCP server. Only used when Type is "mcp".
// +optional
MCPConfig *MCPConfig `json:"mcpConfig,omitempty"`
// SideEffect classifies what a call to this tool changes, so a GuardrailPolicy
// can require approval before it runs: read (changes nothing), write (changes
// state that can be undone or is reviewed later, such as a branch) or actuate
// (acts on the world and is hard to take back: a deploy, a payment, a
// device command). A tool without a class is "unclassified".
// +kubebuilder:validation:Enum=read;write;actuate
// +optional
SideEffect ToolSideEffect `json:"sideEffect,omitempty"`
// NetworkEgress defines additional outbound network rules for tool pods.
// Added to the per-run NetworkPolicy allowlist.
// +optional
NetworkEgress []EgressRule `json:"networkEgress,omitempty"`
// Resources sets CPU/memory limits for the tool pod or sidecar.
// +optional
Resources *ResourceRequirements `json:"resources,omitempty"`
// SecretRefs lists Kubernetes Secrets to inject into tool pods or MCP sidecars.
// For pod-type tools: mounted as volumes or env vars in the tool pod.
// For MCP sidecar tools: mounted into the model-router sidecar container.
// +optional
SecretRefs []SecretMount `json:"secretRefs,omitempty"`
// CloudAuth configures cloud-provider identity for tool pods.
// Overrides Agent-level cloudAuth for this tool.
// +optional
CloudAuth *CloudAuthSpec `json:"cloudAuth,omitempty"`
// Command overrides the container entrypoint for pod-type tools.
// +optional
Command []string `json:"command,omitempty"`
// Args overrides the container command arguments for pod-type tools.
// +optional
Args []string `json:"args,omitempty"`
}
ToolSpec defines a capability available to agents.
func (*ToolSpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ToolSpec.
func (*ToolSpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ToolStatus ¶
type ToolStatus struct {
// Ready indicates the tool is validated and available.
// +optional
Ready bool `json:"ready,omitempty"`
// Message contains a human-readable status message.
// +optional
Message string `json:"message,omitempty"`
// SignatureVerified indicates the OCI artifact signature was verified by Cosign.
// +optional
SignatureVerified bool `json:"signatureVerified,omitempty"`
// Conditions holds standard Kubernetes conditions.
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
ToolStatus defines the observed state of a Tool.
func (*ToolStatus) DeepCopy ¶
func (in *ToolStatus) DeepCopy() *ToolStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ToolStatus.
func (*ToolStatus) DeepCopyInto ¶
func (in *ToolStatus) DeepCopyInto(out *ToolStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ToolType ¶
type ToolType string
ToolType describes how a tool is implemented. +kubebuilder:validation:Enum=regular;agent;mcp;wasm
const ( // ToolTypeRegular is a standard OCI-packaged tool. ToolTypeRegular ToolType = "regular" // ToolTypeAgent exposes another Agent as a callable tool (orchestrator pattern). ToolTypeAgent ToolType = "agent" // ToolTypeMCP wraps an MCP (Model Context Protocol) server. ToolTypeMCP ToolType = "mcp" // ToolTypeWasm runs a WASM module in a sandbox. ToolTypeWasm ToolType = "wasm" )
type VectorStoreConfig ¶
type VectorStoreConfig struct {
// Provider is the vector store implementation: "qdrant" (default).
// +kubebuilder:validation:Enum=qdrant
// +kubebuilder:default=qdrant
// +optional
Provider string `json:"provider,omitempty"`
// CollectionName overrides the Qdrant collection name.
// Defaults to the KnowledgeBase CR name.
// +optional
CollectionName string `json:"collectionName,omitempty"`
// StorageSize is the PVC size for the Qdrant StatefulSet.
// +kubebuilder:default="10Gi"
// +optional
StorageSize string `json:"storageSize,omitempty"`
// Resources overrides default CPU/memory for the Qdrant pod.
// +optional
Resources *ResourceRequirements `json:"resources,omitempty"`
// AutoUpgrade controls whether the operator automatically upgrades the
// Qdrant instance to match the operator's target version. When true
// (default), the operator walks through sequential minor versions with
// a snapshot before each step. Set to false to hold the current version.
// +kubebuilder:default=true
// +optional
AutoUpgrade *bool `json:"autoUpgrade,omitempty"`
}
VectorStoreConfig configures the vector database backend.
func (*VectorStoreConfig) DeepCopy ¶
func (in *VectorStoreConfig) DeepCopy() *VectorStoreConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VectorStoreConfig.
func (*VectorStoreConfig) DeepCopyInto ¶
func (in *VectorStoreConfig) DeepCopyInto(out *VectorStoreConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WebhookNotifyConfig ¶
type WebhookNotifyConfig struct {
// WebhookSecretRef references a Secret whose key (default "url") holds the Slack
// incoming-webhook URL. The Secret is mounted into the model-router sidecar as the
// WEBHOOK_URL environment variable (not into the agent container).
// +optional
WebhookSecretRef *corev1.SecretKeySelector `json:"webhookSecretRef,omitempty"`
}
WebhookNotifyConfig configures Slack incoming-webhook delivery for the _webhook_notify builtin tool. The webhook URL (e.g. https://hooks.slack.com/services/T/B/X) is the only credential needed: it posts `text` to the configured channel without any per-user OAuth/bearer token.
func (*WebhookNotifyConfig) DeepCopy ¶
func (in *WebhookNotifyConfig) DeepCopy() *WebhookNotifyConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookNotifyConfig.
func (*WebhookNotifyConfig) DeepCopyInto ¶
func (in *WebhookNotifyConfig) DeepCopyInto(out *WebhookNotifyConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkflowBudgetCap ¶
type WorkflowBudgetCap struct {
// Total is the maximum USD spend across all AgentRuns in the workflow.
// When exceeded, the currently-running step is failed and the workflow is Failed.
Total string `json:"total"`
}
WorkflowBudgetCap limits total spend across all steps.
func (*WorkflowBudgetCap) DeepCopy ¶
func (in *WorkflowBudgetCap) DeepCopy() *WorkflowBudgetCap
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowBudgetCap.
func (*WorkflowBudgetCap) DeepCopyInto ¶
func (in *WorkflowBudgetCap) DeepCopyInto(out *WorkflowBudgetCap)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkflowFromTemplate ¶ added in v0.9.0
type WorkflowFromTemplate struct {
// Name of the AgentWorkflow template, in the same namespace.
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// Parameters sets the template's parameters by name. Values are strings;
// integer and boolean parameters take "42" and "true".
// +optional
Parameters map[string]string `json:"parameters,omitempty"`
}
WorkflowFromTemplate names a template and gives its parameters.
func (*WorkflowFromTemplate) DeepCopy ¶ added in v0.9.0
func (in *WorkflowFromTemplate) DeepCopy() *WorkflowFromTemplate
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowFromTemplate.
func (*WorkflowFromTemplate) DeepCopyInto ¶ added in v0.9.0
func (in *WorkflowFromTemplate) DeepCopyInto(out *WorkflowFromTemplate)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkflowLoop ¶ added in v0.9.0
type WorkflowLoop struct {
// From is the first step of the loop body: the gate, or one of its ancestors.
// +kubebuilder:validation:Pattern=`^[a-z0-9][a-z0-9\-]*$`
From string `json:"from"`
// Until is evaluated each time the gate succeeds; the loop ends when it is
// true. Forms: steps["x"].output.contains("text"), steps["x"].output.startsWith("text"),
// steps["x"].output == "text" and steps["x"].phase == "Succeeded", each optionally
// negated with a leading !, and combined with && (no parentheses or ||).
// +kubebuilder:validation:MinLength=1
Until string `json:"until"`
// MaxIterations is the most times the body may run in total (the first pass counts).
// When the gate is still not satisfied after that, the gate fails and so does the
// workflow, unless onStepFailure is continue.
// +kubebuilder:validation:Minimum=2
// +kubebuilder:validation:Maximum=10
// +kubebuilder:default=3
// +optional
MaxIterations int32 `json:"maxIterations,omitempty"`
// Break ends the loop early with a failed gate. Each entry is a condition in the
// same form as until; the first one that is true, checked when the gate has
// succeeded and until is not yet true, stops the loop instead of sending the
// body back. Use it for a blocker another pass cannot fix, such as a step that
// reports it needs a human.
// +kubebuilder:validation:MaxItems=5
// +optional
Break []string `json:"break,omitempty"`
}
WorkflowLoop re-runs a group of steps until a condition on the gate step holds. The body is loop.from, the gate (the step carrying the loop), and every step between them in the dependency graph. When the gate succeeds with until false, every body step goes back to Pending and runs again. Their previous outputs stay readable as {{steps.<name>.output}} until they are replaced, so a body step can be told what the last pass found wrong. Each pass runs under its own AgentRun, pod, job and sandbox names; earlier passes remain as history. +kubebuilder:validation:XValidation:rule="size(self.until) > 0 && size(self.from) > 0",message="a loop needs from and until"
func (*WorkflowLoop) DeepCopy ¶ added in v0.9.0
func (in *WorkflowLoop) DeepCopy() *WorkflowLoop
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowLoop.
func (*WorkflowLoop) DeepCopyInto ¶ added in v0.9.0
func (in *WorkflowLoop) DeepCopyInto(out *WorkflowLoop)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkflowLoop) Passes ¶ added in v0.9.0
func (l *WorkflowLoop) Passes() int32
Passes is how many times the loop's body may run in total, with the default and the ceiling applied.
type WorkflowMode ¶ added in v0.9.0
type WorkflowMode string
WorkflowMode says whether an AgentWorkflow runs or is a template. +kubebuilder:validation:Enum=workflow;template
const ( // WorkflowModeWorkflow is a workflow that runs. WorkflowModeWorkflow WorkflowMode = "workflow" // WorkflowModeTemplate is a definition that is validated but never run. WorkflowModeTemplate WorkflowMode = "template" )
Workflow modes.
type WorkflowParameter ¶ added in v0.9.0
type WorkflowParameter struct {
// Name is how steps refer to the parameter: {{params.<name>}}.
// +kubebuilder:validation:Pattern=`^[a-zA-Z][a-zA-Z0-9_]*$`
Name string `json:"name"`
// Description tells a person or a connector what the parameter is for.
// +optional
Description string `json:"description,omitempty"`
// Type is string (default), integer or boolean.
// +kubebuilder:validation:Enum=string;integer;boolean
// +kubebuilder:default=string
// +optional
Type string `json:"type,omitempty"`
// Required makes the parameter mandatory unless it has a default.
// +optional
Required bool `json:"required,omitempty"`
// Default is used when the instance does not set the parameter.
// +optional
Default *string `json:"default,omitempty"`
// Enum restricts the value to one of these.
// +optional
Enum []string `json:"enum,omitempty"`
// Pattern is a regular expression a string value must match in full.
// +optional
Pattern string `json:"pattern,omitempty"`
// MaxLength caps the value's length in bytes. Defaults to 8192.
// +kubebuilder:validation:Minimum=1
// +optional
MaxLength int `json:"maxLength,omitempty"`
}
WorkflowParameter is a typed input of a workflow template.
func (*WorkflowParameter) DeepCopy ¶ added in v0.9.0
func (in *WorkflowParameter) DeepCopy() *WorkflowParameter
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowParameter.
func (*WorkflowParameter) DeepCopyInto ¶ added in v0.9.0
func (in *WorkflowParameter) DeepCopyInto(out *WorkflowParameter)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkflowSandboxPhase ¶ added in v0.9.0
type WorkflowSandboxPhase string
WorkflowSandboxPhase is the lifecycle of a workflow-owned sandbox. +kubebuilder:validation:Enum=Provisioning;Ready;Failed
const ( WorkflowSandboxPhaseProvisioning WorkflowSandboxPhase = "Provisioning" WorkflowSandboxPhaseReady WorkflowSandboxPhase = "Ready" WorkflowSandboxPhaseFailed WorkflowSandboxPhase = "Failed" )
Workflow sandbox phases.
type WorkflowSandboxRef ¶ added in v0.9.0
type WorkflowSandboxRef struct {
// Name is the gateway sandbox name.
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// ID is the gateway sandbox ID, used for router ingress.
// +optional
ID string `json:"id,omitempty"`
// Fresh is true for the step's dedicated sandbox. It is deleted when the last
// run in a clarification chain ends; a shared sandbox is workflow-owned.
// +optional
Fresh bool `json:"fresh,omitempty"`
// ProviderOwner is the original step AgentRun name used for tool credential
// providers. Continuations retain it so their policy and providers still match.
// +optional
ProviderOwner string `json:"providerOwner,omitempty"`
}
WorkflowSandboxRef selects the existing workflow-owned sandbox in which the AgentRun's agent process runs as a detached job. The workflow controller sets it; ordinary AgentRuns leave it nil and create their own workload sandbox.
func (*WorkflowSandboxRef) DeepCopy ¶ added in v0.9.0
func (in *WorkflowSandboxRef) DeepCopy() *WorkflowSandboxRef
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowSandboxRef.
func (*WorkflowSandboxRef) DeepCopyInto ¶ added in v0.9.0
func (in *WorkflowSandboxRef) DeepCopyInto(out *WorkflowSandboxRef)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkflowSandboxSpec ¶ added in v0.9.0
type WorkflowSandboxSpec struct {
// Image is the sandbox image. Shared container steps must name the same image
// in container.image, so moving a workflow between pod and sandbox execution
// cannot silently change what runs.
// +kubebuilder:validation:MinLength=1
Image string `json:"image"`
// ClassRef names a cluster-scoped SandboxClass. Its egress, filesystem,
// resource defaults, placement and minimum enforcement apply to the workflow.
// +optional
ClassRef string `json:"classRef,omitempty"`
// Repo is the GitHub repository to check out, in owner/name form.
// +kubebuilder:validation:Pattern=`^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$`
Repo string `json:"repo"`
// Ref is the branch, tag or commit to check out. Empty uses the remote's
// default branch. The resolved commit is recorded in status.sandbox.checkoutSHA.
// +optional
Ref string `json:"ref,omitempty"`
// Branch is the local work branch to create at Ref. Empty checks out a
// detached HEAD. Steps share this checkout; the branch is the recovery record.
// +optional
Branch string `json:"branch,omitempty"`
// Push lets steps in the shared sandbox push to Repo (the installation token
// gets contents: write). Fresh sandboxes stay read-only: their git policy
// admits clone and fetch only, so a verifier or reviewer can fetch what the
// writer pushed but cannot change it. Which branches a push may update is
// still governed by the repository's rulesets on GitHub.
// +optional
Push bool `json:"push,omitempty"`
}
WorkflowSandboxSpec describes the repository sandbox shared by a workflow.
func (*WorkflowSandboxSpec) DeepCopy ¶ added in v0.9.0
func (in *WorkflowSandboxSpec) DeepCopy() *WorkflowSandboxSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowSandboxSpec.
func (*WorkflowSandboxSpec) DeepCopyInto ¶ added in v0.9.0
func (in *WorkflowSandboxSpec) DeepCopyInto(out *WorkflowSandboxSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkflowSandboxStatus ¶ added in v0.9.0
type WorkflowSandboxStatus struct {
// Name is the gateway's sandbox name.
// +optional
Name string `json:"name,omitempty"`
// ID is the gateway's stable sandbox ID, used to identify its supervisor.
// +optional
ID string `json:"id,omitempty"`
// Phase is Provisioning until the sandbox is ready and its checkout has
// completed, then Ready. Failed means the sandbox or checkout was lost.
// +optional
Phase WorkflowSandboxPhase `json:"phase,omitempty"`
// CheckoutSHA is the exact commit checked out in the sandbox.
// +optional
CheckoutSHA string `json:"checkoutSHA,omitempty"`
// GitTokenExpiry is when the workflow's GitHub installation token expires.
// +optional
GitTokenExpiry *metav1.Time `json:"gitTokenExpiry,omitempty"`
}
WorkflowSandboxStatus records a sandbox and its immutable checkout.
func (*WorkflowSandboxStatus) DeepCopy ¶ added in v0.9.0
func (in *WorkflowSandboxStatus) DeepCopy() *WorkflowSandboxStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowSandboxStatus.
func (*WorkflowSandboxStatus) DeepCopyInto ¶ added in v0.9.0
func (in *WorkflowSandboxStatus) DeepCopyInto(out *WorkflowSandboxStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkflowStep ¶
type WorkflowStep struct {
// Name is a unique identifier for this step within the workflow.
// Used in DependsOn references and template variables.
// +kubebuilder:validation:Pattern=`^[a-z0-9][a-z0-9\-]*$`
Name string `json:"name"`
// Type is agent (default): run an Agent; container: run a deterministic job in a
// pod or workflow sandbox; approval: wait for a person to approve or reject.
// +kubebuilder:default=agent
// +optional
Type WorkflowStepType `json:"type,omitempty"`
// Sandbox selects shared (default) or fresh execution when the workflow has
// spec.sandbox. A fresh sandbox is built from the workflow's checked-out commit.
// It has no effect on approval steps and is invalid without spec.sandbox.
// +optional
Sandbox WorkflowStepSandbox `json:"sandbox,omitempty"`
// AgentRef is the name of the Agent CRD to run for this step. Agent steps only.
// +optional
AgentRef string `json:"agentRef,omitempty"`
// Input is the task string passed to the agent as AGENTORC_INPUT. Agent steps only.
// Supports template variables:
// {{steps.<name>.output}} — the Output of a named predecessor step
// +optional
Input string `json:"input,omitempty"`
// Container describes the job of a container step.
// +optional
Container *ContainerStep `json:"container,omitempty"`
// Approval describes the decision an approval step waits for.
// +optional
Approval *ApprovalStep `json:"approval,omitempty"`
// DependsOn lists step names that must reach a terminal phase (Succeeded or Skipped)
// before this step is eligible to start.
// +optional
DependsOn []string `json:"dependsOn,omitempty"`
// Condition is a CEL expression evaluated before this step starts.
// The expression has access to a "steps" variable: map of step name →
// {phase: string, output: string}. If the expression evaluates to false
// the step is marked Skipped rather than started.
// Example: 'steps["gather"].phase == "Succeeded"'
// +optional
Condition string `json:"condition,omitempty"`
// Timeout overrides the workflow-level timeout for this specific step.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Callbacks fires webhooks when this step completes or fails.
// +optional
Callbacks *CallbackConfig `json:"callbacks,omitempty"`
// Loop makes this step the gate of a loop: when it succeeds and loop.until is
// false, the steps from loop.from through this one run again. Agent and container
// steps only; approval steps cannot be inside a loop body.
// +optional
Loop *WorkflowLoop `json:"loop,omitempty"`
}
WorkflowStep defines a single node in the workflow DAG. +kubebuilder:validation:XValidation:rule="(has(self.type) && self.type != 'agent') || (has(self.agentRef) && size(self.agentRef) > 0 && has(self.input))",message="an agent step needs agentRef and input" +kubebuilder:validation:XValidation:rule="!has(self.type) || self.type == 'agent' || (!has(self.agentRef) && !has(self.input))",message="agentRef and input are only for agent steps" +kubebuilder:validation:XValidation:rule="!has(self.type) || self.type != 'container' || has(self.container)",message="a container step needs a container block" +kubebuilder:validation:XValidation:rule="!has(self.container) || (has(self.type) && self.type == 'container')",message="the container block is only for container steps" +kubebuilder:validation:XValidation:rule="!has(self.type) || self.type != 'approval' || has(self.approval)",message="an approval step needs an approval block" +kubebuilder:validation:XValidation:rule="!has(self.approval) || (has(self.type) && self.type == 'approval')",message="the approval block is only for approval steps" +kubebuilder:validation:XValidation:rule="!has(self.sandbox) || !has(self.type) || self.type != 'approval'",message="sandbox is only for agent and container steps"
func (*WorkflowStep) DeepCopy ¶
func (in *WorkflowStep) DeepCopy() *WorkflowStep
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowStep.
func (*WorkflowStep) DeepCopyInto ¶
func (in *WorkflowStep) DeepCopyInto(out *WorkflowStep)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkflowStepPhase ¶
type WorkflowStepPhase string
WorkflowStepPhase describes the state of a single step. +kubebuilder:validation:Enum=Pending;Running;Succeeded;Failed;Skipped;WaitingForInput;WaitingForApproval
const ( WorkflowStepPhasePending WorkflowStepPhase = "Pending" WorkflowStepPhaseRunning WorkflowStepPhase = "Running" WorkflowStepPhaseSucceeded WorkflowStepPhase = "Succeeded" WorkflowStepPhaseFailed WorkflowStepPhase = "Failed" WorkflowStepPhaseSkipped WorkflowStepPhase = "Skipped" WorkflowStepPhaseWaitingForInput WorkflowStepPhase = "WaitingForInput" // WorkflowStepPhaseWaitingForApproval is an approval step waiting for a decision. WorkflowStepPhaseWaitingForApproval WorkflowStepPhase = "WaitingForApproval" )
type WorkflowStepSandbox ¶ added in v0.9.0
type WorkflowStepSandbox string
WorkflowStepSandbox selects where an agent or container step runs when the workflow has spec.sandbox. Empty means shared. +kubebuilder:validation:Enum=shared;fresh
const ( WorkflowStepSandboxFresh WorkflowStepSandbox = "fresh" )
Workflow step sandbox placements.
type WorkflowStepStatus ¶
type WorkflowStepStatus struct {
// Name matches a step name in spec.steps.
Name string `json:"name"`
// Phase is the current lifecycle state of this step.
Phase WorkflowStepPhase `json:"phase"`
// AgentRunRef is the name of the AgentRun created for this step.
// +optional
AgentRunRef string `json:"agentRunRef,omitempty"`
// PodRef is the name of the pod of a container step.
// +optional
PodRef string `json:"podRef,omitempty"`
// ApprovalID is the id of the approval an approval step waits on.
// +optional
ApprovalID string `json:"approvalID,omitempty"`
// JobID is the detached job of a step running in an OpenShell sandbox.
// +optional
JobID string `json:"jobID,omitempty"`
// Sandbox is the fresh sandbox of a step with sandbox: fresh.
// +optional
Sandbox *WorkflowSandboxStatus `json:"sandbox,omitempty"`
// StartTime is when the step's AgentRun was created.
// +optional
StartTime *metav1.Time `json:"startTime,omitempty"`
// CompletionTime is when the step reached a terminal phase.
// +optional
CompletionTime *metav1.Time `json:"completionTime,omitempty"`
// Output is the AgentRun output for this step, truncated to 10 KB.
// Available to downstream steps via {{steps.<name>.output}}.
// +optional
Output string `json:"output,omitempty"`
// SpendUSD is the USD spend recorded on the step's current AgentRun.
// +optional
SpendUSD string `json:"spendUSD,omitempty"`
// Iteration is how many times the step's loop has sent it back: 0 on the first
// pass. Names of the step's runs, pods, jobs and sandboxes carry it from pass 1.
// +optional
Iteration int32 `json:"iteration,omitempty"`
// Generation numbers the attempts at this step, counting loop passes and
// retries. Names of the step's runs, pods, jobs and sandboxes carry it, so an
// attempt never reuses what an earlier one left behind. It is at least Iteration.
// +optional
Generation int32 `json:"generation,omitempty"`
// PriorSpendUSD is the spend of the passes before the current one, so a loop
// still counts against the workflow budget.
// +optional
PriorSpendUSD string `json:"priorSpendUSD,omitempty"`
// FailureReason is a human-readable explanation when Phase is Failed.
// +optional
FailureReason string `json:"failureReason,omitempty"`
// Source indicates whether this step was defined statically in spec.steps
// or added dynamically via a _propose_step call. Values: "static", "dynamic".
// +kubebuilder:validation:Enum=static;dynamic
// +optional
Source string `json:"source,omitempty"`
}
WorkflowStepStatus holds runtime state for a single step.
func (*WorkflowStepStatus) DeepCopy ¶
func (in *WorkflowStepStatus) DeepCopy() *WorkflowStepStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowStepStatus.
func (*WorkflowStepStatus) DeepCopyInto ¶
func (in *WorkflowStepStatus) DeepCopyInto(out *WorkflowStepStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkflowStepStatus) NameGeneration ¶ added in v0.9.0
func (s *WorkflowStepStatus) NameGeneration() int32
NameGeneration is the number a step's run, pod, job and sandbox names carry: 0 on the first attempt, then one more for each loop pass or retry. Workflows written before Generation existed carry only Iteration.
type WorkflowStepType ¶ added in v0.9.0
type WorkflowStepType string
WorkflowStepType says what a step does. +kubebuilder:validation:Enum=agent;container;approval
const ( // WorkflowStepTypeAgent runs an Agent (the default). WorkflowStepTypeAgent WorkflowStepType = "agent" // WorkflowStepTypeContainer runs a deterministic job in a pod or workflow sandbox. WorkflowStepTypeContainer WorkflowStepType = "container" // WorkflowStepTypeApproval waits for a person's decision. WorkflowStepTypeApproval WorkflowStepType = "approval" )
Workflow step types.
type WorkflowTemplateRevision ¶ added in v0.9.0
type WorkflowTemplateRevision struct {
// Name of the template.
Name string `json:"name"`
// Generation of the template when the instance was built from it.
Generation int64 `json:"generation"`
}
WorkflowTemplateRevision records which template version an instance was built from.
func (*WorkflowTemplateRevision) DeepCopy ¶ added in v0.9.0
func (in *WorkflowTemplateRevision) DeepCopy() *WorkflowTemplateRevision
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkflowTemplateRevision.
func (*WorkflowTemplateRevision) DeepCopyInto ¶ added in v0.9.0
func (in *WorkflowTemplateRevision) DeepCopyInto(out *WorkflowTemplateRevision)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
Source Files
¶
- agent_types.go
- agentdeployment_types.go
- agentrun_types.go
- agentworkflow_loop.go
- agentworkflow_types.go
- groupversion_info.go
- guardrailpolicy_types.go
- knowledgebase_types.go
- mcpserver_types.go
- modelprovider_types.go
- modelselector_types.go
- sandboxclass_types.go
- shared_types.go
- tenantconfig_types.go
- tool_types.go
- zz_generated.deepcopy.go