Class: Aidp::AgentHarnessAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/aidp/agent_harness_adapter.rb

Overview

Adapter for using the AgentHarness gem within AIDP

This adapter bridges AIDP's existing provider interface with the new AgentHarness gem, allowing gradual migration.

Usage:

adapter = Aidp::AgentHarnessAdapter.new(config)
response = adapter.send_message(prompt: "Hello", provider: :claude)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(aidp_config, logger: nil) ⇒ AgentHarnessAdapter

Create a new adapter

Parameters:

  • aidp_config (Aidp::Config)

    AIDP configuration

  • logger (Logger) (defaults to: nil)

    logger instance



64
65
66
67
68
69
# File 'lib/aidp/agent_harness_adapter.rb', line 64

def initialize(aidp_config, logger: nil)
  @aidp_config = aidp_config
  @logger = logger || Aidp.logger

  configure_agent_harness
end

Instance Attribute Details

#conductorObject (readonly)

Returns the value of attribute conductor.



58
59
60
# File 'lib/aidp/agent_harness_adapter.rb', line 58

def conductor
  @conductor
end

Instance Method Details

#on_tokens_used {|TokenEvent| ... } ⇒ Object

Register callback for token events

Yields:

  • (TokenEvent)

    token event



132
133
134
# File 'lib/aidp/agent_harness_adapter.rb', line 132

def on_tokens_used(&block)
  AgentHarness.token_tracker.on_tokens_used(&block)
end

#provider(name) ⇒ AgentHarness::Providers::Base

Get a specific provider instance

Parameters:

  • name (Symbol)

    provider name

Returns:

  • (AgentHarness::Providers::Base)

    provider instance



100
101
102
# File 'lib/aidp/agent_harness_adapter.rb', line 100

def provider(name)
  @conductor.provider_manager.get_provider(name)
end

#provider_available?(name) ⇒ Boolean

Check if a provider is available

Parameters:

  • name (Symbol)

    provider name

Returns:

  • (Boolean)

    true if available



108
109
110
111
112
113
# File 'lib/aidp/agent_harness_adapter.rb', line 108

def provider_available?(name)
  provider_class = AgentHarness::Providers::Registry.instance.get(name)
  provider_class.available?
rescue AgentHarness::ConfigurationError
  false
end

#reset!Object

Reset the adapter (useful for testing)



137
138
139
140
# File 'lib/aidp/agent_harness_adapter.rb', line 137

def reset!
  @conductor.reset!
  AgentHarness.token_tracker.clear!
end

#send_message(prompt:, provider: nil, **options) ⇒ Hash

Send a message through AgentHarness

Parameters:

  • prompt (String)

    the prompt to send

  • provider (Symbol, nil) (defaults to: nil)

    provider to use

  • options (Hash)

    additional options

Returns:

  • (Hash)

    AIDP-compatible response



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/aidp/agent_harness_adapter.rb', line 77

def send_message(prompt:, provider: nil, **options)
  start_time = Time.now

  # Map AIDP options to AgentHarness options
  harness_options = map_options(options)

  # Use the conductor for orchestrated requests
  response = @conductor.send_message(prompt, provider: provider, **harness_options)

  # Convert Response to AIDP-compatible hash
  convert_response(response, Time.now - start_time)
rescue AgentHarness::RateLimitError => e
  handle_rate_limit(e, provider)
rescue AgentHarness::NoProvidersAvailableError => e
  handle_no_providers(e)
rescue AgentHarness::Error => e
  handle_error(e, provider)
end

#statusHash

Get orchestration status

Returns:

  • (Hash)

    status information



118
119
120
# File 'lib/aidp/agent_harness_adapter.rb', line 118

def status
  @conductor.status
end

#token_summaryHash

Get token usage summary

Returns:

  • (Hash)

    token usage



125
126
127
# File 'lib/aidp/agent_harness_adapter.rb', line 125

def token_summary
  AgentHarness.token_tracker.summary
end