manifest

package
v2.0.10 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 (
	SchemaVersionV8 = "redevplugin.manifest.v8"
)
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 either the frozen v8 typed manifest or the forward-compatible v9 lossless document.

func DescriptorHashInput

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

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

func (m Manifest) APIVersion() string

func (Manifest) PluginID

func (m Manifest) PluginID() string

func (Manifest) PresentationCatalog

func (m Manifest) PresentationCatalog() PresentationCatalog

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 Model

type Model struct {
	Manifest
	SchemaSource string
	API          PublicAPIRequirement
	Permissions  []PermissionID
}

Model is the single normalized manifest representation consumed after the decode boundary. Manifest is embedded for source compatibility while downstream packages migrate away from schema-specific fields.

func DecodeModel

func DecodeModel(r io.Reader) (Model, error)

func Normalize

func Normalize(legacy Manifest) (Model, error)

Normalize converts a previously decoded manifest into the current behavior model. It is used by durable-record migration and legacy callers.

func RestoreModel

func RestoreModel(legacy Manifest, source string, api PublicAPIRequirement, permissions []PermissionID) (Model, error)

RestoreModel rebuilds the normalized behavior projection persisted by the registry. The manifest payload remains the legacy-compatible typed form; source and public API fields carry the author schema facts not represented in that payload.

func (Model) OptionalFeatureIDs

func (m Model) OptionalFeatureIDs() []FeatureID

func (Model) PermissionIDs

func (m Model) PermissionIDs() []PermissionID

func (Model) RequiredFeatureIDs

func (m Model) RequiredFeatureIDs() []FeatureID

func (Model) String

func (m Model) String() string

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"`
	APIVersion        string `json:"api_version"`
	MinRuntimeVersion string `json:"min_runtime_version"`
	UIProtocolVersion string `json:"ui_protocol_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 {
	Surface          *uint16     `json:"surface,omitempty"`
	Worker           *uint16     `json:"worker,omitempty"`
	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"`
	ABI              string     `json:"abi"`
	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