agent-harness 0.11.1 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf9a5083c42a6675255f4c0ea0516ab99473813020e3a875b02eeda98b937db8
4
- data.tar.gz: e070d74c397e02260d2994783c42124f45ac41b15a7c070834dd43c9c59e712a
3
+ metadata.gz: a00dc60851ef15dfa731370add2fb28ac8af98975d61194801afb8a34afc5623
4
+ data.tar.gz: 3422826728017a83203ab285d0e733b2958dd77bf8832c9c57dc16eead4e2a5d
5
5
  SHA512:
6
- metadata.gz: 7bce4c50dc634010ce8d7ac38c4adc661fdff51e2b055d9a585c0a7ef745f4a365a7aa9c68fedac63cfcbce7d7bea18f74a69b1622f2cde8fc5a6d38312ce2df
7
- data.tar.gz: cd9adee894f938a0bb104cd4648766f2b6b6f89e1080874436dd774f8313213bdea4d63d3fed0a81b7bddeca319c8e54a39588726fb40f724bb8d858a85314fc
6
+ metadata.gz: 32065b807ea92963f0694f28517ca0ad17fe860ac73da96d96a1b51090450cad1324f99bd761f28f55b915c0ca14d59731e10166a4ef7f206b2887a5fdfb1a81
7
+ data.tar.gz: 7d4d571e6b98f2769e05ab637938cc41f7ea2ee1bbe2b73b8a8fed9a6c4d6c1a85aca58cf38578b0f81b983818e3df98251bc1e59f0d14e08d69f486429a8ee1
@@ -1,3 +1,3 @@
1
1
  {
2
- ".": "0.11.1"
2
+ ".": "0.11.3"
3
3
  }
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.11.3](https://github.com/viamin/agent-harness/compare/agent-harness/v0.11.2...agent-harness/v0.11.3) (2026-04-28)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * 164: Support provider-agnostic extensions across compatible providers ([#168](https://github.com/viamin/agent-harness/issues/168)) ([2880ae4](https://github.com/viamin/agent-harness/commit/2880ae4f150d1d5574f259b931bbee14ebe0ed04))
9
+
10
+ ## [0.11.2](https://github.com/viamin/agent-harness/compare/agent-harness/v0.11.1...agent-harness/v0.11.2) (2026-04-27)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * 162: Support provider-agnostic MCP configuration ([#165](https://github.com/viamin/agent-harness/issues/165)) ([27f4814](https://github.com/viamin/agent-harness/commit/27f48146e99d8fdba0346235a3e5f19138266652))
16
+
3
17
  ## [0.11.1](https://github.com/viamin/agent-harness/compare/agent-harness/v0.11.0...agent-harness/v0.11.1) (2026-04-26)
4
18
 
5
19
 
@@ -23,7 +23,7 @@ module AgentHarness
23
23
  attr_writer :command_executor
24
24
 
25
25
  attr_reader :providers, :orchestration_config, :callbacks, :custom_provider_classes
26
- attr_reader :sub_agents, :tool_registry, :mcp_servers
26
+ attr_reader :sub_agents, :tool_registry, :mcp_servers, :extension_registry
27
27
 
28
28
  def initialize
29
29
  @logger = nil # Will use null logger if not set
@@ -40,6 +40,7 @@ module AgentHarness
40
40
  @sub_agents = {}
41
41
  @tool_registry = ToolRegistry.new
42
42
  @mcp_servers = {}
43
+ @extension_registry = Extensions::Registry.new
43
44
  end
44
45
 
45
46
  # Get or lazily initialize the command executor
@@ -78,6 +79,22 @@ module AgentHarness
78
79
  @custom_provider_classes[name.to_sym] = klass
79
80
  end
80
81
 
82
+ # Set MCP servers from an array of server definitions.
83
+ #
84
+ # @param servers [Array<Hash, McpServer>] server definitions
85
+ def mcp_servers=(servers)
86
+ normalized = McpConfigTranslator.normalize_servers(servers)
87
+ @mcp_servers = normalized.each_with_object({}) { |s, h| h[s.name.to_sym] = s }
88
+ end
89
+
90
+ # Load MCP server definitions from a configuration file.
91
+ #
92
+ # @param path [String] file path
93
+ def load_mcp_servers_file(path)
94
+ loaded = McpConfigLoader.load_file(path)
95
+ @mcp_servers = loaded.each_with_object({}) { |s, h| h[s.name.to_sym] = s }
96
+ end
97
+
81
98
  # Configure a provider-agnostic sub-agent definition.
82
99
  #
83
100
  # @param name [Symbol, String] sub-agent name
@@ -131,6 +148,56 @@ module AgentHarness
131
148
  @mcp_servers[name.to_sym] = server
132
149
  end
133
150
 
151
+ # Register a provider-agnostic runtime extension.
152
+ #
153
+ # @param extension [Extensions::Base] extension instance
154
+ # @param as [Symbol, String, nil] optional registry key override
155
+ # @return [Extensions::Base]
156
+ def register_extension(extension, as: nil)
157
+ @extension_registry.register(extension, as: as)
158
+ extension
159
+ end
160
+
161
+ # Load one or more extensions from disk through an adapter.
162
+ #
163
+ # @param path [String] extension file, directory, or package root
164
+ # @param adapter [Symbol, String, nil] optional explicit adapter name
165
+ # @return [Array<Extensions::Base>]
166
+ def load_extensions(path, adapter: nil)
167
+ Extensions::Loader.load(path, adapter: adapter).each do |extension|
168
+ register_extension(extension)
169
+ end
170
+ end
171
+
172
+ # Discover and register all extensions found in a directory.
173
+ #
174
+ # Each child entry (subdirectory or file) is loaded through the
175
+ # appropriate adapter; entries that cannot be parsed are silently
176
+ # skipped.
177
+ #
178
+ # @param directory [String] directory to scan
179
+ # @return [Array<Extensions::Base>]
180
+ def discover_extensions(directory)
181
+ Extensions::Loader.discover(directory).each do |extension|
182
+ register_extension(extension)
183
+ end
184
+ end
185
+
186
+ # Resolve a registered or inline extension reference.
187
+ #
188
+ # @param reference [Symbol, String, Extensions::Base, nil]
189
+ # @return [Extensions::Base, nil]
190
+ def resolve_extension(reference)
191
+ case reference
192
+ when nil
193
+ nil
194
+ when Extensions::Base
195
+ reference
196
+ else
197
+ @extension_registry.fetch(reference)
198
+ end
199
+ end
200
+
134
201
  # Resolve a named or inline sub-agent definition.
135
202
  #
136
203
  # @param reference [Symbol, String, Hash, SubAgentConfig, nil] sub-agent reference
@@ -72,6 +72,17 @@ module AgentHarness
72
72
  # Configuration errors
73
73
  class ConfigurationError < Error; end
74
74
 
75
+ class ExtensionCompatibilityError < ConfigurationError
76
+ attr_reader :provider, :extension, :report
77
+
78
+ def initialize(message = nil, provider: nil, extension: nil, report: nil, **kwargs)
79
+ @provider = provider
80
+ @extension = extension
81
+ @report = report
82
+ super(message, **kwargs)
83
+ end
84
+ end
85
+
75
86
  # MCP-specific errors
76
87
  class McpConfigurationError < ConfigurationError; end
77
88