Defines the host<->guest wire contract for the .so -> wazero migration as a repo-local buf module (abi/proto/v1, generated Go in abi/v1): - manifest.proto: PluginManifest mirroring every static field of plugin.PluginRegistration (abi_version, deps, block/template registrations, admin pages, settings schema, theme presets, fonts, master pages, AI actions, RBAC method roles, CSS manifest, icon packs, directory extensions, job types, RAG fetcher types, settings panel, hook flags, core service bindings) - invoke.proto: bn_invoke envelope, Hook catalog (RENDER_BLOCK, RENDER_TEMPLATE, HANDLE_HTTP, JOB, LOAD, UNLOAD, RAG_FETCH, MEDIA_HOOK, DESCRIBE), AbiError, and job/lifecycle/rag/media/describe payloads - render.proto: RenderBlock/RenderTemplate payloads + RenderContext enumerating every ctx value from blocks/context.go (incl. BlockContext 1:1) - http.proto: buffered HttpRequest/HttpResponse for HANDLE_HTTP - db.proto: guest sql-driver messages (DbValue oneof over pgx-mappable types, query/exec/tx with host-side tx handles, SQLSTATE-carrying DbError) - capability.proto: HostCall envelope + one request/response pair per CoreServices interface method (content, settings+update, gating, crypto, menus, datasources, users, subscriptions, media.deposit, email.send, ai.text_call, ai.tools.register, bridge, jobs.submit, embeddings, rag, reviews, badges.refresh) The abi/ buf module is deliberately separate from the repo-root config: proto/ is the shared block/proto submodule (service API contracts); the ABI is SDK-internal and versions in lockstep with the guest shim. New `make abi` target runs buf lint + generate. docs/wasm-abi.md documents the ptr+len calling convention (bn_alloc, bn_invoke, packed u64), hook catalog, error semantics, abi_version evolution rules, and the full registration/ CoreServices coverage tables. Verified: `cd abi && buf lint` exit 0; `go build ./...` exit 0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1451 lines
47 KiB
Go
1451 lines
47 KiB
Go
// manifest.proto — the static plugin manifest (WO-WZ-001).
|
|
//
|
|
// PluginManifest is the wire form of everything that is *static data* in
|
|
// core/plugin/registration.go (PluginRegistration). It is produced once at
|
|
// publish time by calling the guest's DESCRIBE hook and stored as manifest.pb
|
|
// inside the .bnp artifact; the CMS loader reads it without instantiating the
|
|
// wasm module.
|
|
//
|
|
// Function-valued registration fields cannot cross the wire; they map to
|
|
// either a hook (Load/Unload/JobHandlers/MediaHooks/HTTPHandler), a boolean
|
|
// presence flag here, or an artifact directory (Assets → assets/,
|
|
// Schemas → schemas/, Migrations → migrations/). See core/docs/wasm-abi.md
|
|
// for the full field-by-field mapping.
|
|
|
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
// versions:
|
|
// protoc-gen-go v1.36.11
|
|
// protoc (unknown)
|
|
// source: v1/manifest.proto
|
|
|
|
package abiv1
|
|
|
|
import (
|
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
|
reflect "reflect"
|
|
sync "sync"
|
|
unsafe "unsafe"
|
|
)
|
|
|
|
const (
|
|
// Verify that this generated code is sufficiently up-to-date.
|
|
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
|
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
|
)
|
|
|
|
// PluginManifest mirrors the static surface of plugin.PluginRegistration.
|
|
type PluginManifest struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
// ABI major version the plugin was built against. The host rejects
|
|
// manifests whose major version it does not support.
|
|
AbiVersion uint32 `protobuf:"varint,1,opt,name=abi_version,json=abiVersion,proto3" json:"abi_version,omitempty"`
|
|
// PluginRegistration.Name / .Version.
|
|
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
|
|
Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
|
|
// PluginRegistration.Dependencies.
|
|
Dependencies []*Dependency `protobuf:"bytes,4,rep,name=dependencies,proto3" json:"dependencies,omitempty"`
|
|
// Blocks registered via BlockRegistry.Register (captured by DESCRIBE).
|
|
Blocks []*BlockMeta `protobuf:"bytes,5,rep,name=blocks,proto3" json:"blocks,omitempty"`
|
|
// Blocks registered via BlockRegistry.RegisterTemplateOverride[WithSource].
|
|
BlockTemplateOverrides []*BlockTemplateOverride `protobuf:"bytes,6,rep,name=block_template_overrides,json=blockTemplateOverrides,proto3" json:"block_template_overrides,omitempty"`
|
|
// Templates registered via TemplateRegistry (captured by DESCRIBE).
|
|
TemplateKeys []string `protobuf:"bytes,7,rep,name=template_keys,json=templateKeys,proto3" json:"template_keys,omitempty"` // TemplateRegistry.Register
|
|
SystemTemplates []*SystemTemplateMeta `protobuf:"bytes,8,rep,name=system_templates,json=systemTemplates,proto3" json:"system_templates,omitempty"` // RegisterSystemTemplate
|
|
PageTemplates []*PageTemplateMeta `protobuf:"bytes,9,rep,name=page_templates,json=pageTemplates,proto3" json:"page_templates,omitempty"` // RegisterPageTemplate
|
|
EmailWrapperSystemKeys []string `protobuf:"bytes,10,rep,name=email_wrapper_system_keys,json=emailWrapperSystemKeys,proto3" json:"email_wrapper_system_keys,omitempty"` // RegisterEmailWrapper
|
|
// PluginRegistration.AdminPages.
|
|
AdminPages []*AdminPage `protobuf:"bytes,11,rep,name=admin_pages,json=adminPages,proto3" json:"admin_pages,omitempty"`
|
|
// PluginRegistration.SettingsSchema / .ThemePresets / .BundledFonts (JSON).
|
|
SettingsSchema []byte `protobuf:"bytes,12,opt,name=settings_schema,json=settingsSchema,proto3" json:"settings_schema,omitempty"`
|
|
ThemePresets []byte `protobuf:"bytes,13,opt,name=theme_presets,json=themePresets,proto3" json:"theme_presets,omitempty"`
|
|
BundledFonts []byte `protobuf:"bytes,14,opt,name=bundled_fonts,json=bundledFonts,proto3" json:"bundled_fonts,omitempty"`
|
|
// PluginRegistration.MasterPages.
|
|
MasterPages []*MasterPageDefinition `protobuf:"bytes,15,rep,name=master_pages,json=masterPages,proto3" json:"master_pages,omitempty"`
|
|
// PluginRegistration.AIActions.
|
|
AiActions []*AiAction `protobuf:"bytes,16,rep,name=ai_actions,json=aiActions,proto3" json:"ai_actions,omitempty"`
|
|
// RBAC roles for the plugin's own Connect services, merged from
|
|
// ServiceRegistration (full method name → role, e.g.
|
|
// "/symposium.v1.ForumService/CreateThread" → "admin").
|
|
RbacMethodRoles map[string]string `protobuf:"bytes,17,rep,name=rbac_method_roles,json=rbacMethodRoles,proto3" json:"rbac_method_roles,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
|
|
// PluginRegistration.CSSManifest.
|
|
CssManifest *CssManifest `protobuf:"bytes,18,opt,name=css_manifest,json=cssManifest,proto3" json:"css_manifest,omitempty"`
|
|
// PluginRegistration.RequiredIconPacks.
|
|
RequiredIconPacks []string `protobuf:"bytes,19,rep,name=required_icon_packs,json=requiredIconPacks,proto3" json:"required_icon_packs,omitempty"`
|
|
// PluginRegistration.DirectoryExtensions (static fields only; the
|
|
// panel-section / pin-decorator callbacks are counted so the host knows
|
|
// how many guest callbacks exist).
|
|
DirectoryExtensions *DirectoryExtensions `protobuf:"bytes,20,opt,name=directory_extensions,json=directoryExtensions,proto3" json:"directory_extensions,omitempty"`
|
|
// Job types the plugin handles (keys of PluginRegistration.JobHandlers).
|
|
// The host dispatches these via the JOB hook.
|
|
JobTypes []string `protobuf:"bytes,21,rep,name=job_types,json=jobTypes,proto3" json:"job_types,omitempty"`
|
|
// Content types the plugin registered RAG content fetchers for
|
|
// (RAGService.RegisterContentFetcher inverts to a manifest declaration;
|
|
// the host calls back via the RAG_FETCH hook).
|
|
RagContentFetcherTypes []string `protobuf:"bytes,22,rep,name=rag_content_fetcher_types,json=ragContentFetcherTypes,proto3" json:"rag_content_fetcher_types,omitempty"`
|
|
// PluginRegistration.SettingsPanel — Module Federation path of the
|
|
// settings panel component ("" when the plugin has none).
|
|
SettingsPanel string `protobuf:"bytes,23,opt,name=settings_panel,json=settingsPanel,proto3" json:"settings_panel,omitempty"`
|
|
// Presence flags for function-valued registration fields that invert to
|
|
// hooks at runtime.
|
|
HasHttpHandler bool `protobuf:"varint,24,opt,name=has_http_handler,json=hasHttpHandler,proto3" json:"has_http_handler,omitempty"` // PluginRegistration.HTTPHandler → HANDLE_HTTP
|
|
HasLoadHook bool `protobuf:"varint,25,opt,name=has_load_hook,json=hasLoadHook,proto3" json:"has_load_hook,omitempty"` // PluginRegistration.Load → LOAD
|
|
HasUnloadHook bool `protobuf:"varint,26,opt,name=has_unload_hook,json=hasUnloadHook,proto3" json:"has_unload_hook,omitempty"` // PluginRegistration.Unload → UNLOAD
|
|
HasMediaHooks bool `protobuf:"varint,27,opt,name=has_media_hooks,json=hasMediaHooks,proto3" json:"has_media_hooks,omitempty"` // PluginRegistration.MediaHooks → MEDIA_HOOK
|
|
HasProvisioner bool `protobuf:"varint,28,opt,name=has_provisioner,json=hasProvisioner,proto3" json:"has_provisioner,omitempty"` // PluginRegistration.RegisterWithProvisioner
|
|
// Core CMS services the plugin mounts with custom RBAC roles
|
|
// (CoreServiceBindings.Bind becomes a static declaration; the host
|
|
// constructs and mounts the handlers).
|
|
CoreServiceBindings []*CoreServiceBinding `protobuf:"bytes,29,rep,name=core_service_bindings,json=coreServiceBindings,proto3" json:"core_service_bindings,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *PluginManifest) Reset() {
|
|
*x = PluginManifest{}
|
|
mi := &file_v1_manifest_proto_msgTypes[0]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *PluginManifest) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*PluginManifest) ProtoMessage() {}
|
|
|
|
func (x *PluginManifest) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[0]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use PluginManifest.ProtoReflect.Descriptor instead.
|
|
func (*PluginManifest) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{0}
|
|
}
|
|
|
|
func (x *PluginManifest) GetAbiVersion() uint32 {
|
|
if x != nil {
|
|
return x.AbiVersion
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (x *PluginManifest) GetName() string {
|
|
if x != nil {
|
|
return x.Name
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *PluginManifest) GetVersion() string {
|
|
if x != nil {
|
|
return x.Version
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *PluginManifest) GetDependencies() []*Dependency {
|
|
if x != nil {
|
|
return x.Dependencies
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetBlocks() []*BlockMeta {
|
|
if x != nil {
|
|
return x.Blocks
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetBlockTemplateOverrides() []*BlockTemplateOverride {
|
|
if x != nil {
|
|
return x.BlockTemplateOverrides
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetTemplateKeys() []string {
|
|
if x != nil {
|
|
return x.TemplateKeys
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetSystemTemplates() []*SystemTemplateMeta {
|
|
if x != nil {
|
|
return x.SystemTemplates
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetPageTemplates() []*PageTemplateMeta {
|
|
if x != nil {
|
|
return x.PageTemplates
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetEmailWrapperSystemKeys() []string {
|
|
if x != nil {
|
|
return x.EmailWrapperSystemKeys
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetAdminPages() []*AdminPage {
|
|
if x != nil {
|
|
return x.AdminPages
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetSettingsSchema() []byte {
|
|
if x != nil {
|
|
return x.SettingsSchema
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetThemePresets() []byte {
|
|
if x != nil {
|
|
return x.ThemePresets
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetBundledFonts() []byte {
|
|
if x != nil {
|
|
return x.BundledFonts
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetMasterPages() []*MasterPageDefinition {
|
|
if x != nil {
|
|
return x.MasterPages
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetAiActions() []*AiAction {
|
|
if x != nil {
|
|
return x.AiActions
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetRbacMethodRoles() map[string]string {
|
|
if x != nil {
|
|
return x.RbacMethodRoles
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetCssManifest() *CssManifest {
|
|
if x != nil {
|
|
return x.CssManifest
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetRequiredIconPacks() []string {
|
|
if x != nil {
|
|
return x.RequiredIconPacks
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetDirectoryExtensions() *DirectoryExtensions {
|
|
if x != nil {
|
|
return x.DirectoryExtensions
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetJobTypes() []string {
|
|
if x != nil {
|
|
return x.JobTypes
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetRagContentFetcherTypes() []string {
|
|
if x != nil {
|
|
return x.RagContentFetcherTypes
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *PluginManifest) GetSettingsPanel() string {
|
|
if x != nil {
|
|
return x.SettingsPanel
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *PluginManifest) GetHasHttpHandler() bool {
|
|
if x != nil {
|
|
return x.HasHttpHandler
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (x *PluginManifest) GetHasLoadHook() bool {
|
|
if x != nil {
|
|
return x.HasLoadHook
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (x *PluginManifest) GetHasUnloadHook() bool {
|
|
if x != nil {
|
|
return x.HasUnloadHook
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (x *PluginManifest) GetHasMediaHooks() bool {
|
|
if x != nil {
|
|
return x.HasMediaHooks
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (x *PluginManifest) GetHasProvisioner() bool {
|
|
if x != nil {
|
|
return x.HasProvisioner
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (x *PluginManifest) GetCoreServiceBindings() []*CoreServiceBinding {
|
|
if x != nil {
|
|
return x.CoreServiceBindings
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Dependency mirrors plugin.Dependency.
|
|
type Dependency struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
Plugin string `protobuf:"bytes,1,opt,name=plugin,proto3" json:"plugin,omitempty"`
|
|
MinVersion string `protobuf:"bytes,2,opt,name=min_version,json=minVersion,proto3" json:"min_version,omitempty"`
|
|
Required bool `protobuf:"varint,3,opt,name=required,proto3" json:"required,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *Dependency) Reset() {
|
|
*x = Dependency{}
|
|
mi := &file_v1_manifest_proto_msgTypes[1]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *Dependency) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*Dependency) ProtoMessage() {}
|
|
|
|
func (x *Dependency) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[1]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use Dependency.ProtoReflect.Descriptor instead.
|
|
func (*Dependency) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{1}
|
|
}
|
|
|
|
func (x *Dependency) GetPlugin() string {
|
|
if x != nil {
|
|
return x.Plugin
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *Dependency) GetMinVersion() string {
|
|
if x != nil {
|
|
return x.MinVersion
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *Dependency) GetRequired() bool {
|
|
if x != nil {
|
|
return x.Required
|
|
}
|
|
return false
|
|
}
|
|
|
|
// BlockMeta mirrors blocks.BlockMeta. Source is omitted: the host assigns it
|
|
// from the manifest's plugin name at load time.
|
|
type BlockMeta struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
|
|
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
|
|
// blocks.BlockCategory string ("content", "layout", "navigation", "blog",
|
|
// "theme").
|
|
Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"`
|
|
HasInternalSlot bool `protobuf:"varint,5,opt,name=has_internal_slot,json=hasInternalSlot,proto3" json:"has_internal_slot,omitempty"`
|
|
Hidden bool `protobuf:"varint,6,opt,name=hidden,proto3" json:"hidden,omitempty"`
|
|
EditorJs string `protobuf:"bytes,7,opt,name=editor_js,json=editorJs,proto3" json:"editor_js,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *BlockMeta) Reset() {
|
|
*x = BlockMeta{}
|
|
mi := &file_v1_manifest_proto_msgTypes[2]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *BlockMeta) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*BlockMeta) ProtoMessage() {}
|
|
|
|
func (x *BlockMeta) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[2]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use BlockMeta.ProtoReflect.Descriptor instead.
|
|
func (*BlockMeta) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{2}
|
|
}
|
|
|
|
func (x *BlockMeta) GetKey() string {
|
|
if x != nil {
|
|
return x.Key
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *BlockMeta) GetTitle() string {
|
|
if x != nil {
|
|
return x.Title
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *BlockMeta) GetDescription() string {
|
|
if x != nil {
|
|
return x.Description
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *BlockMeta) GetCategory() string {
|
|
if x != nil {
|
|
return x.Category
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *BlockMeta) GetHasInternalSlot() bool {
|
|
if x != nil {
|
|
return x.HasInternalSlot
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (x *BlockMeta) GetHidden() bool {
|
|
if x != nil {
|
|
return x.Hidden
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (x *BlockMeta) GetEditorJs() string {
|
|
if x != nil {
|
|
return x.EditorJs
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// BlockTemplateOverride captures BlockRegistry.RegisterTemplateOverride and
|
|
// RegisterTemplateOverrideWithSource registrations.
|
|
type BlockTemplateOverride struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
TemplateKey string `protobuf:"bytes,1,opt,name=template_key,json=templateKey,proto3" json:"template_key,omitempty"`
|
|
BlockKey string `protobuf:"bytes,2,opt,name=block_key,json=blockKey,proto3" json:"block_key,omitempty"`
|
|
// Override source label; empty for plain RegisterTemplateOverride.
|
|
Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *BlockTemplateOverride) Reset() {
|
|
*x = BlockTemplateOverride{}
|
|
mi := &file_v1_manifest_proto_msgTypes[3]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *BlockTemplateOverride) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*BlockTemplateOverride) ProtoMessage() {}
|
|
|
|
func (x *BlockTemplateOverride) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[3]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use BlockTemplateOverride.ProtoReflect.Descriptor instead.
|
|
func (*BlockTemplateOverride) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{3}
|
|
}
|
|
|
|
func (x *BlockTemplateOverride) GetTemplateKey() string {
|
|
if x != nil {
|
|
return x.TemplateKey
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *BlockTemplateOverride) GetBlockKey() string {
|
|
if x != nil {
|
|
return x.BlockKey
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *BlockTemplateOverride) GetSource() string {
|
|
if x != nil {
|
|
return x.Source
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// SystemTemplateMeta mirrors templates.SystemTemplateMeta.
|
|
type SystemTemplateMeta struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
|
|
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *SystemTemplateMeta) Reset() {
|
|
*x = SystemTemplateMeta{}
|
|
mi := &file_v1_manifest_proto_msgTypes[4]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *SystemTemplateMeta) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*SystemTemplateMeta) ProtoMessage() {}
|
|
|
|
func (x *SystemTemplateMeta) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[4]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use SystemTemplateMeta.ProtoReflect.Descriptor instead.
|
|
func (*SystemTemplateMeta) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{4}
|
|
}
|
|
|
|
func (x *SystemTemplateMeta) GetKey() string {
|
|
if x != nil {
|
|
return x.Key
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *SystemTemplateMeta) GetTitle() string {
|
|
if x != nil {
|
|
return x.Title
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *SystemTemplateMeta) GetDescription() string {
|
|
if x != nil {
|
|
return x.Description
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// PageTemplateMeta mirrors templates.PageTemplateMeta plus the system
|
|
// template it was registered under.
|
|
type PageTemplateMeta struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
SystemKey string `protobuf:"bytes,1,opt,name=system_key,json=systemKey,proto3" json:"system_key,omitempty"`
|
|
Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
|
|
Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
|
|
Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
|
|
Slots []string `protobuf:"bytes,5,rep,name=slots,proto3" json:"slots,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *PageTemplateMeta) Reset() {
|
|
*x = PageTemplateMeta{}
|
|
mi := &file_v1_manifest_proto_msgTypes[5]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *PageTemplateMeta) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*PageTemplateMeta) ProtoMessage() {}
|
|
|
|
func (x *PageTemplateMeta) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[5]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use PageTemplateMeta.ProtoReflect.Descriptor instead.
|
|
func (*PageTemplateMeta) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{5}
|
|
}
|
|
|
|
func (x *PageTemplateMeta) GetSystemKey() string {
|
|
if x != nil {
|
|
return x.SystemKey
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *PageTemplateMeta) GetKey() string {
|
|
if x != nil {
|
|
return x.Key
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *PageTemplateMeta) GetTitle() string {
|
|
if x != nil {
|
|
return x.Title
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *PageTemplateMeta) GetDescription() string {
|
|
if x != nil {
|
|
return x.Description
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *PageTemplateMeta) GetSlots() []string {
|
|
if x != nil {
|
|
return x.Slots
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// AdminPage mirrors plugin.AdminPage.
|
|
type AdminPage struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
|
|
Icon string `protobuf:"bytes,3,opt,name=icon,proto3" json:"icon,omitempty"`
|
|
Route string `protobuf:"bytes,4,opt,name=route,proto3" json:"route,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *AdminPage) Reset() {
|
|
*x = AdminPage{}
|
|
mi := &file_v1_manifest_proto_msgTypes[6]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *AdminPage) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*AdminPage) ProtoMessage() {}
|
|
|
|
func (x *AdminPage) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[6]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use AdminPage.ProtoReflect.Descriptor instead.
|
|
func (*AdminPage) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{6}
|
|
}
|
|
|
|
func (x *AdminPage) GetKey() string {
|
|
if x != nil {
|
|
return x.Key
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *AdminPage) GetTitle() string {
|
|
if x != nil {
|
|
return x.Title
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *AdminPage) GetIcon() string {
|
|
if x != nil {
|
|
return x.Icon
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *AdminPage) GetRoute() string {
|
|
if x != nil {
|
|
return x.Route
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// AiAction mirrors plugin.AIAction.
|
|
type AiAction struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
|
|
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
|
|
DefaultProvider string `protobuf:"bytes,4,opt,name=default_provider,json=defaultProvider,proto3" json:"default_provider,omitempty"`
|
|
DefaultModel string `protobuf:"bytes,5,opt,name=default_model,json=defaultModel,proto3" json:"default_model,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *AiAction) Reset() {
|
|
*x = AiAction{}
|
|
mi := &file_v1_manifest_proto_msgTypes[7]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *AiAction) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*AiAction) ProtoMessage() {}
|
|
|
|
func (x *AiAction) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[7]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use AiAction.ProtoReflect.Descriptor instead.
|
|
func (*AiAction) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{7}
|
|
}
|
|
|
|
func (x *AiAction) GetKey() string {
|
|
if x != nil {
|
|
return x.Key
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *AiAction) GetTitle() string {
|
|
if x != nil {
|
|
return x.Title
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *AiAction) GetDescription() string {
|
|
if x != nil {
|
|
return x.Description
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *AiAction) GetDefaultProvider() string {
|
|
if x != nil {
|
|
return x.DefaultProvider
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *AiAction) GetDefaultModel() string {
|
|
if x != nil {
|
|
return x.DefaultModel
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// CssManifest mirrors plugin.CSSManifest.
|
|
type CssManifest struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
NpmPackages map[string]string `protobuf:"bytes,1,rep,name=npm_packages,json=npmPackages,proto3" json:"npm_packages,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
|
|
CssDirectives []string `protobuf:"bytes,2,rep,name=css_directives,json=cssDirectives,proto3" json:"css_directives,omitempty"`
|
|
InputCssAppend string `protobuf:"bytes,3,opt,name=input_css_append,json=inputCssAppend,proto3" json:"input_css_append,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *CssManifest) Reset() {
|
|
*x = CssManifest{}
|
|
mi := &file_v1_manifest_proto_msgTypes[8]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *CssManifest) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*CssManifest) ProtoMessage() {}
|
|
|
|
func (x *CssManifest) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[8]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use CssManifest.ProtoReflect.Descriptor instead.
|
|
func (*CssManifest) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{8}
|
|
}
|
|
|
|
func (x *CssManifest) GetNpmPackages() map[string]string {
|
|
if x != nil {
|
|
return x.NpmPackages
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *CssManifest) GetCssDirectives() []string {
|
|
if x != nil {
|
|
return x.CssDirectives
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *CssManifest) GetInputCssAppend() string {
|
|
if x != nil {
|
|
return x.InputCssAppend
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// DirectoryExtensions mirrors the static fields of plugin.DirectoryExtensions.
|
|
type DirectoryExtensions struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
BooleanFilterFields []string `protobuf:"bytes,1,rep,name=boolean_filter_fields,json=booleanFilterFields,proto3" json:"boolean_filter_fields,omitempty"`
|
|
SelectFilterFields []string `protobuf:"bytes,2,rep,name=select_filter_fields,json=selectFilterFields,proto3" json:"select_filter_fields,omitempty"`
|
|
BadgeLabels map[string]*BadgeLabel `protobuf:"bytes,3,rep,name=badge_labels,json=badgeLabels,proto3" json:"badge_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
|
|
// Counts of the callback slices (PanelSections / PinDecorators) so the host
|
|
// knows how many guest callbacks the plugin registered. Their invocation
|
|
// hook is a runtime-WO concern.
|
|
PanelSectionCount uint32 `protobuf:"varint,4,opt,name=panel_section_count,json=panelSectionCount,proto3" json:"panel_section_count,omitempty"`
|
|
PinDecoratorCount uint32 `protobuf:"varint,5,opt,name=pin_decorator_count,json=pinDecoratorCount,proto3" json:"pin_decorator_count,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *DirectoryExtensions) Reset() {
|
|
*x = DirectoryExtensions{}
|
|
mi := &file_v1_manifest_proto_msgTypes[9]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *DirectoryExtensions) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*DirectoryExtensions) ProtoMessage() {}
|
|
|
|
func (x *DirectoryExtensions) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[9]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use DirectoryExtensions.ProtoReflect.Descriptor instead.
|
|
func (*DirectoryExtensions) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{9}
|
|
}
|
|
|
|
func (x *DirectoryExtensions) GetBooleanFilterFields() []string {
|
|
if x != nil {
|
|
return x.BooleanFilterFields
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *DirectoryExtensions) GetSelectFilterFields() []string {
|
|
if x != nil {
|
|
return x.SelectFilterFields
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *DirectoryExtensions) GetBadgeLabels() map[string]*BadgeLabel {
|
|
if x != nil {
|
|
return x.BadgeLabels
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *DirectoryExtensions) GetPanelSectionCount() uint32 {
|
|
if x != nil {
|
|
return x.PanelSectionCount
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (x *DirectoryExtensions) GetPinDecoratorCount() uint32 {
|
|
if x != nil {
|
|
return x.PinDecoratorCount
|
|
}
|
|
return 0
|
|
}
|
|
|
|
// BadgeLabel mirrors the [2]string value of DirectoryExtensions.BadgeLabels.
|
|
type BadgeLabel struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
Positive string `protobuf:"bytes,1,opt,name=positive,proto3" json:"positive,omitempty"`
|
|
Negative string `protobuf:"bytes,2,opt,name=negative,proto3" json:"negative,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *BadgeLabel) Reset() {
|
|
*x = BadgeLabel{}
|
|
mi := &file_v1_manifest_proto_msgTypes[10]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *BadgeLabel) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*BadgeLabel) ProtoMessage() {}
|
|
|
|
func (x *BadgeLabel) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[10]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use BadgeLabel.ProtoReflect.Descriptor instead.
|
|
func (*BadgeLabel) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{10}
|
|
}
|
|
|
|
func (x *BadgeLabel) GetPositive() string {
|
|
if x != nil {
|
|
return x.Positive
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *BadgeLabel) GetNegative() string {
|
|
if x != nil {
|
|
return x.Negative
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// MasterPageDefinition mirrors plugin.MasterPageDefinition.
|
|
type MasterPageDefinition struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
|
|
PageTemplates []string `protobuf:"bytes,3,rep,name=page_templates,json=pageTemplates,proto3" json:"page_templates,omitempty"`
|
|
Blocks []*MasterPageBlock `protobuf:"bytes,4,rep,name=blocks,proto3" json:"blocks,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *MasterPageDefinition) Reset() {
|
|
*x = MasterPageDefinition{}
|
|
mi := &file_v1_manifest_proto_msgTypes[11]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *MasterPageDefinition) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*MasterPageDefinition) ProtoMessage() {}
|
|
|
|
func (x *MasterPageDefinition) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[11]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use MasterPageDefinition.ProtoReflect.Descriptor instead.
|
|
func (*MasterPageDefinition) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{11}
|
|
}
|
|
|
|
func (x *MasterPageDefinition) GetKey() string {
|
|
if x != nil {
|
|
return x.Key
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *MasterPageDefinition) GetTitle() string {
|
|
if x != nil {
|
|
return x.Title
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *MasterPageDefinition) GetPageTemplates() []string {
|
|
if x != nil {
|
|
return x.PageTemplates
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *MasterPageDefinition) GetBlocks() []*MasterPageBlock {
|
|
if x != nil {
|
|
return x.Blocks
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MasterPageBlock mirrors plugin.MasterPageBlock.
|
|
type MasterPageBlock struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
BlockKey string `protobuf:"bytes,1,opt,name=block_key,json=blockKey,proto3" json:"block_key,omitempty"`
|
|
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
|
|
// JSON encoding of the block's content map.
|
|
ContentJson []byte `protobuf:"bytes,3,opt,name=content_json,json=contentJson,proto3" json:"content_json,omitempty"`
|
|
HtmlContent *string `protobuf:"bytes,4,opt,name=html_content,json=htmlContent,proto3,oneof" json:"html_content,omitempty"`
|
|
Slot string `protobuf:"bytes,5,opt,name=slot,proto3" json:"slot,omitempty"`
|
|
SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *MasterPageBlock) Reset() {
|
|
*x = MasterPageBlock{}
|
|
mi := &file_v1_manifest_proto_msgTypes[12]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *MasterPageBlock) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*MasterPageBlock) ProtoMessage() {}
|
|
|
|
func (x *MasterPageBlock) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[12]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use MasterPageBlock.ProtoReflect.Descriptor instead.
|
|
func (*MasterPageBlock) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{12}
|
|
}
|
|
|
|
func (x *MasterPageBlock) GetBlockKey() string {
|
|
if x != nil {
|
|
return x.BlockKey
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *MasterPageBlock) GetTitle() string {
|
|
if x != nil {
|
|
return x.Title
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *MasterPageBlock) GetContentJson() []byte {
|
|
if x != nil {
|
|
return x.ContentJson
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (x *MasterPageBlock) GetHtmlContent() string {
|
|
if x != nil && x.HtmlContent != nil {
|
|
return *x.HtmlContent
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *MasterPageBlock) GetSlot() string {
|
|
if x != nil {
|
|
return x.Slot
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *MasterPageBlock) GetSortOrder() int32 {
|
|
if x != nil {
|
|
return x.SortOrder
|
|
}
|
|
return 0
|
|
}
|
|
|
|
// CoreServiceBinding mirrors a plugin.CoreServiceBindings.Bind call: mount
|
|
// the named core-provided Connect service with these RBAC roles.
|
|
type CoreServiceBinding struct {
|
|
state protoimpl.MessageState `protogen:"open.v1"`
|
|
ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"`
|
|
MethodRoles map[string]string `protobuf:"bytes,2,rep,name=method_roles,json=methodRoles,proto3" json:"method_roles,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
|
|
unknownFields protoimpl.UnknownFields
|
|
sizeCache protoimpl.SizeCache
|
|
}
|
|
|
|
func (x *CoreServiceBinding) Reset() {
|
|
*x = CoreServiceBinding{}
|
|
mi := &file_v1_manifest_proto_msgTypes[13]
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
|
|
func (x *CoreServiceBinding) String() string {
|
|
return protoimpl.X.MessageStringOf(x)
|
|
}
|
|
|
|
func (*CoreServiceBinding) ProtoMessage() {}
|
|
|
|
func (x *CoreServiceBinding) ProtoReflect() protoreflect.Message {
|
|
mi := &file_v1_manifest_proto_msgTypes[13]
|
|
if x != nil {
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
if ms.LoadMessageInfo() == nil {
|
|
ms.StoreMessageInfo(mi)
|
|
}
|
|
return ms
|
|
}
|
|
return mi.MessageOf(x)
|
|
}
|
|
|
|
// Deprecated: Use CoreServiceBinding.ProtoReflect.Descriptor instead.
|
|
func (*CoreServiceBinding) Descriptor() ([]byte, []int) {
|
|
return file_v1_manifest_proto_rawDescGZIP(), []int{13}
|
|
}
|
|
|
|
func (x *CoreServiceBinding) GetServiceName() string {
|
|
if x != nil {
|
|
return x.ServiceName
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (x *CoreServiceBinding) GetMethodRoles() map[string]string {
|
|
if x != nil {
|
|
return x.MethodRoles
|
|
}
|
|
return nil
|
|
}
|
|
|
|
var File_v1_manifest_proto protoreflect.FileDescriptor
|
|
|
|
const file_v1_manifest_proto_rawDesc = "" +
|
|
"\n" +
|
|
"\x11v1/manifest.proto\x12\x06abi.v1\"\x87\f\n" +
|
|
"\x0ePluginManifest\x12\x1f\n" +
|
|
"\vabi_version\x18\x01 \x01(\rR\n" +
|
|
"abiVersion\x12\x12\n" +
|
|
"\x04name\x18\x02 \x01(\tR\x04name\x12\x18\n" +
|
|
"\aversion\x18\x03 \x01(\tR\aversion\x126\n" +
|
|
"\fdependencies\x18\x04 \x03(\v2\x12.abi.v1.DependencyR\fdependencies\x12)\n" +
|
|
"\x06blocks\x18\x05 \x03(\v2\x11.abi.v1.BlockMetaR\x06blocks\x12W\n" +
|
|
"\x18block_template_overrides\x18\x06 \x03(\v2\x1d.abi.v1.BlockTemplateOverrideR\x16blockTemplateOverrides\x12#\n" +
|
|
"\rtemplate_keys\x18\a \x03(\tR\ftemplateKeys\x12E\n" +
|
|
"\x10system_templates\x18\b \x03(\v2\x1a.abi.v1.SystemTemplateMetaR\x0fsystemTemplates\x12?\n" +
|
|
"\x0epage_templates\x18\t \x03(\v2\x18.abi.v1.PageTemplateMetaR\rpageTemplates\x129\n" +
|
|
"\x19email_wrapper_system_keys\x18\n" +
|
|
" \x03(\tR\x16emailWrapperSystemKeys\x122\n" +
|
|
"\vadmin_pages\x18\v \x03(\v2\x11.abi.v1.AdminPageR\n" +
|
|
"adminPages\x12'\n" +
|
|
"\x0fsettings_schema\x18\f \x01(\fR\x0esettingsSchema\x12#\n" +
|
|
"\rtheme_presets\x18\r \x01(\fR\fthemePresets\x12#\n" +
|
|
"\rbundled_fonts\x18\x0e \x01(\fR\fbundledFonts\x12?\n" +
|
|
"\fmaster_pages\x18\x0f \x03(\v2\x1c.abi.v1.MasterPageDefinitionR\vmasterPages\x12/\n" +
|
|
"\n" +
|
|
"ai_actions\x18\x10 \x03(\v2\x10.abi.v1.AiActionR\taiActions\x12W\n" +
|
|
"\x11rbac_method_roles\x18\x11 \x03(\v2+.abi.v1.PluginManifest.RbacMethodRolesEntryR\x0frbacMethodRoles\x126\n" +
|
|
"\fcss_manifest\x18\x12 \x01(\v2\x13.abi.v1.CssManifestR\vcssManifest\x12.\n" +
|
|
"\x13required_icon_packs\x18\x13 \x03(\tR\x11requiredIconPacks\x12N\n" +
|
|
"\x14directory_extensions\x18\x14 \x01(\v2\x1b.abi.v1.DirectoryExtensionsR\x13directoryExtensions\x12\x1b\n" +
|
|
"\tjob_types\x18\x15 \x03(\tR\bjobTypes\x129\n" +
|
|
"\x19rag_content_fetcher_types\x18\x16 \x03(\tR\x16ragContentFetcherTypes\x12%\n" +
|
|
"\x0esettings_panel\x18\x17 \x01(\tR\rsettingsPanel\x12(\n" +
|
|
"\x10has_http_handler\x18\x18 \x01(\bR\x0ehasHttpHandler\x12\"\n" +
|
|
"\rhas_load_hook\x18\x19 \x01(\bR\vhasLoadHook\x12&\n" +
|
|
"\x0fhas_unload_hook\x18\x1a \x01(\bR\rhasUnloadHook\x12&\n" +
|
|
"\x0fhas_media_hooks\x18\x1b \x01(\bR\rhasMediaHooks\x12'\n" +
|
|
"\x0fhas_provisioner\x18\x1c \x01(\bR\x0ehasProvisioner\x12N\n" +
|
|
"\x15core_service_bindings\x18\x1d \x03(\v2\x1a.abi.v1.CoreServiceBindingR\x13coreServiceBindings\x1aB\n" +
|
|
"\x14RbacMethodRolesEntry\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"a\n" +
|
|
"\n" +
|
|
"Dependency\x12\x16\n" +
|
|
"\x06plugin\x18\x01 \x01(\tR\x06plugin\x12\x1f\n" +
|
|
"\vmin_version\x18\x02 \x01(\tR\n" +
|
|
"minVersion\x12\x1a\n" +
|
|
"\brequired\x18\x03 \x01(\bR\brequired\"\xd2\x01\n" +
|
|
"\tBlockMeta\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05title\x18\x02 \x01(\tR\x05title\x12 \n" +
|
|
"\vdescription\x18\x03 \x01(\tR\vdescription\x12\x1a\n" +
|
|
"\bcategory\x18\x04 \x01(\tR\bcategory\x12*\n" +
|
|
"\x11has_internal_slot\x18\x05 \x01(\bR\x0fhasInternalSlot\x12\x16\n" +
|
|
"\x06hidden\x18\x06 \x01(\bR\x06hidden\x12\x1b\n" +
|
|
"\teditor_js\x18\a \x01(\tR\beditorJs\"o\n" +
|
|
"\x15BlockTemplateOverride\x12!\n" +
|
|
"\ftemplate_key\x18\x01 \x01(\tR\vtemplateKey\x12\x1b\n" +
|
|
"\tblock_key\x18\x02 \x01(\tR\bblockKey\x12\x16\n" +
|
|
"\x06source\x18\x03 \x01(\tR\x06source\"^\n" +
|
|
"\x12SystemTemplateMeta\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05title\x18\x02 \x01(\tR\x05title\x12 \n" +
|
|
"\vdescription\x18\x03 \x01(\tR\vdescription\"\x91\x01\n" +
|
|
"\x10PageTemplateMeta\x12\x1d\n" +
|
|
"\n" +
|
|
"system_key\x18\x01 \x01(\tR\tsystemKey\x12\x10\n" +
|
|
"\x03key\x18\x02 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05title\x18\x03 \x01(\tR\x05title\x12 \n" +
|
|
"\vdescription\x18\x04 \x01(\tR\vdescription\x12\x14\n" +
|
|
"\x05slots\x18\x05 \x03(\tR\x05slots\"]\n" +
|
|
"\tAdminPage\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05title\x18\x02 \x01(\tR\x05title\x12\x12\n" +
|
|
"\x04icon\x18\x03 \x01(\tR\x04icon\x12\x14\n" +
|
|
"\x05route\x18\x04 \x01(\tR\x05route\"\xa4\x01\n" +
|
|
"\bAiAction\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05title\x18\x02 \x01(\tR\x05title\x12 \n" +
|
|
"\vdescription\x18\x03 \x01(\tR\vdescription\x12)\n" +
|
|
"\x10default_provider\x18\x04 \x01(\tR\x0fdefaultProvider\x12#\n" +
|
|
"\rdefault_model\x18\x05 \x01(\tR\fdefaultModel\"\xe7\x01\n" +
|
|
"\vCssManifest\x12G\n" +
|
|
"\fnpm_packages\x18\x01 \x03(\v2$.abi.v1.CssManifest.NpmPackagesEntryR\vnpmPackages\x12%\n" +
|
|
"\x0ecss_directives\x18\x02 \x03(\tR\rcssDirectives\x12(\n" +
|
|
"\x10input_css_append\x18\x03 \x01(\tR\x0einputCssAppend\x1a>\n" +
|
|
"\x10NpmPackagesEntry\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x80\x03\n" +
|
|
"\x13DirectoryExtensions\x122\n" +
|
|
"\x15boolean_filter_fields\x18\x01 \x03(\tR\x13booleanFilterFields\x120\n" +
|
|
"\x14select_filter_fields\x18\x02 \x03(\tR\x12selectFilterFields\x12O\n" +
|
|
"\fbadge_labels\x18\x03 \x03(\v2,.abi.v1.DirectoryExtensions.BadgeLabelsEntryR\vbadgeLabels\x12.\n" +
|
|
"\x13panel_section_count\x18\x04 \x01(\rR\x11panelSectionCount\x12.\n" +
|
|
"\x13pin_decorator_count\x18\x05 \x01(\rR\x11pinDecoratorCount\x1aR\n" +
|
|
"\x10BadgeLabelsEntry\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12(\n" +
|
|
"\x05value\x18\x02 \x01(\v2\x12.abi.v1.BadgeLabelR\x05value:\x028\x01\"D\n" +
|
|
"\n" +
|
|
"BadgeLabel\x12\x1a\n" +
|
|
"\bpositive\x18\x01 \x01(\tR\bpositive\x12\x1a\n" +
|
|
"\bnegative\x18\x02 \x01(\tR\bnegative\"\x96\x01\n" +
|
|
"\x14MasterPageDefinition\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05title\x18\x02 \x01(\tR\x05title\x12%\n" +
|
|
"\x0epage_templates\x18\x03 \x03(\tR\rpageTemplates\x12/\n" +
|
|
"\x06blocks\x18\x04 \x03(\v2\x17.abi.v1.MasterPageBlockR\x06blocks\"\xd3\x01\n" +
|
|
"\x0fMasterPageBlock\x12\x1b\n" +
|
|
"\tblock_key\x18\x01 \x01(\tR\bblockKey\x12\x14\n" +
|
|
"\x05title\x18\x02 \x01(\tR\x05title\x12!\n" +
|
|
"\fcontent_json\x18\x03 \x01(\fR\vcontentJson\x12&\n" +
|
|
"\fhtml_content\x18\x04 \x01(\tH\x00R\vhtmlContent\x88\x01\x01\x12\x12\n" +
|
|
"\x04slot\x18\x05 \x01(\tR\x04slot\x12\x1d\n" +
|
|
"\n" +
|
|
"sort_order\x18\x06 \x01(\x05R\tsortOrderB\x0f\n" +
|
|
"\r_html_content\"\xc7\x01\n" +
|
|
"\x12CoreServiceBinding\x12!\n" +
|
|
"\fservice_name\x18\x01 \x01(\tR\vserviceName\x12N\n" +
|
|
"\fmethod_roles\x18\x02 \x03(\v2+.abi.v1.CoreServiceBinding.MethodRolesEntryR\vmethodRoles\x1a>\n" +
|
|
"\x10MethodRolesEntry\x12\x10\n" +
|
|
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
|
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B0Z.git.dev.alexdunmow.com/block/core/abi/v1;abiv1b\x06proto3"
|
|
|
|
var (
|
|
file_v1_manifest_proto_rawDescOnce sync.Once
|
|
file_v1_manifest_proto_rawDescData []byte
|
|
)
|
|
|
|
func file_v1_manifest_proto_rawDescGZIP() []byte {
|
|
file_v1_manifest_proto_rawDescOnce.Do(func() {
|
|
file_v1_manifest_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_v1_manifest_proto_rawDesc), len(file_v1_manifest_proto_rawDesc)))
|
|
})
|
|
return file_v1_manifest_proto_rawDescData
|
|
}
|
|
|
|
var file_v1_manifest_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
|
|
var file_v1_manifest_proto_goTypes = []any{
|
|
(*PluginManifest)(nil), // 0: abi.v1.PluginManifest
|
|
(*Dependency)(nil), // 1: abi.v1.Dependency
|
|
(*BlockMeta)(nil), // 2: abi.v1.BlockMeta
|
|
(*BlockTemplateOverride)(nil), // 3: abi.v1.BlockTemplateOverride
|
|
(*SystemTemplateMeta)(nil), // 4: abi.v1.SystemTemplateMeta
|
|
(*PageTemplateMeta)(nil), // 5: abi.v1.PageTemplateMeta
|
|
(*AdminPage)(nil), // 6: abi.v1.AdminPage
|
|
(*AiAction)(nil), // 7: abi.v1.AiAction
|
|
(*CssManifest)(nil), // 8: abi.v1.CssManifest
|
|
(*DirectoryExtensions)(nil), // 9: abi.v1.DirectoryExtensions
|
|
(*BadgeLabel)(nil), // 10: abi.v1.BadgeLabel
|
|
(*MasterPageDefinition)(nil), // 11: abi.v1.MasterPageDefinition
|
|
(*MasterPageBlock)(nil), // 12: abi.v1.MasterPageBlock
|
|
(*CoreServiceBinding)(nil), // 13: abi.v1.CoreServiceBinding
|
|
nil, // 14: abi.v1.PluginManifest.RbacMethodRolesEntry
|
|
nil, // 15: abi.v1.CssManifest.NpmPackagesEntry
|
|
nil, // 16: abi.v1.DirectoryExtensions.BadgeLabelsEntry
|
|
nil, // 17: abi.v1.CoreServiceBinding.MethodRolesEntry
|
|
}
|
|
var file_v1_manifest_proto_depIdxs = []int32{
|
|
1, // 0: abi.v1.PluginManifest.dependencies:type_name -> abi.v1.Dependency
|
|
2, // 1: abi.v1.PluginManifest.blocks:type_name -> abi.v1.BlockMeta
|
|
3, // 2: abi.v1.PluginManifest.block_template_overrides:type_name -> abi.v1.BlockTemplateOverride
|
|
4, // 3: abi.v1.PluginManifest.system_templates:type_name -> abi.v1.SystemTemplateMeta
|
|
5, // 4: abi.v1.PluginManifest.page_templates:type_name -> abi.v1.PageTemplateMeta
|
|
6, // 5: abi.v1.PluginManifest.admin_pages:type_name -> abi.v1.AdminPage
|
|
11, // 6: abi.v1.PluginManifest.master_pages:type_name -> abi.v1.MasterPageDefinition
|
|
7, // 7: abi.v1.PluginManifest.ai_actions:type_name -> abi.v1.AiAction
|
|
14, // 8: abi.v1.PluginManifest.rbac_method_roles:type_name -> abi.v1.PluginManifest.RbacMethodRolesEntry
|
|
8, // 9: abi.v1.PluginManifest.css_manifest:type_name -> abi.v1.CssManifest
|
|
9, // 10: abi.v1.PluginManifest.directory_extensions:type_name -> abi.v1.DirectoryExtensions
|
|
13, // 11: abi.v1.PluginManifest.core_service_bindings:type_name -> abi.v1.CoreServiceBinding
|
|
15, // 12: abi.v1.CssManifest.npm_packages:type_name -> abi.v1.CssManifest.NpmPackagesEntry
|
|
16, // 13: abi.v1.DirectoryExtensions.badge_labels:type_name -> abi.v1.DirectoryExtensions.BadgeLabelsEntry
|
|
12, // 14: abi.v1.MasterPageDefinition.blocks:type_name -> abi.v1.MasterPageBlock
|
|
17, // 15: abi.v1.CoreServiceBinding.method_roles:type_name -> abi.v1.CoreServiceBinding.MethodRolesEntry
|
|
10, // 16: abi.v1.DirectoryExtensions.BadgeLabelsEntry.value:type_name -> abi.v1.BadgeLabel
|
|
17, // [17:17] is the sub-list for method output_type
|
|
17, // [17:17] is the sub-list for method input_type
|
|
17, // [17:17] is the sub-list for extension type_name
|
|
17, // [17:17] is the sub-list for extension extendee
|
|
0, // [0:17] is the sub-list for field type_name
|
|
}
|
|
|
|
func init() { file_v1_manifest_proto_init() }
|
|
func file_v1_manifest_proto_init() {
|
|
if File_v1_manifest_proto != nil {
|
|
return
|
|
}
|
|
file_v1_manifest_proto_msgTypes[12].OneofWrappers = []any{}
|
|
type x struct{}
|
|
out := protoimpl.TypeBuilder{
|
|
File: protoimpl.DescBuilder{
|
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
|
RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_manifest_proto_rawDesc), len(file_v1_manifest_proto_rawDesc)),
|
|
NumEnums: 0,
|
|
NumMessages: 18,
|
|
NumExtensions: 0,
|
|
NumServices: 0,
|
|
},
|
|
GoTypes: file_v1_manifest_proto_goTypes,
|
|
DependencyIndexes: file_v1_manifest_proto_depIdxs,
|
|
MessageInfos: file_v1_manifest_proto_msgTypes,
|
|
}.Build()
|
|
File_v1_manifest_proto = out.File
|
|
file_v1_manifest_proto_goTypes = nil
|
|
file_v1_manifest_proto_depIdxs = nil
|
|
}
|