The provisioner just marshals the value to JSON regardless of type.
Restricting to map[string]any prevented plugins from setting scalar
field values (strings, numbers, booleans).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add EmbedContent/IsAvailable to EmbeddingService and
RegisterContentFetcher/OnContentChanged to RAGService so .so plugins
can use embedding and RAG capabilities through SDK interfaces instead
of type-asserting CMS concrete types.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New capability interfaces:
- menus.Menus: menu/nav access (GetMenuByName, GetMenuItems)
- subscriptions.Subscriptions: tier/plan access (GetUserTierLevel, GetTierBySlug, ListActivePlans)
- auth.PublicUsers: public user profiles (GetByUsername, GetByID)
- plugin.PluginBridge: inter-plugin service registry with typed GetServiceAs[T] helper
All added to ServiceDeps for plugin consumption.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add JSON struct tags to MasterPageBlock and MasterPageDefinition
- Change MasterPageBlock.HtmlContent from string to *string (nullable)
- Change BlockNote renderer signatures from []any to []map[string]any
- Move type assertions to JSON boundary in blocksFromRaw/inlineContentFromRaw
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Initialize git.dev.alexdunmow.com/ninja/core with Go 1.26 module,
package directory structure, and README.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>