50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package app
|
|
|
|
import "infinite-canvas/backend/internal/canvas/capability"
|
|
|
|
// Canvas capabilities are registered once at the canvas domain boundary. Agent
|
|
// tools, creation, media and state projection all consume this registry; there
|
|
// is no Agent-only node allow-list to keep in sync.
|
|
type cloudAgentNodeCapability = capability.Descriptor
|
|
|
|
type CloudAgentCapabilitySet struct {
|
|
Version string
|
|
Hash string
|
|
Nodes []string
|
|
}
|
|
|
|
const cloudAgentCapabilitySetVersion = capability.SetVersion
|
|
|
|
var canvasCapabilityRegistry = capability.BuiltinRegistry()
|
|
|
|
func cloudAgentNodeCapabilityForType(nodeType string) (cloudAgentNodeCapability, bool) {
|
|
return canvasCapabilityRegistry.Resolve(nodeType)
|
|
}
|
|
|
|
func cloudAgentNodeTypeNames() []string { return canvasCapabilityRegistry.Types() }
|
|
|
|
func cloudAgentGenerationModeNames() []string {
|
|
modes := make([]string, 0)
|
|
for _, mode := range canvasCapabilityRegistry.GenerationModeNames() {
|
|
if cloudAgentGenerationModeSupported(mode) {
|
|
modes = append(modes, mode)
|
|
}
|
|
}
|
|
return modes
|
|
}
|
|
|
|
func cloudAgentGenerationModeSupported(mode string) bool {
|
|
_, implemented := cloudAgentGenerationAdapters[mode]
|
|
return implemented && canvasCapabilityRegistry.SupportsGenerationMode(mode)
|
|
}
|
|
|
|
func cloudAgentNodeCapabilityForGenerationMode(mode string) (cloudAgentNodeCapability, bool) {
|
|
return canvasCapabilityRegistry.ResolveGenerationMode(mode)
|
|
}
|
|
|
|
func cloudAgentCapabilitySetHash() string { return canvasCapabilityRegistry.Hash() }
|
|
|
|
func CloudAgentCapabilitySetInfo() CloudAgentCapabilitySet {
|
|
return CloudAgentCapabilitySet{Version: cloudAgentCapabilitySetVersion, Hash: cloudAgentCapabilitySetHash(), Nodes: cloudAgentNodeTypeNames()}
|
|
}
|