types

package
v0.1.17 Latest Latest
Warning

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

Go to latest
Published: Feb 3, 2026 License: AGPL-3.0, AGPL-3.0-or-later Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ModeLocal  = "local"  // No Redis/Postgres, S3 direct
	ModeRemote = "remote" // Full infrastructure
)

Mode constants for gateway operation

View Source
const (
	MCPTransportSSE  = "sse"  // Server-Sent Events (default)
	MCPTransportHTTP = "http" // Streamable HTTP
)

Transport type constants

View Source
const (
	SmartQueryOutputFolder = QueryOutputFolder
	SmartQueryOutputFile   = QueryOutputFile
)
View Source
const (
	DirNameSkills  = "skills"
	DirNameSources = "sources"
	DirNameTools   = "tools"
	DirNameTasks   = "tasks"

	PathRoot    = "/"
	PathSkills  = "/skills"
	PathSources = "/sources"
	PathTools   = "/tools"
	PathTasks   = "/tasks"
)

Directory names and paths

View Source
const (
	MetaKeyProvider   = "provider"
	MetaKeyExternalID = "external_id"
	MetaKeyGuidance   = "guidance"
	MetaKeyHidden     = "hidden"
)

Metadata keys

View Source
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

View Source
const ClaudeCodeImage = "ghcr.io/beam-cloud/claude-code:latest"

ClaudeCodeImage is the hardcoded image for Claude Code tasks

View Source
const (
	SourceStatusFile = "README.md" // Status and description file at integration root
)

Source integration files

View Source
const (
	WorkerStateTTL = 5 * time.Minute // TTL for worker state (refreshed by heartbeat)
)

Worker TTL constant

Variables

View Source
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

func GeneratePathID(path string) string

GeneratePathID generates a unique ID for a path (for Redis keys)

func GenerateS3Key

func GenerateS3Key(workspace, path string) string

GenerateS3Key generates an S3 object key for a context file

func IsPersonalScope

func IsPersonalScope(tool ToolName) bool

IsPersonalScope returns true if the integration is personal by default

func IsReservedFolder

func IsReservedFolder(name string) bool

func IsVirtualFolder

func IsVirtualFolder(name string) bool

func JoinPath

func JoinPath(segments ...string) string

Path helpers

func RequiresAuth

func RequiresAuth(tool ToolName) bool

RequiresAuth returns true if the integration needs credentials

func SkillsPath

func SkillsPath(subpath string) string

func SourcePath

func SourcePath(subpath string) string

func ToolsPath

func ToolsPath(subpath string) string

func WorkspaceBucketName

func WorkspaceBucketName(prefix, workspaceExternalId string) string

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"`
	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

func (c *AppConfig) IsLocalMode() bool

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 (a *AuthInfo) CanAccessPool(poolName string) bool

func (*AuthInfo) CanWrite

func (a *AuthInfo) CanWrite() bool

func (*AuthInfo) HasWorkspaceAccess

func (a *AuthInfo) HasWorkspaceAccess(workspaceExtId string) bool

func (*AuthInfo) IsAdmin

func (a *AuthInfo) IsAdmin() bool

func (*AuthInfo) IsClusterAdmin

func (a *AuthInfo) IsClusterAdmin() bool

func (*AuthInfo) IsWorker

func (a *AuthInfo) IsWorker() bool

func (*AuthInfo) IsWorkspaceMember

func (a *AuthInfo) IsWorkspaceMember() bool

type CORSConfig

type CORSConfig struct {
	AllowedOrigins []string `key:"allowOrigins" json:"allow_origins"`
	AllowedMethods []string `key:"allowMethods" json:"allow_methods"`
	AllowedHeaders []string `key:"allowHeaders" json:"allow_headers"`
}

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

func (*DirEntry) IsDir

func (e *DirEntry) IsDir() bool

IsDir returns true if this entry is a directory

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

type ErrWorkspaceNotFound struct {
	ExternalId string
	Name       string
}

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

type ErrWorkspaceToolNotFound struct {
	Name       string
	ExternalId string
}

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

func (f *FileMeta) IsSymlink() bool

IsSymlink returns true if this file metadata represents a 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 GRPCConfig struct {
	Port           int `key:"port" json:"port"`
	MaxRecvMsgSize int `key:"maxRecvMsgSize" json:"max_recv_msg_size"`
	MaxSendMsgSize int `key:"maxSendMsgSize" json:"max_send_msg_size"`
}

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 ImageConfig

type ImageConfig struct {
	S3        S3Config `key:"s3" json:"s3"`
	CachePath string   `key:"cachePath" json:"cache_path"`
	WorkPath  string   `key:"workPath" json:"work_path"`
	MountPath string   `key:"mountPath" json:"mount_path"`
}

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"
	ScopeShared   IntegrationScope = "shared"
)

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 RedisMode

type RedisMode string
const (
	RedisModeSingle  RedisMode = "single"
	RedisModeCluster RedisMode = "cluster"
)

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 SandboxResources `json:"resources"`

	// Mounts specifies additional mounts for the sandbox
	Mounts []SandboxMount `json:"mounts"`

	// Network specifies network configuration
	Network SandboxNetwork `json:"network"`
}

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 SandboxResources

type SandboxResources struct {
	// CPU limit in millicores (e.g., 1000 = 1 CPU)
	CPU int64 `json:"cpu"`

	// Memory limit in bytes
	Memory int64 `json:"memory"`

	// GPU count (0 = no GPU)
	GPU int `json:"gpu"`
}

SandboxResources specifies resource limits for a sandbox

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"`

	// 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"`

	// 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) IsClaudeCodeTask

func (t *Task) IsClaudeCodeTask() bool

IsClaudeCodeTask returns true if this task has a prompt (Claude Code task)

func (*Task) IsTerminal

func (t *Task) IsTerminal() bool

IsTerminal returns true if the task is in a terminal state.

type TaskResources

type TaskResources struct {
	// CPU in millicores (e.g., 1000 = 1 CPU)
	CPU int64 `json:"cpu"`

	// Memory in bytes
	Memory int64 `json:"memory"`

	// GPU count (0 = no GPU)
	GPU int `json:"gpu"`
}

TaskResources specifies resource requirements for a task

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 TokenType

type TokenType string

TokenType represents the type of authentication token.

const (
	TokenTypeClusterAdmin    TokenType = "cluster_admin"
	TokenTypeWorkspaceMember TokenType = "workspace_member"
	TokenTypeWorker          TokenType = "worker"
)

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

func (ToolName) String

func (t ToolName) String() string

String returns the string representation

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 WorkspaceInfo struct {
	Id         uint
	ExternalId string
	Name       string
}

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

Jump to

Keyboard shortcuts

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