Class: RailsAgents::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/rails_agents/install/install_generator.rb

Instance Method Summary collapse

Instance Method Details

#create_agents_guideObject



21
22
23
# File 'lib/generators/rails_agents/install/install_generator.rb', line 21

def create_agents_guide
  template "AGENTS.md.tt", "AGENTS.md"
end

#create_agents_treeObject



25
26
27
28
29
30
31
32
# File 'lib/generators/rails_agents/install/install_generator.rb', line 25

def create_agents_tree
  empty_directory "app/agents"
  %w[tools skills connectors plugins knowledge knowledge/sources packages].each do |folder|
    empty_directory File.join("app/agents/shared", folder)
  end
  template "library_manifest.yml.tt", "app/agents/shared/manifest.yml"
  template "library_README.md.tt", "app/agents/shared/README.md"
end

#create_env_placeholdersObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/generators/rails_agents/install/install_generator.rb', line 55

def create_env_placeholders
  env_path = File.expand_path(".env", destination_root)
  placeholders = <<~ENV

    # Rails Agent Cloud platform key — NOT your OpenAI/Anthropic keys (those are BYOK in dashboard)
    # Written automatically when you connect from /agents
    RAILS_AGENTS_API_KEY=
    RAILS_AGENTS_PROJECT_ID=
  ENV

  if File.exist?(env_path)
    unless File.read(env_path).include?("RAILS_AGENTS_API_KEY")
      append_to_file ".env", placeholders
    end
  else
    create_file ".env.rails_agents.example", placeholders.lstrip
  end
end

#create_initializerObject



12
13
14
15
# File 'lib/generators/rails_agents/install/install_generator.rb', line 12

def create_initializer
  template "initializer.rb.tt", "config/initializers/rails_agents.rb"
  template "rails_agents_autoload.rb.tt", "config/initializers/rails_agents_autoload.rb"
end

#discover_and_write_database_capabilityObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/generators/rails_agents/install/install_generator.rb', line 34

def discover_and_write_database_capability
  require "rails_agents/database_discovery"
  result = RailsAgents::DatabaseDiscovery.discover!(
    root: destination_root,
    live: false # generators may run before boot; static YAML inspect is enough
  )
  say ""
  if result.default_attach
    engines = []
    engines << "ActiveRecord (#{result.adapters.join(', ')})" if result.active_record && result.adapters.any?
    engines << "ActiveRecord" if result.active_record && result.adapters.empty?
    engines << "Mongoid" if result.mongoid
    say "  Database capability: #{engines.join(' + ')}", :green
    say "  Wrote config/rails_agents_database.yml — new agents attach full-DB tools by default.", :green
  else
    say "  No database.yml / mongoid.yml detected — agents will not auto-attach DB tools.", :yellow
  end
rescue StandardError => e
  say "  Database discovery skipped: #{e.message}", :yellow
end

#mount_engineObject



17
18
19
# File 'lib/generators/rails_agents/install/install_generator.rb', line 17

def mount_engine
  route "mount RailsAgents::Engine, at: \"/agents\""
end

#show_next_stepsObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/generators/rails_agents/install/install_generator.rb', line 74

def show_next_steps
  return unless behavior == :invoke

  port = ENV.fetch("PORT", "3000")
  url = "http://localhost:#{port}/agents"

  say ""
  say "============================================================", :green
  say "  Rails Agents installed", :green
  say "============================================================", :green
  say ""
  say "  1. Start server:  bin/dev  (or bin/rails server)", :green
  say "  2. Connect:       #{url}", :green
  say "  3. New agents auto-attach full-database query tools (detach anytime in Knowledge).", :green
  say "     bin/rails generate rails_agents:agent my_agent --type knowledge", :green
  say "============================================================", :green
  say ""
end