Class: Silas::Generators::InstallGenerator

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

Instance Method Summary collapse

Instance Method Details

#add_rescuer_recurring_taskObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/generators/silas/install/install_generator.rb', line 38

def add_rescuer_recurring_task
  recurring = "config/recurring.yml"
  entry = <<~YAML

    # Silas: retries jobs failed by dead-worker reaping/pruning and sweeps
    # expired approvals. Part of the durability contract — do not remove.
    silas_dead_job_rescuer:
      class: Silas::DeadJobRescuerJob
      queue: default
      schedule: every 30 seconds
  YAML

  if File.exist?(File.expand_path(recurring, destination_root))
    append_to_file recurring, entry.indent(2)
  else
    create_file recurring, "production:#{entry.indent(2)}"
  end
end

#create_agent_directoryObject



12
13
14
15
16
17
18
# File 'lib/generators/silas/install/install_generator.rb', line 12

def create_agent_directory
  template "instructions.md", "app/agent/instructions.md"
  template "agent.yml", "app/agent/agent.yml"
  template "example_tool.rb", "app/agent/tools/example_tool.rb"
  template "example_skill.md", "app/agent/skills/example.md"
  template "example_schedule.md", "app/agent/schedules/example.md"
end

#create_channelsObject

Channels are opt-in: scaffold the two reference bindings + mount the engine that serves their webhooks. Delete a channel file to disable it.



22
23
24
25
# File 'lib/generators/silas/install/install_generator.rb', line 22

def create_channels
  template "channel_slack.rb", "app/agent/channels/slack.rb"
  template "channel_email.rb", "app/agent/channels/email.rb"
end

#create_eval_gateObject

Evals as a deploy gate: an example scenario + a bin/ci wrapper.



32
33
34
35
36
# File 'lib/generators/silas/install/install_generator.rb', line 32

def create_eval_gate
  template "example_eval.rb", "test/agent_evals/example_eval.rb"
  copy_file "bin_ci", "bin/ci"
  chmod "bin/ci", 0o755
end

#create_initializerObject



8
9
10
# File 'lib/generators/silas/install/install_generator.rb', line 8

def create_initializer
  template "initializer.rb", "config/initializers/silas.rb"
end

#install_migrationsObject



57
58
59
60
61
# File 'lib/generators/silas/install/install_generator.rb', line 57

def install_migrations
  rake "silas:install:migrations"
rescue StandardError
  say "Run `bin/rails silas:install:migrations db:migrate` to install Silas's tables.", :yellow
end

#mount_engineObject



27
28
29
# File 'lib/generators/silas/install/install_generator.rb', line 27

def mount_engine
  route 'mount Silas::Engine => "/silas"'
end

#show_next_stepsObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/generators/silas/install/install_generator.rb', line 63

def show_next_steps
  say <<~MSG, :green

    Silas installed. Next:
      1. bin/rails db:migrate
      2. Edit app/agent/instructions.md (your agent's persona)
      3. Write tools in app/agent/tools/ (keyword signature = schema)
      4. Silas.agent.start(input: "hello")
      5. Schedules: edit app/agent/schedules/*, then `bin/rails silas:schedules`
      6. Channels (optional): set credentials.silas.slack.{signing_secret,bot_token}
         for Slack; route inbound mail to Silas::AgentMailbox for email.
         Delete app/agent/channels/{slack,email}.rb to disable.
      7. Inbox: live at /silas/inbox once you set config.inbox_auth
         (deny-by-default until you do).
  MSG
end