Class: ActionMCP::Apps::ViewManifest

Inherits:
Object
  • Object
show all
Defined in:
lib/action_mcp/apps/view_manifest.rb

Overview

Loads .action_mcp/views/manifest.json (emitted by @action-mcp/vite-plugin) and registers one ResourceTemplate per compiled view, serving the bundle inlined into an HTML shell as a ui:// resource.

Defined Under Namespace

Classes: Error

Constant Summary collapse

SCHEMA_VERSION =
1
MANIFEST_FILENAME =
"manifest.json"

Class Method Summary collapse

Class Method Details

.load!(dir = nil) ⇒ Array<Class>

Registers templates for every view in the manifest. Idempotent: previously generated view classes are evicted first, so rebuilt manifests (new hashes) load cleanly on app reload.

Returns:

  • (Array<Class>)

    the generated ResourceTemplate subclasses



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/action_mcp/apps/view_manifest.rb', line 24

def load!(dir = nil)
  dir = resolve_dir(dir)
  manifest_path = File.join(dir, MANIFEST_FILENAME)
  unless File.exist?(manifest_path)
    evict_generated_templates!
    return []
  end

  data = parse_manifest(manifest_path)
  evict_generated_templates!

  aliases = {}
  classes = data.fetch("views", {}).map do |name, entry|
    klass, logical_uri, resource_uri = register_view(dir, name, entry)
    if aliases.key?(logical_uri)
      raise Error, "Duplicate logicalUri #{logical_uri.inspect} in views manifest"
    end

    aliases[logical_uri] = resource_uri
    klass
  end
  @resource_uri_aliases = aliases.freeze
  classes
rescue StandardError
  evict_generated_templates!
  raise
end

.resolve_resource_uri(uri) ⇒ Object

Resolves the stable URI declared by a tool to the content-addressed resource URI currently registered from the compiled views manifest.



54
55
56
# File 'lib/action_mcp/apps/view_manifest.rb', line 54

def resolve_resource_uri(uri)
  (@resource_uri_aliases || {}).fetch(uri, uri)
end