smith-agents 0.7.0 → 0.8.0
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 +4 -4
- data/CHANGELOG.md +226 -0
- data/README.md +71 -1
- data/docs/CONFIGURATION.md +22 -1
- data/docs/PERSISTENCE.md +27 -1
- data/docs/TOOLS_AND_GUARDRAILS.md +233 -2
- data/lib/smith/agent/chat_construction.rb +112 -0
- data/lib/smith/agent/completion.rb +46 -0
- data/lib/smith/agent/completion_usage_recording.rb +25 -0
- data/lib/smith/agent/dynamic_configuration.rb +69 -0
- data/lib/smith/agent/fallback_configuration.rb +26 -0
- data/lib/smith/agent/invocation_preparation.rb +104 -0
- data/lib/smith/agent/lifecycle.rb +7 -276
- data/lib/smith/agent/model_reference.rb +76 -0
- data/lib/smith/agent/provider_attempt.rb +28 -0
- data/lib/smith/agent/provider_candidate_sequence.rb +55 -0
- data/lib/smith/agent/provider_completion.rb +130 -0
- data/lib/smith/agent/provider_failure_handling.rb +93 -0
- data/lib/smith/agent/provider_usage.rb +28 -0
- data/lib/smith/agent/reserved_input_bridge.rb +40 -0
- data/lib/smith/agent/usage_entry_recording.rb +43 -0
- data/lib/smith/agent/usage_tracking.rb +113 -0
- data/lib/smith/agent.rb +29 -197
- data/lib/smith/context/observation_masking.rb +28 -4
- data/lib/smith/context/session.rb +7 -2
- data/lib/smith/diagnostic_text.rb +67 -0
- data/lib/smith/doctor/checks/configuration.rb +16 -3
- data/lib/smith/doctor/checks/models_registry.rb +75 -17
- data/lib/smith/errors.rb +34 -1
- data/lib/smith/models/ambiguous_profile_error.rb +9 -0
- data/lib/smith/models/collision_error.rb +9 -0
- data/lib/smith/models/inference.rb +14 -0
- data/lib/smith/models/normalizer.rb +11 -67
- data/lib/smith/models/provider_qualified_registry.rb +101 -0
- data/lib/smith/models/tool_routing.rb +140 -0
- data/lib/smith/models.rb +24 -78
- data/lib/smith/persisted_failure_invalid.rb +7 -0
- data/lib/smith/pricing.rb +138 -17
- data/lib/smith/pricing_configuration_error.rb +7 -0
- data/lib/smith/provider_permanent_failure.rb +16 -0
- data/lib/smith/tool/argument_container_reader.rb +97 -0
- data/lib/smith/tool/argument_scalar_snapshot.rb +99 -0
- data/lib/smith/tool/argument_snapshot.rb +19 -0
- data/lib/smith/tool/argument_snapshot_accounting.rb +69 -0
- data/lib/smith/tool/argument_snapshot_result.rb +15 -0
- data/lib/smith/tool/argument_snapshot_traversal.rb +119 -0
- data/lib/smith/tool/bounded_completion_context.rb +131 -0
- data/lib/smith/tool/bounded_completion_controls.rb +113 -0
- data/lib/smith/tool/bounded_completion_guard.rb +101 -0
- data/lib/smith/tool/bounded_completion_installation.rb +20 -0
- data/lib/smith/tool/bounded_completion_state.rb +57 -0
- data/lib/smith/tool/budget_enforcement.rb +15 -7
- data/lib/smith/tool/call_admission.rb +44 -0
- data/lib/smith/tool/call_allowance.rb +101 -28
- data/lib/smith/tool/call_allowance_counter.rb +43 -0
- data/lib/smith/tool/call_batch.rb +47 -0
- data/lib/smith/tool/call_budget.rb +51 -0
- data/lib/smith/tool/call_reservation.rb +42 -0
- data/lib/smith/tool/chat_execution_callbacks.rb +58 -0
- data/lib/smith/tool/chat_execution_context.rb +7 -88
- data/lib/smith/tool/execution_authority.rb +42 -0
- data/lib/smith/tool/execution_authorization.rb +17 -0
- data/lib/smith/tool/execution_batch.rb +100 -0
- data/lib/smith/tool/execution_batch_admission.rb +56 -0
- data/lib/smith/tool/execution_batch_builder.rb +122 -0
- data/lib/smith/tool/execution_batch_collection.rb +70 -0
- data/lib/smith/tool/execution_batch_invocations.rb +28 -0
- data/lib/smith/tool/execution_batch_lifecycle.rb +91 -0
- data/lib/smith/tool/execution_batch_registry.rb +99 -0
- data/lib/smith/tool/execution_batch_requests.rb +59 -0
- data/lib/smith/tool/execution_batch_source_call.rb +36 -0
- data/lib/smith/tool/execution_batch_source_metadata.rb +107 -0
- data/lib/smith/tool/execution_batch_sources.rb +32 -0
- data/lib/smith/tool/execution_batch_state.rb +110 -0
- data/lib/smith/tool/execution_dispatch.rb +78 -0
- data/lib/smith/tool/execution_failure_handling.rb +101 -0
- data/lib/smith/tool/execution_lifecycle.rb +28 -0
- data/lib/smith/tool/execution_tracker.rb +20 -0
- data/lib/smith/tool/fail_fast_completion.rb +24 -0
- data/lib/smith/tool/graceful_completion.rb +20 -0
- data/lib/smith/tool/invocation.rb +27 -0
- data/lib/smith/tool/invocation_request.rb +37 -0
- data/lib/smith/tool/invocation_sequence.rb +26 -0
- data/lib/smith/tool/legacy_call_allowance.rb +57 -0
- data/lib/smith/tool/scoped_context.rb +60 -8
- data/lib/smith/tool.rb +71 -12
- data/lib/smith/tool_execution_not_admitted.rb +7 -0
- data/lib/smith/tool_failure_notification_failed.rb +94 -0
- data/lib/smith/version.rb +2 -2
- data/lib/smith/workflow/agent_result.rb +4 -3
- data/lib/smith/workflow/artifact_integration.rb +2 -1
- data/lib/smith/workflow/composite/effects.rb +3 -1
- data/lib/smith/workflow/deadline_enforcement.rb +20 -2
- data/lib/smith/workflow/execution.rb +2 -9
- data/lib/smith/workflow/failure_detail_snapshot.rb +33 -0
- data/lib/smith/workflow/failure_reconstructor.rb +79 -0
- data/lib/smith/workflow/failure_record.rb +139 -0
- data/lib/smith/workflow/failure_record_restore.rb +145 -0
- data/lib/smith/workflow/failure_record_text.rb +83 -0
- data/lib/smith/workflow/failure_record_validator.rb +113 -0
- data/lib/smith/workflow/guarded_step_execution.rb +39 -0
- data/lib/smith/workflow/parallel.rb +14 -3
- data/lib/smith/workflow/persistence.rb +22 -19
- data/lib/smith/workflow/retry_execution.rb +5 -1
- data/lib/smith/workflow/thread_context_snapshot.rb +5 -2
- data/lib/smith/workflow/transition.rb +9 -4
- data/lib/smith/workflow/usage_entry.rb +12 -2
- data/lib/smith/workflow.rb +17 -130
- data/lib/smith.rb +3 -0
- metadata +78 -11
data/lib/smith/workflow.rb
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
require "digest"
|
|
4
4
|
require "json"
|
|
5
5
|
require "securerandom"
|
|
6
|
-
require "set"
|
|
7
6
|
require "time"
|
|
8
7
|
|
|
9
8
|
require_relative "workflow/agent_result"
|
|
10
9
|
require_relative "workflow/branch_env"
|
|
10
|
+
require_relative "workflow/failure_record"
|
|
11
|
+
require_relative "workflow/failure_record_restore"
|
|
12
|
+
require_relative "workflow/failure_reconstructor"
|
|
11
13
|
require_relative "workflow/run_result"
|
|
12
14
|
require_relative "workflow/string_snapshot"
|
|
13
15
|
require_relative "workflow/usage_entry"
|
|
@@ -30,51 +32,6 @@ module Smith
|
|
|
30
32
|
|
|
31
33
|
DEFAULT_MAX_TRANSITIONS = 100
|
|
32
34
|
|
|
33
|
-
# Reconstruct Smith error classes from `@last_failed_step` snapshots.
|
|
34
|
-
# Order matters: more-specific subclasses first, so a real DSF doesn't
|
|
35
|
-
# get caught by the WorkflowError handler. Each lambda preserves the
|
|
36
|
-
# billing-critical attributes (`retryable`, `kind`, `details`) by
|
|
37
|
-
# routing through the original constructor — Smith's retryable errors
|
|
38
|
-
# expose `attr_reader :retryable` only, with no setter, so kwargs
|
|
39
|
-
# MUST flow through `initialize`.
|
|
40
|
-
KNOWN_RECONSTRUCTORS = {
|
|
41
|
-
"Smith::ToolCaptureFailed" => ->(s) {
|
|
42
|
-
Smith::ToolCaptureFailed.from_details(s.fetch(:error_details))
|
|
43
|
-
},
|
|
44
|
-
"Smith::ToolGuardrailFailed" => ->(s) {
|
|
45
|
-
Smith::ToolGuardrailFailed.new(s[:error_message], retryable: s[:error_retryable])
|
|
46
|
-
},
|
|
47
|
-
"Smith::DeterministicStepFailure" => ->(s) {
|
|
48
|
-
Smith::DeterministicStepFailure.new(
|
|
49
|
-
s[:error_message],
|
|
50
|
-
retryable: s[:error_retryable],
|
|
51
|
-
kind: s[:error_kind],
|
|
52
|
-
details: s[:error_details]
|
|
53
|
-
)
|
|
54
|
-
},
|
|
55
|
-
"Smith::AgentError" => ->(s) { Smith::AgentError.new(s[:error_message]) },
|
|
56
|
-
"Smith::DeadlineExceeded" => ->(s) { Smith::DeadlineExceeded.new(s[:error_message]) },
|
|
57
|
-
"Smith::WorkflowError" => ->(s) { Smith::WorkflowError.new(s[:error_message]) },
|
|
58
|
-
"Smith::Workflow::Composite::BranchFailure" => lambda { |s|
|
|
59
|
-
Smith::Workflow::Composite::BranchFailure.from_details(s[:error_details])
|
|
60
|
-
},
|
|
61
|
-
# Smith errors with non-message constructors map to compatible
|
|
62
|
-
# superclass — message preserved, original metadata (agent_name,
|
|
63
|
-
# model_used, requested_name, workflow_class, origin_state) lossy
|
|
64
|
-
# but `is_a?` classification round-trips via the superclass.
|
|
65
|
-
"Smith::BlankAgentOutputError" => ->(s) { Smith::AgentError.new(s[:error_message]) },
|
|
66
|
-
"Smith::UnresolvedTransitionError" => ->(s) { Smith::WorkflowError.new(s[:error_message]) }
|
|
67
|
-
}.freeze
|
|
68
|
-
private_constant :KNOWN_RECONSTRUCTORS
|
|
69
|
-
|
|
70
|
-
# Families whose retryable/kind/details attributes are billing-critical.
|
|
71
|
-
# For these, the reconstruction path bypasses `const_get(...).new(message)`
|
|
72
|
-
# (which would succeed for unknown subclasses with message-only
|
|
73
|
-
# constructors but discard the kwargs) and uses the family fallback
|
|
74
|
-
# directly so the parent-class constructor preserves the attrs.
|
|
75
|
-
RETRYABLE_BEARING_FAMILIES = %w[deterministic_step_failure tool_guardrail_failed].freeze
|
|
76
|
-
private_constant :RETRYABLE_BEARING_FAMILIES
|
|
77
|
-
|
|
78
35
|
attr_reader :state, :last_prepared_input, :ledger
|
|
79
36
|
|
|
80
37
|
def session_messages
|
|
@@ -113,6 +70,7 @@ module Smith
|
|
|
113
70
|
# seed_validation is :warn or :strict; nil when no seed builder
|
|
114
71
|
# ran or its output was empty.
|
|
115
72
|
@seed_digest = nil
|
|
73
|
+
@seed_message_count = 0
|
|
116
74
|
# Idempotency marker stamped between persist-before-advance and
|
|
117
75
|
# persist-after-advance under idempotency_mode :strict; restored
|
|
118
76
|
# workflows with the marker set raise
|
|
@@ -203,7 +161,7 @@ module Smith
|
|
|
203
161
|
|
|
204
162
|
def initial_persist_auto_seed
|
|
205
163
|
manager = self.class.context_manager
|
|
206
|
-
return [] unless manager
|
|
164
|
+
return [] unless manager.respond_to?(:persist_mode) && manager.persist_mode == :auto
|
|
207
165
|
|
|
208
166
|
manager.persist_auto_seed.map(&:to_sym)
|
|
209
167
|
end
|
|
@@ -223,31 +181,7 @@ module Smith
|
|
|
223
181
|
return unless step_result
|
|
224
182
|
|
|
225
183
|
if step_result[:error]
|
|
226
|
-
|
|
227
|
-
# error_family preserves classification across reconstruction
|
|
228
|
-
# even when the exact class can't be rebuilt. Order matters:
|
|
229
|
-
# specific subclasses first (DSF before WorkflowError, etc.)
|
|
230
|
-
# so a real DSF doesn't get classified as workflow_error.
|
|
231
|
-
error_family = case err
|
|
232
|
-
when Smith::DeterministicStepFailure then "deterministic_step_failure"
|
|
233
|
-
when Smith::ToolCaptureFailed then "tool_capture_failed"
|
|
234
|
-
when Smith::ToolGuardrailFailed then "tool_guardrail_failed"
|
|
235
|
-
when Smith::DeadlineExceeded then "deadline_exceeded"
|
|
236
|
-
when Smith::AgentError then "agent_error"
|
|
237
|
-
when Smith::WorkflowError then "workflow_error"
|
|
238
|
-
else "other"
|
|
239
|
-
end
|
|
240
|
-
@last_failed_step = {
|
|
241
|
-
transition: step_result[:transition],
|
|
242
|
-
from: step_result[:from],
|
|
243
|
-
to: step_result[:to],
|
|
244
|
-
error_class: err.class.name,
|
|
245
|
-
error_family: error_family,
|
|
246
|
-
error_message: err.message,
|
|
247
|
-
error_retryable: err.respond_to?(:retryable) ? err.retryable : nil,
|
|
248
|
-
error_kind: err.respond_to?(:kind) ? err.kind : nil,
|
|
249
|
-
error_details: err.respond_to?(:details) ? err.details : nil
|
|
250
|
-
}
|
|
184
|
+
@last_failed_step = FailureRecord.capture(step_result)
|
|
251
185
|
else
|
|
252
186
|
# Successful step: clear any prior failed-step snapshot
|
|
253
187
|
# (workflow handled the failure and continued) and capture
|
|
@@ -275,7 +209,7 @@ module Smith
|
|
|
275
209
|
name = @next_transition_name
|
|
276
210
|
@next_transition_name = nil
|
|
277
211
|
transition = self.class.find_transition(name) ||
|
|
278
|
-
|
|
212
|
+
raise(UnresolvedTransitionError.new(name, self.class, @state))
|
|
279
213
|
validate_transition_origin!(transition)
|
|
280
214
|
transition
|
|
281
215
|
else
|
|
@@ -316,10 +250,10 @@ module Smith
|
|
|
316
250
|
# terminal state never produces a synthetic error even if the
|
|
317
251
|
# snapshot wasn't cleared.
|
|
318
252
|
effective_steps = if steps.empty? && failed? && @last_failed_step
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
253
|
+
[reconstruct_failed_step]
|
|
254
|
+
else
|
|
255
|
+
steps
|
|
256
|
+
end
|
|
323
257
|
|
|
324
258
|
RunResult.new(
|
|
325
259
|
state: @state,
|
|
@@ -336,59 +270,11 @@ module Smith
|
|
|
336
270
|
end
|
|
337
271
|
|
|
338
272
|
def reconstruct_failed_step
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
# Skip const_get for retryable-bearing families. An unknown
|
|
345
|
-
# subclass with a message-only constructor would const_get
|
|
346
|
-
# successfully but discard the snapshot's `retryable`/`kind`/
|
|
347
|
-
# `details` (defaults to nil), and host retry classification
|
|
348
|
-
# could misclassify a retryable failure as terminal.
|
|
349
|
-
# Family fallback rebuilds the parent class with kwargs intact.
|
|
350
|
-
family_fallback(snap)
|
|
351
|
-
else
|
|
352
|
-
# Unknown subclass without retryable-bearing semantics. Try
|
|
353
|
-
# the exact class for shape preservation; fall back via family
|
|
354
|
-
# if the constructor doesn't accept message-only args (or the
|
|
355
|
-
# class doesn't exist).
|
|
356
|
-
begin
|
|
357
|
-
Kernel.const_get(snap[:error_class]).new(snap[:error_message])
|
|
358
|
-
rescue NameError, ArgumentError
|
|
359
|
-
family_fallback(snap)
|
|
360
|
-
end
|
|
361
|
-
end
|
|
362
|
-
|
|
363
|
-
# Symbol coercion on the way out: live steps carry these as
|
|
364
|
-
# symbols; JSON round-trip stringifies them; coerce back to
|
|
365
|
-
# match fresh-run shape exactly.
|
|
366
|
-
{
|
|
367
|
-
transition: normalize_transition_name(snap[:transition]),
|
|
368
|
-
from: normalize_state_name(snap[:from]),
|
|
369
|
-
to: normalize_state_name(snap[:to]),
|
|
370
|
-
error: error
|
|
371
|
-
}
|
|
372
|
-
end
|
|
373
|
-
|
|
374
|
-
def family_fallback(snap)
|
|
375
|
-
case snap[:error_family]
|
|
376
|
-
when "deterministic_step_failure"
|
|
377
|
-
Smith::DeterministicStepFailure.new(
|
|
378
|
-
snap[:error_message],
|
|
379
|
-
retryable: snap[:error_retryable],
|
|
380
|
-
kind: snap[:error_kind],
|
|
381
|
-
details: snap[:error_details]
|
|
382
|
-
)
|
|
383
|
-
when "tool_guardrail_failed"
|
|
384
|
-
Smith::ToolGuardrailFailed.new(snap[:error_message], retryable: snap[:error_retryable])
|
|
385
|
-
when "tool_capture_failed"
|
|
386
|
-
Smith::ToolCaptureFailed.from_details(snap.fetch(:error_details))
|
|
387
|
-
when "deadline_exceeded" then Smith::DeadlineExceeded.new(snap[:error_message])
|
|
388
|
-
when "agent_error" then Smith::AgentError.new(snap[:error_message])
|
|
389
|
-
when "workflow_error" then Smith::WorkflowError.new(snap[:error_message])
|
|
390
|
-
else RuntimeError.new(snap[:error_message])
|
|
391
|
-
end
|
|
273
|
+
FailureReconstructor.new(
|
|
274
|
+
snapshot: @last_failed_step,
|
|
275
|
+
transition_normalizer: method(:normalize_transition_name),
|
|
276
|
+
state_normalizer: method(:normalize_state_name)
|
|
277
|
+
).call
|
|
392
278
|
end
|
|
393
279
|
|
|
394
280
|
def seed_initial_session_messages
|
|
@@ -396,6 +282,7 @@ module Smith
|
|
|
396
282
|
return if messages.nil?
|
|
397
283
|
|
|
398
284
|
@session_messages = messages
|
|
285
|
+
@seed_message_count = messages.length
|
|
399
286
|
@seed_digest = compute_seed_digest(messages)
|
|
400
287
|
end
|
|
401
288
|
|
data/lib/smith.rb
CHANGED
|
@@ -177,6 +177,7 @@ end
|
|
|
177
177
|
# Leaf modules (no internal dependencies)
|
|
178
178
|
require_relative "smith/types"
|
|
179
179
|
require_relative "smith/errors"
|
|
180
|
+
require_relative "smith/tool_failure_notification_failed"
|
|
180
181
|
require_relative "smith/persistence_payload_conflict"
|
|
181
182
|
require_relative "smith/exponential_backoff"
|
|
182
183
|
|
|
@@ -205,6 +206,7 @@ require_relative "smith/pricing"
|
|
|
205
206
|
require_relative "smith/models/profile"
|
|
206
207
|
require_relative "smith/models"
|
|
207
208
|
require_relative "smith/models/inference"
|
|
209
|
+
require_relative "smith/models/tool_routing"
|
|
208
210
|
require_relative "smith/models/normalizer"
|
|
209
211
|
|
|
210
212
|
# OpenAI /v1/responses routing prepend. Dormant until
|
|
@@ -254,6 +256,7 @@ require_relative "smith/context/session"
|
|
|
254
256
|
|
|
255
257
|
# Agent (depends on RubyLLM::Agent)
|
|
256
258
|
require_relative "smith/agent"
|
|
259
|
+
require_relative "smith/agent/completion"
|
|
257
260
|
require_relative "smith/agent/lifecycle"
|
|
258
261
|
require_relative "smith/agent/registry_binding"
|
|
259
262
|
require_relative "smith/agent/registry"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: smith-agents
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Samuel Ralak
|
|
@@ -117,22 +117,16 @@ dependencies:
|
|
|
117
117
|
name: ruby_llm
|
|
118
118
|
requirement: !ruby/object:Gem::Requirement
|
|
119
119
|
requirements:
|
|
120
|
-
- -
|
|
121
|
-
- !ruby/object:Gem::Version
|
|
122
|
-
version: '1.15'
|
|
123
|
-
- - "<"
|
|
120
|
+
- - '='
|
|
124
121
|
- !ruby/object:Gem::Version
|
|
125
|
-
version:
|
|
122
|
+
version: 1.16.0
|
|
126
123
|
type: :runtime
|
|
127
124
|
prerelease: false
|
|
128
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
129
126
|
requirements:
|
|
130
|
-
- -
|
|
131
|
-
- !ruby/object:Gem::Version
|
|
132
|
-
version: '1.15'
|
|
133
|
-
- - "<"
|
|
127
|
+
- - '='
|
|
134
128
|
- !ruby/object:Gem::Version
|
|
135
|
-
version:
|
|
129
|
+
version: 1.16.0
|
|
136
130
|
description: Smith is a workflow-first multi-agent orchestration library built on
|
|
137
131
|
RubyLLM. It provides state machine modeling, typed contracts, budget enforcement,
|
|
138
132
|
guardrails, and observability for agent workflows.
|
|
@@ -159,12 +153,27 @@ files:
|
|
|
159
153
|
- lib/generators/smith/install/templates/smith.rb.tt
|
|
160
154
|
- lib/smith.rb
|
|
161
155
|
- lib/smith/agent.rb
|
|
156
|
+
- lib/smith/agent/chat_construction.rb
|
|
157
|
+
- lib/smith/agent/completion.rb
|
|
158
|
+
- lib/smith/agent/completion_usage_recording.rb
|
|
159
|
+
- lib/smith/agent/dynamic_configuration.rb
|
|
160
|
+
- lib/smith/agent/fallback_configuration.rb
|
|
161
|
+
- lib/smith/agent/invocation_preparation.rb
|
|
162
162
|
- lib/smith/agent/lifecycle.rb
|
|
163
|
+
- lib/smith/agent/model_reference.rb
|
|
164
|
+
- lib/smith/agent/provider_attempt.rb
|
|
165
|
+
- lib/smith/agent/provider_candidate_sequence.rb
|
|
166
|
+
- lib/smith/agent/provider_completion.rb
|
|
167
|
+
- lib/smith/agent/provider_failure_handling.rb
|
|
168
|
+
- lib/smith/agent/provider_usage.rb
|
|
163
169
|
- lib/smith/agent/registry.rb
|
|
164
170
|
- lib/smith/agent/registry/execution_binding_capture.rb
|
|
165
171
|
- lib/smith/agent/registry/introspection.rb
|
|
166
172
|
- lib/smith/agent/registry/mutation_boundary.rb
|
|
167
173
|
- lib/smith/agent/registry_binding.rb
|
|
174
|
+
- lib/smith/agent/reserved_input_bridge.rb
|
|
175
|
+
- lib/smith/agent/usage_entry_recording.rb
|
|
176
|
+
- lib/smith/agent/usage_tracking.rb
|
|
168
177
|
- lib/smith/artifacts.rb
|
|
169
178
|
- lib/smith/artifacts/file.rb
|
|
170
179
|
- lib/smith/artifacts/memory.rb
|
|
@@ -185,6 +194,7 @@ files:
|
|
|
185
194
|
- lib/smith/context/observation_masking.rb
|
|
186
195
|
- lib/smith/context/session.rb
|
|
187
196
|
- lib/smith/context/state_injection.rb
|
|
197
|
+
- lib/smith/diagnostic_text.rb
|
|
188
198
|
- lib/smith/doctor.rb
|
|
189
199
|
- lib/smith/doctor/check.rb
|
|
190
200
|
- lib/smith/doctor/checks/baseline.rb
|
|
@@ -214,9 +224,14 @@ files:
|
|
|
214
224
|
- lib/smith/guardrails/runner.rb
|
|
215
225
|
- lib/smith/guardrails/url_verifier.rb
|
|
216
226
|
- lib/smith/models.rb
|
|
227
|
+
- lib/smith/models/ambiguous_profile_error.rb
|
|
228
|
+
- lib/smith/models/collision_error.rb
|
|
217
229
|
- lib/smith/models/inference.rb
|
|
218
230
|
- lib/smith/models/normalizer.rb
|
|
219
231
|
- lib/smith/models/profile.rb
|
|
232
|
+
- lib/smith/models/provider_qualified_registry.rb
|
|
233
|
+
- lib/smith/models/tool_routing.rb
|
|
234
|
+
- lib/smith/persisted_failure_invalid.rb
|
|
220
235
|
- lib/smith/persistence_adapters.rb
|
|
221
236
|
- lib/smith/persistence_adapters/active_record_connection_errors.rb
|
|
222
237
|
- lib/smith/persistence_adapters/active_record_exact_predicate.rb
|
|
@@ -236,22 +251,67 @@ files:
|
|
|
236
251
|
- lib/smith/persistence_adapters/version_expectation.rb
|
|
237
252
|
- lib/smith/persistence_payload_conflict.rb
|
|
238
253
|
- lib/smith/pricing.rb
|
|
254
|
+
- lib/smith/pricing_configuration_error.rb
|
|
255
|
+
- lib/smith/provider_permanent_failure.rb
|
|
239
256
|
- lib/smith/providers/openai/responses.rb
|
|
240
257
|
- lib/smith/providers/openai/routing.rb
|
|
241
258
|
- lib/smith/providers/openai/tools_extensions.rb
|
|
242
259
|
- lib/smith/railtie.rb
|
|
243
260
|
- lib/smith/tasks/doctor.rake
|
|
244
261
|
- lib/smith/tool.rb
|
|
262
|
+
- lib/smith/tool/argument_container_reader.rb
|
|
263
|
+
- lib/smith/tool/argument_scalar_snapshot.rb
|
|
264
|
+
- lib/smith/tool/argument_snapshot.rb
|
|
265
|
+
- lib/smith/tool/argument_snapshot_accounting.rb
|
|
266
|
+
- lib/smith/tool/argument_snapshot_result.rb
|
|
267
|
+
- lib/smith/tool/argument_snapshot_traversal.rb
|
|
268
|
+
- lib/smith/tool/bounded_completion_context.rb
|
|
269
|
+
- lib/smith/tool/bounded_completion_controls.rb
|
|
270
|
+
- lib/smith/tool/bounded_completion_guard.rb
|
|
271
|
+
- lib/smith/tool/bounded_completion_installation.rb
|
|
272
|
+
- lib/smith/tool/bounded_completion_state.rb
|
|
245
273
|
- lib/smith/tool/budget_enforcement.rb
|
|
274
|
+
- lib/smith/tool/call_admission.rb
|
|
246
275
|
- lib/smith/tool/call_allowance.rb
|
|
276
|
+
- lib/smith/tool/call_allowance_counter.rb
|
|
277
|
+
- lib/smith/tool/call_batch.rb
|
|
278
|
+
- lib/smith/tool/call_budget.rb
|
|
279
|
+
- lib/smith/tool/call_reservation.rb
|
|
247
280
|
- lib/smith/tool/capability_builder.rb
|
|
248
281
|
- lib/smith/tool/capture.rb
|
|
249
282
|
- lib/smith/tool/capture_configuration.rb
|
|
283
|
+
- lib/smith/tool/chat_execution_callbacks.rb
|
|
250
284
|
- lib/smith/tool/chat_execution_context.rb
|
|
251
285
|
- lib/smith/tool/compatibility.rb
|
|
286
|
+
- lib/smith/tool/execution_authority.rb
|
|
287
|
+
- lib/smith/tool/execution_authorization.rb
|
|
288
|
+
- lib/smith/tool/execution_batch.rb
|
|
289
|
+
- lib/smith/tool/execution_batch_admission.rb
|
|
290
|
+
- lib/smith/tool/execution_batch_builder.rb
|
|
291
|
+
- lib/smith/tool/execution_batch_collection.rb
|
|
292
|
+
- lib/smith/tool/execution_batch_invocations.rb
|
|
293
|
+
- lib/smith/tool/execution_batch_lifecycle.rb
|
|
294
|
+
- lib/smith/tool/execution_batch_registry.rb
|
|
295
|
+
- lib/smith/tool/execution_batch_requests.rb
|
|
296
|
+
- lib/smith/tool/execution_batch_source_call.rb
|
|
297
|
+
- lib/smith/tool/execution_batch_source_metadata.rb
|
|
298
|
+
- lib/smith/tool/execution_batch_sources.rb
|
|
299
|
+
- lib/smith/tool/execution_batch_state.rb
|
|
300
|
+
- lib/smith/tool/execution_dispatch.rb
|
|
301
|
+
- lib/smith/tool/execution_failure_handling.rb
|
|
302
|
+
- lib/smith/tool/execution_lifecycle.rb
|
|
303
|
+
- lib/smith/tool/execution_tracker.rb
|
|
304
|
+
- lib/smith/tool/fail_fast_completion.rb
|
|
305
|
+
- lib/smith/tool/graceful_completion.rb
|
|
306
|
+
- lib/smith/tool/invocation.rb
|
|
307
|
+
- lib/smith/tool/invocation_request.rb
|
|
308
|
+
- lib/smith/tool/invocation_sequence.rb
|
|
309
|
+
- lib/smith/tool/legacy_call_allowance.rb
|
|
252
310
|
- lib/smith/tool/policy.rb
|
|
253
311
|
- lib/smith/tool/scoped_context.rb
|
|
254
312
|
- lib/smith/tool_capture_failed.rb
|
|
313
|
+
- lib/smith/tool_execution_not_admitted.rb
|
|
314
|
+
- lib/smith/tool_failure_notification_failed.rb
|
|
255
315
|
- lib/smith/tools.rb
|
|
256
316
|
- lib/smith/tools/think.rb
|
|
257
317
|
- lib/smith/tools/url_fetcher.rb
|
|
@@ -314,6 +374,12 @@ files:
|
|
|
314
374
|
- lib/smith/workflow/execution_binding_resolution.rb
|
|
315
375
|
- lib/smith/workflow/execution_frame.rb
|
|
316
376
|
- lib/smith/workflow/execution_result_snapshot.rb
|
|
377
|
+
- lib/smith/workflow/failure_detail_snapshot.rb
|
|
378
|
+
- lib/smith/workflow/failure_reconstructor.rb
|
|
379
|
+
- lib/smith/workflow/failure_record.rb
|
|
380
|
+
- lib/smith/workflow/failure_record_restore.rb
|
|
381
|
+
- lib/smith/workflow/failure_record_text.rb
|
|
382
|
+
- lib/smith/workflow/failure_record_validator.rb
|
|
317
383
|
- lib/smith/workflow/fanout_execution.rb
|
|
318
384
|
- lib/smith/workflow/graph.rb
|
|
319
385
|
- lib/smith/workflow/graph/contract_helpers.rb
|
|
@@ -348,6 +414,7 @@ files:
|
|
|
348
414
|
- lib/smith/workflow/graph/transition_snapshot.rb
|
|
349
415
|
- lib/smith/workflow/graph/validator.rb
|
|
350
416
|
- lib/smith/workflow/graph_dsl.rb
|
|
417
|
+
- lib/smith/workflow/guarded_step_execution.rb
|
|
351
418
|
- lib/smith/workflow/guardrail_integration.rb
|
|
352
419
|
- lib/smith/workflow/identifier.rb
|
|
353
420
|
- lib/smith/workflow/message_admission.rb
|