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.
- checksums.yaml +7 -0
- data/Cargo.lock +899 -0
- data/Cargo.toml +45 -0
- data/LICENSE +21 -0
- data/README.md +22 -0
- data/extconf.rb +12 -0
- data/lib/pigeonhole/api.rb +615 -0
- data/lib/pigeonhole/index.rb +208 -0
- data/lib/pigeonhole/memory.rb +507 -0
- data/lib/pigeonhole/version.rb +6 -0
- data/lib/pigeonhole-db.rb +6 -0
- data/lib/pigeonhole.rb +47 -0
- data/sig/pigeonhole.rbs +1484 -0
- data/src/budget.rs +205 -0
- data/src/classes.rs +279 -0
- data/src/convert.rs +192 -0
- data/src/db.rs +685 -0
- data/src/error.rs +151 -0
- data/src/feed.rs +316 -0
- data/src/fork.rs +64 -0
- data/src/gvl.rs +112 -0
- data/src/index.rs +1157 -0
- data/src/lib.rs +534 -0
- data/src/memory.rs +2178 -0
- data/src/read.rs +312 -0
- data/src/table.rs +1161 -0
- data/src/vector.rs +262 -0
- data/src/walk.rs +406 -0
- data/vendor/bundle/ruby/3.4.0/bin/minitest +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rake +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rake-compiler +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rake-compiler-dock +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rb-sys-dock +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rbs +29 -0
- data/vendor/bundle/ruby/3.4.0/cache/drb-2.2.3.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/logger-1.7.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/minitest-6.0.6.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/prism-1.9.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rake-13.4.2.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-1.3.2.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-dock-1.12.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rb_sys-0.9.130.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rbs-4.2.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/toml-rb-6.0.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/tsort-0.2.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem.build_complete +0 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem_make.out +44 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/mkmf.log +74 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/prism/prism.so +0 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem.build_complete +0 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem_make.out +41 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/mkmf.log +102 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/rbs_extension.so +0 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/drb.gemspec +42 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/acl.rb +239 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/drb.rb +1993 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/eq.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extserv.rb +44 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extservm.rb +94 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/gw.rb +161 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/observer.rb +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/ssl.rb +354 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/timeridconv.rb +97 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/unix.rb +118 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/version.rb +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/weakidconv.rb +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb.rb +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/BSDL +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/COPYING +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/README.md +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/errors.rb +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/formatter.rb +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/log_device.rb +265 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/period.rb +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/severity.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/version.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger.rb +789 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/History.rdoc +1860 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Manifest.txt +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/README.rdoc +763 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Rakefile +89 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/bin/minitest +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/design_rationale.rb +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/hoe/minitest.rb +30 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/assertions.rb +821 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/autorun.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/benchmark.rb +452 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/bisect.rb +304 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/complete.rb +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/compress.rb +94 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/error_on_warning.rb +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/expectations.rb +321 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/find_minimal_combination.rb +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/hell.rb +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/manual_plugins.rb +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/parallel.rb +72 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/path_expander.rb +432 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride.rb +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride_plugin.rb +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server.rb +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server_plugin.rb +88 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/spec.rb +324 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint.rb +105 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint_plugin.rb +39 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test.rb +232 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test_task.rb +331 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest.rb +1232 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/metametameta.rb +150 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_bisect.rb +249 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_find_minimal_combination.rb +138 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_assertions.rb +1729 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_benchmark.rb +151 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_reporter.rb +437 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_spec.rb +1095 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test.rb +1295 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test_task.rb +57 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_path_expander.rb +229 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_server.rb +146 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/BSDmakefile +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CHANGELOG.md +786 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CODE_OF_CONDUCT.md +76 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CONTRIBUTING.md +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/LICENSE.md +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/Makefile +116 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/README.md +143 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/config.yml +4739 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/build_system.md +119 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/configuration.md +68 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/cruby_compilation.md +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/design.md +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/encoding.md +121 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/fuzzing.md +88 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/heredocs.md +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/javascript.md +118 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/local_variable_depth.md +229 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/mapping.md +117 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parser_translation.md +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parsing_rules.md +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/releasing.md +75 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/relocation.md +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ripper_translation.md +63 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_api.md +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_parser_translation.md +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/serialization.md +233 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/testing.md +55 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/Makefile +273 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_node.c +6945 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_pack.c +276 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extconf.rb +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.c +1427 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.h +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/ast.h +8254 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/defines.h +260 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/diagnostic.h +458 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/encoding.h +283 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/node.h +129 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/options.h +488 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/pack.h +163 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/parser.h +936 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/prettyprint.h +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/regexp.h +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/static_literals.h +121 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +236 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_char.h +204 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +218 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +130 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_list.h +103 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +113 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_string.h +200 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +32 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +46 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/version.h +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism.h +408 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/compiler.rb +801 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +392 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +2210 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +4767 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dsl.rb +1003 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/ffi.rb +578 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +2393 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +911 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +772 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node.rb +19966 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node_ext.rb +511 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pack.rb +230 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +188 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +66 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result.rb +907 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pattern.rb +269 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/reflection.rb +416 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/relocation.rb +505 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/serialize.rb +2400 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/string_query.rb +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +62 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +2234 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +820 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +376 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +126 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +3520 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +1964 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/visitor.rb +813 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism.rb +98 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/prism.gemspec +172 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +524 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node.rbi +8750 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +107 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +404 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +473 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism.rbi +63 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/compiler.rbs +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dsl.rbs +351 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +159 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node.rbs +4042 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +149 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pack.rbs +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +197 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pattern.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/reflection.rbs +50 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/relocation.rbs +185 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/serialize.rbs +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/string_query.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/visitor.rbs +169 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism.rbs +272 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/diagnostic.c +854 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/encoding.c +5340 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/node.c +8685 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/options.c +338 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/pack.c +509 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prettyprint.c +8957 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prism.c +22679 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/regexp.c +790 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/serialize.c +2274 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/static_literals.c +617 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/token_type.c +703 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_buffer.c +357 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_char.c +318 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +342 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_integer.c +670 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_list.c +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_memchr.c +35 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_newline_list.c +125 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_string.c +381 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +206 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/History.rdoc +2454 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/README.rdoc +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/exe/rake +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake.rb +69 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/rake.gemspec +102 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Gemfile +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/History.md +708 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/LICENSE.txt +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/README.md +505 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Rakefile +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/appveyor.yml +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/bin/rake-compiler +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/cucumber.yml +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/compile.feature +79 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-compile.feature +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package-multi.feature +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package.feature +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-compile.feature +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-no-native-compile.feature +33 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-package.feature +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/package.feature +40 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/compilation.rb +70 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/cross_compilation.rb +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/execution.rb +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/folders.rb +32 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/gem.rb +46 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/java_compilation.rb +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/env.rb +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/file_template_helpers.rb +137 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/generator_helpers.rb +123 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/platform_extension_helpers.rb +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/baseextensiontask.rb +90 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/compiler_config.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensioncompiler.rb +51 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensiontask.rb +621 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/javaextensiontask.rb +321 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bin/cross-ruby.rake +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bootstrap.rake +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/common.rake +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/cucumber.rake +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/gem.rake +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/rspec.rake +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
- 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
- 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
- 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
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
- 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
- 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
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
- 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
- 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
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-APACHE +190 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-MIT +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/README.md +42 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/certs/ianks.pem +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/exe/rb-sys-dock +495 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/config.rb +72 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/metadata.rb +158 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo.rb +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder/link_flag_converter.rb +37 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder.rb +370 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/error.rb +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/extensiontask.rb +188 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf/config.rb +75 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf.rb +413 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info/data.rb +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info.rb +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/util/logger.rb +73 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/version.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys.rb +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/BSDL +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/CHANGELOG.md +2463 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/COPYING +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Dockerfile.jruby +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/README.md +240 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Rakefile +1213 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Steepfile +55 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/config.yml +920 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/array.rbs +4205 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/basic_object.rbs +376 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/binding.rbs +148 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/builtin.rbs +278 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/class.rbs +223 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/comparable.rbs +192 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/complex.rbs +812 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/constants.rbs +96 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/data.rbs +415 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/dir.rbs +993 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/encoding.rbs +1368 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerable.rbs +2506 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/product.rbs +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator.rbs +705 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/env.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errno.rbs +682 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errors.rbs +789 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/exception.rbs +485 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/false_class.rbs +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber.rbs +570 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber_error.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file.rbs +2045 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_constants.rbs +463 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_stat.rbs +534 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_test.rbs +331 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/float.rbs +1292 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/gc.rbs +788 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/global_variables.rbs +184 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/hash.rbs +2183 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/integer.rbs +1374 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/buffer.rbs +995 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/wait.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io.rbs +3473 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/kernel.rbs +3172 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/marshal.rbs +207 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/match_data.rbs +637 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/math.rbs +770 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/method.rbs +422 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/module.rbs +1856 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/nil_class.rbs +210 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/numeric.rbs +832 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object.rbs +108 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space/weak_key_map.rbs +166 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space.rbs +197 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/pathname.rbs +1312 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/proc.rbs +905 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/process.rbs +2316 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ractor.rbs +914 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/random.rbs +255 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/range.rbs +1209 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rational.rbs +502 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rb_config.rbs +88 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/ops.rbs +154 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/argf.rbs +1236 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/env_class.rbs +1214 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/main_class.rbs +123 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/random.rbs +186 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/refinement.rbs +59 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/regexp.rbs +1974 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby.rbs +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby_vm.rbs +809 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/basic_specification.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/config_file.rbs +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/dependency_installer.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/errors.rbs +112 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/installer.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/path_support.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/platform.rbs +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/request_set.rbs +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/requirement.rbs +138 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/rubygems.rbs +1108 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/source_list.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/specification.rbs +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/stream_ui.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/uninstaller.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/version.rbs +133 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/set.rbs +751 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/signal.rbs +110 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/string.rbs +5532 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/struct.rbs +668 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/symbol.rbs +482 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread.rbs +1821 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread_group.rbs +79 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/time.rbs +1793 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/trace_point.rbs +483 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/true_class.rbs +98 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/unbound_method.rbs +337 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/warning.rbs +87 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/CONTRIBUTING.md +107 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/aliases.md +79 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/architecture.md +110 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/collection.md +192 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/config.md +171 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/data_and_struct.md +86 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/encoding.md +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/gem.md +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/inline.md +634 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rbs_by_example.md +309 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/release.md +303 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/repo.md +125 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rust.md +96 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/sigs.md +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/stdlib.md +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/syntax.md +952 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/tools.md +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/type_fingerprint.md +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/wasm_serialization.md +80 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/exe/rbs +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/Makefile +273 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.c +1870 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.h +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.c +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.h +105 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/compat.h +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/extconf.rb +40 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.c +299 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.h +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/main.c +649 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_extension.h +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.c +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.h +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/goodcheck.yml +91 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/ast.h +1055 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/defines.h +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/lexer.h +208 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/location.h +40 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/parser.h +187 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/serialize.h +39 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/string.h +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_allocator.h +59 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_assert.h +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_buffer.h +83 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_constant_pool.h +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_encoding.h +282 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_unescape.h +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs.h +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ancestor_graph.rb +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/annotations.rb +199 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/formatter.rb +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_annotator.rb +398 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_source.rb +131 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate.rb +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/annotation.rb +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/comment.rb +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/declarations.rb +472 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/directives.rb +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/members.rb +451 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/annotations.rb +451 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/comment_block.rb +247 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/declarations.rb +291 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/members.rb +762 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/type_param.rb +235 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/visitor.rb +137 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/buffer.rb +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/builtin_names.rb +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/colored_io.rb +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/diff.rb +84 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/validate.rb +294 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli.rb +1253 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/cleaner.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile.rb +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile_generator.rb +269 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config.rb +81 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/installer.rb +32 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/base.rb +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/git.rb +265 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/local.rb +81 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/rubygems.rb +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/stdlib.rb +50 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection.rb +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/constant.rb +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition.rb +415 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/ancestor_builder.rb +681 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/method_builder.rb +295 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder.rb +1057 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/diff.rb +131 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/class_entry.rb +81 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/module_entry.rb +91 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/use_map.rb +77 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment.rb +1028 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_loader.rb +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_walker.rb +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/errors.rb +634 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/factory.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/file_finder.rb +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser.rb +568 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/location_aux.rb +170 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/locator.rb +247 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/method_type.rb +145 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/namespace.rb +154 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/lex_result.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/token.rb +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser_aux.rb +144 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/helpers.rb +164 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/node_usage.rb +99 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rb.rb +816 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rbi.rb +793 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/reflection.rb +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/value_object_generator.rb +278 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime.rb +680 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/repository.rb +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/constant_resolver.rb +219 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/type_name_resolver.rb +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/rewriter.rb +70 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/sorter.rb +198 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/source.rb +99 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/substitution.rb +83 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/subtractor.rb +204 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/errors.rb +80 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/guaranteed.rb +30 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/hook.rb +212 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/observer.rb +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup.rb +84 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup_helper.rb +50 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/tester.rb +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/type_check.rb +457 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test.rb +112 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_dependency.rb +100 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_regularity.rb +126 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_name.rb +122 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/types.rb +1646 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/convertibles.rb +177 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/spy.rb +138 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/type_assertions.rb +383 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/with_aliases.rb +145 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test.rb +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/validator.rb +186 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/variance_calculator.rb +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/vendorer.rb +71 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/version.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/deserializer.rb +213 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/location.rb +61 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/parser.rb +174 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/runtime.rb +211 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/serialization_schema.rb +111 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/writer.rb +424 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs.rb +117 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_extension.so +0 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_jars.rb +39 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc/discover.rb +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc_plugin/parser.rb +168 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/rbs.gemspec +77 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/annotation.json +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/comment.json +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/decls.json +326 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/function.json +98 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/location.json +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/members.json +266 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/methodType.json +50 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/typeParam.json +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/types.json +317 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_builder.rbs +163 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_graph.rbs +60 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/annotations.rbs +102 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/formatter.rbs +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_annotater.rbs +85 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_source.rbs +32 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotation.rbs +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/annotations.rbs +470 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/comment_block.rbs +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/declarations.rbs +158 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/members.rbs +198 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/buffer.rbs +108 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/builtin_names.rbs +44 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/colored_io.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/diff.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/validate.rbs +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli.rbs +89 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/cleaner.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile.rbs +74 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile_generator.rbs +68 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config.rbs +46 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/installer.rbs +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/sources.rbs +214 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection.rbs +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/comment.rbs +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/constant.rbs +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/declarations.rbs +274 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition.rbs +232 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition_builder.rbs +181 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/diff.rbs +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/directives.rbs +77 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/class_entry.rbs +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/module_entry.rbs +65 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment.rbs +286 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_loader.rbs +111 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_walker.rbs +65 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/errors.rbs +408 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/factory.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/file_finder.rbs +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser/comment_association.rbs +71 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser.rbs +126 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/location.rbs +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/locator.rbs +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/manifest.yaml +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/members.rbs +258 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_builder.rbs +89 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_types.rbs +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/namespace.rbs +161 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/parser.rbs +164 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/helpers.rbs +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/node_usage.rbs +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rb.rbs +96 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rbi.rbs +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/runtime.rbs +182 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rbs.rbs +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rdoc/rbs.rbs +67 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/repository.rbs +85 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/constant_resolver.rbs +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/context.rbs +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/type_name_resolver.rbs +61 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rewriter.rbs +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/bundler.rbs +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/enumerable.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/rubygems.rbs +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/sorter.rbs +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/source.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/substitution.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/subtractor.rbs +37 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/errors.rbs +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/guranteed.rbs +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/type_check.rbs +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test.rbs +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_dependency.rbs +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_regularity.rbs +98 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_param.rbs +115 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/typename.rbs +89 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/types.rbs +588 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/convertibles.rbs +154 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/spy.rbs +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/type_assertions.rbs +211 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/with_aliases.rbs +136 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/use_map.rbs +35 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/util.rbs +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/validator.rbs +63 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/variance_calculator.rbs +87 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/vendorer.rbs +51 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/version.rbs +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/visitor.rbs +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/deserializer.rbs +66 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/serialization_schema.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/writer.rbs +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/ast.c +1644 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.c +3223 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.re +187 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexstate.c +222 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/location.c +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/parser.c +4318 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/serialize.c +965 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/string.c +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_allocator.c +171 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_assert.c +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_buffer.c +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_constant_pool.c +268 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_encoding.c +21454 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_unescape.c +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/abbrev.rbs +66 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/array.rbs +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/base64/0/base64.rbs +355 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/benchmark/0/benchmark.rbs +452 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/core.rbs +911 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/manifest.yaml +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/coverage/0/coverage.rbs +266 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/csv.rbs +3776 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date.rbs +1598 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date_time.rbs +617 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/time.rbs +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/dbm/0/dbm.rbs +421 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/delegator.rbs +188 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/kernel.rbs +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/simple_delegator.rbs +96 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/digest/0/digest.rbs +693 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/erb/0/erb.rbs +933 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/etc/0/etc.rbs +884 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/fileutils/0/fileutils.rbs +1753 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/find/0/find.rbs +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/forwardable/0/forwardable.rbs +271 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/io-console/0/io-console.rbs +414 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ipaddr/0/ipaddr.rbs +431 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/json/0/json.rbs +1963 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/kconv/0/kconv.rbs +166 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/formatter.rbs +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/log_device.rbs +100 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/logger.rbs +796 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/period.rbs +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/severity.rbs +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/kernel.rbs +42 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertion.rbs +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertions.rbs +590 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectation.rbs +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectations.rbs +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/guard.rbs +64 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/mock.rbs +64 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel.rbs +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reportable.rbs +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reporter.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/result.rbs +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/runnable.rbs +163 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/skip.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test.rbs +69 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit.rbs +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest.rbs +115 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/monitor/0/monitor.rbs +363 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/mutex_m/0/mutex_m.rbs +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/net-http.rbs +5580 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/net-smtp.rbs +55 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/nkf/0/nkf.rbs +402 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/objspace/0/objspace.rbs +470 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/observable/0/observable.rbs +217 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/manifest.yaml +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/open-uri.rbs +433 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open3/0/open3.rbs +606 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/openssl.rbs +12237 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/optparse/0/optparse.rbs +1734 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pathname/0/pathname.rbs +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/pp.rbs +301 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/prettyprint/0/prettyprint.rbs +383 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pstore/0/pstore.rbs +608 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/core_ext.rbs +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/dbm.rbs +237 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/psych.rbs +455 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/store.rbs +57 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pty/0/pty.rbs +240 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/code_object.rbs +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/comment.rbs +61 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/context.rbs +153 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/markup.rbs +117 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/options.rbs +76 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/parser.rbs +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/rdoc.rbs +393 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/ri.rbs +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/store.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/top_level.rbs +97 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/resolv.rbs +1787 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ripper/0/ripper.rbs +1654 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/securerandom.rbs +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/shellwords/0/shellwords.rbs +229 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/singleton/0/singleton.rbs +137 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/addrinfo.rbs +666 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/basic_socket.rbs +590 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/constants.rbs +2295 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/ip_socket.rbs +94 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket.rbs +4170 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket_error.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_server.rbs +192 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_socket.rbs +87 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/udp_socket.rbs +133 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_server.rbs +169 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_socket.rbs +172 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/stringio/0/stringio.rbs +1682 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/strscan/0/string_scanner.rbs +1648 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/tempfile.rbs +483 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/time/0/time.rbs +434 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/timeout/0/timeout.rbs +132 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tmpdir/0/tmpdir.rbs +69 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/cyclic.rbs +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/interfaces.rbs +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/tsort.rbs +410 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/common.rbs +621 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/file.rbs +118 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ftp.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/generic.rbs +1111 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/http.rbs +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/https.rbs +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldap.rbs +230 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldaps.rbs +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/mailto.rbs +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc2396_parser.rbs +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc3986_parser.rbs +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ws.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/wss.rbs +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/yaml.rbs +1 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/buf_error.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/data_error.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/deflate.rbs +211 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/error.rbs +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/error.rbs +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file.rbs +156 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_reader.rbs +293 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_writer.rbs +169 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/inflate.rbs +180 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/mem_error.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/need_dict.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_end.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_error.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/version_error.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zlib.rbs +449 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zstream.rbs +200 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/README.md +109 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/rbs_wasm.c +479 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/LICENSE +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/README.md +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/datetime.rb +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/dumper.rb +182 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/errors.rb +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/inline_table.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/keyvalue.rb +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/parser.rb +296 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/string.rb +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table.rb +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table_array.rb +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/version.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb.rb +90 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Gemfile +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/README.md +72 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Rakefile +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/console +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/setup +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb +455 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/tsort.gemspec +29 -0
- data/vendor/bundle/ruby/3.4.0/specifications/drb-2.2.3.gemspec +22 -0
- data/vendor/bundle/ruby/3.4.0/specifications/logger-1.7.0.gemspec +22 -0
- data/vendor/bundle/ruby/3.4.0/specifications/minitest-6.0.6.gemspec +35 -0
- data/vendor/bundle/ruby/3.4.0/specifications/prism-1.9.0.gemspec +24 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rake-13.4.2.gemspec +26 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-1.3.2.gemspec +33 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rb_sys-0.9.130.gemspec +29 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rbs-4.2.0.gemspec +33 -0
- data/vendor/bundle/ruby/3.4.0/specifications/toml-rb-6.0.0.gemspec +27 -0
- data/vendor/bundle/ruby/3.4.0/specifications/tsort-0.2.0.gemspec +23 -0
- data/vendor/cache/Cargo.toml +21 -0
- data/vendor/cache/LICENSE +21 -0
- data/vendor/cache/README.md +5 -0
- data/vendor/cache/src/hash.rs +85 -0
- data/vendor/cache/src/lib.rs +751 -0
- data/vendor/cache/src/loom_tests.rs +340 -0
- data/vendor/cache/src/s3fifo.rs +648 -0
- data/vendor/cache/src/sync.rs +25 -0
- data/vendor/cache/src/tests.rs +260 -0
- data/vendor/compaction/Cargo.toml +32 -0
- data/vendor/compaction/LICENSE +21 -0
- data/vendor/compaction/README.md +5 -0
- data/vendor/compaction/src/blob.rs +478 -0
- data/vendor/compaction/src/cursor.rs +700 -0
- data/vendor/compaction/src/gc.rs +802 -0
- data/vendor/compaction/src/job.rs +861 -0
- data/vendor/compaction/src/lib.rs +102 -0
- data/vendor/compaction/src/merge.rs +995 -0
- data/vendor/compaction/src/picker.rs +681 -0
- data/vendor/compaction/src/resolver.rs +1346 -0
- data/vendor/engine/Cargo.toml +56 -0
- data/vendor/engine/LICENSE +21 -0
- data/vendor/engine/README.md +5 -0
- data/vendor/engine/src/admission.rs +421 -0
- data/vendor/engine/src/catalog.rs +1233 -0
- data/vendor/engine/src/check.rs +1386 -0
- data/vendor/engine/src/clock.rs +244 -0
- data/vendor/engine/src/clock_loom.rs +482 -0
- data/vendor/engine/src/close_gate.rs +325 -0
- data/vendor/engine/src/compact.rs +1509 -0
- data/vendor/engine/src/engine/hooks.rs +1654 -0
- data/vendor/engine/src/engine/info.rs +229 -0
- data/vendor/engine/src/engine.rs +6114 -0
- data/vendor/engine/src/error.rs +490 -0
- data/vendor/engine/src/feed.rs +960 -0
- data/vendor/engine/src/feed_reader.rs +1600 -0
- data/vendor/engine/src/flush.rs +839 -0
- data/vendor/engine/src/flushed_roots.rs +158 -0
- data/vendor/engine/src/flushed_through_loom.rs +77 -0
- data/vendor/engine/src/health.rs +201 -0
- data/vendor/engine/src/large.rs +372 -0
- data/vendor/engine/src/large_settle.rs +201 -0
- data/vendor/engine/src/lib.rs +112 -0
- data/vendor/engine/src/load_slot.rs +324 -0
- data/vendor/engine/src/maintenance.rs +935 -0
- data/vendor/engine/src/manifest/flight.rs +563 -0
- data/vendor/engine/src/manifest.rs +1516 -0
- data/vendor/engine/src/nonblocking.rs +603 -0
- data/vendor/engine/src/options.rs +334 -0
- data/vendor/engine/src/position.rs +125 -0
- data/vendor/engine/src/purge_guard.rs +220 -0
- data/vendor/engine/src/read/keys.rs +1049 -0
- data/vendor/engine/src/read/knn.rs +423 -0
- data/vendor/engine/src/read/reduce.rs +2057 -0
- data/vendor/engine/src/read/traverse.rs +1013 -0
- data/vendor/engine/src/read.rs +2429 -0
- data/vendor/engine/src/row_cache.rs +1101 -0
- data/vendor/engine/src/shard/tablets.rs +3582 -0
- data/vendor/engine/src/shard.rs +12215 -0
- data/vendor/engine/src/snapshot.rs +1429 -0
- data/vendor/engine/src/source.rs +1379 -0
- data/vendor/engine/src/timer_state.rs +226 -0
- data/vendor/engine/src/waker.rs +124 -0
- data/vendor/engine/src/watermark_waiters.rs +674 -0
- data/vendor/engine/src/write.rs +1321 -0
- data/vendor/format/Cargo.toml +40 -0
- data/vendor/format/LICENSE +21 -0
- data/vendor/format/README.md +5 -0
- data/vendor/format/src/blob.rs +101 -0
- data/vendor/format/src/block.rs +1120 -0
- data/vendor/format/src/bloom.rs +456 -0
- data/vendor/format/src/buckets.rs +552 -0
- data/vendor/format/src/bytes.rs +101 -0
- data/vendor/format/src/checksum.rs +132 -0
- data/vendor/format/src/compress.rs +196 -0
- data/vendor/format/src/cursor.rs +110 -0
- data/vendor/format/src/distance.rs +598 -0
- data/vendor/format/src/error.rs +93 -0
- data/vendor/format/src/exact.rs +602 -0
- data/vendor/format/src/feed.rs +285 -0
- data/vendor/format/src/filter.rs +157 -0
- data/vendor/format/src/half.rs +182 -0
- data/vendor/format/src/hash.rs +127 -0
- data/vendor/format/src/hll.rs +500 -0
- data/vendor/format/src/ids.rs +95 -0
- data/vendor/format/src/key.rs +620 -0
- data/vendor/format/src/kind_params.rs +101 -0
- data/vendor/format/src/lib.rs +54 -0
- data/vendor/format/src/manifest.rs +1287 -0
- data/vendor/format/src/roaring.rs +865 -0
- data/vendor/format/src/scan.rs +297 -0
- data/vendor/format/src/shm.rs +805 -0
- data/vendor/format/src/sst.rs +233 -0
- data/vendor/format/src/superblock.rs +345 -0
- data/vendor/format/src/value.rs +163 -0
- data/vendor/format/src/varint.rs +87 -0
- data/vendor/format/src/vector.rs +936 -0
- data/vendor/format/src/version.rs +92 -0
- data/vendor/format/src/wal.rs +999 -0
- data/vendor/io/Cargo.toml +29 -0
- data/vendor/io/LICENSE +21 -0
- data/vendor/io/README.md +5 -0
- data/vendor/io/src/async_poll.rs +44 -0
- data/vendor/io/src/buf.rs +694 -0
- data/vendor/io/src/completion.rs +444 -0
- data/vendor/io/src/error.rs +110 -0
- data/vendor/io/src/file.rs +206 -0
- data/vendor/io/src/lib.rs +53 -0
- data/vendor/io/src/nowait.rs +256 -0
- data/vendor/io/src/os/mod.rs +149 -0
- data/vendor/io/src/os/unix.rs +897 -0
- data/vendor/io/src/os/windows.rs +552 -0
- data/vendor/io/src/own.rs +257 -0
- data/vendor/io/src/pread.rs +854 -0
- data/vendor/io/src/ring_wake.rs +113 -0
- data/vendor/io/src/shared.rs +410 -0
- data/vendor/io/src/sim.rs +1545 -0
- data/vendor/io/src/sys.rs +214 -0
- data/vendor/io/src/uring.rs +1839 -0
- data/vendor/io/src/vfs.rs +154 -0
- data/vendor/memory/Cargo.toml +34 -0
- data/vendor/memory/LICENSE +21 -0
- data/vendor/memory/README.md +11 -0
- data/vendor/memory/src/consolidate.rs +640 -0
- data/vendor/memory/src/dedup.rs +231 -0
- data/vendor/memory/src/error.rs +131 -0
- data/vendor/memory/src/feed_loop.rs +572 -0
- data/vendor/memory/src/forget.rs +724 -0
- data/vendor/memory/src/hooks.rs +109 -0
- data/vendor/memory/src/ivf.rs +204 -0
- data/vendor/memory/src/layout.rs +340 -0
- data/vendor/memory/src/lib.rs +61 -0
- data/vendor/memory/src/recall.rs +1182 -0
- data/vendor/memory/src/store.rs +1785 -0
- data/vendor/memory/src/watch.rs +339 -0
- data/vendor/memtable/Cargo.toml +24 -0
- data/vendor/memtable/LICENSE +21 -0
- data/vendor/memtable/README.md +5 -0
- data/vendor/memtable/src/lib.rs +1658 -0
- data/vendor/memtable/src/loom_tests.rs +274 -0
- data/vendor/memtable/src/mem.rs +344 -0
- data/vendor/memtable/src/tests.rs +1061 -0
- data/vendor/pager/Cargo.toml +23 -0
- data/vendor/pager/LICENSE +21 -0
- data/vendor/pager/README.md +5 -0
- data/vendor/pager/src/alloc.rs +1008 -0
- data/vendor/pager/src/lib.rs +1710 -0
- data/vendor/pigeonhole/Cargo.toml +42 -0
- data/vendor/pigeonhole/LICENSE +21 -0
- data/vendor/pigeonhole/README.md +99 -0
- data/vendor/pigeonhole/src/cell.rs +829 -0
- data/vendor/pigeonhole/src/check.rs +368 -0
- data/vendor/pigeonhole/src/db.rs +2324 -0
- data/vendor/pigeonhole/src/doc_support.rs +89 -0
- data/vendor/pigeonhole/src/error.rs +257 -0
- data/vendor/pigeonhole/src/feed.rs +696 -0
- data/vendor/pigeonhole/src/info.rs +425 -0
- data/vendor/pigeonhole/src/lib.rs +202 -0
- data/vendor/pigeonhole/src/merge.rs +135 -0
- data/vendor/pigeonhole/src/metrics.rs +476 -0
- data/vendor/pigeonhole/src/nonblocking.rs +666 -0
- data/vendor/pigeonhole/src/options.rs +2075 -0
- data/vendor/pigeonhole/src/read/budget.rs +584 -0
- data/vendor/pigeonhole/src/read.rs +2463 -0
- data/vendor/pigeonhole/src/recovery.rs +876 -0
- data/vendor/pigeonhole/src/retry.rs +358 -0
- data/vendor/pigeonhole/src/set.rs +103 -0
- data/vendor/pigeonhole/src/table.rs +861 -0
- data/vendor/pigeonhole/src/vector.rs +351 -0
- data/vendor/pigeonhole/src/write.rs +2815 -0
- data/vendor/runtime/Cargo.toml +21 -0
- data/vendor/runtime/LICENSE +21 -0
- data/vendor/runtime/README.md +5 -0
- data/vendor/runtime/src/completion.rs +629 -0
- data/vendor/runtime/src/drivers.rs +1175 -0
- data/vendor/runtime/src/lib.rs +1546 -0
- data/vendor/runtime/src/pool.rs +992 -0
- data/vendor/runtime/src/sched.rs +809 -0
- data/vendor/runtime/src/signal.rs +532 -0
- data/vendor/runtime/src/submit_gate.rs +144 -0
- data/vendor/shm/Cargo.toml +24 -0
- data/vendor/shm/LICENSE +21 -0
- data/vendor/shm/README.md +5 -0
- data/vendor/shm/src/lib.rs +427 -0
- data/vendor/shm/src/lock.rs +153 -0
- data/vendor/shm/src/region.rs +1609 -0
- data/vendor/sst/Cargo.toml +26 -0
- data/vendor/sst/LICENSE +21 -0
- data/vendor/sst/README.md +5 -0
- data/vendor/sst/src/blob.rs +380 -0
- data/vendor/sst/src/iter.rs +803 -0
- data/vendor/sst/src/lib.rs +695 -0
- data/vendor/sst/src/reader.rs +814 -0
- data/vendor/sst/src/writer.rs +596 -0
- data/vendor/text/Cargo.toml +26 -0
- data/vendor/text/LICENSE +21 -0
- data/vendor/text/README.md +9 -0
- data/vendor/text/src/error.rs +108 -0
- data/vendor/text/src/fuzzy.rs +265 -0
- data/vendor/text/src/highlight.rs +236 -0
- data/vendor/text/src/index.rs +1152 -0
- data/vendor/text/src/layout.rs +424 -0
- data/vendor/text/src/lib.rs +75 -0
- data/vendor/text/src/maxscore.rs +658 -0
- data/vendor/text/src/query.rs +450 -0
- data/vendor/text/src/search.rs +569 -0
- data/vendor/text/src/sloppy.rs +460 -0
- data/vendor/text/src/tokenizer.rs +163 -0
- data/vendor/vector/Cargo.toml +28 -0
- data/vendor/vector/LICENSE +21 -0
- data/vendor/vector/README.md +9 -0
- data/vendor/vector/src/error.rs +63 -0
- data/vendor/vector/src/half.rs +167 -0
- data/vendor/vector/src/hooks.rs +135 -0
- data/vendor/vector/src/index.rs +2690 -0
- data/vendor/vector/src/layout.rs +102 -0
- data/vendor/vector/src/lib.rs +52 -0
- data/vendor/vector/src/point.rs +500 -0
- data/vendor/vector/src/rebalancer.rs +200 -0
- data/vendor/vector/src/registry.rs +81 -0
- data/vendor/wal/Cargo.toml +25 -0
- data/vendor/wal/LICENSE +21 -0
- data/vendor/wal/README.md +5 -0
- data/vendor/wal/src/feed.rs +610 -0
- data/vendor/wal/src/foreground.rs +122 -0
- data/vendor/wal/src/lib.rs +458 -0
- data/vendor/wal/src/mem.rs +166 -0
- data/vendor/wal/src/recovery.rs +426 -0
- data/vendor/wal/src/stream.rs +2382 -0
- 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
|
+
}
|