smith-agents 0.6.1 → 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 +264 -1
- data/README.md +71 -1
- data/docs/CONFIGURATION.md +22 -1
- data/docs/PERSISTENCE.md +27 -1
- data/docs/TOOLS_AND_GUARDRAILS.md +293 -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 +31 -177
- 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 +17 -11
- data/lib/smith/tool/call_admission.rb +44 -0
- data/lib/smith/tool/call_allowance.rb +134 -0
- 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/capture.rb +60 -4
- data/lib/smith/tool/capture_configuration.rb +20 -0
- data/lib/smith/tool/chat_execution_callbacks.rb +58 -0
- data/lib/smith/tool/chat_execution_context.rb +24 -0
- 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 +123 -0
- data/lib/smith/tool.rb +78 -57
- data/lib/smith/tool_capture_failed.rb +106 -0
- 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/branch_failure.rb +34 -13
- data/lib/smith/workflow/composite/branch_outcome.rb +19 -2
- data/lib/smith/workflow/composite/effects.rb +3 -1
- data/lib/smith/workflow/composite/error.rb +53 -5
- data/lib/smith/workflow/composite/error_evidence.rb +10 -2
- 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/fanout_execution.rb +12 -11
- data/lib/smith/workflow/guarded_step_execution.rb +39 -0
- data/lib/smith/workflow/parallel/cancellation_signal.rb +1 -1
- data/lib/smith/workflow/parallel/root_execution.rb +1 -1
- data/lib/smith/workflow/parallel.rb +17 -1
- data/lib/smith/workflow/persistence.rb +22 -19
- data/lib/smith/workflow/prepared_branch_execution.rb +9 -2
- data/lib/smith/workflow/retry_execution.rb +5 -0
- data/lib/smith/workflow/split_step_persistence/composite_branch_execution.rb +13 -4
- data/lib/smith/workflow/thread_context_snapshot.rb +6 -2
- data/lib/smith/workflow/transition.rb +11 -0
- data/lib/smith/workflow/usage_entry.rb +12 -2
- data/lib/smith/workflow.rb +17 -124
- data/lib/smith.rb +3 -0
- metadata +83 -5
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,48 +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::ToolGuardrailFailed" => ->(s) {
|
|
42
|
-
Smith::ToolGuardrailFailed.new(s[:error_message], retryable: s[:error_retryable])
|
|
43
|
-
},
|
|
44
|
-
"Smith::DeterministicStepFailure" => ->(s) {
|
|
45
|
-
Smith::DeterministicStepFailure.new(
|
|
46
|
-
s[:error_message],
|
|
47
|
-
retryable: s[:error_retryable],
|
|
48
|
-
kind: s[:error_kind],
|
|
49
|
-
details: s[:error_details]
|
|
50
|
-
)
|
|
51
|
-
},
|
|
52
|
-
"Smith::AgentError" => ->(s) { Smith::AgentError.new(s[:error_message]) },
|
|
53
|
-
"Smith::DeadlineExceeded" => ->(s) { Smith::DeadlineExceeded.new(s[:error_message]) },
|
|
54
|
-
"Smith::WorkflowError" => ->(s) { Smith::WorkflowError.new(s[:error_message]) },
|
|
55
|
-
"Smith::Workflow::Composite::BranchFailure" => lambda { |s|
|
|
56
|
-
Smith::Workflow::Composite::BranchFailure.from_details(s[:error_details])
|
|
57
|
-
},
|
|
58
|
-
# Smith errors with non-message constructors map to compatible
|
|
59
|
-
# superclass — message preserved, original metadata (agent_name,
|
|
60
|
-
# model_used, requested_name, workflow_class, origin_state) lossy
|
|
61
|
-
# but `is_a?` classification round-trips via the superclass.
|
|
62
|
-
"Smith::BlankAgentOutputError" => ->(s) { Smith::AgentError.new(s[:error_message]) },
|
|
63
|
-
"Smith::UnresolvedTransitionError" => ->(s) { Smith::WorkflowError.new(s[:error_message]) }
|
|
64
|
-
}.freeze
|
|
65
|
-
private_constant :KNOWN_RECONSTRUCTORS
|
|
66
|
-
|
|
67
|
-
# Families whose retryable/kind/details attributes are billing-critical.
|
|
68
|
-
# For these, the reconstruction path bypasses `const_get(...).new(message)`
|
|
69
|
-
# (which would succeed for unknown subclasses with message-only
|
|
70
|
-
# constructors but discard the kwargs) and uses the family fallback
|
|
71
|
-
# directly so the parent-class constructor preserves the attrs.
|
|
72
|
-
RETRYABLE_BEARING_FAMILIES = %w[deterministic_step_failure tool_guardrail_failed].freeze
|
|
73
|
-
private_constant :RETRYABLE_BEARING_FAMILIES
|
|
74
|
-
|
|
75
35
|
attr_reader :state, :last_prepared_input, :ledger
|
|
76
36
|
|
|
77
37
|
def session_messages
|
|
@@ -110,6 +70,7 @@ module Smith
|
|
|
110
70
|
# seed_validation is :warn or :strict; nil when no seed builder
|
|
111
71
|
# ran or its output was empty.
|
|
112
72
|
@seed_digest = nil
|
|
73
|
+
@seed_message_count = 0
|
|
113
74
|
# Idempotency marker stamped between persist-before-advance and
|
|
114
75
|
# persist-after-advance under idempotency_mode :strict; restored
|
|
115
76
|
# workflows with the marker set raise
|
|
@@ -200,7 +161,7 @@ module Smith
|
|
|
200
161
|
|
|
201
162
|
def initial_persist_auto_seed
|
|
202
163
|
manager = self.class.context_manager
|
|
203
|
-
return [] unless manager
|
|
164
|
+
return [] unless manager.respond_to?(:persist_mode) && manager.persist_mode == :auto
|
|
204
165
|
|
|
205
166
|
manager.persist_auto_seed.map(&:to_sym)
|
|
206
167
|
end
|
|
@@ -220,30 +181,7 @@ module Smith
|
|
|
220
181
|
return unless step_result
|
|
221
182
|
|
|
222
183
|
if step_result[:error]
|
|
223
|
-
|
|
224
|
-
# error_family preserves classification across reconstruction
|
|
225
|
-
# even when the exact class can't be rebuilt. Order matters:
|
|
226
|
-
# specific subclasses first (DSF before WorkflowError, etc.)
|
|
227
|
-
# so a real DSF doesn't get classified as workflow_error.
|
|
228
|
-
error_family = case err
|
|
229
|
-
when Smith::DeterministicStepFailure then "deterministic_step_failure"
|
|
230
|
-
when Smith::ToolGuardrailFailed then "tool_guardrail_failed"
|
|
231
|
-
when Smith::DeadlineExceeded then "deadline_exceeded"
|
|
232
|
-
when Smith::AgentError then "agent_error"
|
|
233
|
-
when Smith::WorkflowError then "workflow_error"
|
|
234
|
-
else "other"
|
|
235
|
-
end
|
|
236
|
-
@last_failed_step = {
|
|
237
|
-
transition: step_result[:transition],
|
|
238
|
-
from: step_result[:from],
|
|
239
|
-
to: step_result[:to],
|
|
240
|
-
error_class: err.class.name,
|
|
241
|
-
error_family: error_family,
|
|
242
|
-
error_message: err.message,
|
|
243
|
-
error_retryable: err.respond_to?(:retryable) ? err.retryable : nil,
|
|
244
|
-
error_kind: err.respond_to?(:kind) ? err.kind : nil,
|
|
245
|
-
error_details: err.respond_to?(:details) ? err.details : nil
|
|
246
|
-
}
|
|
184
|
+
@last_failed_step = FailureRecord.capture(step_result)
|
|
247
185
|
else
|
|
248
186
|
# Successful step: clear any prior failed-step snapshot
|
|
249
187
|
# (workflow handled the failure and continued) and capture
|
|
@@ -271,7 +209,7 @@ module Smith
|
|
|
271
209
|
name = @next_transition_name
|
|
272
210
|
@next_transition_name = nil
|
|
273
211
|
transition = self.class.find_transition(name) ||
|
|
274
|
-
|
|
212
|
+
raise(UnresolvedTransitionError.new(name, self.class, @state))
|
|
275
213
|
validate_transition_origin!(transition)
|
|
276
214
|
transition
|
|
277
215
|
else
|
|
@@ -312,10 +250,10 @@ module Smith
|
|
|
312
250
|
# terminal state never produces a synthetic error even if the
|
|
313
251
|
# snapshot wasn't cleared.
|
|
314
252
|
effective_steps = if steps.empty? && failed? && @last_failed_step
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
253
|
+
[reconstruct_failed_step]
|
|
254
|
+
else
|
|
255
|
+
steps
|
|
256
|
+
end
|
|
319
257
|
|
|
320
258
|
RunResult.new(
|
|
321
259
|
state: @state,
|
|
@@ -332,57 +270,11 @@ module Smith
|
|
|
332
270
|
end
|
|
333
271
|
|
|
334
272
|
def reconstruct_failed_step
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
# Skip const_get for retryable-bearing families. An unknown
|
|
341
|
-
# subclass with a message-only constructor would const_get
|
|
342
|
-
# successfully but discard the snapshot's `retryable`/`kind`/
|
|
343
|
-
# `details` (defaults to nil), and host retry classification
|
|
344
|
-
# could misclassify a retryable failure as terminal.
|
|
345
|
-
# Family fallback rebuilds the parent class with kwargs intact.
|
|
346
|
-
family_fallback(snap)
|
|
347
|
-
else
|
|
348
|
-
# Unknown subclass without retryable-bearing semantics. Try
|
|
349
|
-
# the exact class for shape preservation; fall back via family
|
|
350
|
-
# if the constructor doesn't accept message-only args (or the
|
|
351
|
-
# class doesn't exist).
|
|
352
|
-
begin
|
|
353
|
-
Kernel.const_get(snap[:error_class]).new(snap[:error_message])
|
|
354
|
-
rescue NameError, ArgumentError
|
|
355
|
-
family_fallback(snap)
|
|
356
|
-
end
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
# Symbol coercion on the way out: live steps carry these as
|
|
360
|
-
# symbols; JSON round-trip stringifies them; coerce back to
|
|
361
|
-
# match fresh-run shape exactly.
|
|
362
|
-
{
|
|
363
|
-
transition: normalize_transition_name(snap[:transition]),
|
|
364
|
-
from: normalize_state_name(snap[:from]),
|
|
365
|
-
to: normalize_state_name(snap[:to]),
|
|
366
|
-
error: error
|
|
367
|
-
}
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
def family_fallback(snap)
|
|
371
|
-
case snap[:error_family]
|
|
372
|
-
when "deterministic_step_failure"
|
|
373
|
-
Smith::DeterministicStepFailure.new(
|
|
374
|
-
snap[:error_message],
|
|
375
|
-
retryable: snap[:error_retryable],
|
|
376
|
-
kind: snap[:error_kind],
|
|
377
|
-
details: snap[:error_details]
|
|
378
|
-
)
|
|
379
|
-
when "tool_guardrail_failed"
|
|
380
|
-
Smith::ToolGuardrailFailed.new(snap[:error_message], retryable: snap[:error_retryable])
|
|
381
|
-
when "deadline_exceeded" then Smith::DeadlineExceeded.new(snap[:error_message])
|
|
382
|
-
when "agent_error" then Smith::AgentError.new(snap[:error_message])
|
|
383
|
-
when "workflow_error" then Smith::WorkflowError.new(snap[:error_message])
|
|
384
|
-
else RuntimeError.new(snap[:error_message])
|
|
385
|
-
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
|
|
386
278
|
end
|
|
387
279
|
|
|
388
280
|
def seed_initial_session_messages
|
|
@@ -390,6 +282,7 @@ module Smith
|
|
|
390
282
|
return if messages.nil?
|
|
391
283
|
|
|
392
284
|
@session_messages = messages
|
|
285
|
+
@seed_message_count = messages.length
|
|
393
286
|
@seed_digest = compute_seed_digest(messages)
|
|
394
287
|
end
|
|
395
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,16 +117,16 @@ dependencies:
|
|
|
117
117
|
name: ruby_llm
|
|
118
118
|
requirement: !ruby/object:Gem::Requirement
|
|
119
119
|
requirements:
|
|
120
|
-
- -
|
|
120
|
+
- - '='
|
|
121
121
|
- !ruby/object:Gem::Version
|
|
122
|
-
version:
|
|
122
|
+
version: 1.16.0
|
|
123
123
|
type: :runtime
|
|
124
124
|
prerelease: false
|
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
126
126
|
requirements:
|
|
127
|
-
- -
|
|
127
|
+
- - '='
|
|
128
128
|
- !ruby/object:Gem::Version
|
|
129
|
-
version:
|
|
129
|
+
version: 1.16.0
|
|
130
130
|
description: Smith is a workflow-first multi-agent orchestration library built on
|
|
131
131
|
RubyLLM. It provides state machine modeling, typed contracts, budget enforcement,
|
|
132
132
|
guardrails, and observability for agent workflows.
|
|
@@ -153,12 +153,27 @@ files:
|
|
|
153
153
|
- lib/generators/smith/install/templates/smith.rb.tt
|
|
154
154
|
- lib/smith.rb
|
|
155
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
|
|
156
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
|
|
157
169
|
- lib/smith/agent/registry.rb
|
|
158
170
|
- lib/smith/agent/registry/execution_binding_capture.rb
|
|
159
171
|
- lib/smith/agent/registry/introspection.rb
|
|
160
172
|
- lib/smith/agent/registry/mutation_boundary.rb
|
|
161
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
|
|
162
177
|
- lib/smith/artifacts.rb
|
|
163
178
|
- lib/smith/artifacts/file.rb
|
|
164
179
|
- lib/smith/artifacts/memory.rb
|
|
@@ -179,6 +194,7 @@ files:
|
|
|
179
194
|
- lib/smith/context/observation_masking.rb
|
|
180
195
|
- lib/smith/context/session.rb
|
|
181
196
|
- lib/smith/context/state_injection.rb
|
|
197
|
+
- lib/smith/diagnostic_text.rb
|
|
182
198
|
- lib/smith/doctor.rb
|
|
183
199
|
- lib/smith/doctor/check.rb
|
|
184
200
|
- lib/smith/doctor/checks/baseline.rb
|
|
@@ -208,9 +224,14 @@ files:
|
|
|
208
224
|
- lib/smith/guardrails/runner.rb
|
|
209
225
|
- lib/smith/guardrails/url_verifier.rb
|
|
210
226
|
- lib/smith/models.rb
|
|
227
|
+
- lib/smith/models/ambiguous_profile_error.rb
|
|
228
|
+
- lib/smith/models/collision_error.rb
|
|
211
229
|
- lib/smith/models/inference.rb
|
|
212
230
|
- lib/smith/models/normalizer.rb
|
|
213
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
|
|
214
235
|
- lib/smith/persistence_adapters.rb
|
|
215
236
|
- lib/smith/persistence_adapters/active_record_connection_errors.rb
|
|
216
237
|
- lib/smith/persistence_adapters/active_record_exact_predicate.rb
|
|
@@ -230,17 +251,67 @@ files:
|
|
|
230
251
|
- lib/smith/persistence_adapters/version_expectation.rb
|
|
231
252
|
- lib/smith/persistence_payload_conflict.rb
|
|
232
253
|
- lib/smith/pricing.rb
|
|
254
|
+
- lib/smith/pricing_configuration_error.rb
|
|
255
|
+
- lib/smith/provider_permanent_failure.rb
|
|
233
256
|
- lib/smith/providers/openai/responses.rb
|
|
234
257
|
- lib/smith/providers/openai/routing.rb
|
|
235
258
|
- lib/smith/providers/openai/tools_extensions.rb
|
|
236
259
|
- lib/smith/railtie.rb
|
|
237
260
|
- lib/smith/tasks/doctor.rake
|
|
238
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
|
|
239
273
|
- lib/smith/tool/budget_enforcement.rb
|
|
274
|
+
- lib/smith/tool/call_admission.rb
|
|
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
|
|
240
280
|
- lib/smith/tool/capability_builder.rb
|
|
241
281
|
- lib/smith/tool/capture.rb
|
|
282
|
+
- lib/smith/tool/capture_configuration.rb
|
|
283
|
+
- lib/smith/tool/chat_execution_callbacks.rb
|
|
284
|
+
- lib/smith/tool/chat_execution_context.rb
|
|
242
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
|
|
243
310
|
- lib/smith/tool/policy.rb
|
|
311
|
+
- lib/smith/tool/scoped_context.rb
|
|
312
|
+
- lib/smith/tool_capture_failed.rb
|
|
313
|
+
- lib/smith/tool_execution_not_admitted.rb
|
|
314
|
+
- lib/smith/tool_failure_notification_failed.rb
|
|
244
315
|
- lib/smith/tools.rb
|
|
245
316
|
- lib/smith/tools/think.rb
|
|
246
317
|
- lib/smith/tools/url_fetcher.rb
|
|
@@ -303,6 +374,12 @@ files:
|
|
|
303
374
|
- lib/smith/workflow/execution_binding_resolution.rb
|
|
304
375
|
- lib/smith/workflow/execution_frame.rb
|
|
305
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
|
|
306
383
|
- lib/smith/workflow/fanout_execution.rb
|
|
307
384
|
- lib/smith/workflow/graph.rb
|
|
308
385
|
- lib/smith/workflow/graph/contract_helpers.rb
|
|
@@ -337,6 +414,7 @@ files:
|
|
|
337
414
|
- lib/smith/workflow/graph/transition_snapshot.rb
|
|
338
415
|
- lib/smith/workflow/graph/validator.rb
|
|
339
416
|
- lib/smith/workflow/graph_dsl.rb
|
|
417
|
+
- lib/smith/workflow/guarded_step_execution.rb
|
|
340
418
|
- lib/smith/workflow/guardrail_integration.rb
|
|
341
419
|
- lib/smith/workflow/identifier.rb
|
|
342
420
|
- lib/smith/workflow/message_admission.rb
|