manifest

package
v3.0.2 Latest Latest
Warning

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

Go to latest
Published: Aug 17, 2026 License: MIT Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CancelDisableBehaviorCancel = "cancel"
	CancelDisableBehaviorOrphan = "orphan"
	CancelDisableBehaviorWait   = "wait"

	CancelUninstallBehaviorCancelThenBlockDelete = "cancel_then_block_delete"
	CancelUninstallBehaviorForceCleanupAllowed   = "force_cleanup_allowed"
)
View Source
const (
	WorkerModeJob             WorkerMode = "job"
	MaxWorkerMemoryLimitBytes int64      = 256 << 20
	MaxStorageStores                     = 16
	MaxStoreQuotaBytes        int64      = 1 << 30
	MaxStoreQuotaFiles        int64      = 100_000
	DefaultStoreQuotaFiles    int64      = 10_000
)
View Source
const PluginAPIMajor uint16 = 1
View Source
const SchemaVersionV9 = "redevplugin.manifest.v9"

Variables

View Source
var ErrUnsupportedFeature = errors.New("UNSUPPORTED_FEATURE")
View Source
var ErrUnsupportedPermission = errors.New("UNSUPPORTED_PERMISSION")

Functions

func CanonicalJSON

func CanonicalJSON(raw []byte) ([]byte, error)

CanonicalJSON returns the exact hash input for the current manifest.

func DescriptorHashInput

func DescriptorHashInput(m Manifest) ([]byte, error)

func MarshalCanonical

func MarshalCanonical(current Manifest) ([]byte, error)

MarshalCanonical returns the current manifest wire representation. Package installation should retain the original canonical bytes; this encoder is for current in-memory records and deterministic tests only.

func PresentationCatalogSHA256

func PresentationCatalogSHA256(catalog PresentationCatalog) (string, error)

func Validate

func Validate(m Manifest) error

Types

type CancelPolicySpec

type CancelPolicySpec struct {
	Cancelable        bool   `json:"cancelable"`
	DisableBehavior   string `json:"disable_behavior,omitempty"`
	UninstallBehavior string `json:"uninstall_behavior,omitempty"`
	AckTimeoutMS      int    `json:"ack_timeout_ms,omitempty"`
}

type CapabilityBinding

type CapabilityBinding struct {
	BindingID string                 `json:"binding_id"`
	Contract  capabilitycontract.Pin `json:"contract"`
}

type CompiledMethodSchemas

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

CompiledMethodSchemas holds the closed request and response contracts for one manifest method. The compiled validators are safe for concurrent validation.

func CompileMethodSchemas

func CompileMethodSchemas(method MethodSpec) (*CompiledMethodSchemas, error)

CompileMethodSchemas validates and compiles a method's JSON Schema contracts. Remote schema loading is disabled so package validation remains deterministic and cannot perform network I/O.

func (*CompiledMethodSchemas) ValidateRequest

func (s *CompiledMethodSchemas) ValidateRequest(value map[string]any) error

func (*CompiledMethodSchemas) ValidateResponse

func (s *CompiledMethodSchemas) ValidateResponse(value any) error

type ConfirmationMode

type ConfirmationMode string
const (
	ConfirmationNone      ConfirmationMode = "none"
	ConfirmationRequired  ConfirmationMode = "required"
	ConfirmationRiskBased ConfirmationMode = "risk_based"
)

type ConfirmationSpec

type ConfirmationSpec struct {
	Mode              ConfirmationMode `json:"mode"`
	PreflightMethod   *string          `json:"preflight_method,omitempty"`
	RequestHashFields []string         `json:"request_hash_fields,omitempty"`
	PlanHashRequired  bool             `json:"plan_hash_required,omitempty"`
}

type FeatureID

type FeatureID string
const (
	FeatureIOStream      FeatureID = "io.stream.v1"
	FeatureFSWorkspace   FeatureID = "fs.workspace.v1"
	FeatureFSHome        FeatureID = "fs.home.v1"
	FeatureFSEnvironment FeatureID = "fs.environment.v1"
	FeatureFSWatch       FeatureID = "fs.watch.v1"
	FeatureNetHTTP       FeatureID = "net.http.v1"
	FeatureNetWebSocket  FeatureID = "net.websocket.v1"
	FeatureNetTCP        FeatureID = "net.tcp.v1"
	FeatureNetUDP        FeatureID = "net.udp.v1"
)

type IntentSpec

type IntentSpec struct {
	IntentID      string         `json:"intent_id"`
	Method        string         `json:"method"`
	PayloadSchema map[string]any `json:"payload_schema,omitempty"`
}

type LocalizedSettingPresentation

type LocalizedSettingPresentation struct {
	Key     string              `json:"key"`
	Label   string              `json:"label"`
	Options []SettingOptionSpec `json:"options"`
}

type LocalizedSurfacePresentation

type LocalizedSurfacePresentation struct {
	SurfaceID string `json:"surface_id"`
	Label     string `json:"label"`
}

type Manifest

type Manifest struct {
	SchemaVersion      string               `json:"schema_version"`
	Publisher          Publisher            `json:"publisher"`
	Plugin             Plugin               `json:"plugin"`
	API                PublicAPIRequirement `json:"api"`
	Permissions        []PermissionID       `json:"permissions"`
	Presentation       PresentationSpec     `json:"presentation"`
	Surfaces           []SurfaceSpec        `json:"surfaces,omitempty"`
	CapabilityBindings []CapabilityBinding  `json:"capability_bindings,omitempty"`
	Methods            []MethodSpec         `json:"methods,omitempty"`
	Workers            []WorkerSpec         `json:"workers,omitempty"`
	Storage            *StorageSpec         `json:"storage,omitempty"`
	NetworkAccess      *NetworkAccessSpec   `json:"network_access,omitempty"`
	Settings           *SettingsSpec        `json:"settings,omitempty"`
	Intents            []IntentSpec         `json:"intents,omitempty"`
}

func Decode

func Decode(r io.Reader) (Manifest, error)

func (Manifest) OptionalFeatureIDs

func (m Manifest) OptionalFeatureIDs() []FeatureID

func (Manifest) PermissionIDs

func (m Manifest) PermissionIDs() []PermissionID

func (Manifest) PluginID

func (m Manifest) PluginID() string

func (Manifest) PresentationCatalog

func (m Manifest) PresentationCatalog() PresentationCatalog

func (Manifest) RequiredFeatureIDs

func (m Manifest) RequiredFeatureIDs() []FeatureID

func (Manifest) Version

func (m Manifest) Version() string

type MethodBrokerAccessSpec

type MethodBrokerAccessSpec struct {
	Storage []StorageBrokerAccessSpec `json:"storage,omitempty"`
	Network []NetworkBrokerAccessSpec `json:"network,omitempty"`
}

type MethodEffect

type MethodEffect string
const (
	MethodEffectRead    MethodEffect = "read"
	MethodEffectWrite   MethodEffect = "write"
	MethodEffectExecute MethodEffect = "execute"
	MethodEffectDelete  MethodEffect = "delete"
	MethodEffectAdmin   MethodEffect = "admin"
)

type MethodExecutionMode

type MethodExecutionMode string
const (
	MethodExecutionSync         MethodExecutionMode = "sync"
	MethodExecutionOperation    MethodExecutionMode = "operation"
	MethodExecutionSubscription MethodExecutionMode = "subscription"
)

type MethodRouteKind

type MethodRouteKind string
const (
	MethodRouteCapability MethodRouteKind = "capability"
	MethodRouteWorker     MethodRouteKind = "worker"
	MethodRouteCoreAction MethodRouteKind = "core_action"
)

type MethodRouteSpec

type MethodRouteSpec struct {
	Kind         MethodRouteKind `json:"kind"`
	BindingID    string          `json:"binding_id,omitempty"`
	TargetMethod string          `json:"target_method,omitempty"`
	WorkerID     string          `json:"worker_id,omitempty"`
	ActionID     string          `json:"action_id,omitempty"`
}

type MethodSpec

type MethodSpec struct {
	Method         string                  `json:"method"`
	Effect         MethodEffect            `json:"effect,omitempty"`
	Execution      MethodExecutionMode     `json:"execution,omitempty"`
	Dangerous      bool                    `json:"dangerous,omitempty"`
	PreflightOnly  bool                    `json:"preflight_only,omitempty"`
	Confirmation   *ConfirmationSpec       `json:"confirmation,omitempty"`
	CancelPolicy   *CancelPolicySpec       `json:"cancel_policy,omitempty"`
	RequestSchema  map[string]any          `json:"request_schema,omitempty"`
	ResponseSchema map[string]any          `json:"response_schema,omitempty"`
	Route          MethodRouteSpec         `json:"route"`
	BrokerAccess   *MethodBrokerAccessSpec `json:"broker_access,omitempty"`
}

type NetworkAccessSpec

type NetworkAccessSpec struct {
	Connectors []NetworkConnectorSpec `json:"connectors,omitempty"`
}

type NetworkBrokerAccessSpec

type NetworkBrokerAccessSpec struct {
	ConnectorID string   `json:"connector_id"`
	Transport   string   `json:"transport"`
	Scope       string   `json:"scope,omitempty"`
	Operations  []string `json:"operations"`
	HTTPMethods []string `json:"http_methods,omitempty"`
}

type NetworkConnectorSpec

type NetworkConnectorSpec struct {
	ConnectorID  string         `json:"connector_id"`
	Transport    string         `json:"transport"`
	Scope        string         `json:"scope"`
	Destinations []string       `json:"destinations"`
	Auth         map[string]any `json:"auth,omitempty"`
	TLS          map[string]any `json:"tls,omitempty"`
}

type PermissionID

type PermissionID string
const (
	PermissionFSWorkspaceRead    PermissionID = "fs.workspace.read"
	PermissionFSWorkspaceWrite   PermissionID = "fs.workspace.write"
	PermissionFSHomeRead         PermissionID = "fs.home.read"
	PermissionFSHomeWrite        PermissionID = "fs.home.write"
	PermissionFSEnvironmentRead  PermissionID = "fs.environment.read"
	PermissionFSEnvironmentWrite PermissionID = "fs.environment.write"
	PermissionNetworkClient      PermissionID = "network.client"
	PermissionNetworkListen      PermissionID = "network.listen"
)

type Plugin

type Plugin struct {
	PluginID    string `json:"plugin_id"`
	DisplayName string `json:"display_name"`
	Version     string `json:"version"`
}

type PresentationCatalog

type PresentationCatalog struct {
	DefaultLocale string                `json:"default_locale"`
	Locales       []PresentationLocale  `json:"locales"`
	Icon          *PresentationIconSpec `json:"icon,omitempty"`
}

type PresentationIconSpec

type PresentationIconSpec struct {
	Path string `json:"path"`
}

type PresentationLocale

type PresentationLocale struct {
	Locale        string                        `json:"locale"`
	PluginName    string                        `json:"plugin_name"`
	PublisherName string                        `json:"publisher_name,omitempty"`
	Summary       string                        `json:"summary"`
	Description   []string                      `json:"description"`
	Highlights    []string                      `json:"highlights"`
	Keywords      []string                      `json:"keywords"`
	Surfaces      []ResolvedSurfacePresentation `json:"surfaces"`
	Settings      []ResolvedSettingPresentation `json:"settings"`
}

type PresentationLocalizationSpec

type PresentationLocalizationSpec struct {
	Locale        string                         `json:"locale"`
	PluginName    string                         `json:"plugin_name"`
	PublisherName string                         `json:"publisher_name,omitempty"`
	Summary       string                         `json:"summary"`
	Description   []string                       `json:"description"`
	Highlights    []string                       `json:"highlights"`
	Keywords      []string                       `json:"keywords"`
	Surfaces      []LocalizedSurfacePresentation `json:"surfaces"`
	Settings      []LocalizedSettingPresentation `json:"settings"`
}

type PresentationSpec

type PresentationSpec struct {
	DefaultLocale string                         `json:"default_locale"`
	Summary       string                         `json:"summary"`
	Description   []string                       `json:"description"`
	Highlights    []string                       `json:"highlights"`
	Keywords      []string                       `json:"keywords"`
	Localizations []PresentationLocalizationSpec `json:"localizations"`
	Icon          *PresentationIconSpec          `json:"icon,omitempty"`
}

type PublicAPIRequirement

type PublicAPIRequirement struct {
	Major            uint16      `json:"major"`
	RequiredFeatures []FeatureID `json:"required_features,omitempty"`
	OptionalFeatures []FeatureID `json:"optional_features,omitempty"`
}

type Publisher

type Publisher struct {
	PublisherID string `json:"publisher_id"`
	DisplayName string `json:"display_name,omitempty"`
}

type ResolvedPresentation

type ResolvedPresentation struct {
	RequestedLocale string                        `json:"requested_locale,omitempty"`
	ResolvedLocale  string                        `json:"resolved_locale"`
	DefaultLocale   string                        `json:"default_locale"`
	PluginName      string                        `json:"plugin_name"`
	PublisherName   string                        `json:"publisher_name,omitempty"`
	Summary         string                        `json:"summary"`
	Description     []string                      `json:"description"`
	Highlights      []string                      `json:"highlights"`
	Keywords        []string                      `json:"keywords"`
	Surfaces        []ResolvedSurfacePresentation `json:"surfaces"`
	Settings        []ResolvedSettingPresentation `json:"settings"`
	Icon            *PresentationIconSpec         `json:"icon,omitempty"`
}

func ResolvePresentation

func ResolvePresentation(catalog PresentationCatalog, requestedLocale string) ResolvedPresentation

type ResolvedSettingPresentation

type ResolvedSettingPresentation struct {
	Key     string              `json:"key"`
	Label   string              `json:"label"`
	Options []SettingOptionSpec `json:"options"`
}

type ResolvedSurfacePresentation

type ResolvedSurfacePresentation struct {
	SurfaceID string `json:"surface_id"`
	Label     string `json:"label"`
}

type SettingFieldSpec

type SettingFieldSpec struct {
	Key        string              `json:"key"`
	Type       string              `json:"type"`
	Label      string              `json:"label"`
	Scope      string              `json:"scope"`
	Default    any                 `json:"default,omitempty"`
	SecretRef  string              `json:"secret_ref,omitempty"`
	Options    []SettingOptionSpec `json:"options,omitempty"`
	Validation map[string]any      `json:"validation,omitempty"`
}

type SettingOptionSpec

type SettingOptionSpec struct {
	Value string `json:"value"`
	Label string `json:"label"`
}

type SettingsSpec

type SettingsSpec struct {
	SchemaVersion int                `json:"schema_version"`
	Fields        []SettingFieldSpec `json:"fields,omitempty"`
}

type StorageBrokerAccessSpec

type StorageBrokerAccessSpec struct {
	StoreID    string   `json:"store_id"`
	Operations []string `json:"operations"`
}

type StorageSpec

type StorageSpec struct {
	Stores []StoreSpec `json:"stores,omitempty"`
}

type StoreSpec

type StoreSpec struct {
	StoreID       string `json:"store_id"`
	Kind          string `json:"kind"`
	Scope         string `json:"scope"`
	QuotaBytes    int64  `json:"quota_bytes"`
	QuotaFiles    *int64 `json:"quota_files,omitempty"`
	SchemaVersion int    `json:"schema_version"`
}

type SurfaceIntent

type SurfaceIntent string
const (
	SurfaceIntentPrimary   SurfaceIntent = "primary"
	SurfaceIntentSecondary SurfaceIntent = "secondary"
	SurfaceIntentUtility   SurfaceIntent = "utility"
)

type SurfaceKind

type SurfaceKind string
const (
	SurfaceView       SurfaceKind = "view"
	SurfaceCommand    SurfaceKind = "command"
	SurfaceBackground SurfaceKind = "background"
)

type SurfaceSpec

type SurfaceSpec struct {
	SurfaceID   string          `json:"surface_id"`
	Kind        SurfaceKind     `json:"kind"`
	Intent      SurfaceIntent   `json:"intent,omitempty"`
	Label       string          `json:"label"`
	Entry       string          `json:"entry"`
	Icon        string          `json:"icon,omitempty"`
	DefaultSize *WidgetSizeSpec `json:"default_size,omitempty"`
}

type ValidationError

type ValidationError struct {
	Field   string
	Message string
}

func (ValidationError) Error

func (e ValidationError) Error() string

type WidgetSizeSpec

type WidgetSizeSpec struct {
	Width  int `json:"width"`
	Height int `json:"height"`
}

type WorkerMode

type WorkerMode string

type WorkerSpec

type WorkerSpec struct {
	WorkerID         string     `json:"worker_id"`
	Artifact         string     `json:"artifact"`
	Mode             WorkerMode `json:"mode"`
	Scope            string     `json:"scope"`
	MemoryLimitBytes int64      `json:"memory_limit_bytes"`
	IdleTimeoutMS    int        `json:"idle_timeout_ms,omitempty"`
}

Jump to

Keyboard shortcuts

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