claude_swarm 1.0.6 → 1.0.7
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/.ruby-version +1 -1
- data/CHANGELOG.md +14 -0
- data/README.md +336 -1037
- data/docs/V1_TO_V2_MIGRATION_GUIDE.md +1120 -0
- data/docs/v1/README.md +1195 -0
- data/docs/v2/CHANGELOG.swarm_cli.md +22 -0
- data/docs/v2/CHANGELOG.swarm_memory.md +20 -0
- data/docs/v2/CHANGELOG.swarm_sdk.md +287 -10
- data/docs/v2/README.md +32 -6
- data/docs/v2/guides/complete-tutorial.md +133 -37
- data/docs/v2/guides/composable-swarms.md +1178 -0
- data/docs/v2/guides/getting-started.md +42 -1
- data/docs/v2/guides/snapshots.md +1498 -0
- data/docs/v2/reference/architecture-flow.md +5 -3
- data/docs/v2/reference/event_payload_structures.md +249 -12
- data/docs/v2/reference/execution-flow.md +1 -1
- data/docs/v2/reference/ruby-dsl.md +368 -22
- data/docs/v2/reference/yaml.md +314 -63
- data/examples/snapshot_demo.rb +119 -0
- data/examples/v2/dsl/01_basic.rb +0 -2
- data/examples/v2/dsl/02_core_parameters.rb +0 -2
- data/examples/v2/dsl/03_capabilities.rb +0 -2
- data/examples/v2/dsl/04_llm_parameters.rb +0 -2
- data/examples/v2/dsl/05_advanced_flags.rb +0 -3
- data/examples/v2/dsl/06_permissions.rb +0 -4
- data/examples/v2/dsl/07_mcp_server.rb +0 -2
- data/examples/v2/dsl/08_swarm_hooks.rb +0 -2
- data/examples/v2/dsl/09_agent_hooks.rb +0 -2
- data/examples/v2/dsl/10_all_agents_hooks.rb +0 -3
- data/examples/v2/dsl/11_delegation.rb +0 -2
- data/examples/v2/dsl/12_complete_integration.rb +2 -6
- data/examples/v2/node_context_demo.rb +1 -1
- data/examples/v2/node_workflow.rb +2 -4
- data/examples/v2/plan_and_execute.rb +157 -0
- data/lib/claude_swarm/configuration.rb +28 -4
- data/lib/claude_swarm/version.rb +1 -1
- data/lib/swarm_cli/formatters/human_formatter.rb +103 -0
- data/lib/swarm_cli/interactive_repl.rb +9 -3
- data/lib/swarm_cli/version.rb +1 -1
- data/lib/swarm_memory/core/storage_read_tracker.rb +51 -14
- data/lib/swarm_memory/integration/cli_registration.rb +3 -2
- data/lib/swarm_memory/integration/sdk_plugin.rb +11 -5
- data/lib/swarm_memory/tools/memory_edit.rb +2 -2
- data/lib/swarm_memory/tools/memory_multi_edit.rb +2 -2
- data/lib/swarm_memory/tools/memory_read.rb +3 -3
- data/lib/swarm_memory/version.rb +1 -1
- data/lib/swarm_memory.rb +5 -0
- data/lib/swarm_sdk/agent/builder.rb +33 -0
- data/lib/swarm_sdk/agent/chat/context_tracker.rb +33 -0
- data/lib/swarm_sdk/agent/chat/hook_integration.rb +49 -3
- data/lib/swarm_sdk/agent/chat/system_reminder_injector.rb +11 -27
- data/lib/swarm_sdk/agent/chat.rb +200 -51
- data/lib/swarm_sdk/agent/context.rb +6 -2
- data/lib/swarm_sdk/agent/context_manager.rb +6 -0
- data/lib/swarm_sdk/agent/definition.rb +14 -2
- data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +180 -0
- data/lib/swarm_sdk/configuration.rb +387 -94
- data/lib/swarm_sdk/events_to_messages.rb +181 -0
- data/lib/swarm_sdk/log_collector.rb +31 -5
- data/lib/swarm_sdk/log_stream.rb +37 -8
- data/lib/swarm_sdk/model_aliases.json +4 -1
- data/lib/swarm_sdk/node/agent_config.rb +33 -8
- data/lib/swarm_sdk/node/builder.rb +39 -18
- data/lib/swarm_sdk/node_orchestrator.rb +293 -26
- data/lib/swarm_sdk/proc_helpers.rb +53 -0
- data/lib/swarm_sdk/providers/openai_with_responses.rb +22 -15
- data/lib/swarm_sdk/restore_result.rb +65 -0
- data/lib/swarm_sdk/snapshot.rb +156 -0
- data/lib/swarm_sdk/snapshot_from_events.rb +386 -0
- data/lib/swarm_sdk/state_restorer.rb +491 -0
- data/lib/swarm_sdk/state_snapshot.rb +369 -0
- data/lib/swarm_sdk/swarm/agent_initializer.rb +360 -55
- data/lib/swarm_sdk/swarm/all_agents_builder.rb +28 -1
- data/lib/swarm_sdk/swarm/builder.rb +208 -12
- data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +67 -0
- data/lib/swarm_sdk/swarm/tool_configurator.rb +46 -11
- data/lib/swarm_sdk/swarm.rb +338 -42
- data/lib/swarm_sdk/swarm_loader.rb +145 -0
- data/lib/swarm_sdk/swarm_registry.rb +136 -0
- data/lib/swarm_sdk/tools/delegate.rb +92 -7
- data/lib/swarm_sdk/tools/read.rb +17 -5
- data/lib/swarm_sdk/tools/stores/read_tracker.rb +47 -12
- data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +45 -0
- data/lib/swarm_sdk/utils.rb +18 -0
- data/lib/swarm_sdk/validation_result.rb +33 -0
- data/lib/swarm_sdk/version.rb +1 -1
- data/lib/swarm_sdk.rb +40 -8
- data/swarm_cli.gemspec +1 -1
- data/swarm_memory.gemspec +2 -2
- data/swarm_sdk.gemspec +2 -2
- metadata +21 -13
- data/examples/learning-assistant/assistant.md +0 -7
- data/examples/learning-assistant/example-memories/concept-example.md +0 -90
- data/examples/learning-assistant/example-memories/experience-example.md +0 -66
- data/examples/learning-assistant/example-memories/fact-example.md +0 -76
- data/examples/learning-assistant/example-memories/memory-index.md +0 -78
- data/examples/learning-assistant/example-memories/skill-example.md +0 -168
- data/examples/learning-assistant/learning_assistant.rb +0 -34
- data/examples/learning-assistant/learning_assistant.yml +0 -20
- data/lib/swarm_sdk/mcp.rb +0 -16
- data/llm.v2.txt +0 -13407
- /data/docs/v2/guides/{MEMORY_DEFRAG_GUIDE.md → memory-defrag-guide.md} +0 -0
- /data/{llms.txt → llms.claude-swarm.txt} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SwarmSDK
|
|
4
|
+
# Internal result object for validation phase during snapshot restore
|
|
5
|
+
#
|
|
6
|
+
# Used during restore to track which agents can be restored and which
|
|
7
|
+
# need to be skipped due to configuration mismatches.
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
class ValidationResult
|
|
11
|
+
attr_reader :warnings,
|
|
12
|
+
:skipped_agents,
|
|
13
|
+
:restorable_agents,
|
|
14
|
+
:skipped_delegations,
|
|
15
|
+
:restorable_delegations
|
|
16
|
+
|
|
17
|
+
# Initialize validation result
|
|
18
|
+
#
|
|
19
|
+
# @param warnings [Array<Hash>] Warning messages with details
|
|
20
|
+
# @param skipped_agents [Array<Symbol>] Names of agents that can't be restored
|
|
21
|
+
# @param restorable_agents [Array<Symbol>] Names of agents that can be restored
|
|
22
|
+
# @param skipped_delegations [Array<String>] Names of delegations that can't be restored
|
|
23
|
+
# @param restorable_delegations [Array<String>] Names of delegations that can be restored
|
|
24
|
+
def initialize(warnings:, skipped_agents:, restorable_agents:,
|
|
25
|
+
skipped_delegations:, restorable_delegations:)
|
|
26
|
+
@warnings = warnings
|
|
27
|
+
@skipped_agents = skipped_agents
|
|
28
|
+
@restorable_agents = restorable_agents
|
|
29
|
+
@skipped_delegations = skipped_delegations
|
|
30
|
+
@restorable_delegations = restorable_delegations
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/swarm_sdk/version.rb
CHANGED
data/lib/swarm_sdk.rb
CHANGED
|
@@ -15,6 +15,7 @@ require "yaml"
|
|
|
15
15
|
require "async"
|
|
16
16
|
require "async/semaphore"
|
|
17
17
|
require "ruby_llm"
|
|
18
|
+
require "ruby_llm/mcp"
|
|
18
19
|
|
|
19
20
|
require_relative "swarm_sdk/version"
|
|
20
21
|
|
|
@@ -25,6 +26,8 @@ loader.push_dir("#{__dir__}/swarm_sdk", namespace: SwarmSDK)
|
|
|
25
26
|
loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
|
|
26
27
|
loader.inflector.inflect(
|
|
27
28
|
"cli" => "CLI",
|
|
29
|
+
"llm_instrumentation_middleware" => "LLMInstrumentationMiddleware",
|
|
30
|
+
"mcp" => "MCP",
|
|
28
31
|
"openai_with_responses" => "OpenAIWithResponses",
|
|
29
32
|
)
|
|
30
33
|
loader.setup
|
|
@@ -43,8 +46,8 @@ module SwarmSDK
|
|
|
43
46
|
attr_accessor :settings
|
|
44
47
|
|
|
45
48
|
# Main entry point for DSL
|
|
46
|
-
def build(&block)
|
|
47
|
-
Swarm::Builder.build(&block)
|
|
49
|
+
def build(allow_filesystem_tools: nil, &block)
|
|
50
|
+
Swarm::Builder.build(allow_filesystem_tools: allow_filesystem_tools, &block)
|
|
48
51
|
end
|
|
49
52
|
|
|
50
53
|
# Validate YAML configuration without creating a swarm
|
|
@@ -84,6 +87,10 @@ module SwarmSDK
|
|
|
84
87
|
begin
|
|
85
88
|
config = Configuration.new(yaml_content, base_dir: base_dir)
|
|
86
89
|
config.load_and_validate
|
|
90
|
+
|
|
91
|
+
# Build swarm to trigger DSL validation
|
|
92
|
+
# This catches errors from Agent::Definition, Builder, etc.
|
|
93
|
+
config.to_swarm
|
|
87
94
|
rescue ConfigurationError, CircularDependencyError => e
|
|
88
95
|
errors << parse_configuration_error(e)
|
|
89
96
|
rescue StandardError => e
|
|
@@ -164,10 +171,10 @@ module SwarmSDK
|
|
|
164
171
|
# @example Load with default base_dir (Dir.pwd)
|
|
165
172
|
# yaml = File.read("config.yml")
|
|
166
173
|
# swarm = SwarmSDK.load(yaml) # base_dir defaults to Dir.pwd
|
|
167
|
-
def load(yaml_content, base_dir: Dir.pwd)
|
|
174
|
+
def load(yaml_content, base_dir: Dir.pwd, allow_filesystem_tools: nil)
|
|
168
175
|
config = Configuration.new(yaml_content, base_dir: base_dir)
|
|
169
176
|
config.load_and_validate
|
|
170
|
-
swarm = config.to_swarm
|
|
177
|
+
swarm = config.to_swarm(allow_filesystem_tools: allow_filesystem_tools)
|
|
171
178
|
|
|
172
179
|
# Apply hooks if any are configured (YAML-only feature)
|
|
173
180
|
if hooks_configured?(config)
|
|
@@ -196,9 +203,9 @@ module SwarmSDK
|
|
|
196
203
|
#
|
|
197
204
|
# @example With absolute path
|
|
198
205
|
# swarm = SwarmSDK.load_file("/absolute/path/config.yml")
|
|
199
|
-
def load_file(path)
|
|
206
|
+
def load_file(path, allow_filesystem_tools: nil)
|
|
200
207
|
config = Configuration.load_file(path)
|
|
201
|
-
swarm = config.to_swarm
|
|
208
|
+
swarm = config.to_swarm(allow_filesystem_tools: allow_filesystem_tools)
|
|
202
209
|
|
|
203
210
|
# Apply hooks if any are configured (YAML-only feature)
|
|
204
211
|
if hooks_configured?(config)
|
|
@@ -235,7 +242,7 @@ module SwarmSDK
|
|
|
235
242
|
def hooks_configured?(config)
|
|
236
243
|
config.swarm_hooks.any? ||
|
|
237
244
|
config.all_agents_hooks.any? ||
|
|
238
|
-
config.agents.any? { |_,
|
|
245
|
+
config.agents.any? { |_, agent_config| agent_config[:hooks]&.any? }
|
|
239
246
|
end
|
|
240
247
|
|
|
241
248
|
# Parse configuration error and extract structured information
|
|
@@ -323,7 +330,7 @@ module SwarmSDK
|
|
|
323
330
|
field: "swarm.lead",
|
|
324
331
|
)
|
|
325
332
|
|
|
326
|
-
# Unknown agent in connections
|
|
333
|
+
# Unknown agent in connections (old format)
|
|
327
334
|
when /Agent '([^']+)' has connection to unknown agent '([^']+)'/i
|
|
328
335
|
agent_name = Regexp.last_match(1)
|
|
329
336
|
error_hash.merge!(
|
|
@@ -332,6 +339,15 @@ module SwarmSDK
|
|
|
332
339
|
agent: agent_name,
|
|
333
340
|
)
|
|
334
341
|
|
|
342
|
+
# Unknown agent in connections (new format with composable swarms)
|
|
343
|
+
when /Agent '([^']+)' delegates to unknown target '([^']+)'/i
|
|
344
|
+
agent_name = Regexp.last_match(1)
|
|
345
|
+
error_hash.merge!(
|
|
346
|
+
type: :invalid_reference,
|
|
347
|
+
field: "swarm.agents.#{agent_name}.delegates_to",
|
|
348
|
+
agent: agent_name,
|
|
349
|
+
)
|
|
350
|
+
|
|
335
351
|
# Circular dependency
|
|
336
352
|
when /Circular dependency detected/i
|
|
337
353
|
error_hash.merge!(
|
|
@@ -397,17 +413,33 @@ module SwarmSDK
|
|
|
397
413
|
# WebFetch tool LLM processing configuration
|
|
398
414
|
attr_accessor :webfetch_provider, :webfetch_model, :webfetch_base_url, :webfetch_max_tokens
|
|
399
415
|
|
|
416
|
+
# Filesystem tools control
|
|
417
|
+
attr_accessor :allow_filesystem_tools
|
|
418
|
+
|
|
400
419
|
def initialize
|
|
401
420
|
@webfetch_provider = nil
|
|
402
421
|
@webfetch_model = nil
|
|
403
422
|
@webfetch_base_url = nil
|
|
404
423
|
@webfetch_max_tokens = 4096
|
|
424
|
+
@allow_filesystem_tools = parse_env_bool("SWARM_SDK_ALLOW_FILESYSTEM_TOOLS", default: true)
|
|
405
425
|
end
|
|
406
426
|
|
|
407
427
|
# Check if WebFetch LLM processing is enabled
|
|
408
428
|
def webfetch_llm_enabled?
|
|
409
429
|
!@webfetch_provider.nil? && !@webfetch_model.nil?
|
|
410
430
|
end
|
|
431
|
+
|
|
432
|
+
private
|
|
433
|
+
|
|
434
|
+
def parse_env_bool(key, default:)
|
|
435
|
+
return default unless ENV.key?(key)
|
|
436
|
+
|
|
437
|
+
value = ENV[key].to_s.downcase
|
|
438
|
+
return true if ["true", "yes", "1", "on", "enabled"].include?(value)
|
|
439
|
+
return false if ["false", "no", "0", "off", "disabled"].include?(value)
|
|
440
|
+
|
|
441
|
+
default
|
|
442
|
+
end
|
|
411
443
|
end
|
|
412
444
|
|
|
413
445
|
# Initialize default settings
|
data/swarm_cli.gemspec
CHANGED
|
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
|
|
|
36
36
|
|
|
37
37
|
spec.add_dependency("fast-mcp", "~> 1.6")
|
|
38
38
|
spec.add_dependency("pastel")
|
|
39
|
-
spec.add_dependency("swarm_sdk", "~> 2.
|
|
39
|
+
spec.add_dependency("swarm_sdk", "~> 2.2")
|
|
40
40
|
spec.add_dependency("tty-box")
|
|
41
41
|
spec.add_dependency("tty-cursor")
|
|
42
42
|
spec.add_dependency("tty-link")
|
data/swarm_memory.gemspec
CHANGED
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
spec.add_dependency("async", "~> 2.0")
|
|
23
23
|
spec.add_dependency("informers", "~> 1.2.1")
|
|
24
24
|
spec.add_dependency("rice", "~> 4.6.0")
|
|
25
|
-
spec.add_dependency("ruby_llm", "~> 1.
|
|
26
|
-
spec.add_dependency("swarm_sdk", "~> 2.
|
|
25
|
+
spec.add_dependency("ruby_llm", "~> 1.9")
|
|
26
|
+
spec.add_dependency("swarm_sdk", "~> 2.2")
|
|
27
27
|
spec.add_dependency("zeitwerk", "~> 2.6")
|
|
28
28
|
end
|
data/swarm_sdk.gemspec
CHANGED
|
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
|
|
|
35
35
|
spec.require_paths = ["lib"]
|
|
36
36
|
|
|
37
37
|
spec.add_dependency("async", "~> 2.0")
|
|
38
|
-
spec.add_dependency("ruby_llm", "~> 1.
|
|
39
|
-
spec.add_dependency("ruby_llm-mcp", "~> 0.
|
|
38
|
+
spec.add_dependency("ruby_llm", "~> 1.9")
|
|
39
|
+
spec.add_dependency("ruby_llm-mcp", "~> 0.7")
|
|
40
40
|
spec.add_dependency("zeitwerk", "~> 2.6")
|
|
41
41
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: claude_swarm
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Paulo Arruda
|
|
@@ -155,18 +155,22 @@ files:
|
|
|
155
155
|
- analyze_coverage.rb
|
|
156
156
|
- claude-sdk-docs.md
|
|
157
157
|
- docs-team-swarm.yml
|
|
158
|
+
- docs/V1_TO_V2_MIGRATION_GUIDE.md
|
|
159
|
+
- docs/v1/README.md
|
|
158
160
|
- docs/v2/CHANGELOG.swarm_cli.md
|
|
159
161
|
- docs/v2/CHANGELOG.swarm_memory.md
|
|
160
162
|
- docs/v2/CHANGELOG.swarm_sdk.md
|
|
161
163
|
- docs/v2/README.md
|
|
162
|
-
- docs/v2/guides/MEMORY_DEFRAG_GUIDE.md
|
|
163
164
|
- docs/v2/guides/claude-code-agents.md
|
|
164
165
|
- docs/v2/guides/complete-tutorial.md
|
|
166
|
+
- docs/v2/guides/composable-swarms.md
|
|
165
167
|
- docs/v2/guides/getting-started.md
|
|
166
168
|
- docs/v2/guides/memory-adapters.md
|
|
169
|
+
- docs/v2/guides/memory-defrag-guide.md
|
|
167
170
|
- docs/v2/guides/plugins.md
|
|
168
171
|
- docs/v2/guides/quick-start-cli.md
|
|
169
172
|
- docs/v2/guides/rails-integration.md
|
|
173
|
+
- docs/v2/guides/snapshots.md
|
|
170
174
|
- docs/v2/guides/swarm-memory.md
|
|
171
175
|
- docs/v2/reference/architecture-flow.md
|
|
172
176
|
- docs/v2/reference/cli.md
|
|
@@ -176,20 +180,13 @@ files:
|
|
|
176
180
|
- docs/v2/reference/swarm_memory_technical_details.md
|
|
177
181
|
- docs/v2/reference/yaml.md
|
|
178
182
|
- examples/claude-swarm.yml
|
|
179
|
-
- examples/learning-assistant/assistant.md
|
|
180
|
-
- examples/learning-assistant/example-memories/concept-example.md
|
|
181
|
-
- examples/learning-assistant/example-memories/experience-example.md
|
|
182
|
-
- examples/learning-assistant/example-memories/fact-example.md
|
|
183
|
-
- examples/learning-assistant/example-memories/memory-index.md
|
|
184
|
-
- examples/learning-assistant/example-memories/skill-example.md
|
|
185
|
-
- examples/learning-assistant/learning_assistant.rb
|
|
186
|
-
- examples/learning-assistant/learning_assistant.yml
|
|
187
183
|
- examples/microservices-team.yml
|
|
188
184
|
- examples/mixed-provider-swarm.yml
|
|
189
185
|
- examples/monitoring-demo.yml
|
|
190
186
|
- examples/multi-directory.yml
|
|
191
187
|
- examples/session-restoration-demo.yml
|
|
192
188
|
- examples/simple-session-hook-swarm.yml
|
|
189
|
+
- examples/snapshot_demo.rb
|
|
193
190
|
- examples/test-generation.yml
|
|
194
191
|
- examples/v2/dsl/01_basic.rb
|
|
195
192
|
- examples/v2/dsl/02_core_parameters.rb
|
|
@@ -235,6 +232,7 @@ files:
|
|
|
235
232
|
- examples/v2/node_context_demo.rb
|
|
236
233
|
- examples/v2/node_workflow.rb
|
|
237
234
|
- examples/v2/path_resolution_demo.rb
|
|
235
|
+
- examples/v2/plan_and_execute.rb
|
|
238
236
|
- examples/v2/simple-swarm-v2.rb
|
|
239
237
|
- examples/v2/simple-swarm-v2.yml
|
|
240
238
|
- examples/v2/swarm.yml
|
|
@@ -357,11 +355,13 @@ files:
|
|
|
357
355
|
- lib/swarm_sdk/agent/context.rb
|
|
358
356
|
- lib/swarm_sdk/agent/context_manager.rb
|
|
359
357
|
- lib/swarm_sdk/agent/definition.rb
|
|
358
|
+
- lib/swarm_sdk/agent/llm_instrumentation_middleware.rb
|
|
360
359
|
- lib/swarm_sdk/claude_code_agent_adapter.rb
|
|
361
360
|
- lib/swarm_sdk/configuration.rb
|
|
362
361
|
- lib/swarm_sdk/context_compactor.rb
|
|
363
362
|
- lib/swarm_sdk/context_compactor/metrics.rb
|
|
364
363
|
- lib/swarm_sdk/context_compactor/token_counter.rb
|
|
364
|
+
- lib/swarm_sdk/events_to_messages.rb
|
|
365
365
|
- lib/swarm_sdk/hooks/adapter.rb
|
|
366
366
|
- lib/swarm_sdk/hooks/context.rb
|
|
367
367
|
- lib/swarm_sdk/hooks/definition.rb
|
|
@@ -375,7 +375,6 @@ files:
|
|
|
375
375
|
- lib/swarm_sdk/log_collector.rb
|
|
376
376
|
- lib/swarm_sdk/log_stream.rb
|
|
377
377
|
- lib/swarm_sdk/markdown_parser.rb
|
|
378
|
-
- lib/swarm_sdk/mcp.rb
|
|
379
378
|
- lib/swarm_sdk/model_aliases.json
|
|
380
379
|
- lib/swarm_sdk/models.json
|
|
381
380
|
- lib/swarm_sdk/models.rb
|
|
@@ -391,15 +390,24 @@ files:
|
|
|
391
390
|
- lib/swarm_sdk/permissions_builder.rb
|
|
392
391
|
- lib/swarm_sdk/plugin.rb
|
|
393
392
|
- lib/swarm_sdk/plugin_registry.rb
|
|
393
|
+
- lib/swarm_sdk/proc_helpers.rb
|
|
394
394
|
- lib/swarm_sdk/prompts/base_system_prompt.md.erb
|
|
395
395
|
- lib/swarm_sdk/providers/openai_with_responses.rb
|
|
396
|
+
- lib/swarm_sdk/restore_result.rb
|
|
396
397
|
- lib/swarm_sdk/result.rb
|
|
398
|
+
- lib/swarm_sdk/snapshot.rb
|
|
399
|
+
- lib/swarm_sdk/snapshot_from_events.rb
|
|
400
|
+
- lib/swarm_sdk/state_restorer.rb
|
|
401
|
+
- lib/swarm_sdk/state_snapshot.rb
|
|
397
402
|
- lib/swarm_sdk/swarm.rb
|
|
398
403
|
- lib/swarm_sdk/swarm/agent_initializer.rb
|
|
399
404
|
- lib/swarm_sdk/swarm/all_agents_builder.rb
|
|
400
405
|
- lib/swarm_sdk/swarm/builder.rb
|
|
401
406
|
- lib/swarm_sdk/swarm/mcp_configurator.rb
|
|
407
|
+
- lib/swarm_sdk/swarm/swarm_registry_builder.rb
|
|
402
408
|
- lib/swarm_sdk/swarm/tool_configurator.rb
|
|
409
|
+
- lib/swarm_sdk/swarm_loader.rb
|
|
410
|
+
- lib/swarm_sdk/swarm_registry.rb
|
|
403
411
|
- lib/swarm_sdk/tools/bash.rb
|
|
404
412
|
- lib/swarm_sdk/tools/clock.rb
|
|
405
413
|
- lib/swarm_sdk/tools/delegate.rb
|
|
@@ -430,9 +438,9 @@ files:
|
|
|
430
438
|
- lib/swarm_sdk/tools/web_fetch.rb
|
|
431
439
|
- lib/swarm_sdk/tools/write.rb
|
|
432
440
|
- lib/swarm_sdk/utils.rb
|
|
441
|
+
- lib/swarm_sdk/validation_result.rb
|
|
433
442
|
- lib/swarm_sdk/version.rb
|
|
434
|
-
-
|
|
435
|
-
- llms.txt
|
|
443
|
+
- llms.claude-swarm.txt
|
|
436
444
|
- rubocop/cop/security/no_reflection_methods.rb
|
|
437
445
|
- rubocop/cop/security/no_ruby_llm_logger.rb
|
|
438
446
|
- single.yml
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: concept
|
|
3
|
-
domain: programming/ruby
|
|
4
|
-
confidence: high
|
|
5
|
-
last_verified: 2025-01-15
|
|
6
|
-
tags: [ruby, classes, oop, inheritance, objects]
|
|
7
|
-
related:
|
|
8
|
-
- memory://memory/concepts/programming/ruby/modules.md
|
|
9
|
-
- memory://memory/concepts/programming/oop/inheritance.md
|
|
10
|
-
- memory://memory/skills/programming/ruby/create-class.md
|
|
11
|
-
source: documentation
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Ruby Classes
|
|
15
|
-
|
|
16
|
-
## Definition
|
|
17
|
-
|
|
18
|
-
Classes are blueprints for creating objects in Ruby. They define both the structure (instance variables) and behavior (methods) that objects created from the class will have.
|
|
19
|
-
|
|
20
|
-
## Core Syntax
|
|
21
|
-
|
|
22
|
-
```ruby
|
|
23
|
-
class Person
|
|
24
|
-
# Constructor
|
|
25
|
-
def initialize(name, age)
|
|
26
|
-
@name = name # Instance variable
|
|
27
|
-
@age = age
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Instance method
|
|
31
|
-
def introduce
|
|
32
|
-
"Hi, I'm #{@name} and I'm #{@age} years old"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Class method
|
|
36
|
-
def self.species
|
|
37
|
-
"Homo sapiens"
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Usage
|
|
42
|
-
person = Person.new("Alice", 30)
|
|
43
|
-
person.introduce # => "Hi, I'm Alice and I'm 30 years old"
|
|
44
|
-
Person.species # => "Homo sapiens"
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Key Characteristics
|
|
48
|
-
|
|
49
|
-
1. **Instantiation**: Create objects with `.new`
|
|
50
|
-
2. **Instance variables**: Start with `@`, unique per instance
|
|
51
|
-
3. **Instance methods**: Define object behavior
|
|
52
|
-
4. **Class methods**: Shared across all instances (use `self.`)
|
|
53
|
-
5. **Inheritance**: Single inheritance with `<`
|
|
54
|
-
6. **Visibility**: public (default), private, protected
|
|
55
|
-
|
|
56
|
-
## Inheritance
|
|
57
|
-
|
|
58
|
-
```ruby
|
|
59
|
-
class Employee < Person
|
|
60
|
-
def initialize(name, age, role)
|
|
61
|
-
super(name, age) # Call parent constructor
|
|
62
|
-
@role = role
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def introduce
|
|
66
|
-
super + " and I work as a #{@role}"
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## When to Use
|
|
72
|
-
|
|
73
|
-
- Modeling real-world entities (User, Product, Order)
|
|
74
|
-
- Need multiple instances with shared behavior
|
|
75
|
-
- Building reusable, stateful components
|
|
76
|
-
- Implementing object-oriented patterns
|
|
77
|
-
|
|
78
|
-
## Relationships
|
|
79
|
-
|
|
80
|
-
- **Similar to**: Modules (but modules can't be instantiated)
|
|
81
|
-
- **Part of**: Object-Oriented Programming paradigm
|
|
82
|
-
- **Used with**: Inheritance, Mixins, Composition
|
|
83
|
-
- **Differs from**: Structs (simpler, less flexible)
|
|
84
|
-
|
|
85
|
-
## Common Patterns
|
|
86
|
-
|
|
87
|
-
1. **Encapsulation**: Hide internal state with private methods
|
|
88
|
-
2. **Delegation**: Forward calls to composed objects
|
|
89
|
-
3. **Factory pattern**: Class methods that return instances
|
|
90
|
-
4. **Template method**: Parent class defines structure, children implement details
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: experience
|
|
3
|
-
category: success
|
|
4
|
-
domain: swarm/memory
|
|
5
|
-
date: 2025-01-15
|
|
6
|
-
tags: [learning, first-success, memory-system, milestone]
|
|
7
|
-
related:
|
|
8
|
-
- memory://memory/skills/swarm/scratchpad-write.md
|
|
9
|
-
- memory://memory/concepts/swarm/scratchpad-system.md
|
|
10
|
-
source: experimentation
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# First Successful Memory Write
|
|
14
|
-
|
|
15
|
-
## Context
|
|
16
|
-
|
|
17
|
-
This was my first attempt at using the memory system. I needed to store knowledge about how to use the MemoryWrite tool.
|
|
18
|
-
|
|
19
|
-
## What I Did
|
|
20
|
-
|
|
21
|
-
1. Chose appropriate path: `memory/skills/swarm/scratchpad-write.md`
|
|
22
|
-
2. Created YAML frontmatter with all required fields
|
|
23
|
-
3. Wrote structured markdown with examples
|
|
24
|
-
4. Successfully stored the entry
|
|
25
|
-
5. Verified by reading it back with MemoryRead
|
|
26
|
-
|
|
27
|
-
## Challenges Faced
|
|
28
|
-
|
|
29
|
-
- Initially unsure about path structure (should it be `skills/swarm/` or `swarm/skills/`)
|
|
30
|
-
- Wasn't sure how detailed the frontmatter should be
|
|
31
|
-
- Questioned whether to use `.md` extension
|
|
32
|
-
|
|
33
|
-
## What Worked
|
|
34
|
-
|
|
35
|
-
- Following the memory schema from system prompt
|
|
36
|
-
- Using kebab-case for paths
|
|
37
|
-
- Including concrete examples in the content
|
|
38
|
-
- Marking confidence honestly (medium at first)
|
|
39
|
-
|
|
40
|
-
## Outcome
|
|
41
|
-
|
|
42
|
-
Successfully created my first memory entry. I can now read it back and use it as a template for future entries.
|
|
43
|
-
|
|
44
|
-
## Lesson Learned
|
|
45
|
-
|
|
46
|
-
**Key insight**: The memory system works best when you:
|
|
47
|
-
1. Follow the schema strictly (don't improvise paths)
|
|
48
|
-
2. Write immediately after learning (don't batch)
|
|
49
|
-
3. Include rich frontmatter (makes searching easier)
|
|
50
|
-
4. Use examples (makes recall more useful)
|
|
51
|
-
|
|
52
|
-
## Apply This Pattern When
|
|
53
|
-
|
|
54
|
-
- Starting to use any new tool or system
|
|
55
|
-
- Building a new skill
|
|
56
|
-
- Need to remember a process
|
|
57
|
-
- Want to capture a lesson learned
|
|
58
|
-
|
|
59
|
-
## Evolution
|
|
60
|
-
|
|
61
|
-
This entry will serve as a template and reminder for how to use the memory system effectively. As I gain more experience, I'll update it with additional insights.
|
|
62
|
-
|
|
63
|
-
## Confidence Growth
|
|
64
|
-
|
|
65
|
-
- **Day 1** (2025-01-15): confidence: medium - First attempt, learning
|
|
66
|
-
- **Future**: Will increase to high after 5+ successful uses
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: fact
|
|
3
|
-
domain: people
|
|
4
|
-
confidence: high
|
|
5
|
-
last_verified: 2025-01-15
|
|
6
|
-
tags: [user, paulo, preferences, communication]
|
|
7
|
-
source: user
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# User: Paulo
|
|
11
|
-
|
|
12
|
-
## Role & Context
|
|
13
|
-
|
|
14
|
-
- **Primary user** and project owner
|
|
15
|
-
- **Working on**: SwarmSDK and SwarmCLI Ruby gems
|
|
16
|
-
- **Project location**: `/Users/paulo/src/github.com/parruda/claude-swarm`
|
|
17
|
-
- **Platform**: macOS (Darwin 24.6.0)
|
|
18
|
-
- **Ruby version**: 3.4.2
|
|
19
|
-
|
|
20
|
-
## Communication Preferences
|
|
21
|
-
|
|
22
|
-
### Style
|
|
23
|
-
- Prefers **direct, concise** communication
|
|
24
|
-
- Values **professional, clean** code
|
|
25
|
-
- Appreciates **thorough explanations** when asked
|
|
26
|
-
- Likes when I explain my reasoning
|
|
27
|
-
|
|
28
|
-
### Expectations
|
|
29
|
-
- **Production-ready** implementations (not prototypes)
|
|
30
|
-
- **Comprehensive testing** (all tests must pass)
|
|
31
|
-
- **Clean code** (RuboCop compliance)
|
|
32
|
-
- **Proper documentation** (accurate, current)
|
|
33
|
-
|
|
34
|
-
### Work Style
|
|
35
|
-
- Asks **clarifying questions** when unsure
|
|
36
|
-
- Provides **specific feedback** on implementations
|
|
37
|
-
- Iterates quickly - makes decisions and moves forward
|
|
38
|
-
- Values **best practices** and **maintainability**
|
|
39
|
-
|
|
40
|
-
## Project Context
|
|
41
|
-
|
|
42
|
-
### SwarmSDK
|
|
43
|
-
- Building next-generation multi-agent orchestration framework
|
|
44
|
-
- Focuses on single-process execution using RubyLLM
|
|
45
|
-
- Clean separation between SDK (lib/swarm_sdk/) and CLI (lib/swarm_cli/)
|
|
46
|
-
- Strong emphasis on testing and code quality
|
|
47
|
-
|
|
48
|
-
### Development Practices
|
|
49
|
-
- Uses Zeitwerk for autoloading
|
|
50
|
-
- Follows Ruby/RuboCop conventions
|
|
51
|
-
- Comprehensive test coverage required
|
|
52
|
-
- Documentation must reflect code reality (no "New!" announcements)
|
|
53
|
-
|
|
54
|
-
## How to Work with Paulo
|
|
55
|
-
|
|
56
|
-
1. **Be direct** - No fluff, get to the point
|
|
57
|
-
2. **Be thorough** - Complete implementations, not partial
|
|
58
|
-
3. **Ask when unsure** - Don't guess architectural decisions
|
|
59
|
-
4. **Test everything** - All tests must pass before completion
|
|
60
|
-
5. **Document accurately** - Docs describe current state, not history
|
|
61
|
-
|
|
62
|
-
## Things Paulo Cares About
|
|
63
|
-
|
|
64
|
-
- **Separation of concerns** - SDK vs CLI code must never mix
|
|
65
|
-
- **Professional code quality** - This is open source, must look great
|
|
66
|
-
- **No slop** - No methods that exist only for tests
|
|
67
|
-
- **Proper delegation** - Consult experts via MCP tools
|
|
68
|
-
- **Breaking changes** - Be explicit about them
|
|
69
|
-
|
|
70
|
-
## Things to Avoid
|
|
71
|
-
|
|
72
|
-
- Creating unnecessary files (especially markdown/README files proactively)
|
|
73
|
-
- Using emojis unless explicitly requested
|
|
74
|
-
- Making assumptions about architecture without asking
|
|
75
|
-
- Mixing SDK and CLI code
|
|
76
|
-
- Incomplete implementations
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: index
|
|
3
|
-
last_updated: 2025-01-15
|
|
4
|
-
total_entries: 8
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Memory Index
|
|
8
|
-
|
|
9
|
-
My current knowledge base as of 2025-01-15.
|
|
10
|
-
|
|
11
|
-
## Quick Stats
|
|
12
|
-
- **Concepts**: 2
|
|
13
|
-
- **Facts**: 3
|
|
14
|
-
- **Skills**: 2
|
|
15
|
-
- **Experiences**: 1
|
|
16
|
-
|
|
17
|
-
## Expertise Areas
|
|
18
|
-
|
|
19
|
-
### Strong (5+ entries)
|
|
20
|
-
- Ruby programming (3 concepts + 2 skills)
|
|
21
|
-
|
|
22
|
-
### Developing (2-4 entries)
|
|
23
|
-
- User context (3 facts)
|
|
24
|
-
|
|
25
|
-
### Learning (1 entry)
|
|
26
|
-
- Testing practices (1 experience)
|
|
27
|
-
|
|
28
|
-
## Recent Activity (Last 7 Days)
|
|
29
|
-
|
|
30
|
-
- **2025-01-15**: Learned Minitest testing → skills/programming/ruby/minitest-testing.md
|
|
31
|
-
- **2025-01-15**: Understood user preferences → facts/people/paulo.md
|
|
32
|
-
- **2025-01-15**: Discovered project structure → facts/environment/project-structure.md
|
|
33
|
-
- **2025-01-14**: Learned about Ruby classes → concepts/programming/ruby/classes.md
|
|
34
|
-
- **2025-01-14**: Mastered MemoryWrite → skills/swarm/scratchpad-write.md
|
|
35
|
-
|
|
36
|
-
## Knowledge Gaps (To Explore)
|
|
37
|
-
|
|
38
|
-
Questions I need to answer:
|
|
39
|
-
- How does the SwarmSDK delegation system work?
|
|
40
|
-
- What are the best practices for organizing large memory hierarchies?
|
|
41
|
-
- How should I handle conflicting information from different sources?
|
|
42
|
-
|
|
43
|
-
## Category Breakdown
|
|
44
|
-
|
|
45
|
-
### Concepts
|
|
46
|
-
- `concepts/programming/ruby/` (2 entries)
|
|
47
|
-
- classes.md
|
|
48
|
-
- modules.md
|
|
49
|
-
|
|
50
|
-
### Facts
|
|
51
|
-
- `facts/people/` (1 entry)
|
|
52
|
-
- paulo.md
|
|
53
|
-
- `facts/environment/` (2 entries)
|
|
54
|
-
- project-structure.md
|
|
55
|
-
- preferences.md
|
|
56
|
-
|
|
57
|
-
### Skills
|
|
58
|
-
- `skills/programming/ruby/` (1 entry)
|
|
59
|
-
- minitest-testing.md
|
|
60
|
-
- `skills/swarm/` (1 entry)
|
|
61
|
-
- scratchpad-write.md
|
|
62
|
-
|
|
63
|
-
### Experience
|
|
64
|
-
- `experience/successes/` (1 entry)
|
|
65
|
-
- 2025-01-15-first-memory-write.md
|
|
66
|
-
|
|
67
|
-
## Memory Health
|
|
68
|
-
|
|
69
|
-
- **Total Size**: ~50KB / 100MB (0.05% used)
|
|
70
|
-
- **Organization**: Good - clear hierarchy
|
|
71
|
-
- **Cross-references**: 8 links across entries
|
|
72
|
-
- **Confidence Distribution**: High: 6, Medium: 2, Low: 0
|
|
73
|
-
|
|
74
|
-
## Next Session Goals
|
|
75
|
-
|
|
76
|
-
1. Learn more about the SwarmSDK agent system
|
|
77
|
-
2. Build skills in file operations (Read, Write, Edit)
|
|
78
|
-
3. Understand the user's current project goals
|