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,250 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "open3"
4
- require "json"
5
- require "timeout"
6
-
7
- module SwarmSDK
8
- class Workflow
9
- # Executes bash command transformers for node input/output transformation
10
- #
11
- # Transformers are shell commands that receive NodeContext data on STDIN as JSON
12
- # and produce transformed content on STDOUT.
13
- #
14
- # ## Exit Code Behavior
15
- #
16
- # - **Exit 0**: Transform success
17
- # - Use STDOUT as the transformed content
18
- # - Node execution proceeds with transformed content
19
- #
20
- # - **Exit 1**: Skip node execution (pass-through)
21
- # - STDOUT is IGNORED
22
- # - Input transformer: Use current_input unchanged (no transformation)
23
- # - Output transformer: Use result.content unchanged (no transformation)
24
- # - For input transformer: Also skips the node's LLM execution
25
- #
26
- # - **Exit 2**: Halt entire workflow
27
- # - STDOUT is IGNORED
28
- # - STDERR is shown as error message
29
- # - Workflow stops immediately with error
30
- #
31
- # ## JSON Input Format (STDIN)
32
- #
33
- # **Input transformer receives:**
34
- # ```json
35
- # {
36
- # "event": "input",
37
- # "node": "implementation",
38
- # "original_prompt": "Build auth API",
39
- # "content": "PLAN: Create endpoints...",
40
- # "all_results": {
41
- # "planning": {
42
- # "content": "Create endpoints...",
43
- # "agent": "planner",
44
- # "duration": 2.5,
45
- # "success": true
46
- # }
47
- # },
48
- # "dependencies": ["planning"]
49
- # }
50
- # ```
51
- #
52
- # **Output transformer receives:**
53
- # ```json
54
- # {
55
- # "event": "output",
56
- # "node": "implementation",
57
- # "original_prompt": "Build auth API",
58
- # "content": "Implementation complete",
59
- # "all_results": {
60
- # "planning": {...},
61
- # "implementation": {...}
62
- # }
63
- # }
64
- # ```
65
- #
66
- # @example Input transformer that validates
67
- # # validate.sh
68
- # #!/bin/bash
69
- # INPUT=$(cat)
70
- # CONTENT=$(echo "$INPUT" | jq -r '.content')
71
- #
72
- # if [ ${#CONTENT} -gt 10000 ]; then
73
- # echo "Content too long" >&2
74
- # exit 2 # Halt workflow
75
- # fi
76
- #
77
- # echo "$CONTENT"
78
- # exit 0
79
- #
80
- # @example Input transformer that caches (skip execution)
81
- # # cache_check.sh
82
- # #!/bin/bash
83
- # INPUT=$(cat)
84
- # CONTENT=$(echo "$INPUT" | jq -r '.content')
85
- #
86
- # if cached "$CONTENT"; then
87
- # exit 1 # Skip node execution, pass through unchanged
88
- # fi
89
- #
90
- # echo "$CONTENT"
91
- # exit 0
92
- class TransformerExecutor
93
- # NOTE: Timeout now accessed via SwarmSDK.config.transformer_command_timeout
94
-
95
- # Result object for transformer execution
96
- TransformerResult = Struct.new(:success, :content, :skip_execution, :halt, :error_message, keyword_init: true) do
97
- def skip_execution?
98
- skip_execution
99
- end
100
-
101
- def halt?
102
- halt
103
- end
104
- end
105
-
106
- class << self
107
- # Execute a transformer shell command
108
- #
109
- # @param command [String] Shell command to execute
110
- # @param context [NodeContext] Node context for building JSON input
111
- # @param event [String] Event type ("input" or "output")
112
- # @param node_name [Symbol] Current node name
113
- # @param fallback_content [String] Content to use if skip (exit 1)
114
- # @param timeout [Integer] Timeout in seconds (default: 60)
115
- # @return [TransformerResult] Result with transformed content or skip/halt flags
116
- def execute(command:, context:, event:, node_name:, fallback_content:, timeout: nil)
117
- timeout ||= SwarmSDK.config.transformer_command_timeout
118
-
119
- # Build JSON input for transformer
120
- input_json = build_transformer_input(context, event, node_name)
121
-
122
- # Build environment variables
123
- env = build_environment(node_name: node_name)
124
-
125
- # Execute command with JSON stdin and timeout
126
- stdout, stderr, status = Timeout.timeout(timeout) do
127
- Open3.capture3(
128
- env,
129
- command,
130
- stdin_data: JSON.generate(input_json),
131
- )
132
- end
133
-
134
- # Handle exit code
135
- # Exit 0: Transform success, use STDOUT
136
- # Exit 1: Skip node execution, use fallback_content (IGNORE STDOUT)
137
- # Exit 2: Halt workflow with error (IGNORE STDOUT)
138
- case status.exitstatus
139
- when 0
140
- # Success: use STDOUT as transformed content (strip trailing newline)
141
- TransformerResult.new(
142
- success: true,
143
- content: stdout.chomp, # Remove trailing newline from echo
144
- skip_execution: false,
145
- halt: false,
146
- error_message: nil,
147
- )
148
- when 1
149
- # Skip node execution: use fallback_content unchanged (IGNORE STDOUT)
150
- # For input transformer: skip_execution = true (skip LLM call)
151
- # For output transformer: skip_execution = false (just pass through)
152
- TransformerResult.new(
153
- success: true,
154
- content: fallback_content,
155
- skip_execution: (event == "input"), # Only skip LLM for input transformers
156
- halt: false,
157
- error_message: nil,
158
- )
159
- when 2
160
- # Halt workflow: return error (IGNORE STDOUT)
161
- error_msg = stderr.strip.empty? ? "Transformer halted workflow (exit 2)" : stderr.strip
162
- TransformerResult.new(
163
- success: false,
164
- content: nil,
165
- skip_execution: false,
166
- halt: true,
167
- error_message: error_msg,
168
- )
169
- else
170
- # Unknown exit code: treat as error (halt)
171
- error_msg = "Transformer exited with code #{status.exitstatus}\nSTDERR: #{stderr}"
172
- TransformerResult.new(
173
- success: false,
174
- content: nil,
175
- skip_execution: false,
176
- halt: true,
177
- error_message: error_msg,
178
- )
179
- end
180
- rescue Timeout::Error
181
- # Timeout: halt workflow
182
- TransformerResult.new(
183
- success: false,
184
- content: nil,
185
- skip_execution: false,
186
- halt: true,
187
- error_message: "Transformer command timed out after #{timeout}s",
188
- )
189
- rescue StandardError => e
190
- # Execution error: halt workflow
191
- TransformerResult.new(
192
- success: false,
193
- content: nil,
194
- skip_execution: false,
195
- halt: true,
196
- error_message: "Transformer command failed: #{e.message}",
197
- )
198
- end
199
-
200
- private
201
-
202
- # Build JSON input for transformer command
203
- #
204
- # @param context [NodeContext] Node context
205
- # @param event [String] Event type ("input" or "output")
206
- # @param node_name [Symbol] Node name
207
- # @return [Hash] JSON data to pass on stdin
208
- def build_transformer_input(context, event, node_name)
209
- base = {
210
- event: event,
211
- node: node_name.to_s,
212
- original_prompt: context.original_prompt,
213
- content: context.content,
214
- }
215
-
216
- # Add all_results (convert Result objects to hashes)
217
- if context.all_results && !context.all_results.empty?
218
- base[:all_results] = context.all_results.transform_values do |result|
219
- {
220
- content: result.content,
221
- agent: result.agent,
222
- duration: result.duration,
223
- success: result.success?,
224
- }
225
- end
226
- end
227
-
228
- # Add dependencies for input transformers
229
- if event == "input" && context.dependencies
230
- base[:dependencies] = context.dependencies.map(&:to_s)
231
- end
232
-
233
- base
234
- end
235
-
236
- # Build environment variables for transformer execution
237
- #
238
- # @param node_name [Symbol] Current node name
239
- # @return [Hash] Environment variables
240
- def build_environment(node_name:)
241
- {
242
- "SWARM_SDK_PROJECT_DIR" => Dir.pwd,
243
- "SWARM_SDK_NODE_NAME" => node_name.to_s,
244
- "PATH" => ENV.fetch("PATH", ""),
245
- }
246
- end
247
- end
248
- end
249
- end
250
- end