Module: SwarmMemory

Defined in:
lib/swarm_memory.rb,
lib/swarm_memory/error.rb,
lib/swarm_memory/utils.rb,
lib/swarm_memory/version.rb,
lib/swarm_memory/core/entry.rb,
lib/swarm_memory/skill_state.rb,
lib/swarm_memory/cli/commands.rb,
lib/swarm_memory/core/storage.rb,
lib/swarm_memory/adapters/base.rb,
lib/swarm_memory/tools/load_skill.rb,
lib/swarm_memory/dsl/memory_config.rb,
lib/swarm_memory/tools/memory_edit.rb,
lib/swarm_memory/tools/memory_glob.rb,
lib/swarm_memory/tools/memory_grep.rb,
lib/swarm_memory/tools/memory_read.rb,
lib/swarm_memory/search/text_search.rb,
lib/swarm_memory/tools/memory_write.rb,
lib/swarm_memory/tools/title_lookup.rb,
lib/swarm_memory/core/semantic_index.rb,
lib/swarm_memory/embeddings/embedder.rb,
lib/swarm_memory/tools/memory_defrag.rb,
lib/swarm_memory/tools/memory_delete.rb,
lib/swarm_memory/tools/memory_search.rb,
lib/swarm_memory/core/path_normalizer.rb,
lib/swarm_memory/dsl/builder_extension.rb,
lib/swarm_memory/optimization/analyzer.rb,
lib/swarm_memory/integration/sdk_plugin.rb,
lib/swarm_memory/search/semantic_search.rb,
lib/swarm_memory/search/text_similarity.rb,
lib/swarm_memory/core/frontmatter_parser.rb,
lib/swarm_memory/core/metadata_extractor.rb,
lib/swarm_memory/integration/registration.rb,
lib/swarm_memory/core/storage_read_tracker.rb,
lib/swarm_memory/integration/configuration.rb,
lib/swarm_memory/optimization/defragmenter.rb,
lib/swarm_memory/adapters/filesystem_adapter.rb,
lib/swarm_memory/integration/cli_registration.rb,
lib/swarm_memory/embeddings/informers_embedder.rb

Overview

NOTE: ChatExtension was removed in favor of SDK's built-in remove_tool method

Defined Under Namespace

Modules: Adapters, CLI, Core, DSL, Embeddings, Integration, Optimization, Search, Tools, Utils Classes: AdapterError, ConfigurationError, EmbeddingError, Error, SearchError, SkillState, StorageError

Constant Summary collapse

VERSION =
"2.3.2"

Class Method Summary collapse

Class Method Details

.adapter_for(name) ⇒ Class

Get adapter class by name

Parameters:

  • name (Symbol)

    Adapter name

Returns:

  • (Class)

    Adapter class

Raises:

  • (ArgumentError)

    If adapter is not found



79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/swarm_memory.rb', line 79

def adapter_for(name)
  name = name.to_sym

  # Check built-in adapters first
  case name
  when :filesystem
    Adapters::FilesystemAdapter
  else
    # Check registry
    adapter_registry[name] || raise(ArgumentError, "Unknown adapter: #{name}. Available: #{available_adapters.join(", ")}")
  end
end

.adapter_registryObject

Registry for custom adapters



55
56
57
# File 'lib/swarm_memory.rb', line 55

def adapter_registry
  @adapter_registry ||= {}
end

.available_adaptersArray<Symbol>

Get list of available adapters

Returns:

  • (Array<Symbol>)

    List of registered adapter names



95
96
97
# File 'lib/swarm_memory.rb', line 95

def available_adapters
  [:filesystem] + adapter_registry.keys
end

.create_tool(tool_name, storage:, agent_name:, **options) ⇒ RubyLLM::Tool

Create individual tool instance Called by SwarmSDK's ToolConfigurator

Parameters:

  • tool_name (Symbol)

    Tool name

  • storage (SwarmMemory::Core::Storage)

    Storage instance

  • agent_name (String, Symbol)

    Agent identifier

  • options (Hash)

    Additional options for special tools like LoadSkill

Options Hash (**options):

  • :chat (SwarmSDK::Agent::Chat)

    Chat instance (for LoadSkill)

  • :tool_configurator (SwarmSDK::ToolConfigurator)

    Tool configurator (for LoadSkill)

  • :agent_definition (SwarmSDK::Agent::Definition)

    Agent definition (for LoadSkill)

Returns:

  • (RubyLLM::Tool)

    Configured tool instance



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/swarm_memory.rb', line 110

def create_tool(tool_name, storage:, agent_name:, **options)
  # Validate storage is present
  if storage.nil?
    raise ConfigurationError,
      "Cannot create #{tool_name} tool: memory storage is nil. " \
        "Did you configure memory for this agent? " \
        "Add: memory { directory '.swarm/agent-memory' }"
  end

  case tool_name.to_sym
  when :MemoryWrite
    Tools::MemoryWrite.new(storage: storage, agent_name: agent_name)
  when :MemoryRead
    Tools::MemoryRead.new(storage: storage, agent_name: agent_name)
  when :MemorySearch
    Tools::MemorySearch.new(storage: storage, agent_name: agent_name)
  when :MemoryEdit
    Tools::MemoryEdit.new(storage: storage, agent_name: agent_name)
  when :MemoryDelete
    Tools::MemoryDelete.new(storage: storage)
  when :MemoryGlob
    Tools::MemoryGlob.new(storage: storage)
  when :MemoryGrep
    Tools::MemoryGrep.new(storage: storage)
  when :MemoryDefrag
    Tools::MemoryDefrag.new(storage: storage)
  when :LoadSkill
    # LoadSkill requires additional context for tool swapping
    Tools::LoadSkill.new(
      storage: storage,
      agent_name: agent_name,
      chat: options[:chat],
      tool_configurator: options[:tool_configurator],
      agent_definition: options[:agent_definition],
    )
  else
    raise ConfigurationError, "Unknown memory tool: #{tool_name}"
  end
end

.register_adapter(name, klass) ⇒ Object

Register a custom adapter

Examples:

SwarmMemory.register_adapter(:activerecord, ActiveRecordMemoryAdapter)

Parameters:

  • name (Symbol)

    Adapter name

  • klass (Class)

    Adapter class (must inherit from Adapters::Base)



66
67
68
69
70
71
72
# File 'lib/swarm_memory.rb', line 66

def register_adapter(name, klass)
  unless klass < Adapters::Base
    raise ArgumentError, "Adapter must inherit from SwarmMemory::Adapters::Base"
  end

  adapter_registry[name.to_sym] = klass
end

.tools_for(storage:, agent_name:) ⇒ Array<RubyLLM::Tool>

Convenience method for creating all memory tools at once Useful for direct RubyLLM usage (not via SwarmSDK)

Parameters:

Returns:

  • (Array<RubyLLM::Tool>)

    All configured memory tools



156
157
158
159
160
161
162
163
164
165
166
# File 'lib/swarm_memory.rb', line 156

def tools_for(storage:, agent_name:)
  [
    Tools::MemoryWrite.new(storage: storage, agent_name: agent_name),
    Tools::MemoryRead.new(storage: storage, agent_name: agent_name),
    Tools::MemoryEdit.new(storage: storage, agent_name: agent_name),
    Tools::MemoryDelete.new(storage: storage),
    Tools::MemoryGlob.new(storage: storage),
    Tools::MemoryGrep.new(storage: storage),
    Tools::MemoryDefrag.new(storage: storage),
  ]
end