Class: Silas::Generators::InstallGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- Silas::Generators::InstallGenerator
- Defined in:
- lib/generators/silas/install/install_generator.rb
Instance Method Summary collapse
- #add_rescuer_recurring_task ⇒ Object
- #create_agent_directory ⇒ Object
-
#create_channels ⇒ Object
Channels are opt-in: scaffold the two reference bindings + mount the engine that serves their webhooks.
-
#create_eval_gate ⇒ Object
Evals as a deploy gate: an example scenario + a bin/ci wrapper.
- #create_initializer ⇒ Object
- #install_migrations ⇒ Object
- #mount_engine ⇒ Object
- #show_next_steps ⇒ Object
Instance Method Details
#add_rescuer_recurring_task ⇒ Object
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.(recurring, destination_root)) append_to_file recurring, entry.indent(2) else create_file recurring, "production:#{entry.indent(2)}" end end |
#create_agent_directory ⇒ Object
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_channels ⇒ Object
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_gate ⇒ Object
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_initializer ⇒ Object
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_migrations ⇒ Object
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_engine ⇒ Object
27 28 29 |
# File 'lib/generators/silas/install/install_generator.rb', line 27 def mount_engine route 'mount Silas::Engine => "/silas"' end |
#show_next_steps ⇒ Object
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 |