swarm_sdk 2.7.14 → 3.0.0.alpha2

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 (185) 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/document_converters/base.rb +84 -0
  42. data/lib/swarm_sdk/v3/tools/document_converters/docx_converter.rb +120 -0
  43. data/lib/swarm_sdk/v3/tools/document_converters/pdf_converter.rb +111 -0
  44. data/lib/swarm_sdk/v3/tools/document_converters/xlsx_converter.rb +128 -0
  45. data/lib/swarm_sdk/v3/tools/edit.rb +111 -0
  46. data/lib/swarm_sdk/v3/tools/glob.rb +96 -0
  47. data/lib/swarm_sdk/v3/tools/grep.rb +200 -0
  48. data/lib/swarm_sdk/v3/tools/message_teammate.rb +15 -0
  49. data/lib/swarm_sdk/v3/tools/message_user.rb +15 -0
  50. data/lib/swarm_sdk/v3/tools/read.rb +213 -0
  51. data/lib/swarm_sdk/v3/tools/read_tracker.rb +40 -0
  52. data/lib/swarm_sdk/v3/tools/registry.rb +208 -0
  53. data/lib/swarm_sdk/v3/tools/sub_task.rb +183 -0
  54. data/lib/swarm_sdk/v3/tools/think.rb +88 -0
  55. data/lib/swarm_sdk/v3/tools/write.rb +87 -0
  56. data/lib/swarm_sdk/v3.rb +145 -0
  57. metadata +88 -149
  58. data/lib/swarm_sdk/agent/RETRY_LOGIC.md +0 -175
  59. data/lib/swarm_sdk/agent/builder.rb +0 -705
  60. data/lib/swarm_sdk/agent/chat.rb +0 -1438
  61. data/lib/swarm_sdk/agent/chat_helpers/context_tracker.rb +0 -375
  62. data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +0 -204
  63. data/lib/swarm_sdk/agent/chat_helpers/hook_integration.rb +0 -480
  64. data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +0 -85
  65. data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +0 -290
  66. data/lib/swarm_sdk/agent/chat_helpers/logging_helpers.rb +0 -116
  67. data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +0 -83
  68. data/lib/swarm_sdk/agent/chat_helpers/system_reminder_injector.rb +0 -134
  69. data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +0 -79
  70. data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +0 -146
  71. data/lib/swarm_sdk/agent/context.rb +0 -115
  72. data/lib/swarm_sdk/agent/context_manager.rb +0 -315
  73. data/lib/swarm_sdk/agent/definition.rb +0 -588
  74. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +0 -226
  75. data/lib/swarm_sdk/agent/system_prompt_builder.rb +0 -173
  76. data/lib/swarm_sdk/agent/tool_registry.rb +0 -189
  77. data/lib/swarm_sdk/agent_registry.rb +0 -146
  78. data/lib/swarm_sdk/builders/base_builder.rb +0 -558
  79. data/lib/swarm_sdk/claude_code_agent_adapter.rb +0 -205
  80. data/lib/swarm_sdk/concerns/cleanupable.rb +0 -42
  81. data/lib/swarm_sdk/concerns/snapshotable.rb +0 -67
  82. data/lib/swarm_sdk/concerns/validatable.rb +0 -55
  83. data/lib/swarm_sdk/config.rb +0 -368
  84. data/lib/swarm_sdk/configuration/parser.rb +0 -397
  85. data/lib/swarm_sdk/configuration/translator.rb +0 -285
  86. data/lib/swarm_sdk/configuration.rb +0 -165
  87. data/lib/swarm_sdk/context_compactor/metrics.rb +0 -147
  88. data/lib/swarm_sdk/context_compactor/token_counter.rb +0 -102
  89. data/lib/swarm_sdk/context_compactor.rb +0 -335
  90. data/lib/swarm_sdk/context_management/builder.rb +0 -128
  91. data/lib/swarm_sdk/context_management/context.rb +0 -328
  92. data/lib/swarm_sdk/custom_tool_registry.rb +0 -226
  93. data/lib/swarm_sdk/defaults.rb +0 -251
  94. data/lib/swarm_sdk/events_to_messages.rb +0 -199
  95. data/lib/swarm_sdk/hooks/adapter.rb +0 -359
  96. data/lib/swarm_sdk/hooks/context.rb +0 -197
  97. data/lib/swarm_sdk/hooks/definition.rb +0 -80
  98. data/lib/swarm_sdk/hooks/error.rb +0 -29
  99. data/lib/swarm_sdk/hooks/executor.rb +0 -146
  100. data/lib/swarm_sdk/hooks/registry.rb +0 -147
  101. data/lib/swarm_sdk/hooks/result.rb +0 -150
  102. data/lib/swarm_sdk/hooks/shell_executor.rb +0 -256
  103. data/lib/swarm_sdk/hooks/tool_call.rb +0 -35
  104. data/lib/swarm_sdk/hooks/tool_result.rb +0 -62
  105. data/lib/swarm_sdk/log_collector.rb +0 -227
  106. data/lib/swarm_sdk/log_stream.rb +0 -127
  107. data/lib/swarm_sdk/markdown_parser.rb +0 -75
  108. data/lib/swarm_sdk/model_aliases.json +0 -8
  109. data/lib/swarm_sdk/models.json +0 -44002
  110. data/lib/swarm_sdk/models.rb +0 -161
  111. data/lib/swarm_sdk/node_context.rb +0 -245
  112. data/lib/swarm_sdk/observer/builder.rb +0 -81
  113. data/lib/swarm_sdk/observer/config.rb +0 -45
  114. data/lib/swarm_sdk/observer/manager.rb +0 -248
  115. data/lib/swarm_sdk/patterns/agent_observer.rb +0 -160
  116. data/lib/swarm_sdk/permissions/config.rb +0 -239
  117. data/lib/swarm_sdk/permissions/error_formatter.rb +0 -121
  118. data/lib/swarm_sdk/permissions/path_matcher.rb +0 -35
  119. data/lib/swarm_sdk/permissions/validator.rb +0 -173
  120. data/lib/swarm_sdk/permissions_builder.rb +0 -122
  121. data/lib/swarm_sdk/plugin.rb +0 -309
  122. data/lib/swarm_sdk/plugin_registry.rb +0 -101
  123. data/lib/swarm_sdk/proc_helpers.rb +0 -53
  124. data/lib/swarm_sdk/prompts/base_system_prompt.md.erb +0 -119
  125. data/lib/swarm_sdk/restore_result.rb +0 -65
  126. data/lib/swarm_sdk/result.rb +0 -241
  127. data/lib/swarm_sdk/snapshot.rb +0 -156
  128. data/lib/swarm_sdk/snapshot_from_events.rb +0 -397
  129. data/lib/swarm_sdk/state_restorer.rb +0 -476
  130. data/lib/swarm_sdk/state_snapshot.rb +0 -334
  131. data/lib/swarm_sdk/swarm/agent_initializer.rb +0 -648
  132. data/lib/swarm_sdk/swarm/all_agents_builder.rb +0 -204
  133. data/lib/swarm_sdk/swarm/builder.rb +0 -256
  134. data/lib/swarm_sdk/swarm/executor.rb +0 -446
  135. data/lib/swarm_sdk/swarm/hook_triggers.rb +0 -162
  136. data/lib/swarm_sdk/swarm/lazy_delegate_chat.rb +0 -372
  137. data/lib/swarm_sdk/swarm/logging_callbacks.rb +0 -361
  138. data/lib/swarm_sdk/swarm/mcp_configurator.rb +0 -290
  139. data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +0 -67
  140. data/lib/swarm_sdk/swarm/tool_configurator.rb +0 -392
  141. data/lib/swarm_sdk/swarm.rb +0 -973
  142. data/lib/swarm_sdk/swarm_loader.rb +0 -145
  143. data/lib/swarm_sdk/swarm_registry.rb +0 -136
  144. data/lib/swarm_sdk/tools/base.rb +0 -63
  145. data/lib/swarm_sdk/tools/bash.rb +0 -280
  146. data/lib/swarm_sdk/tools/clock.rb +0 -46
  147. data/lib/swarm_sdk/tools/delegate.rb +0 -389
  148. data/lib/swarm_sdk/tools/document_converters/base_converter.rb +0 -83
  149. data/lib/swarm_sdk/tools/document_converters/docx_converter.rb +0 -99
  150. data/lib/swarm_sdk/tools/document_converters/html_converter.rb +0 -101
  151. data/lib/swarm_sdk/tools/document_converters/pdf_converter.rb +0 -78
  152. data/lib/swarm_sdk/tools/document_converters/xlsx_converter.rb +0 -194
  153. data/lib/swarm_sdk/tools/edit.rb +0 -145
  154. data/lib/swarm_sdk/tools/glob.rb +0 -166
  155. data/lib/swarm_sdk/tools/grep.rb +0 -235
  156. data/lib/swarm_sdk/tools/image_extractors/docx_image_extractor.rb +0 -43
  157. data/lib/swarm_sdk/tools/image_extractors/pdf_image_extractor.rb +0 -167
  158. data/lib/swarm_sdk/tools/image_formats/tiff_builder.rb +0 -65
  159. data/lib/swarm_sdk/tools/mcp_tool_stub.rb +0 -198
  160. data/lib/swarm_sdk/tools/multi_edit.rb +0 -236
  161. data/lib/swarm_sdk/tools/path_resolver.rb +0 -92
  162. data/lib/swarm_sdk/tools/read.rb +0 -261
  163. data/lib/swarm_sdk/tools/registry.rb +0 -205
  164. data/lib/swarm_sdk/tools/scratchpad/scratchpad_list.rb +0 -117
  165. data/lib/swarm_sdk/tools/scratchpad/scratchpad_read.rb +0 -97
  166. data/lib/swarm_sdk/tools/scratchpad/scratchpad_write.rb +0 -108
  167. data/lib/swarm_sdk/tools/stores/read_tracker.rb +0 -96
  168. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +0 -273
  169. data/lib/swarm_sdk/tools/stores/storage.rb +0 -142
  170. data/lib/swarm_sdk/tools/stores/todo_manager.rb +0 -65
  171. data/lib/swarm_sdk/tools/think.rb +0 -100
  172. data/lib/swarm_sdk/tools/todo_write.rb +0 -237
  173. data/lib/swarm_sdk/tools/web_fetch.rb +0 -264
  174. data/lib/swarm_sdk/tools/write.rb +0 -112
  175. data/lib/swarm_sdk/transcript_builder.rb +0 -278
  176. data/lib/swarm_sdk/utils.rb +0 -68
  177. data/lib/swarm_sdk/validation_result.rb +0 -33
  178. data/lib/swarm_sdk/version.rb +0 -5
  179. data/lib/swarm_sdk/workflow/agent_config.rb +0 -95
  180. data/lib/swarm_sdk/workflow/builder.rb +0 -227
  181. data/lib/swarm_sdk/workflow/executor.rb +0 -497
  182. data/lib/swarm_sdk/workflow/node_builder.rb +0 -593
  183. data/lib/swarm_sdk/workflow/transformer_executor.rb +0 -250
  184. data/lib/swarm_sdk/workflow.rb +0 -589
  185. 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