htm 0.0.15 → 0.0.18

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 (135) hide show
  1. checksums.yaml +4 -4
  2. data/.architecture/decisions/adrs/001-use-postgresql-timescaledb-storage.md +1 -1
  3. data/.architecture/decisions/adrs/011-database-side-embedding-generation-with-pgai.md +4 -4
  4. data/.architecture/decisions/adrs/012-llm-driven-ontology-topic-extraction.md +1 -1
  5. data/.envrc +12 -24
  6. data/.irbrc +7 -7
  7. data/.tbls.yml +2 -2
  8. data/CHANGELOG.md +138 -0
  9. data/README.md +97 -1592
  10. data/Rakefile +8 -3
  11. data/SETUP.md +12 -12
  12. data/bin/htm_mcp +27 -0
  13. data/db/seed_data/README.md +2 -2
  14. data/db/seeds.rb +2 -2
  15. data/docs/api/database.md +37 -37
  16. data/docs/api/htm.md +1 -1
  17. data/docs/api/yard/HTM/ActiveRecordConfig.md +2 -2
  18. data/docs/api/yard/HTM/Configuration.md +26 -15
  19. data/docs/api/yard/HTM/Database.md +7 -8
  20. data/docs/api/yard/HTM/JobAdapter.md +1 -1
  21. data/docs/api/yard/HTM/Railtie.md +2 -2
  22. data/docs/architecture/adrs/001-postgresql-timescaledb.md +1 -1
  23. data/docs/architecture/adrs/011-pgai-integration.md +4 -4
  24. data/docs/database_rake_tasks.md +5 -5
  25. data/docs/development/rake-tasks.md +11 -11
  26. data/docs/development/setup.md +21 -21
  27. data/docs/development/testing.md +1 -1
  28. data/docs/getting-started/installation.md +51 -31
  29. data/docs/getting-started/quick-start.md +12 -12
  30. data/docs/guides/getting-started.md +2 -2
  31. data/docs/guides/long-term-memory.md +1 -1
  32. data/docs/guides/mcp-server.md +464 -29
  33. data/docs/guides/robot-groups.md +8 -8
  34. data/docs/index.md +4 -4
  35. data/docs/multi_framework_support.md +10 -10
  36. data/docs/setup_local_database.md +19 -19
  37. data/docs/using_rake_tasks_in_your_app.md +14 -14
  38. data/examples/README.md +50 -6
  39. data/examples/basic_usage.rb +31 -21
  40. data/examples/cli_app/README.md +8 -8
  41. data/examples/cli_app/htm_cli.rb +5 -5
  42. data/examples/config_file_example/README.md +256 -0
  43. data/examples/config_file_example/config/htm.local.yml +34 -0
  44. data/examples/config_file_example/custom_config.yml +22 -0
  45. data/examples/config_file_example/show_config.rb +125 -0
  46. data/examples/custom_llm_configuration.rb +7 -7
  47. data/examples/example_app/Rakefile +2 -2
  48. data/examples/example_app/app.rb +8 -8
  49. data/examples/file_loader_usage.rb +9 -9
  50. data/examples/mcp_client.rb +7 -7
  51. data/examples/rails_app/.gitignore +2 -0
  52. data/examples/rails_app/Gemfile +22 -0
  53. data/examples/rails_app/Gemfile.lock +430 -0
  54. data/examples/rails_app/Procfile.dev +1 -0
  55. data/examples/rails_app/README.md +98 -0
  56. data/examples/rails_app/Rakefile +5 -0
  57. data/examples/rails_app/app/assets/stylesheets/application.css +83 -0
  58. data/examples/rails_app/app/assets/stylesheets/inter-font.css +6 -0
  59. data/examples/rails_app/app/controllers/application_controller.rb +19 -0
  60. data/examples/rails_app/app/controllers/dashboard_controller.rb +27 -0
  61. data/examples/rails_app/app/controllers/files_controller.rb +205 -0
  62. data/examples/rails_app/app/controllers/memories_controller.rb +102 -0
  63. data/examples/rails_app/app/controllers/robots_controller.rb +44 -0
  64. data/examples/rails_app/app/controllers/search_controller.rb +46 -0
  65. data/examples/rails_app/app/controllers/tags_controller.rb +30 -0
  66. data/examples/rails_app/app/javascript/application.js +4 -0
  67. data/examples/rails_app/app/javascript/controllers/application.js +9 -0
  68. data/examples/rails_app/app/javascript/controllers/index.js +6 -0
  69. data/examples/rails_app/app/views/dashboard/index.html.erb +123 -0
  70. data/examples/rails_app/app/views/files/index.html.erb +108 -0
  71. data/examples/rails_app/app/views/files/new.html.erb +321 -0
  72. data/examples/rails_app/app/views/files/show.html.erb +130 -0
  73. data/examples/rails_app/app/views/layouts/application.html.erb +124 -0
  74. data/examples/rails_app/app/views/memories/_memory_card.html.erb +51 -0
  75. data/examples/rails_app/app/views/memories/deleted.html.erb +62 -0
  76. data/examples/rails_app/app/views/memories/edit.html.erb +35 -0
  77. data/examples/rails_app/app/views/memories/index.html.erb +81 -0
  78. data/examples/rails_app/app/views/memories/new.html.erb +71 -0
  79. data/examples/rails_app/app/views/memories/show.html.erb +126 -0
  80. data/examples/rails_app/app/views/robots/index.html.erb +106 -0
  81. data/examples/rails_app/app/views/robots/new.html.erb +36 -0
  82. data/examples/rails_app/app/views/robots/show.html.erb +79 -0
  83. data/examples/rails_app/app/views/search/index.html.erb +184 -0
  84. data/examples/rails_app/app/views/shared/_navbar.html.erb +52 -0
  85. data/examples/rails_app/app/views/shared/_stat_card.html.erb +52 -0
  86. data/examples/rails_app/app/views/tags/index.html.erb +131 -0
  87. data/examples/rails_app/app/views/tags/show.html.erb +67 -0
  88. data/examples/rails_app/bin/dev +8 -0
  89. data/examples/rails_app/bin/rails +4 -0
  90. data/examples/rails_app/bin/rake +4 -0
  91. data/examples/rails_app/config/application.rb +33 -0
  92. data/examples/rails_app/config/boot.rb +5 -0
  93. data/examples/rails_app/config/database.yml +15 -0
  94. data/examples/rails_app/config/environment.rb +5 -0
  95. data/examples/rails_app/config/importmap.rb +7 -0
  96. data/examples/rails_app/config/routes.rb +38 -0
  97. data/examples/rails_app/config/tailwind.config.js +35 -0
  98. data/examples/rails_app/config.ru +5 -0
  99. data/examples/rails_app/log/.keep +0 -0
  100. data/examples/rails_app/tmp/local_secret.txt +1 -0
  101. data/examples/robot_groups/multi_process.rb +5 -5
  102. data/examples/robot_groups/robot_worker.rb +5 -5
  103. data/examples/robot_groups/same_process.rb +9 -9
  104. data/examples/sinatra_app/app.rb +1 -1
  105. data/examples/timeframe_demo.rb +1 -1
  106. data/lib/htm/active_record_config.rb +12 -28
  107. data/lib/htm/circuit_breaker.rb +0 -2
  108. data/lib/htm/config/defaults.yml +246 -0
  109. data/lib/htm/config.rb +888 -0
  110. data/lib/htm/database.rb +26 -33
  111. data/lib/htm/embedding_service.rb +0 -4
  112. data/lib/htm/integrations/sinatra.rb +3 -7
  113. data/lib/htm/job_adapter.rb +1 -15
  114. data/lib/htm/jobs/generate_embedding_job.rb +1 -7
  115. data/lib/htm/jobs/generate_propositions_job.rb +2 -12
  116. data/lib/htm/jobs/generate_tags_job.rb +1 -8
  117. data/lib/htm/loaders/defaults_loader.rb +143 -0
  118. data/lib/htm/loaders/xdg_config_loader.rb +116 -0
  119. data/lib/htm/mcp/cli.rb +475 -0
  120. data/lib/htm/mcp/group_tools.rb +476 -0
  121. data/lib/htm/mcp/resources.rb +89 -0
  122. data/lib/htm/mcp/server.rb +98 -0
  123. data/lib/htm/mcp/tools.rb +488 -0
  124. data/lib/htm/models/file_source.rb +5 -3
  125. data/lib/htm/proposition_service.rb +2 -12
  126. data/lib/htm/railtie.rb +3 -8
  127. data/lib/htm/tag_service.rb +1 -8
  128. data/lib/htm/tasks.rb +7 -4
  129. data/lib/htm/version.rb +1 -1
  130. data/lib/htm.rb +124 -5
  131. data/lib/tasks/htm.rake +6 -9
  132. metadata +81 -6
  133. data/bin/htm_mcp.rb +0 -621
  134. data/config/database.yml +0 -74
  135. data/lib/htm/configuration.rb +0 -766
data/lib/htm.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require_relative "htm/version"
4
4
  require_relative "htm/errors"
5
- require_relative "htm/configuration"
5
+ require_relative "htm/config"
6
6
  require_relative "htm/circuit_breaker"
7
7
  require_relative "htm/active_record_config"
8
8
  require_relative "htm/database"
@@ -70,7 +70,7 @@ class HTM
70
70
  #
71
71
  # @param working_memory_size [Integer] Maximum tokens for working memory (default: 128,000)
72
72
  # @param robot_name [String] Human-readable name for this robot (auto-generated if not provided)
73
- # @param db_config [Hash] Database configuration (uses ENV['HTM_DBURL'] if not provided)
73
+ # @param db_config [Hash] Database configuration (uses ENV['HTM_DATABASE__URL'] if not provided)
74
74
  # @param db_pool_size [Integer] Database connection pool size (default: 5)
75
75
  # @param db_query_timeout [Integer] Database query timeout in milliseconds (default: 30000)
76
76
  # @param db_cache_size [Integer] Number of database query results to cache (default: 1000, use 0 to disable)
@@ -170,7 +170,7 @@ class HTM
170
170
  enqueue_tags_job(node_id, manual_tags: tags)
171
171
 
172
172
  # Enqueue proposition extraction if enabled and not already a proposition
173
- if HTM.configuration.extract_propositions && !metadata[:is_proposition]
173
+ if HTM.config.extract_propositions && !metadata[:is_proposition]
174
174
  enqueue_propositions_job(node_id)
175
175
  end
176
176
  else
@@ -251,7 +251,6 @@ class HTM
251
251
  normalized_timeframe = if timeframe == :auto
252
252
  result = HTM::Timeframe.normalize(:auto, query: topic)
253
253
  search_query = result.query # Use cleaned query for search
254
- HTM.logger.debug "Auto-extracted timeframe: #{result.extracted.inspect}" if result.extracted
255
254
  result.timeframe
256
255
  else
257
256
  HTM::Timeframe.normalize(timeframe)
@@ -595,7 +594,6 @@ class HTM
595
594
  tag = HTM::Models::Tag.find_or_create_by!(name: tag_name)
596
595
  HTM::Models::NodeTag.find_or_create_by!(node_id: node_id, tag_id: tag.id)
597
596
  end
598
- HTM.logger.debug "Added #{manual_tags.length} manual tags to node #{node_id}"
599
597
  end
600
598
 
601
599
  # Enqueue tag generation using configured job backend
@@ -679,4 +677,125 @@ class HTM
679
677
  end
680
678
  end
681
679
 
680
+ # ===========================================================================
681
+ # Class Methods
682
+ # ===========================================================================
683
+
684
+ class << self
685
+ # Get current configuration (singleton)
686
+ #
687
+ # @return [HTM::Config]
688
+ #
689
+ def config
690
+ @config ||= Config.new
691
+ end
692
+
693
+ # Alias for backward compatibility
694
+ alias configuration config
695
+
696
+ # Configure HTM
697
+ #
698
+ # @yield [config] Configuration object
699
+ # @yieldparam config [HTM::Config]
700
+ #
701
+ # @example Custom configuration
702
+ # HTM.configure do |config|
703
+ # config.embedding_generator = ->(text) { MyEmbedder.embed(text) }
704
+ # config.tag_extractor = ->(text, ontology) { MyTagger.extract(text, ontology) }
705
+ # end
706
+ #
707
+ # @example Default configuration
708
+ # HTM.configure # Uses RubyLLM defaults
709
+ #
710
+ def configure
711
+ yield(config) if block_given?
712
+ config.validate!
713
+ config
714
+ end
715
+
716
+ # Reset configuration to defaults
717
+ def reset_configuration!
718
+ @config = nil
719
+ end
720
+
721
+ # Get current environment
722
+ #
723
+ # @return [String] Current environment name
724
+ #
725
+ def env
726
+ Config.env
727
+ end
728
+
729
+ # Check if running in test environment
730
+ #
731
+ # @return [Boolean]
732
+ #
733
+ def test?
734
+ env == 'test'
735
+ end
736
+
737
+ # Check if running in development environment
738
+ #
739
+ # @return [Boolean]
740
+ #
741
+ def development?
742
+ env == 'development'
743
+ end
744
+
745
+ # Check if running in production environment
746
+ #
747
+ # @return [Boolean]
748
+ #
749
+ def production?
750
+ env == 'production'
751
+ end
752
+
753
+ # Generate embedding using EmbeddingService
754
+ #
755
+ # @param text [String] Text to embed
756
+ # @return [Array<Float>] Embedding vector (original, not padded)
757
+ #
758
+ def embed(text)
759
+ result = HTM::EmbeddingService.generate(text)
760
+ result[:embedding]
761
+ end
762
+
763
+ # Extract tags using TagService
764
+ #
765
+ # @param text [String] Text to analyze
766
+ # @param existing_ontology [Array<String>] Sample of existing tags for context
767
+ # @return [Array<String>] Extracted and validated tag names
768
+ #
769
+ def extract_tags(text, existing_ontology: [])
770
+ HTM::TagService.extract(text, existing_ontology: existing_ontology)
771
+ end
772
+
773
+ # Extract propositions using PropositionService
774
+ #
775
+ # @param text [String] Text to analyze
776
+ # @return [Array<String>] Extracted atomic propositions
777
+ #
778
+ def extract_propositions(text)
779
+ HTM::PropositionService.extract(text)
780
+ end
781
+
782
+ # Count tokens using configured counter
783
+ #
784
+ # @param text [String] Text to count tokens for
785
+ # @return [Integer] Token count
786
+ #
787
+ def count_tokens(text)
788
+ config.token_counter.call(text)
789
+ rescue StandardError => e
790
+ raise HTM::ValidationError, "Token counting failed: #{e.message}"
791
+ end
792
+
793
+ # Get configured logger
794
+ #
795
+ # @return [Logger] Configured logger instance
796
+ #
797
+ def logger
798
+ config.logger
799
+ end
800
+ end
682
801
  end
data/lib/tasks/htm.rake CHANGED
@@ -68,14 +68,13 @@ namespace :htm do
68
68
  end
69
69
  end
70
70
 
71
- desc "Verify database connection (respects RAILS_ENV)"
71
+ desc "Verify database connection (respects HTM_ENV/RAILS_ENV)"
72
72
  task :verify do
73
73
  require 'htm'
74
74
 
75
- env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
76
75
  config = HTM::ActiveRecordConfig.load_database_config
77
76
 
78
- puts "Verifying HTM database connection (#{env})..."
77
+ puts "Verifying HTM database connection (#{HTM.env})..."
79
78
  puts " Host: #{config[:host]}"
80
79
  puts " Port: #{config[:port]}"
81
80
  puts " Database: #{config[:database]}"
@@ -107,14 +106,13 @@ namespace :htm do
107
106
  end
108
107
  end
109
108
 
110
- desc "Open PostgreSQL console (respects RAILS_ENV)"
109
+ desc "Open PostgreSQL console (respects HTM_ENV/RAILS_ENV)"
111
110
  task :console do
112
111
  require 'htm'
113
112
 
114
- env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
115
113
  config = HTM::ActiveRecordConfig.load_database_config
116
114
 
117
- puts "Connecting to #{config[:database]} (#{env})..."
115
+ puts "Connecting to #{config[:database]} (#{HTM.env})..."
118
116
  exec "psql", "-h", config[:host],
119
117
  "-p", config[:port].to_s,
120
118
  "-U", config[:username],
@@ -416,15 +414,14 @@ namespace :htm do
416
414
  end
417
415
  end
418
416
 
419
- desc "Create database if it doesn't exist (respects RAILS_ENV)"
417
+ desc "Create database if it doesn't exist (respects HTM_ENV/RAILS_ENV)"
420
418
  task :create do
421
419
  require 'htm'
422
420
 
423
- env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
424
421
  config = HTM::ActiveRecordConfig.load_database_config
425
422
  db_name = config[:database]
426
423
 
427
- puts "Creating database: #{db_name} (#{env})"
424
+ puts "Creating database: #{db_name} (#{HTM.env})"
428
425
 
429
426
  admin_config = config.dup
430
427
  admin_config[:database] = 'postgres'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: htm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
@@ -149,6 +149,20 @@ dependencies:
149
149
  - - ">="
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: anyway_config
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '2.6'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '2.6'
152
166
  - !ruby/object:Gem::Dependency
153
167
  name: rake
154
168
  requirement: !ruby/object:Gem::Requirement
@@ -256,7 +270,7 @@ description: |
256
270
  email:
257
271
  - dvanhoozer@gmail.com
258
272
  executables:
259
- - htm_mcp.rb
273
+ - htm_mcp
260
274
  extensions: []
261
275
  extra_rdoc_files: []
262
276
  files:
@@ -290,8 +304,7 @@ files:
290
304
  - README.md
291
305
  - Rakefile
292
306
  - SETUP.md
293
- - bin/htm_mcp.rb
294
- - config/database.yml
307
+ - bin/htm_mcp
295
308
  - db/migrate/00001_enable_extensions.rb
296
309
  - db/migrate/00002_create_robots.rb
297
310
  - db/migrate/00003_create_file_sources.rb
@@ -454,11 +467,65 @@ files:
454
467
  - examples/basic_usage.rb
455
468
  - examples/cli_app/README.md
456
469
  - examples/cli_app/htm_cli.rb
470
+ - examples/config_file_example/README.md
471
+ - examples/config_file_example/config/htm.local.yml
472
+ - examples/config_file_example/custom_config.yml
473
+ - examples/config_file_example/show_config.rb
457
474
  - examples/custom_llm_configuration.rb
458
475
  - examples/example_app/Rakefile
459
476
  - examples/example_app/app.rb
460
477
  - examples/file_loader_usage.rb
461
478
  - examples/mcp_client.rb
479
+ - examples/rails_app/.gitignore
480
+ - examples/rails_app/Gemfile
481
+ - examples/rails_app/Gemfile.lock
482
+ - examples/rails_app/Procfile.dev
483
+ - examples/rails_app/README.md
484
+ - examples/rails_app/Rakefile
485
+ - examples/rails_app/app/assets/stylesheets/application.css
486
+ - examples/rails_app/app/assets/stylesheets/inter-font.css
487
+ - examples/rails_app/app/controllers/application_controller.rb
488
+ - examples/rails_app/app/controllers/dashboard_controller.rb
489
+ - examples/rails_app/app/controllers/files_controller.rb
490
+ - examples/rails_app/app/controllers/memories_controller.rb
491
+ - examples/rails_app/app/controllers/robots_controller.rb
492
+ - examples/rails_app/app/controllers/search_controller.rb
493
+ - examples/rails_app/app/controllers/tags_controller.rb
494
+ - examples/rails_app/app/javascript/application.js
495
+ - examples/rails_app/app/javascript/controllers/application.js
496
+ - examples/rails_app/app/javascript/controllers/index.js
497
+ - examples/rails_app/app/views/dashboard/index.html.erb
498
+ - examples/rails_app/app/views/files/index.html.erb
499
+ - examples/rails_app/app/views/files/new.html.erb
500
+ - examples/rails_app/app/views/files/show.html.erb
501
+ - examples/rails_app/app/views/layouts/application.html.erb
502
+ - examples/rails_app/app/views/memories/_memory_card.html.erb
503
+ - examples/rails_app/app/views/memories/deleted.html.erb
504
+ - examples/rails_app/app/views/memories/edit.html.erb
505
+ - examples/rails_app/app/views/memories/index.html.erb
506
+ - examples/rails_app/app/views/memories/new.html.erb
507
+ - examples/rails_app/app/views/memories/show.html.erb
508
+ - examples/rails_app/app/views/robots/index.html.erb
509
+ - examples/rails_app/app/views/robots/new.html.erb
510
+ - examples/rails_app/app/views/robots/show.html.erb
511
+ - examples/rails_app/app/views/search/index.html.erb
512
+ - examples/rails_app/app/views/shared/_navbar.html.erb
513
+ - examples/rails_app/app/views/shared/_stat_card.html.erb
514
+ - examples/rails_app/app/views/tags/index.html.erb
515
+ - examples/rails_app/app/views/tags/show.html.erb
516
+ - examples/rails_app/bin/dev
517
+ - examples/rails_app/bin/rails
518
+ - examples/rails_app/bin/rake
519
+ - examples/rails_app/config.ru
520
+ - examples/rails_app/config/application.rb
521
+ - examples/rails_app/config/boot.rb
522
+ - examples/rails_app/config/database.yml
523
+ - examples/rails_app/config/environment.rb
524
+ - examples/rails_app/config/importmap.rb
525
+ - examples/rails_app/config/routes.rb
526
+ - examples/rails_app/config/tailwind.config.js
527
+ - examples/rails_app/log/.keep
528
+ - examples/rails_app/tmp/local_secret.txt
462
529
  - examples/robot_groups/multi_process.rb
463
530
  - examples/robot_groups/robot_worker.rb
464
531
  - examples/robot_groups/same_process.rb
@@ -473,7 +540,8 @@ files:
473
540
  - lib/htm.rb
474
541
  - lib/htm/active_record_config.rb
475
542
  - lib/htm/circuit_breaker.rb
476
- - lib/htm/configuration.rb
543
+ - lib/htm/config.rb
544
+ - lib/htm/config/defaults.yml
477
545
  - lib/htm/database.rb
478
546
  - lib/htm/embedding_service.rb
479
547
  - lib/htm/errors.rb
@@ -482,8 +550,10 @@ files:
482
550
  - lib/htm/jobs/generate_embedding_job.rb
483
551
  - lib/htm/jobs/generate_propositions_job.rb
484
552
  - lib/htm/jobs/generate_tags_job.rb
553
+ - lib/htm/loaders/defaults_loader.rb
485
554
  - lib/htm/loaders/markdown_chunker.rb
486
555
  - lib/htm/loaders/markdown_loader.rb
556
+ - lib/htm/loaders/xdg_config_loader.rb
487
557
  - lib/htm/long_term_memory.rb
488
558
  - lib/htm/long_term_memory/fulltext_search.rb
489
559
  - lib/htm/long_term_memory/hybrid_search.rb
@@ -492,6 +562,11 @@ files:
492
562
  - lib/htm/long_term_memory/robot_operations.rb
493
563
  - lib/htm/long_term_memory/tag_operations.rb
494
564
  - lib/htm/long_term_memory/vector_search.rb
565
+ - lib/htm/mcp/cli.rb
566
+ - lib/htm/mcp/group_tools.rb
567
+ - lib/htm/mcp/resources.rb
568
+ - lib/htm/mcp/server.rb
569
+ - lib/htm/mcp/tools.rb
495
570
  - lib/htm/models/file_source.rb
496
571
  - lib/htm/models/node.rb
497
572
  - lib/htm/models/node_tag.rb
@@ -541,7 +616,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
541
616
  - !ruby/object:Gem::Version
542
617
  version: '0'
543
618
  requirements: []
544
- rubygems_version: 4.0.0
619
+ rubygems_version: 4.0.2
545
620
  specification_version: 4
546
621
  summary: Hierarchical Temporal Memory for LLM robots
547
622
  test_files: []