Module: Silas
- Defined in:
- lib/silas.rb,
lib/silas/chat.rb,
lib/silas/eval.rb,
lib/silas/tool.rb,
lib/silas/agent.rb,
lib/silas/inbox.rb,
lib/silas/skill.rb,
lib/silas/slack.rb,
lib/silas/budget.rb,
lib/silas/engine.rb,
lib/silas/errors.rb,
lib/silas/ledger.rb,
lib/silas/channel.rb,
lib/silas/sandbox.rb,
lib/silas/version.rb,
lib/silas/eval/dsl.rb,
lib/silas/registry.rb,
lib/silas/schedule.rb,
lib/silas/connection.rb,
lib/silas/inbox/cost.rb,
lib/silas/mcp/client.rb,
lib/silas/mcp/server.rb,
app/models/silas/step.rb,
app/models/silas/turn.rb,
lib/silas/agent_scope.rb,
lib/silas/connections.rb,
lib/silas/eval/driver.rb,
lib/silas/eval/grader.rb,
lib/silas/eval/result.rb,
lib/silas/eval/runner.rb,
lib/silas/mcp/handler.rb,
lib/silas/step_runner.rb,
lib/silas/engines/base.rb,
lib/silas/instructions.rb,
lib/silas/sandbox/null.rb,
lib/silas/agent_sdk/cli.rb,
lib/silas/configuration.rb,
lib/silas/nested_runner.rb,
app/models/silas/session.rb,
lib/silas/sandbox/docker.rb,
lib/silas/tools/delegate.rb,
lib/silas/tools/run_code.rb,
lib/silas/eval/assertions.rb,
lib/silas/eval/transcript.rb,
lib/silas/message_builder.rb,
lib/silas/engines/ruby_llm.rb,
lib/silas/tools/load_skill.rb,
app/jobs/silas/schedule_job.rb,
lib/silas/engines/agent_sdk.rb,
lib/silas/schedule/compiler.rb,
lib/silas/subprocess_runner.rb,
app/jobs/silas/agent_loop_job.rb,
lib/silas/eval/scripted_engine.rb,
app/mailers/silas/channel_mailer.rb,
app/models/silas/tool_invocation.rb,
app/mailboxes/silas/agent_mailbox.rb,
lib/silas/agent_sdk/stream_parser.rb,
lib/silas/agent_sdk/version_guard.rb,
app/jobs/silas/channel_delivery_job.rb,
app/jobs/silas/dead_job_rescuer_job.rb,
app/models/silas/application_record.rb,
app/helpers/silas/inbox/trace_helper.rb,
app/controllers/silas/inbox/base_controller.rb,
app/models/concerns/silas/inbox/broadcastable.rb,
app/controllers/silas/channels/base_controller.rb,
lib/generators/silas/install/install_generator.rb,
app/controllers/silas/channels/slack_controller.rb,
app/controllers/silas/inbox/sessions_controller.rb,
app/controllers/silas/inbox/invocations_controller.rb,
app/controllers/silas/channels/approvals_controller.rb
Defined Under Namespace
Modules: AgentSdk, Budget, Channels, Engines, Eval, Generators, Inbox, Instructions, Ledger, Mcp, MessageBuilder, NestedRunner, Sandbox, Slack, StepRunner, SubprocessRunner, Tools
Classes: Agent, AgentLoopJob, AgentMailbox, AgentScope, ApplicationRecord, BootGuardError, Channel, ChannelDeliveryJob, ChannelMailer, Chat, CheckpointInLedgerError, Configuration, Connection, Connections, DeadJobRescuerJob, Engine, Error, Event, NondeterminismError, Registry, SandboxDisabledError, SandboxError, Schedule, ScheduleJob, Session, Skill, Step, Tool, ToolInvocation, Turn, TurnInProgressError
Constant Summary
collapse
- VERSION =
"0.1.5"
Class Method Summary
collapse
Class Method Details
.agent ⇒ Object
The active agent definition. config.agent_override is set during a nested
subagent run; otherwise it's the root app/agent.
113
114
115
|
# File 'lib/silas.rb', line 113
def agent
config.agent_override || (@agent ||= Agent.load)
end
|
.config ⇒ Object
48
49
50
|
# File 'lib/silas.rb', line 48
def config
@config ||= Configuration.new
end
|
52
53
54
55
56
|
# File 'lib/silas.rb', line 52
def configure
yield config
config.validate!
config
end
|
.reset_agent_memo! ⇒ Object
after Registry.install! swaps dirs
81
|
# File 'lib/silas.rb', line 81
def reset_agent_memo! = (@agent = nil)
|
.reset_configuration! ⇒ Object
58
59
60
61
62
63
|
# File 'lib/silas.rb', line 58
def reset_configuration! @config = nil
@resolved_engine = nil
@resolved_sandbox = nil
@agent = nil
end
|
.resolved_engine ⇒ Object
The inference adapter instance. config.engine may be a symbol (:ruby_llm,
:agent_sdk) or any object responding to #execute_step (specs, custom).
85
86
87
88
89
90
91
92
93
|
# File 'lib/silas.rb', line 85
def resolved_engine
@resolved_engine ||=
case config.engine
when :ruby_llm then Engines::RubyLLM.new
when :agent_sdk then Engines::AgentSdk.new
when Symbol then raise Error, "unknown engine #{config.engine.inspect}"
else config.engine
end
end
|
.resolved_sandbox ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/silas.rb', line 67
def resolved_sandbox
@resolved_sandbox ||=
case config.sandbox
when :none, nil then Sandbox::Null.new
when :docker
Sandbox::Docker.new(image: config.sandbox_image, network: config.sandbox_network,
memory: config.sandbox_memory, cpus: config.sandbox_cpus,
pids: config.sandbox_pids, workdir: config.sandbox_workdir,
docker_bin: config.sandbox_docker_bin)
when Symbol then raise Error, "unknown sandbox #{config.sandbox.inspect}"
else config.sandbox
end
end
|
.sandbox_enabled? ⇒ Boolean
65
|
# File 'lib/silas.rb', line 65
def sandbox_enabled? = ![ :none, nil ].include?(config.sandbox)
|
.schedules ⇒ Object
107
108
109
|
# File 'lib/silas.rb', line 107
def schedules
config.schedules&.call || []
end
|
.skills ⇒ Object
103
104
105
|
# File 'lib/silas.rb', line 103
def skills
config.skills&.call || []
end
|
.subagent?(name) ⇒ Boolean
120
|
# File 'lib/silas.rb', line 120
def subagent?(name) = subagent_index.any? { |n, _| n == name.to_s }
|
.subagent_index ⇒ Object
Subagent roster: [[name, description], ...] (model-visible, so it's in the
root digest via Delegate.description).
119
|
# File 'lib/silas.rb', line 119
def subagent_index = config.subagent_index&.call || []
|
.subagent_scope(name) ⇒ Object
121
|
# File 'lib/silas.rb', line 121
def subagent_scope(name) = config.subagent_scopes&.call&.fetch(name.to_s)
|
99
100
101
|
# File 'lib/silas.rb', line 99
def tool_definitions
config.tool_definitions&.call || []
end
|
95
96
97
|
# File 'lib/silas.rb', line 95
def tool_resolver
config.tool_resolver or raise Error, "no tool resolver configured (Registry boots one; specs must inject)"
end
|
.with_agent_scope(scope) ⇒ Object
Run a block with a subagent's scope swapped in as the active globals,
restoring afterward. Synchronous/depth-1 — safe because delegation runs
inline on one thread while the parent loop is paused in the delegate tool.
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/silas.rb', line 126
def with_agent_scope(scope)
saved = {
tool_resolver: config.tool_resolver, tool_definitions: config.tool_definitions,
definitions_digest: config.definitions_digest, skills: config.skills,
agent_override: config.agent_override, instructions_dir: config.instructions_dir
}
config.tool_resolver = scope.resolver
config.tool_definitions = -> { scope.definitions }
config.definitions_digest = -> { scope.digest }
config.skills = -> { scope.skills }
config.agent_override = scope.agent
config.instructions_dir = scope.dir
yield
ensure
saved.each { |k, v| config.public_send("#{k}=", v) }
end
|