swarm_sdk 2.7.14 → 3.0.0.alpha1

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.
Files changed (181) hide show
  1. checksums.yaml +4 -4
  2. data/lib/swarm_sdk/ruby_llm_patches/chat_callbacks_patch.rb +16 -0
  3. data/lib/swarm_sdk/ruby_llm_patches/init.rb +4 -1
  4. data/lib/swarm_sdk/v3/agent.rb +1165 -0
  5. data/lib/swarm_sdk/v3/agent_builder.rb +533 -0
  6. data/lib/swarm_sdk/v3/agent_definition.rb +330 -0
  7. data/lib/swarm_sdk/v3/configuration.rb +490 -0
  8. data/lib/swarm_sdk/v3/debug_log.rb +86 -0
  9. data/lib/swarm_sdk/v3/event_stream.rb +130 -0
  10. data/lib/swarm_sdk/v3/hooks/context.rb +112 -0
  11. data/lib/swarm_sdk/v3/hooks/result.rb +115 -0
  12. data/lib/swarm_sdk/v3/hooks/runner.rb +128 -0
  13. data/lib/swarm_sdk/v3/mcp/connector.rb +183 -0
  14. data/lib/swarm_sdk/v3/mcp/mcp_error.rb +15 -0
  15. data/lib/swarm_sdk/v3/mcp/server_definition.rb +125 -0
  16. data/lib/swarm_sdk/v3/mcp/ssl_http_transport.rb +103 -0
  17. data/lib/swarm_sdk/v3/mcp/stdio_transport.rb +135 -0
  18. data/lib/swarm_sdk/v3/mcp/tool_proxy.rb +53 -0
  19. data/lib/swarm_sdk/v3/memory/adapters/base.rb +297 -0
  20. data/lib/swarm_sdk/v3/memory/adapters/faiss_support.rb +194 -0
  21. data/lib/swarm_sdk/v3/memory/adapters/filesystem_adapter.rb +212 -0
  22. data/lib/swarm_sdk/v3/memory/adapters/sqlite_adapter.rb +507 -0
  23. data/lib/swarm_sdk/v3/memory/adapters/vector_utils.rb +88 -0
  24. data/lib/swarm_sdk/v3/memory/card.rb +206 -0
  25. data/lib/swarm_sdk/v3/memory/cluster.rb +146 -0
  26. data/lib/swarm_sdk/v3/memory/compressor.rb +496 -0
  27. data/lib/swarm_sdk/v3/memory/consolidator.rb +427 -0
  28. data/lib/swarm_sdk/v3/memory/context_builder.rb +339 -0
  29. data/lib/swarm_sdk/v3/memory/edge.rb +105 -0
  30. data/lib/swarm_sdk/v3/memory/embedder.rb +185 -0
  31. data/lib/swarm_sdk/v3/memory/exposure_tracker.rb +104 -0
  32. data/lib/swarm_sdk/v3/memory/ingestion_pipeline.rb +394 -0
  33. data/lib/swarm_sdk/v3/memory/retriever.rb +289 -0
  34. data/lib/swarm_sdk/v3/memory/store.rb +489 -0
  35. data/lib/swarm_sdk/v3/skills/loader.rb +147 -0
  36. data/lib/swarm_sdk/v3/skills/manifest.rb +45 -0
  37. data/lib/swarm_sdk/v3/sub_task_agent.rb +248 -0
  38. data/lib/swarm_sdk/v3/tools/base.rb +80 -0
  39. data/lib/swarm_sdk/v3/tools/bash.rb +174 -0
  40. data/lib/swarm_sdk/v3/tools/clock.rb +32 -0
  41. data/lib/swarm_sdk/v3/tools/edit.rb +111 -0
  42. data/lib/swarm_sdk/v3/tools/glob.rb +96 -0
  43. data/lib/swarm_sdk/v3/tools/grep.rb +200 -0
  44. data/lib/swarm_sdk/v3/tools/message_teammate.rb +15 -0
  45. data/lib/swarm_sdk/v3/tools/message_user.rb +15 -0
  46. data/lib/swarm_sdk/v3/tools/read.rb +181 -0
  47. data/lib/swarm_sdk/v3/tools/read_tracker.rb +40 -0
  48. data/lib/swarm_sdk/v3/tools/registry.rb +208 -0
  49. data/lib/swarm_sdk/v3/tools/sub_task.rb +183 -0
  50. data/lib/swarm_sdk/v3/tools/think.rb +88 -0
  51. data/lib/swarm_sdk/v3/tools/write.rb +87 -0
  52. data/lib/swarm_sdk/v3.rb +145 -0
  53. metadata +83 -148
  54. data/lib/swarm_sdk/agent/RETRY_LOGIC.md +0 -175
  55. data/lib/swarm_sdk/agent/builder.rb +0 -705
  56. data/lib/swarm_sdk/agent/chat.rb +0 -1438
  57. data/lib/swarm_sdk/agent/chat_helpers/context_tracker.rb +0 -375
  58. data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +0 -204
  59. data/lib/swarm_sdk/agent/chat_helpers/hook_integration.rb +0 -480
  60. data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +0 -85
  61. data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +0 -290
  62. data/lib/swarm_sdk/agent/chat_helpers/logging_helpers.rb +0 -116
  63. data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +0 -83
  64. data/lib/swarm_sdk/agent/chat_helpers/system_reminder_injector.rb +0 -134
  65. data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +0 -79
  66. data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +0 -146
  67. data/lib/swarm_sdk/agent/context.rb +0 -115
  68. data/lib/swarm_sdk/agent/context_manager.rb +0 -315
  69. data/lib/swarm_sdk/agent/definition.rb +0 -588
  70. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +0 -226
  71. data/lib/swarm_sdk/agent/system_prompt_builder.rb +0 -173
  72. data/lib/swarm_sdk/agent/tool_registry.rb +0 -189
  73. data/lib/swarm_sdk/agent_registry.rb +0 -146
  74. data/lib/swarm_sdk/builders/base_builder.rb +0 -558
  75. data/lib/swarm_sdk/claude_code_agent_adapter.rb +0 -205
  76. data/lib/swarm_sdk/concerns/cleanupable.rb +0 -42
  77. data/lib/swarm_sdk/concerns/snapshotable.rb +0 -67
  78. data/lib/swarm_sdk/concerns/validatable.rb +0 -55
  79. data/lib/swarm_sdk/config.rb +0 -368
  80. data/lib/swarm_sdk/configuration/parser.rb +0 -397
  81. data/lib/swarm_sdk/configuration/translator.rb +0 -285
  82. data/lib/swarm_sdk/configuration.rb +0 -165
  83. data/lib/swarm_sdk/context_compactor/metrics.rb +0 -147
  84. data/lib/swarm_sdk/context_compactor/token_counter.rb +0 -102
  85. data/lib/swarm_sdk/context_compactor.rb +0 -335
  86. data/lib/swarm_sdk/context_management/builder.rb +0 -128
  87. data/lib/swarm_sdk/context_management/context.rb +0 -328
  88. data/lib/swarm_sdk/custom_tool_registry.rb +0 -226
  89. data/lib/swarm_sdk/defaults.rb +0 -251
  90. data/lib/swarm_sdk/events_to_messages.rb +0 -199
  91. data/lib/swarm_sdk/hooks/adapter.rb +0 -359
  92. data/lib/swarm_sdk/hooks/context.rb +0 -197
  93. data/lib/swarm_sdk/hooks/definition.rb +0 -80
  94. data/lib/swarm_sdk/hooks/error.rb +0 -29
  95. data/lib/swarm_sdk/hooks/executor.rb +0 -146
  96. data/lib/swarm_sdk/hooks/registry.rb +0 -147
  97. data/lib/swarm_sdk/hooks/result.rb +0 -150
  98. data/lib/swarm_sdk/hooks/shell_executor.rb +0 -256
  99. data/lib/swarm_sdk/hooks/tool_call.rb +0 -35
  100. data/lib/swarm_sdk/hooks/tool_result.rb +0 -62
  101. data/lib/swarm_sdk/log_collector.rb +0 -227
  102. data/lib/swarm_sdk/log_stream.rb +0 -127
  103. data/lib/swarm_sdk/markdown_parser.rb +0 -75
  104. data/lib/swarm_sdk/model_aliases.json +0 -8
  105. data/lib/swarm_sdk/models.json +0 -44002
  106. data/lib/swarm_sdk/models.rb +0 -161
  107. data/lib/swarm_sdk/node_context.rb +0 -245
  108. data/lib/swarm_sdk/observer/builder.rb +0 -81
  109. data/lib/swarm_sdk/observer/config.rb +0 -45
  110. data/lib/swarm_sdk/observer/manager.rb +0 -248
  111. data/lib/swarm_sdk/patterns/agent_observer.rb +0 -160
  112. data/lib/swarm_sdk/permissions/config.rb +0 -239
  113. data/lib/swarm_sdk/permissions/error_formatter.rb +0 -121
  114. data/lib/swarm_sdk/permissions/path_matcher.rb +0 -35
  115. data/lib/swarm_sdk/permissions/validator.rb +0 -173
  116. data/lib/swarm_sdk/permissions_builder.rb +0 -122
  117. data/lib/swarm_sdk/plugin.rb +0 -309
  118. data/lib/swarm_sdk/plugin_registry.rb +0 -101
  119. data/lib/swarm_sdk/proc_helpers.rb +0 -53
  120. data/lib/swarm_sdk/prompts/base_system_prompt.md.erb +0 -119
  121. data/lib/swarm_sdk/restore_result.rb +0 -65
  122. data/lib/swarm_sdk/result.rb +0 -241
  123. data/lib/swarm_sdk/snapshot.rb +0 -156
  124. data/lib/swarm_sdk/snapshot_from_events.rb +0 -397
  125. data/lib/swarm_sdk/state_restorer.rb +0 -476
  126. data/lib/swarm_sdk/state_snapshot.rb +0 -334
  127. data/lib/swarm_sdk/swarm/agent_initializer.rb +0 -648
  128. data/lib/swarm_sdk/swarm/all_agents_builder.rb +0 -204
  129. data/lib/swarm_sdk/swarm/builder.rb +0 -256
  130. data/lib/swarm_sdk/swarm/executor.rb +0 -446
  131. data/lib/swarm_sdk/swarm/hook_triggers.rb +0 -162
  132. data/lib/swarm_sdk/swarm/lazy_delegate_chat.rb +0 -372
  133. data/lib/swarm_sdk/swarm/logging_callbacks.rb +0 -361
  134. data/lib/swarm_sdk/swarm/mcp_configurator.rb +0 -290
  135. data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +0 -67
  136. data/lib/swarm_sdk/swarm/tool_configurator.rb +0 -392
  137. data/lib/swarm_sdk/swarm.rb +0 -973
  138. data/lib/swarm_sdk/swarm_loader.rb +0 -145
  139. data/lib/swarm_sdk/swarm_registry.rb +0 -136
  140. data/lib/swarm_sdk/tools/base.rb +0 -63
  141. data/lib/swarm_sdk/tools/bash.rb +0 -280
  142. data/lib/swarm_sdk/tools/clock.rb +0 -46
  143. data/lib/swarm_sdk/tools/delegate.rb +0 -389
  144. data/lib/swarm_sdk/tools/document_converters/base_converter.rb +0 -83
  145. data/lib/swarm_sdk/tools/document_converters/docx_converter.rb +0 -99
  146. data/lib/swarm_sdk/tools/document_converters/html_converter.rb +0 -101
  147. data/lib/swarm_sdk/tools/document_converters/pdf_converter.rb +0 -78
  148. data/lib/swarm_sdk/tools/document_converters/xlsx_converter.rb +0 -194
  149. data/lib/swarm_sdk/tools/edit.rb +0 -145
  150. data/lib/swarm_sdk/tools/glob.rb +0 -166
  151. data/lib/swarm_sdk/tools/grep.rb +0 -235
  152. data/lib/swarm_sdk/tools/image_extractors/docx_image_extractor.rb +0 -43
  153. data/lib/swarm_sdk/tools/image_extractors/pdf_image_extractor.rb +0 -167
  154. data/lib/swarm_sdk/tools/image_formats/tiff_builder.rb +0 -65
  155. data/lib/swarm_sdk/tools/mcp_tool_stub.rb +0 -198
  156. data/lib/swarm_sdk/tools/multi_edit.rb +0 -236
  157. data/lib/swarm_sdk/tools/path_resolver.rb +0 -92
  158. data/lib/swarm_sdk/tools/read.rb +0 -261
  159. data/lib/swarm_sdk/tools/registry.rb +0 -205
  160. data/lib/swarm_sdk/tools/scratchpad/scratchpad_list.rb +0 -117
  161. data/lib/swarm_sdk/tools/scratchpad/scratchpad_read.rb +0 -97
  162. data/lib/swarm_sdk/tools/scratchpad/scratchpad_write.rb +0 -108
  163. data/lib/swarm_sdk/tools/stores/read_tracker.rb +0 -96
  164. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +0 -273
  165. data/lib/swarm_sdk/tools/stores/storage.rb +0 -142
  166. data/lib/swarm_sdk/tools/stores/todo_manager.rb +0 -65
  167. data/lib/swarm_sdk/tools/think.rb +0 -100
  168. data/lib/swarm_sdk/tools/todo_write.rb +0 -237
  169. data/lib/swarm_sdk/tools/web_fetch.rb +0 -264
  170. data/lib/swarm_sdk/tools/write.rb +0 -112
  171. data/lib/swarm_sdk/transcript_builder.rb +0 -278
  172. data/lib/swarm_sdk/utils.rb +0 -68
  173. data/lib/swarm_sdk/validation_result.rb +0 -33
  174. data/lib/swarm_sdk/version.rb +0 -5
  175. data/lib/swarm_sdk/workflow/agent_config.rb +0 -95
  176. data/lib/swarm_sdk/workflow/builder.rb +0 -227
  177. data/lib/swarm_sdk/workflow/executor.rb +0 -497
  178. data/lib/swarm_sdk/workflow/node_builder.rb +0 -593
  179. data/lib/swarm_sdk/workflow/transformer_executor.rb +0 -250
  180. data/lib/swarm_sdk/workflow.rb +0 -589
  181. data/lib/swarm_sdk.rb +0 -721
@@ -1,227 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SwarmSDK
4
- class Workflow
5
- # Builder provides DSL for building multi-node workflows
6
- # This is the top-level builder accessed via SwarmSDK.workflow
7
- #
8
- # The DSL enables:
9
- # - Node-based workflow configuration
10
- # - Agent delegation per node
11
- # - Input/output transformers for data flow
12
- # - Context preservation across nodes
13
- #
14
- # @example Multi-stage workflow
15
- # workflow = SwarmSDK.workflow do
16
- # name "Build Pipeline"
17
- # start_node :planning
18
- #
19
- # agent :architect do
20
- # model "gpt-5"
21
- # prompt "You design systems"
22
- # end
23
- #
24
- # agent :coder do
25
- # model "gpt-4"
26
- # prompt "You implement code"
27
- # end
28
- #
29
- # node :planning do
30
- # agent(:architect)
31
- # end
32
- #
33
- # node :implementation do
34
- # agent(:coder)
35
- # depends_on :planning
36
- # end
37
- # end
38
- #
39
- # workflow.execute("Build auth system")
40
- class Builder < Builders::BaseBuilder
41
- # Main entry point for DSL
42
- #
43
- # @example
44
- # workflow = SwarmSDK.workflow do
45
- # name "Pipeline"
46
- # start_node :planning
47
- # node(:planning) { agent(:architect) }
48
- # end
49
- class << self
50
- def build(allow_filesystem_tools: nil, &block)
51
- builder = new(allow_filesystem_tools: allow_filesystem_tools)
52
- builder.instance_eval(&block)
53
- builder.build_swarm
54
- end
55
- end
56
-
57
- def initialize(allow_filesystem_tools: nil)
58
- super
59
- @nodes = {}
60
- @start_node = nil
61
- end
62
-
63
- # Define a node (mini-swarm execution stage)
64
- #
65
- # Nodes enable multi-stage workflows where different agent teams
66
- # collaborate in sequence. Each node is an independent swarm execution.
67
- #
68
- # @param name [Symbol] Node name
69
- # @yield Block for node configuration
70
- # @return [void]
71
- #
72
- # @example Solo agent node
73
- # node :planning do
74
- # agent(:architect)
75
- # end
76
- #
77
- # @example Multi-agent node with delegation
78
- # node :implementation do
79
- # agent(:backend).delegates_to(:tester, :database)
80
- # agent(:tester).delegates_to(:database)
81
- # agent(:database)
82
- # depends_on :planning
83
- # end
84
- def node(name, &block)
85
- builder = Workflow::NodeBuilder.new(name)
86
- builder.instance_eval(&block)
87
- @nodes[name] = builder
88
- end
89
-
90
- # Set the starting node for workflow execution
91
- #
92
- # Required when nodes are defined. Specifies which node to execute first.
93
- #
94
- # @param name [Symbol] Name of starting node
95
- # @return [void]
96
- #
97
- # @example
98
- # start_node :planning
99
- def start_node(name)
100
- @start_node = name.to_sym
101
- end
102
-
103
- # Build the actual Workflow instance
104
- def build_swarm # Returns Workflow despite method name
105
- raise ConfigurationError, "Workflow name not set. Use: name 'My Workflow'" unless @swarm_name
106
- raise ConfigurationError, "No nodes defined. Use: node :name { ... }" if @nodes.empty?
107
- raise ConfigurationError, "start_node not set. Use: start_node :name" unless @start_node
108
-
109
- # Validate filesystem tools BEFORE building
110
- validate_all_agents_filesystem_tools if @all_agents_config
111
- validate_agent_filesystem_tools
112
-
113
- build_workflow
114
- end
115
-
116
- private
117
-
118
- # Build a node-based workflow
119
- #
120
- # @return [Workflow] Configured workflow instance
121
- def build_workflow
122
- # Resolve any missing agents from global registry before building definitions
123
- resolve_missing_agents_from_registry
124
-
125
- # Build agent definitions
126
- agent_definitions = build_agent_definitions
127
-
128
- # Create workflow
129
- workflow = Workflow.new(
130
- swarm_name: @swarm_name,
131
- swarm_id: @swarm_id,
132
- agent_definitions: agent_definitions,
133
- nodes: @nodes,
134
- start_node: @start_node,
135
- scratchpad: @scratchpad,
136
- allow_filesystem_tools: @allow_filesystem_tools,
137
- )
138
-
139
- # Pass swarm registry config to workflow if external swarms registered
140
- workflow.swarm_registry_config = @swarm_registry_config if @swarm_registry_config.any?
141
-
142
- workflow
143
- end
144
-
145
- # Resolve agents referenced in nodes that aren't defined at workflow level
146
- #
147
- # For each agent referenced in a node but not defined with `agent :name do ... end`,
148
- # checks the global AgentRegistry and loads the agent if found.
149
- #
150
- # This allows workflows to reference globally registered agents without
151
- # explicitly re-declaring them at the workflow level.
152
- #
153
- # @return [void]
154
- # @raise [ConfigurationError] If agent not found in workflow or registry
155
- def resolve_missing_agents_from_registry
156
- # Collect all agents referenced in nodes
157
- referenced_agents = collect_referenced_agents
158
-
159
- # Find agents that aren't defined at workflow level
160
- defined_agents = @agents.keys
161
- missing_agents = referenced_agents - defined_agents
162
-
163
- # Try to resolve each missing agent from the global registry
164
- missing_agents.each do |agent_name|
165
- if AgentRegistry.registered?(agent_name)
166
- # Load from registry (uses same method as BaseBuilder)
167
- load_agent_from_registry(agent_name)
168
- else
169
- raise ConfigurationError,
170
- "Agent '#{agent_name}' referenced in node but not found. " \
171
- "Either define at workflow level with `agent :#{agent_name} do ... end` " \
172
- "or register globally with `SwarmSDK.agent :#{agent_name} do ... end`"
173
- end
174
- end
175
- end
176
-
177
- # Collect all agent names referenced across all nodes
178
- #
179
- # Includes both directly referenced agents and delegation targets.
180
- #
181
- # @return [Array<Symbol>] Unique agent names referenced in nodes
182
- def collect_referenced_agents
183
- @nodes.values.flat_map do |node_builder|
184
- # Collect both direct agents and their delegation targets
185
- node_builder.agent_configs.flat_map do |config|
186
- # Extract delegate agent names (handles array and hash formats)
187
- delegate_names = extract_delegate_agent_names(config[:delegates_to] || [])
188
- [config[:agent]] + delegate_names
189
- end
190
- end.uniq
191
- end
192
-
193
- # Extract agent names from delegation configuration
194
- #
195
- # Handles multiple formats:
196
- # - Array of symbols: [:frontend, :backend]
197
- # - Hash: {frontend: "Custom", backend: nil}
198
- # - Array of hashes: [{agent: :frontend, tool_name: "Custom"}]
199
- #
200
- # @param delegation_config [Array, Hash, nil] Delegation configuration
201
- # @return [Array<Symbol>] Array of agent name symbols
202
- def extract_delegate_agent_names(delegation_config)
203
- return [] if delegation_config.nil?
204
- return [] if delegation_config.respond_to?(:empty?) && delegation_config.empty?
205
-
206
- case delegation_config
207
- when Array
208
- delegation_config.map do |item|
209
- case item
210
- when Symbol, String
211
- item.to_sym
212
- when Hash
213
- # Extract agent name from normalized format
214
- agent_name = item[:agent] || item["agent"]
215
- agent_name&.to_sym
216
- end
217
- end.compact # Remove nils from malformed hashes
218
- when Hash
219
- # Hash format: keys are agent names
220
- delegation_config.keys.map(&:to_sym)
221
- else
222
- []
223
- end
224
- end
225
- end
226
- end
227
- end