Class: RailsAiBridge::Registry::TileManifest
- Inherits:
-
Data
- Object
- Data
- RailsAiBridge::Registry::TileManifest
- Defined in:
- lib/rails_ai_bridge/registry/tile_manifest.rb
Overview
Immutable value object describing a pack's full catalog of skills and agents.
Instance Attribute Summary collapse
- #agents ⇒ Hash{String => AgentEntry} readonly
-
#depends_on ⇒ Array<String>
readonly
Names of packs this tile depends on.
- #deprecated_skills ⇒ Hash{String => DeprecatedEntry} readonly
-
#name ⇒ String
readonly
Unique pack name, e.g.
- #skills ⇒ Hash{String => SkillEntry} readonly
-
#summary ⇒ String?
readonly
Optional human-readable pack description.
-
#version ⇒ String
readonly
Semantic version of the pack.
Class Method Summary collapse
-
.from_file(path) ⇒ TileManifest
Loads and parses a tile manifest from a JSON file on disk.
-
.from_json(hash) ⇒ TileManifest
Builds a TileManifest from a parsed JSON hash.
Instance Attribute Details
#agents ⇒ Hash{String => AgentEntry} (readonly)
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 55 TileManifest = Data.define(:name, :version, :summary, :depends_on, :skills, :agents, :deprecated_skills) do # Builds a {TileManifest} from a parsed JSON hash. # # @param hash [Hash] parsed JSON object # @return [TileManifest] def self.from_json(hash) new( name: hash.fetch('name'), version: hash.fetch('version'), summary: hash['summary'], depends_on: hash.fetch('depends_on', []), skills: parse_skills(hash['skills'] || {}), agents: parse_agents(hash['agents'] || {}), deprecated_skills: parse_deprecated(hash['deprecated_skills'] || {}) ) rescue KeyError => error raise ArgumentError, "Tile manifest missing required field: #{error.key}" end # Loads and parses a tile manifest from a JSON file on disk. # # @param path [String] path to the tile JSON file # @return [TileManifest] # @raise [ArgumentError] if the file does not exist, cannot be read, or contains malformed JSON def self.from_file(path) from_json(JSON.parse(File.read(path))) rescue JSON::ParserError => error raise ArgumentError, "Tile manifest at '#{path}' contains invalid JSON: #{error.}" rescue SystemCallError => error raise ArgumentError, "Tile manifest at '#{path}' could not be read: #{error.}" end # @api private def self.parse_skills(skills_hash) skills_hash.transform_values do |skill_data| SkillEntry.new( path: skill_data.fetch('path'), description: skill_data['description'], tags: skill_data.fetch('tags', []) ) rescue KeyError => error raise ArgumentError, "Skill entry missing required field: #{error.key}" end end # @api private def self.parse_agents(agents_hash) agents_hash.transform_values do |agent_data| AgentEntry.new( path: agent_data.fetch('path'), description: agent_data['description'], depends_on: agent_data.fetch('depends_on', []) ) rescue KeyError => error raise ArgumentError, "Agent entry missing required field: #{error.key}" end end # @api private def self.parse_deprecated(deprecated_hash) deprecated_hash.transform_values do |entry_data| DeprecatedEntry.new( moved_to: entry_data.fetch('moved_to'), message: entry_data.fetch('message'), removed_in: entry_data['removed_in'] ) rescue KeyError => error raise ArgumentError, "Deprecated skill entry missing required field: #{error.key}" end end private_class_method :parse_skills, :parse_agents, :parse_deprecated end |
#depends_on ⇒ Array<String> (readonly)
Returns names of packs this tile depends on.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 55 TileManifest = Data.define(:name, :version, :summary, :depends_on, :skills, :agents, :deprecated_skills) do # Builds a {TileManifest} from a parsed JSON hash. # # @param hash [Hash] parsed JSON object # @return [TileManifest] def self.from_json(hash) new( name: hash.fetch('name'), version: hash.fetch('version'), summary: hash['summary'], depends_on: hash.fetch('depends_on', []), skills: parse_skills(hash['skills'] || {}), agents: parse_agents(hash['agents'] || {}), deprecated_skills: parse_deprecated(hash['deprecated_skills'] || {}) ) rescue KeyError => error raise ArgumentError, "Tile manifest missing required field: #{error.key}" end # Loads and parses a tile manifest from a JSON file on disk. # # @param path [String] path to the tile JSON file # @return [TileManifest] # @raise [ArgumentError] if the file does not exist, cannot be read, or contains malformed JSON def self.from_file(path) from_json(JSON.parse(File.read(path))) rescue JSON::ParserError => error raise ArgumentError, "Tile manifest at '#{path}' contains invalid JSON: #{error.}" rescue SystemCallError => error raise ArgumentError, "Tile manifest at '#{path}' could not be read: #{error.}" end # @api private def self.parse_skills(skills_hash) skills_hash.transform_values do |skill_data| SkillEntry.new( path: skill_data.fetch('path'), description: skill_data['description'], tags: skill_data.fetch('tags', []) ) rescue KeyError => error raise ArgumentError, "Skill entry missing required field: #{error.key}" end end # @api private def self.parse_agents(agents_hash) agents_hash.transform_values do |agent_data| AgentEntry.new( path: agent_data.fetch('path'), description: agent_data['description'], depends_on: agent_data.fetch('depends_on', []) ) rescue KeyError => error raise ArgumentError, "Agent entry missing required field: #{error.key}" end end # @api private def self.parse_deprecated(deprecated_hash) deprecated_hash.transform_values do |entry_data| DeprecatedEntry.new( moved_to: entry_data.fetch('moved_to'), message: entry_data.fetch('message'), removed_in: entry_data['removed_in'] ) rescue KeyError => error raise ArgumentError, "Deprecated skill entry missing required field: #{error.key}" end end private_class_method :parse_skills, :parse_agents, :parse_deprecated end |
#deprecated_skills ⇒ Hash{String => DeprecatedEntry} (readonly)
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 55 TileManifest = Data.define(:name, :version, :summary, :depends_on, :skills, :agents, :deprecated_skills) do # Builds a {TileManifest} from a parsed JSON hash. # # @param hash [Hash] parsed JSON object # @return [TileManifest] def self.from_json(hash) new( name: hash.fetch('name'), version: hash.fetch('version'), summary: hash['summary'], depends_on: hash.fetch('depends_on', []), skills: parse_skills(hash['skills'] || {}), agents: parse_agents(hash['agents'] || {}), deprecated_skills: parse_deprecated(hash['deprecated_skills'] || {}) ) rescue KeyError => error raise ArgumentError, "Tile manifest missing required field: #{error.key}" end # Loads and parses a tile manifest from a JSON file on disk. # # @param path [String] path to the tile JSON file # @return [TileManifest] # @raise [ArgumentError] if the file does not exist, cannot be read, or contains malformed JSON def self.from_file(path) from_json(JSON.parse(File.read(path))) rescue JSON::ParserError => error raise ArgumentError, "Tile manifest at '#{path}' contains invalid JSON: #{error.}" rescue SystemCallError => error raise ArgumentError, "Tile manifest at '#{path}' could not be read: #{error.}" end # @api private def self.parse_skills(skills_hash) skills_hash.transform_values do |skill_data| SkillEntry.new( path: skill_data.fetch('path'), description: skill_data['description'], tags: skill_data.fetch('tags', []) ) rescue KeyError => error raise ArgumentError, "Skill entry missing required field: #{error.key}" end end # @api private def self.parse_agents(agents_hash) agents_hash.transform_values do |agent_data| AgentEntry.new( path: agent_data.fetch('path'), description: agent_data['description'], depends_on: agent_data.fetch('depends_on', []) ) rescue KeyError => error raise ArgumentError, "Agent entry missing required field: #{error.key}" end end # @api private def self.parse_deprecated(deprecated_hash) deprecated_hash.transform_values do |entry_data| DeprecatedEntry.new( moved_to: entry_data.fetch('moved_to'), message: entry_data.fetch('message'), removed_in: entry_data['removed_in'] ) rescue KeyError => error raise ArgumentError, "Deprecated skill entry missing required field: #{error.key}" end end private_class_method :parse_skills, :parse_agents, :parse_deprecated end |
#name ⇒ String (readonly)
Returns unique pack name, e.g. "ruby-core-skills".
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 55 TileManifest = Data.define(:name, :version, :summary, :depends_on, :skills, :agents, :deprecated_skills) do # Builds a {TileManifest} from a parsed JSON hash. # # @param hash [Hash] parsed JSON object # @return [TileManifest] def self.from_json(hash) new( name: hash.fetch('name'), version: hash.fetch('version'), summary: hash['summary'], depends_on: hash.fetch('depends_on', []), skills: parse_skills(hash['skills'] || {}), agents: parse_agents(hash['agents'] || {}), deprecated_skills: parse_deprecated(hash['deprecated_skills'] || {}) ) rescue KeyError => error raise ArgumentError, "Tile manifest missing required field: #{error.key}" end # Loads and parses a tile manifest from a JSON file on disk. # # @param path [String] path to the tile JSON file # @return [TileManifest] # @raise [ArgumentError] if the file does not exist, cannot be read, or contains malformed JSON def self.from_file(path) from_json(JSON.parse(File.read(path))) rescue JSON::ParserError => error raise ArgumentError, "Tile manifest at '#{path}' contains invalid JSON: #{error.}" rescue SystemCallError => error raise ArgumentError, "Tile manifest at '#{path}' could not be read: #{error.}" end # @api private def self.parse_skills(skills_hash) skills_hash.transform_values do |skill_data| SkillEntry.new( path: skill_data.fetch('path'), description: skill_data['description'], tags: skill_data.fetch('tags', []) ) rescue KeyError => error raise ArgumentError, "Skill entry missing required field: #{error.key}" end end # @api private def self.parse_agents(agents_hash) agents_hash.transform_values do |agent_data| AgentEntry.new( path: agent_data.fetch('path'), description: agent_data['description'], depends_on: agent_data.fetch('depends_on', []) ) rescue KeyError => error raise ArgumentError, "Agent entry missing required field: #{error.key}" end end # @api private def self.parse_deprecated(deprecated_hash) deprecated_hash.transform_values do |entry_data| DeprecatedEntry.new( moved_to: entry_data.fetch('moved_to'), message: entry_data.fetch('message'), removed_in: entry_data['removed_in'] ) rescue KeyError => error raise ArgumentError, "Deprecated skill entry missing required field: #{error.key}" end end private_class_method :parse_skills, :parse_agents, :parse_deprecated end |
#skills ⇒ Hash{String => SkillEntry} (readonly)
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 55 TileManifest = Data.define(:name, :version, :summary, :depends_on, :skills, :agents, :deprecated_skills) do # Builds a {TileManifest} from a parsed JSON hash. # # @param hash [Hash] parsed JSON object # @return [TileManifest] def self.from_json(hash) new( name: hash.fetch('name'), version: hash.fetch('version'), summary: hash['summary'], depends_on: hash.fetch('depends_on', []), skills: parse_skills(hash['skills'] || {}), agents: parse_agents(hash['agents'] || {}), deprecated_skills: parse_deprecated(hash['deprecated_skills'] || {}) ) rescue KeyError => error raise ArgumentError, "Tile manifest missing required field: #{error.key}" end # Loads and parses a tile manifest from a JSON file on disk. # # @param path [String] path to the tile JSON file # @return [TileManifest] # @raise [ArgumentError] if the file does not exist, cannot be read, or contains malformed JSON def self.from_file(path) from_json(JSON.parse(File.read(path))) rescue JSON::ParserError => error raise ArgumentError, "Tile manifest at '#{path}' contains invalid JSON: #{error.}" rescue SystemCallError => error raise ArgumentError, "Tile manifest at '#{path}' could not be read: #{error.}" end # @api private def self.parse_skills(skills_hash) skills_hash.transform_values do |skill_data| SkillEntry.new( path: skill_data.fetch('path'), description: skill_data['description'], tags: skill_data.fetch('tags', []) ) rescue KeyError => error raise ArgumentError, "Skill entry missing required field: #{error.key}" end end # @api private def self.parse_agents(agents_hash) agents_hash.transform_values do |agent_data| AgentEntry.new( path: agent_data.fetch('path'), description: agent_data['description'], depends_on: agent_data.fetch('depends_on', []) ) rescue KeyError => error raise ArgumentError, "Agent entry missing required field: #{error.key}" end end # @api private def self.parse_deprecated(deprecated_hash) deprecated_hash.transform_values do |entry_data| DeprecatedEntry.new( moved_to: entry_data.fetch('moved_to'), message: entry_data.fetch('message'), removed_in: entry_data['removed_in'] ) rescue KeyError => error raise ArgumentError, "Deprecated skill entry missing required field: #{error.key}" end end private_class_method :parse_skills, :parse_agents, :parse_deprecated end |
#summary ⇒ String? (readonly)
Returns optional human-readable pack description.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 55 TileManifest = Data.define(:name, :version, :summary, :depends_on, :skills, :agents, :deprecated_skills) do # Builds a {TileManifest} from a parsed JSON hash. # # @param hash [Hash] parsed JSON object # @return [TileManifest] def self.from_json(hash) new( name: hash.fetch('name'), version: hash.fetch('version'), summary: hash['summary'], depends_on: hash.fetch('depends_on', []), skills: parse_skills(hash['skills'] || {}), agents: parse_agents(hash['agents'] || {}), deprecated_skills: parse_deprecated(hash['deprecated_skills'] || {}) ) rescue KeyError => error raise ArgumentError, "Tile manifest missing required field: #{error.key}" end # Loads and parses a tile manifest from a JSON file on disk. # # @param path [String] path to the tile JSON file # @return [TileManifest] # @raise [ArgumentError] if the file does not exist, cannot be read, or contains malformed JSON def self.from_file(path) from_json(JSON.parse(File.read(path))) rescue JSON::ParserError => error raise ArgumentError, "Tile manifest at '#{path}' contains invalid JSON: #{error.}" rescue SystemCallError => error raise ArgumentError, "Tile manifest at '#{path}' could not be read: #{error.}" end # @api private def self.parse_skills(skills_hash) skills_hash.transform_values do |skill_data| SkillEntry.new( path: skill_data.fetch('path'), description: skill_data['description'], tags: skill_data.fetch('tags', []) ) rescue KeyError => error raise ArgumentError, "Skill entry missing required field: #{error.key}" end end # @api private def self.parse_agents(agents_hash) agents_hash.transform_values do |agent_data| AgentEntry.new( path: agent_data.fetch('path'), description: agent_data['description'], depends_on: agent_data.fetch('depends_on', []) ) rescue KeyError => error raise ArgumentError, "Agent entry missing required field: #{error.key}" end end # @api private def self.parse_deprecated(deprecated_hash) deprecated_hash.transform_values do |entry_data| DeprecatedEntry.new( moved_to: entry_data.fetch('moved_to'), message: entry_data.fetch('message'), removed_in: entry_data['removed_in'] ) rescue KeyError => error raise ArgumentError, "Deprecated skill entry missing required field: #{error.key}" end end private_class_method :parse_skills, :parse_agents, :parse_deprecated end |
#version ⇒ String (readonly)
Returns semantic version of the pack.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 55 TileManifest = Data.define(:name, :version, :summary, :depends_on, :skills, :agents, :deprecated_skills) do # Builds a {TileManifest} from a parsed JSON hash. # # @param hash [Hash] parsed JSON object # @return [TileManifest] def self.from_json(hash) new( name: hash.fetch('name'), version: hash.fetch('version'), summary: hash['summary'], depends_on: hash.fetch('depends_on', []), skills: parse_skills(hash['skills'] || {}), agents: parse_agents(hash['agents'] || {}), deprecated_skills: parse_deprecated(hash['deprecated_skills'] || {}) ) rescue KeyError => error raise ArgumentError, "Tile manifest missing required field: #{error.key}" end # Loads and parses a tile manifest from a JSON file on disk. # # @param path [String] path to the tile JSON file # @return [TileManifest] # @raise [ArgumentError] if the file does not exist, cannot be read, or contains malformed JSON def self.from_file(path) from_json(JSON.parse(File.read(path))) rescue JSON::ParserError => error raise ArgumentError, "Tile manifest at '#{path}' contains invalid JSON: #{error.}" rescue SystemCallError => error raise ArgumentError, "Tile manifest at '#{path}' could not be read: #{error.}" end # @api private def self.parse_skills(skills_hash) skills_hash.transform_values do |skill_data| SkillEntry.new( path: skill_data.fetch('path'), description: skill_data['description'], tags: skill_data.fetch('tags', []) ) rescue KeyError => error raise ArgumentError, "Skill entry missing required field: #{error.key}" end end # @api private def self.parse_agents(agents_hash) agents_hash.transform_values do |agent_data| AgentEntry.new( path: agent_data.fetch('path'), description: agent_data['description'], depends_on: agent_data.fetch('depends_on', []) ) rescue KeyError => error raise ArgumentError, "Agent entry missing required field: #{error.key}" end end # @api private def self.parse_deprecated(deprecated_hash) deprecated_hash.transform_values do |entry_data| DeprecatedEntry.new( moved_to: entry_data.fetch('moved_to'), message: entry_data.fetch('message'), removed_in: entry_data['removed_in'] ) rescue KeyError => error raise ArgumentError, "Deprecated skill entry missing required field: #{error.key}" end end private_class_method :parse_skills, :parse_agents, :parse_deprecated end |
Class Method Details
.from_file(path) ⇒ TileManifest
Loads and parses a tile manifest from a JSON file on disk.
79 80 81 82 83 84 85 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 79 def self.from_file(path) from_json(JSON.parse(File.read(path))) rescue JSON::ParserError => error raise ArgumentError, "Tile manifest at '#{path}' contains invalid JSON: #{error.}" rescue SystemCallError => error raise ArgumentError, "Tile manifest at '#{path}' could not be read: #{error.}" end |
.from_json(hash) ⇒ TileManifest
Builds a RailsAiBridge::Registry::TileManifest from a parsed JSON hash.
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/rails_ai_bridge/registry/tile_manifest.rb', line 60 def self.from_json(hash) new( name: hash.fetch('name'), version: hash.fetch('version'), summary: hash['summary'], depends_on: hash.fetch('depends_on', []), skills: parse_skills(hash['skills'] || {}), agents: parse_agents(hash['agents'] || {}), deprecated_skills: parse_deprecated(hash['deprecated_skills'] || {}) ) rescue KeyError => error raise ArgumentError, "Tile manifest missing required field: #{error.key}" end |