Module: Ask::Rails::Harness

Defined in:
lib/ask/rails/harness.rb,
lib/ask/rails/harness/auth.rb,
lib/ask/rails/harness/tool.rb,
lib/ask/rails/harness/engine.rb,
lib/ask/rails/harness/railtie.rb,
lib/ask/rails/harness/version.rb,
lib/ask/rails/harness/audit_log.rb,
lib/ask/rails/harness/persistence.rb,
lib/ask/rails/harness/configuration.rb,
app/models/ask/rails/harness/session.rb,
lib/ask/rails/harness/tools/read_log.rb,
lib/ask/rails/harness/tools/read_file.rb,
lib/ask/rails/harness/tools/read_model.rb,
lib/ask/rails/harness/service_discovery.rb,
lib/ask/rails/harness/tools/read_routes.rb,
lib/ask/rails/harness/tools/run_command.rb,
lib/ask/rails/harness/tools/schema_graph.rb,
lib/ask/rails/harness/tools/query_database.rb,
lib/ask/rails/harness/tools/route_inspector.rb,
lib/ask/rails/harness/tools/search_codebase.rb,
lib/ask/rails/harness/environment_permissions.rb,
app/controllers/ask/rails/harness/chat_controller.rb,
lib/generators/ask/rails/harness/install/install_generator.rb

Defined Under Namespace

Modules: AuditLog, Auth, Generators, ServiceDiscovery, Tools Classes: ChatController, Configuration, Engine, EnvironmentPermissions, Persistence, Railtie, Session, Tool

Constant Summary collapse

CORE_RAILS_TOOLS =

Define after all tool files are loaded so the constants resolve

[
  Ask::Rails::Harness::Tools::ReadFile, Ask::Rails::Harness::Tools::RunCommand,
  Ask::Rails::Harness::Tools::SearchCodebase, Ask::Rails::Harness::Tools::ReadRoutes,
  Ask::Rails::Harness::Tools::QueryDatabase, Ask::Rails::Harness::Tools::ReadModel,
  Ask::Rails::Harness::Tools::ReadLog, Ask::Rails::Harness::Tools::SchemaGraph,
  Ask::Rails::Harness::Tools::RouteInspector
].freeze
VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.agent_session(**extra) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/ask/rails/harness.rb', line 19

def agent_session(**extra)
  # Auto-prune if configured
  cleanup! if configuration.max_session_age || configuration.max_sessions

  tools = configuration.tools.map { |t| t.is_a?(Class) ? t.new : t }
  prompt = extra.delete(:system_prompt) || configuration.system_prompt || default_system_prompt

  # Resolve environment-specific permissions and wire into agent hooks
  hooks = build_environment_hooks

  Ask::Agent::Session.new(
    model: configuration.default_model,
    max_turns: configuration.max_turns,
    system_prompt: prompt,
    tools: tools,
    state: configuration.persistence_adapter,
    hooks: hooks,
    **extra
  )
end

.cleanup!Object

Prune old sessions and audit logs based on configuration limits.

Removes sessions older than max_session_age seconds, and limits the total number of sessions to max_sessions (deleting the oldest first). Audit log entries older than the oldest kept session are also removed.

Call manually via rake task or cron, or configure limits to auto-prune on agent_session creation.



52
53
54
55
# File 'lib/ask/rails/harness.rb', line 52

def cleanup!
  prune_old_sessions
  limit_session_count
end

.configurationObject



15
16
17
# File 'lib/ask/rails/harness.rb', line 15

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



11
12
13
# File 'lib/ask/rails/harness.rb', line 11

def configure
  yield configuration
end

.discover_tools!Object



40
41
42
# File 'lib/ask/rails/harness.rb', line 40

def discover_tools!
  self.configuration.tools = Ask::Tools::Shell::TOOLS.map(&:new) + core_rails_tools + discovered_user_tools
end

.rootObject



57
58
59
# File 'lib/ask/rails/harness.rb', line 57

def root
  @root ||= Pathname.new(File.expand_path("../..", __dir__))
end