pigeonhole-db 1.1.0

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 (1256) hide show
  1. checksums.yaml +7 -0
  2. data/Cargo.lock +899 -0
  3. data/Cargo.toml +45 -0
  4. data/LICENSE +21 -0
  5. data/README.md +22 -0
  6. data/extconf.rb +12 -0
  7. data/lib/pigeonhole/api.rb +615 -0
  8. data/lib/pigeonhole/index.rb +208 -0
  9. data/lib/pigeonhole/memory.rb +507 -0
  10. data/lib/pigeonhole/version.rb +6 -0
  11. data/lib/pigeonhole-db.rb +6 -0
  12. data/lib/pigeonhole.rb +47 -0
  13. data/sig/pigeonhole.rbs +1484 -0
  14. data/src/budget.rs +205 -0
  15. data/src/classes.rs +279 -0
  16. data/src/convert.rs +192 -0
  17. data/src/db.rs +685 -0
  18. data/src/error.rs +151 -0
  19. data/src/feed.rs +316 -0
  20. data/src/fork.rs +64 -0
  21. data/src/gvl.rs +112 -0
  22. data/src/index.rs +1157 -0
  23. data/src/lib.rs +534 -0
  24. data/src/memory.rs +2178 -0
  25. data/src/read.rs +312 -0
  26. data/src/table.rs +1161 -0
  27. data/src/vector.rs +262 -0
  28. data/src/walk.rs +406 -0
  29. data/vendor/bundle/ruby/3.4.0/bin/minitest +29 -0
  30. data/vendor/bundle/ruby/3.4.0/bin/rake +29 -0
  31. data/vendor/bundle/ruby/3.4.0/bin/rake-compiler +29 -0
  32. data/vendor/bundle/ruby/3.4.0/bin/rake-compiler-dock +29 -0
  33. data/vendor/bundle/ruby/3.4.0/bin/rb-sys-dock +29 -0
  34. data/vendor/bundle/ruby/3.4.0/bin/rbs +29 -0
  35. data/vendor/bundle/ruby/3.4.0/cache/drb-2.2.3.gem +0 -0
  36. data/vendor/bundle/ruby/3.4.0/cache/logger-1.7.0.gem +0 -0
  37. data/vendor/bundle/ruby/3.4.0/cache/minitest-6.0.6.gem +0 -0
  38. data/vendor/bundle/ruby/3.4.0/cache/prism-1.9.0.gem +0 -0
  39. data/vendor/bundle/ruby/3.4.0/cache/rake-13.4.2.gem +0 -0
  40. data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-1.3.2.gem +0 -0
  41. data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-dock-1.12.0.gem +0 -0
  42. data/vendor/bundle/ruby/3.4.0/cache/rb_sys-0.9.130.gem +0 -0
  43. data/vendor/bundle/ruby/3.4.0/cache/rbs-4.2.0.gem +0 -0
  44. data/vendor/bundle/ruby/3.4.0/cache/toml-rb-6.0.0.gem +0 -0
  45. data/vendor/bundle/ruby/3.4.0/cache/tsort-0.2.0.gem +0 -0
  46. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem.build_complete +0 -0
  47. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem_make.out +44 -0
  48. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/mkmf.log +74 -0
  49. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/prism/prism.so +0 -0
  50. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem.build_complete +0 -0
  51. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem_make.out +41 -0
  52. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/mkmf.log +102 -0
  53. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/rbs_extension.so +0 -0
  54. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/LICENSE.txt +22 -0
  55. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/drb.gemspec +42 -0
  56. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/acl.rb +239 -0
  57. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/drb.rb +1993 -0
  58. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/eq.rb +15 -0
  59. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extserv.rb +44 -0
  60. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extservm.rb +94 -0
  61. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/gw.rb +161 -0
  62. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/observer.rb +26 -0
  63. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/ssl.rb +354 -0
  64. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/timeridconv.rb +97 -0
  65. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/unix.rb +118 -0
  66. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/version.rb +3 -0
  67. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/weakidconv.rb +31 -0
  68. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb.rb +3 -0
  69. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/BSDL +22 -0
  70. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/COPYING +56 -0
  71. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/README.md +104 -0
  72. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/errors.rb +9 -0
  73. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/formatter.rb +36 -0
  74. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/log_device.rb +265 -0
  75. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/period.rb +47 -0
  76. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/severity.rb +38 -0
  77. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/version.rb +5 -0
  78. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger.rb +789 -0
  79. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/History.rdoc +1860 -0
  80. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Manifest.txt +41 -0
  81. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/README.rdoc +763 -0
  82. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Rakefile +89 -0
  83. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/bin/minitest +5 -0
  84. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/design_rationale.rb +54 -0
  85. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/hoe/minitest.rb +30 -0
  86. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/assertions.rb +821 -0
  87. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/autorun.rb +5 -0
  88. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/benchmark.rb +452 -0
  89. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/bisect.rb +304 -0
  90. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/complete.rb +56 -0
  91. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/compress.rb +94 -0
  92. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/error_on_warning.rb +11 -0
  93. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/expectations.rb +321 -0
  94. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/find_minimal_combination.rb +127 -0
  95. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/hell.rb +11 -0
  96. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/manual_plugins.rb +4 -0
  97. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/parallel.rb +72 -0
  98. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/path_expander.rb +432 -0
  99. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride.rb +4 -0
  100. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride_plugin.rb +135 -0
  101. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server.rb +49 -0
  102. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server_plugin.rb +88 -0
  103. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/spec.rb +324 -0
  104. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint.rb +105 -0
  105. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint_plugin.rb +39 -0
  106. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test.rb +232 -0
  107. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test_task.rb +331 -0
  108. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest.rb +1232 -0
  109. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/metametameta.rb +150 -0
  110. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_bisect.rb +249 -0
  111. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_find_minimal_combination.rb +138 -0
  112. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_assertions.rb +1729 -0
  113. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_benchmark.rb +151 -0
  114. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_reporter.rb +437 -0
  115. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_spec.rb +1095 -0
  116. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test.rb +1295 -0
  117. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test_task.rb +57 -0
  118. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_path_expander.rb +229 -0
  119. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_server.rb +146 -0
  120. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/BSDmakefile +58 -0
  121. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CHANGELOG.md +786 -0
  122. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CODE_OF_CONDUCT.md +76 -0
  123. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CONTRIBUTING.md +58 -0
  124. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/LICENSE.md +7 -0
  125. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/Makefile +116 -0
  126. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/README.md +143 -0
  127. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/config.yml +4739 -0
  128. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/build_system.md +119 -0
  129. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/configuration.md +68 -0
  130. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/cruby_compilation.md +27 -0
  131. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/design.md +53 -0
  132. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/encoding.md +121 -0
  133. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/fuzzing.md +88 -0
  134. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/heredocs.md +36 -0
  135. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/javascript.md +118 -0
  136. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/local_variable_depth.md +229 -0
  137. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/mapping.md +117 -0
  138. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parser_translation.md +24 -0
  139. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parsing_rules.md +22 -0
  140. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/releasing.md +75 -0
  141. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/relocation.md +34 -0
  142. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ripper_translation.md +63 -0
  143. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_api.md +45 -0
  144. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_parser_translation.md +19 -0
  145. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/serialization.md +233 -0
  146. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/testing.md +55 -0
  147. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/Makefile +273 -0
  148. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_node.c +6945 -0
  149. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_pack.c +276 -0
  150. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extconf.rb +127 -0
  151. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.c +1427 -0
  152. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.h +19 -0
  153. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/ast.h +8254 -0
  154. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/defines.h +260 -0
  155. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/diagnostic.h +458 -0
  156. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/encoding.h +283 -0
  157. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/node.h +129 -0
  158. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/options.h +488 -0
  159. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/pack.h +163 -0
  160. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/parser.h +936 -0
  161. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/prettyprint.h +34 -0
  162. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/regexp.h +43 -0
  163. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/static_literals.h +121 -0
  164. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +236 -0
  165. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_char.h +204 -0
  166. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +218 -0
  167. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +130 -0
  168. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_list.h +103 -0
  169. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +29 -0
  170. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +113 -0
  171. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_string.h +200 -0
  172. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +32 -0
  173. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +46 -0
  174. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/version.h +29 -0
  175. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism.h +408 -0
  176. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/compiler.rb +801 -0
  177. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +392 -0
  178. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +2210 -0
  179. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +4767 -0
  180. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dsl.rb +1003 -0
  181. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/ffi.rb +578 -0
  182. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +2393 -0
  183. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +911 -0
  184. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +772 -0
  185. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node.rb +19966 -0
  186. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node_ext.rb +511 -0
  187. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pack.rb +230 -0
  188. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +188 -0
  189. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +66 -0
  190. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +155 -0
  191. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result.rb +907 -0
  192. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pattern.rb +269 -0
  193. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +15 -0
  194. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +13 -0
  195. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +14 -0
  196. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +14 -0
  197. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +36 -0
  198. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
  199. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/reflection.rb +416 -0
  200. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/relocation.rb +505 -0
  201. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/serialize.rb +2400 -0
  202. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/string_query.rb +31 -0
  203. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +62 -0
  204. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +2234 -0
  205. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +820 -0
  206. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +376 -0
  207. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +26 -0
  208. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +36 -0
  209. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +53 -0
  210. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +135 -0
  211. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +126 -0
  212. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +5 -0
  213. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +3520 -0
  214. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +1964 -0
  215. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation.rb +18 -0
  216. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/visitor.rb +813 -0
  217. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism.rb +98 -0
  218. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/prism.gemspec +172 -0
  219. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +12 -0
  220. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +524 -0
  221. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +12 -0
  222. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node.rbi +8750 -0
  223. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +107 -0
  224. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +404 -0
  225. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +58 -0
  226. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +12 -0
  227. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +11 -0
  228. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +23 -0
  229. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +15 -0
  230. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +473 -0
  231. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism.rbi +63 -0
  232. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/compiler.rbs +9 -0
  233. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +19 -0
  234. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +6 -0
  235. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dsl.rbs +351 -0
  236. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +22 -0
  237. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +10 -0
  238. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +159 -0
  239. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node.rbs +4042 -0
  240. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +149 -0
  241. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pack.rbs +43 -0
  242. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +38 -0
  243. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +197 -0
  244. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pattern.rbs +13 -0
  245. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/reflection.rbs +50 -0
  246. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/relocation.rbs +185 -0
  247. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/serialize.rbs +8 -0
  248. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/string_query.rbs +11 -0
  249. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/visitor.rbs +169 -0
  250. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism.rbs +272 -0
  251. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/diagnostic.c +854 -0
  252. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/encoding.c +5340 -0
  253. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/node.c +8685 -0
  254. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/options.c +338 -0
  255. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/pack.c +509 -0
  256. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prettyprint.c +8957 -0
  257. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prism.c +22679 -0
  258. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/regexp.c +790 -0
  259. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/serialize.c +2274 -0
  260. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/static_literals.c +617 -0
  261. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/token_type.c +703 -0
  262. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_buffer.c +357 -0
  263. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_char.c +318 -0
  264. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +342 -0
  265. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_integer.c +670 -0
  266. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_list.c +49 -0
  267. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_memchr.c +35 -0
  268. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_newline_list.c +125 -0
  269. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_string.c +381 -0
  270. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +36 -0
  271. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +206 -0
  272. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/History.rdoc +2454 -0
  273. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
  274. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/README.rdoc +155 -0
  275. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
  276. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
  277. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
  278. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/a.c +6 -0
  279. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/b.c +6 -0
  280. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/main.c +11 -0
  281. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
  282. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
  283. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
  284. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rake.1 +156 -0
  285. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
  286. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
  287. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/exe/rake +27 -0
  288. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
  289. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
  290. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
  291. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
  292. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
  293. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
  294. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
  295. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
  296. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
  297. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
  298. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
  299. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
  300. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
  301. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
  302. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
  303. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
  304. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
  305. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
  306. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
  307. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
  308. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
  309. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
  310. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
  311. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
  312. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
  313. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
  314. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
  315. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
  316. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
  317. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
  318. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  319. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
  320. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
  321. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
  322. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
  323. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
  324. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
  325. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
  326. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
  327. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
  328. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
  329. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
  330. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
  331. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake.rb +69 -0
  332. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/rake.gemspec +102 -0
  333. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Gemfile +8 -0
  334. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/History.md +708 -0
  335. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/LICENSE.txt +20 -0
  336. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/README.md +505 -0
  337. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Rakefile +15 -0
  338. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/appveyor.yml +22 -0
  339. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/bin/rake-compiler +24 -0
  340. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/cucumber.yml +4 -0
  341. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/compile.feature +79 -0
  342. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-compile.feature +23 -0
  343. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package-multi.feature +15 -0
  344. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package.feature +14 -0
  345. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-compile.feature +22 -0
  346. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-no-native-compile.feature +33 -0
  347. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-package.feature +24 -0
  348. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/package.feature +40 -0
  349. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/compilation.rb +70 -0
  350. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/cross_compilation.rb +27 -0
  351. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/execution.rb +52 -0
  352. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/folders.rb +32 -0
  353. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/gem.rb +46 -0
  354. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/java_compilation.rb +7 -0
  355. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/env.rb +10 -0
  356. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/file_template_helpers.rb +137 -0
  357. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/generator_helpers.rb +123 -0
  358. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/platform_extension_helpers.rb +27 -0
  359. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/baseextensiontask.rb +90 -0
  360. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/compiler_config.rb +38 -0
  361. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensioncompiler.rb +51 -0
  362. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensiontask.rb +621 -0
  363. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/javaextensiontask.rb +321 -0
  364. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bin/cross-ruby.rake +189 -0
  365. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bootstrap.rake +11 -0
  366. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/common.rake +10 -0
  367. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/cucumber.rake +23 -0
  368. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/gem.rake +15 -0
  369. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/rspec.rake +9 -0
  370. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
  371. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
  372. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
  373. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
  374. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
  375. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
  376. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
  377. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
  378. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
  379. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
  380. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
  381. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
  382. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
  383. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
  384. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
  385. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
  386. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0004-Enable-build-of-static-libruby.patch +38 -0
  387. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0005-build-miniruby-first.patch +16 -0
  388. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0006-ruby-4-rubyspec-capiext.patch +16 -0
  389. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
  390. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
  391. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
  392. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
  393. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
  394. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
  395. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
  396. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
  397. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
  398. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
  399. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
  400. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
  401. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
  402. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
  403. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
  404. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
  405. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
  406. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
  407. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
  408. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
  409. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
  410. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
  411. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
  412. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
  413. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
  414. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
  415. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.c +65 -0
  416. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.h +11 -0
  417. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
  418. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
  419. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
  420. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
  421. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
  422. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
  423. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
  424. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
  425. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
  426. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-APACHE +190 -0
  427. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-MIT +21 -0
  428. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/README.md +42 -0
  429. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/certs/ianks.pem +21 -0
  430. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/exe/rb-sys-dock +495 -0
  431. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/config.rb +72 -0
  432. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/metadata.rb +158 -0
  433. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo.rb +9 -0
  434. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder/link_flag_converter.rb +37 -0
  435. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder.rb +370 -0
  436. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/error.rb +43 -0
  437. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/extensiontask.rb +188 -0
  438. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf/config.rb +75 -0
  439. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf.rb +413 -0
  440. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info/data.rb +10 -0
  441. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info.rb +82 -0
  442. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/util/logger.rb +73 -0
  443. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/version.rb +5 -0
  444. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys.rb +8 -0
  445. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/BSDL +22 -0
  446. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/CHANGELOG.md +2463 -0
  447. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/COPYING +56 -0
  448. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Dockerfile.jruby +53 -0
  449. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/README.md +240 -0
  450. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Rakefile +1213 -0
  451. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Steepfile +55 -0
  452. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/config.yml +920 -0
  453. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/array.rbs +4205 -0
  454. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/basic_object.rbs +376 -0
  455. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/binding.rbs +148 -0
  456. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/builtin.rbs +278 -0
  457. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/class.rbs +223 -0
  458. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/comparable.rbs +192 -0
  459. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/complex.rbs +812 -0
  460. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/constants.rbs +96 -0
  461. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/data.rbs +415 -0
  462. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/dir.rbs +993 -0
  463. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/encoding.rbs +1368 -0
  464. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerable.rbs +2506 -0
  465. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/arithmetic_sequence.rbs +70 -0
  466. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/product.rbs +92 -0
  467. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator.rbs +705 -0
  468. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/env.rbs +6 -0
  469. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errno.rbs +682 -0
  470. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errors.rbs +789 -0
  471. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/exception.rbs +485 -0
  472. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/false_class.rbs +82 -0
  473. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber.rbs +570 -0
  474. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber_error.rbs +11 -0
  475. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file.rbs +2045 -0
  476. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_constants.rbs +463 -0
  477. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_stat.rbs +534 -0
  478. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_test.rbs +331 -0
  479. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/float.rbs +1292 -0
  480. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/gc.rbs +788 -0
  481. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/global_variables.rbs +184 -0
  482. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/hash.rbs +2183 -0
  483. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/integer.rbs +1374 -0
  484. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/buffer.rbs +995 -0
  485. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/wait.rbs +48 -0
  486. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io.rbs +3473 -0
  487. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/kernel.rbs +3172 -0
  488. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/marshal.rbs +207 -0
  489. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/match_data.rbs +637 -0
  490. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/math.rbs +770 -0
  491. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/method.rbs +422 -0
  492. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/module.rbs +1856 -0
  493. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/nil_class.rbs +210 -0
  494. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/numeric.rbs +832 -0
  495. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object.rbs +108 -0
  496. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space/weak_key_map.rbs +166 -0
  497. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space.rbs +197 -0
  498. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/pathname.rbs +1312 -0
  499. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/proc.rbs +905 -0
  500. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/process.rbs +2316 -0
  501. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ractor.rbs +914 -0
  502. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/random.rbs +255 -0
  503. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/range.rbs +1209 -0
  504. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rational.rbs +502 -0
  505. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rb_config.rbs +88 -0
  506. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/ops.rbs +154 -0
  507. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/argf.rbs +1236 -0
  508. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/env_class.rbs +1214 -0
  509. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/main_class.rbs +123 -0
  510. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/random.rbs +186 -0
  511. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/refinement.rbs +59 -0
  512. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/regexp.rbs +1974 -0
  513. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby.rbs +53 -0
  514. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby_vm.rbs +809 -0
  515. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/basic_specification.rbs +6 -0
  516. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/config_file.rbs +38 -0
  517. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/dependency_installer.rbs +6 -0
  518. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/errors.rbs +112 -0
  519. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/installer.rbs +15 -0
  520. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/path_support.rbs +6 -0
  521. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/platform.rbs +7 -0
  522. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/request_set.rbs +49 -0
  523. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/requirement.rbs +138 -0
  524. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/rubygems.rbs +1108 -0
  525. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/source_list.rbs +15 -0
  526. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/specification.rbs +31 -0
  527. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/stream_ui.rbs +5 -0
  528. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/uninstaller.rbs +10 -0
  529. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/version.rbs +133 -0
  530. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/set.rbs +751 -0
  531. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/signal.rbs +110 -0
  532. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/string.rbs +5532 -0
  533. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/struct.rbs +668 -0
  534. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/symbol.rbs +482 -0
  535. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread.rbs +1821 -0
  536. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread_group.rbs +79 -0
  537. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/time.rbs +1793 -0
  538. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/trace_point.rbs +483 -0
  539. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/true_class.rbs +98 -0
  540. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/unbound_method.rbs +337 -0
  541. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/warning.rbs +87 -0
  542. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/CONTRIBUTING.md +107 -0
  543. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/aliases.md +79 -0
  544. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/architecture.md +110 -0
  545. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/collection.md +192 -0
  546. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/config.md +171 -0
  547. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/data_and_struct.md +86 -0
  548. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/encoding.md +56 -0
  549. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/gem.md +56 -0
  550. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/inline.md +634 -0
  551. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rbs_by_example.md +309 -0
  552. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/release.md +303 -0
  553. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/repo.md +125 -0
  554. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rust.md +96 -0
  555. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/sigs.md +167 -0
  556. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/stdlib.md +155 -0
  557. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/syntax.md +952 -0
  558. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/tools.md +17 -0
  559. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/type_fingerprint.md +21 -0
  560. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/wasm_serialization.md +80 -0
  561. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/exe/rbs +7 -0
  562. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/Makefile +273 -0
  563. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.c +1870 -0
  564. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.h +41 -0
  565. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.c +189 -0
  566. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.h +105 -0
  567. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/compat.h +10 -0
  568. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/extconf.rb +40 -0
  569. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.c +299 -0
  570. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.h +82 -0
  571. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/main.c +649 -0
  572. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_extension.h +16 -0
  573. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.c +9 -0
  574. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.h +24 -0
  575. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/goodcheck.yml +91 -0
  576. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/ast.h +1055 -0
  577. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/defines.h +104 -0
  578. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/lexer.h +208 -0
  579. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/location.h +40 -0
  580. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/parser.h +187 -0
  581. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/serialize.h +39 -0
  582. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/string.h +47 -0
  583. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_allocator.h +59 -0
  584. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_assert.h +20 -0
  585. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_buffer.h +83 -0
  586. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_constant_pool.h +155 -0
  587. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_encoding.h +282 -0
  588. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_unescape.h +24 -0
  589. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs.h +14 -0
  590. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ancestor_graph.rb +92 -0
  591. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/annotations.rb +199 -0
  592. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/formatter.rb +82 -0
  593. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  594. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_source.rb +131 -0
  595. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate.rb +8 -0
  596. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/annotation.rb +29 -0
  597. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/comment.rb +29 -0
  598. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/declarations.rb +472 -0
  599. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/directives.rb +49 -0
  600. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/members.rb +451 -0
  601. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/annotations.rb +451 -0
  602. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/comment_block.rb +247 -0
  603. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/declarations.rb +291 -0
  604. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  605. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  606. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/members.rb +762 -0
  607. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/type_param.rb +235 -0
  608. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/visitor.rb +137 -0
  609. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/buffer.rb +189 -0
  610. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/builtin_names.rb +58 -0
  611. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/colored_io.rb +48 -0
  612. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/diff.rb +84 -0
  613. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/validate.rb +294 -0
  614. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli.rb +1253 -0
  615. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/cleaner.rb +38 -0
  616. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile.rb +92 -0
  617. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  618. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config.rb +81 -0
  619. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/installer.rb +32 -0
  620. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/base.rb +14 -0
  621. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/git.rb +265 -0
  622. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/local.rb +81 -0
  623. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/rubygems.rb +48 -0
  624. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/stdlib.rb +50 -0
  625. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources.rb +38 -0
  626. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection.rb +16 -0
  627. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/constant.rb +28 -0
  628. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition.rb +415 -0
  629. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/ancestor_builder.rb +681 -0
  630. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/method_builder.rb +295 -0
  631. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder.rb +1057 -0
  632. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/diff.rb +131 -0
  633. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/class_entry.rb +81 -0
  634. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/module_entry.rb +91 -0
  635. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/use_map.rb +77 -0
  636. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment.rb +1028 -0
  637. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_loader.rb +167 -0
  638. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_walker.rb +155 -0
  639. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/errors.rb +634 -0
  640. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/factory.rb +18 -0
  641. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/file_finder.rb +28 -0
  642. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser/comment_association.rb +117 -0
  643. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser.rb +568 -0
  644. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/location_aux.rb +170 -0
  645. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/locator.rb +247 -0
  646. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/method_type.rb +145 -0
  647. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/namespace.rb +154 -0
  648. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/lex_result.rb +15 -0
  649. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/token.rb +23 -0
  650. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser_aux.rb +144 -0
  651. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/helpers.rb +164 -0
  652. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/node_usage.rb +99 -0
  653. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rb.rb +816 -0
  654. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rbi.rb +793 -0
  655. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/helpers.rb +59 -0
  656. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/reflection.rb +19 -0
  657. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/value_object_generator.rb +278 -0
  658. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime.rb +680 -0
  659. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/repository.rb +127 -0
  660. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/constant_resolver.rb +219 -0
  661. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/type_name_resolver.rb +167 -0
  662. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/rewriter.rb +70 -0
  663. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/sorter.rb +198 -0
  664. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/source.rb +99 -0
  665. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/substitution.rb +83 -0
  666. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/subtractor.rb +204 -0
  667. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/errors.rb +80 -0
  668. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/guaranteed.rb +30 -0
  669. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/hook.rb +212 -0
  670. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/observer.rb +19 -0
  671. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup.rb +84 -0
  672. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup_helper.rb +50 -0
  673. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/tester.rb +167 -0
  674. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/type_check.rb +457 -0
  675. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test.rb +112 -0
  676. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_dependency.rb +100 -0
  677. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_regularity.rb +126 -0
  678. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_name.rb +122 -0
  679. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/types.rb +1646 -0
  680. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/convertibles.rb +177 -0
  681. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/spy.rb +138 -0
  682. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/type_assertions.rb +383 -0
  683. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/with_aliases.rb +145 -0
  684. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test.rb +6 -0
  685. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/validator.rb +186 -0
  686. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/variance_calculator.rb +189 -0
  687. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/vendorer.rb +71 -0
  688. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/version.rb +5 -0
  689. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/deserializer.rb +213 -0
  690. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/location.rb +61 -0
  691. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/parser.rb +174 -0
  692. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/runtime.rb +211 -0
  693. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/serialization_schema.rb +111 -0
  694. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/writer.rb +424 -0
  695. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs.rb +117 -0
  696. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_extension.so +0 -0
  697. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_jars.rb +39 -0
  698. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc/discover.rb +20 -0
  699. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc_plugin/parser.rb +168 -0
  700. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/rbs.gemspec +77 -0
  701. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/annotation.json +14 -0
  702. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/comment.json +26 -0
  703. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/decls.json +326 -0
  704. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/function.json +98 -0
  705. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/location.json +56 -0
  706. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/members.json +266 -0
  707. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/methodType.json +50 -0
  708. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/typeParam.json +52 -0
  709. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/types.json +317 -0
  710. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_builder.rbs +163 -0
  711. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_graph.rbs +60 -0
  712. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/annotations.rbs +102 -0
  713. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/formatter.rbs +24 -0
  714. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_annotater.rbs +85 -0
  715. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_source.rbs +32 -0
  716. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotation.rbs +27 -0
  717. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/annotations.rbs +470 -0
  718. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/comment_block.rbs +127 -0
  719. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/declarations.rbs +158 -0
  720. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  721. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  722. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/members.rbs +198 -0
  723. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/buffer.rbs +108 -0
  724. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/builtin_names.rbs +44 -0
  725. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/colored_io.rbs +15 -0
  726. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/diff.rbs +15 -0
  727. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/validate.rbs +47 -0
  728. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli.rbs +89 -0
  729. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/cleaner.rbs +13 -0
  730. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile.rbs +74 -0
  731. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile_generator.rbs +68 -0
  732. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config.rbs +46 -0
  733. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/installer.rbs +17 -0
  734. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/sources.rbs +214 -0
  735. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection.rbs +4 -0
  736. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/comment.rbs +26 -0
  737. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/constant.rbs +21 -0
  738. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/declarations.rbs +274 -0
  739. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition.rbs +232 -0
  740. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition_builder.rbs +181 -0
  741. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/diff.rbs +28 -0
  742. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/directives.rbs +77 -0
  743. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/class_entry.rbs +56 -0
  744. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/module_entry.rbs +65 -0
  745. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment.rbs +286 -0
  746. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_loader.rbs +111 -0
  747. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_walker.rbs +65 -0
  748. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/errors.rbs +408 -0
  749. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/factory.rbs +5 -0
  750. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/file_finder.rbs +28 -0
  751. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser/comment_association.rbs +71 -0
  752. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser.rbs +126 -0
  753. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/location.rbs +135 -0
  754. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/locator.rbs +56 -0
  755. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/manifest.yaml +5 -0
  756. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/members.rbs +258 -0
  757. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_builder.rbs +89 -0
  758. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_types.rbs +58 -0
  759. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/namespace.rbs +161 -0
  760. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/parser.rbs +164 -0
  761. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/helpers.rbs +29 -0
  762. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/node_usage.rbs +20 -0
  763. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rb.rbs +96 -0
  764. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rbi.rbs +104 -0
  765. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/runtime.rbs +182 -0
  766. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rbs.rbs +21 -0
  767. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rdoc/rbs.rbs +67 -0
  768. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/repository.rbs +85 -0
  769. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/constant_resolver.rbs +92 -0
  770. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/context.rbs +34 -0
  771. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/type_name_resolver.rbs +61 -0
  772. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rewriter.rbs +45 -0
  773. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/bundler.rbs +38 -0
  774. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/enumerable.rbs +5 -0
  775. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/rubygems.rbs +19 -0
  776. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/sorter.rbs +41 -0
  777. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/source.rbs +48 -0
  778. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/substitution.rbs +48 -0
  779. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/subtractor.rbs +37 -0
  780. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/errors.rbs +52 -0
  781. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/guranteed.rbs +9 -0
  782. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/type_check.rbs +19 -0
  783. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test.rbs +82 -0
  784. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_dependency.rbs +53 -0
  785. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_regularity.rbs +98 -0
  786. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_param.rbs +115 -0
  787. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/typename.rbs +89 -0
  788. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/types.rbs +588 -0
  789. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/convertibles.rbs +154 -0
  790. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/spy.rbs +22 -0
  791. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/type_assertions.rbs +211 -0
  792. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/with_aliases.rbs +136 -0
  793. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/use_map.rbs +35 -0
  794. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/util.rbs +9 -0
  795. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/validator.rbs +63 -0
  796. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/variance_calculator.rbs +87 -0
  797. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/vendorer.rbs +51 -0
  798. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/version.rbs +3 -0
  799. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/visitor.rbs +47 -0
  800. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/deserializer.rbs +66 -0
  801. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/serialization_schema.rbs +13 -0
  802. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/writer.rbs +127 -0
  803. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/ast.c +1644 -0
  804. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.c +3223 -0
  805. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.re +187 -0
  806. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexstate.c +222 -0
  807. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/location.c +31 -0
  808. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/parser.c +4318 -0
  809. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/serialize.c +965 -0
  810. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/string.c +41 -0
  811. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_allocator.c +171 -0
  812. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_assert.c +19 -0
  813. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_buffer.c +54 -0
  814. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_constant_pool.c +268 -0
  815. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_encoding.c +21454 -0
  816. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_unescape.c +167 -0
  817. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/abbrev.rbs +66 -0
  818. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/array.rbs +26 -0
  819. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/base64/0/base64.rbs +355 -0
  820. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/benchmark/0/benchmark.rbs +452 -0
  821. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  822. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  823. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  824. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/core.rbs +911 -0
  825. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/manifest.yaml +4 -0
  826. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi-escape/0/escape.rbs +171 -0
  827. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/coverage/0/coverage.rbs +266 -0
  828. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/csv.rbs +3776 -0
  829. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/manifest.yaml +3 -0
  830. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date.rbs +1598 -0
  831. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date_time.rbs +617 -0
  832. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/time.rbs +26 -0
  833. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/dbm/0/dbm.rbs +421 -0
  834. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/delegator.rbs +188 -0
  835. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/kernel.rbs +47 -0
  836. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/simple_delegator.rbs +96 -0
  837. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  838. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/digest/0/digest.rbs +693 -0
  839. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/erb/0/erb.rbs +933 -0
  840. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/etc/0/etc.rbs +884 -0
  841. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/fileutils/0/fileutils.rbs +1753 -0
  842. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/find/0/find.rbs +49 -0
  843. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/forwardable/0/forwardable.rbs +271 -0
  844. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/io-console/0/io-console.rbs +414 -0
  845. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ipaddr/0/ipaddr.rbs +431 -0
  846. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/json/0/json.rbs +1963 -0
  847. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/kconv/0/kconv.rbs +166 -0
  848. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/formatter.rbs +45 -0
  849. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/log_device.rbs +100 -0
  850. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/logger.rbs +796 -0
  851. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/manifest.yaml +2 -0
  852. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/period.rbs +17 -0
  853. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/severity.rbs +34 -0
  854. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/kernel.rbs +42 -0
  855. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  856. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  857. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  858. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  859. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  860. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  861. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  862. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/compress.rbs +13 -0
  863. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  864. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  865. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  866. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/guard.rbs +64 -0
  867. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/mock.rbs +64 -0
  868. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  869. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  870. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  871. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  872. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  873. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  874. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  875. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  876. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  877. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/result.rbs +28 -0
  878. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  879. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/skip.rbs +6 -0
  880. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  881. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  882. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec.rbs +11 -0
  883. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  884. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  885. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  886. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test.rbs +69 -0
  887. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  888. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  889. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  890. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit.rbs +4 -0
  891. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest.rbs +115 -0
  892. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/monitor/0/monitor.rbs +363 -0
  893. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  894. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/manifest.yaml +3 -0
  895. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/net-http.rbs +5580 -0
  896. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/manifest.yaml +2 -0
  897. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  898. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/manifest.yaml +2 -0
  899. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  900. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/nkf/0/nkf.rbs +402 -0
  901. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/objspace/0/objspace.rbs +470 -0
  902. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/observable/0/observable.rbs +217 -0
  903. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/manifest.yaml +4 -0
  904. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/open-uri.rbs +433 -0
  905. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open3/0/open3.rbs +606 -0
  906. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/manifest.yaml +3 -0
  907. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/openssl.rbs +12237 -0
  908. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/optparse/0/optparse.rbs +1734 -0
  909. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pathname/0/pathname.rbs +36 -0
  910. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/manifest.yaml +2 -0
  911. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/pp.rbs +301 -0
  912. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  913. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pstore/0/pstore.rbs +608 -0
  914. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/core_ext.rbs +12 -0
  915. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/dbm.rbs +237 -0
  916. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/manifest.yaml +3 -0
  917. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/psych.rbs +455 -0
  918. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/store.rbs +57 -0
  919. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pty/0/pty.rbs +240 -0
  920. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  921. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/code_object.rbs +52 -0
  922. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/comment.rbs +61 -0
  923. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/context.rbs +153 -0
  924. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/markup.rbs +117 -0
  925. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/options.rbs +76 -0
  926. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/parser.rbs +56 -0
  927. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/rdoc.rbs +393 -0
  928. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/ri.rbs +17 -0
  929. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/store.rbs +48 -0
  930. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/top_level.rbs +97 -0
  931. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/manifest.yaml +3 -0
  932. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/resolv.rbs +1787 -0
  933. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ripper/0/ripper.rbs +1654 -0
  934. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/manifest.yaml +2 -0
  935. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/securerandom.rbs +49 -0
  936. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/shellwords/0/shellwords.rbs +229 -0
  937. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/singleton/0/singleton.rbs +137 -0
  938. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/addrinfo.rbs +666 -0
  939. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/basic_socket.rbs +590 -0
  940. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/constants.rbs +2295 -0
  941. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/ip_socket.rbs +94 -0
  942. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket.rbs +4170 -0
  943. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket_error.rbs +5 -0
  944. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_server.rbs +192 -0
  945. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_socket.rbs +87 -0
  946. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/udp_socket.rbs +133 -0
  947. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_server.rbs +169 -0
  948. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_socket.rbs +172 -0
  949. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/stringio/0/stringio.rbs +1682 -0
  950. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/strscan/0/string_scanner.rbs +1648 -0
  951. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/manifest.yaml +3 -0
  952. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/tempfile.rbs +483 -0
  953. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/time/0/time.rbs +434 -0
  954. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/timeout/0/timeout.rbs +132 -0
  955. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  956. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/cyclic.rbs +8 -0
  957. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/interfaces.rbs +20 -0
  958. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/tsort.rbs +410 -0
  959. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/common.rbs +621 -0
  960. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/file.rbs +118 -0
  961. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ftp.rbs +13 -0
  962. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/generic.rbs +1111 -0
  963. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/http.rbs +104 -0
  964. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/https.rbs +14 -0
  965. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldap.rbs +230 -0
  966. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldaps.rbs +14 -0
  967. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/mailto.rbs +92 -0
  968. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  969. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  970. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ws.rbs +13 -0
  971. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/wss.rbs +9 -0
  972. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/manifest.yaml +2 -0
  973. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/yaml.rbs +1 -0
  974. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/buf_error.rbs +10 -0
  975. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/data_error.rbs +10 -0
  976. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/deflate.rbs +211 -0
  977. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/error.rbs +20 -0
  978. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  979. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  980. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  981. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  982. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file.rbs +156 -0
  983. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_reader.rbs +293 -0
  984. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_writer.rbs +169 -0
  985. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/inflate.rbs +180 -0
  986. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/mem_error.rbs +10 -0
  987. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/need_dict.rbs +13 -0
  988. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_end.rbs +11 -0
  989. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_error.rbs +11 -0
  990. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/version_error.rbs +11 -0
  991. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zlib.rbs +449 -0
  992. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zstream.rbs +200 -0
  993. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/README.md +109 -0
  994. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/rbs_wasm.c +479 -0
  995. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/LICENSE +19 -0
  996. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/README.md +135 -0
  997. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/datetime.rb +54 -0
  998. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/dumper.rb +182 -0
  999. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/errors.rb +17 -0
  1000. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/inline_table.rb +18 -0
  1001. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/keyvalue.rb +45 -0
  1002. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/parser.rb +296 -0
  1003. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/string.rb +41 -0
  1004. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table.rb +34 -0
  1005. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table_array.rb +43 -0
  1006. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/version.rb +5 -0
  1007. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb.rb +90 -0
  1008. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Gemfile +4 -0
  1009. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/LICENSE.txt +22 -0
  1010. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/README.md +72 -0
  1011. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Rakefile +10 -0
  1012. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/console +14 -0
  1013. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/setup +8 -0
  1014. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb +455 -0
  1015. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/tsort.gemspec +29 -0
  1016. data/vendor/bundle/ruby/3.4.0/specifications/drb-2.2.3.gemspec +22 -0
  1017. data/vendor/bundle/ruby/3.4.0/specifications/logger-1.7.0.gemspec +22 -0
  1018. data/vendor/bundle/ruby/3.4.0/specifications/minitest-6.0.6.gemspec +35 -0
  1019. data/vendor/bundle/ruby/3.4.0/specifications/prism-1.9.0.gemspec +24 -0
  1020. data/vendor/bundle/ruby/3.4.0/specifications/rake-13.4.2.gemspec +26 -0
  1021. data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-1.3.2.gemspec +33 -0
  1022. data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
  1023. data/vendor/bundle/ruby/3.4.0/specifications/rb_sys-0.9.130.gemspec +29 -0
  1024. data/vendor/bundle/ruby/3.4.0/specifications/rbs-4.2.0.gemspec +33 -0
  1025. data/vendor/bundle/ruby/3.4.0/specifications/toml-rb-6.0.0.gemspec +27 -0
  1026. data/vendor/bundle/ruby/3.4.0/specifications/tsort-0.2.0.gemspec +23 -0
  1027. data/vendor/cache/Cargo.toml +21 -0
  1028. data/vendor/cache/LICENSE +21 -0
  1029. data/vendor/cache/README.md +5 -0
  1030. data/vendor/cache/src/hash.rs +85 -0
  1031. data/vendor/cache/src/lib.rs +751 -0
  1032. data/vendor/cache/src/loom_tests.rs +340 -0
  1033. data/vendor/cache/src/s3fifo.rs +648 -0
  1034. data/vendor/cache/src/sync.rs +25 -0
  1035. data/vendor/cache/src/tests.rs +260 -0
  1036. data/vendor/compaction/Cargo.toml +32 -0
  1037. data/vendor/compaction/LICENSE +21 -0
  1038. data/vendor/compaction/README.md +5 -0
  1039. data/vendor/compaction/src/blob.rs +478 -0
  1040. data/vendor/compaction/src/cursor.rs +700 -0
  1041. data/vendor/compaction/src/gc.rs +802 -0
  1042. data/vendor/compaction/src/job.rs +861 -0
  1043. data/vendor/compaction/src/lib.rs +102 -0
  1044. data/vendor/compaction/src/merge.rs +995 -0
  1045. data/vendor/compaction/src/picker.rs +681 -0
  1046. data/vendor/compaction/src/resolver.rs +1346 -0
  1047. data/vendor/engine/Cargo.toml +56 -0
  1048. data/vendor/engine/LICENSE +21 -0
  1049. data/vendor/engine/README.md +5 -0
  1050. data/vendor/engine/src/admission.rs +421 -0
  1051. data/vendor/engine/src/catalog.rs +1233 -0
  1052. data/vendor/engine/src/check.rs +1386 -0
  1053. data/vendor/engine/src/clock.rs +244 -0
  1054. data/vendor/engine/src/clock_loom.rs +482 -0
  1055. data/vendor/engine/src/close_gate.rs +325 -0
  1056. data/vendor/engine/src/compact.rs +1509 -0
  1057. data/vendor/engine/src/engine/hooks.rs +1654 -0
  1058. data/vendor/engine/src/engine/info.rs +229 -0
  1059. data/vendor/engine/src/engine.rs +6114 -0
  1060. data/vendor/engine/src/error.rs +490 -0
  1061. data/vendor/engine/src/feed.rs +960 -0
  1062. data/vendor/engine/src/feed_reader.rs +1600 -0
  1063. data/vendor/engine/src/flush.rs +839 -0
  1064. data/vendor/engine/src/flushed_roots.rs +158 -0
  1065. data/vendor/engine/src/flushed_through_loom.rs +77 -0
  1066. data/vendor/engine/src/health.rs +201 -0
  1067. data/vendor/engine/src/large.rs +372 -0
  1068. data/vendor/engine/src/large_settle.rs +201 -0
  1069. data/vendor/engine/src/lib.rs +112 -0
  1070. data/vendor/engine/src/load_slot.rs +324 -0
  1071. data/vendor/engine/src/maintenance.rs +935 -0
  1072. data/vendor/engine/src/manifest/flight.rs +563 -0
  1073. data/vendor/engine/src/manifest.rs +1516 -0
  1074. data/vendor/engine/src/nonblocking.rs +603 -0
  1075. data/vendor/engine/src/options.rs +334 -0
  1076. data/vendor/engine/src/position.rs +125 -0
  1077. data/vendor/engine/src/purge_guard.rs +220 -0
  1078. data/vendor/engine/src/read/keys.rs +1049 -0
  1079. data/vendor/engine/src/read/knn.rs +423 -0
  1080. data/vendor/engine/src/read/reduce.rs +2057 -0
  1081. data/vendor/engine/src/read/traverse.rs +1013 -0
  1082. data/vendor/engine/src/read.rs +2429 -0
  1083. data/vendor/engine/src/row_cache.rs +1101 -0
  1084. data/vendor/engine/src/shard/tablets.rs +3582 -0
  1085. data/vendor/engine/src/shard.rs +12215 -0
  1086. data/vendor/engine/src/snapshot.rs +1429 -0
  1087. data/vendor/engine/src/source.rs +1379 -0
  1088. data/vendor/engine/src/timer_state.rs +226 -0
  1089. data/vendor/engine/src/waker.rs +124 -0
  1090. data/vendor/engine/src/watermark_waiters.rs +674 -0
  1091. data/vendor/engine/src/write.rs +1321 -0
  1092. data/vendor/format/Cargo.toml +40 -0
  1093. data/vendor/format/LICENSE +21 -0
  1094. data/vendor/format/README.md +5 -0
  1095. data/vendor/format/src/blob.rs +101 -0
  1096. data/vendor/format/src/block.rs +1120 -0
  1097. data/vendor/format/src/bloom.rs +456 -0
  1098. data/vendor/format/src/buckets.rs +552 -0
  1099. data/vendor/format/src/bytes.rs +101 -0
  1100. data/vendor/format/src/checksum.rs +132 -0
  1101. data/vendor/format/src/compress.rs +196 -0
  1102. data/vendor/format/src/cursor.rs +110 -0
  1103. data/vendor/format/src/distance.rs +598 -0
  1104. data/vendor/format/src/error.rs +93 -0
  1105. data/vendor/format/src/exact.rs +602 -0
  1106. data/vendor/format/src/feed.rs +285 -0
  1107. data/vendor/format/src/filter.rs +157 -0
  1108. data/vendor/format/src/half.rs +182 -0
  1109. data/vendor/format/src/hash.rs +127 -0
  1110. data/vendor/format/src/hll.rs +500 -0
  1111. data/vendor/format/src/ids.rs +95 -0
  1112. data/vendor/format/src/key.rs +620 -0
  1113. data/vendor/format/src/kind_params.rs +101 -0
  1114. data/vendor/format/src/lib.rs +54 -0
  1115. data/vendor/format/src/manifest.rs +1287 -0
  1116. data/vendor/format/src/roaring.rs +865 -0
  1117. data/vendor/format/src/scan.rs +297 -0
  1118. data/vendor/format/src/shm.rs +805 -0
  1119. data/vendor/format/src/sst.rs +233 -0
  1120. data/vendor/format/src/superblock.rs +345 -0
  1121. data/vendor/format/src/value.rs +163 -0
  1122. data/vendor/format/src/varint.rs +87 -0
  1123. data/vendor/format/src/vector.rs +936 -0
  1124. data/vendor/format/src/version.rs +92 -0
  1125. data/vendor/format/src/wal.rs +999 -0
  1126. data/vendor/io/Cargo.toml +29 -0
  1127. data/vendor/io/LICENSE +21 -0
  1128. data/vendor/io/README.md +5 -0
  1129. data/vendor/io/src/async_poll.rs +44 -0
  1130. data/vendor/io/src/buf.rs +694 -0
  1131. data/vendor/io/src/completion.rs +444 -0
  1132. data/vendor/io/src/error.rs +110 -0
  1133. data/vendor/io/src/file.rs +206 -0
  1134. data/vendor/io/src/lib.rs +53 -0
  1135. data/vendor/io/src/nowait.rs +256 -0
  1136. data/vendor/io/src/os/mod.rs +149 -0
  1137. data/vendor/io/src/os/unix.rs +897 -0
  1138. data/vendor/io/src/os/windows.rs +552 -0
  1139. data/vendor/io/src/own.rs +257 -0
  1140. data/vendor/io/src/pread.rs +854 -0
  1141. data/vendor/io/src/ring_wake.rs +113 -0
  1142. data/vendor/io/src/shared.rs +410 -0
  1143. data/vendor/io/src/sim.rs +1545 -0
  1144. data/vendor/io/src/sys.rs +214 -0
  1145. data/vendor/io/src/uring.rs +1839 -0
  1146. data/vendor/io/src/vfs.rs +154 -0
  1147. data/vendor/memory/Cargo.toml +34 -0
  1148. data/vendor/memory/LICENSE +21 -0
  1149. data/vendor/memory/README.md +11 -0
  1150. data/vendor/memory/src/consolidate.rs +640 -0
  1151. data/vendor/memory/src/dedup.rs +231 -0
  1152. data/vendor/memory/src/error.rs +131 -0
  1153. data/vendor/memory/src/feed_loop.rs +572 -0
  1154. data/vendor/memory/src/forget.rs +724 -0
  1155. data/vendor/memory/src/hooks.rs +109 -0
  1156. data/vendor/memory/src/ivf.rs +204 -0
  1157. data/vendor/memory/src/layout.rs +340 -0
  1158. data/vendor/memory/src/lib.rs +61 -0
  1159. data/vendor/memory/src/recall.rs +1182 -0
  1160. data/vendor/memory/src/store.rs +1785 -0
  1161. data/vendor/memory/src/watch.rs +339 -0
  1162. data/vendor/memtable/Cargo.toml +24 -0
  1163. data/vendor/memtable/LICENSE +21 -0
  1164. data/vendor/memtable/README.md +5 -0
  1165. data/vendor/memtable/src/lib.rs +1658 -0
  1166. data/vendor/memtable/src/loom_tests.rs +274 -0
  1167. data/vendor/memtable/src/mem.rs +344 -0
  1168. data/vendor/memtable/src/tests.rs +1061 -0
  1169. data/vendor/pager/Cargo.toml +23 -0
  1170. data/vendor/pager/LICENSE +21 -0
  1171. data/vendor/pager/README.md +5 -0
  1172. data/vendor/pager/src/alloc.rs +1008 -0
  1173. data/vendor/pager/src/lib.rs +1710 -0
  1174. data/vendor/pigeonhole/Cargo.toml +42 -0
  1175. data/vendor/pigeonhole/LICENSE +21 -0
  1176. data/vendor/pigeonhole/README.md +99 -0
  1177. data/vendor/pigeonhole/src/cell.rs +829 -0
  1178. data/vendor/pigeonhole/src/check.rs +368 -0
  1179. data/vendor/pigeonhole/src/db.rs +2324 -0
  1180. data/vendor/pigeonhole/src/doc_support.rs +89 -0
  1181. data/vendor/pigeonhole/src/error.rs +257 -0
  1182. data/vendor/pigeonhole/src/feed.rs +696 -0
  1183. data/vendor/pigeonhole/src/info.rs +425 -0
  1184. data/vendor/pigeonhole/src/lib.rs +202 -0
  1185. data/vendor/pigeonhole/src/merge.rs +135 -0
  1186. data/vendor/pigeonhole/src/metrics.rs +476 -0
  1187. data/vendor/pigeonhole/src/nonblocking.rs +666 -0
  1188. data/vendor/pigeonhole/src/options.rs +2075 -0
  1189. data/vendor/pigeonhole/src/read/budget.rs +584 -0
  1190. data/vendor/pigeonhole/src/read.rs +2463 -0
  1191. data/vendor/pigeonhole/src/recovery.rs +876 -0
  1192. data/vendor/pigeonhole/src/retry.rs +358 -0
  1193. data/vendor/pigeonhole/src/set.rs +103 -0
  1194. data/vendor/pigeonhole/src/table.rs +861 -0
  1195. data/vendor/pigeonhole/src/vector.rs +351 -0
  1196. data/vendor/pigeonhole/src/write.rs +2815 -0
  1197. data/vendor/runtime/Cargo.toml +21 -0
  1198. data/vendor/runtime/LICENSE +21 -0
  1199. data/vendor/runtime/README.md +5 -0
  1200. data/vendor/runtime/src/completion.rs +629 -0
  1201. data/vendor/runtime/src/drivers.rs +1175 -0
  1202. data/vendor/runtime/src/lib.rs +1546 -0
  1203. data/vendor/runtime/src/pool.rs +992 -0
  1204. data/vendor/runtime/src/sched.rs +809 -0
  1205. data/vendor/runtime/src/signal.rs +532 -0
  1206. data/vendor/runtime/src/submit_gate.rs +144 -0
  1207. data/vendor/shm/Cargo.toml +24 -0
  1208. data/vendor/shm/LICENSE +21 -0
  1209. data/vendor/shm/README.md +5 -0
  1210. data/vendor/shm/src/lib.rs +427 -0
  1211. data/vendor/shm/src/lock.rs +153 -0
  1212. data/vendor/shm/src/region.rs +1609 -0
  1213. data/vendor/sst/Cargo.toml +26 -0
  1214. data/vendor/sst/LICENSE +21 -0
  1215. data/vendor/sst/README.md +5 -0
  1216. data/vendor/sst/src/blob.rs +380 -0
  1217. data/vendor/sst/src/iter.rs +803 -0
  1218. data/vendor/sst/src/lib.rs +695 -0
  1219. data/vendor/sst/src/reader.rs +814 -0
  1220. data/vendor/sst/src/writer.rs +596 -0
  1221. data/vendor/text/Cargo.toml +26 -0
  1222. data/vendor/text/LICENSE +21 -0
  1223. data/vendor/text/README.md +9 -0
  1224. data/vendor/text/src/error.rs +108 -0
  1225. data/vendor/text/src/fuzzy.rs +265 -0
  1226. data/vendor/text/src/highlight.rs +236 -0
  1227. data/vendor/text/src/index.rs +1152 -0
  1228. data/vendor/text/src/layout.rs +424 -0
  1229. data/vendor/text/src/lib.rs +75 -0
  1230. data/vendor/text/src/maxscore.rs +658 -0
  1231. data/vendor/text/src/query.rs +450 -0
  1232. data/vendor/text/src/search.rs +569 -0
  1233. data/vendor/text/src/sloppy.rs +460 -0
  1234. data/vendor/text/src/tokenizer.rs +163 -0
  1235. data/vendor/vector/Cargo.toml +28 -0
  1236. data/vendor/vector/LICENSE +21 -0
  1237. data/vendor/vector/README.md +9 -0
  1238. data/vendor/vector/src/error.rs +63 -0
  1239. data/vendor/vector/src/half.rs +167 -0
  1240. data/vendor/vector/src/hooks.rs +135 -0
  1241. data/vendor/vector/src/index.rs +2690 -0
  1242. data/vendor/vector/src/layout.rs +102 -0
  1243. data/vendor/vector/src/lib.rs +52 -0
  1244. data/vendor/vector/src/point.rs +500 -0
  1245. data/vendor/vector/src/rebalancer.rs +200 -0
  1246. data/vendor/vector/src/registry.rs +81 -0
  1247. data/vendor/wal/Cargo.toml +25 -0
  1248. data/vendor/wal/LICENSE +21 -0
  1249. data/vendor/wal/README.md +5 -0
  1250. data/vendor/wal/src/feed.rs +610 -0
  1251. data/vendor/wal/src/foreground.rs +122 -0
  1252. data/vendor/wal/src/lib.rs +458 -0
  1253. data/vendor/wal/src/mem.rs +166 -0
  1254. data/vendor/wal/src/recovery.rs +426 -0
  1255. data/vendor/wal/src/stream.rs +2382 -0
  1256. metadata +1310 -0
@@ -0,0 +1,1785 @@
1
+ //! The store (D311 §2, §4, ICR 0107): create and open with the pinned embedding model,
2
+ //! `remember` with exact dedup, `get`, `delete`, `link`, `supersede`, `mark_used`, `verify`.
3
+
4
+ use std::collections::{BTreeMap, BTreeSet};
5
+
6
+ use pigeonhole::{
7
+ Aggregation, Element, Family, Metric, Pigeonhole, PigeonholeReader, ReadTable, RetryPolicy,
8
+ Table, Transaction, VectorSpec,
9
+ };
10
+ use pigeonhole_text::{Index, IndexOptions, Normalization, ReadIndex};
11
+
12
+ use crate::dedup::{DedupPolicy, Near, NearDedup};
13
+ use crate::forget::{ForgetPolicy, Forgetter, Signal, UserToken};
14
+ use crate::ivf::{Ivf, IvfOptions, ivf_name};
15
+ use crate::recall::{Idx, Recall, Rows, Snap};
16
+ use std::sync::atomic::{AtomicBool, Ordering};
17
+ use std::sync::{Arc, Mutex, PoisonError, Weak};
18
+
19
+ use crate::error::{Error, Result, corrupt};
20
+ use crate::layout::*;
21
+
22
+ /// The embedding model a store is pinned to (owner, 2026-11-02; ICR 0107's amendment on
23
+ /// #1251): its id, dimension and element type. Recorded at create; every handle opened for
24
+ /// embeddings names the id, and every embedding is checked against the dimension.
25
+ #[derive(Debug, Clone, PartialEq, Eq)]
26
+ pub struct EmbeddingModel {
27
+ id: String,
28
+ dim: u32,
29
+ element: Element,
30
+ }
31
+
32
+ impl EmbeddingModel {
33
+ /// A model `id` (the name the application knows it by, such as
34
+ /// `"nomic-embed-text-v1.5"`) producing `dim`-dimension vectors, stored as `element`:
35
+ /// `F32`, `F16` or `BF16`. `I8` and `Bit` are refused: their queries need a scale the
36
+ /// store doesn't hold (D303).
37
+ pub fn new(id: impl Into<String>, dim: u32, element: Element) -> Result<Self> {
38
+ let id = id.into();
39
+ if id.is_empty() {
40
+ return Err(Error::InvalidArgument("a model id can't be empty".into()));
41
+ }
42
+ if !matches!(element, Element::F32 | Element::F16 | Element::BF16) {
43
+ return Err(Error::InvalidArgument(format!(
44
+ "a store's embeddings are F32, F16 or BF16, not {element:?}"
45
+ )));
46
+ }
47
+ VectorSpec::new(dim, element, Metric::Cosine)?;
48
+ Ok(EmbeddingModel { id, dim, element })
49
+ }
50
+
51
+ /// The model's id.
52
+ pub fn id(&self) -> &str {
53
+ &self.id
54
+ }
55
+
56
+ /// The embeddings' dimension.
57
+ pub fn dim(&self) -> u32 {
58
+ self.dim
59
+ }
60
+
61
+ /// The element type they're stored as.
62
+ pub fn element(&self) -> Element {
63
+ self.element
64
+ }
65
+
66
+ pub(crate) fn spec(&self) -> VectorSpec {
67
+ VectorSpec::new(self.dim, self.element, Metric::Cosine).expect("checked at new")
68
+ }
69
+ }
70
+
71
+ /// A store's options, fixed at create (the forget policy can change later:
72
+ /// [`Store::set_forget_policy`]).
73
+ #[derive(Debug, Clone, Default)]
74
+ #[non_exhaustive]
75
+ pub struct StoreOptions {
76
+ embedding: Option<EmbeddingModel>,
77
+ forget: Option<ForgetPolicy>,
78
+ near_dedup: Option<NearDedup>,
79
+ normalization: Normalization,
80
+ ivf: Option<IvfOptions>,
81
+ }
82
+
83
+ impl StoreOptions {
84
+ /// The defaults: no embedding model, so recall is keyword and recency only.
85
+ pub fn new() -> Self {
86
+ StoreOptions::default()
87
+ }
88
+
89
+ /// Pins the store to `model`: its memories carry embeddings of that model.
90
+ pub fn embedding(mut self, model: EmbeddingModel) -> Self {
91
+ self.embedding = Some(model);
92
+ self
93
+ }
94
+
95
+ /// The store's forget policy (T2): the [`Forgetter`] runs it, and
96
+ /// [`Store::forget`] uses it by default. It replaces any policy set before, including an
97
+ /// [`episodic_ttl`](Self::episodic_ttl): call that after this to add one.
98
+ pub fn forget(mut self, policy: ForgetPolicy) -> Self {
99
+ self.forget = Some(policy);
100
+ self
101
+ }
102
+
103
+ /// Near-duplicate dedup (T3): see [`NearDedup`]. Needs an
104
+ /// [`embedding`](Self::embedding) model. It can change later
105
+ /// ([`Store::set_near_dedup`]).
106
+ pub fn near_dedup(mut self, n: NearDedup) -> Self {
107
+ self.near_dedup = Some(n);
108
+ self
109
+ }
110
+
111
+ /// The Unicode normalisation of the store's text index, which keyword recall matches by:
112
+ /// [`Normalization::Nfc`] by default. [`Normalization::Nfkc`] also folds ligatures and
113
+ /// full-width forms into their plain ones, which suits memories gathered from mixed
114
+ /// sources (PDF and OCR text, East Asian content). Fixed at create: the store reads it
115
+ /// back from the index ([`Store::normalization`]). To change it, create a new store with
116
+ /// the other setting and remember the old store's memories into it. The full-text
117
+ /// guide's "Which normalisation to pick" has the trade-offs (#1291).
118
+ pub fn normalization(mut self, n: Normalization) -> Self {
119
+ self.normalization = n;
120
+ self
121
+ }
122
+
123
+ /// IVF recall for large namespaces (D311 T8): the store keeps a `pigeonhole-vector`
124
+ /// index of its embeddings (`mem_{name}_ivf`) beside `emb:v`, written in each memory's
125
+ /// own transaction, and recall searches it for a namespace with at least
126
+ /// [`IvfOptions::min_namespace_len`] memories with an embedding (an exact search below
127
+ /// that). It needs an [`embedding`](Self::embedding) model, and costs a second copy of
128
+ /// each embedding. Fixed at create: [`Store::ivf`] reads it back, and a store created
129
+ /// without it never has the index.
130
+ pub fn ivf(mut self, options: IvfOptions) -> Self {
131
+ self.ivf = Some(options);
132
+ self
133
+ }
134
+
135
+ /// Shorthand: episodic memories are forgotten `age` after their creation, as
136
+ /// [`ForgetPolicy::max_age`] with [`Kind::Episodic`]. After [`forget`](Self::forget), it
137
+ /// adds the age to that policy; before it, `forget` replaces it.
138
+ pub fn episodic_ttl(mut self, age: std::time::Duration) -> Self {
139
+ let p = self.forget.take().unwrap_or_default();
140
+ self.forget = Some(p.max_age(Kind::Episodic, age));
141
+ self
142
+ }
143
+ }
144
+
145
+ /// How to open a store ([`Store::open_with`], [`Store::create_with`]).
146
+ #[derive(Debug, Clone, Default)]
147
+ #[non_exhaustive]
148
+ pub struct OpenOptions {
149
+ model: Option<String>,
150
+ without_embeddings: bool,
151
+ own_forgetter: bool,
152
+ }
153
+
154
+ impl OpenOptions {
155
+ /// The defaults: name the model with [`model`](Self::model), or open
156
+ /// [`without_embeddings`](Self::without_embeddings).
157
+ pub fn new() -> Self {
158
+ Self::default()
159
+ }
160
+
161
+ /// The embedding model the caller embeds with, as [`Store::open`] checks it.
162
+ pub fn model(mut self, id: impl Into<String>) -> Self {
163
+ self.model = Some(id.into());
164
+ self
165
+ }
166
+
167
+ /// No embedding model, as [`Store::open_without_embeddings`] opens.
168
+ pub fn without_embeddings(mut self) -> Self {
169
+ self.without_embeddings = true;
170
+ self
171
+ }
172
+
173
+ /// No thread of the crate's own: the application takes the store's [`Forgetter`] with
174
+ /// [`Store::take_forgetter`] and runs it itself (an application-owned database, D284).
175
+ pub fn own_forgetter(mut self) -> Self {
176
+ self.own_forgetter = true;
177
+ self
178
+ }
179
+ }
180
+
181
+ /// A memory's kind (D311 §2).
182
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
183
+ #[non_exhaustive]
184
+ pub enum Kind {
185
+ /// Something that happened: the default.
186
+ #[default]
187
+ Episodic,
188
+ /// A fact or summary.
189
+ Semantic,
190
+ /// How to do something.
191
+ Procedural,
192
+ }
193
+
194
+ impl Kind {
195
+ pub(crate) fn code(self) -> u8 {
196
+ match self {
197
+ Kind::Episodic => 0,
198
+ Kind::Semantic => 1,
199
+ Kind::Procedural => 2,
200
+ }
201
+ }
202
+
203
+ pub(crate) fn from_code(c: u8) -> Result<Self> {
204
+ Ok(match c {
205
+ 0 => Kind::Episodic,
206
+ 1 => Kind::Semantic,
207
+ 2 => Kind::Procedural,
208
+ _ => return Err(corrupt("a memory's kind")),
209
+ })
210
+ }
211
+ }
212
+
213
+ /// A link's type: the application's (for example "about" or "follows"), from 16 up; the
214
+ /// crate's own are below 16 (frozen in ICR 0107). A read returns whatever is stored, a
215
+ /// reserved value this build doesn't name included.
216
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
217
+ pub struct LinkType(u8);
218
+
219
+ impl LinkType {
220
+ /// The first value an application may use.
221
+ pub const FIRST_CUSTOM: u8 = 16;
222
+
223
+ /// The application's link type `n`: 16 or above (`InvalidArgument` below, where the
224
+ /// crate's own types live).
225
+ pub fn custom(n: u8) -> Result<LinkType> {
226
+ if n < Self::FIRST_CUSTOM {
227
+ return Err(Error::InvalidArgument(format!(
228
+ "link types below {} are the crate's; an application's start at {}",
229
+ Self::FIRST_CUSTOM,
230
+ Self::FIRST_CUSTOM
231
+ )));
232
+ }
233
+ Ok(LinkType(n))
234
+ }
235
+
236
+ /// The type's stored value.
237
+ pub fn get(self) -> u8 {
238
+ self.0
239
+ }
240
+
241
+ /// A consolidated memory to each of its sources (T3).
242
+ pub const DERIVED_FROM: LinkType = LinkType(1);
243
+ /// The new memory to the one it supersedes ([`Store::supersede`]).
244
+ pub const SUPERSEDES: LinkType = LinkType(2);
245
+ /// A near duplicate to its match (T3's `DedupPolicy::Link`).
246
+ pub const SIMILAR_TO: LinkType = LinkType(3);
247
+ }
248
+
249
+ /// A link to or from a memory ([`StoredMemory::links`], [`StoredMemory::backlinks`]).
250
+ #[derive(Debug, Clone, PartialEq)]
251
+ #[non_exhaustive]
252
+ pub struct Link {
253
+ /// The memory at the other end.
254
+ pub id: MemoryId,
255
+ /// Its type.
256
+ pub ty: LinkType,
257
+ /// Its weight, from 0 to 1.
258
+ pub weight: f32,
259
+ }
260
+
261
+ /// A provenance entry ([`StoredMemory::sources`]).
262
+ #[derive(Debug, Clone, PartialEq, Eq)]
263
+ #[non_exhaustive]
264
+ pub struct Source {
265
+ /// The application's source id (a tool call id, a URL).
266
+ pub name: String,
267
+ /// When the store first saw it, in µs.
268
+ pub at_us: u64,
269
+ }
270
+
271
+ /// What [`Store::mark_used`] did.
272
+ #[derive(Debug, Clone, PartialEq, Eq, Default)]
273
+ #[non_exhaustive]
274
+ pub struct Marked {
275
+ /// How many memories were marked used.
276
+ pub marked: usize,
277
+ /// The ids that no longer exist (deleted), never resurrected: drop them from a working
278
+ /// set.
279
+ pub missing: Vec<MemoryId>,
280
+ }
281
+
282
+ /// A memory to write ([`Store::remember`]): a builder, so it can grow (D311 §10a).
283
+ #[derive(Debug, Clone)]
284
+ #[non_exhaustive]
285
+ pub struct Memory {
286
+ pub(crate) text: String,
287
+ pub(crate) embedding: Option<Vec<f32>>,
288
+ pub(crate) kind: Kind,
289
+ importance: f64,
290
+ source: Option<String>,
291
+ pub(crate) session: Option<String>,
292
+ links: Vec<(MemoryId, LinkType, f32)>,
293
+ pinned: bool,
294
+ }
295
+
296
+ impl Memory {
297
+ /// A memory of `text`, episodic, with importance 0.5.
298
+ pub fn new(text: impl Into<String>) -> Self {
299
+ Memory {
300
+ text: text.into(),
301
+ embedding: None,
302
+ kind: Kind::Episodic,
303
+ importance: 0.5,
304
+ source: None,
305
+ session: None,
306
+ links: Vec::new(),
307
+ pinned: false,
308
+ }
309
+ }
310
+
311
+ /// Its embedding, from the store's model. Required in a store pinned to a model. Into
312
+ /// an `F16` or `BF16` model it's rounded to the element when stored (to nearest, ties
313
+ /// to even, as `put_vector_f32` writes a half family).
314
+ pub fn embedding(mut self, e: impl Into<Vec<f32>>) -> Self {
315
+ self.embedding = Some(e.into());
316
+ self
317
+ }
318
+
319
+ /// Its kind.
320
+ pub fn kind(mut self, kind: Kind) -> Self {
321
+ self.kind = kind;
322
+ self
323
+ }
324
+
325
+ /// Its importance, from 0 to 1 (clamped). A dedup merge keeps the larger.
326
+ pub fn importance(mut self, importance: f64) -> Self {
327
+ self.importance = importance;
328
+ self
329
+ }
330
+
331
+ /// A provenance entry: the application's source id (a tool call id, a URL).
332
+ pub fn source(mut self, id: impl Into<String>) -> Self {
333
+ self.source = Some(id.into());
334
+ self
335
+ }
336
+
337
+ /// The session it belongs to (a filter in recall, not part of its key).
338
+ pub fn session(mut self, s: impl Into<String>) -> Self {
339
+ self.session = Some(s.into());
340
+ self
341
+ }
342
+
343
+ /// A link to the existing memory `to` in the same namespace, of type `ty`, with weight
344
+ /// `weight` from 0 to 1 (`InvalidArgument` otherwise, NaN included).
345
+ pub fn link(mut self, to: MemoryId, ty: LinkType, weight: f32) -> Self {
346
+ self.links.push((to, ty, weight));
347
+ self
348
+ }
349
+
350
+ /// Never forgotten (T2).
351
+ pub fn pinned(mut self, pinned: bool) -> Self {
352
+ self.pinned = pinned;
353
+ self
354
+ }
355
+ }
356
+
357
+ /// What [`Store::remember`] did.
358
+ #[derive(Debug, Clone, PartialEq, Eq)]
359
+ #[non_exhaustive]
360
+ pub enum Remembered {
361
+ /// A new memory.
362
+ New(MemoryId),
363
+ /// The text was already remembered (exact dedup), or a near duplicate was under
364
+ /// [`DedupPolicy::Merge`]: merged into that memory, which kept the larger importance,
365
+ /// gained the source, and counted a use.
366
+ Merged(MemoryId),
367
+ /// A near duplicate under [`DedupPolicy::Skip`] (T3): nothing was written, and this is
368
+ /// the memory it's near.
369
+ Similar(MemoryId),
370
+ }
371
+
372
+ impl Remembered {
373
+ /// The memory written, merged into, or, for [`Similar`](Remembered::Similar), the near
374
+ /// duplicate that stopped the write: a memory this call didn't write. Code that links or
375
+ /// pins the returned id acts on the match once a store turns on [`DedupPolicy::Skip`].
376
+ pub fn id(&self) -> &MemoryId {
377
+ match self {
378
+ Remembered::New(id) | Remembered::Merged(id) | Remembered::Similar(id) => id,
379
+ }
380
+ }
381
+ }
382
+
383
+ /// A stored memory ([`Store::get`]).
384
+ #[derive(Debug, Clone, PartialEq)]
385
+ #[non_exhaustive]
386
+ pub struct StoredMemory {
387
+ /// Its id.
388
+ pub id: MemoryId,
389
+ /// Its text.
390
+ pub text: String,
391
+ /// Its kind.
392
+ pub kind: Kind,
393
+ /// Its importance, from 0 to 1.
394
+ pub importance: f64,
395
+ /// How many times it was used ([`Store::mark_used`]) or merged into.
396
+ pub uses: u64,
397
+ /// When it was last used, in µs, if ever.
398
+ pub last_used_us: Option<u64>,
399
+ /// Its session.
400
+ pub session: Option<String>,
401
+ /// Whether it's pinned.
402
+ pub pinned: bool,
403
+ /// Whether a consolidation took it in ([`Store::consolidate`], T3).
404
+ pub consolidated: bool,
405
+ /// Whether a consolidator wrote it, as a group's summary (T9, `meta:summary`). Memories
406
+ /// from before T9 read `false`.
407
+ pub summary: bool,
408
+ /// The memory that superseded it, if one did.
409
+ pub superseded_by: Option<MemoryId>,
410
+ /// Its sources, each with its first-seen time (µs).
411
+ pub sources: Vec<Source>,
412
+ /// Its outgoing links.
413
+ pub links: Vec<Link>,
414
+ /// Its incoming links.
415
+ pub backlinks: Vec<Link>,
416
+ /// Its embedding, if it has one.
417
+ pub embedding: Option<Vec<f32>>,
418
+ }
419
+
420
+ /// What [`Store::verify`] found. Mismatches are counted, not returned as errors.
421
+ #[derive(Debug, Clone, Default, PartialEq, Eq)]
422
+ #[non_exhaustive]
423
+ pub struct StoreStats {
424
+ /// Memories.
425
+ pub memories: u64,
426
+ /// Memory rows without `content:text`.
427
+ pub no_content: u64,
428
+ /// Dedup rows naming a memory that's gone, or whose normalised text hashes elsewhere.
429
+ pub stale_dedup: u64,
430
+ /// Links without their backlink (or the reverse), or with an end that's gone.
431
+ pub broken_links: u64,
432
+ /// Memories missing an embedding in a store pinned to a model.
433
+ pub missing_embeddings: u64,
434
+ /// Memories whose `superseded_by` names a memory that's gone.
435
+ pub dangling_superseded: u64,
436
+ /// The text index's own check failed ([`pigeonhole_text::IndexStats::is_consistent`]).
437
+ pub text_index_inconsistent: bool,
438
+ /// For a store with an IVF index ([`StoreOptions::ivf`]): how far the index's vector
439
+ /// count is from the memories with an embedding (0 when they agree). The index's own
440
+ /// row checks (`pigeonhole_vector::Index::verify`) run too, and fail `verify` as
441
+ /// [`Error::Vector`] if they find corruption. Checked in the writer process only.
442
+ ///
443
+ /// The index counts at its own snapshot, not `verify`'s, so a write between the two
444
+ /// shows up here: read it on a quiet store. That's why
445
+ /// [`is_consistent`](Self::is_consistent) leaves it out (simp724's R2 on #1424). It
446
+ /// compares totals, so a missing vector and a stale one cancel out (#1427).
447
+ pub ivf_mismatched: u64,
448
+ /// Namespaces whose counter (memories with an embedding, which chooses exact or IVF
449
+ /// recall) differs from a count of them. It's advisory: drift changes only which path a
450
+ /// recall takes, so it's reported apart from the mismatches above, and
451
+ /// [`is_consistent`](Self::is_consistent) leaves it out.
452
+ pub ivf_counter_drift: u64,
453
+ }
454
+
455
+ impl StoreStats {
456
+ /// No mismatch at all.
457
+ pub fn is_consistent(&self) -> bool {
458
+ self.no_content == 0
459
+ && self.stale_dedup == 0
460
+ && self.broken_links == 0
461
+ && self.missing_embeddings == 0
462
+ && self.dangling_superseded == 0
463
+ && !self.text_index_inconsistent
464
+ }
465
+ }
466
+
467
+ /// A memory store, in the writer process: one table plus its text index (D311 §2). Clone it
468
+ /// to share it: clones are cheap and share everything (the database handle, the pinned model,
469
+ /// the persisted forget policy and the one [`Forgetter`], which stops when the last clone
470
+ /// drops); nothing is cached per clone, so a write through one is seen by all.
471
+ #[derive(Clone)]
472
+ pub struct Store {
473
+ db: Pigeonhole,
474
+ table: Table,
475
+ index: Index,
476
+ /// The IVF index, for a store created with [`StoreOptions::ivf`] (D311 T8).
477
+ ivf: Option<Ivf>,
478
+ /// The store's pinned model.
479
+ model: Option<EmbeddingModel>,
480
+ /// Whether this handle was opened with the store's model (always so for a store
481
+ /// without one).
482
+ embeds: bool,
483
+ /// The application's handles: `None` for the forgetter's own, which mustn't keep it alive.
484
+ user: Option<Arc<UserToken>>,
485
+ shared: Arc<Shared>,
486
+ }
487
+
488
+ /// What a store's handles share: the forgetter's signal, and its forgetter while nobody runs
489
+ /// it.
490
+ struct Shared {
491
+ signal: Arc<Signal>,
492
+ forgetter: Mutex<Option<Forgetter>>,
493
+ /// Whether a forgetter runs (the crate's thread) or was handed out.
494
+ started: AtomicBool,
495
+ own: bool,
496
+ /// The IVF index's writes awaiting [`after_commit`](pigeonhole_vector::Index::after_commit)
497
+ /// (D311 T8): each write's own record, made in its transaction's body, handed on once a
498
+ /// write call's transaction returns. `after_commit` is harmless after a rollback, so a
499
+ /// rolled-back write's record costs a count read at most.
500
+ ///
501
+ /// The list is shared by the store's handles, so one thread's settle can take another's
502
+ /// record before that one commits: its `after_commit` then reads the counts too early,
503
+ /// which only delays a split to the list's next write. At most [`IVF_PENDING_MAX`]
504
+ /// records wait, the oldest dropped past it (simp724's R1 on #1424): a caller writing only
505
+ /// through `remember_in`/`delete_in` never settles, and a dropped record only delays a
506
+ /// split the same way.
507
+ ivf_pending: Mutex<std::collections::VecDeque<pigeonhole_vector::Placed>>,
508
+ }
509
+
510
+ impl std::fmt::Debug for Store {
511
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
512
+ f.debug_struct("Store")
513
+ .field("table", &self.table.name())
514
+ .field("model", &self.model)
515
+ .field("embeds", &self.embeds)
516
+ .finish()
517
+ }
518
+ }
519
+
520
+ /// The most IVF write records a store keeps waiting to settle ([`Shared::ivf_pending`]).
521
+ pub(crate) const IVF_PENDING_MAX: usize = 1_024;
522
+
523
+ fn table_name(name: &str) -> String {
524
+ format!("mem_{name}")
525
+ }
526
+
527
+ fn index_name(name: &str) -> String {
528
+ format!("mem_{name}_text")
529
+ }
530
+
531
+ impl Store {
532
+ /// Creates the store `name`: the table `mem_{name}` and its text index
533
+ /// `mem_{name}_text`, the index without positions (recall queries are rarely phrases;
534
+ /// owner, 2026-11-02), and opens it with its own model (as [`open`](Self::open) would).
535
+ /// With a forget policy, the crate's [`Forgetter`] thread starts. `TableExists` if the
536
+ /// table is there.
537
+ pub fn create(db: &Pigeonhole, name: &str, options: StoreOptions) -> Result<Store> {
538
+ let open = match &options.embedding {
539
+ Some(m) => OpenOptions::new().model(m.id.clone()),
540
+ None => OpenOptions::new().without_embeddings(),
541
+ };
542
+ Self::create_with(db, name, options, open)
543
+ }
544
+
545
+ /// [`create`](Self::create), opened as `open` says ([`open_with`](Self::open_with)).
546
+ pub fn create_with(
547
+ db: &Pigeonhole,
548
+ name: &str,
549
+ store: StoreOptions,
550
+ open: OpenOptions,
551
+ ) -> Result<Store> {
552
+ if let Some(p) = &store.forget {
553
+ p.check()?;
554
+ }
555
+ if let Some(o) = &store.ivf {
556
+ o.check()?;
557
+ if store.embedding.is_none() {
558
+ return Err(Error::InvalidArgument(
559
+ "an IVF index is of embeddings, and the store has no model".into(),
560
+ ));
561
+ }
562
+ }
563
+ if let Some(n) = &store.near_dedup {
564
+ n.check()?;
565
+ if store.embedding.is_none() {
566
+ return Err(Error::InvalidArgument(
567
+ "near dedup compares embeddings, and the store has no model".into(),
568
+ ));
569
+ }
570
+ }
571
+ let mut b = db
572
+ .table(&table_name(name))?
573
+ .family(CONTENT, Family::default())
574
+ .family(META, Family::default())
575
+ .family(SOURCES, Family::default())
576
+ .family(STATS, Family::counter())
577
+ .family(PEAK, Family::aggregate(Aggregation::Max))
578
+ .family(LINKS, Family::default())
579
+ .family(BACKLINKS, Family::default());
580
+ if let Some(m) = &store.embedding {
581
+ b = b.family(EMB, Family::vector(m.spec()));
582
+ }
583
+ let table = b.create()?;
584
+ let mut g = table
585
+ .mutate(GLOBAL)
586
+ .put_u64(META, LAYOUT, LAYOUT_VERSION)
587
+ .put(META, TEXT_INDEX, index_name(name).as_bytes());
588
+ if let Some(m) = &store.embedding {
589
+ g = g
590
+ .put(META, MODEL_ID, m.id.as_bytes())
591
+ .put_u64(META, MODEL_DIM, u64::from(m.dim))
592
+ .put(META, MODEL_ELEMENT, &[element_code(m.element)]);
593
+ }
594
+ if let Some(p) = &store.forget {
595
+ g = g.put(META, FORGET, &p.encode());
596
+ }
597
+ if let Some(n) = &store.near_dedup {
598
+ g = g.put(META, NEAR_DEDUP, &n.encode());
599
+ }
600
+ if let (Some(o), Some(m)) = (&store.ivf, &store.embedding) {
601
+ let mut v = pigeonhole_vector::IndexOptions::new()
602
+ .rebalance(pigeonhole_vector::Rebalance::Background);
603
+ if let Some(n) = o.get_nprobe() {
604
+ v = v.nprobe(n);
605
+ }
606
+ if let Some(n) = o.get_target_list_len() {
607
+ v = v.target_list_len(n);
608
+ }
609
+ // Created before `G` names it, so a store whose `G` has `ivf` has the index.
610
+ drop(pigeonhole_vector::Index::create(
611
+ db,
612
+ &ivf_name(name),
613
+ m.spec(),
614
+ v,
615
+ )?);
616
+ g = g.put(META, IVF, &o.encode());
617
+ }
618
+ g.commit()?;
619
+ Index::create(
620
+ db,
621
+ &index_name(name),
622
+ pigeonhole_text::Source::new(&table, CONTENT, TEXT),
623
+ IndexOptions::new()
624
+ .positions(false)
625
+ .normalization(store.normalization),
626
+ )?;
627
+ Self::open_with(db, name, open)
628
+ }
629
+
630
+ /// Opens the store `name` for a caller embedding with `model_id`, compared byte for
631
+ /// byte with the store's. `Mismatch` if it's another model; `InvalidArgument` if the
632
+ /// store has none (use [`open_without_embeddings`](Self::open_without_embeddings)).
633
+ /// With a forget policy, the crate's [`Forgetter`] thread starts.
634
+ pub fn open(db: &Pigeonhole, name: &str, model_id: &str) -> Result<Store> {
635
+ Self::open_with(db, name, OpenOptions::new().model(model_id))
636
+ }
637
+
638
+ /// Opens the store `name` without an embedding model. On a store pinned to one, the
639
+ /// handle refuses every write that creates a memory or changes its content
640
+ /// (`remember`, `supersede`), so every memory there keeps its embedding; it allows
641
+ /// `delete`, `link` and `mark_used`, and recalls by keyword and recency.
642
+ pub fn open_without_embeddings(db: &Pigeonhole, name: &str) -> Result<Store> {
643
+ Self::open_with(db, name, OpenOptions::new().without_embeddings())
644
+ }
645
+
646
+ /// Opens the store `name` as `options` say: with the caller's model
647
+ /// ([`OpenOptions::model`]) or without one, and with the crate's forgetter thread or the
648
+ /// application's ([`OpenOptions::own_forgetter`], then
649
+ /// [`take_forgetter`](Self::take_forgetter)). `InvalidArgument` if `options` name neither
650
+ /// a model nor `without_embeddings`, or both.
651
+ pub fn open_with(db: &Pigeonhole, name: &str, options: OpenOptions) -> Result<Store> {
652
+ let table = db.table(&table_name(name))?.open()?;
653
+ let model = load(Rows::W(&table))?;
654
+ let embeds = match (&options.model, options.without_embeddings) {
655
+ (Some(id), false) => {
656
+ check_model(&model, name, id)?;
657
+ true
658
+ }
659
+ (None, true) => model.is_none(),
660
+ _ => {
661
+ return Err(Error::InvalidArgument(
662
+ "OpenOptions takes a model or without_embeddings, one of the two".into(),
663
+ ));
664
+ }
665
+ };
666
+ let index = Index::open(db, &index_name(name))?;
667
+ let ivf = match table.get(GLOBAL, META, IVF)? {
668
+ Some(c) => Some(Ivf::W(
669
+ pigeonhole_vector::Index::open(db, &ivf_name(name))?,
670
+ IvfOptions::decode(c.value())?,
671
+ )),
672
+ None => None,
673
+ };
674
+ let s = Store::assemble(db, table, index, ivf, model, embeds, options.own_forgetter);
675
+ s.start_forgetter_if_due()?;
676
+ Ok(s)
677
+ }
678
+
679
+ fn assemble(
680
+ db: &Pigeonhole,
681
+ table: Table,
682
+ index: Index,
683
+ ivf: Option<Ivf>,
684
+ model: Option<EmbeddingModel>,
685
+ embeds: bool,
686
+ own: bool,
687
+ ) -> Store {
688
+ let signal = Arc::new(Signal::default());
689
+ Store {
690
+ db: db.clone(),
691
+ table,
692
+ index,
693
+ ivf,
694
+ model,
695
+ embeds,
696
+ user: Some(Arc::new(UserToken(Arc::clone(&signal)))),
697
+ shared: Arc::new(Shared {
698
+ signal,
699
+ forgetter: Mutex::new(None),
700
+ started: AtomicBool::new(false),
701
+ own,
702
+ ivf_pending: Mutex::new(std::collections::VecDeque::new()),
703
+ }),
704
+ }
705
+ }
706
+
707
+ /// Makes the store's forgetter once: on the crate's thread when the store has a policy
708
+ /// (unless the application owns it), or kept for [`take_forgetter`](Self::take_forgetter).
709
+ fn start_forgetter_if_due(&self) -> Result<()> {
710
+ if self.shared.own {
711
+ if !self.shared.started.swap(true, Ordering::AcqRel) {
712
+ *self
713
+ .shared
714
+ .forgetter
715
+ .lock()
716
+ .unwrap_or_else(PoisonError::into_inner) = Some(self.make_forgetter());
717
+ }
718
+ return Ok(());
719
+ }
720
+ if self.forget_policy()?.is_none() || self.shared.started.swap(true, Ordering::AcqRel) {
721
+ return Ok(());
722
+ }
723
+ crate::forget::spawn(self.make_forgetter())
724
+ .map_err(|e| Error::InvalidArgument(format!("starting the forgetter: {e}")))
725
+ }
726
+
727
+ fn make_forgetter(&self) -> Forgetter {
728
+ let mut inner = self.clone();
729
+ inner.user = None;
730
+ let user = self.user.as_ref().map_or_else(Weak::new, Arc::downgrade);
731
+ Forgetter::new(inner, user, Arc::clone(&self.shared.signal))
732
+ }
733
+
734
+ /// The store's [`Forgetter`], for an application that runs it itself: opened with
735
+ /// [`OpenOptions::own_forgetter`]. `None` otherwise, or once taken.
736
+ pub fn take_forgetter(&self) -> Option<Forgetter> {
737
+ self.shared
738
+ .forgetter
739
+ .lock()
740
+ .unwrap_or_else(PoisonError::into_inner)
741
+ .take()
742
+ }
743
+
744
+ /// The store's forget policy, if it has one.
745
+ pub fn forget_policy(&self) -> Result<Option<ForgetPolicy>> {
746
+ match self.table.get(GLOBAL, META, FORGET)? {
747
+ Some(c) => Ok(Some(ForgetPolicy::decode(c.value())?)),
748
+ None => Ok(None),
749
+ }
750
+ }
751
+
752
+ /// Sets the store's forget policy (`None` turns forgetting off). The forgetter reads it
753
+ /// before each pass, so it takes effect at the next pass; setting one wakes this
754
+ /// process's forgetter, and starts the crate's thread if none runs yet.
755
+ pub fn set_forget_policy(&self, policy: Option<ForgetPolicy>) -> Result<()> {
756
+ match &policy {
757
+ Some(p) => {
758
+ p.check()?;
759
+ self.table
760
+ .mutate(GLOBAL)
761
+ .put(META, FORGET, &p.encode())
762
+ .commit()?;
763
+ }
764
+ None => {
765
+ self.table
766
+ .mutate(GLOBAL)
767
+ .delete_column(META, FORGET)
768
+ .commit()?;
769
+ }
770
+ }
771
+ if policy.is_some() {
772
+ self.start_forgetter_if_due()?;
773
+ self.shared.signal.notify();
774
+ }
775
+ Ok(())
776
+ }
777
+
778
+ pub(crate) fn db(&self) -> &Pigeonhole {
779
+ &self.db
780
+ }
781
+
782
+ pub(crate) fn table(&self) -> &Table {
783
+ &self.table
784
+ }
785
+
786
+ /// Recalls memories from `namespaces` (D311 §3): each an exact namespace, as written
787
+ /// (no prefixes or patterns), fused together into one ranking. At least one is needed:
788
+ /// an empty list fails `run` with `InvalidArgument`. Set `text`, an `embedding`, or both,
789
+ /// then [`run`](Recall::run). On a handle opened without the store's model, recall is
790
+ /// by keyword and recency only.
791
+ pub fn recall(&self, namespaces: &[&str]) -> Recall<'_> {
792
+ Recall::new(
793
+ Rows::W(&self.table),
794
+ Idx::W(&self.index),
795
+ self.ivf.as_ref(),
796
+ self.model.as_ref().filter(|_| self.embeds),
797
+ Snap::W(&self.db),
798
+ namespaces,
799
+ )
800
+ }
801
+
802
+ /// The model the store is pinned to, if any.
803
+ pub fn embedding_model(&self) -> Option<&EmbeddingModel> {
804
+ self.model.as_ref()
805
+ }
806
+
807
+ /// Watches the store's memory events in `namespaces` (every namespace when empty)
808
+ /// through the database's change feed (D311 T9): see [`Watch`](crate::Watch). The feed
809
+ /// must be on and follow the store's table (`mem_{name}`); `open` says so otherwise.
810
+ ///
811
+ /// One namespace is filtered by the feed itself. Several, or none (every namespace),
812
+ /// read every commit of the store's table and filter here, so a watch of a few
813
+ /// namespaces in a busy store costs as much as a watch of all of them (simp724's N2 on
814
+ /// #1430).
815
+ pub fn watch(&self, namespaces: &[&str]) -> crate::WatchBuilder {
816
+ crate::watch::WatchBuilder::new(self.table.feed(), namespaces)
817
+ }
818
+
819
+ /// A feed-driven consolidation loop named `name` (D311 T9): see
820
+ /// [`ConsolidateLoop`](crate::ConsolidateLoop). The name keys its saved position in the
821
+ /// store: non-empty, without `:`.
822
+ ///
823
+ /// The loop owns what it needs (a handle on the store, the consolidator, its clock), so
824
+ /// it can be kept across calls or moved to a thread of its own.
825
+ pub fn consolidate_loop(
826
+ &self,
827
+ name: &str,
828
+ consolidator: std::sync::Arc<dyn crate::Consolidator>,
829
+ ) -> crate::ConsolidateLoop {
830
+ crate::feed_loop::ConsolidateLoop::new(self, name, consolidator)
831
+ }
832
+
833
+ /// The store's IVF options, if it was created with [`StoreOptions::ivf`].
834
+ pub fn ivf(&self) -> Option<IvfOptions> {
835
+ self.ivf.as_ref().map(Ivf::options)
836
+ }
837
+
838
+ /// The Unicode normalisation of the store's text index, set at create
839
+ /// ([`StoreOptions::normalization`]).
840
+ pub fn normalization(&self) -> Normalization {
841
+ self.index.options().get_normalization()
842
+ }
843
+
844
+ /// Remembers `memory` in namespace `ns`, in one transaction (D311 §4): the memory row,
845
+ /// the text index, the dedup row, and both directions of each link. An exact duplicate
846
+ /// (after trimming and collapsing whitespace) of a live, unsuperseded memory merges into
847
+ /// it instead.
848
+ ///
849
+ /// With [near dedup](NearDedup), the nearest live memory is looked up first, outside the
850
+ /// transaction, and a close enough one is skipped, merged into or linked to.
851
+ pub fn remember(&self, ns: &str, memory: Memory) -> Result<Remembered> {
852
+ self.check_memory(ns, &memory)?;
853
+ let near = match self.near_dedup()? {
854
+ Some(setting) => self.near(ns, &memory, setting)?,
855
+ None => None,
856
+ };
857
+ #[cfg(feature = "__unstable-hooks")]
858
+ if near.is_some() {
859
+ crate::hooks::hold(crate::hooks::Hold::RememberAfterNear);
860
+ }
861
+ let now = now_us();
862
+ let rid = new_rid(now)?;
863
+ let r = self.db.transact(&RetryPolicy::default(), |txn| {
864
+ self.remember_with(txn, ns, &memory, rid, now, near.as_ref())
865
+ });
866
+ self.ivf_settle();
867
+ Ok(r?.0)
868
+ }
869
+
870
+ /// [`remember`](Self::remember) inside the caller's transaction, with exact dedup but
871
+ /// no near dedup: that check reads outside a transaction, so it couldn't be part of the
872
+ /// caller's. Call [`near_duplicate`](Self::near_duplicate) first to do it yourself.
873
+ pub fn remember_in(
874
+ &self,
875
+ txn: &mut Transaction,
876
+ ns: &str,
877
+ memory: Memory,
878
+ ) -> Result<Remembered> {
879
+ self.check_memory(ns, &memory)?;
880
+ let now = now_us();
881
+ let rid = new_rid(now)?;
882
+ self.remember_with(txn, ns, &memory, rid, now, None)
883
+ }
884
+
885
+ pub(crate) fn check_memory(&self, ns: &str, m: &Memory) -> Result<()> {
886
+ check_namespace(ns)?;
887
+ if self.model.is_some() && !self.embeds {
888
+ return Err(Error::InvalidArgument(
889
+ "this handle was opened without the store's embedding model, so it can't add \
890
+ memories: open it with Store::open and the model's id"
891
+ .into(),
892
+ ));
893
+ }
894
+ match (&m.embedding, &self.model) {
895
+ (Some(_), None) => {
896
+ return Err(Error::InvalidArgument(
897
+ "the store has no embedding model, so it takes no embeddings".into(),
898
+ ));
899
+ }
900
+ (None, Some(model)) => {
901
+ return Err(Error::InvalidArgument(format!(
902
+ "the store is pinned to {:?}: every memory needs its embedding",
903
+ model.id
904
+ )));
905
+ }
906
+ (Some(e), Some(model)) if e.len() != model.dim as usize => {
907
+ return Err(Error::InvalidArgument(format!(
908
+ "an embedding of {} dimensions, and the store's model has {}",
909
+ e.len(),
910
+ model.dim
911
+ )));
912
+ }
913
+ _ => {}
914
+ }
915
+ if normalize(&m.text).is_empty() && m.embedding.is_none() {
916
+ return Err(Error::InvalidArgument(
917
+ "a memory needs text or an embedding".into(),
918
+ ));
919
+ }
920
+ if !m.importance.is_finite() {
921
+ return Err(Error::InvalidArgument("importance must be finite".into()));
922
+ }
923
+ for (to, _, w) in &m.links {
924
+ if to.namespace() != ns {
925
+ return Err(Error::InvalidArgument(format!(
926
+ "a link from namespace {ns:?} to {:?}: links stay within a namespace",
927
+ to.namespace()
928
+ )));
929
+ }
930
+ check_weight(*w)?;
931
+ }
932
+ Ok(())
933
+ }
934
+
935
+ pub(crate) fn remember_with(
936
+ &self,
937
+ txn: &mut Transaction,
938
+ ns: &str,
939
+ m: &Memory,
940
+ rid: [u8; 16],
941
+ now: u64,
942
+ near: Option<&Near>,
943
+ ) -> Result<Remembered> {
944
+ let t = &self.table;
945
+ let norm = normalize(&m.text);
946
+ let importance = (m.importance.clamp(0.0, 1.0) * PPM).round() as i64;
947
+ let dedup = (!norm.is_empty()).then(|| dedup_row(ns, &content_hash(&norm)));
948
+ // Exact dedup (M1): the dedup row, then the memory it names, both read here.
949
+ if let Some(d) = &dedup
950
+ && let Some(target) = txn.get(t, d, META, RID)?.map(|c| c.value().to_vec())
951
+ {
952
+ let text = txn
953
+ .get(t, &target, CONTENT, TEXT)?
954
+ .map(|c| c.value().to_vec());
955
+ let superseded = txn.get(t, &target, META, SUPERSEDED_BY)?.is_some();
956
+ let same = text
957
+ .as_deref()
958
+ .and_then(|b| std::str::from_utf8(b).ok())
959
+ .is_some_and(|s| normalize(s) == norm);
960
+ if same && !superseded {
961
+ let id = MemoryId::from_row(&target).ok_or_else(|| corrupt("a dedup row's rid"))?;
962
+ txn.aggregate(t, &target, PEAK, IMPORTANCE, importance)
963
+ .incr(t, &target, STATS, USES, 1);
964
+ if let Some(src) = &m.source {
965
+ self.add_source(txn, &target, src, now)?;
966
+ }
967
+ return Ok(Remembered::Merged(id));
968
+ }
969
+ // Gone, superseded, or a hash collision: insert as new below. A collision
970
+ // leaves the dedup row alone (it names a live memory of other text).
971
+ if text.is_some() && !same {
972
+ return self.insert_near(txn, ns, m, rid, now, importance, None, near);
973
+ }
974
+ }
975
+ self.insert_near(txn, ns, m, rid, now, importance, dedup.as_deref(), near)
976
+ }
977
+
978
+ /// A new memory, unless a near duplicate's policy says otherwise (T3).
979
+ #[allow(clippy::too_many_arguments)]
980
+ fn insert_near(
981
+ &self,
982
+ txn: &mut Transaction,
983
+ ns: &str,
984
+ m: &Memory,
985
+ rid: [u8; 16],
986
+ now: u64,
987
+ importance: i64,
988
+ dedup: Option<&[u8]>,
989
+ near: Option<&Near>,
990
+ ) -> Result<Remembered> {
991
+ let t = &self.table;
992
+ let Some(n) = near else {
993
+ return self.insert(txn, ns, m, rid, now, importance, dedup);
994
+ };
995
+ let id = || MemoryId::from_row(&n.row).ok_or_else(|| corrupt("a near match's row"));
996
+ // The match read here, for every policy (M1's rule for a near match; simp724's F1 on
997
+ // #1386 for Skip): gone or superseded since the check, it's ignored, and the memory
998
+ // is written as new.
999
+ let live = txn.get(t, &n.row, CONTENT, TEXT)?.is_some()
1000
+ && txn.get(t, &n.row, META, SUPERSEDED_BY)?.is_none();
1001
+ match n.policy {
1002
+ DedupPolicy::Skip if live => Ok(Remembered::Similar(id()?)),
1003
+ DedupPolicy::Merge if live => {
1004
+ txn.aggregate(t, &n.row, PEAK, IMPORTANCE, importance)
1005
+ .incr(t, &n.row, STATS, USES, 1);
1006
+ if let Some(src) = &m.source {
1007
+ self.add_source(txn, &n.row, src, now)?;
1008
+ }
1009
+ Ok(Remembered::Merged(id()?))
1010
+ }
1011
+ DedupPolicy::Link if live => {
1012
+ let r = self.insert(txn, ns, m, rid, now, importance, dedup)?;
1013
+ let w = n.similarity.clamp(0.0, 1.0);
1014
+ write_link(txn, t, &r.id().row(), &n.row, LinkType::SIMILAR_TO, w);
1015
+ Ok(r)
1016
+ }
1017
+ _ => self.insert(txn, ns, m, rid, now, importance, dedup),
1018
+ }
1019
+ }
1020
+
1021
+ #[allow(clippy::too_many_arguments)]
1022
+ fn insert(
1023
+ &self,
1024
+ txn: &mut Transaction,
1025
+ ns: &str,
1026
+ m: &Memory,
1027
+ rid: [u8; 16],
1028
+ now: u64,
1029
+ importance: i64,
1030
+ dedup: Option<&[u8]>,
1031
+ ) -> Result<Remembered> {
1032
+ let t = &self.table;
1033
+ let id = MemoryId::new(ns, rid);
1034
+ let row = id.row();
1035
+ // The links' targets first (M4): an absent one fails the write before anything.
1036
+ for (to, _, _) in &m.links {
1037
+ if txn.get(t, &to.row(), CONTENT, TEXT)?.is_none() {
1038
+ return Err(Error::NotFound(format!("a link's target {to}")));
1039
+ }
1040
+ }
1041
+ self.index.put_in(txn, &row, &m.text)?;
1042
+ txn.put(t, &row, META, KIND, &[m.kind.code()])
1043
+ .aggregate(t, &row, PEAK, IMPORTANCE, importance);
1044
+ if let Some(s) = &m.session {
1045
+ txn.put(t, &row, META, SESSION, s.as_bytes());
1046
+ }
1047
+ if m.pinned {
1048
+ txn.put(t, &row, META, PINNED, b"1");
1049
+ }
1050
+ if let Some(e) = &m.embedding {
1051
+ txn.put_vector_f32(t, &row, EMB, V, e);
1052
+ self.ivf_insert(txn, ns, &row, e)?;
1053
+ }
1054
+ if let Some(src) = &m.source {
1055
+ txn.put_u64(t, &row, SOURCES, src.as_bytes(), now);
1056
+ }
1057
+ if let Some(d) = dedup {
1058
+ txn.put(t, d, META, RID, &row);
1059
+ }
1060
+ for (to, ty, w) in &m.links {
1061
+ write_link(txn, t, &row, &to.row(), *ty, *w);
1062
+ }
1063
+ Ok(Remembered::New(id))
1064
+ }
1065
+
1066
+ /// A source column, if the memory doesn't have it yet (its first-seen time stays).
1067
+ pub(crate) fn add_source(
1068
+ &self,
1069
+ txn: &mut Transaction,
1070
+ row: &[u8],
1071
+ src: &str,
1072
+ now: u64,
1073
+ ) -> Result<()> {
1074
+ let t = &self.table;
1075
+ if txn.get(t, row, SOURCES, src.as_bytes())?.is_none() {
1076
+ txn.put_u64(t, row, SOURCES, src.as_bytes(), now);
1077
+ }
1078
+ Ok(())
1079
+ }
1080
+
1081
+ /// The memory `id`, or `None` if it doesn't exist.
1082
+ pub fn get(&self, id: &MemoryId) -> Result<Option<StoredMemory>> {
1083
+ let Some(row) = self.table.row(&id.row()).read()? else {
1084
+ return Ok(None);
1085
+ };
1086
+ read_memory(id.clone(), &row.to_owned())
1087
+ }
1088
+
1089
+ /// Deletes the memory `id` (D311 §4), in one transaction: its row through the text
1090
+ /// index, its dedup row, and both directions of every link. `false` if it didn't exist.
1091
+ pub fn delete(&self, id: &MemoryId) -> Result<bool> {
1092
+ let r = self
1093
+ .db
1094
+ .transact(&RetryPolicy::default(), |txn| self.delete_in(txn, id));
1095
+ self.ivf_settle();
1096
+ Ok(r?.0)
1097
+ }
1098
+
1099
+ /// [`delete`](Self::delete) inside the caller's transaction.
1100
+ ///
1101
+ /// Every removal of a memory goes through here (`forget` and consolidation's `Delete`
1102
+ /// too), so it's also where the IVF index and its namespace counter follow (D311 T8). A
1103
+ /// future removal path, a column TTL say, must call it rather than delete rows itself
1104
+ /// (simp724 on #1342).
1105
+ ///
1106
+ /// It reads at `txn`'s snapshot, so a memory this same transaction remembered isn't
1107
+ /// there yet: `false`, and nothing deleted (neither the memory nor, in an IVF store, its
1108
+ /// vector).
1109
+ pub fn delete_in(&self, txn: &mut Transaction, id: &MemoryId) -> Result<bool> {
1110
+ let t = &self.table;
1111
+ let row = id.row();
1112
+ let Some(text) = txn.get(t, &row, CONTENT, TEXT)?.map(|c| c.value().to_vec()) else {
1113
+ return Ok(false);
1114
+ };
1115
+ let (links, backlinks, superseded) = {
1116
+ let r = txn.get_row(t, &row, &[LINKS, BACKLINKS])?;
1117
+ let mut out = (Vec::new(), Vec::new(), Vec::new());
1118
+ if let Some(r) = r {
1119
+ for e in r.iter() {
1120
+ match e.family {
1121
+ LINKS => {
1122
+ if e.cell.value().first() == Some(&LinkType::SUPERSEDES.0) {
1123
+ out.2.push(e.qualifier.to_vec());
1124
+ }
1125
+ out.0.push(e.qualifier.to_vec());
1126
+ }
1127
+ BACKLINKS => out.1.push(e.qualifier.to_vec()),
1128
+ _ => {}
1129
+ }
1130
+ }
1131
+ }
1132
+ out
1133
+ };
1134
+ // The dedup row, if it names this memory.
1135
+ let norm = std::str::from_utf8(&text)
1136
+ .map(normalize)
1137
+ .unwrap_or_default();
1138
+ if !norm.is_empty() {
1139
+ let d = dedup_row(id.namespace(), &content_hash(&norm));
1140
+ if txn
1141
+ .get(t, &d, META, RID)?
1142
+ .is_some_and(|c| c.value() == row.as_slice())
1143
+ {
1144
+ txn.delete_row(t, &d);
1145
+ }
1146
+ }
1147
+ // A memory this one superseded is recalled again (simp724's G1 on #1362): its
1148
+ // `superseded_by`, read here, is cleared if it names this memory.
1149
+ for to in &superseded {
1150
+ if txn
1151
+ .get(t, to, META, SUPERSEDED_BY)?
1152
+ .is_some_and(|c| c.value() == row.as_slice())
1153
+ {
1154
+ txn.delete_column(t, to, META, SUPERSEDED_BY)
1155
+ .delete_column(t, to, META, VALID_TO);
1156
+ }
1157
+ }
1158
+ for to in &links {
1159
+ txn.delete_column(t, to, BACKLINKS, &row);
1160
+ }
1161
+ for from in &backlinks {
1162
+ txn.delete_column(t, from, LINKS, &row);
1163
+ }
1164
+ self.index.delete_in(txn, &row)?;
1165
+ self.ivf_delete(txn, id.namespace(), &row)?;
1166
+ txn.delete_row(t, &row);
1167
+ Ok(true)
1168
+ }
1169
+
1170
+ /// The IVF index's half of a memory's insert (D311 T8): its vector in the index, in the
1171
+ /// memory's transaction, and the namespace counter's blind increment.
1172
+ fn ivf_insert(&self, txn: &mut Transaction, ns: &str, row: &[u8], e: &[f32]) -> Result<()> {
1173
+ let Some(Ivf::W(index, _)) = &self.ivf else {
1174
+ return Ok(());
1175
+ };
1176
+ let mut placed = pigeonhole_vector::Placed::new();
1177
+ index.insert_f32_in(txn, &mut placed, row, e)?;
1178
+ crate::ivf::counted(txn, &self.table, ns, 1);
1179
+ self.park(placed);
1180
+ Ok(())
1181
+ }
1182
+
1183
+ /// The IVF index's half of a memory's delete: the counter goes down only when the index
1184
+ /// held the memory's vector (a memory without an embedding has none).
1185
+ fn ivf_delete(&self, txn: &mut Transaction, ns: &str, row: &[u8]) -> Result<()> {
1186
+ let Some(Ivf::W(index, _)) = &self.ivf else {
1187
+ return Ok(());
1188
+ };
1189
+ let mut placed = pigeonhole_vector::Placed::new();
1190
+ if index.delete_in(txn, &mut placed, row)? {
1191
+ crate::ivf::counted(txn, &self.table, ns, -1);
1192
+ self.park(placed);
1193
+ }
1194
+ Ok(())
1195
+ }
1196
+
1197
+ fn park(&self, placed: pigeonhole_vector::Placed) {
1198
+ let mut q = self
1199
+ .shared
1200
+ .ivf_pending
1201
+ .lock()
1202
+ .unwrap_or_else(PoisonError::into_inner);
1203
+ if q.len() >= IVF_PENDING_MAX {
1204
+ q.pop_front();
1205
+ }
1206
+ q.push_back(placed);
1207
+ }
1208
+
1209
+ /// The IVF records waiting to settle (an inspection helper for `hooks`).
1210
+ #[cfg(feature = "__unstable-hooks")]
1211
+ pub(crate) fn ivf_pending_len(&self) -> usize {
1212
+ self.shared
1213
+ .ivf_pending
1214
+ .lock()
1215
+ .unwrap_or_else(PoisonError::into_inner)
1216
+ .len()
1217
+ }
1218
+
1219
+ /// Hands the parked IVF writes to `after_commit`, which splits or merges (in background
1220
+ /// mode, marks for the rebalancer) the lists they left out of bounds. Its errors are
1221
+ /// dropped: the memories are committed, and a missed rebalance waits for the next write
1222
+ /// to those lists (simp724 on #1342: an `after_commit` failure mustn't fail a write).
1223
+ pub(crate) fn ivf_settle(&self) {
1224
+ let Some(Ivf::W(index, _)) = &self.ivf else {
1225
+ return;
1226
+ };
1227
+ let pending = std::mem::take(
1228
+ &mut *self
1229
+ .shared
1230
+ .ivf_pending
1231
+ .lock()
1232
+ .unwrap_or_else(PoisonError::into_inner),
1233
+ );
1234
+ for p in pending {
1235
+ let _ = index.after_commit(p);
1236
+ }
1237
+ }
1238
+
1239
+ /// Links `from` to `to` with type `ty` and weight `weight`, both directions in one
1240
+ /// transaction, after reading both ends' `content:text` (M4). `NotFound` naming the end
1241
+ /// that's gone.
1242
+ pub fn link(&self, from: &MemoryId, to: &MemoryId, ty: LinkType, weight: f32) -> Result<()> {
1243
+ if from.namespace() != to.namespace() {
1244
+ return Err(Error::InvalidArgument(
1245
+ "links stay within a namespace".into(),
1246
+ ));
1247
+ }
1248
+ check_weight(weight)?;
1249
+ self.db.transact(&RetryPolicy::default(), |txn| {
1250
+ let t = &self.table;
1251
+ for end in [from, to] {
1252
+ if txn.get(t, &end.row(), CONTENT, TEXT)?.is_none() {
1253
+ return Err(Error::NotFound(format!("the memory {end}")));
1254
+ }
1255
+ }
1256
+ write_link(txn, t, &from.row(), &to.row(), ty, weight);
1257
+ Ok(())
1258
+ })?;
1259
+ Ok(())
1260
+ }
1261
+
1262
+ /// Marks `old` superseded by `new` (D311 §2, M4): sets `old`'s `superseded_by` and
1263
+ /// `valid_to`, and links `new → old` with [`LinkType::SUPERSEDES`]. Recall leaves `old`
1264
+ /// out by default. `NotFound` if either is gone.
1265
+ ///
1266
+ /// A memory is superseded once: `old`'s `superseded_by` is read in the transaction, so
1267
+ /// two concurrent supersedes of it conflict and one retries. Superseding it again with
1268
+ /// the same `new` does nothing; with another, it's `InvalidArgument` naming the current
1269
+ /// one (supersede that one instead: facts change along a chain). Deleting `new` clears
1270
+ /// `old`'s `superseded_by`, so `old` is recalled again.
1271
+ pub fn supersede(&self, old: &MemoryId, new: &MemoryId) -> Result<()> {
1272
+ if self.model.is_some() && !self.embeds {
1273
+ return Err(Error::InvalidArgument(
1274
+ "this handle was opened without the store's embedding model, so it can't \
1275
+ supersede memories"
1276
+ .into(),
1277
+ ));
1278
+ }
1279
+ if old.namespace() != new.namespace() || old == new {
1280
+ return Err(Error::InvalidArgument(
1281
+ "supersede takes two memories of one namespace".into(),
1282
+ ));
1283
+ }
1284
+ let now = now_us();
1285
+ self.db.transact(&RetryPolicy::default(), |txn| {
1286
+ let t = &self.table;
1287
+ for end in [old, new] {
1288
+ if txn.get(t, &end.row(), CONTENT, TEXT)?.is_none() {
1289
+ return Err(Error::NotFound(format!("the memory {end}")));
1290
+ }
1291
+ }
1292
+ if let Some(cur) = txn
1293
+ .get(t, &old.row(), META, SUPERSEDED_BY)?
1294
+ .map(|c| c.value().to_vec())
1295
+ {
1296
+ if cur == new.row() {
1297
+ return Ok(());
1298
+ }
1299
+ let cur = MemoryId::from_row(&cur).ok_or_else(|| corrupt("superseded_by"))?;
1300
+ return Err(Error::InvalidArgument(format!(
1301
+ "{old} is already superseded by {cur}: supersede that one instead"
1302
+ )));
1303
+ }
1304
+ supersede_in(txn, t, &old.row(), &new.row(), now);
1305
+ Ok(())
1306
+ })?;
1307
+ Ok(())
1308
+ }
1309
+
1310
+ /// Counts a use of each of `ids` (M5): reads each one's `content:text`, then writes the
1311
+ /// blind `uses` increment and the `last_used` max. A deleted id is skipped, never
1312
+ /// resurrected, and reported in [`Marked::missing`]. A repeated id counts once.
1313
+ pub fn mark_used(&self, ids: &[MemoryId]) -> Result<Marked> {
1314
+ let now = now_us() as i64;
1315
+ let (m, _) = self.db.transact(&RetryPolicy::default(), |txn| {
1316
+ let t = &self.table;
1317
+ let mut m = Marked::default();
1318
+ let mut seen = BTreeSet::new();
1319
+ for id in ids {
1320
+ let row = id.row();
1321
+ if !seen.insert(row.clone()) {
1322
+ continue;
1323
+ }
1324
+ if txn.get(t, &row, CONTENT, TEXT)?.is_none() {
1325
+ m.missing.push(id.clone());
1326
+ continue;
1327
+ }
1328
+ txn.incr(t, &row, STATS, USES, 1)
1329
+ .aggregate(t, &row, PEAK, LAST_USED, now);
1330
+ m.marked += 1;
1331
+ }
1332
+ Ok::<_, Error>(m)
1333
+ })?;
1334
+ Ok(m)
1335
+ }
1336
+
1337
+ /// Checks the store against itself and its text index, at one snapshot (D311 T1):
1338
+ /// every memory row has content, every dedup row names a live memory with that text,
1339
+ /// every link has its backlink with both ends live, and the text index agrees.
1340
+ pub fn verify(&self) -> Result<StoreStats> {
1341
+ let s = self.db.snapshot()?;
1342
+ let text_ok = self.index.verify()?.is_consistent();
1343
+ let ivf_vectors = match &self.ivf {
1344
+ Some(Ivf::W(index, _)) => Some(index.verify()?.vectors),
1345
+ _ => None,
1346
+ };
1347
+ let ivf = self.ivf.is_some();
1348
+ verify(
1349
+ Rows::W(&self.table),
1350
+ &s,
1351
+ self.model.as_ref(),
1352
+ text_ok,
1353
+ ivf,
1354
+ ivf_vectors,
1355
+ )
1356
+ }
1357
+ }
1358
+
1359
+ /// A memory store opened from a reader process (D311 §5): recall, `get` and `verify` at
1360
+ /// the reader's snapshots, and no writes.
1361
+ pub struct ReadStore {
1362
+ reader: PigeonholeReader,
1363
+ table: ReadTable,
1364
+ index: ReadIndex,
1365
+ ivf: Option<Ivf>,
1366
+ model: Option<EmbeddingModel>,
1367
+ embeds: bool,
1368
+ }
1369
+
1370
+ impl std::fmt::Debug for ReadStore {
1371
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1372
+ f.debug_struct("ReadStore")
1373
+ .field("table", &self.table.name())
1374
+ .field("model", &self.model)
1375
+ .field("embeds", &self.embeds)
1376
+ .finish()
1377
+ }
1378
+ }
1379
+
1380
+ impl Store {
1381
+ /// Opens the store `name` from a reader process, for a caller embedding with
1382
+ /// `model_id` (as [`open`](Store::open) checks it).
1383
+ pub fn open_reader(reader: &PigeonholeReader, name: &str, model_id: &str) -> Result<ReadStore> {
1384
+ let mut s = Self::open_reader_inner(reader, name)?;
1385
+ check_model(&s.model, name, model_id)?;
1386
+ s.embeds = true;
1387
+ Ok(s)
1388
+ }
1389
+
1390
+ /// Opens the store `name` from a reader process without an embedding model: recall is
1391
+ /// by keyword and recency.
1392
+ pub fn open_reader_without_embeddings(
1393
+ reader: &PigeonholeReader,
1394
+ name: &str,
1395
+ ) -> Result<ReadStore> {
1396
+ let mut s = Self::open_reader_inner(reader, name)?;
1397
+ s.embeds = s.model.is_none();
1398
+ Ok(s)
1399
+ }
1400
+
1401
+ fn open_reader_inner(reader: &PigeonholeReader, name: &str) -> Result<ReadStore> {
1402
+ let table = reader.table(&table_name(name))?;
1403
+ let model = load(Rows::R(&table))?;
1404
+ let index = Index::open_reader(reader, &index_name(name))?;
1405
+ let ivf = match Rows::R(&table).global(IVF)? {
1406
+ Some(b) => Some(Ivf::R(
1407
+ pigeonhole_vector::Index::open_reader(reader, &ivf_name(name))?,
1408
+ IvfOptions::decode(&b)?,
1409
+ )),
1410
+ None => None,
1411
+ };
1412
+ Ok(ReadStore {
1413
+ reader: reader.clone(),
1414
+ table,
1415
+ index,
1416
+ ivf,
1417
+ model,
1418
+ embeds: false,
1419
+ })
1420
+ }
1421
+ }
1422
+
1423
+ impl ReadStore {
1424
+ /// The model the store is pinned to, if any.
1425
+ pub fn embedding_model(&self) -> Option<&EmbeddingModel> {
1426
+ self.model.as_ref()
1427
+ }
1428
+
1429
+ /// [`Store::watch`], from a reader process: the writer's memory events, from its feed
1430
+ /// history (D310). Call [`Watch::next`](crate::Watch::next) on a thread of its own: it
1431
+ /// blocks.
1432
+ pub fn watch(&self, namespaces: &[&str]) -> crate::WatchBuilder {
1433
+ crate::watch::WatchBuilder::new(self.table.feed(), namespaces)
1434
+ }
1435
+
1436
+ /// The store's IVF options ([`Store::ivf`]).
1437
+ pub fn ivf(&self) -> Option<IvfOptions> {
1438
+ self.ivf.as_ref().map(Ivf::options)
1439
+ }
1440
+
1441
+ /// The Unicode normalisation of the store's text index ([`Store::normalization`]).
1442
+ pub fn normalization(&self) -> Normalization {
1443
+ self.index.options().get_normalization()
1444
+ }
1445
+
1446
+ /// Recalls memories, as [`Store::recall`] does, at the reader's snapshots. A search
1447
+ /// while the writer's text index is being repaired fails with `Busy`.
1448
+ pub fn recall(&self, namespaces: &[&str]) -> Recall<'_> {
1449
+ Recall::new(
1450
+ Rows::R(&self.table),
1451
+ Idx::R(&self.index),
1452
+ self.ivf.as_ref(),
1453
+ self.model.as_ref().filter(|_| self.embeds),
1454
+ Snap::R(&self.reader),
1455
+ namespaces,
1456
+ )
1457
+ }
1458
+
1459
+ /// The memory `id`, or `None` if it doesn't exist.
1460
+ pub fn get(&self, id: &MemoryId) -> Result<Option<StoredMemory>> {
1461
+ let Some(row) = self.table.row(&id.row()).read()? else {
1462
+ return Ok(None);
1463
+ };
1464
+ read_memory(id.clone(), &row.to_owned())
1465
+ }
1466
+
1467
+ /// [`Store::verify`], at the reader's snapshot.
1468
+ pub fn verify(&self) -> Result<StoreStats> {
1469
+ let s = self.reader.snapshot()?;
1470
+ let text_ok = self.index.verify()?.is_consistent();
1471
+ let ivf = self.ivf.is_some();
1472
+ verify(
1473
+ Rows::R(&self.table),
1474
+ &s,
1475
+ self.model.as_ref(),
1476
+ text_ok,
1477
+ ivf,
1478
+ None,
1479
+ )
1480
+ }
1481
+ }
1482
+
1483
+ /// `open`'s model check.
1484
+ fn check_model(model: &Option<EmbeddingModel>, name: &str, model_id: &str) -> Result<()> {
1485
+ match model {
1486
+ Some(m) if m.id == model_id => Ok(()),
1487
+ Some(m) => Err(Error::Mismatch(format!(
1488
+ "the store {name} is pinned to {:?}, not {model_id:?}",
1489
+ m.id
1490
+ ))),
1491
+ None => Err(Error::InvalidArgument(format!(
1492
+ "the store {name} has no embedding model: open it without embeddings"
1493
+ ))),
1494
+ }
1495
+ }
1496
+
1497
+ /// The store's families and `G` row, checked; its pinned model.
1498
+ fn load(rows: Rows<'_>) -> Result<Option<EmbeddingModel>> {
1499
+ let not_store = || Error::InvalidArgument(format!("{} is not a memory store", rows.name()));
1500
+ for f in [CONTENT, META, SOURCES, STATS, PEAK, LINKS, BACKLINKS] {
1501
+ if !rows.has_family(f) {
1502
+ return Err(not_store());
1503
+ }
1504
+ }
1505
+ let layout = rows.global_u64(LAYOUT)?.ok_or_else(not_store)?;
1506
+ if layout != LAYOUT_VERSION {
1507
+ return Err(Error::InvalidArgument(format!(
1508
+ "{} has store layout {layout}, and this build reads {LAYOUT_VERSION}",
1509
+ rows.name()
1510
+ )));
1511
+ }
1512
+ Ok(match rows.global(MODEL_ID)? {
1513
+ None => None,
1514
+ Some(id) => {
1515
+ let id = String::from_utf8(id).map_err(|_| corrupt("the model id"))?;
1516
+ let dim = rows
1517
+ .global_u64(MODEL_DIM)?
1518
+ .ok_or_else(|| corrupt("the model's dimension"))?;
1519
+ let element = rows
1520
+ .global(MODEL_ELEMENT)?
1521
+ .and_then(|e| e.first().copied())
1522
+ .and_then(element_from_code)
1523
+ .ok_or_else(|| corrupt("the model's element"))?;
1524
+ Some(EmbeddingModel::new(id, dim as u32, element)?)
1525
+ }
1526
+ })
1527
+ }
1528
+
1529
+ /// [`Store::verify`]'s checks, over either kind of table.
1530
+ fn verify(
1531
+ rows: Rows<'_>,
1532
+ s: &pigeonhole::Snapshot,
1533
+ model: Option<&EmbeddingModel>,
1534
+ text_ok: bool,
1535
+ ivf: bool,
1536
+ ivf_vectors: Option<u64>,
1537
+ ) -> Result<StoreStats> {
1538
+ let mut st = StoreStats::default();
1539
+ // Per namespace: memories with an embedding, and the counter's value (D311 T8).
1540
+ let mut embedded: BTreeMap<Vec<u8>, i64> = BTreeMap::new();
1541
+ let mut counters: BTreeMap<Vec<u8>, i64> = BTreeMap::new();
1542
+ let mut texts: BTreeMap<Vec<u8>, String> = BTreeMap::new();
1543
+ let mut links: BTreeSet<(Vec<u8>, Vec<u8>, Vec<u8>)> = BTreeSet::new();
1544
+ let mut backlinks: BTreeSet<(Vec<u8>, Vec<u8>, Vec<u8>)> = BTreeSet::new();
1545
+ let mut dedups: Vec<(Vec<u8>, Vec<u8>)> = Vec::new();
1546
+ let mut superseded_by: Vec<Vec<u8>> = Vec::new();
1547
+ rows.scan_all(s, |key, row| {
1548
+ if key == GLOBAL {
1549
+ return Ok(());
1550
+ }
1551
+ if MemoryId::from_row(key).is_some() {
1552
+ st.memories += 1;
1553
+ let mut has_text = false;
1554
+ let mut has_emb = false;
1555
+ for e in row.iter() {
1556
+ match e.family {
1557
+ CONTENT if e.qualifier == TEXT => {
1558
+ has_text = true;
1559
+ let text = std::str::from_utf8(e.cell.value())
1560
+ .map_err(|_| corrupt("a memory's text"))?;
1561
+ texts.insert(key.to_vec(), normalize(text));
1562
+ }
1563
+ EMB => has_emb = true,
1564
+ META if e.qualifier == SUPERSEDED_BY => {
1565
+ superseded_by.push(e.cell.value().to_vec());
1566
+ }
1567
+ LINKS => {
1568
+ links.insert((key.to_vec(), e.qualifier.to_vec(), e.cell.value().to_vec()));
1569
+ }
1570
+ BACKLINKS => {
1571
+ backlinks.insert((
1572
+ e.qualifier.to_vec(),
1573
+ key.to_vec(),
1574
+ e.cell.value().to_vec(),
1575
+ ));
1576
+ }
1577
+ _ => {}
1578
+ }
1579
+ }
1580
+ if !has_text {
1581
+ st.no_content += 1;
1582
+ }
1583
+ if model.is_some() && !has_emb {
1584
+ st.missing_embeddings += 1;
1585
+ }
1586
+ if has_emb && let Some(id) = MemoryId::from_row(key) {
1587
+ *embedded
1588
+ .entry(id.namespace().as_bytes().to_vec())
1589
+ .or_default() += 1;
1590
+ }
1591
+ } else if ivf && let Some(ns) = key.strip_suffix(COUNT_TAG) {
1592
+ let n = row
1593
+ .get(STATS, EMBEDDED)
1594
+ .and_then(|c| c.as_i64())
1595
+ .unwrap_or(0);
1596
+ counters.insert(ns.to_vec(), n);
1597
+ } else if let Some(c) = row.get(META, RID) {
1598
+ dedups.push((key.to_vec(), c.value().to_vec()));
1599
+ } else {
1600
+ return Err(corrupt("a row that is neither a memory nor a dedup row"));
1601
+ }
1602
+ Ok(())
1603
+ })?;
1604
+ for (key, target) in &dedups {
1605
+ let ok = texts.get(target).is_some_and(|norm| {
1606
+ key.windows(2)
1607
+ .position(|w| w == DEDUP_TAG)
1608
+ .is_some_and(|at| {
1609
+ std::str::from_utf8(&key[..at])
1610
+ .is_ok_and(|ns| dedup_row(ns, &content_hash(norm)) == *key)
1611
+ })
1612
+ });
1613
+ if !ok {
1614
+ st.stale_dedup += 1;
1615
+ }
1616
+ }
1617
+ // Each link must have its backlink, and the reverse; both ends live.
1618
+ st.broken_links += links.symmetric_difference(&backlinks).count() as u64;
1619
+ for (from, to, _) in &links {
1620
+ if !texts.contains_key(from) || !texts.contains_key(to) {
1621
+ st.broken_links += 1;
1622
+ }
1623
+ }
1624
+ st.dangling_superseded = superseded_by
1625
+ .iter()
1626
+ .filter(|s| !texts.contains_key(*s))
1627
+ .count() as u64;
1628
+ st.text_index_inconsistent = !text_ok;
1629
+ if ivf {
1630
+ let all: BTreeSet<&Vec<u8>> = embedded.keys().chain(counters.keys()).collect();
1631
+ st.ivf_counter_drift = all
1632
+ .into_iter()
1633
+ .filter(|ns| {
1634
+ embedded.get(*ns).copied().unwrap_or(0) != counters.get(*ns).copied().unwrap_or(0)
1635
+ })
1636
+ .count() as u64;
1637
+ if let Some(v) = ivf_vectors {
1638
+ let have: i64 = embedded.values().sum();
1639
+ st.ivf_mismatched = v.abs_diff(have.max(0) as u64);
1640
+ }
1641
+ }
1642
+ Ok(st)
1643
+ }
1644
+
1645
+ /// Marks the memory at `old` superseded by the one at `new` since `valid_to`, with the
1646
+ /// `new → old` link: the writes [`Store::supersede`] makes once its reads pass.
1647
+ pub(crate) fn supersede_in(
1648
+ txn: &mut Transaction,
1649
+ t: &Table,
1650
+ old: &[u8],
1651
+ new: &[u8],
1652
+ valid_to: u64,
1653
+ ) {
1654
+ txn.put(t, old, META, SUPERSEDED_BY, new)
1655
+ .put_u64(t, old, META, VALID_TO, valid_to);
1656
+ write_link(txn, t, new, old, LinkType::SUPERSEDES, 1.0);
1657
+ }
1658
+
1659
+ pub(crate) fn write_link(
1660
+ txn: &mut Transaction,
1661
+ t: &Table,
1662
+ from: &[u8],
1663
+ to: &[u8],
1664
+ ty: LinkType,
1665
+ w: f32,
1666
+ ) {
1667
+ let mut v = [0u8; 5];
1668
+ v[0] = ty.0;
1669
+ v[1..].copy_from_slice(&w.to_le_bytes());
1670
+ txn.put(t, from, LINKS, to, &v)
1671
+ .put(t, to, BACKLINKS, from, &v);
1672
+ }
1673
+
1674
+ fn read_link(q: &[u8], v: &[u8]) -> Result<Link> {
1675
+ let id = MemoryId::from_row(q).ok_or_else(|| corrupt("a link's key"))?;
1676
+ if v.len() != 5 {
1677
+ return Err(corrupt("a link's value"));
1678
+ }
1679
+ let w = f32::from_le_bytes(v[1..].try_into().expect("4"));
1680
+ Ok(Link {
1681
+ id,
1682
+ ty: LinkType(v[0]),
1683
+ weight: w,
1684
+ })
1685
+ }
1686
+
1687
+ fn element_code(e: Element) -> u8 {
1688
+ match e {
1689
+ Element::F16 => 1,
1690
+ Element::BF16 => 2,
1691
+ _ => 0,
1692
+ }
1693
+ }
1694
+
1695
+ fn element_from_code(c: u8) -> Option<Element> {
1696
+ Some(match c {
1697
+ 0 => Element::F32,
1698
+ 1 => Element::F16,
1699
+ 2 => Element::BF16,
1700
+ _ => return None,
1701
+ })
1702
+ }
1703
+
1704
+ /// A memory from its row.
1705
+ pub(crate) fn read_memory(id: MemoryId, row: &pigeonhole::Row) -> Result<Option<StoredMemory>> {
1706
+ let view = row.view();
1707
+ let Some(text) = view.get(CONTENT, TEXT) else {
1708
+ return Ok(None);
1709
+ };
1710
+ let text = std::str::from_utf8(text.value())
1711
+ .map_err(|_| corrupt("a memory's text"))?
1712
+ .to_owned();
1713
+ let kind = match view.get(META, KIND) {
1714
+ Some(c) => Kind::from_code(*c.value().first().ok_or_else(|| corrupt("a kind"))?)?,
1715
+ None => Kind::Episodic,
1716
+ };
1717
+ let importance = view
1718
+ .get(PEAK, IMPORTANCE)
1719
+ .and_then(|c| c.as_i64())
1720
+ .map_or(0.0, |p| p as f64 / PPM);
1721
+ let uses = view
1722
+ .get(STATS, USES)
1723
+ .and_then(|c| c.as_i64())
1724
+ .unwrap_or(0)
1725
+ .max(0) as u64;
1726
+ let last_used_us = view
1727
+ .get(PEAK, LAST_USED)
1728
+ .and_then(|c| c.as_i64())
1729
+ .map(|v| v.max(0) as u64);
1730
+ let session = view
1731
+ .get(META, SESSION)
1732
+ .map(|c| String::from_utf8_lossy(c.value()).into_owned());
1733
+ let pinned = view.get(META, PINNED).is_some();
1734
+ let consolidated = view.get(META, CONSOLIDATED).is_some();
1735
+ let summary = view.get(META, SUMMARY).is_some();
1736
+ let superseded_by = view
1737
+ .get(META, SUPERSEDED_BY)
1738
+ .map(|c| MemoryId::from_row(c.value()).ok_or_else(|| corrupt("superseded_by")))
1739
+ .transpose()?;
1740
+ let embedding = view
1741
+ .get(EMB, V)
1742
+ .and_then(|c| c.as_vector().and_then(|v| v.to_f32_vec()));
1743
+ let mut sources = Vec::new();
1744
+ let mut links = Vec::new();
1745
+ let mut backlinks = Vec::new();
1746
+ for e in view.iter() {
1747
+ match e.family {
1748
+ SOURCES => sources.push(Source {
1749
+ name: String::from_utf8_lossy(e.qualifier).into_owned(),
1750
+ at_us: e.cell.as_u64().unwrap_or(0),
1751
+ }),
1752
+ LINKS => links.push(read_link(e.qualifier, e.cell.value())?),
1753
+ BACKLINKS => backlinks.push(read_link(e.qualifier, e.cell.value())?),
1754
+ _ => {}
1755
+ }
1756
+ }
1757
+ Ok(Some(StoredMemory {
1758
+ id,
1759
+ text,
1760
+ kind,
1761
+ importance,
1762
+ uses,
1763
+ last_used_us,
1764
+ session,
1765
+ pinned,
1766
+ consolidated,
1767
+ summary,
1768
+ superseded_by,
1769
+ sources,
1770
+ links,
1771
+ backlinks,
1772
+ embedding,
1773
+ }))
1774
+ }
1775
+
1776
+ /// A link's weight: from 0 to 1 (NaN refused).
1777
+ fn check_weight(w: f32) -> Result<()> {
1778
+ if (0.0..=1.0).contains(&w) {
1779
+ Ok(())
1780
+ } else {
1781
+ Err(Error::InvalidArgument(format!(
1782
+ "a link's weight is from 0 to 1, not {w}"
1783
+ )))
1784
+ }
1785
+ }