Class: RailsAiContext::Serializers::OpencodeRulesSerializer

Inherits:
Object
  • Object
show all
Includes:
StackOverviewHelper
Defined in:
lib/rails_ai_context/serializers/opencode_rules_serializer.rb

Overview

Generates per-directory AGENTS.md files for OpenCode’s lazy-loading system. When OpenCode’s agent reads a file, it walks up the directory tree and auto-loads any AGENTS.md it finds — acting as contextual split rules.

Generated files:

app/models/AGENTS.md      — model listing, loaded when editing models
app/controllers/AGENTS.md — controller listing, loaded when editing controllers

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from StackOverviewHelper

#arch_labels_hash, #detect_before_actions, #detect_job_files, #detect_service_files, #full_preset_stack_lines, #model_extras_line, #notable_gems_list, #pattern_labels_hash, #project_root, #render_compact_controllers_list, #scope_names, #write_rule_files

Constructor Details

#initialize(context) ⇒ OpencodeRulesSerializer

Returns a new instance of OpencodeRulesSerializer.



17
18
19
# File 'lib/rails_ai_context/serializers/opencode_rules_serializer.rb', line 17

def initialize(context)
  @context = context
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



15
16
17
# File 'lib/rails_ai_context/serializers/opencode_rules_serializer.rb', line 15

def context
  @context
end

Instance Method Details

#call(output_dir) ⇒ Hash

Returns { written: [paths], skipped: [paths] }.

Parameters:

  • output_dir (String)

    Rails root path

Returns:

  • (Hash)

    { written: [paths], skipped: [paths] }



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rails_ai_context/serializers/opencode_rules_serializer.rb', line 23

def call(output_dir)
  files = {}

  [ [ "app", "models", "AGENTS.md", :render_models_reference ],
    [ "app", "controllers", "AGENTS.md", :render_controllers_reference ] ].each do |*parts, method|
    filepath = File.join(output_dir, *parts)
    next unless Dir.exist?(File.dirname(filepath))
    files[filepath] = send(method)
  end

  write_rule_files(files)
end