Documentation
¶
Index ¶
- Constants
- Variables
- func GeneratePathID(path string) string
- func GenerateS3Key(workspace, path string) string
- func IsPersonalScope(tool ToolName) bool
- func IsReservedFolder(name string) bool
- func IsVirtualFolder(name string) bool
- func JoinPath(segments ...string) string
- func RequiresAuth(tool ToolName) bool
- func SkillsPath(subpath string) string
- func SourcePath(subpath string) string
- func ToolsPath(subpath string) string
- func WorkspaceBucketName(prefix, workspaceExternalId string) string
- type AnthropicConfig
- type AppConfig
- type AuthInfo
- func (a *AuthInfo) CanAccessPool(poolName string) bool
- func (a *AuthInfo) CanWrite() bool
- func (a *AuthInfo) HasWorkspaceAccess(workspaceExtId string) bool
- func (a *AuthInfo) IsAdmin() bool
- func (a *AuthInfo) IsClusterAdmin() bool
- func (a *AuthInfo) IsWorker() bool
- func (a *AuthInfo) IsWorkspaceMember() bool
- type CORSConfig
- type ContainerRuntime
- type CreateWorkspaceToolRequest
- type DatabaseConfig
- type DirEntry
- type DirMeta
- type ErrTaskNotFound
- type ErrWorkerNotFound
- type ErrWorkerPoolNotFound
- type ErrWorkspaceNotFound
- type ErrWorkspaceToolExists
- type ErrWorkspaceToolNotFound
- type FileMeta
- type FilesystemConfig
- type FilesystemQuery
- type GRPCConfig
- type GatewayConfig
- type GitHubConfig
- type HTTPConfig
- type IPAllocation
- type ImageConfig
- type IntegrationAPIKey
- type IntegrationAuthType
- type IntegrationConnection
- type IntegrationCredentials
- type IntegrationMeta
- type IntegrationOAuth
- type IntegrationScope
- type IntegrationsConfig
- type MCPAuthConfig
- type MCPServerConfig
- type MemberInfo
- type MemberRole
- type MetadataNotFoundError
- type PoolScalerStatus
- type PostgresConfig
- type ProviderOAuthCredentials
- type QueryOutputFormat
- type RedisConfig
- type RedisMode
- type ResolvedTool
- type S3Config
- type SandboxConfig
- type SandboxMount
- type SandboxNetwork
- type SandboxSettings
- type SandboxState
- type SandboxStatus
- type SchedulerConfig
- type SmartQuery
- type SmartQueryOutputFormat
- type StreamsConfig
- type Task
- type TaskResources
- type TaskResult
- type TaskState
- type TaskStatus
- type Token
- type TokenType
- type TokenValidationResult
- type ToolName
- type ToolsConfig
- type VirtualFile
- func (f *VirtualFile) WithChildCount(v int) *VirtualFile
- func (f *VirtualFile) WithFolder(v bool) *VirtualFile
- func (f *VirtualFile) WithMetadata(key string, value interface{}) *VirtualFile
- func (f *VirtualFile) WithModifiedAt(t time.Time) *VirtualFile
- func (f *VirtualFile) WithReadOnly(v bool) *VirtualFile
- func (f *VirtualFile) WithSize(v int64) *VirtualFile
- type VirtualFileListResponse
- type VirtualFileSearchResponse
- type VirtualFileTreeResponse
- type VirtualFileType
- type Worker
- type WorkerInfo
- type WorkerJobOpts
- type WorkerPaths
- type WorkerPoolConfig
- type WorkerPoolState
- type WorkerPoolStatus
- type WorkerStatus
- type Workspace
- type WorkspaceInfo
- type WorkspaceMember
- type WorkspaceStorageConfig
- type WorkspaceTool
- type WorkspaceToolOrigin
- type WorkspaceToolProviderType
- type WorkspaceToolResponse
- type WorkspaceToolSetting
- type WorkspaceToolSettings
Constants ¶
const ( ModeLocal = "local" // No Redis/Postgres, S3 direct ModeRemote = "remote" // Full infrastructure )
Mode constants for gateway operation
const ( MCPTransportSSE = "sse" // Server-Sent Events (default) MCPTransportHTTP = "http" // Streamable HTTP )
Transport type constants
const ( SmartQueryOutputFolder = QueryOutputFolder SmartQueryOutputFile = QueryOutputFile )
const ( // IPv4 - using 10.200.x.x to avoid common conflicts DefaultSubnet = "10.200.0.0/24" DefaultSubnetPrefix = "10.200.0" DefaultGateway = "10.200.0.1" DefaultPrefixLen = 24 // IPv6 - ULA prefix (fd00::/8 is for private use) DefaultSubnetIPv6 = "fd00:a1b2::/64" DefaultGatewayIPv6 = "fd00:a1b2::1" )
Default network settings for container bridge (dual-stack IPv4/IPv6). TODO: Make configurable via worker config to avoid conflicts with:
- K8s clusters using overlapping pod/service CIDR
- Cloud VPCs with overlapping ranges
const ( SandboxUserUID = 1000 SandboxUserGID = 1000 )
Sandbox user identity These constants are used by:
- pkg/worker/sandbox.go: sets OCI spec Process.User.UID/GID
- pkg/worker/mount.go: passes --uid/--gid to FUSE mount
The Dockerfile.sandbox must create a user with matching uid/gid. The base_*_config.json files contain placeholder values that get overwritten.
const ( DefaultTaskCPU int64 = 2000 // 2 CPUs DefaultTaskMemory int64 = 2 << 30 // 2 GiB )
Default resource limits (applied when Task.Resources is nil)
const ( MaxTaskCPU int64 = 32000 // 32 CPUs MaxTaskMemory int64 = 128 << 30 // 128 GiB MaxTaskGPU int = 8 // 8 GPUs )
Maximum resource limits for validation
const ( DirNameSkills = "skills" DirNameSources = "sources" DirNameTools = "tools" DirNameTasks = "tasks" PathRoot = "/" PathSkills = "/skills" PathSources = "/sources" PathTools = "/tools" PathTasks = "/tasks" )
Directory names and paths
const ( MetaKeyProvider = "provider" MetaKeyExternalID = "external_id" MetaKeyGuidance = "guidance" MetaKeyHidden = "hidden" )
Metadata keys
const ( // DefaultBundleDir is where sandbox bundles are created DefaultBundleDir = "/var/lib/airstore/bundles" // DefaultStateDir is where overlay state is stored (should be tmpfs) DefaultStateDir = "/mnt/overlay" // DefaultMountDir is where per-task FUSE mounts are created DefaultMountDir = "/tmp/airstore-mounts" // DefaultCLIBinary is the path to the CLI binary for mounting DefaultCLIBinary = "/usr/local/bin/cli" // DefaultWorkerMount is where the worker's global FUSE mount lives DefaultWorkerMount = "/var/lib/airstore/fs" // ContainerWorkDir is the working directory inside containers ContainerWorkDir = "/workspace" )
Worker filesystem path constants
const DefaultSandboxImage = "public.ecr.aws/n4e0e1y0/airstore-default-sandbox:latest"
DefaultSandboxImage is the fallback image if not configured
const (
SourceStatusFile = "README.md" // Status and description file at integration root
)
Source integration files
const (
WorkerStateTTL = 5 * time.Minute // TTL for worker state (refreshed by heartbeat)
)
Worker TTL constant
Variables ¶
var ( ReservedFolders = map[string]struct{}{ DirNameSkills: {}, DirNameSources: {}, DirNameTools: {}, DirNameTasks: {}, } VirtualFolders = map[string]struct{}{ DirNameSources: {}, DirNameTools: {}, DirNameTasks: {}, } )
Reserved folders cannot be deleted. Virtual folders are not S3-backed.
Functions ¶
func GeneratePathID ¶
GeneratePathID generates a unique ID for a path (for Redis keys)
func GenerateS3Key ¶
GenerateS3Key generates an S3 object key for a context file
func IsPersonalScope ¶
IsPersonalScope returns true if the integration is personal by default
func IsReservedFolder ¶
func IsVirtualFolder ¶
func RequiresAuth ¶
RequiresAuth returns true if the integration needs credentials
func SkillsPath ¶
func SourcePath ¶
func WorkspaceBucketName ¶
WorkspaceBucketName returns the S3 bucket name: {prefix}-{workspaceExternalId}
Types ¶
type AnthropicConfig ¶ added in v0.1.11
type AnthropicConfig struct {
APIKey string `key:"apiKey" json:"api_key"`
}
AnthropicConfig configures Anthropic API access for BAML inference and Claude Code tasks
type AppConfig ¶
type AppConfig struct {
Mode string `key:"mode" json:"mode"` // "local" or "remote"
DebugMode bool `key:"debugMode" json:"debug_mode"`
PrettyLogs bool `key:"prettyLogs" json:"pretty_logs"`
ClusterName string `key:"clusterName" json:"cluster_name"`
Database DatabaseConfig `key:"database" json:"database"`
Image ImageConfig `key:"image" json:"image"`
Sandbox SandboxSettings `key:"sandbox" json:"sandbox"`
Filesystem FilesystemConfig `key:"filesystem" json:"filesystem"`
Gateway GatewayConfig `key:"gateway" json:"gateway"`
Scheduler SchedulerConfig `key:"scheduler" json:"scheduler"`
Tools ToolsConfig `key:"tools" json:"tools"`
OAuth IntegrationOAuth `key:"oauth" json:"oauth"` // OAuth for workspace integrations (gmail, gdrive)
Streams StreamsConfig `key:"streams" json:"streams"` // S2 stream configuration for task logs
Anthropic AnthropicConfig `key:"anthropic" json:"anthropic"`
}
AppConfig is the root configuration for the airstore gateway
func (*AppConfig) IsLocalMode ¶
IsLocalMode returns true if running in local mode (no Redis/Postgres)
type AuthInfo ¶
type AuthInfo struct {
TokenType TokenType
Workspace *WorkspaceInfo
Member *MemberInfo
Worker *WorkerInfo
}
AuthInfo contains identity information for authenticated requests.
func (*AuthInfo) CanAccessPool ¶
func (*AuthInfo) HasWorkspaceAccess ¶
func (*AuthInfo) IsClusterAdmin ¶
func (*AuthInfo) IsWorkspaceMember ¶
type CORSConfig ¶
type ContainerRuntime ¶
type ContainerRuntime string
const ( ContainerRuntimeRunc ContainerRuntime = "runc" ContainerRuntimeGvisor ContainerRuntime = "gvisor" )
func (ContainerRuntime) String ¶
func (r ContainerRuntime) String() string
type CreateWorkspaceToolRequest ¶
type CreateWorkspaceToolRequest struct {
Name string `json:"name"`
ProviderType string `json:"provider_type"` // "mcp"
MCP *MCPServerConfig `json:"mcp,omitempty"`
}
CreateWorkspaceToolRequest is the API request to create a workspace tool
type DatabaseConfig ¶
type DatabaseConfig struct {
Redis RedisConfig `key:"redis" json:"redis"`
Postgres PostgresConfig `key:"postgres" json:"postgres"`
}
type DirEntry ¶
type DirEntry struct {
Name string `json:"name"`
Mode uint32 `json:"mode"`
Size int64 `json:"size,omitempty"`
Mtime int64 `json:"mtime,omitempty"` // Unix timestamp
IsLink bool `json:"is_link,omitempty"`
}
DirEntry represents an entry in a directory listing
type DirMeta ¶
type DirMeta struct {
Path string `json:"path"`
Mode uint32 `json:"mode"`
Uid uint32 `json:"uid"`
Gid uint32 `json:"gid"`
Mtime time.Time `json:"mtime"`
Children []string `json:"children"` // Entry names in this directory
}
DirMeta holds metadata for a directory
type ErrTaskNotFound ¶
type ErrTaskNotFound struct {
ExternalId string
}
ErrTaskNotFound is returned when a task cannot be found
func (*ErrTaskNotFound) Error ¶
func (e *ErrTaskNotFound) Error() string
type ErrWorkerNotFound ¶
type ErrWorkerNotFound struct {
WorkerId string
}
ErrWorkerNotFound is returned when a worker is not found
func (*ErrWorkerNotFound) Error ¶
func (e *ErrWorkerNotFound) Error() string
func (*ErrWorkerNotFound) From ¶
func (e *ErrWorkerNotFound) From(err error) bool
From checks if the given error is an ErrWorkerNotFound
type ErrWorkerPoolNotFound ¶
type ErrWorkerPoolNotFound struct {
PoolName string
}
ErrWorkerPoolNotFound is returned when a worker pool is not found
func (*ErrWorkerPoolNotFound) Error ¶
func (e *ErrWorkerPoolNotFound) Error() string
type ErrWorkspaceNotFound ¶
ErrWorkspaceNotFound is returned when a workspace cannot be found
func (*ErrWorkspaceNotFound) Error ¶
func (e *ErrWorkspaceNotFound) Error() string
type ErrWorkspaceToolExists ¶
type ErrWorkspaceToolExists struct {
Name string
}
ErrWorkspaceToolExists is returned when a workspace tool already exists
func (*ErrWorkspaceToolExists) Error ¶
func (e *ErrWorkspaceToolExists) Error() string
type ErrWorkspaceToolNotFound ¶
ErrWorkspaceToolNotFound is returned when a workspace tool cannot be found
func (*ErrWorkspaceToolNotFound) Error ¶
func (e *ErrWorkspaceToolNotFound) Error() string
type FileMeta ¶
type FileMeta struct {
Path string `json:"path"`
Size int64 `json:"size"`
Mode uint32 `json:"mode"`
Uid uint32 `json:"uid"`
Gid uint32 `json:"gid"`
Mtime time.Time `json:"mtime"`
S3Key string `json:"s3_key,omitempty"` // Object storage key (for context files)
Symlink string `json:"symlink,omitempty"` // Target path if symlink (empty otherwise)
}
FileMeta holds metadata for a file or symlink
type FilesystemConfig ¶
type FilesystemConfig struct {
MountPoint string `key:"mountPoint" json:"mount_point"`
Verbose bool `key:"verbose" json:"verbose"`
WorkspaceStorage WorkspaceStorageConfig `key:"workspaceStorage" json:"workspace_storage"`
}
type FilesystemQuery ¶
type FilesystemQuery struct {
Id uint `json:"id" db:"id"`
ExternalId string `json:"external_id" db:"external_id"`
WorkspaceId uint `json:"workspace_id" db:"workspace_id"`
Integration string `json:"integration" db:"integration"` // "gmail", "gdrive", "notion"
Path string `json:"path" db:"path"` // Full path: "/sources/gmail/unread-emails"
Name string `json:"name" db:"name"` // Folder/file name: "unread-emails"
QuerySpec string `json:"query_spec" db:"query_spec"` // JSON query params from LLM
Guidance string `json:"guidance" db:"guidance"` // Optional user-provided context
OutputFormat QueryOutputFormat `json:"output_format" db:"output_format"` // "folder" or "file"
FileExt string `json:"file_ext" db:"file_ext"` // For files: ".json", ".md"
FilenameFormat string `json:"filename_format" db:"filename_format"` // Template for result filenames (e.g., "{date}_{subject}_{id}.txt")
CacheTTL int `json:"cache_ttl" db:"cache_ttl"` // Seconds, 0 = always live
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
LastExecuted *time.Time `json:"last_executed,omitempty" db:"last_executed"`
}
FilesystemQuery represents a user-defined query that materializes as filesystem content. When a user creates a folder like /sources/gmail/unread-emails, an LLM infers the appropriate query and stores it here. Reading the folder executes the query.
func (*FilesystemQuery) IsFile ¶
func (q *FilesystemQuery) IsFile() bool
IsFile returns true if results materialize as a single file.
func (*FilesystemQuery) IsFolder ¶
func (q *FilesystemQuery) IsFolder() bool
IsFolder returns true if results materialize as a directory.
func (*FilesystemQuery) IsLive ¶
func (q *FilesystemQuery) IsLive() bool
IsLive returns true if the query should be re-executed on every access.
type GRPCConfig ¶
type GatewayConfig ¶
type GatewayConfig struct {
GRPC GRPCConfig `key:"grpc" json:"grpc"`
HTTP HTTPConfig `key:"http" json:"http"`
ShutdownTimeout time.Duration `key:"shutdownTimeout" json:"shutdown_timeout"`
AuthToken string `key:"authToken" json:"auth_token"`
}
type GitHubConfig ¶
type GitHubConfig struct {
Enabled bool `key:"enabled" json:"enabled"`
}
GitHubConfig configures GitHub integration
type HTTPConfig ¶
type HTTPConfig struct {
Host string `key:"host" json:"host"`
Port int `key:"port" json:"port"`
EnablePrettyLogs bool `key:"enablePrettyLogs" json:"enable_pretty_logs"`
CORS CORSConfig `key:"cors" json:"cors"`
}
type IPAllocation ¶ added in v0.1.23
type IPAllocation struct {
IP string `json:"ip"`
Gateway string `json:"gateway"`
PrefixLen int `json:"prefix_len"`
}
IPAllocation represents an allocated IP for a sandbox
type ImageConfig ¶
type IntegrationAPIKey ¶
type IntegrationAPIKey struct {
APIKey string `key:"apiKey" json:"api_key"`
}
IntegrationAPIKey is a simple API key configuration
type IntegrationAuthType ¶
type IntegrationAuthType string
IntegrationAuthType defines how an integration authenticates
const ( AuthNone IntegrationAuthType = "none" AuthAPIKey IntegrationAuthType = "apikey" AuthOAuth IntegrationAuthType = "oauth" )
type IntegrationConnection ¶
type IntegrationConnection struct {
Id uint `db:"id" json:"id"`
ExternalId string `db:"external_id" json:"external_id"`
WorkspaceId uint `db:"workspace_id" json:"workspace_id"`
MemberId *uint `db:"member_id" json:"member_id,omitempty"` // nil = workspace-shared
IntegrationType string `db:"integration_type" json:"integration_type"`
Credentials []byte `db:"credentials" json:"-"` // Encrypted
Scope string `db:"scope" json:"scope,omitempty"`
ExpiresAt *time.Time `db:"expires_at" json:"expires_at,omitempty"`
CreatedAt time.Time `db:"created_at" json:"created_at"`
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
}
IntegrationConnection stores OAuth tokens or API keys for an integration
func (*IntegrationConnection) IsShared ¶
func (c *IntegrationConnection) IsShared() bool
IsShared returns true if this is a workspace-shared connection
type IntegrationCredentials ¶
type IntegrationCredentials struct {
AccessToken string `json:"access_token,omitempty"`
RefreshToken string `json:"refresh_token,omitempty"`
APIKey string `json:"api_key,omitempty"`
ExpiresAt *time.Time `json:"expires_at,omitempty"`
Extra map[string]string `json:"extra,omitempty"`
}
IntegrationCredentials contains decrypted credentials for tool execution
type IntegrationMeta ¶
type IntegrationMeta struct {
Tool ToolName
DisplayName string
Description string
Icon string
AuthType IntegrationAuthType
Scope IntegrationScope
}
IntegrationMeta contains metadata about an integration type
func GetIntegrationMeta ¶
func GetIntegrationMeta(tool ToolName) (IntegrationMeta, bool)
GetIntegrationMeta returns metadata for an integration
func ListIntegrations ¶
func ListIntegrations() []IntegrationMeta
ListIntegrations returns all registered integrations
type IntegrationOAuth ¶
type IntegrationOAuth struct {
CallbackURL string `key:"callbackUrl" json:"callback_url"` // e.g., https://api.airstore.ai/api/v1/oauth/callback
Google ProviderOAuthCredentials `key:"google" json:"google"`
GitHub ProviderOAuthCredentials `key:"github" json:"github"`
Notion ProviderOAuthCredentials `key:"notion" json:"notion"`
Slack ProviderOAuthCredentials `key:"slack" json:"slack"`
Linear ProviderOAuthCredentials `key:"linear" json:"linear"`
}
IntegrationOAuth configures OAuth for workspace integrations (gmail, gdrive, github, etc.) This is separate from admin.oauth which is for admin UI login only.
type IntegrationScope ¶
type IntegrationScope string
IntegrationScope defines whether an integration is personal or workspace-shared
const ( ScopePersonal IntegrationScope = "personal" )
type IntegrationsConfig ¶
type IntegrationsConfig struct {
Weather IntegrationAPIKey `key:"weather" json:"weather"`
Exa IntegrationAPIKey `key:"exa" json:"exa"`
GitHub GitHubConfig `key:"github" json:"github"`
}
IntegrationsConfig configures builtin tools that require API keys
type MCPAuthConfig ¶
type MCPAuthConfig struct {
// Token is the bearer token for authentication.
// For stdio: passed as MCP_AUTH_TOKEN env var (or custom var via TokenEnv)
// For remote: passed as Authorization: Bearer <token> header
Token string `key:"token" json:"token,omitempty"`
// TokenEnv specifies a custom env var name for the token (stdio only, default: MCP_AUTH_TOKEN)
TokenEnv string `key:"tokenEnv" json:"token_env,omitempty"`
// Headers are additional auth headers.
// For stdio: passed as MCP_AUTH_HEADER_<NAME> env vars
// For remote: passed directly as HTTP headers
Headers map[string]string `key:"headers" json:"headers,omitempty"`
}
MCPAuthConfig configures authentication for an MCP server. For stdio servers, auth is passed via environment variables. For remote servers, auth is passed via HTTP headers.
func (*MCPAuthConfig) Redact ¶
func (c *MCPAuthConfig) Redact() *MCPAuthConfig
Redact returns a copy of MCPAuthConfig with sensitive values redacted
type MCPServerConfig ¶
type MCPServerConfig struct {
// Local (stdio) server - spawn process
Command string `key:"command" json:"command,omitempty"` // Executable (npx, uvx, python)
Args []string `key:"args" json:"args,omitempty"` // Command arguments
Env map[string]string `key:"env" json:"env,omitempty"` // Environment variables
WorkingDir string `key:"cwd" json:"cwd,omitempty"` // Working directory
// Remote (HTTP/SSE) server - connect to URL
URL string `key:"url" json:"url,omitempty"`
// Transport specifies the remote transport type: "sse" (default) or "http" (Streamable HTTP)
Transport string `key:"transport" json:"transport,omitempty"`
// Auth for both local (env vars) and remote (HTTP headers)
Auth *MCPAuthConfig `key:"auth" json:"auth,omitempty"`
}
MCPServerConfig defines an MCP server to spawn or connect to. Set Command for local stdio servers, or URL for remote HTTP/SSE servers.
func (MCPServerConfig) GetTransport ¶
func (c MCPServerConfig) GetTransport() string
GetTransport returns the transport type, defaulting to SSE
func (MCPServerConfig) IsRemote ¶
func (c MCPServerConfig) IsRemote() bool
IsRemote returns true if this is a remote HTTP/SSE server (URL is set)
func (*MCPServerConfig) RedactConfig ¶
func (c *MCPServerConfig) RedactConfig() *MCPServerConfig
RedactConfig returns a copy of MCPServerConfig with auth values redacted
type MemberInfo ¶
type MemberInfo struct {
Id uint
ExternalId string
Email string
Role MemberRole
}
type MemberRole ¶
type MemberRole string
MemberRole represents the role of a member in a workspace
const ( RoleAdmin MemberRole = "admin" RoleMember MemberRole = "member" RoleViewer MemberRole = "viewer" )
type MetadataNotFoundError ¶
type MetadataNotFoundError struct {
Key string
}
MetadataNotFoundError is returned when metadata is not found
func (*MetadataNotFoundError) Error ¶
func (e *MetadataNotFoundError) Error() string
type PoolScalerStatus ¶
type PoolScalerStatus struct {
PoolName string `json:"pool_name"`
QueueDepth int64 `json:"queue_depth"`
InFlightTasks int64 `json:"in_flight_tasks"`
CurrentReplicas int32 `json:"current_replicas"`
MinReplicas int32 `json:"min_replicas"`
MaxReplicas int32 `json:"max_replicas"`
}
PoolScalerStatus represents the current scaling status of a pool
type PostgresConfig ¶
type PostgresConfig struct {
Host string `key:"host" json:"host"`
Port int `key:"port" json:"port"`
User string `key:"user" json:"user"`
Password string `key:"password" json:"password"`
Database string `key:"database" json:"database"`
SSLMode string `key:"sslMode" json:"ssl_mode"`
MaxOpenConns int `key:"maxOpenConns" json:"max_open_conns"`
MaxIdleConns int `key:"maxIdleConns" json:"max_idle_conns"`
ConnMaxLifetime time.Duration `key:"connMaxLifetime" json:"conn_max_lifetime"`
}
type ProviderOAuthCredentials ¶ added in v0.1.16
type ProviderOAuthCredentials struct {
ClientID string `key:"clientId" json:"client_id"`
ClientSecret string `key:"clientSecret" json:"client_secret"`
}
ProviderOAuthCredentials contains client credentials for an OAuth provider.
type QueryOutputFormat ¶
type QueryOutputFormat string
QueryOutputFormat specifies how filesystem query results are materialized.
const ( QueryOutputFolder QueryOutputFormat = "folder" // Each result as a file in a directory QueryOutputFile QueryOutputFormat = "file" // All results in a single file )
type RedisConfig ¶
type RedisConfig struct {
Mode RedisMode `key:"mode" json:"mode"`
Addrs []string `key:"addrs" json:"addrs"`
Username string `key:"username" json:"username"`
Password string `key:"password" json:"password"`
ClientName string `key:"clientName" json:"client_name"`
EnableTLS bool `key:"enableTLS" json:"enable_tls"`
InsecureSkipVerify bool `key:"insecureSkipVerify" json:"insecure_skip_verify"`
PoolSize int `key:"poolSize" json:"pool_size"`
MinIdleConns int `key:"minIdleConns" json:"min_idle_conns"`
MaxIdleConns int `key:"maxIdleConns" json:"max_idle_conns"`
ConnMaxIdleTime time.Duration `key:"connMaxIdleTime" json:"conn_max_idle_time"`
ConnMaxLifetime time.Duration `key:"connMaxLifetime" json:"conn_max_lifetime"`
DialTimeout time.Duration `key:"dialTimeout" json:"dial_timeout"`
ReadTimeout time.Duration `key:"readTimeout" json:"read_timeout"`
WriteTimeout time.Duration `key:"writeTimeout" json:"write_timeout"`
MaxRedirects int `key:"maxRedirects" json:"max_redirects"`
MaxRetries int `key:"maxRetries" json:"max_retries"`
RouteByLatency bool `key:"routeByLatency" json:"route_by_latency"`
}
type ResolvedTool ¶
type ResolvedTool struct {
Name string `json:"name"`
Help string `json:"help,omitempty"`
Origin WorkspaceToolOrigin `json:"origin"`
ExternalId string `json:"external_id,omitempty"` // Only for workspace tools
Enabled bool `json:"enabled"`
ToolCount int `json:"tool_count,omitempty"` // For MCP servers
}
ResolvedTool represents a tool with its origin and metadata for listing
type S3Config ¶
type S3Config struct {
Bucket string `key:"bucket" json:"bucket"`
Region string `key:"region" json:"region"`
Endpoint string `key:"endpoint" json:"endpoint"`
AccessKey string `key:"accessKey" json:"access_key"`
SecretKey string `key:"secretKey" json:"secret_key"`
ForcePathStyle bool `key:"forcePathStyle" json:"force_path_style"`
}
type SandboxConfig ¶
type SandboxConfig struct {
// ID is the unique identifier for this sandbox
ID string `json:"id"`
// WorkspaceID is the workspace this sandbox belongs to
WorkspaceID string `json:"workspace_id"`
// Image is the container image to use for the sandbox
Image string `json:"image"`
// Runtime is the container runtime to use (runc, gvisor)
Runtime ContainerRuntime `json:"runtime"`
// Entrypoint is the command to run in the sandbox
Entrypoint []string `json:"entrypoint"`
// Env is the environment variables to set
Env map[string]string `json:"env"`
// WorkingDir is the working directory inside the sandbox
WorkingDir string `json:"working_dir"`
// Resources specifies resource limits for the sandbox
Resources TaskResources `json:"resources"`
// Mounts specifies additional mounts for the sandbox
Mounts []SandboxMount `json:"mounts"`
// Network specifies network configuration
Network SandboxNetwork `json:"network"`
// FilesystemMount is the host path to bind-mount at /workspace (optional)
FilesystemMount string `json:"-"`
}
SandboxConfig defines the configuration for creating a sandbox
type SandboxMount ¶
type SandboxMount struct {
// Source is the host path or volume name
Source string `json:"source"`
// Destination is the path inside the sandbox
Destination string `json:"destination"`
// ReadOnly specifies if the mount is read-only
ReadOnly bool `json:"read_only"`
// Type is the mount type (bind, volume, tmpfs)
Type string `json:"type"`
}
SandboxMount specifies a mount point for a sandbox
type SandboxNetwork ¶
type SandboxNetwork struct {
// Mode is the network mode (none, host, bridge)
Mode string `json:"mode"`
// ExposedPorts is a list of ports to expose
ExposedPorts []int `json:"exposed_ports"`
}
SandboxNetwork specifies network configuration for a sandbox
type SandboxSettings ¶ added in v0.1.23
type SandboxSettings struct {
// DefaultImage is the container image used for Claude Code tasks
DefaultImage string `key:"defaultImage" json:"default_image"`
}
SandboxSettings configures the task sandbox/container runtime defaults
func (SandboxSettings) GetDefaultImage ¶ added in v0.1.23
func (c SandboxSettings) GetDefaultImage() string
GetDefaultImage returns the configured default image or the fallback
type SandboxState ¶
type SandboxState struct {
// ID is the sandbox identifier
ID string `json:"id"`
// Status is the current status
Status SandboxStatus `json:"status"`
// PID is the main process ID (0 if not running)
PID int `json:"pid"`
// ExitCode is the exit code if stopped (-1 if still running)
ExitCode int `json:"exit_code"`
// Error contains error message if failed
Error string `json:"error,omitempty"`
// ContainerIP is the container's IP address (for routing)
ContainerIP string `json:"container_ip,omitempty"`
// CreatedAt is when the sandbox was created
CreatedAt time.Time `json:"created_at"`
// StartedAt is when the sandbox started running
StartedAt time.Time `json:"started_at,omitempty"`
// FinishedAt is when the sandbox stopped
FinishedAt time.Time `json:"finished_at,omitempty"`
}
SandboxState represents the current state of a sandbox
type SandboxStatus ¶
type SandboxStatus string
SandboxStatus represents the current status of a sandbox
const ( SandboxStatusPending SandboxStatus = "pending" SandboxStatusCreating SandboxStatus = "creating" SandboxStatusRunning SandboxStatus = "running" SandboxStatusStopped SandboxStatus = "stopped" SandboxStatusFailed SandboxStatus = "failed" )
type SchedulerConfig ¶
type SchedulerConfig struct {
Enabled bool `key:"enabled" json:"enabled"`
GatewayServiceName string `key:"gatewayServiceName" json:"gateway_service_name"`
WorkerImage string `key:"workerImage" json:"worker_image"`
WorkerNamespace string `key:"workerNamespace" json:"worker_namespace"`
WorkerTTL time.Duration `key:"workerTTL" json:"worker_ttl"`
WorkerShutdownTimeout time.Duration `key:"workerShutdownTimeout" json:"worker_shutdown_timeout"` // Time to wait for tasks during graceful shutdown
CleanupInterval time.Duration `key:"cleanupInterval" json:"cleanup_interval"`
HeartbeatInterval time.Duration `key:"heartbeatInterval" json:"heartbeat_interval"`
HeartbeatTimeout time.Duration `key:"heartbeatTimeout" json:"heartbeat_timeout"`
DefaultWorkerCpu int64 `key:"defaultWorkerCpu" json:"default_worker_cpu"`
DefaultWorkerMemory int64 `key:"defaultWorkerMemory" json:"default_worker_memory"`
Pools map[string]WorkerPoolConfig `key:"pools" json:"pools"`
}
SchedulerConfig holds scheduler-specific configuration
type SmartQuery ¶
type SmartQuery = FilesystemQuery
Aliases for backward compatibility during migration
type SmartQueryOutputFormat ¶
type SmartQueryOutputFormat = QueryOutputFormat
type StreamsConfig ¶
type StreamsConfig struct {
Token string `key:"token" json:"token"` // S2 API token
Basin string `key:"basin" json:"basin"` // S2 basin name (e.g., "airstore")
}
StreamsConfig configures S2 stream storage for task logs
type Task ¶
type Task struct {
// Id is the internal ID for joins
Id uint `json:"id" db:"id"`
// ExternalId is the UUID exposed via API
ExternalId string `json:"external_id" db:"external_id"`
// WorkspaceId is the internal workspace ID (for joins)
WorkspaceId uint `json:"workspace_id" db:"workspace_id"`
// CreatedByMemberId is the member who created this task (for token auth)
CreatedByMemberId *uint `json:"created_by_member_id,omitempty" db:"created_by_member_id"`
// MemberToken is the workspace token to use for filesystem access
// This is NOT stored in the database - it's set at creation time and passed to workers
MemberToken string `json:"member_token,omitempty" db:"-"`
// Status is the current task status
Status TaskStatus `json:"status" db:"status"`
// Prompt is the Claude Code prompt (if this is a Claude Code task)
Prompt string `json:"prompt,omitempty" db:"prompt"`
// Image is the container image to use
Image string `json:"image" db:"image"`
// Entrypoint is the command to run
Entrypoint []string `json:"entrypoint" db:"entrypoint"`
// Env is environment variables for the task
Env map[string]string `json:"env" db:"env"`
// Resources specifies resource requirements (optional - uses defaults if nil)
Resources *TaskResources `json:"resources,omitempty" db:"-"`
// ExitCode is the exit code when complete
ExitCode *int `json:"exit_code,omitempty" db:"exit_code"`
// Error contains error message if failed
Error string `json:"error,omitempty" db:"error"`
// CreatedAt is when the task was created
CreatedAt time.Time `json:"created_at" db:"created_at"`
// StartedAt is when the task started running
StartedAt *time.Time `json:"started_at,omitempty" db:"started_at"`
// FinishedAt is when the task finished
FinishedAt *time.Time `json:"finished_at,omitempty" db:"finished_at"`
}
Task represents a unit of work to be executed in a sandbox
func (*Task) GetResources ¶ added in v0.1.23
func (t *Task) GetResources() TaskResources
GetResources returns resources with defaults applied.
func (*Task) IsClaudeCodeTask ¶
IsClaudeCodeTask returns true if this task has a prompt (Claude Code task)
func (*Task) IsTerminal ¶
IsTerminal returns true if the task is in a terminal state.
type TaskResources ¶
type TaskResources struct {
CPU int64 `json:"cpu"` // millicores (1000 = 1 CPU)
Memory int64 `json:"memory"` // bytes
GPU int `json:"gpu"` // count
}
TaskResources specifies resource requirements. Flow: API → Task.Resources → SandboxConfig.Resources → OCI spec limits
func (*TaskResources) Validate ¶ added in v0.1.23
func (r *TaskResources) Validate() error
Validate checks that resource values are within acceptable bounds. Returns an error describing the first invalid field found.
type TaskResult ¶
type TaskResult struct {
// ID is the task identifier
ID string `json:"id"`
// ExitCode is the exit code of the task
ExitCode int `json:"exit_code"`
// Output is the stdout/stderr output (if captured)
Output []byte `json:"output,omitempty"`
// Error contains error message if failed
Error string `json:"error,omitempty"`
// Duration is how long the task ran
Duration time.Duration `json:"duration"`
}
TaskResult contains the result of a completed task
type TaskState ¶
type TaskState struct {
// ID is the task identifier
ID string `json:"id"`
// Status is the current status
Status TaskStatus `json:"status"`
// SandboxID is the sandbox running this task (empty if not yet scheduled)
SandboxID string `json:"sandbox_id,omitempty"`
// WorkerID is the worker running this task (empty if not yet scheduled)
WorkerID string `json:"worker_id,omitempty"`
// ExitCode is the exit code if complete (-1 if still running)
ExitCode int `json:"exit_code"`
// Error contains error message if failed
Error string `json:"error,omitempty"`
// CreatedAt is when the task was created
CreatedAt time.Time `json:"created_at"`
// ScheduledAt is when the task was scheduled
ScheduledAt time.Time `json:"scheduled_at,omitempty"`
// StartedAt is when the task started running
StartedAt time.Time `json:"started_at,omitempty"`
// FinishedAt is when the task finished
FinishedAt time.Time `json:"finished_at,omitempty"`
}
TaskState represents the current state of a task
type TaskStatus ¶
type TaskStatus string
TaskStatus represents the current status of a task
const ( TaskStatusPending TaskStatus = "pending" TaskStatusScheduled TaskStatus = "scheduled" TaskStatusRunning TaskStatus = "running" TaskStatusComplete TaskStatus = "complete" TaskStatusFailed TaskStatus = "failed" TaskStatusCancelled TaskStatus = "cancelled" )
type Token ¶
type Token struct {
Id uint `db:"id" json:"id"`
ExternalId string `db:"external_id" json:"external_id"`
WorkspaceId *uint `db:"workspace_id" json:"workspace_id,omitempty"`
MemberId *uint `db:"member_id" json:"member_id,omitempty"`
TokenType TokenType `db:"token_type" json:"token_type"`
TokenHash string `db:"token_hash" json:"-"`
Name string `db:"name" json:"name"`
PoolName *string `db:"pool_name" json:"pool_name,omitempty"`
ExpiresAt *time.Time `db:"expires_at" json:"expires_at,omitempty"`
CreatedAt time.Time `db:"created_at" json:"created_at"`
LastUsedAt *time.Time `db:"last_used_at" json:"last_used_at,omitempty"`
}
Token represents an authentication token For workspace_member tokens: WorkspaceId and MemberId are set For worker tokens: WorkspaceId and MemberId are nil, PoolName may be set
type TokenValidationResult ¶
type TokenValidationResult struct {
// Workspace fields (set for workspace_member tokens)
WorkspaceId uint
WorkspaceExt string
WorkspaceName string
MemberId uint
MemberExt string
MemberEmail string
MemberRole MemberRole
// Worker fields (set for worker tokens)
PoolName string
// Common
TokenType TokenType
}
TokenValidationResult is returned when validating a token
type ToolName ¶
type ToolName string
ToolName is a type-safe tool identifier
const ( ToolWikipedia ToolName = "wikipedia" ToolWeather ToolName = "weather" ToolExa ToolName = "exa" ToolGitHub ToolName = "github" ToolGmail ToolName = "gmail" ToolNotion ToolName = "notion" ToolGDrive ToolName = "gdrive" ToolSlack ToolName = "slack" ToolLinear ToolName = "linear" )
Tool name constants - add new tools here
type ToolsConfig ¶
type ToolsConfig struct {
// Builtin API-key integrations
Integrations IntegrationsConfig `key:"integrations" json:"integrations"`
// External MCP servers (tools auto-discovered and exposed as POSIX commands)
MCP map[string]MCPServerConfig `key:"mcp" json:"mcp"`
}
ToolsConfig configures all tool sources: builtin integrations and MCP servers
type VirtualFile ¶
type VirtualFile struct {
ID string `json:"id"`
Name string `json:"name"`
Path string `json:"path"`
Type VirtualFileType `json:"type"`
IsFolder bool `json:"is_folder"`
IsSymlink bool `json:"is_symlink,omitempty"`
IsReadOnly bool `json:"is_readonly,omitempty"`
Size int64 `json:"size,omitempty"`
ModifiedAt *time.Time `json:"modified_at,omitempty"`
ChildCount int `json:"child_count,omitempty"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
}
VirtualFile represents a file or folder in the virtual filesystem
func NewRootFolder ¶
func NewRootFolder(name, path string) *VirtualFile
func NewVirtualFile ¶
func NewVirtualFile(id, name, path string, fileType VirtualFileType) *VirtualFile
func (*VirtualFile) WithChildCount ¶
func (f *VirtualFile) WithChildCount(v int) *VirtualFile
func (*VirtualFile) WithFolder ¶
func (f *VirtualFile) WithFolder(v bool) *VirtualFile
Builder methods for fluent construction
func (*VirtualFile) WithMetadata ¶
func (f *VirtualFile) WithMetadata(key string, value interface{}) *VirtualFile
func (*VirtualFile) WithModifiedAt ¶
func (f *VirtualFile) WithModifiedAt(t time.Time) *VirtualFile
func (*VirtualFile) WithReadOnly ¶
func (f *VirtualFile) WithReadOnly(v bool) *VirtualFile
func (*VirtualFile) WithSize ¶
func (f *VirtualFile) WithSize(v int64) *VirtualFile
type VirtualFileListResponse ¶
type VirtualFileListResponse struct {
Path string `json:"path"`
Entries []VirtualFile `json:"entries"`
}
type VirtualFileSearchResponse ¶ added in v0.1.10
type VirtualFileSearchResponse struct {
Query string `json:"query"`
Results []VirtualFile `json:"results"`
}
type VirtualFileTreeResponse ¶
type VirtualFileTreeResponse struct {
Path string `json:"path"`
Depth int `json:"depth"`
Entries []VirtualFile `json:"entries"`
}
type VirtualFileType ¶
type VirtualFileType string
VirtualFileType determines UI behavior and available operations
const ( VFTypeContext VirtualFileType = "context" // S3-backed writable storage (skills, user files) VFTypeStorage VirtualFileType = "storage" // S3-backed storage files (alias for context) VFTypeSource VirtualFileType = "source" // Integration sources (github, gmail, etc) VFTypeTool VirtualFileType = "tool" // Available tools VFTypeTask VirtualFileType = "task" // Running/completed tasks VFTypeRoot VirtualFileType = "root" // Virtual root directories )
type Worker ¶
type Worker struct {
ID string `json:"id" redis:"id"`
Status WorkerStatus `json:"status" redis:"status"`
PoolName string `json:"pool_name" redis:"pool_name"`
Hostname string `json:"hostname" redis:"hostname"`
Cpu int64 `json:"cpu" redis:"cpu"`
Memory int64 `json:"memory" redis:"memory"`
LastSeenAt time.Time `json:"last_seen_at" redis:"last_seen_at"`
RegisteredAt time.Time `json:"registered_at" redis:"registered_at"`
Version string `json:"version" redis:"version"`
}
Worker represents a worker that can execute workloads
type WorkerInfo ¶
type WorkerInfo struct {
PoolName string
}
type WorkerJobOpts ¶
type WorkerJobOpts struct {
PoolName string
Cpu int64
Memory int64
Image string
Namespace string
Labels map[string]string
Env map[string]string
}
WorkerJobOpts contains options for creating a worker Kubernetes Job
type WorkerPaths ¶
type WorkerPaths struct {
// BundleDir is where sandbox bundles are created
BundleDir string `key:"bundleDir" json:"bundle_dir"`
// StateDir is where overlay state is stored (should be tmpfs)
StateDir string `key:"stateDir" json:"state_dir"`
// MountDir is where per-task FUSE mounts are created
MountDir string `key:"mountDir" json:"mount_dir"`
// CLIBinary is the path to the CLI binary for mounting
CLIBinary string `key:"cliBinary" json:"cli_binary"`
// WorkerMount is the global worker FUSE mount path
WorkerMount string `key:"workerMount" json:"worker_mount"`
}
WorkerPaths configures filesystem paths for the worker
func DefaultWorkerPaths ¶
func DefaultWorkerPaths() WorkerPaths
DefaultWorkerPaths returns sensible defaults for worker paths
type WorkerPoolConfig ¶
type WorkerPoolConfig struct {
// DeploymentName is the K8s Deployment to scale (auto-generated if empty)
DeploymentName string `key:"deploymentName" json:"deployment_name"`
// Namespace is the K8s namespace
Namespace string `key:"namespace" json:"namespace"`
// MinReplicas is the minimum number of workers
MinReplicas int32 `key:"minReplicas" json:"min_replicas"`
// MaxReplicas is the maximum number of workers
MaxReplicas int32 `key:"maxReplicas" json:"max_replicas"`
// ScaleDownDelay is how long queue must be empty before scaling down
ScaleDownDelay time.Duration `key:"scaleDownDelay" json:"scale_down_delay"`
// Cpu is the CPU request/limit for workers (e.g., "500m", "1")
Cpu string `key:"cpu" json:"cpu"`
// Memory is the memory request/limit for workers (e.g., "512Mi", "1Gi")
Memory string `key:"memory" json:"memory"`
}
WorkerPoolConfig defines the configuration for a worker pool
func NewWorkerPoolConfig ¶
func NewWorkerPoolConfig() *WorkerPoolConfig
NewWorkerPoolConfig creates a new WorkerPoolConfig with default values
type WorkerPoolState ¶
type WorkerPoolState struct {
Name string `json:"name"`
Status WorkerPoolStatus `json:"status"`
TotalWorkers int `json:"total_workers"`
AvailableWorkers int `json:"available_workers"`
}
WorkerPoolState represents the current state of a worker pool
type WorkerPoolStatus ¶
type WorkerPoolStatus string
WorkerPoolStatus represents the health status of a worker pool
const ( WorkerPoolStatusHealthy WorkerPoolStatus = "healthy" WorkerPoolStatusDegraded WorkerPoolStatus = "degraded" )
type WorkerStatus ¶
type WorkerStatus string
WorkerStatus represents the status of a worker
const ( WorkerStatusPending WorkerStatus = "pending" WorkerStatusAvailable WorkerStatus = "available" WorkerStatusBusy WorkerStatus = "busy" WorkerStatusDraining WorkerStatus = "draining" WorkerStatusOffline WorkerStatus = "offline" )
type Workspace ¶
type Workspace struct {
Id uint `json:"id" db:"id"` // Internal ID for joins
ExternalId string `json:"external_id" db:"external_id"` // External UUID for API
Name string `json:"name" db:"name"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}
Workspace represents a workspace that contains tasks
type WorkspaceInfo ¶
type WorkspaceMember ¶
type WorkspaceMember struct {
Id uint `db:"id" json:"id"`
ExternalId string `db:"external_id" json:"external_id"`
WorkspaceId uint `db:"workspace_id" json:"workspace_id"`
Email string `db:"email" json:"email"`
Name string `db:"name" json:"name"`
Role MemberRole `db:"role" json:"role"`
CreatedAt time.Time `db:"created_at" json:"created_at"`
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
}
WorkspaceMember represents a user who belongs to a workspace
type WorkspaceStorageConfig ¶
type WorkspaceStorageConfig struct {
DefaultBucketPrefix string `key:"defaultBucketPrefix" json:"default_bucket_prefix"`
DefaultAccessKey string `key:"defaultAccessKey" json:"default_access_key"`
DefaultSecretKey string `key:"defaultSecretKey" json:"default_secret_key"`
DefaultEndpointUrl string `key:"defaultEndpointUrl" json:"default_endpoint_url"`
DefaultRegion string `key:"defaultRegion" json:"default_region"`
}
WorkspaceStorageConfig for per-workspace S3 buckets (bucket: {prefix}-{workspace_id})
func (WorkspaceStorageConfig) IsConfigured ¶
func (c WorkspaceStorageConfig) IsConfigured() bool
type WorkspaceTool ¶
type WorkspaceTool struct {
Id uint `json:"id" db:"id"`
ExternalId string `json:"external_id" db:"external_id"`
WorkspaceId uint `json:"workspace_id" db:"workspace_id"`
Name string `json:"name" db:"name"`
ProviderType WorkspaceToolProviderType `json:"provider_type" db:"provider_type"`
Config json.RawMessage `json:"config" db:"config"` // Serialized MCPServerConfig
Manifest json.RawMessage `json:"manifest,omitempty" db:"manifest"` // Cached tools/list output
CreatedByMemberId *uint `json:"created_by_member_id,omitempty" db:"created_by_member_id"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}
WorkspaceTool represents a workspace-scoped tool provider stored in the database
func (*WorkspaceTool) GetMCPConfig ¶
func (t *WorkspaceTool) GetMCPConfig() (*MCPServerConfig, error)
GetMCPConfig deserializes the config as MCPServerConfig
func (*WorkspaceTool) SetMCPConfig ¶
func (t *WorkspaceTool) SetMCPConfig(cfg *MCPServerConfig) error
SetMCPConfig serializes an MCPServerConfig into the config field
type WorkspaceToolOrigin ¶
type WorkspaceToolOrigin string
WorkspaceToolOrigin indicates where a tool comes from
const ( ToolOriginGlobal WorkspaceToolOrigin = "global" ToolOriginWorkspace WorkspaceToolOrigin = "workspace" )
type WorkspaceToolProviderType ¶
type WorkspaceToolProviderType string
WorkspaceToolProviderType represents the type of tool provider
const ( // ProviderTypeMCP is an MCP server (stdio or remote) ProviderTypeMCP WorkspaceToolProviderType = "mcp" )
type WorkspaceToolResponse ¶
type WorkspaceToolResponse struct {
ExternalId string `json:"external_id"`
Name string `json:"name"`
ProviderType string `json:"provider_type"`
ToolCount int `json:"tool_count,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
WorkspaceToolResponse is the API response for a workspace tool
type WorkspaceToolSetting ¶
type WorkspaceToolSetting struct {
Id uint `json:"id" db:"id"`
WorkspaceId uint `json:"workspace_id" db:"workspace_id"`
ToolName string `json:"tool_name" db:"tool_name"`
Enabled bool `json:"enabled" db:"enabled"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}
WorkspaceToolSetting represents the enabled/disabled state of a single tool for a workspace
type WorkspaceToolSettings ¶
type WorkspaceToolSettings struct {
WorkspaceId uint
// DisabledTools is a set of tool names that are disabled
// Tools not in this map are enabled by default
DisabledTools map[string]bool
}
WorkspaceToolSettings is a collection of tool settings for a workspace Provides helper methods for checking tool state
func NewWorkspaceToolSettings ¶
func NewWorkspaceToolSettings(workspaceId uint) *WorkspaceToolSettings
NewWorkspaceToolSettings creates a new WorkspaceToolSettings instance
func (*WorkspaceToolSettings) IsDisabled ¶
func (s *WorkspaceToolSettings) IsDisabled(toolName string) bool
IsDisabled returns true if the tool is disabled for this workspace
func (*WorkspaceToolSettings) IsEnabled ¶
func (s *WorkspaceToolSettings) IsEnabled(toolName string) bool
IsEnabled returns true if the tool is enabled for this workspace
func (*WorkspaceToolSettings) SetEnabled ¶
func (s *WorkspaceToolSettings) SetEnabled(toolName string, enabled bool)
SetEnabled sets the enabled state for a tool