htm 0.0.17 → 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 (80) 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 -25
  6. data/.irbrc +7 -7
  7. data/.tbls.yml +2 -2
  8. data/CHANGELOG.md +71 -0
  9. data/README.md +1 -1
  10. data/Rakefile +8 -3
  11. data/SETUP.md +12 -12
  12. data/bin/htm_mcp +0 -4
  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 +20 -20
  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 +17 -17
  33. data/docs/guides/robot-groups.md +8 -8
  34. data/docs/index.md +4 -4
  35. data/docs/multi_framework_support.md +8 -8
  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 +5 -5
  51. data/examples/rails_app/Gemfile.lock +48 -56
  52. data/examples/rails_app/README.md +1 -1
  53. data/examples/robot_groups/multi_process.rb +5 -5
  54. data/examples/robot_groups/robot_worker.rb +5 -5
  55. data/examples/robot_groups/same_process.rb +9 -9
  56. data/examples/sinatra_app/app.rb +1 -1
  57. data/examples/timeframe_demo.rb +1 -1
  58. data/lib/htm/active_record_config.rb +12 -25
  59. data/lib/htm/circuit_breaker.rb +0 -2
  60. data/lib/htm/config/defaults.yml +246 -0
  61. data/lib/htm/config.rb +888 -0
  62. data/lib/htm/database.rb +23 -27
  63. data/lib/htm/embedding_service.rb +0 -4
  64. data/lib/htm/integrations/sinatra.rb +3 -7
  65. data/lib/htm/job_adapter.rb +1 -15
  66. data/lib/htm/jobs/generate_embedding_job.rb +1 -7
  67. data/lib/htm/jobs/generate_propositions_job.rb +2 -12
  68. data/lib/htm/jobs/generate_tags_job.rb +1 -8
  69. data/lib/htm/loaders/defaults_loader.rb +143 -0
  70. data/lib/htm/loaders/xdg_config_loader.rb +116 -0
  71. data/lib/htm/mcp/cli.rb +200 -58
  72. data/lib/htm/mcp/server.rb +3 -3
  73. data/lib/htm/proposition_service.rb +2 -12
  74. data/lib/htm/railtie.rb +3 -4
  75. data/lib/htm/tag_service.rb +1 -8
  76. data/lib/htm/version.rb +1 -1
  77. data/lib/htm.rb +124 -5
  78. metadata +24 -4
  79. data/config/database.yml +0 -77
  80. data/lib/htm/configuration.rb +0 -799
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- htm (0.0.16)
4
+ htm (0.0.18)
5
5
  activerecord
6
+ anyway_config (>= 2.6)
6
7
  baran
7
8
  chronic
8
9
  fast-mcp
@@ -91,18 +92,20 @@ GEM
91
92
  tzinfo (~> 2.0, >= 2.0.5)
92
93
  addressable (2.8.8)
93
94
  public_suffix (>= 2.0.2, < 8.0)
95
+ anyway_config (2.7.2)
96
+ ruby-next-core (~> 1.0)
94
97
  baran (0.2.1)
95
98
  base64 (0.3.0)
96
99
  benchmark (0.5.0)
97
100
  bigdecimal (3.3.1)
98
101
  bindex (0.8.1)
99
102
  builder (3.3.0)
100
- cgi (0.5.0)
103
+ cgi (0.5.1)
101
104
  chronic (0.10.2)
102
- concurrent-ruby (1.3.5)
105
+ concurrent-ruby (1.3.6)
103
106
  connection_pool (3.0.2)
104
107
  crass (1.0.6)
105
- date (3.5.0)
108
+ date (3.5.1)
106
109
  debug_me (1.1.3)
107
110
  drb (2.2.3)
108
111
  dry-configurable (1.3.0)
@@ -134,7 +137,7 @@ GEM
134
137
  dry-inflector (~> 1.0)
135
138
  dry-logic (~> 1.4)
136
139
  zeitwerk (~> 2.6)
137
- erb (6.0.0)
140
+ erb (6.0.1)
138
141
  erubi (1.13.1)
139
142
  event_stream_parser (1.0.0)
140
143
  faraday (2.14.0)
@@ -158,26 +161,14 @@ GEM
158
161
  activesupport (>= 6.1)
159
162
  i18n (1.14.7)
160
163
  concurrent-ruby (~> 1.0)
161
- io-console (0.8.1)
162
- irb (1.15.3)
164
+ io-console (0.8.2)
165
+ irb (1.16.0)
163
166
  pp (>= 0.6.0)
164
167
  rdoc (>= 4.0.0)
165
168
  reline (>= 0.4.2)
166
- json (2.17.1)
167
- kaminari (1.2.2)
168
- activesupport (>= 4.1.0)
169
- kaminari-actionview (= 1.2.2)
170
- kaminari-activerecord (= 1.2.2)
171
- kaminari-core (= 1.2.2)
172
- kaminari-actionview (1.2.2)
173
- actionview
174
- kaminari-core (= 1.2.2)
175
- kaminari-activerecord (1.2.2)
176
- activerecord
177
- kaminari-core (= 1.2.2)
178
- kaminari-core (1.2.2)
169
+ json (2.18.0)
179
170
  logger (1.7.0)
180
- loofah (2.24.1)
171
+ loofah (2.25.0)
181
172
  crass (~> 1.0.2)
182
173
  nokogiri (>= 1.12.0)
183
174
  lru_redux (1.1.0)
@@ -194,13 +185,14 @@ GEM
194
185
  mime-types-data (3.2025.0924)
195
186
  mini_mime (1.1.5)
196
187
  mini_portile2 (2.8.9)
197
- minitest (5.26.2)
188
+ minitest (6.0.0)
189
+ prism (~> 1.5)
198
190
  multipart-post (2.4.1)
199
191
  neighbor (0.6.0)
200
192
  activerecord (>= 7.1)
201
- net-http (0.8.0)
193
+ net-http (0.9.1)
202
194
  uri (>= 0.11.1)
203
- net-imap (0.5.12)
195
+ net-imap (0.6.2)
204
196
  date
205
197
  net-protocol
206
198
  net-pop (0.1.2)
@@ -217,11 +209,12 @@ GEM
217
209
  pp (0.6.3)
218
210
  prettyprint
219
211
  prettyprint (0.2.0)
212
+ prism (1.7.0)
220
213
  propshaft (1.3.1)
221
214
  actionpack (>= 7.0.0)
222
215
  activesupport (>= 7.0.0)
223
216
  rack
224
- psych (5.2.6)
217
+ psych (5.3.1)
225
218
  date
226
219
  stringio
227
220
  public_suffix (7.0.0)
@@ -269,14 +262,15 @@ GEM
269
262
  zeitwerk (~> 2.6)
270
263
  rake (13.3.1)
271
264
  rake-compiler-dock (1.10.0)
272
- rb_sys (0.9.119)
265
+ rb_sys (0.9.123)
273
266
  rake-compiler-dock (= 1.10.0)
274
- rdoc (6.16.1)
267
+ rdoc (7.0.1)
275
268
  erb
276
269
  psych (>= 4.0.0)
277
270
  tsort
278
271
  reline (0.6.3)
279
272
  io-console (~> 0.5)
273
+ ruby-next-core (1.1.2)
280
274
  ruby-progressbar (1.13.0)
281
275
  ruby_llm (1.9.1)
282
276
  base64
@@ -290,11 +284,11 @@ GEM
290
284
  zeitwerk (~> 2)
291
285
  ruby_llm-schema (0.2.5)
292
286
  securerandom (0.4.1)
293
- stringio (3.1.9)
287
+ stringio (3.2.0)
294
288
  thor (1.4.0)
295
- tiktoken_ruby (0.0.13)
289
+ tiktoken_ruby (0.0.14.1)
296
290
  rb_sys (~> 0.9)
297
- timeout (0.4.4)
291
+ timeout (0.6.0)
298
292
  tsort (0.2.0)
299
293
  tzinfo (2.0.6)
300
294
  concurrent-ruby (~> 1.0)
@@ -309,7 +303,7 @@ GEM
309
303
  base64
310
304
  websocket-extensions (>= 0.1.0)
311
305
  websocket-extensions (0.1.5)
312
- zeitwerk (2.7.3)
306
+ zeitwerk (2.7.4)
313
307
 
314
308
  PLATFORMS
315
309
  arm64-darwin-25
@@ -318,7 +312,6 @@ PLATFORMS
318
312
  DEPENDENCIES
319
313
  debug_me
320
314
  htm!
321
- kaminari
322
315
  pg (~> 1.5)
323
316
  propshaft
324
317
  puma (~> 6.0)
@@ -338,18 +331,19 @@ CHECKSUMS
338
331
  activestorage (7.2.3) sha256=4c1422bbfaa60c89e7b43cc38ade7bd3b8dc81024c48a21c1ac56814cf34ca2f
339
332
  activesupport (7.2.3) sha256=5675c9770dac93e371412684249f9dc3c8cec104efd0624362a520ae685c7b10
340
333
  addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057
334
+ anyway_config (2.7.2) sha256=30f6b087c0b41afdd43fe46c81d65a16f052a8489dab453abaeb4ea67aa74bad
341
335
  baran (0.2.1) sha256=6c19e835c6f73c70e7073fb3d3cb48d2c85606e0b1484914b4c01a3cecdd7892
342
336
  base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
343
337
  benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
344
338
  bigdecimal (3.3.1) sha256=eaa01e228be54c4f9f53bf3cc34fe3d5e845c31963e7fcc5bedb05a4e7d52218
345
339
  bindex (0.8.1) sha256=7b1ecc9dc539ed8bccfc8cb4d2732046227b09d6f37582ff12e50a5047ceb17e
346
340
  builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f
347
- cgi (0.5.0) sha256=fe99f65bb2c146e294372ebb27602adbc3b4c008e9ea7038c6bd48c1ec9759da
341
+ cgi (0.5.1) sha256=e93fcafc69b8a934fe1e6146121fa35430efa8b4a4047c4893764067036f18e9
348
342
  chronic (0.10.2) sha256=766f2fcce6ac3cc152249ed0f2b827770d3e517e2e87c5fba7ed74f4889d2dc3
349
- concurrent-ruby (1.3.5) sha256=813b3e37aca6df2a21a3b9f1d497f8cbab24a2b94cab325bffe65ee0f6cbebc6
343
+ concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab
350
344
  connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a
351
345
  crass (1.0.6) sha256=dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d
352
- date (3.5.0) sha256=5e74fd6c04b0e65d97ad4f3bb5cb2d8efb37f386cc848f46310b4593ffc46ee5
346
+ date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
353
347
  debug_me (1.1.3) sha256=ae8cf61993350d9b3cbe337a7f9a0f595be5b4976c10891a4e1eacc63d09f717
354
348
  drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
355
349
  dry-configurable (1.3.0) sha256=882d862858567fc1210d2549d4c090f34370fc1bb7c5c1933de3fe792e18afa8
@@ -359,7 +353,7 @@ CHECKSUMS
359
353
  dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
360
354
  dry-schema (1.14.1) sha256=2fcd7539a7099cacae6a22f6a3a2c1846fe5afeb1c841cde432c89c6cb9b9ff1
361
355
  dry-types (1.8.3) sha256=b5d97a45e0ed273131c0c3d5bc9f5633c2d1242e092ee47401ce7d5eab65c1bc
362
- erb (6.0.0) sha256=2730893f9d8c9733f16cab315a4e4b71c1afa9cabc1a1e7ad1403feba8f52579
356
+ erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
363
357
  erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
364
358
  event_stream_parser (1.0.0) sha256=a2683bab70126286f8184dc88f7968ffc4028f813161fb073ec90d171f7de3c8
365
359
  faraday (2.14.0) sha256=8699cfe5d97e55268f2596f9a9d5a43736808a943714e3d9a53e6110593941cd
@@ -368,17 +362,13 @@ CHECKSUMS
368
362
  faraday-retry (2.3.2) sha256=2402d2029032ebd238a2046221e67f6ef0da78c5a8ce8cd4f8b9c62e4d6451d1
369
363
  fast-mcp (1.6.0) sha256=d68abb45d2daab9e7ae2934417460e4bf9ac87493c585dc5bb626f1afb7d12c4
370
364
  globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11
371
- htm (0.0.16)
365
+ htm (0.0.18)
372
366
  i18n (1.14.7) sha256=ceba573f8138ff2c0915427f1fc5bdf4aa3ab8ae88c8ce255eb3ecf0a11a5d0f
373
- io-console (0.8.1) sha256=1e15440a6b2f67b6ea496df7c474ed62c860ad11237f29b3bd187f054b925fcb
374
- irb (1.15.3) sha256=4349edff1efa7ff7bfd34cb9df74a133a588ba88c2718098b3b4468b81184aaa
375
- json (2.17.1) sha256=e0e4824541336a44915436f53e7ea74c687314fb8f88080fa1456f6a34ead92e
376
- kaminari (1.2.2) sha256=c4076ff9adccc6109408333f87b5c4abbda5e39dc464bd4c66d06d9f73442a3e
377
- kaminari-actionview (1.2.2) sha256=1330f6fc8b59a4a4ef6a549ff8a224797289ebf7a3a503e8c1652535287cc909
378
- kaminari-activerecord (1.2.2) sha256=0dd3a67bab356a356f36b3b7236bcb81cef313095365befe8e98057dd2472430
379
- kaminari-core (1.2.2) sha256=3bd26fec7370645af40ca73b9426a448d09b8a8ba7afa9ba3c3e0d39cdbb83ff
367
+ io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
368
+ irb (1.16.0) sha256=2abe56c9ac947cdcb2f150572904ba798c1e93c890c256f8429981a7675b0806
369
+ json (2.18.0) sha256=b10506aee4183f5cf49e0efc48073d7b75843ce3782c68dbeb763351c08fd505
380
370
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
381
- loofah (2.24.1) sha256=655a30842b70ec476410b347ab1cd2a5b92da46a19044357bbd9f401b009a337
371
+ loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6
382
372
  lru_redux (1.1.0) sha256=ee71d0ccab164c51de146c27b480a68b3631d5b4297b8ffe8eda1c72de87affb
383
373
  mail (2.9.0) sha256=6fa6673ecd71c60c2d996260f9ee3dd387d4673b8169b502134659ece6d34941
384
374
  marcel (1.1.0) sha256=fdcfcfa33cc52e93c4308d40e4090a5d4ea279e160a7f6af988260fa970e0bee
@@ -386,11 +376,11 @@ CHECKSUMS
386
376
  mime-types-data (3.2025.0924) sha256=f276bca15e59f35767cbcf2bc10e023e9200b30bd6a572c1daf7f4cc24994728
387
377
  mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef
388
378
  mini_portile2 (2.8.9) sha256=0cd7c7f824e010c072e33f68bc02d85a00aeb6fce05bb4819c03dfd3c140c289
389
- minitest (5.26.2) sha256=f021118a6185b9ba9f5af71f2ba103ad770c75afde9f2ab8da512677c550cde3
379
+ minitest (6.0.0) sha256=4ca597fc1d735ea18d2b4b98c5fb1d5a6da4a6f35ddf32bd5fa3eded33a453be
390
380
  multipart-post (2.4.1) sha256=9872d03a8e552020ca096adadbf5e3cb1cd1cdd6acd3c161136b8a5737cdb4a8
391
381
  neighbor (0.6.0) sha256=e2bd0bb98e1d6403892d1d0cf3683ae9429be51d6a6a14859135dc71cf9c27d3
392
- net-http (0.8.0) sha256=df42c47ce9f9e95ad32a317c97c12f945bc1af365288837ea4ff259876ecb46d
393
- net-imap (0.5.12) sha256=cb8cd05bd353fcc19b6cbc530a9cb06b577a969ea10b7ddb0f37787f74be4444
382
+ net-http (0.9.1) sha256=25ba0b67c63e89df626ed8fac771d0ad24ad151a858af2cc8e6a716ca4336996
383
+ net-imap (0.6.2) sha256=08caacad486853c61676cca0c0c47df93db02abc4a8239a8b67eb0981428acc6
394
384
  net-pop (0.1.2) sha256=848b4e982013c15b2f0382792268763b748cce91c9e91e36b0f27ed26420dff3
395
385
  net-protocol (0.2.2) sha256=aa73e0cba6a125369de9837b8d8ef82a61849360eba0521900e2c3713aa162a8
396
386
  net-smtp (0.5.1) sha256=ed96a0af63c524fceb4b29b0d352195c30d82dd916a42f03c62a3a70e5b70736
@@ -399,8 +389,9 @@ CHECKSUMS
399
389
  pg (1.6.2) sha256=58614afd405cc9c2c9e15bffe8432e0d6cfc58b722344ad4a47c73a85189c875
400
390
  pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6
401
391
  prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
392
+ prism (1.7.0) sha256=10062f734bf7985c8424c44fac382ac04a58124ea3d220ec3ba9fe4f2da65103
402
393
  propshaft (1.3.1) sha256=9acc664ef67e819ffa3d95bd7ad4c3623ea799110c5f4dee67fa7e583e74c392
403
- psych (5.2.6) sha256=814328aa5dcb6d604d32126a20bc1cbcf05521a5b49dbb1a8b30a07e580f316e
394
+ psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974
404
395
  public_suffix (7.0.0) sha256=f7090b5beb0e56f9f10d79eed4d5fbe551b3b425da65877e075dad47a6a1b095
405
396
  puma (6.6.1) sha256=b9b56e4a4ea75d1bfa6d9e1972ee2c9f43d0883f011826d914e8e37b3694ea1e
406
397
  racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
@@ -414,17 +405,18 @@ CHECKSUMS
414
405
  railties (7.2.3) sha256=6eb010a6bfe6f223e783f739ddfcbdb5b88b1f3a87f7739f0a0685e466250422
415
406
  rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
416
407
  rake-compiler-dock (1.10.0) sha256=dd62ee19df2a185a3315697e560cfa8cc9129901332152851e023fab0e94bf11
417
- rb_sys (0.9.119) sha256=64393fa148e402e1b79b64496d2aabfc7df79da6b822b8bb48dc1141eaf40b4b
418
- rdoc (6.16.1) sha256=71357cc208e6da77ba0c4494e01ae870dd18b437c7c7d801dd73ee2f340b9f5c
408
+ rb_sys (0.9.123) sha256=c22ae84d1bca3eec0f13a45ae4ca9ba6eace93d5be270a40a9c0a9a5b92a34e5
409
+ rdoc (7.0.1) sha256=7ae1540c54eb8174f6549440dd2299276eac51deaa7d80ea7db9ea5b96559f53
419
410
  reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
411
+ ruby-next-core (1.1.2) sha256=1b095fe2e45929f2581b3ecdb8d92b601ce4d72c12a466057c10e23b6f0c4512
420
412
  ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
421
413
  ruby_llm (1.9.1) sha256=f7d3c72489c70041ee73d7bfe4250a989f801fbba1fad2200904091e433ba511
422
414
  ruby_llm-schema (0.2.5) sha256=b08cd42e8de7100325e2e868672a56f1915eb23692bb808f51f214e41392104f
423
415
  securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
424
- stringio (3.1.9) sha256=c111af13d3a73eab96a3bc2655ecf93788d13d28cb8e25c1dcbff89ace885121
416
+ stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
425
417
  thor (1.4.0) sha256=8763e822ccb0f1d7bee88cde131b19a65606657b847cc7b7b4b82e772bcd8a3d
426
- tiktoken_ruby (0.0.13) sha256=24586eeb6644f27b98a9d54de5ec581ab6d9eea16fc0871a4d9fbe03b6725455
427
- timeout (0.4.4) sha256=f0f6f970104b82427cd990680f539b6bbb8b1e55efa913a55c6492935e4e0edb
418
+ tiktoken_ruby (0.0.14.1) sha256=cff8ecf6e8a7b9e854027812b01e55c35f5f7719182c3589655008d0eeb51db1
419
+ timeout (0.6.0) sha256=6d722ad619f96ee383a0c557ec6eb8c4ecb08af3af62098a0be5057bf00de1af
428
420
  tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
429
421
  tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
430
422
  uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
@@ -432,7 +424,7 @@ CHECKSUMS
432
424
  web-console (4.2.1) sha256=e7bcf37a10ea2b4ec4281649d1cee461b32232d0a447e82c786e6841fd22fe20
433
425
  websocket-driver (0.8.0) sha256=ed0dba4b943c22f17f9a734817e808bc84cdce6a7e22045f5315aa57676d4962
434
426
  websocket-extensions (0.1.5) sha256=1c6ba63092cda343eb53fc657110c71c754c56484aad42578495227d717a8241
435
- zeitwerk (2.7.3) sha256=b2e86b4a9b57d26ba68a15230dcc7fe6f040f06831ce64417b0621ad96ba3e85
427
+ zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b
436
428
 
437
429
  BUNDLED WITH
438
- 4.0.0
430
+ 4.0.2
@@ -25,7 +25,7 @@ A full-stack Rails application demonstrating HTM integration with a compelling U
25
25
  bundle install
26
26
 
27
27
  # Ensure HTM database is set up
28
- export HTM_DBURL="postgresql://localhost/htm_development"
28
+ export HTM_DATABASE__URL="postgresql://localhost/htm_development"
29
29
 
30
30
  # Install Tailwind CSS
31
31
  rails tailwindcss:install
@@ -13,7 +13,7 @@
13
13
  # 4. Dynamic scaling by spawning new processes
14
14
  #
15
15
  # Prerequisites:
16
- # 1. Set HTM_DBURL environment variable
16
+ # 1. Set HTM_DATABASE__URL environment variable
17
17
  # 2. Initialize database schema: rake db_setup
18
18
 
19
19
  require_relative '../../lib/htm'
@@ -36,7 +36,7 @@ class RobotProcess
36
36
 
37
37
  # Spawn the worker process
38
38
  @stdin, @stdout, @stderr, @wait_thread = Open3.popen3(
39
- { 'HTM_DBURL' => ENV['HTM_DBURL'] },
39
+ { 'HTM_DATABASE__URL' => ENV['HTM_DATABASE__URL'] },
40
40
  'ruby', WORKER_SCRIPT, name, group_name
41
41
  )
42
42
  @pid = @wait_thread.pid
@@ -119,9 +119,9 @@ def run_demo
119
119
 
120
120
  BANNER
121
121
 
122
- unless ENV['HTM_DBURL']
123
- puts 'ERROR: HTM_DBURL not set.'
124
- puts ' export HTM_DBURL="postgresql://user@localhost:5432/htm_development"'
122
+ unless ENV['HTM_DATABASE__URL']
123
+ puts 'ERROR: HTM_DATABASE__URL not set.'
124
+ puts ' export HTM_DATABASE__URL="postgresql://user@localhost:5432/htm_development"'
125
125
  exit 1
126
126
  end
127
127
 
@@ -37,11 +37,11 @@ end
37
37
 
38
38
  # Configure HTM with logger to stderr (keep stdout clean for JSON)
39
39
  HTM.configure do |config|
40
- config.embedding_provider = :ollama
41
- config.embedding_model = 'nomic-embed-text:latest'
42
- config.embedding_dimensions = 768
43
- config.tag_provider = :ollama
44
- config.tag_model = 'gemma3:latest'
40
+ config.embedding.provider = :ollama
41
+ config.embedding.model = 'nomic-embed-text:latest'
42
+ config.embedding.dimensions = 768
43
+ config.tag.provider = :ollama
44
+ config.tag.model = 'gemma3:latest'
45
45
  config.logger = Logger.new($stderr, level: Logger::WARN)
46
46
  end
47
47
 
@@ -19,7 +19,7 @@
19
19
  # synchronization of in-memory working memory across robots.
20
20
  #
21
21
  # Prerequisites:
22
- # 1. Set HTM_DBURL environment variable
22
+ # 1. Set HTM_DATABASE__URL environment variable
23
23
  # 2. Initialize database schema: rake db_setup
24
24
  # 3. Install dependencies: bundle install
25
25
 
@@ -33,9 +33,9 @@ require 'json'
33
33
  puts 'HTM Robot Group Demo - Shared Working Memory & Failover'
34
34
  puts '=' * 60
35
35
 
36
- unless ENV['HTM_DBURL']
37
- puts 'ERROR: HTM_DBURL not set. Please set it:'
38
- puts ' export HTM_DBURL="postgresql://postgres@localhost:5432/htm_development"'
36
+ unless ENV['HTM_DATABASE__URL']
37
+ puts 'ERROR: HTM_DATABASE__URL not set. Please set it:'
38
+ puts ' export HTM_DATABASE__URL="postgresql://postgres@localhost:5432/htm_development"'
39
39
  exit 1
40
40
  end
41
41
 
@@ -43,11 +43,11 @@ begin
43
43
  # Configure HTM
44
44
  puts "\n1. Configuring HTM..."
45
45
  HTM.configure do |config|
46
- config.embedding_provider = :ollama
47
- config.embedding_model = 'nomic-embed-text:latest'
48
- config.embedding_dimensions = 768
49
- config.tag_provider = :ollama
50
- config.tag_model = 'gemma3:latest'
46
+ config.embedding.provider = :ollama
47
+ config.embedding.model = 'nomic-embed-text:latest'
48
+ config.embedding.dimensions = 768
49
+ config.tag.provider = :ollama
50
+ config.tag.model = 'gemma3:latest'
51
51
  end
52
52
  puts '✓ HTM configured'
53
53
 
@@ -14,7 +14,7 @@
14
14
  # bundle exec ruby app.rb
15
15
  #
16
16
  # Environment:
17
- # HTM_DBURL - PostgreSQL connection URL (required)
17
+ # HTM_DATABASE__URL - PostgreSQL connection URL (required)
18
18
  # REDIS_URL - Redis connection URL (for Sidekiq, default: redis://localhost:6379/0)
19
19
  # OLLAMA_URL - Ollama server URL (default: http://localhost:11434)
20
20
  #
@@ -4,7 +4,7 @@
4
4
  # Timeframe Demo - Demonstrates the various ways to use timeframes with recall
5
5
  #
6
6
  # Run with:
7
- # HTM_DBURL="postgresql://localhost/htm_development" ruby examples/timeframe_demo.rb
7
+ # HTM_DATABASE__URL="postgresql://localhost/htm_development" ruby examples/timeframe_demo.rb
8
8
 
9
9
  require_relative "../lib/htm"
10
10
 
@@ -3,14 +3,17 @@
3
3
  require 'active_record'
4
4
  require 'pg'
5
5
  require 'neighbor'
6
- require 'erb'
7
- require 'yaml'
8
6
 
9
7
  class HTM
10
8
  # ActiveRecord database configuration and model loading
9
+ #
10
+ # Uses HTM::Config for database settings. Configuration can come from:
11
+ # - Environment variables (HTM_DATABASE__URL, HTM_DATABASE__HOST, etc.)
12
+ # - Programmatic configuration via HTM.configure
13
+ #
11
14
  class ActiveRecordConfig
12
15
  class << self
13
- # Establish database connection from config/database.yml
16
+ # Establish database connection from HTM::Config
14
17
  def establish_connection!
15
18
  config = load_database_config
16
19
 
@@ -25,27 +28,12 @@ class HTM
25
28
  true
26
29
  end
27
30
 
28
- # Load and parse database configuration from YAML with ERB
31
+ # Load database configuration from HTM::Config
32
+ #
33
+ # @return [Hash] ActiveRecord-compatible configuration hash
34
+ #
29
35
  def load_database_config
30
- config_path = File.expand_path('../../config/database.yml', __dir__)
31
-
32
- unless File.exist?(config_path)
33
- raise "Database configuration file not found at #{config_path}"
34
- end
35
-
36
- # Read and parse ERB
37
- erb_content = ERB.new(File.read(config_path)).result
38
- db_config = YAML.safe_load(erb_content, aliases: true)
39
-
40
- # Get configuration for current environment
41
- config = db_config[HTM.env]
42
-
43
- unless config
44
- raise "No database configuration found for environment: #{HTM.env}"
45
- end
46
-
47
- # Convert string keys to symbols for ActiveRecord
48
- config.transform_keys(&:to_sym)
36
+ HTM.config.database_config
49
37
  end
50
38
 
51
39
  # Check if connection is established and active
@@ -56,8 +44,7 @@ class HTM
56
44
  ActiveRecord::Base.connected? && ActiveRecord::Base.connection.active?
57
45
  rescue ActiveRecord::ConnectionNotDefined, ActiveRecord::ConnectionNotEstablished
58
46
  false
59
- rescue StandardError => e
60
- HTM.logger.debug "Connection check failed: #{e.class} - #{e.message}"
47
+ rescue StandardError
61
48
  false
62
49
  end
63
50
 
@@ -73,8 +73,6 @@ class HTM
73
73
  HTM.logger.warn "CircuitBreaker[#{@name}]: Circuit is OPEN, failing fast"
74
74
  raise CircuitBreakerOpenError, "Circuit breaker '#{@name}' is open. Service unavailable."
75
75
  end
76
- when :half_open
77
- HTM.logger.debug "CircuitBreaker[#{@name}]: Circuit is HALF-OPEN, testing service"
78
76
  end
79
77
  end
80
78